()
| 92 | let hideOnScroll = typeof document !== 'undefined' ? document.getElementById('hideOnScroll') : null; |
| 93 | |
| 94 | export function ExampleApp(): React.ReactNode { |
| 95 | let [sortDescriptor, setSortDescriptor] = useState<SortDescriptor>({ |
| 96 | column: 'common_name', |
| 97 | direction: 'ascending' |
| 98 | }); |
| 99 | |
| 100 | let [allItems, setAllItems] = useState<Plant[]>(() => |
| 101 | plants.map(p => ({...p, isFavorite: false})) |
| 102 | ); |
| 103 | let [search, setSearch] = useState(''); |
| 104 | let [favorite, setFavorite] = useState(false); |
| 105 | let [cycles, setCycles] = useState<Selection>(new Set()); |
| 106 | let [sunlight, setSunlight] = useState<Selection>(new Set()); |
| 107 | let [watering, setWatering] = useState<Selection>(new Set()); |
| 108 | |
| 109 | let {contains} = useFilter({sensitivity: 'base'}); |
| 110 | let collator = useCollator(); |
| 111 | let dir = sortDescriptor.direction === 'descending' ? -1 : 1; |
| 112 | let items = allItems |
| 113 | .filter( |
| 114 | item => |
| 115 | (contains(item.common_name, search) || contains(item.scientific_name.join(''), search)) && |
| 116 | (!favorite || item.isFavorite) && |
| 117 | (cycles === 'all' || cycles.size === 0 || cycles.has(item.cycle)) && |
| 118 | (sunlight === 'all' || sunlight.size === 0 || sunlight.has(getSunlight(item))) && |
| 119 | (watering === 'all' || watering.size === 0 || watering.has(item.watering)) |
| 120 | ) |
| 121 | .sort( |
| 122 | (a: any, b: any) => |
| 123 | collator.compare(a[sortDescriptor.column!], b[sortDescriptor.column!]) * dir |
| 124 | ); |
| 125 | |
| 126 | let [visibleColumns, setVisibleColumns] = useState<Selection>( |
| 127 | new Set(['favorite', 'common_name', 'sunlight', 'watering', 'actions']) |
| 128 | ); |
| 129 | let columns = useMemo(() => { |
| 130 | let res = allColumns.filter(c => visibleColumns === 'all' || visibleColumns.has(c.id!)); |
| 131 | res[1] = {...res[1], isRowHeader: true}; |
| 132 | return res; |
| 133 | }, [visibleColumns]); |
| 134 | |
| 135 | let filters = 0; |
| 136 | if (favorite) { |
| 137 | filters++; |
| 138 | } |
| 139 | if (cycles !== 'all') { |
| 140 | filters += cycles.size; |
| 141 | } |
| 142 | if (sunlight !== 'all') { |
| 143 | filters += sunlight.size; |
| 144 | } |
| 145 | if (watering !== 'all') { |
| 146 | filters += watering.size; |
| 147 | } |
| 148 | |
| 149 | let clearFilters = () => { |
| 150 | setFavorite(false); |
| 151 | setCycles(new Set()); |
nothing calls this directly
no test coverage detected