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