@beinformed/ui 1.27.1 → 1.27.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 (40) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/esm/models/attributes/AttributeDataHelper.js +2 -2
  3. package/esm/models/attributes/AttributeDataHelper.js.map +1 -1
  4. package/esm/models/attributes/_createAttribute.js +2 -2
  5. package/esm/models/attributes/_createAttribute.js.map +1 -1
  6. package/esm/models/base/BaseCollection.js +3 -9
  7. package/esm/models/base/BaseCollection.js.map +1 -1
  8. package/esm/models/base/BaseModel.js +2 -8
  9. package/esm/models/base/BaseModel.js.map +1 -1
  10. package/esm/redux/actions/FormValidations.js +1 -1
  11. package/esm/redux/actions/FormValidations.js.map +1 -1
  12. package/lib/models/attributes/AttributeDataHelper.js +2 -2
  13. package/lib/models/attributes/AttributeDataHelper.js.flow +2 -2
  14. package/lib/models/attributes/AttributeDataHelper.js.map +1 -1
  15. package/lib/models/attributes/__tests__/ChoiceAttributeModel.spec.js.flow +3 -0
  16. package/lib/models/attributes/__tests__/CompositeAttributeModel.spec.js.flow +3 -0
  17. package/lib/models/attributes/_createAttribute.js +2 -2
  18. package/lib/models/attributes/_createAttribute.js.flow +2 -2
  19. package/lib/models/attributes/_createAttribute.js.map +1 -1
  20. package/lib/models/base/BaseCollection.js +3 -9
  21. package/lib/models/base/BaseCollection.js.flow +4 -10
  22. package/lib/models/base/BaseCollection.js.map +1 -1
  23. package/lib/models/base/BaseModel.js +2 -8
  24. package/lib/models/base/BaseModel.js.flow +3 -9
  25. package/lib/models/base/BaseModel.js.map +1 -1
  26. package/lib/models/base/__tests__/BaseModel.spec.js.flow +3 -7
  27. package/lib/redux/actions/FormValidations.js +1 -1
  28. package/lib/redux/actions/FormValidations.js.flow +1 -1
  29. package/lib/redux/actions/FormValidations.js.map +1 -1
  30. package/package.json +11 -10
  31. package/src/models/attributes/AttributeDataHelper.js +2 -2
  32. package/src/models/attributes/__tests__/ChoiceAttributeModel.spec.js +3 -0
  33. package/src/models/attributes/__tests__/CompositeAttributeModel.spec.js +3 -0
  34. package/src/models/attributes/_createAttribute.js +2 -2
  35. package/src/models/base/BaseCollection.js +4 -10
  36. package/src/models/base/BaseModel.js +3 -9
  37. package/src/models/base/__tests__/BaseModel.spec.js +3 -7
  38. package/src/redux/actions/FormValidations.js +1 -1
  39. package/types/models/base/BaseCollection.d.ts +2 -2
  40. package/types/models/base/BaseModel.d.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.27.2](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.27.1...v1.27.2) (2023-01-31)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **clone:** use klona for complete and fast deep clone of models and data ([2e4509a](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/commit/2e4509a0cefa3d2deadb7485c6b8a12bdbdb7886))
10
+
5
11
  ### [1.27.1](https://git.beinformed.com/public/nl.beinformed.bi.layout.lib.ui/compare/v1.27.0...v1.27.1) (2023-01-24)
6
12
 
7
13
  ### Bug Fixes
@@ -4,7 +4,7 @@ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance
4
4
  import _valuesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/values";
5
5
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
6
6
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
7
- import cloneDeep from "lodash/cloneDeep";
7
+ import { klona } from "klona/full";
8
8
  import pick from "lodash/pick";
9
9
  import { has, isPlainObject } from "../../utils/helpers/objects";
10
10
 
@@ -27,7 +27,7 @@ class AttributeDataHelper {
27
27
  this._attribute = _findInstanceProperty(data).call(data, attr => attr.elementid === key || attr.name === key || attr.param === key) || {};
28
28
  this._value = this.getValue(this._attribute);
29
29
  } else {
30
- const attributeData = cloneDeep(data);
30
+ const attributeData = klona(data);
31
31
  attributeData._links = pick(data._links, ["concept", "download", "lookupOptions", "lookupList"]);
32
32
  this._attribute = attributeData;
33
33
  if (data[key] === undefined || "name" in data && "param" in data) {
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeDataHelper.js","names":["cloneDeep","pick","has","isPlainObject","AttributeDataHelper","constructor","data","key","childrenKeys","_key","Array","isArray","_attribute","attr","elementid","name","param","_value","getValue","attributeData","_links","undefined","_children","createChildren","childData","parentKey","childKey","elements","element","parentData","content","createChild","keyObject","dynamicschema","dynamicschemaId","children","childrenIsArray","value","attribute","suggestions","suggestion","options","option","selected","code","static","links","attrDS","message","isResult","referenceDate","pickedContent","length","getData","child","subChild"],"sources":["../../../src/models/attributes/AttributeDataHelper.js"],"sourcesContent":["// @flow\nimport cloneDeep from \"lodash/cloneDeep\";\nimport pick from \"lodash/pick\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\n/**\n * This util helps to normalize various attribute data formats available in the modular ui.\n * It fixes differences in choice attributes with dynamic schema's, links on download attributes, composites with various children, etc\n *\n * @private\n */\nclass AttributeDataHelper {\n _key: string;\n _attribute: Object;\n _value: any;\n _children: Array<AttributeDataHelper>;\n\n /**\n */\n constructor(\n data: Object | Array<Object>,\n key: string,\n childrenKeys: Array<Object>\n ) {\n this._key = key;\n\n if (Array.isArray(data)) {\n this._attribute =\n data.find(\n (attr) =>\n attr.elementid === key || attr.name === key || attr.param === key\n ) || {};\n this._value = this.getValue(this._attribute);\n } else {\n const attributeData = cloneDeep(data);\n attributeData._links = pick(data._links, [\n \"concept\",\n \"download\",\n \"lookupOptions\",\n \"lookupList\",\n ]);\n\n this._attribute = attributeData;\n\n if (data[key] === undefined || (\"name\" in data && \"param\" in data)) {\n this._value = this.getValue(data);\n } else {\n this._value = data[key];\n }\n }\n\n this._children = this.createChildren(data, childrenKeys);\n }\n\n /**\n */\n childData(\n data: Object | Array<Object>,\n parentKey: string,\n childKey: string\n ): Object {\n if (Array.isArray(data)) {\n if (Array.isArray(this._attribute.elements)) {\n return this._attribute.elements.find(\n (element) => element.elementid === childKey\n );\n }\n } else if (has(data, parentKey) && isPlainObject(data[parentKey])) {\n const parentData = data[parentKey];\n if (isPlainObject(parentData) && data.content?.[childKey]) {\n return { ...parentData, content: data.content[childKey] };\n }\n return parentData;\n } else if (has(data, childKey) && isPlainObject(data[childKey])) {\n return data[childKey];\n }\n\n if (isPlainObject(data)) {\n return data;\n }\n\n return {};\n }\n\n /**\n */\n createChild(\n data: Object | Array<Object>,\n childData: Object,\n keyObject: Object\n ): AttributeDataHelper {\n const dynamicschema =\n isPlainObject(data) && !Array.isArray(data)\n ? data.dynamicschema\n : undefined;\n\n let dynamicschemaId = null;\n if (keyObject.dynamicschemaId) {\n dynamicschemaId = keyObject.dynamicschemaId;\n } else if (\n isPlainObject(data) &&\n typeof data.key === \"string\" &&\n keyObject.key\n ) {\n dynamicschemaId = `${data.key}.${keyObject.key}`;\n }\n\n return new AttributeDataHelper(\n {\n ...childData,\n dynamicschema,\n dynamicschemaId,\n },\n keyObject.key,\n keyObject.children\n );\n }\n\n /**\n */\n createChildren(\n data: Object | Array<Object>,\n childrenKeys: Array<Object> = []\n ): Array<AttributeDataHelper> {\n const childrenIsArray = Array.isArray(this.value);\n\n if (childrenIsArray) {\n return this.value.map((value) =>\n childrenKeys.map((keyObject) => {\n const childData = this.childData(value, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n })\n );\n }\n\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(data, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n });\n }\n\n /**\n */\n getValue(attribute: Object): any {\n if (\"values\" in attribute) {\n return attribute.values;\n }\n\n if (\"value\" in attribute) {\n return attribute.value;\n }\n\n if (\"suggestions\" in attribute) {\n return attribute.suggestions;\n }\n\n if (\"suggestion\" in attribute) {\n return attribute.suggestion;\n }\n\n if (Array.isArray(attribute.options)) {\n return attribute.options\n .filter((option) => option.selected)\n .map((option) => option.code || option.key);\n }\n\n return null;\n }\n\n /**\n */\n get key(): string {\n return this._key;\n }\n\n /**\n */\n get value(): any {\n return this._value;\n }\n\n /**\n */\n get static(): boolean {\n return this._attribute.static || false;\n }\n\n /**\n */\n get links(): any {\n return this._attribute._links || void 0;\n }\n\n /**\n */\n get dynamicschemaId(): string {\n return this._attribute.dynamicschemaId || this.key;\n }\n\n /*\n retrieve the dynamischema by the dynamischemaId\n mentioned in the contributions of the attribute\n */\n /**\n */\n get dynamicschema(): any {\n const { dynamicschema } = this._attribute;\n if (!dynamicschema) {\n return void 0;\n }\n\n if (Array.isArray(dynamicschema)) {\n return dynamicschema;\n } else if (dynamicschema[this.dynamicschemaId]) {\n const attrDS = dynamicschema[this.dynamicschemaId];\n return attrDS.map((attr) => {\n if (attr.elements) {\n return {\n ...attr,\n elements: {\n ...attr.elements,\n dynamicschema,\n },\n };\n }\n\n return attr;\n });\n }\n\n return void 0;\n }\n\n /**\n */\n get options(): any {\n return this._attribute.options || void 0;\n }\n\n /**\n */\n get message(): any {\n return this._attribute.message || void 0;\n }\n\n /**\n */\n get isResult(): boolean {\n return this._attribute.isResult || false;\n }\n\n /**\n */\n get referenceDate(): any {\n return this._attribute.referenceDate || void 0;\n }\n\n /**\n */\n get children(): Array<AttributeDataHelper> {\n return this._children || [];\n }\n\n /**\n */\n get content(): Object {\n if (this._attribute.content) {\n const pickedContent = pick(this._attribute.content, [\n \"header\",\n \"label\",\n \"elements\",\n \"layouthint\",\n \"text\",\n ]);\n\n if (Object.keys(pickedContent).length > 0) {\n return pickedContent;\n }\n }\n\n return null;\n }\n\n /**\n */\n getData(): Object {\n return {\n key: this.key,\n value: this.value,\n static: this.static,\n _links: this.links,\n dynamicschema: this.dynamicschema,\n dynamicschemaId: this.dynamicschemaId,\n options: this.options,\n message: this.message,\n isResult: this.isResult,\n referenceDate: this.referenceDate,\n children: this.children.map((child) =>\n Array.isArray(child)\n ? child.map((subChild) => subChild.getData())\n : child.getData()\n ),\n content: this.content,\n };\n }\n}\n\nexport default AttributeDataHelper;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AttributeDataHelper.js","names":["klona","pick","has","isPlainObject","AttributeDataHelper","constructor","data","key","childrenKeys","_key","Array","isArray","_attribute","attr","elementid","name","param","_value","getValue","attributeData","_links","undefined","_children","createChildren","childData","parentKey","childKey","elements","element","parentData","content","createChild","keyObject","dynamicschema","dynamicschemaId","children","childrenIsArray","value","attribute","suggestions","suggestion","options","option","selected","code","static","links","attrDS","message","isResult","referenceDate","pickedContent","length","getData","child","subChild"],"sources":["../../../src/models/attributes/AttributeDataHelper.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\nimport pick from \"lodash/pick\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\n/**\n * This util helps to normalize various attribute data formats available in the modular ui.\n * It fixes differences in choice attributes with dynamic schema's, links on download attributes, composites with various children, etc\n *\n * @private\n */\nclass AttributeDataHelper {\n _key: string;\n _attribute: Object;\n _value: any;\n _children: Array<AttributeDataHelper>;\n\n /**\n */\n constructor(\n data: Object | Array<Object>,\n key: string,\n childrenKeys: Array<Object>\n ) {\n this._key = key;\n\n if (Array.isArray(data)) {\n this._attribute =\n data.find(\n (attr) =>\n attr.elementid === key || attr.name === key || attr.param === key\n ) || {};\n this._value = this.getValue(this._attribute);\n } else {\n const attributeData = klona(data);\n attributeData._links = pick(data._links, [\n \"concept\",\n \"download\",\n \"lookupOptions\",\n \"lookupList\",\n ]);\n\n this._attribute = attributeData;\n\n if (data[key] === undefined || (\"name\" in data && \"param\" in data)) {\n this._value = this.getValue(data);\n } else {\n this._value = data[key];\n }\n }\n\n this._children = this.createChildren(data, childrenKeys);\n }\n\n /**\n */\n childData(\n data: Object | Array<Object>,\n parentKey: string,\n childKey: string\n ): Object {\n if (Array.isArray(data)) {\n if (Array.isArray(this._attribute.elements)) {\n return this._attribute.elements.find(\n (element) => element.elementid === childKey\n );\n }\n } else if (has(data, parentKey) && isPlainObject(data[parentKey])) {\n const parentData = data[parentKey];\n if (isPlainObject(parentData) && data.content?.[childKey]) {\n return { ...parentData, content: data.content[childKey] };\n }\n return parentData;\n } else if (has(data, childKey) && isPlainObject(data[childKey])) {\n return data[childKey];\n }\n\n if (isPlainObject(data)) {\n return data;\n }\n\n return {};\n }\n\n /**\n */\n createChild(\n data: Object | Array<Object>,\n childData: Object,\n keyObject: Object\n ): AttributeDataHelper {\n const dynamicschema =\n isPlainObject(data) && !Array.isArray(data)\n ? data.dynamicschema\n : undefined;\n\n let dynamicschemaId = null;\n if (keyObject.dynamicschemaId) {\n dynamicschemaId = keyObject.dynamicschemaId;\n } else if (\n isPlainObject(data) &&\n typeof data.key === \"string\" &&\n keyObject.key\n ) {\n dynamicschemaId = `${data.key}.${keyObject.key}`;\n }\n\n return new AttributeDataHelper(\n {\n ...childData,\n dynamicschema,\n dynamicschemaId,\n },\n keyObject.key,\n keyObject.children\n );\n }\n\n /**\n */\n createChildren(\n data: Object | Array<Object>,\n childrenKeys: Array<Object> = []\n ): Array<AttributeDataHelper> {\n const childrenIsArray = Array.isArray(this.value);\n\n if (childrenIsArray) {\n return this.value.map((value) =>\n childrenKeys.map((keyObject) => {\n const childData = this.childData(value, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n })\n );\n }\n\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(data, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n });\n }\n\n /**\n */\n getValue(attribute: Object): any {\n if (\"values\" in attribute) {\n return attribute.values;\n }\n\n if (\"value\" in attribute) {\n return attribute.value;\n }\n\n if (\"suggestions\" in attribute) {\n return attribute.suggestions;\n }\n\n if (\"suggestion\" in attribute) {\n return attribute.suggestion;\n }\n\n if (Array.isArray(attribute.options)) {\n return attribute.options\n .filter((option) => option.selected)\n .map((option) => option.code || option.key);\n }\n\n return null;\n }\n\n /**\n */\n get key(): string {\n return this._key;\n }\n\n /**\n */\n get value(): any {\n return this._value;\n }\n\n /**\n */\n get static(): boolean {\n return this._attribute.static || false;\n }\n\n /**\n */\n get links(): any {\n return this._attribute._links || void 0;\n }\n\n /**\n */\n get dynamicschemaId(): string {\n return this._attribute.dynamicschemaId || this.key;\n }\n\n /*\n retrieve the dynamischema by the dynamischemaId\n mentioned in the contributions of the attribute\n */\n /**\n */\n get dynamicschema(): any {\n const { dynamicschema } = this._attribute;\n if (!dynamicschema) {\n return void 0;\n }\n\n if (Array.isArray(dynamicschema)) {\n return dynamicschema;\n } else if (dynamicschema[this.dynamicschemaId]) {\n const attrDS = dynamicschema[this.dynamicschemaId];\n return attrDS.map((attr) => {\n if (attr.elements) {\n return {\n ...attr,\n elements: {\n ...attr.elements,\n dynamicschema,\n },\n };\n }\n\n return attr;\n });\n }\n\n return void 0;\n }\n\n /**\n */\n get options(): any {\n return this._attribute.options || void 0;\n }\n\n /**\n */\n get message(): any {\n return this._attribute.message || void 0;\n }\n\n /**\n */\n get isResult(): boolean {\n return this._attribute.isResult || false;\n }\n\n /**\n */\n get referenceDate(): any {\n return this._attribute.referenceDate || void 0;\n }\n\n /**\n */\n get children(): Array<AttributeDataHelper> {\n return this._children || [];\n }\n\n /**\n */\n get content(): Object {\n if (this._attribute.content) {\n const pickedContent = pick(this._attribute.content, [\n \"header\",\n \"label\",\n \"elements\",\n \"layouthint\",\n \"text\",\n ]);\n\n if (Object.keys(pickedContent).length > 0) {\n return pickedContent;\n }\n }\n\n return null;\n }\n\n /**\n */\n getData(): Object {\n return {\n key: this.key,\n value: this.value,\n static: this.static,\n _links: this.links,\n dynamicschema: this.dynamicschema,\n dynamicschemaId: this.dynamicschemaId,\n options: this.options,\n message: this.message,\n isResult: this.isResult,\n referenceDate: this.referenceDate,\n children: this.children.map((child) =>\n Array.isArray(child)\n ? child.map((subChild) => subChild.getData())\n : child.getData()\n ),\n content: this.content,\n };\n }\n}\n\nexport default AttributeDataHelper;\n"],"mappings":";;;;;;AACA,SAASA,KAAK,QAAQ,YAAY;AAClC,OAAOC,IAAI,MAAM,aAAa;AAE9B,SAASC,GAAG,EAAEC,aAAa,QAAQ,6BAA6B;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,CAAC;EAMxB;AACF;EACEC,WAAW,CACTC,IAA4B,EAC5BC,GAAW,EACXC,YAA2B,EAC3B;IAAA;IAAA;IAAA;IAAA;IACA,IAAI,CAACC,IAAI,GAAGF,GAAG;IAEf,IAAIG,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE;MACvB,IAAI,CAACM,UAAU,GACb,sBAAAN,IAAI,OAAJA,IAAI,EACDO,IAAI,IACHA,IAAI,CAACC,SAAS,KAAKP,GAAG,IAAIM,IAAI,CAACE,IAAI,KAAKR,GAAG,IAAIM,IAAI,CAACG,KAAK,KAAKT,GAAG,CACpE,IAAI,CAAC,CAAC;MACT,IAAI,CAACU,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAC,IAAI,CAACN,UAAU,CAAC;IAC9C,CAAC,MAAM;MACL,MAAMO,aAAa,GAAGnB,KAAK,CAACM,IAAI,CAAC;MACjCa,aAAa,CAACC,MAAM,GAAGnB,IAAI,CAACK,IAAI,CAACc,MAAM,EAAE,CACvC,SAAS,EACT,UAAU,EACV,eAAe,EACf,YAAY,CACb,CAAC;MAEF,IAAI,CAACR,UAAU,GAAGO,aAAa;MAE/B,IAAIb,IAAI,CAACC,GAAG,CAAC,KAAKc,SAAS,IAAK,MAAM,IAAIf,IAAI,IAAI,OAAO,IAAIA,IAAK,EAAE;QAClE,IAAI,CAACW,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACZ,IAAI,CAAC;MACnC,CAAC,MAAM;QACL,IAAI,CAACW,MAAM,GAAGX,IAAI,CAACC,GAAG,CAAC;MACzB;IACF;IAEA,IAAI,CAACe,SAAS,GAAG,IAAI,CAACC,cAAc,CAACjB,IAAI,EAAEE,YAAY,CAAC;EAC1D;;EAEA;AACF;EACEgB,SAAS,CACPlB,IAA4B,EAC5BmB,SAAiB,EACjBC,QAAgB,EACR;IACR,IAAIhB,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,EAAE;MACvB,IAAII,KAAK,CAACC,OAAO,CAAC,IAAI,CAACC,UAAU,CAACe,QAAQ,CAAC,EAAE;QAAA;QAC3C,OAAO,qCAAI,CAACf,UAAU,CAACe,QAAQ,iBAC5BC,OAAO,IAAKA,OAAO,CAACd,SAAS,KAAKY,QAAQ,CAC5C;MACH;IACF,CAAC,MAAM,IAAIxB,GAAG,CAACI,IAAI,EAAEmB,SAAS,CAAC,IAAItB,aAAa,CAACG,IAAI,CAACmB,SAAS,CAAC,CAAC,EAAE;MACjE,MAAMI,UAAU,GAAGvB,IAAI,CAACmB,SAAS,CAAC;MAClC,IAAItB,aAAa,CAAC0B,UAAU,CAAC,IAAIvB,IAAI,CAACwB,OAAO,GAAGJ,QAAQ,CAAC,EAAE;QACzD,OAAO;UAAE,GAAGG,UAAU;UAAEC,OAAO,EAAExB,IAAI,CAACwB,OAAO,CAACJ,QAAQ;QAAE,CAAC;MAC3D;MACA,OAAOG,UAAU;IACnB,CAAC,MAAM,IAAI3B,GAAG,CAACI,IAAI,EAAEoB,QAAQ,CAAC,IAAIvB,aAAa,CAACG,IAAI,CAACoB,QAAQ,CAAC,CAAC,EAAE;MAC/D,OAAOpB,IAAI,CAACoB,QAAQ,CAAC;IACvB;IAEA,IAAIvB,aAAa,CAACG,IAAI,CAAC,EAAE;MACvB,OAAOA,IAAI;IACb;IAEA,OAAO,CAAC,CAAC;EACX;;EAEA;AACF;EACEyB,WAAW,CACTzB,IAA4B,EAC5BkB,SAAiB,EACjBQ,SAAiB,EACI;IACrB,MAAMC,aAAa,GACjB9B,aAAa,CAACG,IAAI,CAAC,IAAI,CAACI,KAAK,CAACC,OAAO,CAACL,IAAI,CAAC,GACvCA,IAAI,CAAC2B,aAAa,GAClBZ,SAAS;IAEf,IAAIa,eAAe,GAAG,IAAI;IAC1B,IAAIF,SAAS,CAACE,eAAe,EAAE;MAC7BA,eAAe,GAAGF,SAAS,CAACE,eAAe;IAC7C,CAAC,MAAM,IACL/B,aAAa,CAACG,IAAI,CAAC,IACnB,OAAOA,IAAI,CAACC,GAAG,KAAK,QAAQ,IAC5ByB,SAAS,CAACzB,GAAG,EACb;MACA2B,eAAe,GAAI,GAAE5B,IAAI,CAACC,GAAI,IAAGyB,SAAS,CAACzB,GAAI,EAAC;IAClD;IAEA,OAAO,IAAIH,mBAAmB,CAC5B;MACE,GAAGoB,SAAS;MACZS,aAAa;MACbC;IACF,CAAC,EACDF,SAAS,CAACzB,GAAG,EACbyB,SAAS,CAACG,QAAQ,CACnB;EACH;;EAEA;AACF;EACEZ,cAAc,CACZjB,IAA4B,EAEA;IAAA,IAD5BE,YAA2B,uEAAG,EAAE;IAEhC,MAAM4B,eAAe,GAAG1B,KAAK,CAACC,OAAO,CAAC,IAAI,CAAC0B,KAAK,CAAC;IAEjD,IAAID,eAAe,EAAE;MAAA;MACnB,OAAO,qCAAI,CAACC,KAAK,kBAAMA,KAAK,IAC1B,qBAAA7B,YAAY,OAAZA,YAAY,EAAMwB,SAAS,IAAK;QAC9B,MAAMR,SAAS,GAAG,IAAI,CAACA,SAAS,CAACa,KAAK,EAAE,IAAI,CAAC9B,GAAG,EAAEyB,SAAS,CAACzB,GAAG,CAAC;QAEhE,OAAO,IAAI,CAACwB,WAAW,CAACzB,IAAI,EAAEkB,SAAS,EAAEQ,SAAS,CAAC;MACrD,CAAC,CAAC,CACH;IACH;IAEA,OAAO,qBAAAxB,YAAY,OAAZA,YAAY,EAAMwB,SAAS,IAAK;MACrC,MAAMR,SAAS,GAAG,IAAI,CAACA,SAAS,CAAClB,IAAI,EAAE,IAAI,CAACC,GAAG,EAAEyB,SAAS,CAACzB,GAAG,CAAC;MAE/D,OAAO,IAAI,CAACwB,WAAW,CAACzB,IAAI,EAAEkB,SAAS,EAAEQ,SAAS,CAAC;IACrD,CAAC,CAAC;EACJ;;EAEA;AACF;EACEd,QAAQ,CAACoB,SAAiB,EAAO;IAC/B,IAAI,QAAQ,IAAIA,SAAS,EAAE;MACzB,+BAAOA,SAAS;IAClB;IAEA,IAAI,OAAO,IAAIA,SAAS,EAAE;MACxB,OAAOA,SAAS,CAACD,KAAK;IACxB;IAEA,IAAI,aAAa,IAAIC,SAAS,EAAE;MAC9B,OAAOA,SAAS,CAACC,WAAW;IAC9B;IAEA,IAAI,YAAY,IAAID,SAAS,EAAE;MAC7B,OAAOA,SAAS,CAACE,UAAU;IAC7B;IAEA,IAAI9B,KAAK,CAACC,OAAO,CAAC2B,SAAS,CAACG,OAAO,CAAC,EAAE;MAAA;MACpC,OAAO,qEAAAH,SAAS,CAACG,OAAO,kBACbC,MAAM,IAAKA,MAAM,CAACC,QAAQ,CAAC,kBAC9BD,MAAM,IAAKA,MAAM,CAACE,IAAI,IAAIF,MAAM,CAACnC,GAAG,CAAC;IAC/C;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;EACE,IAAIA,GAAG,GAAW;IAChB,OAAO,IAAI,CAACE,IAAI;EAClB;;EAEA;AACF;EACE,IAAI4B,KAAK,GAAQ;IACf,OAAO,IAAI,CAACpB,MAAM;EACpB;;EAEA;AACF;EACE,IAAI4B,MAAM,GAAY;IACpB,OAAO,IAAI,CAACjC,UAAU,CAACiC,MAAM,IAAI,KAAK;EACxC;;EAEA;AACF;EACE,IAAIC,KAAK,GAAQ;IACf,OAAO,IAAI,CAAClC,UAAU,CAACQ,MAAM,IAAI,KAAK,CAAC;EACzC;;EAEA;AACF;EACE,IAAIc,eAAe,GAAW;IAC5B,OAAO,IAAI,CAACtB,UAAU,CAACsB,eAAe,IAAI,IAAI,CAAC3B,GAAG;EACpD;;EAEA;AACF;AACA;AACA;EACE;AACF;EACE,IAAI0B,aAAa,GAAQ;IACvB,MAAM;MAAEA;IAAc,CAAC,GAAG,IAAI,CAACrB,UAAU;IACzC,IAAI,CAACqB,aAAa,EAAE;MAClB,OAAO,KAAK,CAAC;IACf;IAEA,IAAIvB,KAAK,CAACC,OAAO,CAACsB,aAAa,CAAC,EAAE;MAChC,OAAOA,aAAa;IACtB,CAAC,MAAM,IAAIA,aAAa,CAAC,IAAI,CAACC,eAAe,CAAC,EAAE;MAC9C,MAAMa,MAAM,GAAGd,aAAa,CAAC,IAAI,CAACC,eAAe,CAAC;MAClD,OAAO,qBAAAa,MAAM,OAANA,MAAM,EAAMlC,IAAI,IAAK;QAC1B,IAAIA,IAAI,CAACc,QAAQ,EAAE;UACjB,OAAO;YACL,GAAGd,IAAI;YACPc,QAAQ,EAAE;cACR,GAAGd,IAAI,CAACc,QAAQ;cAChBM;YACF;UACF,CAAC;QACH;QAEA,OAAOpB,IAAI;MACb,CAAC,CAAC;IACJ;IAEA,OAAO,KAAK,CAAC;EACf;;EAEA;AACF;EACE,IAAI4B,OAAO,GAAQ;IACjB,OAAO,IAAI,CAAC7B,UAAU,CAAC6B,OAAO,IAAI,KAAK,CAAC;EAC1C;;EAEA;AACF;EACE,IAAIO,OAAO,GAAQ;IACjB,OAAO,IAAI,CAACpC,UAAU,CAACoC,OAAO,IAAI,KAAK,CAAC;EAC1C;;EAEA;AACF;EACE,IAAIC,QAAQ,GAAY;IACtB,OAAO,IAAI,CAACrC,UAAU,CAACqC,QAAQ,IAAI,KAAK;EAC1C;;EAEA;AACF;EACE,IAAIC,aAAa,GAAQ;IACvB,OAAO,IAAI,CAACtC,UAAU,CAACsC,aAAa,IAAI,KAAK,CAAC;EAChD;;EAEA;AACF;EACE,IAAIf,QAAQ,GAA+B;IACzC,OAAO,IAAI,CAACb,SAAS,IAAI,EAAE;EAC7B;;EAEA;AACF;EACE,IAAIQ,OAAO,GAAW;IACpB,IAAI,IAAI,CAAClB,UAAU,CAACkB,OAAO,EAAE;MAC3B,MAAMqB,aAAa,GAAGlD,IAAI,CAAC,IAAI,CAACW,UAAU,CAACkB,OAAO,EAAE,CAClD,QAAQ,EACR,OAAO,EACP,UAAU,EACV,YAAY,EACZ,MAAM,CACP,CAAC;MAEF,IAAI,aAAYqB,aAAa,CAAC,CAACC,MAAM,GAAG,CAAC,EAAE;QACzC,OAAOD,aAAa;MACtB;IACF;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;EACEE,OAAO,GAAW;IAAA;IAChB,OAAO;MACL9C,GAAG,EAAE,IAAI,CAACA,GAAG;MACb8B,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBQ,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBzB,MAAM,EAAE,IAAI,CAAC0B,KAAK;MAClBb,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCO,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBO,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBC,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBC,aAAa,EAAE,IAAI,CAACA,aAAa;MACjCf,QAAQ,EAAE,qCAAI,CAACA,QAAQ,kBAAMmB,KAAK,IAChC5C,KAAK,CAACC,OAAO,CAAC2C,KAAK,CAAC,GAChB,qBAAAA,KAAK,OAALA,KAAK,EAAMC,QAAQ,IAAKA,QAAQ,CAACF,OAAO,EAAE,CAAC,GAC3CC,KAAK,CAACD,OAAO,EAAE,CACpB;MACDvB,OAAO,EAAE,IAAI,CAACA;IAChB,CAAC;EACH;AACF;AAEA,eAAe1B,mBAAmB"}
@@ -1,7 +1,7 @@
1
1
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
2
2
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
3
3
  import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
4
- import cloneDeep from "lodash/cloneDeep";
4
+ import { klona } from "klona/full";
5
5
  import { has, isPlainObject } from "../../utils/helpers/objects";
6
6
  import LayoutHintRuleCollection from "./layouthint-rules/LayoutHintRuleCollection";
7
7
  import CaptchaAttributeModel from "./CaptchaAttributeModel";
@@ -60,7 +60,7 @@ const updateContributions = (key, data, contributions) => {
60
60
  * @private
61
61
  */
62
62
  const updateData = (key, data, contributions) => {
63
- const newData = cloneDeep(data);
63
+ const newData = klona(data);
64
64
  if (contributions.dynamicschemaId) {
65
65
  newData.dynamicschemaId = contributions.dynamicschemaId;
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_createAttribute.js","names":["cloneDeep","has","isPlainObject","LayoutHintRuleCollection","CaptchaAttributeModel","ChoiceAttributeModel","DatetimeAttributeModel","HelptextAttributeModel","LabelAttributeModel","MemoAttributeModel","MoneyAttributeModel","NumberAttributeModel","PasswordAttributeModel","CompositeAttributeModel","StringAttributeModel","UploadAttributeModel","XMLAttributeModel","BooleanAttributeModel","AttributeDataHelper","getChildrenKeys","children","child","childKey","isComposite","type","key","dynamicschemaId","undefined","getAttributeModel","contributions","ATTRIBUTE_MODELS","model","isApplicableModel","updateContributions","data","Array","isArray","updateData","newData","createAttribute","updatedContributions","updatedData","Model","Error","childrenKeys","dataHelper","getData","attribute","setLayoutHintRules"],"sources":["../../../src/models/attributes/_createAttribute.js"],"sourcesContent":["// @flow\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\nimport LayoutHintRuleCollection from \"./layouthint-rules/LayoutHintRuleCollection\";\n\nimport CaptchaAttributeModel from \"./CaptchaAttributeModel\";\nimport ChoiceAttributeModel from \"./ChoiceAttributeModel\";\nimport DatetimeAttributeModel from \"./DatetimeAttributeModel\";\nimport HelptextAttributeModel from \"./HelptextAttributeModel\";\nimport LabelAttributeModel from \"./LabelAttributeModel\";\nimport MemoAttributeModel from \"./MemoAttributeModel\";\nimport MoneyAttributeModel from \"./MoneyAttributeModel\";\nimport NumberAttributeModel from \"./NumberAttributeModel\";\nimport PasswordAttributeModel from \"./PasswordAttributeModel\";\nimport CompositeAttributeModel from \"./CompositeAttributeModel\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport UploadAttributeModel from \"./UploadAttributeModel\";\nimport XMLAttributeModel from \"./XMLAttributeModel\";\nimport BooleanAttributeModel from \"./BooleanAttributeModel\";\n\nimport AttributeDataHelper from \"./AttributeDataHelper\";\n\nimport type { AttributeType } from \"../types\";\n\n/**\n * @private\n */\nconst getChildrenKeys = (children: Array<Object>): Array<Object> => {\n if (children) {\n return children.map((child) => {\n const [childKey] = Object.keys(child);\n const isComposite =\n child[childKey].type === \"range\" ||\n child[childKey].type === \"composite\";\n\n return {\n key: childKey,\n dynamicschemaId: child[childKey]?.dynamicschemaId || undefined,\n children: isComposite ? getChildrenKeys(child[childKey]?.children) : [],\n };\n });\n }\n\n return [];\n};\n\n/**\n * @private\n */\nconst getAttributeModel = (contributions: Object): ?Class<AttributeType> => {\n const ATTRIBUTE_MODELS = [\n ChoiceAttributeModel,\n BooleanAttributeModel,\n\n HelptextAttributeModel,\n LabelAttributeModel,\n\n XMLAttributeModel,\n MemoAttributeModel,\n StringAttributeModel,\n\n DatetimeAttributeModel,\n\n MoneyAttributeModel,\n NumberAttributeModel,\n PasswordAttributeModel,\n\n UploadAttributeModel,\n CompositeAttributeModel,\n CaptchaAttributeModel,\n ];\n\n return ATTRIBUTE_MODELS.find((model) =>\n model.isApplicableModel(contributions)\n );\n};\n\n/**\n * @private\n */\nconst updateContributions = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const isComposite =\n contributions.type === \"array\" &&\n has(contributions, \"children\") &&\n isPlainObject(data) &&\n Array.isArray(data[key]);\n\n return {\n ...contributions,\n type: isComposite ? \"composite\" : contributions.type,\n };\n};\n\n/**\n * @private\n */\nconst updateData = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const newData = cloneDeep(data);\n\n if (contributions.dynamicschemaId) {\n newData.dynamicschemaId = contributions.dynamicschemaId;\n }\n\n return newData;\n};\n\n/**\n * Create an attribute based on data and contributions\n */\nconst createAttribute = (\n key: string,\n data: Object | Array<Object>,\n contributions: Object\n): AttributeType => {\n const updatedContributions = updateContributions(key, data, contributions);\n const updatedData = updateData(key, data, contributions);\n\n const Model = getAttributeModel(updatedContributions);\n\n if (!Model) {\n throw new Error(\"Could not find model\");\n }\n\n const childrenKeys = getChildrenKeys(updatedContributions.children ?? []);\n const dataHelper = new AttributeDataHelper(\n updatedData,\n key,\n childrenKeys\n ).getData();\n\n const attribute = new Model(dataHelper, updatedContributions);\n\n return LayoutHintRuleCollection.setLayoutHintRules(attribute);\n};\n\nexport default createAttribute;\n"],"mappings":"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"}
1
+ {"version":3,"file":"_createAttribute.js","names":["klona","has","isPlainObject","LayoutHintRuleCollection","CaptchaAttributeModel","ChoiceAttributeModel","DatetimeAttributeModel","HelptextAttributeModel","LabelAttributeModel","MemoAttributeModel","MoneyAttributeModel","NumberAttributeModel","PasswordAttributeModel","CompositeAttributeModel","StringAttributeModel","UploadAttributeModel","XMLAttributeModel","BooleanAttributeModel","AttributeDataHelper","getChildrenKeys","children","child","childKey","isComposite","type","key","dynamicschemaId","undefined","getAttributeModel","contributions","ATTRIBUTE_MODELS","model","isApplicableModel","updateContributions","data","Array","isArray","updateData","newData","createAttribute","updatedContributions","updatedData","Model","Error","childrenKeys","dataHelper","getData","attribute","setLayoutHintRules"],"sources":["../../../src/models/attributes/_createAttribute.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\nimport LayoutHintRuleCollection from \"./layouthint-rules/LayoutHintRuleCollection\";\n\nimport CaptchaAttributeModel from \"./CaptchaAttributeModel\";\nimport ChoiceAttributeModel from \"./ChoiceAttributeModel\";\nimport DatetimeAttributeModel from \"./DatetimeAttributeModel\";\nimport HelptextAttributeModel from \"./HelptextAttributeModel\";\nimport LabelAttributeModel from \"./LabelAttributeModel\";\nimport MemoAttributeModel from \"./MemoAttributeModel\";\nimport MoneyAttributeModel from \"./MoneyAttributeModel\";\nimport NumberAttributeModel from \"./NumberAttributeModel\";\nimport PasswordAttributeModel from \"./PasswordAttributeModel\";\nimport CompositeAttributeModel from \"./CompositeAttributeModel\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport UploadAttributeModel from \"./UploadAttributeModel\";\nimport XMLAttributeModel from \"./XMLAttributeModel\";\nimport BooleanAttributeModel from \"./BooleanAttributeModel\";\n\nimport AttributeDataHelper from \"./AttributeDataHelper\";\n\nimport type { AttributeType } from \"../types\";\n\n/**\n * @private\n */\nconst getChildrenKeys = (children: Array<Object>): Array<Object> => {\n if (children) {\n return children.map((child) => {\n const [childKey] = Object.keys(child);\n const isComposite =\n child[childKey].type === \"range\" ||\n child[childKey].type === \"composite\";\n\n return {\n key: childKey,\n dynamicschemaId: child[childKey]?.dynamicschemaId || undefined,\n children: isComposite ? getChildrenKeys(child[childKey]?.children) : [],\n };\n });\n }\n\n return [];\n};\n\n/**\n * @private\n */\nconst getAttributeModel = (contributions: Object): ?Class<AttributeType> => {\n const ATTRIBUTE_MODELS = [\n ChoiceAttributeModel,\n BooleanAttributeModel,\n\n HelptextAttributeModel,\n LabelAttributeModel,\n\n XMLAttributeModel,\n MemoAttributeModel,\n StringAttributeModel,\n\n DatetimeAttributeModel,\n\n MoneyAttributeModel,\n NumberAttributeModel,\n PasswordAttributeModel,\n\n UploadAttributeModel,\n CompositeAttributeModel,\n CaptchaAttributeModel,\n ];\n\n return ATTRIBUTE_MODELS.find((model) =>\n model.isApplicableModel(contributions)\n );\n};\n\n/**\n * @private\n */\nconst updateContributions = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const isComposite =\n contributions.type === \"array\" &&\n has(contributions, \"children\") &&\n isPlainObject(data) &&\n Array.isArray(data[key]);\n\n return {\n ...contributions,\n type: isComposite ? \"composite\" : contributions.type,\n };\n};\n\n/**\n * @private\n */\nconst updateData = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const newData = klona(data);\n\n if (contributions.dynamicschemaId) {\n newData.dynamicschemaId = contributions.dynamicschemaId;\n }\n\n return newData;\n};\n\n/**\n * Create an attribute based on data and contributions\n */\nconst createAttribute = (\n key: string,\n data: Object | Array<Object>,\n contributions: Object\n): AttributeType => {\n const updatedContributions = updateContributions(key, data, contributions);\n const updatedData = updateData(key, data, contributions);\n\n const Model = getAttributeModel(updatedContributions);\n\n if (!Model) {\n throw new Error(\"Could not find model\");\n }\n\n const childrenKeys = getChildrenKeys(updatedContributions.children ?? []);\n const dataHelper = new AttributeDataHelper(\n updatedData,\n key,\n childrenKeys\n ).getData();\n\n const attribute = new Model(dataHelper, updatedContributions);\n\n return LayoutHintRuleCollection.setLayoutHintRules(attribute);\n};\n\nexport default createAttribute;\n"],"mappings":"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"}
@@ -4,8 +4,7 @@ import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instanc
4
4
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
5
5
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
6
6
  import _sortInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/sort";
7
- import clone from "lodash/clone";
8
- import cloneDeep from "lodash/cloneDeep";
7
+ import { klona } from "klona/full";
9
8
 
10
9
  /**
11
10
  * Base class for collections of models
@@ -171,15 +170,10 @@ class BaseCollection {
171
170
  }
172
171
 
173
172
  /**
174
- * Returns a clone of the model (this is not a deep copy)
173
+ * Returns a clone of the model
175
174
  */
176
175
  clone() {
177
- let deepcopy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
178
- // deepcopy can be expensive, use with care!
179
- if (deepcopy) {
180
- return cloneDeep(this);
181
- }
182
- return clone(this);
176
+ return klona(this);
183
177
  }
184
178
  }
185
179
  export default BaseCollection;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCollection.js","names":["clone","cloneDeep","BaseCollection","constructor","initCollection","collection","_collection","add","items","all","Array","isArray","removeByIndex","itemIndex","hasItems","length","isEmpty","size","first","last","get","index","find","callbackfn","thisArg","filter","some","every","map","forEach","sort","compareFn","sorted","deepcopy"],"sources":["../../../src/models/base/BaseCollection.js"],"sourcesContent":["// @flow\nimport clone from \"lodash/clone\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\n/**\n * Base class for collections of models\n */\nclass BaseCollection<T> {\n _collection: Array<T>;\n\n /**\n * Construct base collection\n */\n constructor(initCollection: Array<T> = []) {\n this.collection = initCollection;\n }\n\n /**\n * Retrieve current collection\n */\n get collection(): Array<T> {\n return this._collection;\n }\n\n /**\n * Replace current collection with a new collection\n */\n set collection(collection: Array<T>) {\n this._collection = collection;\n }\n\n /**\n * Add an other collection, array of items or single item to this collection;\n */\n add(items: BaseCollection<T> | Array<T> | T): BaseCollection<T> {\n if (items instanceof BaseCollection) {\n this.collection = [...this.collection, ...items.all];\n } else if (Array.isArray(items)) {\n // $FlowExpectedError[incompatible-type]\n this.collection = [...this.collection, ...items];\n } else {\n this.collection = [...this.collection, items];\n }\n\n return this;\n }\n\n /**\n * Remove an item from the collection by it's index.\n */\n removeByIndex(itemIndex: number) {\n if (itemIndex > -1) {\n this.collection = [\n ...this.collection.slice(0, itemIndex),\n ...this.collection.slice(itemIndex + 1),\n ];\n }\n }\n\n /**\n * Indicates if the collection has items\n */\n get hasItems(): boolean {\n return this.length > 0;\n }\n\n /**\n * Indicates if collection is empty\n */\n get isEmpty(): boolean {\n return !this.hasItems;\n }\n\n /**\n * Retrieve all items in collection\n */\n get all(): Array<T> {\n return this.collection;\n }\n\n /**\n * Get the size of this collection\n */\n get size(): number {\n return this.length;\n }\n\n /**\n * Get the size of this collection\n */\n get length(): number {\n return this.collection.length;\n }\n\n /**\n * Return first link in collection\n */\n get first(): T | null {\n return this.collection[0] ?? null;\n }\n\n /**\n */\n get last(): T | null {\n return this.collection[this.collection.length - 1] ?? null;\n }\n\n /**\n */\n get(index: number): T | null {\n return this.collection[index] ?? null;\n }\n\n /**\n * Find item\n */\n find(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): T | null {\n return this.collection.find(callbackfn, thisArg) ?? null;\n }\n\n /**\n * Filter items\n */\n filter(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): Array<T> {\n return this.collection.filter(callbackfn, thisArg);\n }\n\n /**\n * Check if at least one item occurs\n */\n some(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.some(callbackfn, thisArg);\n }\n\n /**\n */\n every(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.every(callbackfn, thisArg);\n }\n\n /**\n */\n map<U>(\n callbackfn: (value: T, index: number, array: Array<T>) => U,\n thisArg?: T\n ): Array<U> {\n return this.collection.map<U, ?T>(callbackfn, thisArg);\n }\n\n /**\n */\n forEach(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ) {\n this.collection.forEach(callbackfn, thisArg);\n }\n\n /**\n */\n sort(compareFn?: (a: T, b: T) => number): Array<T> {\n return this.collection.sort(compareFn);\n }\n\n /**\n * Retrieve an alphabetically sorted array of items\n */\n get sorted(): Array<T> {\n return this.collection.sort();\n }\n\n /**\n * Returns a clone of the model (this is not a deep copy)\n */\n clone(deepcopy: boolean = false): this {\n // deepcopy can be expensive, use with care!\n if (deepcopy) {\n return cloneDeep(this);\n }\n\n return clone(this);\n }\n}\n\nexport default BaseCollection;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaseCollection.js","names":["klona","BaseCollection","constructor","initCollection","collection","_collection","add","items","all","Array","isArray","removeByIndex","itemIndex","hasItems","length","isEmpty","size","first","last","get","index","find","callbackfn","thisArg","filter","some","every","map","forEach","sort","compareFn","sorted","clone"],"sources":["../../../src/models/base/BaseCollection.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\n/**\n * Base class for collections of models\n */\nclass BaseCollection<T> {\n _collection: Array<T>;\n\n /**\n * Construct base collection\n */\n constructor(initCollection: Array<T> = []) {\n this.collection = initCollection;\n }\n\n /**\n * Retrieve current collection\n */\n get collection(): Array<T> {\n return this._collection;\n }\n\n /**\n * Replace current collection with a new collection\n */\n set collection(collection: Array<T>) {\n this._collection = collection;\n }\n\n /**\n * Add an other collection, array of items or single item to this collection;\n */\n add(items: BaseCollection<T> | Array<T> | T): BaseCollection<T> {\n if (items instanceof BaseCollection) {\n this.collection = [...this.collection, ...items.all];\n } else if (Array.isArray(items)) {\n // $FlowExpectedError[incompatible-type]\n this.collection = [...this.collection, ...items];\n } else {\n this.collection = [...this.collection, items];\n }\n\n return this;\n }\n\n /**\n * Remove an item from the collection by it's index.\n */\n removeByIndex(itemIndex: number) {\n if (itemIndex > -1) {\n this.collection = [\n ...this.collection.slice(0, itemIndex),\n ...this.collection.slice(itemIndex + 1),\n ];\n }\n }\n\n /**\n * Indicates if the collection has items\n */\n get hasItems(): boolean {\n return this.length > 0;\n }\n\n /**\n * Indicates if collection is empty\n */\n get isEmpty(): boolean {\n return !this.hasItems;\n }\n\n /**\n * Retrieve all items in collection\n */\n get all(): Array<T> {\n return this.collection;\n }\n\n /**\n * Get the size of this collection\n */\n get size(): number {\n return this.length;\n }\n\n /**\n * Get the size of this collection\n */\n get length(): number {\n return this.collection.length;\n }\n\n /**\n * Return first link in collection\n */\n get first(): T | null {\n return this.collection[0] ?? null;\n }\n\n /**\n */\n get last(): T | null {\n return this.collection[this.collection.length - 1] ?? null;\n }\n\n /**\n */\n get(index: number): T | null {\n return this.collection[index] ?? null;\n }\n\n /**\n * Find item\n */\n find(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): T | null {\n return this.collection.find(callbackfn, thisArg) ?? null;\n }\n\n /**\n * Filter items\n */\n filter(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): Array<T> {\n return this.collection.filter(callbackfn, thisArg);\n }\n\n /**\n * Check if at least one item occurs\n */\n some(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.some(callbackfn, thisArg);\n }\n\n /**\n */\n every(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.every(callbackfn, thisArg);\n }\n\n /**\n */\n map<U>(\n callbackfn: (value: T, index: number, array: Array<T>) => U,\n thisArg?: T\n ): Array<U> {\n return this.collection.map<U, ?T>(callbackfn, thisArg);\n }\n\n /**\n */\n forEach(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ) {\n this.collection.forEach(callbackfn, thisArg);\n }\n\n /**\n */\n sort(compareFn?: (a: T, b: T) => number): Array<T> {\n return this.collection.sort(compareFn);\n }\n\n /**\n * Retrieve an alphabetically sorted array of items\n */\n get sorted(): Array<T> {\n return this.collection.sort();\n }\n\n /**\n * Returns a clone of the model\n */\n clone(): this {\n return klona(this);\n }\n}\n\nexport default BaseCollection;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
2
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
3
- import clone from "lodash/clone";
4
- import cloneDeep from "lodash/cloneDeep";
3
+ import { klona } from "klona/full";
5
4
  import LayoutHintCollection from "../layouthint/LayoutHintCollection";
6
5
  /**
7
6
  * Base model, this is the foundation of a model,
@@ -110,12 +109,7 @@ class BaseModel {
110
109
  * Returns a clone of the model
111
110
  */
112
111
  clone() {
113
- let deepcopy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
114
- // deepcopy can be expensive, use with care!
115
- if (deepcopy) {
116
- return cloneDeep(this);
117
- }
118
- return clone(this);
112
+ return klona(this);
119
113
  }
120
114
  }
121
115
  export default BaseModel;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseModel.js","names":["clone","cloneDeep","LayoutHintCollection","BaseModel","constructor","data","contributions","_data","_contributions","_layouthint","getContribution","getData","propName","defaultValue","layouthint","hasData","length","connectKey","key","_connectKey","dehydrate","rehydrate","deepcopy"],"sources":["../../../src/models/base/BaseModel.js"],"sourcesContent":["// @flow\nimport clone from \"lodash/clone\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\nexport type BaseDehydrateData = {\n +data: Object,\n +contributions: Object,\n connectKey: string,\n ...\n};\n\n/**\n * Base model, this is the foundation of a model,\n * it contains data that is needed for all models like, data, contributions and layout hint\n *\n * Extend this for non modular ui resources, for modular ui resource start with the resourceModel\n */\nclass BaseModel {\n _data: Object;\n _contributions: Object;\n _layouthint: LayoutHintCollection;\n _connectKey: string;\n\n /**\n * constructor\n */\n constructor(data: Object, contributions: Object) {\n this._data = data;\n this._contributions = contributions;\n this._layouthint = new LayoutHintCollection(\n this.getContribution(\"layouthint\", [])\n );\n }\n\n /**\n * Retrieve data\n */\n get data(): Object {\n return this._data || {};\n }\n\n /**\n * Retrieve property from the data object of the model, mostly used internal\n */\n getData(propName: string, defaultValue: any = null): any {\n return this.data[propName] ?? defaultValue;\n }\n\n /**\n * Retrieve contributions\n */\n get contributions(): Object {\n return this._contributions || {};\n }\n\n /**\n * Retrieve property from the contributions of the model, mostly used internal\n */\n getContribution(propName: string, defaultValue: any = null): any {\n return this.contributions[propName] ?? defaultValue;\n }\n\n /**\n * Getting the layouthint\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n * Set the layouthint\n */\n set layouthint(layouthint: Array<string>) {\n this._layouthint = new LayoutHintCollection(layouthint);\n }\n\n /**\n * Indicates if the model has data\n */\n get hasData(): boolean {\n return Object.keys(this.data).length > 0;\n }\n\n /**\n * Set the unique key for this model\n */\n set connectKey(key: string) {\n this._connectKey = key;\n }\n\n /**\n * Get the unique key of this model\n */\n get connectKey(): string {\n return this._connectKey;\n }\n\n /**\n * Dehydrate internal data, returns the information that is needed to recreate the model\n */\n dehydrate(): BaseDehydrateData {\n return {\n data: this._data,\n contributions: this._contributions,\n connectKey: this._connectKey,\n };\n }\n\n /**\n * Recreate the model with the given data\n */\n rehydrate(data: BaseDehydrateData) {\n this._connectKey = data.connectKey;\n }\n\n /**\n * Returns a clone of the model\n */\n clone(deepcopy: boolean = false): any {\n // deepcopy can be expensive, use with care!\n if (deepcopy) {\n return cloneDeep(this);\n }\n\n return clone(this);\n }\n}\n\nexport default BaseModel;\n"],"mappings":";;AACA,OAAOA,KAAK,MAAM,cAAc;AAChC,OAAOC,SAAS,MAAM,kBAAkB;AAExC,OAAOC,oBAAoB,MAAM,oCAAoC;AASrE;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,CAAC;EAMd;AACF;AACA;EACEC,WAAW,CAACC,IAAY,EAAEC,aAAqB,EAAE;IAAA;IAAA;IAAA;IAAA;IAC/C,IAAI,CAACC,KAAK,GAAGF,IAAI;IACjB,IAAI,CAACG,cAAc,GAAGF,aAAa;IACnC,IAAI,CAACG,WAAW,GAAG,IAAIP,oBAAoB,CACzC,IAAI,CAACQ,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CACvC;EACH;;EAEA;AACF;AACA;EACE,IAAIL,IAAI,GAAW;IACjB,OAAO,IAAI,CAACE,KAAK,IAAI,CAAC,CAAC;EACzB;;EAEA;AACF;AACA;EACEI,OAAO,CAACC,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IAChD,OAAO,IAAI,CAACR,IAAI,CAACO,QAAQ,CAAC,IAAIC,YAAY;EAC5C;;EAEA;AACF;AACA;EACE,IAAIP,aAAa,GAAW;IAC1B,OAAO,IAAI,CAACE,cAAc,IAAI,CAAC,CAAC;EAClC;;EAEA;AACF;AACA;EACEE,eAAe,CAACE,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IACxD,OAAO,IAAI,CAACP,aAAa,CAACM,QAAQ,CAAC,IAAIC,YAAY;EACrD;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACL,WAAW;EACzB;;EAEA;AACF;AACA;EACE,IAAIK,UAAU,CAACA,UAAyB,EAAE;IACxC,IAAI,CAACL,WAAW,GAAG,IAAIP,oBAAoB,CAACY,UAAU,CAAC;EACzD;;EAEA;AACF;AACA;EACE,IAAIC,OAAO,GAAY;IACrB,OAAO,aAAY,IAAI,CAACV,IAAI,CAAC,CAACW,MAAM,GAAG,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACC,WAAW,GAAGD,GAAG;EACxB;;EAEA;AACF;AACA;EACE,IAAID,UAAU,GAAW;IACvB,OAAO,IAAI,CAACE,WAAW;EACzB;;EAEA;AACF;AACA;EACEC,SAAS,GAAsB;IAC7B,OAAO;MACLf,IAAI,EAAE,IAAI,CAACE,KAAK;MAChBD,aAAa,EAAE,IAAI,CAACE,cAAc;MAClCS,UAAU,EAAE,IAAI,CAACE;IACnB,CAAC;EACH;;EAEA;AACF;AACA;EACEE,SAAS,CAAChB,IAAuB,EAAE;IACjC,IAAI,CAACc,WAAW,GAAGd,IAAI,CAACY,UAAU;EACpC;;EAEA;AACF;AACA;EACEjB,KAAK,GAAiC;IAAA,IAAhCsB,QAAiB,uEAAG,KAAK;IAC7B;IACA,IAAIA,QAAQ,EAAE;MACZ,OAAOrB,SAAS,CAAC,IAAI,CAAC;IACxB;IAEA,OAAOD,KAAK,CAAC,IAAI,CAAC;EACpB;AACF;AAEA,eAAeG,SAAS"}
1
+ {"version":3,"file":"BaseModel.js","names":["klona","LayoutHintCollection","BaseModel","constructor","data","contributions","_data","_contributions","_layouthint","getContribution","getData","propName","defaultValue","layouthint","hasData","length","connectKey","key","_connectKey","dehydrate","rehydrate","clone"],"sources":["../../../src/models/base/BaseModel.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\nexport type BaseDehydrateData = {\n +data: Object,\n +contributions: Object,\n connectKey: string,\n ...\n};\n\n/**\n * Base model, this is the foundation of a model,\n * it contains data that is needed for all models like, data, contributions and layout hint\n *\n * Extend this for non modular ui resources, for modular ui resource start with the resourceModel\n */\nclass BaseModel {\n _data: Object;\n _contributions: Object;\n _layouthint: LayoutHintCollection;\n _connectKey: string;\n\n /**\n * constructor\n */\n constructor(data: Object, contributions: Object) {\n this._data = data;\n this._contributions = contributions;\n this._layouthint = new LayoutHintCollection(\n this.getContribution(\"layouthint\", [])\n );\n }\n\n /**\n * Retrieve data\n */\n get data(): Object {\n return this._data || {};\n }\n\n /**\n * Retrieve property from the data object of the model, mostly used internal\n */\n getData(propName: string, defaultValue: any = null): any {\n return this.data[propName] ?? defaultValue;\n }\n\n /**\n * Retrieve contributions\n */\n get contributions(): Object {\n return this._contributions || {};\n }\n\n /**\n * Retrieve property from the contributions of the model, mostly used internal\n */\n getContribution(propName: string, defaultValue: any = null): any {\n return this.contributions[propName] ?? defaultValue;\n }\n\n /**\n * Getting the layouthint\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n * Set the layouthint\n */\n set layouthint(layouthint: Array<string>) {\n this._layouthint = new LayoutHintCollection(layouthint);\n }\n\n /**\n * Indicates if the model has data\n */\n get hasData(): boolean {\n return Object.keys(this.data).length > 0;\n }\n\n /**\n * Set the unique key for this model\n */\n set connectKey(key: string) {\n this._connectKey = key;\n }\n\n /**\n * Get the unique key of this model\n */\n get connectKey(): string {\n return this._connectKey;\n }\n\n /**\n * Dehydrate internal data, returns the information that is needed to recreate the model\n */\n dehydrate(): BaseDehydrateData {\n return {\n data: this._data,\n contributions: this._contributions,\n connectKey: this._connectKey,\n };\n }\n\n /**\n * Recreate the model with the given data\n */\n rehydrate(data: BaseDehydrateData) {\n this._connectKey = data.connectKey;\n }\n\n /**\n * Returns a clone of the model\n */\n clone(): any {\n return klona(this);\n }\n}\n\nexport default BaseModel;\n"],"mappings":";;AACA,SAASA,KAAK,QAAQ,YAAY;AAElC,OAAOC,oBAAoB,MAAM,oCAAoC;AASrE;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,CAAC;EAMd;AACF;AACA;EACEC,WAAW,CAACC,IAAY,EAAEC,aAAqB,EAAE;IAAA;IAAA;IAAA;IAAA;IAC/C,IAAI,CAACC,KAAK,GAAGF,IAAI;IACjB,IAAI,CAACG,cAAc,GAAGF,aAAa;IACnC,IAAI,CAACG,WAAW,GAAG,IAAIP,oBAAoB,CACzC,IAAI,CAACQ,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CACvC;EACH;;EAEA;AACF;AACA;EACE,IAAIL,IAAI,GAAW;IACjB,OAAO,IAAI,CAACE,KAAK,IAAI,CAAC,CAAC;EACzB;;EAEA;AACF;AACA;EACEI,OAAO,CAACC,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IAChD,OAAO,IAAI,CAACR,IAAI,CAACO,QAAQ,CAAC,IAAIC,YAAY;EAC5C;;EAEA;AACF;AACA;EACE,IAAIP,aAAa,GAAW;IAC1B,OAAO,IAAI,CAACE,cAAc,IAAI,CAAC,CAAC;EAClC;;EAEA;AACF;AACA;EACEE,eAAe,CAACE,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IACxD,OAAO,IAAI,CAACP,aAAa,CAACM,QAAQ,CAAC,IAAIC,YAAY;EACrD;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACL,WAAW;EACzB;;EAEA;AACF;AACA;EACE,IAAIK,UAAU,CAACA,UAAyB,EAAE;IACxC,IAAI,CAACL,WAAW,GAAG,IAAIP,oBAAoB,CAACY,UAAU,CAAC;EACzD;;EAEA;AACF;AACA;EACE,IAAIC,OAAO,GAAY;IACrB,OAAO,aAAY,IAAI,CAACV,IAAI,CAAC,CAACW,MAAM,GAAG,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACC,WAAW,GAAGD,GAAG;EACxB;;EAEA;AACF;AACA;EACE,IAAID,UAAU,GAAW;IACvB,OAAO,IAAI,CAACE,WAAW;EACzB;;EAEA;AACF;AACA;EACEC,SAAS,GAAsB;IAC7B,OAAO;MACLf,IAAI,EAAE,IAAI,CAACE,KAAK;MAChBD,aAAa,EAAE,IAAI,CAACE,cAAc;MAClCS,UAAU,EAAE,IAAI,CAACE;IACnB,CAAC;EACH;;EAEA;AACF;AACA;EACEE,SAAS,CAAChB,IAAuB,EAAE;IACjC,IAAI,CAACc,WAAW,GAAGd,IAAI,CAACY,UAAU;EACpC;;EAEA;AACF;AACA;EACEK,KAAK,GAAQ;IACX,OAAOrB,KAAK,CAAC,IAAI,CAAC;EACpB;AACF;AAEA,eAAeE,SAAS"}
@@ -10,7 +10,7 @@ import FormModel from "../../models/form/FormModel";
10
10
  const updateValidations = (form, formWithValidations) => (dispatch, getState) => {
11
11
  const currentForm = getState().modularui[form.connectKey];
12
12
  if (currentForm) {
13
- const validatedForm = currentForm.model.clone(true);
13
+ const validatedForm = currentForm.model.clone();
14
14
  if (validatedForm instanceof FormModel) {
15
15
  validatedForm.updateValidations(formWithValidations.data);
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormValidations.js","names":["debounce","updateModel","ModularUIRequest","HTTP_METHODS","VALIDATE_DEBOUNCE_TIMEOUT","FormModel","updateValidations","form","formWithValidations","dispatch","getState","currentForm","modularui","connectKey","validatedForm","model","clone","data","debouncedValidateFormObject","selfhref","setParameter","method","POST","validationData","childmodels","isValidationRequest","locale","fetch","then","leading","trailing","validateFormObject"],"sources":["../../../src/redux/actions/FormValidations.js"],"sourcesContent":["// @flow\nimport debounce from \"lodash/debounce\";\n\nimport { updateModel } from \"../_modularui/ModularUIActions\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport {\n HTTP_METHODS,\n VALIDATE_DEBOUNCE_TIMEOUT,\n} from \"../../constants/Constants\";\n\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type { ModularUIModel } from \"../../models\";\n\n/**\n * Update validations of the form currently in the reducer\n * because of the debounce timeout there might have been an update on the form during validation\n */\nconst updateValidations =\n (form: FormModel, formWithValidations: ModularUIModel) =>\n (dispatch: Dispatch, getState: GetState) => {\n const currentForm = getState().modularui[form.connectKey];\n\n if (currentForm) {\n const validatedForm = currentForm.model.clone(true);\n if (validatedForm instanceof FormModel) {\n validatedForm.updateValidations(formWithValidations.data);\n }\n\n dispatch(updateModel(validatedForm));\n }\n };\n\n/**\n * Validates form objects debounced to prevent overloading the (form) service\n * When a form with new errors (or complete) arrives, we send the validations\n * to the current form model where the errors are processed\n * A new form with the new constraints is send to the store\n */\nconst debouncedValidateFormObject = debounce<\n (dispatch: Dispatch, form: FormModel) => void\n>(\n (dispatch, form: FormModel) => {\n new ModularUIRequest(form.selfhref.setParameter(\"commit\", \"false\"), {\n method: HTTP_METHODS.POST,\n data: form.validationData,\n childmodels: false,\n isValidationRequest: true,\n locale: form.locale,\n })\n .fetch()\n .then((formWithValidations) =>\n dispatch(updateValidations(form, formWithValidations))\n );\n },\n VALIDATE_DEBOUNCE_TIMEOUT,\n {\n leading: true,\n trailing: true,\n }\n);\n\n/**\n */\nexport const validateFormObject =\n (form: FormModel): ThunkAction =>\n (dispatch) =>\n debouncedValidateFormObject(dispatch, form);\n"],"mappings":"AACA,OAAOA,QAAQ,MAAM,iBAAiB;AAEtC,SAASC,WAAW,QAAQ,gCAAgC;AAE5D,OAAOC,gBAAgB,MAAM,kCAAkC;AAE/D,SACEC,YAAY,EACZC,yBAAyB,QACpB,2BAA2B;AAElC,OAAOC,SAAS,MAAM,6BAA6B;AAKnD;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GACrB,CAACC,IAAe,EAAEC,mBAAmC,KACrD,CAACC,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,MAAMC,WAAW,GAAGD,QAAQ,EAAE,CAACE,SAAS,CAACL,IAAI,CAACM,UAAU,CAAC;EAEzD,IAAIF,WAAW,EAAE;IACf,MAAMG,aAAa,GAAGH,WAAW,CAACI,KAAK,CAACC,KAAK,CAAC,IAAI,CAAC;IACnD,IAAIF,aAAa,YAAYT,SAAS,EAAE;MACtCS,aAAa,CAACR,iBAAiB,CAACE,mBAAmB,CAACS,IAAI,CAAC;IAC3D;IAEAR,QAAQ,CAACR,WAAW,CAACa,aAAa,CAAC,CAAC;EACtC;AACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,2BAA2B,GAAGlB,QAAQ,CAG1C,CAACS,QAAQ,EAAEF,IAAe,KAAK;EAC7B,IAAIL,gBAAgB,CAACK,IAAI,CAACY,QAAQ,CAACC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;IAClEC,MAAM,EAAElB,YAAY,CAACmB,IAAI;IACzBL,IAAI,EAAEV,IAAI,CAACgB,cAAc;IACzBC,WAAW,EAAE,KAAK;IAClBC,mBAAmB,EAAE,IAAI;IACzBC,MAAM,EAAEnB,IAAI,CAACmB;EACf,CAAC,CAAC,CACCC,KAAK,EAAE,CACPC,IAAI,CAAEpB,mBAAmB,IACxBC,QAAQ,CAACH,iBAAiB,CAACC,IAAI,EAAEC,mBAAmB,CAAC,CAAC,CACvD;AACL,CAAC,EACDJ,yBAAyB,EACzB;EACEyB,OAAO,EAAE,IAAI;EACbC,QAAQ,EAAE;AACZ,CAAC,CACF;;AAED;AACA;AACA,OAAO,MAAMC,kBAAkB,GAC5BxB,IAAe,IACfE,QAAQ,IACPS,2BAA2B,CAACT,QAAQ,EAAEF,IAAI,CAAC"}
1
+ {"version":3,"file":"FormValidations.js","names":["debounce","updateModel","ModularUIRequest","HTTP_METHODS","VALIDATE_DEBOUNCE_TIMEOUT","FormModel","updateValidations","form","formWithValidations","dispatch","getState","currentForm","modularui","connectKey","validatedForm","model","clone","data","debouncedValidateFormObject","selfhref","setParameter","method","POST","validationData","childmodels","isValidationRequest","locale","fetch","then","leading","trailing","validateFormObject"],"sources":["../../../src/redux/actions/FormValidations.js"],"sourcesContent":["// @flow\nimport debounce from \"lodash/debounce\";\n\nimport { updateModel } from \"../_modularui/ModularUIActions\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport {\n HTTP_METHODS,\n VALIDATE_DEBOUNCE_TIMEOUT,\n} from \"../../constants/Constants\";\n\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type { ModularUIModel } from \"../../models\";\n\n/**\n * Update validations of the form currently in the reducer\n * because of the debounce timeout there might have been an update on the form during validation\n */\nconst updateValidations =\n (form: FormModel, formWithValidations: ModularUIModel) =>\n (dispatch: Dispatch, getState: GetState) => {\n const currentForm = getState().modularui[form.connectKey];\n\n if (currentForm) {\n const validatedForm = currentForm.model.clone();\n if (validatedForm instanceof FormModel) {\n validatedForm.updateValidations(formWithValidations.data);\n }\n\n dispatch(updateModel(validatedForm));\n }\n };\n\n/**\n * Validates form objects debounced to prevent overloading the (form) service\n * When a form with new errors (or complete) arrives, we send the validations\n * to the current form model where the errors are processed\n * A new form with the new constraints is send to the store\n */\nconst debouncedValidateFormObject = debounce<\n (dispatch: Dispatch, form: FormModel) => void\n>(\n (dispatch, form: FormModel) => {\n new ModularUIRequest(form.selfhref.setParameter(\"commit\", \"false\"), {\n method: HTTP_METHODS.POST,\n data: form.validationData,\n childmodels: false,\n isValidationRequest: true,\n locale: form.locale,\n })\n .fetch()\n .then((formWithValidations) =>\n dispatch(updateValidations(form, formWithValidations))\n );\n },\n VALIDATE_DEBOUNCE_TIMEOUT,\n {\n leading: true,\n trailing: true,\n }\n);\n\n/**\n */\nexport const validateFormObject =\n (form: FormModel): ThunkAction =>\n (dispatch) =>\n debouncedValidateFormObject(dispatch, form);\n"],"mappings":"AACA,OAAOA,QAAQ,MAAM,iBAAiB;AAEtC,SAASC,WAAW,QAAQ,gCAAgC;AAE5D,OAAOC,gBAAgB,MAAM,kCAAkC;AAE/D,SACEC,YAAY,EACZC,yBAAyB,QACpB,2BAA2B;AAElC,OAAOC,SAAS,MAAM,6BAA6B;AAKnD;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GACrB,CAACC,IAAe,EAAEC,mBAAmC,KACrD,CAACC,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,MAAMC,WAAW,GAAGD,QAAQ,EAAE,CAACE,SAAS,CAACL,IAAI,CAACM,UAAU,CAAC;EAEzD,IAAIF,WAAW,EAAE;IACf,MAAMG,aAAa,GAAGH,WAAW,CAACI,KAAK,CAACC,KAAK,EAAE;IAC/C,IAAIF,aAAa,YAAYT,SAAS,EAAE;MACtCS,aAAa,CAACR,iBAAiB,CAACE,mBAAmB,CAACS,IAAI,CAAC;IAC3D;IAEAR,QAAQ,CAACR,WAAW,CAACa,aAAa,CAAC,CAAC;EACtC;AACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,2BAA2B,GAAGlB,QAAQ,CAG1C,CAACS,QAAQ,EAAEF,IAAe,KAAK;EAC7B,IAAIL,gBAAgB,CAACK,IAAI,CAACY,QAAQ,CAACC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;IAClEC,MAAM,EAAElB,YAAY,CAACmB,IAAI;IACzBL,IAAI,EAAEV,IAAI,CAACgB,cAAc;IACzBC,WAAW,EAAE,KAAK;IAClBC,mBAAmB,EAAE,IAAI;IACzBC,MAAM,EAAEnB,IAAI,CAACmB;EACf,CAAC,CAAC,CACCC,KAAK,EAAE,CACPC,IAAI,CAAEpB,mBAAmB,IACxBC,QAAQ,CAACH,iBAAiB,CAACC,IAAI,EAAEC,mBAAmB,CAAC,CAAC,CACvD;AACL,CAAC,EACDJ,yBAAyB,EACzB;EACEyB,OAAO,EAAE,IAAI;EACbC,QAAQ,EAAE;AACZ,CAAC,CACF;;AAED;AACA;AACA,OAAO,MAAMC,kBAAkB,GAC5BxB,IAAe,IACfE,QAAQ,IACPS,2BAA2B,CAACT,QAAQ,EAAEF,IAAI,CAAC"}
@@ -11,7 +11,7 @@ var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
11
11
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
12
12
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
14
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
14
+ var _full = require("klona/full");
15
15
  var _pick = _interopRequireDefault(require("lodash/pick"));
16
16
  var _objects = require("../../utils/helpers/objects");
17
17
  /**
@@ -33,7 +33,7 @@ class AttributeDataHelper {
33
33
  this._attribute = (0, _find.default)(data).call(data, attr => attr.elementid === key || attr.name === key || attr.param === key) || {};
34
34
  this._value = this.getValue(this._attribute);
35
35
  } else {
36
- const attributeData = (0, _cloneDeep.default)(data);
36
+ const attributeData = (0, _full.klona)(data);
37
37
  attributeData._links = (0, _pick.default)(data._links, ["concept", "download", "lookupOptions", "lookupList"]);
38
38
  this._attribute = attributeData;
39
39
  if (data[key] === undefined || "name" in data && "param" in data) {
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
3
3
  import pick from "lodash/pick";
4
4
 
5
5
  import { has, isPlainObject } from "../../utils/helpers/objects";
@@ -33,7 +33,7 @@ class AttributeDataHelper {
33
33
  ) || {};
34
34
  this._value = this.getValue(this._attribute);
35
35
  } else {
36
- const attributeData = cloneDeep(data);
36
+ const attributeData = klona(data);
37
37
  attributeData._links = pick(data._links, [
38
38
  "concept",
39
39
  "download",
@@ -1 +1 @@
1
- {"version":3,"file":"AttributeDataHelper.js","names":["AttributeDataHelper","constructor","data","key","childrenKeys","_key","Array","isArray","_attribute","attr","elementid","name","param","_value","getValue","attributeData","cloneDeep","_links","pick","undefined","_children","createChildren","childData","parentKey","childKey","elements","element","has","isPlainObject","parentData","content","createChild","keyObject","dynamicschema","dynamicschemaId","children","childrenIsArray","value","attribute","suggestions","suggestion","options","option","selected","code","static","links","attrDS","message","isResult","referenceDate","pickedContent","length","getData","child","subChild"],"sources":["../../../src/models/attributes/AttributeDataHelper.js"],"sourcesContent":["// @flow\nimport cloneDeep from \"lodash/cloneDeep\";\nimport pick from \"lodash/pick\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\n/**\n * This util helps to normalize various attribute data formats available in the modular ui.\n * It fixes differences in choice attributes with dynamic schema's, links on download attributes, composites with various children, etc\n *\n * @private\n */\nclass AttributeDataHelper {\n _key: string;\n _attribute: Object;\n _value: any;\n _children: Array<AttributeDataHelper>;\n\n /**\n */\n constructor(\n data: Object | Array<Object>,\n key: string,\n childrenKeys: Array<Object>\n ) {\n this._key = key;\n\n if (Array.isArray(data)) {\n this._attribute =\n data.find(\n (attr) =>\n attr.elementid === key || attr.name === key || attr.param === key\n ) || {};\n this._value = this.getValue(this._attribute);\n } else {\n const attributeData = cloneDeep(data);\n attributeData._links = pick(data._links, [\n \"concept\",\n \"download\",\n \"lookupOptions\",\n \"lookupList\",\n ]);\n\n this._attribute = attributeData;\n\n if (data[key] === undefined || (\"name\" in data && \"param\" in data)) {\n this._value = this.getValue(data);\n } else {\n this._value = data[key];\n }\n }\n\n this._children = this.createChildren(data, childrenKeys);\n }\n\n /**\n */\n childData(\n data: Object | Array<Object>,\n parentKey: string,\n childKey: string\n ): Object {\n if (Array.isArray(data)) {\n if (Array.isArray(this._attribute.elements)) {\n return this._attribute.elements.find(\n (element) => element.elementid === childKey\n );\n }\n } else if (has(data, parentKey) && isPlainObject(data[parentKey])) {\n const parentData = data[parentKey];\n if (isPlainObject(parentData) && data.content?.[childKey]) {\n return { ...parentData, content: data.content[childKey] };\n }\n return parentData;\n } else if (has(data, childKey) && isPlainObject(data[childKey])) {\n return data[childKey];\n }\n\n if (isPlainObject(data)) {\n return data;\n }\n\n return {};\n }\n\n /**\n */\n createChild(\n data: Object | Array<Object>,\n childData: Object,\n keyObject: Object\n ): AttributeDataHelper {\n const dynamicschema =\n isPlainObject(data) && !Array.isArray(data)\n ? data.dynamicschema\n : undefined;\n\n let dynamicschemaId = null;\n if (keyObject.dynamicschemaId) {\n dynamicschemaId = keyObject.dynamicschemaId;\n } else if (\n isPlainObject(data) &&\n typeof data.key === \"string\" &&\n keyObject.key\n ) {\n dynamicschemaId = `${data.key}.${keyObject.key}`;\n }\n\n return new AttributeDataHelper(\n {\n ...childData,\n dynamicschema,\n dynamicschemaId,\n },\n keyObject.key,\n keyObject.children\n );\n }\n\n /**\n */\n createChildren(\n data: Object | Array<Object>,\n childrenKeys: Array<Object> = []\n ): Array<AttributeDataHelper> {\n const childrenIsArray = Array.isArray(this.value);\n\n if (childrenIsArray) {\n return this.value.map((value) =>\n childrenKeys.map((keyObject) => {\n const childData = this.childData(value, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n })\n );\n }\n\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(data, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n });\n }\n\n /**\n */\n getValue(attribute: Object): any {\n if (\"values\" in attribute) {\n return attribute.values;\n }\n\n if (\"value\" in attribute) {\n return attribute.value;\n }\n\n if (\"suggestions\" in attribute) {\n return attribute.suggestions;\n }\n\n if (\"suggestion\" in attribute) {\n return attribute.suggestion;\n }\n\n if (Array.isArray(attribute.options)) {\n return attribute.options\n .filter((option) => option.selected)\n .map((option) => option.code || option.key);\n }\n\n return null;\n }\n\n /**\n */\n get key(): string {\n return this._key;\n }\n\n /**\n */\n get value(): any {\n return this._value;\n }\n\n /**\n */\n get static(): boolean {\n return this._attribute.static || false;\n }\n\n /**\n */\n get links(): any {\n return this._attribute._links || void 0;\n }\n\n /**\n */\n get dynamicschemaId(): string {\n return this._attribute.dynamicschemaId || this.key;\n }\n\n /*\n retrieve the dynamischema by the dynamischemaId\n mentioned in the contributions of the attribute\n */\n /**\n */\n get dynamicschema(): any {\n const { dynamicschema } = this._attribute;\n if (!dynamicschema) {\n return void 0;\n }\n\n if (Array.isArray(dynamicschema)) {\n return dynamicschema;\n } else if (dynamicschema[this.dynamicschemaId]) {\n const attrDS = dynamicschema[this.dynamicschemaId];\n return attrDS.map((attr) => {\n if (attr.elements) {\n return {\n ...attr,\n elements: {\n ...attr.elements,\n dynamicschema,\n },\n };\n }\n\n return attr;\n });\n }\n\n return void 0;\n }\n\n /**\n */\n get options(): any {\n return this._attribute.options || void 0;\n }\n\n /**\n */\n get message(): any {\n return this._attribute.message || void 0;\n }\n\n /**\n */\n get isResult(): boolean {\n return this._attribute.isResult || false;\n }\n\n /**\n */\n get referenceDate(): any {\n return this._attribute.referenceDate || void 0;\n }\n\n /**\n */\n get children(): Array<AttributeDataHelper> {\n return this._children || [];\n }\n\n /**\n */\n get content(): Object {\n if (this._attribute.content) {\n const pickedContent = pick(this._attribute.content, [\n \"header\",\n \"label\",\n \"elements\",\n \"layouthint\",\n \"text\",\n ]);\n\n if (Object.keys(pickedContent).length > 0) {\n return pickedContent;\n }\n }\n\n return null;\n }\n\n /**\n */\n getData(): Object {\n return {\n key: this.key,\n value: this.value,\n static: this.static,\n _links: this.links,\n dynamicschema: this.dynamicschema,\n dynamicschemaId: this.dynamicschemaId,\n options: this.options,\n message: this.message,\n isResult: this.isResult,\n referenceDate: this.referenceDate,\n children: this.children.map((child) =>\n Array.isArray(child)\n ? child.map((subChild) => subChild.getData())\n : child.getData()\n ),\n content: this.content,\n };\n }\n}\n\nexport default AttributeDataHelper;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AttributeDataHelper.js","names":["AttributeDataHelper","constructor","data","key","childrenKeys","_key","Array","isArray","_attribute","attr","elementid","name","param","_value","getValue","attributeData","klona","_links","pick","undefined","_children","createChildren","childData","parentKey","childKey","elements","element","has","isPlainObject","parentData","content","createChild","keyObject","dynamicschema","dynamicschemaId","children","childrenIsArray","value","attribute","suggestions","suggestion","options","option","selected","code","static","links","attrDS","message","isResult","referenceDate","pickedContent","length","getData","child","subChild"],"sources":["../../../src/models/attributes/AttributeDataHelper.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\nimport pick from \"lodash/pick\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\n/**\n * This util helps to normalize various attribute data formats available in the modular ui.\n * It fixes differences in choice attributes with dynamic schema's, links on download attributes, composites with various children, etc\n *\n * @private\n */\nclass AttributeDataHelper {\n _key: string;\n _attribute: Object;\n _value: any;\n _children: Array<AttributeDataHelper>;\n\n /**\n */\n constructor(\n data: Object | Array<Object>,\n key: string,\n childrenKeys: Array<Object>\n ) {\n this._key = key;\n\n if (Array.isArray(data)) {\n this._attribute =\n data.find(\n (attr) =>\n attr.elementid === key || attr.name === key || attr.param === key\n ) || {};\n this._value = this.getValue(this._attribute);\n } else {\n const attributeData = klona(data);\n attributeData._links = pick(data._links, [\n \"concept\",\n \"download\",\n \"lookupOptions\",\n \"lookupList\",\n ]);\n\n this._attribute = attributeData;\n\n if (data[key] === undefined || (\"name\" in data && \"param\" in data)) {\n this._value = this.getValue(data);\n } else {\n this._value = data[key];\n }\n }\n\n this._children = this.createChildren(data, childrenKeys);\n }\n\n /**\n */\n childData(\n data: Object | Array<Object>,\n parentKey: string,\n childKey: string\n ): Object {\n if (Array.isArray(data)) {\n if (Array.isArray(this._attribute.elements)) {\n return this._attribute.elements.find(\n (element) => element.elementid === childKey\n );\n }\n } else if (has(data, parentKey) && isPlainObject(data[parentKey])) {\n const parentData = data[parentKey];\n if (isPlainObject(parentData) && data.content?.[childKey]) {\n return { ...parentData, content: data.content[childKey] };\n }\n return parentData;\n } else if (has(data, childKey) && isPlainObject(data[childKey])) {\n return data[childKey];\n }\n\n if (isPlainObject(data)) {\n return data;\n }\n\n return {};\n }\n\n /**\n */\n createChild(\n data: Object | Array<Object>,\n childData: Object,\n keyObject: Object\n ): AttributeDataHelper {\n const dynamicschema =\n isPlainObject(data) && !Array.isArray(data)\n ? data.dynamicschema\n : undefined;\n\n let dynamicschemaId = null;\n if (keyObject.dynamicschemaId) {\n dynamicschemaId = keyObject.dynamicschemaId;\n } else if (\n isPlainObject(data) &&\n typeof data.key === \"string\" &&\n keyObject.key\n ) {\n dynamicschemaId = `${data.key}.${keyObject.key}`;\n }\n\n return new AttributeDataHelper(\n {\n ...childData,\n dynamicschema,\n dynamicschemaId,\n },\n keyObject.key,\n keyObject.children\n );\n }\n\n /**\n */\n createChildren(\n data: Object | Array<Object>,\n childrenKeys: Array<Object> = []\n ): Array<AttributeDataHelper> {\n const childrenIsArray = Array.isArray(this.value);\n\n if (childrenIsArray) {\n return this.value.map((value) =>\n childrenKeys.map((keyObject) => {\n const childData = this.childData(value, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n })\n );\n }\n\n return childrenKeys.map((keyObject) => {\n const childData = this.childData(data, this.key, keyObject.key);\n\n return this.createChild(data, childData, keyObject);\n });\n }\n\n /**\n */\n getValue(attribute: Object): any {\n if (\"values\" in attribute) {\n return attribute.values;\n }\n\n if (\"value\" in attribute) {\n return attribute.value;\n }\n\n if (\"suggestions\" in attribute) {\n return attribute.suggestions;\n }\n\n if (\"suggestion\" in attribute) {\n return attribute.suggestion;\n }\n\n if (Array.isArray(attribute.options)) {\n return attribute.options\n .filter((option) => option.selected)\n .map((option) => option.code || option.key);\n }\n\n return null;\n }\n\n /**\n */\n get key(): string {\n return this._key;\n }\n\n /**\n */\n get value(): any {\n return this._value;\n }\n\n /**\n */\n get static(): boolean {\n return this._attribute.static || false;\n }\n\n /**\n */\n get links(): any {\n return this._attribute._links || void 0;\n }\n\n /**\n */\n get dynamicschemaId(): string {\n return this._attribute.dynamicschemaId || this.key;\n }\n\n /*\n retrieve the dynamischema by the dynamischemaId\n mentioned in the contributions of the attribute\n */\n /**\n */\n get dynamicschema(): any {\n const { dynamicschema } = this._attribute;\n if (!dynamicschema) {\n return void 0;\n }\n\n if (Array.isArray(dynamicschema)) {\n return dynamicschema;\n } else if (dynamicschema[this.dynamicschemaId]) {\n const attrDS = dynamicschema[this.dynamicschemaId];\n return attrDS.map((attr) => {\n if (attr.elements) {\n return {\n ...attr,\n elements: {\n ...attr.elements,\n dynamicschema,\n },\n };\n }\n\n return attr;\n });\n }\n\n return void 0;\n }\n\n /**\n */\n get options(): any {\n return this._attribute.options || void 0;\n }\n\n /**\n */\n get message(): any {\n return this._attribute.message || void 0;\n }\n\n /**\n */\n get isResult(): boolean {\n return this._attribute.isResult || false;\n }\n\n /**\n */\n get referenceDate(): any {\n return this._attribute.referenceDate || void 0;\n }\n\n /**\n */\n get children(): Array<AttributeDataHelper> {\n return this._children || [];\n }\n\n /**\n */\n get content(): Object {\n if (this._attribute.content) {\n const pickedContent = pick(this._attribute.content, [\n \"header\",\n \"label\",\n \"elements\",\n \"layouthint\",\n \"text\",\n ]);\n\n if (Object.keys(pickedContent).length > 0) {\n return pickedContent;\n }\n }\n\n return null;\n }\n\n /**\n */\n getData(): Object {\n return {\n key: this.key,\n value: this.value,\n static: this.static,\n _links: this.links,\n dynamicschema: this.dynamicschema,\n dynamicschemaId: this.dynamicschemaId,\n options: this.options,\n message: this.message,\n isResult: this.isResult,\n referenceDate: this.referenceDate,\n children: this.children.map((child) =>\n Array.isArray(child)\n ? child.map((subChild) => subChild.getData())\n : child.getData()\n ),\n content: this.content,\n };\n }\n}\n\nexport default AttributeDataHelper;\n"],"mappings":"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"}
@@ -130,6 +130,9 @@ describe("choiceAttributeModel", () => {
130
130
  expect(attribute.format).toBeNull();
131
131
 
132
132
  expect(attribute.options).toHaveLength(4);
133
+
134
+ const clonedAttribute = attribute.clone();
135
+ expect(clonedAttribute).toStrictEqual(attribute);
133
136
  });
134
137
 
135
138
  it("handles sort-options hint", () => {
@@ -202,6 +202,9 @@ describe("compositeAttributeModel", () => {
202
202
  PrintingHouse: "Printers united",
203
203
  Title: "Matilda",
204
204
  });
205
+
206
+ const clonedAttribute = attribute.clone();
207
+ expect(clonedAttribute).toStrictEqual(attribute);
205
208
  });
206
209
 
207
210
  it("creates a composite attribute for a choice attribute with a table codemap on a list, multiple choice", () => {
@@ -8,7 +8,7 @@ exports.default = void 0;
8
8
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
9
9
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
10
10
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
11
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
11
+ var _full = require("klona/full");
12
12
  var _objects = require("../../utils/helpers/objects");
13
13
  var _LayoutHintRuleCollection = _interopRequireDefault(require("./layouthint-rules/LayoutHintRuleCollection"));
14
14
  var _CaptchaAttributeModel = _interopRequireDefault(require("./CaptchaAttributeModel"));
@@ -67,7 +67,7 @@ const updateContributions = (key, data, contributions) => {
67
67
  * @private
68
68
  */
69
69
  const updateData = (key, data, contributions) => {
70
- const newData = (0, _cloneDeep.default)(data);
70
+ const newData = (0, _full.klona)(data);
71
71
  if (contributions.dynamicschemaId) {
72
72
  newData.dynamicschemaId = contributions.dynamicschemaId;
73
73
  }
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
3
3
 
4
4
  import { has, isPlainObject } from "../../utils/helpers/objects";
5
5
 
@@ -105,7 +105,7 @@ const updateData = (
105
105
  data: Object,
106
106
  contributions: Object
107
107
  ): Object => {
108
- const newData = cloneDeep(data);
108
+ const newData = klona(data);
109
109
 
110
110
  if (contributions.dynamicschemaId) {
111
111
  newData.dynamicschemaId = contributions.dynamicschemaId;
@@ -1 +1 @@
1
- {"version":3,"file":"_createAttribute.js","names":["getChildrenKeys","children","child","childKey","isComposite","type","key","dynamicschemaId","undefined","getAttributeModel","contributions","ATTRIBUTE_MODELS","ChoiceAttributeModel","BooleanAttributeModel","HelptextAttributeModel","LabelAttributeModel","XMLAttributeModel","MemoAttributeModel","StringAttributeModel","DatetimeAttributeModel","MoneyAttributeModel","NumberAttributeModel","PasswordAttributeModel","UploadAttributeModel","CompositeAttributeModel","CaptchaAttributeModel","model","isApplicableModel","updateContributions","data","has","isPlainObject","Array","isArray","updateData","newData","cloneDeep","createAttribute","updatedContributions","updatedData","Model","Error","childrenKeys","dataHelper","AttributeDataHelper","getData","attribute","LayoutHintRuleCollection","setLayoutHintRules"],"sources":["../../../src/models/attributes/_createAttribute.js"],"sourcesContent":["// @flow\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\nimport LayoutHintRuleCollection from \"./layouthint-rules/LayoutHintRuleCollection\";\n\nimport CaptchaAttributeModel from \"./CaptchaAttributeModel\";\nimport ChoiceAttributeModel from \"./ChoiceAttributeModel\";\nimport DatetimeAttributeModel from \"./DatetimeAttributeModel\";\nimport HelptextAttributeModel from \"./HelptextAttributeModel\";\nimport LabelAttributeModel from \"./LabelAttributeModel\";\nimport MemoAttributeModel from \"./MemoAttributeModel\";\nimport MoneyAttributeModel from \"./MoneyAttributeModel\";\nimport NumberAttributeModel from \"./NumberAttributeModel\";\nimport PasswordAttributeModel from \"./PasswordAttributeModel\";\nimport CompositeAttributeModel from \"./CompositeAttributeModel\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport UploadAttributeModel from \"./UploadAttributeModel\";\nimport XMLAttributeModel from \"./XMLAttributeModel\";\nimport BooleanAttributeModel from \"./BooleanAttributeModel\";\n\nimport AttributeDataHelper from \"./AttributeDataHelper\";\n\nimport type { AttributeType } from \"../types\";\n\n/**\n * @private\n */\nconst getChildrenKeys = (children: Array<Object>): Array<Object> => {\n if (children) {\n return children.map((child) => {\n const [childKey] = Object.keys(child);\n const isComposite =\n child[childKey].type === \"range\" ||\n child[childKey].type === \"composite\";\n\n return {\n key: childKey,\n dynamicschemaId: child[childKey]?.dynamicschemaId || undefined,\n children: isComposite ? getChildrenKeys(child[childKey]?.children) : [],\n };\n });\n }\n\n return [];\n};\n\n/**\n * @private\n */\nconst getAttributeModel = (contributions: Object): ?Class<AttributeType> => {\n const ATTRIBUTE_MODELS = [\n ChoiceAttributeModel,\n BooleanAttributeModel,\n\n HelptextAttributeModel,\n LabelAttributeModel,\n\n XMLAttributeModel,\n MemoAttributeModel,\n StringAttributeModel,\n\n DatetimeAttributeModel,\n\n MoneyAttributeModel,\n NumberAttributeModel,\n PasswordAttributeModel,\n\n UploadAttributeModel,\n CompositeAttributeModel,\n CaptchaAttributeModel,\n ];\n\n return ATTRIBUTE_MODELS.find((model) =>\n model.isApplicableModel(contributions)\n );\n};\n\n/**\n * @private\n */\nconst updateContributions = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const isComposite =\n contributions.type === \"array\" &&\n has(contributions, \"children\") &&\n isPlainObject(data) &&\n Array.isArray(data[key]);\n\n return {\n ...contributions,\n type: isComposite ? \"composite\" : contributions.type,\n };\n};\n\n/**\n * @private\n */\nconst updateData = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const newData = cloneDeep(data);\n\n if (contributions.dynamicschemaId) {\n newData.dynamicschemaId = contributions.dynamicschemaId;\n }\n\n return newData;\n};\n\n/**\n * Create an attribute based on data and contributions\n */\nconst createAttribute = (\n key: string,\n data: Object | Array<Object>,\n contributions: Object\n): AttributeType => {\n const updatedContributions = updateContributions(key, data, contributions);\n const updatedData = updateData(key, data, contributions);\n\n const Model = getAttributeModel(updatedContributions);\n\n if (!Model) {\n throw new Error(\"Could not find model\");\n }\n\n const childrenKeys = getChildrenKeys(updatedContributions.children ?? []);\n const dataHelper = new AttributeDataHelper(\n updatedData,\n key,\n childrenKeys\n ).getData();\n\n const attribute = new Model(dataHelper, updatedContributions);\n\n return LayoutHintRuleCollection.setLayoutHintRules(attribute);\n};\n\nexport default createAttribute;\n"],"mappings":"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"}
1
+ {"version":3,"file":"_createAttribute.js","names":["getChildrenKeys","children","child","childKey","isComposite","type","key","dynamicschemaId","undefined","getAttributeModel","contributions","ATTRIBUTE_MODELS","ChoiceAttributeModel","BooleanAttributeModel","HelptextAttributeModel","LabelAttributeModel","XMLAttributeModel","MemoAttributeModel","StringAttributeModel","DatetimeAttributeModel","MoneyAttributeModel","NumberAttributeModel","PasswordAttributeModel","UploadAttributeModel","CompositeAttributeModel","CaptchaAttributeModel","model","isApplicableModel","updateContributions","data","has","isPlainObject","Array","isArray","updateData","newData","klona","createAttribute","updatedContributions","updatedData","Model","Error","childrenKeys","dataHelper","AttributeDataHelper","getData","attribute","LayoutHintRuleCollection","setLayoutHintRules"],"sources":["../../../src/models/attributes/_createAttribute.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\nimport { has, isPlainObject } from \"../../utils/helpers/objects\";\n\nimport LayoutHintRuleCollection from \"./layouthint-rules/LayoutHintRuleCollection\";\n\nimport CaptchaAttributeModel from \"./CaptchaAttributeModel\";\nimport ChoiceAttributeModel from \"./ChoiceAttributeModel\";\nimport DatetimeAttributeModel from \"./DatetimeAttributeModel\";\nimport HelptextAttributeModel from \"./HelptextAttributeModel\";\nimport LabelAttributeModel from \"./LabelAttributeModel\";\nimport MemoAttributeModel from \"./MemoAttributeModel\";\nimport MoneyAttributeModel from \"./MoneyAttributeModel\";\nimport NumberAttributeModel from \"./NumberAttributeModel\";\nimport PasswordAttributeModel from \"./PasswordAttributeModel\";\nimport CompositeAttributeModel from \"./CompositeAttributeModel\";\nimport StringAttributeModel from \"./StringAttributeModel\";\nimport UploadAttributeModel from \"./UploadAttributeModel\";\nimport XMLAttributeModel from \"./XMLAttributeModel\";\nimport BooleanAttributeModel from \"./BooleanAttributeModel\";\n\nimport AttributeDataHelper from \"./AttributeDataHelper\";\n\nimport type { AttributeType } from \"../types\";\n\n/**\n * @private\n */\nconst getChildrenKeys = (children: Array<Object>): Array<Object> => {\n if (children) {\n return children.map((child) => {\n const [childKey] = Object.keys(child);\n const isComposite =\n child[childKey].type === \"range\" ||\n child[childKey].type === \"composite\";\n\n return {\n key: childKey,\n dynamicschemaId: child[childKey]?.dynamicschemaId || undefined,\n children: isComposite ? getChildrenKeys(child[childKey]?.children) : [],\n };\n });\n }\n\n return [];\n};\n\n/**\n * @private\n */\nconst getAttributeModel = (contributions: Object): ?Class<AttributeType> => {\n const ATTRIBUTE_MODELS = [\n ChoiceAttributeModel,\n BooleanAttributeModel,\n\n HelptextAttributeModel,\n LabelAttributeModel,\n\n XMLAttributeModel,\n MemoAttributeModel,\n StringAttributeModel,\n\n DatetimeAttributeModel,\n\n MoneyAttributeModel,\n NumberAttributeModel,\n PasswordAttributeModel,\n\n UploadAttributeModel,\n CompositeAttributeModel,\n CaptchaAttributeModel,\n ];\n\n return ATTRIBUTE_MODELS.find((model) =>\n model.isApplicableModel(contributions)\n );\n};\n\n/**\n * @private\n */\nconst updateContributions = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const isComposite =\n contributions.type === \"array\" &&\n has(contributions, \"children\") &&\n isPlainObject(data) &&\n Array.isArray(data[key]);\n\n return {\n ...contributions,\n type: isComposite ? \"composite\" : contributions.type,\n };\n};\n\n/**\n * @private\n */\nconst updateData = (\n key: string,\n data: Object,\n contributions: Object\n): Object => {\n const newData = klona(data);\n\n if (contributions.dynamicschemaId) {\n newData.dynamicschemaId = contributions.dynamicschemaId;\n }\n\n return newData;\n};\n\n/**\n * Create an attribute based on data and contributions\n */\nconst createAttribute = (\n key: string,\n data: Object | Array<Object>,\n contributions: Object\n): AttributeType => {\n const updatedContributions = updateContributions(key, data, contributions);\n const updatedData = updateData(key, data, contributions);\n\n const Model = getAttributeModel(updatedContributions);\n\n if (!Model) {\n throw new Error(\"Could not find model\");\n }\n\n const childrenKeys = getChildrenKeys(updatedContributions.children ?? []);\n const dataHelper = new AttributeDataHelper(\n updatedData,\n key,\n childrenKeys\n ).getData();\n\n const attribute = new Model(dataHelper, updatedContributions);\n\n return LayoutHintRuleCollection.setLayoutHintRules(attribute);\n};\n\nexport default createAttribute;\n"],"mappings":";;;;;;;;;;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA,MAAMA,eAAe,GAAIC,QAAuB,IAAoB;EAClE,IAAIA,QAAQ,EAAE;IACZ,OAAO,kBAAAA,QAAQ,OAARA,QAAQ,EAAMC,KAAK,IAAK;MAC7B,MAAM,CAACC,QAAQ,CAAC,GAAG,mBAAYD,KAAK,CAAC;MACrC,MAAME,WAAW,GACfF,KAAK,CAACC,QAAQ,CAAC,CAACE,IAAI,KAAK,OAAO,IAChCH,KAAK,CAACC,QAAQ,CAAC,CAACE,IAAI,KAAK,WAAW;MAEtC,OAAO;QACLC,GAAG,EAAEH,QAAQ;QACbI,eAAe,EAAEL,KAAK,CAACC,QAAQ,CAAC,EAAEI,eAAe,IAAIC,SAAS;QAC9DP,QAAQ,EAAEG,WAAW,GAAGJ,eAAe,CAACE,KAAK,CAACC,QAAQ,CAAC,EAAEF,QAAQ,CAAC,GAAG;MACvE,CAAC;IACH,CAAC,CAAC;EACJ;EAEA,OAAO,EAAE;AACX,CAAC;;AAED;AACA;AACA;AACA,MAAMQ,iBAAiB,GAAIC,aAAqB,IAA4B;EAC1E,MAAMC,gBAAgB,GAAG,CACvBC,6BAAoB,EACpBC,8BAAqB,EAErBC,+BAAsB,EACtBC,4BAAmB,EAEnBC,0BAAiB,EACjBC,2BAAkB,EAClBC,6BAAoB,EAEpBC,+BAAsB,EAEtBC,4BAAmB,EACnBC,6BAAoB,EACpBC,+BAAsB,EAEtBC,6BAAoB,EACpBC,gCAAuB,EACvBC,8BAAqB,CACtB;EAED,OAAO,mBAAAd,gBAAgB,OAAhBA,gBAAgB,EAAOe,KAAK,IACjCA,KAAK,CAACC,iBAAiB,CAACjB,aAAa,CAAC,CACvC;AACH,CAAC;;AAED;AACA;AACA;AACA,MAAMkB,mBAAmB,GAAG,CAC1BtB,GAAW,EACXuB,IAAY,EACZnB,aAAqB,KACV;EACX,MAAMN,WAAW,GACfM,aAAa,CAACL,IAAI,KAAK,OAAO,IAC9B,IAAAyB,YAAG,EAACpB,aAAa,EAAE,UAAU,CAAC,IAC9B,IAAAqB,sBAAa,EAACF,IAAI,CAAC,IACnBG,KAAK,CAACC,OAAO,CAACJ,IAAI,CAACvB,GAAG,CAAC,CAAC;EAE1B,OAAO;IACL,GAAGI,aAAa;IAChBL,IAAI,EAAED,WAAW,GAAG,WAAW,GAAGM,aAAa,CAACL;EAClD,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA,MAAM6B,UAAU,GAAG,CACjB5B,GAAW,EACXuB,IAAY,EACZnB,aAAqB,KACV;EACX,MAAMyB,OAAO,GAAG,IAAAC,WAAK,EAACP,IAAI,CAAC;EAE3B,IAAInB,aAAa,CAACH,eAAe,EAAE;IACjC4B,OAAO,CAAC5B,eAAe,GAAGG,aAAa,CAACH,eAAe;EACzD;EAEA,OAAO4B,OAAO;AAChB,CAAC;;AAED;AACA;AACA;AACA,MAAME,eAAe,GAAG,CACtB/B,GAAW,EACXuB,IAA4B,EAC5BnB,aAAqB,KACH;EAClB,MAAM4B,oBAAoB,GAAGV,mBAAmB,CAACtB,GAAG,EAAEuB,IAAI,EAAEnB,aAAa,CAAC;EAC1E,MAAM6B,WAAW,GAAGL,UAAU,CAAC5B,GAAG,EAAEuB,IAAI,EAAEnB,aAAa,CAAC;EAExD,MAAM8B,KAAK,GAAG/B,iBAAiB,CAAC6B,oBAAoB,CAAC;EAErD,IAAI,CAACE,KAAK,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;EACzC;EAEA,MAAMC,YAAY,GAAG1C,eAAe,CAACsC,oBAAoB,CAACrC,QAAQ,IAAI,EAAE,CAAC;EACzE,MAAM0C,UAAU,GAAG,IAAIC,4BAAmB,CACxCL,WAAW,EACXjC,GAAG,EACHoC,YAAY,CACb,CAACG,OAAO,EAAE;EAEX,MAAMC,SAAS,GAAG,IAAIN,KAAK,CAACG,UAAU,EAAEL,oBAAoB,CAAC;EAE7D,OAAOS,iCAAwB,CAACC,kBAAkB,CAACF,SAAS,CAAC;AAC/D,CAAC;AAAC,eAEaT,eAAe;AAAA"}
@@ -11,8 +11,7 @@ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
11
11
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
12
12
  var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
14
- var _clone = _interopRequireDefault(require("lodash/clone"));
15
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
14
+ var _full = require("klona/full");
16
15
  /**
17
16
  * Base class for collections of models
18
17
  */
@@ -177,15 +176,10 @@ class BaseCollection {
177
176
  }
178
177
 
179
178
  /**
180
- * Returns a clone of the model (this is not a deep copy)
179
+ * Returns a clone of the model
181
180
  */
182
181
  clone() {
183
- let deepcopy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
184
- // deepcopy can be expensive, use with care!
185
- if (deepcopy) {
186
- return (0, _cloneDeep.default)(this);
187
- }
188
- return (0, _clone.default)(this);
182
+ return (0, _full.klona)(this);
189
183
  }
190
184
  }
191
185
  var _default = BaseCollection;
@@ -1,6 +1,5 @@
1
1
  // @flow
2
- import clone from "lodash/clone";
3
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
4
3
 
5
4
  /**
6
5
  * Base class for collections of models
@@ -182,15 +181,10 @@ class BaseCollection<T> {
182
181
  }
183
182
 
184
183
  /**
185
- * Returns a clone of the model (this is not a deep copy)
184
+ * Returns a clone of the model
186
185
  */
187
- clone(deepcopy: boolean = false): this {
188
- // deepcopy can be expensive, use with care!
189
- if (deepcopy) {
190
- return cloneDeep(this);
191
- }
192
-
193
- return clone(this);
186
+ clone(): this {
187
+ return klona(this);
194
188
  }
195
189
  }
196
190
 
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCollection.js","names":["BaseCollection","constructor","initCollection","collection","_collection","add","items","all","Array","isArray","removeByIndex","itemIndex","hasItems","length","isEmpty","size","first","last","get","index","find","callbackfn","thisArg","filter","some","every","map","forEach","sort","compareFn","sorted","clone","deepcopy","cloneDeep"],"sources":["../../../src/models/base/BaseCollection.js"],"sourcesContent":["// @flow\nimport clone from \"lodash/clone\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\n/**\n * Base class for collections of models\n */\nclass BaseCollection<T> {\n _collection: Array<T>;\n\n /**\n * Construct base collection\n */\n constructor(initCollection: Array<T> = []) {\n this.collection = initCollection;\n }\n\n /**\n * Retrieve current collection\n */\n get collection(): Array<T> {\n return this._collection;\n }\n\n /**\n * Replace current collection with a new collection\n */\n set collection(collection: Array<T>) {\n this._collection = collection;\n }\n\n /**\n * Add an other collection, array of items or single item to this collection;\n */\n add(items: BaseCollection<T> | Array<T> | T): BaseCollection<T> {\n if (items instanceof BaseCollection) {\n this.collection = [...this.collection, ...items.all];\n } else if (Array.isArray(items)) {\n // $FlowExpectedError[incompatible-type]\n this.collection = [...this.collection, ...items];\n } else {\n this.collection = [...this.collection, items];\n }\n\n return this;\n }\n\n /**\n * Remove an item from the collection by it's index.\n */\n removeByIndex(itemIndex: number) {\n if (itemIndex > -1) {\n this.collection = [\n ...this.collection.slice(0, itemIndex),\n ...this.collection.slice(itemIndex + 1),\n ];\n }\n }\n\n /**\n * Indicates if the collection has items\n */\n get hasItems(): boolean {\n return this.length > 0;\n }\n\n /**\n * Indicates if collection is empty\n */\n get isEmpty(): boolean {\n return !this.hasItems;\n }\n\n /**\n * Retrieve all items in collection\n */\n get all(): Array<T> {\n return this.collection;\n }\n\n /**\n * Get the size of this collection\n */\n get size(): number {\n return this.length;\n }\n\n /**\n * Get the size of this collection\n */\n get length(): number {\n return this.collection.length;\n }\n\n /**\n * Return first link in collection\n */\n get first(): T | null {\n return this.collection[0] ?? null;\n }\n\n /**\n */\n get last(): T | null {\n return this.collection[this.collection.length - 1] ?? null;\n }\n\n /**\n */\n get(index: number): T | null {\n return this.collection[index] ?? null;\n }\n\n /**\n * Find item\n */\n find(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): T | null {\n return this.collection.find(callbackfn, thisArg) ?? null;\n }\n\n /**\n * Filter items\n */\n filter(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): Array<T> {\n return this.collection.filter(callbackfn, thisArg);\n }\n\n /**\n * Check if at least one item occurs\n */\n some(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.some(callbackfn, thisArg);\n }\n\n /**\n */\n every(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.every(callbackfn, thisArg);\n }\n\n /**\n */\n map<U>(\n callbackfn: (value: T, index: number, array: Array<T>) => U,\n thisArg?: T\n ): Array<U> {\n return this.collection.map<U, ?T>(callbackfn, thisArg);\n }\n\n /**\n */\n forEach(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ) {\n this.collection.forEach(callbackfn, thisArg);\n }\n\n /**\n */\n sort(compareFn?: (a: T, b: T) => number): Array<T> {\n return this.collection.sort(compareFn);\n }\n\n /**\n * Retrieve an alphabetically sorted array of items\n */\n get sorted(): Array<T> {\n return this.collection.sort();\n }\n\n /**\n * Returns a clone of the model (this is not a deep copy)\n */\n clone(deepcopy: boolean = false): this {\n // deepcopy can be expensive, use with care!\n if (deepcopy) {\n return cloneDeep(this);\n }\n\n return clone(this);\n }\n}\n\nexport default BaseCollection;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaseCollection.js","names":["BaseCollection","constructor","initCollection","collection","_collection","add","items","all","Array","isArray","removeByIndex","itemIndex","hasItems","length","isEmpty","size","first","last","get","index","find","callbackfn","thisArg","filter","some","every","map","forEach","sort","compareFn","sorted","clone","klona"],"sources":["../../../src/models/base/BaseCollection.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\n/**\n * Base class for collections of models\n */\nclass BaseCollection<T> {\n _collection: Array<T>;\n\n /**\n * Construct base collection\n */\n constructor(initCollection: Array<T> = []) {\n this.collection = initCollection;\n }\n\n /**\n * Retrieve current collection\n */\n get collection(): Array<T> {\n return this._collection;\n }\n\n /**\n * Replace current collection with a new collection\n */\n set collection(collection: Array<T>) {\n this._collection = collection;\n }\n\n /**\n * Add an other collection, array of items or single item to this collection;\n */\n add(items: BaseCollection<T> | Array<T> | T): BaseCollection<T> {\n if (items instanceof BaseCollection) {\n this.collection = [...this.collection, ...items.all];\n } else if (Array.isArray(items)) {\n // $FlowExpectedError[incompatible-type]\n this.collection = [...this.collection, ...items];\n } else {\n this.collection = [...this.collection, items];\n }\n\n return this;\n }\n\n /**\n * Remove an item from the collection by it's index.\n */\n removeByIndex(itemIndex: number) {\n if (itemIndex > -1) {\n this.collection = [\n ...this.collection.slice(0, itemIndex),\n ...this.collection.slice(itemIndex + 1),\n ];\n }\n }\n\n /**\n * Indicates if the collection has items\n */\n get hasItems(): boolean {\n return this.length > 0;\n }\n\n /**\n * Indicates if collection is empty\n */\n get isEmpty(): boolean {\n return !this.hasItems;\n }\n\n /**\n * Retrieve all items in collection\n */\n get all(): Array<T> {\n return this.collection;\n }\n\n /**\n * Get the size of this collection\n */\n get size(): number {\n return this.length;\n }\n\n /**\n * Get the size of this collection\n */\n get length(): number {\n return this.collection.length;\n }\n\n /**\n * Return first link in collection\n */\n get first(): T | null {\n return this.collection[0] ?? null;\n }\n\n /**\n */\n get last(): T | null {\n return this.collection[this.collection.length - 1] ?? null;\n }\n\n /**\n */\n get(index: number): T | null {\n return this.collection[index] ?? null;\n }\n\n /**\n * Find item\n */\n find(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): T | null {\n return this.collection.find(callbackfn, thisArg) ?? null;\n }\n\n /**\n * Filter items\n */\n filter(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): Array<T> {\n return this.collection.filter(callbackfn, thisArg);\n }\n\n /**\n * Check if at least one item occurs\n */\n some(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.some(callbackfn, thisArg);\n }\n\n /**\n */\n every(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ): boolean {\n return this.collection.every(callbackfn, thisArg);\n }\n\n /**\n */\n map<U>(\n callbackfn: (value: T, index: number, array: Array<T>) => U,\n thisArg?: T\n ): Array<U> {\n return this.collection.map<U, ?T>(callbackfn, thisArg);\n }\n\n /**\n */\n forEach(\n callbackfn: (value: T, index: number, array: Array<T>) => any,\n thisArg?: any\n ) {\n this.collection.forEach(callbackfn, thisArg);\n }\n\n /**\n */\n sort(compareFn?: (a: T, b: T) => number): Array<T> {\n return this.collection.sort(compareFn);\n }\n\n /**\n * Retrieve an alphabetically sorted array of items\n */\n get sorted(): Array<T> {\n return this.collection.sort();\n }\n\n /**\n * Returns a clone of the model\n */\n clone(): this {\n return klona(this);\n }\n}\n\nexport default BaseCollection;\n"],"mappings":"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"}
@@ -7,8 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
10
- var _clone = _interopRequireDefault(require("lodash/clone"));
11
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
10
+ var _full = require("klona/full");
12
11
  var _LayoutHintCollection = _interopRequireDefault(require("../layouthint/LayoutHintCollection"));
13
12
  /**
14
13
  * Base model, this is the foundation of a model,
@@ -117,12 +116,7 @@ class BaseModel {
117
116
  * Returns a clone of the model
118
117
  */
119
118
  clone() {
120
- let deepcopy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
121
- // deepcopy can be expensive, use with care!
122
- if (deepcopy) {
123
- return (0, _cloneDeep.default)(this);
124
- }
125
- return (0, _clone.default)(this);
119
+ return (0, _full.klona)(this);
126
120
  }
127
121
  }
128
122
  var _default = BaseModel;
@@ -1,6 +1,5 @@
1
1
  // @flow
2
- import clone from "lodash/clone";
3
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
4
3
 
5
4
  import LayoutHintCollection from "../layouthint/LayoutHintCollection";
6
5
 
@@ -118,13 +117,8 @@ class BaseModel {
118
117
  /**
119
118
  * Returns a clone of the model
120
119
  */
121
- clone(deepcopy: boolean = false): any {
122
- // deepcopy can be expensive, use with care!
123
- if (deepcopy) {
124
- return cloneDeep(this);
125
- }
126
-
127
- return clone(this);
120
+ clone(): any {
121
+ return klona(this);
128
122
  }
129
123
  }
130
124
 
@@ -1 +1 @@
1
- {"version":3,"file":"BaseModel.js","names":["BaseModel","constructor","data","contributions","_data","_contributions","_layouthint","LayoutHintCollection","getContribution","getData","propName","defaultValue","layouthint","hasData","length","connectKey","key","_connectKey","dehydrate","rehydrate","clone","deepcopy","cloneDeep"],"sources":["../../../src/models/base/BaseModel.js"],"sourcesContent":["// @flow\nimport clone from \"lodash/clone\";\nimport cloneDeep from \"lodash/cloneDeep\";\n\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\nexport type BaseDehydrateData = {\n +data: Object,\n +contributions: Object,\n connectKey: string,\n ...\n};\n\n/**\n * Base model, this is the foundation of a model,\n * it contains data that is needed for all models like, data, contributions and layout hint\n *\n * Extend this for non modular ui resources, for modular ui resource start with the resourceModel\n */\nclass BaseModel {\n _data: Object;\n _contributions: Object;\n _layouthint: LayoutHintCollection;\n _connectKey: string;\n\n /**\n * constructor\n */\n constructor(data: Object, contributions: Object) {\n this._data = data;\n this._contributions = contributions;\n this._layouthint = new LayoutHintCollection(\n this.getContribution(\"layouthint\", [])\n );\n }\n\n /**\n * Retrieve data\n */\n get data(): Object {\n return this._data || {};\n }\n\n /**\n * Retrieve property from the data object of the model, mostly used internal\n */\n getData(propName: string, defaultValue: any = null): any {\n return this.data[propName] ?? defaultValue;\n }\n\n /**\n * Retrieve contributions\n */\n get contributions(): Object {\n return this._contributions || {};\n }\n\n /**\n * Retrieve property from the contributions of the model, mostly used internal\n */\n getContribution(propName: string, defaultValue: any = null): any {\n return this.contributions[propName] ?? defaultValue;\n }\n\n /**\n * Getting the layouthint\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n * Set the layouthint\n */\n set layouthint(layouthint: Array<string>) {\n this._layouthint = new LayoutHintCollection(layouthint);\n }\n\n /**\n * Indicates if the model has data\n */\n get hasData(): boolean {\n return Object.keys(this.data).length > 0;\n }\n\n /**\n * Set the unique key for this model\n */\n set connectKey(key: string) {\n this._connectKey = key;\n }\n\n /**\n * Get the unique key of this model\n */\n get connectKey(): string {\n return this._connectKey;\n }\n\n /**\n * Dehydrate internal data, returns the information that is needed to recreate the model\n */\n dehydrate(): BaseDehydrateData {\n return {\n data: this._data,\n contributions: this._contributions,\n connectKey: this._connectKey,\n };\n }\n\n /**\n * Recreate the model with the given data\n */\n rehydrate(data: BaseDehydrateData) {\n this._connectKey = data.connectKey;\n }\n\n /**\n * Returns a clone of the model\n */\n clone(deepcopy: boolean = false): any {\n // deepcopy can be expensive, use with care!\n if (deepcopy) {\n return cloneDeep(this);\n }\n\n return clone(this);\n }\n}\n\nexport default BaseModel;\n"],"mappings":";;;;;;;;;AACA;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,SAAS,CAAC;EAMd;AACF;AACA;EACEC,WAAW,CAACC,IAAY,EAAEC,aAAqB,EAAE;IAAA;IAAA;IAAA;IAAA;IAC/C,IAAI,CAACC,KAAK,GAAGF,IAAI;IACjB,IAAI,CAACG,cAAc,GAAGF,aAAa;IACnC,IAAI,CAACG,WAAW,GAAG,IAAIC,6BAAoB,CACzC,IAAI,CAACC,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CACvC;EACH;;EAEA;AACF;AACA;EACE,IAAIN,IAAI,GAAW;IACjB,OAAO,IAAI,CAACE,KAAK,IAAI,CAAC,CAAC;EACzB;;EAEA;AACF;AACA;EACEK,OAAO,CAACC,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IAChD,OAAO,IAAI,CAACT,IAAI,CAACQ,QAAQ,CAAC,IAAIC,YAAY;EAC5C;;EAEA;AACF;AACA;EACE,IAAIR,aAAa,GAAW;IAC1B,OAAO,IAAI,CAACE,cAAc,IAAI,CAAC,CAAC;EAClC;;EAEA;AACF;AACA;EACEG,eAAe,CAACE,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IACxD,OAAO,IAAI,CAACR,aAAa,CAACO,QAAQ,CAAC,IAAIC,YAAY;EACrD;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACN,WAAW;EACzB;;EAEA;AACF;AACA;EACE,IAAIM,UAAU,CAACA,UAAyB,EAAE;IACxC,IAAI,CAACN,WAAW,GAAG,IAAIC,6BAAoB,CAACK,UAAU,CAAC;EACzD;;EAEA;AACF;AACA;EACE,IAAIC,OAAO,GAAY;IACrB,OAAO,mBAAY,IAAI,CAACX,IAAI,CAAC,CAACY,MAAM,GAAG,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACC,WAAW,GAAGD,GAAG;EACxB;;EAEA;AACF;AACA;EACE,IAAID,UAAU,GAAW;IACvB,OAAO,IAAI,CAACE,WAAW;EACzB;;EAEA;AACF;AACA;EACEC,SAAS,GAAsB;IAC7B,OAAO;MACLhB,IAAI,EAAE,IAAI,CAACE,KAAK;MAChBD,aAAa,EAAE,IAAI,CAACE,cAAc;MAClCU,UAAU,EAAE,IAAI,CAACE;IACnB,CAAC;EACH;;EAEA;AACF;AACA;EACEE,SAAS,CAACjB,IAAuB,EAAE;IACjC,IAAI,CAACe,WAAW,GAAGf,IAAI,CAACa,UAAU;EACpC;;EAEA;AACF;AACA;EACEK,KAAK,GAAiC;IAAA,IAAhCC,QAAiB,uEAAG,KAAK;IAC7B;IACA,IAAIA,QAAQ,EAAE;MACZ,OAAO,IAAAC,kBAAS,EAAC,IAAI,CAAC;IACxB;IAEA,OAAO,IAAAF,cAAK,EAAC,IAAI,CAAC;EACpB;AACF;AAAC,eAEcpB,SAAS;AAAA"}
1
+ {"version":3,"file":"BaseModel.js","names":["BaseModel","constructor","data","contributions","_data","_contributions","_layouthint","LayoutHintCollection","getContribution","getData","propName","defaultValue","layouthint","hasData","length","connectKey","key","_connectKey","dehydrate","rehydrate","clone","klona"],"sources":["../../../src/models/base/BaseModel.js"],"sourcesContent":["// @flow\nimport { klona } from \"klona/full\";\n\nimport LayoutHintCollection from \"../layouthint/LayoutHintCollection\";\n\nexport type BaseDehydrateData = {\n +data: Object,\n +contributions: Object,\n connectKey: string,\n ...\n};\n\n/**\n * Base model, this is the foundation of a model,\n * it contains data that is needed for all models like, data, contributions and layout hint\n *\n * Extend this for non modular ui resources, for modular ui resource start with the resourceModel\n */\nclass BaseModel {\n _data: Object;\n _contributions: Object;\n _layouthint: LayoutHintCollection;\n _connectKey: string;\n\n /**\n * constructor\n */\n constructor(data: Object, contributions: Object) {\n this._data = data;\n this._contributions = contributions;\n this._layouthint = new LayoutHintCollection(\n this.getContribution(\"layouthint\", [])\n );\n }\n\n /**\n * Retrieve data\n */\n get data(): Object {\n return this._data || {};\n }\n\n /**\n * Retrieve property from the data object of the model, mostly used internal\n */\n getData(propName: string, defaultValue: any = null): any {\n return this.data[propName] ?? defaultValue;\n }\n\n /**\n * Retrieve contributions\n */\n get contributions(): Object {\n return this._contributions || {};\n }\n\n /**\n * Retrieve property from the contributions of the model, mostly used internal\n */\n getContribution(propName: string, defaultValue: any = null): any {\n return this.contributions[propName] ?? defaultValue;\n }\n\n /**\n * Getting the layouthint\n */\n get layouthint(): LayoutHintCollection {\n return this._layouthint;\n }\n\n /**\n * Set the layouthint\n */\n set layouthint(layouthint: Array<string>) {\n this._layouthint = new LayoutHintCollection(layouthint);\n }\n\n /**\n * Indicates if the model has data\n */\n get hasData(): boolean {\n return Object.keys(this.data).length > 0;\n }\n\n /**\n * Set the unique key for this model\n */\n set connectKey(key: string) {\n this._connectKey = key;\n }\n\n /**\n * Get the unique key of this model\n */\n get connectKey(): string {\n return this._connectKey;\n }\n\n /**\n * Dehydrate internal data, returns the information that is needed to recreate the model\n */\n dehydrate(): BaseDehydrateData {\n return {\n data: this._data,\n contributions: this._contributions,\n connectKey: this._connectKey,\n };\n }\n\n /**\n * Recreate the model with the given data\n */\n rehydrate(data: BaseDehydrateData) {\n this._connectKey = data.connectKey;\n }\n\n /**\n * Returns a clone of the model\n */\n clone(): any {\n return klona(this);\n }\n}\n\nexport default BaseModel;\n"],"mappings":";;;;;;;;;AACA;AAEA;AASA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,SAAS,CAAC;EAMd;AACF;AACA;EACEC,WAAW,CAACC,IAAY,EAAEC,aAAqB,EAAE;IAAA;IAAA;IAAA;IAAA;IAC/C,IAAI,CAACC,KAAK,GAAGF,IAAI;IACjB,IAAI,CAACG,cAAc,GAAGF,aAAa;IACnC,IAAI,CAACG,WAAW,GAAG,IAAIC,6BAAoB,CACzC,IAAI,CAACC,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CACvC;EACH;;EAEA;AACF;AACA;EACE,IAAIN,IAAI,GAAW;IACjB,OAAO,IAAI,CAACE,KAAK,IAAI,CAAC,CAAC;EACzB;;EAEA;AACF;AACA;EACEK,OAAO,CAACC,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IAChD,OAAO,IAAI,CAACT,IAAI,CAACQ,QAAQ,CAAC,IAAIC,YAAY;EAC5C;;EAEA;AACF;AACA;EACE,IAAIR,aAAa,GAAW;IAC1B,OAAO,IAAI,CAACE,cAAc,IAAI,CAAC,CAAC;EAClC;;EAEA;AACF;AACA;EACEG,eAAe,CAACE,QAAgB,EAAiC;IAAA,IAA/BC,YAAiB,uEAAG,IAAI;IACxD,OAAO,IAAI,CAACR,aAAa,CAACO,QAAQ,CAAC,IAAIC,YAAY;EACrD;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,GAAyB;IACrC,OAAO,IAAI,CAACN,WAAW;EACzB;;EAEA;AACF;AACA;EACE,IAAIM,UAAU,CAACA,UAAyB,EAAE;IACxC,IAAI,CAACN,WAAW,GAAG,IAAIC,6BAAoB,CAACK,UAAU,CAAC;EACzD;;EAEA;AACF;AACA;EACE,IAAIC,OAAO,GAAY;IACrB,OAAO,mBAAY,IAAI,CAACX,IAAI,CAAC,CAACY,MAAM,GAAG,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,IAAIC,UAAU,CAACC,GAAW,EAAE;IAC1B,IAAI,CAACC,WAAW,GAAGD,GAAG;EACxB;;EAEA;AACF;AACA;EACE,IAAID,UAAU,GAAW;IACvB,OAAO,IAAI,CAACE,WAAW;EACzB;;EAEA;AACF;AACA;EACEC,SAAS,GAAsB;IAC7B,OAAO;MACLhB,IAAI,EAAE,IAAI,CAACE,KAAK;MAChBD,aAAa,EAAE,IAAI,CAACE,cAAc;MAClCU,UAAU,EAAE,IAAI,CAACE;IACnB,CAAC;EACH;;EAEA;AACF;AACA;EACEE,SAAS,CAACjB,IAAuB,EAAE;IACjC,IAAI,CAACe,WAAW,GAAGf,IAAI,CAACa,UAAU;EACpC;;EAEA;AACF;AACA;EACEK,KAAK,GAAQ;IACX,OAAO,IAAAC,WAAK,EAAC,IAAI,CAAC;EACpB;AACF;AAAC,eAEcrB,SAAS;AAAA"}
@@ -11,7 +11,8 @@ describe("baseModel", () => {
11
11
  expect(model.contributions).toStrictEqual({});
12
12
  expect(model.hasData).toBeFalsy();
13
13
 
14
- expect(model.clone()).toStrictEqual(model);
14
+ const clonedModel = model.clone();
15
+ expect(clonedModel).toStrictEqual(model);
15
16
  });
16
17
 
17
18
  it("should handle data without contributions", () => {
@@ -72,12 +73,7 @@ describe("baseModel", () => {
72
73
  },
73
74
  });
74
75
 
75
- const shallowClone = model.clone();
76
- expect(model).not.toBe(shallowClone);
77
- expect(model.data.prop).toBe(shallowClone.data.prop);
78
- expect(model.data.prop.child).toBe(shallowClone.data.prop.child);
79
-
80
- const deepClone = model.clone(true);
76
+ const deepClone = model.clone();
81
77
  expect(model).not.toBe(deepClone);
82
78
  expect(model.data.prop === deepClone.data.prop).toBeFalsy();
83
79
  expect(model.data.prop.child).toBe(deepClone.data.prop.child);
@@ -17,7 +17,7 @@ var _FormModel = _interopRequireDefault(require("../../models/form/FormModel"));
17
17
  const updateValidations = (form, formWithValidations) => (dispatch, getState) => {
18
18
  const currentForm = getState().modularui[form.connectKey];
19
19
  if (currentForm) {
20
- const validatedForm = currentForm.model.clone(true);
20
+ const validatedForm = currentForm.model.clone();
21
21
  if (validatedForm instanceof _FormModel.default) {
22
22
  validatedForm.updateValidations(formWithValidations.data);
23
23
  }
@@ -25,7 +25,7 @@ const updateValidations =
25
25
  const currentForm = getState().modularui[form.connectKey];
26
26
 
27
27
  if (currentForm) {
28
- const validatedForm = currentForm.model.clone(true);
28
+ const validatedForm = currentForm.model.clone();
29
29
  if (validatedForm instanceof FormModel) {
30
30
  validatedForm.updateValidations(formWithValidations.data);
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormValidations.js","names":["updateValidations","form","formWithValidations","dispatch","getState","currentForm","modularui","connectKey","validatedForm","model","clone","FormModel","data","updateModel","debouncedValidateFormObject","debounce","ModularUIRequest","selfhref","setParameter","method","HTTP_METHODS","POST","validationData","childmodels","isValidationRequest","locale","fetch","then","VALIDATE_DEBOUNCE_TIMEOUT","leading","trailing","validateFormObject"],"sources":["../../../src/redux/actions/FormValidations.js"],"sourcesContent":["// @flow\nimport debounce from \"lodash/debounce\";\n\nimport { updateModel } from \"../_modularui/ModularUIActions\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport {\n HTTP_METHODS,\n VALIDATE_DEBOUNCE_TIMEOUT,\n} from \"../../constants/Constants\";\n\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type { ModularUIModel } from \"../../models\";\n\n/**\n * Update validations of the form currently in the reducer\n * because of the debounce timeout there might have been an update on the form during validation\n */\nconst updateValidations =\n (form: FormModel, formWithValidations: ModularUIModel) =>\n (dispatch: Dispatch, getState: GetState) => {\n const currentForm = getState().modularui[form.connectKey];\n\n if (currentForm) {\n const validatedForm = currentForm.model.clone(true);\n if (validatedForm instanceof FormModel) {\n validatedForm.updateValidations(formWithValidations.data);\n }\n\n dispatch(updateModel(validatedForm));\n }\n };\n\n/**\n * Validates form objects debounced to prevent overloading the (form) service\n * When a form with new errors (or complete) arrives, we send the validations\n * to the current form model where the errors are processed\n * A new form with the new constraints is send to the store\n */\nconst debouncedValidateFormObject = debounce<\n (dispatch: Dispatch, form: FormModel) => void\n>(\n (dispatch, form: FormModel) => {\n new ModularUIRequest(form.selfhref.setParameter(\"commit\", \"false\"), {\n method: HTTP_METHODS.POST,\n data: form.validationData,\n childmodels: false,\n isValidationRequest: true,\n locale: form.locale,\n })\n .fetch()\n .then((formWithValidations) =>\n dispatch(updateValidations(form, formWithValidations))\n );\n },\n VALIDATE_DEBOUNCE_TIMEOUT,\n {\n leading: true,\n trailing: true,\n }\n);\n\n/**\n */\nexport const validateFormObject =\n (form: FormModel): ThunkAction =>\n (dispatch) =>\n debouncedValidateFormObject(dispatch, form);\n"],"mappings":";;;;;;;AACA;AAEA;AAEA;AAEA;AAKA;AAKA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,GACrB,CAACC,IAAe,EAAEC,mBAAmC,KACrD,CAACC,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,MAAMC,WAAW,GAAGD,QAAQ,EAAE,CAACE,SAAS,CAACL,IAAI,CAACM,UAAU,CAAC;EAEzD,IAAIF,WAAW,EAAE;IACf,MAAMG,aAAa,GAAGH,WAAW,CAACI,KAAK,CAACC,KAAK,CAAC,IAAI,CAAC;IACnD,IAAIF,aAAa,YAAYG,kBAAS,EAAE;MACtCH,aAAa,CAACR,iBAAiB,CAACE,mBAAmB,CAACU,IAAI,CAAC;IAC3D;IAEAT,QAAQ,CAAC,IAAAU,6BAAW,EAACL,aAAa,CAAC,CAAC;EACtC;AACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,2BAA2B,GAAG,IAAAC,iBAAQ,EAG1C,CAACZ,QAAQ,EAAEF,IAAe,KAAK;EAC7B,IAAIe,yBAAgB,CAACf,IAAI,CAACgB,QAAQ,CAACC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;IAClEC,MAAM,EAAEC,uBAAY,CAACC,IAAI;IACzBT,IAAI,EAAEX,IAAI,CAACqB,cAAc;IACzBC,WAAW,EAAE,KAAK;IAClBC,mBAAmB,EAAE,IAAI;IACzBC,MAAM,EAAExB,IAAI,CAACwB;EACf,CAAC,CAAC,CACCC,KAAK,EAAE,CACPC,IAAI,CAAEzB,mBAAmB,IACxBC,QAAQ,CAACH,iBAAiB,CAACC,IAAI,EAAEC,mBAAmB,CAAC,CAAC,CACvD;AACL,CAAC,EACD0B,oCAAyB,EACzB;EACEC,OAAO,EAAE,IAAI;EACbC,QAAQ,EAAE;AACZ,CAAC,CACF;;AAED;AACA;AACO,MAAMC,kBAAkB,GAC5B9B,IAAe,IACfE,QAAQ,IACPW,2BAA2B,CAACX,QAAQ,EAAEF,IAAI,CAAC;AAAC"}
1
+ {"version":3,"file":"FormValidations.js","names":["updateValidations","form","formWithValidations","dispatch","getState","currentForm","modularui","connectKey","validatedForm","model","clone","FormModel","data","updateModel","debouncedValidateFormObject","debounce","ModularUIRequest","selfhref","setParameter","method","HTTP_METHODS","POST","validationData","childmodels","isValidationRequest","locale","fetch","then","VALIDATE_DEBOUNCE_TIMEOUT","leading","trailing","validateFormObject"],"sources":["../../../src/redux/actions/FormValidations.js"],"sourcesContent":["// @flow\nimport debounce from \"lodash/debounce\";\n\nimport { updateModel } from \"../_modularui/ModularUIActions\";\n\nimport ModularUIRequest from \"../../modularui/ModularUIRequest\";\n\nimport {\n HTTP_METHODS,\n VALIDATE_DEBOUNCE_TIMEOUT,\n} from \"../../constants/Constants\";\n\nimport FormModel from \"../../models/form/FormModel\";\n\nimport type { Dispatch, GetState, ThunkAction } from \"../types\";\nimport type { ModularUIModel } from \"../../models\";\n\n/**\n * Update validations of the form currently in the reducer\n * because of the debounce timeout there might have been an update on the form during validation\n */\nconst updateValidations =\n (form: FormModel, formWithValidations: ModularUIModel) =>\n (dispatch: Dispatch, getState: GetState) => {\n const currentForm = getState().modularui[form.connectKey];\n\n if (currentForm) {\n const validatedForm = currentForm.model.clone();\n if (validatedForm instanceof FormModel) {\n validatedForm.updateValidations(formWithValidations.data);\n }\n\n dispatch(updateModel(validatedForm));\n }\n };\n\n/**\n * Validates form objects debounced to prevent overloading the (form) service\n * When a form with new errors (or complete) arrives, we send the validations\n * to the current form model where the errors are processed\n * A new form with the new constraints is send to the store\n */\nconst debouncedValidateFormObject = debounce<\n (dispatch: Dispatch, form: FormModel) => void\n>(\n (dispatch, form: FormModel) => {\n new ModularUIRequest(form.selfhref.setParameter(\"commit\", \"false\"), {\n method: HTTP_METHODS.POST,\n data: form.validationData,\n childmodels: false,\n isValidationRequest: true,\n locale: form.locale,\n })\n .fetch()\n .then((formWithValidations) =>\n dispatch(updateValidations(form, formWithValidations))\n );\n },\n VALIDATE_DEBOUNCE_TIMEOUT,\n {\n leading: true,\n trailing: true,\n }\n);\n\n/**\n */\nexport const validateFormObject =\n (form: FormModel): ThunkAction =>\n (dispatch) =>\n debouncedValidateFormObject(dispatch, form);\n"],"mappings":";;;;;;;AACA;AAEA;AAEA;AAEA;AAKA;AAKA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,GACrB,CAACC,IAAe,EAAEC,mBAAmC,KACrD,CAACC,QAAkB,EAAEC,QAAkB,KAAK;EAC1C,MAAMC,WAAW,GAAGD,QAAQ,EAAE,CAACE,SAAS,CAACL,IAAI,CAACM,UAAU,CAAC;EAEzD,IAAIF,WAAW,EAAE;IACf,MAAMG,aAAa,GAAGH,WAAW,CAACI,KAAK,CAACC,KAAK,EAAE;IAC/C,IAAIF,aAAa,YAAYG,kBAAS,EAAE;MACtCH,aAAa,CAACR,iBAAiB,CAACE,mBAAmB,CAACU,IAAI,CAAC;IAC3D;IAEAT,QAAQ,CAAC,IAAAU,6BAAW,EAACL,aAAa,CAAC,CAAC;EACtC;AACF,CAAC;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,MAAMM,2BAA2B,GAAG,IAAAC,iBAAQ,EAG1C,CAACZ,QAAQ,EAAEF,IAAe,KAAK;EAC7B,IAAIe,yBAAgB,CAACf,IAAI,CAACgB,QAAQ,CAACC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;IAClEC,MAAM,EAAEC,uBAAY,CAACC,IAAI;IACzBT,IAAI,EAAEX,IAAI,CAACqB,cAAc;IACzBC,WAAW,EAAE,KAAK;IAClBC,mBAAmB,EAAE,IAAI;IACzBC,MAAM,EAAExB,IAAI,CAACwB;EACf,CAAC,CAAC,CACCC,KAAK,EAAE,CACPC,IAAI,CAAEzB,mBAAmB,IACxBC,QAAQ,CAACH,iBAAiB,CAACC,IAAI,EAAEC,mBAAmB,CAAC,CAAC,CACvD;AACL,CAAC,EACD0B,oCAAyB,EACzB;EACEC,OAAO,EAAE,IAAI;EACbC,QAAQ,EAAE;AACZ,CAAC,CACF;;AAED;AACA;AACO,MAAMC,kBAAkB,GAC5B9B,IAAe,IACfE,QAAQ,IACPW,2BAA2B,CAACX,QAAQ,EAAEF,IAAI,CAAC;AAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beinformed/ui",
3
- "version": "1.27.1",
3
+ "version": "1.27.2",
4
4
  "description": "Toolbox for be informed javascript layouts",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "bugs": "http://support.beinformed.com",
@@ -85,7 +85,7 @@
85
85
  "@babel/runtime-corejs3": "^7.20.13",
86
86
  "big.js": "^6.2.1",
87
87
  "date-fns": "^2.29.3",
88
- "deepmerge": "^4.2.2",
88
+ "deepmerge": "^4.3.0",
89
89
  "dequal": "^2.0.3",
90
90
  "element-closest": "^3.0.2",
91
91
  "file-size": "^1.0.0",
@@ -94,6 +94,7 @@
94
94
  "he": "^1.2.0",
95
95
  "iban": "^0.0.14",
96
96
  "js-cookie": "^3.0.1",
97
+ "klona": "^2.0.6",
97
98
  "lodash": "^4.17.21",
98
99
  "reselect": "^4.1.7",
99
100
  "setimmediate": "^1.0.5"
@@ -113,29 +114,29 @@
113
114
  "@commitlint/config-conventional": "^17.4.2",
114
115
  "@testing-library/react": "^13.4.0",
115
116
  "auditjs": "^4.0.39",
116
- "babel-jest": "^29.4.0",
117
+ "babel-jest": "^29.4.1",
117
118
  "babel-plugin-styled-components": "^2.0.7",
118
119
  "cherry-pick": "^0.5.0",
119
120
  "cross-env": "^7.0.3",
120
121
  "documentation": "^14.0.1",
121
- "eslint": "^8.32.0",
122
+ "eslint": "^8.33.0",
122
123
  "eslint-config-prettier": "^8.6.0",
123
124
  "eslint-plugin-babel": "^5.3.1",
124
125
  "eslint-plugin-ft-flow": "^2.0.3",
125
126
  "eslint-plugin-import": "^2.27.5",
126
127
  "eslint-plugin-jest": "^27.2.1",
127
- "eslint-plugin-jsdoc": "^39.6.8",
128
- "eslint-plugin-react": "^7.32.1",
128
+ "eslint-plugin-jsdoc": "^39.7.4",
129
+ "eslint-plugin-react": "^7.32.2",
129
130
  "eslint-plugin-react-hooks": "^4.5.0",
130
131
  "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0",
131
- "flow-bin": "^0.198.1",
132
+ "flow-bin": "^0.198.2",
132
133
  "flow-copy-source": "^2.0.9",
133
134
  "flow-typed": "^3.8.0",
134
135
  "glob": "^8.1.0",
135
136
  "history": "^4.0.0",
136
137
  "husky": "^8.0.3",
137
- "jest": "^29.4.0",
138
- "jest-environment-jsdom": "^29.4.0",
138
+ "jest": "^29.4.1",
139
+ "jest-environment-jsdom": "^29.4.1",
139
140
  "jest-junit": "^15.0.0",
140
141
  "jest-sonar-reporter": "^2.0.0",
141
142
  "jscodeshift": "^0.14.0",
@@ -148,7 +149,7 @@
148
149
  "react-redux": "^8.0.5",
149
150
  "react-router": "^5.0.0",
150
151
  "react-test-renderer": "^18.1.0",
151
- "redux": "^4.0.0",
152
+ "redux": "^4.2.1",
152
153
  "redux-mock-store": "^1.5.4",
153
154
  "redux-thunk": "^2.4.2",
154
155
  "rimraf": "^4.1.2",
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
3
3
  import pick from "lodash/pick";
4
4
 
5
5
  import { has, isPlainObject } from "../../utils/helpers/objects";
@@ -33,7 +33,7 @@ class AttributeDataHelper {
33
33
  ) || {};
34
34
  this._value = this.getValue(this._attribute);
35
35
  } else {
36
- const attributeData = cloneDeep(data);
36
+ const attributeData = klona(data);
37
37
  attributeData._links = pick(data._links, [
38
38
  "concept",
39
39
  "download",
@@ -130,6 +130,9 @@ describe("choiceAttributeModel", () => {
130
130
  expect(attribute.format).toBeNull();
131
131
 
132
132
  expect(attribute.options).toHaveLength(4);
133
+
134
+ const clonedAttribute = attribute.clone();
135
+ expect(clonedAttribute).toStrictEqual(attribute);
133
136
  });
134
137
 
135
138
  it("handles sort-options hint", () => {
@@ -202,6 +202,9 @@ describe("compositeAttributeModel", () => {
202
202
  PrintingHouse: "Printers united",
203
203
  Title: "Matilda",
204
204
  });
205
+
206
+ const clonedAttribute = attribute.clone();
207
+ expect(clonedAttribute).toStrictEqual(attribute);
205
208
  });
206
209
 
207
210
  it("creates a composite attribute for a choice attribute with a table codemap on a list, multiple choice", () => {
@@ -1,5 +1,5 @@
1
1
  // @flow
2
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
3
3
 
4
4
  import { has, isPlainObject } from "../../utils/helpers/objects";
5
5
 
@@ -105,7 +105,7 @@ const updateData = (
105
105
  data: Object,
106
106
  contributions: Object
107
107
  ): Object => {
108
- const newData = cloneDeep(data);
108
+ const newData = klona(data);
109
109
 
110
110
  if (contributions.dynamicschemaId) {
111
111
  newData.dynamicschemaId = contributions.dynamicschemaId;
@@ -1,6 +1,5 @@
1
1
  // @flow
2
- import clone from "lodash/clone";
3
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
4
3
 
5
4
  /**
6
5
  * Base class for collections of models
@@ -182,15 +181,10 @@ class BaseCollection<T> {
182
181
  }
183
182
 
184
183
  /**
185
- * Returns a clone of the model (this is not a deep copy)
184
+ * Returns a clone of the model
186
185
  */
187
- clone(deepcopy: boolean = false): this {
188
- // deepcopy can be expensive, use with care!
189
- if (deepcopy) {
190
- return cloneDeep(this);
191
- }
192
-
193
- return clone(this);
186
+ clone(): this {
187
+ return klona(this);
194
188
  }
195
189
  }
196
190
 
@@ -1,6 +1,5 @@
1
1
  // @flow
2
- import clone from "lodash/clone";
3
- import cloneDeep from "lodash/cloneDeep";
2
+ import { klona } from "klona/full";
4
3
 
5
4
  import LayoutHintCollection from "../layouthint/LayoutHintCollection";
6
5
 
@@ -118,13 +117,8 @@ class BaseModel {
118
117
  /**
119
118
  * Returns a clone of the model
120
119
  */
121
- clone(deepcopy: boolean = false): any {
122
- // deepcopy can be expensive, use with care!
123
- if (deepcopy) {
124
- return cloneDeep(this);
125
- }
126
-
127
- return clone(this);
120
+ clone(): any {
121
+ return klona(this);
128
122
  }
129
123
  }
130
124
 
@@ -11,7 +11,8 @@ describe("baseModel", () => {
11
11
  expect(model.contributions).toStrictEqual({});
12
12
  expect(model.hasData).toBeFalsy();
13
13
 
14
- expect(model.clone()).toStrictEqual(model);
14
+ const clonedModel = model.clone();
15
+ expect(clonedModel).toStrictEqual(model);
15
16
  });
16
17
 
17
18
  it("should handle data without contributions", () => {
@@ -72,12 +73,7 @@ describe("baseModel", () => {
72
73
  },
73
74
  });
74
75
 
75
- const shallowClone = model.clone();
76
- expect(model).not.toBe(shallowClone);
77
- expect(model.data.prop).toBe(shallowClone.data.prop);
78
- expect(model.data.prop.child).toBe(shallowClone.data.prop.child);
79
-
80
- const deepClone = model.clone(true);
76
+ const deepClone = model.clone();
81
77
  expect(model).not.toBe(deepClone);
82
78
  expect(model.data.prop === deepClone.data.prop).toBeFalsy();
83
79
  expect(model.data.prop.child).toBe(deepClone.data.prop.child);
@@ -25,7 +25,7 @@ const updateValidations =
25
25
  const currentForm = getState().modularui[form.connectKey];
26
26
 
27
27
  if (currentForm) {
28
- const validatedForm = currentForm.model.clone(true);
28
+ const validatedForm = currentForm.model.clone();
29
29
  if (validatedForm instanceof FormModel) {
30
30
  validatedForm.updateValidations(formWithValidations.data);
31
31
  }
@@ -83,7 +83,7 @@ declare class BaseCollection<T> {
83
83
  */
84
84
  get sorted(): T[];
85
85
  /**
86
- * Returns a clone of the model (this is not a deep copy)
86
+ * Returns a clone of the model
87
87
  */
88
- clone(deepcopy?: boolean): this;
88
+ clone(): this;
89
89
  }
@@ -62,6 +62,6 @@ declare class BaseModel {
62
62
  /**
63
63
  * Returns a clone of the model
64
64
  */
65
- clone(deepcopy?: boolean): any;
65
+ clone(): any;
66
66
  }
67
67
  import LayoutHintCollection from "../layouthint/LayoutHintCollection";