diff options
author | LASER-Yi <[email protected]> | 2022-06-02 20:01:50 +0800 |
---|---|---|
committer | LASER-Yi <[email protected]> | 2022-06-02 20:01:50 +0800 |
commit | 182b125a9e3c2e4a793994c10634ca486882c404 (patch) | |
tree | 574e2c610c6d383fa67f56c3074d935dfebba31a | |
parent | 47f22d8753d5193dae8112e4a2a3a5b00ef35f16 (diff) | |
download | bazarr-182b125a9e3c2e4a793994c10634ca486882c404.tar.gz bazarr-182b125a9e3c2e4a793994c10634ca486882c404.zip |
Fix table issues
-rw-r--r-- | frontend/src/components/tables/BaseTable.tsx | 6 | ||||
-rw-r--r-- | frontend/src/components/tables/PageTable.tsx | 46 |
2 files changed, 32 insertions, 20 deletions
diff --git a/frontend/src/components/tables/BaseTable.tsx b/frontend/src/components/tables/BaseTable.tsx index a3ba1a2f3..d378d6f56 100644 --- a/frontend/src/components/tables/BaseTable.tsx +++ b/frontend/src/components/tables/BaseTable.tsx @@ -55,7 +55,8 @@ function DefaultRowRenderer<T extends object>(row: Row<T>): JSX.Element | null { export default function BaseTable<T extends object>(props: BaseTableProps<T>) { const { headerGroups, - rows, + rows: tableRows, + page: tablePages, prepareRow, getTableProps, getTableBodyProps, @@ -74,6 +75,9 @@ export default function BaseTable<T extends object>(props: BaseTableProps<T>) { ); }, [headerGroups]); + // Switch to usePagination plugin if enabled + const rows = tablePages ?? tableRows; + const empty = rows.length === 0; const [pageSize] = usePageSize(); diff --git a/frontend/src/components/tables/PageTable.tsx b/frontend/src/components/tables/PageTable.tsx index 0df1959e4..bc43b25e0 100644 --- a/frontend/src/components/tables/PageTable.tsx +++ b/frontend/src/components/tables/PageTable.tsx @@ -1,9 +1,10 @@ import { ScrollToTop } from "@/utilities"; -import { useEffect, useRef } from "react"; -import { TableInstance, usePagination } from "react-table"; +import { useEffect } from "react"; +import { usePagination, useTable } from "react-table"; +import BaseTable from "./BaseTable"; import PageControl from "./PageControl"; import { useDefaultSettings } from "./plugins"; -import SimpleTable, { SimpleTableProps } from "./SimpleTable"; +import { SimpleTableProps } from "./SimpleTable"; type Props<T extends object> = SimpleTableProps<T> & { autoScroll?: boolean; @@ -12,33 +13,40 @@ type Props<T extends object> = SimpleTableProps<T> & { const tablePlugins = [useDefaultSettings, usePagination]; export default function PageTable<T extends object>(props: Props<T>) { - const { autoScroll, plugins, ...remain } = props; + const { autoScroll = true, plugins, instanceRef, ...options } = props; - const instance = useRef<TableInstance<T> | null>(null); + const instance = useTable( + options, + useDefaultSettings, + ...tablePlugins, + ...(plugins ?? []) + ); + + if (instanceRef) { + instanceRef.current = instance; + } // Scroll to top when page is changed useEffect(() => { if (autoScroll) { ScrollToTop(); } - }, [instance.current?.state.pageIndex, autoScroll]); + }, [instance.state.pageIndex, autoScroll]); return ( <> - <SimpleTable - {...remain} - instanceRef={instance} + <BaseTable + {...options} + {...instance} plugins={[...tablePlugins, ...(plugins ?? [])]} - ></SimpleTable> - {instance.current && ( - <PageControl - count={instance.current.pageCount} - index={instance.current.state.pageIndex} - size={instance.current.state.pageSize} - total={instance.current.rows.length} - goto={instance.current.gotoPage} - ></PageControl> - )} + ></BaseTable> + <PageControl + count={instance.pageCount} + index={instance.state.pageIndex} + size={instance.state.pageSize} + total={instance.rows.length} + goto={instance.gotoPage} + ></PageControl> </> ); } |