import {useEffect} from 'react'; import type {AsyncModule} from '@quilted/async'; import {useModuleAssets} from '@quilted/react-browser/server'; export function useAsyncModule( asyncModule: AsyncModule, { scripts, styles, defer = false, }: Parameters[1] & {defer?: boolean} = {}, ): AsyncModule { if (!defer && asyncModule.module == null) { throw asyncModule.import(); } useAsyncModuleAssets(asyncModule, {styles, scripts}); return asyncModule; } export function useAsyncModuleAssets( module?: AsyncModule, options?: Parameters[1], ) { useModuleAssets(module?.id, options); } export function useAsyncModulePreload>( asyncModule: AsyncModule, ) { useAsyncModuleAssets(asyncModule, {scripts: 'preload', styles: 'preload'}); useEffect(() => { asyncModule.import(); }, [asyncModule]); }