mobx-view-model
Version:
MobX ViewModel power for ReactJS
83 lines • 5.29 kB
TypeScript
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