fix preload
This commit is contained in:
parent
6b12d9793b
commit
526efe15fe
File diff suppressed because one or more lines are too long
|
|
@ -241,7 +241,6 @@ export const Root = () => {
|
||||||
script={{ init_local_effect: base.init_local_effect }}
|
script={{ init_local_effect: base.init_local_effect }}
|
||||||
on_preload={async ({ urls, opt }) => {
|
on_preload={async ({ urls, opt }) => {
|
||||||
const load_urls: string[] = [];
|
const load_urls: string[] = [];
|
||||||
const loaded = {} as Record<string, any>;
|
|
||||||
if (base.cache.urls) {
|
if (base.cache.urls) {
|
||||||
for (const url of urls) {
|
for (const url of urls) {
|
||||||
if (!base.cache.urls.has(url)) {
|
if (!base.cache.urls.has(url)) {
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ export const ViGlobal = {
|
||||||
page: {
|
page: {
|
||||||
cur: { id: "" },
|
cur: { id: "" },
|
||||||
navs: {} as Record<string, Set<string>>,
|
navs: {} as Record<string, Set<string>>,
|
||||||
|
preload: [] as (() => void)[],
|
||||||
},
|
},
|
||||||
comp: {
|
comp: {
|
||||||
load: (async () => {
|
load: (async () => {
|
||||||
|
|
@ -46,7 +47,7 @@ export const ViGlobal = {
|
||||||
| undefined
|
| undefined
|
||||||
| ((arg: {
|
| ((arg: {
|
||||||
urls: string[];
|
urls: string[];
|
||||||
opt: {
|
opt?: {
|
||||||
on_load?: (
|
on_load?: (
|
||||||
pages: {
|
pages: {
|
||||||
id: string;
|
id: string;
|
||||||
|
|
|
||||||
|
|
@ -94,27 +94,38 @@ export const Vi: FC<{
|
||||||
w.isMobile = mode === "mobile";
|
w.isMobile = mode === "mobile";
|
||||||
w.isDesktop = mode === "desktop";
|
w.isDesktop = mode === "desktop";
|
||||||
w.preload = (_urls: PRELOAD_ARGS["urls"], opt: PRELOAD_ARGS["opt"]) => {
|
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) {
|
if (vi.on_preload) {
|
||||||
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]),
|
urls: Array.from(vi.page.navs[page_id]),
|
||||||
opt: {
|
opt: {
|
||||||
on_load: (...arg) => {
|
on_load: (...arg) => {
|
||||||
opt?.on_load?.(...arg);
|
opt?.on_load?.(...arg);
|
||||||
|
for (const done of vi.page.preload) {
|
||||||
done();
|
done();
|
||||||
|
}
|
||||||
|
vi.page.preload = [];
|
||||||
|
vi.render();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, 100);
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
vi.layout = layout;
|
vi.layout = layout;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue