-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(forms): improved state management and reacting to more changed props #2882
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 77c63d9:
|
e59f2ac
to
8c526bf
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well done 👏
const mask = useMemo( | ||
() => | ||
omitMask | ||
? [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
? [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/] | |
? Array(9).fill(/\d/) |
😄
@@ -33,7 +38,7 @@ function SelectCountry(props: Props) { | |||
title={country.i18n[lang] ?? country.i18n.en} | |||
/> | |||
)), | |||
[sharedContext.locale] | |||
[lang] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
packages/dnb-eufemia/src/extensions/forms/hooks/useDataValue.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change is not needed technically. But I'm fine with it.
15ce87d
to
5f17902
Compare
e7201ac
to
77c63d9
Compare
## [10.14.0](v10.13.0...v10.14.0) (2023-11-16) ### 📝 Documentation * **Forms:** lists component specific props 1st ([#2892](#2892)) ([c05740c](c05740c)) * **PhoneNumber:** remove unsupported props ([#2894](#2894)) ([4800a8e](4800a8e)) * **PostalCodeAndCity:** remove unsupported props ([#2890](#2890)) ([fe1ee9e](fe1ee9e)) ### ✨ Features * **Forms:** expiry field ([#2660](#2660)) ([af5aa61](af5aa61)) * **forms:** improved state management and reacting to more changed props ([#2882](#2882)) ([0ca9533](0ca9533)) * **Input:** add clear button event "on_clear" ([#2898](#2898)) ([eb6b722](eb6b722)) * **Radio:** Sbanken styling ([#2888](#2888)) ([d7ffcf8](d7ffcf8)) ### 🐛 Bug Fixes * add "use client" to non hook components like the Button ([#2895](#2895)) ([2d54a13](2d54a13)) * **Autocomplete:** enhance logic for when to blur ([#2886](#2886)) ([ce5c3fa](ce5c3fa)) * **Autocomplete:** make clear button work with enter key ([#2901](#2901)) ([30007c4](30007c4)), closes [#2185](#2185) * **FieldBlock:** enhance fieldset/legend detection ([#2902](#2902)) ([4c62052](4c62052)), closes [#2893](#2893) * fix Flex and Grid export to work with Vite.js ([#2905](#2905)) ([ef83713](ef83713)) * fix vertical label_direction support for Radio group and ToggleButton group ([#2899](#2899)) ([d650c66](d650c66)) * **forms:** Field block error handling ([#2900](#2900)) ([9582c64](9582c64)) * **forms:** Improved message value replacements ([#2903](#2903)) ([a61140b](a61140b)) * **PhoneNumber:** keep selected countryCode value on blur ([#2869](#2869)) ([7e0f9c5](7e0f9c5))
🎉 This PR is included in version 10.14.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
There has been som limitations in the handling of changed external props, as well as the prioritization between different error sources. The different issues are closely linked together, so here are a summary of the changes:
useDataValue
and both are taken into account when returning an error to display in the component (as part of the return value of the hook)errorMessages
,schema
andvalidator
) in validator callbacks could lead to endless loops because they revalidated when something changed, creating a new error object and if the props was recreated (like if a field component did not memoizeerrorMessages
), that would trigger re-validation giving a new error object and so on (endless loop). To avoid this problem, all state in bothuseDataValue
andProvider
are now put inuseRef
instead ofuseState
, and a function check if validation leads to the same error that is already in the error state, and if so, it skips replacing it and re-rendering the component.useProcessManager
hook inuseDataValue
.