diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 000000000..430ab1a1a Binary files /dev/null and b/web/public/favicon.ico differ diff --git a/web/src/app/loading.tsx b/web/src/app/loading.tsx index e1ddebd9f..863d6e748 100644 --- a/web/src/app/loading.tsx +++ b/web/src/app/loading.tsx @@ -1,4 +1,4 @@ -import { FilterListTableSkeleton } from "@/components/filterlist-table/skeleton"; +import { FilterListTableSkeleton } from "@/components/filterlist-table/table-skeleton"; export default function Loading() { return ( diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index 721129fa6..c0f5a6cb8 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -1,18 +1,12 @@ import { FilterListTable } from "@/components/filterlist-table"; -import { columns, FilterList } from "@/components/filterlist-table/columns"; - -async function getInitialFilterLists(): Promise { - const response = await fetch("https://api.filterlists.com/lists", { - next: { revalidate: 86400 }, - }); - const lists = await response.json(); - - // TODO: add pagination support to API - return lists.slice(0, 20); -} +import { columns } from "@/components/filterlist-table/columns"; +import { getFilterLists } from "@/services/get-filterlists"; export default async function Home() { - const initialData = await getInitialFilterLists(); + const filterLists = await getFilterLists(); + + // TODO: add pagination support to API + const initialData = filterLists.slice(0, 20); return (
diff --git a/web/src/components/filterlist-table/columns.tsx b/web/src/components/filterlist-table/columns.ts similarity index 79% rename from web/src/components/filterlist-table/columns.tsx rename to web/src/components/filterlist-table/columns.ts index 82a63b149..fa1c2bedc 100644 --- a/web/src/components/filterlist-table/columns.tsx +++ b/web/src/components/filterlist-table/columns.ts @@ -1,10 +1,6 @@ +import { FilterList } from "@/services/get-filterlists"; import { createColumnHelper } from "@tanstack/react-table"; -export type FilterList = { - name: string; - description: string; -}; - const columnHelper = createColumnHelper(); export const columns = [ diff --git a/web/src/components/filterlist-table/index.tsx b/web/src/components/filterlist-table/index.tsx index 64c6dc23a..d84da991b 100644 --- a/web/src/components/filterlist-table/index.tsx +++ b/web/src/components/filterlist-table/index.tsx @@ -16,10 +16,10 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { FilterList } from "./columns"; import { useEffect, useState } from "react"; import { FilterListTablePagination } from "./pagination"; -import { FilterListTablePaginationSkeleton } from "./skeleton"; +import { FilterList, getFilterLists } from "@/services/get-filterlists"; +import { FilterListTablePaginationSkeleton } from "./pagination-skeleton"; interface FilterListTableProps { columns: AccessorKeyColumnDef[]; @@ -36,8 +36,7 @@ export function FilterListTable({ useEffect(() => { async function fetchAll() { try { - const response = await fetch("https://api.filterlists.com/lists"); - const lists = await response.json(); + const lists = await getFilterLists(); setData(lists); } finally { setLoading(false); diff --git a/web/src/components/filterlist-table/pagination-skeleton.tsx b/web/src/components/filterlist-table/pagination-skeleton.tsx new file mode 100644 index 000000000..c32795ac9 --- /dev/null +++ b/web/src/components/filterlist-table/pagination-skeleton.tsx @@ -0,0 +1,11 @@ +import { Skeleton } from "@/components/ui/skeleton"; + +export function FilterListTablePaginationSkeleton() { + return ( +
+ + + +
+ ); +} diff --git a/web/src/components/filterlist-table/pagination.tsx b/web/src/components/filterlist-table/pagination.tsx index b8e70aa25..67ec99c5f 100644 --- a/web/src/components/filterlist-table/pagination.tsx +++ b/web/src/components/filterlist-table/pagination.tsx @@ -1,13 +1,15 @@ import * as React from "react"; import { Button } from "@/components/ui/button"; import { Table } from "@tanstack/react-table"; -import { FilterList } from "./columns"; +import { FilterList } from "@/services/get-filterlists"; -interface PaginationProps { +interface FilterListTablePaginationProps { table: Table; } -export function FilterListTablePagination({ table }: PaginationProps) { +export function FilterListTablePagination({ + table, +}: FilterListTablePaginationProps) { return (