@luomus/laji-form 15.1.24 → 15.1.26

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 (41) hide show
  1. package/dist/laji-form.js +1 -1
  2. package/dist/styles.css +96 -5
  3. package/lib/ApiClient.d.ts +2 -1
  4. package/lib/components/BaseComponent.d.ts +1 -1
  5. package/lib/components/LajiForm.d.ts +3 -13
  6. package/lib/components/VirtualSchemaField.d.ts +10 -10
  7. package/lib/components/fields/AsArrayField.d.ts +131 -7
  8. package/lib/components/fields/ExtraLabelRowField.d.ts +1 -1
  9. package/lib/components/fields/ImageArrayField.d.ts +12 -12
  10. package/lib/components/fields/InitiallyHiddenField.d.ts +1 -1
  11. package/lib/components/fields/LocationChooserField.d.ts +1 -1
  12. package/lib/components/fields/MultiTagArrayField.d.ts +2 -2
  13. package/lib/components/fields/MultiTagArrayField.js +2 -1
  14. package/lib/components/fields/NamedPlaceChooserField.d.ts +88 -2
  15. package/lib/components/fields/NamedPlaceChooserField.js +1 -1
  16. package/lib/components/fields/NamedPlaceSaverField.d.ts +44 -1
  17. package/lib/components/fields/PdfArrayField.d.ts +2 -2
  18. package/lib/components/fields/ScopeField.d.ts +1 -1
  19. package/lib/components/fields/SingleActiveArrayField.js +1 -1
  20. package/lib/components/fields/SortArrayField.d.ts +93 -6
  21. package/lib/components/fields/SortArrayField.js +1 -1
  22. package/lib/components/fields/SplitField.d.ts +1 -1
  23. package/lib/components/fields/SplitField.js +3 -2
  24. package/lib/components/fields/StringToArrayField.d.ts +44 -1
  25. package/lib/components/fields/TagArrayField.js +1 -1
  26. package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +1 -1
  27. package/lib/components/fields/UnitListShorthandArrayField.d.ts +44 -1
  28. package/lib/components/widgets/AutosuggestWidget.js +1 -1
  29. package/lib/components/widgets/CheckboxWidget.js +7 -6
  30. package/lib/components/widgets/SelectWidget.d.ts +13 -52
  31. package/lib/components/widgets/SelectWidget.js +234 -145
  32. package/lib/services/focus-service.js +3 -2
  33. package/lib/services/settings-service.d.ts +2 -2
  34. package/lib/services/submit-hook-service.d.ts +1 -1
  35. package/lib/themes/theme.d.ts +4 -7
  36. package/lib/types.d.ts +59 -0
  37. package/lib/types.js +11 -0
  38. package/lib/utils.d.ts +13 -7
  39. package/lib/utils.js +19 -7
  40. package/package.json +3 -3
  41. package/test-export/test-utils.js +4 -4
package/lib/utils.js CHANGED
@@ -12,7 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.bsSizeToPixels = exports.canAdd = exports.stringifyKeyCombo = exports.decapitalizeFirstLetter = exports.capitalizeFirstLetter = exports.getKeyHandlerTargetId = exports.isDescendant = exports.getBootstrapCols = exports.getNestedUiFieldsList = exports.updateTailUiSchema = exports.getNestedTailUiSchema = exports.keyboardClick = exports.formDataEquals = exports.formDataIsEmpty = exports.filterItemIdsDeeply = exports.filterItemId = exports.filterLajiFormId = exports.syncScroll = exports._syncScroll = exports.shouldSyncScroll = exports.focusAndScroll = exports.focusById = exports.getSchemaElementById = exports.findNearestParentSchemaElemId = exports.focusNextInput = exports.getNextInput = exports.getNextInputInInputs = exports.ReactUtils = exports.findNearestParentTabbableElem = exports.findNearestParentSchemaElem = exports.canFocusNextInput = exports.isTabbableInput = exports.getTabbableFields = exports.isSelect = exports.isMultiSelect = exports.getReactComponentName = exports.parseJSONPointer = exports.isEmptyString = exports.isNullOrUndefined = exports.getInnerUiSchema = exports.getUiOptions = exports.immutableDelete = exports.getUpdateObjectFromJSONPointer = exports.getUpdateObjectFromJSONPath = exports.propertyHasData = exports.hasData = exports.getDefaultFormState = exports.isDefaultData = exports.isHidden = exports.isObject = void 0;
15
- exports.translate = exports.classNames = exports.getTitle = exports.toJSONPointer = exports.getReversedFormDataIndex = exports.getFormDataIndex = exports.getIdxWithoutOffset = exports.getIdxWithOffset = exports.constructTranslations = exports.filteredErrors = exports.highlightElem = exports.findPointerForLajiFormId = exports.removeLajiFormIds = exports.getAllLajiFormIdsDeeply = exports.addLajiFormIds = exports.getFieldUUID = exports.getUUID = exports.assignUUID = exports.updateFormDataWithJSONPointer = exports.uiSchemaJSONPointer = exports.schemaJSONPointer = exports.idSchemaIdToJSONPointer = exports.JSONPointerToId = exports.checkJSONPointer = exports.parseUiSchemaFromFormDataPointer = exports.parseSchemaFromFormDataPointer = exports.triggerParentComponent = exports.bringRemoteFormData = exports.checkArrayRules = exports.checkRules = exports.formatErrorMessage = exports.formatValue = exports.dictionarify = exports.injectButtons = exports.updateSafelyWithJSONPointer = exports.updateSafelyWithJSONPath = exports.filter = exports.scrollIntoViewIfNeeded = exports.getScrollPositionForScrollIntoViewIfNeeded = exports.getWindowScrolled = exports.applyFunction = exports.pixelsToBsSize = void 0;
15
+ exports.useBooleanSetter = exports.translate = exports.classNames = exports.getTitle = exports.toJSONPointer = exports.getReversedFormDataIndex = exports.getFormDataIndex = exports.getIdxWithoutOffset = exports.getIdxWithOffset = exports.constructTranslations = exports.filteredErrors = exports.highlightElem = exports.findPointerForLajiFormId = exports.removeLajiFormIds = exports.getAllLajiFormIdsDeeply = exports.addLajiFormIds = exports.getFieldUUID = exports.getUUID = exports.assignUUID = exports.updateFormDataWithJSONPointer = exports.uiSchemaJSONPointer = exports.schemaJSONPointer = exports.idSchemaIdToJSONPointer = exports.JSONPointerToId = exports.checkJSONPointer = exports.parseUiSchemaFromFormDataPointer = exports.parseSchemaFromFormDataPointer = exports.triggerParentComponent = exports.bringRemoteFormData = exports.checkArrayRules = exports.checkRules = exports.formatErrorMessage = exports.formatValue = exports.dictionarify = exports.injectButtons = exports.updateSafelyWithJSONPointer = exports.updateSafelyWithJSONPath = exports.filter = exports.scrollIntoViewIfNeeded = exports.getScrollPositionForScrollIntoViewIfNeeded = exports.getWindowScrolled = exports.applyFunction = exports.pixelsToBsSize = void 0;
16
16
  const React = require("react");
17
17
  const react_dom_1 = require("react-dom");
18
18
  const utils_1 = require("@rjsf/utils");
@@ -138,12 +138,14 @@ function getUiOptions(container) {
138
138
  return {};
139
139
  }
140
140
  exports.getUiOptions = getUiOptions;
141
- function getInnerUiSchema(parentUiSchema) {
142
- let _a = parentUiSchema || {}, { uiSchema } = _a, restOfUiSchema = __rest(_a, ["uiSchema"]);
143
- if (uiSchema && (Context_1.default("VIRTUAL_SCHEMA_NAMES")[uiSchema["ui:field"]] || Context_1.default("SCHEMA_FIELD_WRAPPERS")[uiSchema["ui:field"]]) && parentUiSchema["ui:buttons"]) {
141
+ function getInnerUiSchema(parentUiSchema = {}) {
142
+ let { uiSchema } = parentUiSchema, restOfUiSchema = __rest(parentUiSchema, ["uiSchema"]);
143
+ if (uiSchema
144
+ && (Context_1.default("VIRTUAL_SCHEMA_NAMES")[uiSchema["ui:field"]]
145
+ || Context_1.default("SCHEMA_FIELD_WRAPPERS")[uiSchema["ui:field"]]) && parentUiSchema["ui:buttons"]) {
144
146
  uiSchema = Object.assign(Object.assign({}, uiSchema), { "ui:buttons": [
145
147
  ...(uiSchema["ui:buttons"] || []),
146
- ...parentUiSchema["ui:buttons"]
148
+ ...(parentUiSchema["ui:buttons"] || [])
147
149
  ] });
148
150
  }
149
151
  return Object.assign(Object.assign(Object.assign({}, restOfUiSchema), { "ui:field": undefined, "ui:settings": undefined, "ui:options": uiSchema ? undefined : restOfUiSchema["ui:options"], "ui:buttons": uiSchema ? undefined : parentUiSchema["ui:buttons"] }), (uiSchema || {}));
@@ -436,10 +438,9 @@ const formDataEquals = (f1, f2, context, id) => {
436
438
  return _formDataEquals(context)(f1, f2, id);
437
439
  };
438
440
  exports.formDataEquals = formDataEquals;
439
- const _keyboardClick = ({ contextId }) => (fn) => {
441
+ const _keyboardClick = ({ contextId }) => (fn, keys = [" ", "Enter"]) => {
440
442
  return (e) => {
441
443
  var _a, _b;
442
- let keys = [" ", "Enter"];
443
444
  if ((_b = (_a = e.target) === null || _a === void 0 ? void 0 : _a.matches) === null || _b === void 0 ? void 0 : _b.call(_a, tabbableSelectorsQuery)) {
444
445
  const { shortcuts } = Context_1.default(contextId);
445
446
  keys = keys.filter(k => !(shortcuts === null || shortcuts === void 0 ? void 0 : shortcuts[k]));
@@ -1183,3 +1184,14 @@ function translate(translations, key, params) {
1183
1184
  return Object.keys(params || {}).reduce((translated, param) => translated.replace(new RegExp(`%{${param}}`, "g"), (params === null || params === void 0 ? void 0 : params[param]) || ""), translations[key]);
1184
1185
  }
1185
1186
  exports.translate = translate;
1187
+ /**
1188
+ * @param value the default value of the setter
1189
+ * @returns [stateValue, setTrue, setFalse]
1190
+ */
1191
+ function useBooleanSetter(value) {
1192
+ const [open, setOpen] = React.useState(value);
1193
+ const setTrue = React.useCallback(() => setOpen(true), []);
1194
+ const setFalse = React.useCallback(() => setOpen(false), []);
1195
+ return [open, setTrue, setFalse];
1196
+ }
1197
+ exports.useBooleanSetter = useBooleanSetter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luomus/laji-form",
3
- "version": "15.1.24",
3
+ "version": "15.1.26",
4
4
  "description": "React module capable of building dynamic forms from Laji form json schemas",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -35,10 +35,10 @@
35
35
  "luomus"
36
36
  ],
37
37
  "author": "Olli Raitio <olli.raitio@helsinki.fi>",
38
- "repository": "https://github.com/luomus/laji-form.git",
38
+ "repository": "git+https://github.com/luomus/laji-form.git",
39
39
  "license": "MIT",
40
40
  "dependencies": {
41
- "@luomus/laji-map": "^5.0.2",
41
+ "@luomus/laji-map": "^5.1.2",
42
42
  "@luomus/laji-validate": "^0.0.121",
43
43
  "@rjsf/core": "~5.1.0",
44
44
  "@rjsf/utils": "~5.1.0",
@@ -39,8 +39,8 @@ function getEnumWidgetForContainer($container) {
39
39
  return {
40
40
  $container,
41
41
  openEnums: () => $container.click(),
42
- $enumContainer: $container.locator(".rw-popup-container"),
43
- $$enums: $container.locator(".rw-list-option"),
42
+ $enumContainer: $container.locator(".lajii-form-dropdown"),
43
+ $$enums: $container.locator(".laji-form-dropdown-item"),
44
44
  $input: $container.locator("input")
45
45
  };
46
46
  }
@@ -140,7 +140,7 @@ class Form {
140
140
  const $namedPlaceChooserModal = this.page.locator(".named-place-chooser-modal");
141
141
  const $mapPopupContainer = this.page.locator(".named-place-popup");
142
142
  return {
143
- select: getEnumWidgetForContainer(this.page.locator("#named-place-chooser-select")),
143
+ select: getEnumWidgetForContainer($namedPlaceChooserModal.locator(".laji-form-dropdown-container")),
144
144
  mapPopup: {
145
145
  $container: $mapPopupContainer,
146
146
  $useBtn: $mapPopupContainer.locator(".btn-default")
@@ -210,7 +210,7 @@ class Form {
210
210
  return this.$locate(str).locator("textarea");
211
211
  }
212
212
  $getEnumWidget(str) {
213
- const $container = this.$locate(str).locator(".rw-combobox");
213
+ const $container = this.$locate(str).locator(".laji-form-dropdown-container");
214
214
  return getEnumWidgetForContainer($container);
215
215
  }
216
216
  getDateWidget(str) {