@saas-ui/forms 1.0.0-rc.1 → 1.0.0-rc.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/README.md +29 -0
  3. package/ajv/package.json +18 -0
  4. package/dist/ajv/ajv-resolver.d.ts +11 -0
  5. package/dist/ajv/ajv-resolver.d.ts.map +1 -0
  6. package/dist/ajv/index.d.ts +2 -0
  7. package/dist/ajv/index.d.ts.map +1 -0
  8. package/dist/ajv/index.js +97 -0
  9. package/dist/ajv/index.js.map +1 -0
  10. package/dist/ajv/index.modern.mjs +97 -0
  11. package/dist/ajv/index.modern.mjs.map +1 -0
  12. package/dist/array-field.d.ts +14 -3
  13. package/dist/array-field.d.ts.map +1 -1
  14. package/dist/auto-form.d.ts +13 -1
  15. package/dist/auto-form.d.ts.map +1 -1
  16. package/dist/field.d.ts +82 -27
  17. package/dist/field.d.ts.map +1 -1
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.modern.mjs +1 -1
  22. package/dist/index.modern.mjs.map +1 -1
  23. package/dist/layout.d.ts +0 -1
  24. package/dist/layout.d.ts.map +1 -1
  25. package/dist/step-form.d.ts +4 -4
  26. package/dist/step-form.d.ts.map +1 -1
  27. package/dist/use-step-form.d.ts +7 -3
  28. package/dist/use-step-form.d.ts.map +1 -1
  29. package/dist/zod/index.js +1 -1
  30. package/dist/zod/index.js.map +1 -1
  31. package/dist/zod/index.modern.mjs +1 -1
  32. package/dist/zod/index.modern.mjs.map +1 -1
  33. package/package.json +32 -17
  34. package/src/array-field.tsx +21 -22
  35. package/src/auto-form.tsx +22 -3
  36. package/src/field-resolver.ts +2 -2
  37. package/src/field.tsx +186 -71
  38. package/src/form.tsx +0 -1
  39. package/src/object-field.tsx +3 -3
  40. package/src/step-form.tsx +23 -17
  41. package/src/submit-button.tsx +1 -1
  42. package/src/use-step-form.tsx +27 -12
  43. package/yup/package.json +2 -2
  44. package/zod/package.json +4 -4
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react'
2
- import { FieldValues, SubmitHandler } from 'react-hook-form'
3
- import { createContext } from '@chakra-ui/react-utils'
2
+ import { FieldValues, SubmitHandler, UnpackNestedValue } from 'react-hook-form'
3
+ import { createContext, MaybeRenderProp } from '@chakra-ui/react-utils'
4
4
  import {
5
5
  useStepper,
6
6
  useStep,
@@ -14,8 +14,16 @@ export interface StepState {
14
14
  resolver?: any
15
15
  isActive?: boolean
16
16
  isCompleted?: boolean
17
+ onSubmit?: FormStepSubmitHandler
17
18
  }
18
19
 
20
+ export type FormStepSubmitHandler<
21
+ TFieldValues extends FieldValues = FieldValues
22
+ > = (
23
+ data: UnpackNestedValue<TFieldValues>,
24
+ stepper: UseStepperReturn
25
+ ) => Promise<void>
26
+
19
27
  export interface StepFormContext extends UseStepperReturn {
20
28
  updateStep(state: StepState): void
21
29
  steps: Record<string, StepState>
@@ -32,11 +40,9 @@ import { FormProps } from './form'
32
40
 
33
41
  export interface UseStepFormProps<
34
42
  TFieldValues extends FieldValues = FieldValues
35
- > extends UseStepperProps,
43
+ > extends Omit<UseStepperProps, 'onChange'>,
36
44
  Omit<FormProps<TFieldValues>, 'children'> {
37
- children:
38
- | React.ReactNode
39
- | ((stepper: UseStepFormReturn<TFieldValues>) => React.ReactElement)
45
+ children: MaybeRenderProp<UseStepFormReturn<TFieldValues>>
40
46
  }
41
47
 
42
48
  export interface UseStepFormReturn<
@@ -54,7 +60,8 @@ export interface UseStepFormReturn<
54
60
  export function useStepForm<TFieldValues extends FieldValues = FieldValues>(
55
61
  props: UseStepFormProps<TFieldValues>
56
62
  ): UseStepFormReturn<TFieldValues> {
57
- const stepper = useStepper(props)
63
+ const { onChange, ...rest } = props
64
+ const stepper = useStepper(rest)
58
65
 
59
66
  const { activeStep, isLastStep, nextStep } = stepper
60
67
 
@@ -62,11 +69,12 @@ export function useStepForm<TFieldValues extends FieldValues = FieldValues>(
62
69
 
63
70
  const onSubmitStep: SubmitHandler<TFieldValues> = React.useCallback(
64
71
  async (data) => {
72
+ const step = steps[activeStep]
73
+
65
74
  if (isLastStep) {
66
75
  return props
67
76
  .onSubmit?.(data)
68
77
  .then(() => {
69
- const step = steps[activeStep]
70
78
  updateStep({
71
79
  ...step,
72
80
  isCompleted: true,
@@ -75,9 +83,15 @@ export function useStepForm<TFieldValues extends FieldValues = FieldValues>(
75
83
  .then(nextStep) // Show completed step
76
84
  }
77
85
 
78
- nextStep()
86
+ try {
87
+ await step.onSubmit?.(data, stepper)
88
+
89
+ nextStep()
90
+ } catch (e) {
91
+ // Step submission failed.
92
+ }
79
93
  },
80
- [activeStep, isLastStep]
94
+ [steps, activeStep, isLastStep]
81
95
  )
82
96
 
83
97
  const getFormProps = React.useCallback(() => {
@@ -113,16 +127,17 @@ export interface UseFormStepProps {
113
127
  name: string
114
128
  schema?: any
115
129
  resolver?: any
130
+ onSubmit?: FormStepSubmitHandler
116
131
  }
117
132
 
118
133
  export function useFormStep(props: UseFormStepProps): StepState {
119
- const { name, schema, resolver } = props
134
+ const { name, schema, resolver, onSubmit } = props
120
135
  const step = useStep({ name })
121
136
 
122
137
  const { steps, updateStep } = useStepFormContext()
123
138
 
124
139
  React.useEffect(() => {
125
- updateStep({ name, schema, resolver })
140
+ updateStep({ name, schema, resolver, onSubmit })
126
141
  }, [name, schema])
127
142
 
128
143
  return {
package/yup/package.json CHANGED
@@ -10,8 +10,8 @@
10
10
  "author": "Eelco Wiersma <eelco@appulse.nl>",
11
11
  "license": "MIT",
12
12
  "peerDependencies": {
13
- "@hookform/resolvers": "^2.8.3",
14
- "react-hook-form": "^7.22.0",
13
+ "@hookform/resolvers": "^2.9.0",
14
+ "react-hook-form": "^7.31.3",
15
15
  "yup": "^0.32.11"
16
16
  }
17
17
  }
package/zod/package.json CHANGED
@@ -10,9 +10,9 @@
10
10
  "author": "Eelco Wiersma <eelco@appulse.nl>",
11
11
  "license": "MIT",
12
12
  "peerDependencies": {
13
- "@chakra-ui/utils": "^2.0.0",
14
- "@hookform/resolvers": "^2.8.3",
15
- "react-hook-form": "^7.22.0",
16
- "zod": "^3.14.4"
13
+ "@chakra-ui/utils": "^2.0.2",
14
+ "@hookform/resolvers": "^2.9.0",
15
+ "react-hook-form": "^7.31.3",
16
+ "zod": "^3.17.3"
17
17
  }
18
18
  }