Skip to content

Commit 756e0fe

Browse files
committed
feat: passing props from original component to ViewModelBase
1 parent 15c49bc commit 756e0fe

File tree

7 files changed

+31
-14
lines changed

7 files changed

+31
-14
lines changed

.changeset/cute-humans-change.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"mobx-view-model": minor
3+
---
4+
5+
passing props to `ViewModelBase` as ref

src/components/only-view-model.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { observer } from 'mobx-react-lite';
22
import { ReactNode } from 'react';
3-
import { AllPropertiesOptional, Class } from 'yummies/utils/types';
3+
import { Class, IsPartial } from 'yummies/utils/types';
44

55
import {
66
useCreateViewModel,
@@ -11,7 +11,7 @@ import { AnyViewModel } from '../view-model/index.js';
1111
export type OnlyViewModelProps<TViewModel extends AnyViewModel> = {
1212
model: Class<TViewModel>;
1313
children?: ReactNode | ((model: TViewModel) => ReactNode);
14-
} & (AllPropertiesOptional<TViewModel['payload']> extends true
14+
} & (IsPartial<TViewModel['payload']> extends true
1515
? {
1616
payload?: TViewModel['payload'];
1717
config?: UseCreateViewModelConfig<TViewModel>;

src/hoc/with-view-model.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import {
1313
UseCreateViewModelConfig,
1414
} from '../hooks/use-create-view-model.js';
1515
import {
16-
AllPropertiesOptional,
1716
AnyObject,
1817
Class,
1918
EmptyObject,
19+
IsPartial,
2020
Maybe,
2121
} from '../utils/types.js';
2222
import {
@@ -44,7 +44,7 @@ export type ViewModelInputProps<VM extends AnyViewModel | AnyViewModelSimple> =
4444
VM extends ViewModel<infer TPayload, any>
4545
? TPayload extends EmptyObject
4646
? AnyObject
47-
: AllPropertiesOptional<TPayload> extends true
47+
: IsPartial<TPayload> extends true
4848
? {
4949
payload?: TPayload;
5050
}
@@ -54,7 +54,7 @@ export type ViewModelInputProps<VM extends AnyViewModel | AnyViewModelSimple> =
5454
: VM extends ViewModelSimple<infer TPayload>
5555
? TPayload extends EmptyObject
5656
? AnyObject
57-
: AllPropertiesOptional<TPayload> extends true
57+
: IsPartial<TPayload> extends true
5858
? {
5959
payload?: TPayload;
6060
}
@@ -273,7 +273,7 @@ const withViewModelWrapper = (
273273
const model = useCreateViewModel(VM, payload, {
274274
...config,
275275
component: ConnectedViewModel,
276-
componentProps,
276+
props: componentProps,
277277
}) as unknown as AnyViewModel | AnyViewModelSimple;
278278

279279
const isRenderAllowedByStore =

src/hooks/use-create-view-model.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/no-use-before-define */
22
/* eslint-disable react-hooks/rules-of-hooks */
33
import { useContext, useLayoutEffect } from 'react';
4-
import { Class, AllPropertiesOptional, Maybe } from 'yummies/utils/types';
4+
import { Class, Maybe, IsPartial } from 'yummies/utils/types';
55

66
import { viewModelsConfig } from '../config/global-config.js';
77
import {
@@ -24,7 +24,7 @@ import {
2424
export interface UseCreateViewModelConfig<TViewModel extends AnyViewModel>
2525
extends Pick<
2626
ViewModelCreateConfig<TViewModel>,
27-
'vmConfig' | 'config' | 'ctx' | 'component' | 'componentProps'
27+
'vmConfig' | 'config' | 'ctx' | 'component' | 'props'
2828
> {
2929
/**
3030
* Unique identifier for the view
@@ -49,7 +49,7 @@ export interface UseCreateViewModelConfig<TViewModel extends AnyViewModel>
4949
*/
5050
export function useCreateViewModel<TViewModel extends AnyViewModel>(
5151
VM: Class<TViewModel>,
52-
...args: AllPropertiesOptional<TViewModel['payload']> extends true
52+
...args: IsPartial<TViewModel['payload']> extends true
5353
? [
5454
payload?: TViewModel['payload'],
5555
config?: UseCreateViewModelConfig<TViewModel>,
@@ -68,7 +68,7 @@ export function useCreateViewModel<TViewModel extends AnyViewModel>(
6868
export function useCreateViewModel<TViewModelSimple extends ViewModelSimple>(
6969
VM: Class<TViewModelSimple>,
7070
...args: TViewModelSimple extends ViewModelSimple<infer TPayload>
71-
? AllPropertiesOptional<TPayload> extends true
71+
? IsPartial<TPayload> extends true
7272
? [payload?: TPayload]
7373
: [payload: TPayload]
7474
: []

src/view-model/view-model.base.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ declare const process: { env: { NODE_ENV?: string } };
2424
export class ViewModelBase<
2525
Payload extends AnyObject = EmptyObject,
2626
ParentViewModel extends AnyViewModel | null = null,
27+
ComponentProps extends AnyObject = AnyObject,
2728
> implements ViewModel<Payload, ParentViewModel>
2829
{
2930
private abortController: AbortController;
@@ -46,9 +47,15 @@ export class ViewModelBase<
4647
* @deprecated use `vmParams`. This property will be removed in next major release
4748
* Reason: this word is very useful for users, so `vmParams` is more library-targered naming
4849
*/
49-
protected params: ViewModelParams<Payload, ParentViewModel>;
50-
51-
constructor(protected vmParams: ViewModelParams<Payload, ParentViewModel>) {
50+
protected params: ViewModelParams<Payload, ParentViewModel, ComponentProps>;
51+
52+
constructor(
53+
protected vmParams: ViewModelParams<
54+
Payload,
55+
ParentViewModel,
56+
ComponentProps
57+
>,
58+
) {
5259
this.params = vmParams;
5360
this.id = vmParams.id;
5461
this.vmConfig = mergeVMConfigs(vmParams.config ?? vmParams.vmConfig);

src/view-model/view-model.store.types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export interface ViewModelCreateConfig<VM extends AnyViewModel>
3030
VM: Class<VM>;
3131
fallback?: ComponentType;
3232
component?: VMComponent<AnyViewModel, any>;
33-
componentProps?: AnyObject;
33+
props?: AnyObject;
3434
}
3535

3636
/**

src/view-model/view-model.types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export type ViewModelParent<TViewModel extends AnyViewModel> =
2323
export interface ViewModelParams<
2424
Payload extends AnyObject = EmptyObject,
2525
ParentViewModel extends AnyViewModel | null = null,
26+
ComponentProps extends AnyObject = AnyObject,
2627
> {
2728
/**
2829
* Unique identifier for the view
@@ -50,4 +51,8 @@ export interface ViewModelParams<
5051
* @deprecated use `vmConfig` instead. Will be removed in next major release
5152
*/
5253
config?: ViewModelsRawConfig;
54+
/**
55+
* Original component props
56+
*/
57+
props?: ComponentProps;
5358
}

0 commit comments

Comments
 (0)