From 780e6a4766d36e332f37af2e0eb5d64ee9a1967d Mon Sep 17 00:00:00 2001 From: Marco Beretta <81851188+berry-13@users.noreply.github.com> Date: Tue, 9 Sep 2025 23:48:40 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Update=20DataTable=20compon?= =?UTF-8?q?ent=20to=20streamline=20props=20and=20enhance=20sorting=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SettingsTabs/General/ArchivedChats.tsx | 4 +- packages/client/src/components/DataTable.tsx | 90 +++++++++++-------- 2 files changed, 54 insertions(+), 40 deletions(-) diff --git a/client/src/components/Nav/SettingsTabs/General/ArchivedChats.tsx b/client/src/components/Nav/SettingsTabs/General/ArchivedChats.tsx index 588b7c0712..8bd569d8c6 100644 --- a/client/src/components/Nav/SettingsTabs/General/ArchivedChats.tsx +++ b/client/src/components/Nav/SettingsTabs/General/ArchivedChats.tsx @@ -287,15 +287,15 @@ export default function ArchivedChatsTable() { { - columns: TableColumn[]; - data: TData[]; - onDelete?: (selectedRows: TData[]) => Promise; - filterColumn?: string; - defaultSort?: SortingState; - columnVisibilityMap?: Record; - className?: string; - pageSize?: number; - isFetchingNextPage?: boolean; - hasNextPage?: boolean; - fetchNextPage?: (options?: unknown) => Promise; - enableRowSelection?: boolean; - showCheckboxes?: boolean; - onFilterChange?: (value: string) => void; - filterValue?: string; - isLoading?: boolean; - enableSearch?: boolean; -} - const TableRowComponent = ({ row, isSmallScreen, @@ -186,33 +166,63 @@ const DeleteButton = memo( }, ); +interface DataTableProps { + columns: TableColumn[]; + data: TData[]; + + className?: string; + isLoading?: boolean; + + enableRowSelection?: boolean; + showCheckboxes?: boolean; + onDelete?: (selectedRows: TData[]) => Promise; + + enableSearch?: boolean; + filterColumn?: string; + filterValue?: string; + onFilterChange?: (value: string) => void; + + defaultSort?: SortingState; + columnVisibilityMap?: Record; + + pageSize?: number; + isFetchingNextPage?: boolean; + hasNextPage?: boolean; + fetchNextPage?: (options?: unknown) => Promise; +} + export default function DataTable({ columns, data, - onDelete, - filterColumn, - defaultSort = [], + className = '', + isLoading, + + enableRowSelection = true, + showCheckboxes = true, + onDelete, + + enableSearch = true, + filterColumn, + filterValue, + onFilterChange, + + defaultSort = [], + isFetchingNextPage = false, hasNextPage = false, fetchNextPage, - enableRowSelection = true, - showCheckboxes = true, - onFilterChange, - filterValue, - isLoading, - enableSearch = true, }: DataTableProps) { const isSmallScreen = useMediaQuery('(max-width: 768px)'); const tableContainerRef = useRef(null); - const [isDeleting, setIsDeleting] = useState(false); - const [rowSelection, setRowSelection] = useState>({}); - const [sorting, setSorting] = useState(defaultSort); const [columnFilters, setColumnFilters] = useState([]); const [columnVisibility, setColumnVisibility] = useState({}); - const [searchTerm, setSearchTerm] = useState(filterValue ?? ''); + const [isDeleting, setIsDeleting] = useState(false); const [isSearching, setIsSearching] = useState(false); + const [rowSelection, setRowSelection] = useState>({}); + const [searchTerm, setSearchTerm] = useState(filterValue ?? ''); + const [sorting, setSorting] = useState(defaultSort); const tableColumns = useMemo(() => { if (!enableRowSelection || !showCheckboxes) { @@ -408,12 +418,16 @@ export default function DataTable({ : flexRender(header.column.columnDef.header, header.getContext())} {canSort && ( - + {sortDir === false && ( - + + )} + {sortDir === 'asc' && ( + + )} + {sortDir === 'desc' && ( + )} - {sortDir === 'asc' && } - {sortDir === 'desc' && } )}