@dnb/eufemia 10.21.0 → 10.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/cjs/components/aria-live/useAriaLive.d.ts +1 -1
- package/cjs/components/breadcrumb/Breadcrumb.d.ts +2 -2
- package/cjs/components/breadcrumb/Breadcrumb.js +3 -3
- package/cjs/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/cjs/components/breadcrumb/style/dnb-breadcrumb.css +7 -2
- package/cjs/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
- package/cjs/components/breadcrumb/style/dnb-breadcrumb.scss +10 -2
- package/cjs/components/button/Button.js +2 -2
- package/cjs/components/button/Button.js.map +1 -1
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.css +23 -11
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.min.css +3 -3
- package/cjs/components/button/style/themes/dnb-button-theme-sbanken.scss +30 -14
- package/cjs/components/card/style/dnb-card.css +11 -2
- package/cjs/components/card/style/dnb-card.min.css +1 -1
- package/cjs/components/card/style/dnb-card.scss +12 -2
- package/cjs/components/form-label/style/dnb-form-label.css +4 -1
- package/cjs/components/form-label/style/dnb-form-label.min.css +1 -1
- package/cjs/components/form-label/style/dnb-form-label.scss +5 -2
- package/cjs/components/global-status/GlobalStatus.d.ts +1 -1
- package/cjs/components/global-status/GlobalStatusProvider.d.ts +1 -1
- package/cjs/components/height-animation/HeightAnimationInstance.d.ts +5 -6
- package/cjs/components/height-animation/HeightAnimationInstance.js +12 -12
- package/cjs/components/height-animation/HeightAnimationInstance.js.map +1 -1
- package/cjs/components/height-animation/useHeightAnimation.js +11 -10
- package/cjs/components/height-animation/useHeightAnimation.js.map +1 -1
- package/cjs/components/input/Input.d.ts +1 -1
- package/cjs/components/pagination/InfinityScroller.d.ts +1 -1
- package/cjs/components/progress-indicator/ProgressIndicator.js +5 -7
- package/cjs/components/progress-indicator/ProgressIndicator.js.map +1 -1
- package/cjs/components/progress-indicator/ProgressIndicatorCircular.js +1 -1
- package/cjs/components/progress-indicator/ProgressIndicatorCircular.js.map +1 -1
- package/cjs/components/progress-indicator/ProgressIndicatorLinear.js +4 -4
- package/cjs/components/progress-indicator/ProgressIndicatorLinear.js.map +1 -1
- package/cjs/components/progress-indicator/style/dnb-progress-indicator.css +5 -2
- package/cjs/components/progress-indicator/style/dnb-progress-indicator.min.css +1 -1
- package/cjs/components/progress-indicator/style/dnb-progress-indicator.scss +5 -2
- package/cjs/components/space/SpacingHelper.d.ts +5 -5
- package/cjs/components/table/Table.js +2 -2
- package/cjs/components/table/Table.js.map +1 -1
- package/cjs/components/table/TableAccordion.js +40 -57
- package/cjs/components/table/TableAccordion.js.map +1 -1
- package/cjs/components/table/TableAccordionTd.d.ts +9 -0
- package/cjs/components/table/{TableAccordionContent.js → TableAccordionTd.js} +16 -54
- package/cjs/components/table/TableAccordionTd.js.map +1 -0
- package/cjs/components/table/TableAccordionTr.d.ts +13 -0
- package/cjs/components/table/TableAccordionTr.js +61 -0
- package/cjs/components/table/TableAccordionTr.js.map +1 -0
- package/cjs/components/table/TableContext.d.ts +2 -2
- package/cjs/components/table/TableContext.js +4 -3
- package/cjs/components/table/TableContext.js.map +1 -1
- package/cjs/components/table/TableTd.d.ts +2 -2
- package/cjs/components/table/TableTd.js +2 -2
- package/cjs/components/table/TableTd.js.map +1 -1
- package/cjs/components/table/TableTr.d.ts +6 -1
- package/cjs/components/table/TableTr.js +10 -5
- package/cjs/components/table/TableTr.js.map +1 -1
- package/cjs/components/table/style/dnb-table.css +84 -64
- package/cjs/components/table/style/dnb-table.min.css +1 -1
- package/cjs/components/table/style/dnb-table.scss +1 -1
- package/cjs/components/table/style/table-accordion.scss +62 -44
- package/cjs/components/table/style/table-td.scss +1 -1
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.css +10 -0
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.min.css +3 -1
- package/cjs/components/table/style/themes/dnb-table-theme-sbanken.scss +14 -0
- package/cjs/components/table/useTableAnimationHandler.d.ts +20 -0
- package/cjs/components/table/useTableAnimationHandler.js +73 -0
- package/cjs/components/table/useTableAnimationHandler.js.map +1 -0
- package/cjs/elements/blockquote/style/themes/dnb-blockquote-theme-sbanken.scss +1 -0
- package/cjs/extensions/forms/DataContext/Context.d.ts +1 -3
- package/cjs/extensions/forms/DataContext/Context.js.map +1 -1
- package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +1 -2
- package/cjs/extensions/forms/DataContext/Provider/Provider.js +1 -5
- package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -2
- package/cjs/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.css +2 -2
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -0
- package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +6 -0
- package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
- package/cjs/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +10 -2
- package/cjs/extensions/forms/Form/data-context/useData.d.ts +1 -1
- package/cjs/extensions/forms/Form/data-context/useData.js +1 -17
- package/cjs/extensions/forms/Form/data-context/useData.js.map +1 -1
- package/cjs/extensions/forms/Form/data-context/useError.d.ts +2 -1
- package/cjs/extensions/forms/Form/data-context/useError.js +4 -2
- package/cjs/extensions/forms/Form/data-context/useError.js.map +1 -1
- package/cjs/extensions/forms/Value/Number/Number.d.ts +2 -2
- package/cjs/extensions/forms/Value/Number/Number.js +1 -1
- package/cjs/extensions/forms/Value/Number/Number.js.map +1 -1
- package/cjs/extensions/forms/hooks/useDataValue.d.ts +4 -12
- package/cjs/extensions/forms/hooks/useDataValue.js +3 -3
- package/cjs/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/cjs/extensions/forms/hooks/useMounted.d.ts +2 -0
- package/cjs/extensions/forms/hooks/useMounted.js +19 -0
- package/cjs/extensions/forms/hooks/useMounted.js.map +1 -0
- package/cjs/extensions/forms/style/dnb-forms.css +8 -2
- package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
- package/cjs/extensions/forms/types.d.ts +2 -0
- package/cjs/extensions/forms/types.js.map +1 -1
- package/cjs/extensions/payment-card/utils/CardDesigns.d.ts +96 -96
- package/cjs/fragments/drawer-list/DrawerListHelpers.d.ts +52 -52
- package/cjs/shared/Eufemia.d.ts +1 -1
- package/cjs/shared/Eufemia.js +2 -2
- package/cjs/shared/Eufemia.js.map +1 -1
- package/cjs/shared/Theme.d.ts +7 -1
- package/cjs/shared/Theme.js +20 -7
- package/cjs/shared/Theme.js.map +1 -1
- package/cjs/shared/helpers/debounce.d.ts +37 -0
- package/cjs/shared/helpers/debounce.js +92 -0
- package/cjs/shared/helpers/debounce.js.map +1 -0
- package/cjs/shared/helpers/useSharedState.d.ts +1 -0
- package/cjs/shared/helpers/useSharedState.js +52 -20
- package/cjs/shared/helpers/useSharedState.js.map +1 -1
- package/cjs/shared/helpers/withCamelCaseProps.d.ts +7 -0
- package/cjs/shared/helpers/withCamelCaseProps.js.map +1 -1
- package/cjs/shared/helpers.d.ts +1 -25
- package/cjs/shared/helpers.js +15 -37
- package/cjs/shared/helpers.js.map +1 -1
- package/cjs/shared/useTheme.d.ts +1 -0
- package/cjs/style/dnb-ui-components.css +119 -73
- package/cjs/style/dnb-ui-components.min.css +3 -3
- package/cjs/style/dnb-ui-extensions.css +8 -2
- package/cjs/style/dnb-ui-extensions.min.css +1 -1
- package/cjs/style/dnb-ui-forms.css +8 -2
- package/cjs/style/dnb-ui-forms.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +127 -75
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -2
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -2
- package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.css +1 -0
- package/cjs/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +160 -86
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
- package/cjs/style/themes/theme-sbanken/sbanken-theme-elements.css +1 -0
- package/cjs/style/themes/theme-sbanken/sbanken-theme-elements.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +8 -2
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +8 -2
- package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/cjs/style/themes/theme-ui/prism/dnb-prism-theme.d.ts +3 -3
- package/cjs/style/themes/theme-ui/ui-theme-components.css +127 -75
- package/cjs/style/themes/theme-ui/ui-theme-components.min.css +3 -3
- package/cjs/style/themes/theme-ui/ui-theme-extensions.css +8 -2
- package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-ui/ui-theme-forms.css +8 -2
- package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
- package/components/aria-live/useAriaLive.d.ts +1 -1
- package/components/breadcrumb/Breadcrumb.d.ts +2 -2
- package/components/breadcrumb/Breadcrumb.js +3 -3
- package/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/components/breadcrumb/style/dnb-breadcrumb.css +7 -2
- package/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
- package/components/breadcrumb/style/dnb-breadcrumb.scss +10 -2
- package/components/button/Button.js +2 -2
- package/components/button/Button.js.map +1 -1
- package/components/button/style/themes/dnb-button-theme-sbanken.css +23 -11
- package/components/button/style/themes/dnb-button-theme-sbanken.min.css +3 -3
- package/components/button/style/themes/dnb-button-theme-sbanken.scss +30 -14
- package/components/card/style/dnb-card.css +11 -2
- package/components/card/style/dnb-card.min.css +1 -1
- package/components/card/style/dnb-card.scss +12 -2
- package/components/form-label/style/dnb-form-label.css +4 -1
- package/components/form-label/style/dnb-form-label.min.css +1 -1
- package/components/form-label/style/dnb-form-label.scss +5 -2
- package/components/global-status/GlobalStatus.d.ts +1 -1
- package/components/global-status/GlobalStatusProvider.d.ts +1 -1
- package/components/height-animation/HeightAnimationInstance.d.ts +5 -6
- package/components/height-animation/HeightAnimationInstance.js +12 -12
- package/components/height-animation/HeightAnimationInstance.js.map +1 -1
- package/components/height-animation/useHeightAnimation.js +11 -10
- package/components/height-animation/useHeightAnimation.js.map +1 -1
- package/components/input/Input.d.ts +1 -1
- package/components/pagination/InfinityScroller.d.ts +1 -1
- package/components/progress-indicator/ProgressIndicator.js +5 -7
- package/components/progress-indicator/ProgressIndicator.js.map +1 -1
- package/components/progress-indicator/ProgressIndicatorCircular.js +1 -1
- package/components/progress-indicator/ProgressIndicatorCircular.js.map +1 -1
- package/components/progress-indicator/ProgressIndicatorLinear.js +4 -4
- package/components/progress-indicator/ProgressIndicatorLinear.js.map +1 -1
- package/components/progress-indicator/style/dnb-progress-indicator.css +5 -2
- package/components/progress-indicator/style/dnb-progress-indicator.min.css +1 -1
- package/components/progress-indicator/style/dnb-progress-indicator.scss +5 -2
- package/components/space/SpacingHelper.d.ts +5 -5
- package/components/table/Table.js +1 -1
- package/components/table/Table.js.map +1 -1
- package/components/table/TableAccordion.js +38 -53
- package/components/table/TableAccordion.js.map +1 -1
- package/components/table/TableAccordionTd.d.ts +9 -0
- package/{es/components/table/TableAccordionContent.js → components/table/TableAccordionTd.js} +14 -48
- package/components/table/TableAccordionTd.js.map +1 -0
- package/components/table/TableAccordionTr.d.ts +13 -0
- package/components/table/TableAccordionTr.js +51 -0
- package/components/table/TableAccordionTr.js.map +1 -0
- package/components/table/TableContext.d.ts +2 -2
- package/components/table/TableContext.js +2 -2
- package/components/table/TableContext.js.map +1 -1
- package/components/table/TableTd.d.ts +2 -2
- package/components/table/TableTd.js +2 -2
- package/components/table/TableTd.js.map +1 -1
- package/components/table/TableTr.d.ts +6 -1
- package/components/table/TableTr.js +9 -4
- package/components/table/TableTr.js.map +1 -1
- package/components/table/style/dnb-table.css +84 -64
- package/components/table/style/dnb-table.min.css +1 -1
- package/components/table/style/dnb-table.scss +1 -1
- package/components/table/style/table-accordion.scss +62 -44
- package/components/table/style/table-td.scss +1 -1
- package/components/table/style/themes/dnb-table-theme-sbanken.css +10 -0
- package/components/table/style/themes/dnb-table-theme-sbanken.min.css +3 -1
- package/components/table/style/themes/dnb-table-theme-sbanken.scss +14 -0
- package/components/table/useTableAnimationHandler.d.ts +20 -0
- package/components/table/useTableAnimationHandler.js +63 -0
- package/components/table/useTableAnimationHandler.js.map +1 -0
- package/elements/blockquote/style/themes/dnb-blockquote-theme-sbanken.scss +1 -0
- package/es/components/aria-live/useAriaLive.d.ts +1 -1
- package/es/components/breadcrumb/Breadcrumb.d.ts +2 -2
- package/es/components/breadcrumb/Breadcrumb.js +3 -3
- package/es/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/es/components/breadcrumb/style/dnb-breadcrumb.css +7 -2
- package/es/components/breadcrumb/style/dnb-breadcrumb.min.css +1 -1
- package/es/components/breadcrumb/style/dnb-breadcrumb.scss +10 -2
- package/es/components/button/Button.js +2 -2
- package/es/components/button/Button.js.map +1 -1
- package/es/components/button/style/themes/dnb-button-theme-sbanken.css +23 -11
- package/es/components/button/style/themes/dnb-button-theme-sbanken.min.css +3 -3
- package/es/components/button/style/themes/dnb-button-theme-sbanken.scss +30 -14
- package/es/components/card/style/dnb-card.css +11 -2
- package/es/components/card/style/dnb-card.min.css +1 -1
- package/es/components/card/style/dnb-card.scss +12 -2
- package/es/components/form-label/style/dnb-form-label.css +4 -1
- package/es/components/form-label/style/dnb-form-label.min.css +1 -1
- package/es/components/form-label/style/dnb-form-label.scss +5 -2
- package/es/components/global-status/GlobalStatus.d.ts +1 -1
- package/es/components/global-status/GlobalStatusProvider.d.ts +1 -1
- package/es/components/height-animation/HeightAnimationInstance.d.ts +5 -6
- package/es/components/height-animation/HeightAnimationInstance.js +12 -12
- package/es/components/height-animation/HeightAnimationInstance.js.map +1 -1
- package/es/components/height-animation/useHeightAnimation.js +11 -10
- package/es/components/height-animation/useHeightAnimation.js.map +1 -1
- package/es/components/input/Input.d.ts +1 -1
- package/es/components/pagination/InfinityScroller.d.ts +1 -1
- package/es/components/progress-indicator/ProgressIndicator.js +5 -7
- package/es/components/progress-indicator/ProgressIndicator.js.map +1 -1
- package/es/components/progress-indicator/ProgressIndicatorCircular.js +1 -1
- package/es/components/progress-indicator/ProgressIndicatorCircular.js.map +1 -1
- package/es/components/progress-indicator/ProgressIndicatorLinear.js +4 -4
- package/es/components/progress-indicator/ProgressIndicatorLinear.js.map +1 -1
- package/es/components/progress-indicator/style/dnb-progress-indicator.css +5 -2
- package/es/components/progress-indicator/style/dnb-progress-indicator.min.css +1 -1
- package/es/components/progress-indicator/style/dnb-progress-indicator.scss +5 -2
- package/es/components/space/SpacingHelper.d.ts +5 -5
- package/es/components/table/Table.js +1 -1
- package/es/components/table/Table.js.map +1 -1
- package/es/components/table/TableAccordion.js +38 -53
- package/es/components/table/TableAccordion.js.map +1 -1
- package/es/components/table/TableAccordionTd.d.ts +9 -0
- package/{components/table/TableAccordionContent.js → es/components/table/TableAccordionTd.js} +14 -49
- package/es/components/table/TableAccordionTd.js.map +1 -0
- package/es/components/table/TableAccordionTr.d.ts +13 -0
- package/es/components/table/TableAccordionTr.js +51 -0
- package/es/components/table/TableAccordionTr.js.map +1 -0
- package/es/components/table/TableContext.d.ts +2 -2
- package/es/components/table/TableContext.js +2 -2
- package/es/components/table/TableContext.js.map +1 -1
- package/es/components/table/TableTd.d.ts +2 -2
- package/es/components/table/TableTd.js +2 -2
- package/es/components/table/TableTd.js.map +1 -1
- package/es/components/table/TableTr.d.ts +6 -1
- package/es/components/table/TableTr.js +9 -4
- package/es/components/table/TableTr.js.map +1 -1
- package/es/components/table/style/dnb-table.css +84 -64
- package/es/components/table/style/dnb-table.min.css +1 -1
- package/es/components/table/style/dnb-table.scss +1 -1
- package/es/components/table/style/table-accordion.scss +62 -44
- package/es/components/table/style/table-td.scss +1 -1
- package/es/components/table/style/themes/dnb-table-theme-sbanken.css +10 -0
- package/es/components/table/style/themes/dnb-table-theme-sbanken.min.css +3 -1
- package/es/components/table/style/themes/dnb-table-theme-sbanken.scss +14 -0
- package/es/components/table/useTableAnimationHandler.d.ts +20 -0
- package/es/components/table/useTableAnimationHandler.js +62 -0
- package/es/components/table/useTableAnimationHandler.js.map +1 -0
- package/es/elements/blockquote/style/themes/dnb-blockquote-theme-sbanken.scss +1 -0
- package/es/extensions/forms/DataContext/Context.d.ts +1 -3
- package/es/extensions/forms/DataContext/Context.js.map +1 -1
- package/es/extensions/forms/DataContext/Provider/Provider.d.ts +1 -2
- package/es/extensions/forms/DataContext/Provider/Provider.js +1 -5
- package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -2
- package/es/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.css +2 -2
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -0
- package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +6 -0
- package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
- package/es/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +10 -2
- package/es/extensions/forms/Form/data-context/useData.d.ts +1 -1
- package/es/extensions/forms/Form/data-context/useData.js +2 -18
- package/es/extensions/forms/Form/data-context/useData.js.map +1 -1
- package/es/extensions/forms/Form/data-context/useError.d.ts +2 -1
- package/es/extensions/forms/Form/data-context/useError.js +4 -2
- package/es/extensions/forms/Form/data-context/useError.js.map +1 -1
- package/es/extensions/forms/Value/Number/Number.d.ts +2 -2
- package/es/extensions/forms/Value/Number/Number.js +1 -1
- package/es/extensions/forms/Value/Number/Number.js.map +1 -1
- package/es/extensions/forms/hooks/useDataValue.d.ts +4 -12
- package/es/extensions/forms/hooks/useDataValue.js +5 -5
- package/es/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/es/extensions/forms/hooks/useMounted.d.ts +2 -0
- package/es/extensions/forms/hooks/useMounted.js +14 -0
- package/es/extensions/forms/hooks/useMounted.js.map +1 -0
- package/es/extensions/forms/style/dnb-forms.css +8 -2
- package/es/extensions/forms/style/dnb-forms.min.css +1 -1
- package/es/extensions/forms/types.d.ts +2 -0
- package/es/extensions/forms/types.js.map +1 -1
- package/es/extensions/payment-card/utils/CardDesigns.d.ts +96 -96
- package/es/fragments/drawer-list/DrawerListHelpers.d.ts +52 -52
- package/es/shared/Eufemia.d.ts +1 -1
- package/es/shared/Eufemia.js +2 -2
- package/es/shared/Eufemia.js.map +1 -1
- package/es/shared/Theme.d.ts +7 -1
- package/es/shared/Theme.js +20 -7
- package/es/shared/Theme.js.map +1 -1
- package/es/shared/helpers/debounce.d.ts +37 -0
- package/es/shared/helpers/debounce.js +76 -0
- package/es/shared/helpers/debounce.js.map +1 -0
- package/es/shared/helpers/useSharedState.d.ts +1 -0
- package/es/shared/helpers/useSharedState.js +49 -20
- package/es/shared/helpers/useSharedState.js.map +1 -1
- package/es/shared/helpers/withCamelCaseProps.d.ts +7 -0
- package/es/shared/helpers/withCamelCaseProps.js.map +1 -1
- package/es/shared/helpers.d.ts +1 -25
- package/es/shared/helpers.js +1 -29
- package/es/shared/helpers.js.map +1 -1
- package/es/shared/useTheme.d.ts +1 -0
- package/es/style/dnb-ui-components.css +119 -73
- package/es/style/dnb-ui-components.min.css +3 -3
- package/es/style/dnb-ui-extensions.css +8 -2
- package/es/style/dnb-ui-extensions.min.css +1 -1
- package/es/style/dnb-ui-forms.css +8 -2
- package/es/style/dnb-ui-forms.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-components.css +127 -75
- package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -2
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -2
- package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-basis.css +1 -0
- package/es/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-components.css +160 -86
- package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
- package/es/style/themes/theme-sbanken/sbanken-theme-elements.css +1 -0
- package/es/style/themes/theme-sbanken/sbanken-theme-elements.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +8 -2
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +8 -2
- package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/es/style/themes/theme-ui/prism/dnb-prism-theme.d.ts +3 -3
- package/es/style/themes/theme-ui/ui-theme-components.css +127 -75
- package/es/style/themes/theme-ui/ui-theme-components.min.css +3 -3
- package/es/style/themes/theme-ui/ui-theme-extensions.css +8 -2
- package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-ui/ui-theme-forms.css +8 -2
- package/es/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
- package/esm/dnb-ui-basis.min.mjs +1 -1
- package/esm/dnb-ui-components.min.mjs +1 -1
- package/esm/dnb-ui-elements.min.mjs +1 -1
- package/esm/dnb-ui-extensions.min.mjs +3 -3
- package/esm/dnb-ui-lib.min.mjs +1 -1
- package/extensions/forms/DataContext/Context.d.ts +1 -3
- package/extensions/forms/DataContext/Context.js.map +1 -1
- package/extensions/forms/DataContext/Provider/Provider.d.ts +1 -2
- package/extensions/forms/DataContext/Provider/Provider.js +1 -5
- package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlockContext.d.ts +1 -2
- package/extensions/forms/FieldBlock/FieldBlockContext.js.map +1 -1
- package/extensions/forms/FieldBlock/style/dnb-field-block.css +2 -2
- package/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/extensions/forms/FieldBlock/style/dnb-field-block.scss +2 -0
- package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.css +6 -0
- package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.min.css +1 -1
- package/extensions/forms/Form/ButtonRow/style/dnb-form-button-row.scss +10 -2
- package/extensions/forms/Form/data-context/useData.d.ts +1 -1
- package/extensions/forms/Form/data-context/useData.js +2 -18
- package/extensions/forms/Form/data-context/useData.js.map +1 -1
- package/extensions/forms/Form/data-context/useError.d.ts +2 -1
- package/extensions/forms/Form/data-context/useError.js +4 -2
- package/extensions/forms/Form/data-context/useError.js.map +1 -1
- package/extensions/forms/Value/Number/Number.d.ts +2 -2
- package/extensions/forms/Value/Number/Number.js +1 -1
- package/extensions/forms/Value/Number/Number.js.map +1 -1
- package/extensions/forms/hooks/useDataValue.d.ts +4 -12
- package/extensions/forms/hooks/useDataValue.js +5 -5
- package/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/extensions/forms/hooks/useMounted.d.ts +2 -0
- package/extensions/forms/hooks/useMounted.js +14 -0
- package/extensions/forms/hooks/useMounted.js.map +1 -0
- package/extensions/forms/style/dnb-forms.css +8 -2
- package/extensions/forms/style/dnb-forms.min.css +1 -1
- package/extensions/forms/types.d.ts +2 -0
- package/extensions/forms/types.js.map +1 -1
- package/extensions/payment-card/utils/CardDesigns.d.ts +96 -96
- package/fragments/drawer-list/DrawerListHelpers.d.ts +52 -52
- package/package.json +1 -1
- package/shared/Eufemia.d.ts +1 -1
- package/shared/Eufemia.js +2 -2
- package/shared/Eufemia.js.map +1 -1
- package/shared/Theme.d.ts +7 -1
- package/shared/Theme.js +20 -7
- package/shared/Theme.js.map +1 -1
- package/shared/helpers/debounce.d.ts +37 -0
- package/shared/helpers/debounce.js +83 -0
- package/shared/helpers/debounce.js.map +1 -0
- package/shared/helpers/useSharedState.d.ts +1 -0
- package/shared/helpers/useSharedState.js +49 -20
- package/shared/helpers/useSharedState.js.map +1 -1
- package/shared/helpers/withCamelCaseProps.d.ts +7 -0
- package/shared/helpers/withCamelCaseProps.js.map +1 -1
- package/shared/helpers.d.ts +1 -25
- package/shared/helpers.js +3 -36
- package/shared/helpers.js.map +1 -1
- package/shared/useTheme.d.ts +1 -0
- package/style/dnb-ui-components.css +119 -73
- package/style/dnb-ui-components.min.css +3 -3
- package/style/dnb-ui-extensions.css +8 -2
- package/style/dnb-ui-extensions.min.css +1 -1
- package/style/dnb-ui-forms.css +8 -2
- package/style/dnb-ui-forms.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-components.css +127 -75
- package/style/themes/theme-eiendom/eiendom-theme-components.min.css +3 -3
- package/style/themes/theme-eiendom/eiendom-theme-extensions.css +8 -2
- package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-forms.css +8 -2
- package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-basis.css +1 -0
- package/style/themes/theme-sbanken/sbanken-theme-basis.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-components.css +160 -86
- package/style/themes/theme-sbanken/sbanken-theme-components.min.css +8 -6
- package/style/themes/theme-sbanken/sbanken-theme-elements.css +1 -0
- package/style/themes/theme-sbanken/sbanken-theme-elements.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-extensions.css +8 -2
- package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-forms.css +8 -2
- package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/style/themes/theme-ui/prism/dnb-prism-theme.d.ts +3 -3
- package/style/themes/theme-ui/ui-theme-components.css +127 -75
- package/style/themes/theme-ui/ui-theme-components.min.css +3 -3
- package/style/themes/theme-ui/ui-theme-extensions.css +8 -2
- package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/style/themes/theme-ui/ui-theme-forms.css +8 -2
- package/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
- package/umd/dnb-ui-basis.min.js +1 -1
- package/umd/dnb-ui-components.min.js +1 -1
- package/umd/dnb-ui-elements.min.js +1 -1
- package/umd/dnb-ui-extensions.min.js +3 -3
- package/umd/dnb-ui-lib.min.js +1 -1
- package/cjs/components/table/TableAccordionContent.d.ts +0 -18
- package/cjs/components/table/TableAccordionContent.js.map +0 -1
- package/components/table/TableAccordionContent.d.ts +0 -18
- package/components/table/TableAccordionContent.js.map +0 -1
- package/es/components/table/TableAccordionContent.d.ts +0 -18
- package/es/components/table/TableAccordionContent.js.map +0 -1
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Ajv } from '../utils/ajv';
|
|
3
|
-
import { AllJSONSchemaVersions, CustomErrorMessagesWithPaths } from '../types';
|
|
4
|
-
export type Path = string;
|
|
5
|
-
export type Identifier = string;
|
|
3
|
+
import { AllJSONSchemaVersions, CustomErrorMessagesWithPaths, Path } from '../types';
|
|
6
4
|
type HandleSubmitProps = {
|
|
7
5
|
formElement?: HTMLFormElement;
|
|
8
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","handlePathChange","updateDataValue","validateData","handleSubmit","scrollToTop","showAllErrors","setShowAllErrors","mountedFieldPaths","handleMountField","handleUnMountField","hasErrors","hasFieldError","setValueWithError","setProps","ajvInstance","contextErrorMessages","_isInsideFormElement","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n} from '../types'\n\
|
|
1
|
+
{"version":3,"file":"Context.js","names":["React","makeAjvInstance","defaultContextState","hasContext","data","undefined","schema","handlePathChange","updateDataValue","validateData","handleSubmit","scrollToTop","showAllErrors","setShowAllErrors","mountedFieldPaths","handleMountField","handleUnMountField","hasErrors","hasFieldError","setValueWithError","setProps","ajvInstance","contextErrorMessages","_isInsideFormElement","Context","createContext"],"sources":["../../../../../src/extensions/forms/DataContext/Context.ts"],"sourcesContent":["import React from 'react'\nimport { Ajv, makeAjvInstance } from '../utils/ajv'\nimport {\n AllJSONSchemaVersions,\n CustomErrorMessagesWithPaths,\n Path,\n} from '../types'\n\ntype HandleSubmitProps = {\n formElement?: HTMLFormElement\n}\n\nexport interface ContextState {\n hasContext: boolean\n /** The dataset for the form / form steps */\n data: any\n /** Should the form validate data before submitting? */\n errors?: Record<string, Error>\n /** Will set autoComplete=\"on\" on each nested Field.String and Field.Number */\n autoComplete?: boolean\n handlePathChange: (path: Path, value: any) => void\n updateDataValue: (\n path: Path,\n value: any,\n props: { disabled: boolean }\n ) => void\n validateData: () => void\n handleSubmit: (props?: HandleSubmitProps) => any\n scrollToTop: () => void\n // Error status\n showAllErrors: boolean\n setShowAllErrors: (showAllErrors: boolean) => void\n // Mounted fields - Components telling the provider what fields is on screen at any time\n mountedFieldPaths: string[]\n handleMountField: (path: Path) => void\n handleUnMountField: (path: Path) => void\n setValueWithError: (path: Path, hasError: boolean) => void\n setProps: (path: Path, props: any) => void\n hasErrors: () => boolean\n hasFieldError: (path: Path) => boolean\n ajvInstance: Ajv\n contextErrorMessages: CustomErrorMessagesWithPaths\n schema: AllJSONSchemaVersions\n _isInsideFormElement?: boolean\n}\n\nexport const defaultContextState: ContextState = {\n hasContext: false,\n data: undefined,\n schema: undefined,\n handlePathChange: () => null,\n updateDataValue: () => null,\n validateData: () => null,\n handleSubmit: () => null,\n scrollToTop: () => null,\n showAllErrors: false,\n setShowAllErrors: () => null,\n mountedFieldPaths: [],\n handleMountField: () => null,\n handleUnMountField: () => null,\n hasErrors: () => false,\n hasFieldError: () => false,\n setValueWithError: () => null,\n setProps: () => null,\n ajvInstance: makeAjvInstance(),\n contextErrorMessages: undefined,\n _isInsideFormElement: false,\n}\n\nconst Context = React.createContext<ContextState>(defaultContextState)\n\nexport default Context\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAcC,eAAe,QAAQ,cAAc;AA6CnD,OAAO,MAAMC,mBAAiC,GAAG;EAC/CC,UAAU,EAAE,KAAK;EACjBC,IAAI,EAAEC,SAAS;EACfC,MAAM,EAAED,SAAS;EACjBE,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,eAAe,EAAEA,CAAA,KAAM,IAAI;EAC3BC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,YAAY,EAAEA,CAAA,KAAM,IAAI;EACxBC,WAAW,EAAEA,CAAA,KAAM,IAAI;EACvBC,aAAa,EAAE,KAAK;EACpBC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,iBAAiB,EAAE,EAAE;EACrBC,gBAAgB,EAAEA,CAAA,KAAM,IAAI;EAC5BC,kBAAkB,EAAEA,CAAA,KAAM,IAAI;EAC9BC,SAAS,EAAEA,CAAA,KAAM,KAAK;EACtBC,aAAa,EAAEA,CAAA,KAAM,KAAK;EAC1BC,iBAAiB,EAAEA,CAAA,KAAM,IAAI;EAC7BC,QAAQ,EAAEA,CAAA,KAAM,IAAI;EACpBC,WAAW,EAAEpB,eAAe,CAAC,CAAC;EAC9BqB,oBAAoB,EAAEjB,SAAS;EAC/BkB,oBAAoB,EAAE;AACxB,CAAC;AAED,MAAMC,OAAO,GAAGxB,KAAK,CAACyB,aAAa,CAAevB,mBAAmB,CAAC;AAEtE,eAAesB,OAAO"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { JsonObject } from 'json-pointer';
|
|
3
3
|
import { Ajv } from '../../utils/ajv';
|
|
4
|
-
import { CustomErrorMessagesWithPaths, AllJSONSchemaVersions, FieldProps } from '../../types';
|
|
5
|
-
import { Path } from '../Context';
|
|
4
|
+
import { CustomErrorMessagesWithPaths, AllJSONSchemaVersions, FieldProps, Path } from '../../types';
|
|
6
5
|
export type UpdateDataValue = (path: Path, data: unknown) => void;
|
|
7
6
|
export type FilterDataHandler<Data> = (data: Data, filter: FilterData) => Partial<Data>;
|
|
8
7
|
export type FilterData = (path: Path, value: any, props: FieldProps) => boolean | undefined;
|
|
@@ -122,10 +122,6 @@ export default function Provider(_ref) {
|
|
|
122
122
|
shared: sharedData.data,
|
|
123
123
|
hasUsedInitialData: false
|
|
124
124
|
});
|
|
125
|
-
const countRef = useRef(0);
|
|
126
|
-
if (countRef.current++ > 100) {
|
|
127
|
-
throw new Error('countRef.current: ' + countRef.current);
|
|
128
|
-
}
|
|
129
125
|
internalDataRef.current = useMemo(() => {
|
|
130
126
|
if (id && initialData && !sharedData.data) {
|
|
131
127
|
sharedData.update(initialData);
|
|
@@ -145,7 +141,7 @@ export default function Provider(_ref) {
|
|
|
145
141
|
return data;
|
|
146
142
|
}
|
|
147
143
|
return internalDataRef.current;
|
|
148
|
-
}, [
|
|
144
|
+
}, [data, id, initialData, sharedData]);
|
|
149
145
|
useLayoutEffect(() => {
|
|
150
146
|
if (id && initialData && !sharedData.data) {
|
|
151
147
|
extendSharedData === null || extendSharedData === void 0 ? void 0 : extendSharedData(initialData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","pointer","makeAjvInstance","ajvErrorsToFormErrors","useMountEffect","useUpdateEffect","useSharedState","Context","structuredClone","useLayoutEffect","window","useEffect","isArrayJsonPointer","Provider","_ref","_sharedAttachments$da","id","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","ajvInstance","filterData","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","forceUpdate","undefined","console","error","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","valuesWithErrorRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","validateDataNow","_ajvValidatorRef$curr","call","errors","validateData","hasFieldError","path","_errorsRef$current","Boolean","includes","hasErrors","find","setValueWithError","withError","addListPath","removeListPath","filterDataHandler","filter","arguments","length","filtered","_objectSpread","Object","entries","fieldPropsRef","forEach","_ref2","props","exists","has","result","get","remove","setProps","sharedData","sharedAttachments","updateSharedData","update","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","countRef","Error","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","set","_window$sessionStorag2","setItem","stringify","handlePathChange","handleMountField","handleUnMountField","_fieldPropsRef$curren","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmit","formElement","resetForm","_formElement$reset","reset","removeItem","clearData","_ajvRef$current","compile","_ajvRef$current2","createElement","hasContext","mountedFieldPaths","paths","concat","thisPath"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, { useRef, useMemo, useCallback, useReducer } from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n} from '../../types'\nimport useMountEffect from '../../hooks/useMountEffect'\nimport useUpdateEffect from '../../hooks/useUpdateEffect'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport Context, { ContextState, Path } from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport type UpdateDataValue = (path: Path, data: unknown) => void\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterData = (\n path: Path,\n value: any,\n props: FieldProps\n) => boolean | undefined\n\nexport type OnSubmitReturn = {\n /** Will remove browser-side stored autocomplete data */\n resetForm: () => void\n /** Will empty the whole internal data set of the form */\n clearData: () => void\n}\n\nexport type OnSubmit<Data = JsonObject> = (\n data: Partial<Data>,\n { resetForm, clearData }: OnSubmitReturn\n) => void\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Partial<Data>\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Partial<Data>\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the internal data context based on your criteria: `(path, value, props) => !props?.disabled`. It will iterate on each data entry.\n */\n filterData?: FilterData\n /**\n * Change handler for the whole data set\n */\n onChange?: (data: Data) => void\n /**\n * Change handler for each value\n */\n onPathChange?: (path: Path, value: any) => void\n /**\n * Submit called, data was valid (if validation available)\n */\n onSubmit?: OnSubmit\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>({\n id,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n ajvInstance,\n filterData,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n}: Props<Data>) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<string, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n\n // - Errors reported by fields, based on their direct validation rules\n const valuesWithErrorRef = useRef<Path[]>([])\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Partial<Data>>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const validateDataNow = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n validateDataNow()\n forceUpdate()\n }, [validateDataNow])\n\n // - Error handling\n const hasFieldError = useCallback((path: Path) => {\n return Boolean(\n errorsRef.current?.[path] !== undefined ||\n valuesWithErrorRef.current.includes(path)\n )\n }, [])\n const hasErrors = useCallback(() => {\n return Boolean(\n mountedFieldPathsRef.current.find((path) => hasFieldError(path))\n )\n }, [hasFieldError])\n\n /**\n * Sets the error state for a specific path\n */\n const setValueWithError = useCallback(\n (path: Path, withError: boolean) => {\n if (withError !== valuesWithErrorRef.current.includes(path)) {\n // The boolean error state for the target value was changed\n valuesWithErrorRef.current = withError\n ? addListPath(valuesWithErrorRef.current, path)\n : removeListPath(valuesWithErrorRef.current, path)\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData) => {\n if (filter) {\n const filtered = { ...data }\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n const result = filter(\n path,\n exists ? pointer.get(data, path) : undefined,\n props\n )\n if (result === false && exists) {\n pointer.remove(filtered, path)\n }\n })\n\n return filtered\n }\n\n return data\n },\n [filterData]\n )\n const fieldPropsRef = useRef<Record<string, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n fieldPropsRef.current[path] = props\n },\n []\n )\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterData']\n hasErrors?: () => boolean\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const updateSharedData = sharedData.update\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n const countRef = useRef(0)\n if (countRef.current++ > 100) {\n throw new Error('countRef.current: ' + countRef.current)\n }\n\n internalDataRef.current = useMemo(() => {\n // Update the shared state, if initialData is given and no shared state is available\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [id, data, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n validateDataNow()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({ filterDataHandler, hasErrors })\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n filterData,\n filterDataHandler,\n rerenderUseDataHook,\n hasErrors,\n id,\n extendAttachment,\n ])\n\n /**\n * Update the data set\n */\n const updateDataValue: UpdateDataValue = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n if (id) {\n updateSharedData?.(newData)\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n\n internalDataRef.current = newData\n\n if (sessionStorageId && typeof window !== 'undefined') {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(newData)\n )\n }\n\n forceUpdate()\n\n return newData\n },\n [\n filterData,\n id,\n sessionStorageId,\n rerenderUseDataHook,\n updateSharedData,\n ]\n )\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: UpdateDataValue = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n onPathChange?.(path, value)\n\n const newData = updateDataValue(path, value)\n\n onChange?.(newData as Data)\n\n showAllErrorsRef.current = false\n\n validateData()\n },\n [onPathChange, updateDataValue, onChange, validateData]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n if (fieldPropsRef.current?.[path]) {\n delete fieldPropsRef.current[path]\n }\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n ({ formElement = null } = {}) => {\n if (!hasErrors()) {\n const resetForm = () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n }\n const clearData = () => {\n internalDataRef.current = {}\n forceUpdate()\n }\n\n onSubmit?.(filterDataHandler(internalDataRef.current as Data), {\n resetForm,\n clearData,\n })\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n } else {\n setShowAllErrors(true)\n onSubmitRequest?.()\n }\n\n return internalDataRef.current\n },\n [\n hasErrors,\n onSubmit,\n filterDataHandler,\n scrollTopOnSubmit,\n sessionStorageId,\n scrollToTop,\n setShowAllErrors,\n onSubmitRequest,\n ]\n )\n\n // - ajv validator routines\n\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n return (\n <Context.Provider\n value={{\n hasContext: true,\n data: internalDataRef.current,\n ...rest,\n handlePathChange,\n updateDataValue,\n validateData,\n handleSubmit,\n scrollToTop,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n setShowAllErrors,\n mountedFieldPaths: mountedFieldPathsRef.current,\n handleMountField,\n handleUnMountField,\n hasErrors,\n hasFieldError,\n setValueWithError,\n setProps,\n ajvInstance: ajvRef.current,\n schema,\n contextErrorMessages,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nfunction addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nfunction removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Provider.js","names":["React","useRef","useMemo","useCallback","useReducer","pointer","makeAjvInstance","ajvErrorsToFormErrors","useMountEffect","useUpdateEffect","useSharedState","Context","structuredClone","useLayoutEffect","window","useEffect","isArrayJsonPointer","Provider","_ref","_sharedAttachments$da","id","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","ajvInstance","filterData","errorMessages","contextErrorMessages","children","rest","_objectWithoutProperties","_excluded","forceUpdate","undefined","console","error","ajvRef","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","valuesWithErrorRef","initialData","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","ajvValidatorRef","validateDataNow","_ajvValidatorRef$curr","call","errors","validateData","hasFieldError","path","_errorsRef$current","Boolean","includes","hasErrors","find","setValueWithError","withError","addListPath","removeListPath","filterDataHandler","filter","arguments","length","filtered","_objectSpread","Object","entries","fieldPropsRef","forEach","_ref2","props","exists","has","result","get","remove","setProps","sharedData","sharedAttachments","updateSharedData","update","extendSharedData","extend","extendAttachment","rerenderUseDataHook","cacheRef","shared","hasUsedInitialData","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","set","_window$sessionStorag2","setItem","stringify","handlePathChange","handleMountField","handleUnMountField","_fieldPropsRef$curren","scrollToTop","_window","_window$scrollTo","scrollTo","top","behavior","handleSubmit","formElement","resetForm","_formElement$reset","reset","removeItem","clearData","_ajvRef$current","compile","_ajvRef$current2","createElement","hasContext","mountedFieldPaths","paths","concat","thisPath"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, { useRef, useMemo, useCallback, useReducer } from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv/dist/2020'\nimport {\n Ajv,\n makeAjvInstance,\n ajvErrorsToFormErrors,\n} from '../../utils/ajv'\nimport {\n FormError,\n CustomErrorMessagesWithPaths,\n AllJSONSchemaVersions,\n FieldProps,\n Path,\n} from '../../types'\nimport useMountEffect from '../../hooks/useMountEffect'\nimport useUpdateEffect from '../../hooks/useUpdateEffect'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport Context, { ContextState } from '../Context'\n\n/**\n * Deprecated, as it is supported by all major browsers and Node.js >=v18\n * So its a question of time, when we will remove this polyfill\n */\nimport structuredClone from '@ungap/structured-clone'\n\n// SSR warning fix: https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nconst useLayoutEffect =\n typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect\n\nexport type UpdateDataValue = (path: Path, data: unknown) => void\n\nexport type FilterDataHandler<Data> = (\n data: Data,\n filter: FilterData\n) => Partial<Data>\nexport type FilterData = (\n path: Path,\n value: any,\n props: FieldProps\n) => boolean | undefined\n\nexport type OnSubmitReturn = {\n /** Will remove browser-side stored autocomplete data */\n resetForm: () => void\n /** Will empty the whole internal data set of the form */\n clearData: () => void\n}\n\nexport type OnSubmit<Data = JsonObject> = (\n data: Partial<Data>,\n { resetForm, clearData }: OnSubmitReturn\n) => void\n\nexport interface Props<Data extends JsonObject> {\n /**\n * Unique ID to communicate with the hook Form.useData\n */\n id?: string\n /**\n * Default source data, only used if no other source is available, and not leading to updates if changed after mount\n */\n defaultData?: Partial<Data>\n /**\n * Source data, will be used instead of defaultData, and leading to updates if changed after mount\n */\n data?: Partial<Data>\n /**\n * JSON Schema to validate the data against.\n */\n schema?: AllJSONSchemaVersions\n /**\n * Custom Ajv instance, if you want to use your own\n */\n ajvInstance?: Ajv\n /**\n * Custom error messages for the whole data set\n */\n errorMessages?: CustomErrorMessagesWithPaths\n /**\n * Filter the internal data context based on your criteria: `(path, value, props) => !props?.disabled`. It will iterate on each data entry.\n */\n filterData?: FilterData\n /**\n * Change handler for the whole data set\n */\n onChange?: (data: Data) => void\n /**\n * Change handler for each value\n */\n onPathChange?: (path: Path, value: any) => void\n /**\n * Submit called, data was valid (if validation available)\n */\n onSubmit?: OnSubmit\n /**\n * Submit was requested, but data was invalid\n */\n onSubmitRequest?: () => void\n /**\n * Scroll to top on submit\n */\n scrollTopOnSubmit?: boolean\n /**\n * Key for caching the data in session storage\n */\n sessionStorageId?: string\n children: React.ReactNode\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>({\n id,\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\n ajvInstance,\n filterData,\n errorMessages: contextErrorMessages,\n children,\n ...rest\n}: Props<Data>) {\n const [, forceUpdate] = useReducer(() => ({}), {})\n // Prop error handling\n if (data !== undefined && sessionStorageId !== undefined) {\n console.error(\n 'Providing both data and sessionStorageId could lead to competing data sources. To provide default data to use only before anything is changed in the interface, use defaultData.'\n )\n }\n\n // - Ajv\n const ajvRef = useRef<Ajv>(makeAjvInstance(ajvInstance))\n // - Paths\n const mountedFieldPathsRef = useRef<Path[]>([])\n // - Errors from provider validation (the whole data set)\n const errorsRef = useRef<Record<string, FormError> | undefined>()\n const showAllErrorsRef = useRef<boolean>(false)\n const setShowAllErrors = useCallback((showAllErrors: boolean) => {\n showAllErrorsRef.current = showAllErrors\n forceUpdate()\n }, [])\n\n // - Errors reported by fields, based on their direct validation rules\n const valuesWithErrorRef = useRef<Path[]>([])\n\n // - Data\n const initialData = useMemo<Data>(() => {\n if (sessionStorageId && typeof window !== 'undefined') {\n const sessionDataJSON =\n window.sessionStorage?.getItem(sessionStorageId)\n if (sessionDataJSON) {\n return JSON.parse(sessionDataJSON)\n }\n }\n return data ?? defaultData\n // eslint-disable-next-line react-hooks/exhaustive-deps -- Avoid triggering code that should only run initially\n }, [])\n const internalDataRef = useRef<Partial<Data>>(initialData)\n\n // - Validator\n const ajvValidatorRef = useRef<ValidateFunction>()\n const validateDataNow = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvValidatorRef.current?.(internalDataRef.current)) {\n // Errors found\n errorsRef.current = ajvErrorsToFormErrors(\n ajvValidatorRef.current.errors\n )\n } else {\n errorsRef.current = undefined\n }\n }, [])\n const validateData = useCallback(() => {\n if (!ajvValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n validateDataNow()\n forceUpdate()\n }, [validateDataNow])\n\n // - Error handling\n const hasFieldError = useCallback((path: Path) => {\n return Boolean(\n errorsRef.current?.[path] !== undefined ||\n valuesWithErrorRef.current.includes(path)\n )\n }, [])\n const hasErrors = useCallback(() => {\n return Boolean(\n mountedFieldPathsRef.current.find((path) => hasFieldError(path))\n )\n }, [hasFieldError])\n\n /**\n * Sets the error state for a specific path\n */\n const setValueWithError = useCallback(\n (path: Path, withError: boolean) => {\n if (withError !== valuesWithErrorRef.current.includes(path)) {\n // The boolean error state for the target value was changed\n valuesWithErrorRef.current = withError\n ? addListPath(valuesWithErrorRef.current, path)\n : removeListPath(valuesWithErrorRef.current, path)\n forceUpdate()\n }\n },\n []\n )\n\n /**\n * Filter the data set based on the filterData function\n */\n const filterDataHandler = useCallback(\n (data: Data, filter = filterData) => {\n if (filter) {\n const filtered = { ...data }\n Object.entries(fieldPropsRef.current).forEach(([path, props]) => {\n const exists = pointer.has(data, path)\n const result = filter(\n path,\n exists ? pointer.get(data, path) : undefined,\n props\n )\n if (result === false && exists) {\n pointer.remove(filtered, path)\n }\n })\n\n return filtered\n }\n\n return data\n },\n [filterData]\n )\n const fieldPropsRef = useRef<Record<string, FieldProps>>({})\n const setProps = useCallback(\n (path: Path, props: Record<string, unknown>) => {\n fieldPropsRef.current[path] = props\n },\n []\n )\n\n // - Shared state\n const sharedData = useSharedState<Data>(id)\n const sharedAttachments = useSharedState<{\n filterDataHandler?: Props<Data>['filterData']\n hasErrors?: () => boolean\n rerenderUseDataHook?: () => void\n }>(id + '-attachments')\n\n const updateSharedData = sharedData.update\n const extendSharedData = sharedData.extend\n const extendAttachment = sharedAttachments.extend\n const rerenderUseDataHook = sharedAttachments.data?.rerenderUseDataHook\n\n const cacheRef = useRef({\n data,\n schema,\n shared: sharedData.data,\n hasUsedInitialData: false,\n })\n\n internalDataRef.current = useMemo(() => {\n // NB: \"sharedData.data\" is only available on a rerender.\n // Update the shared state, if initialData is given and no shared state is available.\n // We do almost the same later in a useLayoutEffect, but we need to do it here as well, so we set the data as early as possible.\n if (id && initialData && !sharedData.data) {\n sharedData.update(initialData)\n }\n\n // Merge both internal data and the shared state, if it both where given\n if (\n id &&\n initialData &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data &&\n internalDataRef.current === initialData\n ) {\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // Use shared state if no initial and initial data, and the shared state exists\n if (\n id &&\n !initialData &&\n !internalDataRef.current &&\n sharedData.data &&\n cacheRef.current.shared === sharedData.data\n ) {\n return sharedData.data\n }\n\n // Merge the internal data with the shared state, if the shared was updated and not the same as internal data\n if (\n id &&\n sharedData.data &&\n cacheRef.current.shared !== sharedData.data &&\n sharedData.data !== internalDataRef.current\n ) {\n cacheRef.current.shared = sharedData.data\n return {\n ...internalDataRef.current,\n ...sharedData.data,\n }\n }\n\n // When external data has changed, update the internal data\n if (data !== cacheRef.current.data) {\n cacheRef.current.data = data\n return data\n }\n\n return internalDataRef.current\n }, [data, id, initialData, sharedData])\n\n useLayoutEffect(() => {\n // Set the shared state, if initialData was given\n if (id && initialData && !sharedData.data) {\n extendSharedData?.(initialData)\n }\n }, [id, initialData, extendSharedData, sharedData.data])\n\n useMemo(() => {\n validateDataNow()\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [internalDataRef.current]) // run validation when internal data has changed\n\n useLayoutEffect(() => {\n if (id) {\n extendAttachment?.({ filterDataHandler, hasErrors })\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n }, [\n filterData,\n filterDataHandler,\n rerenderUseDataHook,\n hasErrors,\n id,\n extendAttachment,\n ])\n\n /**\n * Update the data set\n */\n const updateDataValue: UpdateDataValue = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n const givenData = (\n path === '/'\n ? // When setting the root of the data, the whole data set should be the new value\n value\n : // For sub paths, use the the existing data set (or empty array/object), but modify it below (since pointer.set is not immutable)\n internalDataRef.current ??\n (path.match(isArrayJsonPointer) ? [] : {})\n ) as Data\n\n let newData: Data = null\n try {\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n newData = structuredClone(givenData)\n } catch (e) {\n newData = givenData\n }\n\n if (path !== '/') {\n pointer.set(newData, path, value)\n }\n\n if (id) {\n updateSharedData?.(newData)\n if (filterData) {\n rerenderUseDataHook?.()\n }\n }\n\n internalDataRef.current = newData\n\n if (sessionStorageId && typeof window !== 'undefined') {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(newData)\n )\n }\n\n forceUpdate()\n\n return newData\n },\n [\n filterData,\n id,\n sessionStorageId,\n rerenderUseDataHook,\n updateSharedData,\n ]\n )\n\n /**\n * Update the data set on user interaction\n */\n const handlePathChange: UpdateDataValue = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n onPathChange?.(path, value)\n\n const newData = updateDataValue(path, value)\n\n onChange?.(newData as Data)\n\n showAllErrorsRef.current = false\n\n validateData()\n },\n [onPathChange, updateDataValue, onChange, validateData]\n )\n\n // - Mounted fields\n const handleMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: Path) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\n )\n if (fieldPropsRef.current?.[path]) {\n delete fieldPropsRef.current[path]\n }\n }, [])\n\n // - Features\n const scrollToTop = useCallback(() => {\n if (typeof window !== 'undefined') {\n window?.scrollTo?.({ top: 0, behavior: 'smooth' })\n }\n }, [])\n\n /**\n * Request to submit the whole form\n */\n const handleSubmit = useCallback<ContextState['handleSubmit']>(\n ({ formElement = null } = {}) => {\n if (!hasErrors()) {\n const resetForm = () => {\n formElement?.reset?.()\n\n if (typeof window !== 'undefined') {\n if (sessionStorageId) {\n window.sessionStorage.removeItem(sessionStorageId)\n }\n }\n\n forceUpdate() // in order to fill \"empty fields\" again with their internal states\n }\n const clearData = () => {\n internalDataRef.current = {}\n forceUpdate()\n }\n\n onSubmit?.(filterDataHandler(internalDataRef.current as Data), {\n resetForm,\n clearData,\n })\n\n if (scrollTopOnSubmit) {\n scrollToTop()\n }\n } else {\n setShowAllErrors(true)\n onSubmitRequest?.()\n }\n\n return internalDataRef.current\n },\n [\n hasErrors,\n onSubmit,\n filterDataHandler,\n scrollTopOnSubmit,\n sessionStorageId,\n scrollToTop,\n setShowAllErrors,\n onSubmitRequest,\n ]\n )\n\n // - ajv validator routines\n\n useMountEffect(() => {\n if (schema) {\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n }\n\n // Validate the initial data\n validateData()\n })\n\n useUpdateEffect(() => {\n if (schema && schema !== cacheRef.current.schema) {\n cacheRef.current.schema = schema\n ajvValidatorRef.current = ajvRef.current?.compile(schema)\n\n validateData()\n forceUpdate()\n }\n }, [schema, validateData, forceUpdate])\n\n return (\n <Context.Provider\n value={{\n hasContext: true,\n data: internalDataRef.current,\n ...rest,\n handlePathChange,\n updateDataValue,\n validateData,\n handleSubmit,\n scrollToTop,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n setShowAllErrors,\n mountedFieldPaths: mountedFieldPathsRef.current,\n handleMountField,\n handleUnMountField,\n hasErrors,\n hasFieldError,\n setValueWithError,\n setProps,\n ajvInstance: ajvRef.current,\n schema,\n contextErrorMessages,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n\ntype PathList = string[]\n\nfunction addListPath(paths: PathList, path: Path): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nfunction removeListPath(paths: PathList, path: Path): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBlock.js","names":["React","useMemo","useContext","useCallback","useRef","useReducer","useEffect","classnames","SharedContext","FieldBlockContext","Space","FormLabel","FormStatus","Ul","Li","convertJsxToString","findElementInChildren","useId","FormError","useUnmountEffect","states","FieldBlock","props","nestedFieldBlockContext","className","forId","layout","composition","label","labelDescription","asFieldset","info","warning","error","errorProp","disabled","width","contentWidth","labelSize","contentClassName","children","rest","_objectWithoutProperties","_excluded","blockId","id","wasUpdated","forceUpdate","mountedFieldsRef","stateRecordRef","fieldStateIdsRef","contentsRef","hasInitiallyErrorProp","Boolean","setInternalRecord","stateId","identifier","type","current","existingIndex","findIndex","item","_objectSpread","push","setFieldState","showFieldError","show","map","showInitially","statusContent","state","statesWithMessages","Object","entries","flatMap","_ref","reduce","acc","cur","existing","find","message","getMessage","messages","undefined","width_element","no_animation","process","env","NODE_ENV","globalThis","IS_TEST","found","msg","filter","_ref2","i","arr","length","text","createElement","CombineMessages","mainClasses","gridClasses","enableFieldset","useEnableFieldset","labelProps","element","space","top","bottom","size","Provider","value","hasErrorProp","_extends","Fragment","ref","_ref3","result","count","child","_child$props","_child$type","_ref4","sharedContext","tr","translation","Forms","fieldErrorSummary","fieldStateSummary","_ref5","key","Error","toString","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlock.tsx"],"sourcesContent":["import React, {\n useMemo,\n useContext,\n useCallback,\n useRef,\n useReducer,\n useEffect,\n} from 'react'\nimport classnames from 'classnames'\nimport SharedContext from '../../../shared/Context'\nimport FieldBlockContext, {\n StateWithMessage,\n StatesWithMessages,\n FieldErrorIdsRef,\n MountedFieldsRef,\n StateRecord,\n StateMessage,\n StateTypes,\n StatusContent,\n FieldBlockContextProps,\n} from './FieldBlockContext'\nimport { Identifier } from '../DataContext/Context'\nimport { Space, FormLabel, FormStatus } from '../../../components'\nimport { Ul, Li } from '../../../elements'\nimport {\n convertJsxToString,\n findElementInChildren,\n} from '../../../shared/component-helper'\nimport useId from '../hooks/useId'\nimport { ComponentProps, FieldProps, FormError } from '../types'\nimport type { FormLabelAllProps } from '../../../components/FormLabel'\nimport useUnmountEffect from '../hooks/useUnmountEffect'\n\nexport const states: Array<StateTypes> = ['error', 'info', 'warning']\n\nexport type Props = Pick<\n FieldProps,\n | keyof ComponentProps\n | 'layout'\n | 'label'\n | 'labelDescription'\n | 'info'\n | 'warning'\n | 'error'\n | 'disabled'\n> & {\n /** The id to link a element with */\n forId?: string\n /** Use true if you have more than one form element */\n asFieldset?: boolean\n /** Defines the layout of nested fields */\n composition?: FieldBlockContextProps['composition']\n /** Width of outer block element */\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n /** Width of contents block, while label etc can be wider if space is available */\n contentWidth?: 'small' | 'medium' | 'large' | 'stretch'\n contentClassName?: string\n /** Typography size */\n labelSize?: 'medium' | 'large'\n children: React.ReactNode\n} & React.HTMLAttributes<HTMLDivElement>\n\nfunction FieldBlock(props: Props) {\n const nestedFieldBlockContext = useContext(FieldBlockContext)\n\n const {\n className,\n forId,\n layout = 'vertical',\n composition,\n label,\n labelDescription,\n asFieldset,\n info,\n warning,\n error: errorProp,\n disabled,\n width,\n contentWidth,\n labelSize,\n contentClassName,\n children,\n ...rest\n } = props\n\n const blockId = useId(props.id)\n const [wasUpdated, forceUpdate] = useReducer(() => ({}), {})\n const mountedFieldsRef = useRef<MountedFieldsRef>({})\n const stateRecordRef = useRef<StateRecord>({})\n const fieldStateIdsRef = useRef<FieldErrorIdsRef>(null)\n const contentsRef = useRef<HTMLDivElement>(null)\n const hasInitiallyErrorProp = useMemo(() => {\n return Boolean(errorProp)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const setInternalRecord = useCallback((props) => {\n const { stateId, identifier, type } = props\n\n if (!stateRecordRef.current[identifier]) {\n stateRecordRef.current[identifier] = []\n }\n\n fieldStateIdsRef.current = { error: null, warning: null, info: null }\n\n const existingIndex = stateRecordRef.current[identifier].findIndex(\n (item) => {\n return item.stateId === stateId && item.type === type\n }\n )\n\n if (existingIndex > -1) {\n stateRecordRef.current[identifier][existingIndex] = {\n ...stateRecordRef.current[identifier][existingIndex],\n ...props,\n }\n } else {\n stateRecordRef.current[identifier].push(props)\n }\n }, [])\n\n const setFieldState = useCallback(\n (props) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setFieldState(props)\n return\n }\n\n setInternalRecord(props)\n\n forceUpdate()\n },\n [nestedFieldBlockContext, setInternalRecord]\n )\n\n const showFieldError = useCallback(\n (identifier: Identifier, show: boolean) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.showFieldError(identifier, show)\n return\n }\n\n if (stateRecordRef.current[identifier]) {\n stateRecordRef.current[identifier] = stateRecordRef.current[\n identifier\n ].map((item) => {\n if (item.showInitially) {\n return item\n }\n\n return {\n ...item,\n show,\n }\n })\n\n forceUpdate()\n }\n },\n [nestedFieldBlockContext]\n )\n\n const statusContent = useMemo(() => {\n if (errorProp) {\n setInternalRecord({\n identifier: blockId,\n showInitially: hasInitiallyErrorProp,\n type: 'error',\n state: errorProp,\n })\n }\n\n if (warning) {\n setInternalRecord({\n identifier: blockId,\n showInitially: true,\n type: 'warning',\n state: warning,\n })\n }\n\n if (info) {\n setInternalRecord({\n identifier: blockId,\n showInitially: true,\n type: 'info',\n state: info,\n })\n }\n\n const statesWithMessages: Array<StatesWithMessages> =\n // 1. Prepare the states for later use\n Object.entries(stateRecordRef.current)\n .flatMap(([identifier, states]) =>\n states.map((props) => {\n return {\n identifier,\n ...props,\n }\n })\n )\n\n // 2. Take states and group the same type together\n .reduce((acc, cur) => {\n const existing = acc.find((item) => {\n return item.type === cur.type\n })\n\n const message = getMessage(cur)\n\n if (existing) {\n existing.messages.push({\n ...cur,\n message,\n })\n } else {\n acc.push({\n ...cur,\n state: undefined,\n messages: [\n {\n ...cur,\n message,\n },\n ],\n })\n }\n\n return acc\n }, [] as Array<StatesWithMessages>)\n\n // 3. Return the grouped states/messages\n return states.reduce((acc, type) => {\n const id = `${props.id || forId || blockId}-form-status--${type}`\n acc[type] = {\n id,\n label,\n state: type === 'warning' ? 'warn' : type,\n width_element: contentsRef,\n\n // Enable animation only in the browser and not in tests\n no_animation:\n process.env.NODE_ENV === 'test'\n ? true\n : typeof globalThis !== 'undefined'\n ? globalThis.IS_TEST === true\n : false,\n }\n\n const found = statesWithMessages.find((item) => {\n return item.type === type\n })\n\n if (found?.messages) {\n // Hide/remove messages that should be hidden and are not marked as to be shown initially\n const messages = found.messages\n .map((msg) => {\n if (msg.type === 'error') {\n if (!msg.showInitially && !msg.show) {\n msg.message = null\n }\n }\n\n return msg\n })\n .filter(({ message }) => message)\n .reduce((acc, msg, i, arr) => {\n const existingIndex = arr.findIndex((item) => {\n return (\n convertJsxToString(item.message) ===\n convertJsxToString(msg.message)\n )\n })\n\n // Remove duplicates, use the first found message\n if (existingIndex === i) {\n acc.push(msg)\n }\n\n return acc\n }, [])\n\n // Combine the messages and put them in an ul/li list\n if (messages.length > 0) {\n acc[type] = {\n ...acc[type],\n text: <CombineMessages type={type} messages={messages} />,\n }\n\n fieldStateIdsRef.current[type] = id\n } else {\n fieldStateIdsRef.current[type] = undefined\n }\n }\n\n return acc\n }, {}) as StatusContent\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n info,\n warning,\n errorProp,\n nestedFieldBlockContext,\n setInternalRecord,\n blockId,\n wasUpdated, // wasUpdated is needed to get the current errors\n ])\n\n // Handle the error prop from outside\n useEffect(() => {\n if (!nestedFieldBlockContext) {\n showFieldError(blockId, Boolean(errorProp))\n }\n }, [errorProp, blockId, showFieldError, nestedFieldBlockContext])\n\n useUnmountEffect(() => () => {\n mountedFieldsRef.current = {}\n stateRecordRef.current = {}\n })\n\n const mainClasses = classnames(\n 'dnb-forms-field-block',\n width !== undefined && `dnb-forms-field-block--width-${width}`,\n className\n )\n const gridClasses = classnames(\n 'dnb-forms-field-block__grid',\n `dnb-forms-field-block--layout-${layout}`\n )\n\n // A child component with a label was found, use fieldset/legend instead of div/label\n const enableFieldset = useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n })\n\n const labelProps: FormLabelAllProps = {\n element: enableFieldset ? 'legend' : 'label',\n forId: enableFieldset ? undefined : forId,\n space: { top: 0, bottom: 'x-small' },\n size: labelSize,\n disabled,\n }\n\n return (\n <FieldBlockContext.Provider\n value={{\n setFieldState,\n showFieldError,\n hasErrorProp: Boolean(errorProp),\n fieldStateIdsRef,\n mountedFieldsRef,\n composition,\n }}\n >\n <Space\n element={enableFieldset ? 'fieldset' : 'div'} // use fieldset and legend to enhance a11y\n className={mainClasses}\n {...rest}\n >\n <div className={gridClasses}>\n {labelDescription ? (\n <div className=\"dnb-forms-field-block__label\">\n {label || labelDescription ? (\n <FormLabel {...labelProps}>\n {label}\n {labelDescription && (\n <span className=\"dnb-forms-field-block__label-description\">\n {labelDescription}\n </span>\n )}\n </FormLabel>\n ) : (\n <> </>\n )}\n </div>\n ) : (\n label && <FormLabel {...labelProps}>{label}</FormLabel>\n )}\n\n <div className=\"dnb-forms-field-block__status\">\n <FormStatus {...statusContent?.error} />\n <FormStatus {...statusContent?.warning} />\n <FormStatus {...statusContent?.info} />\n </div>\n\n <div\n className={classnames(\n 'dnb-forms-field-block__contents',\n contentWidth !== undefined &&\n `dnb-forms-field-block__contents--width-${contentWidth}`,\n composition !== undefined &&\n `dnb-forms-field-block__contents__composition--${\n composition === true ? 'horizontal' : composition\n }`,\n contentClassName\n )}\n ref={contentsRef}\n >\n {children}\n </div>\n </div>\n </Space>\n </FieldBlockContext.Provider>\n )\n}\n\nfunction useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n}) {\n return useMemo(() => {\n if (asFieldset === false) {\n return false\n }\n\n let result = asFieldset\n\n if (label && !result && !nestedFieldBlockContext) {\n let count = 0\n\n findElementInChildren(children, (child: React.ReactElement) => {\n if (\n child?.props?.label ||\n child?.type?.['_formElement'] === true\n ) {\n count++\n }\n if (count > 1) {\n return (result = true)\n }\n })\n }\n\n return Boolean(result)\n }, [asFieldset, children, label, nestedFieldBlockContext])\n}\n\nfunction CombineMessages({\n type,\n messages,\n}: {\n type: StateTypes\n messages: Array<StateWithMessage>\n}) {\n const sharedContext = useContext(SharedContext)\n const tr = sharedContext?.translation.Forms\n\n if (messages.length === 1) {\n return <>{messages[0].message}</>\n }\n\n return (\n <>\n {type === 'error' ? tr.fieldErrorSummary : tr.fieldStateSummary}\n <Ul>\n {messages.map(({ message }, i) => {\n return <Li key={i}>{message}</Li>\n })}\n </Ul>\n </>\n )\n}\n\nfunction getMessage(item: Partial<StateWithMessage>): StateMessage {\n const { state } = item\n\n return ((state instanceof Error && state.message) ||\n (state instanceof FormError && state.message) ||\n state?.toString() ||\n state) as StateMessage\n}\n\nFieldBlock._supportsSpacingProps = true\n\nexport default FieldBlock\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FieldBlock.js","names":["React","useMemo","useContext","useCallback","useRef","useReducer","useEffect","classnames","SharedContext","FieldBlockContext","Space","FormLabel","FormStatus","Ul","Li","convertJsxToString","findElementInChildren","useId","FormError","useUnmountEffect","states","FieldBlock","props","nestedFieldBlockContext","className","forId","layout","composition","label","labelDescription","asFieldset","info","warning","error","errorProp","disabled","width","contentWidth","labelSize","contentClassName","children","rest","_objectWithoutProperties","_excluded","blockId","id","wasUpdated","forceUpdate","mountedFieldsRef","stateRecordRef","fieldStateIdsRef","contentsRef","hasInitiallyErrorProp","Boolean","setInternalRecord","stateId","identifier","type","current","existingIndex","findIndex","item","_objectSpread","push","setFieldState","showFieldError","show","map","showInitially","statusContent","state","statesWithMessages","Object","entries","flatMap","_ref","reduce","acc","cur","existing","find","message","getMessage","messages","undefined","width_element","no_animation","process","env","NODE_ENV","globalThis","IS_TEST","found","msg","filter","_ref2","i","arr","length","text","createElement","CombineMessages","mainClasses","gridClasses","enableFieldset","useEnableFieldset","labelProps","element","space","top","bottom","size","Provider","value","hasErrorProp","_extends","Fragment","ref","_ref3","result","count","child","_child$props","_child$type","_ref4","sharedContext","tr","translation","Forms","fieldErrorSummary","fieldStateSummary","_ref5","key","Error","toString","_supportsSpacingProps"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlock.tsx"],"sourcesContent":["import React, {\n useMemo,\n useContext,\n useCallback,\n useRef,\n useReducer,\n useEffect,\n} from 'react'\nimport classnames from 'classnames'\nimport SharedContext from '../../../shared/Context'\nimport FieldBlockContext, {\n StateWithMessage,\n StatesWithMessages,\n FieldErrorIdsRef,\n MountedFieldsRef,\n StateRecord,\n StateMessage,\n StateTypes,\n StatusContent,\n FieldBlockContextProps,\n} from './FieldBlockContext'\nimport { Space, FormLabel, FormStatus } from '../../../components'\nimport { Ul, Li } from '../../../elements'\nimport {\n convertJsxToString,\n findElementInChildren,\n} from '../../../shared/component-helper'\nimport useId from '../hooks/useId'\nimport {\n ComponentProps,\n FieldProps,\n FormError,\n Identifier,\n} from '../types'\nimport type { FormLabelAllProps } from '../../../components/FormLabel'\nimport useUnmountEffect from '../hooks/useUnmountEffect'\n\nexport const states: Array<StateTypes> = ['error', 'info', 'warning']\n\nexport type Props = Pick<\n FieldProps,\n | keyof ComponentProps\n | 'layout'\n | 'label'\n | 'labelDescription'\n | 'info'\n | 'warning'\n | 'error'\n | 'disabled'\n> & {\n /** The id to link a element with */\n forId?: string\n /** Use true if you have more than one form element */\n asFieldset?: boolean\n /** Defines the layout of nested fields */\n composition?: FieldBlockContextProps['composition']\n /** Width of outer block element */\n width?: false | 'small' | 'medium' | 'large' | 'stretch'\n /** Width of contents block, while label etc can be wider if space is available */\n contentWidth?: 'small' | 'medium' | 'large' | 'stretch'\n contentClassName?: string\n /** Typography size */\n labelSize?: 'medium' | 'large'\n children: React.ReactNode\n} & React.HTMLAttributes<HTMLDivElement>\n\nfunction FieldBlock(props: Props) {\n const nestedFieldBlockContext = useContext(FieldBlockContext)\n\n const {\n className,\n forId,\n layout = 'vertical',\n composition,\n label,\n labelDescription,\n asFieldset,\n info,\n warning,\n error: errorProp,\n disabled,\n width,\n contentWidth,\n labelSize,\n contentClassName,\n children,\n ...rest\n } = props\n\n const blockId = useId(props.id)\n const [wasUpdated, forceUpdate] = useReducer(() => ({}), {})\n const mountedFieldsRef = useRef<MountedFieldsRef>({})\n const stateRecordRef = useRef<StateRecord>({})\n const fieldStateIdsRef = useRef<FieldErrorIdsRef>(null)\n const contentsRef = useRef<HTMLDivElement>(null)\n const hasInitiallyErrorProp = useMemo(() => {\n return Boolean(errorProp)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const setInternalRecord = useCallback((props) => {\n const { stateId, identifier, type } = props\n\n if (!stateRecordRef.current[identifier]) {\n stateRecordRef.current[identifier] = []\n }\n\n fieldStateIdsRef.current = { error: null, warning: null, info: null }\n\n const existingIndex = stateRecordRef.current[identifier].findIndex(\n (item) => {\n return item.stateId === stateId && item.type === type\n }\n )\n\n if (existingIndex > -1) {\n stateRecordRef.current[identifier][existingIndex] = {\n ...stateRecordRef.current[identifier][existingIndex],\n ...props,\n }\n } else {\n stateRecordRef.current[identifier].push(props)\n }\n }, [])\n\n const setFieldState = useCallback(\n (props) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.setFieldState(props)\n return\n }\n\n setInternalRecord(props)\n\n forceUpdate()\n },\n [nestedFieldBlockContext, setInternalRecord]\n )\n\n const showFieldError = useCallback(\n (identifier: Identifier, show: boolean) => {\n if (nestedFieldBlockContext) {\n // If this FieldBlock is inside another one, forward the call to the outer one\n nestedFieldBlockContext.showFieldError(identifier, show)\n return\n }\n\n if (stateRecordRef.current[identifier]) {\n stateRecordRef.current[identifier] = stateRecordRef.current[\n identifier\n ].map((item) => {\n if (item.showInitially) {\n return item\n }\n\n return {\n ...item,\n show,\n }\n })\n\n forceUpdate()\n }\n },\n [nestedFieldBlockContext]\n )\n\n const statusContent = useMemo(() => {\n if (errorProp) {\n setInternalRecord({\n identifier: blockId,\n showInitially: hasInitiallyErrorProp,\n type: 'error',\n state: errorProp,\n })\n }\n\n if (warning) {\n setInternalRecord({\n identifier: blockId,\n showInitially: true,\n type: 'warning',\n state: warning,\n })\n }\n\n if (info) {\n setInternalRecord({\n identifier: blockId,\n showInitially: true,\n type: 'info',\n state: info,\n })\n }\n\n const statesWithMessages: Array<StatesWithMessages> =\n // 1. Prepare the states for later use\n Object.entries(stateRecordRef.current)\n .flatMap(([identifier, states]) =>\n states.map((props) => {\n return {\n identifier,\n ...props,\n }\n })\n )\n\n // 2. Take states and group the same type together\n .reduce((acc, cur) => {\n const existing = acc.find((item) => {\n return item.type === cur.type\n })\n\n const message = getMessage(cur)\n\n if (existing) {\n existing.messages.push({\n ...cur,\n message,\n })\n } else {\n acc.push({\n ...cur,\n state: undefined,\n messages: [\n {\n ...cur,\n message,\n },\n ],\n })\n }\n\n return acc\n }, [] as Array<StatesWithMessages>)\n\n // 3. Return the grouped states/messages\n return states.reduce((acc, type) => {\n const id = `${props.id || forId || blockId}-form-status--${type}`\n acc[type] = {\n id,\n label,\n state: type === 'warning' ? 'warn' : type,\n width_element: contentsRef,\n\n // Enable animation only in the browser and not in tests\n no_animation:\n process.env.NODE_ENV === 'test'\n ? true\n : typeof globalThis !== 'undefined'\n ? globalThis.IS_TEST === true\n : false,\n }\n\n const found = statesWithMessages.find((item) => {\n return item.type === type\n })\n\n if (found?.messages) {\n // Hide/remove messages that should be hidden and are not marked as to be shown initially\n const messages = found.messages\n .map((msg) => {\n if (msg.type === 'error') {\n if (!msg.showInitially && !msg.show) {\n msg.message = null\n }\n }\n\n return msg\n })\n .filter(({ message }) => message)\n .reduce((acc, msg, i, arr) => {\n const existingIndex = arr.findIndex((item) => {\n return (\n convertJsxToString(item.message) ===\n convertJsxToString(msg.message)\n )\n })\n\n // Remove duplicates, use the first found message\n if (existingIndex === i) {\n acc.push(msg)\n }\n\n return acc\n }, [])\n\n // Combine the messages and put them in an ul/li list\n if (messages.length > 0) {\n acc[type] = {\n ...acc[type],\n text: <CombineMessages type={type} messages={messages} />,\n }\n\n fieldStateIdsRef.current[type] = id\n } else {\n fieldStateIdsRef.current[type] = undefined\n }\n }\n\n return acc\n }, {}) as StatusContent\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n info,\n warning,\n errorProp,\n nestedFieldBlockContext,\n setInternalRecord,\n blockId,\n wasUpdated, // wasUpdated is needed to get the current errors\n ])\n\n // Handle the error prop from outside\n useEffect(() => {\n if (!nestedFieldBlockContext) {\n showFieldError(blockId, Boolean(errorProp))\n }\n }, [errorProp, blockId, showFieldError, nestedFieldBlockContext])\n\n useUnmountEffect(() => () => {\n mountedFieldsRef.current = {}\n stateRecordRef.current = {}\n })\n\n const mainClasses = classnames(\n 'dnb-forms-field-block',\n width !== undefined && `dnb-forms-field-block--width-${width}`,\n className\n )\n const gridClasses = classnames(\n 'dnb-forms-field-block__grid',\n `dnb-forms-field-block--layout-${layout}`\n )\n\n // A child component with a label was found, use fieldset/legend instead of div/label\n const enableFieldset = useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n })\n\n const labelProps: FormLabelAllProps = {\n element: enableFieldset ? 'legend' : 'label',\n forId: enableFieldset ? undefined : forId,\n space: { top: 0, bottom: 'x-small' },\n size: labelSize,\n disabled,\n }\n\n return (\n <FieldBlockContext.Provider\n value={{\n setFieldState,\n showFieldError,\n hasErrorProp: Boolean(errorProp),\n fieldStateIdsRef,\n mountedFieldsRef,\n composition,\n }}\n >\n <Space\n element={enableFieldset ? 'fieldset' : 'div'} // use fieldset and legend to enhance a11y\n className={mainClasses}\n {...rest}\n >\n <div className={gridClasses}>\n {labelDescription ? (\n <div className=\"dnb-forms-field-block__label\">\n {label || labelDescription ? (\n <FormLabel {...labelProps}>\n {label}\n {labelDescription && (\n <span className=\"dnb-forms-field-block__label-description\">\n {labelDescription}\n </span>\n )}\n </FormLabel>\n ) : (\n <> </>\n )}\n </div>\n ) : (\n label && <FormLabel {...labelProps}>{label}</FormLabel>\n )}\n\n <div className=\"dnb-forms-field-block__status\">\n <FormStatus {...statusContent?.error} />\n <FormStatus {...statusContent?.warning} />\n <FormStatus {...statusContent?.info} />\n </div>\n\n <div\n className={classnames(\n 'dnb-forms-field-block__contents',\n contentWidth !== undefined &&\n `dnb-forms-field-block__contents--width-${contentWidth}`,\n composition !== undefined &&\n `dnb-forms-field-block__contents__composition--${\n composition === true ? 'horizontal' : composition\n }`,\n contentClassName\n )}\n ref={contentsRef}\n >\n {children}\n </div>\n </div>\n </Space>\n </FieldBlockContext.Provider>\n )\n}\n\nfunction useEnableFieldset({\n label,\n asFieldset,\n children,\n nestedFieldBlockContext,\n}) {\n return useMemo(() => {\n if (asFieldset === false) {\n return false\n }\n\n let result = asFieldset\n\n if (label && !result && !nestedFieldBlockContext) {\n let count = 0\n\n findElementInChildren(children, (child: React.ReactElement) => {\n if (\n child?.props?.label ||\n child?.type?.['_formElement'] === true\n ) {\n count++\n }\n if (count > 1) {\n return (result = true)\n }\n })\n }\n\n return Boolean(result)\n }, [asFieldset, children, label, nestedFieldBlockContext])\n}\n\nfunction CombineMessages({\n type,\n messages,\n}: {\n type: StateTypes\n messages: Array<StateWithMessage>\n}) {\n const sharedContext = useContext(SharedContext)\n const tr = sharedContext?.translation.Forms\n\n if (messages.length === 1) {\n return <>{messages[0].message}</>\n }\n\n return (\n <>\n {type === 'error' ? tr.fieldErrorSummary : tr.fieldStateSummary}\n <Ul>\n {messages.map(({ message }, i) => {\n return <Li key={i}>{message}</Li>\n })}\n </Ul>\n </>\n )\n}\n\nfunction getMessage(item: Partial<StateWithMessage>): StateMessage {\n const { state } = item\n\n return ((state instanceof Error && state.message) ||\n (state instanceof FormError && state.message) ||\n state?.toString() ||\n state) as StateMessage\n}\n\nFieldBlock._supportsSpacingProps = true\n\nexport default FieldBlock\n"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { FieldProps } from '../types';
|
|
3
|
-
import type { Identifier } from '../DataContext/Context';
|
|
2
|
+
import type { FieldProps, Identifier } from '../types';
|
|
4
3
|
export type FieldErrorIdsRef = Record<StateTypes, string>;
|
|
5
4
|
export type MountedFieldsRef = Record<Identifier, boolean>;
|
|
6
5
|
export type StateTypes = 'error' | 'warning' | 'info';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBlockContext.js","names":["React","FieldBlockContext","createContext","undefined"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlockContext.ts"],"sourcesContent":["import React from 'react'\nimport { FieldProps
|
|
1
|
+
{"version":3,"file":"FieldBlockContext.js","names":["React","FieldBlockContext","createContext","undefined"],"sources":["../../../../../src/extensions/forms/FieldBlock/FieldBlockContext.ts"],"sourcesContent":["import React from 'react'\nimport type { FieldProps, Identifier } from '../types'\n\nexport type FieldErrorIdsRef = Record<StateTypes, string>\nexport type MountedFieldsRef = Record<Identifier, boolean>\nexport type StateTypes = 'error' | 'warning' | 'info'\nexport type StateContent =\n | FieldProps<unknown>['error']\n | FieldProps<unknown>['warning']\n | FieldProps<unknown>['info']\nexport type StateBasis = {\n identifier: Identifier\n type: StateTypes\n state: StateContent\n stateId?: string\n showInitially?: boolean\n show?: boolean\n}\nexport type StateRecord = Record<\n Identifier,\n Array<Omit<StateBasis, 'identifier'>>\n>\nexport type StateMessage = React.ReactNode\nexport type StateWithMessage = StateBasis & {\n message: StateMessage\n}\nexport type StatesWithMessages = StateBasis & {\n messages: Array<StateWithMessage>\n}\nexport type StatusContentState = { id: string; text: React.ReactNode }\nexport type StatusContent = {\n error: StatusContentState\n warning: StatusContentState\n info: StatusContentState\n}\n\nexport type FieldBlockContextProps = {\n setFieldState?: ({\n identifier,\n type,\n stateId,\n state,\n showInitially,\n show,\n }: StateBasis) => void\n showFieldError?: (identifier: Identifier, showError: boolean) => void\n hasErrorProp?: boolean\n composition?: true\n fieldStateIdsRef?: React.MutableRefObject<FieldErrorIdsRef>\n mountedFieldsRef?: React.MutableRefObject<MountedFieldsRef>\n}\n\nconst FieldBlockContext = React.createContext<\n FieldBlockContextProps | undefined\n>(undefined)\n\nexport default FieldBlockContext\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAoDzB,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,aAAa,CAE3CC,SAAS,CAAC;AAEZ,eAAeF,iBAAiB"}
|
|
@@ -38,10 +38,10 @@ fieldset.dnb-forms-field-block:not([class*=space__left]) {
|
|
|
38
38
|
display: grid;
|
|
39
39
|
}
|
|
40
40
|
@media screen and (max-width: 40em) {
|
|
41
|
-
.dnb-forms-field-block__grid {
|
|
41
|
+
.dnb-forms-field-block--layout-vertical .dnb-forms-field-block__grid {
|
|
42
42
|
flex-wrap: wrap;
|
|
43
43
|
}
|
|
44
|
-
.dnb-forms-field-block__grid > .dnb-form-label {
|
|
44
|
+
.dnb-forms-field-block--layout-vertical .dnb-forms-field-block__grid > .dnb-form-label {
|
|
45
45
|
margin-bottom: 0.5rem;
|
|
46
46
|
margin-top: 0.5rem;
|
|
47
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--forms-field-width--small:5rem;--forms-field-width--medium:11rem;--forms-field-width--large:21rem}@media screen and (max-width:15em){.dnb-forms-field-number .dnb-input__shell,.dnb-forms-field-string .dnb-input__shell{width:90%}}fieldset.dnb-forms-field-block{border:none;padding:0}fieldset.dnb-forms-field-block:not([class*=space__top]){margin-top:0}fieldset.dnb-forms-field-block:not([class*=space__right]){margin-right:0}fieldset.dnb-forms-field-block:not([class*=space__bottom]){margin-bottom:0}fieldset.dnb-forms-field-block:not([class*=space__left]){margin-left:0}.dnb-forms-field-block{width:100%}.dnb-forms-field-block__grid{display:grid}@media screen and (max-width:40em){.dnb-forms-field-block__grid{flex-wrap:wrap}.dnb-forms-field-block__grid>.dnb-form-label{margin-bottom:.5rem;margin-top:.5rem}}.dnb-forms-field-block--layout-vertical{grid-template-areas:"label" "contents" "status";grid-template-columns:auto}.dnb-forms-field-block--layout-horizontal{grid-template-areas:"label contents" "status status";grid-template-columns:fit-content(100%) auto}.dnb-forms-field-block--width-stretch{flex-grow:1}@media screen and (min-width:25em){.dnb-forms-field-block--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__label{align-items:center;display:flex;flex-flow:row;grid-area:label;justify-content:space-between}.dnb-forms-field-block__label-description{margin-left:.3em}.dnb-forms-field-block__status{grid-area:status}.dnb-forms-field-block__status .dnb-form-status__shell{margin-top:.5rem}@media screen and (max-width:15em){.dnb-forms-field-block__status{width:90%}}.dnb-forms-field-block__contents{grid-area:contents;width:100%}.dnb-forms-field-block__contents--width-stretch{width:100%}@media screen and (min-width:25em){.dnb-forms-field-block__contents--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block__contents--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block__contents--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__contents__composition--vertical{display:flex;flex-flow:column;row-gap:var(--spacing-small)}.dnb-forms-field-block__contents__composition--horizontal{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row}@media screen and (min-width:25em){.dnb-forms-field-block__contents__composition--horizontal{align-items:flex-end}}@media screen and (max-width:25em){.dnb-forms-field-block__contents__composition--horizontal{flex-flow:column;row-gap:var(--spacing-x-small)}}
|
|
1
|
+
:root{--forms-field-width--small:5rem;--forms-field-width--medium:11rem;--forms-field-width--large:21rem}@media screen and (max-width:15em){.dnb-forms-field-number .dnb-input__shell,.dnb-forms-field-string .dnb-input__shell{width:90%}}fieldset.dnb-forms-field-block{border:none;padding:0}fieldset.dnb-forms-field-block:not([class*=space__top]){margin-top:0}fieldset.dnb-forms-field-block:not([class*=space__right]){margin-right:0}fieldset.dnb-forms-field-block:not([class*=space__bottom]){margin-bottom:0}fieldset.dnb-forms-field-block:not([class*=space__left]){margin-left:0}.dnb-forms-field-block{width:100%}.dnb-forms-field-block__grid{display:grid}@media screen and (max-width:40em){.dnb-forms-field-block--layout-vertical .dnb-forms-field-block__grid{flex-wrap:wrap}.dnb-forms-field-block--layout-vertical .dnb-forms-field-block__grid>.dnb-form-label{margin-bottom:.5rem;margin-top:.5rem}}.dnb-forms-field-block--layout-vertical{grid-template-areas:"label" "contents" "status";grid-template-columns:auto}.dnb-forms-field-block--layout-horizontal{grid-template-areas:"label contents" "status status";grid-template-columns:fit-content(100%) auto}.dnb-forms-field-block--width-stretch{flex-grow:1}@media screen and (min-width:25em){.dnb-forms-field-block--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__label{align-items:center;display:flex;flex-flow:row;grid-area:label;justify-content:space-between}.dnb-forms-field-block__label-description{margin-left:.3em}.dnb-forms-field-block__status{grid-area:status}.dnb-forms-field-block__status .dnb-form-status__shell{margin-top:.5rem}@media screen and (max-width:15em){.dnb-forms-field-block__status{width:90%}}.dnb-forms-field-block__contents{grid-area:contents;width:100%}.dnb-forms-field-block__contents--width-stretch{width:100%}@media screen and (min-width:25em){.dnb-forms-field-block__contents--width-small{width:var(--forms-field-width--small)}.dnb-forms-field-block__contents--width-medium{width:var(--forms-field-width--medium)}.dnb-forms-field-block__contents--width-large{width:var(--forms-field-width--large)}}.dnb-forms-field-block__contents__composition--vertical{display:flex;flex-flow:column;row-gap:var(--spacing-small)}.dnb-forms-field-block__contents__composition--horizontal{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row}@media screen and (min-width:25em){.dnb-forms-field-block__contents__composition--horizontal{align-items:flex-end}}@media screen and (max-width:25em){.dnb-forms-field-block__contents__composition--horizontal{flex-flow:column;row-gap:var(--spacing-x-small)}}
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
-moz-column-gap: var(--spacing-small);
|
|
8
8
|
column-gap: var(--spacing-small);
|
|
9
9
|
}
|
|
10
|
+
.dnb-card + .dnb-forms-button-row:not([class*=space__top]) {
|
|
11
|
+
margin-top: var(--spacing-small);
|
|
12
|
+
}
|
|
13
|
+
.dnb-card + .dnb-forms-button-row:not([class*=space__top]) .dnb-button[class*=space__top] {
|
|
14
|
+
margin-top: 0;
|
|
15
|
+
}
|
|
10
16
|
@media screen and (min-width: 40em) {
|
|
11
17
|
.dnb-card + .dnb-forms-button-row:not([class*=space__left]) {
|
|
12
18
|
margin-left: var(--spacing-medium);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.dnb-forms-button-row{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row}@media screen and (min-width:40em){.dnb-card+.dnb-forms-button-row:not([class*=space__left]){margin-left:var(--spacing-medium)}}
|
|
1
|
+
.dnb-forms-button-row{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row}.dnb-card+.dnb-forms-button-row:not([class*=space__top]){margin-top:var(--spacing-small)}.dnb-card+.dnb-forms-button-row:not([class*=space__top]) .dnb-button[class*=space__top]{margin-top:0}@media screen and (min-width:40em){.dnb-card+.dnb-forms-button-row:not([class*=space__left]){margin-left:var(--spacing-medium)}}
|
|
@@ -6,8 +6,16 @@
|
|
|
6
6
|
column-gap: var(--spacing-small);
|
|
7
7
|
|
|
8
8
|
.dnb-card + & {
|
|
9
|
-
&:not([class*='
|
|
10
|
-
|
|
9
|
+
&:not([class*='space__top']) {
|
|
10
|
+
margin-top: var(--spacing-small);
|
|
11
|
+
|
|
12
|
+
.dnb-button[class*='space__top'] {
|
|
13
|
+
margin-top: 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@include allAbove(small) {
|
|
18
|
+
&:not([class*='space__left']) {
|
|
11
19
|
margin-left: var(--spacing-medium);
|
|
12
20
|
}
|
|
13
21
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SharedStateId } from '../../../../shared/helpers/useSharedState';
|
|
2
|
-
import type { Path } from '../../
|
|
2
|
+
import type { Path } from '../../types';
|
|
3
3
|
import type { FilterData } from '../../DataContext/Provider';
|
|
4
4
|
type PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}` ? Key extends keyof T ? Rest extends '' ? T[Key] : PathImpl<T[Key], Rest> : never : T[P & keyof T];
|
|
5
5
|
type PathType<T, P extends string> = P extends `/${infer Rest}` ? PathImpl<T, Rest> : never;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useReducer, useRef } from 'react';
|
|
4
4
|
import pointer from 'json-pointer';
|
|
5
5
|
import { useSharedState } from '../../../../shared/helpers/useSharedState';
|
|
6
6
|
import { useMountEffect } from '../../hooks';
|
|
@@ -8,26 +8,10 @@ export default function useData(id) {
|
|
|
8
8
|
let initialData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
|
|
9
9
|
const sharedDataRef = useRef(null);
|
|
10
10
|
const sharedAttachmentsRef = useRef(null);
|
|
11
|
-
const hasMounted = useRef(false);
|
|
12
11
|
const [, forceUpdate] = useReducer(() => ({}), {});
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
hasMounted.current = true;
|
|
15
|
-
return () => {
|
|
16
|
-
hasMounted.current = false;
|
|
17
|
-
};
|
|
18
|
-
}, []);
|
|
19
|
-
const rerenderUseDataHook = useCallback(() => {
|
|
20
|
-
if (hasMounted.current) {
|
|
21
|
-
if (typeof window !== 'undefined') {
|
|
22
|
-
window.requestAnimationFrame(forceUpdate);
|
|
23
|
-
}
|
|
24
|
-
} else {
|
|
25
|
-
forceUpdate();
|
|
26
|
-
}
|
|
27
|
-
}, []);
|
|
28
12
|
sharedDataRef.current = useSharedState(id, initialData, forceUpdate);
|
|
29
13
|
sharedAttachmentsRef.current = useSharedState(id + '-attachments', {
|
|
30
|
-
rerenderUseDataHook
|
|
14
|
+
rerenderUseDataHook: forceUpdate
|
|
31
15
|
});
|
|
32
16
|
const setHandler = useCallback(newData => {
|
|
33
17
|
sharedDataRef.current.update(newData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useData.js","names":["useCallback","
|
|
1
|
+
{"version":3,"file":"useData.js","names":["useCallback","useReducer","useRef","pointer","useSharedState","useMountEffect","useData","id","initialData","arguments","length","undefined","sharedDataRef","sharedAttachmentsRef","forceUpdate","current","rerenderUseDataHook","setHandler","newData","update","updateHandler","path","fn","existingData","data","existingValue","has","get","newValue","set","filterData","filter","_sharedAttachmentsRef","_sharedAttachmentsRef2","filterDataHandler","call","hadInitialData","extend"],"sources":["../../../../../../src/extensions/forms/Form/data-context/useData.tsx"],"sourcesContent":["import { useCallback, useReducer, useRef } from 'react'\nimport pointer from 'json-pointer'\nimport {\n SharedStateId,\n useSharedState,\n} from '../../../../shared/helpers/useSharedState'\nimport type { Path } from '../../types'\nimport type {\n FilterData,\n FilterDataHandler,\n} from '../../DataContext/Provider'\nimport { useMountEffect } from '../../hooks'\n\ntype PathImpl<T, P extends string> = P extends `${infer Key}/${infer Rest}`\n ? Key extends keyof T\n ? Rest extends ''\n ? T[Key]\n : PathImpl<T[Key], Rest>\n : never\n : T[P & keyof T]\n\ntype PathType<T, P extends string> = P extends `/${infer Rest}`\n ? PathImpl<T, Rest>\n : never\n\ntype UseDataReturnUpdate<Data> = <P extends Path>(\n path: P,\n fn: (value: PathType<Data, P>) => unknown\n) => void\n\ntype UseDataReturn<Data> = {\n data: Data\n update: UseDataReturnUpdate<Data>\n set: (newData: Data) => void\n filterData: (filterDataHandler: FilterData) => Partial<Data>\n}\n\ntype SharedAttachment<Data> = {\n rerenderUseDataHook: () => void\n filterDataHandler?: FilterDataHandler<Data>\n}\n\n/**\n * Custom hook that provides form data management functionality.\n *\n * @template Data - The type of data being managed.\n * @param {SharedStateId} id - The identifier for the data.\n * @param {Data} initialData - The initial data value (optional).\n * @returns {UseDataReturn<Data>} An object containing the data and data management functions.\n */\nexport default function useData<Data>(\n id: SharedStateId,\n initialData: Data = undefined\n): UseDataReturn<Data> {\n const sharedDataRef =\n useRef<ReturnType<typeof useSharedState<Data>>>(null)\n const sharedAttachmentsRef =\n useRef<ReturnType<typeof useSharedState<SharedAttachment<Data>>>>(null)\n const [, forceUpdate] = useReducer(() => ({}), {})\n\n sharedDataRef.current = useSharedState<Data>(\n id,\n initialData,\n forceUpdate\n )\n\n sharedAttachmentsRef.current = useSharedState<SharedAttachment<Data>>(\n id + '-attachments',\n { rerenderUseDataHook: forceUpdate }\n )\n\n const setHandler = useCallback((newData: Data) => {\n sharedDataRef.current.update(newData)\n }, [])\n\n const updateHandler = useCallback<UseDataReturnUpdate<Data>>(\n (path, fn) => {\n const existingData = sharedDataRef.current.data || ({} as Data)\n const existingValue = pointer.has(existingData, path)\n ? pointer.get(existingData, path)\n : undefined\n\n // get new value\n const newValue = fn(existingValue)\n\n // update existing data\n pointer.set(existingData, path, newValue)\n\n // update provider\n sharedDataRef.current.update(existingData)\n },\n []\n )\n\n const filterData = useCallback<UseDataReturn<Data>['filterData']>(\n (filter) => {\n const data = sharedDataRef.current.data\n return sharedAttachmentsRef.current.data?.filterDataHandler?.(\n data,\n filter\n )\n },\n []\n )\n\n useMountEffect(() => {\n if (id && !sharedDataRef.current.hadInitialData && initialData) {\n sharedDataRef.current.extend(initialData)\n }\n })\n\n return {\n data: sharedDataRef.current.data,\n update: updateHandler,\n set: setHandler,\n filterData,\n }\n}\n"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACvD,OAAOC,OAAO,MAAM,cAAc;AAClC,SAEEC,cAAc,QACT,2CAA2C;AAMlD,SAASC,cAAc,QAAQ,aAAa;AAuC5C,eAAe,SAASC,OAAOA,CAC7BC,EAAiB,EAEI;EAAA,IADrBC,WAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGE,SAAS;EAE7B,MAAMC,aAAa,GACjBV,MAAM,CAA0C,IAAI,CAAC;EACvD,MAAMW,oBAAoB,GACxBX,MAAM,CAA4D,IAAI,CAAC;EACzE,MAAM,GAAGY,WAAW,CAAC,GAAGb,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAElDW,aAAa,CAACG,OAAO,GAAGX,cAAc,CACpCG,EAAE,EACFC,WAAW,EACXM,WACF,CAAC;EAEDD,oBAAoB,CAACE,OAAO,GAAGX,cAAc,CAC3CG,EAAE,GAAG,cAAc,EACnB;IAAES,mBAAmB,EAAEF;EAAY,CACrC,CAAC;EAED,MAAMG,UAAU,GAAGjB,WAAW,CAAEkB,OAAa,IAAK;IAChDN,aAAa,CAACG,OAAO,CAACI,MAAM,CAACD,OAAO,CAAC;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,aAAa,GAAGpB,WAAW,CAC/B,CAACqB,IAAI,EAAEC,EAAE,KAAK;IACZ,MAAMC,YAAY,GAAGX,aAAa,CAACG,OAAO,CAACS,IAAI,IAAK,CAAC,CAAU;IAC/D,MAAMC,aAAa,GAAGtB,OAAO,CAACuB,GAAG,CAACH,YAAY,EAAEF,IAAI,CAAC,GACjDlB,OAAO,CAACwB,GAAG,CAACJ,YAAY,EAAEF,IAAI,CAAC,GAC/BV,SAAS;IAGb,MAAMiB,QAAQ,GAAGN,EAAE,CAACG,aAAa,CAAC;IAGlCtB,OAAO,CAAC0B,GAAG,CAACN,YAAY,EAAEF,IAAI,EAAEO,QAAQ,CAAC;IAGzChB,aAAa,CAACG,OAAO,CAACI,MAAM,CAACI,YAAY,CAAC;EAC5C,CAAC,EACD,EACF,CAAC;EAED,MAAMO,UAAU,GAAG9B,WAAW,CAC3B+B,MAAM,IAAK;IAAA,IAAAC,qBAAA,EAAAC,sBAAA;IACV,MAAMT,IAAI,GAAGZ,aAAa,CAACG,OAAO,CAACS,IAAI;IACvC,QAAAQ,qBAAA,GAAOnB,oBAAoB,CAACE,OAAO,CAACS,IAAI,cAAAQ,qBAAA,wBAAAC,sBAAA,GAAjCD,qBAAA,CAAmCE,iBAAiB,cAAAD,sBAAA,uBAApDA,sBAAA,CAAAE,IAAA,CAAAH,qBAAA,EACLR,IAAI,EACJO,MACF,CAAC;EACH,CAAC,EACD,EACF,CAAC;EAED1B,cAAc,CAAC,MAAM;IACnB,IAAIE,EAAE,IAAI,CAACK,aAAa,CAACG,OAAO,CAACqB,cAAc,IAAI5B,WAAW,EAAE;MAC9DI,aAAa,CAACG,OAAO,CAACsB,MAAM,CAAC7B,WAAW,CAAC;IAC3C;EACF,CAAC,CAAC;EAEF,OAAO;IACLgB,IAAI,EAAEZ,aAAa,CAACG,OAAO,CAACS,IAAI;IAChCL,MAAM,EAAEC,aAAa;IACrBS,GAAG,EAAEZ,UAAU;IACfa;EACF,CAAC;AACH"}
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
import { useSharedState } from '../../../../shared/helpers/useSharedState';
|
|
5
5
|
export default function useError(id) {
|
|
6
|
-
var _sharedAttachmentsRef, _sharedAttachmentsRef2;
|
|
7
6
|
const sharedAttachmentsRef = useRef(null);
|
|
8
7
|
sharedAttachmentsRef.current = useSharedState(id + '-attachments');
|
|
8
|
+
const {
|
|
9
|
+
data
|
|
10
|
+
} = sharedAttachmentsRef.current;
|
|
9
11
|
return {
|
|
10
|
-
hasErrors: (
|
|
12
|
+
hasErrors: (data === null || data === void 0 ? void 0 : data.hasErrors) || (() => false)
|
|
11
13
|
};
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=useError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useError.js","names":["useRef","useSharedState","useError","id","
|
|
1
|
+
{"version":3,"file":"useError.js","names":["useRef","useSharedState","useError","id","sharedAttachmentsRef","current","data","hasErrors"],"sources":["../../../../../../src/extensions/forms/Form/data-context/useError.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useSharedState } from '../../../../shared/helpers/useSharedState'\nimport type { ContextState } from '../../DataContext/Context'\n\ntype UseDataReturn = {\n hasErrors: ContextState['hasErrors']\n}\n\nexport default function useError(id: string): UseDataReturn {\n const sharedAttachmentsRef = useRef(null)\n sharedAttachmentsRef.current = useSharedState<UseDataReturn>(\n id + '-attachments'\n )\n\n const { data } = sharedAttachmentsRef.current\n\n return {\n hasErrors: data?.hasErrors || (() => false),\n }\n}\n"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,OAAO;AAC9B,SAASC,cAAc,QAAQ,2CAA2C;AAO1E,eAAe,SAASC,QAAQA,CAACC,EAAU,EAAiB;EAC1D,MAAMC,oBAAoB,GAAGJ,MAAM,CAAC,IAAI,CAAC;EACzCI,oBAAoB,CAACC,OAAO,GAAGJ,cAAc,CAC3CE,EAAE,GAAG,cACP,CAAC;EAED,MAAM;IAAEG;EAAK,CAAC,GAAGF,oBAAoB,CAACC,OAAO;EAE7C,OAAO;IACLE,SAAS,EAAE,CAAAD,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEC,SAAS,MAAK,MAAM,KAAK;EAC5C,CAAC;AACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ValueProps } from '../../types';
|
|
2
2
|
import { NumberFormatProps } from '../../../../components/NumberFormat';
|
|
3
|
-
import {
|
|
4
|
-
export type Props = ValueProps<number> &
|
|
3
|
+
import { IncludeCamelCase } from '../../../../shared/helpers/withCamelCaseProps';
|
|
4
|
+
export type Props = ValueProps<number> & IncludeCamelCase<NumberFormatProps>;
|
|
5
5
|
declare function NumberValue(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
declare namespace NumberValue {
|
|
7
7
|
var _supportsSpacingProps: boolean;
|
|
@@ -18,7 +18,7 @@ function NumberValue(props) {
|
|
|
18
18
|
showEmpty
|
|
19
19
|
} = _useDataValue,
|
|
20
20
|
rest = _objectWithoutProperties(_useDataValue, _excluded);
|
|
21
|
-
const numberFormatProps = convertCamelCaseProps(omitSpacingProps(
|
|
21
|
+
const numberFormatProps = convertCamelCaseProps(omitDataValueProps(omitSpacingProps(rest)));
|
|
22
22
|
return React.createElement(ValueBlock, _extends({
|
|
23
23
|
className: classnames('dnb-forms-value-number', className),
|
|
24
24
|
label: label,
|