diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index 438ef1967..842b7c882 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -1,18 +1,19 @@ -import { FilterlistTable, Filterlist } from "@/components/filterlist-table"; +import { FilterListTable } from "@/components/filterlist-table"; +import { columns, FilterList } from "@/components/filterlist-table/columns"; -const getFilterlists = async (): Promise => { - const res = await fetch("https://api.filterlists.com/lists", { +async function getFilterLists(): Promise { + const filterLists = await fetch("https://api.filterlists.com/lists", { next: { revalidate: 86400 }, }); - if (!res.ok) throw new Error("Failed to fetch lists"); - return res.json(); -}; + return await filterLists.json(); +} export default async function Home() { - const filterlists = await getFilterlists(); + const filterLists = await getFilterLists(); + return (
- +
); } diff --git a/web/src/components/filterlist-table/columns.tsx b/web/src/components/filterlist-table/columns.tsx new file mode 100644 index 000000000..e0f955404 --- /dev/null +++ b/web/src/components/filterlist-table/columns.tsx @@ -0,0 +1,15 @@ +"use client"; + +import { ColumnDef } from "@tanstack/react-table"; + +export type FilterList = { + name: string; +}; + +export const columns: ColumnDef[] = [ + { + accessorKey: "name", + header: "Name", + cell: (info) => info.getValue(), + }, +]; diff --git a/web/src/components/filterlist-table/index.tsx b/web/src/components/filterlist-table/index.tsx index 0e002ac69..2b9bc12fa 100644 --- a/web/src/components/filterlist-table/index.tsx +++ b/web/src/components/filterlist-table/index.tsx @@ -2,10 +2,11 @@ import * as React from "react"; import { - ColumnDef, useReactTable, getCoreRowModel, + getPaginationRowModel, flexRender, + ColumnDef, } from "@tanstack/react-table"; import { Table, @@ -16,38 +17,19 @@ import { TableRow, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; +import { FilterList } from "./columns"; -export type Filterlist = { - id: number; - name: string; -}; - -interface FilterlistTableProps { - filterlists: Filterlist[]; +interface FilterListTableProps { + columns: ColumnDef[]; + data: FilterList[]; } -const columns: ColumnDef[] = [ - { - accessorKey: "name", - header: "Name", - cell: (info) => info.getValue(), - }, -]; - -export function FilterlistTable({ filterlists }: FilterlistTableProps) { - const [page, setPage] = React.useState(0); - const pageSize = 10; - const pageCount = Math.ceil(filterlists.length / pageSize); - - const pagedData = React.useMemo( - () => filterlists.slice(page * pageSize, (page + 1) * pageSize), - [filterlists, page, pageSize], - ); - +export function FilterListTable({ columns, data }: FilterListTableProps) { const table = useReactTable({ - data: pagedData, + data, columns, getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), }); return ( @@ -83,19 +65,20 @@ export function FilterlistTable({ filterlists }: FilterlistTableProps) { - Page {page + 1} of {pageCount} + Page {table.getState().pagination.pageIndex + 1} of{" "} + {table.getPageCount()}