rhf-stepper 1.0.0 → 1.0.1

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/index.d.mts CHANGED
@@ -15,7 +15,7 @@ declare namespace Controller {
15
15
 
16
16
  declare function useController<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(props: UseControllerProps<TFieldValues, TName>): UseControllerReturn<TFieldValues, TName>;
17
17
 
18
- type StepValidationMode = 'all' | 'forward' | 'none';
18
+ type StepValidationMode = "all" | "forward" | "none";
19
19
  type MaybePromise<T = void> = T | Promise<T>;
20
20
 
21
21
  type StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {
@@ -33,7 +33,7 @@ interface StepperProps<TFieldValues extends FieldValues = FieldValues> {
33
33
  stepValidationMode?: StepValidationMode;
34
34
  children: React.ReactNode | ((context: StepperContextValue<TFieldValues>) => React.ReactNode);
35
35
  }
36
- declare function Stepper<TFieldValues extends FieldValues = FieldValues>({ form: formProps, stepValidationMode, children }: StepperProps<TFieldValues>): react_jsx_runtime.JSX.Element;
36
+ declare function Stepper<TFieldValues extends FieldValues = FieldValues>({ form: formProps, stepValidationMode, children, }: StepperProps<TFieldValues>): react_jsx_runtime.JSX.Element;
37
37
  declare function useStepper<TFieldValues extends FieldValues = FieldValues>(): StepperContextValue<TFieldValues>;
38
38
 
39
39
  declare function Step({ children }: {
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ declare namespace Controller {
15
15
 
16
16
  declare function useController<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(props: UseControllerProps<TFieldValues, TName>): UseControllerReturn<TFieldValues, TName>;
17
17
 
18
- type StepValidationMode = 'all' | 'forward' | 'none';
18
+ type StepValidationMode = "all" | "forward" | "none";
19
19
  type MaybePromise<T = void> = T | Promise<T>;
20
20
 
21
21
  type StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {
@@ -33,7 +33,7 @@ interface StepperProps<TFieldValues extends FieldValues = FieldValues> {
33
33
  stepValidationMode?: StepValidationMode;
34
34
  children: React.ReactNode | ((context: StepperContextValue<TFieldValues>) => React.ReactNode);
35
35
  }
36
- declare function Stepper<TFieldValues extends FieldValues = FieldValues>({ form: formProps, stepValidationMode, children }: StepperProps<TFieldValues>): react_jsx_runtime.JSX.Element;
36
+ declare function Stepper<TFieldValues extends FieldValues = FieldValues>({ form: formProps, stepValidationMode, children, }: StepperProps<TFieldValues>): react_jsx_runtime.JSX.Element;
37
37
  declare function useStepper<TFieldValues extends FieldValues = FieldValues>(): StepperContextValue<TFieldValues>;
38
38
 
39
39
  declare function Step({ children }: {
package/dist/index.js CHANGED
@@ -25,27 +25,35 @@ function buildNestedValues(fields, values) {
25
25
  }
26
26
  return result;
27
27
  }
28
+ function generateGUID() {
29
+ function s4() {
30
+ return Math.floor((1 + Math.random()) * 65536).toString(16).substring(1);
31
+ }
32
+ return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
33
+ }
28
34
  var StepperContext = react.createContext(null);
29
35
  var InternalStepperContext = react.createContext(null);
30
36
  function useInternalStepperContext() {
31
37
  const context = react.useContext(InternalStepperContext);
32
- if (!context) {
33
- throw new Error("useInternalStepperContext must be used within a <Stepper>");
34
- }
35
38
  return context;
36
39
  }
37
- function Stepper({ form: formProps, stepValidationMode = "forward", children }) {
40
+ function Stepper({
41
+ form: formProps,
42
+ stepValidationMode = "forward",
43
+ children
44
+ }) {
38
45
  const formContext = reactHookForm.useFormContext();
39
46
  const form = formProps != null ? formProps : formContext;
40
- const [steps, setSteps] = react.useState([]);
47
+ const [steps, setSteps] = react.useState({});
48
+ const [stepOrder, setStepOrder] = react.useState([]);
41
49
  const [activeStep, setActiveStep] = react.useState(-1);
42
50
  const [validSteps, setValidSteps] = react.useState([]);
43
51
  const [registrationKey, setRegistrationKey] = react.useState(0);
44
52
  const stepRef = react.useRef(void 0);
45
53
  const fields = react.useMemo(() => {
46
- if (activeStep === -1 || !steps[activeStep]) return null;
47
- return Array.from(new Set(steps[activeStep]));
48
- }, [steps, activeStep]);
54
+ if (activeStep === -1 || !steps[stepOrder[activeStep]]) return null;
55
+ return Array.from(new Set(steps[stepOrder[activeStep]]));
56
+ }, [steps, stepOrder, activeStep]);
49
57
  const jumpTo = react.useCallback(
50
58
  async (step, onLeave) => {
51
59
  if (activeStep !== -1 && fields && stepValidationMode !== "none") {
@@ -62,7 +70,10 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
62
70
  }
63
71
  if (onLeave && fields) {
64
72
  const watchedValues = form.watch(fields);
65
- const values = buildNestedValues(fields, watchedValues);
73
+ const values = buildNestedValues(
74
+ fields,
75
+ watchedValues
76
+ );
66
77
  await onLeave(values);
67
78
  }
68
79
  setActiveStep(step);
@@ -75,55 +86,66 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
75
86
  [activeStep]
76
87
  );
77
88
  const isLastStep = react.useMemo(
78
- () => activeStep === -1 || activeStep === steps.length - 1,
79
- [activeStep, steps.length]
89
+ () => activeStep === -1 || activeStep === stepOrder.length - 1,
90
+ [activeStep, stepOrder.length]
80
91
  );
81
- const next = react.useCallback(async (onLeave) => {
82
- const callback = typeof onLeave === "function" ? onLeave : void 0;
83
- if (activeStep === -1 || activeStep >= steps.length - 1) return false;
84
- if (fields && stepValidationMode !== "none") {
85
- const isValid = await form.trigger(fields);
86
- if (!isValid) {
87
- setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
88
- return false;
92
+ const next = react.useCallback(
93
+ async (onLeave) => {
94
+ const callback = typeof onLeave === "function" ? onLeave : void 0;
95
+ if (activeStep === -1 || activeStep >= stepOrder.length - 1) return false;
96
+ if (fields && stepValidationMode !== "none") {
97
+ const isValid = await form.trigger(fields);
98
+ if (!isValid) {
99
+ setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
100
+ return false;
101
+ }
102
+ setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
89
103
  }
90
- setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
91
- }
92
- if (callback && fields) {
93
- const watchedValues = form.watch(fields);
94
- const values = buildNestedValues(fields, watchedValues);
95
- await callback(values);
96
- }
97
- setActiveStep(activeStep + 1);
98
- return true;
99
- }, [steps.length, activeStep, fields, form, stepValidationMode]);
100
- const prev = react.useCallback(async (onLeave) => {
101
- const callback = typeof onLeave === "function" ? onLeave : void 0;
102
- if (activeStep === -1 || activeStep <= 0) return false;
103
- if (fields && stepValidationMode === "all") {
104
- const isValid = await form.trigger(fields);
105
- if (!isValid) {
106
- setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
107
- return false;
104
+ if (callback && fields) {
105
+ const watchedValues = form.watch(fields);
106
+ const values = buildNestedValues(
107
+ fields,
108
+ watchedValues
109
+ );
110
+ await callback(values);
108
111
  }
109
- setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
110
- }
111
- if (callback && fields) {
112
- const watchedValues = form.watch(fields);
113
- const values = buildNestedValues(fields, watchedValues);
114
- await callback(values);
115
- }
116
- setActiveStep(activeStep - 1);
117
- return true;
118
- }, [activeStep, fields, form, stepValidationMode]);
112
+ setActiveStep(activeStep + 1);
113
+ return true;
114
+ },
115
+ [stepOrder.length, activeStep, fields, form, stepValidationMode]
116
+ );
117
+ const prev = react.useCallback(
118
+ async (onLeave) => {
119
+ const callback = typeof onLeave === "function" ? onLeave : void 0;
120
+ if (activeStep === -1 || activeStep <= 0) return false;
121
+ if (fields && stepValidationMode === "all") {
122
+ const isValid = await form.trigger(fields);
123
+ if (!isValid) {
124
+ setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
125
+ return false;
126
+ }
127
+ setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
128
+ }
129
+ if (callback && fields) {
130
+ const watchedValues = form.watch(fields);
131
+ const values = buildNestedValues(
132
+ fields,
133
+ watchedValues
134
+ );
135
+ await callback(values);
136
+ }
137
+ setActiveStep(activeStep - 1);
138
+ return true;
139
+ },
140
+ [activeStep, fields, form, stepValidationMode]
141
+ );
119
142
  const registerStep = react.useCallback(
120
- (elements, stepRef2, step) => {
143
+ (elements, id) => {
121
144
  setSteps((prevSteps) => {
122
- const stepNumber = step != null ? step : prevSteps.length;
123
- stepRef2.current = stepNumber;
124
- const newSteps = [...prevSteps];
125
- newSteps.splice(stepNumber, 0, elements);
126
- if (activeStep === -1 && newSteps.length > 0) {
145
+ stepRef.current = id;
146
+ const newSteps = { ...prevSteps };
147
+ newSteps[id] = elements;
148
+ if (activeStep === -1 && Object.keys(newSteps).length > 0) {
127
149
  setActiveStep(0);
128
150
  }
129
151
  return newSteps;
@@ -131,17 +153,38 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
131
153
  },
132
154
  [activeStep]
133
155
  );
156
+ const registerStepOrder = react.useCallback(
157
+ (id) => {
158
+ setStepOrder((prevSteps) => {
159
+ return Array.from(/* @__PURE__ */ new Set([...prevSteps, id]));
160
+ });
161
+ },
162
+ [activeStep]
163
+ );
164
+ react.useCallback(
165
+ (id) => {
166
+ setSteps((prevSteps) => {
167
+ const newSteps = { ...prevSteps };
168
+ delete newSteps[id];
169
+ return newSteps;
170
+ });
171
+ },
172
+ [activeStep]
173
+ );
134
174
  const rebuildSteps = react.useCallback(() => {
135
- setSteps([]);
175
+ setStepOrder([]);
136
176
  setRegistrationKey((prev2) => prev2 + 1);
137
177
  }, []);
138
- const changeStepAtIndex = react.useCallback((elements, index) => {
139
- setSteps((prevSteps) => {
140
- const newSteps = [...prevSteps];
141
- newSteps[index] = elements;
142
- return newSteps;
143
- });
144
- }, []);
178
+ const changeStepAtIndex = react.useCallback(
179
+ (elements, index) => {
180
+ setSteps((prevSteps) => {
181
+ const newSteps = { ...prevSteps };
182
+ prevSteps[index] = elements;
183
+ return newSteps;
184
+ });
185
+ },
186
+ []
187
+ );
145
188
  const publicContextValue = react.useMemo(
146
189
  () => ({
147
190
  activeStep,
@@ -170,14 +213,23 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
170
213
  step: stepRef.current,
171
214
  registrationKey,
172
215
  rebuildSteps,
216
+ registerStepOrder,
173
217
  registerStep,
174
218
  changeStepAtIndex
175
219
  }),
176
- [registrationKey, rebuildSteps, registerStep, changeStepAtIndex]
220
+ [
221
+ registrationKey,
222
+ rebuildSteps,
223
+ registerStepOrder,
224
+ registerStep,
225
+ changeStepAtIndex
226
+ ]
177
227
  );
178
228
  const resolvedChildren = (
179
229
  // eslint-disable-next-line react-hooks/refs
180
- typeof children === "function" ? children(publicContextValue) : children
230
+ typeof children === "function" ? children(
231
+ publicContextValue
232
+ ) : children
181
233
  );
182
234
  return (
183
235
  // eslint-disable-next-line react-hooks/refs
@@ -198,23 +250,24 @@ function Step({ children }) {
198
250
  registerStep: registerStepFromParent,
199
251
  step: stepFromParent,
200
252
  rebuildSteps: rebuildStepsFromParent,
253
+ registerStepOrder,
201
254
  changeStepAtIndex: changeStepAtIndexFromParent,
202
255
  registrationKey: registrationKeyFromParent
203
256
  } = formContext;
204
257
  const stepRef = react.useRef(void 0);
258
+ const [id] = react.useState(generateGUID());
205
259
  const [steps, setSteps] = react.useState([]);
206
260
  const [registrationKey, setRegistrationKey] = react.useState(0);
207
- const changeStepAtIndex = react.useCallback((elements, _index) => {
208
- setSteps(elements);
209
- }, []);
210
261
  react.useEffect(() => {
211
262
  const stepList = steps.length ? steps : [""];
212
- if (stepRef.current !== void 0) {
213
- changeStepAtIndexFromParent(stepList, stepRef.current);
214
- } else {
215
- registerStepFromParent(stepList, stepRef);
263
+ registerStepFromParent(stepList, id);
264
+ registerStepOrder(id);
265
+ }, [steps]);
266
+ react.useEffect(() => {
267
+ if (registrationKeyFromParent) {
268
+ registerStepOrder(id);
216
269
  }
217
- }, [registrationKeyFromParent, steps]);
270
+ }, [registrationKeyFromParent]);
218
271
  react.useEffect(() => {
219
272
  if (stepFromParent !== void 0) {
220
273
  rebuildStepsFromParent();
@@ -226,24 +279,13 @@ function Step({ children }) {
226
279
  const registerField = react.useCallback(
227
280
  (element) => {
228
281
  setSteps((prevSteps) => {
229
- return [...prevSteps, element];
230
- });
231
- },
232
- [steps]
233
- );
234
- const registerStep = react.useCallback(
235
- (elements, stepRef2, step) => {
236
- setSteps((prevSteps) => {
237
- const stepNumber = step != null ? step : prevSteps.length;
238
- stepRef2.current = stepNumber;
239
- const newSteps = [...prevSteps];
240
- newSteps.splice(stepNumber, 0, ...elements);
241
- return newSteps;
282
+ return Array.from(/* @__PURE__ */ new Set([...prevSteps, element]));
242
283
  });
243
284
  },
244
285
  [steps]
245
286
  );
246
287
  const rebuildSteps = react.useCallback(() => {
288
+ stepRef.current = void 0;
247
289
  setSteps([]);
248
290
  setRegistrationKey((prev) => prev + 1);
249
291
  }, []);
@@ -252,12 +294,10 @@ function Step({ children }) {
252
294
  // eslint-disable-next-line react-hooks/refs
253
295
  step: stepRef.current,
254
296
  registrationKey,
255
- changeStepAtIndex,
256
297
  registerField,
257
- registerStep,
258
298
  rebuildSteps
259
299
  }),
260
- [registrationKey, changeStepAtIndex, registerField, registerStep, rebuildSteps]
300
+ [registrationKey, registerField, rebuildSteps]
261
301
  );
262
302
  return /* @__PURE__ */ jsxRuntime.jsx(StepContext.Provider, { value: contextValue, children });
263
303
  }
@@ -265,7 +305,7 @@ Step.displayName = "Step";
265
305
  function Controller({ name, ...rest }) {
266
306
  const stepContext = useStep();
267
307
  react.useEffect(() => {
268
- if (stepContext && (stepContext == null ? void 0 : stepContext.registrationKey) !== 0) {
308
+ if (stepContext) {
269
309
  stepContext.registerField(name);
270
310
  }
271
311
  }, [stepContext == null ? void 0 : stepContext.registrationKey]);
@@ -283,7 +323,7 @@ Controller.displayName = "Controller";
283
323
  function useController(props) {
284
324
  const stepContext = useStep();
285
325
  react.useEffect(() => {
286
- if (stepContext && (stepContext == null ? void 0 : stepContext.registrationKey) !== 0) {
326
+ if (stepContext) {
287
327
  stepContext.registerField(props.name);
288
328
  }
289
329
  }, [stepContext == null ? void 0 : stepContext.registrationKey]);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helper.ts","../src/stepper.tsx","../src/step.tsx","../src/controller.tsx","../src/use-controller.tsx"],"names":["createContext","useContext","useFormContext","useState","useRef","useMemo","useCallback","prev","stepRef","jsx","useEffect","RHFController","useRHFController"],"mappings":"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","file":"index.js","sourcesContent":["function buildNestedValues(fields: string[], values: unknown[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (let i = 0; i < fields.length; i++) {\n const segments = fields[i].split('.')\n let current: Record<string, unknown> = result\n for (let j = 0; j < segments.length - 1; j++) {\n const segment = segments[j]\n const nextSegment = segments[j + 1]\n const isNextNumeric = /^\\d+$/.test(nextSegment)\n if (current[segment] === undefined) {\n current[segment] = isNextNumeric ? [] : {}\n }\n current = current[segment] as Record<string, unknown>\n }\n current[segments[segments.length - 1]] = values[i]\n }\n return result\n}\n\nexport { buildNestedValues }\n","import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react'\nimport { type FieldValues, Path, useFormContext, type UseFormReturn } from 'react-hook-form'\n\nimport { buildNestedValues } from './helper'\nimport { type StepValidationMode, type MaybePromise } from './types'\n\ntype StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {\n activeStep: number\n jumpTo: (step: number, onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>) => Promise<boolean>\n fields: string[] | null\n validSteps: number[]\n isFirstStep: boolean\n isLastStep: boolean\n next: (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown) => Promise<boolean>\n prev: (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown) => Promise<boolean>\n}\n\ntype InternalStepperContextValue = {\n step?: number\n registrationKey: number\n rebuildSteps: () => void\n registerStep: (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number) => void\n changeStepAtIndex: (elements: string[], index: number) => void\n}\n\nconst StepperContext = createContext<StepperContextValue | null>(null)\nconst InternalStepperContext = createContext<InternalStepperContextValue | null>(null)\n\n\nfunction useInternalStepperContext(): InternalStepperContextValue {\n const context = useContext(InternalStepperContext)\n if (!context) {\n throw new Error('useInternalStepperContext must be used within a <Stepper>')\n }\n return context\n}\n\ninterface StepperProps<TFieldValues extends FieldValues = FieldValues> {\n form?: UseFormReturn<TFieldValues>\n stepValidationMode?: StepValidationMode\n children: React.ReactNode | ((context: StepperContextValue<TFieldValues>) => React.ReactNode)\n}\n\nfunction Stepper<TFieldValues extends FieldValues = FieldValues>(\n { form:formProps, stepValidationMode = 'forward', children }: StepperProps<TFieldValues>,\n) {\n const formContext = useFormContext()\n\n const form = formProps ?? formContext as UseFormReturn<TFieldValues>\n const [steps, setSteps] = useState<string[][]>([])\n const [activeStep, setActiveStep] = useState(-1)\n const [validSteps, setValidSteps] = useState<number[]>([])\n const [registrationKey, setRegistrationKey] = useState(0)\n\n const stepRef = useRef<number | undefined>(undefined)\n\n const fields = useMemo<string[] | null>(() => {\n if (activeStep === -1 || !steps[activeStep]) return null\n return Array.from(new Set(steps[activeStep]))\n }, [steps, activeStep])\n\n const jumpTo = useCallback(\n async (step: number, onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>): Promise<boolean> => {\n if (activeStep !== -1 && fields && stepValidationMode !== 'none') {\n const isForward = step > activeStep\n const shouldValidate = stepValidationMode === 'all' || (stepValidationMode === 'forward' && isForward)\n if (shouldValidate) {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n }\n if (onLeave && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await onLeave(values)\n }\n setActiveStep(step)\n return true\n },\n [activeStep, fields, form, stepValidationMode],\n )\n\n const isFirstStep = useMemo(\n () => activeStep === -1 || activeStep === 0,\n [activeStep],\n )\n\n const isLastStep = useMemo(\n () => activeStep === -1 || activeStep === steps.length - 1,\n [activeStep, steps.length],\n )\n\n const next = useCallback(async (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown): Promise<boolean> => {\n const callback = typeof onLeave === 'function' ? onLeave as (values: Partial<TFieldValues>) => MaybePromise<void> : undefined\n if (activeStep === -1 || activeStep >= steps.length - 1) return false\n if (fields && stepValidationMode !== 'none') {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await callback(values)\n }\n setActiveStep(activeStep + 1)\n return true\n }, [steps.length, activeStep, fields, form, stepValidationMode])\n\n const prev = useCallback(async (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown): Promise<boolean> => {\n const callback = typeof onLeave === 'function' ? onLeave as (values: Partial<TFieldValues>) => MaybePromise<void> : undefined\n if (activeStep === -1 || activeStep <= 0) return false\n if (fields && stepValidationMode === 'all') {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await callback(values)\n }\n setActiveStep(activeStep - 1)\n return true\n }, [activeStep, fields, form, stepValidationMode])\n\n const registerStep = useCallback(\n (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number): void => {\n setSteps((prevSteps) => {\n const stepNumber = step ?? prevSteps.length\n stepRef.current = stepNumber\n const newSteps = [...prevSteps]\n newSteps.splice(stepNumber, 0, elements)\n\n if (activeStep === -1 && newSteps.length > 0) {\n setActiveStep(0)\n }\n\n return newSteps\n })\n },\n [activeStep],\n )\n\n const rebuildSteps = useCallback(() => {\n setSteps([])\n setRegistrationKey((prev) => prev + 1)\n }, [])\n\n\n const changeStepAtIndex = useCallback((elements: string[], index: number): void => {\n setSteps((prevSteps) => {\n const newSteps = [...prevSteps]\n newSteps[index] = elements\n return newSteps\n })\n }, [])\n\n\n const publicContextValue = useMemo<StepperContextValue>(\n () => ({\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n }),\n [\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n ],\n )\n\n const internalContextValue = useMemo<InternalStepperContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n rebuildSteps,\n registerStep,\n changeStepAtIndex,\n }),\n [registrationKey, rebuildSteps, registerStep, changeStepAtIndex],\n )\n\n const resolvedChildren =\n // eslint-disable-next-line react-hooks/refs\n typeof children === 'function' ? children(publicContextValue as unknown as StepperContextValue<TFieldValues>) : children\n\n return (\n // eslint-disable-next-line react-hooks/refs\n <StepperContext.Provider value={publicContextValue}>\n <InternalStepperContext.Provider value={internalContextValue}>\n {resolvedChildren}\n </InternalStepperContext.Provider>\n </StepperContext.Provider>\n )\n}\n\nfunction useStepper<TFieldValues extends FieldValues = FieldValues>(): StepperContextValue<TFieldValues> {\n const context = useContext(StepperContext)\n return context as unknown as StepperContextValue<TFieldValues>\n}\n\nexport { Stepper, StepperContext, InternalStepperContext, useInternalStepperContext, useStepper }\nexport type { StepperProps, StepperContextValue, InternalStepperContextValue }\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { useInternalStepperContext } from './stepper'\n\ntype StepContextValue = {\n step?: number\n registrationKey: number\n registerField: (elements: string) => void\n registerStep: (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number) => void\n rebuildSteps: () => void\n changeStepAtIndex: (elements: string[], index: number) => void\n}\n\nconst StepContext = createContext<StepContextValue | null>(null)\n\nfunction useStep(): StepContextValue | null {\n return useContext(StepContext)\n}\n\nfunction Step({ children }: { children: React.ReactNode }) {\n const formContext = useInternalStepperContext()\n\n const {\n registerStep: registerStepFromParent,\n step: stepFromParent,\n rebuildSteps: rebuildStepsFromParent,\n changeStepAtIndex: changeStepAtIndexFromParent,\n registrationKey: registrationKeyFromParent,\n } = formContext\n\n\n const stepRef = useRef<number | undefined>(undefined)\n const [steps, setSteps] = useState<string[]>([])\n\n const [registrationKey, setRegistrationKey] = useState(0)\n\n const changeStepAtIndex = useCallback((elements: string[], _index: number): void => {\n setSteps(elements)\n }, [])\n\n useEffect(() => {\n const stepList = steps.length ? steps : ['']\n if (stepRef.current !== undefined) {\n changeStepAtIndexFromParent(stepList, stepRef.current)\n } else {\n registerStepFromParent(stepList, stepRef)\n }\n }, [registrationKeyFromParent, steps])\n\n useEffect(() => {\n if (stepFromParent !== undefined) {\n rebuildStepsFromParent()\n }\n return () => {\n rebuildStepsFromParent()\n }\n }, [])\n\n const registerField = useCallback(\n (element: string): void => {\n setSteps((prevSteps) => {\n return [...prevSteps, element]\n })\n },\n [steps],\n )\n\n const registerStep = useCallback(\n (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number): void => {\n setSteps((prevSteps) => {\n const stepNumber = step ?? prevSteps.length\n stepRef.current = stepNumber\n const newSteps = [...prevSteps]\n newSteps.splice(stepNumber, 0, ...elements)\n return newSteps\n })\n },\n [steps],\n )\n\n const rebuildSteps = useCallback(() => {\n setSteps([])\n setRegistrationKey((prev) => prev + 1)\n }, [])\n\n const contextValue = useMemo<StepContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n changeStepAtIndex,\n registerField,\n registerStep,\n rebuildSteps,\n }),\n [registrationKey, changeStepAtIndex, registerField, registerStep, rebuildSteps],\n )\n\n // eslint-disable-next-line react-hooks/refs\n return <StepContext.Provider value={contextValue}>{children}</StepContext.Provider>\n}\n\nStep.displayName = 'Step'\n\nexport { Step, useStep }\nexport type { StepContextValue }\n","import { ComponentProps, useEffect } from 'react'\nimport {\n type Control,\n Controller as RHFController,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseFormStateReturn,\n} from 'react-hook-form'\n\nimport { useStep } from './step'\n\ntype ControllerRenderArgs<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>\n fieldState: ControllerFieldState\n formState: UseFormStateReturn<TFieldValues>\n}\n\ntype ControllerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = ComponentProps<typeof RHFController<TFieldValues, TName>>\n\nfunction Controller<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, ...rest }: ControllerProps<TFieldValues, TName>) {\n const stepContext = useStep()\n\n useEffect(() => {\n if (stepContext && stepContext?.registrationKey !== 0) {\n stepContext.registerField(name)\n }\n }, [stepContext?.registrationKey])\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps()\n }\n return () => {\n stepContext?.rebuildSteps()\n }\n }, [])\n\n return <RHFController name={name} {...rest} />\n}\n\nController.displayName = 'Controller'\n\nexport { Controller }\nexport type { ControllerProps, ControllerRenderArgs }\n","import { useEffect } from 'react'\nimport {\n type Control,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseControllerReturn,\n useController as useRHFController,\n} from 'react-hook-form'\n\nimport { useStep } from './step'\n\nfunction useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: UseControllerProps<TFieldValues, TName>): UseControllerReturn<TFieldValues, TName> {\n const stepContext = useStep()\n\n useEffect(() => {\n if (stepContext && stepContext?.registrationKey !== 0) {\n stepContext.registerField(props.name)\n }\n }, [stepContext?.registrationKey])\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps()\n }\n return () => {\n stepContext?.rebuildSteps()\n }\n }, [])\n\n return useRHFController({ ...props })\n}\n\nexport { useController }\n"]}
1
+ {"version":3,"sources":["../src/helper.ts","../src/stepper.tsx","../src/step.tsx","../src/controller.tsx","../src/use-controller.tsx"],"names":["createContext","useContext","useFormContext","useState","useRef","useMemo","useCallback","prev","jsx","useEffect","RHFController","useRHFController"],"mappings":"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","file":"index.js","sourcesContent":["function buildNestedValues(\n fields: string[],\n values: unknown[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (let i = 0; i < fields.length; i++) {\n const segments = fields[i].split(\".\");\n let current: Record<string, unknown> = result;\n for (let j = 0; j < segments.length - 1; j++) {\n const segment = segments[j];\n const nextSegment = segments[j + 1];\n const isNextNumeric = /^\\d+$/.test(nextSegment);\n if (current[segment] === undefined) {\n current[segment] = isNextNumeric ? [] : {};\n }\n current = current[segment] as Record<string, unknown>;\n }\n current[segments[segments.length - 1]] = values[i];\n }\n return result;\n}\n\nfunction generateGUID() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return (\n s4() +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n s4() +\n s4()\n );\n}\n\nexport { buildNestedValues, generateGUID };\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n type FieldValues,\n Path,\n useFormContext,\n type UseFormReturn,\n} from \"react-hook-form\";\n\nimport { buildNestedValues, generateGUID } from \"./helper\";\nimport { type StepValidationMode, type MaybePromise } from \"./types\";\n\ntype StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {\n activeStep: number;\n jumpTo: (\n step: number,\n onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>,\n ) => Promise<boolean>;\n fields: string[] | null;\n validSteps: number[];\n isFirstStep: boolean;\n isLastStep: boolean;\n next: (\n onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown,\n ) => Promise<boolean>;\n prev: (\n onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown,\n ) => Promise<boolean>;\n};\n\ntype InternalStepperContextValue = {\n step?: string;\n registrationKey: number;\n rebuildSteps: () => void;\n registerStepOrder: (id: string) => void;\n registerStep: (elements: string[], id: string) => void;\n changeStepAtIndex: (elements: string[], index: string) => void;\n};\n\nconst StepperContext = createContext<StepperContextValue | null>(null);\nconst InternalStepperContext =\n createContext<InternalStepperContextValue | null>(null);\n\nfunction useInternalStepperContext(): InternalStepperContextValue {\n const context = useContext(InternalStepperContext);\n return context as unknown as InternalStepperContextValue;\n}\n\ninterface StepperProps<TFieldValues extends FieldValues = FieldValues> {\n form?: UseFormReturn<TFieldValues>;\n stepValidationMode?: StepValidationMode;\n children:\n | React.ReactNode\n | ((context: StepperContextValue<TFieldValues>) => React.ReactNode);\n}\n\nfunction Stepper<TFieldValues extends FieldValues = FieldValues>({\n form: formProps,\n stepValidationMode = \"forward\",\n children,\n}: StepperProps<TFieldValues>) {\n const formContext = useFormContext();\n\n const form = formProps ?? (formContext as UseFormReturn<TFieldValues>);\n const [steps, setSteps] = useState<Record<string, string[]>>({});\n const [stepOrder, setStepOrder] = useState<string[]>([]);\n const [activeStep, setActiveStep] = useState(-1);\n const [validSteps, setValidSteps] = useState<number[]>([]);\n const [registrationKey, setRegistrationKey] = useState(0);\n\n const stepRef = useRef<string | undefined>(undefined);\n\n const fields = useMemo<string[] | null>(() => {\n if (activeStep === -1 || !steps[stepOrder[activeStep]]) return null;\n return Array.from(new Set(steps[stepOrder[activeStep]]));\n }, [steps, stepOrder, activeStep]);\n\n const jumpTo = useCallback(\n async (\n step: number,\n onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>,\n ): Promise<boolean> => {\n if (activeStep !== -1 && fields && stepValidationMode !== \"none\") {\n const isForward = step > activeStep;\n const shouldValidate =\n stepValidationMode === \"all\" ||\n (stepValidationMode === \"forward\" && isForward);\n if (shouldValidate) {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n }\n if (onLeave && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await onLeave(values);\n }\n setActiveStep(step);\n return true;\n },\n [activeStep, fields, form, stepValidationMode],\n );\n\n const isFirstStep = useMemo(\n () => activeStep === -1 || activeStep === 0,\n [activeStep],\n );\n\n const isLastStep = useMemo(\n () => activeStep === -1 || activeStep === stepOrder.length - 1,\n [activeStep, stepOrder.length],\n );\n\n const next = useCallback(\n async (\n onLeave?:\n | ((values: Partial<TFieldValues>) => MaybePromise<void>)\n | unknown,\n ): Promise<boolean> => {\n const callback =\n typeof onLeave === \"function\"\n ? (onLeave as (values: Partial<TFieldValues>) => MaybePromise<void>)\n : undefined;\n if (activeStep === -1 || activeStep >= stepOrder.length - 1) return false;\n if (fields && stepValidationMode !== \"none\") {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await callback(values);\n }\n setActiveStep(activeStep + 1);\n return true;\n },\n [stepOrder.length, activeStep, fields, form, stepValidationMode],\n );\n\n const prev = useCallback(\n async (\n onLeave?:\n | ((values: Partial<TFieldValues>) => MaybePromise<void>)\n | unknown,\n ): Promise<boolean> => {\n const callback =\n typeof onLeave === \"function\"\n ? (onLeave as (values: Partial<TFieldValues>) => MaybePromise<void>)\n : undefined;\n if (activeStep === -1 || activeStep <= 0) return false;\n if (fields && stepValidationMode === \"all\") {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await callback(values);\n }\n setActiveStep(activeStep - 1);\n return true;\n },\n [activeStep, fields, form, stepValidationMode],\n );\n\n const registerStep = useCallback(\n (elements: string[], id: string): void => {\n setSteps((prevSteps) => {\n stepRef.current = id;\n const newSteps = { ...prevSteps };\n newSteps[id] = elements;\n\n if (activeStep === -1 && Object.keys(newSteps).length > 0) {\n setActiveStep(0);\n }\n\n return newSteps;\n });\n },\n [activeStep],\n );\n\n const registerStepOrder = useCallback(\n (id: string): void => {\n setStepOrder((prevSteps) => {\n return Array.from(new Set([...prevSteps, id]));\n });\n },\n [activeStep],\n );\n\n const unRegisterStep = useCallback(\n (id: string): void => {\n setSteps((prevSteps) => {\n const newSteps = { ...prevSteps };\n delete newSteps[id];\n\n return newSteps;\n });\n },\n [activeStep],\n );\n\n const rebuildSteps = useCallback(() => {\n setStepOrder([]);\n setRegistrationKey((prev) => prev + 1);\n }, []);\n\n const changeStepAtIndex = useCallback(\n (elements: string[], index: string): void => {\n setSteps((prevSteps) => {\n const newSteps = { ...prevSteps };\n prevSteps[index] = elements;\n return newSteps;\n });\n },\n [],\n );\n\n const publicContextValue = useMemo<StepperContextValue>(\n () => ({\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n }),\n [\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n ],\n );\n\n const internalContextValue = useMemo<InternalStepperContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n rebuildSteps,\n registerStepOrder,\n registerStep,\n changeStepAtIndex,\n }),\n [\n registrationKey,\n rebuildSteps,\n registerStepOrder,\n registerStep,\n changeStepAtIndex,\n ],\n );\n\n const resolvedChildren =\n // eslint-disable-next-line react-hooks/refs\n typeof children === \"function\"\n ? children(\n publicContextValue as unknown as StepperContextValue<TFieldValues>,\n )\n : children;\n\n return (\n // eslint-disable-next-line react-hooks/refs\n <StepperContext.Provider value={publicContextValue}>\n <InternalStepperContext.Provider value={internalContextValue}>\n {resolvedChildren}\n </InternalStepperContext.Provider>\n </StepperContext.Provider>\n );\n}\n\nfunction useStepper<\n TFieldValues extends FieldValues = FieldValues,\n>(): StepperContextValue<TFieldValues> {\n const context = useContext(StepperContext);\n return context as unknown as StepperContextValue<TFieldValues>;\n}\n\nexport {\n Stepper,\n StepperContext,\n InternalStepperContext,\n useInternalStepperContext,\n useStepper,\n};\nexport type { StepperProps, StepperContextValue, InternalStepperContextValue };\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { useInternalStepperContext } from \"./stepper\";\nimport { generateGUID } from \"./helper\";\n\ntype StepContextValue = {\n step?: string;\n registrationKey: number;\n registerField: (elements: string) => void;\n rebuildSteps: () => void;\n};\n\nconst StepContext = createContext<StepContextValue | null>(null);\n\nfunction useStep(): StepContextValue | null {\n return useContext(StepContext);\n}\n\nfunction Step({ children }: { children: React.ReactNode }) {\n const formContext = useInternalStepperContext();\n\n const {\n registerStep: registerStepFromParent,\n step: stepFromParent,\n rebuildSteps: rebuildStepsFromParent,\n registerStepOrder,\n changeStepAtIndex: changeStepAtIndexFromParent,\n registrationKey: registrationKeyFromParent,\n } = formContext;\n\n const stepRef = useRef<string | undefined>(undefined);\n\n const [id] = useState(generateGUID());\n const [steps, setSteps] = useState<string[]>([]);\n\n const [registrationKey, setRegistrationKey] = useState(0);\n\n useEffect(() => {\n const stepList = steps.length ? steps : [\"\"];\n registerStepFromParent(stepList, id);\n registerStepOrder(id);\n }, [steps]);\n\n useEffect(() => {\n if (registrationKeyFromParent) {\n registerStepOrder(id);\n }\n }, [registrationKeyFromParent]);\n\n useEffect(() => {\n if (stepFromParent !== undefined) {\n rebuildStepsFromParent();\n }\n return () => {\n rebuildStepsFromParent();\n };\n }, []);\n\n const registerField = useCallback(\n (element: string): void => {\n setSteps((prevSteps) => {\n return Array.from(new Set([...prevSteps, element]));\n });\n },\n [steps],\n );\n\n const rebuildSteps = useCallback(() => {\n stepRef.current = undefined;\n setSteps([]);\n setRegistrationKey((prev) => prev + 1);\n }, []);\n\n const contextValue = useMemo<StepContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n registerField,\n rebuildSteps,\n }),\n [registrationKey, registerField, rebuildSteps],\n );\n\n // eslint-disable-next-line react-hooks/refs\n return (\n <StepContext.Provider value={contextValue}>{children}</StepContext.Provider>\n );\n}\n\nStep.displayName = \"Step\";\n\nexport { Step, useStep };\nexport type { StepContextValue };\n","import { ComponentProps, useEffect } from \"react\";\nimport {\n type Control,\n Controller as RHFController,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseFormStateReturn,\n} from \"react-hook-form\";\n\nimport { useStep } from \"./step\";\nimport { useInternalStepperContext } from \"./stepper\";\n\ntype ControllerRenderArgs<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>;\n fieldState: ControllerFieldState;\n formState: UseFormStateReturn<TFieldValues>;\n};\n\ntype ControllerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = ComponentProps<typeof RHFController<TFieldValues, TName>>;\n\nfunction Controller<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, ...rest }: ControllerProps<TFieldValues, TName>) {\n const stepContext = useStep();\n\n useEffect(() => {\n if (stepContext) {\n stepContext.registerField(name);\n }\n }, [stepContext?.registrationKey]);\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps();\n }\n return () => {\n stepContext?.rebuildSteps();\n };\n }, []);\n\n return <RHFController name={name} {...rest} />;\n}\n\nController.displayName = \"Controller\";\n\nexport { Controller };\nexport type { ControllerProps, ControllerRenderArgs };\n","import { useEffect } from \"react\";\nimport {\n type Control,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseControllerReturn,\n useController as useRHFController,\n} from \"react-hook-form\";\n\nimport { useStep } from \"./step\";\n\nfunction useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: UseControllerProps<TFieldValues, TName>,\n): UseControllerReturn<TFieldValues, TName> {\n const stepContext = useStep();\n\n useEffect(() => {\n if (stepContext) {\n stepContext.registerField(props.name);\n }\n }, [stepContext?.registrationKey]);\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps();\n }\n return () => {\n stepContext?.rebuildSteps();\n };\n }, []);\n\n return useRHFController({ ...props });\n}\n\nexport { useController };\n"]}
package/dist/index.mjs CHANGED
@@ -23,27 +23,35 @@ function buildNestedValues(fields, values) {
23
23
  }
24
24
  return result;
25
25
  }
26
+ function generateGUID() {
27
+ function s4() {
28
+ return Math.floor((1 + Math.random()) * 65536).toString(16).substring(1);
29
+ }
30
+ return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
31
+ }
26
32
  var StepperContext = createContext(null);
27
33
  var InternalStepperContext = createContext(null);
28
34
  function useInternalStepperContext() {
29
35
  const context = useContext(InternalStepperContext);
30
- if (!context) {
31
- throw new Error("useInternalStepperContext must be used within a <Stepper>");
32
- }
33
36
  return context;
34
37
  }
35
- function Stepper({ form: formProps, stepValidationMode = "forward", children }) {
38
+ function Stepper({
39
+ form: formProps,
40
+ stepValidationMode = "forward",
41
+ children
42
+ }) {
36
43
  const formContext = useFormContext();
37
44
  const form = formProps != null ? formProps : formContext;
38
- const [steps, setSteps] = useState([]);
45
+ const [steps, setSteps] = useState({});
46
+ const [stepOrder, setStepOrder] = useState([]);
39
47
  const [activeStep, setActiveStep] = useState(-1);
40
48
  const [validSteps, setValidSteps] = useState([]);
41
49
  const [registrationKey, setRegistrationKey] = useState(0);
42
50
  const stepRef = useRef(void 0);
43
51
  const fields = useMemo(() => {
44
- if (activeStep === -1 || !steps[activeStep]) return null;
45
- return Array.from(new Set(steps[activeStep]));
46
- }, [steps, activeStep]);
52
+ if (activeStep === -1 || !steps[stepOrder[activeStep]]) return null;
53
+ return Array.from(new Set(steps[stepOrder[activeStep]]));
54
+ }, [steps, stepOrder, activeStep]);
47
55
  const jumpTo = useCallback(
48
56
  async (step, onLeave) => {
49
57
  if (activeStep !== -1 && fields && stepValidationMode !== "none") {
@@ -60,7 +68,10 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
60
68
  }
61
69
  if (onLeave && fields) {
62
70
  const watchedValues = form.watch(fields);
63
- const values = buildNestedValues(fields, watchedValues);
71
+ const values = buildNestedValues(
72
+ fields,
73
+ watchedValues
74
+ );
64
75
  await onLeave(values);
65
76
  }
66
77
  setActiveStep(step);
@@ -73,55 +84,66 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
73
84
  [activeStep]
74
85
  );
75
86
  const isLastStep = useMemo(
76
- () => activeStep === -1 || activeStep === steps.length - 1,
77
- [activeStep, steps.length]
87
+ () => activeStep === -1 || activeStep === stepOrder.length - 1,
88
+ [activeStep, stepOrder.length]
78
89
  );
79
- const next = useCallback(async (onLeave) => {
80
- const callback = typeof onLeave === "function" ? onLeave : void 0;
81
- if (activeStep === -1 || activeStep >= steps.length - 1) return false;
82
- if (fields && stepValidationMode !== "none") {
83
- const isValid = await form.trigger(fields);
84
- if (!isValid) {
85
- setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
86
- return false;
90
+ const next = useCallback(
91
+ async (onLeave) => {
92
+ const callback = typeof onLeave === "function" ? onLeave : void 0;
93
+ if (activeStep === -1 || activeStep >= stepOrder.length - 1) return false;
94
+ if (fields && stepValidationMode !== "none") {
95
+ const isValid = await form.trigger(fields);
96
+ if (!isValid) {
97
+ setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
98
+ return false;
99
+ }
100
+ setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
87
101
  }
88
- setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
89
- }
90
- if (callback && fields) {
91
- const watchedValues = form.watch(fields);
92
- const values = buildNestedValues(fields, watchedValues);
93
- await callback(values);
94
- }
95
- setActiveStep(activeStep + 1);
96
- return true;
97
- }, [steps.length, activeStep, fields, form, stepValidationMode]);
98
- const prev = useCallback(async (onLeave) => {
99
- const callback = typeof onLeave === "function" ? onLeave : void 0;
100
- if (activeStep === -1 || activeStep <= 0) return false;
101
- if (fields && stepValidationMode === "all") {
102
- const isValid = await form.trigger(fields);
103
- if (!isValid) {
104
- setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
105
- return false;
102
+ if (callback && fields) {
103
+ const watchedValues = form.watch(fields);
104
+ const values = buildNestedValues(
105
+ fields,
106
+ watchedValues
107
+ );
108
+ await callback(values);
106
109
  }
107
- setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
108
- }
109
- if (callback && fields) {
110
- const watchedValues = form.watch(fields);
111
- const values = buildNestedValues(fields, watchedValues);
112
- await callback(values);
113
- }
114
- setActiveStep(activeStep - 1);
115
- return true;
116
- }, [activeStep, fields, form, stepValidationMode]);
110
+ setActiveStep(activeStep + 1);
111
+ return true;
112
+ },
113
+ [stepOrder.length, activeStep, fields, form, stepValidationMode]
114
+ );
115
+ const prev = useCallback(
116
+ async (onLeave) => {
117
+ const callback = typeof onLeave === "function" ? onLeave : void 0;
118
+ if (activeStep === -1 || activeStep <= 0) return false;
119
+ if (fields && stepValidationMode === "all") {
120
+ const isValid = await form.trigger(fields);
121
+ if (!isValid) {
122
+ setValidSteps((prev2) => prev2.filter((s) => s !== activeStep));
123
+ return false;
124
+ }
125
+ setValidSteps((prev2) => [.../* @__PURE__ */ new Set([...prev2, activeStep])]);
126
+ }
127
+ if (callback && fields) {
128
+ const watchedValues = form.watch(fields);
129
+ const values = buildNestedValues(
130
+ fields,
131
+ watchedValues
132
+ );
133
+ await callback(values);
134
+ }
135
+ setActiveStep(activeStep - 1);
136
+ return true;
137
+ },
138
+ [activeStep, fields, form, stepValidationMode]
139
+ );
117
140
  const registerStep = useCallback(
118
- (elements, stepRef2, step) => {
141
+ (elements, id) => {
119
142
  setSteps((prevSteps) => {
120
- const stepNumber = step != null ? step : prevSteps.length;
121
- stepRef2.current = stepNumber;
122
- const newSteps = [...prevSteps];
123
- newSteps.splice(stepNumber, 0, elements);
124
- if (activeStep === -1 && newSteps.length > 0) {
143
+ stepRef.current = id;
144
+ const newSteps = { ...prevSteps };
145
+ newSteps[id] = elements;
146
+ if (activeStep === -1 && Object.keys(newSteps).length > 0) {
125
147
  setActiveStep(0);
126
148
  }
127
149
  return newSteps;
@@ -129,17 +151,38 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
129
151
  },
130
152
  [activeStep]
131
153
  );
154
+ const registerStepOrder = useCallback(
155
+ (id) => {
156
+ setStepOrder((prevSteps) => {
157
+ return Array.from(/* @__PURE__ */ new Set([...prevSteps, id]));
158
+ });
159
+ },
160
+ [activeStep]
161
+ );
162
+ useCallback(
163
+ (id) => {
164
+ setSteps((prevSteps) => {
165
+ const newSteps = { ...prevSteps };
166
+ delete newSteps[id];
167
+ return newSteps;
168
+ });
169
+ },
170
+ [activeStep]
171
+ );
132
172
  const rebuildSteps = useCallback(() => {
133
- setSteps([]);
173
+ setStepOrder([]);
134
174
  setRegistrationKey((prev2) => prev2 + 1);
135
175
  }, []);
136
- const changeStepAtIndex = useCallback((elements, index) => {
137
- setSteps((prevSteps) => {
138
- const newSteps = [...prevSteps];
139
- newSteps[index] = elements;
140
- return newSteps;
141
- });
142
- }, []);
176
+ const changeStepAtIndex = useCallback(
177
+ (elements, index) => {
178
+ setSteps((prevSteps) => {
179
+ const newSteps = { ...prevSteps };
180
+ prevSteps[index] = elements;
181
+ return newSteps;
182
+ });
183
+ },
184
+ []
185
+ );
143
186
  const publicContextValue = useMemo(
144
187
  () => ({
145
188
  activeStep,
@@ -168,14 +211,23 @@ function Stepper({ form: formProps, stepValidationMode = "forward", children })
168
211
  step: stepRef.current,
169
212
  registrationKey,
170
213
  rebuildSteps,
214
+ registerStepOrder,
171
215
  registerStep,
172
216
  changeStepAtIndex
173
217
  }),
174
- [registrationKey, rebuildSteps, registerStep, changeStepAtIndex]
218
+ [
219
+ registrationKey,
220
+ rebuildSteps,
221
+ registerStepOrder,
222
+ registerStep,
223
+ changeStepAtIndex
224
+ ]
175
225
  );
176
226
  const resolvedChildren = (
177
227
  // eslint-disable-next-line react-hooks/refs
178
- typeof children === "function" ? children(publicContextValue) : children
228
+ typeof children === "function" ? children(
229
+ publicContextValue
230
+ ) : children
179
231
  );
180
232
  return (
181
233
  // eslint-disable-next-line react-hooks/refs
@@ -196,23 +248,24 @@ function Step({ children }) {
196
248
  registerStep: registerStepFromParent,
197
249
  step: stepFromParent,
198
250
  rebuildSteps: rebuildStepsFromParent,
251
+ registerStepOrder,
199
252
  changeStepAtIndex: changeStepAtIndexFromParent,
200
253
  registrationKey: registrationKeyFromParent
201
254
  } = formContext;
202
255
  const stepRef = useRef(void 0);
256
+ const [id] = useState(generateGUID());
203
257
  const [steps, setSteps] = useState([]);
204
258
  const [registrationKey, setRegistrationKey] = useState(0);
205
- const changeStepAtIndex = useCallback((elements, _index) => {
206
- setSteps(elements);
207
- }, []);
208
259
  useEffect(() => {
209
260
  const stepList = steps.length ? steps : [""];
210
- if (stepRef.current !== void 0) {
211
- changeStepAtIndexFromParent(stepList, stepRef.current);
212
- } else {
213
- registerStepFromParent(stepList, stepRef);
261
+ registerStepFromParent(stepList, id);
262
+ registerStepOrder(id);
263
+ }, [steps]);
264
+ useEffect(() => {
265
+ if (registrationKeyFromParent) {
266
+ registerStepOrder(id);
214
267
  }
215
- }, [registrationKeyFromParent, steps]);
268
+ }, [registrationKeyFromParent]);
216
269
  useEffect(() => {
217
270
  if (stepFromParent !== void 0) {
218
271
  rebuildStepsFromParent();
@@ -224,24 +277,13 @@ function Step({ children }) {
224
277
  const registerField = useCallback(
225
278
  (element) => {
226
279
  setSteps((prevSteps) => {
227
- return [...prevSteps, element];
228
- });
229
- },
230
- [steps]
231
- );
232
- const registerStep = useCallback(
233
- (elements, stepRef2, step) => {
234
- setSteps((prevSteps) => {
235
- const stepNumber = step != null ? step : prevSteps.length;
236
- stepRef2.current = stepNumber;
237
- const newSteps = [...prevSteps];
238
- newSteps.splice(stepNumber, 0, ...elements);
239
- return newSteps;
280
+ return Array.from(/* @__PURE__ */ new Set([...prevSteps, element]));
240
281
  });
241
282
  },
242
283
  [steps]
243
284
  );
244
285
  const rebuildSteps = useCallback(() => {
286
+ stepRef.current = void 0;
245
287
  setSteps([]);
246
288
  setRegistrationKey((prev) => prev + 1);
247
289
  }, []);
@@ -250,12 +292,10 @@ function Step({ children }) {
250
292
  // eslint-disable-next-line react-hooks/refs
251
293
  step: stepRef.current,
252
294
  registrationKey,
253
- changeStepAtIndex,
254
295
  registerField,
255
- registerStep,
256
296
  rebuildSteps
257
297
  }),
258
- [registrationKey, changeStepAtIndex, registerField, registerStep, rebuildSteps]
298
+ [registrationKey, registerField, rebuildSteps]
259
299
  );
260
300
  return /* @__PURE__ */ jsx(StepContext.Provider, { value: contextValue, children });
261
301
  }
@@ -263,7 +303,7 @@ Step.displayName = "Step";
263
303
  function Controller({ name, ...rest }) {
264
304
  const stepContext = useStep();
265
305
  useEffect(() => {
266
- if (stepContext && (stepContext == null ? void 0 : stepContext.registrationKey) !== 0) {
306
+ if (stepContext) {
267
307
  stepContext.registerField(name);
268
308
  }
269
309
  }, [stepContext == null ? void 0 : stepContext.registrationKey]);
@@ -281,7 +321,7 @@ Controller.displayName = "Controller";
281
321
  function useController(props) {
282
322
  const stepContext = useStep();
283
323
  useEffect(() => {
284
- if (stepContext && (stepContext == null ? void 0 : stepContext.registrationKey) !== 0) {
324
+ if (stepContext) {
285
325
  stepContext.registerField(props.name);
286
326
  }
287
327
  }, [stepContext == null ? void 0 : stepContext.registrationKey]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/helper.ts","../src/stepper.tsx","../src/step.tsx","../src/controller.tsx","../src/use-controller.tsx"],"names":["prev","stepRef","createContext","useContext","useRef","useState","useCallback","useMemo","jsx","useEffect","RHFController","useRHFController"],"mappings":"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","file":"index.mjs","sourcesContent":["function buildNestedValues(fields: string[], values: unknown[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (let i = 0; i < fields.length; i++) {\n const segments = fields[i].split('.')\n let current: Record<string, unknown> = result\n for (let j = 0; j < segments.length - 1; j++) {\n const segment = segments[j]\n const nextSegment = segments[j + 1]\n const isNextNumeric = /^\\d+$/.test(nextSegment)\n if (current[segment] === undefined) {\n current[segment] = isNextNumeric ? [] : {}\n }\n current = current[segment] as Record<string, unknown>\n }\n current[segments[segments.length - 1]] = values[i]\n }\n return result\n}\n\nexport { buildNestedValues }\n","import { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react'\nimport { type FieldValues, Path, useFormContext, type UseFormReturn } from 'react-hook-form'\n\nimport { buildNestedValues } from './helper'\nimport { type StepValidationMode, type MaybePromise } from './types'\n\ntype StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {\n activeStep: number\n jumpTo: (step: number, onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>) => Promise<boolean>\n fields: string[] | null\n validSteps: number[]\n isFirstStep: boolean\n isLastStep: boolean\n next: (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown) => Promise<boolean>\n prev: (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown) => Promise<boolean>\n}\n\ntype InternalStepperContextValue = {\n step?: number\n registrationKey: number\n rebuildSteps: () => void\n registerStep: (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number) => void\n changeStepAtIndex: (elements: string[], index: number) => void\n}\n\nconst StepperContext = createContext<StepperContextValue | null>(null)\nconst InternalStepperContext = createContext<InternalStepperContextValue | null>(null)\n\n\nfunction useInternalStepperContext(): InternalStepperContextValue {\n const context = useContext(InternalStepperContext)\n if (!context) {\n throw new Error('useInternalStepperContext must be used within a <Stepper>')\n }\n return context\n}\n\ninterface StepperProps<TFieldValues extends FieldValues = FieldValues> {\n form?: UseFormReturn<TFieldValues>\n stepValidationMode?: StepValidationMode\n children: React.ReactNode | ((context: StepperContextValue<TFieldValues>) => React.ReactNode)\n}\n\nfunction Stepper<TFieldValues extends FieldValues = FieldValues>(\n { form:formProps, stepValidationMode = 'forward', children }: StepperProps<TFieldValues>,\n) {\n const formContext = useFormContext()\n\n const form = formProps ?? formContext as UseFormReturn<TFieldValues>\n const [steps, setSteps] = useState<string[][]>([])\n const [activeStep, setActiveStep] = useState(-1)\n const [validSteps, setValidSteps] = useState<number[]>([])\n const [registrationKey, setRegistrationKey] = useState(0)\n\n const stepRef = useRef<number | undefined>(undefined)\n\n const fields = useMemo<string[] | null>(() => {\n if (activeStep === -1 || !steps[activeStep]) return null\n return Array.from(new Set(steps[activeStep]))\n }, [steps, activeStep])\n\n const jumpTo = useCallback(\n async (step: number, onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>): Promise<boolean> => {\n if (activeStep !== -1 && fields && stepValidationMode !== 'none') {\n const isForward = step > activeStep\n const shouldValidate = stepValidationMode === 'all' || (stepValidationMode === 'forward' && isForward)\n if (shouldValidate) {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n }\n if (onLeave && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await onLeave(values)\n }\n setActiveStep(step)\n return true\n },\n [activeStep, fields, form, stepValidationMode],\n )\n\n const isFirstStep = useMemo(\n () => activeStep === -1 || activeStep === 0,\n [activeStep],\n )\n\n const isLastStep = useMemo(\n () => activeStep === -1 || activeStep === steps.length - 1,\n [activeStep, steps.length],\n )\n\n const next = useCallback(async (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown): Promise<boolean> => {\n const callback = typeof onLeave === 'function' ? onLeave as (values: Partial<TFieldValues>) => MaybePromise<void> : undefined\n if (activeStep === -1 || activeStep >= steps.length - 1) return false\n if (fields && stepValidationMode !== 'none') {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await callback(values)\n }\n setActiveStep(activeStep + 1)\n return true\n }, [steps.length, activeStep, fields, form, stepValidationMode])\n\n const prev = useCallback(async (onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown): Promise<boolean> => {\n const callback = typeof onLeave === 'function' ? onLeave as (values: Partial<TFieldValues>) => MaybePromise<void> : undefined\n if (activeStep === -1 || activeStep <= 0) return false\n if (fields && stepValidationMode === 'all') {\n const isValid = await form.trigger(fields as Path<TFieldValues>[])\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep))\n return false\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])])\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[])\n const values = buildNestedValues(fields, watchedValues) as Partial<TFieldValues>\n await callback(values)\n }\n setActiveStep(activeStep - 1)\n return true\n }, [activeStep, fields, form, stepValidationMode])\n\n const registerStep = useCallback(\n (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number): void => {\n setSteps((prevSteps) => {\n const stepNumber = step ?? prevSteps.length\n stepRef.current = stepNumber\n const newSteps = [...prevSteps]\n newSteps.splice(stepNumber, 0, elements)\n\n if (activeStep === -1 && newSteps.length > 0) {\n setActiveStep(0)\n }\n\n return newSteps\n })\n },\n [activeStep],\n )\n\n const rebuildSteps = useCallback(() => {\n setSteps([])\n setRegistrationKey((prev) => prev + 1)\n }, [])\n\n\n const changeStepAtIndex = useCallback((elements: string[], index: number): void => {\n setSteps((prevSteps) => {\n const newSteps = [...prevSteps]\n newSteps[index] = elements\n return newSteps\n })\n }, [])\n\n\n const publicContextValue = useMemo<StepperContextValue>(\n () => ({\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n }),\n [\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n ],\n )\n\n const internalContextValue = useMemo<InternalStepperContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n rebuildSteps,\n registerStep,\n changeStepAtIndex,\n }),\n [registrationKey, rebuildSteps, registerStep, changeStepAtIndex],\n )\n\n const resolvedChildren =\n // eslint-disable-next-line react-hooks/refs\n typeof children === 'function' ? children(publicContextValue as unknown as StepperContextValue<TFieldValues>) : children\n\n return (\n // eslint-disable-next-line react-hooks/refs\n <StepperContext.Provider value={publicContextValue}>\n <InternalStepperContext.Provider value={internalContextValue}>\n {resolvedChildren}\n </InternalStepperContext.Provider>\n </StepperContext.Provider>\n )\n}\n\nfunction useStepper<TFieldValues extends FieldValues = FieldValues>(): StepperContextValue<TFieldValues> {\n const context = useContext(StepperContext)\n return context as unknown as StepperContextValue<TFieldValues>\n}\n\nexport { Stepper, StepperContext, InternalStepperContext, useInternalStepperContext, useStepper }\nexport type { StepperProps, StepperContextValue, InternalStepperContextValue }\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { useInternalStepperContext } from './stepper'\n\ntype StepContextValue = {\n step?: number\n registrationKey: number\n registerField: (elements: string) => void\n registerStep: (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number) => void\n rebuildSteps: () => void\n changeStepAtIndex: (elements: string[], index: number) => void\n}\n\nconst StepContext = createContext<StepContextValue | null>(null)\n\nfunction useStep(): StepContextValue | null {\n return useContext(StepContext)\n}\n\nfunction Step({ children }: { children: React.ReactNode }) {\n const formContext = useInternalStepperContext()\n\n const {\n registerStep: registerStepFromParent,\n step: stepFromParent,\n rebuildSteps: rebuildStepsFromParent,\n changeStepAtIndex: changeStepAtIndexFromParent,\n registrationKey: registrationKeyFromParent,\n } = formContext\n\n\n const stepRef = useRef<number | undefined>(undefined)\n const [steps, setSteps] = useState<string[]>([])\n\n const [registrationKey, setRegistrationKey] = useState(0)\n\n const changeStepAtIndex = useCallback((elements: string[], _index: number): void => {\n setSteps(elements)\n }, [])\n\n useEffect(() => {\n const stepList = steps.length ? steps : ['']\n if (stepRef.current !== undefined) {\n changeStepAtIndexFromParent(stepList, stepRef.current)\n } else {\n registerStepFromParent(stepList, stepRef)\n }\n }, [registrationKeyFromParent, steps])\n\n useEffect(() => {\n if (stepFromParent !== undefined) {\n rebuildStepsFromParent()\n }\n return () => {\n rebuildStepsFromParent()\n }\n }, [])\n\n const registerField = useCallback(\n (element: string): void => {\n setSteps((prevSteps) => {\n return [...prevSteps, element]\n })\n },\n [steps],\n )\n\n const registerStep = useCallback(\n (elements: string[], stepRef: React.RefObject<number | undefined>, step?: number): void => {\n setSteps((prevSteps) => {\n const stepNumber = step ?? prevSteps.length\n stepRef.current = stepNumber\n const newSteps = [...prevSteps]\n newSteps.splice(stepNumber, 0, ...elements)\n return newSteps\n })\n },\n [steps],\n )\n\n const rebuildSteps = useCallback(() => {\n setSteps([])\n setRegistrationKey((prev) => prev + 1)\n }, [])\n\n const contextValue = useMemo<StepContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n changeStepAtIndex,\n registerField,\n registerStep,\n rebuildSteps,\n }),\n [registrationKey, changeStepAtIndex, registerField, registerStep, rebuildSteps],\n )\n\n // eslint-disable-next-line react-hooks/refs\n return <StepContext.Provider value={contextValue}>{children}</StepContext.Provider>\n}\n\nStep.displayName = 'Step'\n\nexport { Step, useStep }\nexport type { StepContextValue }\n","import { ComponentProps, useEffect } from 'react'\nimport {\n type Control,\n Controller as RHFController,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseFormStateReturn,\n} from 'react-hook-form'\n\nimport { useStep } from './step'\n\ntype ControllerRenderArgs<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>\n fieldState: ControllerFieldState\n formState: UseFormStateReturn<TFieldValues>\n}\n\ntype ControllerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = ComponentProps<typeof RHFController<TFieldValues, TName>>\n\nfunction Controller<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, ...rest }: ControllerProps<TFieldValues, TName>) {\n const stepContext = useStep()\n\n useEffect(() => {\n if (stepContext && stepContext?.registrationKey !== 0) {\n stepContext.registerField(name)\n }\n }, [stepContext?.registrationKey])\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps()\n }\n return () => {\n stepContext?.rebuildSteps()\n }\n }, [])\n\n return <RHFController name={name} {...rest} />\n}\n\nController.displayName = 'Controller'\n\nexport { Controller }\nexport type { ControllerProps, ControllerRenderArgs }\n","import { useEffect } from 'react'\nimport {\n type Control,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseControllerReturn,\n useController as useRHFController,\n} from 'react-hook-form'\n\nimport { useStep } from './step'\n\nfunction useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(props: UseControllerProps<TFieldValues, TName>): UseControllerReturn<TFieldValues, TName> {\n const stepContext = useStep()\n\n useEffect(() => {\n if (stepContext && stepContext?.registrationKey !== 0) {\n stepContext.registerField(props.name)\n }\n }, [stepContext?.registrationKey])\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps()\n }\n return () => {\n stepContext?.rebuildSteps()\n }\n }, [])\n\n return useRHFController({ ...props })\n}\n\nexport { useController }\n"]}
1
+ {"version":3,"sources":["../src/helper.ts","../src/stepper.tsx","../src/step.tsx","../src/controller.tsx","../src/use-controller.tsx"],"names":["prev","createContext","useContext","useRef","useState","useCallback","useMemo","jsx","useEffect","RHFController","useRHFController"],"mappings":"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","file":"index.mjs","sourcesContent":["function buildNestedValues(\n fields: string[],\n values: unknown[],\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (let i = 0; i < fields.length; i++) {\n const segments = fields[i].split(\".\");\n let current: Record<string, unknown> = result;\n for (let j = 0; j < segments.length - 1; j++) {\n const segment = segments[j];\n const nextSegment = segments[j + 1];\n const isNextNumeric = /^\\d+$/.test(nextSegment);\n if (current[segment] === undefined) {\n current[segment] = isNextNumeric ? [] : {};\n }\n current = current[segment] as Record<string, unknown>;\n }\n current[segments[segments.length - 1]] = values[i];\n }\n return result;\n}\n\nfunction generateGUID() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return (\n s4() +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n \"-\" +\n s4() +\n s4() +\n s4()\n );\n}\n\nexport { buildNestedValues, generateGUID };\n","import {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n type FieldValues,\n Path,\n useFormContext,\n type UseFormReturn,\n} from \"react-hook-form\";\n\nimport { buildNestedValues, generateGUID } from \"./helper\";\nimport { type StepValidationMode, type MaybePromise } from \"./types\";\n\ntype StepperContextValue<TFieldValues extends FieldValues = FieldValues> = {\n activeStep: number;\n jumpTo: (\n step: number,\n onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>,\n ) => Promise<boolean>;\n fields: string[] | null;\n validSteps: number[];\n isFirstStep: boolean;\n isLastStep: boolean;\n next: (\n onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown,\n ) => Promise<boolean>;\n prev: (\n onLeave?: ((values: Partial<TFieldValues>) => MaybePromise<void>) | unknown,\n ) => Promise<boolean>;\n};\n\ntype InternalStepperContextValue = {\n step?: string;\n registrationKey: number;\n rebuildSteps: () => void;\n registerStepOrder: (id: string) => void;\n registerStep: (elements: string[], id: string) => void;\n changeStepAtIndex: (elements: string[], index: string) => void;\n};\n\nconst StepperContext = createContext<StepperContextValue | null>(null);\nconst InternalStepperContext =\n createContext<InternalStepperContextValue | null>(null);\n\nfunction useInternalStepperContext(): InternalStepperContextValue {\n const context = useContext(InternalStepperContext);\n return context as unknown as InternalStepperContextValue;\n}\n\ninterface StepperProps<TFieldValues extends FieldValues = FieldValues> {\n form?: UseFormReturn<TFieldValues>;\n stepValidationMode?: StepValidationMode;\n children:\n | React.ReactNode\n | ((context: StepperContextValue<TFieldValues>) => React.ReactNode);\n}\n\nfunction Stepper<TFieldValues extends FieldValues = FieldValues>({\n form: formProps,\n stepValidationMode = \"forward\",\n children,\n}: StepperProps<TFieldValues>) {\n const formContext = useFormContext();\n\n const form = formProps ?? (formContext as UseFormReturn<TFieldValues>);\n const [steps, setSteps] = useState<Record<string, string[]>>({});\n const [stepOrder, setStepOrder] = useState<string[]>([]);\n const [activeStep, setActiveStep] = useState(-1);\n const [validSteps, setValidSteps] = useState<number[]>([]);\n const [registrationKey, setRegistrationKey] = useState(0);\n\n const stepRef = useRef<string | undefined>(undefined);\n\n const fields = useMemo<string[] | null>(() => {\n if (activeStep === -1 || !steps[stepOrder[activeStep]]) return null;\n return Array.from(new Set(steps[stepOrder[activeStep]]));\n }, [steps, stepOrder, activeStep]);\n\n const jumpTo = useCallback(\n async (\n step: number,\n onLeave?: (values: Partial<TFieldValues>) => MaybePromise<void>,\n ): Promise<boolean> => {\n if (activeStep !== -1 && fields && stepValidationMode !== \"none\") {\n const isForward = step > activeStep;\n const shouldValidate =\n stepValidationMode === \"all\" ||\n (stepValidationMode === \"forward\" && isForward);\n if (shouldValidate) {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n }\n if (onLeave && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await onLeave(values);\n }\n setActiveStep(step);\n return true;\n },\n [activeStep, fields, form, stepValidationMode],\n );\n\n const isFirstStep = useMemo(\n () => activeStep === -1 || activeStep === 0,\n [activeStep],\n );\n\n const isLastStep = useMemo(\n () => activeStep === -1 || activeStep === stepOrder.length - 1,\n [activeStep, stepOrder.length],\n );\n\n const next = useCallback(\n async (\n onLeave?:\n | ((values: Partial<TFieldValues>) => MaybePromise<void>)\n | unknown,\n ): Promise<boolean> => {\n const callback =\n typeof onLeave === \"function\"\n ? (onLeave as (values: Partial<TFieldValues>) => MaybePromise<void>)\n : undefined;\n if (activeStep === -1 || activeStep >= stepOrder.length - 1) return false;\n if (fields && stepValidationMode !== \"none\") {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await callback(values);\n }\n setActiveStep(activeStep + 1);\n return true;\n },\n [stepOrder.length, activeStep, fields, form, stepValidationMode],\n );\n\n const prev = useCallback(\n async (\n onLeave?:\n | ((values: Partial<TFieldValues>) => MaybePromise<void>)\n | unknown,\n ): Promise<boolean> => {\n const callback =\n typeof onLeave === \"function\"\n ? (onLeave as (values: Partial<TFieldValues>) => MaybePromise<void>)\n : undefined;\n if (activeStep === -1 || activeStep <= 0) return false;\n if (fields && stepValidationMode === \"all\") {\n const isValid = await form.trigger(fields as Path<TFieldValues>[]);\n if (!isValid) {\n setValidSteps((prev) => prev.filter((s) => s !== activeStep));\n return false;\n }\n setValidSteps((prev) => [...new Set([...prev, activeStep])]);\n }\n if (callback && fields) {\n const watchedValues = form.watch(fields as Path<TFieldValues>[]);\n const values = buildNestedValues(\n fields,\n watchedValues,\n ) as Partial<TFieldValues>;\n await callback(values);\n }\n setActiveStep(activeStep - 1);\n return true;\n },\n [activeStep, fields, form, stepValidationMode],\n );\n\n const registerStep = useCallback(\n (elements: string[], id: string): void => {\n setSteps((prevSteps) => {\n stepRef.current = id;\n const newSteps = { ...prevSteps };\n newSteps[id] = elements;\n\n if (activeStep === -1 && Object.keys(newSteps).length > 0) {\n setActiveStep(0);\n }\n\n return newSteps;\n });\n },\n [activeStep],\n );\n\n const registerStepOrder = useCallback(\n (id: string): void => {\n setStepOrder((prevSteps) => {\n return Array.from(new Set([...prevSteps, id]));\n });\n },\n [activeStep],\n );\n\n const unRegisterStep = useCallback(\n (id: string): void => {\n setSteps((prevSteps) => {\n const newSteps = { ...prevSteps };\n delete newSteps[id];\n\n return newSteps;\n });\n },\n [activeStep],\n );\n\n const rebuildSteps = useCallback(() => {\n setStepOrder([]);\n setRegistrationKey((prev) => prev + 1);\n }, []);\n\n const changeStepAtIndex = useCallback(\n (elements: string[], index: string): void => {\n setSteps((prevSteps) => {\n const newSteps = { ...prevSteps };\n prevSteps[index] = elements;\n return newSteps;\n });\n },\n [],\n );\n\n const publicContextValue = useMemo<StepperContextValue>(\n () => ({\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n }),\n [\n activeStep,\n jumpTo,\n fields,\n validSteps,\n isFirstStep,\n isLastStep,\n next,\n prev,\n ],\n );\n\n const internalContextValue = useMemo<InternalStepperContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n rebuildSteps,\n registerStepOrder,\n registerStep,\n changeStepAtIndex,\n }),\n [\n registrationKey,\n rebuildSteps,\n registerStepOrder,\n registerStep,\n changeStepAtIndex,\n ],\n );\n\n const resolvedChildren =\n // eslint-disable-next-line react-hooks/refs\n typeof children === \"function\"\n ? children(\n publicContextValue as unknown as StepperContextValue<TFieldValues>,\n )\n : children;\n\n return (\n // eslint-disable-next-line react-hooks/refs\n <StepperContext.Provider value={publicContextValue}>\n <InternalStepperContext.Provider value={internalContextValue}>\n {resolvedChildren}\n </InternalStepperContext.Provider>\n </StepperContext.Provider>\n );\n}\n\nfunction useStepper<\n TFieldValues extends FieldValues = FieldValues,\n>(): StepperContextValue<TFieldValues> {\n const context = useContext(StepperContext);\n return context as unknown as StepperContextValue<TFieldValues>;\n}\n\nexport {\n Stepper,\n StepperContext,\n InternalStepperContext,\n useInternalStepperContext,\n useStepper,\n};\nexport type { StepperProps, StepperContextValue, InternalStepperContextValue };\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { useInternalStepperContext } from \"./stepper\";\nimport { generateGUID } from \"./helper\";\n\ntype StepContextValue = {\n step?: string;\n registrationKey: number;\n registerField: (elements: string) => void;\n rebuildSteps: () => void;\n};\n\nconst StepContext = createContext<StepContextValue | null>(null);\n\nfunction useStep(): StepContextValue | null {\n return useContext(StepContext);\n}\n\nfunction Step({ children }: { children: React.ReactNode }) {\n const formContext = useInternalStepperContext();\n\n const {\n registerStep: registerStepFromParent,\n step: stepFromParent,\n rebuildSteps: rebuildStepsFromParent,\n registerStepOrder,\n changeStepAtIndex: changeStepAtIndexFromParent,\n registrationKey: registrationKeyFromParent,\n } = formContext;\n\n const stepRef = useRef<string | undefined>(undefined);\n\n const [id] = useState(generateGUID());\n const [steps, setSteps] = useState<string[]>([]);\n\n const [registrationKey, setRegistrationKey] = useState(0);\n\n useEffect(() => {\n const stepList = steps.length ? steps : [\"\"];\n registerStepFromParent(stepList, id);\n registerStepOrder(id);\n }, [steps]);\n\n useEffect(() => {\n if (registrationKeyFromParent) {\n registerStepOrder(id);\n }\n }, [registrationKeyFromParent]);\n\n useEffect(() => {\n if (stepFromParent !== undefined) {\n rebuildStepsFromParent();\n }\n return () => {\n rebuildStepsFromParent();\n };\n }, []);\n\n const registerField = useCallback(\n (element: string): void => {\n setSteps((prevSteps) => {\n return Array.from(new Set([...prevSteps, element]));\n });\n },\n [steps],\n );\n\n const rebuildSteps = useCallback(() => {\n stepRef.current = undefined;\n setSteps([]);\n setRegistrationKey((prev) => prev + 1);\n }, []);\n\n const contextValue = useMemo<StepContextValue>(\n () => ({\n // eslint-disable-next-line react-hooks/refs\n step: stepRef.current,\n registrationKey,\n registerField,\n rebuildSteps,\n }),\n [registrationKey, registerField, rebuildSteps],\n );\n\n // eslint-disable-next-line react-hooks/refs\n return (\n <StepContext.Provider value={contextValue}>{children}</StepContext.Provider>\n );\n}\n\nStep.displayName = \"Step\";\n\nexport { Step, useStep };\nexport type { StepContextValue };\n","import { ComponentProps, useEffect } from \"react\";\nimport {\n type Control,\n Controller as RHFController,\n type ControllerFieldState,\n type ControllerRenderProps,\n type FieldPath,\n type FieldValues,\n type UseFormStateReturn,\n} from \"react-hook-form\";\n\nimport { useStep } from \"./step\";\nimport { useInternalStepperContext } from \"./stepper\";\n\ntype ControllerRenderArgs<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n field: ControllerRenderProps<TFieldValues, TName>;\n fieldState: ControllerFieldState;\n formState: UseFormStateReturn<TFieldValues>;\n};\n\ntype ControllerProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = ComponentProps<typeof RHFController<TFieldValues, TName>>;\n\nfunction Controller<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({ name, ...rest }: ControllerProps<TFieldValues, TName>) {\n const stepContext = useStep();\n\n useEffect(() => {\n if (stepContext) {\n stepContext.registerField(name);\n }\n }, [stepContext?.registrationKey]);\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps();\n }\n return () => {\n stepContext?.rebuildSteps();\n };\n }, []);\n\n return <RHFController name={name} {...rest} />;\n}\n\nController.displayName = \"Controller\";\n\nexport { Controller };\nexport type { ControllerProps, ControllerRenderArgs };\n","import { useEffect } from \"react\";\nimport {\n type Control,\n type FieldPath,\n type FieldValues,\n type UseControllerProps,\n type UseControllerReturn,\n useController as useRHFController,\n} from \"react-hook-form\";\n\nimport { useStep } from \"./step\";\n\nfunction useController<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: UseControllerProps<TFieldValues, TName>,\n): UseControllerReturn<TFieldValues, TName> {\n const stepContext = useStep();\n\n useEffect(() => {\n if (stepContext) {\n stepContext.registerField(props.name);\n }\n }, [stepContext?.registrationKey]);\n\n useEffect(() => {\n if (stepContext?.step !== undefined) {\n stepContext?.rebuildSteps();\n }\n return () => {\n stepContext?.rebuildSteps();\n };\n }, []);\n\n return useRHFController({ ...props });\n}\n\nexport { useController };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rhf-stepper",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A multi-step form helper for react-hook-form",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",