|
1 | | -import { ViewModelHocConfig, withViewModel } from 'mobx-vm-entities'; |
2 | | -import { Class } from 'mobx-vm-entities/utils/types'; |
| 1 | +import { |
| 2 | + AnyViewModel, |
| 3 | + ViewModelHocConfig, |
| 4 | + ViewModelInputProps, |
| 5 | + ViewModelProps, |
| 6 | + withViewModel, |
| 7 | +} from 'mobx-vm-entities'; |
| 8 | +import { AnyObject, Class } from 'mobx-vm-entities/utils/types'; |
| 9 | +import { ComponentType, ReactNode } from 'react'; |
3 | 10 |
|
4 | | -import type { PageViewModel } from '../page-view-model'; |
| 11 | +import type { AnyPageViewModel } from '../page-view-model'; |
5 | 12 |
|
6 | | -export const withPageViewModel = <VM extends PageViewModel<any, any>>( |
7 | | - model: Class<VM>, |
| 13 | +export type ComponentWithPageViewModel< |
| 14 | + TViewModel extends AnyViewModel, |
| 15 | + TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>, |
| 16 | +> = ( |
| 17 | + props: Omit<TComponentOriginProps, 'model'> & |
| 18 | + Omit<ViewModelInputProps<TViewModel>, 'payload'> & { |
| 19 | + params: ViewModelInputProps<TViewModel>['payload']; |
| 20 | + }, |
| 21 | +) => ReactNode; |
| 22 | + |
| 23 | +export function withPageViewModel<TViewModel extends AnyPageViewModel>( |
| 24 | + model: Class<TViewModel>, |
| 25 | + config?: ViewModelHocConfig<TViewModel>, |
| 26 | +): <TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>( |
| 27 | + Component?: ComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>, |
| 28 | +) => ComponentWithPageViewModel<TViewModel, TComponentOriginProps>; |
| 29 | + |
| 30 | +export function withPageViewModel<TViewModel extends AnyPageViewModel>( |
| 31 | + model: Class<TViewModel>, |
8 | 32 | config?: ViewModelHocConfig<any>, |
9 | | -) => { |
| 33 | +) { |
10 | 34 | return withViewModel(model, { |
11 | 35 | ...config, |
12 | 36 | getPayload: config?.getPayload ?? ((props) => props.params), |
13 | 37 | }); |
14 | | -}; |
| 38 | +} |
0 commit comments