diff --git a/preset/menu/Menu.tsx b/preset/menu/Menu.tsx index efb9153..6221039 100755 --- a/preset/menu/Menu.tsx +++ b/preset/menu/Menu.tsx @@ -55,6 +55,14 @@ export const Menu: FC = (props) => { ); }; + +const w = window as unknown as { + prasi_menu: { + nav_override: boolean; + nav: any; + }; + navigate: any; +}; export const SideBar: FC<{ data: IMenu[]; local: MLocal; @@ -69,6 +77,34 @@ export const SideBar: FC<{ const data: IMenu[] = (typeof _data[0] === "string" ? [_data] : _data) as any; useEffect(() => { + if (!w.prasi_menu && !isEditor) { + w.prasi_menu = { nav_override: true, nav: w.navigate }; + w.navigate = async (_href: any) => { + if (_href.startsWith("/")) { + const url = new URL(location.href); + const newurl = new URL(`${url.protocol}//${url.host}${_href}`); + const pathname = newurl.pathname; + + if (preloaded(pathname)) { + w.prasi_menu.nav(_href); + } else if (pm.on_load) { + let done = { exec: () => {} }; + pm.on_load((exec) => { + done.exec = exec; + }); + await preload(pathname); + setTimeout(() => { + w.prasi_menu.nav(_href); + done.exec(); + }, 500); + } else { + await preload(pathname); + w.prasi_menu.nav(_href); + } + } + }; + } + data.map((item) => { const menu = { label: item[0], @@ -182,11 +218,8 @@ export const SideBar: FC<{ done.exec = exec; }); await preload(menu.value); - setTimeout(() => { - done.exec(); - if (typeof menu.value === "string") - navigate(menu.value); - }, 500); + done.exec(); + if (typeof menu.value === "string") navigate(menu.value); } return; } diff --git a/utils/format-value.tsx b/utils/format-value.tsx index 35c0c10..9dbf274 100755 --- a/utils/format-value.tsx +++ b/utils/format-value.tsx @@ -48,7 +48,7 @@ export const FormatValue: FC<{ if (typeof value === "boolean") return <>{value ? "Yes" : "No"}; if (mode === "money") { - if (!value || isEmptyString(value)) return "-"; + if (isEmptyString(value)) return "-"; return formatMoney(Number(value) || 0); } else if (mode === "datetime") { if (!value || isEmptyString(value)) return "-";