import { useLocal } from "@/utils/use-local"; import { FC, ReactElement, useEffect } from "react"; import { Skeleton } from "../ui/skeleton"; import get from "lodash.get"; type ListProp = { on_load: (arg: { params: any }) => Promise; map_val: (item: any) => any; row: ReactElement; props: any; PassProp: any; mode: "responsive" | "list" | "table"; }; export const List: FC = (_arg) => { const { row, on_load, PassProp, map_val } = _arg; const local = useLocal({ pathname: "", status: "init" as "init" | "loading" | "ready", params: { // skip: 0, // take: 3, }, list: [] as any[], }); if (isEditor) { return ; } if (location.pathname !== local.pathname) { local.status = "init"; local.pathname = location.pathname; } useEffect(() => { (async () => { if (local.status === "init") { local.status = "loading"; local.render(); local.list = await on_load({ params: local.params }); local.status = "ready"; local.render(); } })(); }, [on_load]); return (
{local.status !== "ready" ? (
) : ( <> {local.list === null ? ( ) : ( (local.list || []).map((item, idx) => { const val = (...arg: any[]) => { const value = get(map_val(item), `${arg.join("")}`); return value; }; return (
{row}
); }) )} )}
); }; const ListDummy = ({ props, row, PassProp, map_val, mode }: ListProp) => { const item = (...arg: string[]) => { if (map_val) { const value = get(map_val({}), `${arg.join("")}`); if (value) return value; } return `[${arg.join("")}]`; }; return (
{row}
); };