import { useLocal } from "@/utils/use-local"; import get from "lodash.get"; import { FC, useEffect } from "react"; import { MasterDetailConfig, MasterDetailLocal, MasterDetailProp, } from "./type"; import { Tab } from "../custom/Tab"; import { Tabs, TabsList, TabsTrigger } from "../ui/tabs"; export const MasterDetail: FC = (props) => { const { header, PassProp, master, detail, mode, title, actions } = props; const md = useLocal({ mode, selected: null, active_tab: "", ui: { back: false, title: title, breadcrumb: [], default_actions: null as any, actions: null as any, }, cache_internal: {}, cache: null as any, }); if (!md.ui.actions) { md.ui.actions = actions(md); md.ui.default_actions = actions(md); } if (!md.cache) { md.cache = (name: string, opt?: { reset: boolean }) => { if (!md.cache_internal[name] || opt?.reset) md.cache_internal[name] = {}; return md.cache_internal[name]; }; } if (isEditor) { useEffect(() => { md.ui.title = title; md.render(); }, [title]); } useEffect(() => { let back = false; if (md.selected && md.mode === "breadcrumb") { back = true; } if (back !== md.ui.back) { md.ui.back = back; md.render(); } }, [md.selected]); return (
{header}
); }; const BreadcrumbMode: FC<{ props: MasterDetailProp; md: MasterDetailConfig; }> = ({ props, md }) => { return (
{props.master}
{md.selected && }
); }; const Detail: FC<{ props: MasterDetailProp; md: MasterDetailConfig; }> = ({ props, md }) => { const childs = get( props.detail, "props.meta.item.component.props.detail.content.childs" ); let idx = childs.findIndex( (e: any) => e.name.toLowerCase() === md.active_tab.toLowerCase() ); if (idx < 0) { idx = 0; md.active_tab = childs[idx].name; setTimeout(md.render); } const content = childs[idx]; return ( <> {childs.length > 1 && ( {childs.map((e: { name: string }) => { return ( { md.active_tab = e.name; md.render(); }} overrideClassName >
{e.name}
); })}
)} {content} ); };