import { useLocal } from "@/utils/use-local"; import { FC, useEffect, useRef } from "react"; import { ModeFull } from "./mode/full"; import { ModeHSplit } from "./mode/h-split"; import { ModeVSplit } from "./mode/v-split"; import { MDHeader } from "./parts/MDHeader"; import { editorMDInit } from "./utils/editor-init"; import { masterDetailApplyParams, masterDetailParseHash as masterDetailParseParams, } from "./utils/md-hash"; import { masterDetailInit, masterDetailSelected } from "./utils/md-init"; import { MDLocalInternal, MDProps } from "./utils/typings"; export const MasterDetail: FC = (arg) => { const { PassProp, child, name, mode, show_head, tab_mode, editor_tab, gen_fields, gen_table, on_init, _item, } = arg; const _ref = useRef({ PassProp, child, item: _item }); const mdr = _ref.current; const md = useLocal({ name, actions: [], breadcrumb: [], selected: null, tab: { active: "", list: [], }, internal: { action_should_refresh: true }, childs: {}, props: { mode, show_head, tab_mode, editor_tab, gen_fields, gen_table, on_init, }, params: { hash: {}, tabs: {}, parse: () => { masterDetailParseParams(md); }, apply: () => { masterDetailApplyParams(md); }, }, master: { internal: null, render() {} }, panel: { size: 25, min_size: 0, }, }); const local = useLocal({ init: false }); if (isEditor) { editorMDInit(md, arg); } mdr.PassProp = PassProp; mdr.child = child; mdr.item = _item; useEffect(() => { local.init = false; local.render(); }, [editor_tab]); if (!local.init || isEditor) { local.init = true; masterDetailInit(md, child, editor_tab); masterDetailSelected(md); } return (
{md.props.show_head === "always" && } {md.props.mode === "full" && } {md.props.mode === "v-split" && } {md.props.mode === "h-split" && }
); };