@saas-ui/forms 2.2.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +17 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +37 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -28
- package/dist/index.mjs.map +1 -1
- package/dist/yup/index.d.ts +1 -0
- package/dist/zod/index.d.ts +1 -0
- package/package.json +2 -2
- package/src/display-if.tsx +22 -1
- package/src/number-input/number-input.tsx +1 -5
- package/src/pin-input/pin-input.tsx +0 -4
- package/src/submit-button.tsx +4 -8
package/src/display-if.tsx
CHANGED
@@ -18,6 +18,10 @@ export interface DisplayIfProps<
|
|
18
18
|
isDisabled?: boolean
|
19
19
|
isExact?: boolean
|
20
20
|
condition?: (value: unknown, context: UseFormReturn<TFieldValues>) => boolean
|
21
|
+
onToggle?: (
|
22
|
+
conditionMatched: boolean,
|
23
|
+
context: UseFormReturn<TFieldValues>
|
24
|
+
) => void
|
21
25
|
}
|
22
26
|
/**
|
23
27
|
* Conditionally render parts of a form.
|
@@ -34,7 +38,11 @@ export const DisplayIf = <
|
|
34
38
|
isDisabled,
|
35
39
|
isExact,
|
36
40
|
condition = (value) => !!value,
|
41
|
+
onToggle,
|
37
42
|
}: DisplayIfProps<TFieldValues, TName>) => {
|
43
|
+
const initializedRef = React.useRef(false)
|
44
|
+
const matchesRef = React.useRef(false)
|
45
|
+
|
38
46
|
const value = useWatch<TFieldValues>({
|
39
47
|
name,
|
40
48
|
defaultValue: defaultValue as any,
|
@@ -42,7 +50,20 @@ export const DisplayIf = <
|
|
42
50
|
exact: isExact,
|
43
51
|
})
|
44
52
|
const context = useFormContext() as any
|
45
|
-
|
53
|
+
|
54
|
+
const matches = condition(value, context)
|
55
|
+
|
56
|
+
React.useEffect(() => {
|
57
|
+
if (!initializedRef.current) {
|
58
|
+
initializedRef.current = true
|
59
|
+
return
|
60
|
+
}
|
61
|
+
if (matchesRef.current === matches) return
|
62
|
+
matchesRef.current = matches
|
63
|
+
onToggle?.(matches, context)
|
64
|
+
}, [value])
|
65
|
+
|
66
|
+
return matches ? children : null
|
46
67
|
}
|
47
68
|
|
48
69
|
DisplayIf.displayName = 'DisplayIf'
|
@@ -42,7 +42,7 @@ export interface NumberInputProps
|
|
42
42
|
|
43
43
|
export const NumberInput = forwardRef<NumberInputProps, 'div'>((props, ref) => {
|
44
44
|
const {
|
45
|
-
hideStepper,
|
45
|
+
hideStepper = false,
|
46
46
|
incrementIcon = <ChevronUpIcon />,
|
47
47
|
decrementIcon = <ChevronDownIcon />,
|
48
48
|
placeholder,
|
@@ -66,8 +66,4 @@ export const NumberInput = forwardRef<NumberInputProps, 'div'>((props, ref) => {
|
|
66
66
|
)
|
67
67
|
})
|
68
68
|
|
69
|
-
NumberInput.defaultProps = {
|
70
|
-
hideStepper: false,
|
71
|
-
}
|
72
|
-
|
73
69
|
NumberInput.displayName = 'NumberInput'
|
package/src/submit-button.tsx
CHANGED
@@ -28,9 +28,10 @@ export interface SubmitButtonProps extends ButtonProps {
|
|
28
28
|
export const SubmitButton = forwardRef<SubmitButtonProps, 'button'>(
|
29
29
|
(props, ref) => {
|
30
30
|
const {
|
31
|
+
variant = 'primary',
|
31
32
|
children = 'Submit',
|
32
|
-
disableIfUntouched,
|
33
|
-
disableIfInvalid,
|
33
|
+
disableIfUntouched = false,
|
34
|
+
disableIfInvalid = false,
|
34
35
|
isDisabled: isDisabledProp,
|
35
36
|
isLoading,
|
36
37
|
...rest
|
@@ -46,6 +47,7 @@ export const SubmitButton = forwardRef<SubmitButtonProps, 'button'>(
|
|
46
47
|
<Button
|
47
48
|
{...rest}
|
48
49
|
ref={ref}
|
50
|
+
variant={variant}
|
49
51
|
type="submit"
|
50
52
|
isLoading={formState.isSubmitting || isLoading}
|
51
53
|
isDisabled={isDisabled}
|
@@ -56,10 +58,4 @@ export const SubmitButton = forwardRef<SubmitButtonProps, 'button'>(
|
|
56
58
|
}
|
57
59
|
)
|
58
60
|
|
59
|
-
SubmitButton.defaultProps = {
|
60
|
-
variant: 'primary',
|
61
|
-
disableIfUntouched: false,
|
62
|
-
disableIfInvalid: false,
|
63
|
-
}
|
64
|
-
|
65
61
|
SubmitButton.displayName = 'SubmitButton'
|