UNPKG

mobx-view-model

Version:
41 lines 2.68 kB
import { ComponentType, ReactNode } from 'react'; import { UseCreateViewModelConfig } from '../hooks/use-create-view-model.js'; import { AllPropertiesOptional, AnyObject, Class, EmptyObject, Maybe } from '../utils/types.js'; import { AnyViewModel, ViewModel, ViewModelStore } from '../view-model/index.js'; export type ViewModelProps<VM extends AnyViewModel> = { model: VM; }; export type ViewModelInputProps<VM extends AnyViewModel> = VM extends ViewModel<infer TPayload, any> ? TPayload extends EmptyObject ? AnyObject : AllPropertiesOptional<TPayload> extends true ? { payload?: TPayload; } : { payload: TPayload; } : AnyObject; export interface ViewModelHocConfig<VM extends AnyViewModel> extends Omit<UseCreateViewModelConfig<VM>, 'component' | 'componentProps'> { /** * Component to render if the view model initialization takes too long */ fallback?: ComponentType; /** * Function to invoke additional React hooks in the resulting component */ reactHook?: (allProps: AnyObject, ctx: AnyObject, viewModels: Maybe<ViewModelStore>) => void; /** * Function that should return the payload for the VM * by default, it is - (props) => props.payload */ getPayload?: (allProps: any) => any; } export type ComponentWithViewModel<TViewModel extends AnyViewModel, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>> = (props: Omit<TComponentOriginProps, 'model'> & ViewModelInputProps<TViewModel>) => ReactNode; /** * A Higher-Order Component that connects React components to their ViewModels, providing seamless MobX integration. * * [**Documentation**](https://js2me.github.io/mobx-view-model/react/api/with-view-model.html) */ export declare function withViewModel<TViewModel extends AnyViewModel, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>(model: Class<TViewModel>, component: ComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>, config?: ViewModelHocConfig<TViewModel>): ComponentWithViewModel<TViewModel, TComponentOriginProps>; /** * A Higher-Order Component that connects React components to their ViewModels, providing seamless MobX integration. * * [**Documentation**](https://js2me.github.io/mobx-view-model/react/api/with-view-model.html) */ export declare function withViewModel<TViewModel extends AnyViewModel>(model: Class<TViewModel>, config?: ViewModelHocConfig<TViewModel>): <TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>(Component?: ComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>) => ComponentWithViewModel<TViewModel, TComponentOriginProps>; //# sourceMappingURL=with-view-model.d.ts.map