@iress-oss/ids-mcp-server 6.0.0-alpha.2 → 6.0.0-alpha.4
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/generated/docs/components_components-alert-docs.md +7 -7
- package/generated/docs/components_components-autocomplete-docs.md +18 -18
- package/generated/docs/components_components-autocomplete-recipes-docs.md +9 -2
- package/generated/docs/components_components-badge-docs.md +4 -4
- package/generated/docs/components_components-button-docs.md +16 -14
- package/generated/docs/components_components-buttongroup-docs.md +9 -9
- package/generated/docs/components_components-card-docs.md +32 -17
- package/generated/docs/components_components-checkbox-docs.md +7 -7
- package/generated/docs/components_components-checkboxgroup-docs.md +10 -10
- package/generated/docs/components_components-checkboxgroup-recipes-docs.md +4 -3
- package/generated/docs/components_components-col-docs.md +38 -38
- package/generated/docs/components_components-container-docs.md +5 -5
- package/generated/docs/components_components-divider-docs.md +5 -5
- package/generated/docs/components_components-expander-docs.md +6 -4
- package/generated/docs/components_components-field-docs.md +28 -28
- package/generated/docs/components_components-filter-docs.md +19 -19
- package/generated/docs/components_components-hide-docs.md +9 -9
- package/generated/docs/components_components-icon-docs.md +9 -9
- package/generated/docs/components_components-image-docs.md +2 -2
- package/generated/docs/components_components-inline-docs.md +76 -388
- package/generated/docs/components_components-input-docs.md +9 -9
- package/generated/docs/components_components-input-recipes-docs.md +4 -4
- package/generated/docs/components_components-inputcurrency-docs.md +7 -7
- package/generated/docs/components_components-inputcurrency-recipes-docs.md +5 -2
- package/generated/docs/components_components-label-docs.md +4 -4
- package/generated/docs/components_components-link-docs.md +6 -4
- package/generated/docs/components_components-menu-docs.md +13 -13
- package/generated/docs/components_components-menu-menuitem-docs.md +12 -12
- package/generated/docs/components_components-modal-docs.md +32 -13
- package/generated/docs/components_components-panel-docs.md +6 -6
- package/generated/docs/components_components-placeholder-docs.md +1 -1
- package/generated/docs/components_components-popover-docs.md +11 -9
- package/generated/docs/components_components-popover-recipes-docs.md +4 -2
- package/generated/docs/components_components-progress-docs.md +1 -1
- package/generated/docs/components_components-provider-docs.md +2 -2
- package/generated/docs/components_components-radio-docs.md +5 -5
- package/generated/docs/components_components-radiogroup-docs.md +8 -8
- package/generated/docs/components_components-readonly-docs.md +3 -3
- package/generated/docs/components_components-richselect-docs.md +69 -28
- package/generated/docs/components_components-row-docs.md +60 -492
- package/generated/docs/components_components-select-docs.md +8 -8
- package/generated/docs/components_components-skeleton-docs.md +9 -9
- package/generated/docs/components_components-skeleton-recipes-docs.md +2 -2
- package/generated/docs/components_components-skiplink-docs.md +1 -1
- package/generated/docs/components_components-slideout-docs.md +34 -13
- package/generated/docs/components_components-slider-docs.md +8 -8
- package/generated/docs/components_components-spinner-docs.md +3 -3
- package/generated/docs/components_components-stack-docs.md +63 -175
- package/generated/docs/components_components-table-docs.md +31 -24
- package/generated/docs/components_components-tabset-docs.md +10 -10
- package/generated/docs/components_components-tabset-tab-docs.md +4 -4
- package/generated/docs/components_components-tag-docs.md +14 -5
- package/generated/docs/components_components-text-docs.md +21 -9
- package/generated/docs/components_components-toaster-docs.md +12 -12
- package/generated/docs/components_components-toggle-docs.md +6 -6
- package/generated/docs/components_components-tooltip-docs.md +4 -4
- package/generated/docs/components_components-validationmessage-docs.md +5 -5
- package/generated/docs/components_foundations-responsive-layout-docs.md +16 -15
- package/generated/docs/components_foundations-z-index-stacking-docs.md +1 -1
- package/generated/docs/components_introduction-docs.md +1 -1
- package/generated/docs/components_patterns-form-docs.md +139 -96
- package/generated/docs/components_patterns-form-recipes-docs.md +160 -30
- package/generated/docs/components_patterns-loading-docs.md +98 -17
- package/generated/docs/components_patterns-shadow-docs.md +2 -2
- package/generated/docs/components_sandbox-docs.md +4 -0
- package/generated/docs/components_styling-props-colour-docs.md +2 -2
- package/generated/docs/components_styling-props-elevation-docs.md +2 -2
- package/generated/docs/components_styling-props-radius-docs.md +3 -3
- package/generated/docs/components_styling-props-reference-docs.md +3 -3
- package/generated/docs/components_styling-props-screen-readers-docs.md +2 -2
- package/generated/docs/components_styling-props-sizing-docs.md +3 -3
- package/generated/docs/components_styling-props-spacing-docs.md +19 -19
- package/generated/docs/components_styling-props-typography-docs.md +2 -2
- package/generated/docs/guidelines.md +17 -16
- package/generated/docs/tokens_colour-docs.md +72 -0
- package/generated/docs/tokens_introduction-docs.md +15 -18
- package/generated/docs/tokens_sandbox-docs.md +1 -0
- package/generated/docs/tokens_spacing-docs.md +10 -40
- package/generated/docs/tokens_typography-docs.md +43 -1
- package/package.json +4 -4
|
@@ -8,9 +8,9 @@ Use the `IressForm` component when you want to request, validate and process dat
|
|
|
8
8
|
|
|
9
9
|
[](./iframe.html?id=patterns-form--simple)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Hide codedrawOpen in CodeSandbox
|
|
12
12
|
|
|
13
|
-
<
|
|
13
|
+
<IressForm
|
|
14
14
|
actions\={<IressButton mode\="primary" type\="submit"\>Submit</IressButton\>}
|
|
15
15
|
pattern\="short"
|
|
16
16
|
\>
|
|
@@ -42,7 +42,7 @@ Use the `IressForm` component when you want to request, validate and process dat
|
|
|
42
42
|
required: 'Email is required'
|
|
43
43
|
}}
|
|
44
44
|
/>
|
|
45
|
-
</
|
|
45
|
+
</IressForm\>
|
|
46
46
|
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -80,10 +80,19 @@ string
|
|
|
80
80
|
| \- | short |
|
|
81
81
|
| Show React Hook Forms itemsReact Hook Forms | Show React Hook Forms items |
|
|
82
82
|
|
|
83
|
+
Installation
|
|
84
|
+
------------
|
|
85
|
+
|
|
86
|
+
As of version 6, `react-hook-form` has been moved to a peer dependency. You will need to install it alongside `@iress-oss/ids-components` in order to use the `IressForm` or `IressHookForm` component.
|
|
87
|
+
|
|
88
|
+
yarn add @iress-oss/ids-components react-hook-form
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
|
|
83
92
|
Key concepts
|
|
84
93
|
------------
|
|
85
94
|
|
|
86
|
-
|
|
95
|
+
`IressForm` is built on top of [React Hook Forms](https://react-hook-form.com/). This provides you the power of React Hook Forms with the convenience of IDS form components. However, there are some key differences to be aware of as it may affect how you build your forms.
|
|
87
96
|
|
|
88
97
|
### State management
|
|
89
98
|
|
|
@@ -91,8 +100,8 @@ As of version 5, `IressForm` is built on top of [React Hook Forms](https://react
|
|
|
91
100
|
|
|
92
101
|
Due to this change, there are a few things you should consider during development:
|
|
93
102
|
|
|
94
|
-
* Avoid using the `useState` hook to manage form state. Instead, use the `
|
|
95
|
-
* Avoid using `onChange` handlers on form fields to react to form values. Instead, use the `
|
|
103
|
+
* Avoid using the `useState` hook to manage form state. Instead, use the `useFormContext()` hook from `react-hook-form` or the `ref` of the `IressForm` component to interact with the form state. The initial value of the form can be set using the `defaultValues` prop, but from then on you should be using either the hook or ref to interact with the form state.
|
|
104
|
+
* Avoid using `onChange` handlers on form fields to react to form values. Instead, use the `useWatch` hook from `react-hook-form` to watch the value of a field and conditionally render fields based on the value of another field.
|
|
96
105
|
|
|
97
106
|
See below an example comparing a version 4 and version 5 `IressForm` when managing form state.
|
|
98
107
|
|
|
@@ -104,9 +113,9 @@ Old
|
|
|
104
113
|
|
|
105
114
|
New
|
|
106
115
|
|
|
107
|
-
<table class="css-1n5o7vh-diff-container"><tbody><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text">import { IressForm, IressField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress/components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">import { IressForm, IressFormField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress-oss/ids-components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line"><pre></pre></td><td class="css-vl0irh-content css-10regm7-empty-line"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line"><pre></pre></td><td class="css-vl0irh-content css-10regm7-empty-line"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text">export const App = () => {</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">const ConditionalFields = () => {</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> // We need to create our own state to manage the visibility of the fields, </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> // Instead of creating our own state, we can now use the form state via the useWatch hook, </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> // which means we have two sources of truth potentially making our code harder to maintain</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> // meaning we still have a single source of truth</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> const [show, setShow] = useState(['name']);</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> const show = IressForm.useWatch({ name: 'show'});</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line"><pre></pre></td><td class="css-vl0irh-content css-10regm7-empty-line"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> return (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Show fields"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressCheckboxGroup value={show} onChange={(newValues) => setShow(newValues)}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Show fields" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="show"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressCheckboxGroup {...controlledProps}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> <IressCheckbox value="name">Name</IressCheckbox></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> <IressCheckbox value="email">Email</IressCheckbox></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> </IressCheckboxGroup></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> {show.includes('name') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Name"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> {show?.includes('name') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="name" /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Name" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="name"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> {show.includes('email') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Email"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="email" type="email" /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> {show?.includes('email') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Email" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="email"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} type="email" />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> </></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> );</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text">};</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-10regm7-empty-line css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">export const App = () => (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressForm defaultValues={{ show: ['name'] }}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <ConditionalFields /> </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> </IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">);</pre></td></tr></tbody></table>
|
|
116
|
+
<table class="css-1n5o7vh-diff-container"><tbody><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text">import { IressForm, IressField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress/components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">import { IressForm, IressFormField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress-oss/ids-components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">import { useWatch } from 'react-hook-form';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text">export const App = () => {</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> // We need to create our own state to manage the visibility of the fields, </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">const ConditionalFields = () => {</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> // which means we have two sources of truth potentially making our code harder to maintain</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> // Instead of creating our own state, we can now use the form state via the useWatch hook, </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> const [show, setShow] = useState(['name']);</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> // meaning we still have a single source of truth</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> const show = useWatch({ name: 'show'});</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> return (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Show fields"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressCheckboxGroup value={show} onChange={(newValues) => setShow(newValues)}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Show fields" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="show"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressCheckboxGroup {...controlledProps}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> <IressCheckbox value="name">Name</IressCheckbox></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> <IressCheckbox value="email">Email</IressCheckbox></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> </IressCheckboxGroup></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> {show.includes('name') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Name"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> {show?.includes('name') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="name" /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Name" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="name"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> {show.includes('email') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Email"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="email" type="email" /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> {show?.includes('email') && (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Email" </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="email"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} type="email" />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> )}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> </></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> );</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text">};</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-10regm7-empty-line css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">export const App = () => (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressForm defaultValues={{ show: ['name'] }}></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <ConditionalFields /> </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> </IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">);</pre></td></tr></tbody></table>
|
|
108
117
|
|
|
109
|
-
|
|
118
|
+
Hide codedrawOpen in CodeSandbox
|
|
110
119
|
|
|
111
120
|
{
|
|
112
121
|
render: () \=> <DiffViewer allowModeChange oldValue\={\`import { IressForm, IressField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress/components';
|
|
@@ -114,8 +123,9 @@ export const App = () => {
|
|
|
114
123
|
// We need to create our own state to manage the visibility of the fields, // which means we have two sources of truth potentially making our code harder to maintain const \[show, setShow\] = useState(\['name'\]);
|
|
115
124
|
return ( <IressForm> <IressField label="Show fields"> <IressCheckboxGroup value={show} onChange={(newValues) => setShow(newValues)}> <IressCheckbox value="name">Name</IressCheckbox> <IressCheckbox value="email">Email</IressCheckbox> </IressCheckboxGroup> </IressField> {show.includes('name') && ( <IressField label="Name"> <IressInput name="name" /> </IressField> )} {show.includes('email') && ( <IressField label="Email"> <IressInput name="email" type="email" /> </IressField> )} </IressForm> );
|
|
116
125
|
};\`} newValue\={\`import { IressForm, IressFormField, IressInput, IressCheckboxGroup, IressCheckbox } from '@iress-oss/ids-components';
|
|
126
|
+
import { useWatch } from 'react-hook-form';
|
|
117
127
|
const ConditionalFields = () => {
|
|
118
|
-
// Instead of creating our own state, we can now use the form state via the useWatch hook, // meaning we still have a single source of truth const show =
|
|
128
|
+
// Instead of creating our own state, we can now use the form state via the useWatch hook, // meaning we still have a single source of truth const show = useWatch({ name: 'show'});
|
|
119
129
|
return ( <> <IressFormField label="Show fields" name="show" render={(controlledProps) => ( <IressCheckboxGroup {...controlledProps}> <IressCheckbox value="name">Name</IressCheckbox> <IressCheckbox value="email">Email</IressCheckbox> </IressCheckboxGroup> )} /> {show?.includes('name') && ( <IressFormField label="Name" name="name" render={(controlledProps) => <IressInput {...controlledProps} />} /> )} {show?.includes('email') && ( <IressFormField label="Email" name="email" render={(controlledProps) => <IressInput {...controlledProps} type="email" />} /> )} </> );
|
|
120
130
|
};
|
|
121
131
|
export const App = () => (
|
|
@@ -171,7 +181,7 @@ New
|
|
|
171
181
|
|
|
172
182
|
<table class="css-1n5o7vh-diff-container"><tbody><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text">import { IressForm, IressField, IressInput, IressButton } from '@iress/components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text">import { IressForm, IressFormField, IressInput, IressButton } from '@iress-oss/ids-components';</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-10regm7-empty-line"><pre></pre></td><td class="css-vl0irh-content css-10regm7-empty-line"><pre class="css-o1u8iu-content-text"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text">export const App = () => (</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressForm valueMissing="{{fieldName}} needs to be filled in!"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Name"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="name" required /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Name"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="name"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressField label="Email"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> <IressInput name="email" maxLength={10} /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> rules={{ required: 'Name needs to be filled in!' }}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-rq9a2a-diff-removed"><pre>-</pre></td><td class="css-vl0irh-content css-rq9a2a-diff-removed"><pre class="css-o1u8iu-content-text"> </IressField></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> <IressFormField </pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> label="Email"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> name="email"</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> render={(controlledProps) => <IressInput {...controlledProps} type="email" maxLength={10} />}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> rules={{ maxLength: 10 }}</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker css-cnnxkz-diff-added"><pre>+</pre></td><td class="css-vl0irh-content css-cnnxkz-diff-added"><pre class="css-o1u8iu-content-text"> /></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> <IressButton type="submit" mode="primary"></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> Sign up</pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> </IressButton></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text"> </IressForm></pre></td></tr><tr class="css-1n7ec1i-line"><td class="css-17vezug-marker"><pre></pre></td><td class="css-vl0irh-content"><pre class="css-o1u8iu-content-text">);</pre></td></tr></tbody></table>
|
|
173
183
|
|
|
174
|
-
|
|
184
|
+
Hide codedrawOpen in CodeSandbox
|
|
175
185
|
|
|
176
186
|
{
|
|
177
187
|
render: () \=> <DiffViewer allowModeChange oldValue\={\`import { IressForm, IressField, IressInput, IressButton } from '@iress/components';
|
|
@@ -213,7 +223,7 @@ array
|
|
|
213
223
|
|
|
214
224
|
For most scenarios, you should use the `onSubmit` event to sync the form data with other state management systems (eg. server, browser storage or state management libraries such as Redux). This event is emitted when the form passes validation, and contains a map of the field names and the data entered by the user.
|
|
215
225
|
|
|
216
|
-
For more complex scenarios, you may need to sync a field value before the form is submitted. In this case, you can use the `
|
|
226
|
+
For more complex scenarios, you may need to sync a field value before the form is submitted. In this case, you can use the `useWatch` hook to watch the value of a field and sync it with your state.
|
|
217
227
|
|
|
218
228
|
Consider the following for your development:
|
|
219
229
|
|
|
@@ -275,9 +285,9 @@ Here are some examples of how to use `IressFormField` with different form contro
|
|
|
275
285
|
|
|
276
286
|
[](./iframe.html?id=patterns-form--fields)
|
|
277
287
|
|
|
278
|
-
|
|
288
|
+
Hide codedrawOpen in CodeSandbox
|
|
279
289
|
|
|
280
|
-
<
|
|
290
|
+
<IressForm
|
|
281
291
|
actions\={<IressButton mode\="primary" type\="submit"\>Submit</IressButton\>}
|
|
282
292
|
heading\="All supported form fields"
|
|
283
293
|
pattern\="long"
|
|
@@ -368,7 +378,7 @@ Here are some examples of how to use `IressFormField` with different form contro
|
|
|
368
378
|
required: true
|
|
369
379
|
}}
|
|
370
380
|
/>
|
|
371
|
-
</
|
|
381
|
+
</IressForm\>
|
|
372
382
|
|
|
373
383
|
```
|
|
374
384
|
|
|
@@ -422,9 +432,9 @@ A boolean which, if `true`, indicates that the input must have a value before th
|
|
|
422
432
|
|
|
423
433
|
[](./iframe.html?id=patterns-form-rules--required)
|
|
424
434
|
|
|
425
|
-
|
|
435
|
+
Hide codedrawOpen in CodeSandbox
|
|
426
436
|
|
|
427
|
-
<
|
|
437
|
+
<IressForm\>
|
|
428
438
|
<IressFormField
|
|
429
439
|
hint\=""
|
|
430
440
|
label\="Default message"
|
|
@@ -448,7 +458,7 @@ A boolean which, if `true`, indicates that the input must have a value before th
|
|
|
448
458
|
type\="submit"
|
|
449
459
|
\>
|
|
450
460
|
Validate </IressButton\>
|
|
451
|
-
</
|
|
461
|
+
</IressForm\>
|
|
452
462
|
|
|
453
463
|
```
|
|
454
464
|
|
|
@@ -469,9 +479,9 @@ The maximum character length of the value to accept for this input.
|
|
|
469
479
|
|
|
470
480
|
[](./iframe.html?id=patterns-form-rules--max-length)
|
|
471
481
|
|
|
472
|
-
|
|
482
|
+
Hide codedrawOpen in CodeSandbox
|
|
473
483
|
|
|
474
|
-
<
|
|
484
|
+
<IressForm\>
|
|
475
485
|
<IressFormField
|
|
476
486
|
hint\="Enter a maximum length of 5 characters"
|
|
477
487
|
label\="Default message"
|
|
@@ -498,7 +508,7 @@ The maximum character length of the value to accept for this input.
|
|
|
498
508
|
type\="submit"
|
|
499
509
|
\>
|
|
500
510
|
Validate </IressButton\>
|
|
501
|
-
</
|
|
511
|
+
</IressForm\>
|
|
502
512
|
|
|
503
513
|
```
|
|
504
514
|
|
|
@@ -519,9 +529,9 @@ The minimum character length of the value to accept for this input.
|
|
|
519
529
|
|
|
520
530
|
[](./iframe.html?id=patterns-form-rules--min-length)
|
|
521
531
|
|
|
522
|
-
|
|
532
|
+
Hide codedrawOpen in CodeSandbox
|
|
523
533
|
|
|
524
|
-
<
|
|
534
|
+
<IressForm\>
|
|
525
535
|
<IressFormField
|
|
526
536
|
hint\="Enter a minimum length of 7 characters"
|
|
527
537
|
label\="Default message"
|
|
@@ -548,7 +558,7 @@ The minimum character length of the value to accept for this input.
|
|
|
548
558
|
type\="submit"
|
|
549
559
|
\>
|
|
550
560
|
Validate </IressButton\>
|
|
551
|
-
</
|
|
561
|
+
</IressForm\>
|
|
552
562
|
|
|
553
563
|
```
|
|
554
564
|
|
|
@@ -568,9 +578,9 @@ The maximum number to accept for this input.
|
|
|
568
578
|
|
|
569
579
|
[](./iframe.html?id=patterns-form-rules--max)
|
|
570
580
|
|
|
571
|
-
|
|
581
|
+
Hide codedrawOpen in CodeSandbox
|
|
572
582
|
|
|
573
|
-
<
|
|
583
|
+
<IressForm\>
|
|
574
584
|
<IressFormField
|
|
575
585
|
hint\="Select a maximum of 2"
|
|
576
586
|
label\="Default message"
|
|
@@ -597,7 +607,7 @@ The maximum number to accept for this input.
|
|
|
597
607
|
type\="submit"
|
|
598
608
|
\>
|
|
599
609
|
Validate </IressButton\>
|
|
600
|
-
</
|
|
610
|
+
</IressForm\>
|
|
601
611
|
|
|
602
612
|
```
|
|
603
613
|
|
|
@@ -617,26 +627,36 @@ The minimum number to accept for this input.
|
|
|
617
627
|
|
|
618
628
|
[](./iframe.html?id=patterns-form-rules--min)
|
|
619
629
|
|
|
620
|
-
|
|
630
|
+
Hide codedrawOpen in CodeSandbox
|
|
621
631
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
rules: {
|
|
632
|
+
<IressForm\>
|
|
633
|
+
<IressFormField
|
|
634
|
+
hint\="Select a minimum of 20"
|
|
635
|
+
label\="Default message"
|
|
636
|
+
name\="IressInput-default"
|
|
637
|
+
render\={(controlledProps) \=> <IressInput {...controlledProps} />}
|
|
638
|
+
rules\={{
|
|
630
639
|
min: 20
|
|
631
|
-
}
|
|
632
|
-
|
|
640
|
+
}}
|
|
641
|
+
/>
|
|
642
|
+
<IressFormField
|
|
643
|
+
hint\="Select a minimum of 20"
|
|
644
|
+
label\="Custom message"
|
|
645
|
+
name\="IressInput-custom"
|
|
646
|
+
render\={(controlledProps) \=> <IressInput {...controlledProps} />}
|
|
647
|
+
rules\={{
|
|
633
648
|
min: {
|
|
634
|
-
|
|
635
|
-
|
|
649
|
+
message: 'Please enter a min of 20!',
|
|
650
|
+
value: 20
|
|
636
651
|
}
|
|
637
|
-
}
|
|
638
|
-
|
|
639
|
-
|
|
652
|
+
}}
|
|
653
|
+
/>
|
|
654
|
+
<IressButton
|
|
655
|
+
mode\="primary"
|
|
656
|
+
type\="submit"
|
|
657
|
+
\>
|
|
658
|
+
Validate </IressButton\>
|
|
659
|
+
</IressForm\>
|
|
640
660
|
|
|
641
661
|
```
|
|
642
662
|
|
|
@@ -656,26 +676,31 @@ The accepted regex pattern for the input.
|
|
|
656
676
|
|
|
657
677
|
[](./iframe.html?id=patterns-form-rules--pattern)
|
|
658
678
|
|
|
659
|
-
|
|
679
|
+
Hide codedrawOpen in CodeSandbox
|
|
660
680
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
rules: {
|
|
681
|
+
<IressForm\>
|
|
682
|
+
<IressFormField
|
|
683
|
+
hint\="Enter a valid email address"
|
|
684
|
+
label\="Default message"
|
|
685
|
+
name\="IressInput-default"
|
|
686
|
+
render\={(controlledProps) \=> <IressInput {...controlledProps} />}
|
|
687
|
+
rules\={{
|
|
669
688
|
pattern: /^\[a-zA-Z0-9.!#$%&'\*+/=?^\_\`{|}~-\]+@\[a-zA-Z0-9\](?:\[a-zA-Z0-9-\]{0,61}\[a-zA-Z0-9\])?(?:\\.\[a-zA-Z0-9\](?:\[a-zA-Z0-9-\]{0,61}\[a-zA-Z0-9\])?)\*$/
|
|
670
|
-
}
|
|
671
|
-
|
|
689
|
+
}}
|
|
690
|
+
/>
|
|
691
|
+
<IressFormField hint="Enter a valid email address" label="Custom message" name="IressInput-custom" render={(controlledProps) \=> <IressInput {...controlledProps} />}
|
|
692
|
+
rules={{
|
|
672
693
|
pattern: {
|
|
673
|
-
|
|
674
|
-
|
|
694
|
+
message: 'Please enter a valid email address!',
|
|
695
|
+
value: /^\[a-zA-Z0-9.!#$%&'\*+/=?^\_\`{|}~-\]+@\[a-zA-Z0-9\](?:\[a-zA-Z0-9-\]{0,61}\[a-zA-Z0-9\])?(?:\\.\[a-zA-Z0-9\](?:\[a-zA-Z0-9-\]{0,61}\[a-zA-Z0-9\])?)\*$/
|
|
675
696
|
}
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
|
|
697
|
+
}}
|
|
698
|
+
/> <IressButton
|
|
699
|
+
mode\="primary"
|
|
700
|
+
type\="submit"
|
|
701
|
+
\>
|
|
702
|
+
Validate </IressButton\>
|
|
703
|
+
</IressForm\>
|
|
679
704
|
|
|
680
705
|
```
|
|
681
706
|
|
|
@@ -693,7 +718,7 @@ The minimum date to accept for this input.
|
|
|
693
718
|
|
|
694
719
|
[](./iframe.html?id=patterns-form-rules--min-date)
|
|
695
720
|
|
|
696
|
-
|
|
721
|
+
Hide codedrawOpen in CodeSandbox
|
|
697
722
|
|
|
698
723
|
{
|
|
699
724
|
...Default,
|
|
@@ -734,7 +759,7 @@ The maximum date to accept for this input.
|
|
|
734
759
|
|
|
735
760
|
[](./iframe.html?id=patterns-form-rules--max-date)
|
|
736
761
|
|
|
737
|
-
|
|
762
|
+
Hide codedrawOpen in CodeSandbox
|
|
738
763
|
|
|
739
764
|
{
|
|
740
765
|
...Default,
|
|
@@ -775,9 +800,9 @@ Ensures the input is a valid email address.
|
|
|
775
800
|
|
|
776
801
|
[](./iframe.html?id=patterns-form-rules--email)
|
|
777
802
|
|
|
778
|
-
|
|
803
|
+
Hide codedrawOpen in CodeSandbox
|
|
779
804
|
|
|
780
|
-
<
|
|
805
|
+
<IressForm\>
|
|
781
806
|
<IressFormField
|
|
782
807
|
hint\="Enter an email address"
|
|
783
808
|
label\="Default message"
|
|
@@ -801,7 +826,7 @@ Ensures the input is a valid email address.
|
|
|
801
826
|
type\="submit"
|
|
802
827
|
\>
|
|
803
828
|
Validate </IressButton\>
|
|
804
|
-
</
|
|
829
|
+
</IressForm\>
|
|
805
830
|
|
|
806
831
|
```
|
|
807
832
|
|
|
@@ -825,9 +850,9 @@ You can pass a callback function as the argument to validate, or you can pass an
|
|
|
825
850
|
|
|
826
851
|
[](./iframe.html?id=patterns-form-rules--validate)
|
|
827
852
|
|
|
828
|
-
|
|
853
|
+
Hide codedrawOpen in CodeSandbox
|
|
829
854
|
|
|
830
|
-
<
|
|
855
|
+
<IressForm\>
|
|
831
856
|
<IressFormFieldset
|
|
832
857
|
hint\="If checkbox, click two items to pass. Anything else, make sure it is Google."
|
|
833
858
|
label\="Default message"
|
|
@@ -867,7 +892,7 @@ You can pass a callback function as the argument to validate, or you can pass an
|
|
|
867
892
|
type\="submit"
|
|
868
893
|
\>
|
|
869
894
|
Validate </IressButton\>
|
|
870
|
-
</
|
|
895
|
+
</IressForm\>
|
|
871
896
|
|
|
872
897
|
```
|
|
873
898
|
|
|
@@ -887,7 +912,7 @@ When the form passes validation (if not disabled), the `onSubmit` event is emitt
|
|
|
887
912
|
|
|
888
913
|
[](./iframe.html?id=patterns-form--handling-submission)
|
|
889
914
|
|
|
890
|
-
|
|
915
|
+
Hide codedrawOpen in CodeSandbox
|
|
891
916
|
|
|
892
917
|
import {
|
|
893
918
|
IressTable,
|
|
@@ -897,7 +922,7 @@ import {
|
|
|
897
922
|
IressFormField,
|
|
898
923
|
IressInput,
|
|
899
924
|
IressButton,
|
|
900
|
-
} from '
|
|
925
|
+
} from '@/main';
|
|
901
926
|
import { useState } from 'react';
|
|
902
927
|
interface FieldValues {
|
|
903
928
|
name?: string;
|
|
@@ -1013,9 +1038,9 @@ You can set the `defaultValues` prop to pre-fill the form values.
|
|
|
1013
1038
|
|
|
1014
1039
|
[](./iframe.html?id=patterns-form--default-values)
|
|
1015
1040
|
|
|
1016
|
-
|
|
1041
|
+
Hide codedrawOpen in CodeSandbox
|
|
1017
1042
|
|
|
1018
|
-
<
|
|
1043
|
+
<IressForm
|
|
1019
1044
|
actions\={<IressButton mode\="primary" type\="submit"\>Submit</IressButton\>}
|
|
1020
1045
|
defaultValues\={{
|
|
1021
1046
|
email: 'luke.skywalker@iress.com',
|
|
@@ -1051,7 +1076,7 @@ You can set the `defaultValues` prop to pre-fill the form values.
|
|
|
1051
1076
|
required: 'Email is required'
|
|
1052
1077
|
}}
|
|
1053
1078
|
/>
|
|
1054
|
-
</
|
|
1079
|
+
</IressForm\>
|
|
1055
1080
|
|
|
1056
1081
|
```
|
|
1057
1082
|
|
|
@@ -1094,7 +1119,7 @@ One use case for this prop is to create your own visible error summary at the to
|
|
|
1094
1119
|
|
|
1095
1120
|
[](./iframe.html?id=patterns-form--custom-error-handling)
|
|
1096
1121
|
|
|
1097
|
-
|
|
1122
|
+
Hide codedrawOpen in CodeSandbox
|
|
1098
1123
|
|
|
1099
1124
|
import {
|
|
1100
1125
|
IressTable,
|
|
@@ -1106,7 +1131,7 @@ import {
|
|
|
1106
1131
|
IressInput,
|
|
1107
1132
|
IressButton,
|
|
1108
1133
|
IressText,
|
|
1109
|
-
} from '
|
|
1134
|
+
} from '@/main';
|
|
1110
1135
|
import { useState } from 'react';
|
|
1111
1136
|
import { type FieldErrors } from 'react-hook-form';
|
|
1112
1137
|
interface FieldValues {
|
|
@@ -1227,8 +1252,20 @@ Use cases where you may need the `values` prop:
|
|
|
1227
1252
|
|
|
1228
1253
|
[](./iframe.html?id=patterns-form--values)
|
|
1229
1254
|
|
|
1230
|
-
|
|
1255
|
+
Hide codedrawOpen in CodeSandbox
|
|
1231
1256
|
|
|
1257
|
+
import {
|
|
1258
|
+
type IressFormProps,
|
|
1259
|
+
IressForm,
|
|
1260
|
+
IressModal,
|
|
1261
|
+
IressDivider,
|
|
1262
|
+
IressButton,
|
|
1263
|
+
IressTable,
|
|
1264
|
+
IressInline,
|
|
1265
|
+
IressFormField,
|
|
1266
|
+
IressInput,
|
|
1267
|
+
} from '@/main';
|
|
1268
|
+
import { useState } from 'react';
|
|
1232
1269
|
interface FieldValues {
|
|
1233
1270
|
name?: string;
|
|
1234
1271
|
email?: string;
|
|
@@ -1346,7 +1383,7 @@ Here we have an example showcasing option one.
|
|
|
1346
1383
|
|
|
1347
1384
|
[](./iframe.html?id=patterns-form--disable-validation)
|
|
1348
1385
|
|
|
1349
|
-
|
|
1386
|
+
Hide codedrawOpen in CodeSandbox
|
|
1350
1387
|
|
|
1351
1388
|
import {
|
|
1352
1389
|
type FormRef,
|
|
@@ -1358,7 +1395,7 @@ import {
|
|
|
1358
1395
|
IressInput,
|
|
1359
1396
|
IressToasterProvider,
|
|
1360
1397
|
useToaster,
|
|
1361
|
-
} from '
|
|
1398
|
+
} from '@/main';
|
|
1362
1399
|
import { useRef } from 'react';
|
|
1363
1400
|
interface FieldValues {
|
|
1364
1401
|
name?: string;
|
|
@@ -1851,7 +1888,7 @@ You can reset the form using the `ref` of the form. You must provide a `defaultV
|
|
|
1851
1888
|
|
|
1852
1889
|
[](./iframe.html?id=patterns-form--reset-form)
|
|
1853
1890
|
|
|
1854
|
-
|
|
1891
|
+
Hide codedrawOpen in CodeSandbox
|
|
1855
1892
|
|
|
1856
1893
|
import {
|
|
1857
1894
|
type IressFormProps,
|
|
@@ -1861,7 +1898,7 @@ import {
|
|
|
1861
1898
|
IressButton,
|
|
1862
1899
|
IressFormField,
|
|
1863
1900
|
IressInput,
|
|
1864
|
-
} from '
|
|
1901
|
+
} from '@/main';
|
|
1865
1902
|
import { useRef } from 'react';
|
|
1866
1903
|
interface FieldValues {
|
|
1867
1904
|
name?: string;
|
|
@@ -1945,7 +1982,7 @@ You can pass the `readOnly` prop to remove the asterisk symbol (\*) even when th
|
|
|
1945
1982
|
|
|
1946
1983
|
[](./iframe.html?id=patterns-form--exclude-read-only-validation)
|
|
1947
1984
|
|
|
1948
|
-
|
|
1985
|
+
Hide codedrawOpen in CodeSandbox
|
|
1949
1986
|
|
|
1950
1987
|
<IressStack gap\="md"\>
|
|
1951
1988
|
<IressText\>
|
|
@@ -1954,7 +1991,7 @@ You can pass the `readOnly` prop to remove the asterisk symbol (\*) even when th
|
|
|
1954
1991
|
<p\>
|
|
1955
1992
|
Try hitting submit to see that only email is being validated </p\>
|
|
1956
1993
|
</IressText\>
|
|
1957
|
-
<
|
|
1994
|
+
<IressForm
|
|
1958
1995
|
actions\={<IressButton mode\="primary" type\="submit"\>Submit</IressButton\>}
|
|
1959
1996
|
pattern\="short"
|
|
1960
1997
|
\>
|
|
@@ -1979,7 +2016,7 @@ You can pass the `readOnly` prop to remove the asterisk symbol (\*) even when th
|
|
|
1979
2016
|
required: 'Email is required'
|
|
1980
2017
|
}}
|
|
1981
2018
|
/>
|
|
1982
|
-
</
|
|
2019
|
+
</IressForm\>
|
|
1983
2020
|
</IressStack\>
|
|
1984
2021
|
|
|
1985
2022
|
```
|
|
@@ -2029,8 +2066,21 @@ Some use cases:
|
|
|
2029
2066
|
|
|
2030
2067
|
[](./iframe.html?id=patterns-form--hook-form)
|
|
2031
2068
|
|
|
2032
|
-
|
|
2069
|
+
Hide codedrawOpen in CodeSandbox
|
|
2033
2070
|
|
|
2071
|
+
import {
|
|
2072
|
+
IressButton,
|
|
2073
|
+
IressCheckbox,
|
|
2074
|
+
IressContainer,
|
|
2075
|
+
IressDivider,
|
|
2076
|
+
IressFormField,
|
|
2077
|
+
IressHookForm,
|
|
2078
|
+
IressInput,
|
|
2079
|
+
IressInputCurrency,
|
|
2080
|
+
IressPanel,
|
|
2081
|
+
IressText,
|
|
2082
|
+
} from '@/main';
|
|
2083
|
+
import { useForm } from 'react-hook-form';
|
|
2034
2084
|
interface FieldValues {
|
|
2035
2085
|
firstName: string;
|
|
2036
2086
|
lastName: string;
|
|
@@ -2041,8 +2091,9 @@ interface FieldValues {
|
|
|
2041
2091
|
export const HookFormExample \= () \=> {
|
|
2042
2092
|
const initialInsuredAtPolicyLevel \= false;
|
|
2043
2093
|
const initialSumInsured \= 5000;
|
|
2044
|
-
const form \=
|
|
2094
|
+
const form \= useForm<FieldValues\>();
|
|
2045
2095
|
const { watch, control } \= form;
|
|
2096
|
+
// eslint-disable-next-line react-hooks/incompatible-library
|
|
2046
2097
|
const firstName \= watch('firstName');
|
|
2047
2098
|
const lastName \= watch('lastName');
|
|
2048
2099
|
const insuredAtPolicyLevel \= watch('insuredAtPolicyLevel');
|
|
@@ -2184,9 +2235,9 @@ boolean
|
|
|
2184
2235
|
|
|
2185
2236
|
[](./iframe.html?id=patterns-form--validation-summary)
|
|
2186
2237
|
|
|
2187
|
-
|
|
2238
|
+
Hide codedrawOpen in CodeSandbox
|
|
2188
2239
|
|
|
2189
|
-
<
|
|
2240
|
+
<IressForm
|
|
2190
2241
|
actions\={<IressButton mode\="primary" type\="submit"\>Submit</IressButton\>}
|
|
2191
2242
|
alert\={<IressFormValidationSummary />}
|
|
2192
2243
|
heading\="Try hitting submit to see the validation summary"
|
|
@@ -2278,7 +2329,7 @@ boolean
|
|
|
2278
2329
|
required: true
|
|
2279
2330
|
}}
|
|
2280
2331
|
/>
|
|
2281
|
-
</
|
|
2332
|
+
</IressForm\>
|
|
2282
2333
|
|
|
2283
2334
|
```
|
|
2284
2335
|
|
|
@@ -2426,7 +2477,7 @@ When resetting fields that accept non-string values (like `IressRichSelect`), yo
|
|
|
2426
2477
|
|
|
2427
2478
|
**Problem:**
|
|
2428
2479
|
|
|
2429
|
-
const { resetField } \=
|
|
2480
|
+
const { resetField } \= useFormContext();
|
|
2430
2481
|
resetField('rich-select', {
|
|
2431
2482
|
label: '',
|
|
2432
2483
|
value: '',
|
|
@@ -2438,17 +2489,9 @@ In this case, it will look like it cleared the field, but actually it has not. T
|
|
|
2438
2489
|
|
|
2439
2490
|
**Solution:** Override the `onChange` handler to pass the actual value as a second parameter:
|
|
2440
2491
|
|
|
2441
|
-
const { resetField } \=
|
|
2492
|
+
const { resetField } \= useFormContext();
|
|
2442
2493
|
resetField('rich-select', null); // or undefined
|
|
2443
2494
|
|
|
2444
2495
|
```
|
|
2445
2496
|
|
|
2446
2497
|
This will properly reset the field to null and clear the field value.
|
|
2447
|
-
|
|
2448
|
-
### Conflicting versions of React Hook Forms
|
|
2449
|
-
|
|
2450
|
-
If you are using React Hook Forms in your application, please ensure it is the same version IDS uses, otherwise there will be conflicts.
|
|
2451
|
-
|
|
2452
|
-
The version we are using in IDS is:
|
|
2453
|
-
|
|
2454
|
-
yarn add react-hook-form@7.55.0
|