@dnb/eufemia 10.17.0 → 10.18.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 +18 -0
- package/cjs/components/flex/Container.js +4 -0
- package/cjs/components/flex/Container.js.map +1 -1
- package/cjs/components/flex/utils.d.ts +1 -1
- package/cjs/components/flex/utils.js +11 -1
- package/cjs/components/flex/utils.js.map +1 -1
- package/cjs/components/input-masked/MultiInputMask.d.ts +10 -2
- package/cjs/components/input-masked/MultiInputMask.js +41 -14
- package/cjs/components/input-masked/MultiInputMask.js.map +1 -1
- package/cjs/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
- package/cjs/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
- package/cjs/components/number-format/NumberFormat.js +1 -1
- package/cjs/components/number-format/NumberFormat.js.map +1 -1
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
- package/cjs/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
- package/cjs/components/visually-hidden/VisuallyHidden.js +1 -1
- package/cjs/components/visually-hidden/VisuallyHidden.js.map +1 -1
- package/cjs/extensions/forms/DataContext/Provider/Provider.d.ts +8 -4
- package/cjs/extensions/forms/DataContext/Provider/Provider.js +22 -4
- package/cjs/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js +14 -14
- package/cjs/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
- package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
- package/cjs/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
- package/cjs/extensions/forms/Field/Date/Date.js +1 -5
- package/cjs/extensions/forms/Field/Date/Date.js.map +1 -1
- package/cjs/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
- package/cjs/extensions/forms/Field/Expiry/Expiry.js +20 -10
- package/cjs/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
- package/cjs/extensions/forms/Field/Number/Number.js +0 -5
- package/cjs/extensions/forms/Field/Number/Number.js.map +1 -1
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js +4 -5
- package/cjs/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/cjs/extensions/forms/Field/Selection/Selection.d.ts +7 -1
- package/cjs/extensions/forms/Field/Selection/Selection.js +4 -9
- package/cjs/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/cjs/extensions/forms/Field/String/String.d.ts +0 -1
- package/cjs/extensions/forms/Field/String/String.js +2 -8
- package/cjs/extensions/forms/Field/String/String.js.map +1 -1
- package/cjs/extensions/forms/Field/Toggle/Toggle.js +0 -4
- package/cjs/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js +2 -10
- package/cjs/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.css +0 -9
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/cjs/extensions/forms/FieldBlock/style/dnb-field-block.scss +0 -11
- package/cjs/extensions/forms/Form/Handler/Handler.js +1 -0
- package/cjs/extensions/forms/Form/Handler/Handler.js.map +1 -1
- package/cjs/extensions/forms/Form/Visibility/Visibility.js +0 -1
- package/cjs/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
- package/cjs/extensions/forms/Form/hooks/useData.d.ts +10 -0
- package/cjs/extensions/forms/Form/hooks/useData.js +36 -0
- package/cjs/extensions/forms/Form/hooks/useData.js.map +1 -0
- package/cjs/extensions/forms/Form/index.d.ts +1 -0
- package/cjs/extensions/forms/Form/index.js +7 -0
- package/cjs/extensions/forms/Form/index.js.map +1 -1
- package/cjs/extensions/forms/Iterate/Array/Array.js +0 -4
- package/cjs/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/cjs/extensions/forms/hooks/useDataValue.js +2 -2
- package/cjs/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/cjs/extensions/forms/style/dnb-forms.css +12 -11
- package/cjs/extensions/forms/style/dnb-forms.min.css +1 -1
- package/cjs/extensions/forms/types.d.ts +4 -8
- package/cjs/extensions/forms/types.js.map +1 -1
- 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/helpers/EventEmitter.d.ts +5 -0
- package/cjs/shared/helpers/EventEmitter.js.map +1 -1
- package/cjs/shared/helpers/useEventEmitter.d.ts +2 -0
- package/cjs/shared/helpers/useEventEmitter.js.map +1 -1
- package/cjs/shared/helpers/useSharedState.d.ts +15 -0
- package/cjs/shared/helpers/useSharedState.js +71 -0
- package/cjs/shared/helpers/useSharedState.js.map +1 -0
- package/cjs/style/dnb-ui-components.css +12 -11
- package/cjs/style/dnb-ui-components.min.css +1 -1
- package/cjs/style/dnb-ui-extensions.css +12 -11
- package/cjs/style/dnb-ui-extensions.min.css +1 -1
- package/cjs/style/dnb-ui-forms.css +12 -11
- package/cjs/style/dnb-ui-forms.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.css +28 -22
- package/cjs/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.css +12 -11
- package/cjs/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.css +12 -11
- package/cjs/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.css +32 -23
- package/cjs/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.css +12 -11
- package/cjs/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.css +12 -11
- package/cjs/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/cjs/style/themes/theme-ui/ui-theme-components.css +28 -22
- package/cjs/style/themes/theme-ui/ui-theme-components.min.css +1 -1
- package/cjs/style/themes/theme-ui/ui-theme-extensions.css +12 -11
- package/cjs/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/cjs/style/themes/theme-ui/ui-theme-forms.css +12 -11
- package/cjs/style/themes/theme-ui/ui-theme-forms.min.css +1 -1
- package/components/flex/Container.js +4 -0
- package/components/flex/Container.js.map +1 -1
- package/components/flex/utils.d.ts +1 -1
- package/components/flex/utils.js +11 -1
- package/components/flex/utils.js.map +1 -1
- package/components/input-masked/MultiInputMask.d.ts +10 -2
- package/components/input-masked/MultiInputMask.js +39 -14
- package/components/input-masked/MultiInputMask.js.map +1 -1
- package/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
- package/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
- package/components/number-format/NumberFormat.js +1 -1
- package/components/number-format/NumberFormat.js.map +1 -1
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
- package/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
- package/components/visually-hidden/VisuallyHidden.js +1 -1
- package/components/visually-hidden/VisuallyHidden.js.map +1 -1
- package/es/components/flex/Container.js +4 -0
- package/es/components/flex/Container.js.map +1 -1
- package/es/components/flex/utils.d.ts +1 -1
- package/es/components/flex/utils.js +11 -1
- package/es/components/flex/utils.js.map +1 -1
- package/es/components/input-masked/MultiInputMask.d.ts +10 -2
- package/es/components/input-masked/MultiInputMask.js +39 -13
- package/es/components/input-masked/MultiInputMask.js.map +1 -1
- package/es/components/input-masked/hooks/useMultiInputValues.d.ts +2 -2
- package/es/components/input-masked/hooks/useMultiInputValues.js.map +1 -1
- package/es/components/number-format/NumberFormat.js +1 -1
- package/es/components/number-format/NumberFormat.js.map +1 -1
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.css +8 -1
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.min.css +1 -1
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-sbanken.scss +6 -1
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.css +4 -0
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.min.css +1 -1
- package/es/components/toggle-button/style/themes/dnb-toggle-button-theme-ui.scss +5 -0
- package/es/components/visually-hidden/VisuallyHidden.js +1 -1
- package/es/components/visually-hidden/VisuallyHidden.js.map +1 -1
- package/es/extensions/forms/DataContext/Provider/Provider.d.ts +8 -4
- package/es/extensions/forms/DataContext/Provider/Provider.js +22 -4
- package/es/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/es/extensions/forms/Field/ArraySelection/ArraySelection.js +15 -15
- package/es/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
- package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
- package/es/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
- package/es/extensions/forms/Field/Date/Date.js +1 -5
- package/es/extensions/forms/Field/Date/Date.js.map +1 -1
- package/es/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
- package/es/extensions/forms/Field/Expiry/Expiry.js +20 -11
- package/es/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
- package/es/extensions/forms/Field/Number/Number.js +0 -5
- package/es/extensions/forms/Field/Number/Number.js.map +1 -1
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js +4 -5
- package/es/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/es/extensions/forms/Field/Selection/Selection.d.ts +7 -1
- package/es/extensions/forms/Field/Selection/Selection.js +4 -9
- package/es/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/es/extensions/forms/Field/String/String.d.ts +0 -1
- package/es/extensions/forms/Field/String/String.js +2 -8
- package/es/extensions/forms/Field/String/String.js.map +1 -1
- package/es/extensions/forms/Field/Toggle/Toggle.js +0 -4
- package/es/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
- package/es/extensions/forms/FieldBlock/FieldBlock.js +2 -10
- package/es/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.css +0 -9
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/es/extensions/forms/FieldBlock/style/dnb-field-block.scss +0 -11
- package/es/extensions/forms/Form/Handler/Handler.js +1 -0
- package/es/extensions/forms/Form/Handler/Handler.js.map +1 -1
- package/es/extensions/forms/Form/Visibility/Visibility.js +0 -1
- package/es/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
- package/es/extensions/forms/Form/hooks/useData.d.ts +10 -0
- package/es/extensions/forms/Form/hooks/useData.js +29 -0
- package/es/extensions/forms/Form/hooks/useData.js.map +1 -0
- package/es/extensions/forms/Form/index.d.ts +1 -0
- package/es/extensions/forms/Form/index.js +1 -0
- package/es/extensions/forms/Form/index.js.map +1 -1
- package/es/extensions/forms/Iterate/Array/Array.js +0 -4
- package/es/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/es/extensions/forms/hooks/useDataValue.js +2 -2
- package/es/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/es/extensions/forms/style/dnb-forms.css +12 -11
- package/es/extensions/forms/style/dnb-forms.min.css +1 -1
- package/es/extensions/forms/types.d.ts +4 -8
- package/es/extensions/forms/types.js.map +1 -1
- 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/helpers/EventEmitter.d.ts +5 -0
- package/es/shared/helpers/EventEmitter.js.map +1 -1
- package/es/shared/helpers/useEventEmitter.d.ts +2 -0
- package/es/shared/helpers/useEventEmitter.js.map +1 -1
- package/es/shared/helpers/useSharedState.d.ts +15 -0
- package/es/shared/helpers/useSharedState.js +63 -0
- package/es/shared/helpers/useSharedState.js.map +1 -0
- package/es/style/dnb-ui-components.css +12 -11
- package/es/style/dnb-ui-components.min.css +1 -1
- package/es/style/dnb-ui-extensions.css +12 -11
- package/es/style/dnb-ui-extensions.min.css +1 -1
- package/es/style/dnb-ui-forms.css +12 -11
- package/es/style/dnb-ui-forms.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-components.css +28 -22
- package/es/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.css +12 -11
- package/es/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-eiendom/eiendom-theme-forms.css +12 -11
- package/es/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-components.css +32 -23
- package/es/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.css +12 -11
- package/es/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-sbanken/sbanken-theme-forms.css +12 -11
- package/es/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/es/style/themes/theme-ui/ui-theme-components.css +28 -22
- package/es/style/themes/theme-ui/ui-theme-components.min.css +1 -1
- package/es/style/themes/theme-ui/ui-theme-extensions.css +12 -11
- package/es/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/es/style/themes/theme-ui/ui-theme-forms.css +12 -11
- 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/Provider/Provider.d.ts +8 -4
- package/extensions/forms/DataContext/Provider/Provider.js +22 -4
- package/extensions/forms/DataContext/Provider/Provider.js.map +1 -1
- package/extensions/forms/Field/ArraySelection/ArraySelection.js +15 -15
- package/extensions/forms/Field/ArraySelection/ArraySelection.js.map +1 -1
- package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.css +12 -2
- package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.min.css +1 -1
- package/extensions/forms/Field/ArraySelection/style/dnb-array-selection.scss +12 -2
- package/extensions/forms/Field/Date/Date.js +1 -5
- package/extensions/forms/Field/Date/Date.js.map +1 -1
- package/extensions/forms/Field/Expiry/Expiry.d.ts +1 -1
- package/extensions/forms/Field/Expiry/Expiry.js +21 -11
- package/extensions/forms/Field/Expiry/Expiry.js.map +1 -1
- package/extensions/forms/Field/Number/Number.js +0 -5
- package/extensions/forms/Field/Number/Number.js.map +1 -1
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js +4 -5
- package/extensions/forms/Field/PhoneNumber/PhoneNumber.js.map +1 -1
- package/extensions/forms/Field/Selection/Selection.d.ts +7 -1
- package/extensions/forms/Field/Selection/Selection.js +4 -9
- package/extensions/forms/Field/Selection/Selection.js.map +1 -1
- package/extensions/forms/Field/String/String.d.ts +0 -1
- package/extensions/forms/Field/String/String.js +2 -8
- package/extensions/forms/Field/String/String.js.map +1 -1
- package/extensions/forms/Field/Toggle/Toggle.js +0 -4
- package/extensions/forms/Field/Toggle/Toggle.js.map +1 -1
- package/extensions/forms/FieldBlock/FieldBlock.d.ts +1 -1
- package/extensions/forms/FieldBlock/FieldBlock.js +2 -10
- package/extensions/forms/FieldBlock/FieldBlock.js.map +1 -1
- package/extensions/forms/FieldBlock/style/dnb-field-block.css +0 -9
- package/extensions/forms/FieldBlock/style/dnb-field-block.min.css +1 -1
- package/extensions/forms/FieldBlock/style/dnb-field-block.scss +0 -11
- package/extensions/forms/Form/Handler/Handler.js +1 -0
- package/extensions/forms/Form/Handler/Handler.js.map +1 -1
- package/extensions/forms/Form/Visibility/Visibility.js +0 -1
- package/extensions/forms/Form/Visibility/Visibility.js.map +1 -1
- package/extensions/forms/Form/hooks/useData.d.ts +10 -0
- package/extensions/forms/Form/hooks/useData.js +30 -0
- package/extensions/forms/Form/hooks/useData.js.map +1 -0
- package/extensions/forms/Form/index.d.ts +1 -0
- package/extensions/forms/Form/index.js +1 -0
- package/extensions/forms/Form/index.js.map +1 -1
- package/extensions/forms/Iterate/Array/Array.js +0 -4
- package/extensions/forms/Iterate/Array/Array.js.map +1 -1
- package/extensions/forms/hooks/useDataValue.js +2 -2
- package/extensions/forms/hooks/useDataValue.js.map +1 -1
- package/extensions/forms/style/dnb-forms.css +12 -11
- package/extensions/forms/style/dnb-forms.min.css +1 -1
- package/extensions/forms/types.d.ts +4 -8
- package/extensions/forms/types.js.map +1 -1
- 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/helpers/EventEmitter.d.ts +5 -0
- package/shared/helpers/EventEmitter.js.map +1 -1
- package/shared/helpers/useEventEmitter.d.ts +2 -0
- package/shared/helpers/useEventEmitter.js.map +1 -1
- package/shared/helpers/useSharedState.d.ts +15 -0
- package/shared/helpers/useSharedState.js +63 -0
- package/shared/helpers/useSharedState.js.map +1 -0
- package/style/dnb-ui-components.css +12 -11
- package/style/dnb-ui-components.min.css +1 -1
- package/style/dnb-ui-extensions.css +12 -11
- package/style/dnb-ui-extensions.min.css +1 -1
- package/style/dnb-ui-forms.css +12 -11
- package/style/dnb-ui-forms.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-components.css +28 -22
- package/style/themes/theme-eiendom/eiendom-theme-components.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-extensions.css +12 -11
- package/style/themes/theme-eiendom/eiendom-theme-extensions.min.css +1 -1
- package/style/themes/theme-eiendom/eiendom-theme-forms.css +12 -11
- package/style/themes/theme-eiendom/eiendom-theme-forms.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-components.css +32 -23
- package/style/themes/theme-sbanken/sbanken-theme-components.min.css +2 -2
- package/style/themes/theme-sbanken/sbanken-theme-extensions.css +12 -11
- package/style/themes/theme-sbanken/sbanken-theme-extensions.min.css +1 -1
- package/style/themes/theme-sbanken/sbanken-theme-forms.css +12 -11
- package/style/themes/theme-sbanken/sbanken-theme-forms.min.css +1 -1
- package/style/themes/theme-ui/ui-theme-components.css +28 -22
- package/style/themes/theme-ui/ui-theme-components.min.css +1 -1
- package/style/themes/theme-ui/ui-theme-extensions.css +12 -11
- package/style/themes/theme-ui/ui-theme-extensions.min.css +1 -1
- package/style/themes/theme-ui/ui-theme-forms.css +12 -11
- 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 +2 -2
- package/umd/dnb-ui-lib.min.js +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
4
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
5
|
-
const _excluded = ["defaultData", "data", "schema", "onChange", "onPathChange", "onSubmit", "onSubmitRequest", "scrollTopOnSubmit", "sessionStorageId", "children"];
|
|
5
|
+
const _excluded = ["id", "defaultData", "data", "schema", "onChange", "onPathChange", "onSubmit", "onSubmitRequest", "scrollTopOnSubmit", "sessionStorageId", "children"];
|
|
6
6
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
7
7
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
8
8
|
import React, { useEffect, useRef, useMemo, useCallback, useReducer } from 'react';
|
|
@@ -10,6 +10,7 @@ import pointer from 'json-pointer';
|
|
|
10
10
|
import ajv, { ajvErrorsToFormErrors } from '../../utils/ajv';
|
|
11
11
|
import useMountEffect from '../../hooks/useMountEffect';
|
|
12
12
|
import useUpdateEffect from '../../hooks/useUpdateEffect';
|
|
13
|
+
import { useSharedState } from '../../../../shared/helpers/useSharedState';
|
|
13
14
|
import Context from '../Context';
|
|
14
15
|
import structuredClone from '@ungap/structured-clone';
|
|
15
16
|
function addListPath(paths, path) {
|
|
@@ -21,6 +22,7 @@ function removeListPath(paths, path) {
|
|
|
21
22
|
const isArrayJsonPointer = /^\/\d+(\/|$)/;
|
|
22
23
|
export default function Provider(_ref) {
|
|
23
24
|
let {
|
|
25
|
+
id,
|
|
24
26
|
defaultData,
|
|
25
27
|
data,
|
|
26
28
|
schema,
|
|
@@ -57,6 +59,12 @@ export default function Provider(_ref) {
|
|
|
57
59
|
const internalDataRef = useRef(initialData);
|
|
58
60
|
const dataCacheRef = useRef(data);
|
|
59
61
|
const ajvSchemaValidatorRef = useRef();
|
|
62
|
+
const sharedState = useSharedState(id, initialData);
|
|
63
|
+
useMemo(() => {
|
|
64
|
+
if (sharedState !== null && sharedState !== void 0 && sharedState.data && !initialData) {
|
|
65
|
+
internalDataRef.current = sharedState.data;
|
|
66
|
+
}
|
|
67
|
+
}, [initialData, sharedState.data]);
|
|
60
68
|
const validateData = useCallback(() => {
|
|
61
69
|
if (!ajvSchemaValidatorRef.current) {
|
|
62
70
|
return;
|
|
@@ -91,18 +99,28 @@ export default function Provider(_ref) {
|
|
|
91
99
|
if (!path) {
|
|
92
100
|
return;
|
|
93
101
|
}
|
|
94
|
-
const
|
|
102
|
+
const givenData = path === '/' ? value : (_internalDataRef$curr = internalDataRef.current) !== null && _internalDataRef$curr !== void 0 ? _internalDataRef$curr : path.match(isArrayJsonPointer) ? [] : {};
|
|
103
|
+
let newData = null;
|
|
104
|
+
try {
|
|
105
|
+
newData = structuredClone(givenData);
|
|
106
|
+
} catch (e) {
|
|
107
|
+
newData = givenData;
|
|
108
|
+
}
|
|
95
109
|
if (path !== '/') {
|
|
96
110
|
pointer.set(newData, path, value);
|
|
97
111
|
}
|
|
112
|
+
if (id) {
|
|
113
|
+
var _sharedState$update;
|
|
114
|
+
(_sharedState$update = sharedState.update) === null || _sharedState$update === void 0 ? void 0 : _sharedState$update.call(sharedState, newData);
|
|
115
|
+
}
|
|
116
|
+
internalDataRef.current = newData;
|
|
98
117
|
if (sessionStorageId && typeof window !== 'undefined') {
|
|
99
118
|
var _window$sessionStorag2;
|
|
100
119
|
(_window$sessionStorag2 = window.sessionStorage) === null || _window$sessionStorag2 === void 0 ? void 0 : _window$sessionStorag2.setItem(sessionStorageId, JSON.stringify(newData));
|
|
101
120
|
}
|
|
102
|
-
internalDataRef.current = newData;
|
|
103
121
|
forceUpdate();
|
|
104
122
|
return newData;
|
|
105
|
-
}, [sessionStorageId]);
|
|
123
|
+
}, [id, sessionStorageId, sharedState]);
|
|
106
124
|
const handlePathChange = useCallback((path, value) => {
|
|
107
125
|
if (!path) {
|
|
108
126
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.js","names":["React","useEffect","useRef","useMemo","useCallback","useReducer","pointer","ajv","ajvErrorsToFormErrors","useMountEffect","useUpdateEffect","Context","structuredClone","addListPath","paths","path","includes","concat","removeListPath","filter","thisPath","isArrayJsonPointer","Provider","_ref","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","children","rest","_objectWithoutProperties","_excluded","forceUpdate","undefined","console","error","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","valuesWithErrorRef","initialData","window","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","dataCacheRef","ajvSchemaValidatorRef","validateData","errors","compile","hasErrors","Boolean","find","mountedFieldPath","_errorsRef$current","setValueWithError","identifier","withError","updateDataValue","value","_internalDataRef$curr","newData","match","set","_window$sessionStorag2","setItem","stringify","handlePathChange","handleMountField","handleUnMountField","handleSubmit","formElement","resetForm","_formElement$reset","reset","call","removeItem","clearData","_window","scrollTo","top","behavior","createElement","_objectSpread","mountedFieldPaths"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useEffect,\n useRef,\n useMemo,\n useCallback,\n useReducer,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { JSONSchema7 } from 'json-schema'\nimport { ValidateFunction } from 'ajv'\nimport ajv, { ajvErrorsToFormErrors } from '../../utils/ajv'\nimport { FormError } from '../../types'\nimport useMountEffect from '../../hooks/useMountEffect'\nimport useUpdateEffect from '../../hooks/useUpdateEffect'\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\nexport interface Props<Data extends JsonObject> {\n /** Default source data, only used if no other source is available, and not leading to updates if changed after mount */\n defaultData?: Partial<Data>\n /** Dynamic source data used as both initial data, and updates internal data if changed after mount */\n data?: Partial<Data>\n /** JSON Schema for validating the data, like during input or after attempting submit */\n schema?: JSONSchema7\n /** Change handler for the whole data set */\n onChange?: (data: Data) => void\n /** Change handler for each value */\n onPathChange?: (path: string, value: any) => void\n /** Submit called, data was valid (if validation available) */\n onSubmit?: (\n data: Data,\n {\n resetForm,\n clearData,\n }: {\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 ) => void\n /** Submit was requested, but data was invalid */\n onSubmitRequest?: () => void\n scrollTopOnSubmit?: boolean\n /** Key for caching the data in session storage */\n sessionStorageId?: string\n children: React.ReactNode\n}\n\ntype PathList = string[]\n\nfunction addListPath(paths: PathList, path: string): PathList {\n return paths.includes(path) ? paths : paths.concat(path)\n}\n\nfunction removeListPath(paths: PathList, path: string): PathList {\n return paths.filter((thisPath) => thisPath !== path)\n}\n\nconst isArrayJsonPointer = /^\\/\\d+(\\/|$)/\n\nexport default function Provider<Data extends JsonObject>({\n defaultData,\n data,\n schema,\n onChange,\n onPathChange,\n onSubmit,\n onSubmitRequest,\n scrollTopOnSubmit,\n sessionStorageId,\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 // State\n const mountedFieldPathsRef = useRef<string[]>([])\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 }, [])\n // - Errors reported by fields, based on their direct validation rules\n const valuesWithErrorRef = useRef<string[]>([])\n // - Data\n const initialData = useMemo(() => {\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 const dataCacheRef = useRef<Partial<Data>>(data)\n // - Validator\n const ajvSchemaValidatorRef = useRef<ValidateFunction>()\n\n const validateData = useCallback(() => {\n if (!ajvSchemaValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvSchemaValidatorRef.current(internalDataRef.current)) {\n // Errors found\n const errors = ajvErrorsToFormErrors(\n ajvSchemaValidatorRef.current.errors\n )\n errorsRef.current = errors\n } else {\n errorsRef.current = undefined\n }\n forceUpdate()\n }, [])\n\n useEffect(() => {\n if (!schema) {\n return\n }\n ajvSchemaValidatorRef.current = ajv.compile(schema)\n validateData()\n }, [schema, validateData])\n\n // Error handling\n const hasErrors = useCallback(\n () =>\n Boolean(\n mountedFieldPathsRef.current.find(\n (mountedFieldPath) =>\n errorsRef.current?.[mountedFieldPath] !== undefined ||\n valuesWithErrorRef.current.includes(mountedFieldPath)\n )\n ),\n []\n )\n\n const setValueWithError = useCallback(\n (identifier: string, withError: boolean) => {\n if (withError !== valuesWithErrorRef.current.includes(identifier)) {\n // The boolean error state for the target value was changed\n valuesWithErrorRef.current = withError\n ? addListPath(valuesWithErrorRef.current, identifier)\n : removeListPath(valuesWithErrorRef.current, identifier)\n forceUpdate()\n }\n },\n []\n )\n\n const updateDataValue = useCallback(\n (path, value) => {\n if (!path) {\n return\n }\n\n // Update the data even if it contains errors. Submit/SubmitRequest will be called accordingly\n const newData = structuredClone(\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 )\n\n if (path !== '/') {\n pointer.set(newData as Data, path, value)\n }\n\n if (sessionStorageId && typeof window !== 'undefined') {\n window.sessionStorage?.setItem(\n sessionStorageId,\n JSON.stringify(newData)\n )\n }\n\n internalDataRef.current = newData\n\n forceUpdate()\n\n return newData\n },\n [sessionStorageId]\n )\n\n const handlePathChange = 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: string) => {\n mountedFieldPathsRef.current = addListPath(\n mountedFieldPathsRef.current,\n path\n )\n }, [])\n\n const handleUnMountField = useCallback((path: string) => {\n mountedFieldPathsRef.current = removeListPath(\n mountedFieldPathsRef.current,\n path\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?.(internalDataRef.current as Data, {\n resetForm,\n clearData,\n })\n\n if (typeof window !== 'undefined') {\n if (scrollTopOnSubmit) {\n window?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n } else {\n showAllErrorsRef.current = true\n onSubmitRequest?.()\n forceUpdate()\n }\n return internalDataRef.current\n },\n [\n scrollTopOnSubmit,\n hasErrors,\n onSubmit,\n onSubmitRequest,\n sessionStorageId,\n ]\n )\n\n useMountEffect(() => {\n // Validate the initial data\n validateData()\n })\n\n useUpdateEffect(() => {\n // Update and validate changes to the external data set,\n // And avoid \"resetting\" the data with the originally given data (React.StrictMode)\n if (data !== dataCacheRef.current) {\n dataCacheRef.current = data\n internalDataRef.current = data\n }\n validateData()\n forceUpdate()\n }, [data, validateData, forceUpdate])\n\n return (\n <Context.Provider\n value={{\n data: internalDataRef.current,\n ...rest,\n handlePathChange,\n updateDataValue,\n handleSubmit,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n setShowAllErrors,\n mountedFieldPaths: mountedFieldPathsRef.current,\n handleMountField,\n handleUnMountField,\n hasErrors,\n setValueWithError,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Provider.js","names":["React","useEffect","useRef","useMemo","useCallback","useReducer","pointer","ajv","ajvErrorsToFormErrors","useMountEffect","useUpdateEffect","useSharedState","Context","structuredClone","addListPath","paths","path","includes","concat","removeListPath","filter","thisPath","isArrayJsonPointer","Provider","_ref","id","defaultData","data","schema","onChange","onPathChange","onSubmit","onSubmitRequest","scrollTopOnSubmit","sessionStorageId","children","rest","_objectWithoutProperties","_excluded","forceUpdate","undefined","console","error","mountedFieldPathsRef","errorsRef","showAllErrorsRef","setShowAllErrors","showAllErrors","current","valuesWithErrorRef","initialData","window","_window$sessionStorag","sessionDataJSON","sessionStorage","getItem","JSON","parse","internalDataRef","dataCacheRef","ajvSchemaValidatorRef","sharedState","validateData","errors","compile","hasErrors","Boolean","find","mountedFieldPath","_errorsRef$current","setValueWithError","identifier","withError","updateDataValue","value","_internalDataRef$curr","givenData","match","newData","e","set","_sharedState$update","update","call","_window$sessionStorag2","setItem","stringify","handlePathChange","handleMountField","handleUnMountField","handleSubmit","formElement","resetForm","_formElement$reset","reset","removeItem","clearData","_window","scrollTo","top","behavior","createElement","_objectSpread","mountedFieldPaths"],"sources":["../../../../../../src/extensions/forms/DataContext/Provider/Provider.tsx"],"sourcesContent":["import React, {\n useEffect,\n useRef,\n useMemo,\n useCallback,\n useReducer,\n} from 'react'\nimport pointer, { JsonObject } from 'json-pointer'\nimport { ValidateFunction } from 'ajv'\nimport ajv, { ajvErrorsToFormErrors } from '../../utils/ajv'\nimport { FormError, JSONSchema } 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\nexport type Path = string\nexport type UpdateDataValue = (path: Path, data: unknown) => void\n\nexport interface Props<Data extends JsonObject> {\n /** Unique ID to communicate with the hook Form.useData */\n id?: string\n /** Default source data, only used if no other source is available, and not leading to updates if changed after mount */\n defaultData?: Partial<Data>\n /** Dynamic source data used as both initial data, and updates internal data if changed after mount */\n data?: Partial<Data>\n /** JSON Schema for validating the data, like during input or after attempting submit */\n schema?: JSONSchema\n /** Change handler for the whole data set */\n onChange?: (data: Data) => void\n /** Change handler for each value */\n onPathChange?: (path: Path, value: any) => void\n /** Submit called, data was valid (if validation available) */\n onSubmit?: (\n data: Data,\n {\n resetForm,\n clearData,\n }: {\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 ) => void\n /** Submit was requested, but data was invalid */\n onSubmitRequest?: () => void\n scrollTopOnSubmit?: boolean\n /** Key for caching the data in session storage */\n sessionStorageId?: string\n children: React.ReactNode\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\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 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 // State\n const mountedFieldPathsRef = useRef<string[]>([])\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 }, [])\n // - Errors reported by fields, based on their direct validation rules\n const valuesWithErrorRef = useRef<string[]>([])\n // - Data\n const initialData = useMemo(() => {\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 const dataCacheRef = useRef<Partial<Data>>(data)\n // - Validator\n const ajvSchemaValidatorRef = useRef<ValidateFunction>()\n // - Shared state\n const sharedState = useSharedState(id, initialData)\n useMemo(() => {\n if (sharedState?.data && !initialData) {\n internalDataRef.current = sharedState.data\n }\n }, [initialData, sharedState.data])\n\n const validateData = useCallback(() => {\n if (!ajvSchemaValidatorRef.current) {\n // No schema-based validator. Assume data is valid.\n return\n }\n\n if (!ajvSchemaValidatorRef.current(internalDataRef.current)) {\n // Errors found\n const errors = ajvErrorsToFormErrors(\n ajvSchemaValidatorRef.current.errors\n )\n errorsRef.current = errors\n } else {\n errorsRef.current = undefined\n }\n forceUpdate()\n }, [])\n\n useEffect(() => {\n if (!schema) {\n return\n }\n ajvSchemaValidatorRef.current = ajv.compile(schema)\n validateData()\n }, [schema, validateData])\n\n // Error handling\n const hasErrors = useCallback(\n () =>\n Boolean(\n mountedFieldPathsRef.current.find(\n (mountedFieldPath) =>\n errorsRef.current?.[mountedFieldPath] !== undefined ||\n valuesWithErrorRef.current.includes(mountedFieldPath)\n )\n ),\n []\n )\n\n const setValueWithError = useCallback(\n (identifier: string, withError: boolean) => {\n if (withError !== valuesWithErrorRef.current.includes(identifier)) {\n // The boolean error state for the target value was changed\n valuesWithErrorRef.current = withError\n ? addListPath(valuesWithErrorRef.current, identifier)\n : removeListPath(valuesWithErrorRef.current, identifier)\n forceUpdate()\n }\n },\n []\n )\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\n let newData = 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 as Data, path, value)\n }\n\n if (id) {\n sharedState.update?.(newData)\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 [id, sessionStorageId, sharedState]\n )\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 }, [])\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?.(internalDataRef.current as Data, {\n resetForm,\n clearData,\n })\n\n if (typeof window !== 'undefined') {\n if (scrollTopOnSubmit) {\n window?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n } else {\n showAllErrorsRef.current = true\n onSubmitRequest?.()\n forceUpdate()\n }\n return internalDataRef.current\n },\n [\n scrollTopOnSubmit,\n hasErrors,\n onSubmit,\n onSubmitRequest,\n sessionStorageId,\n ]\n )\n\n useMountEffect(() => {\n // Validate the initial data\n validateData()\n })\n\n useUpdateEffect(() => {\n // Update and validate changes to the external data set,\n // And avoid \"resetting\" the data with the originally given data (React.StrictMode)\n if (data !== dataCacheRef.current) {\n dataCacheRef.current = data\n internalDataRef.current = data\n }\n validateData()\n forceUpdate()\n }, [data, validateData, forceUpdate])\n\n return (\n <Context.Provider\n value={{\n data: internalDataRef.current,\n ...rest,\n handlePathChange,\n updateDataValue,\n handleSubmit,\n errors: errorsRef.current,\n showAllErrors: showAllErrorsRef.current,\n setShowAllErrors,\n mountedFieldPaths: mountedFieldPathsRef.current,\n handleMountField,\n handleUnMountField,\n hasErrors,\n setValueWithError,\n }}\n >\n {children}\n </Context.Provider>\n )\n}\n"],"mappings":"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"}
|
|
@@ -2,13 +2,13 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
|
2
2
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
3
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
4
|
import React, { useMemo } from 'react';
|
|
5
|
-
import { Checkbox,
|
|
6
|
-
import ButtonRow from '../../Form/ButtonRow';
|
|
5
|
+
import { Checkbox, ToggleButton } from '../../../../components';
|
|
7
6
|
import classnames from 'classnames';
|
|
8
7
|
import Option from '../Option';
|
|
9
8
|
import FieldBlock from '../../FieldBlock';
|
|
10
9
|
import { useDataValue } from '../../hooks';
|
|
11
10
|
import { pickSpacingProps } from '../../../../components/flex/utils';
|
|
11
|
+
import ToggleButtonGroupContext from '../../../../components/toggle-button/ToggleButtonGroupContext';
|
|
12
12
|
function ArraySelection(props) {
|
|
13
13
|
const {
|
|
14
14
|
id,
|
|
@@ -17,10 +17,9 @@ function ArraySelection(props) {
|
|
|
17
17
|
layout = 'vertical',
|
|
18
18
|
optionsLayout = 'vertical',
|
|
19
19
|
label,
|
|
20
|
-
labelDescription,
|
|
21
|
-
labelSecondary,
|
|
22
20
|
value,
|
|
23
21
|
error,
|
|
22
|
+
hasError,
|
|
24
23
|
info,
|
|
25
24
|
warning,
|
|
26
25
|
disabled,
|
|
@@ -30,15 +29,13 @@ function ArraySelection(props) {
|
|
|
30
29
|
} = useDataValue(props);
|
|
31
30
|
const fieldBlockProps = _objectSpread({
|
|
32
31
|
forId: id,
|
|
33
|
-
className: classnames(`dnb-forms-field-array-selection dnb-forms-field-array-selection--
|
|
32
|
+
className: classnames(`dnb-forms-field-array-selection dnb-forms-field-array-selection--layout-${optionsLayout}`, className),
|
|
34
33
|
contentClassName: 'dnb-forms-field-array-selection__options',
|
|
35
34
|
info,
|
|
36
35
|
warning,
|
|
37
36
|
error,
|
|
38
37
|
layout,
|
|
39
|
-
label
|
|
40
|
-
labelDescription,
|
|
41
|
-
labelSecondary
|
|
38
|
+
label
|
|
42
39
|
}, pickSpacingProps(props));
|
|
43
40
|
const options = useMemo(() => React.Children.toArray(children).filter(child => React.isValidElement(child) && child.type === Option).map(option => {
|
|
44
41
|
var _option$props$title;
|
|
@@ -54,14 +51,16 @@ function ArraySelection(props) {
|
|
|
54
51
|
}), [children, value, emptyValue, handleChange]);
|
|
55
52
|
switch (variant) {
|
|
56
53
|
case 'button':
|
|
57
|
-
return React.createElement(FieldBlock, fieldBlockProps, React.createElement(
|
|
54
|
+
return React.createElement(FieldBlock, fieldBlockProps, React.createElement(ToggleButtonGroupContext.Provider, {
|
|
55
|
+
value: {
|
|
56
|
+
status: hasError ? 'error' : undefined,
|
|
57
|
+
disabled
|
|
58
|
+
}
|
|
59
|
+
}, options.map((option, i) => React.createElement(ToggleButton, {
|
|
58
60
|
key: `option-${i}-${option.value}`,
|
|
59
|
-
id: id,
|
|
60
61
|
text: option.title,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
status: error ? 'error' : undefined,
|
|
64
|
-
disabled: disabled
|
|
62
|
+
checked: value === null || value === void 0 ? void 0 : value.includes(option.value),
|
|
63
|
+
on_change: option.handleSelect
|
|
65
64
|
}))));
|
|
66
65
|
case 'checkbox':
|
|
67
66
|
return React.createElement(FieldBlock, fieldBlockProps, options.map((option, i) => React.createElement(Checkbox, {
|
|
@@ -70,7 +69,8 @@ function ArraySelection(props) {
|
|
|
70
69
|
label: option.title,
|
|
71
70
|
checked: value === null || value === void 0 ? void 0 : value.includes(option.value),
|
|
72
71
|
disabled: disabled,
|
|
73
|
-
on_change: option.handleSelect
|
|
72
|
+
on_change: option.handleSelect,
|
|
73
|
+
status: hasError ? 'error' : undefined
|
|
74
74
|
})));
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArraySelection.js","names":["React","useMemo","Checkbox","
|
|
1
|
+
{"version":3,"file":"ArraySelection.js","names":["React","useMemo","Checkbox","ToggleButton","classnames","Option","FieldBlock","useDataValue","pickSpacingProps","ToggleButtonGroupContext","ArraySelection","props","id","className","variant","layout","optionsLayout","label","value","error","hasError","info","warning","disabled","emptyValue","handleChange","children","fieldBlockProps","_objectSpread","forId","contentClassName","options","Children","toArray","filter","child","isValidElement","type","map","option","_option$props$title","title","handleSelect","selected","newValue","includes","length","createElement","Provider","status","undefined","i","key","text","checked","on_change","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/ArraySelection/ArraySelection.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { Checkbox, ToggleButton } from '../../../../components'\nimport classnames from 'classnames'\nimport Option from '../Option'\nimport FieldBlock from '../../FieldBlock'\nimport { useDataValue } from '../../hooks'\nimport { FieldProps } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport ToggleButtonGroupContext from '../../../../components/toggle-button/ToggleButtonGroupContext'\n\ninterface IOption {\n title: string\n value: number | string\n handleSelect: () => void\n}\n\nexport type Props = FieldProps<Array<string | number>> & {\n children?: React.ReactNode\n variant?: 'checkbox' | 'button'\n optionsLayout?: 'horizontal' | 'vertical'\n}\n\nfunction ArraySelection(props: Props) {\n const {\n id,\n className,\n variant = 'checkbox',\n layout = 'vertical',\n optionsLayout = 'vertical',\n label,\n value,\n error,\n hasError,\n info,\n warning,\n disabled,\n emptyValue,\n handleChange,\n children,\n } = useDataValue(props)\n\n const fieldBlockProps = {\n forId: id,\n className: classnames(\n 'dnb-forms-field-array-selection',\n `dnb-forms-field-array-selection--layout-${optionsLayout}`,\n className\n ),\n contentClassName: 'dnb-forms-field-array-selection__options',\n info,\n warning,\n error,\n layout,\n label,\n ...pickSpacingProps(props),\n }\n\n const options: IOption[] = useMemo(\n () =>\n React.Children.toArray(children)\n .filter(\n (child) => React.isValidElement(child) && child.type === Option\n )\n .map((option: React.ReactElement) => ({\n title: option.props.title ?? option.props.children,\n value: option.props.value,\n handleSelect: () => {\n const selected = option.props.value\n\n const newValue = value?.includes(selected)\n ? value.filter((value) => value !== selected)\n : [...(value ?? []), selected]\n\n handleChange?.(newValue.length === 0 ? emptyValue : newValue)\n },\n })),\n [children, value, emptyValue, handleChange]\n )\n\n switch (variant) {\n case 'button':\n return (\n <FieldBlock {...fieldBlockProps}>\n <ToggleButtonGroupContext.Provider\n value={{\n status: hasError ? 'error' : undefined,\n disabled,\n }}\n >\n {options.map((option, i) => (\n <ToggleButton\n key={`option-${i}-${option.value}`}\n text={option.title}\n checked={value?.includes(option.value)}\n on_change={option.handleSelect}\n />\n ))}\n </ToggleButtonGroupContext.Provider>\n </FieldBlock>\n )\n case 'checkbox':\n return (\n <FieldBlock {...fieldBlockProps}>\n {options.map((option, i) => (\n <Checkbox\n key={`option-${i}-${option.value}`}\n className=\"dnb-forms-field-array-selection__checkbox\"\n label={option.title}\n checked={value?.includes(option.value)}\n disabled={disabled}\n on_change={option.handleSelect}\n status={hasError ? 'error' : undefined}\n />\n ))}\n </FieldBlock>\n )\n }\n}\n\nArraySelection._supportsSpacingProps = true\nexport default ArraySelection\n"],"mappings":"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"}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Utilities
|
|
3
|
+
*/
|
|
4
|
+
.dnb-forms-field-array-selection--layout-vertical .dnb-forms-field-array-selection__options {
|
|
2
5
|
display: flex;
|
|
3
6
|
flex-flow: column;
|
|
4
7
|
row-gap: var(--spacing-x-small);
|
|
5
8
|
}
|
|
6
|
-
.dnb-forms-field-array-selection--
|
|
9
|
+
.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options {
|
|
7
10
|
display: flex;
|
|
8
11
|
flex-flow: row wrap;
|
|
9
12
|
-moz-column-gap: var(--spacing-small);
|
|
10
13
|
column-gap: var(--spacing-small);
|
|
14
|
+
row-gap: var(--spacing-x-small);
|
|
15
|
+
}
|
|
16
|
+
@media screen and (min-width: 40em) {
|
|
17
|
+
.dnb-forms-field-array-selection .dnb-forms-field-block--layout-horizontal .dnb-form-label {
|
|
18
|
+
line-height: 2.5rem;
|
|
19
|
+
margin-bottom: 0;
|
|
20
|
+
}
|
|
11
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.dnb-forms-field-array-selection--
|
|
1
|
+
.dnb-forms-field-array-selection--layout-vertical .dnb-forms-field-array-selection__options{display:flex;flex-flow:column;row-gap:var(--spacing-x-small)}.dnb-forms-field-array-selection--layout-horizontal .dnb-forms-field-array-selection__options{-moz-column-gap:var(--spacing-small);column-gap:var(--spacing-small);display:flex;flex-flow:row wrap;row-gap:var(--spacing-x-small)}@media screen and (min-width:40em){.dnb-forms-field-array-selection .dnb-forms-field-block--layout-horizontal .dnb-form-label{line-height:2.5rem;margin-bottom:0}}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
+
@import '../../../../../style/core/utilities.scss';
|
|
2
|
+
|
|
1
3
|
.dnb-forms-field-array-selection {
|
|
2
|
-
&--
|
|
4
|
+
&--layout-vertical &__options {
|
|
3
5
|
display: flex;
|
|
4
6
|
flex-flow: column;
|
|
5
7
|
row-gap: var(--spacing-x-small);
|
|
6
8
|
}
|
|
7
9
|
|
|
8
|
-
&--
|
|
10
|
+
&--layout-horizontal &__options {
|
|
9
11
|
display: flex;
|
|
10
12
|
flex-flow: row wrap;
|
|
11
13
|
column-gap: var(--spacing-small);
|
|
14
|
+
row-gap: var(--spacing-x-small); // for when wrapped
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@include allAbove(small) {
|
|
18
|
+
.dnb-forms-field-block--layout-horizontal .dnb-form-label {
|
|
19
|
+
line-height: 2.5rem;
|
|
20
|
+
margin-bottom: 0;
|
|
21
|
+
}
|
|
12
22
|
}
|
|
13
23
|
}
|
|
@@ -49,8 +49,6 @@ function DateComponent(props) {
|
|
|
49
49
|
id,
|
|
50
50
|
className,
|
|
51
51
|
label,
|
|
52
|
-
labelDescription,
|
|
53
|
-
labelSecondary,
|
|
54
52
|
value,
|
|
55
53
|
help,
|
|
56
54
|
info,
|
|
@@ -66,8 +64,6 @@ function DateComponent(props) {
|
|
|
66
64
|
className: classnames('dnb-forms-field-string', className),
|
|
67
65
|
forId: id,
|
|
68
66
|
label: label !== null && label !== void 0 ? label : sharedContext === null || sharedContext === void 0 ? void 0 : sharedContext.translation.Forms.dateLabel,
|
|
69
|
-
labelDescription: labelDescription,
|
|
70
|
-
labelSecondary: labelSecondary,
|
|
71
67
|
info: info,
|
|
72
68
|
warning: warning,
|
|
73
69
|
disabled: disabled,
|
|
@@ -79,7 +75,7 @@ function DateComponent(props) {
|
|
|
79
75
|
show_input: true,
|
|
80
76
|
show_cancel_button: true,
|
|
81
77
|
show_reset_button: true,
|
|
82
|
-
status:
|
|
78
|
+
status: hasError ? 'error' : undefined,
|
|
83
79
|
suffix: help ? React.createElement(HelpButton, {
|
|
84
80
|
title: help.title
|
|
85
81
|
}, help.contents) : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Date.js","names":["React","useCallback","useContext","useMemo","DatePicker","HelpButton","useDataValue","pickSpacingProps","SharedContext","classnames","FieldBlock","parseISO","isValid","DateComponent","props","sharedContext","tr","translation","Forms","errorMessages","_objectSpread","required","dateErrorRequired","pattern","inputErrorPattern","schema","_props$schema","type","validateRequired","value","error","undefined","preparedProps","fromInput","date","id","className","label","
|
|
1
|
+
{"version":3,"file":"Date.js","names":["React","useCallback","useContext","useMemo","DatePicker","HelpButton","useDataValue","pickSpacingProps","SharedContext","classnames","FieldBlock","parseISO","isValid","DateComponent","props","sharedContext","tr","translation","Forms","errorMessages","_objectSpread","required","dateErrorRequired","pattern","inputErrorPattern","schema","_props$schema","type","validateRequired","value","error","undefined","preparedProps","fromInput","date","id","className","label","help","info","warning","hasError","disabled","handleFocus","handleBlur","handleChange","createElement","_extends","forId","dateLabel","show_input","show_cancel_button","show_reset_button","status","suffix","title","contents","on_change","on_reset","onFocus","onBlur","_supportsSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Date/Date.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo } from 'react'\nimport { DatePicker, HelpButton } from '../../../../components'\nimport { useDataValue } from '../../hooks'\nimport { FieldProps, FieldHelpProps, JSONSchema } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport SharedContext from '../../../../shared/Context'\nimport classnames from 'classnames'\nimport FieldBlock from '../../FieldBlock'\nimport { parseISO, isValid } from 'date-fns'\n\nexport type Props = FieldHelpProps &\n FieldProps<string> & {\n // Validation\n pattern?: string\n }\n\nfunction DateComponent(props: Props) {\n const sharedContext = useContext(SharedContext)\n const tr = sharedContext?.translation.Forms\n\n const errorMessages = useMemo(\n () => ({\n required: tr.dateErrorRequired,\n pattern: tr.inputErrorPattern,\n ...props.errorMessages,\n }),\n [tr, props.errorMessages]\n )\n\n const schema = useMemo<JSONSchema>(\n () =>\n props.schema ?? {\n type: 'string',\n pattern: props.pattern,\n },\n [props.schema, props.pattern]\n )\n\n const validateRequired = useCallback(\n (value: string, { required, error }) => {\n if (required && (!value || !isValid(parseISO(value)))) {\n return error\n }\n\n return undefined\n },\n []\n )\n\n const preparedProps: Props = {\n ...props,\n errorMessages,\n schema,\n fromInput: ({ date }: { date: string }) => {\n return date\n },\n validateRequired,\n }\n\n const {\n id,\n className,\n label,\n value,\n help,\n info,\n warning,\n error,\n hasError,\n disabled,\n handleFocus,\n handleBlur,\n handleChange,\n } = useDataValue(preparedProps)\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-string', className)}\n forId={id}\n label={label ?? sharedContext?.translation.Forms.dateLabel}\n info={info}\n warning={warning}\n disabled={disabled}\n error={error}\n {...pickSpacingProps(props)}\n >\n <DatePicker\n id={id}\n date={value}\n disabled={disabled}\n show_input={true}\n show_cancel_button={true}\n show_reset_button={true}\n status={hasError ? 'error' : undefined}\n suffix={\n help ? (\n <HelpButton title={help.title}>{help.contents}</HelpButton>\n ) : undefined\n }\n on_change={handleChange}\n on_reset={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...pickSpacingProps(props)}\n />\n </FieldBlock>\n )\n}\n\nDateComponent._supportsSpacingProps = true\nexport default DateComponent\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FieldHelpProps, FieldProps } from '../../types';
|
|
2
|
-
export type ExpiryProps = FieldProps<string
|
|
2
|
+
export type ExpiryProps = FieldHelpProps & FieldProps<string>;
|
|
3
3
|
declare function Expiry(props: ExpiryProps): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
declare namespace Expiry {
|
|
5
5
|
var _supportsEufemiaSpacingProps: boolean;
|
|
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
4
4
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
5
5
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
6
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
-
import React, { useContext, useRef } from 'react';
|
|
7
|
+
import React, { useCallback, useContext, useMemo, useRef } from 'react';
|
|
8
8
|
import { makeUniqueId } from '../../../../shared/component-helper';
|
|
9
9
|
import SharedContext from '../../../../shared/Context';
|
|
10
10
|
import { pickSpacingProps } from '../../../../components/flex/utils';
|
|
@@ -16,27 +16,38 @@ import { HelpButton } from '../../../../components';
|
|
|
16
16
|
function Expiry(props) {
|
|
17
17
|
var _value$substring;
|
|
18
18
|
const sharedContext = useContext(SharedContext);
|
|
19
|
+
const translations = sharedContext === null || sharedContext === void 0 ? void 0 : sharedContext.translation.Forms;
|
|
19
20
|
const placeholders = sharedContext === null || sharedContext === void 0 ? void 0 : sharedContext.translation.DatePicker.placeholder_characters;
|
|
21
|
+
const errorMessages = useMemo(() => _objectSpread({
|
|
22
|
+
required: translations.dateErrorRequired
|
|
23
|
+
}, props.errorMessages), [translations, props.errorMessages]);
|
|
24
|
+
const validateRequired = useCallback((value, {
|
|
25
|
+
required,
|
|
26
|
+
error
|
|
27
|
+
}) => {
|
|
28
|
+
return required && !value ? error : undefined;
|
|
29
|
+
}, []);
|
|
30
|
+
const preparedProps = _objectSpread(_objectSpread({}, props), {}, {
|
|
31
|
+
errorMessages,
|
|
32
|
+
fromInput: toExpiryString,
|
|
33
|
+
validateRequired
|
|
34
|
+
});
|
|
20
35
|
const {
|
|
21
36
|
id: propsId,
|
|
22
37
|
className,
|
|
23
|
-
label =
|
|
38
|
+
label = translations.expiryLabel,
|
|
24
39
|
error,
|
|
25
40
|
info,
|
|
26
41
|
warning,
|
|
27
42
|
help,
|
|
28
43
|
disabled,
|
|
29
44
|
value = '',
|
|
30
|
-
labelDescription,
|
|
31
|
-
labelSecondary,
|
|
32
45
|
layout = 'vertical',
|
|
33
46
|
required,
|
|
34
47
|
handleFocus,
|
|
35
48
|
handleBlur,
|
|
36
49
|
handleChange
|
|
37
|
-
} = useDataValue(_objectSpread(
|
|
38
|
-
emptyValue: ''
|
|
39
|
-
}));
|
|
50
|
+
} = useDataValue(_objectSpread({}, preparedProps));
|
|
40
51
|
const expiry = {
|
|
41
52
|
month: ensureValidMonth(value === null || value === void 0 ? void 0 : value.substring(0, 2)),
|
|
42
53
|
year: (_value$substring = value === null || value === void 0 ? void 0 : value.substring(2, 4)) !== null && _value$substring !== void 0 ? _value$substring : ''
|
|
@@ -45,8 +56,6 @@ function Expiry(props) {
|
|
|
45
56
|
const status = error ? 'error' : warning ? 'warn' : info ? 'info' : null;
|
|
46
57
|
return React.createElement(FieldBlock, _extends({
|
|
47
58
|
className: classnames('dnb-forms-field-expiry', className),
|
|
48
|
-
labelSecondary: labelSecondary,
|
|
49
|
-
labelDescription: labelDescription,
|
|
50
59
|
info: info,
|
|
51
60
|
warning: warning,
|
|
52
61
|
error: error
|
|
@@ -60,7 +69,7 @@ function Expiry(props) {
|
|
|
60
69
|
statusState: disabled ? 'disabled' : undefined,
|
|
61
70
|
disabled: disabled,
|
|
62
71
|
required: required,
|
|
63
|
-
onChange:
|
|
72
|
+
onChange: handleChange,
|
|
64
73
|
onBlur: handleBlur,
|
|
65
74
|
onFocus: handleFocus,
|
|
66
75
|
delimiter: "/",
|
|
@@ -82,7 +91,7 @@ function Expiry(props) {
|
|
|
82
91
|
title: help.title
|
|
83
92
|
}, help.contents) : undefined
|
|
84
93
|
}));
|
|
85
|
-
function
|
|
94
|
+
function toExpiryString(values) {
|
|
86
95
|
return Object.values(values).join('');
|
|
87
96
|
}
|
|
88
97
|
function ensureValidMonth(month) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Expiry.js","names":["React","useContext","useRef","makeUniqueId","SharedContext","pickSpacingProps","useDataValue","classnames","FieldBlock","MultiInputMask","HelpButton","Expiry","props","_value$substring","sharedContext","
|
|
1
|
+
{"version":3,"file":"Expiry.js","names":["React","useCallback","useContext","useMemo","useRef","makeUniqueId","SharedContext","pickSpacingProps","useDataValue","classnames","FieldBlock","MultiInputMask","HelpButton","Expiry","props","_value$substring","sharedContext","translations","translation","Forms","placeholders","DatePicker","placeholder_characters","errorMessages","_objectSpread","required","dateErrorRequired","validateRequired","value","error","undefined","preparedProps","fromInput","toExpiryString","id","propsId","className","label","expiryLabel","info","warning","help","disabled","layout","handleFocus","handleBlur","handleChange","expiry","month","ensureValidMonth","substring","year","idRef","current","status","createElement","_extends","stretch","labelDirection","values","statusState","onChange","onBlur","onFocus","delimiter","inputMode","inputs","mask","getMonthMask","placeholderCharacter","autoComplete","suffix","title","contents","Object","join","firstMask","secondMask","firstDigit","charAt","isFirstDigitValid","test","seconDigit","isSecondDigitValid","_supportsEufemiaSpacingProps"],"sources":["../../../../../../src/extensions/forms/Field/Expiry/Expiry.tsx"],"sourcesContent":["import React, { useCallback, useContext, useMemo, useRef } from 'react'\nimport { makeUniqueId } from '../../../../shared/component-helper'\nimport SharedContext from '../../../../shared/Context'\nimport { FieldHelpProps, FieldProps } from '../../types'\nimport { pickSpacingProps } from '../../../../components/flex/utils'\nimport { useDataValue } from '../../hooks'\nimport classnames from 'classnames'\nimport FieldBlock from '../../FieldBlock'\nimport { MultiInputMask } from '../../../../components/input-masked'\nimport type { MultiInputMaskValue } from '../../../../components/input-masked'\nimport { HelpButton } from '../../../../components'\n\ntype ExpiryValue = MultiInputMaskValue<'month' | 'year'>\n\nexport type ExpiryProps = FieldHelpProps & FieldProps<string>\n\nfunction Expiry(props: ExpiryProps) {\n const sharedContext = useContext(SharedContext)\n const translations = sharedContext?.translation.Forms\n const placeholders =\n sharedContext?.translation.DatePicker.placeholder_characters\n\n const errorMessages = useMemo(\n () => ({\n required: translations.dateErrorRequired,\n ...props.errorMessages,\n }),\n [translations, props.errorMessages]\n )\n\n const validateRequired = useCallback(\n (value: string, { required, error }) => {\n return required && !value ? error : undefined\n },\n []\n )\n\n const preparedProps: ExpiryProps = {\n ...props,\n errorMessages,\n fromInput: toExpiryString,\n validateRequired,\n }\n\n const {\n id: propsId,\n className,\n label = translations.expiryLabel,\n error,\n info,\n warning,\n help,\n disabled,\n value = '',\n layout = 'vertical',\n required,\n handleFocus,\n handleBlur,\n handleChange,\n } = useDataValue({\n ...preparedProps,\n })\n\n const expiry: ExpiryValue = {\n month: ensureValidMonth(value?.substring(0, 2)),\n year: value?.substring(2, 4) ?? '',\n }\n\n const idRef = useRef(propsId || makeUniqueId()).current\n\n const status = error ? 'error' : warning ? 'warn' : info ? 'info' : null\n\n return (\n <FieldBlock\n className={classnames('dnb-forms-field-expiry', className)}\n info={info}\n warning={warning}\n error={error}\n {...pickSpacingProps(props)}\n >\n <MultiInputMask\n stretch\n id={`${idRef}__input`}\n label={label}\n labelDirection={layout}\n values={expiry}\n status={status}\n statusState={disabled ? 'disabled' : undefined}\n disabled={disabled}\n required={required}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n delimiter=\"/\"\n inputMode=\"numeric\"\n inputs={[\n {\n id: 'month',\n label: sharedContext?.translation.DatePicker['month'],\n mask: getMonthMask(expiry?.month),\n placeholderCharacter: placeholders['month'],\n autoComplete: 'cc-exp-month',\n },\n {\n id: 'year',\n label: sharedContext?.translation.DatePicker['year'],\n mask: [/[0-9]/, /[0-9]/],\n placeholderCharacter: placeholders['year'],\n autoComplete: 'cc-exp-year',\n },\n ]}\n suffix={\n help ? (\n <HelpButton title={help.title}>{help.contents}</HelpButton>\n ) : undefined\n }\n />\n </FieldBlock>\n )\n\n function toExpiryString(values: ExpiryValue) {\n return Object.values(values).join('')\n }\n\n function ensureValidMonth(month: string) {\n // Return empty value if no month is given\n if (!month) {\n return ''\n }\n\n const [firstMask, secondMask] = getMonthMask(month)\n\n const firstDigit = month?.charAt(0)\n const isFirstDigitValid = firstMask.test(firstDigit)\n\n if (firstDigit && !isFirstDigitValid) {\n // Return empty value if the first digit is invalid\n return ''\n }\n\n const seconDigit = month?.charAt(1)\n const isSecondDigitValid = secondMask.test(seconDigit)\n\n if (seconDigit && !isSecondDigitValid) {\n // Return empty value if the second digit is invalid\n return ''\n }\n\n // Return given month of month value is valid\n return month\n }\n\n function getMonthMask(month: string) {\n const firstDigit = month?.charAt(0)\n\n return [\n /[0-1]/,\n firstDigit === '0' || firstDigit === '' ? /[1-9]/ : /[0-2]/,\n ]\n }\n}\n\nExpiry._supportsEufemiaSpacingProps = true\nexport default Expiry\n"],"mappings":"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"}
|
|
@@ -98,7 +98,6 @@ function NumberComponent(props) {
|
|
|
98
98
|
toInput,
|
|
99
99
|
fromInput,
|
|
100
100
|
transformValue,
|
|
101
|
-
size: props.size !== 'small' && props.size !== 'large' ? 'medium' : props.size,
|
|
102
101
|
width: (_props$width = props.width) !== null && _props$width !== void 0 ? _props$width : 'medium'
|
|
103
102
|
});
|
|
104
103
|
const {
|
|
@@ -110,8 +109,6 @@ function NumberComponent(props) {
|
|
|
110
109
|
layout,
|
|
111
110
|
placeholder,
|
|
112
111
|
label,
|
|
113
|
-
labelDescription,
|
|
114
|
-
labelSecondary,
|
|
115
112
|
value,
|
|
116
113
|
minimum = Number.MIN_SAFE_INTEGER,
|
|
117
114
|
maximum = Number.MAX_SAFE_INTEGER,
|
|
@@ -157,8 +154,6 @@ function NumberComponent(props) {
|
|
|
157
154
|
forId: id,
|
|
158
155
|
layout,
|
|
159
156
|
label,
|
|
160
|
-
labelDescription,
|
|
161
|
-
labelSecondary,
|
|
162
157
|
info,
|
|
163
158
|
warning,
|
|
164
159
|
error,
|