From 62e8a5a0ebe3b0507079f5360bdf48401f8ecc26 Mon Sep 17 00:00:00 2001 From: Collin Barrett <6483057+collinbarrett@users.noreply.github.com> Date: Wed, 25 Jun 2025 19:51:32 -0500 Subject: [PATCH] refactor(web): extract getFilterLists, misc re-org --- web/public/favicon.ico | Bin 0 -> 15406 bytes web/src/app/loading.tsx | 2 +- web/src/app/page.tsx | 18 +++++-------- .../{columns.tsx => columns.ts} | 6 +---- web/src/components/filterlist-table/index.tsx | 7 +++-- .../filterlist-table/pagination-skeleton.tsx | 11 ++++++++ .../filterlist-table/pagination.tsx | 8 +++--- .../{skeleton.tsx => table-skeleton.tsx} | 11 +------- web/src/components/header/index.tsx | 2 +- web/src/components/theme-image.tsx | 4 +-- web/src/services/constants.ts | 1 + web/src/services/get-filterlists.ts | 25 ++++++++++++++++++ 12 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 web/public/favicon.ico rename web/src/components/filterlist-table/{columns.tsx => columns.ts} (79%) create mode 100644 web/src/components/filterlist-table/pagination-skeleton.tsx rename web/src/components/filterlist-table/{skeleton.tsx => table-skeleton.tsx} (75%) create mode 100644 web/src/services/constants.ts create mode 100644 web/src/services/get-filterlists.ts diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..430ab1a1a9aa3c87d9c4cb62c002e2b61eeb67df GIT binary patch literal 15406 zcmeHNJ#W-N5S_K}M3jIC1w|;(oj{NRp_9Uw6hK5uK|y^K6i}h?H?9If4Typ+MJi|! z)QFG2kRJddB@GY>-rKcvK6`DSaeO(rS?Ou*+1;7h=k@yCCL%^cSzHv<9ocA!ToRE^ z$K5X<6L|?+uNSqS5qW=HWEp)h1S6as)$EiNnGZzSxhj$Z)V!1p8qXJZ@tG*TdGGVu{N&VxBM8Xx`( z`JZ#orb+%A;Z>bZEd#mht&R7eK;{wJiEC@)9>Kk$&U(zeZ}1ntZ)NpH{P7K zp-t=V2NC~4f0XN(^Mbl<_vpI(gKjM|!oUg4^CoZyNWaU)_d!YjVLN>@24khmx&-nD z#;;K9Iq!C!-TVG!eHi+-G1k+;aZg(mpZ;pb8ri4ze7X3cjg?Mel>Z@Tj{Eez?->>L zvHNoo|LJ`6UKvmZ{&NO+PJ$y^xd-Su2}sbQ3@8K2fHI&AWEnUN(<$Hra1B@^4n=i* zFVeb>YxX$}908`G;7?9ApZlnv0k42}Id~oQd4T$?{Dw3*_`)10RUQGKfN#KV4tAnG zPf+tY9DM$cL+1Yw_z3W~;Li+X=d~yU%78L3D-3YY%jg`~)@or+CZUV?t&hG_rcCGL>7P9NB))4# z+6kQ#6zZHj{p0K=qmOpL4YgB~x`Ol|vIz@vYBnrLX7gf2>~pHiKiT_-_8Q=8~I zu0DG%KG8|`g0DP<7Hqq9~li((6`8sYs1-4 d(Rk* { - 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 (