11import { ComponentProps , ComponentType } from 'react' ;
2+ import { PackedAsyncModule , unpackAsyncModule } from 'yummies/imports' ;
23
34import { viewModelsConfig } from '../config/global-config.js' ;
45import { loadable , LoadableMixin } from '../lib/react-simple-loadable.js' ;
5- import { Class } from '../utils/types.js' ;
6+ import { Class , MaybePromise } from '../utils/types.js' ;
67import { AnyViewModel } from '../view-model/index.js' ;
78
89import {
@@ -15,8 +16,8 @@ export interface LazyViewAndModel<
1516 TViewModel extends AnyViewModel ,
1617 TView extends ComponentType < any > ,
1718> {
18- Model : Class < TViewModel > ;
19- View ?: TView ;
19+ Model : Class < TViewModel > | PackedAsyncModule < Class < TViewModel > > ;
20+ View ?: TView | PackedAsyncModule < TView > ;
2021}
2122
2223export type ComponentWithLazyViewModel <
@@ -33,7 +34,7 @@ export function withLazyViewModel<
3334 TViewModel extends AnyViewModel ,
3435 TView extends ComponentType < any > ,
3536> (
36- loadFunction : ( ) => Promise < LazyViewAndModel < TViewModel , TView > > ,
37+ loadFunction : ( ) => MaybePromise < LazyViewAndModel < TViewModel , TView > > ,
3738 config ?: ViewModelHocConfig < any > ,
3839) : ComponentWithLazyViewModel < TViewModel , TView > {
3940 const patchedConfig : ViewModelHocConfig < any > = {
@@ -48,7 +49,12 @@ export function withLazyViewModel<
4849 patchedConfig ?. fallback ?? viewModelsConfig . fallbackComponent ;
4950
5051 const lazyVM = loadable ( async ( ) => {
51- const { Model, View } = await loadFunction ( ) ;
52+ const { Model : ModelOrAsync , View : ViewOrAsync } = await loadFunction ( ) ;
53+ const [ Model , View ] = await Promise . all ( [
54+ unpackAsyncModule ( ModelOrAsync ) ,
55+ unpackAsyncModule ( ViewOrAsync ) ,
56+ ] ) ;
57+
5258 return withViewModel ( Model , patchedConfig ) ( View ) ;
5359 } , fallbackComponent ) as ComponentWithLazyViewModel < TViewModel , TView > ;
5460
0 commit comments