fix preload

This commit is contained in:
Rizky 2024-06-22 17:11:42 +07:00
parent 6b12d9793b
commit 526efe15fe
4 changed files with 56 additions and 45 deletions

File diff suppressed because one or more lines are too long

View File

@ -241,7 +241,6 @@ export const Root = () => {
script={{ init_local_effect: base.init_local_effect }}
on_preload={async ({ urls, opt }) => {
const load_urls: string[] = [];
const loaded = {} as Record<string, any>;
if (base.cache.urls) {
for (const url of urls) {
if (!base.cache.urls.has(url)) {

View File

@ -36,6 +36,7 @@ export const ViGlobal = {
page: {
cur: { id: "" },
navs: {} as Record<string, Set<string>>,
preload: [] as (() => void)[],
},
comp: {
load: (async () => {
@ -46,7 +47,7 @@ export const ViGlobal = {
| undefined
| ((arg: {
urls: string[];
opt: {
opt?: {
on_load?: (
pages: {
id: string;

View File

@ -94,27 +94,38 @@ export const Vi: FC<{
w.isMobile = mode === "mobile";
w.isDesktop = mode === "desktop";
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) {
vi.page.navs[page_id].add(url);
}
return new Promise<void>((done) => {
clearTimeout(nav.timeout);
nav.timeout = setTimeout(() => {
if (vi.on_preload) {
vi.on_preload({
if (vi.on_preload) {
return new Promise<void>((done) => {
if (!vi.page.navs[page_id]) vi.page.navs[page_id] = new Set();
const navs = vi.page.navs[page_id];
const urls = typeof _urls === "string" ? [_urls] : _urls;
let all_done = true;
for (const url of urls) {
if (!navs.has(url)) {
navs.add(url);
all_done = false;
}
}
if (!all_done) {
vi.page.preload.push(done);
vi.on_preload?.({
urls: Array.from(vi.page.navs[page_id]),
opt: {
on_load: (...arg) => {
opt?.on_load?.(...arg);
done();
for (const done of vi.page.preload) {
done();
}
vi.page.preload = [];
vi.render();
},
},
});
} else {
done();
}
}, 100);
});
});
}
};
vi.layout = layout;