@pinuts/bsr-uikit-relaunch 0.4.3 → 0.4.4

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.
Files changed (49) hide show
  1. package/dist/hooks/withFieldGroup.d.ts.map +1 -1
  2. package/dist/hooks/withFieldGroup.js +46 -18
  3. package/dist/index.js +1 -1
  4. package/dist/items/AbholortMaterialienField/AbholortMaterialienField.d.ts.map +1 -1
  5. package/dist/items/AbholortMaterialienField/AbholortMaterialienField.js +7 -3
  6. package/dist/items/BSRAddressSelector/BSRAddressContext.d.ts +1 -0
  7. package/dist/items/BSRAddressSelector/BSRAddressContext.d.ts.map +1 -1
  8. package/dist/items/BSRAddressSelector/BSRAddressContext.js +4 -1
  9. package/dist/items/BSRAddressSelector/BSRAddressSelector.d.ts.map +1 -1
  10. package/dist/items/BSRAddressSelector/BSRAddressSelector.js +41 -2
  11. package/dist/items/BSRAddressSelector/BSRAutocompleteField.d.ts +9 -1
  12. package/dist/items/BSRAddressSelector/BSRAutocompleteField.d.ts.map +1 -1
  13. package/dist/items/BSRAddressSelector/BSRAutocompleteField.js +29 -7
  14. package/dist/items/BSRAddressSelector/BSRStreetPlzSelector.js +6 -1
  15. package/dist/items/BSRAddressSelector/HouseNumberSelectField.d.ts.map +1 -1
  16. package/dist/items/BSRAddressSelector/HouseNumberSelectField.js +7 -3
  17. package/dist/items/BSRAddressSelector/withAddressGroupValidation.d.ts +12 -0
  18. package/dist/items/BSRAddressSelector/withAddressGroupValidation.d.ts.map +1 -0
  19. package/dist/items/BSRAddressSelector/withAddressGroupValidation.js +57 -0
  20. package/dist/items/FieldsetWrapper/FieldsetWrapper.d.ts +1 -0
  21. package/dist/items/FieldsetWrapper/FieldsetWrapper.d.ts.map +1 -1
  22. package/dist/items/FieldsetWrapper/FieldsetWrapper.js +28 -0
  23. package/dist/items/FileUploadField/FileUploadField.d.ts.map +1 -1
  24. package/dist/items/FileUploadField/FileUploadField.js +19 -3
  25. package/dist/items/FileUploadField/uploadedFileStore.d.ts +1 -0
  26. package/dist/items/FileUploadField/uploadedFileStore.d.ts.map +1 -1
  27. package/dist/items/FileUploadField/uploadedFileStore.js +10 -1
  28. package/dist/items/Grid/BSRGridColumn.d.ts.map +1 -1
  29. package/dist/items/Grid/BSRGridColumn.js +15 -1
  30. package/dist/items/Grid/BSRGridRow.d.ts.map +1 -1
  31. package/dist/items/Grid/BSRGridRow.js +15 -1
  32. package/dist/items/ReviewValue/ReviewValueList.d.ts +1 -1
  33. package/dist/items/ReviewValue/ReviewValueList.d.ts.map +1 -1
  34. package/dist/items/ReviewValue/ReviewValueList.js +3 -3
  35. package/dist/locales.d.ts +2 -0
  36. package/dist/locales.js +2 -0
  37. package/dist/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.d.ts.map +1 -1
  38. package/dist/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.js +3 -1
  39. package/dist/shared/FormWidget/FormWidgetControlPage.d.ts.map +1 -1
  40. package/dist/shared/FormWidget/FormWidgetControlPage.js +14 -5
  41. package/dist/shared/FormWidget/ReviewLayoutContext.d.ts +11 -0
  42. package/dist/shared/FormWidget/ReviewLayoutContext.d.ts.map +1 -0
  43. package/dist/shared/FormWidget/ReviewLayoutContext.js +17 -0
  44. package/dist/shared/KehrenbuergerForm/KehrenbuergerForm.d.ts.map +1 -1
  45. package/dist/shared/KehrenbuergerForm/KehrenbuergerForm.js +29 -2
  46. package/dist/styles/_errorMessagesInfoBox.scss +2 -1
  47. package/dist/styles/_form.scss +14 -3
  48. package/dist/styles/_review.scss +52 -3
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AbholortMaterialienField.d.ts","sourceRoot":"","sources":["../../../src/items/AbholortMaterialienField/AbholortMaterialienField.jsx"],"names":[],"mappings":";AASA;;;;GAIG;AACH;;;sBAwCC;;;;;;;;;;;;;;kBAtD8B,OAAO;sBAChB,YAAY"}
1
+ {"version":3,"file":"AbholortMaterialienField.d.ts","sourceRoot":"","sources":["../../../src/items/AbholortMaterialienField/AbholortMaterialienField.jsx"],"names":[],"mappings":";AASA;;;;GAIG;AACH;;;sBA0CC;;;;;;;;;;;;;;kBAxD8B,OAAO;sBAChB,YAAY"}
@@ -35,7 +35,8 @@ const AbholortMaterialienField = _ref => {
35
35
  return selected?.adresse || '';
36
36
  }, [config.options, field.value]);
37
37
 
38
- // Die Adresse als Beschreibung mit der Selectbox verknüpfen
38
+ // Die Adresse als Beschreibung mit der Selectbox verknüpfen; auf der Kontrollseite
39
+ // steht sie im selben dd wie der Abholort
39
40
  const selectConfig = (0, _react.useMemo)(() => ({
40
41
  ...config,
41
42
  inputProps: {
@@ -43,11 +44,14 @@ const AbholortMaterialienField = _ref => {
43
44
  ...(selectedAddress ? {
44
45
  'aria-describedby': addressId
45
46
  } : {})
46
- }
47
+ },
48
+ ...(config.reviewMode && selectedAddress ? {
49
+ reviewAppendix: selectedAddress
50
+ } : {})
47
51
  }), [config, selectedAddress, addressId]);
48
52
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_SelectField.default, _extends({}, otherProps, {
49
53
  config: selectConfig
50
- })), selectedAddress && /*#__PURE__*/_react.default.createElement(_TextBox.default, {
54
+ })), selectedAddress && !config.reviewMode && /*#__PURE__*/_react.default.createElement(_TextBox.default, {
51
55
  config: {
52
56
  text: selectedAddress,
53
57
  html: true,
@@ -1,4 +1,5 @@
1
1
  export const BSRAddressContext: React.Context<any>;
2
+ export const BSRAddressValidationContext: React.Context<{}>;
2
3
  export default BSRAddressContextProvider;
3
4
  import React from 'react';
4
5
  declare function BSRAddressContextProvider({ initAddressContext, children }: {
@@ -1 +1 @@
1
- {"version":3,"file":"BSRAddressContext.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAddressContext.js"],"names":[],"mappings":"AAeA,mDAAiD;;kBAf+B,OAAO;AAiBvF;;;sBAuKC;;;;;;;;;;;;;sBAvLqB,YAAY"}
1
+ {"version":3,"file":"BSRAddressContext.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAddressContext.js"],"names":[],"mappings":"AAeA,mDAAiD;AAGjD,4DAA6D;;kBAlBmB,OAAO;AAoBvF;;;sBAuKC;;;;;;;;;;;;;sBA1LqB,YAAY"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.BSRAddressContext = void 0;
6
+ exports.default = exports.BSRAddressValidationContext = exports.BSRAddressContext = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _formBuilder = require("@pinuts/form-builder");
@@ -21,6 +21,9 @@ const defaultAdContext = {
21
21
  overwriteLabels: {}
22
22
  };
23
23
  const BSRAddressContext = exports.BSRAddressContext = /*#__PURE__*/(0, _react.createContext)();
24
+
25
+ // Validierungszustand des groupKey (Pflichtfeld "vollständige Adresse"), siehe BSRAddressSelector
26
+ const BSRAddressValidationContext = exports.BSRAddressValidationContext = /*#__PURE__*/(0, _react.createContext)({});
24
27
  const BSRAddressContextProvider = _ref => {
25
28
  let {
26
29
  initAddressContext,
@@ -1 +1 @@
1
- {"version":3,"file":"BSRAddressSelector.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAddressSelector.jsx"],"names":[],"mappings":";AAwBA;;sBA4CC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBApE8B,OAAO;sBAChB,YAAY"}
1
+ {"version":3,"file":"BSRAddressSelector.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAddressSelector.jsx"],"names":[],"mappings":";AA6BA;;sBAoFC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAjHiD,OAAO;sBACnC,YAAY"}
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactI18next = require("react-i18next");
9
10
  var _formBuilder = require("@pinuts/form-builder");
10
11
  var _FormFieldChildPropTypes = _interopRequireDefault(require("../FormFieldWrapper/FormFieldChildPropTypes.jsx"));
11
- var _BSRAddressContext = _interopRequireDefault(require("./BSRAddressContext.js"));
12
+ var _useValidationMessage = _interopRequireDefault(require("../../hooks/useValidationMessage.js"));
13
+ var _BSRAddressContext = _interopRequireWildcard(require("./BSRAddressContext.js"));
12
14
  require("./BSRAutocompleteField.jsx");
13
15
  require("./BSRAddressButtons.jsx");
14
16
  require("./BSRStreetPlzSelector.jsx");
@@ -21,6 +23,13 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
21
23
  // init sub components
22
24
 
23
25
  const subFormConfigStr = JSON.stringify(require('./BSRAddressSubForm.json'));
26
+ const {
27
+ useField,
28
+ useFormikContext
29
+ } = _formBuilder.formik;
30
+ const {
31
+ getIsFieldInvalid
32
+ } = _formBuilder.utils;
24
33
  const applyReviewMode = function () {
25
34
  let components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
26
35
  return components.map(component => ({
@@ -38,6 +47,7 @@ const BSRAddressSelector = _ref => {
38
47
  let {
39
48
  config
40
49
  } = _ref;
50
+ const [t] = (0, _reactI18next.useTranslation)();
41
51
  const {
42
52
  controllerPath,
43
53
  restUrl,
@@ -45,6 +55,20 @@ const BSRAddressSelector = _ref => {
45
55
  labels: overwriteLabels
46
56
  } = config;
47
57
  const groupKey = config.key;
58
+
59
+ // Die Felder des Sub-Formulars kennt der FormBuilder nicht, Regeln aus der Konfiguration
60
+ // (z.B. "required") hängen am groupKey. Er ist erst gesetzt, wenn die Adresse vollständig ist.
61
+ const [groupField, groupMeta] = useField(groupKey);
62
+ const {
63
+ validateForm,
64
+ validateOnChange
65
+ } = useFormikContext();
66
+ const groupValidationMessage = (0, _useValidationMessage.default)(t, groupMeta.error, config.errorMessages);
67
+ const addressValidation = (0, _react.useMemo)(() => ({
68
+ isInvalid: !config.reviewMode && !config.viewMode && getIsFieldInvalid(groupField.value, groupMeta.touched, groupMeta.error, groupMeta.initialError, null // ohne submitCount, wie FormFieldWrapper
69
+ ),
70
+ validationMessage: groupValidationMessage
71
+ }), [config.reviewMode, config.viewMode, groupField.value, groupMeta.touched, groupMeta.error, groupMeta.initialError, groupValidationMessage]);
48
72
  let subFormConfigStrInner = subFormConfigStr.replaceAll('{SELID}', groupKey);
49
73
  // replace label, if set
50
74
  if (overwriteLabels) {
@@ -59,6 +83,19 @@ const BSRAddressSelector = _ref => {
59
83
  const subFormComponents = (0, _react.useMemo)(() => config.reviewMode ? applyReviewMode(subFormConfig.components) : subFormConfig.components,
60
84
  // eslint-disable-next-line react-hooks/exhaustive-deps
61
85
  [subFormConfigStrInner, config.reviewMode]);
86
+
87
+ // Mehrere setFieldValue-Aufrufe beim Übernehmen der Adresse: die Validierung des letzten
88
+ // läuft noch mit dem leeren Wert, der Pflichtfehler bliebe bis zum nächsten Submit stehen.
89
+ // Nur beim Übergang leer -> gesetzt, damit Serverfehler beim Mount erhalten bleiben.
90
+ const prevGroupValue = (0, _react.useRef)(groupField.value);
91
+ (0, _react.useEffect)(() => {
92
+ const wasEmpty = !prevGroupValue.current;
93
+ prevGroupValue.current = groupField.value;
94
+ if (wasEmpty && groupField.value && groupMeta.error && validateOnChange) {
95
+ validateForm();
96
+ }
97
+ // eslint-disable-next-line react-hooks/exhaustive-deps
98
+ }, [groupField.value]);
62
99
  const initAddressContext = (0, _react.useMemo)(() => {
63
100
  const restUrlWithTrailingSlash = restUrl.endsWith('/') ? restUrl : `${restUrl}/`;
64
101
  return {
@@ -73,10 +110,12 @@ const BSRAddressSelector = _ref => {
73
110
  }, [groupKey, controllerPath, restUrl, doSubmitOnChange, overwriteLabels]);
74
111
  return /*#__PURE__*/_react.default.createElement(_BSRAddressContext.default, {
75
112
  initAddressContext: initAddressContext
113
+ }, /*#__PURE__*/_react.default.createElement(_BSRAddressContext.BSRAddressValidationContext.Provider, {
114
+ value: addressValidation
76
115
  }, /*#__PURE__*/_react.default.createElement(_formBuilder.ComponentPopulator, {
77
116
  formId: `${groupKey}-adselctor-wrapper`,
78
117
  components: subFormComponents
79
- }));
118
+ })));
80
119
  };
81
120
  BSRAddressSelector.propTypes = {
82
121
  ..._FormFieldChildPropTypes.default,
@@ -1,6 +1,9 @@
1
1
  export default BSRAutocompleteField;
2
- declare function BSRAutocompleteField({ config }: {
2
+ declare function BSRAutocompleteField({ config, isInvalid: isFieldInvalid, validationMessage, fieldIds }: {
3
3
  config: any;
4
+ isInvalid: any;
5
+ validationMessage: any;
6
+ fieldIds: any;
4
7
  }): any;
5
8
  declare namespace BSRAutocompleteField {
6
9
  namespace propTypes {
@@ -20,6 +23,11 @@ declare namespace BSRAutocompleteField {
20
23
  suggestionsAmount: PropTypes.Requireable<number>;
21
24
  placeholder: PropTypes.Requireable<string>;
22
25
  }>>>;
26
+ let isInvalid: PropTypes.Requireable<boolean>;
27
+ let validationMessage: PropTypes.Requireable<string>;
28
+ let fieldIds: PropTypes.Requireable<PropTypes.InferProps<{
29
+ errorMessage: PropTypes.Requireable<string>;
30
+ }>>;
23
31
  }
24
32
  }
25
33
  import PropTypes from 'prop-types';
@@ -1 +1 @@
1
- {"version":3,"file":"BSRAutocompleteField.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAutocompleteField.jsx"],"names":[],"mappings":";AA+CA;;QA8RC;;;;;;;;;;;;;;;;;;;;;sBA7UqB,YAAY"}
1
+ {"version":3,"file":"BSRAutocompleteField.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/BSRAutocompleteField.jsx"],"names":[],"mappings":";AAgDA;;;;;QAwSC;;;;;;;;;;;;;;;;;;;;;;;;;;sBAxVqB,YAAY"}
@@ -15,6 +15,7 @@ var _index = require("../../utils/index.js");
15
15
  var _BSRAddressSelectorModule = _interopRequireDefault(require("./BSRAddressSelector.module.scss"));
16
16
  var _BSRAddressContext = require("./BSRAddressContext.js");
17
17
  var _useGetPlaceHolderText = _interopRequireDefault(require("./useGetPlaceHolderText.js"));
18
+ var _withAddressGroupValidation = _interopRequireWildcard(require("./withAddressGroupValidation.jsx"));
18
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -43,7 +44,10 @@ const fetchOptions = async url => {
43
44
  };
44
45
  const BSRAutocompleteField = _ref => {
45
46
  let {
46
- config
47
+ config,
48
+ isInvalid: isFieldInvalid,
49
+ validationMessage,
50
+ fieldIds
47
51
  } = _ref;
48
52
  const [t] = (0, _reactI18next.useTranslation)();
49
53
  const {
@@ -194,14 +198,20 @@ const BSRAutocompleteField = _ref => {
194
198
  }, 50);
195
199
  }, [key, setFieldValue, labelFieldKey, groupKey, setSelectedOptionId, setPrevSelection]);
196
200
  const className = (0, _react.useMemo)(() => [_BSRAddressSelectorModule.default.comboboxWrapper, _BSRAddressSelectorModule.default.formControl, _BSRAddressSelectorModule.default.ariakitCombobox, 'ariakit-combobox', 'form-control py-1 px-0', isFocused && 'focused', isInvalid && 'is-invalid'].filter(Boolean).join(' '), [isFocused, isInvalid]);
197
- const formControlClassNames = (0, _index.getFormControlClassNames)(disabled, readOnly, disabled, ['input', field.className].filter(Boolean));
201
+ const formControlClassNames = (0, _index.getFormControlClassNames)(disabled || isFieldInvalid, readOnly, disabled, ['input', field.className].filter(Boolean));
198
202
  const getPreviousSelectedItem = (0, _react.useCallback)(() => {
199
203
  return prevSelection?.value ? prevSelection.value : field.value;
200
204
  }, [prevSelection, field.value]);
205
+
206
+ // Kontrollseite: vor dontShowSelector, nach der Adressübernahme ist die Eingabe ausgeblendet.
207
+ // labelFieldKey enthält den Straßennamen als String (siehe handleOnSelectChange).
208
+ if (reviewMode) {
209
+ return (typeof usedValueLabel === 'string' ? usedValueLabel : usedValueLabel?.label) || '';
210
+ }
201
211
  if (dontShowSelector) {
202
212
  return null;
203
213
  }
204
- if (viewMode || reviewMode) {
214
+ if (viewMode) {
205
215
  return usedValueLabel?.label || '';
206
216
  }
207
217
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_react2.ComboboxProvider, null, /*#__PURE__*/_react.default.createElement("div", {
@@ -219,6 +229,11 @@ const BSRAutocompleteField = _ref => {
219
229
  event.target.select();
220
230
  },
221
231
  ref: inputRef
232
+ }, isFieldInvalid && {
233
+ 'aria-invalid': 'true',
234
+ ...(validationMessage && {
235
+ 'aria-describedby': fieldIds?.errorMessage
236
+ })
222
237
  }, inputProps)), selectedOption.value && /*#__PURE__*/_react.default.createElement(_react2.ComboboxCancel, {
223
238
  className: `btn ${_BSRAddressSelectorModule.default.comboboxCancel || ''}`,
224
239
  store: combobox,
@@ -279,22 +294,29 @@ BSRAutocompleteField.propTypes = {
279
294
  disabled: _propTypes.default.bool,
280
295
  suggestionsAmount: _propTypes.default.number,
281
296
  placeholder: _propTypes.default.string
282
- }).isRequired
297
+ }).isRequired,
298
+ isInvalid: _propTypes.default.bool,
299
+ validationMessage: _propTypes.default.string,
300
+ fieldIds: _propTypes.default.shape({
301
+ errorMessage: _propTypes.default.string
302
+ })
283
303
  };
284
304
  const HigherOrderAutocompleteField = (0, _withFieldGroup.default)(BSRAutocompleteField);
305
+ const GroupValidatedAutocompleteField = (0, _withAddressGroupValidation.default)(HigherOrderAutocompleteField, _withAddressGroupValidation.ADDRESS_FIELD_STREET);
285
306
  const WrappedAutocompleteField = props => {
286
307
  const {
287
308
  dontShowSelector
288
309
  } = (0, _react.useContext)(_BSRAddressContext.BSRAddressContext);
289
310
 
290
- // Eingabehilfe auf dem Weg zur Adresse: in der Review zählt nur "Ihre Auswahl"
311
+ // Kontrollseite: Straße wie im Formular ausgeben, auch wenn die Eingabe nach der
312
+ // Adressübernahme ausgeblendet ist
291
313
  if (props.config?.reviewMode) {
292
- return null;
314
+ return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(HigherOrderAutocompleteField, props));
293
315
  }
294
316
  if (dontShowSelector) {
295
317
  return null;
296
318
  }
297
- return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(HigherOrderAutocompleteField, props));
319
+ return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(GroupValidatedAutocompleteField, props));
298
320
  };
299
321
  (0, _formBuilder.registerComponent)('BSRAutocompleteField', WrappedAutocompleteField);
300
322
  (0, _formBuilder.registerComponent)('BSRAutocompleteFieldBasic', HigherOrderAutocompleteField);
@@ -179,5 +179,10 @@ BSRStreetPlzSelector.propTypes = {
179
179
  config: _propTypes.default.object.isRequired
180
180
  };
181
181
  const HigherOrderBSRStreetPlzSelector = (0, _withFieldGroup.default)(BSRStreetPlzSelector);
182
- (0, _formBuilder.registerComponent)('BSRStreetPlzSelector', HigherOrderBSRStreetPlzSelector);
182
+
183
+ // Ohne FormFieldWrapper kommt reviewMode nur über config an; withFieldGroup würde sonst
184
+ // auf der Kontrollseite einen leeren Feldrahmen rendern
185
+ // eslint-disable-next-line react/prop-types
186
+ const WrappedBSRStreetPlzSelector = props => props.config?.reviewMode ? null : /*#__PURE__*/_react.default.createElement(HigherOrderBSRStreetPlzSelector, props);
187
+ (0, _formBuilder.registerComponent)('BSRStreetPlzSelector', WrappedBSRStreetPlzSelector);
183
188
  var _default = exports.default = HigherOrderBSRStreetPlzSelector;
@@ -1 +1 @@
1
- {"version":3,"file":"HouseNumberSelectField.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/HouseNumberSelectField.jsx"],"names":[],"mappings":";AAaA,8EA0BC;;;;;;;;;;kBAvCiC,OAAO;sBACnB,YAAY"}
1
+ {"version":3,"file":"HouseNumberSelectField.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/HouseNumberSelectField.jsx"],"names":[],"mappings":";AAgBA,8EA+BC;;;;;;;;;;kBA/CiC,OAAO;sBACnB,YAAY"}
@@ -11,11 +11,14 @@ var _FormFieldWrapper = _interopRequireDefault(require("../FormFieldWrapper/Form
11
11
  var _useGetPlaceHolderText = _interopRequireDefault(require("./useGetPlaceHolderText.js"));
12
12
  var _TextInputField = _interopRequireDefault(require("../TextInputField/TextInputField.jsx"));
13
13
  var _BSRAddressContext = require("./BSRAddressContext.js");
14
+ var _withAddressGroupValidation = _interopRequireWildcard(require("./withAddressGroupValidation.jsx"));
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
17
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
18
  // form-builder
18
19
 
20
+ const GroupValidatedTextInputField = (0, _withAddressGroupValidation.default)(_TextInputField.default, _withAddressGroupValidation.ADDRESS_FIELD_HOUSE_NUMBER);
21
+
19
22
  // wrap the field label, error message help text and more
20
23
  const WrappedHouseNumberSelectField = props => {
21
24
  const {
@@ -26,9 +29,10 @@ const WrappedHouseNumberSelectField = props => {
26
29
  const placeHolderConfig = props.config.placeholder || placeHolderI18nKey;
27
30
  const placeholder = placeHolderConfig && placeHolderI18nKey !== placeHolderConfig ? placeHolderConfig : placeHolderI18n;
28
31
 
29
- // Eingabehilfe auf dem Weg zur Adresse: in der Review zählt nur "Ihre Auswahl"
32
+ // Kontrollseite: Hausnummer wie im Formular ausgeben, auch wenn die Eingabe nach der
33
+ // Adressübernahme ausgeblendet ist
30
34
  if (props.config?.reviewMode) {
31
- return null;
35
+ return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(_TextInputField.default, props));
32
36
  }
33
37
  if (dontShowSelector) {
34
38
  return null;
@@ -37,7 +41,7 @@ const WrappedHouseNumberSelectField = props => {
37
41
  props.config.inputProps = props.config.inputProps || {};
38
42
  props.config.inputProps.placeholder = placeholder;
39
43
  }
40
- return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(_TextInputField.default, props));
44
+ return /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(GroupValidatedTextInputField, props));
41
45
  };
42
46
 
43
47
  // PropTypes
@@ -0,0 +1,12 @@
1
+ export const ADDRESS_FIELD_STREET: "street";
2
+ export const ADDRESS_FIELD_HOUSE_NUMBER: "houseNumber";
3
+ export default withAddressGroupValidation;
4
+ /**
5
+ * Zeigt den Fehler des groupKey (z.B. Pflichtfeld) an dem Feld, das für die vollständige
6
+ * Adresse noch fehlt: ohne Straße an der Straße, sonst an der Hausnummer. Steht der
7
+ * Button "Adresse prüfen" bereit, fehlt nur noch die Bestätigung.
8
+ * Muss innerhalb des FormFieldWrapper stehen, damit es dessen Props überschreibt.
9
+ */
10
+ declare function withAddressGroupValidation(FieldComponent: any, addressField: any): (props: any) => React.JSX.Element;
11
+ import React from 'react';
12
+ //# sourceMappingURL=withAddressGroupValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAddressGroupValidation.d.ts","sourceRoot":"","sources":["../../../src/items/BSRAddressSelector/withAddressGroupValidation.jsx"],"names":[],"mappings":"AASA,mCAAoC,QAAQ,CAAC;AAC7C,yCAA0C,aAAa,CAAC;;AAExD;;;;;GAKG;AAEH,sFAAsE,UAAK,uBA6B1E;kBA/CiC,OAAO"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.ADDRESS_FIELD_STREET = exports.ADDRESS_FIELD_HOUSE_NUMBER = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactI18next = require("react-i18next");
9
+ var _formBuilder = require("@pinuts/form-builder");
10
+ var _BSRAddressContext = require("./BSRAddressContext.js");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /* eslint-disable react/prop-types */
14
+ const {
15
+ useFormikContext
16
+ } = _formBuilder.formik;
17
+ const ADDRESS_FIELD_STREET = exports.ADDRESS_FIELD_STREET = 'street';
18
+ const ADDRESS_FIELD_HOUSE_NUMBER = exports.ADDRESS_FIELD_HOUSE_NUMBER = 'houseNumber';
19
+
20
+ /**
21
+ * Zeigt den Fehler des groupKey (z.B. Pflichtfeld) an dem Feld, das für die vollständige
22
+ * Adresse noch fehlt: ohne Straße an der Straße, sonst an der Hausnummer. Steht der
23
+ * Button "Adresse prüfen" bereit, fehlt nur noch die Bestätigung.
24
+ * Muss innerhalb des FormFieldWrapper stehen, damit es dessen Props überschreibt.
25
+ */
26
+ // eslint-disable-next-line react/display-name
27
+ const withAddressGroupValidation = (FieldComponent, addressField) => props => {
28
+ const [t] = (0, _reactI18next.useTranslation)();
29
+ const {
30
+ isInvalid: isGroupInvalid,
31
+ validationMessage
32
+ } = (0, _react.useContext)(_BSRAddressContext.BSRAddressValidationContext);
33
+ const {
34
+ fieldKeys,
35
+ showNextBtn,
36
+ addressContext
37
+ } = (0, _react.useContext)(_BSRAddressContext.BSRAddressContext);
38
+ const {
39
+ values
40
+ } = useFormikContext();
41
+ const isStreetMissing = !values[fieldKeys?.streetFieldKey];
42
+ const showsGroupError = isGroupInvalid && (addressField === ADDRESS_FIELD_STREET ? isStreetMissing : !isStreetMissing);
43
+ if (!showsGroupError || props.isInvalid) {
44
+ return /*#__PURE__*/_react.default.createElement(FieldComponent, props);
45
+ }
46
+
47
+ // ariaAttributes leeren: withFieldGroup berechnet sie dann mit isInvalid neu,
48
+ // inkl. aria-describedby auf die eigene Fehlermeldung.
49
+ return /*#__PURE__*/_react.default.createElement(FieldComponent, _extends({}, props, {
50
+ isInvalid: true,
51
+ validationMessage: showNextBtn ? t('bsrAddressSelector.labels.checkAddressRequired', {
52
+ button: addressContext?.overwriteLabels?.checkAddress || t('bsrAddressSelector.labels.checkAddress')
53
+ }) : validationMessage,
54
+ ariaAttributes: undefined
55
+ }));
56
+ };
57
+ var _default = exports.default = withAddressGroupValidation;
@@ -8,6 +8,7 @@ declare namespace FieldsetWrapper {
8
8
  let components: PropTypes.Validator<unknown[]>;
9
9
  let config: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
10
10
  label: PropTypes.Validator<string>;
11
+ text: PropTypes.Requireable<string>;
11
12
  helpText: PropTypes.Requireable<string>;
12
13
  headingLevel: PropTypes.Requireable<string>;
13
14
  className: PropTypes.Requireable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"FieldsetWrapper.d.ts","sourceRoot":"","sources":["../../../src/items/FieldsetWrapper/FieldsetWrapper.jsx"],"names":[],"mappings":";AAQA;;;sBAqCC;;;;;;;;;;;;kBA7C8B,OAAO;sBAChB,YAAY"}
1
+ {"version":3,"file":"FieldsetWrapper.d.ts","sourceRoot":"","sources":["../../../src/items/FieldsetWrapper/FieldsetWrapper.jsx"],"names":[],"mappings":";AAWA;;;sBA2DC;;;;;;;;;;;;;kBAtE0C,OAAO;sBAC5B,YAAY"}
@@ -9,11 +9,16 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _uuid = require("uuid");
10
10
  var _reactI18next = require("react-i18next");
11
11
  var _formBuilder = require("@pinuts/form-builder");
12
+ var _ReviewLayoutContext = _interopRequireDefault(require("../../shared/FormWidget/ReviewLayoutContext.js"));
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
16
  // FormBuilder
16
17
 
18
+ const reviewListLayout = {
19
+ active: true,
20
+ inList: true
21
+ };
17
22
  const FieldsetWrapper = _ref => {
18
23
  let {
19
24
  config,
@@ -21,17 +26,39 @@ const FieldsetWrapper = _ref => {
21
26
  } = _ref;
22
27
  const {
23
28
  label,
29
+ text,
24
30
  helpText,
25
31
  headingLevel = '4',
26
32
  className = ''
27
33
  } = config;
28
34
  const [t] = (0, _reactI18next.useTranslation)();
35
+ const {
36
+ active: isReviewLayout
37
+ } = (0, _react.useContext)(_ReviewLayoutContext.default);
29
38
  const formId = (0, _react.useMemo)(() => (0, _uuid.v4)().slice(0, 6), []);
30
39
  const HeadingTag = `h${headingLevel}`;
31
40
  // Doppelpunkte und HTML-Tags zerstören das i18n?
32
41
  const usedLabel = label && !label.includes(':') && !label.includes('<') ? t(label) : label;
33
42
  const usedHelpText = helpText && !helpText.includes(':') && !helpText.includes('<') ? t(helpText) : helpText;
34
43
  const populatorFormId = (0, _react.useMemo)(() => `${formId}-${usedLabel?.replaceAll(' ', '')}-fieldset-wrapper`, [usedLabel, formId]);
44
+
45
+ // Kontrollseite: Abschnitt mit Überschrift (der UM liefert sie als `text`) und einer
46
+ // Definitionsliste für alle Felder, statt einer Liste je Feld
47
+ if (isReviewLayout) {
48
+ const heading = usedLabel || text;
49
+ return /*#__PURE__*/_react.default.createElement("section", {
50
+ className: "pi-review-section"
51
+ }, heading && /*#__PURE__*/_react.default.createElement("h3", {
52
+ className: "pi-review-section-heading"
53
+ }, heading), /*#__PURE__*/_react.default.createElement("dl", {
54
+ className: "pi-review-list"
55
+ }, /*#__PURE__*/_react.default.createElement(_ReviewLayoutContext.default.Provider, {
56
+ value: reviewListLayout
57
+ }, /*#__PURE__*/_react.default.createElement(_formBuilder.ComponentPopulator, {
58
+ formId: populatorFormId,
59
+ components: components
60
+ }))));
61
+ }
35
62
  return /*#__PURE__*/_react.default.createElement("fieldset", {
36
63
  className: `my-3 ${className}`
37
64
  }, usedLabel && /*#__PURE__*/_react.default.createElement("legend", null, /*#__PURE__*/_react.default.createElement(HeadingTag, {
@@ -47,6 +74,7 @@ FieldsetWrapper.propTypes = {
47
74
  components: _propTypes.default.instanceOf(Array).isRequired,
48
75
  config: _propTypes.default.shape({
49
76
  label: _propTypes.default.string.isRequired,
77
+ text: _propTypes.default.string,
50
78
  helpText: _propTypes.default.string,
51
79
  headingLevel: _propTypes.default.string,
52
80
  className: _propTypes.default.string
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadField.d.ts","sourceRoot":"","sources":["../../../src/items/FileUploadField/FileUploadField.jsx"],"names":[],"mappings":";AA2TA,4EAAmE;kBA3TL,OAAO"}
1
+ {"version":3,"file":"FileUploadField.d.ts","sourceRoot":"","sources":["../../../src/items/FileUploadField/FileUploadField.jsx"],"names":[],"mappings":";AAgVA,4EAAmE;kBAhVL,OAAO"}
@@ -162,7 +162,8 @@ const FileUploadField = _ref => {
162
162
  (0, _uploadedFileStore.rememberUploadedFile)(fieldKey, {
163
163
  ticket: uploadedFile.ticket,
164
164
  name: uploadedFile.name || pendingFile.name,
165
- size: uploadedFile.size ?? pendingFile.size
165
+ size: uploadedFile.size ?? pendingFile.size,
166
+ previewUrl: (0, _uploadedFileStore.createPreviewUrl)(pendingFile)
166
167
  });
167
168
  onChange([...tickets, uploadedFile.ticket]);
168
169
  announce('', t('bsrItems.fileUploadField.uploadSuccessful', {
@@ -217,7 +218,19 @@ const FileUploadField = _ref => {
217
218
  }
218
219
  if (reviewMode) {
219
220
  return /*#__PURE__*/_react.default.createElement(_ReviewValueList.default, {
220
- items: files.map(file => `${file.name} (${(0, _formatFileSize.formatFileSize)(file.size)})`)
221
+ items: files.map(file => {
222
+ const label = `${file.name} (${(0, _formatFileSize.formatFileSize)(file.size)})`;
223
+
224
+ // Neuer Tab, sonst geht der Formularstand verloren
225
+ return file.previewUrl ? /*#__PURE__*/_react.default.createElement("a", {
226
+ href: file.previewUrl,
227
+ target: "_blank",
228
+ rel: "noopener noreferrer",
229
+ "aria-label": t('bsrItems.fileUploadField.openFileAria', {
230
+ label
231
+ })
232
+ }, label) : label;
233
+ })
221
234
  });
222
235
  }
223
236
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -247,7 +260,7 @@ const FileUploadField = _ref => {
247
260
  filename: pendingFile.name
248
261
  })), /*#__PURE__*/_react.default.createElement("button", {
249
262
  type: "button",
250
- className: getClassNames(['btn', 'btn-orange']),
263
+ className: getClassNames(['btn', 'btn-brick', _FileUploadFieldModule.default.uploadPendingButton]),
251
264
  onClick: uploadPendingFile,
252
265
  disabled: isUploading
253
266
  }, t(uploadBtnText))), errorMsg && /*#__PURE__*/_react.default.createElement("div", {
@@ -264,6 +277,9 @@ const FileUploadField = _ref => {
264
277
  FileUploadField.propTypes = {
265
278
  ..._FormFieldChildPropTypes.default
266
279
  };
280
+ FileUploadField.formFieldConfig = {
281
+ infoNextToLabel: true
282
+ };
267
283
  const HigherOrderFileUploadField = (0, _withFieldGroup.default)(FileUploadField);
268
284
  const WrappedFileUploadField = props => /*#__PURE__*/_react.default.createElement(_FormFieldWrapper.default, props, /*#__PURE__*/_react.default.createElement(HigherOrderFileUploadField, props));
269
285
  (0, _formBuilder.registerComponent)('FileUploadField', WrappedFileUploadField);
@@ -1,4 +1,5 @@
1
1
  export function rememberUploadedFile(fieldKey: any, file: any): void;
2
2
  export function forgetUploadedFile(fieldKey: any, ticket: any): void;
3
+ export function createPreviewUrl(file: any): string;
3
4
  export function getUploadedFile(fieldKey: any, ticket: any): any;
4
5
  //# sourceMappingURL=uploadedFileStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploadedFileStore.d.ts","sourceRoot":"","sources":["../../../src/items/FileUploadField/uploadedFileStore.js"],"names":[],"mappings":"AAaO,qEAEN;AAEM,qEAEN;AAEM,iEACiC"}
1
+ {"version":3,"file":"uploadedFileStore.d.ts","sourceRoot":"","sources":["../../../src/items/FileUploadField/uploadedFileStore.js"],"names":[],"mappings":"AAgBO,qEAEN;AAEM,qEAMN;AAEM,oDAIN;AAEM,iEACiC"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.rememberUploadedFile = exports.getUploadedFile = exports.forgetUploadedFile = void 0;
6
+ exports.rememberUploadedFile = exports.getUploadedFile = exports.forgetUploadedFile = exports.createPreviewUrl = void 0;
7
7
  /**
8
8
  * Der Formularwert eines FileUploadField ist nur die Liste der Ticket-Ids, die der
9
9
  * Server beim Upload zurückgibt - Name und Größe der Datei stehen nicht darin.
@@ -12,6 +12,9 @@ exports.rememberUploadedFile = exports.getUploadedFile = exports.forgetUploadedF
12
12
  *
13
13
  * Lebensdauer ist der Seitenaufruf: nach einem Reload sind die Metadaten weg, die
14
14
  * Tickets im Formularwert bleiben gültig.
15
+ *
16
+ * previewUrl: lokale Objekt-URL der hochgeladenen Datei für den Link auf der Kontrollseite;
17
+ * der Server bietet für Tickets keinen Abruf an.
15
18
  */
16
19
  const uploadedFiles = new Map();
17
20
  const storeKey = (fieldKey, ticket) => `${fieldKey}:${ticket}`;
@@ -20,9 +23,15 @@ const rememberUploadedFile = (fieldKey, file) => {
20
23
  };
21
24
  exports.rememberUploadedFile = rememberUploadedFile;
22
25
  const forgetUploadedFile = (fieldKey, ticket) => {
26
+ const previewUrl = uploadedFiles.get(storeKey(fieldKey, ticket))?.previewUrl;
27
+ if (previewUrl) {
28
+ URL.revokeObjectURL(previewUrl);
29
+ }
23
30
  uploadedFiles.delete(storeKey(fieldKey, ticket));
24
31
  };
25
32
  exports.forgetUploadedFile = forgetUploadedFile;
33
+ const createPreviewUrl = file => typeof URL !== 'undefined' && typeof URL.createObjectURL === 'function' ? URL.createObjectURL(file) : undefined;
34
+ exports.createPreviewUrl = createPreviewUrl;
26
35
  const getUploadedFile = (fieldKey, ticket) => uploadedFiles.get(storeKey(fieldKey, ticket)) || {
27
36
  ticket,
28
37
  name: ticket,
@@ -1 +1 @@
1
- {"version":3,"file":"BSRGridColumn.d.ts","sourceRoot":"","sources":["../../../src/items/Grid/BSRGridColumn.jsx"],"names":[],"mappings":";AAKA;;;sBASC;;;;;;;;;kBAdiB,OAAO;sBACH,YAAY"}
1
+ {"version":3,"file":"BSRGridColumn.d.ts","sourceRoot":"","sources":["../../../src/items/Grid/BSRGridColumn.jsx"],"names":[],"mappings":";AAMA;;;sBAeC;;;;;;;;;kBArBiC,OAAO;sBACnB,YAAY"}
@@ -4,15 +4,29 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _formBuilder = require("@pinuts/form-builder");
10
+ var _ReviewLayoutContext = _interopRequireDefault(require("../../shared/FormWidget/ReviewLayoutContext.js"));
10
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
14
  const BSRGridColumn = _ref => {
12
15
  let {
13
16
  config = {},
14
17
  components
15
18
  } = _ref;
19
+ const {
20
+ active: isReviewLayout
21
+ } = (0, _react.useContext)(_ReviewLayoutContext.default);
22
+
23
+ // Kontrollseite: einspaltige Liste statt Formular-Raster
24
+ if (isReviewLayout) {
25
+ return components ? /*#__PURE__*/_react.default.createElement(_formBuilder.ComponentPopulator, {
26
+ components: components,
27
+ formId: ''
28
+ }) : null;
29
+ }
16
30
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
17
31
  className: ['col', config.className].join(' ')
18
32
  }, components && /*#__PURE__*/_react.default.createElement(_formBuilder.ComponentPopulator, {