|
1 | | -import { ComponentType } from 'react'; |
| 1 | +import { ComponentProps, ComponentType, ReactNode } from 'react'; |
2 | 2 | import { loadable } from 'react-simple-loadable'; |
3 | 3 |
|
4 | 4 | import { Class } from '../utils/types'; |
| 5 | +import { ViewModel } from '../view-model'; |
5 | 6 |
|
6 | | -import { ViewModelHocConfig, withViewModel } from './with-view-model'; |
| 7 | +import { |
| 8 | + ViewModelHocConfig, |
| 9 | + ViewModelInputProps, |
| 10 | + withViewModel, |
| 11 | +} from './with-view-model'; |
7 | 12 |
|
8 | | -interface LazyViewAndModel { |
9 | | - Model: Class<any>; |
10 | | - View: ComponentType<any>; |
| 13 | +interface LazyViewAndModel< |
| 14 | + TViewModel extends ViewModel<any>, |
| 15 | + TView extends ComponentType<any>, |
| 16 | +> { |
| 17 | + Model: Class<TViewModel>; |
| 18 | + View: TView; |
11 | 19 | } |
12 | 20 |
|
13 | | -export function withLazyViewModel( |
14 | | - loadFunction: () => Promise<LazyViewAndModel>, |
| 21 | +export function withLazyViewModel< |
| 22 | + TViewModel extends ViewModel<any>, |
| 23 | + TView extends ComponentType<any>, |
| 24 | +>( |
| 25 | + loadFunction: () => Promise<LazyViewAndModel<TViewModel, TView>>, |
15 | 26 | config?: ViewModelHocConfig<any>, |
16 | 27 | ) { |
17 | 28 | return loadable(async () => { |
18 | 29 | const { Model, View } = await loadFunction(); |
19 | 30 | return withViewModel(Model, config)(View); |
20 | | - }, config?.fallback); |
| 31 | + }, config?.fallback) as unknown as ( |
| 32 | + props: Omit<ComponentProps<TView>, 'model'> & |
| 33 | + ViewModelInputProps<TViewModel>, |
| 34 | + ) => ReactNode; |
21 | 35 | } |
0 commit comments