@pinuts/bsr-uikit-relaunch 0.3.8 → 0.4.2

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 (133) hide show
  1. package/config-overrides.js +1 -0
  2. package/dist/hooks/useValidationMessage.d.ts.map +1 -1
  3. package/dist/hooks/useValidationMessage.js +8 -1
  4. package/dist/hooks/withFieldGroup.d.ts.map +1 -1
  5. package/dist/hooks/withFieldGroup.js +35 -1
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.js +1 -1
  8. package/dist/items/AbholdatumMaterialienField/AbholdatumMaterialienField.d.ts +25 -0
  9. package/dist/items/AbholdatumMaterialienField/AbholdatumMaterialienField.d.ts.map +1 -0
  10. package/dist/items/AbholdatumMaterialienField/AbholdatumMaterialienField.js +77 -0
  11. package/dist/items/AbholdatumMaterialienField/getAbholTermine.d.ts +7 -0
  12. package/dist/items/AbholdatumMaterialienField/getAbholTermine.d.ts.map +1 -0
  13. package/dist/items/AbholdatumMaterialienField/getAbholTermine.js +117 -0
  14. package/dist/items/AbholortMaterialienField/AbholortMaterialienField.d.ts +26 -0
  15. package/dist/items/AbholortMaterialienField/AbholortMaterialienField.d.ts.map +1 -0
  16. package/dist/items/AbholortMaterialienField/AbholortMaterialienField.js +73 -0
  17. package/dist/items/BSRAddressSelector/BSRAddressButtons.d.ts.map +1 -1
  18. package/dist/items/BSRAddressSelector/BSRAddressButtons.js +10 -0
  19. package/dist/items/BSRAddressSelector/BSRAddressSelector.d.ts +1 -0
  20. package/dist/items/BSRAddressSelector/BSRAddressSelector.d.ts.map +1 -1
  21. package/dist/items/BSRAddressSelector/BSRAddressSelector.js +21 -2
  22. package/dist/items/BSRAddressSelector/BSRAutocompleteField.d.ts.map +1 -1
  23. package/dist/items/BSRAddressSelector/BSRAutocompleteField.js +14 -3
  24. package/dist/items/BSRAddressSelector/BSRStreetPlzSelector.d.ts.map +1 -1
  25. package/dist/items/BSRAddressSelector/BSRStreetPlzSelector.js +6 -0
  26. package/dist/items/BSRAddressSelector/HouseNumberSelectField.d.ts.map +1 -1
  27. package/dist/items/BSRAddressSelector/HouseNumberSelectField.js +5 -0
  28. package/dist/items/BootstrapInputGroupField/BootstrapInputGroupField.d.ts.map +1 -1
  29. package/dist/items/BootstrapInputGroupField/BootstrapInputGroupField.js +2 -1
  30. package/dist/items/DateInputField/DateInputField.d.ts.map +1 -1
  31. package/dist/items/DateInputField/DateInputField.js +2 -1
  32. package/dist/items/FileUploadField/FileUploadField.d.ts +4 -0
  33. package/dist/items/FileUploadField/FileUploadField.d.ts.map +1 -0
  34. package/dist/items/FileUploadField/FileUploadField.js +271 -0
  35. package/dist/items/FileUploadField/uploadedFileStore.d.ts +4 -0
  36. package/dist/items/FileUploadField/uploadedFileStore.d.ts.map +1 -0
  37. package/dist/items/FileUploadField/uploadedFileStore.js +31 -0
  38. package/dist/items/FormFieldWrapper/FormFieldChildPropTypes.d.ts +1 -0
  39. package/dist/items/FormFieldWrapper/FormFieldChildPropTypes.d.ts.map +1 -1
  40. package/dist/items/FormFieldWrapper/FormFieldChildPropTypes.js +1 -0
  41. package/dist/items/GroupInputField/GroupInputField.d.ts.map +1 -1
  42. package/dist/items/GroupInputField/GroupInputField.js +41 -4
  43. package/dist/items/Modal/Modal.d.ts.map +1 -1
  44. package/dist/items/Modal/Modal.js +6 -1
  45. package/dist/items/MultiSelectField/MultiSelectField.d.ts.map +1 -1
  46. package/dist/items/MultiSelectField/MultiSelectField.js +15 -2
  47. package/dist/items/NumberInputField/NumberInputField.d.ts.map +1 -1
  48. package/dist/items/NumberInputField/NumberInputField.js +2 -1
  49. package/dist/items/ReviewValue/ReviewValueList.d.ts +17 -0
  50. package/dist/items/ReviewValue/ReviewValueList.d.ts.map +1 -0
  51. package/dist/items/ReviewValue/ReviewValueList.js +36 -0
  52. package/dist/items/SectionSpinner/SectionSpinner.d.ts +1 -0
  53. package/dist/items/SectionSpinner/SectionSpinner.d.ts.map +1 -1
  54. package/dist/items/SelectField/SelectField.d.ts.map +1 -1
  55. package/dist/items/SelectField/SelectField.js +3 -2
  56. package/dist/items/StaticAlert/StaticAlert.d.ts +1 -0
  57. package/dist/items/StaticAlert/StaticAlert.d.ts.map +1 -1
  58. package/dist/items/TextAreaField/TextAreaField.d.ts.map +1 -1
  59. package/dist/items/TextAreaField/TextAreaField.js +8 -0
  60. package/dist/items/TextBox/TextBox.d.ts +1 -0
  61. package/dist/items/TextBox/TextBox.d.ts.map +1 -1
  62. package/dist/items/TextBox/TextBox.js +11 -2
  63. package/dist/items/TextInputField/TextInputField.d.ts.map +1 -1
  64. package/dist/items/TextInputField/TextInputField.js +8 -1
  65. package/dist/items/Toast/Toast.d.ts +1 -0
  66. package/dist/items/Toast/Toast.d.ts.map +1 -1
  67. package/dist/items/ToggleSwitchField/ToggleSwitchField.d.ts.map +1 -1
  68. package/dist/items/ToggleSwitchField/ToggleSwitchField.js +2 -1
  69. package/dist/items/index.d.ts +4 -1
  70. package/dist/items/index.d.ts.map +1 -1
  71. package/dist/items/index.js +22 -1
  72. package/dist/items/validations.d.ts.map +1 -0
  73. package/dist/items/validations.js +27 -0
  74. package/dist/locales.d.ts +73 -2
  75. package/dist/locales.js +64 -0
  76. package/dist/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.d.ts +16 -0
  77. package/dist/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.d.ts.map +1 -0
  78. package/dist/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.js +144 -0
  79. package/dist/shared/FormWidget/FormWidget.d.ts +30 -0
  80. package/dist/shared/FormWidget/FormWidget.d.ts.map +1 -0
  81. package/dist/shared/FormWidget/FormWidget.js +165 -0
  82. package/dist/shared/FormWidget/FormWidgetControlPage.d.ts +29 -0
  83. package/dist/shared/FormWidget/FormWidgetControlPage.d.ts.map +1 -0
  84. package/dist/shared/FormWidget/FormWidgetControlPage.js +84 -0
  85. package/dist/shared/FormWidget/FormWidgetFormPage.d.ts +26 -0
  86. package/dist/shared/FormWidget/FormWidgetFormPage.d.ts.map +1 -0
  87. package/dist/shared/FormWidget/FormWidgetFormPage.js +55 -0
  88. package/dist/shared/FormWidget/FormWidgetMessagePage.d.ts +20 -0
  89. package/dist/shared/FormWidget/FormWidgetMessagePage.d.ts.map +1 -0
  90. package/dist/shared/FormWidget/FormWidgetMessagePage.js +37 -0
  91. package/dist/shared/FormWidget/captions.d.ts +33 -0
  92. package/dist/shared/FormWidget/captions.d.ts.map +1 -0
  93. package/dist/shared/FormWidget/captions.js +43 -0
  94. package/dist/shared/KehrenbuergerForm/KehrenbuergerForm.d.ts +23 -0
  95. package/dist/shared/KehrenbuergerForm/KehrenbuergerForm.d.ts.map +1 -0
  96. package/dist/shared/KehrenbuergerForm/KehrenbuergerForm.js +173 -0
  97. package/dist/styles/_errorMessagesInfoBox.scss +42 -0
  98. package/dist/styles/_form.scss +9 -0
  99. package/dist/styles/_review.scss +29 -0
  100. package/dist/styles/main.scss +62 -49
  101. package/dist/styles/variables/_buttons.scss +4 -3
  102. package/dist/styles/variables/_variables.scss +15 -2
  103. package/dist/utils/files/convertFilesToUploadFiles.d.ts +8 -0
  104. package/dist/utils/files/convertFilesToUploadFiles.d.ts.map +1 -0
  105. package/dist/utils/files/convertFilesToUploadFiles.js +33 -0
  106. package/dist/utils/files/formatFileSize.d.ts +3 -0
  107. package/dist/utils/files/formatFileSize.d.ts.map +1 -0
  108. package/dist/utils/files/formatFileSize.js +44 -0
  109. package/dist/utils/files/generateUniqueFilename.d.ts +3 -0
  110. package/dist/utils/files/generateUniqueFilename.d.ts.map +1 -0
  111. package/dist/utils/files/generateUniqueFilename.js +32 -0
  112. package/dist/utils/files/index.d.ts +7 -0
  113. package/dist/utils/files/index.d.ts.map +1 -0
  114. package/dist/utils/files/index.js +71 -0
  115. package/dist/utils/files/validateFiles.d.ts +9 -0
  116. package/dist/utils/files/validateFiles.d.ts.map +1 -0
  117. package/dist/utils/files/validateFiles.js +28 -0
  118. package/dist/utils/files/validateFilesBySize.d.ts +6 -0
  119. package/dist/utils/files/validateFilesBySize.d.ts.map +1 -0
  120. package/dist/utils/files/validateFilesBySize.js +31 -0
  121. package/dist/utils/files/validateFilesByType.d.ts +9 -0
  122. package/dist/utils/files/validateFilesByType.d.ts.map +1 -0
  123. package/dist/utils/files/validateFilesByType.js +79 -0
  124. package/dist/utils/index.d.ts +1 -0
  125. package/dist/utils/index.js +11 -0
  126. package/dist/utils/reviewValue.d.ts +3 -0
  127. package/dist/utils/reviewValue.d.ts.map +1 -0
  128. package/dist/utils/reviewValue.js +16 -0
  129. package/package.json +1 -1
  130. package/webpack.config.js +3 -0
  131. package/dist/items/eventWizardItems/validations.d.ts.map +0 -1
  132. package/dist/items/eventWizardItems/validations.js +0 -7
  133. /package/dist/items/{eventWizardItems/validations.d.ts → validations.d.ts} +0 -0
@@ -28,6 +28,7 @@ const TextAreaField = _ref => {
28
28
  readOnly,
29
29
  disabled,
30
30
  viewMode,
31
+ reviewMode,
31
32
  value
32
33
  } = _ref;
33
34
  const handleChange = e => {
@@ -37,6 +38,13 @@ const TextAreaField = _ref => {
37
38
  if (viewMode) {
38
39
  return value;
39
40
  }
41
+
42
+ // Zeilenumbrüche der Eingabe bleiben in der Review erhalten
43
+ if (reviewMode) {
44
+ return /*#__PURE__*/_react.default.createElement("span", {
45
+ className: "pi-review-multiline"
46
+ }, value);
47
+ }
40
48
  const formControlClassNames = (0, _getUikitClassNames.getFormControlClassNames)(isInvalid, readOnly, disabled, className, ['textarea', field.className].filter(Boolean));
41
49
  const maxCharId = `${inputProps.id}-maxCharactersText`;
42
50
  return /*#__PURE__*/_react.default.createElement("textarea", _extends({
@@ -10,6 +10,7 @@ declare namespace TextBox {
10
10
  text: PropTypes.Requireable<string>;
11
11
  label: PropTypes.Requireable<string>;
12
12
  dataKey: PropTypes.Requireable<string>;
13
+ html: PropTypes.Requireable<boolean>;
13
14
  }>>;
14
15
  let onClick: PropTypes.Requireable<(...args: any[]) => any>;
15
16
  let customText: PropTypes.Requireable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"TextBox.d.ts","sourceRoot":"","sources":["../../../src/items/TextBox/TextBox.jsx"],"names":[],"mappings":";AAQA;;sBAgBC;;;;;;;;;;;;;;kBAxBiB,OAAO;sBACH,YAAY"}
1
+ {"version":3,"file":"TextBox.d.ts","sourceRoot":"","sources":["../../../src/items/TextBox/TextBox.jsx"],"names":[],"mappings":";AASA;;sBA0BC;;;;;;;;;;;;;;;kBAnCiB,OAAO;sBACH,YAAY"}
@@ -9,6 +9,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _reactI18next = require("react-i18next");
10
10
  var _formBuilder = require("@pinuts/form-builder");
11
11
  var _FormFieldWrapper = _interopRequireDefault(require("../FormFieldWrapper/FormFieldWrapper.jsx"));
12
+ var _HTMLParserSanitized = require("../HTMLParserSanitized/HTMLParserSanitized.jsx");
12
13
  var _withFieldGroup = _interopRequireDefault(require("../../hooks/withFieldGroup.jsx"));
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  const TextBox = _ref => {
@@ -19,12 +20,19 @@ const TextBox = _ref => {
19
20
  const {
20
21
  inputProps = {},
21
22
  text,
22
- dataKey
23
+ dataKey,
24
+ html
23
25
  } = config;
24
26
  const usedText = config[dataKey] || text;
25
27
  if (!usedText) {
26
28
  return null;
27
29
  }
30
+
31
+ // Standard: Klartext (React escaped ihn). Nur mit html=true wird Markup
32
+ // interpretiert - dann als div, damit auch Block-Elemente gültig verschachtelt sind.
33
+ if (html) {
34
+ return /*#__PURE__*/_react.default.createElement("div", inputProps, /*#__PURE__*/_react.default.createElement(_HTMLParserSanitized.HTMLParserSanitized, null, t(usedText)));
35
+ }
28
36
  return /*#__PURE__*/_react.default.createElement("span", inputProps, t(usedText));
29
37
  };
30
38
  TextBox.propTypes = {
@@ -33,7 +41,8 @@ TextBox.propTypes = {
33
41
  inputProps: _propTypes.default.object,
34
42
  text: _propTypes.default.string,
35
43
  label: _propTypes.default.string,
36
- dataKey: _propTypes.default.string
44
+ dataKey: _propTypes.default.string,
45
+ html: _propTypes.default.bool
37
46
  }),
38
47
  onClick: _propTypes.default.func,
39
48
  customText: _propTypes.default.string
@@ -1 +1 @@
1
- {"version":3,"file":"TextInputField.d.ts","sourceRoot":"","sources":["../../../src/items/TextInputField/TextInputField.jsx"],"names":[],"mappings":";AAwDA,2EAAiE;kBAvD/C,OAAO"}
1
+ {"version":3,"file":"TextInputField.d.ts","sourceRoot":"","sources":["../../../src/items/TextInputField/TextInputField.jsx"],"names":[],"mappings":";AAmEA,2EAAiE;kBAlE/C,OAAO"}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
9
  var _formBuilder = require("@pinuts/form-builder");
9
10
  var _getUikitClassNames = require("../../utils/getUikitClassNames.js");
10
11
  var _FormFieldChildPropTypes = _interopRequireDefault(require("../FormFieldWrapper/FormFieldChildPropTypes.jsx"));
@@ -13,6 +14,7 @@ var _withFieldGroup = _interopRequireDefault(require("../../hooks/withFieldGroup
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  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); } // import PropTypes from 'prop-types';
15
16
  // form-builder
17
+ const REVIEW_DATE_FORMAT = 'DD.MM.YYYY';
16
18
  const TextInputField = _ref => {
17
19
  let {
18
20
  className,
@@ -24,13 +26,18 @@ const TextInputField = _ref => {
24
26
  isInvalid,
25
27
  readOnly,
26
28
  disabled,
27
- viewMode
29
+ viewMode,
30
+ reviewMode
28
31
  // formGroupClassName = 'text-input',
29
32
  } = _ref;
30
33
  const handleChange = e => onChange(e.target.value);
31
34
  if (viewMode) {
32
35
  return value;
33
36
  }
37
+ if (reviewMode) {
38
+ // Ein Datumsfeld liefert ISO (2026-09-15), in der Review deutsch anzeigen
39
+ return inputProps.type === 'date' && value ? (0, _dayjs.default)(value).format(REVIEW_DATE_FORMAT) : value;
40
+ }
34
41
  const formControlClassNames = (0, _getUikitClassNames.getFormControlClassNames)(isInvalid, readOnly, disabled, className, ['input', field.className].filter(Boolean));
35
42
  return /*#__PURE__*/_react.default.createElement("input", _extends({
36
43
  type: "text"
@@ -53,6 +53,7 @@ declare namespace Toast {
53
53
  readOnly: PropTypes.Requireable<boolean>;
54
54
  disabled: PropTypes.Requireable<boolean>;
55
55
  viewMode: PropTypes.Requireable<boolean>;
56
+ reviewMode: PropTypes.Requireable<boolean>;
56
57
  stepId: PropTypes.Requireable<string>;
57
58
  hideEmptyValues: PropTypes.Requireable<boolean>;
58
59
  key: PropTypes.Requireable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/items/Toast/Toast.jsx"],"names":[],"mappings":";AAMA;;;;;;;;;;sBAgDC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAtDiB,OAAO;sBACH,YAAY"}
1
+ {"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/items/Toast/Toast.jsx"],"names":[],"mappings":";AAMA;;;;;;;;;;sBAgDC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAtDiB,OAAO;sBACH,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToggleSwitchField.d.ts","sourceRoot":"","sources":["../../../src/items/ToggleSwitchField/ToggleSwitchField.jsx"],"names":[],"mappings":";AAkGA,8EAAuE;kBAlGxC,OAAO"}
1
+ {"version":3,"file":"ToggleSwitchField.d.ts","sourceRoot":"","sources":["../../../src/items/ToggleSwitchField/ToggleSwitchField.jsx"],"names":[],"mappings":";AAmGA,8EAAuE;kBAnGxC,OAAO"}
@@ -27,6 +27,7 @@ const ToggleSwitchField = _ref => {
27
27
  readOnly,
28
28
  disabled,
29
29
  viewMode,
30
+ reviewMode,
30
31
  className,
31
32
  ariaAttributes,
32
33
  value,
@@ -47,7 +48,7 @@ const ToggleSwitchField = _ref => {
47
48
  }
48
49
  return value ? activeText || t('bsrItems.ToggleSwitchField.yes') : inActiveText || t('bsrItems.ToggleSwitchField.no');
49
50
  }, [value, text, activeText, inActiveText, t]);
50
- if (viewMode) {
51
+ if (viewMode || reviewMode) {
51
52
  return contentText;
52
53
  }
53
54
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -1,9 +1,12 @@
1
+ import AbholdatumMaterialienField from './AbholdatumMaterialienField/AbholdatumMaterialienField.jsx';
2
+ import AbholortMaterialienField from './AbholortMaterialienField/AbholortMaterialienField.jsx';
1
3
  import Button from './Button/Button.jsx';
2
4
  import BSRAddressSelector from './BSRAddressSelector/BSRAddressSelector.jsx';
3
5
  import SubmitButton from './Button/SubmitButton.jsx';
4
6
  import DateInputField from './DateInputField/DateInputField.jsx';
5
7
  import DropDownButton from './DropDownButton/DropDownButton.jsx';
6
8
  import FieldLabel from './FieldLabel/FieldLabel.jsx';
9
+ import FileUploadField from './FileUploadField/FileUploadField.jsx';
7
10
  import FormFieldChildPropTypes from './FormFieldWrapper/FormFieldChildPropTypes.jsx';
8
11
  import FormFieldWrapper from './FormFieldWrapper/FormFieldWrapper.jsx';
9
12
  import GroupInputField from './GroupInputField/GroupInputField.jsx';
@@ -32,5 +35,5 @@ import EventDatePicker from './eventWizardItems/EventDatePicker/EventDatePicker.
32
35
  import FormTitle from './eventWizardItems/FormTitle/FormTitle.jsx';
33
36
  import Intro from './eventWizardItems/Intro/Intro.jsx';
34
37
  import Required from './eventWizardItems/Required/Required.jsx';
35
- export { Button, BSRAddressSelector, SubmitButton, DateInputField, DropDownButton, FieldLabel, FormFieldChildPropTypes, FormFieldWrapper, GroupInputField, Icon, FormBuilderIcon, MultiSelectField, NumberInputField, SelectField, StaticAlert, Tag, TextBox, TextAreaField, TextInputField, Toast, Title, ToggleSwitchField, SectionSpinner, ArrayFieldset, FieldsetWrapper, BootstrapInputGroupField, BSRGridRow, BSRGridColumn, BSRGridRowCols, EventPicker, EventDatePicker, FormTitle, Intro, Required };
38
+ export { AbholdatumMaterialienField, AbholortMaterialienField, Button, BSRAddressSelector, SubmitButton, DateInputField, DropDownButton, FieldLabel, FileUploadField, FormFieldChildPropTypes, FormFieldWrapper, GroupInputField, Icon, FormBuilderIcon, MultiSelectField, NumberInputField, SelectField, StaticAlert, Tag, TextBox, TextAreaField, TextInputField, Toast, Title, ToggleSwitchField, SectionSpinner, ArrayFieldset, FieldsetWrapper, BootstrapInputGroupField, BSRGridRow, BSRGridColumn, BSRGridRowCols, EventPicker, EventDatePicker, FormTitle, Intro, Required };
36
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/items/index.js"],"names":[],"mappings":"mBAKmB,qBAAqB;+BAHT,6CAA6C;yBAInD,2BAA2B;2BACzB,qCAAqC;2BACrC,qCAAqC;uBACzC,6BAA6B;oCAChB,gDAAgD;6BACvD,yCAAyC;4BAC1C,uCAAuC;iBAClD,oBAAoB;4BACT,iBAAiB;6BAGhB,yCAAyC;6BACzC,yCAAyC;wBAC9C,+BAA+B;wBAC/B,+BAA+B;gBAhBvC,eAAe;oBAmBX,uBAAuB;0BACjB,mCAAmC;2BAClC,qCAAqC;kBAG9C,mBAAmB;kBADnB,mBAAmB;8BAEP,2CAA2C;2BAP9C,qCAAqC;0BAStC,mCAAmC;4BACjC,uCAAuC;qCAN9B,yDAAyD;uBAOvE,uBAAuB;0BACpB,0BAA0B;2BACzB,2BAA2B;wBAC9B,gDAAgD;4BAC5C,wDAAwD;sBAC9D,4CAA4C;kBAChD,oCAAoC;qBACjC,0CAA0C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/items/index.js"],"names":[],"mappings":"uCAEuC,6DAA6D;qCAC/D,yDAAyD;mBAI3E,qBAAqB;+BAHT,6CAA6C;yBAInD,2BAA2B;2BACzB,qCAAqC;2BACrC,qCAAqC;uBACzC,6BAA6B;4BACxB,uCAAuC;oCAC/B,gDAAgD;6BACvD,yCAAyC;4BAC1C,uCAAuC;iBAClD,oBAAoB;4BACT,iBAAiB;6BAGhB,yCAAyC;6BACzC,yCAAyC;wBAC9C,+BAA+B;wBAC/B,+BAA+B;gBAjBvC,eAAe;oBAoBX,uBAAuB;0BACjB,mCAAmC;2BAClC,qCAAqC;kBAG9C,mBAAmB;kBADnB,mBAAmB;8BAEP,2CAA2C;2BAP9C,qCAAqC;0BAStC,mCAAmC;4BACjC,uCAAuC;qCAN9B,yDAAyD;uBAOvE,uBAAuB;0BACpB,0BAA0B;2BACzB,2BAA2B;wBAC9B,gDAAgD;4BAC5C,wDAAwD;sBAC9D,4CAA4C;kBAChD,oCAAoC;qBACjC,0CAA0C"}
@@ -3,6 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "AbholdatumMaterialienField", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _AbholdatumMaterialienField.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "AbholortMaterialienField", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _AbholortMaterialienField.default;
16
+ }
17
+ });
6
18
  Object.defineProperty(exports, "ArrayFieldset", {
7
19
  enumerable: true,
8
20
  get: function () {
@@ -81,6 +93,12 @@ Object.defineProperty(exports, "FieldsetWrapper", {
81
93
  return _FieldsetWrapper.default;
82
94
  }
83
95
  });
96
+ Object.defineProperty(exports, "FileUploadField", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _FileUploadField.default;
100
+ }
101
+ });
84
102
  Object.defineProperty(exports, "FormBuilderIcon", {
85
103
  enumerable: true,
86
104
  get: function () {
@@ -207,6 +225,8 @@ Object.defineProperty(exports, "ToggleSwitchField", {
207
225
  return _ToggleSwitchField.default;
208
226
  }
209
227
  });
228
+ var _AbholdatumMaterialienField = _interopRequireDefault(require("./AbholdatumMaterialienField/AbholdatumMaterialienField.jsx"));
229
+ var _AbholortMaterialienField = _interopRequireDefault(require("./AbholortMaterialienField/AbholortMaterialienField.jsx"));
210
230
  var _BSRAddressSelector = _interopRequireDefault(require("./BSRAddressSelector/BSRAddressSelector.jsx"));
211
231
  var _Tag = _interopRequireDefault(require("./Tag/Tag.jsx"));
212
232
  var _Button = _interopRequireDefault(require("./Button/Button.jsx"));
@@ -214,6 +234,7 @@ var _SubmitButton = _interopRequireDefault(require("./Button/SubmitButton.jsx"))
214
234
  var _DateInputField = _interopRequireDefault(require("./DateInputField/DateInputField.jsx"));
215
235
  var _DropDownButton = _interopRequireDefault(require("./DropDownButton/DropDownButton.jsx"));
216
236
  var _FieldLabel = _interopRequireDefault(require("./FieldLabel/FieldLabel.jsx"));
237
+ var _FileUploadField = _interopRequireDefault(require("./FileUploadField/FileUploadField.jsx"));
217
238
  var _FormFieldChildPropTypes = _interopRequireDefault(require("./FormFieldWrapper/FormFieldChildPropTypes.jsx"));
218
239
  var _FormFieldWrapper = _interopRequireDefault(require("./FormFieldWrapper/FormFieldWrapper.jsx"));
219
240
  var _GroupInputField = _interopRequireDefault(require("./GroupInputField/GroupInputField.jsx"));
@@ -241,6 +262,6 @@ var _EventDatePicker = _interopRequireDefault(require("./eventWizardItems/EventD
241
262
  var _FormTitle = _interopRequireDefault(require("./eventWizardItems/FormTitle/FormTitle.jsx"));
242
263
  var _Intro = _interopRequireDefault(require("./eventWizardItems/Intro/Intro.jsx"));
243
264
  var _Required = _interopRequireDefault(require("./eventWizardItems/Required/Required.jsx"));
244
- require("./eventWizardItems/validations.js");
265
+ require("./validations.js");
245
266
  require("../styles/main.scss");
246
267
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/items/validations.js"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ var _formBuilder = require("@pinuts/form-builder");
4
+ _formBuilder.jsonLogic.add_operation('isSet', (value, errorMsg) => {
5
+ // eslint-disable-next-line no-extra-boolean-cast
6
+ return !!value ? true : errorMsg;
7
+ });
8
+
9
+ // Übernommen aus de.bsr.kehrenbuerger/shared/validations.mjs.
10
+ // Die dortige url-Operation fehlt hier bewusst: der form-builder registriert sie
11
+ // bereits identisch (gleiche Regex, gleicher Fehlercode 'invalidUrl').
12
+ _formBuilder.jsonLogic.add_operation('maxNumber', (value, maxNumber) => {
13
+ if (!value && value !== 0 || Number.isNaN(Number(value))) {
14
+ return true;
15
+ }
16
+ return Number(value) <= Number(maxNumber) || ['maxNumber', {
17
+ maxNumber
18
+ }];
19
+ });
20
+ _formBuilder.jsonLogic.add_operation('minNumber', (value, minNumber) => {
21
+ if (!value && value !== 0 || Number.isNaN(Number(value))) {
22
+ return true;
23
+ }
24
+ return Number(value) >= Number(minNumber) || ['minNumber', {
25
+ minNumber
26
+ }];
27
+ });
package/dist/locales.d.ts CHANGED
@@ -19,6 +19,34 @@ export namespace resources {
19
19
  let okButton_1: string;
20
20
  export { okButton_1 as okButton };
21
21
  }
22
+ export namespace formWidget {
23
+ namespace formPage {
24
+ let header: string;
25
+ let submitBtn: string;
26
+ }
27
+ namespace controlPage {
28
+ let header_1: string;
29
+ export { header_1 as header };
30
+ export let text: string;
31
+ export let backBtn: string;
32
+ let submitBtn_1: string;
33
+ export { submitBtn_1 as submitBtn };
34
+ }
35
+ namespace successPage {
36
+ let header_2: string;
37
+ export { header_2 as header };
38
+ let text_1: string;
39
+ export { text_1 as text };
40
+ }
41
+ namespace errorPage {
42
+ let header_3: string;
43
+ export { header_3 as header };
44
+ let text_2: string;
45
+ export { text_2 as text };
46
+ let backBtn_1: string;
47
+ export { backBtn_1 as backBtn };
48
+ }
49
+ }
22
50
  export namespace general {
23
51
  export let client: string;
24
52
  export let altLogo: string;
@@ -44,6 +72,9 @@ export namespace resources {
44
72
  let minDate: string;
45
73
  let invalidEmail: string;
46
74
  let invalidPlz: string;
75
+ let invalidUrl: string;
76
+ let minNumber: string;
77
+ let maxNumber: string;
47
78
  let wrongFormat: string;
48
79
  let mail: string;
49
80
  }
@@ -66,19 +97,59 @@ export namespace resources {
66
97
  }
67
98
  }
68
99
  export namespace bsrItems {
100
+ namespace review {
101
+ let empty: string;
102
+ let yes: string;
103
+ let no: string;
104
+ }
105
+ namespace kehrenbuerger {
106
+ let waitDoi: string;
107
+ let loadError: string;
108
+ }
69
109
  let noOptionsGiven: string;
70
110
  let lockedField: string;
71
111
  let errorMsgPrefix: string;
72
112
  let pleaseChoose: string;
73
113
  namespace ToggleSwitchField {
74
- let yes: string;
75
- let no: string;
114
+ let yes_1: string;
115
+ export { yes_1 as yes };
116
+ let no_1: string;
117
+ export { no_1 as no };
76
118
  }
77
119
  let maxCharacters: string;
78
120
  let DropzoneUploadField: {
79
121
  'file-invalid-type': string;
80
122
  'too-many-files': string;
81
123
  };
124
+ namespace abholdatumMaterialienField {
125
+ let emptyList: string;
126
+ }
127
+ namespace errorMessagesInfoBox {
128
+ let caption: string;
129
+ }
130
+ namespace fileUploadField {
131
+ let buttonText: string;
132
+ let uploadBtn: string;
133
+ let placeholder: string;
134
+ let groupLabel: string;
135
+ let fileListLabel: string;
136
+ let removeFile: string;
137
+ let removeFileAria: string;
138
+ let fileRemoved: string;
139
+ let readyForUpload: string;
140
+ let isUploading: string;
141
+ let uploadSuccessful: string;
142
+ namespace errors {
143
+ let uploadFileTooLarge: string;
144
+ let uploadFileTooLargeNoLimit: string;
145
+ let uploadInvalidType: string;
146
+ let uploadExtensionMismatch: string;
147
+ let uploadVirusFound: string;
148
+ let uploadError: string;
149
+ let uploadNumFiles: string;
150
+ let uploadDuplicateFilename: string;
151
+ }
152
+ }
82
153
  namespace arrayFieldset {
83
154
  let singularItemForList: string;
84
155
  let addButtonLabel: string;
package/dist/locales.js CHANGED
@@ -24,6 +24,27 @@ const resources = exports.resources = {
24
24
  btnLabel: 'Erklärung',
25
25
  okButton: 'Verstanden'
26
26
  },
27
+ formWidget: {
28
+ formPage: {
29
+ header: 'Ihre Angaben',
30
+ submitBtn: 'Weiter'
31
+ },
32
+ controlPage: {
33
+ header: 'Bitte prüfen Sie Ihre Angaben',
34
+ text: '<p>Bitte kontrollieren Sie Ihre Angaben und senden Sie das Formular anschließend ab.</p>',
35
+ backBtn: 'Zurück',
36
+ submitBtn: 'Absenden'
37
+ },
38
+ successPage: {
39
+ header: 'Vielen Dank für Ihre Eingabe!',
40
+ text: '<p>Vielen Dank für die bereitgestellten Informationen.</p>'
41
+ },
42
+ errorPage: {
43
+ header: 'Es ist ein Fehler aufgetreten',
44
+ text: '<p>Ihre Angaben konnten leider nicht gesendet werden. Bitte versuchen Sie es später erneut.</p>',
45
+ backBtn: 'Zurück zum Formular'
46
+ }
47
+ },
27
48
  general: {
28
49
  client: 'BSR',
29
50
  altLogo: 'BSR Logo',
@@ -45,6 +66,9 @@ const resources = exports.resources = {
45
66
  minDate: 'Frühstes Datum: {{minDate}}.',
46
67
  invalidEmail: 'Ungültige E-Mail-Adresse',
47
68
  invalidPlz: 'Ungültige Postleitzahl',
69
+ invalidUrl: 'Ungültige URL',
70
+ minNumber: 'Der Wert muss mindestens {{minNumber}} betragen.',
71
+ maxNumber: 'Der Wert darf höchstens {{maxNumber}} betragen.',
48
72
  wrongFormat: 'Bitte verwenden Sie das richtige Fromage.',
49
73
  // ...
50
74
  mail: 'Bitte geben Sie eine gültige E-Mail-Adresse an.'
@@ -68,6 +92,15 @@ const resources = exports.resources = {
68
92
  }
69
93
  },
70
94
  bsrItems: {
95
+ review: {
96
+ empty: 'Keine Angabe',
97
+ yes: 'Ja',
98
+ no: 'Nein'
99
+ },
100
+ kehrenbuerger: {
101
+ waitDoi: 'Bitte warten, Ihr Link wird überprüft.',
102
+ loadError: 'Das Formular konnte nicht geladen werden.'
103
+ },
71
104
  noOptionsGiven: 'Es werden befüllte "options" benötigt',
72
105
  lockedField: 'Dieses Feld kann nicht bearbeitet werden.',
73
106
  errorMsgPrefix: 'Fehler: ',
@@ -81,6 +114,37 @@ const resources = exports.resources = {
81
114
  'file-invalid-type': 'Dateityp nicht unterstützt: {{filename}}',
82
115
  'too-many-files': 'Es können maximal {{maxFiles}} Dateien hochgeladen werden.'
83
116
  },
117
+ abholdatumMaterialienField: {
118
+ emptyList: 'Bitte wählen Sie zuerst das Datum der Aktion.'
119
+ },
120
+ errorMessagesInfoBox: {
121
+ caption: 'Bitte korrigieren Sie Ihre Eingaben.'
122
+ },
123
+ fileUploadField: {
124
+ buttonText: 'Datei auswählen',
125
+ uploadBtn: 'Hochladen',
126
+ placeholder: 'Keine Datei hochgeladen',
127
+ groupLabel: 'Datei-Upload',
128
+ fileListLabel: 'Hochgeladene Dateien',
129
+ removeFile: 'Datei entfernen',
130
+ removeFileAria: '{{filename}} entfernen',
131
+ fileRemoved: '{{filename}} entfernt',
132
+ readyForUpload: 'Bereit zum Hochladen: {{filename}}',
133
+ isUploading: '{{filename}} wird hochgeladen ...',
134
+ uploadSuccessful: '{{filename}} wurde hochgeladen.',
135
+ errors: {
136
+ // Fehlercodes des Servers
137
+ uploadFileTooLarge: '{{filename}} ist zu groß. Erlaubt sind maximal {{maxSize}}.',
138
+ uploadFileTooLargeNoLimit: '{{filename}} ist zu groß.',
139
+ uploadInvalidType: '{{filename}}: Dieser Dateityp wird nicht unterstützt.',
140
+ uploadExtensionMismatch: '{{filename}}: Dateiendung und Dateiinhalt passen nicht zusammen.',
141
+ uploadVirusFound: '{{filename}} wurde abgelehnt, die Datei ist nicht sicher.',
142
+ uploadError: 'Die Datei konnte nicht hochgeladen werden. Bitte versuchen Sie es später erneut.',
143
+ // Prüfungen im Feld selbst
144
+ uploadNumFiles: 'Es können maximal {{numFiles}} Datei(en) hochgeladen werden.',
145
+ uploadDuplicateFilename: '{{filename}} wurde bereits hochgeladen.'
146
+ }
147
+ },
84
148
  arrayFieldset: {
85
149
  singularItemForList: 'Eintrag',
86
150
  addButtonLabel: 'Eintrag hinzufügen',
@@ -0,0 +1,16 @@
1
+ export default ErrorMessagesInfoBox;
2
+ declare function ErrorMessagesInfoBox({ formConfig, formId, caption, }: {
3
+ formConfig: any;
4
+ formId: any;
5
+ caption?: string;
6
+ }): React.JSX.Element;
7
+ declare namespace ErrorMessagesInfoBox {
8
+ namespace propTypes {
9
+ let formConfig: PropTypes.Validator<Object>;
10
+ let formId: PropTypes.Requireable<string>;
11
+ let caption: PropTypes.Requireable<string>;
12
+ }
13
+ }
14
+ import React from 'react';
15
+ import PropTypes from 'prop-types';
16
+ //# sourceMappingURL=ErrorMessagesInfoBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorMessagesInfoBox.d.ts","sourceRoot":"","sources":["../../../src/shared/ErrorMessagesInfoBox/ErrorMessagesInfoBox.jsx"],"names":[],"mappings":";AAgEA;;;;sBAmEC;;;;;;;;kBAnI8D,OAAO;sBAChD,YAAY"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _formBuilder = require("@pinuts/form-builder");
10
+ var _reactI18next = require("react-i18next");
11
+ var _useValidationMessage = _interopRequireDefault(require("../../hooks/useValidationMessage.js"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ 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
+ 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
+ const {
16
+ useFormikContext
17
+ } = _formBuilder.formik;
18
+ const focusFieldByName = (formId, name) => {
19
+ const form = formId ? document.getElementById(formId) : document;
20
+ const field = form?.querySelector(`[name="${name}"]`);
21
+ if (field) {
22
+ field.scrollIntoView({
23
+ behavior: 'smooth',
24
+ block: 'center'
25
+ });
26
+ field.focus();
27
+ }
28
+ };
29
+
30
+ // key -> label aus der formConfig, inklusive verschachtelter Komponenten
31
+ const extractLabels = components => {
32
+ const labels = {};
33
+ const traverse = items => items.forEach(item => {
34
+ if (item.config?.key && item.config?.label) {
35
+ labels[item.config.key] = item.config.label;
36
+ }
37
+ if (item.components?.length) {
38
+ traverse(item.components);
39
+ }
40
+ });
41
+ if (components) {
42
+ traverse(components);
43
+ }
44
+ return labels;
45
+ };
46
+ const ErrorItem = _ref => {
47
+ let {
48
+ formId,
49
+ fieldName,
50
+ label,
51
+ msg
52
+ } = _ref;
53
+ const [t] = (0, _reactI18next.useTranslation)();
54
+ const errorMsg = (0, _useValidationMessage.default)(t, msg);
55
+ const handleClick = (0, _react.useCallback)(event => {
56
+ event.preventDefault();
57
+ focusFieldByName(formId, fieldName);
58
+ }, [formId, fieldName]);
59
+ return /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement("a", {
60
+ href: `#${fieldName}`,
61
+ onClick: handleClick
62
+ }, label), ': ', errorMsg);
63
+ };
64
+ ErrorItem.propTypes = {
65
+ formId: _propTypes.default.string,
66
+ fieldName: _propTypes.default.string.isRequired,
67
+ label: _propTypes.default.string.isRequired,
68
+ msg: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.array])
69
+ };
70
+ const ErrorMessagesInfoBox = _ref2 => {
71
+ let {
72
+ formConfig,
73
+ formId,
74
+ caption = 'bsrItems.errorMessagesInfoBox.caption'
75
+ } = _ref2;
76
+ const [t] = (0, _reactI18next.useTranslation)();
77
+ const {
78
+ errors,
79
+ submitCount,
80
+ isSubmitting,
81
+ initialErrors,
82
+ values,
83
+ initialValues
84
+ } = useFormikContext();
85
+ const scrollToRef = (0, _react.useRef)(null);
86
+ const labels = (0, _react.useMemo)(() => extractLabels(formConfig?.components), [formConfig]);
87
+ (0, _react.useEffect)(() => {
88
+ if (isSubmitting && Object.keys(errors).length > 0) {
89
+ if (scrollToRef.current) {
90
+ scrollToRef.current.scrollIntoView();
91
+ scrollToRef.current.focus();
92
+ } else {
93
+ window.scrollTo(0, 0);
94
+ }
95
+ }
96
+ }, [isSubmitting, errors]);
97
+
98
+ // Serverseitige Fehler bleiben stehen, solange das Feld unverändert ist
99
+ const mergedErrors = (0, _react.useMemo)(() => {
100
+ const merged = {
101
+ ...errors
102
+ };
103
+ Object.keys(initialErrors).forEach(key => {
104
+ if (values[key] === initialValues[key]) {
105
+ merged[key] = initialErrors[key];
106
+ }
107
+ });
108
+ return merged;
109
+ }, [errors, initialErrors, values, initialValues]);
110
+ const errorEntries = (0, _react.useMemo)(() => Object.entries(mergedErrors).filter(_ref3 => {
111
+ let [key] = _ref3;
112
+ return labels[key];
113
+ }), [mergedErrors, labels]);
114
+
115
+ // Nichts anzeigen, wenn es keine auflistbaren Fehler gibt (sonst leere rote Box);
116
+ // und nicht vor dem ersten Absenden, außer der Server hat schon Fehler geliefert.
117
+ const hasInitialErrors = Object.keys(initialErrors).length > 0;
118
+ if (!errorEntries.length || !submitCount && !hasInitialErrors) {
119
+ return null;
120
+ }
121
+ return /*#__PURE__*/_react.default.createElement("div", {
122
+ className: "pi-form-control__has-error",
123
+ role: "alert",
124
+ tabIndex: "-1",
125
+ ref: scrollToRef
126
+ }, /*#__PURE__*/_react.default.createElement("div", {
127
+ className: "pi-message-text"
128
+ }, /*#__PURE__*/_react.default.createElement("p", null, t(caption)), /*#__PURE__*/_react.default.createElement("ul", null, errorEntries.map(_ref4 => {
129
+ let [key, msg] = _ref4;
130
+ return /*#__PURE__*/_react.default.createElement(ErrorItem, {
131
+ key: key,
132
+ formId: formId,
133
+ fieldName: key,
134
+ label: t(labels[key]),
135
+ msg: msg
136
+ });
137
+ }))));
138
+ };
139
+ ErrorMessagesInfoBox.propTypes = {
140
+ formConfig: _propTypes.default.instanceOf(Object).isRequired,
141
+ formId: _propTypes.default.string,
142
+ caption: _propTypes.default.string
143
+ };
144
+ var _default = exports.default = ErrorMessagesInfoBox;