From 503b560d9b3264a70dc2b550bd3f1b5f5f7d9ce5 Mon Sep 17 00:00:00 2001 From: Michael Brevard Date: Wed, 10 Apr 2024 10:00:38 +0300 Subject: [PATCH] wip: network idle based delayed component --- .../runtime/client-delayed-component.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/nuxt/src/components/runtime/client-delayed-component.ts b/packages/nuxt/src/components/runtime/client-delayed-component.ts index a0b115edf..af37ff6b0 100644 --- a/packages/nuxt/src/components/runtime/client-delayed-component.ts +++ b/packages/nuxt/src/components/runtime/client-delayed-component.ts @@ -29,3 +29,28 @@ export const createLazyIOClientPage = (componentLoader: Component) => { }, }) } + +/* @__NO_SIDE_EFFECTS__ */ +export const createLazyNetworkClientPage = (componentLoader: Component) => { + return defineComponent({ + inheritAttrs: false, + setup (_, { attrs }) { + const isIdle = ref(false) + let idleHandle: number | null = null + onMounted(() => { + idleHandle = requestIdleCallback(() => { + isIdle.value = true + cancelIdleCallback(idleHandle) + idleHandle = null + }) + }) + onBeforeUnmount(() => { + if (idleHandle) { + cancelIdleCallback(idleHandle) + idleHandle = null + } + }) + return () => isIdle.value ? h(componentLoader, attrs) : null, + }, + }) +}