UNPKG

mobx-view-model

Version:
83 lines 5.29 kB
import { ComponentClass, ComponentType, ReactNode } from 'react'; import { UseCreateViewModelConfig } from '../hooks/use-create-view-model.js'; import { AnyObject, Class, EmptyObject, IsPartial, Maybe } from '../utils/types.js'; import { AnyViewModel, AnyViewModelSimple, ViewModel, ViewModelSimple, ViewModelStore } from '../view-model/index.js'; type FixedComponentType<P extends AnyObject = {}> = /** * Fixes typings loss with use `withViewModel` with inline function component */ ((props: P) => ReactNode) | ComponentClass<P>; export type ViewModelProps<VM extends AnyViewModel | AnyViewModelSimple> = { model: VM; }; export type ViewModelInputProps<VM extends AnyViewModel | AnyViewModelSimple> = VM extends ViewModel<infer TPayload, any> ? TPayload extends EmptyObject ? AnyObject : IsPartial<TPayload> extends true ? { payload?: TPayload; } : { payload: TPayload; } : VM extends ViewModelSimple<infer TPayload> ? TPayload extends EmptyObject ? AnyObject : IsPartial<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 interface ViewModelSimpleHocConfig<VM extends AnyViewModelSimple> { /** * 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 VMComponentProps<TViewModel extends AnyViewModel | AnyViewModelSimple, TComponentOriginProps extends AnyObject> = Omit<TComponentOriginProps, 'model'> & ViewModelInputProps<TViewModel>; export type VMComponent<TViewModel extends AnyViewModel | AnyViewModelSimple, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>> = (props: VMComponentProps<TViewModel, TComponentOriginProps>) => ReactNode; /** * @deprecated use `VMComponent` type. Will be removed in next major release. */ export type ComponentWithViewModel<TViewModel extends AnyViewModel, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>> = VMComponent<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, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>(model: Class<TViewModel>, component: ComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>, config?: ViewModelHocConfig<TViewModel>): VMComponent<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>>) => VMComponent<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 AnyViewModelSimple>(model: Class<TViewModel>, config?: ViewModelSimpleHocConfig<TViewModel>): <TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>(Component?: FixedComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>) => VMComponent<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 AnyViewModelSimple, TComponentOriginProps extends AnyObject = ViewModelProps<TViewModel>>(model: Class<TViewModel>, component: FixedComponentType<TComponentOriginProps & ViewModelProps<TViewModel>>, config?: ViewModelSimpleHocConfig<TViewModel>): VMComponent<TViewModel, TComponentOriginProps>; export {}; //# sourceMappingURL=with-view-model.d.ts.map