From 6b76ce5e500a4cc0b47fb1b26ab900258c587693 Mon Sep 17 00:00:00 2001 From: Collin Barrett <6483057+collinbarrett@users.noreply.github.com> Date: Wed, 25 Jun 2025 21:20:45 -0500 Subject: [PATCH] feat(web): fetch related data --- web/src/app/page.tsx | 37 +++++++++++++++++-- web/src/components/filterlist-table/index.tsx | 27 ++++++++++---- 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index c0f5a6cb8..1446184dd 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -1,16 +1,47 @@ import { FilterListTable } from "@/components/filterlist-table"; import { columns } from "@/components/filterlist-table/columns"; import { getFilterLists } from "@/services/get-filterlists"; +import { getLanguages } from "@/services/get-languages"; +import { getLicenses } from "@/services/get-licenses"; +import { getMaintainers } from "@/services/get-maintainers"; +import { getSoftware } from "@/services/get-software"; +import { getSyntaxes } from "@/services/get-syntaxes"; +import { getTags } from "@/services/get-tags"; export default async function Home() { - const filterLists = await getFilterLists(); + const [ + filterLists, + languages, + licenses, + maintainers, + software, + syntaxes, + tags, + ] = await Promise.all([ + getFilterLists(), + getLanguages(), + getLicenses(), + getMaintainers(), + getSoftware(), + getSyntaxes(), + getTags(), + ]); // TODO: add pagination support to API - const initialData = filterLists.slice(0, 20); + const initialFilterLists = filterLists.slice(0, 20); return (
- +
); } diff --git a/web/src/components/filterlist-table/index.tsx b/web/src/components/filterlist-table/index.tsx index d84da991b..62853e2d5 100644 --- a/web/src/components/filterlist-table/index.tsx +++ b/web/src/components/filterlist-table/index.tsx @@ -18,32 +18,43 @@ import { } from "@/components/ui/table"; import { useEffect, useState } from "react"; import { FilterListTablePagination } from "./pagination"; -import { FilterList, getFilterLists } from "@/services/get-filterlists"; import { FilterListTablePaginationSkeleton } from "./pagination-skeleton"; +import { FilterList, getFilterLists } from "@/services/get-filterlists"; +import { Language } from "@/services/get-languages"; +import { License } from "@/services/get-licenses"; +import { Maintainer } from "@/services/get-maintainers"; +import { Software } from "@/services/get-software"; +import { Syntax } from "@/services/get-syntaxes"; +import { Tag } from "@/services/get-tags"; interface FilterListTableProps { columns: AccessorKeyColumnDef[]; - initialData: FilterList[]; + initialFilterLists: FilterList[]; + languages: Language[]; + licenses: License[]; + maintainers: Maintainer[]; + software: Software[]; + syntaxes: Syntax[]; + tags: Tag[]; } export function FilterListTable({ columns, - initialData, + initialFilterLists, }: FilterListTableProps) { - const [data, setData] = useState(initialData); + const [data, setData] = useState(initialFilterLists); const [loading, setLoading] = useState(true); useEffect(() => { - async function fetchAll() { + (async () => { try { const lists = await getFilterLists(); setData(lists); } finally { setLoading(false); } - } - fetchAll(); - }, [initialData.length]); + })(); + }, [initialFilterLists.length]); const table = useReactTable({ data,