From 995c5e967f777989890b9dd262f078c4509358bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Thu, 11 Jan 2024 22:01:24 +0100 Subject: [PATCH 01/15] chore(forms): refactor widths examples and add tests (#3208) --- .../forms/base-fields/Number/Examples.tsx | 113 +++++++----------- .../forms/base-fields/Number/demos.mdx | 8 +- .../forms/base-fields/Selection/Examples.tsx | 73 +++++------ .../forms/base-fields/Selection/demos.mdx | 8 +- .../forms/base-fields/String/Examples.tsx | 62 +++++----- .../forms/base-fields/String/demos.mdx | 8 +- .../create-component/FieldBlock/Examples.tsx | 5 +- .../create-component/FieldBlock/demos.mdx | 8 +- .../__tests__/Number.screenshot.test.ts | 13 ++ .../fieldnumber-have-to-match-widths.snap.png | Bin 0 -> 50021 bytes ...own-have-to-match-dropdown-widths.snap.png | Bin 19868 -> 21436 bytes .../__tests__/String.screenshot.test.ts | 22 ++++ .../fieldstring-have-to-match-widths.snap.png | Bin 0 -> 38399 bytes .../Field/String/stories/String.stories.tsx | 24 ++++ 14 files changed, 182 insertions(+), 162 deletions(-) create mode 100644 packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/__image_snapshots__/fieldnumber-have-to-match-widths.snap.png create mode 100644 packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/String.screenshot.test.ts create mode 100644 packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/__image_snapshots__/fieldstring-have-to-match-widths.snap.png create mode 100644 packages/dnb-eufemia/src/extensions/forms/Field/String/stories/String.stories.tsx diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/Examples.tsx index 1d94374cb47..ae2426a9ace 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/Examples.tsx @@ -1,6 +1,6 @@ import ComponentBox from '../../../../../../shared/tags/ComponentBox' -import { Slider, Grid } from '@dnb/eufemia/src' -import { Field, FormError } from '@dnb/eufemia/src/extensions/forms' +import { Slider, Grid, Flex } from '@dnb/eufemia/src' +import { Field, Form, FormError } from '@dnb/eufemia/src/extensions/forms' import React from 'react' export const Empty = () => { @@ -106,72 +106,49 @@ export const HorizontalLayout = () => { export const Widths = () => { return ( - -

Without step controls

- console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> -

With step controls

- console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> + + + Without step controls + + + + + + + With step controls + + + + + + ) } diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/demos.mdx index bcb0687b8ae..f7338664d61 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Number/demos.mdx @@ -30,10 +30,6 @@ import * as Examples from './Examples' -### Widths - - - ### With help @@ -78,6 +74,10 @@ import * as Examples from './Examples' +### Widths + + + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx index 742fe163360..422fb608c5f 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import ComponentBox from '../../../../../../shared/tags/ComponentBox' -import { Button } from '@dnb/eufemia/src' +import { Button, Flex } from '@dnb/eufemia/src' import { Field, FormError } from '@dnb/eufemia/src/extensions/forms' // Dropdown @@ -137,51 +137,32 @@ export const HorizontalLayout = () => { export const Widths = () => { return ( - - console.log('onChange', value)} - > - - - - console.log('onChange', value)} - > - - - - console.log('onChange', value)} - > - - - - console.log('onChange', value)} - > - - - - console.log('onChange', value)} - > - - - + + + + + + + + + + + + + + + + + + + + + + + ) } diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/demos.mdx index ae30ad890eb..9aae54f34d5 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/demos.mdx @@ -56,10 +56,6 @@ import * as Examples from './Examples' -### Dropdown widths - - - #### Dropdown disabled @@ -135,3 +131,7 @@ import * as Examples from './Examples' #### ToggleButton error + +### Dropdown widths + + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/Examples.tsx index c9b06957d9a..b8d474d3401 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/Examples.tsx @@ -1,4 +1,5 @@ import ComponentBox from '../../../../../../shared/tags/ComponentBox' +import { Flex } from '@dnb/eufemia/src' import { Field, FormError } from '@dnb/eufemia/src/extensions/forms' export const Empty = () => { @@ -92,36 +93,37 @@ export const HorizontalLayout = () => { export const Widths = () => { return ( - - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> - console.log('onChange', value)} - /> + + + + + + + + + + + + + + ) } diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/demos.mdx index 5bb3fca7334..e351bfd2009 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/String/demos.mdx @@ -34,10 +34,6 @@ import * as Examples from './Examples' -### Widths - - - ### Icons @@ -115,3 +111,7 @@ import * as Examples from './Examples' ### Multiline, with help + +### Widths + + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/Examples.tsx index 0870b613d35..31f7c15a42b 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/Examples.tsx @@ -53,9 +53,10 @@ export const Widths = () => { return ( - + Contents @@ -108,7 +109,7 @@ export const Widths = () => { > Contents - + ) } diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/demos.mdx index ecdf73dbdfc..b718915dd0e 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/create-component/FieldBlock/demos.mdx @@ -26,10 +26,6 @@ import * as Examples from './Examples' -### Widths - - - ### With description (vertical only) @@ -59,3 +55,7 @@ Error messages from all fields inside the FieldBlock are combined as one message ### Responsive forms + +### Widths + + diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/Number.screenshot.test.ts b/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/Number.screenshot.test.ts index 8ac06292623..6e7aa851641 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/Number.screenshot.test.ts +++ b/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/Number.screenshot.test.ts @@ -72,3 +72,16 @@ describe.each(['ui', 'sbanken'])('Number field for %s', (themeName) => { }) }) }) + +describe('Field.Number', () => { + setupPageScreenshot({ + url: '/uilib/extensions/forms/base-fields/Number', + }) + + it('have to match widths', async () => { + const screenshot = await makeScreenshot({ + selector: '[data-visual-test="number-widths"]', + }) + expect(screenshot).toMatchImageSnapshot() + }) +}) diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/__image_snapshots__/fieldnumber-have-to-match-widths.snap.png b/packages/dnb-eufemia/src/extensions/forms/Field/Number/__tests__/__image_snapshots__/fieldnumber-have-to-match-widths.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..8e2ae017721d0d12356adb2c5a89b6e3a45392ea GIT binary patch literal 50021 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�DlDIWareYmk#?KnM4AI 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 z zKV1f3U@G9{tza_Lo=IIbf0tc`ISY)bbnJ7ia?IPdGBpYyBHDCWyh z$x_ZPPd}_KNFx#%_;U*2H3S>7wX2x*;Pm65u2BIDa5Q3-LbEk;-eNtr8|8)a+c!|v zV~HpnLZjqfmNpg(%h4oOKE^+4DsED(;W$$NTVyP5iXgwSXV6z*omC#%y$@d@j*;a_ z4J9YsQ5N%9@>P0lVqAr{zU&|o1ia0kXv?GTqaB;n7w?w1sUIZY@`G&~^)jZ9Y$zNV zs2Mo^(ls{MVj~C&j#js(5`vx$^}b0I6pz?9)sXTB4omzAvJ6666lvZVP|B_q`UUni zwTpxl!ViP7x;P>0FUzkiMR7=6&NZ120I&WVn^pEX*2YGs?NS)NElj><-ljNToUmD} zUbamJc?J|3mtsR#Dn9&k3T`?p|EucHgif}eORj9GRSU%V|uYAjp{eaNS@j3EJS5@q)`( qk)R3QKMR$&d+A}t_5byYUw@Qyu9Mcys_)0k!GpEVj((2j74=_TvKW~F literal 0 HcmV?d00001 diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Selection/__tests__/__image_snapshots__/selection-dropdown-have-to-match-dropdown-widths.snap.png b/packages/dnb-eufemia/src/extensions/forms/Field/Selection/__tests__/__image_snapshots__/selection-dropdown-have-to-match-dropdown-widths.snap.png index 98f6c605da0b816cb3efe5ca428d043b2620ea96..a65411d56799d24384100967d00c5ba03c701b5a 100644 GIT binary patch literal 21436 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 ZBv!YR@&xBwfL%G!lpkowm&;m){(o7)v7G<_ literal 19868 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 !7^B1HcnTsA|<@flp+VKpEg} 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 diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/String.screenshot.test.ts b/packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/String.screenshot.test.ts new file mode 100644 index 00000000000..8fcd7d8dcd1 --- /dev/null +++ b/packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/String.screenshot.test.ts @@ -0,0 +1,22 @@ +/** + * Screenshot Test + * This file will not run on "test:staged" because we don't require any related files + */ + +import { + makeScreenshot, + setupPageScreenshot, +} from '../../../../../core/jest/jestSetupScreenshots' + +describe('Field.String', () => { + setupPageScreenshot({ + url: '/uilib/extensions/forms/base-fields/String/demos/', + }) + + it('have to match widths', async () => { + const screenshot = await makeScreenshot({ + selector: '[data-visual-test="string-widths"]', + }) + expect(screenshot).toMatchImageSnapshot() + }) +}) diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/__image_snapshots__/fieldstring-have-to-match-widths.snap.png b/packages/dnb-eufemia/src/extensions/forms/Field/String/__tests__/__image_snapshots__/fieldstring-have-to-match-widths.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b5f77143596aab4af2b7de81ca16d419e29443 GIT binary patch literal 38399 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 literal 0 HcmV?d00001 diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/String/stories/String.stories.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/String/stories/String.stories.tsx new file mode 100644 index 00000000000..dc5bd0f9ade --- /dev/null +++ b/packages/dnb-eufemia/src/extensions/forms/Field/String/stories/String.stories.tsx @@ -0,0 +1,24 @@ +import { Field } from '../../..' +import { Flex } from '../../../../../components' + +export default { + title: 'Eufemia/Extensions/Forms/String', +} + +export const String = () => { + return ( + + + + + + + + + + + + + + ) +} From 2a0651a82bf34248274fbc0e8d9abf6eac5fea76 Mon Sep 17 00:00:00 2001 From: Joakim Bjerknes Date: Fri, 12 Jan 2024 11:52:15 +0100 Subject: [PATCH 02/15] fix(Field.Expiry): correct disabled styling (#3215) --- .../input-masked/MultiInputMask.tsx | 5 +++-- ...-have-to-match-the-disabled-state.snap.png | Bin 4040 -> 3940 bytes ...-have-to-match-the-disabled-state.snap.png | Bin 3358 -> 3300 bytes 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx b/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx index df267015849..213b0b57f51 100644 --- a/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx +++ b/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx @@ -245,6 +245,7 @@ function MultiInputMaskInput({ onChange, ...attributes }: MultiInputMaskInputProps) { + const shouldHighlight = !disabled && /\w+/.test(value) const markupId = `${id}-${makeUniqueId()}` return ( @@ -255,7 +256,7 @@ function MultiInputMaskInput({ className={classnames( 'dnb-input__input', 'dnb-multi-input-mask__input', - /\d+/.test(value) && 'dnb-multi-input-mask__input--highlight' + shouldHighlight && 'dnb-multi-input-mask__input--highlight' )} disabled={disabled} size={mask.length} @@ -289,7 +290,7 @@ function MultiInputMaskInput({ aria-hidden className={classnames( 'dnb-multi-input-mask__delimiter', - value && 'dnb-multi-input-mask__delimiter--highlight' + shouldHighlight && 'dnb-multi-input-mask__delimiter--highlight' )} > {delimiter} diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/__image_snapshots__/expiry-field-for-sbanken-have-to-match-the-disabled-state.snap.png b/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/__image_snapshots__/expiry-field-for-sbanken-have-to-match-the-disabled-state.snap.png index f6e598cbf5881b0f3f24db817e3141097552100b..e8a69bbe096d6135b9c33f7ec3d333aa05305da0 100644 GIT binary patch delta 3890 zcmbuB*E<`GyrUN291&djv0u)Qra7J24YtwP>|LYsRYC5PK^{&04J} zimKU)+AC zK3*O>@Zy-oC{ZuUHL5N!iP(snIpHhJ66cqk8&EI>+XwOA9?2Lwgc2$;-nTUL1T4 z`hu+H|?@bYRquX;4FbMDT0nfADT6L(+u_=a$IoEx9{ zdv1+R{T!%mWF#<}zryqglgJ*cv_$C(!Q*$d%_jm3I>J~-m*jD^Nd5hdiVBbK+uMwE zlHreJ4n!^<`$D8!A}F!G3o4I%eWi2Nqj>G!qv%v4Y|-aF3jY2RdH2&;nvJ?&bqfox z_hu;s$o6^OWRYPW%fDo8YP$r!BkKDvF?*xoqF<`*1=~WmuV!Uo9*dI{c7OhOfmr^~ zdU2IrYBZ}e36#X6t$a<8F)S>MX_U?BQ2e_0zf;2S)!#JD&ug8KSb49XII{wc8HVKA)5s9Qvpmz^MK!#=<8J~3adJz&E=S0jNDIMp+N zN)(`Q0@k-Sm|b1%&+1)9x@cv_7yR$tOKOa$-vXafw@f(%)`7w*4Y+|9H;O+(+?;k! z&Km7V_nu~e`)6mBCu)|&`P9F0fxY3(_r1tEjK9TC{KoS!j(iV24md{kc6%5h2!&|H ztAZ+=nbPMQx1DWN#bvkvK!VC z{d&k`0kIU+mD{%;`Oi05sMR<7F3>ni{$=nL`}hG5!dP$eyk-y-5n;9z8;?svo);Ql zxAc8I8fAu2F!m3ub4%88DVuS~b+0|7a|)Vx z>I^$xa`XyV^TOqqg;fs|?ii~l0I!d(Vm8*-Gd!vxc`R}3<x)&}{@HS^?t3Xv? z0{PvU%!76l97HV2>6FPBj!iSZehtrlF_|2D`4a>@4eVC|x2NXtxhu|p?bh6W^RiXg z(}k6u{)N+WQS0sy=wNyrW^37T`dKFC_{GM`hXTD+0m(Geoaltc7Kcp5{(udceQJe# z048`>F076fy|c)GV?5b7QoMVYAEM7#MJR0A-`{_{McBZ`Djx5zp_y0~M=o#b5BdI* zgf~ain-J7>*^H;fqBJ4%I<}xe8F8$~XR+ltJ2rjV&eYqbi0dEq(Gvf>2Z0!hUoU2DAvCY@ARaj zEZx9H3|h(F-(~`Xi=8g1pEh+`dsKJevR}V^VVr1dl%vdUGwSNh@*;eR7_TLknbt^Bw;PJ>}%H+%##4jDRFu=#QCiwOz=yMBT(8d1wCt51)h7( zes}P8>HVe-ZC6>r|7>IPyQZTf!IYF9c=9_6;65l)U71F2Xoe{d@W<@m^1&+@xXyPM zOeR}ZrMra`)n-g7OqRpAI1r6ogh&Zi(!NVEbQ}OD_JNj$Y2QW8x=$<6z$EsDn(MAe zID&1COt8~Nk^4l+?%~&|Ftuy{2bPEXG&a_c%BetGNL_O*URzPah!UwM!`7u<79m^Y z{w+=FM3aw#`&UwQMv9>uf|cdj?$|DLaBQr12F9jkRs;TPv5-*yYI1PbcoVv|GN5}= zeL7hz#Ng$-_|nBPOBaNwuiM{!HN(?kYA)zjO7lUo>(8xcrGQOd7aJP}hg)dc&InX2 z1KTfXc2Y1c_}(v!eCV-X9ChDO);hZ+_^ZE>5kvOI98>dYo0khWvB%YQy`bqMuC~_6 z<7RLBrQlX6|sj2e_+ELSfnEN~LVDA>PP<39 zLps@oP2>uP%u^Vr9(oTAq6edljoZg-l@FgFyRS%GEmn*u+>yK_{pjK4UPZd{0(r~h zD5*ovQfm$)OFW!PGQ4$i+bF8DqrSFulo65J1d?l(_yW8EG69g{n<>@L&|0Gicx5bg)CAp>oBITtSm#55`pJWyeVoaT6w)lh(Sw&^6QIPN-Ccm?_9IYSbu}tI6Ju- zwUk$$>484AXbIhBnUUh>stCU+zIlZKbE{daezsnlT~6-h17=8UXQzUf7>`U1aia8- zV29*po45#Nu`}O0fk*@e1fTw15OKe?)YoBd;hi0Eh)#Af(x_?}pCIv9zuU5`pm8Ia^ANT7Fw`V||9udMnO*2B-R1dboqOu*BZCFrzQ57VbNQdtl&w#G->C;q zv^Ue&9L;g}pr6{MIf`A-s;0GJLes;puJ?~tKAOt$6cANtjBIRJR3Pc&6})0RSwkaN zqELte4Kd}`r-V-*z5u2it?!9QhV@aYsSo}>8p$NehAe1~S+pPrUR+@Of)2W_Cd8S9 zftWffKj4bG)l93D7(RT z0fMwIBXSY9|7+6orz!JY!!yRMo%cDWLScD$km~nvm|$MTImwT3y~Zz371c}kR5H|g zP!b;oZhbc4EPvmoc293YK25l5M z4Rh^i*`*$&?WFv;u;MaIxjvm$wHh)*AhmAi;Jb1>~;YY;AU+DU*Do zW$A;8lYHwM2LRPF(ALUka}{gf#ytQr$BSj3G&*1w;Ka_oz1On!KmT#qYDewFKew0v z?-tR5Om34g`}?Djx&=JIOn_#-Eb(b;tFk1}W@ZymzM3WJV3G_Iu;fd2`NvLFoR_M^p`Jt3)Ab^hKt0vH#e)?pQok|Yi_LE1NVBIu2)_Y zF&)Mzro7TK-K#yMj!cj!xZphFbsoPoTEf=!=Uyc4-_zulF*0`r z%dnR2U6y|>6;7Yh(6yyUplob^sL&Ya6@-AnV3DQK)q`-`T)PrT+mZ)0#>jeVHKw zf~#xWw)5RhD**s_#VdT68Vzh6TM}x9&A6wWHFFK&!fxPs^8b$bN~p&$;(L=e{<5taqJ}hmnGU;<|zUL-VWr;wrqZ(OscX z6b+ezf;Ge7p_XO1!)5`4eflJ4UtFrcq;r+4fD7*a<)h@%x>WVdPA;1tFJEOAWa5-E zA(P^;F~S$IC?xTnms>$jzpc=e)V>DkD8kXlJQC5UrapUma?rWdOll)VZ>x}IPUk|z z_hdMdiHK9nRI}-4=wR? zCVL=h`&z#8LRqcx9#d7uh?!ahAPK2M?=|y#kYj0aabXL?u@V!d`IN+jYLF;HYSZIi z%qYyXJm=I)-^#hu$oyRJPVp$dNL48y2-i5D=YxWPt}pWv?gh;K8U0U#hTc(UC=XE* zMSA=hj7n+Q7EgmT4l~R-B<)CEs7y5mP+N>2apOoE6B7BVVXv#YxucJ4bUz+$rPwz3 z?u6CJ_Zl085qDm$J`m{XQHwuZL#`2O)!WGx|J6iYUg+?tM*_?;FEzK}z_p2gb{A?& zM+`5v4j#2)$j1nWkPAr_5I0xen*ogM7CHb21#Rt%gv#mQ1L9;NsUZG3vvQJ4Zwk`jz0B^SE)@fjvHbBV z1H0(dPMGy*mzS^V11)2Qf$Tq~rKP28viB0k)a=k>W2~}a)$G#rkY#^fczrh-N$srv zesyoT61{dWU&Pkx7s`(5)8m3=kLR1Vq8H5?%$Uvs)dl5<0p2ph?4GVfi9apQOzEea z-3#3p*!kF4O0NmS4D#Hy^fyGsWn@F-2^D@`gY7+$xO-YYaZLVKj@=j3OYIx~6tr_d z*13KpOS!){mjaZ^+wqk5l!o@BeX+o1C zp7jH(3|(?ff?QkxQ}yd9!v$%zev|e$rEIhKnwGF}tziLw|Kuvcxk#NE8Z0my#Iv=l{&Tf=%&vt`5^_{R$VA>Fo1EC&r<6Qqez6z4s z9uw7t%@7uUT1|70#IcdPxk091A;@UES<22~Pwwf}D9aN%Izo=CFU5{ewsn?pY2mGd zGjX$BT-~p(F9KoN8tO-*58)&8Cx72R`O_9BfuKp`Czj7QcIGN<&9%|jD}itONA;Sx zg!i~t2ie5Ci(s{4VvG?F_?P_jcE5>=esc4!mbO<;s3@IK@eh-Oxr3c9&fIMxbeEe<-*qKp{S?8=%u@Es zOoESC9_h^D*JgUTFf=M5V-u(mfn^|(dM9ZSpF zdLF9s8s{m1&z~U`d&kQ!7%_2JAP@A8Zc1Q$m3=d1dc8xtZ;DP$;_jh^`y!!J@A5*h zHsph9YAW+_B+soFfe#7kU*?_t%SuawQI~J28Ov+0Hm-BbH7Z==V~Ii_lp{Y!+3EY+ z?O$k1|2q0X?|;9;xXj0Y%7&w9O}?KfN4trJ?afUPOyEyTe4h@nde?~qvZ4L#>Rfswi5h=8 z8zIXB*<}q;V#US9{QzsEXN~mV+9VfpeT4N_kGoSCU)>~Desp7)(8tzeU{V_*D~rbQ zzOaM?Ryk}jPeG{%8o$D&`hq5atgU6LZ=yE6VW1tUkpNPF`u!7Q) zND-cFAxcW{yW_uhHqdMtUITS@C*jvm+Ouh`PwFy%$^YLZ6wJifxO`j5b-j3siOeIF zz4f2LhGTrqV6|?xq|Li(>TKPD`&OpqgP%_1L{RZ2Mo}hVuL1<`-c4-Bh{FKFDZ2s_ z{>jnYY0MfgW2{d0mVGZEyZfsKd{u=G)Y5RQq%9@`@` z4572d(R)IL(l@a2?Xfyp(h%{Hhou~7PMNvV;R_>EjSJ4f2oaE!5+6JJla*$!PLpq2 zd7Qd(1WuWE`gYqzkJ1by#x!&>{m*P>S~-7oZmeYuzrSlp7j@{PJj)(w^4oH+5A>ZK z6#eqi(h~cz?g>z8Pvrg+IRX^w8yfbx*!pRRiV7j|#FcV9{^Nb^RZ*g~?B)oKwaMB;UG;J&SxPYbWPeLKg@mtKUf5&kg#C-U zYEZ`jPsU1tgr(D!g|4Y(7bt!Rujv5*06S}A)Qkz$346;DUeY!d+`PQ7<73az4)ZsQ z&+6viR6b~oJmkSVG}qDWi*XJ`9d18c#s#UMkoz0A3rZ;3tBHI|7CFYr|cS+Fj> z^TCb|wl_eO=HW*3o4{$zCTmkm%V>^ZUSn@Dncz7!J)+l}!tMIz&Ydn0KOXqI#<3)z za&G6rP@%d2jP8174|vy!9pGTPC*vwTnk#=x%w3B{m?}4sk~$U&>z+>Dqh%u2y8n2@ z7*?;7!QU3NVoU*)aiGxA5v;On1R4D&&o2)=noCH`GTwAR>*xJ;b+aalwhrIIQGak}x%&l|=) z)sWNmWT_ZOl6r6dtHeYAmW>P)I#+A3Yh*ba(Mfvz1?~zRMri18dp~ne&bMe|V+%}J zbmnv&;h$%QB&Vkr!?N#l7hdO|$&mYQUy6WljM&$9y%u@T8&47pfmi^(4`y@J)VktQ zA9{IRqoPVUCS(X`biv-{Vo(lk@$Xy?|BMU`wv6t&TQ#*teRlu*N0z$1{WORiD$A-p zY%gMrMpnuCg8(ts>8AGfIj$2GWm(&xw=9s2T~b<_-B>Mx!4X&wxyg#3!Ajig{$@c1 z0D|Veegfs{hxifxXjArwh{+Tye)v-Pk4NtPN62ou-Qz^nXddS4Up!`7hI*4{mZfo%5RA4DCFYg8T35Jh% zXoa>HrYPrQkhzY!Hg#WFMXIO=vdXacqQ!gk8XoU@H)7AYAzV#8%whlrQn(>*7J4Q~ zm^A78Y^G$B=ZxV`dTEdQSvIUPfQTtCTMnxi8bl_O4*m*fW-ic-UK0^1XlnKxwhG)4 zewlQcw!0+iJk#`A1p}XDN}-=FH<352@zib>_3L-uFv-PZ$BMLc21uqEFa3INiG#JZ z6YhErhZf?X45wX*Uqb~K7~%_mToyFTjt?oc`%kBOpUQpXWZ&narq4rO&CkqWC7@^q z%Z(d~dkqjaup8Okh3y`}e zA2V}aNSa%Rjk5^cKM@lU2X}wI_ZQ*ifAmT5$nX`)%xlf+XN7=w+k+CiYz|6HB9B~8 z0`-285M=Pwih~Xta~kmd-xf5D_tH{hzCA_);Y5syIai`0o(grC56T79gHcmEd-t^+ zH7yd-{~@!|P`r-wRG-2N5a#wrVoyg|44 zK5FdL(8q_d!M&eVRZZfLcOirMDRt*V2qy z_O1N-RYFB|wmJV}NqzLm9l7{b(4^k;0YC_1(BF5;!gh4-d6{j_@bHiCAr3i|lGJ!4 z?7^lHtC>%st<6Azdy;cum^HzXPaJM(!=bcZTynX<^05NlUiaYi_}HDmy9z`vc0Pzb zOJ<==L0ljkXF3bJPPngGiLtW8=OCKo1U|-?8vGanWR( z^Ef0$C6BV|2b3w2>Kr>i?Up{#okVH|yE||y-q=a{<^0b-{1`GPldTk|-$tARSvr+5 zR^FcAbYcRa><_G*=#aO)dO!Fam~YbB~vqWRWjQaHM(s=oed1W>WuvT1kMKrPE0qh%v$s4BLml)E%w z=w5UfR0dxVJt))FF@(sB%Ni>A00rQWzFk9_m*oe5ydZ|OXf5EeeT5|h`MGyX1U{-? z%cjbc*tB`DE^F)gCdHC=vd9I*=;FF`!n--8IJ}2X!sz?bO8#TE^Mt{+O@lKn+vmzf zIYACqxV=39o5XKtHk}$TBA;waQtf4H~6%%6#4bsmtcG)w@QpQ@!(wLDo z43gbsEGaS8L4$9;zrKIJ@0{S_U+bas<;P*Pot>BdW%TV> zA|_od(G9P8CalSetG#8yfeQLE7aM@r%wu7%on1c=K*edfQb*n{Gl1n7{Ehed3@n$0 zU3u20oo(KgTd4I>^?z|`r^M^HFH7P6bhF<`dt^k?Ifd-`HAkH5Q^ya126vl$mcqo> z(UwIz>7_;qW1y!WVn^@~(KM_|CUGMHVT$KzAKqo9B(qw+|dw*;acD1P|BAw#lV^fv_uj0s>4Fh3H09Dz)-^7VHmePsLe8zbku)D!x)C7WTsns>QJFD7_<*}}fjEB#RGUMK7QqEh$nl*)D+ ztQmICI^JV*p)2^$lzN_;H>Mm>I0f0Suq?jKtPw>=nigEGL+yUMQ?5wvwVrtp=*urW`|VyLa39-V5`qvs3VMEmaWJ zEY!?`VhV^~eSqMWkXqYT_ZdrT_M2`WBOhf z9e-vd)TQCUKROY6=4LsU{%rr`Pn`6;zD;;&AADo>1S*#YBGxxC%g z_7k|z+sKFv2@QjDcMevH`wO+h44)1)tjiW}D>AD_?D>9cXOvK1%_kZP3V~-z8Uv+u zey|nm>R6Y-%tp_526+rAJ2ck>AI=c7sjC&m^0-ay+<={*q^z@c9Z`|HT80#u_NI8C z&`ULM$$hPpbHFM>f=mQDOm)LcC&g}krUh&9QX^J|e6TU!;j%v0rm(&I^`^5^P-T4@oTvUIdpC=QGvly+tw+uY9t=DY-}` zNTeiihF2g8rTk|;K;N3eIN?@!n#R2WiBgM!-GRI-=e$(-EZ#V`eH`IO0ASw%;t9Oy zVD7oLi1)nW9x~7(3ug zmR8cDx@H*X87X*4mMv40@PHO7&9L1FNZUND{KGswulD=Qp zw;xo28BN)MAA^4<=(L8c44(3~TLeqi9H)`U8J|CE(K0Nd*6Ein`>T%X9qnZF5iX+1 zQeh>3Zta18qg5`)W5ModbH}ZpZG4l>0Cu?l$H>3UW?g;7dL4b;alF@p*9MDp6?DUQ zI8AHFkzHvLMz_p_h2et*$ZTKn`ryJ}lC>9Eug6)+D0({<$q0{{UDNDJ?&*qyr_d>> zdSjCl=Ph7X;OCOaGvl$HK&kj}bg}B}3n#2uR?g*EoZ=!M=EAbw1-H%qY^9sygrm#s zUm^Y74cYogw$ENvlE*-eXP%lG?{H7Nw85ER)>s{_3Oi;$65QsEZnD}iI6z{aHM0Oh2GsT4A56-teDgTQWJNIAMb=eQ zy&~9x^lmVGebi^OX}iX<&Lg@lO+ycEy?tYarw zm7LaYA);yc*+GlWwoK*`20=xhd1HrTA?XVPr#{OCp#^T{#i{vi(MhPSzrFvgOe|e` zw!C9JrQX?9w2>SrTgjrY3PFLoZK!*G!zBh)S{1-Bt*bV5T4u~;wdQUC6j2b=I6JUp z!bSHKo-FpYj*A%%@H`1UEA1qkt6$3geifqhQp3MORgsB|Ofoijm6xm?DWVX!d@+&V zE7(COAf-}SqT#`b3%Auw%u$Bh>2=*nthia1-iW~x za6m^T_l+o9UQRLzxfd8_0H+Dta3Ic<5Tg1F^6NmVoZgv&N=Hs0lN=pr@9;XANevG30xg?%`F+MLNLz2B?9NY=+!Y5O4)2&6mKU^ zQOcvxjk(#{GSKz7R8whA7EUiUK4^h_3?z+m=~cb=sLbQ><=k%Q`r5%&XV}a{>a3x` zDSrLO%^*vrz?cdU1-U-ii1iR7+7~%!W=0WKK6kr1n$=k4bdQQW`_3!`f|@UIntT;C zY$E<;T>S)@t?Mw}XgtX|nrX{7VOXLZ|DnMP z&m$n8juYpKl44b|yV*?UNY41rHf4vL(P&UOL%r&Qcbl3X9&$);#QzZ(TycDZ=yHG#i_F z*dRAmi$?DQ1T70sqQQ3hhohEOpJ|@1)7SMl6!#BRhc#IK?Sa3=Ct_>GS^Tcx$PeAy gj-M+1-=KYQvjYu#BNgL1#_t7SYK(xrGjxsp7i}ta;s5{u literal 3358 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 AXaE2J From beff8e8ad4b9dc41daa0737e2d5ed6d2afcd7685 Mon Sep 17 00:00:00 2001 From: Joakim Bjerknes Date: Fri, 12 Jan 2024 11:53:01 +0100 Subject: [PATCH 03/15] fix(Expiry): validation logic (#3216) --- .../uilib/components/input-masked/events.mdx | 8 ++-- .../input-masked/MultiInputMask.tsx | 39 ++++++++++++--- .../__tests__/MultiInputMask.test.tsx | 48 +++++++++++++++++++ .../input-masked/hooks/useMultiInputValues.ts | 4 +- .../extensions/forms/Field/Expiry/Expiry.tsx | 36 +++++++++++--- .../Field/Expiry/__tests__/Expiry.test.tsx | 1 + 6 files changed, 117 insertions(+), 19 deletions(-) diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/input-masked/events.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/input-masked/events.mdx index 7dfecde0f50..25bc8544a7e 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/input-masked/events.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/input-masked/events.mdx @@ -13,6 +13,8 @@ showTabs: true ### MultiInputMask -| Events | Description | -| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `onChange` | _(optional)_ runs an input value changes. Has an object parameter with keys matching the id's defined in `inputs`, and values of string. E.g: `{month: string, year: string}`. | +| Events | Description | +| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onChange` | _(optional)_ runs when an input value changes. Has an object parameter with keys matching the id's defined in `inputs`, and values of string. E.g: `{month: string, year: string}`. | +| `onFocus` | _(optional)_ runs when an input gains focus. Has an object parameter with keys matching the id's defined in `inputs`, and values of string. E.g: `{month: string, year: string}`. | +| `onBlur` | _(optional)_ runs when an input lose focus. Has an object parameter with keys matching the id's defined in `inputs`, and values of string. E.g: `{month: string, year: string}`. | diff --git a/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx b/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx index 213b0b57f51..7bcf4c725d4 100644 --- a/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx +++ b/packages/dnb-eufemia/src/components/input-masked/MultiInputMask.tsx @@ -59,6 +59,14 @@ export type MultiInputMaskProps = { * Runs when the input value changes. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}` */ onChange?: (values: MultiInputMaskValue) => void + /** + * Runs when the input gains focus. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}` + */ + onFocus?: (values: MultiInputMaskValue) => void + /** + * Runs when the input loses focus. Has an object parameter with keys matching the id's defined in `inputs`. i.e. `{month: string, year: string}` + */ + onBlur?: (values: MultiInputMaskValue) => void /** * Text with a status message. The style defaults to an error message. You can use `true` to only get the status color, without a message. */ @@ -77,7 +85,7 @@ export type MultiInputMaskProps = { suffix?: React.ReactNode } & Omit< React.HTMLProps, - 'onChange' | 'ref' | 'value' | 'label' + 'onChange' | 'onFocus' | 'onBlur' | 'ref' | 'value' | 'label' > & SpacingProps @@ -95,6 +103,8 @@ function MultiInputMask({ stretch, inputMode, suffix, + onBlur, + onFocus, ...props }: MultiInputMaskProps) { const [values, onChange] = useMultiInputValue({ @@ -154,6 +164,16 @@ function MultiInputMask({ delimiter={index !== inputs.length - 1 ? delimiter : undefined} onKeyDown={onKeyDown} onChange={onChange} + onFocus={() => { + if (onFocus) { + onFocus(values) + } + }} + onBlur={() => { + if (onBlur) { + onBlur(values) + } + }} disabled={disabled} inputRef={getInputRef} /> @@ -243,6 +263,8 @@ function MultiInputMaskInput({ inputRef, onKeyDown, onChange, + onBlur, + onFocus, ...attributes }: MultiInputMaskInputProps) { const shouldHighlight = !disabled && /\w+/.test(value) @@ -269,7 +291,15 @@ function MultiInputMaskInput({ aria-labelledby={`${markupId}__label`} ref={inputRef} onKeyDown={onKeyDown} - onFocus={onFocus} + onBlur={onBlur} + onFocus={({ target, ...event }) => { + target.focus() + target.select() + + if (onFocus) { + onFocus({ target, ...event }) + } + }} onChange={(event) => { onChange( id, @@ -302,11 +332,6 @@ function MultiInputMaskInput({ function removePlaceholder(value: string, placeholder: string) { return value.replace(RegExp(placeholder, 'gm'), '') } - - function onFocus({ target }: React.FocusEvent) { - target.focus() - target.select() - } } export default MultiInputMask diff --git a/packages/dnb-eufemia/src/components/input-masked/__tests__/MultiInputMask.test.tsx b/packages/dnb-eufemia/src/components/input-masked/__tests__/MultiInputMask.test.tsx index e01a81715c8..533c26efc92 100644 --- a/packages/dnb-eufemia/src/components/input-masked/__tests__/MultiInputMask.test.tsx +++ b/packages/dnb-eufemia/src/components/input-masked/__tests__/MultiInputMask.test.tsx @@ -757,4 +757,52 @@ describe('MultiInputMask', () => { await test(month) await test(year) }) + + it('should support onFocus', async () => { + const onFocus = jest.fn() + render() + + const day = document.querySelector('input') + + await userEvent.type(day, '11012024') + + expect(onFocus).toHaveBeenCalledTimes(3) + + await userEvent.click(day) + + expect(onFocus).toHaveBeenCalledTimes(4) + expect(onFocus).toHaveBeenCalledWith({ + day: '11', + month: '01', + year: '2024', + }) + }) + + it('should support onBlur', async () => { + const onBlur = jest.fn() + render() + + const day = document.querySelector('input') + + await userEvent.click(day) + + expect(onBlur).toHaveBeenCalledTimes(0) + + await userEvent.click(document.body) + + expect(onBlur).toHaveBeenCalledTimes(1) + + await userEvent.type(day, '11012024') + + expect(onBlur).toHaveBeenCalledTimes(3) + + await userEvent.click(document.body) + + expect(onBlur).toHaveBeenCalledTimes(4) + expect(onBlur).toHaveBeenCalledWith({ + day: '11', + month: '01', + year: '2024', + }) + }) }) diff --git a/packages/dnb-eufemia/src/components/input-masked/hooks/useMultiInputValues.ts b/packages/dnb-eufemia/src/components/input-masked/hooks/useMultiInputValues.ts index f244a38dfa4..0db21cab354 100644 --- a/packages/dnb-eufemia/src/components/input-masked/hooks/useMultiInputValues.ts +++ b/packages/dnb-eufemia/src/components/input-masked/hooks/useMultiInputValues.ts @@ -4,7 +4,7 @@ import { MultiInputMaskValue, } from '../MultiInputMask' -type SteppedValuesHook = { +type UseMultiInputValues = { inputs: MultiInputMaskProps['inputs'] defaultValues?: MultiInputMaskProps['values'] callback?: (values: MultiInputMaskProps['values']) => void @@ -14,7 +14,7 @@ export function useMultiInputValue({ inputs, defaultValues, callback, -}: SteppedValuesHook) { +}: UseMultiInputValues) { const [values, setValues] = useState>( defaultValues ? defaultValues : createDefaultValues() ) diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx index ced11c49820..e411fb27598 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/Expiry.tsx @@ -1,4 +1,4 @@ -import React, { useContext, useRef } from 'react' +import React, { useCallback, useContext, useMemo, useRef } from 'react' import { makeUniqueId } from '../../../../shared/component-helper' import SharedContext from '../../../../shared/Context' import { FieldHelpProps, FieldProps } from '../../types' @@ -12,17 +12,40 @@ import { HelpButton } from '../../../../components' type ExpiryValue = MultiInputMaskValue<'month' | 'year'> -export type ExpiryProps = FieldProps & FieldHelpProps +export type ExpiryProps = FieldHelpProps & FieldProps function Expiry(props: ExpiryProps) { const sharedContext = useContext(SharedContext) + const translations = sharedContext?.translation.Forms const placeholders = sharedContext?.translation.DatePicker.placeholder_characters + const errorMessages = useMemo( + () => ({ + required: translations.dateErrorRequired, + ...props.errorMessages, + }), + [translations, props.errorMessages] + ) + + const validateRequired = useCallback( + (value: string, { required, error }) => { + return required && !value ? error : undefined + }, + [] + ) + + const preparedProps: ExpiryProps = { + ...props, + errorMessages, + fromInput: toExpiryString, + validateRequired, + } + const { id: propsId, className, - label = sharedContext?.translation.Forms.expiryLabel, + label = translations.expiryLabel, error, info, warning, @@ -37,8 +60,7 @@ function Expiry(props: ExpiryProps) { handleBlur, handleChange, } = useDataValue({ - ...props, - emptyValue: '', + ...preparedProps, }) const expiry: ExpiryValue = { @@ -70,7 +92,7 @@ function Expiry(props: ExpiryProps) { statusState={disabled ? 'disabled' : undefined} disabled={disabled} required={required} - onChange={(expiry) => handleChange(expiryToString(expiry))} + onChange={handleChange} onBlur={handleBlur} onFocus={handleFocus} delimiter="/" @@ -100,7 +122,7 @@ function Expiry(props: ExpiryProps) { ) - function expiryToString(values: ExpiryValue) { + function toExpiryString(values: ExpiryValue) { return Object.values(values).join('') } diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/Expiry.test.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/Expiry.test.tsx index 2cce677a693..f618402a262 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/Expiry.test.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Field/Expiry/__tests__/Expiry.test.tsx @@ -287,6 +287,7 @@ describe('Field.Expiry', () => { ).not.toBeInTheDocument() await userEvent.keyboard('{Backspace}') + await userEvent.click(document.body) const formStatusText = document.querySelector( '.dnb-form-status__text' From 2fd5c41e424b3d586f32e5767e51bcdc981bcc04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Fri, 12 Jan 2024 12:53:12 +0100 Subject: [PATCH 04/15] fix(VisuallyHidden): remove flex support (#3219) --- .../docs/uilib/components/visually-hidden.mdx | 2 + .../docs/uilib/layout/flex/container/info.mdx | 2 +- .../src/components/flex/Container.tsx | 7 ++++ .../flex/__tests__/Container.test.tsx | 39 ++++++++++++++----- .../dnb-eufemia/src/components/flex/utils.tsx | 21 +++++++--- .../visually-hidden/VisuallyHidden.tsx | 2 +- 6 files changed, 56 insertions(+), 17 deletions(-) diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/visually-hidden.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/visually-hidden.mdx index b5e939d6015..ace0b901631 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/visually-hidden.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/visually-hidden.mdx @@ -2,6 +2,8 @@ title: 'VisuallyHidden' description: 'VisuallyHidden has all the styles necessary to hide it from visual clients, but keep it for screen readers.' showTabs: true +hideTabs: + - title: Events theme: 'sbanken' --- diff --git a/packages/dnb-design-system-portal/src/docs/uilib/layout/flex/container/info.mdx b/packages/dnb-design-system-portal/src/docs/uilib/layout/flex/container/info.mdx index 3d81bae1abd..f75921d3134 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/layout/flex/container/info.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/layout/flex/container/info.mdx @@ -26,7 +26,7 @@ When a element or component was given, that does not support spacing, it will st You may else wrap your custom component in a `Flex.Item` – this way, you still can change the spacing per component basis. -Technically, `Flex.Container` checks if a nested component has a property called `_supportsSpacingProps`. So if you have a component that supports the [spacing properties](/uilib/layout/space/), you can add this property `ComponentName._supportsSpacingProps = true`. +Technically, `Flex.Container` checks if a nested component has a property called `_supportsSpacingProps`. So if you have a component that supports the [spacing properties](/uilib/layout/space/), you can add this property `ComponentName._supportsSpacingProps = true`. If you provide `false`, it will not support spacing. If the component is a wrapper component, and you want its children to support spacing, you can add this property `ComponentName._supportsSpacingProps = 'children'`. diff --git a/packages/dnb-eufemia/src/components/flex/Container.tsx b/packages/dnb-eufemia/src/components/flex/Container.tsx index 6f1510d19a5..169aa22cb0f 100644 --- a/packages/dnb-eufemia/src/components/flex/Container.tsx +++ b/packages/dnb-eufemia/src/components/flex/Container.tsx @@ -161,6 +161,13 @@ function FlexContainer(props: Props) { spacing } + if ( + React.isValidElement(previousChild) && + previousChild?.type?.['_supportsSpacingProps'] === false + ) { + startSpacing = 0 + } + const space = direction === 'horizontal' ? { [start]: endSpacing, [end]: startSpacing } diff --git a/packages/dnb-eufemia/src/components/flex/__tests__/Container.test.tsx b/packages/dnb-eufemia/src/components/flex/__tests__/Container.test.tsx index 87716ff7712..eee8ee4b290 100644 --- a/packages/dnb-eufemia/src/components/flex/__tests__/Container.test.tsx +++ b/packages/dnb-eufemia/src/components/flex/__tests__/Container.test.tsx @@ -366,16 +366,16 @@ describe('Flex.Container', () => { const elements = document.querySelectorAll( '.dnb-flex-container > div' ) - expect(elements[0].className).toBe( + expect(elements[0]).toHaveClass( 'dnb-space dnb-space__top--zero dnb-space__bottom--zero' ) - expect(elements[1].className).toBe( + expect(elements[1]).toHaveClass( 'dnb-space dnb-space__top--small dnb-space__bottom--zero' ) - expect((elements[0].firstChild as HTMLElement).className).toBe( + expect(elements[0].firstChild as HTMLElement).toHaveClass( 'test-item' ) - expect((elements[1].firstChild as HTMLElement).className).toBe( + expect(elements[1].firstChild as HTMLElement).toHaveClass( 'dnb-space__bottom--large test-item' ) } @@ -393,15 +393,36 @@ describe('Flex.Container', () => { const elements = document.querySelectorAll( '.dnb-flex-container > div' ) - expect(elements[0].className).toBe( + expect(elements[0]).toHaveClass( 'dnb-space__top--zero dnb-space__bottom--zero test-item' ) - expect(elements[1].className).toBe( + expect(elements[1]).toHaveClass( 'dnb-space__bottom--x-large dnb-space__top--small test-item' ) expect((elements[0].firstChild as HTMLElement).className).toBeFalsy() expect((elements[1].firstChild as HTMLElement).className).toBeFalsy() } + + { + TestComponent._supportsSpacingProps = false + + rerender( + + + + + ) + + const elements = document.querySelectorAll( + '.dnb-flex-container > div' + ) + expect(elements[0]).toHaveClass('test-item') + expect(elements[1]).toHaveClass( + 'dnb-space__bottom--x-large test-item' + ) + expect((elements[0].firstChild as HTMLElement).className).toBeFalsy() + expect((elements[1].firstChild as HTMLElement).className).toBeFalsy() + } }) it('should transform children if _supportsSpacingProps="children" is given', () => { @@ -431,12 +452,10 @@ describe('Flex.Container', () => { '.dnb-flex-container > div' ) expect(elements).toHaveLength(1) - expect(elements[0].className).toBe( + expect(elements[0]).toHaveClass( 'dnb-space dnb-space__top--zero dnb-space__bottom--zero' ) - expect((elements[0].firstChild as HTMLElement).className).toBe( - 'wrapper' - ) + expect(elements[0].firstChild as HTMLElement).toHaveClass('wrapper') } { diff --git a/packages/dnb-eufemia/src/components/flex/utils.tsx b/packages/dnb-eufemia/src/components/flex/utils.tsx index f0d13c80ce3..08bb3879a6d 100644 --- a/packages/dnb-eufemia/src/components/flex/utils.tsx +++ b/packages/dnb-eufemia/src/components/flex/utils.tsx @@ -56,11 +56,18 @@ export const isEufemiaElement = (element): boolean => { export const isSpacePropsComponent = ( element: React.ReactNode ): boolean => { - return ( - (React.isValidElement(element) && - element?.type?.['_supportsSpacingProps'] === true) || - isEufemiaElement(element) - ) + if ( + React.isValidElement(element) && + typeof element?.type?.['_supportsSpacingProps'] === 'boolean' + ) { + return element?.type?.['_supportsSpacingProps'] + } + + if (isEufemiaElement(element)) { + return true + } + + return undefined } export const renderWithSpacing = ( @@ -69,6 +76,10 @@ export const renderWithSpacing = ( ) => { const takesSpaceProps = isSpacePropsComponent(element) + if (takesSpaceProps === false) { + return element + } + return takesSpaceProps ? ( React.cloneElement(element as React.ReactElement, props) ) : ( diff --git a/packages/dnb-eufemia/src/components/visually-hidden/VisuallyHidden.tsx b/packages/dnb-eufemia/src/components/visually-hidden/VisuallyHidden.tsx index 9471183522f..deae206403e 100644 --- a/packages/dnb-eufemia/src/components/visually-hidden/VisuallyHidden.tsx +++ b/packages/dnb-eufemia/src/components/visually-hidden/VisuallyHidden.tsx @@ -57,6 +57,6 @@ const VisuallyHidden = (localProps: VisuallyHiddenAllProps) => { ) } -VisuallyHidden._supportsSpacingProps = true +VisuallyHidden._supportsSpacingProps = false export default VisuallyHidden From 74b47a23e4d4a3380240fdeb08a905eef98d3d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Fri, 12 Jan 2024 14:06:18 +0100 Subject: [PATCH 05/15] chore(forms): housekeeping (#3221) --- .../forms/base-fields/Selection/Examples.tsx | 5 ++++- .../src/extensions/forms/Field/Date/Date.tsx | 2 +- .../forms/Field/Selection/Selection.tsx | 3 +-- ...own-have-to-match-dropdown-widths.snap.png | Bin 21436 -> 20693 bytes .../extensions/forms/Field/String/String.tsx | 2 +- .../Form/Handler/__tests__/Handler.test.tsx | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx index 422fb608c5f..917f8902dcf 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/base-fields/Selection/Examples.tsx @@ -35,7 +35,10 @@ export const DropdownLabel = () => ( console.log('onChange', value)} - /> + > + + + ) diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Date/Date.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/Date/Date.tsx index 1605f1026bd..a2e0dac85fe 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/Date/Date.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Field/Date/Date.tsx @@ -96,7 +96,7 @@ function DateComponent(props: Props) { show_input={true} show_cancel_button={true} show_reset_button={true} - status={error || hasError ? 'error' : undefined} + status={hasError ? 'error' : undefined} suffix={ help ? ( {help.contents} diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Selection/Selection.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/Selection/Selection.tsx index 12e8920d1c1..d5bb37b2b7d 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/Selection/Selection.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Field/Selection/Selection.tsx @@ -22,7 +22,7 @@ interface IOption { } export type Props = FieldHelpProps & - FieldProps & { + FieldProps & { children?: React.ReactNode variant?: 'dropdown' | 'radio' | 'button' clear?: boolean @@ -252,7 +252,6 @@ function Selection(props: Props) { on_change={handleDropdownChange} on_show={handleShow} on_hide={handleHide} - {...pickSpacingProps(props)} stretch /> diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/Selection/__tests__/__image_snapshots__/selection-dropdown-have-to-match-dropdown-widths.snap.png b/packages/dnb-eufemia/src/extensions/forms/Field/Selection/__tests__/__image_snapshots__/selection-dropdown-have-to-match-dropdown-widths.snap.png index a65411d56799d24384100967d00c5ba03c701b5a..45c2708705188d4fed8690dbc692ec7522f0741b 100644 GIT binary patch literal 20693 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 ZBv!YR@&xBwfL%G!lpkowm&;m){(o7)v7G<_ diff --git a/packages/dnb-eufemia/src/extensions/forms/Field/String/String.tsx b/packages/dnb-eufemia/src/extensions/forms/Field/String/String.tsx index d4b5bac40e6..232f0862083 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Field/String/String.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Field/String/String.tsx @@ -180,7 +180,7 @@ function StringComponent(props: Props) { disabled: disabled, stretch: width !== undefined, inner_ref: innerRef, - status: error || hasError ? 'error' : undefined, + status: hasError ? 'error' : undefined, value: transformInstantly(value?.toString() ?? ''), } diff --git a/packages/dnb-eufemia/src/extensions/forms/Form/Handler/__tests__/Handler.test.tsx b/packages/dnb-eufemia/src/extensions/forms/Form/Handler/__tests__/Handler.test.tsx index 4502a038430..3eb09dbece3 100644 --- a/packages/dnb-eufemia/src/extensions/forms/Form/Handler/__tests__/Handler.test.tsx +++ b/packages/dnb-eufemia/src/extensions/forms/Form/Handler/__tests__/Handler.test.tsx @@ -370,7 +370,7 @@ describe('Form.Handler', () => { const onSubmit = jest.fn() render( - + , From a5ae88be19c0730d15e702614917741eac3d5bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Fri, 12 Jan 2024 14:08:39 +0100 Subject: [PATCH 06/15] chore(Button): hide error example in docs (#3220) --- .../src/docs/uilib/components/button/demos.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/button/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/button/demos.mdx index 3bb39ff40c6..acce0f4c64c 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/button/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/button/demos.mdx @@ -59,12 +59,6 @@ Tertiary button with long text and text `wrap` enabled. -### Error state - -Buttons can have an error state - - - ``` -```jsx +vs. + +```tsx const schema = { - type: 'object', properties: { - name: { type: 'string', minLength: 3 }, + name: { minLength: 3 }, email: { type: 'string' }, - birthyear: { type: 'number', minimum: 1900, maximum: 2023 } + birthyear: { minimum: 1900, maximum: 2023 }, }, required: ['name', 'email', 'birthyear'], } - + @@ -75,6 +80,8 @@ const schema = { This makes it possible to create a uniform, testable description and requirements specification for the data, which can be tested independently of frontend code, and used across systems, e.g. frontend and backend. +Also, note you can describe the schema without using the `type` property, as the type is inferred from schema type. More on that topic in the [Ajv docs](https://ajv.js.org/guide/typescript.html#utility-types-for-schemas). + ### Complex schemas In addition to basic validation as in the example above, JSON Schema can be used for more complex. Examples of definitions supported by the standard are: From 58c77cdbb7c29427bcee890607a3596970f55277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Tue, 16 Jan 2024 13:36:59 +0100 Subject: [PATCH 10/15] feat(Form.useData): add hook to get forms data outside of the context (#3218) How to use it: ```jsx import { Form } from '@dnb/eufemia/extensions/forms' function Component() { const { data, update } = Form.useData('unique', initialData = undefined) return ( ... ) } ``` --- .../src/docs/uilib/extensions/forms.mdx | 53 ++++++- .../docs/uilib/extensions/forms/Examples.tsx | 59 ++++++++ .../extensions/forms/extended-features.mdx | 22 ++- .../Form/Handler/Examples.tsx | 2 +- .../extended-features/Form/Handler/info.mdx | 13 ++ .../extended-features/Form/Visibility.mdx | 2 + .../forms/extended-features/Form/useData.mdx | 27 ++++ .../Form/useData/Examples.tsx | 98 ++++++++++++ .../extended-features/Form/useData/demos.mdx | 21 +++ .../extended-features/Form/useData/info.mdx | 85 +++++++++++ .../forms/DataContext/Provider/Provider.tsx | 52 +++++-- .../Provider/__tests__/Provider.test.tsx | 136 +++++++++++++++++ .../Provider/stories/Provider.stories.tsx | 43 ++++++ .../Field/Email/__tests__/Email.test.tsx | 27 ++++ .../Field/String/stories/String.stories.tsx | 1 + .../extensions/forms/Form/Handler/Handler.tsx | 1 + .../forms/Form/Visibility/Visibility.tsx | 7 - .../Form/hooks/__tests__/useData.test.tsx | 141 ++++++++++++++++++ .../extensions/forms/Form/hooks/useData.tsx | 63 ++++++++ .../src/extensions/forms/Form/index.ts | 1 + .../extensions/forms/hooks/useDataValue.ts | 3 +- .../src/shared/helpers/EventEmitter.ts | 5 + .../helpers/__tests__/useSharedState.test.ts | 84 +++++++++++ .../src/shared/helpers/useEventEmitter.tsx | 2 + .../src/shared/helpers/useSharedState.tsx | 94 ++++++++++++ 25 files changed, 1006 insertions(+), 36 deletions(-) create mode 100644 packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData.mdx create mode 100644 packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/Examples.tsx create mode 100644 packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/demos.mdx create mode 100644 packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/info.mdx create mode 100644 packages/dnb-eufemia/src/extensions/forms/DataContext/Provider/stories/Provider.stories.tsx create mode 100644 packages/dnb-eufemia/src/extensions/forms/Form/hooks/__tests__/useData.test.tsx create mode 100644 packages/dnb-eufemia/src/extensions/forms/Form/hooks/useData.tsx create mode 100644 packages/dnb-eufemia/src/shared/helpers/__tests__/useSharedState.test.ts create mode 100644 packages/dnb-eufemia/src/shared/helpers/useSharedState.tsx diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms.mdx index fa3f988dc5e..9b432d23e2b 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms.mdx @@ -8,6 +8,7 @@ breadcrumb: href: /uilib/extensions/forms/ --- +import * as Examples from './forms/Examples' import InlineImg from 'dnb-design-system-portal/src/shared/tags/Img' import FormDiagram1 from 'Docs/uilib/extensions/forms/form-diagram-1.png' import FormDiagram2 from 'Docs/uilib/extensions/forms/form-diagram-2.png' @@ -66,6 +67,24 @@ render( ) ``` +Use the [useData](/uilib/extensions/forms/extended-features/Form/useData/) hook to access or modify your form data outside of the form context within your application: + +```jsx +import { Form } from '@dnb/eufemia/extensions/forms' +function Component() { + const { data, update } = Form.useData('unique') + + return ( + + ... + + ) +} +``` + ## Philosophy Eufemia Forms is: @@ -88,7 +107,8 @@ In summary: - Ready to use data driven form components. - All functionality in all components can be controlled and overridden via props. -- State management using the declarative [JSON Pointer](https://datatracker.ietf.org/doc/html/draft-ietf-appsawg-json-pointer-03) directive (i.e `path="/firstName"`). +- State management using the declarative [JSON Pointer](/uilib/extensions/forms/#what-is-a-json-pointer) directive (i.e `path="/firstName"`). +- State can be handled outside of the Form.Handler (Provider Context) with the [useData](/uilib/extensions/forms/extended-features/Form/useData) hook. - Simple validation (like `minLength` on text fields) as well as advanced and complex [Ajv](https://ajv.js.org/) JSON schema validator (Ajv is like Joi or Yup – check out [some examples](/uilib/extensions/forms/extended-features/#schema-validation)) support on both single fields and the whole data set. - Building blocks for [creating custom field components](/uilib/extensions/forms/create-component). - Static [value components](/uilib/extensions/forms/extended-features/Value/) for displaying data with proper formatting. @@ -151,6 +171,10 @@ The data-driven [base field components](/uilib/extensions/forms/base-fields) are On top of these, a number of [feature fields](/uilib/extensions/forms/feature-fields) have been built that have special functionality based on given types of data, such as bank account numbers, e-mails and social security numbers. +### Value components + +Beside the interactive [Field](/uilib/extensions/forms/fields/) components, there are also the static [Value](/uilib/extensions/forms/extended-features/Value/) components. Use these to show summaries or read-only parts of your application with benefits such as linking to source data and standardized formatting based on the type of data to be displayed. + ### Layout When building your application forms, preferably use the following layout components. They seamlessly places all the fields and components of Eufemia Forms correctly into place. @@ -162,13 +186,32 @@ When building your application forms, preferably use the following layout compon To build an entire form, there are surrounding components such as [Form.Handler](/uilib/extensions/forms/extended-features/Form/Handler) and [StepsLayout](/uilib/extensions/forms/extended-features/StepsLayout) that make data flow and layout easier and save you a lot of extra code, without compromising flexibility. -#### Related topics +### State management -- [Best Practices on Forms](/uilib/extensions/forms/best-practices-on-forms/). +The state management is done via the [JSON Pointer](/uilib/extensions/forms/#what-is-a-json-pointer) directive (i.e `path="/firstName"`). This is a standardized way of pointing to a specific part of a JavaScript/JSON object. The JSON Pointer is used to both read and write data, and is also used to validate the data. -### Value components + -Beside the interactive [Field](/uilib/extensions/forms/fields/) components, there are also the static [Value](/uilib/extensions/forms/extended-features/Value/) components. Use these to show summaries or read-only parts of your application with benefits such as linking to source data and standardized formatting based on the type of data to be displayed. +### What is a JSON Pointer? + +A [JSON Pointer](https://datatracker.ietf.org/doc/html/draft-ietf-appsawg-json-pointer-03) is a string of tokens separated by `/` characters, these tokens either specify keys in objects or indexes into arrays. + +```ts +const data = { + foo: { + bar: [ + { + baz: 'value', + }, + ], + }, +} +const pointer = '/foo/bar/0/baz' // points to 'value' +``` + +### Best Practices + +- [Best Practices on Forms](/uilib/extensions/forms/best-practices-on-forms/). ## Create your own components diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Examples.tsx index 58fc45c3f3e..6a5675e4a13 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Examples.tsx @@ -74,6 +74,65 @@ export const CreateBasicFieldComponent = () => { ) } +export const GettingStarted = () => { + return ( + + {() => { + const existingData = { + companyName: 'DNB', + companyOrganizationNumber: '123456789', + postalAddressSelect: 'companyAddress', + } + + function Component() { + const { data } = Form.useData('company-form') + console.log('State:', data) + + return ( + + + Bedrift + + + + + + + + + + + + + + ) + } + + return + }} + + ) +} + export const CreateComposedFieldComponent = () => { return ( - - - - , -) +const existingData={ + email: 'name@email.no' + date: '2024-01-01' +} +function Component() { + const { data } = Form.useData('unique') + + return ( + + + + + + ) +} ``` ### Schema validation diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/Examples.tsx index 1589d7d491e..f14974087e6 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/Examples.tsx @@ -6,7 +6,7 @@ export const Default = () => { return ( console.log('onSubmit', data)} > diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/info.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/info.mdx index 618c060fb41..dfb33ea0b08 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/info.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Handler/info.mdx @@ -22,6 +22,19 @@ render( ) ``` +The form data can be handled outside of the form. This is useful if you want to use the form data in other components: + +```jsx +import { Form } from '@dnb/eufemia/extensions/forms' +function Component() { + const { data } = Form.useData('unique') + + return ... +} +``` + +More examples can be found in the [Form.useData](/uilib/extensions/forms/extended-features/Form/useData/) docs. + ## Browser autofill You can set `autoComplete` on the `Form.Handler` – each [Field.String](/uilib/extensions/forms/base-fields/String/)-field will then get `autoComplete="on"`: diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Visibility.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Visibility.mdx index 5d429cb40fc..79dc9917ab0 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Visibility.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/Visibility.mdx @@ -23,5 +23,7 @@ breadcrumb: --- import Info from 'Docs/uilib/extensions/forms/extended-features/Form/Visibility/info' +import Demos from 'Docs/uilib/extensions/forms/extended-features/Form/Visibility/demos' + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData.mdx new file mode 100644 index 00000000000..b16ddbcd912 --- /dev/null +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData.mdx @@ -0,0 +1,27 @@ +--- +title: 'useData' +description: '`useData` lets you access or modify your form data outside of the form context within your application' +componentType: 'advanced-api' +hideInMenu: true +showTabs: true +tabs: + - title: Info + key: '/info' + - title: Demos + key: '/demos' +breadcrumb: + - text: Forms + href: /uilib/extensions/forms/ + - text: Extended features + href: /uilib/extensions/forms/extended-features/ + - text: Form + href: /uilib/extensions/forms/extended-features/Form/ + - text: useData + href: /uilib/extensions/forms/extended-features/Form/useData/ +--- + +import Info from 'Docs/uilib/extensions/forms/extended-features/Form/useData/info' +import Demos from 'Docs/uilib/extensions/forms/extended-features/Form/useData/demos' + + + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/Examples.tsx new file mode 100644 index 00000000000..0e7b42b98a3 --- /dev/null +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/extended-features/Form/useData/Examples.tsx @@ -0,0 +1,98 @@ +import React from 'react' +import ComponentBox from '../../../../../../../shared/tags/ComponentBox' +import { Button, Flex } from '@dnb/eufemia/src' +import { Form, Field } from '@dnb/eufemia/src/extensions/forms' + +export function Default() { + return ( + + {() => { + const existingData = { foo: 'bar' } + + const Component = () => { + const { data } = Form.useData('default-id', existingData) + + return ( + + + + ) + } + + return + }} + + ) +} + +export function Update() { + return ( + + {() => { + const existingData = { count: 1 } + + const Component = () => { + const { data, update } = Form.useData('update-id', existingData) + + const increment = React.useCallback(() => { + update('/count', (count) => { + return count + 1 + }) + }, [update]) + + return ( + + + + + + + ) + } + + return + }} + + ) +} + +export function WithoutFormHandler() { + return ( + + {() => { + const existingData = { count: 1 } + + const Component = () => { + const { data, update } = Form.useData( + 'idependent-id', + existingData, + ) + + const increment = React.useCallback(() => { + update('/count', (count) => { + return count + 1 + }) + }, [update]) + + return ( +