Skip to content

Commit 525635d

Browse files
committed
feat: add ActiveViewModelProvider internal HOC
1 parent f947dbb commit 525635d

File tree

5 files changed

+26
-8
lines changed

5 files changed

+26
-8
lines changed

.changeset/busy-bottles-taste.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+
added `ActiveViewModelProvider` internal HOC
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import type { ReactNode } from 'react';
2+
import { ActiveViewModelContext } from '../contexts/index.js';
3+
import type { AnyViewModel, AnyViewModelSimple } from '../view-model/index.js';
4+
5+
/**
6+
* This is a provider for the `ActiveViewModelContext`.
7+
* This HOC is not recommended for public usage.
8+
* Better to use `withViewModel` HOC.
9+
*/
10+
export const ActiveViewModelProvider =
11+
ActiveViewModelContext.Provider as unknown as React.ComponentType<{
12+
value: AnyViewModel | AnyViewModelSimple;
13+
children?: ReactNode;
14+
}>;

src/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1+
export * from './active-view-model-provider.js';
12
export * from './only-view-model.js';
23
export * from './view-models-provider.js';

src/hoc/with-view-model.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@ import type {
1111
IsUnknown,
1212
Maybe,
1313
} from 'yummies/types';
14+
import { ActiveViewModelProvider } from '../components/active-view-model-provider.js';
1415
import { viewModelsConfig } from '../config/index.js';
15-
import {
16-
ActiveViewModelContext,
17-
ViewModelsContext,
18-
} from '../contexts/index.js';
16+
import { ViewModelsContext } from '../contexts/index.js';
1917
import {
2018
type UseCreateViewModelConfig,
2119
useCreateViewModel,
@@ -385,9 +383,9 @@ const withViewModelWrapper = (
385383

386384
if (isRenderAllowed) {
387385
return (
388-
<ActiveViewModelContext.Provider value={model}>
386+
<ActiveViewModelProvider value={model}>
389387
{Component && <Component {...componentProps} model={model} />}
390-
</ActiveViewModelContext.Provider>
388+
</ActiveViewModelProvider>
391389
);
392390
}
393391

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ const useCreateViewModelBase = (
108108
config?: Maybe<UseCreateViewModelConfig<AnyViewModel>>,
109109
) => {
110110
const viewModels = useContext(ViewModelsContext);
111-
const parentViewModel = useContext(ActiveViewModelContext) || null;
111+
const parentViewModel = useContext(ActiveViewModelContext);
112112

113113
const ctx = config?.ctx ?? {};
114114

@@ -180,7 +180,7 @@ const useCreateViewModelSimple = (
180180
payload?: any,
181181
) => {
182182
const viewModels = useContext(ViewModelsContext);
183-
const parentViewModel = useContext(ActiveViewModelContext) || null;
183+
const parentViewModel = useContext(ActiveViewModelContext);
184184

185185
const instance = useValue(() => {
186186
const instance = new VM();

0 commit comments

Comments
 (0)