This commit is contained in:
Rizky 2024-03-17 10:17:54 +07:00
parent 96c8607154
commit 94f44dbeb6
5 changed files with 53 additions and 33 deletions

File diff suppressed because one or more lines are too long

View File

@ -192,6 +192,11 @@ export const Root = () => {
if (load_urls.length > 0) {
const pages = await loadUrls(load_urls);
if (opt?.on_load) {
opt.on_load(pages);
}
if (Array.isArray(pages)) {
for (const page of pages) {
const p = {

View File

@ -1,3 +1,4 @@
import { IRoot } from "../../../utils/types/root";
import { IMeta } from "../../ed/logic/ed-global";
import { viParts } from "./parts";
@ -39,7 +40,18 @@ export const ViGlobal = {
},
on_preload: undefined as
| undefined
| ((arg: { urls: string[]; opt: { pre_render?: boolean } }) => Promise<void>),
| ((arg: {
urls: string[];
opt: {
on_load?: (
pages: {
id: string;
url: string;
root: IRoot;
}[]
) => void;
};
}) => Promise<void>),
};
export type VG = typeof ViGlobal & { render: () => void };

View File

@ -8,6 +8,9 @@ import { nav } from "./render/script/extract-nav";
import { ViRoot } from "./root";
import { ErrorBox } from "./utils/error-box";
type PRELOAD = Exclude<VG["on_preload"], undefined>;
type PRELOAD_ARGS = Parameters<PRELOAD>[0];
const w = window as any;
export const Vi: FC<{
meta: Record<string, IMeta>;
@ -24,10 +27,7 @@ export const Vi: FC<{
visit?: VG["visit"];
render_stat?: "enabled" | "disabled";
on_status_changed?: (status: VG["status"]) => void;
on_preload?: (arg: {
urls: string[];
opt?: { pre_render?: boolean };
}) => Promise<void>;
on_preload?: VG["on_preload"];
}> = ({
meta,
entry,
@ -83,7 +83,7 @@ export const Vi: FC<{
};
w.isMobile = mode === "mobile";
w.isDesktop = mode === "desktop";
w.preload = (_urls: string | string[], opt: { pre_render?: boolean }) => {
w.preload = (_urls: PRELOAD_ARGS["urls"], opt: PRELOAD_ARGS["opt"]) => {
if (!vi.page.navs[page_id]) vi.page.navs[page_id] = new Set();
const urls = typeof _urls === "string" ? [_urls] : _urls;
for (const url of urls) {
@ -95,7 +95,7 @@ export const Vi: FC<{
vi.on_preload({
urls: Array.from(vi.page.navs[page_id]),
opt: {
pre_render: !!opt?.pre_render,
on_load: opt?.on_load,
},
});
}
@ -133,6 +133,9 @@ export const Vi: FC<{
if (nav) {
on_preload({
urls: Array.from(nav),
opt: {
on_load(pages) {},
},
});
}
}, 500);

View File

@ -15,7 +15,7 @@ export const baseTypings = `
const isMobile: boolean;
const isDesktop: boolean;
const siteurl: (path:string) => string;
const preload: (urls: string | string[], opt: {pre_render?: boolean}) => ReactNode;
const preload: (urls: string | string[], opt: {on_load?: boolean}) => ReactNode;
const apiHeaders: Record<string, any>;
const navigate: (url: string) => void;
const params: any;