MCPcopy Index your code
hub / github.com/adobe/react-spectrum / ExampleApp

Function ExampleApp

packages/dev/docs/pages/react-aria/home/ExampleApp.tsx:94–541  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

92let hideOnScroll = typeof document !== 'undefined' ? document.getElementById('hideOnScroll') : null;
93
94export 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());

Callers

nothing calls this directly

Calls 10

useFilterFunction · 0.90
useCollatorFunction · 0.90
useMediaQueryFunction · 0.90
toggleFavoriteFunction · 0.85
getSunlightFunction · 0.70
onActionFunction · 0.70
sortMethod · 0.65
filterMethod · 0.65
hasMethod · 0.65
compareMethod · 0.45

Tested by

no test coverage detected