MCPcopy Create free account
hub / github.com/mantinedev/ui.mantine.dev / TableSort

Function TableSort

lib/TableSort/TableSort.tsx:158–236  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

156];
157
158export function TableSort() {
159 const [search, setSearch] = useState('');
160 const [sortedData, setSortedData] = useState(data);
161 const [sortBy, setSortBy] = useState<keyof RowData | null>(null);
162 const [reverseSortDirection, setReverseSortDirection] = useState(false);
163
164 const setSorting = (field: keyof RowData) => {
165 const reversed = field === sortBy ? !reverseSortDirection : false;
166 setReverseSortDirection(reversed);
167 setSortBy(field);
168 setSortedData(sortData(data, { sortBy: field, reversed, search }));
169 };
170
171 const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {
172 const { value } = event.currentTarget;
173 setSearch(value);
174 setSortedData(sortData(data, { sortBy, reversed: reverseSortDirection, search: value }));
175 };
176
177 const rows = sortedData.map((row) => (
178 <Table.Tr key={row.name}>
179 <Table.Td>{row.name}</Table.Td>
180 <Table.Td>{row.email}</Table.Td>
181 <Table.Td>{row.company}</Table.Td>
182 </Table.Tr>
183 ));
184
185 return (
186 <ScrollArea>
187 <TextInput
188 placeholder="Search by any field"
189 mb="md"
190 leftSection={<IconSearch size={16} stroke={1.5} />}
191 value={search}
192 onChange={handleSearchChange}
193 />
194 <Table horizontalSpacing="md" verticalSpacing="xs" miw={700} layout="fixed">
195 <Table.Tbody>
196 <Table.Tr>
197 <Th
198 sorted={sortBy === 'name'}
199 reversed={reverseSortDirection}
200 onSort={() => setSorting('name')}
201 >
202 Name
203 </Th>
204 <Th
205 sorted={sortBy === 'email'}
206 reversed={reverseSortDirection}
207 onSort={() => setSorting('email')}
208 >
209 Email
210 </Th>
211 <Th
212 sorted={sortBy === 'company'}
213 reversed={reverseSortDirection}
214 onSort={() => setSorting('company')}
215 >

Callers

nothing calls this directly

Calls 1

setSortingFunction · 0.85

Tested by

no test coverage detected