-
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): expiry field #2660
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 7e45d6a:
|
f740cf0
to
c3235b6
Compare
edd3c18
to
c116ce0
Compare
} | ||
input_element={ | ||
<span className="dnb-date-picker__input__wrapper"> | ||
<ExpiryDateField |
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.
Wouldn't it be possible to achieve the UI in a simpler way using InputMasked?
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.
The Field.String
component support mask-prop by the way, leading to the inner implementation using InputMasked instead of Input. Maybe that can be used, and then just wrapped with a parser that "translates" from the "UI value" (like "01/01") to the external value of the Expiry component (the object structure with the two values separate)? That can probably be done in the fromInput
/ toInput
derivates, getting all the other features automatically (like the distribution of props to FieldBlock etc inside Field.String
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.
I did start out with the Field.String
and a custom mask, but this ended up complicating the process of making the tab-behaviour function like it does in the DatePicker
-component, and keeping the placeholder text while the user is typing. And as far is I could tell, it did not support labels for the different values either, like the DatePicker component does for day
month
year
etc.
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.
But if Field.String lacks some features you need, could this possibly be simplified at least a bit using InputMasked instead of creating a "custom" mask feature?
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.
Hmm not sure if I quite understand? I tried using a InputMasked
too, but it would no let me keep the placeholder while typing, and then there is the issue with the tab-functionality and missing labels for month
and year
. I found the simplified version I tried out, a bit lacking in the accessibility department.
That is why I went with the same approach as done in the DatePickerInput
component, and the TextMask
component is also imported from there
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.
There might be specific needs here that makes it hard to use those components, but it just seems to me that this is something the InputMasked component should have features for, so we don't need to write and maintain custom code for this kind of UI details in a component like this one. It should be standardized, so maybe we need to change/extend the features of InputMasked?
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.
Yeah totally agree! I don't see why the functionality that I needed from TextMask
, couldn't be integrated into InputMasked
. As of now, it looks like that TextMask
is only used internally for the DatePickerInput
. @tujoworker any thoughts?
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.
Sorry to un-resolve this: we were the ones who suggested adding the Expiry Date component. https://jira.tech.dnb.no/browse/EDS-571
With regards to @henit's arguments: ironically, the closest we (consumers of eufemia) could "easily" come to the desired behaviour was with an <InputMasked />
..
<InputMasked
className={style.inputMasked}
mask={[/\d/, /\d/, '/', /\d/, /\d/]}
mask_options={{
allowNegative: false,
}}
on_change={({ cleanedValue }) => setInput(cleanedValue)}
show_mask
/**
* The character U+2013 "–" could be confused with the ASCII character
* U+002d "-", which is more common in source code.
* This is here for screen readers and to allow usage of input.length from
* the cleanedValue of the on_change.
*/
placeholder_char='–'
size='large'
align='center'
top='medium'
/>
This issue should be fixed now 🙏 |
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.
Nice work! Just some request we need to look at. And some we need to fix before merge.
- Also, the
width
of the field should bewidth: var(--forms-field-width--small);
while the. - And
justify-content: center;
in the.dnb-input__shell
I think will be correct. - One visual test would be good as well 🙏
|
||
## Properties | ||
|
||
<DataValueReadwriteProperties type="string" /> |
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.
Are there any properties we should omit
?
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.
Hmm, will double check!
packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx
Outdated
Show resolved
Hide resolved
packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx
Outdated
Show resolved
Hide resolved
packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx
Outdated
Show resolved
Hide resolved
packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx
Outdated
Show resolved
Hide resolved
packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/Expiry.test.tsx
Outdated
Show resolved
Hide resolved
## [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 📦🚀 |
useDataValue
hook andSharedContext