@luomus/laji-form 14.3.8 → 15.1.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/cypress/fixtures/example.json +5 -0
  3. closes suggestion list (failed).png +0 -0
  4. is marked as suggested (failed).png +0 -0
  5. package/dist/laji-form.js +1 -1
  6. package/lib/components/LajiForm.js +0 -1
  7. package/lib/components/fields/ImageArrayField.js +2 -4
  8. package/lib/components/fields/NamedPlaceSaverField.js +1 -1
  9. package/lib/components/fields/SectionArrayField.js +5 -1
  10. package/lib/components/fields/SingleActiveArrayField.js +1 -1
  11. package/lib/components/fields/UnitShorthandField.js +2 -2
  12. package/lib/components/templates/ArrayFieldTemplate.js +3 -2
  13. package/lib/components/templates/FieldTemplate.js +2 -2
  14. package/lib/utils.d.ts +6 -2
  15. package/lib/utils.js +13 -13
  16. package/llol +10 -0
  17. package/llol.pdf +10 -0
  18. package/migrate.sh +33 -0
  19. package/package.json +14 -21
  20. package/playwright-report/index.html +62 -0
  21. package/playwright.config.ts +77 -0
  22. package/q +196 -0
  23. package/rename.sh +24 -0
  24. package/test-export/test-utils.d.ts +177 -150
  25. package/test-export/test-utils.js +214 -218
  26. package/trip-report.spec.ts +594 -0
  27. package/tsconfig.test.json +1 -1
  28. package/lib/components/fields/AsArrayField.d.ts +0 -292
  29. package/lib/components/fields/AsArrayField.js +0 -39
  30. package/test-export/array-spec.d.ts +0 -1
  31. package/test-export/array-spec.js +0 -204
  32. package/test-export/bird-point-count-spec.d.ts +0 -1
  33. package/test-export/bird-point-count-spec.js +0 -62
  34. package/test-export/collection-contest-form-spec.d.ts +0 -1
  35. package/test-export/collection-contest-form-spec.js +0 -38
  36. package/test-export/dataset-form-spec.d.ts +0 -1
  37. package/test-export/dataset-form-spec.js +0 -50
  38. package/test-export/date-time-widget-spec.d.ts +0 -1
  39. package/test-export/date-time-widget-spec.js +0 -188
  40. package/test-export/geocoder-spec.d.ts +0 -1
  41. package/test-export/geocoder-spec.js +0 -135
  42. package/test-export/image-array-spec.d.ts +0 -1
  43. package/test-export/image-array-spec.js +0 -94
  44. package/test-export/inject-field-spec.d.ts +0 -1
  45. package/test-export/inject-field-spec.js +0 -148
  46. package/test-export/internal-uuids-spec.d.ts +0 -1
  47. package/test-export/internal-uuids-spec.js +0 -157
  48. package/test-export/invasive-species-eradication-np-spec.d.ts +0 -1
  49. package/test-export/invasive-species-eradication-np-spec.js +0 -18
  50. package/test-export/invasive-species-eradication-spec.d.ts +0 -1
  51. package/test-export/invasive-species-eradication-spec.js +0 -25
  52. package/test-export/line-transect-spec.d.ts +0 -1
  53. package/test-export/line-transect-spec.js +0 -121
  54. package/test-export/mobile-form-spec.d.ts +0 -1
  55. package/test-export/mobile-form-spec.js +0 -84
  56. package/test-export/nafi-spec.d.ts +0 -1
  57. package/test-export/nafi-spec.js +0 -85
  58. package/test-export/select-widget-spec.d.ts +0 -1
  59. package/test-export/select-widget-spec.js +0 -68
  60. package/test-export/single-item-array-field-spec.d.ts +0 -1
  61. package/test-export/single-item-array-field-spec.js +0 -92
  62. package/test-export/syke-butterfly-spec.d.ts +0 -1
  63. package/test-export/syke-butterfly-spec.js +0 -163
  64. package/test-export/transaction-form-spec.d.ts +0 -1
  65. package/test-export/transaction-form-spec.js +0 -63
  66. package/test-export/trip-report-autosuggest-spec.d.ts +0 -1
  67. package/test-export/trip-report-autosuggest-spec.js +0 -272
  68. package/test-export/trip-report-spec.d.ts +0 -1
  69. package/test-export/trip-report-spec.js +0 -456
  70. package/test-export/unit-list-shorthand-array-field-spec.d.ts +0 -1
  71. package/test-export/unit-list-shorthand-array-field-spec.js +0 -71
  72. package/test-export/validation-spec.d.ts +0 -1
  73. package/test-export/validation-spec.js +0 -336
  74. package/test-export/water-bird-spec.d.ts +0 -1
  75. package/test-export/water-bird-spec.js +0 -30
  76. package/test-export/wbc-spec.d.ts +0 -1
  77. package/test-export/wbc-spec.js +0 -82
@@ -102,7 +102,6 @@ const fields = importLocalComponents("fields", [
102
102
  "InputWithDefaultValueButtonField",
103
103
  "MultiTagArrayField",
104
104
  "PdfArrayField",
105
- "AsArrayField",
106
105
  { "InputTransformerField": "ConditionalOnChangeField" },
107
106
  { "ConditionalField": "ConditionalUiSchemaField" },
108
107
  { "UnitRapidField": "UnitShorthandField" },
@@ -415,7 +415,7 @@ function MediaArrayField(ComposedComponent) {
415
415
  ? Promise.resolve(Object.assign(Object.assign({}, mediaMetadata), { capturerVerbatim: [mediaMetadata.capturerVerbatim] }))
416
416
  : MACode
417
417
  ? this.apiClient.fetchCached(`/person/by-id/${MACode}`).then(({ fullName = MACode }) => (Object.assign(Object.assign({ capturerVerbatim: Array.isArray(fullName) ? fullName : [fullName] }, mediaMetadata), { intellectualOwner: fullName }))).catch(() => Promise.resolve(mediaMetadata))
418
- : mediaMetadata;
418
+ : Promise.resolve(mediaMetadata);
419
419
  };
420
420
  this.getMaxFileSizeAsString = () => {
421
421
  let maxSize = this.MAX_FILE_SIZE.toString().substring(0, this.MAX_FILE_SIZE.toString().length - 6);
@@ -505,8 +505,6 @@ function MediaArrayField(ComposedComponent) {
505
505
  const { dragging } = this.state;
506
506
  const { Row, Col } = this.context.theme;
507
507
  const { DescriptionFieldTemplate } = this.props.registry.templates;
508
- const mediaCount = (this.props.formData || []).length + (this.state.tmpMedias || []).length;
509
- const showAdd = utils_1.isNullOrUndefined(this.props.schema.maxItems) || mediaCount < this.props.schema.maxItems;
510
508
  return (React.createElement(Row, null,
511
509
  React.createElement(Col, { xs: 12 },
512
510
  React.createElement(TitleFieldTemplate, { title: title, schema: schema, uiSchema: uiSchema, id: idSchema.$id, registry: this.props.registry }),
@@ -514,7 +512,7 @@ function MediaArrayField(ComposedComponent) {
514
512
  React.createElement("div", { className: `laji-form-medias ${this.CONTAINER_CLASS}` },
515
513
  this.renderMedias(),
516
514
  this.renderLoadingMedias(),
517
- showAdd && React.createElement(OverlayTrigger, { overlay: tooltip },
515
+ React.createElement(OverlayTrigger, { overlay: tooltip },
518
516
  React.createElement(react_dropzone_1.default, { accept: this.ACCEPT_FILE_TYPES, onDragEnter: this.onDragEnter, onDragLeave: this.onDragLeave, onDrop: this.onDrop, disabled: readonly || disabled, noKeyboard: true }, ({ getRootProps, getInputProps }) => {
519
517
  const _a = getRootProps(), { onClick: _onClick } = _a, rootProps = __rest(_a, ["onClick"]);
520
518
  const onClick = addModal ? this.defaultOnClick : _onClick;
@@ -146,7 +146,7 @@ class PlaceSaverDialog extends React.Component {
146
146
  }
147
147
  componentDidMount() {
148
148
  this.mounted = true;
149
- this.apiClient.fetchCached("/named-places", { includePublic: false, pageSize: 1000 }).then(response => {
149
+ this.apiClient.fetchCached("/named-places", { includePublic: false, pageSize: 10000 }).then(response => {
150
150
  if (!this.mounted)
151
151
  return;
152
152
  const state = {
@@ -200,8 +200,12 @@ let SectionArrayFieldTemplate = class SectionArrayFieldTemplate extends React.Co
200
200
  };
201
201
  this.onNewSectionKeyDown = (e) => {
202
202
  if (e.key === "Enter") {
203
- this.sectorIsValid(this.state.newSection) && this.addSection();
203
+ if (!this.sectorIsValid(this.state.newSection)) {
204
+ return;
205
+ }
206
+ this.addSection();
204
207
  this.hideAddSection();
208
+ e.stopPropagation();
205
209
  }
206
210
  };
207
211
  this.addSection = () => {
@@ -770,7 +770,7 @@ let TableArrayFieldTemplate = class TableArrayFieldTemplate extends React.Compon
770
770
  if (utils_1.filteredErrors(errorSchema)[utils_1.getFormDataIndex(idx, uiSchema)])
771
771
  className = className ? `${className} bg-danger` : "bg-danger";
772
772
  return [
773
- React.createElement("tr", { key: utils_1.getUUID(this.props.formData[item.index]) || item.key, onClick: this.getOnChangeActive(idx), className: className, tabIndex: idx === activeIdx ? undefined : 0, id: idx !== activeIdx ? `_laji-form_${this.props.formContext.contextId}_${ArrayField_2.ArrayFieldPatched.prototype.getIdSchema(this.props, idx).$id}` : undefined, ref: setItemRef(idx), style: idx === activeIdx ? this.state.activeTrStyle : undefined, onMouseEnter: onMouseEnter(idx), onMouseLeave: onMouseLeave(idx), onKeyDown: this.onKeyDownActivate(idx) },
773
+ React.createElement("tr", { key: utils_1.getUUID(this.props.formData[item.index]) || item.key, onClick: this.getOnChangeActive(idx), className: className, tabIndex: idx === activeIdx ? undefined : 0, id: idx !== activeIdx ? `_laji-form_${ArrayField_2.ArrayFieldPatched.prototype.getIdSchema(this.props, idx).$id}` : undefined, ref: setItemRef(idx), style: idx === activeIdx ? this.state.activeTrStyle : undefined, onMouseEnter: onMouseEnter(idx), onMouseLeave: onMouseLeave(idx), onKeyDown: this.onKeyDownActivate(idx) },
774
774
  cols.length ? cols.map(col => React.createElement("td", { key: col }, utils_1.formatValue(Object.assign(Object.assign({}, that.props), { schema: schema.items.properties[col], uiSchema: (uiSchema.items || {})[col], formData: formData[idx][col] }), formatters[col], { formData: formData[idx] }))) : React.createElement("td", null),
775
775
  (activeIdx !== undefined && items[activeIdx] && idx === activeIdx) ? (React.createElement("td", { key: utils_1.getUUID(formData[activeIdx]) || activeIdx, className: "single-active-array-table-content-col" },
776
776
  React.createElement("div", { className: "laji-form-field-template-item keep-vertical", style: this.state.activeStyle, ref: this.setActiveRef },
@@ -96,14 +96,14 @@ let UnitShorthandField = class UnitShorthandField extends React.Component {
96
96
  const uiSchemaWithoutHelp = utils_1.isEmptyString(help) ? uiSchema : utils_1.updateTailUiSchema(uiSchema, { [shorthandFieldName]: { "ui:belowHelp": { $set: undefined } } });
97
97
  const id = (shorthandFieldName && this.props.idSchema[shorthandFieldName]) ?
98
98
  this.props.idSchema[shorthandFieldName].$id :
99
- `${this.props.idSchema.$id}_shortHandField`;
99
+ `${this.props.idSchema.$id}-shortHandField`;
100
100
  let innerUiSchema = undefined;
101
101
  if (this.state.showSchema) {
102
102
  innerUiSchema = utils_1.getInnerUiSchema(Object.assign({}, uiSchemaWithoutHelp));
103
103
  const innerOptions = utils_1.getUiOptions(innerUiSchema);
104
104
  innerUiSchema = Object.assign(Object.assign({}, innerUiSchema), { "ui:options": Object.assign(Object.assign({}, innerOptions), { buttons: [...(innerOptions.buttons || []), toggleButton] }) });
105
105
  }
106
- return !this.state.showSchema ? (React.createElement("div", { className: "laji-form-field-template-item", id: `_laji-form_${this.props.formContext.contextId}_${id}` },
106
+ return !this.state.showSchema ? (React.createElement("div", { className: "laji-form-field-template-item", id: `_laji-form_${id}` },
107
107
  React.createElement(CodeReader, { translations: this.props.formContext.translations, onChange: this.onCodeChange, value: this.props.formData[shorthandFieldName], formID: utils_1.getUiOptions(this.props.uiSchema).formID || formContext.formID || formContext.uiSchemaContext.formID, help: help, id: id, formContext: formContext, disabled: disabled, readonly: readonly, className: "laji-form-field-template-schema" }),
108
108
  React.createElement("div", { className: "laji-form-field-template-buttons" }, ArrayFieldTemplate_1.getButton(toggleButton)))) : (React.createElement(SchemaField, Object.assign({}, this.props, { uiSchema: innerUiSchema })));
109
109
  }
@@ -152,7 +152,7 @@ function handlesArrayKeys(ComposedComponent) {
152
152
  const context = Context_1.default(this.props.formContext.contextId);
153
153
  if (target === "last") {
154
154
  context.idToFocus = `${this.props.idSchema.$id}_${this.props.formData.length - 1}`;
155
- context.idToScroll = `_laji-form_${this.props.formContext.contextId}_${this.props.idSchema.$id}_${this.props.formData.length - 2}`;
155
+ context.idToScroll = `_laji-form_${this.props.idSchema.$id}_${this.props.formData.length - 2}`;
156
156
  }
157
157
  else {
158
158
  console.warn(`custom event "focus" has only "last" implemented. Target value was: ${target}`);
@@ -277,8 +277,9 @@ class ArrayFieldTemplateWithoutKeyHandling extends React.Component {
277
277
  const bottomButtons = getButtonsElem(getButtonsForPosition(props, _buttons, "bottom"), props);
278
278
  const getRefFor = i => elem => { this.deleteButtonRefs[i] = elem; };
279
279
  const items = props.items.map((item, i) => {
280
+ const index = utils_1.getFormDataIndex(i, props.uiSchema);
280
281
  const getDeleteButton = () => (React.createElement("div", { className: "laji-form-field-template-buttons" },
281
- React.createElement(components_1.DeleteButton, { id: `${props.idSchema.$id}_${i}`, disabled: disabled || readonly, ref: getRefFor(i), onClick: item.onDropIndexClick(item.index), confirm: confirmDelete, corner: deleteCorner, tooltip: deleteHelp, translations: props.formContext.translations })));
282
+ React.createElement(components_1.DeleteButton, { id: `${props.idSchema.$id}_${index}`, disabled: disabled || readonly, ref: getRefFor(i), onClick: item.onDropIndexClick(item.index), confirm: confirmDelete, corner: deleteCorner, tooltip: deleteHelp, translations: props.formContext.translations })));
282
283
  if (!this.onFocuses[i]) {
283
284
  this.onFocuses[i] = this.getOnFocus(i);
284
285
  }
@@ -58,7 +58,7 @@ class _FieldTemplate extends React.Component {
58
58
  this.props.formContext.services.DOMIds.release(this.props.id, this.receiveId);
59
59
  }
60
60
  render() {
61
- const { id, classNames: _classNames, children, rawErrors, description, hidden, required, displayLabel, schema, uiSchema, formContext, label: _label, forceDisplayLabel } = this.props;
61
+ const { id, classNames: _classNames, children, rawErrors, description, hidden, required, displayLabel, schema, uiSchema, label: _label, forceDisplayLabel } = this.props;
62
62
  const label = "ui:title" in uiSchema
63
63
  ? uiSchema["ui:title"]
64
64
  : "title" in schema
@@ -69,7 +69,7 @@ class _FieldTemplate extends React.Component {
69
69
  }
70
70
  const inlineHelp = uiSchema["ui:inlineHelp"];
71
71
  const belowHelp = uiSchema["ui:belowHelp"];
72
- const htmlId = this.state.id ? `_laji-form_${formContext.contextId}_${this.state.id}` : undefined;
72
+ const htmlId = this.state.id ? `_laji-form_${this.state.id}` : undefined;
73
73
  const _displayLabel = forceDisplayLabel ||
74
74
  ((schema.items && schema.items.enum && !utils_1.isMultiSelect(schema, uiSchema)) ? false : displayLabel);
75
75
  let warnings = [];
package/lib/utils.d.ts CHANGED
@@ -51,8 +51,8 @@ export declare const ReactUtils: (context: FormContext) => ReactUtilsType;
51
51
  export declare const getNextInputInInputs: (formContext: FormContext) => (inputElem: HTMLElement | undefined, reverseDirection: boolean | undefined, fields: HTMLElement[]) => HTMLElement | undefined;
52
52
  export declare const getNextInput: (formContext: FormContext) => (inputElem: HTMLElement, reverseDirection?: boolean) => HTMLElement | undefined;
53
53
  export declare const focusNextInput: (formContext: FormContext) => (reverseDirection?: boolean) => boolean;
54
- export declare const findNearestParentSchemaElemId: (contextId: number, elem: HTMLElement) => string | undefined;
55
- export declare const getSchemaElementById: (contextId: number, id: string) => HTMLElement | null;
54
+ export declare const findNearestParentSchemaElemId: (elem: HTMLElement) => string | undefined;
55
+ export declare const getSchemaElementById: (id: string) => HTMLElement | null;
56
56
  export declare const focusById: (context: FormContext, id: string, focus?: boolean | undefined) => boolean;
57
57
  export declare const focusAndScroll: (context: FormContext, idToFocus?: string | undefined, idToScroll?: string | undefined, focus?: boolean | undefined) => boolean | undefined;
58
58
  export declare const shouldSyncScroll: (context: FormContext) => boolean;
@@ -164,4 +164,8 @@ export declare const classNames: (...cs: any[]) => string;
164
164
  export declare function translate(translations: ByLang, key: string, params?: {
165
165
  [key: string]: string | undefined;
166
166
  }): string;
167
+ export declare type JSONSerializable = string | number | boolean | JSONSerializableObject | JSONSerializable[] | null;
168
+ export declare type JSONSerializableObject = {
169
+ [prop: string]: JSONSerializable;
170
+ };
167
171
  export {};
package/lib/utils.js CHANGED
@@ -245,8 +245,8 @@ function findNearestParentTabbableElem(elem) {
245
245
  }
246
246
  exports.findNearestParentTabbableElem = findNearestParentTabbableElem;
247
247
  const ReactUtils = (context) => ({
248
- findNearestParentSchemaElemId: _findNearestParentSchemaElemId(context),
249
- getSchemaElementById: _getSchemaElementById(context),
248
+ findNearestParentSchemaElemId: _findNearestParentSchemaElemId,
249
+ getSchemaElementById: _getSchemaElementById,
250
250
  focusById: _focusById(context),
251
251
  focusAndScroll: _focusAndScroll(context),
252
252
  shouldSyncScroll: _shouldSyncScroll(context),
@@ -322,23 +322,23 @@ const focusNextInput = (formContext) => (reverseDirection = false) => {
322
322
  return false;
323
323
  };
324
324
  exports.focusNextInput = focusNextInput;
325
- const _findNearestParentSchemaElemId = ({ contextId }) => (elem) => {
326
- const nearestParentSchemaElem = findNearestParentSchemaElem(elem) || document.getElementById(`_laji-form_${contextId}_root`);
327
- return nearestParentSchemaElem ? nearestParentSchemaElem.id.replace(`_laji-form_${contextId}_`, "") : undefined;
325
+ const _findNearestParentSchemaElemId = (elem) => {
326
+ const nearestParentSchemaElem = findNearestParentSchemaElem(elem) || document.getElementById("_laji-form_root");
327
+ return nearestParentSchemaElem ? nearestParentSchemaElem.id.replace("_laji-form_", "") : undefined;
328
328
  };
329
- const findNearestParentSchemaElemId = (contextId, elem) => {
330
- return _findNearestParentSchemaElemId({ contextId })(elem);
329
+ const findNearestParentSchemaElemId = (elem) => {
330
+ return _findNearestParentSchemaElemId(elem);
331
331
  };
332
332
  exports.findNearestParentSchemaElemId = findNearestParentSchemaElemId;
333
- const _getSchemaElementById = ({ contextId }) => (id) => {
334
- return document.getElementById(`_laji-form_${contextId}_${id}`);
333
+ const _getSchemaElementById = (id) => {
334
+ return document.getElementById(`_laji-form_${id}`);
335
335
  };
336
- const getSchemaElementById = (contextId, id) => {
337
- return _getSchemaElementById({ contextId })(id);
336
+ const getSchemaElementById = (id) => {
337
+ return _getSchemaElementById(id);
338
338
  };
339
339
  exports.getSchemaElementById = getSchemaElementById;
340
340
  const _focusById = (context) => (id, focus = true) => {
341
- const elem = exports.getSchemaElementById(context.contextId, id);
341
+ const elem = exports.getSchemaElementById(id);
342
342
  if (elem && document.body.contains(elem)) {
343
343
  const tabbableFields = getTabbableFields(elem);
344
344
  if (tabbableFields && tabbableFields.length) {
@@ -363,7 +363,7 @@ const _focusAndScroll = (context) => (idToFocus, idToScroll, focus = true) => {
363
363
  return false;
364
364
  if (idToScroll) {
365
365
  const elemToScroll = document.getElementById(getKeyHandlerTargetId(idToScroll, _context));
366
- const elemToFocus = exports.getSchemaElementById(contextId, getKeyHandlerTargetId(idToFocus, _context));
366
+ const elemToFocus = exports.getSchemaElementById(getKeyHandlerTargetId(idToFocus, _context));
367
367
  if (!elemToScroll || !elemToFocus) {
368
368
  return end();
369
369
  }
package/llol ADDED
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Error</title>
6
+ </head>
7
+ <body>
8
+ <pre>Cannot POST /v0/html-to-pdf</pre>
9
+ </body>
10
+ </html>
package/llol.pdf ADDED
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Error</title>
6
+ </head>
7
+ <body>
8
+ <pre>Cannot POST /v0/html-to-pdf</pre>
9
+ </body>
10
+ </html>
package/migrate.sh ADDED
@@ -0,0 +1,33 @@
1
+ files="$@"
2
+ set -e
3
+
4
+ echo "Add playwright import..."
5
+ sed -i '1s/^/import { test, expect } from "@playwright\/test";\n/' $files
6
+
7
+ echo "Removing protractor imports..."
8
+ sed -i"" -e '/import.*protractor/d' $files
9
+
10
+ #echo "Adding serial mode..."
11
+ #sed -i"" -e '/import/,/^$/s/^$/\ntest.describe.configure\({ mode: "serial" }\);\n/g' $files
12
+
13
+ echo "Replacing protractor cmds with playwright..."
14
+ sed -i"" -E 's/\w?describe\(/test.describe\(/' $files
15
+ sed -i"" -E 's/\w?it\(/test\(/' $files
16
+ sed -i"" -E 's/\w?afterEach\(/test.afterEach\(/' $files
17
+ sed -i"" -E 's/\w?beforeAll\(/test.beforeAll\(/' $files
18
+ sed -i"" -E 's/\w?beforeEach\(/test.beforeEach\(/' $files
19
+ sed -i"" -E 's/\w?afterAll\(/test.afterAll\(/' $files
20
+ sed -i"" -E 's/\.\$\$\(/\.locator\(/g' $files
21
+ sed -i"" -E 's/\.\$\(/\.locator\(/g' $files
22
+ sed -i"" -E 's/\.get\(/\.nth\(/g' $files
23
+ sed -i"" -E 's/ElementArrayFinder/ElementFinder/g' $files
24
+ sed -i"" -E 's/ElementFinder/Locator/g' $files
25
+ sed -i"" -E 's/sendKeys/fill/g' $files
26
+ sed -i"" -E 's/protractor.Key.ENTER/"Enter"/g' $files
27
+ sed -i"" -E 's/protractor.Key.TAB/"Tab"/g' $files
28
+ sed -i"" -E 's/protractor.Key.DOWN/"ArrowDown"/g' $files
29
+
30
+ #laji form specific
31
+ sed -i"" -E 's/beforeAll\(async \(\)/beforeAll\(async \({browser}\)/' $files
32
+ sed -i"" -E 's/createForm\(/createForm\(await browser.newPage(), /' $files
33
+ sed -i"" -E 's/updateValue/form.updateValue/' $files
package/package.json CHANGED
@@ -1,25 +1,22 @@
1
1
  {
2
2
  "name": "@luomus/laji-form",
3
- "version": "14.3.8",
3
+ "version": "15.1.0",
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",
7
7
  "scripts": {
8
+ "prepare": "self-import",
8
9
  "start": "npx webpack serve",
9
10
  "staging": "webpack-dev-server --content-base playground playground/app.js --host 0.0.0.0 --port 4010",
10
11
  "build:lib": "rimraf lib && NODE_ENV=production tsc -p tsconfig.lib.json",
11
12
  "build:dist": "rimraf dist && NODE_ENV=production webpack --config webpack.config.dist.js && rimraf dist/styles.js",
12
- "build:tests": "rimraf test-export && NODE_ENV=production tsc -p tsconfig.test.json",
13
+ "build:tests": "rimraf test-export & NODE_ENV=production tsc -p tsconfig.test.json",
13
14
  "build": "npm run build:lib && npm run build:dist && npm run build:tests",
14
- "preversion": "npm run lint && npm run test:multi",
15
+ "preversion": "npm run lint && npm run test",
15
16
  "version": "bin/update-changelog.sh",
16
17
  "postversion": "npm run build && npm publish && git push & git push --tags",
17
18
  "lint": "eslint -c .eslintrc.prod.json src playground",
18
- "test": "HOST=127.0.0.1 PORT=8083 protractor protractor.conf.js",
19
- "test:multi": "TEST_BROWSER=multi HOST=127.0.0.1 PORT=8083 protractor protractor.conf.js",
20
- "test:ffox": "TEST_BROWSER=firefox HOST=127.0.0.1 PORT=8083 protractor protractor.conf.js",
21
- "test:debug": "HOST=127.0.0.1 PORT=8083 HEADLESS=false node --inspect-brk node_modules/protractor/bin/protractor protractor.conf.js",
22
- "patch": "patch-package"
19
+ "test": "playwright test"
23
20
  },
24
21
  "keywords": [
25
22
  "react-jsonschema-form",
@@ -30,7 +27,7 @@
30
27
  "repository": "https://github.com/luomus/laji-form.git",
31
28
  "license": "MIT",
32
29
  "dependencies": {
33
- "@luomus/laji-map": "^3.22.8",
30
+ "@luomus/laji-map": "^4.0.2",
34
31
  "@luomus/laji-validate": "0.0.120",
35
32
  "@rjsf/core": "~5.1.0",
36
33
  "@rjsf/utils": "~5.1.0",
@@ -58,26 +55,22 @@
58
55
  "react-widgets-moment": "^4.0.30"
59
56
  },
60
57
  "devDependencies": {
61
- "@types/jasmine": "^3.7.7",
58
+ "@playwright/test": "^1.40.1",
59
+ "@types/node": "^20.10.1",
62
60
  "@typescript-eslint/eslint-plugin": "^4.28.1",
63
61
  "@typescript-eslint/parser": "^4.28.1",
64
62
  "copy-webpack-plugin": "^9.0.1",
65
63
  "css-loader": "^5.2.6",
66
64
  "eslint": "^7.30.0",
67
- "eslint-plugin-jasmine": "^4.1.2",
68
- "eslint-plugin-protractor": "^2.1.1",
69
65
  "eslint-plugin-react": "^7.24.0",
70
66
  "eslint-plugin-react-hooks": "^4.2.0",
71
67
  "mini-css-extract-plugin": "^2.1.0",
72
68
  "notus": "^0.3.2",
73
- "patch-package": "^8.0.0",
74
- "protractor": "^7.0.0",
75
- "protractor-console-plugin": "^0.1.1",
76
69
  "querystring": "^0.2.1",
77
70
  "rimraf": "^2.5.4",
71
+ "self-import": "^1.0.1",
78
72
  "style-loader": "^3.0.0",
79
73
  "ts-loader": "^9.2.3",
80
- "ts-node": "^9.1.1",
81
74
  "typescript": "^4.3.5",
82
75
  "webpack": "^5.41.1",
83
76
  "webpack-cli": "^4.8.0",
@@ -85,15 +78,15 @@
85
78
  "webpack-node-externals": "^3.0.0"
86
79
  },
87
80
  "optionalDependencies": {
88
- "@types/react-bootstrap": "^0.32.22",
89
- "react-bootstrap": "^0.33.1",
90
- "react-bootstrap-5": "npm:react-bootstrap@^2.5.0",
91
81
  "@fortawesome/fontawesome-svg-core": "^6.2.0",
92
82
  "@fortawesome/free-solid-svg-icons": "^6.2.0",
93
- "@fortawesome/react-fontawesome": "^0.2.0"
83
+ "@fortawesome/react-fontawesome": "^0.2.0",
84
+ "@types/react-bootstrap": "^0.32.22",
85
+ "react-bootstrap": "^0.33.1",
86
+ "react-bootstrap-5": "npm:react-bootstrap@^2.5.0"
94
87
  },
95
88
  "volta": {
96
- "node": "14.21.3"
89
+ "node": "16.20.2"
97
90
  },
98
91
  "publishConfig": {
99
92
  "access": "public"