import { useLocal } from "@/utils/use-local"; import { FC, ReactNode, useEffect } from "react"; import { icon } from "../icon"; import { Skeleton } from "../ui/skeleton"; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, } from "@/comps/ui/table"; type TableListProps = { mapping: () => Promise; on_load: () => Promise; }; type Column = { name: string; title?: string; jsx?: ReactNode; type?: "number" | "default"; }; export const TableList: FC = (_args) => { const { mapping, on_load } = _args; const local = useLocal({ columns: [] as Column[], list: [] as Record[], status: "init" as "init" | "loading" | "ready", }); useEffect(() => { (async () => { if (local.status === "init") { local.status = "loading"; local.render(); local.columns = await mapping(); local.list = await on_load(); local.render(); local.status = "ready"; local.render(); } })(); }, [mapping]); console.log(local.columns, local.list, "s"); return (
{local.status !== "ready" ? ( ) : ( <> {/* /** ini header */} {!!local.columns && ( {local.columns.map((item: Column, index: number) => { return ( {item.name} ); })} )} {!!local.list && local.list.map((item, idx) => ( {local.columns.map((col, col_idx) => ( {!!col.title ? col.title : !!col.jsx ? col.jsx : item[col.name]} ))} ))}
)}
); };