@jfdevelops/react-multi-step-form 1.0.0-alpha.21 → 1.0.0-alpha.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/field.cjs +13 -5
- package/dist/field.cjs.map +1 -1
- package/dist/field.d.cts +3 -1
- package/dist/field.d.mts +3 -1
- package/dist/field.mjs +14 -5
- package/dist/field.mjs.map +1 -1
- package/dist/form-config.d.mts +1 -1
- package/dist/hooks/use-selector.cjs +16 -0
- package/dist/hooks/use-selector.cjs.map +1 -0
- package/dist/hooks/use-selector.d.cts +9 -0
- package/dist/hooks/use-selector.d.mts +9 -0
- package/dist/hooks/use-selector.mjs +16 -0
- package/dist/hooks/use-selector.mjs.map +1 -0
- package/dist/selector.cjs +27 -0
- package/dist/selector.cjs.map +1 -0
- package/dist/selector.d.cts +30 -0
- package/dist/selector.d.mts +30 -0
- package/dist/selector.mjs +22 -0
- package/dist/selector.mjs.map +1 -0
- package/dist/step-schema.cjs +59 -52
- package/dist/step-schema.cjs.map +1 -1
- package/dist/step-schema.d.cts +30 -1
- package/dist/step-schema.d.mts +30 -1
- package/dist/step-schema.mjs +60 -53
- package/dist/step-schema.mjs.map +1 -1
- package/dist/utils.cjs +13 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.mjs +13 -1
- package/dist/utils.mjs.map +1 -1
- package/package.json +2 -2
package/dist/field.cjs
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
|
+
let react = require("react");
|
|
1
2
|
|
|
2
3
|
//#region src/field.tsx
|
|
3
4
|
let field;
|
|
4
5
|
(function(_field) {
|
|
5
|
-
function create(propsCreator) {
|
|
6
|
-
|
|
6
|
+
function create(propsCreator, subscribe, getValue) {
|
|
7
|
+
return (0, react.memo)((props) => {
|
|
7
8
|
const { children, name } = props;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const subscribeFn = subscribe || (() => () => {});
|
|
10
|
+
const getValueFn = getValue || (() => void 0);
|
|
11
|
+
const currentValue = (0, react.useSyncExternalStore)(subscribeFn, () => getValueFn(name), () => getValueFn(name));
|
|
12
|
+
let createdProps = propsCreator(name);
|
|
13
|
+
if (getValue) createdProps = {
|
|
14
|
+
...createdProps,
|
|
15
|
+
defaultValue: currentValue
|
|
16
|
+
};
|
|
17
|
+
return children(createdProps);
|
|
18
|
+
}, (prevProps, nextProps) => prevProps.name === nextProps.name);
|
|
11
19
|
}
|
|
12
20
|
_field.create = create;
|
|
13
21
|
})(field || (field = {}));
|
package/dist/field.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.cjs","names":[
|
|
1
|
+
{"version":3,"file":"field.cjs","names":[],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\nimport { memo, useSyncExternalStore } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\n /**\n * A useful wrapper around `update` to update the specific field.\n * @param value The new value for the field.\n */\n onInputChange: (value: Updater<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @param subscribe - Optional subscription function for reactivity\n * @param getValue - Optional function to get the current field value reactively\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>,\n subscribe?: (listener: () => void) => () => void,\n getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = memo(\n (props) => {\n const { children, name } = props;\n\n // Always call the hook, but use no-op functions if subscribe/getValue aren't provided\n const subscribeFn = subscribe || (() => () => {});\n const getValueFn = getValue || (() => undefined);\n\n // Subscribe to changes to trigger rerenders\n const currentValue = useSyncExternalStore(\n subscribeFn,\n () => getValueFn(name),\n () => getValueFn(name)\n );\n\n let createdProps = propsCreator(name);\n\n // If getValue is provided, override defaultValue with the reactive value\n if (getValue) {\n createdProps = {\n ...createdProps,\n defaultValue: currentValue,\n } as typeof createdProps;\n }\n\n return children(createdProps);\n },\n // Custom comparison: only compare the `name` prop\n // The `children` function will always be a new reference, but that's okay\n // because we only re-render when the field value changes (via useSyncExternalStore)\n // or when the `name` prop changes\n (prevProps, nextProps) => prevProps.name === nextProps.name\n );\n\n return Field;\n }\n}\n"],"mappings":";;;;;CAkES,SAAS,OAId,cAGA,WACA,UAGA;AAmCA,0BAjCG,UAAU;GACT,MAAM,EAAE,UAAU,SAAS;GAG3B,MAAM,cAAc,0BAA0B;GAC9C,MAAM,aAAa,mBAAmB;GAGtC,MAAM,+CACJ,mBACM,WAAW,KAAK,QAChB,WAAW,KAAK,CACvB;GAED,IAAI,eAAe,aAAa,KAAK;AAGrC,OAAI,SACF,gBAAe;IACb,GAAG;IACH,cAAc;IACf;AAGH,UAAO,SAAS,aAAa;MAM9B,WAAW,cAAc,UAAU,SAAS,UAAU,KACxD"}
|
package/dist/field.d.cts
CHANGED
|
@@ -28,9 +28,11 @@ declare namespace field {
|
|
|
28
28
|
/**
|
|
29
29
|
* Create a field.
|
|
30
30
|
* @param propsCreator
|
|
31
|
+
* @param subscribe - Optional subscription function for reactivity
|
|
32
|
+
* @param getValue - Optional function to get the current field value reactively
|
|
31
33
|
* @returns
|
|
32
34
|
*/
|
|
33
|
-
export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
|
|
35
|
+
export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>, subscribe?: (listener: () => void) => () => void, getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
|
|
34
36
|
export {};
|
|
35
37
|
}
|
|
36
38
|
//#endregion
|
package/dist/field.d.mts
CHANGED
|
@@ -28,9 +28,11 @@ declare namespace field {
|
|
|
28
28
|
/**
|
|
29
29
|
* Create a field.
|
|
30
30
|
* @param propsCreator
|
|
31
|
+
* @param subscribe - Optional subscription function for reactivity
|
|
32
|
+
* @param getValue - Optional function to get the current field value reactively
|
|
31
33
|
* @returns
|
|
32
34
|
*/
|
|
33
|
-
export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
|
|
35
|
+
export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>, subscribe?: (listener: () => void) => () => void, getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
|
|
34
36
|
export {};
|
|
35
37
|
}
|
|
36
38
|
//#endregion
|
package/dist/field.mjs
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
+
import { memo, useSyncExternalStore } from "react";
|
|
2
|
+
|
|
1
3
|
//#region src/field.tsx
|
|
2
4
|
let field;
|
|
3
5
|
(function(_field) {
|
|
4
|
-
function create(propsCreator) {
|
|
5
|
-
|
|
6
|
+
function create(propsCreator, subscribe, getValue) {
|
|
7
|
+
return memo((props) => {
|
|
6
8
|
const { children, name } = props;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
const subscribeFn = subscribe || (() => () => {});
|
|
10
|
+
const getValueFn = getValue || (() => void 0);
|
|
11
|
+
const currentValue = useSyncExternalStore(subscribeFn, () => getValueFn(name), () => getValueFn(name));
|
|
12
|
+
let createdProps = propsCreator(name);
|
|
13
|
+
if (getValue) createdProps = {
|
|
14
|
+
...createdProps,
|
|
15
|
+
defaultValue: currentValue
|
|
16
|
+
};
|
|
17
|
+
return children(createdProps);
|
|
18
|
+
}, (prevProps, nextProps) => prevProps.name === nextProps.name);
|
|
10
19
|
}
|
|
11
20
|
_field.create = create;
|
|
12
21
|
})(field || (field = {}));
|
package/dist/field.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.mjs","names":[
|
|
1
|
+
{"version":3,"file":"field.mjs","names":[],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\nimport { memo, useSyncExternalStore } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\n /**\n * A useful wrapper around `update` to update the specific field.\n * @param value The new value for the field.\n */\n onInputChange: (value: Updater<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @param subscribe - Optional subscription function for reactivity\n * @param getValue - Optional function to get the current field value reactively\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>,\n subscribe?: (listener: () => void) => () => void,\n getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = memo(\n (props) => {\n const { children, name } = props;\n\n // Always call the hook, but use no-op functions if subscribe/getValue aren't provided\n const subscribeFn = subscribe || (() => () => {});\n const getValueFn = getValue || (() => undefined);\n\n // Subscribe to changes to trigger rerenders\n const currentValue = useSyncExternalStore(\n subscribeFn,\n () => getValueFn(name),\n () => getValueFn(name)\n );\n\n let createdProps = propsCreator(name);\n\n // If getValue is provided, override defaultValue with the reactive value\n if (getValue) {\n createdProps = {\n ...createdProps,\n defaultValue: currentValue,\n } as typeof createdProps;\n }\n\n return children(createdProps);\n },\n // Custom comparison: only compare the `name` prop\n // The `children` function will always be a new reference, but that's okay\n // because we only re-render when the field value changes (via useSyncExternalStore)\n // or when the `name` prop changes\n (prevProps, nextProps) => prevProps.name === nextProps.name\n );\n\n return Field;\n }\n}\n"],"mappings":";;;;;CAkES,SAAS,OAId,cAGA,WACA,UAGA;AAmCA,SAlC2D,MACxD,UAAU;GACT,MAAM,EAAE,UAAU,SAAS;GAG3B,MAAM,cAAc,0BAA0B;GAC9C,MAAM,aAAa,mBAAmB;GAGtC,MAAM,eAAe,qBACnB,mBACM,WAAW,KAAK,QAChB,WAAW,KAAK,CACvB;GAED,IAAI,eAAe,aAAa,KAAK;AAGrC,OAAI,SACF,gBAAe;IACb,GAAG;IACH,cAAc;IACf;AAGH,UAAO,SAAS,aAAa;MAM9B,WAAW,cAAc,UAAU,SAAS,UAAU,KACxD"}
|
package/dist/form-config.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnyResolvedStep as AnyResolvedStep$1, CreatedMultiStepFormComponent } from "./step-schema.mjs";
|
|
2
2
|
import { Expand, HelperFnChosenSteps, StepNumbers, ValidStepKey } from "@jfdevelops/multi-step-form-core";
|
|
3
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
3
|
import { ComponentPropsWithRef, JSX } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
5
|
|
|
6
6
|
//#region src/form-config.d.ts
|
|
7
7
|
declare namespace MultiStepFormSchemaConfig {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
let react = require("react");
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/use-selector.ts
|
|
4
|
+
function createUseSelector(createCtx, subscribe) {
|
|
5
|
+
return (selector) => {
|
|
6
|
+
return (0, react.useSyncExternalStore)(subscribe, () => {
|
|
7
|
+
return selector(createCtx());
|
|
8
|
+
}, () => {
|
|
9
|
+
return selector(createCtx());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
exports.createUseSelector = createUseSelector;
|
|
16
|
+
//# sourceMappingURL=use-selector.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-selector.cjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,yCACE,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/use-selector.d.ts
|
|
4
|
+
type UseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;
|
|
5
|
+
type SelectorFn<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = (ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>) => TSelected;
|
|
6
|
+
declare function createUseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): <selected>(selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>) => selected;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { SelectorFn, UseSelector };
|
|
9
|
+
//# sourceMappingURL=use-selector.d.cts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/use-selector.d.ts
|
|
4
|
+
type UseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;
|
|
5
|
+
type SelectorFn<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = (ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>) => TSelected;
|
|
6
|
+
declare function createUseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): <selected>(selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>) => selected;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { SelectorFn, UseSelector };
|
|
9
|
+
//# sourceMappingURL=use-selector.d.mts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/use-selector.ts
|
|
4
|
+
function createUseSelector(createCtx, subscribe) {
|
|
5
|
+
return (selector) => {
|
|
6
|
+
return useSyncExternalStore(subscribe, () => {
|
|
7
|
+
return selector(createCtx());
|
|
8
|
+
}, () => {
|
|
9
|
+
return selector(createCtx());
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { createUseSelector };
|
|
16
|
+
//# sourceMappingURL=use-selector.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-selector.mjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,SAAO,qBACL,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_use_selector = require('./hooks/use-selector.cjs');
|
|
2
|
+
let react = require("react");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
|
|
5
|
+
//#region src/selector.tsx
|
|
6
|
+
let selector;
|
|
7
|
+
(function(_selector) {
|
|
8
|
+
function create(createCtx, subscribe) {
|
|
9
|
+
const useSelector = require_use_selector.createUseSelector(createCtx, subscribe);
|
|
10
|
+
const Selector = ({ selector: selector$1, children }) => {
|
|
11
|
+
const selected = useSelector(selector$1);
|
|
12
|
+
if (children) return (0, react.createElement)(react_jsx_runtime.Fragment, null, children(selected));
|
|
13
|
+
return (0, react.createElement)(react_jsx_runtime.Fragment, null, String(selected ?? ""));
|
|
14
|
+
};
|
|
15
|
+
return (0, react.memo)(Selector, () => false);
|
|
16
|
+
}
|
|
17
|
+
_selector.create = create;
|
|
18
|
+
})(selector || (selector = {}));
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
Object.defineProperty(exports, 'selector', {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return selector;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=selector.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.cjs","names":["createUseSelector","Selector: component<TResolvedStep, TSteps, TChosenSteps>","selector","Fragment"],"sources":["../src/selector.tsx"],"sourcesContent":["import {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { createUseSelector, SelectorFn } from './hooks/use-selector';\nimport { Fragment } from 'react/jsx-runtime';\nimport { createElement, memo } from 'react';\n\nexport namespace selector {\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n > = {\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;\n children?: (selected: TSelected) => React.ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n > =\n /**\n * A component for reactively displaying a value from the form context.\n * Unlike `useSelector`, this component only re-renders itself, not the parent component.\n * Use this when you want to display a reactive value without causing parent re-renders.\n *\n * @param selector - A function that receives the current step's context and returns the selected value\n * @param children - Optional render prop that receives the selected value\n *\n * @example\n * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>\n * {(value) => <p>First name: {value}</p>}\n * </Selector>\n */\n <TSelected>(\n props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>\n ) => React.ReactNode;\n\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n >(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n ) {\n const useSelector = createUseSelector(createCtx, subscribe);\n const Selector: component<TResolvedStep, TSteps, TChosenSteps> = ({\n selector,\n children,\n }) => {\n const selected = useSelector(selector);\n\n if (children) {\n return createElement(Fragment, null, children(selected));\n }\n return createElement(Fragment, null, String(selected ?? ''));\n };\n\n return memo(\n Selector,\n // Always return false to allow re-renders when the selected value changes\n // The memoization is just to prevent re-renders when parent re-renders\n () => false\n );\n }\n}\n"],"mappings":";;;;;;;CA2CS,SAAS,OAKd,WACA,WACA;EACA,MAAM,cAAcA,uCAAkB,WAAW,UAAU;EAC3D,MAAMC,YAA4D,EAChE,sBACA,eACI;GACJ,MAAM,WAAW,YAAYC,WAAS;AAEtC,OAAI,SACF,iCAAqBC,4BAAU,MAAM,SAAS,SAAS,CAAC;AAE1D,mCAAqBA,4BAAU,MAAM,OAAO,YAAY,GAAG,CAAC;;AAG9D,yBACE,gBAGM,MACP"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SelectorFn } from "./hooks/use-selector.cjs";
|
|
2
|
+
import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
|
|
3
|
+
import * as react0 from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/selector.d.ts
|
|
6
|
+
declare namespace selector {
|
|
7
|
+
type props<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = {
|
|
8
|
+
selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;
|
|
9
|
+
children?: (selected: TSelected) => React.ReactNode;
|
|
10
|
+
};
|
|
11
|
+
type component<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> =
|
|
12
|
+
/**
|
|
13
|
+
* A component for reactively displaying a value from the form context.
|
|
14
|
+
* Unlike `useSelector`, this component only re-renders itself, not the parent component.
|
|
15
|
+
* Use this when you want to display a reactive value without causing parent re-renders.
|
|
16
|
+
*
|
|
17
|
+
* @param selector - A function that receives the current step's context and returns the selected value
|
|
18
|
+
* @param children - Optional render prop that receives the selected value
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>
|
|
22
|
+
* {(value) => <p>First name: {value}</p>}
|
|
23
|
+
* </Selector>
|
|
24
|
+
*/
|
|
25
|
+
<TSelected>(props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>) => React.ReactNode;
|
|
26
|
+
function create<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): react0.MemoExoticComponent<component<TResolvedStep, TSteps, TChosenSteps>>;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { selector };
|
|
30
|
+
//# sourceMappingURL=selector.d.cts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SelectorFn } from "./hooks/use-selector.mjs";
|
|
2
|
+
import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
|
|
3
|
+
import * as react0 from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/selector.d.ts
|
|
6
|
+
declare namespace selector {
|
|
7
|
+
type props<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = {
|
|
8
|
+
selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;
|
|
9
|
+
children?: (selected: TSelected) => React.ReactNode;
|
|
10
|
+
};
|
|
11
|
+
type component<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> =
|
|
12
|
+
/**
|
|
13
|
+
* A component for reactively displaying a value from the form context.
|
|
14
|
+
* Unlike `useSelector`, this component only re-renders itself, not the parent component.
|
|
15
|
+
* Use this when you want to display a reactive value without causing parent re-renders.
|
|
16
|
+
*
|
|
17
|
+
* @param selector - A function that receives the current step's context and returns the selected value
|
|
18
|
+
* @param children - Optional render prop that receives the selected value
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>
|
|
22
|
+
* {(value) => <p>First name: {value}</p>}
|
|
23
|
+
* </Selector>
|
|
24
|
+
*/
|
|
25
|
+
<TSelected>(props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>) => React.ReactNode;
|
|
26
|
+
function create<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): react0.MemoExoticComponent<component<TResolvedStep, TSteps, TChosenSteps>>;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { selector };
|
|
30
|
+
//# sourceMappingURL=selector.d.mts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createUseSelector } from "./hooks/use-selector.mjs";
|
|
2
|
+
import { createElement, memo } from "react";
|
|
3
|
+
import { Fragment } from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/selector.tsx
|
|
6
|
+
let selector;
|
|
7
|
+
(function(_selector) {
|
|
8
|
+
function create(createCtx, subscribe) {
|
|
9
|
+
const useSelector = createUseSelector(createCtx, subscribe);
|
|
10
|
+
const Selector = ({ selector: selector$1, children }) => {
|
|
11
|
+
const selected = useSelector(selector$1);
|
|
12
|
+
if (children) return createElement(Fragment, null, children(selected));
|
|
13
|
+
return createElement(Fragment, null, String(selected ?? ""));
|
|
14
|
+
};
|
|
15
|
+
return memo(Selector, () => false);
|
|
16
|
+
}
|
|
17
|
+
_selector.create = create;
|
|
18
|
+
})(selector || (selector = {}));
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { selector };
|
|
22
|
+
//# sourceMappingURL=selector.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.mjs","names":["Selector: component<TResolvedStep, TSteps, TChosenSteps>","selector"],"sources":["../src/selector.tsx"],"sourcesContent":["import {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { createUseSelector, SelectorFn } from './hooks/use-selector';\nimport { Fragment } from 'react/jsx-runtime';\nimport { createElement, memo } from 'react';\n\nexport namespace selector {\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n > = {\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;\n children?: (selected: TSelected) => React.ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n > =\n /**\n * A component for reactively displaying a value from the form context.\n * Unlike `useSelector`, this component only re-renders itself, not the parent component.\n * Use this when you want to display a reactive value without causing parent re-renders.\n *\n * @param selector - A function that receives the current step's context and returns the selected value\n * @param children - Optional render prop that receives the selected value\n *\n * @example\n * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>\n * {(value) => <p>First name: {value}</p>}\n * </Selector>\n */\n <TSelected>(\n props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>\n ) => React.ReactNode;\n\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n >(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n ) {\n const useSelector = createUseSelector(createCtx, subscribe);\n const Selector: component<TResolvedStep, TSteps, TChosenSteps> = ({\n selector,\n children,\n }) => {\n const selected = useSelector(selector);\n\n if (children) {\n return createElement(Fragment, null, children(selected));\n }\n return createElement(Fragment, null, String(selected ?? ''));\n };\n\n return memo(\n Selector,\n // Always return false to allow re-renders when the selected value changes\n // The memoization is just to prevent re-renders when parent re-renders\n () => false\n );\n }\n}\n"],"mappings":";;;;;;;CA2CS,SAAS,OAKd,WACA,WACA;EACA,MAAM,cAAc,kBAAkB,WAAW,UAAU;EAC3D,MAAMA,YAA4D,EAChE,sBACA,eACI;GACJ,MAAM,WAAW,YAAYC,WAAS;AAEtC,OAAI,SACF,QAAO,cAAc,UAAU,MAAM,SAAS,SAAS,CAAC;AAE1D,UAAO,cAAc,UAAU,MAAM,OAAO,YAAY,GAAG,CAAC;;AAG9D,SAAO,KACL,gBAGM,MACP"}
|
package/dist/step-schema.cjs
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
const require_field = require('./field.cjs');
|
|
2
2
|
const require_form_config = require('./form-config.cjs');
|
|
3
|
+
const require_use_selector = require('./hooks/use-selector.cjs');
|
|
4
|
+
const require_selector = require('./selector.cjs');
|
|
3
5
|
const require_utils = require('./utils.cjs');
|
|
4
6
|
let __jfdevelops_multi_step_form_core = require("@jfdevelops/multi-step-form-core");
|
|
5
7
|
let __jfdevelops_multi_step_form_core__internals = require("@jfdevelops/multi-step-form-core/_internals");
|
|
@@ -43,12 +45,11 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
43
45
|
const key = `step${step}`;
|
|
44
46
|
const stepData = [key];
|
|
45
47
|
const id = form?.id ?? key;
|
|
46
|
-
const ctx = (0, __jfdevelops_multi_step_form_core.createCtx)(this.value, stepData);
|
|
47
48
|
return { createComponent: this.createStepSpecificComponentFactory(stepData, {
|
|
48
49
|
isStepSpecific: true,
|
|
49
50
|
defaultId: id,
|
|
50
51
|
form
|
|
51
|
-
}
|
|
52
|
+
}) };
|
|
52
53
|
});
|
|
53
54
|
}
|
|
54
55
|
createFormComponent(form, defaultId) {
|
|
@@ -59,18 +60,30 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
59
60
|
};
|
|
60
61
|
return (props) => render(ctx, props);
|
|
61
62
|
}
|
|
62
|
-
|
|
63
|
+
createResolvedCtx(options) {
|
|
64
|
+
const { logger, stepData, ctxData } = options;
|
|
65
|
+
let resolvedCtx = (0, __jfdevelops_multi_step_form_core.createCtx)(this.value, stepData);
|
|
66
|
+
if (ctxData) {
|
|
67
|
+
const [targetStep] = stepData;
|
|
68
|
+
const { [targetStep]: _, ...values } = this.value;
|
|
69
|
+
resolvedCtx = require_utils.resolvedCtxCreator(logger, values)({
|
|
70
|
+
ctx: resolvedCtx,
|
|
71
|
+
ctxData
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return resolvedCtx;
|
|
75
|
+
}
|
|
76
|
+
createStepSpecificComponentImpl(stepData, config, extraConfig) {
|
|
63
77
|
return (fn) => ((props) => {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
78
|
+
const ctxData = extraConfig?.ctxData;
|
|
79
|
+
const logger = extraConfig?.logger ?? new __jfdevelops_multi_step_form_core.MultiStepFormLogger();
|
|
80
|
+
const resolvedCtx = this.createResolvedCtx({
|
|
81
|
+
stepData,
|
|
82
|
+
ctxData,
|
|
83
|
+
logger
|
|
84
|
+
});
|
|
85
|
+
const hookResults = require_utils.getValidatedCustomInputHooks(extraConfig?.input?.(resolvedCtx) ?? {});
|
|
72
86
|
const { defaultId, form } = config;
|
|
73
|
-
const { ctx } = input;
|
|
74
87
|
const [step] = stepData;
|
|
75
88
|
(0, __jfdevelops_multi_step_form_core.invariant)(this.steps.isValidStepKey(step), `[createComponent]: the target step ${step} is invalid. Note, this error shouldn't appear as the target step should always be valid. If you see this error, please open an issue.`);
|
|
76
89
|
const stepNumber = Number.parseInt(step.replace("step", ""));
|
|
@@ -78,14 +91,14 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
78
91
|
const current = this.value[step];
|
|
79
92
|
(0, __jfdevelops_multi_step_form_core.invariant)("fields" in current, `[${step}:createComponent]: unable to find the "fields" for the current step`);
|
|
80
93
|
(0, __jfdevelops_multi_step_form_core.invariant)(typeof current.fields === "object", `[${step}:createComponent]: the "fields" property must be an object, was ${typeof current.fields}`);
|
|
81
|
-
const stepUpdater = this.#internal.createStepUpdaterFn(step);
|
|
82
94
|
const Field = require_field.field.create((name) => {
|
|
83
|
-
const
|
|
95
|
+
const currentStep = this.value[step];
|
|
96
|
+
const currentFields = Object.keys(currentStep.fields);
|
|
84
97
|
(0, __jfdevelops_multi_step_form_core.invariant)(typeof name === "string", (formatter) => `[${step}:Field]: the "name" prop must be a string and a valid field for ${step}. Available fields include: "${formatter.format(currentFields)}"`);
|
|
85
|
-
(0, __jfdevelops_multi_step_form_core.invariant)(name in
|
|
86
|
-
(0, __jfdevelops_multi_step_form_core.invariant)("update" in
|
|
98
|
+
(0, __jfdevelops_multi_step_form_core.invariant)(name in currentStep.fields, (formatter) => `[${step}:Field]: the field "${name}" doesn't exist for the current step. Available fields include: "${formatter.format(currentFields)}".`);
|
|
99
|
+
(0, __jfdevelops_multi_step_form_core.invariant)("update" in currentStep, `[${step}:Field]: No "update" function was found`);
|
|
87
100
|
const defaultValue = this.getValue(step, name);
|
|
88
|
-
const { label, nameTransformCasing, type } =
|
|
101
|
+
const { label, nameTransformCasing, type } = currentStep.fields[name];
|
|
89
102
|
const targetFields = `fields.${name}.defaultValue`;
|
|
90
103
|
return {
|
|
91
104
|
defaultValue,
|
|
@@ -108,12 +121,24 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
108
121
|
targetStep: step
|
|
109
122
|
})
|
|
110
123
|
};
|
|
111
|
-
});
|
|
124
|
+
}, this.subscribe, (name) => this.getValue(step, name));
|
|
125
|
+
const useSelector = require_use_selector.createUseSelector(() => this.createResolvedCtx({
|
|
126
|
+
stepData,
|
|
127
|
+
ctxData,
|
|
128
|
+
logger
|
|
129
|
+
}), this.subscribe);
|
|
130
|
+
const Selector = require_selector.selector.create(() => this.createResolvedCtx({
|
|
131
|
+
stepData,
|
|
132
|
+
ctxData,
|
|
133
|
+
logger
|
|
134
|
+
}), this.subscribe);
|
|
112
135
|
let fnInput = {
|
|
113
|
-
ctx,
|
|
114
|
-
onInputChange:
|
|
136
|
+
ctx: resolvedCtx,
|
|
137
|
+
onInputChange: this.#internal.createStepUpdaterFn(step),
|
|
115
138
|
reset: this.#internal.createStepResetterFn(step),
|
|
116
139
|
Field,
|
|
140
|
+
useSelector,
|
|
141
|
+
Selector,
|
|
117
142
|
...hookResults
|
|
118
143
|
};
|
|
119
144
|
if (form) {
|
|
@@ -131,23 +156,14 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
131
156
|
}, props);
|
|
132
157
|
});
|
|
133
158
|
}
|
|
134
|
-
createStepSpecificComponentFactory(stepData, config
|
|
159
|
+
createStepSpecificComponentFactory(stepData, config) {
|
|
135
160
|
const createStepSpecificComponentImpl = this.createStepSpecificComponentImpl.bind(this);
|
|
136
161
|
const createDefaultValues$1 = this.createDefaultValues.bind(this);
|
|
137
|
-
const resolvedValues = this.value;
|
|
138
162
|
const [targetStep] = stepData;
|
|
139
|
-
const update = this.#internal.createStepUpdaterFn(targetStep).bind(this.#internal);
|
|
140
|
-
const reset = this.#internal.createStepResetterFn(targetStep).bind(this.#internal);
|
|
141
163
|
function impl(optionsOrFn, fn) {
|
|
142
|
-
function createResolvedCtx(additionalCtx) {
|
|
143
|
-
return additionalCtx ? { ctx: {
|
|
144
|
-
...ctx,
|
|
145
|
-
...additionalCtx
|
|
146
|
-
} } : { ctx };
|
|
147
|
-
}
|
|
148
164
|
function createStepSpecificComponent() {
|
|
149
165
|
(0, __jfdevelops_multi_step_form_core.invariant)(typeof optionsOrFn === "function", "The first argument must be a function");
|
|
150
|
-
return createStepSpecificComponentImpl(stepData, config
|
|
166
|
+
return createStepSpecificComponentImpl(stepData, config)(optionsOrFn);
|
|
151
167
|
}
|
|
152
168
|
if (typeof optionsOrFn === "object") {
|
|
153
169
|
const { useFormInstance, ctxData, debug } = optionsOrFn;
|
|
@@ -158,34 +174,25 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
|
|
|
158
174
|
}
|
|
159
175
|
});
|
|
160
176
|
logger.info("First argument is an object");
|
|
161
|
-
const { [targetStep]: _, ...values } = resolvedValues;
|
|
162
177
|
(0, __jfdevelops_multi_step_form_core.invariant)(typeof fn === "function", "The second argument must be a function");
|
|
163
|
-
const createdCtx = require_utils.resolvedCtxCreator(logger, values);
|
|
164
178
|
if (useFormInstance) {
|
|
165
179
|
const { render, alias = StepSpecificComponent.DEFAULT_FORM_INSTANCE_ALIAS } = useFormInstance;
|
|
166
180
|
const [step] = stepData;
|
|
167
|
-
const defaultValues = createDefaultValues$1(step);
|
|
168
|
-
const resolvedCtx = ctxData ? createdCtx({
|
|
169
|
-
ctx,
|
|
170
|
-
ctxData
|
|
171
|
-
}) : ctx;
|
|
172
|
-
const renderInput = {
|
|
173
|
-
ctx: resolvedCtx,
|
|
174
|
-
defaultValues
|
|
175
|
-
};
|
|
176
181
|
return createStepSpecificComponentImpl(stepData, config, {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
182
|
+
logger,
|
|
183
|
+
ctxData,
|
|
184
|
+
input: (ctx) => {
|
|
185
|
+
const defaultValues = createDefaultValues$1(step);
|
|
186
|
+
return { [alias]: () => render({
|
|
187
|
+
ctx,
|
|
188
|
+
defaultValues
|
|
189
|
+
}) };
|
|
190
|
+
}
|
|
191
|
+
})(fn);
|
|
181
192
|
}
|
|
182
193
|
if (ctxData) return createStepSpecificComponentImpl(stepData, config, {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
ctxData
|
|
186
|
-
}),
|
|
187
|
-
update,
|
|
188
|
-
reset
|
|
194
|
+
logger,
|
|
195
|
+
ctxData
|
|
189
196
|
})(fn);
|
|
190
197
|
return createStepSpecificComponent();
|
|
191
198
|
}
|