@1money/react-ui 1.16.0 → 1.17.0
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/AGENTS.md +393 -0
- package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
- package/es/components/CheckboxGroup/interface.d.ts +21 -15
- package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/es/components/Form/Form.d.ts +29 -0
- package/es/components/Form/Form.js +188 -0
- package/es/components/Form/FormItem.d.ts +4 -0
- package/es/components/Form/FormItem.js +165 -0
- package/es/components/Form/FormItemContent.d.ts +18 -0
- package/es/components/Form/FormItemContent.js +146 -0
- package/es/components/Form/constants.d.ts +46 -0
- package/es/components/Form/constants.js +65 -0
- package/es/components/Form/helper.d.ts +120 -0
- package/es/components/Form/helper.js +284 -0
- package/es/components/Form/index.d.ts +20 -0
- package/es/components/Form/index.js +21 -0
- package/es/components/Form/interface.d.ts +238 -0
- package/es/components/Form/interface.js +2 -0
- package/es/components/Form/style/Form.css +1 -0
- package/es/components/Form/style/Form.scss +167 -0
- package/es/components/Form/style/css.js +2 -0
- package/es/components/Form/style/index.d.ts +1 -0
- package/es/components/Form/style/index.js +2 -0
- package/es/components/Form/useFormItemContext.d.ts +32 -0
- package/es/components/Form/useFormItemContext.js +55 -0
- package/es/components/Form/useFormItemWatch.d.ts +51 -0
- package/es/components/Form/useFormItemWatch.js +69 -0
- package/es/components/Form/useValidationTrigger.d.ts +40 -0
- package/es/components/Form/useValidationTrigger.js +74 -0
- package/es/components/Input/Input.js +72 -74
- package/es/components/Input/interface.d.ts +9 -9
- package/es/components/InputAmount/InputAmount.js +228 -276
- package/es/components/InputAmount/helper.d.ts +46 -0
- package/es/components/InputAmount/helper.js +115 -0
- package/es/components/ProForm/ProForm.d.ts +33 -0
- package/es/components/ProForm/ProForm.js +208 -0
- package/es/components/ProForm/ProFormDependency.d.ts +12 -0
- package/es/components/ProForm/ProFormDependency.js +61 -0
- package/es/components/ProForm/ProFormList.d.ts +19 -0
- package/es/components/ProForm/ProFormList.js +348 -0
- package/es/components/ProForm/Submitter.d.ts +21 -0
- package/es/components/ProForm/Submitter.js +76 -0
- package/es/components/ProForm/constants.d.ts +34 -0
- package/es/components/ProForm/constants.js +40 -0
- package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
- package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormDigit.js +15 -0
- package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMoney.js +10 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
- package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormPassword.js +16 -0
- package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormRadio.js +13 -0
- package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSelect.js +13 -0
- package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
- package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormText.js +15 -0
- package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
- package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/es/components/ProForm/fields/createProFormField.js +200 -0
- package/es/components/ProForm/fields/index.d.ts +12 -0
- package/es/components/ProForm/fields/index.js +13 -0
- package/es/components/ProForm/index.d.ts +7 -0
- package/es/components/ProForm/index.js +7 -0
- package/es/components/ProForm/interface.d.ts +306 -0
- package/es/components/ProForm/interface.js +2 -0
- package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/es/components/ProForm/layouts/DrawerForm.js +79 -0
- package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/es/components/ProForm/layouts/ModalForm.js +89 -0
- package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/es/components/ProForm/layouts/QueryFilter.js +132 -0
- package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/es/components/ProForm/layouts/StepsForm.js +295 -0
- package/es/components/ProForm/layouts/index.d.ts +4 -0
- package/es/components/ProForm/layouts/index.js +5 -0
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
- package/es/components/ProForm/style/ProForm.module.css +1 -0
- package/es/components/ProForm/style/ProForm.module.scss +59 -0
- package/es/components/ProForm/style/css.js +3 -0
- package/es/components/ProForm/style/index.d.ts +1 -0
- package/es/components/ProForm/style/index.js +3 -0
- package/es/components/ProForm/utils.d.ts +72 -0
- package/es/components/ProForm/utils.js +206 -0
- package/es/components/RadioGroup/RadioGroup.js +46 -23
- package/es/components/RadioGroup/interface.d.ts +3 -1
- package/es/components/Select/Select.d.ts +1 -1
- package/es/components/Select/Select.js +113 -106
- package/es/components/Select/constants.d.ts +18 -0
- package/es/components/Select/constants.js +19 -0
- package/es/components/Sidebar/Sidebar.js +21 -23
- package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/es/components/Sidebar/SidebarLogo.js +33 -0
- package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/es/components/Sidebar/SimplySidebar.js +18 -22
- package/es/components/Sidebar/Stepper.js +14 -14
- package/es/components/Sidebar/constants.d.ts +16 -0
- package/es/components/Sidebar/constants.js +17 -0
- package/es/components/Sidebar/style/Stepper.css +1 -1
- package/es/components/Sidebar/style/Stepper.scss +11 -1
- package/es/components/Switch/Switch.js +28 -25
- package/es/components/Switch/interface.d.ts +9 -4
- package/es/components/useControlledState/index.d.ts +14 -0
- package/es/components/useControlledState/index.js +32 -0
- package/es/components/useEventCallback/index.d.ts +11 -0
- package/es/components/useEventCallback/index.js +17 -0
- package/es/components/useLayoutEffect/index.d.ts +11 -0
- package/es/components/useLayoutEffect/index.js +17 -0
- package/es/components/useLayoutState/index.d.ts +13 -0
- package/es/components/useLayoutState/index.js +71 -0
- package/es/components/useMemoizedFn/index.d.ts +12 -0
- package/es/components/useMemoizedFn/index.js +27 -0
- package/es/components/usePrevious/index.d.ts +11 -0
- package/es/components/usePrevious/index.js +19 -0
- package/es/components/useSafeState/index.d.ts +12 -0
- package/es/components/useSafeState/index.js +24 -0
- package/es/components/useSyncState/index.d.ts +14 -0
- package/es/components/useSyncState/index.js +37 -0
- package/es/components/useUpdateEffect/index.d.ts +9 -0
- package/es/components/useUpdateEffect/index.js +19 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +21 -2
- package/es/index.js +19 -1
- package/jest.setup.d.ts +1 -0
- package/jest.setup.ts +1 -0
- package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
- package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
- package/lib/components/CheckboxGroup/interface.d.ts +21 -15
- package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
- package/lib/components/Form/Form.d.ts +29 -0
- package/lib/components/Form/Form.js +199 -0
- package/lib/components/Form/FormItem.d.ts +4 -0
- package/lib/components/Form/FormItem.js +176 -0
- package/lib/components/Form/FormItemContent.d.ts +18 -0
- package/lib/components/Form/FormItemContent.js +156 -0
- package/lib/components/Form/constants.d.ts +46 -0
- package/lib/components/Form/constants.js +71 -0
- package/lib/components/Form/helper.d.ts +120 -0
- package/lib/components/Form/helper.js +290 -0
- package/lib/components/Form/index.d.ts +20 -0
- package/lib/components/Form/index.js +45 -0
- package/lib/components/Form/interface.d.ts +238 -0
- package/lib/components/Form/interface.js +6 -0
- package/lib/components/Form/style/Form.css +1 -0
- package/lib/components/Form/style/Form.scss +167 -0
- package/lib/components/Form/style/css.js +4 -0
- package/lib/components/Form/style/index.d.ts +1 -0
- package/lib/components/Form/style/index.js +4 -0
- package/lib/components/Form/useFormItemContext.d.ts +32 -0
- package/lib/components/Form/useFormItemContext.js +62 -0
- package/lib/components/Form/useFormItemWatch.d.ts +51 -0
- package/lib/components/Form/useFormItemWatch.js +76 -0
- package/lib/components/Form/useValidationTrigger.d.ts +40 -0
- package/lib/components/Form/useValidationTrigger.js +81 -0
- package/lib/components/Input/Input.js +71 -73
- package/lib/components/Input/interface.d.ts +9 -9
- package/lib/components/InputAmount/InputAmount.js +230 -278
- package/lib/components/InputAmount/helper.d.ts +46 -0
- package/lib/components/InputAmount/helper.js +122 -0
- package/lib/components/ProForm/ProForm.d.ts +33 -0
- package/lib/components/ProForm/ProForm.js +216 -0
- package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
- package/lib/components/ProForm/ProFormDependency.js +67 -0
- package/lib/components/ProForm/ProFormList.d.ts +19 -0
- package/lib/components/ProForm/ProFormList.js +355 -0
- package/lib/components/ProForm/Submitter.d.ts +21 -0
- package/lib/components/ProForm/Submitter.js +83 -0
- package/lib/components/ProForm/constants.d.ts +34 -0
- package/lib/components/ProForm/constants.js +46 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
- package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
- package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
- package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
- package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
- package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
- package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
- package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormText.js +22 -0
- package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
- package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
- package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
- package/lib/components/ProForm/fields/createProFormField.js +208 -0
- package/lib/components/ProForm/fields/index.d.ts +12 -0
- package/lib/components/ProForm/fields/index.js +90 -0
- package/lib/components/ProForm/index.d.ts +7 -0
- package/lib/components/ProForm/index.js +73 -0
- package/lib/components/ProForm/interface.d.ts +306 -0
- package/lib/components/ProForm/interface.js +6 -0
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
- package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
- package/lib/components/ProForm/layouts/ModalForm.js +96 -0
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
- package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
- package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
- package/lib/components/ProForm/layouts/StepsForm.js +302 -0
- package/lib/components/ProForm/layouts/index.d.ts +4 -0
- package/lib/components/ProForm/layouts/index.js +40 -0
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
- package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
- package/lib/components/ProForm/style/ProForm.module.css +1 -0
- package/lib/components/ProForm/style/ProForm.module.scss +59 -0
- package/lib/components/ProForm/style/css.js +4 -0
- package/lib/components/ProForm/style/index.d.ts +1 -0
- package/lib/components/ProForm/style/index.js +4 -0
- package/lib/components/ProForm/utils.d.ts +72 -0
- package/lib/components/ProForm/utils.js +213 -0
- package/lib/components/RadioGroup/RadioGroup.js +45 -22
- package/lib/components/RadioGroup/interface.d.ts +3 -1
- package/lib/components/Select/Select.d.ts +1 -1
- package/lib/components/Select/Select.js +114 -107
- package/lib/components/Select/constants.d.ts +18 -0
- package/lib/components/Select/constants.js +25 -0
- package/lib/components/Sidebar/Sidebar.js +21 -23
- package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
- package/lib/components/Sidebar/SidebarLogo.js +39 -0
- package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
- package/lib/components/Sidebar/SimplySidebar.js +17 -21
- package/lib/components/Sidebar/Stepper.js +14 -14
- package/lib/components/Sidebar/constants.d.ts +16 -0
- package/lib/components/Sidebar/constants.js +23 -0
- package/lib/components/Sidebar/style/Stepper.css +1 -1
- package/lib/components/Sidebar/style/Stepper.scss +11 -1
- package/lib/components/Switch/Switch.js +27 -24
- package/lib/components/Switch/interface.d.ts +9 -4
- package/lib/components/useControlledState/index.d.ts +14 -0
- package/lib/components/useControlledState/index.js +39 -0
- package/lib/components/useEventCallback/index.d.ts +11 -0
- package/lib/components/useEventCallback/index.js +24 -0
- package/lib/components/useLayoutEffect/index.d.ts +11 -0
- package/lib/components/useLayoutEffect/index.js +23 -0
- package/lib/components/useLayoutState/index.d.ts +13 -0
- package/lib/components/useLayoutState/index.js +79 -0
- package/lib/components/useMemoizedFn/index.d.ts +12 -0
- package/lib/components/useMemoizedFn/index.js +33 -0
- package/lib/components/usePrevious/index.d.ts +11 -0
- package/lib/components/usePrevious/index.js +25 -0
- package/lib/components/useSafeState/index.d.ts +12 -0
- package/lib/components/useSafeState/index.js +31 -0
- package/lib/components/useSyncState/index.d.ts +14 -0
- package/lib/components/useSyncState/index.js +44 -0
- package/lib/components/useUpdateEffect/index.d.ts +9 -0
- package/lib/components/useUpdateEffect/index.js +25 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +21 -2
- package/lib/index.js +213 -1
- package/package.json +16 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.om-react-ui-form,.om-react-ui-form-root{--om-form-spacing-xs:4px;--om-form-spacing-sm:8px;--om-form-spacing-md:12px;--om-form-spacing-lg:16px;--om-form-control-height:44px;--om-form-font-size-base:14px;--om-form-line-height-base:20px;--om-form-font-size-help:12px;--om-form-line-height-help:18px;--om-form-opacity-disabled:0.6}.om-react-ui-form-root{width:100%}.om-react-ui-form-layout-horizontal .om-react-ui-form-item-root{display:flex;align-items:flex-start}.om-react-ui-form-layout-vertical .om-react-ui-form-item-root{display:flex;flex-direction:column}.om-react-ui-form-layout-inline{display:flex;flex-wrap:wrap;gap:var(--om-form-spacing-lg)}.om-react-ui-form-label-left .om-react-ui-form-item-label{text-align:left}.om-react-ui-form-item,.om-react-ui-form-item-root{--om-form-spacing-xs:4px;--om-form-spacing-sm:8px;--om-form-spacing-md:12px;--om-form-spacing-lg:16px;--om-form-control-height:44px;--om-form-font-size-base:14px;--om-form-line-height-base:20px;--om-form-font-size-help:12px;--om-form-line-height-help:18px;--om-form-opacity-disabled:0.6}.om-react-ui-form-item-root{width:100%;margin-bottom:var(--om-form-spacing-lg)}.om-react-ui-form-item-label{display:flex;flex:0 0 var(--om-form-label-width,25%);align-items:center;justify-content:flex-end;min-width:-moz-fit-content;min-width:fit-content;min-height:var(--om-form-control-height);padding-right:var(--om-form-spacing-md);color:#131313;font-size:var(--om-form-font-size-base);line-height:var(--om-form-line-height-base);white-space:nowrap;text-align:right}.om-react-ui-form-item-label-required:before{margin-right:var(--om-form-spacing-xs);color:#ae0000;content:"*"}.om-react-ui-form-item-colon{margin-left:var(--om-form-spacing-xs)}.om-react-ui-form-item-control{flex:1 1 auto;max-width:var(--om-form-wrapper-width,75%)}.om-react-ui-form-item-content{display:flex;flex-direction:column;gap:var(--om-form-spacing-sm)}.om-react-ui-form-item-content-disabled{opacity:var(--om-form-opacity-disabled)}.om-react-ui-form-item-help{color:#646465;font-size:var(--om-form-font-size-help);line-height:var(--om-form-line-height-help)}.om-react-ui-form-item-help-error{color:#ae0000}.om-react-ui-form-item-help-warning{color:#db8600}.om-react-ui-form-item-help-success{color:#1f5800}.om-react-ui-form-item-content-error{--om-form-item-status-color:#ae0000}.om-react-ui-form-item-content-warning{--om-form-item-status-color:#db8600}.om-react-ui-form-item-content-success{--om-form-item-status-color:#1f5800}.om-react-ui-form-item-content-validating{--om-form-item-status-color:#3d7cf5}.om-react-ui-form-item-extra{color:#9fa3a3;font-size:var(--om-form-font-size-help);line-height:var(--om-form-line-height-help)}.om-react-ui-form-layout-vertical .om-react-ui-form-item-label{flex:0 0 auto;justify-content:flex-start;min-width:0;min-height:auto;margin-bottom:var(--om-form-spacing-sm);padding-right:0;white-space:normal;text-align:left}.om-react-ui-form-layout-vertical .om-react-ui-form-item-control{max-width:100%}.om-react-ui-form-layout-inline .om-react-ui-form-item-root{width:auto;margin-bottom:0}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
@use '../../../variable.scss' as *;
|
|
2
|
+
|
|
3
|
+
// Intentionally token-level SCSS (no global tag selectors): spacing/typography/
|
|
4
|
+
// opacity values are centralized as component CSS variables for predictable BEM output.
|
|
5
|
+
$component: 'form';
|
|
6
|
+
$cls: #{$prefix}-#{$component};
|
|
7
|
+
|
|
8
|
+
@mixin om-form-token-vars {
|
|
9
|
+
--om-form-spacing-xs: 4px;
|
|
10
|
+
--om-form-spacing-sm: 8px;
|
|
11
|
+
--om-form-spacing-md: 12px;
|
|
12
|
+
--om-form-spacing-lg: 16px;
|
|
13
|
+
--om-form-control-height: 44px;
|
|
14
|
+
--om-form-font-size-base: 14px;
|
|
15
|
+
--om-form-line-height-base: 20px;
|
|
16
|
+
--om-form-font-size-help: 12px;
|
|
17
|
+
--om-form-line-height-help: 18px;
|
|
18
|
+
--om-form-opacity-disabled: 0.6;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.#{$cls} {
|
|
22
|
+
@include om-form-token-vars;
|
|
23
|
+
|
|
24
|
+
&-root {
|
|
25
|
+
width: 100%;
|
|
26
|
+
|
|
27
|
+
@include om-form-token-vars;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&-layout-horizontal .#{$prefix}-form-item-root {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: flex-start;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&-layout-vertical .#{$prefix}-form-item-root {
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&-layout-inline {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-wrap: wrap;
|
|
43
|
+
gap: var(--om-form-spacing-lg);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&-label-left .#{$prefix}-form-item-label {
|
|
47
|
+
text-align: left;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
$item: 'form-item';
|
|
52
|
+
$item-cls: #{$prefix}-#{$item};
|
|
53
|
+
|
|
54
|
+
.#{$item-cls} {
|
|
55
|
+
@include om-form-token-vars;
|
|
56
|
+
|
|
57
|
+
&-root {
|
|
58
|
+
width: 100%;
|
|
59
|
+
margin-bottom: var(--om-form-spacing-lg);
|
|
60
|
+
|
|
61
|
+
@include om-form-token-vars;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&-label {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex: 0 0 var(--om-form-label-width, 25%);
|
|
67
|
+
align-items: center;
|
|
68
|
+
justify-content: flex-end;
|
|
69
|
+
min-width: fit-content;
|
|
70
|
+
min-height: var(--om-form-control-height);
|
|
71
|
+
padding-right: var(--om-form-spacing-md);
|
|
72
|
+
color: $color-primary-black;
|
|
73
|
+
font-size: var(--om-form-font-size-base);
|
|
74
|
+
line-height: var(--om-form-line-height-base);
|
|
75
|
+
white-space: nowrap;
|
|
76
|
+
text-align: right;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
&-label-required::before {
|
|
80
|
+
margin-right: var(--om-form-spacing-xs);
|
|
81
|
+
color: $color-negative;
|
|
82
|
+
content: '*';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&-colon {
|
|
86
|
+
margin-left: var(--om-form-spacing-xs);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&-control {
|
|
90
|
+
flex: 1 1 auto;
|
|
91
|
+
max-width: var(--om-form-wrapper-width, 75%);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&-content {
|
|
95
|
+
display: flex;
|
|
96
|
+
flex-direction: column;
|
|
97
|
+
gap: var(--om-form-spacing-sm);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&-content-disabled {
|
|
101
|
+
opacity: var(--om-form-opacity-disabled);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&-help {
|
|
105
|
+
color: $color-grey-midnight;
|
|
106
|
+
font-size: var(--om-form-font-size-help);
|
|
107
|
+
line-height: var(--om-form-line-height-help);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
&-help-error {
|
|
111
|
+
color: $color-negative;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
&-help-warning {
|
|
115
|
+
color: $color-warning-dark;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
&-help-success {
|
|
119
|
+
color: $color-success;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&-content-error {
|
|
123
|
+
--om-form-item-status-color: #{$color-negative};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&-content-warning {
|
|
127
|
+
--om-form-item-status-color: #{$color-warning-dark};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
&-content-success {
|
|
131
|
+
--om-form-item-status-color: #{$color-success};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
&-content-validating {
|
|
135
|
+
--om-form-item-status-color: #{$color-info};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
&-extra {
|
|
139
|
+
color: $color-grey-dark;
|
|
140
|
+
font-size: var(--om-form-font-size-help);
|
|
141
|
+
line-height: var(--om-form-line-height-help);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.#{$prefix}-form-layout-vertical {
|
|
146
|
+
.#{$item-cls}-label {
|
|
147
|
+
flex: 0 0 auto;
|
|
148
|
+
justify-content: flex-start;
|
|
149
|
+
min-width: 0;
|
|
150
|
+
min-height: auto;
|
|
151
|
+
margin-bottom: var(--om-form-spacing-sm);
|
|
152
|
+
padding-right: 0;
|
|
153
|
+
white-space: normal;
|
|
154
|
+
text-align: left;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.#{$item-cls}-control {
|
|
158
|
+
max-width: 100%;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.#{$prefix}-form-layout-inline {
|
|
163
|
+
.#{$item-cls}-root {
|
|
164
|
+
width: auto;
|
|
165
|
+
margin-bottom: 0;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("./Form.css");
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbInJlcXVpcmUiXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQUEiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3N0eWxlL2Nzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './Form.scss';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("./Form.scss");
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbInJlcXVpcmUiXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQUEiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { FieldValues, UseFormReturn } from 'react-hook-form';
|
|
3
|
+
interface FallbackFormProviderProps {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Lazily creates form methods only when mounted.
|
|
8
|
+
*
|
|
9
|
+
* Use this provider when rendering form-aware components outside `<Form>`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function FallbackFormProvider({ children }: FallbackFormProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<UseFormReturn<FieldValues> | null>>;
|
|
12
|
+
/**
|
|
13
|
+
* Resolves form context for a `<FormItem>`.
|
|
14
|
+
*
|
|
15
|
+
* When rendered inside a `<Form>`, this hook uses the context-provided
|
|
16
|
+
* `react-hook-form` methods. Otherwise it reads methods from
|
|
17
|
+
* {@link FallbackFormProvider}, which creates a local `useForm()` instance.
|
|
18
|
+
*
|
|
19
|
+
* A development-only console warning is emitted (once per field name) when
|
|
20
|
+
* a `name` prop is set but no parent `<Form>` context is found.
|
|
21
|
+
*
|
|
22
|
+
* @template TFieldValues - The shape of the form values.
|
|
23
|
+
* @param name - The field name, used for the missing-context warning check.
|
|
24
|
+
* @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function useFormItemContext<TFieldValues extends FieldValues = FieldValues>(name?: string): {
|
|
27
|
+
ctx: import("./interface").FormContextValue | null;
|
|
28
|
+
methods: UseFormReturn<TFieldValues>;
|
|
29
|
+
control: import("react-hook-form").Control<TFieldValues, any, TFieldValues>;
|
|
30
|
+
trigger: import("react-hook-form").UseFormTrigger<TFieldValues>;
|
|
31
|
+
};
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FallbackFormProvider = FallbackFormProvider;
|
|
7
|
+
exports.useFormItemContext = useFormItemContext;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _reactHookForm = require("react-hook-form");
|
|
10
|
+
var _Form = require("./Form");
|
|
11
|
+
var FallbackFormContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
12
|
+
/**
|
|
13
|
+
* Lazily creates form methods only when mounted.
|
|
14
|
+
*
|
|
15
|
+
* Use this provider when rendering form-aware components outside `<Form>`.
|
|
16
|
+
*/
|
|
17
|
+
function FallbackFormProvider(_ref) {
|
|
18
|
+
var children = _ref.children;
|
|
19
|
+
var methods = (0, _reactHookForm.useForm)();
|
|
20
|
+
return /*#__PURE__*/(0, _react.createElement)(FallbackFormContext.Provider, {
|
|
21
|
+
value: methods
|
|
22
|
+
}, children);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolves form context for a `<FormItem>`.
|
|
26
|
+
*
|
|
27
|
+
* When rendered inside a `<Form>`, this hook uses the context-provided
|
|
28
|
+
* `react-hook-form` methods. Otherwise it reads methods from
|
|
29
|
+
* {@link FallbackFormProvider}, which creates a local `useForm()` instance.
|
|
30
|
+
*
|
|
31
|
+
* A development-only console warning is emitted (once per field name) when
|
|
32
|
+
* a `name` prop is set but no parent `<Form>` context is found.
|
|
33
|
+
*
|
|
34
|
+
* @template TFieldValues - The shape of the form values.
|
|
35
|
+
* @param name - The field name, used for the missing-context warning check.
|
|
36
|
+
* @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
|
|
37
|
+
*/
|
|
38
|
+
function useFormItemContext(name) {
|
|
39
|
+
var _a;
|
|
40
|
+
var ctx = (0, _react.useContext)(_Form.FormContext);
|
|
41
|
+
var fallbackMethods = (0, _react.useContext)(FallbackFormContext);
|
|
42
|
+
var warnedRef = (0, _react.useRef)(new Set());
|
|
43
|
+
var methods = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.methods) !== null && _a !== void 0 ? _a : fallbackMethods;
|
|
44
|
+
if (!methods) {
|
|
45
|
+
throw new Error('[FormItem] No form control found. Wrap with <Form> or mount inside <FallbackFormProvider>.');
|
|
46
|
+
}
|
|
47
|
+
var control = methods.control;
|
|
48
|
+
var trigger = methods.trigger;
|
|
49
|
+
(0, _react.useEffect)(function () {
|
|
50
|
+
if (name && !(ctx === null || ctx === void 0 ? void 0 : ctx.methods) && !warnedRef.current.has(name)) {
|
|
51
|
+
warnedRef.current.add(name);
|
|
52
|
+
console.warn('[FormItem] `name` prop is set but no form control found. Wrap FormItem inside a <Form> component.');
|
|
53
|
+
}
|
|
54
|
+
}, [name, ctx === null || ctx === void 0 ? void 0 : ctx.methods]);
|
|
55
|
+
return {
|
|
56
|
+
ctx: ctx,
|
|
57
|
+
methods: methods,
|
|
58
|
+
control: control,
|
|
59
|
+
trigger: trigger
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbUNvbnRleHQudHMiLCJjb21wb25lbnRzL0Zvcm0vdXNlRm9ybUl0ZW1Db250ZXh0LmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsInJlcXVpcmUiLCJfcmVhY3RIb29rRm9ybSIsIl9Gb3JtIiwiRmFsbGJhY2tGb3JtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJGYWxsYmFja0Zvcm1Qcm92aWRlciIsIl9yZWYiLCJjaGlsZHJlbiIsIm1ldGhvZHMiLCJ1c2VGb3JtIiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwidmFsdWUiLCJ1c2VGb3JtSXRlbUNvbnRleHQiLCJuYW1lIiwiX2EiLCJjdHgiLCJ1c2VDb250ZXh0IiwiRm9ybUNvbnRleHQiLCJmYWxsYmFja01ldGhvZHMiLCJ3YXJuZWRSZWYiLCJ1c2VSZWYiLCJTZXQiLCJFcnJvciIsImNvbnRyb2wiLCJ0cmlnZ2VyIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImhhcyIsImFkZCIsImNvbnNvbGUiLCJ3YXJuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsS0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBTUcsbUJBQW1CLGdCQUFHLElBQUFDLG9CQUFhLEVBQW9DLElBQUksQ0FBQztBQU1sRjtBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FEU00sU0FBVUMsb0JBQW9CQSxDQUFBQyxJQUFBLEVBQXdDO0VBQUEsSUFBckNDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0VBQzdDLElBQU1DLE9BQU8sR0FBRyxJQUFBQyxzQkFBTyxFQUFBLENBQWU7RUFDdEMsb0JBQU8sSUFBQUMsb0JBQWEsRUFBQ1AsbUJBQW1CLENBQUNRLFFBQVEsRUFBRTtJQUFFQyxLQUFLLEVBQUVKO0VBQU8sQ0FBRSxFQUFFRCxRQUFRLENBQUM7QUFDbEY7QUFFQTtBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEVU0sU0FBVU0sa0JBQWtCQSxDQUFpREMsSUFBYSxFQUFBO0VDUjVGLElBQUlDLEVBQUU7RURTUixJQUFNQyxHQUFHLEdBQUcsSUFBQUMsaUJBQVUsRUFBQ0MsaUJBQVcsQ0FBQztFQUNuQyxJQUFNQyxlQUFlLEdBQUcsSUFBQUYsaUJBQVUsRUFBQ2QsbUJBQW1CLENBQUM7RUFDdkQsSUFBTWlCLFNBQVMsR0FBRyxJQUFBQyxhQUFNLEVBQWMsSUFBSUMsR0FBRyxDQUFBLENBQUUsQ0FBQztFQUNoRCxJQUFNZCxPQUFPLEdBQUcsQ0FBQU8sRUFBQSxHQUFDQyxHQUFHLEtBQUEsSUFBQSxJQUFIQSxHQUFHLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUhBLEdBQUcsQ0FBRVIsT0FBbUQsTUFBQSxJQUFBLElBQUFPLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUNuRUksZUFBc0Q7RUFFNUQsSUFBSSxDQUFDWCxPQUFPLEVBQUU7SUFDWixNQUFNLElBQUllLEtBQUssQ0FDYiw0RkFBNEYsQ0FDN0Y7RUFDSDtFQUVBLElBQU1DLE9BQU8sR0FBR2hCLE9BQU8sQ0FBQ2dCLE9BQU87RUFDL0IsSUFBTUMsT0FBTyxHQUFHakIsT0FBTyxDQUFDaUIsT0FBTztFQUUvQixJQUFBQyxnQkFBUyxFQUFDLFlBQUs7SUFDYixJQUFJWixJQUFJLElBQUksRUFBQ0UsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLENBQUVSLE9BQU8sQ0FBQSxJQUFJLENBQUNZLFNBQVMsQ0FBQ08sT0FBTyxDQUFDQyxHQUFHLENBQUNkLElBQUksQ0FBQyxFQUFFO01BQ3pETSxTQUFTLENBQUNPLE9BQU8sQ0FBQ0UsR0FBRyxDQUFDZixJQUFJLENBQUM7TUFDM0JnQixPQUFPLENBQUNDLElBQUksQ0FBQyxtR0FBbUcsQ0FBQztJQUNuSDtFQUNGLENBQUMsRUFBRSxDQUFDakIsSUFBSSxFQUFFRSxHQUFHLEtBQUEsSUFBQSxJQUFIQSxHQUFHLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUhBLEdBQUcsQ0FBRVIsT0FBTyxDQUFDLENBQUM7RUFFeEIsT0FBTztJQUFFUSxHQUFHLEVBQUhBLEdBQUc7SUFBRVIsT0FBTyxFQUFQQSxPQUFPO0lBQUVnQixPQUFPLEVBQVBBLE9BQU87SUFBRUMsT0FBTyxFQUFQQTtFQUFPLENBQUU7QUFDM0MiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IEZvcm1Db250ZXh0IH0gZnJvbSAnLi9Gb3JtJztcbmNvbnN0IEZhbGxiYWNrRm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuLyoqXG4gKiBMYXppbHkgY3JlYXRlcyBmb3JtIG1ldGhvZHMgb25seSB3aGVuIG1vdW50ZWQuXG4gKlxuICogVXNlIHRoaXMgcHJvdmlkZXIgd2hlbiByZW5kZXJpbmcgZm9ybS1hd2FyZSBjb21wb25lbnRzIG91dHNpZGUgYDxGb3JtPmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBGYWxsYmFja0Zvcm1Qcm92aWRlcih7IGNoaWxkcmVuIH0pIHtcbiAgICBjb25zdCBtZXRob2RzID0gdXNlRm9ybSgpO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEZhbGxiYWNrRm9ybUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IG1ldGhvZHMgfSwgY2hpbGRyZW4pO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBmb3JtIGNvbnRleHQgZm9yIGEgYDxGb3JtSXRlbT5gLlxuICpcbiAqIFdoZW4gcmVuZGVyZWQgaW5zaWRlIGEgYDxGb3JtPmAsIHRoaXMgaG9vayB1c2VzIHRoZSBjb250ZXh0LXByb3ZpZGVkXG4gKiBgcmVhY3QtaG9vay1mb3JtYCBtZXRob2RzLiBPdGhlcndpc2UgaXQgcmVhZHMgbWV0aG9kcyBmcm9tXG4gKiB7QGxpbmsgRmFsbGJhY2tGb3JtUHJvdmlkZXJ9LCB3aGljaCBjcmVhdGVzIGEgbG9jYWwgYHVzZUZvcm0oKWAgaW5zdGFuY2UuXG4gKlxuICogQSBkZXZlbG9wbWVudC1vbmx5IGNvbnNvbGUgd2FybmluZyBpcyBlbWl0dGVkIChvbmNlIHBlciBmaWVsZCBuYW1lKSB3aGVuXG4gKiBhIGBuYW1lYCBwcm9wIGlzIHNldCBidXQgbm8gcGFyZW50IGA8Rm9ybT5gIGNvbnRleHQgaXMgZm91bmQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBzaGFwZSBvZiB0aGUgZm9ybSB2YWx1ZXMuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBmaWVsZCBuYW1lLCB1c2VkIGZvciB0aGUgbWlzc2luZy1jb250ZXh0IHdhcm5pbmcgY2hlY2suXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgY3R4YCAoZm9ybSBjb250ZXh0IG9yIGBudWxsYCksIGBtZXRob2RzYCwgYGNvbnRyb2xgLCBhbmQgYHRyaWdnZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUl0ZW1Db250ZXh0KG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG4gICAgY29uc3QgZmFsbGJhY2tNZXRob2RzID0gdXNlQ29udGV4dChGYWxsYmFja0Zvcm1Db250ZXh0KTtcbiAgICBjb25zdCB3YXJuZWRSZWYgPSB1c2VSZWYobmV3IFNldCgpKTtcbiAgICBjb25zdCBtZXRob2RzID0gKF9hID0gY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbGxiYWNrTWV0aG9kcztcbiAgICBpZiAoIW1ldGhvZHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRm9ybUl0ZW1dIE5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCB3aXRoIDxGb3JtPiBvciBtb3VudCBpbnNpZGUgPEZhbGxiYWNrRm9ybVByb3ZpZGVyPi4nKTtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbCA9IG1ldGhvZHMuY29udHJvbDtcbiAgICBjb25zdCB0cmlnZ2VyID0gbWV0aG9kcy50cmlnZ2VyO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChuYW1lICYmICEoY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICYmICF3YXJuZWRSZWYuY3VycmVudC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHdhcm5lZFJlZi5jdXJyZW50LmFkZChuYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0Zvcm1JdGVtXSBgbmFtZWAgcHJvcCBpcyBzZXQgYnV0IG5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCBGb3JtSXRlbSBpbnNpZGUgYSA8Rm9ybT4gY29tcG9uZW50LicpO1xuICAgICAgICB9XG4gICAgfSwgW25hbWUsIGN0eCA9PT0gbnVsbCB8fCBjdHggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN0eC5tZXRob2RzXSk7XG4gICAgcmV0dXJuIHsgY3R4LCBtZXRob2RzLCBjb250cm9sLCB0cmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Control, FieldPath, FieldValues, UseFormReturn } from 'react-hook-form';
|
|
2
|
+
import type { FormItemProps } from './interface';
|
|
3
|
+
/**
|
|
4
|
+
* Return type of {@link useFormItemWatch}.
|
|
5
|
+
*
|
|
6
|
+
* @template TFieldValues - The shape of the form values.
|
|
7
|
+
*/
|
|
8
|
+
interface UseFormItemWatchResult<TFieldValues extends FieldValues> {
|
|
9
|
+
/** Current snapshot of all form values. */
|
|
10
|
+
allValues: TFieldValues;
|
|
11
|
+
/** Watched dependency values (array when multiple, single value otherwise). */
|
|
12
|
+
depValues: unknown;
|
|
13
|
+
/** Whether the FormItem should render based on `shouldUpdate` evaluation. */
|
|
14
|
+
shouldRender: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Arguments for {@link useFormItemWatch}.
|
|
18
|
+
*
|
|
19
|
+
* @template TFieldValues - The shape of the form values.
|
|
20
|
+
*/
|
|
21
|
+
interface UseFormItemWatchArgs<TFieldValues extends FieldValues> {
|
|
22
|
+
/** The `react-hook-form` `Control` instance. */
|
|
23
|
+
control: Control<TFieldValues>;
|
|
24
|
+
/** The `react-hook-form` methods instance. */
|
|
25
|
+
methods: UseFormReturn<TFieldValues>;
|
|
26
|
+
/** Field paths that trigger re-validation when their values change. */
|
|
27
|
+
dependencies?: FormItemProps<TFieldValues>['dependencies'];
|
|
28
|
+
/** Additional field paths to watch for re-render. */
|
|
29
|
+
watchNames?: FormItemProps<TFieldValues>['watchNames'];
|
|
30
|
+
/** Controls when the FormItem re-renders. */
|
|
31
|
+
shouldUpdate?: FormItemProps<TFieldValues>['shouldUpdate'];
|
|
32
|
+
/** The field path for this FormItem. */
|
|
33
|
+
name?: FieldPath<TFieldValues>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Consolidates the three `useWatch` subscriptions (dependencies, all values,
|
|
37
|
+
* and named watches) along with `allValues` derivation and `shouldRender`
|
|
38
|
+
* gating into a single hook.
|
|
39
|
+
*
|
|
40
|
+
* This hook manages:
|
|
41
|
+
* 1. Watching dependency fields for cross-field re-validation.
|
|
42
|
+
* 2. Watching all values when `shouldUpdate` requires a full-form comparison.
|
|
43
|
+
* 3. Watching named fields specified via `watchNames`.
|
|
44
|
+
* 4. Computing `shouldRender` based on the `shouldUpdate` prop.
|
|
45
|
+
*
|
|
46
|
+
* @template TFieldValues - The shape of the form values.
|
|
47
|
+
* @param args - {@link UseFormItemWatchArgs}
|
|
48
|
+
* @returns {@link UseFormItemWatchResult} containing current values and render gate.
|
|
49
|
+
*/
|
|
50
|
+
export declare function useFormItemWatch<TFieldValues extends FieldValues = FieldValues>({ control, methods, dependencies, watchNames, shouldUpdate, name, }: UseFormItemWatchArgs<TFieldValues>): UseFormItemWatchResult<TFieldValues>;
|
|
51
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useFormItemWatch = useFormItemWatch;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _reactHookForm = require("react-hook-form");
|
|
10
|
+
var _usePrevious = _interopRequireDefault(require("../usePrevious"));
|
|
11
|
+
// Module-level constant to avoid recreating empty array on each render.
|
|
12
|
+
var EMPTY_NAMES = [];
|
|
13
|
+
/**
|
|
14
|
+
* Consolidates the three `useWatch` subscriptions (dependencies, all values,
|
|
15
|
+
* and named watches) along with `allValues` derivation and `shouldRender`
|
|
16
|
+
* gating into a single hook.
|
|
17
|
+
*
|
|
18
|
+
* This hook manages:
|
|
19
|
+
* 1. Watching dependency fields for cross-field re-validation.
|
|
20
|
+
* 2. Watching all values when `shouldUpdate` requires a full-form comparison.
|
|
21
|
+
* 3. Watching named fields specified via `watchNames`.
|
|
22
|
+
* 4. Computing `shouldRender` based on the `shouldUpdate` prop.
|
|
23
|
+
*
|
|
24
|
+
* @template TFieldValues - The shape of the form values.
|
|
25
|
+
* @param args - {@link UseFormItemWatchArgs}
|
|
26
|
+
* @returns {@link UseFormItemWatchResult} containing current values and render gate.
|
|
27
|
+
*/
|
|
28
|
+
function useFormItemWatch(_ref) {
|
|
29
|
+
var control = _ref.control,
|
|
30
|
+
methods = _ref.methods,
|
|
31
|
+
dependencies = _ref.dependencies,
|
|
32
|
+
watchNames = _ref.watchNames,
|
|
33
|
+
shouldUpdate = _ref.shouldUpdate,
|
|
34
|
+
name = _ref.name;
|
|
35
|
+
var shouldWatchAllValues = shouldUpdate === true || typeof shouldUpdate === 'function';
|
|
36
|
+
var depNames = (dependencies === null || dependencies === void 0 ? void 0 : dependencies.length) ? dependencies : EMPTY_NAMES;
|
|
37
|
+
var shouldWatchDeps = !!(name && depNames.length);
|
|
38
|
+
var watchNamesList = (watchNames === null || watchNames === void 0 ? void 0 : watchNames.length) ? watchNames : EMPTY_NAMES;
|
|
39
|
+
var shouldWatchNames = !!(watchNames === null || watchNames === void 0 ? void 0 : watchNames.length);
|
|
40
|
+
var depValues = (0, _reactHookForm.useWatch)({
|
|
41
|
+
control: control,
|
|
42
|
+
name: depNames,
|
|
43
|
+
disabled: !shouldWatchDeps
|
|
44
|
+
});
|
|
45
|
+
var watchedAllValues = (0, _reactHookForm.useWatch)({
|
|
46
|
+
control: control,
|
|
47
|
+
disabled: !shouldWatchAllValues
|
|
48
|
+
});
|
|
49
|
+
var watchedNamesValues = (0, _reactHookForm.useWatch)({
|
|
50
|
+
control: control,
|
|
51
|
+
name: watchNamesList,
|
|
52
|
+
disabled: !shouldWatchNames
|
|
53
|
+
});
|
|
54
|
+
var allValues = (0, _react.useMemo)(function () {
|
|
55
|
+
var getValues = methods.getValues;
|
|
56
|
+
if (!getValues) return {};
|
|
57
|
+
if (shouldWatchAllValues) return watchedAllValues !== null && watchedAllValues !== void 0 ? watchedAllValues : getValues();
|
|
58
|
+
return getValues();
|
|
59
|
+
}, [methods, shouldWatchAllValues, watchedAllValues,
|
|
60
|
+
// Intentionally unused in useMemo body: this dependency forces `allValues`
|
|
61
|
+
// to recompute via methods.getValues() when watched names change while
|
|
62
|
+
// `shouldWatchAllValues` is false.
|
|
63
|
+
watchedNamesValues]);
|
|
64
|
+
var prevValues = (0, _usePrevious["default"])(allValues);
|
|
65
|
+
var shouldRender = (0, _react.useMemo)(function () {
|
|
66
|
+
if (!shouldUpdate || shouldUpdate === true) return true;
|
|
67
|
+
if (prevValues === undefined) return true;
|
|
68
|
+
return shouldUpdate(prevValues, allValues);
|
|
69
|
+
}, [allValues, prevValues, shouldUpdate]);
|
|
70
|
+
return {
|
|
71
|
+
allValues: allValues,
|
|
72
|
+
depValues: depValues,
|
|
73
|
+
shouldRender: shouldRender
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbVdhdGNoLnRzIiwiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtV2F0Y2guanMiXSwibmFtZXMiOlsiX3JlYWN0IiwicmVxdWlyZSIsIl9yZWFjdEhvb2tGb3JtIiwiX3VzZVByZXZpb3VzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIkVNUFRZX05BTUVTIiwidXNlRm9ybUl0ZW1XYXRjaCIsIl9yZWYiLCJjb250cm9sIiwibWV0aG9kcyIsImRlcGVuZGVuY2llcyIsIndhdGNoTmFtZXMiLCJzaG91bGRVcGRhdGUiLCJuYW1lIiwic2hvdWxkV2F0Y2hBbGxWYWx1ZXMiLCJkZXBOYW1lcyIsImxlbmd0aCIsInNob3VsZFdhdGNoRGVwcyIsIndhdGNoTmFtZXNMaXN0Iiwic2hvdWxkV2F0Y2hOYW1lcyIsImRlcFZhbHVlcyIsInVzZVdhdGNoIiwiZGlzYWJsZWQiLCJ3YXRjaGVkQWxsVmFsdWVzIiwid2F0Y2hlZE5hbWVzVmFsdWVzIiwiYWxsVmFsdWVzIiwidXNlTWVtbyIsImdldFZhbHVlcyIsInByZXZWYWx1ZXMiLCJ1c2VQcmV2aW91cyIsInNob3VsZFJlbmRlciIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQXNDQTtBQUNBLElBQU1JLFdBQVcsR0FBWSxFQUFFO0FBRS9CO0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUR1Q00sU0FBVUMsZ0JBQWdCQSxDQUFBQyxJQUFBLEVBT0s7RUFBQSxJQU5uQ0MsT0FBTyxHQUFBRCxJQUFBLENBQVBDLE9BQU87SUFDUEMsT0FBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87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LCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlV2F0Y2ggfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xuaW1wb3J0IHVzZVByZXZpb3VzIGZyb20gJy4uL3VzZVByZXZpb3VzJztcbi8vIE1vZHVsZS1sZXZlbCBjb25zdGFudCB0byBhdm9pZCByZWNyZWF0aW5nIGVtcHR5IGFycmF5IG9uIGVhY2ggcmVuZGVyLlxuY29uc3QgRU1QVFlfTkFNRVMgPSBbXTtcbi8qKlxuICogQ29uc29saWRhdGVzIHRoZSB0aHJlZSBgdXNlV2F0Y2hgIHN1YnNjcmlwdGlvbnMgKGRlcGVuZGVuY2llcywgYWxsIHZhbHVlcyxcbiAqIGFuZCBuYW1lZCB3YXRjaGVzKSBhbG9uZyB3aXRoIGBhbGxWYWx1ZXNgIGRlcml2YXRpb24gYW5kIGBzaG91bGRSZW5kZXJgXG4gKiBnYXRpbmcgaW50byBhIHNpbmdsZSBob29rLlxuICpcbiAqIFRoaXMgaG9vayBtYW5hZ2VzOlxuICogMS4gV2F0Y2hpbmcgZGVwZW5kZW5jeSBmaWVsZHMgZm9yIGNyb3NzLWZpZWxkIHJlLXZhbGlkYXRpb24uXG4gKiAyLiBXYXRjaGluZyBhbGwgdmFsdWVzIHdoZW4gYHNob3VsZFVwZGF0ZWAgcmVxdWlyZXMgYSBmdWxsLWZvcm0gY29tcGFyaXNvbi5cbiAqIDMuIFdhdGNoaW5nIG5hbWVkIGZpZWxkcyBzcGVjaWZpZWQgdmlhIGB3YXRjaE5hbWVzYC5cbiAqIDQuIENvbXB1dGluZyBgc2hvdWxkUmVuZGVyYCBiYXNlZCBvbiB0aGUgYHNob3VsZFVwZGF0ZWAgcHJvcC5cbiAqXG4gKiBAdGVtcGxhdGUgVEZpZWxkVmFsdWVzIC0gVGhlIHNoYXBlIG9mIHRoZSBmb3JtIHZhbHVlcy5cbiAqIEBwYXJhbSBhcmdzIC0ge0BsaW5rIFVzZUZvcm1JdGVtV2F0Y2hBcmdzfVxuICogQHJldHVybnMge0BsaW5rIFVzZUZvcm1JdGVtV2F0Y2hSZXN1bHR9IGNvbnRhaW5pbmcgY3VycmVudCB2YWx1ZXMgYW5kIHJlbmRlciBnYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUl0ZW1XYXRjaCh7IGNvbnRyb2wsIG1ldGhvZHMsIGRlcGVuZGVuY2llcywgd2F0Y2hOYW1lcywgc2hvdWxkVXBkYXRlLCBuYW1lLCB9KSB7XG4gICAgY29uc3Qgc2hvdWxkV2F0Y2hBbGxWYWx1ZXMgPSBzaG91bGRVcGRhdGUgPT09IHRydWUgfHwgdHlwZW9mIHNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICBjb25zdCBkZXBOYW1lcyA9ICgoZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCkgPyBkZXBlbmRlbmNpZXMgOiBFTVBUWV9OQU1FUyk7XG4gICAgY29uc3Qgc2hvdWxkV2F0Y2hEZXBzID0gISEobmFtZSAmJiBkZXBOYW1lcy5sZW5ndGgpO1xuICAgIGNvbnN0IHdhdGNoTmFtZXNMaXN0ID0gKCh3YXRjaE5hbWVzID09PSBudWxsIHx8IHdhdGNoTmFtZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdhdGNoTmFtZXMubGVuZ3RoKSA/IHdhdGNoTmFtZXMgOiBFTVBUWV9OQU1FUyk7XG4gICAgY29uc3Qgc2hvdWxkV2F0Y2hOYW1lcyA9ICEhKHdhdGNoTmFtZXMgPT09IG51bGwgfHwgd2F0Y2hOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2F0Y2hOYW1lcy5sZW5ndGgpO1xuICAgIGNvbnN0IGRlcFZhbHVlcyA9IHVzZVdhdGNoKHsgY29udHJvbCwgbmFtZTogZGVwTmFtZXMsIGRpc2FibGVkOiAhc2hvdWxkV2F0Y2hEZXBzIH0pO1xuICAgIGNvbnN0IHdhdGNoZWRBbGxWYWx1ZXMgPSB1c2VXYXRjaCh7IGNvbnRyb2wsIGRpc2FibGVkOiAhc2hvdWxkV2F0Y2hBbGxWYWx1ZXMgfSk7XG4gICAgY29uc3Qgd2F0Y2hlZE5hbWVzVmFsdWVzID0gdXNlV2F0Y2goe1xuICAgICAgICBjb250cm9sLFxuICAgICAgICBuYW1lOiB3YXRjaE5hbWVzTGlzdCxcbiAgICAgICAgZGlzYWJsZWQ6ICFzaG91bGRXYXRjaE5hbWVzLFxuICAgIH0pO1xuICAgIGNvbnN0IGFsbFZhbHVlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBnZXRWYWx1ZXMgPSBtZXRob2RzLmdldFZhbHVlcztcbiAgICAgICAgaWYgKCFnZXRWYWx1ZXMpXG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIGlmIChzaG91bGRXYXRjaEFsbFZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiAod2F0Y2hlZEFsbFZhbHVlcyAhPT0gbnVsbCAmJiB3YXRjaGVkQWxsVmFsdWVzICE9PSB2b2lkIDAgPyB3YXRjaGVkQWxsVmFsdWVzIDogZ2V0VmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gZ2V0VmFsdWVzKCk7XG4gICAgfSwgW1xuICAgICAgICBtZXRob2RzLFxuICAgICAgICBzaG91bGRXYXRjaEFsbFZhbHVlcyxcbiAgICAgICAgd2F0Y2hlZEFsbFZhbHVlcyxcbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1bnVzZWQgaW4gdXNlTWVtbyBib2R5OiB0aGlzIGRlcGVuZGVuY3kgZm9yY2VzIGBhbGxWYWx1ZXNgXG4gICAgICAgIC8vIHRvIHJlY29tcHV0ZSB2aWEgbWV0aG9kcy5nZXRWYWx1ZXMoKSB3aGVuIHdhdGNoZWQgbmFtZXMgY2hhbmdlIHdoaWxlXG4gICAgICAgIC8vIGBzaG91bGRXYXRjaEFsbFZhbHVlc2AgaXMgZmFsc2UuXG4gICAgICAgIHdhdGNoZWROYW1lc1ZhbHVlcyxcbiAgICBdKTtcbiAgICBjb25zdCBwcmV2VmFsdWVzID0gdXNlUHJldmlvdXMoYWxsVmFsdWVzKTtcbiAgICBjb25zdCBzaG91bGRSZW5kZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgaWYgKCFzaG91bGRVcGRhdGUgfHwgc2hvdWxkVXBkYXRlID09PSB0cnVlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChwcmV2VmFsdWVzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHNob3VsZFVwZGF0ZShwcmV2VmFsdWVzLCBhbGxWYWx1ZXMpO1xuICAgIH0sIFthbGxWYWx1ZXMsIHByZXZWYWx1ZXMsIHNob3VsZFVwZGF0ZV0pO1xuICAgIHJldHVybiB7IGFsbFZhbHVlcywgZGVwVmFsdWVzLCBzaG91bGRSZW5kZXIgfTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { FieldPath, FieldValues } from 'react-hook-form';
|
|
2
|
+
import type { FormItemProps } from './interface';
|
|
3
|
+
/**
|
|
4
|
+
* Arguments for {@link useValidationTrigger}.
|
|
5
|
+
*
|
|
6
|
+
* @template TFieldValues - The shape of the form values.
|
|
7
|
+
*/
|
|
8
|
+
interface UseValidationTriggerArgs<TFieldValues extends FieldValues> {
|
|
9
|
+
/** The field path to validate. When `undefined`, validation is skipped. */
|
|
10
|
+
name?: FieldPath<TFieldValues>;
|
|
11
|
+
/** The `trigger` function from `react-hook-form` for imperative validation. */
|
|
12
|
+
trigger: (name: FieldPath<TFieldValues>) => Promise<boolean>;
|
|
13
|
+
/** Event(s) that should trigger validation (`'onChange'`, `'onBlur'`, or both). */
|
|
14
|
+
validateTrigger?: FormItemProps<TFieldValues>['validateTrigger'];
|
|
15
|
+
/** Debounce delay in milliseconds for triggered validation. */
|
|
16
|
+
validateDebounce?: number;
|
|
17
|
+
/** Field paths whose changes should re-trigger this field's validation. */
|
|
18
|
+
dependencies?: FormItemProps<TFieldValues>['dependencies'];
|
|
19
|
+
/** Current watched dependency values used to detect changes. */
|
|
20
|
+
depValues: unknown;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encapsulates validation trigger logic for a single form field.
|
|
24
|
+
*
|
|
25
|
+
* Responsibilities:
|
|
26
|
+
* - Normalizes the `validateTrigger` prop into an array of trigger modes.
|
|
27
|
+
* - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
|
|
28
|
+
* with conditional validation calls.
|
|
29
|
+
* - Applies optional debounce to validation triggers.
|
|
30
|
+
* - Re-validates the field when dependency values change (cross-field validation).
|
|
31
|
+
* - Cleans up debounce timers on unmount.
|
|
32
|
+
*
|
|
33
|
+
* @template TFieldValues - The shape of the form values.
|
|
34
|
+
* @param args - {@link UseValidationTriggerArgs}
|
|
35
|
+
* @returns An object containing the `withTrigger` function.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useValidationTrigger<TFieldValues extends FieldValues = FieldValues>({ name, trigger, validateTrigger, validateDebounce, dependencies, depValues, }: UseValidationTriggerArgs<TFieldValues>): {
|
|
38
|
+
withTrigger: (mode: "onBlur" | "onChange", fn?: ((...args: unknown[]) => void) | undefined) => (...args: unknown[]) => void;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useValidationTrigger = useValidationTrigger;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _useMemoizedFn = _interopRequireDefault(require("../useMemoizedFn"));
|
|
10
|
+
var _constants = require("./constants");
|
|
11
|
+
var _helper = require("./helper");
|
|
12
|
+
/**
|
|
13
|
+
* Encapsulates validation trigger logic for a single form field.
|
|
14
|
+
*
|
|
15
|
+
* Responsibilities:
|
|
16
|
+
* - Normalizes the `validateTrigger` prop into an array of trigger modes.
|
|
17
|
+
* - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
|
|
18
|
+
* with conditional validation calls.
|
|
19
|
+
* - Applies optional debounce to validation triggers.
|
|
20
|
+
* - Re-validates the field when dependency values change (cross-field validation).
|
|
21
|
+
* - Cleans up debounce timers on unmount.
|
|
22
|
+
*
|
|
23
|
+
* @template TFieldValues - The shape of the form values.
|
|
24
|
+
* @param args - {@link UseValidationTriggerArgs}
|
|
25
|
+
* @returns An object containing the `withTrigger` function.
|
|
26
|
+
*/
|
|
27
|
+
function useValidationTrigger(_ref) {
|
|
28
|
+
var name = _ref.name,
|
|
29
|
+
trigger = _ref.trigger,
|
|
30
|
+
validateTrigger = _ref.validateTrigger,
|
|
31
|
+
validateDebounce = _ref.validateDebounce,
|
|
32
|
+
dependencies = _ref.dependencies,
|
|
33
|
+
depValues = _ref.depValues;
|
|
34
|
+
var triggerTimerRef = (0, _react.useRef)(null);
|
|
35
|
+
var prevDepValuesRef = (0, _react.useRef)(null);
|
|
36
|
+
var triggerModes = (0, _react.useMemo)(function () {
|
|
37
|
+
return (0, _helper.normalizeValidateTrigger)(validateTrigger);
|
|
38
|
+
}, [validateTrigger]);
|
|
39
|
+
var triggerValidation = (0, _useMemoizedFn["default"])(function () {
|
|
40
|
+
if (!name) return;
|
|
41
|
+
var run = function run() {
|
|
42
|
+
void trigger(name);
|
|
43
|
+
};
|
|
44
|
+
if (validateDebounce && validateDebounce > _constants.DEBOUNCE_MIN) {
|
|
45
|
+
if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
|
|
46
|
+
triggerTimerRef.current = setTimeout(run, validateDebounce);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
run();
|
|
50
|
+
});
|
|
51
|
+
(0, _react.useEffect)(function () {
|
|
52
|
+
if (!name || !(dependencies === null || dependencies === void 0 ? void 0 : dependencies.length)) return;
|
|
53
|
+
var nextDeps = Array.isArray(depValues) ? depValues : [depValues];
|
|
54
|
+
var prevDeps = prevDepValuesRef.current;
|
|
55
|
+
if (!prevDeps) {
|
|
56
|
+
prevDepValuesRef.current = nextDeps;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if ((0, _helper.shallowEqualArray)(prevDeps, nextDeps)) return;
|
|
60
|
+
prevDepValuesRef.current = nextDeps;
|
|
61
|
+
triggerValidation();
|
|
62
|
+
}, [depValues, dependencies === null || dependencies === void 0 ? void 0 : dependencies.length, name, triggerValidation]);
|
|
63
|
+
(0, _react.useEffect)(function () {
|
|
64
|
+
return function () {
|
|
65
|
+
if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
|
|
66
|
+
};
|
|
67
|
+
}, []);
|
|
68
|
+
var shouldTrigger = (0, _useMemoizedFn["default"])(function (mode) {
|
|
69
|
+
return triggerModes.includes(mode);
|
|
70
|
+
});
|
|
71
|
+
var withTrigger = (0, _useMemoizedFn["default"])(function (mode, fn) {
|
|
72
|
+
return function () {
|
|
73
|
+
fn === null || fn === void 0 ? void 0 : fn.apply(void 0, arguments);
|
|
74
|
+
if (name && shouldTrigger(mode)) triggerValidation();
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
withTrigger: withTrigger
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci50cyIsImNvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZU1lbW9pemVkRm4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvbnN0YW50cyIsIl9oZWxwZXIiLCJ1c2VWYWxpZGF0aW9uVHJpZ2dlciIsIl9yZWYiLCJuYW1lIiwidHJpZ2dlciIsInZhbGlkYXRlVHJpZ2dlciIsInZhbGlkYXRlRGVib3VuY2UiLCJkZXBlbmRlbmNpZXMiLCJkZXBWYWx1ZXMiLCJ0cmlnZ2VyVGltZXJSZWYiLCJ1c2VSZWYiLCJwcmV2RGVwVmFsdWVzUmVmIiwidHJpZ2dlck1vZGVzIiwidXNlTWVtbyIsIm5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlciIsInRyaWdnZXJWYWxpZGF0aW9uIiwidXNlTWVtb2l6ZWRGbiIsInJ1biIsIkRFQk9VTkNFX01JTiIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidXNlRWZmZWN0IiwibGVuZ3RoIiwibmV4dERlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJwcmV2RGVwcyIsInNoYWxsb3dFcXVhbEFycmF5Iiwic2hvdWxkVHJpZ2dlciIsIm1vZGUiLCJpbmNsdWRlcyIsIndpdGhUcmlnZ2VyIiwiZm4iLCJhcHBseSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQXVCQTtBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEd0JNLFNB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RSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFGQSxFQUFFLENBQUFDLEtBQUEsU0FBQUMsU0FBVSxDQUFDO01BQ2IsSUFBSWhDLElBQUksSUFBSTBCLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDLEVBQUVmLGlCQUFpQixDQUFBLENBQUU7SUFDdEQsQ0FBQztFQUFBLEVBQ0o7RUFFRCxPQUFPO0lBQUVpQixXQUFXLEVBQVhBO0VBQVcsQ0FBRTtBQUN4QiIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vdXNlVmFsaWRhdGlvblRyaWdnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnLi4vdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBERUJPVU5DRV9NSU4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBub3JtYWxpemVWYWxpZGF0ZVRyaWdnZXIsIHNoYWxsb3dFcXVhbEFycmF5IH0gZnJvbSAnLi9oZWxwZXInO1xuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgdmFsaWRhdGlvbiB0cmlnZ2VyIGxvZ2ljIGZvciBhIHNpbmdsZSBmb3JtIGZpZWxkLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIE5vcm1hbGl6ZXMgdGhlIGB2YWxpZGF0ZVRyaWdnZXJgIHByb3AgaW50byBhbiBhcnJheSBvZiB0cmlnZ2VyIG1vZGVzLlxuICogLSBQcm92aWRlcyBhIGB3aXRoVHJpZ2dlcmAgd3JhcHBlciB0aGF0IGNvbXBvc2VzIGV2ZW50IGhhbmRsZXJzIChvbkNoYW5nZS9vbkJsdXIpXG4gKiAgIHdpdGggY29uZGl0aW9uYWwgdmFsaWRhdGlvbiBjYWxscy5cbiAqIC0gQXBwbGllcyBvcHRpb25hbCBkZWJvdW5jZSB0byB2YWxpZGF0aW9uIHRyaWdnZXJzLlxuICogLSBSZS12YWxpZGF0ZXMgdGhlIGZpZWxkIHdoZW4gZGVwZW5kZW5jeSB2YWx1ZXMgY2hhbmdlIChjcm9zcy1maWVsZCB2YWxpZGF0aW9uKS5cbiAqIC0gQ2xlYW5zIHVwIGRlYm91bmNlIHRpbWVycyBvbiB1bm1vdW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgc2hhcGUgb2YgdGhlIGZvcm0gdmFsdWVzLlxuICogQHBhcmFtIGFyZ3MgLSB7QGxpbmsgVXNlVmFsaWRhdGlvblRyaWdnZXJBcmdzfVxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGB3aXRoVHJpZ2dlcmAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWYWxpZGF0aW9uVHJpZ2dlcih7IG5hbWUsIHRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVEZWJvdW5jZSwgZGVwZW5kZW5jaWVzLCBkZXBWYWx1ZXMsIH0pIHtcbiAgICBjb25zdCB0cmlnZ2VyVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcHJldkRlcFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCB0cmlnZ2VyTW9kZXMgPSB1c2VNZW1vKCgpID0+IG5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlcih2YWxpZGF0ZVRyaWdnZXIpLCBbdmFsaWRhdGVUcmlnZ2VyXSk7XG4gICAgY29uc3QgdHJpZ2dlclZhbGlkYXRpb24gPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRyaWdnZXIobmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh2YWxpZGF0ZURlYm91bmNlICYmIHZhbGlkYXRlRGVib3VuY2UgPiBERUJPVU5DRV9NSU4pIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyVGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgdHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KHJ1biwgdmFsaWRhdGVEZWJvdW5jZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcnVuKCk7XG4gICAgfSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICEoZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHREZXBzID0gQXJyYXkuaXNBcnJheShkZXBWYWx1ZXMpID8gZGVwVmFsdWVzIDogW2RlcFZhbHVlc107XG4gICAgICAgIGNvbnN0IHByZXZEZXBzID0gcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXByZXZEZXBzKSB7XG4gICAgICAgICAgICBwcmV2RGVwVmFsdWVzUmVmLmN1cnJlbnQgPSBuZXh0RGVwcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhbGxvd0VxdWFsQXJyYXkocHJldkRlcHMsIG5leHREZXBzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50ID0gbmV4dERlcHM7XG4gICAgICAgIHRyaWdnZXJWYWxpZGF0aW9uKCk7XG4gICAgfSwgW2RlcFZhbHVlcywgZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCwgbmFtZSwgdHJpZ2dlclZhbGlkYXRpb25dKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzaG91bGRUcmlnZ2VyID0gdXNlTWVtb2l6ZWRGbigobW9kZSkgPT4gdHJpZ2dlck1vZGVzLmluY2x1ZGVzKG1vZGUpKTtcbiAgICBjb25zdCB3aXRoVHJpZ2dlciA9IHVzZU1lbW9pemVkRm4oKG1vZGUsIGZuKSA9PiAoLi4uYXJncykgPT4ge1xuICAgICAgICBmbiA9PT0gbnVsbCB8fCBmbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm4oLi4uYXJncyk7XG4gICAgICAgIGlmIChuYW1lICYmIHNob3VsZFRyaWdnZXIobW9kZSkpXG4gICAgICAgICAgICB0cmlnZ2VyVmFsaWRhdGlvbigpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IHdpdGhUcmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|