import { useLocal } from "@/utils/use-local"; import get from "lodash.get"; import { FC } from "react"; import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels"; import { masterDetailApplyHash, masterDetailStoreHash } from "./utils/md-hash"; import { masterDetailInit } from "./utils/md-init"; import { MDLocal, MDLocalInternal } from "./utils/typings"; export const MasterDetail: FC<{ child: any; PassProp: any; name: string; child_mode: "full" | "h-split" | "v-split"; show_head: "always" | "only-master" | "only-child" | "hidden"; tab_mode: "h-tab" | "v-tab" | "hidden"; }> = ({ PassProp, child, name, child_mode, show_head, tab_mode }) => { const md = useLocal({ name, actions: [], breadcrumb: [], selected: {}, tab: { active: "", list: [], }, childs: {}, props: { child_mode, show_head, tab_mode }, params: { hash: {}, tabs: {} }, master: { internal: null, render() {}, pk: null }, }); const local = useLocal({ init: false }); if (!local.init) { local.init = true; masterDetailInit(md, child); masterDetailApplyHash(md); } else { masterDetailStoreHash(md); } return (
{md.props.child_mode === "full" && ( )} {md.props.child_mode === "v-split" && ( )}
); }; const ModeFull: FC<{ md: MDLocal; PassProp: any }> = ({ md, PassProp }) => { return ( <>{md.selected && {md.master.internal}} ); }; const ModeVSplit: FC<{ md: MDLocal; PassProp: any }> = ({ md, PassProp }) => { return (
{md.master.internal} <> { if (e < 80) { localStorage.setItem(`prasi-md-h-${md.name}`, e.toString()); } }} >
); }; const Header: FC<{ md: MDLocal; child: any; PassProp: any }> = ({ md, child, PassProp, }) => { const head = get(child, "props.meta.item.component.props.header.content"); const show_head = md.props.show_head; if (show_head === "always") { return {head}; } else if (show_head === "only-master" && !md.selected) { return {head}; } else if (show_head === "only-child" && md.selected) { return {head}; } };