@icure/form 3.0.2 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarn/cache/@icure-cardinal-sdk-npm-1.3.0-ts-2-d77151b3e6-86e1497829.zip +0 -0
- package/.yarn/cache/{@icure-motss-app-datepicker-npm-6.0.0-rc.36-66219db2d1-5f34375d97.zip → @icure-motss-app-datepicker-npm-6.0.0-rc.39-d00d21c35a-eefaed31a8.zip} +0 -0
- package/.yarn/cache/@js-joda-core-npm-3.2.0-d2526290e9-64625c2f22.zip +0 -0
- package/.yarn/cache/@types-linkify-it-npm-5.0.0-576a16b976-ec98e03aa8.zip +0 -0
- package/.yarn/cache/@types-markdown-it-npm-14.1.2-d0c4e12c49-ad66e0b377.zip +0 -0
- package/.yarn/cache/@types-mdurl-npm-2.0.0-2f4116c0b0-78746e96c6.zip +0 -0
- package/.yarn/cache/format-util-npm-1.0.5-a524ca953a-0c8622e54a.zip +0 -0
- package/.yarn/cache/prosemirror-commands-npm-1.7.0-212f35173c-a39225d534.zip +0 -0
- package/.yarn/cache/prosemirror-history-npm-1.4.1-ad68c86bb7-90f9bf59bc.zip +0 -0
- package/.yarn/cache/prosemirror-markdown-npm-1.13.1-4de28fccea-fb5487760e.zip +0 -0
- package/.yarn/cache/prosemirror-schema-basic-npm-1.2.3-a144a1b06d-49711ec1ee.zip +0 -0
- package/.yarn/cache/prosemirror-schema-list-npm-1.5.1-7b138c5fed-6c7041e5b8.zip +0 -0
- package/.yarn/cache/prosemirror-transform-npm-1.10.3-fb23bef7a8-8cbe29501e.zip +0 -0
- package/.yarn/cache/prosemirror-view-npm-1.38.1-8cfb4ec84f-12f7f4d27f.zip +0 -0
- package/.yarn/cache/ws-npm-8.18.0-56f68bc4d6-91d4d35bc9.zip +0 -0
- package/.yarn/install-state.gz +0 -0
- package/components/common/field-with-options.js +4 -9
- package/components/common/field-with-options.js.map +1 -1
- package/components/common/field.js +21 -25
- package/components/common/field.js.map +1 -1
- package/components/common/index.js +1 -17
- package/components/common/index.js.map +1 -1
- package/components/common/metadata-buttons-bar.js +58 -62
- package/components/common/metadata-buttons-bar.js.map +1 -1
- package/components/common/styles/paths.js +10 -13
- package/components/common/styles/paths.js.map +1 -1
- package/components/common/utils.js +10 -20
- package/components/common/utils.js.map +1 -1
- package/components/icure-button/index.js +20 -24
- package/components/icure-button/index.js.map +1 -1
- package/components/icure-button-group/index.js +27 -31
- package/components/icure-button-group/index.js.map +1 -1
- package/components/icure-date-picker/index.js +32 -36
- package/components/icure-date-picker/index.js.map +1 -1
- package/components/icure-dropdown-field/index.js +26 -30
- package/components/icure-dropdown-field/index.js.map +1 -1
- package/components/icure-form/fields/button/button.js +13 -17
- package/components/icure-form/fields/button/button.js.map +1 -1
- package/components/icure-form/fields/button/index.js +1 -17
- package/components/icure-form/fields/button/index.js.map +1 -1
- package/components/icure-form/fields/button-group/checkbox.js +10 -14
- package/components/icure-form/fields/button-group/checkbox.js.map +1 -1
- package/components/icure-form/fields/button-group/index.js +2 -18
- package/components/icure-form/fields/button-group/index.js.map +1 -1
- package/components/icure-form/fields/button-group/radio-button.js +10 -14
- package/components/icure-form/fields/button-group/radio-button.js.map +1 -1
- package/components/icure-form/fields/date-picker/date-picker.js +8 -12
- package/components/icure-form/fields/date-picker/date-picker.js.map +1 -1
- package/components/icure-form/fields/date-picker/date-time-picker.js +8 -12
- package/components/icure-form/fields/date-picker/date-time-picker.js.map +1 -1
- package/components/icure-form/fields/date-picker/index.js +3 -19
- package/components/icure-form/fields/date-picker/index.js.map +1 -1
- package/components/icure-form/fields/date-picker/time-picker.js +8 -12
- package/components/icure-form/fields/date-picker/time-picker.js.map +1 -1
- package/components/icure-form/fields/dropdown/dropdown-field.js +10 -14
- package/components/icure-form/fields/dropdown/dropdown-field.js.map +1 -1
- package/components/icure-form/fields/dropdown/index.js +1 -17
- package/components/icure-form/fields/dropdown/index.js.map +1 -1
- package/components/icure-form/fields/index.js +10 -26
- package/components/icure-form/fields/index.js.map +1 -1
- package/components/icure-form/fields/items-list-field/index.js +1 -17
- package/components/icure-form/fields/items-list-field/index.js.map +1 -1
- package/components/icure-form/fields/items-list-field/items-list-field.js +7 -11
- package/components/icure-form/fields/items-list-field/items-list-field.js.map +1 -1
- package/components/icure-form/fields/label/index.js +1 -17
- package/components/icure-form/fields/label/index.js.map +1 -1
- package/components/icure-form/fields/label/label.js +11 -15
- package/components/icure-form/fields/label/label.js.map +1 -1
- package/components/icure-form/fields/measure-field/index.js +1 -17
- package/components/icure-form/fields/measure-field/index.js.map +1 -1
- package/components/icure-form/fields/measure-field/measure-field.js +8 -12
- package/components/icure-form/fields/measure-field/measure-field.js.map +1 -1
- package/components/icure-form/fields/number-field/index.js +1 -17
- package/components/icure-form/fields/number-field/index.js.map +1 -1
- package/components/icure-form/fields/number-field/number-field.js +8 -12
- package/components/icure-form/fields/number-field/number-field.js.map +1 -1
- package/components/icure-form/fields/text-field/index.js +1 -17
- package/components/icure-form/fields/text-field/index.js.map +1 -1
- package/components/icure-form/fields/text-field/text-field.js +20 -24
- package/components/icure-form/fields/text-field/text-field.js.map +1 -1
- package/components/icure-form/fields/token-field/index.js +1 -17
- package/components/icure-form/fields/token-field/index.js.map +1 -1
- package/components/icure-form/fields/token-field/token-field.js +8 -12
- package/components/icure-form/fields/token-field/token-field.js.map +1 -1
- package/components/icure-form/fields/utils/index.js +5 -13
- package/components/icure-form/fields/utils/index.js.map +1 -1
- package/components/icure-form/index.js +33 -37
- package/components/icure-form/index.js.map +1 -1
- package/components/icure-form/renderer/form/form-selection-button.js +20 -24
- package/components/icure-form/renderer/form/form-selection-button.js.map +1 -1
- package/components/icure-form/renderer/form/form.js +123 -127
- package/components/icure-form/renderer/form/form.js.map +1 -1
- package/components/icure-form/renderer/index.js +1 -2
- package/components/icure-label/index.js +18 -22
- package/components/icure-label/index.js.map +1 -1
- package/components/icure-text-field/index.js +103 -111
- package/components/icure-text-field/index.js.map +1 -1
- package/components/icure-text-field/plugin/caret-fix-plugin.js +3 -7
- package/components/icure-text-field/plugin/caret-fix-plugin.js.map +1 -1
- package/components/icure-text-field/plugin/has-content-class-plugin.js +3 -7
- package/components/icure-text-field/plugin/has-content-class-plugin.js.map +1 -1
- package/components/icure-text-field/plugin/mask-plugin.js +7 -11
- package/components/icure-text-field/plugin/mask-plugin.js.map +1 -1
- package/components/icure-text-field/plugin/regexp-plugin.js +5 -9
- package/components/icure-text-field/plugin/regexp-plugin.js.map +1 -1
- package/components/icure-text-field/prosemirror-commands.js +10 -15
- package/components/icure-text-field/prosemirror-commands.js.map +1 -1
- package/components/icure-text-field/prosemirror-utils.js +1 -5
- package/components/icure-text-field/prosemirror-utils.js.map +1 -1
- package/components/icure-text-field/schema/common-marks.js +3 -7
- package/components/icure-text-field/schema/common-marks.js.map +1 -1
- package/components/icure-text-field/schema/date-time-schema.js +3 -9
- package/components/icure-text-field/schema/date-time-schema.js.map +1 -1
- package/components/icure-text-field/schema/decimal-schema.js +1 -5
- package/components/icure-text-field/schema/decimal-schema.js.map +1 -1
- package/components/icure-text-field/schema/index.js +17 -21
- package/components/icure-text-field/schema/index.js.map +1 -1
- package/components/icure-text-field/schema/items-list-schema.js +3 -7
- package/components/icure-text-field/schema/items-list-schema.js.map +1 -1
- package/components/icure-text-field/schema/markdown-schema.js +5 -9
- package/components/icure-text-field/schema/markdown-schema.js.map +1 -1
- package/components/icure-text-field/schema/measure-schema.js +6 -12
- package/components/icure-text-field/schema/measure-schema.js.map +1 -1
- package/components/icure-text-field/schema/token-schema.js +5 -9
- package/components/icure-text-field/schema/token-schema.js.map +1 -1
- package/components/icure-text-field/schema/utils.js +2 -7
- package/components/icure-text-field/schema/utils.js.map +1 -1
- package/components/icure-text-field/selection-companion.js +1 -5
- package/components/icure-text-field/selection-companion.js.map +1 -1
- package/components/icure-text-field/suggestion-palette.js +3 -10
- package/components/icure-text-field/suggestion-palette.js.map +1 -1
- package/components/index.js +5 -21
- package/components/index.js.map +1 -1
- package/components/model/index.js +22 -46
- package/components/model/index.js.map +1 -1
- package/components/themes/default/index.js +30 -32
- package/components/themes/default/index.js.map +1 -1
- package/components/themes/icure-blue/index.js +47 -49
- package/components/themes/icure-blue/index.js.map +1 -1
- package/components/themes/kendo/index.js +49 -51
- package/components/themes/kendo/index.js.map +1 -1
- package/conversion/ckmeans-grouping.js +3 -10
- package/conversion/ckmeans-grouping.js.map +1 -1
- package/conversion/ckmeans.js +1 -3
- package/conversion/ckmeans.js.map +1 -1
- package/generic/index.js +1 -17
- package/generic/index.js.map +1 -1
- package/generic/model.js +1 -2
- package/icure/form-values-container.d.ts +1 -2
- package/icure/form-values-container.js +33 -38
- package/icure/form-values-container.js.map +1 -1
- package/icure/icure-utils.js +14 -25
- package/icure/icure-utils.js.map +1 -1
- package/icure/index.js +2 -18
- package/icure/index.js.map +1 -1
- package/icure/model.js +1 -2
- package/index.js +1 -17
- package/index.js.map +1 -1
- package/package.json +14 -13
- package/utils/code-utils.js +13 -22
- package/utils/code-utils.js.map +1 -1
- package/utils/dates.js +9 -21
- package/utils/dates.js.map +1 -1
- package/utils/fields-values-provider.js +8 -17
- package/utils/fields-values-provider.js.map +1 -1
- package/utils/form-value-container.js +3 -7
- package/utils/form-value-container.js.map +1 -1
- package/utils/interpreter.d.ts +1 -2
- package/utils/interpreter.js +1 -5
- package/utils/interpreter.js.map +1 -1
- package/utils/languages.js +3 -8
- package/utils/languages.js.map +1 -1
- package/utils/markdown.js +6 -11
- package/utils/markdown.js.map +1 -1
- package/utils/no-lodash.js +3 -9
- package/utils/no-lodash.js.map +1 -1
- package/utils/primitive.js +7 -12
- package/utils/primitive.js.map +1 -1
- package/.yarn/cache/prosemirror-commands-npm-1.5.2-27f8f3fee9-ff65063a8c.zip +0 -0
- package/.yarn/cache/prosemirror-history-npm-1.3.2-cc128c8ee6-b85fe6378a.zip +0 -0
- package/.yarn/cache/prosemirror-markdown-npm-1.12.0-28e990f443-d7607ee1a6.zip +0 -0
- package/.yarn/cache/prosemirror-model-npm-1.19.4-4fd32211c8-12c277ed30.zip +0 -0
- package/.yarn/cache/prosemirror-schema-basic-npm-1.2.2-def7bf2ec7-1f93f8678c.zip +0 -0
- package/.yarn/cache/prosemirror-schema-list-npm-1.3.0-23c1830a7e-03654e37c8.zip +0 -0
- package/.yarn/cache/prosemirror-transform-npm-1.10.2-1c2da9123e-93b0c03aff.zip +0 -0
- package/.yarn/cache/prosemirror-transform-npm-1.8.0-ea3ca0411f-6d16ca4f95.zip +0 -0
- package/.yarn/cache/prosemirror-view-npm-1.32.7-63c3e4b182-40c9038a52.zip +0 -0
- package/.yarn/cache/prosemirror-view-npm-1.38.0-9061dc9cf4-0d0f17c1b2.zip +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,15 +7,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const uuid_1 = require("uuid");
|
|
19
|
-
const code_utils_1 = require("../utils/code-utils");
|
|
10
|
+
import { CodeStub, DecryptedContact, DecryptedService, DecryptedSubContact } from '@icure/cardinal-sdk';
|
|
11
|
+
import { sortedBy } from '../utils/no-lodash';
|
|
12
|
+
import { areCodesEqual, codeStubToCode, contentToPrimitiveType, isContentEqual, primitiveTypeToContent } from './icure-utils';
|
|
13
|
+
import { parsePrimitive } from '../utils/primitive';
|
|
14
|
+
import { anyDateToDate } from '../utils/dates';
|
|
15
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
16
|
+
import { normalizeCodes } from '../utils/code-utils';
|
|
20
17
|
function notify(l, fvc) {
|
|
21
18
|
//console.log('Notifying', l, fvc.toString())
|
|
22
19
|
l(fvc);
|
|
@@ -40,7 +37,7 @@ function notify(l, fvc) {
|
|
|
40
37
|
*
|
|
41
38
|
* This class is fairly generic and can be used as an inspiration or subclassed for other bridges
|
|
42
39
|
*/
|
|
43
|
-
class BridgedFormValuesContainer {
|
|
40
|
+
export class BridgedFormValuesContainer {
|
|
44
41
|
toString() {
|
|
45
42
|
return `Bridged(${this.contactFormValuesContainer.rootForm.formTemplateId}[${this.contactFormValuesContainer.rootForm.id}]) - ${this._id}`;
|
|
46
43
|
}
|
|
@@ -64,7 +61,7 @@ class BridgedFormValuesContainer {
|
|
|
64
61
|
this.validatorsProvider = validatorsProvider;
|
|
65
62
|
this.language = language;
|
|
66
63
|
this.changeListeners = changeListeners;
|
|
67
|
-
this._id = (
|
|
64
|
+
this._id = uuidv4();
|
|
68
65
|
console.log(`Creating bridge FVC (${contactFormValuesContainer.rootForm.formTemplateId}) with ${contactFormValuesContainer.children.length} children [${this._id}]`);
|
|
69
66
|
//Before start to broadcast changes, we need to fill in the contactFormValuesContainer with the dependent values
|
|
70
67
|
this.contactFormValuesContainer = contactFormValuesContainer;
|
|
@@ -107,7 +104,7 @@ class BridgedFormValuesContainer {
|
|
|
107
104
|
value: {
|
|
108
105
|
label: sm.label,
|
|
109
106
|
owner: sm.responsible,
|
|
110
|
-
tags: (_a = sm.tags) === null || _a === void 0 ? void 0 : _a.map(
|
|
107
|
+
tags: (_a = sm.tags) === null || _a === void 0 ? void 0 : _a.map(codeStubToCode),
|
|
111
108
|
valueDate: sm.valueDate,
|
|
112
109
|
},
|
|
113
110
|
});
|
|
@@ -119,10 +116,10 @@ class BridgedFormValuesContainer {
|
|
|
119
116
|
modified,
|
|
120
117
|
value: {
|
|
121
118
|
content: Object.entries((_a = s.content) !== null && _a !== void 0 ? _a : {}).reduce((acc, [lng, cnt]) => {
|
|
122
|
-
const converted =
|
|
119
|
+
const converted = contentToPrimitiveType(lng, cnt);
|
|
123
120
|
return converted ? Object.assign(Object.assign({}, acc), { [lng]: converted }) : acc;
|
|
124
121
|
}, {}),
|
|
125
|
-
codes: (_b = s.codes) === null || _b === void 0 ? void 0 : _b.map(
|
|
122
|
+
codes: (_b = s.codes) === null || _b === void 0 ? void 0 : _b.map(codeStubToCode),
|
|
126
123
|
},
|
|
127
124
|
});
|
|
128
125
|
}) });
|
|
@@ -139,7 +136,7 @@ class BridgedFormValuesContainer {
|
|
|
139
136
|
tags: s.tags,
|
|
140
137
|
discordantMetadata: () => {
|
|
141
138
|
var _a, _b;
|
|
142
|
-
return (Object.assign(Object.assign({}, (s.responsible !== this.responsible ? { owner: this.responsible } : {})), (Math.abs(+((_a =
|
|
139
|
+
return (Object.assign(Object.assign({}, (s.responsible !== this.responsible ? { owner: this.responsible } : {})), (Math.abs(+((_a = anyDateToDate(s.valueDate)) !== null && _a !== void 0 ? _a : 0) - +((_b = anyDateToDate(this.contact.created)) !== null && _b !== void 0 ? _b : 0)) > 24 * 3600000 ? { valueDate: s.valueDate } : {})));
|
|
143
140
|
},
|
|
144
141
|
},
|
|
145
142
|
})) })), {});
|
|
@@ -218,7 +215,7 @@ class BridgedFormValuesContainer {
|
|
|
218
215
|
label: meta.label,
|
|
219
216
|
responsible: meta.owner,
|
|
220
217
|
valueDate: meta.valueDate,
|
|
221
|
-
tags: (_a = meta.tags) === null || _a === void 0 ? void 0 : _a.map((x) => new
|
|
218
|
+
tags: (_a = meta.tags) === null || _a === void 0 ? void 0 : _a.map((x) => new CodeStub(x)),
|
|
222
219
|
}, id);
|
|
223
220
|
}
|
|
224
221
|
delete(serviceId) {
|
|
@@ -236,7 +233,7 @@ class BridgedFormValuesContainer {
|
|
|
236
233
|
return undefined;
|
|
237
234
|
}
|
|
238
235
|
const primitive = (_b = (_a = content[this.language]) !== null && _a !== void 0 ? _a : content['*']) !== null && _b !== void 0 ? _b : content[Object.keys(content)[0]];
|
|
239
|
-
return primitive &&
|
|
236
|
+
return primitive && parsePrimitive(primitive);
|
|
240
237
|
};
|
|
241
238
|
const log = console.log;
|
|
242
239
|
const native = {
|
|
@@ -314,7 +311,6 @@ class BridgedFormValuesContainer {
|
|
|
314
311
|
return this;
|
|
315
312
|
}
|
|
316
313
|
}
|
|
317
|
-
exports.BridgedFormValuesContainer = BridgedFormValuesContainer;
|
|
318
314
|
/**
|
|
319
315
|
* This class is a form values container that uses a hierarchy of forms as a data source. The actual values are extracted from the services of the contacts.
|
|
320
316
|
* The `currentContact` is the contact that has been selected by the user, any later contact should be ignored.
|
|
@@ -323,7 +319,7 @@ exports.BridgedFormValuesContainer = BridgedFormValuesContainer;
|
|
|
323
319
|
* Each ContactFormValuesContainer has a reference to its `rootForm`.
|
|
324
320
|
* The `serviceFactory` and `formFactory` are used to create new services and add sub-forms.
|
|
325
321
|
*/
|
|
326
|
-
class ContactFormValuesContainer {
|
|
322
|
+
export class ContactFormValuesContainer {
|
|
327
323
|
toString() {
|
|
328
324
|
return `Contact(${this.rootForm.formTemplateId}[${this.rootForm.id}]) - ${this._id}`;
|
|
329
325
|
}
|
|
@@ -337,7 +333,7 @@ class ContactFormValuesContainer {
|
|
|
337
333
|
var _a, _b, _c;
|
|
338
334
|
const childrenContacts = this.children.map((c) => c.coordinatedContact());
|
|
339
335
|
const thisKeptServiceIds = ((_a = this.currentContact.subContacts) !== null && _a !== void 0 ? _a : []).filter((sc) => sc.formId === this.rootForm.id).flatMap((sc) => { var _a; return ((_a = sc.services) !== null && _a !== void 0 ? _a : []).map((s) => s.serviceId); });
|
|
340
|
-
return new
|
|
336
|
+
return new DecryptedContact(Object.assign(Object.assign({}, this.currentContact), { services: childrenContacts
|
|
341
337
|
.reduce((acc, c) => { var _a; return acc.concat((_a = c.services) !== null && _a !== void 0 ? _a : []); }, [])
|
|
342
338
|
.concat(((_b = this.currentContact.services) !== null && _b !== void 0 ? _b : []).filter((s) => thisKeptServiceIds.includes(s.id))), subContacts: childrenContacts
|
|
343
339
|
.reduce((acc, c) => { var _a; return acc.concat((_a = c.subContacts) !== null && _a !== void 0 ? _a : []); }, [])
|
|
@@ -350,7 +346,7 @@ class ContactFormValuesContainer {
|
|
|
350
346
|
return [this.rootForm].concat(this.children.flatMap((c) => c.allForms()));
|
|
351
347
|
}
|
|
352
348
|
constructor(rootForm, currentContact, contactsHistory, serviceFactory, children, formFactory, formRecycler, changeListeners = [], initialised = true) {
|
|
353
|
-
this._id = (
|
|
349
|
+
this._id = uuidv4();
|
|
354
350
|
this._initialised = false;
|
|
355
351
|
console.log(`Creating contact FVC (${rootForm.formTemplateId}) with ${children.length} children [${this._id}]`);
|
|
356
352
|
if (contactsHistory.includes(currentContact)) {
|
|
@@ -358,7 +354,7 @@ class ContactFormValuesContainer {
|
|
|
358
354
|
}
|
|
359
355
|
this.rootForm = rootForm;
|
|
360
356
|
this.currentContact = currentContact;
|
|
361
|
-
this.contactsHistory =
|
|
357
|
+
this.contactsHistory = sortedBy(contactsHistory, 'created', 'desc');
|
|
362
358
|
this.children = children;
|
|
363
359
|
this.serviceFactory = serviceFactory;
|
|
364
360
|
this.formFactory = formFactory;
|
|
@@ -454,11 +450,11 @@ class ContactFormValuesContainer {
|
|
|
454
450
|
(meta.valueDate && service.valueDate !== meta.valueDate) ||
|
|
455
451
|
(meta.codes && service.codes !== meta.codes) ||
|
|
456
452
|
(meta.tags && service.tags !== meta.tags)) {
|
|
457
|
-
const newService = new
|
|
453
|
+
const newService = new DecryptedService(Object.assign(Object.assign({}, service), { modified: Date.now() }));
|
|
458
454
|
meta.responsible && (newService.responsible = meta.responsible);
|
|
459
455
|
meta.valueDate && (newService.valueDate = meta.valueDate);
|
|
460
|
-
meta.codes && (newService.codes =
|
|
461
|
-
meta.tags && (newService.tags =
|
|
456
|
+
meta.codes && (newService.codes = normalizeCodes(meta.codes));
|
|
457
|
+
meta.tags && (newService.tags = normalizeCodes(meta.tags));
|
|
462
458
|
const newFormValuesContainer = new ContactFormValuesContainer(this.rootForm, Object.assign(Object.assign({}, this.currentContact), { services: (_a = this.currentContact.services) === null || _a === void 0 ? void 0 : _a.map((s) => (s.id === service.id ? newService : s)) }), this.contactsHistory, this.serviceFactory, this.children, this.formFactory, this.formRecycler, this.changeListeners);
|
|
463
459
|
this.changeListeners.forEach((l) => notify(l, newFormValuesContainer));
|
|
464
460
|
}
|
|
@@ -471,9 +467,9 @@ class ContactFormValuesContainer {
|
|
|
471
467
|
}
|
|
472
468
|
console.log('Setting value of service', service.id, 'with', value, 'and metadata', metadata);
|
|
473
469
|
const newContent = (_c = value === null || value === void 0 ? void 0 : value.content) === null || _c === void 0 ? void 0 : _c[language];
|
|
474
|
-
const newCodes = (value === null || value === void 0 ? void 0 : value.codes) ?
|
|
475
|
-
if (!
|
|
476
|
-
const newService = new
|
|
470
|
+
const newCodes = (value === null || value === void 0 ? void 0 : value.codes) ? normalizeCodes(value.codes) : [];
|
|
471
|
+
if (!isContentEqual((_d = service.content) === null || _d === void 0 ? void 0 : _d[language], newContent) || (newCodes && !areCodesEqual(newCodes, (_e = service.codes) !== null && _e !== void 0 ? _e : []))) {
|
|
472
|
+
const newService = new DecryptedService(Object.assign(Object.assign({}, service), { modified: Date.now() }));
|
|
477
473
|
const newContents = newContent
|
|
478
474
|
? Object.assign(Object.assign({}, (service.content || {})), { [language]: newContent }) : Object.assign({}, (service.content || {}));
|
|
479
475
|
if (!newContent) {
|
|
@@ -491,7 +487,7 @@ class ContactFormValuesContainer {
|
|
|
491
487
|
return sc;
|
|
492
488
|
}
|
|
493
489
|
})
|
|
494
|
-
: ((_h = this.currentContact.subContacts) !== null && _h !== void 0 ? _h : []).concat(new
|
|
490
|
+
: ((_h = this.currentContact.subContacts) !== null && _h !== void 0 ? _h : []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })), services: ((_j = this.currentContact.services) !== null && _j !== void 0 ? _j : []).some((s) => s.id === service.id)
|
|
495
491
|
? ((_k = this.currentContact.services) !== null && _k !== void 0 ? _k : []).filter((s) => s.id !== service.id)
|
|
496
492
|
: [...((_l = this.currentContact.services) !== null && _l !== void 0 ? _l : [])] });
|
|
497
493
|
}
|
|
@@ -501,7 +497,7 @@ class ContactFormValuesContainer {
|
|
|
501
497
|
if (metadata) {
|
|
502
498
|
newService.responsible = (_m = metadata.responsible) !== null && _m !== void 0 ? _m : newService.responsible;
|
|
503
499
|
newService.valueDate = (_o = metadata.valueDate) !== null && _o !== void 0 ? _o : newService.valueDate;
|
|
504
|
-
newService.tags = metadata.tags ?
|
|
500
|
+
newService.tags = metadata.tags ? normalizeCodes(metadata.tags) : newService.tags;
|
|
505
501
|
newService.label = (_p = metadata.label) !== null && _p !== void 0 ? _p : newService.label;
|
|
506
502
|
}
|
|
507
503
|
newCurrentContact = Object.assign(Object.assign({}, this.currentContact), { subContacts: ((_q = this.currentContact.subContacts) !== null && _q !== void 0 ? _q : []).some((sc) => sc.formId === this.rootForm.id)
|
|
@@ -514,7 +510,7 @@ class ContactFormValuesContainer {
|
|
|
514
510
|
return sc;
|
|
515
511
|
}
|
|
516
512
|
})
|
|
517
|
-
: ((_s = this.currentContact.subContacts) !== null && _s !== void 0 ? _s : []).concat(new
|
|
513
|
+
: ((_s = this.currentContact.subContacts) !== null && _s !== void 0 ? _s : []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })), services: ((_t = this.currentContact.services) !== null && _t !== void 0 ? _t : []).some((s) => s.id === service.id)
|
|
518
514
|
? ((_u = this.currentContact.services) !== null && _u !== void 0 ? _u : []).map((s) => (s.id === service.id ? newService : s))
|
|
519
515
|
: [...((_v = this.currentContact.services) !== null && _v !== void 0 ? _v : []), newService] });
|
|
520
516
|
}
|
|
@@ -527,7 +523,7 @@ class ContactFormValuesContainer {
|
|
|
527
523
|
const service = this.getServiceInCurrentContact(serviceId);
|
|
528
524
|
if (service) {
|
|
529
525
|
const newFormValuesContainer = new ContactFormValuesContainer(this.rootForm, Object.assign(Object.assign({}, this.currentContact), { services: (_a = this.currentContact.services) === null || _a === void 0 ? void 0 : _a.map((s) => s.id === serviceId
|
|
530
|
-
? new
|
|
526
|
+
? new DecryptedService(Object.assign(Object.assign({}, service), { endOfLife: Date.now() }))
|
|
531
527
|
: s) }), this.contactsHistory, this.serviceFactory, this.children, this.formFactory, this.formRecycler, this.changeListeners);
|
|
532
528
|
this.changeListeners.forEach((l) => notify(l, newFormValuesContainer));
|
|
533
529
|
}
|
|
@@ -598,16 +594,15 @@ class ContactFormValuesContainer {
|
|
|
598
594
|
});
|
|
599
595
|
}
|
|
600
596
|
}
|
|
601
|
-
exports.ContactFormValuesContainer = ContactFormValuesContainer;
|
|
602
597
|
const setValueOnContactFormValuesContainer = (cfvc, label, language, fv, id, metadata, changeListenersOverrider) => {
|
|
603
598
|
var _a, _b, _c, _d;
|
|
604
599
|
const value = fv === null || fv === void 0 ? void 0 : fv.content[language];
|
|
605
|
-
cfvc.setValue(label, language, new
|
|
600
|
+
cfvc.setValue(label, language, new DecryptedService({
|
|
606
601
|
id: id,
|
|
607
|
-
codes: (_b = (_a = fv === null || fv === void 0 ? void 0 : fv.codes) === null || _a === void 0 ? void 0 : _a.map((x) => new
|
|
602
|
+
codes: (_b = (_a = fv === null || fv === void 0 ? void 0 : fv.codes) === null || _a === void 0 ? void 0 : _a.map((x) => new CodeStub(x))) !== null && _b !== void 0 ? _b : [],
|
|
608
603
|
content: value
|
|
609
604
|
? {
|
|
610
|
-
[language]:
|
|
605
|
+
[language]: primitiveTypeToContent(language, value),
|
|
611
606
|
}
|
|
612
607
|
: undefined,
|
|
613
608
|
}), id, metadata
|
|
@@ -615,7 +610,7 @@ const setValueOnContactFormValuesContainer = (cfvc, label, language, fv, id, met
|
|
|
615
610
|
label: (_c = metadata === null || metadata === void 0 ? void 0 : metadata.label) !== null && _c !== void 0 ? _c : label,
|
|
616
611
|
responsible: metadata === null || metadata === void 0 ? void 0 : metadata.owner,
|
|
617
612
|
valueDate: metadata === null || metadata === void 0 ? void 0 : metadata.valueDate,
|
|
618
|
-
tags: (_d = metadata === null || metadata === void 0 ? void 0 : metadata.tags) === null || _d === void 0 ? void 0 : _d.map((x) => new
|
|
613
|
+
tags: (_d = metadata === null || metadata === void 0 ? void 0 : metadata.tags) === null || _d === void 0 ? void 0 : _d.map((x) => new CodeStub(x)),
|
|
619
614
|
}
|
|
620
615
|
: undefined, changeListenersOverrider);
|
|
621
616
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-values-container.js","sourceRoot":"","sources":["../../tmp/icure/form-values-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { CodeStub, DecryptedContact, DecryptedForm as CardinalForm, DecryptedService, DecryptedSubContact } from '@icure/cardinal-sdk'\nimport { sortedBy } from '../utils/no-lodash'\nimport { FormValuesContainer, Version, VersionedData } from '../generic'\nimport { ServiceMetadata } from './model'\nimport { FieldMetadata, FieldValue, PrimitiveType, Validator } from '../components/model'\nimport { areCodesEqual, codeStubToCode, contentToPrimitiveType, isContentEqual, primitiveTypeToContent } from './icure-utils'\nimport { parsePrimitive } from '../utils/primitive'\nimport { anyDateToDate } from '../utils/dates'\nimport { v4 as uuidv4 } from 'uuid'\nimport { normalizeCodes } from '../utils/code-utils'\n\nfunction notify<Value, Metadata>(l: (fvc: FormValuesContainer<Value, Metadata>) => void, fvc: FormValuesContainer<Value, Metadata>) {\n\t//console.log('Notifying', l, fvc.toString())\n\tl(fvc)\n}\n\n/** This class is a bridge between the ICure API and the generic FormValuesContainer interface.\n * It wraps around a ContactFormValuesContainer and provides a series of services:\n * - It computes dependent values when the form is created\n * - It broadcasts changes from the wrapped ContactFormValuesContainer to its listeners\n * - It provides a way to compute formulas in a sandboxed environment\n * - It bridges the setValues and setMetadata methods with the wrapped ContactFormValuesContainer by\n * \t\t- converting the FieldValue to a Service\n * \t\t- converting the FieldMetadata to a ServiceMetadata\n * - It bridges the getValues and getMetadata methods with the wrapped ContactFormValuesContainer by\n * \t\t- converting the Service to a FieldValue\n * \t\t- converting the ServiceMetadata to a FieldMetadata\n * - It lazily creates bridges the children by\n * - lazily creating BridgedFormValuesContainer when the children of the wrapped ContactFormValuesContainer are accessed\n * - creating a new ContactFormValuesContainer and wrapping it in a BridgedFormValuesContainer when a child is added\n *\n * The icure-form typically accepts a BridgedFormValuesContainer as a prop and uses it to interact with the form.\n *\n * This class is fairly generic and can be used as an inspiration or subclassed for other bridges\n */\nexport class BridgedFormValuesContainer implements FormValuesContainer<FieldValue, FieldMetadata> {\n\tprivate contact: DecryptedContact\n\tprivate contactFormValuesContainer: ContactFormValuesContainer\n\tprivate _id: string = uuidv4()\n\tprivate mutateAndNotify: (newContactFormValuesContainer: ContactFormValuesContainer) => BridgedFormValuesContainer\n\n\ttoString(): string {\n\t\treturn `Bridged(${this.contactFormValuesContainer.rootForm.formTemplateId}[${this.contactFormValuesContainer.rootForm.id}]) - ${this._id}`\n\t}\n\n\t/**\n\t * Creates an instance of BridgedFormValuesContainer.\n\t * @param responsible The id of the data owner responsible for the creation of the values\n\t * @param contact The displayed contact (may be in the past). === to currentContact if the contact is the contact of the day\n\t * @param contactFormValuesContainer The wrapped ContactFormValuesContainer\n\t * @param interpreter A function that can interpret formulas\n\t * @param dependentValuesProvider A function that provides the dependent values (computed on the basis of other values) for a given anchorId and templateId\n\t * @param validatorsProvider A function that provides the validators for a given anchorId and templateId\n\t * @param language The language in which the values are displayed\n\t * @param changeListeners The listeners that will be notified when the values change\n\t * @param initialValuesProvider A lambda that provides the initial values of the form\n\t */\n\tconstructor(\n\t\tprivate responsible: string,\n\t\tcontactFormValuesContainer: ContactFormValuesContainer,\n\t\tprivate interpreter?: <\n\t\t\tT,\n\t\t\tS extends {\n\t\t\t\t[key: string | symbol]: unknown\n\t\t\t},\n\t\t>(\n\t\t\tformula: string,\n\t\t\tsandbox: S,\n\t\t) => T | undefined,\n\t\tcontact?: DecryptedContact,\n\t\tprivate initialValuesProvider: (\n\t\t\tanchorId?: string,\n\t\t\ttemplateId?: string,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\trevisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]\n\t\t\tformula: string\n\t\t}[] = () => [],\n\t\tprivate dependentValuesProvider: (\n\t\t\tanchorId: string | undefined,\n\t\t\ttemplateId: string | undefined,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\trevisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]\n\t\t\tformula: string\n\t\t}[] = () => [],\n\t\tprivate validatorsProvider: (\n\t\t\tanchorId: string | undefined,\n\t\t\ttemplateId: string,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\tvalidators: Validator[]\n\t\t}[] = () => [],\n\t\tprivate language = 'en',\n\t\tprivate changeListeners: ((newValue: BridgedFormValuesContainer) => void)[] = [],\n\t) {\n\t\tconsole.log(`Creating bridge FVC (${contactFormValuesContainer.rootForm.formTemplateId}) with ${contactFormValuesContainer.children.length} children [${this._id}]`)\n\t\t//Before start to broadcast changes, we need to fill in the contactFormValuesContainer with the dependent values\n\t\tthis.contactFormValuesContainer = contactFormValuesContainer\n\t\tthis.mutateAndNotify = (newContactFormValuesContainer: ContactFormValuesContainer) => {\n\t\t\tnewContactFormValuesContainer.unregisterChangeListener(this.mutateAndNotify)\n\t\t\tconst newBridgedFormValueContainer = new BridgedFormValuesContainer(\n\t\t\t\tthis.responsible,\n\t\t\t\tnewContactFormValuesContainer,\n\t\t\t\tthis.interpreter,\n\t\t\t\tthis.contact === this.contactFormValuesContainer.currentContact ? newContactFormValuesContainer.currentContact : this.contact,\n\t\t\t\tthis.initialValuesProvider,\n\t\t\t\tthis.dependentValuesProvider,\n\t\t\t\tthis.validatorsProvider,\n\t\t\t\tthis.language,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newBridgedFormValueContainer))\n\t\t\treturn newBridgedFormValueContainer\n\t\t}\n\t\tthis.contactFormValuesContainer.registerChangeListener(this.mutateAndNotify)\n\t\tthis.contact = contact ?? contactFormValuesContainer.currentContact\n\t\tif (this.contactFormValuesContainer.mustBeInitialised()) {\n\t\t\tthis.computeInitialValues()\n\t\t}\n\t\tthis.computeDependentValues()\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.contactFormValuesContainer.getLabel()\n\t}\n\n\tgetFormId(): string | undefined {\n\t\treturn this.contactFormValuesContainer.getFormId()\n\t}\n\n\tgetContactFormValuesContainer() {\n\t\treturn this.contactFormValuesContainer\n\t}\n\n\tregisterChangeListener(listener: (newValue: BridgedFormValuesContainer) => void): void {\n\t\tthis.changeListeners.push(listener)\n\t}\n\n\tunregisterChangeListener(listener: (newValue: BridgedFormValuesContainer) => void): void {\n\t\tthis.changeListeners = this.changeListeners.filter((l) => l !== listener)\n\t}\n\n\tgetValues(revisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]): VersionedData<FieldValue> {\n\t\treturn Object.entries(\n\t\t\tthis.contactFormValuesContainer.getValues((id, history) =>\n\t\t\t\trevisionsFilter(\n\t\t\t\t\tid,\n\t\t\t\t\thistory\n\t\t\t\t\t\t.filter(({ modified }) => !this.contact.created || !modified || modified <= this.contact.created)\n\t\t\t\t\t\t.map(({ revision, modified, value: sm }) => ({\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\tmodified,\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\tlabel: sm.label,\n\t\t\t\t\t\t\t\towner: sm.responsible,\n\t\t\t\t\t\t\t\ttags: sm.tags?.map(codeStubToCode),\n\t\t\t\t\t\t\t\tvalueDate: sm.valueDate,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t),\n\t\t).reduce((acc, [id, history]) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[id]: history.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\trevision,\n\t\t\t\t\tmodified,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tcontent: Object.entries(s.content ?? {}).reduce((acc, [lng, cnt]) => {\n\t\t\t\t\t\t\tconst converted = contentToPrimitiveType(lng, cnt)\n\t\t\t\t\t\t\treturn converted ? { ...acc, [lng]: converted } : acc\n\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\tcodes: s.codes?.map(codeStubToCode),\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t}\n\t\t}, {} as VersionedData<FieldValue>)\n\t}\n\n\tgetMetadata(id: string, revisions: (string | null)[]): VersionedData<FieldMetadata> {\n\t\treturn Object.entries(this.contactFormValuesContainer.getMetadata(id, revisions)).reduce(\n\t\t\t(acc, [id, history]) => ({\n\t\t\t\t...acc,\n\t\t\t\t[id]: history.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\trevision,\n\t\t\t\t\tmodified,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tlabel: s.label,\n\t\t\t\t\t\towner: s.responsible,\n\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\tdiscordantMetadata: () => ({\n\t\t\t\t\t\t\t...(s.responsible !== this.responsible ? { owner: this.responsible } : {}),\n\t\t\t\t\t\t\t...(Math.abs(+(anyDateToDate(s.valueDate) ?? 0) - +(anyDateToDate(this.contact.created) ?? 0)) > 24 * 3600000 ? { valueDate: s.valueDate } : {}),\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t}),\n\t\t\t{},\n\t\t)\n\t}\n\n\t//This method mutates the BridgedFormValuesContainer but can only be called from the constructor\n\tprivate computeInitialValues() {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\tthis.initialValuesProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).forEach(({ metadata, revisionsFilter, formula }) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\tif (!currentValue || !Object.keys(currentValue).length) {\n\t\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\t\tif (newValue !== undefined) {\n\t\t\t\t\t\t\tconst lng = this.language ?? 'en'\n\t\t\t\t\t\t\tif (newValue && !newValue.content[lng] && newValue.content['*']) {\n\t\t\t\t\t\t\t\tnewValue.content[lng] = newValue.content['*']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\t\tdelete newValue.content['*']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, metadata.label, lng, newValue, undefined, metadata, (fvc: ContactFormValuesContainer) => {\n\t\t\t\t\t\t\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\t//This method mutates the BridgedFormValuesContainer but can only be called from the constructor\n\tprivate computeDependentValues() {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\tthis.dependentValuesProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).forEach(({ metadata, revisionsFilter, formula }) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\tif (newValue !== undefined || currentValue != undefined) {\n\t\t\t\t\t\tconst lng = this.language ?? 'en'\n\t\t\t\t\t\tif (newValue && !newValue.content[lng] && newValue.content['*']) {\n\t\t\t\t\t\t\tnewValue.content[lng] = newValue.content['*']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\tdelete newValue.content['*']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst interceptor = (fvc: ContactFormValuesContainer) => {\n\t\t\t\t\t\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, metadata.label, lng, newValue, Object.keys(currentValue ?? {})[0], metadata, interceptor)\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetValue(label: string, language: string, fv?: FieldValue, id?: string, metadata?: FieldMetadata): void {\n\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, label, language, fv, id, metadata)\n\t}\n\n\tsetMetadata(meta: FieldMetadata, id?: string | undefined): void {\n\t\tthis.contactFormValuesContainer.setMetadata(\n\t\t\t{\n\t\t\t\tlabel: meta.label,\n\t\t\t\tresponsible: meta.owner,\n\t\t\t\tvalueDate: meta.valueDate,\n\t\t\t\ttags: meta.tags?.map((x) => new CodeStub(x)),\n\t\t\t},\n\t\t\tid,\n\t\t)\n\t}\n\n\tdelete(serviceId: string): void {\n\t\tthis.contactFormValuesContainer.delete(serviceId)\n\t}\n\n\tprivate getVersionedValuesForKey(key: string | symbol) {\n\t\treturn this.getValues((id, history) => (history?.[0]?.value?.label && key === history[0].value.label ? [history?.[0]?.revision] : []))\n\t}\n\n\tcompute<T, S extends { [key: string | symbol]: unknown }>(formula: string, sandbox?: S): T | undefined {\n\t\t// noinspection JSUnusedGlobalSymbols\n\t\tconst parseContent = (content?: { [key: string]: PrimitiveType }) => {\n\t\t\tif (!content) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst primitive = content[this.language] ?? content['*'] ?? content[Object.keys(content)[0]]\n\t\t\treturn primitive && parsePrimitive(primitive)\n\t\t}\n\t\tconst log = console.log\n\t\tconst native = {\n\t\t\tparseInt: parseInt,\n\t\t\tparseFloat: parseFloat,\n\t\t\tDate: Date,\n\t\t\tMath: Math,\n\t\t\tNumber: Number,\n\t\t\tString: String,\n\t\t\tBoolean: Boolean,\n\t\t\tArray: Array,\n\t\t\tObject: Object,\n\t\t\tparseContent,\n\t\t\tvalidate: {\n\t\t\t\tnotBlank: (self: any, label: string) => {\n\t\t\t\t\tconst value = parseContent((self[label as any] as any)?.[0]?.content)\n\t\t\t\t\treturn !!(value as any)?.trim()?.length\n\t\t\t\t},\n\t\t\t},\n\t\t\tlog,\n\t\t} as { [key: string]: any }\n\t\tconst proxy: S = new Proxy({} as S, {\n\t\t\thas: (target: S, key: string | symbol) => !!native[key as string] || key === 'self' || Object.keys(this.getVersionedValuesForKey(key) ?? {}).length > 0,\n\t\t\tget: (target: S, key: string | symbol) => {\n\t\t\t\tif (key === 'undefined') {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\tconst nativeValue = native[key as string]\n\t\t\t\tif (!!nativeValue) {\n\t\t\t\t\treturn nativeValue\n\t\t\t\t}\n\t\t\t\treturn key === 'self' ? proxy : Object.values(this.getVersionedValuesForKey(key)).map((v) => v[0]?.value)\n\t\t\t},\n\t\t})\n\t\treturn this.interpreter?.(formula, sandbox ?? proxy)\n\t}\n\n\tgetChildren(): FormValuesContainer<FieldValue, FieldMetadata>[] {\n\t\tconst children = this.contactFormValuesContainer\n\t\t\t.getChildren()\n\t\t\t.map(\n\t\t\t\t(fvc) =>\n\t\t\t\t\tnew BridgedFormValuesContainer(this.responsible, fvc, this.interpreter, this.contact, this.initialValuesProvider, this.dependentValuesProvider, this.validatorsProvider, this.language, []),\n\t\t\t)\n\t\tconsole.log(`${children.length} children found in ${this.contactFormValuesContainer.rootForm.formTemplateId} initialised with `, this.initialValuesProvider)\n\t\treturn children\n\t}\n\n\tgetValidationErrors(): [FieldMetadata, string][] {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\treturn this.validatorsProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).flatMap(\n\t\t\t\t({ metadata, validators }) =>\n\t\t\t\t\tvalidators\n\t\t\t\t\t\t.map(({ validation, message }) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn this.compute(validation) ? undefined : [metadata, message]\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.log(`Error while computing validation : ${validation}`, e)\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter((x) => !!x) as [FieldMetadata, string][],\n\t\t\t)\n\t\t} else {\n\t\t\treturn []\n\t\t}\n\t}\n\n\tasync addChild(anchorId: string, templateId: string, label: string): Promise<void> {\n\t\tawait this.contactFormValuesContainer.addChild(anchorId, templateId, label)\n\t}\n\n\tasync removeChild(container: BridgedFormValuesContainer): Promise<void> {\n\t\tawait this.contactFormValuesContainer.removeChild(container.contactFormValuesContainer)\n\t}\n\n\tsynchronise() {\n\t\tthis.contactFormValuesContainer.synchronise()\n\t\treturn this\n\t}\n}\n\n/**\n * This class is a form values container that uses a hierarchy of forms as a data source. The actual values are extracted from the services of the contacts.\n * The `currentContact` is the contact that has been selected by the user, any later contact should be ignored.\n * The `contactsHistory` is used to provide the full history of the services.\n * The hierarchy of ContactFormValuesContainer has to be maintained by the manager of the instances of this class (typically the BridgedFormValuesContainer).\n * Each ContactFormValuesContainer has a reference to its `rootForm`.\n * The `serviceFactory` and `formFactory` are used to create new services and add sub-forms.\n */\nexport class ContactFormValuesContainer implements FormValuesContainer<DecryptedService, ServiceMetadata> {\n\trootForm: CardinalForm\n\tcurrentContact: DecryptedContact //The contact of the moment, used to record new modifications\n\tcontactsHistory: DecryptedContact[] //Must be sorted (most recent first), contains all the contacts linked to this form\n\tchildren: ContactFormValuesContainer[] //Direct children of the ContactFormValuesContainer\n\tserviceFactory: (label: string, serviceId?: string) => DecryptedService\n\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>\n\tformRecycler: (formId: string) => Promise<void>\n\n\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[]\n\tprivate _id: string = uuidv4()\n\tprivate _initialised = false\n\n\ttoString(): string {\n\t\treturn `Contact(${this.rootForm.formTemplateId}[${this.rootForm.id}]) - ${this._id}`\n\t}\n\n\tmustBeInitialised() {\n\t\treturn !this._initialised\n\t}\n\n\t/**\n\t * Returns a contact that combines the content of the contact in this form with the content of all contents stored in the children\n\t */\n\tcoordinatedContact(): DecryptedContact {\n\t\tconst childrenContacts = this.children.map((c) => c.coordinatedContact())\n\t\tconst thisKeptServiceIds = (this.currentContact.subContacts ?? []).filter((sc) => sc.formId === this.rootForm.id).flatMap((sc) => (sc.services ?? []).map((s) => s.serviceId))\n\t\treturn new DecryptedContact({\n\t\t\t...this.currentContact,\n\t\t\tservices: childrenContacts\n\t\t\t\t.reduce((acc: DecryptedService[], c: DecryptedContact) => acc.concat(c.services ?? []), [])\n\t\t\t\t.concat((this.currentContact.services ?? []).filter((s) => thisKeptServiceIds.includes(s.id))),\n\t\t\tsubContacts: childrenContacts\n\t\t\t\t.reduce((acc: DecryptedSubContact[], c: DecryptedContact) => acc.concat(c.subContacts ?? []), [])\n\t\t\t\t.concat((this.currentContact.subContacts ?? []).filter((s) => s.formId === this.rootForm.id)),\n\t\t})\n\t}\n\n\t/**\n\t * Returns a contact that combines the content of the contact in this form with the content of all contents stored in the children\n\t */\n\tallForms(): CardinalForm[] {\n\t\treturn [this.rootForm].concat(this.children.flatMap((c) => c.allForms()))\n\t}\n\n\tconstructor(\n\t\trootForm: CardinalForm,\n\t\tcurrentContact: DecryptedContact,\n\t\tcontactsHistory: DecryptedContact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => DecryptedService,\n\t\tchildren: ContactFormValuesContainer[],\n\t\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>,\n\t\tformRecycler: (formId: string) => Promise<void>,\n\t\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[] = [],\n\t\tinitialised = true,\n\t) {\n\t\tconsole.log(`Creating contact FVC (${rootForm.formTemplateId}) with ${children.length} children [${this._id}]`)\n\n\t\tif (contactsHistory.includes(currentContact)) {\n\t\t\tthrow new Error('Illegal argument, the history must not contain the currentContact')\n\t\t}\n\t\tthis.rootForm = rootForm\n\t\tthis.currentContact = currentContact\n\t\tthis.contactsHistory = sortedBy(contactsHistory, 'created', 'desc')\n\t\tthis.children = children\n\t\tthis.serviceFactory = serviceFactory\n\t\tthis.formFactory = formFactory\n\t\tthis.formRecycler = formRecycler\n\t\tthis.changeListeners = changeListeners\n\t\tthis._initialised = initialised\n\n\t\tthis.synchronise()\n\t}\n\n\tsynchronise() {\n\t\tthis.children.forEach((childFVC) => {\n\t\t\tthis.registerChildFormValuesContainer(childFVC.synchronise())\n\t\t})\n\t\treturn this\n\t}\n\n\t//Make sure that when a child is changed, a new version of this is created with the updated child\n\tregisterChildFormValuesContainer(childFormValueContainer: ContactFormValuesContainer) {\n\t\tchildFormValueContainer.changeListeners = [\n\t\t\t(newValue) => {\n\t\t\t\tconsole.log(`Child ${newValue._id} ${childFormValueContainer.rootForm.formTemplateId} changed, updating parent ${this._id} ${this.rootForm.formTemplateId}`)\n\t\t\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\t\tthis.rootForm,\n\t\t\t\t\tthis.currentContact,\n\t\t\t\t\tthis.contactsHistory,\n\t\t\t\t\tthis.serviceFactory,\n\t\t\t\t\tthis.children.map((c) => {\n\t\t\t\t\t\treturn c.rootForm.id === childFormValueContainer.rootForm.id ? newValue : c\n\t\t\t\t\t}),\n\t\t\t\t\tthis.formFactory,\n\t\t\t\t\tthis.formRecycler,\n\t\t\t\t)\n\t\t\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t\t\t},\n\t\t]\n\t}\n\n\tstatic async fromFormsHierarchy(\n\t\trootForm: CardinalForm,\n\t\tcurrentContact: DecryptedContact,\n\t\tcontactsHistory: DecryptedContact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => DecryptedService,\n\t\tformChildrenProvider: (parentId: string | undefined) => Promise<CardinalForm[]>,\n\t\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>,\n\t\tformRecycler: (formId: string) => Promise<void>,\n\t\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[] = [],\n\t): Promise<ContactFormValuesContainer> {\n\t\tconst contactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\trootForm,\n\t\t\tcurrentContact,\n\t\t\tcontactsHistory,\n\t\t\tserviceFactory,\n\t\t\trootForm.id\n\t\t\t\t? await Promise.all(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait formChildrenProvider(rootForm.id)\n\t\t\t\t\t\t).map(\n\t\t\t\t\t\t\tasync (f) =>\n\t\t\t\t\t\t\t\t// eslint-disable-next-line max-len\n\t\t\t\t\t\t\t\tawait ContactFormValuesContainer.fromFormsHierarchy(f, currentContact, contactsHistory, serviceFactory, formChildrenProvider, formFactory, formRecycler),\n\t\t\t\t\t\t),\n\t\t\t\t )\n\t\t\t\t: [],\n\t\t\tformFactory,\n\t\t\tformRecycler,\n\t\t\tchangeListeners,\n\t\t\tfalse,\n\t\t)\n\t\tcontactFormValuesContainer.children.forEach((childFVC) => contactFormValuesContainer.registerChildFormValuesContainer(childFVC))\n\n\t\treturn contactFormValuesContainer\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.rootForm.descr ?? ''\n\t}\n\n\tgetFormId(): string | undefined {\n\t\treturn this.rootForm?.formTemplateId\n\t}\n\n\tregisterChangeListener(listener: (newValue: ContactFormValuesContainer) => void): void {\n\t\tthis.changeListeners.push(listener)\n\t}\n\n\tunregisterChangeListener(listener: (newValue: ContactFormValuesContainer) => void): void {\n\t\tthis.changeListeners = this.changeListeners.filter((l) => l !== listener)\n\t}\n\n\tgetChildren(): ContactFormValuesContainer[] {\n\t\treturn this.children\n\t}\n\n\tgetValidationErrors(): [FieldMetadata, string][] {\n\t\tthrow new Error('Validation not supported at contact level')\n\t}\n\n\tgetValues(revisionsFilter: (id: string, history: Version<ServiceMetadata>[]) => (string | null)[]): VersionedData<DecryptedService> {\n\t\treturn Object.entries(this.getServicesInHistory(revisionsFilter)).reduce(\n\t\t\t(acc, [id, history]) =>\n\t\t\t\thistory.length\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t[id]: [...history].sort((a, b) => (b?.modified || +new Date()) - (a?.modified || +new Date())),\n\t\t\t\t\t }\n\t\t\t\t\t: acc,\n\t\t\t{},\n\t\t)\n\t}\n\n\tgetMetadata(id: string, revisions: (string | null)[]): VersionedData<ServiceMetadata> {\n\t\treturn [this.currentContact]\n\t\t\t.concat(this.contactsHistory)\n\t\t\t.filter((ctc) => ctc.rev !== undefined && revisions.includes(ctc.rev))\n\t\t\t.reduce(\n\t\t\t\t(acc, ctc) =>\n\t\t\t\t\t(ctc.services ?? [])\n\t\t\t\t\t\t.filter((s) => s.id === id)\n\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t(acc, s) =>\n\t\t\t\t\t\t\t\ts.id\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t\t[s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({\n\t\t\t\t\t\t\t\t\t\t\t\trevision: ctc.rev ?? null,\n\t\t\t\t\t\t\t\t\t\t\t\tmodified: s.modified,\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: s.label ?? s.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresponsible: s.responsible,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t: acc,\n\t\t\t\t\t\t\tacc,\n\t\t\t\t\t\t) ?? acc,\n\t\t\t\t{} as { [id: string]: Version<ServiceMetadata>[] },\n\t\t\t) //index services in history by id\n\t}\n\n\tsetMetadata(meta: ServiceMetadata, id?: string): void {\n\t\tconst service = (id && this.getServiceInCurrentContact(id)) || this.serviceFactory(meta.label, id)\n\t\tif (!service.id) {\n\t\t\tthrow new Error('Service id must be defined')\n\t\t}\n\t\tif (\n\t\t\t(meta.responsible && service.responsible !== meta.responsible) ||\n\t\t\t(meta.valueDate && service.valueDate !== meta.valueDate) ||\n\t\t\t(meta.codes && service.codes !== meta.codes) ||\n\t\t\t(meta.tags && service.tags !== meta.tags)\n\t\t) {\n\t\t\tconst newService = new DecryptedService({ ...service, modified: Date.now() })\n\t\t\tmeta.responsible && (newService.responsible = meta.responsible)\n\t\t\tmeta.valueDate && (newService.valueDate = meta.valueDate)\n\t\t\tmeta.codes && (newService.codes = normalizeCodes(meta.codes))\n\t\t\tmeta.tags && (newService.tags = normalizeCodes(meta.tags))\n\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\t{\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tservices: this.currentContact.services?.map((s) => (s.id === service.id ? newService : s)),\n\t\t\t\t},\n\t\t\t\tthis.contactsHistory,\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tsetValue(label: string, language: string, value?: DecryptedService, id?: string, metadata?: ServiceMetadata, changeListenersOverrider?: (fvc: ContactFormValuesContainer) => void): void {\n\t\tconst service = (id && this.getServicesInHistory((sid: string, history) => (sid === id ? history.map((x) => x.revision) : []))[id]?.[0]?.value) || this.serviceFactory(label, id)\n\t\tif (!service.id) {\n\t\t\tthrow new Error('Service id must be defined')\n\t\t}\n\t\tconsole.log('Setting value of service', service.id, 'with', value, 'and metadata', metadata)\n\t\tconst newContent = value?.content?.[language]\n\t\tconst newCodes = value?.codes ? normalizeCodes(value.codes) : []\n\t\tif (!isContentEqual(service.content?.[language], newContent) || (newCodes && !areCodesEqual(newCodes, service.codes ?? []))) {\n\t\t\tconst newService = new DecryptedService({ ...service, modified: Date.now() })\n\t\t\tconst newContents = newContent\n\t\t\t\t? {\n\t\t\t\t\t\t...(service.content || {}),\n\t\t\t\t\t\t[language]: newContent,\n\t\t\t\t }\n\t\t\t\t: { ...(service.content || {}) }\n\t\t\tif (!newContent) {\n\t\t\t\tdelete newContents[language]\n\t\t\t}\n\n\t\t\tlet newCurrentContact: DecryptedContact\n\t\t\tif (!Object.entries(newContents).filter(([, cnt]) => cnt !== undefined).length) {\n\t\t\t\tnewCurrentContact = {\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tsubContacts: (this.currentContact.subContacts ?? []).some((sc) => sc.formId === this.rootForm.id)\n\t\t\t\t\t\t? (this.currentContact.subContacts ?? []).map((sc) => {\n\t\t\t\t\t\t\t\tif (sc.formId === this.rootForm.id) {\n\t\t\t\t\t\t\t\t\treturn { ...sc, services: (sc.services ?? []).filter((s) => s.serviceId !== service.id).concat([{ serviceId: service.id }]) }\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn sc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t })\n\t\t\t\t\t\t: (this.currentContact.subContacts ?? []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })),\n\t\t\t\t\tservices: (this.currentContact.services ?? []).some((s) => s.id === service.id)\n\t\t\t\t\t\t? (this.currentContact.services ?? []).filter((s) => s.id !== service.id)\n\t\t\t\t\t\t: [...(this.currentContact.services ?? [])],\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewService.content = newContents\n\t\t\t\tnewService.codes = newCodes\n\n\t\t\t\tif (metadata) {\n\t\t\t\t\tnewService.responsible = metadata.responsible ?? newService.responsible\n\t\t\t\t\tnewService.valueDate = metadata.valueDate ?? newService.valueDate\n\t\t\t\t\tnewService.tags = metadata.tags ? normalizeCodes(metadata.tags) : newService.tags\n\t\t\t\t\tnewService.label = metadata.label ?? newService.label\n\t\t\t\t}\n\n\t\t\t\tnewCurrentContact = {\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tsubContacts: (this.currentContact.subContacts ?? []).some((sc) => sc.formId === this.rootForm.id)\n\t\t\t\t\t\t? (this.currentContact.subContacts ?? []).map((sc) => {\n\t\t\t\t\t\t\t\tif (sc.formId === this.rootForm.id) {\n\t\t\t\t\t\t\t\t\treturn { ...sc, services: (sc.services ?? []).filter((s) => s.serviceId !== service.id).concat([{ serviceId: service.id }]) }\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn sc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t })\n\t\t\t\t\t\t: (this.currentContact.subContacts ?? []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })),\n\t\t\t\t\tservices: (this.currentContact.services ?? []).some((s) => s.id === service.id)\n\t\t\t\t\t\t? (this.currentContact.services ?? []).map((s) => (s.id === service.id ? newService : s))\n\t\t\t\t\t\t: [...(this.currentContact.services ?? []), newService],\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\tnewCurrentContact,\n\t\t\t\tthis.contactsHistory.map((c) => (c === this.currentContact ? newCurrentContact : c)),\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tchangeListenersOverrider ? changeListenersOverrider(newFormValuesContainer) : this.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tdelete(serviceId: string): void {\n\t\tconst service = this.getServiceInCurrentContact(serviceId)\n\t\tif (service) {\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\t{\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tservices: this.currentContact.services?.map((s) =>\n\t\t\t\t\t\ts.id === serviceId\n\t\t\t\t\t\t\t? new DecryptedService({\n\t\t\t\t\t\t\t\t\t...service,\n\t\t\t\t\t\t\t\t\tendOfLife: Date.now(),\n\t\t\t\t\t\t\t })\n\t\t\t\t\t\t\t: s,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tthis.contactsHistory,\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tcompute<T>(): T | undefined {\n\t\tthrow new Error('Compute not supported at contact level')\n\t}\n\n\t/** returns all services in history that match a selector\n\t *\n\t * @private\n\t * @param revisionsFilter\n\t */\n\tprivate getServicesInHistory(revisionsFilter: (id: string, history: Version<ServiceMetadata>[]) => (string | null)[]): VersionedData<DecryptedService> {\n\t\tconst indexedServices = [this.currentContact].concat(this.contactsHistory).reduce((acc, ctc) => {\n\t\t\tconst services =\n\t\t\t\tctc.services\n\t\t\t\t\t?.filter((s) => ctc.subContacts?.some((sc) => sc.formId === this.rootForm.id && sc.services?.some((sss) => sss.serviceId === s.id)))\n\t\t\t\t\t?.reduce(\n\t\t\t\t\t\t(acc, s) =>\n\t\t\t\t\t\t\ts.id\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t[s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({\n\t\t\t\t\t\t\t\t\t\t\trevision: ctc.rev ?? null,\n\t\t\t\t\t\t\t\t\t\t\tmodified: ctc.created,\n\t\t\t\t\t\t\t\t\t\t\tvalue: s,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t: acc,\n\t\t\t\t\t\tacc,\n\t\t\t\t\t) ?? acc\n\t\t\treturn services\n\t\t}, {} as VersionedData<DecryptedService>) //index services in history by id\n\t\treturn Object.entries(indexedServices)\n\t\t\t.map(([id, history]) => {\n\t\t\t\tconst keptRevisions = revisionsFilter(\n\t\t\t\t\tid,\n\t\t\t\t\thistory.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\t\trevision,\n\t\t\t\t\t\tmodified,\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tlabel: s.label ?? s.id ?? '',\n\t\t\t\t\t\t\towner: s.responsible,\n\t\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\t\tcodes: s.codes,\n\t\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t)\n\t\t\t\treturn [id, history.filter(({ revision }) => keptRevisions.includes(revision))] as [string, Version<DecryptedService>[]]\n\t\t\t})\n\t\t\t.reduce((acc, [id, history]) => ({ ...acc, [id]: history }), {})\n\t}\n\n\tasync addChild(anchorId: string, templateId: string, label: string): Promise<void> {\n\t\tconst parentId = this.rootForm.id\n\t\tif (!parentId) return\n\n\t\tconst newForm = await this.formFactory(parentId, anchorId, templateId, label)\n\t\tconst childFVC = new ContactFormValuesContainer(newForm, this.currentContact, this.contactsHistory, this.serviceFactory, [], this.formFactory, this.formRecycler, [], false)\n\n\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\tthis.rootForm,\n\t\t\tthis.currentContact,\n\t\t\tthis.contactsHistory,\n\t\t\tthis.serviceFactory,\n\t\t\t[...this.children, childFVC],\n\t\t\tthis.formFactory,\n\t\t\tthis.formRecycler,\n\t\t\tthis.changeListeners,\n\t\t)\n\t\tnewContactFormValuesContainer.registerChildFormValuesContainer(childFVC)\n\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t}\n\n\tprivate getServiceInCurrentContact(id: string): DecryptedService | undefined {\n\t\tconst service = (this.currentContact.services || [])?.find((s) => s.id === id)\n\t\treturn service ?? undefined\n\t}\n\n\tasync removeChild(container: ContactFormValuesContainer): Promise<void> {\n\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\tthis.rootForm,\n\t\t\tthis.currentContact,\n\t\t\tthis.contactsHistory,\n\t\t\tthis.serviceFactory,\n\t\t\tthis.children.filter((c) => c.rootForm.id !== container.rootForm.id),\n\t\t\tthis.formFactory,\n\t\t\tthis.formRecycler,\n\t\t\tthis.changeListeners,\n\t\t)\n\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t}\n}\n\nconst setValueOnContactFormValuesContainer = (\n\tcfvc: ContactFormValuesContainer,\n\tlabel: string,\n\tlanguage: string,\n\tfv?: FieldValue,\n\tid?: string,\n\tmetadata?: FieldMetadata,\n\tchangeListenersOverrider?: (fvc: ContactFormValuesContainer) => void,\n) => {\n\tconst value = fv?.content[language]\n\tcfvc.setValue(\n\t\tlabel,\n\t\tlanguage,\n\t\tnew DecryptedService({\n\t\t\tid: id,\n\t\t\tcodes: fv?.codes?.map((x) => new CodeStub(x)) ?? [],\n\t\t\tcontent: value\n\t\t\t\t? {\n\t\t\t\t\t\t[language]: primitiveTypeToContent(language, value),\n\t\t\t\t }\n\t\t\t\t: undefined,\n\t\t}),\n\t\tid,\n\t\tmetadata\n\t\t\t? {\n\t\t\t\t\tlabel: metadata?.label ?? label,\n\t\t\t\t\tresponsible: metadata?.owner,\n\t\t\t\t\tvalueDate: metadata?.valueDate,\n\t\t\t\t\ttags: metadata?.tags?.map((x) => new CodeStub(x)),\n\t\t\t }\n\t\t\t: undefined,\n\t\tchangeListenersOverrider,\n\t)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"form-values-container.js","sourceRoot":"","sources":["../../tmp/icure/form-values-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { CodeStub, DecryptedContact, DecryptedForm as CardinalForm, DecryptedService, DecryptedSubContact } from '@icure/cardinal-sdk'\nimport { sortedBy } from '../utils/no-lodash'\nimport { FormValuesContainer, Version, VersionedData } from '../generic'\nimport { ServiceMetadata } from './model'\nimport { FieldMetadata, FieldValue, PrimitiveType, Validator } from '../components/model'\nimport { areCodesEqual, codeStubToCode, contentToPrimitiveType, isContentEqual, primitiveTypeToContent } from './icure-utils'\nimport { parsePrimitive } from '../utils/primitive'\nimport { anyDateToDate } from '../utils/dates'\nimport { v4 as uuidv4 } from 'uuid'\nimport { normalizeCodes } from '../utils/code-utils'\n\nfunction notify<Value, Metadata>(l: (fvc: FormValuesContainer<Value, Metadata>) => void, fvc: FormValuesContainer<Value, Metadata>) {\n\t//console.log('Notifying', l, fvc.toString())\n\tl(fvc)\n}\n\n/** This class is a bridge between the ICure API and the generic FormValuesContainer interface.\n * It wraps around a ContactFormValuesContainer and provides a series of services:\n * - It computes dependent values when the form is created\n * - It broadcasts changes from the wrapped ContactFormValuesContainer to its listeners\n * - It provides a way to compute formulas in a sandboxed environment\n * - It bridges the setValues and setMetadata methods with the wrapped ContactFormValuesContainer by\n * \t\t- converting the FieldValue to a Service\n * \t\t- converting the FieldMetadata to a ServiceMetadata\n * - It bridges the getValues and getMetadata methods with the wrapped ContactFormValuesContainer by\n * \t\t- converting the Service to a FieldValue\n * \t\t- converting the ServiceMetadata to a FieldMetadata\n * - It lazily creates bridges the children by\n * - lazily creating BridgedFormValuesContainer when the children of the wrapped ContactFormValuesContainer are accessed\n * - creating a new ContactFormValuesContainer and wrapping it in a BridgedFormValuesContainer when a child is added\n *\n * The icure-form typically accepts a BridgedFormValuesContainer as a prop and uses it to interact with the form.\n *\n * This class is fairly generic and can be used as an inspiration or subclassed for other bridges\n */\nexport class BridgedFormValuesContainer implements FormValuesContainer<FieldValue, FieldMetadata> {\n\tprivate contact: DecryptedContact\n\tprivate contactFormValuesContainer: ContactFormValuesContainer\n\tprivate _id: string = uuidv4()\n\tprivate mutateAndNotify: (newContactFormValuesContainer: ContactFormValuesContainer) => BridgedFormValuesContainer\n\n\ttoString(): string {\n\t\treturn `Bridged(${this.contactFormValuesContainer.rootForm.formTemplateId}[${this.contactFormValuesContainer.rootForm.id}]) - ${this._id}`\n\t}\n\n\t/**\n\t * Creates an instance of BridgedFormValuesContainer.\n\t * @param responsible The id of the data owner responsible for the creation of the values\n\t * @param contact The displayed contact (may be in the past). === to currentContact if the contact is the contact of the day\n\t * @param contactFormValuesContainer The wrapped ContactFormValuesContainer\n\t * @param interpreter A function that can interpret formulas\n\t * @param dependentValuesProvider A function that provides the dependent values (computed on the basis of other values) for a given anchorId and templateId\n\t * @param validatorsProvider A function that provides the validators for a given anchorId and templateId\n\t * @param language The language in which the values are displayed\n\t * @param changeListeners The listeners that will be notified when the values change\n\t * @param initialValuesProvider A lambda that provides the initial values of the form\n\t */\n\tconstructor(\n\t\tprivate responsible: string,\n\t\tcontactFormValuesContainer: ContactFormValuesContainer,\n\t\tprivate interpreter?: <\n\t\t\tT,\n\t\t\tS extends {\n\t\t\t\t[key: string | symbol]: unknown\n\t\t\t},\n\t\t>(\n\t\t\tformula: string,\n\t\t\tsandbox: S,\n\t\t) => T | undefined,\n\t\tcontact?: DecryptedContact,\n\t\tprivate initialValuesProvider: (\n\t\t\tanchorId?: string,\n\t\t\ttemplateId?: string,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\trevisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]\n\t\t\tformula: string\n\t\t}[] = () => [],\n\t\tprivate dependentValuesProvider: (\n\t\t\tanchorId: string | undefined,\n\t\t\ttemplateId: string | undefined,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\trevisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]\n\t\t\tformula: string\n\t\t}[] = () => [],\n\t\tprivate validatorsProvider: (\n\t\t\tanchorId: string | undefined,\n\t\t\ttemplateId: string,\n\t\t) => {\n\t\t\tmetadata: FieldMetadata\n\t\t\tvalidators: Validator[]\n\t\t}[] = () => [],\n\t\tprivate language = 'en',\n\t\tprivate changeListeners: ((newValue: BridgedFormValuesContainer) => void)[] = [],\n\t) {\n\t\tconsole.log(`Creating bridge FVC (${contactFormValuesContainer.rootForm.formTemplateId}) with ${contactFormValuesContainer.children.length} children [${this._id}]`)\n\t\t//Before start to broadcast changes, we need to fill in the contactFormValuesContainer with the dependent values\n\t\tthis.contactFormValuesContainer = contactFormValuesContainer\n\t\tthis.mutateAndNotify = (newContactFormValuesContainer: ContactFormValuesContainer) => {\n\t\t\tnewContactFormValuesContainer.unregisterChangeListener(this.mutateAndNotify)\n\t\t\tconst newBridgedFormValueContainer = new BridgedFormValuesContainer(\n\t\t\t\tthis.responsible,\n\t\t\t\tnewContactFormValuesContainer,\n\t\t\t\tthis.interpreter,\n\t\t\t\tthis.contact === this.contactFormValuesContainer.currentContact ? newContactFormValuesContainer.currentContact : this.contact,\n\t\t\t\tthis.initialValuesProvider,\n\t\t\t\tthis.dependentValuesProvider,\n\t\t\t\tthis.validatorsProvider,\n\t\t\t\tthis.language,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newBridgedFormValueContainer))\n\t\t\treturn newBridgedFormValueContainer\n\t\t}\n\t\tthis.contactFormValuesContainer.registerChangeListener(this.mutateAndNotify)\n\t\tthis.contact = contact ?? contactFormValuesContainer.currentContact\n\t\tif (this.contactFormValuesContainer.mustBeInitialised()) {\n\t\t\tthis.computeInitialValues()\n\t\t}\n\t\tthis.computeDependentValues()\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.contactFormValuesContainer.getLabel()\n\t}\n\n\tgetFormId(): string | undefined {\n\t\treturn this.contactFormValuesContainer.getFormId()\n\t}\n\n\tgetContactFormValuesContainer() {\n\t\treturn this.contactFormValuesContainer\n\t}\n\n\tregisterChangeListener(listener: (newValue: BridgedFormValuesContainer) => void): void {\n\t\tthis.changeListeners.push(listener)\n\t}\n\n\tunregisterChangeListener(listener: (newValue: BridgedFormValuesContainer) => void): void {\n\t\tthis.changeListeners = this.changeListeners.filter((l) => l !== listener)\n\t}\n\n\tgetValues(revisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]): VersionedData<FieldValue> {\n\t\treturn Object.entries(\n\t\t\tthis.contactFormValuesContainer.getValues((id, history) =>\n\t\t\t\trevisionsFilter(\n\t\t\t\t\tid,\n\t\t\t\t\thistory\n\t\t\t\t\t\t.filter(({ modified }) => !this.contact.created || !modified || modified <= this.contact.created)\n\t\t\t\t\t\t.map(({ revision, modified, value: sm }) => ({\n\t\t\t\t\t\t\trevision,\n\t\t\t\t\t\t\tmodified,\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\tlabel: sm.label,\n\t\t\t\t\t\t\t\towner: sm.responsible,\n\t\t\t\t\t\t\t\ttags: sm.tags?.map(codeStubToCode),\n\t\t\t\t\t\t\t\tvalueDate: sm.valueDate,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t),\n\t\t).reduce((acc, [id, history]) => {\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[id]: history.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\trevision,\n\t\t\t\t\tmodified,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tcontent: Object.entries(s.content ?? {}).reduce((acc, [lng, cnt]) => {\n\t\t\t\t\t\t\tconst converted = contentToPrimitiveType(lng, cnt)\n\t\t\t\t\t\t\treturn converted ? { ...acc, [lng]: converted } : acc\n\t\t\t\t\t\t}, {}),\n\t\t\t\t\t\tcodes: s.codes?.map(codeStubToCode),\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t}\n\t\t}, {} as VersionedData<FieldValue>)\n\t}\n\n\tgetMetadata(id: string, revisions: (string | null)[]): VersionedData<FieldMetadata> {\n\t\treturn Object.entries(this.contactFormValuesContainer.getMetadata(id, revisions)).reduce(\n\t\t\t(acc, [id, history]) => ({\n\t\t\t\t...acc,\n\t\t\t\t[id]: history.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\trevision,\n\t\t\t\t\tmodified,\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tlabel: s.label,\n\t\t\t\t\t\towner: s.responsible,\n\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\tdiscordantMetadata: () => ({\n\t\t\t\t\t\t\t...(s.responsible !== this.responsible ? { owner: this.responsible } : {}),\n\t\t\t\t\t\t\t...(Math.abs(+(anyDateToDate(s.valueDate) ?? 0) - +(anyDateToDate(this.contact.created) ?? 0)) > 24 * 3600000 ? { valueDate: s.valueDate } : {}),\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t})),\n\t\t\t}),\n\t\t\t{},\n\t\t)\n\t}\n\n\t//This method mutates the BridgedFormValuesContainer but can only be called from the constructor\n\tprivate computeInitialValues() {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\tthis.initialValuesProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).forEach(({ metadata, revisionsFilter, formula }) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\tif (!currentValue || !Object.keys(currentValue).length) {\n\t\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\t\tif (newValue !== undefined) {\n\t\t\t\t\t\t\tconst lng = this.language ?? 'en'\n\t\t\t\t\t\t\tif (newValue && !newValue.content[lng] && newValue.content['*']) {\n\t\t\t\t\t\t\t\tnewValue.content[lng] = newValue.content['*']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\t\tdelete newValue.content['*']\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, metadata.label, lng, newValue, undefined, metadata, (fvc: ContactFormValuesContainer) => {\n\t\t\t\t\t\t\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\t//This method mutates the BridgedFormValuesContainer but can only be called from the constructor\n\tprivate computeDependentValues() {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\tthis.dependentValuesProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).forEach(({ metadata, revisionsFilter, formula }) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\tif (newValue !== undefined || currentValue != undefined) {\n\t\t\t\t\t\tconst lng = this.language ?? 'en'\n\t\t\t\t\t\tif (newValue && !newValue.content[lng] && newValue.content['*']) {\n\t\t\t\t\t\t\tnewValue.content[lng] = newValue.content['*']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\tdelete newValue.content['*']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst interceptor = (fvc: ContactFormValuesContainer) => {\n\t\t\t\t\t\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, metadata.label, lng, newValue, Object.keys(currentValue ?? {})[0], metadata, interceptor)\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetValue(label: string, language: string, fv?: FieldValue, id?: string, metadata?: FieldMetadata): void {\n\t\tsetValueOnContactFormValuesContainer(this.contactFormValuesContainer, label, language, fv, id, metadata)\n\t}\n\n\tsetMetadata(meta: FieldMetadata, id?: string | undefined): void {\n\t\tthis.contactFormValuesContainer.setMetadata(\n\t\t\t{\n\t\t\t\tlabel: meta.label,\n\t\t\t\tresponsible: meta.owner,\n\t\t\t\tvalueDate: meta.valueDate,\n\t\t\t\ttags: meta.tags?.map((x) => new CodeStub(x)),\n\t\t\t},\n\t\t\tid,\n\t\t)\n\t}\n\n\tdelete(serviceId: string): void {\n\t\tthis.contactFormValuesContainer.delete(serviceId)\n\t}\n\n\tprivate getVersionedValuesForKey(key: string | symbol) {\n\t\treturn this.getValues((id, history) => (history?.[0]?.value?.label && key === history[0].value.label ? [history?.[0]?.revision] : []))\n\t}\n\n\tcompute<T, S extends { [key: string | symbol]: unknown }>(formula: string, sandbox?: S): T | undefined {\n\t\t// noinspection JSUnusedGlobalSymbols\n\t\tconst parseContent = (content?: { [key: string]: PrimitiveType }) => {\n\t\t\tif (!content) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst primitive = content[this.language] ?? content['*'] ?? content[Object.keys(content)[0]]\n\t\t\treturn primitive && parsePrimitive(primitive)\n\t\t}\n\t\tconst log = console.log\n\t\tconst native = {\n\t\t\tparseInt: parseInt,\n\t\t\tparseFloat: parseFloat,\n\t\t\tDate: Date,\n\t\t\tMath: Math,\n\t\t\tNumber: Number,\n\t\t\tString: String,\n\t\t\tBoolean: Boolean,\n\t\t\tArray: Array,\n\t\t\tObject: Object,\n\t\t\tparseContent,\n\t\t\tvalidate: {\n\t\t\t\tnotBlank: (self: any, label: string) => {\n\t\t\t\t\tconst value = parseContent((self[label as any] as any)?.[0]?.content)\n\t\t\t\t\treturn !!(value as any)?.trim()?.length\n\t\t\t\t},\n\t\t\t},\n\t\t\tlog,\n\t\t} as { [key: string]: any }\n\t\tconst proxy: S = new Proxy({} as S, {\n\t\t\thas: (target: S, key: string | symbol) => !!native[key as string] || key === 'self' || Object.keys(this.getVersionedValuesForKey(key) ?? {}).length > 0,\n\t\t\tget: (target: S, key: string | symbol) => {\n\t\t\t\tif (key === 'undefined') {\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\tconst nativeValue = native[key as string]\n\t\t\t\tif (!!nativeValue) {\n\t\t\t\t\treturn nativeValue\n\t\t\t\t}\n\t\t\t\treturn key === 'self' ? proxy : Object.values(this.getVersionedValuesForKey(key)).map((v) => v[0]?.value)\n\t\t\t},\n\t\t})\n\t\treturn this.interpreter?.(formula, sandbox ?? proxy)\n\t}\n\n\tgetChildren(): FormValuesContainer<FieldValue, FieldMetadata>[] {\n\t\tconst children = this.contactFormValuesContainer\n\t\t\t.getChildren()\n\t\t\t.map(\n\t\t\t\t(fvc) =>\n\t\t\t\t\tnew BridgedFormValuesContainer(this.responsible, fvc, this.interpreter, this.contact, this.initialValuesProvider, this.dependentValuesProvider, this.validatorsProvider, this.language, []),\n\t\t\t)\n\t\tconsole.log(`${children.length} children found in ${this.contactFormValuesContainer.rootForm.formTemplateId} initialised with `, this.initialValuesProvider)\n\t\treturn children\n\t}\n\n\tgetValidationErrors(): [FieldMetadata, string][] {\n\t\tif (this.contactFormValuesContainer.rootForm.formTemplateId) {\n\t\t\treturn this.validatorsProvider(this.contactFormValuesContainer.rootForm.descr, this.contactFormValuesContainer.rootForm.formTemplateId).flatMap(\n\t\t\t\t({ metadata, validators }) =>\n\t\t\t\t\tvalidators\n\t\t\t\t\t\t.map(({ validation, message }) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn this.compute(validation) ? undefined : [metadata, message]\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\tconsole.log(`Error while computing validation : ${validation}`, e)\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter((x) => !!x) as [FieldMetadata, string][],\n\t\t\t)\n\t\t} else {\n\t\t\treturn []\n\t\t}\n\t}\n\n\tasync addChild(anchorId: string, templateId: string, label: string): Promise<void> {\n\t\tawait this.contactFormValuesContainer.addChild(anchorId, templateId, label)\n\t}\n\n\tasync removeChild(container: BridgedFormValuesContainer): Promise<void> {\n\t\tawait this.contactFormValuesContainer.removeChild(container.contactFormValuesContainer)\n\t}\n\n\tsynchronise() {\n\t\tthis.contactFormValuesContainer.synchronise()\n\t\treturn this\n\t}\n}\n\n/**\n * This class is a form values container that uses a hierarchy of forms as a data source. The actual values are extracted from the services of the contacts.\n * The `currentContact` is the contact that has been selected by the user, any later contact should be ignored.\n * The `contactsHistory` is used to provide the full history of the services.\n * The hierarchy of ContactFormValuesContainer has to be maintained by the manager of the instances of this class (typically the BridgedFormValuesContainer).\n * Each ContactFormValuesContainer has a reference to its `rootForm`.\n * The `serviceFactory` and `formFactory` are used to create new services and add sub-forms.\n */\nexport class ContactFormValuesContainer implements FormValuesContainer<DecryptedService, ServiceMetadata> {\n\trootForm: CardinalForm\n\tcurrentContact: DecryptedContact //The contact of the moment, used to record new modifications\n\tcontactsHistory: DecryptedContact[] //Must be sorted (most recent first), contains all the contacts linked to this form\n\tchildren: ContactFormValuesContainer[] //Direct children of the ContactFormValuesContainer\n\tserviceFactory: (label: string, serviceId?: string) => DecryptedService\n\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>\n\tformRecycler: (formId: string) => Promise<void>\n\n\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[]\n\tprivate _id: string = uuidv4()\n\tprivate _initialised = false\n\n\ttoString(): string {\n\t\treturn `Contact(${this.rootForm.formTemplateId}[${this.rootForm.id}]) - ${this._id}`\n\t}\n\n\tmustBeInitialised() {\n\t\treturn !this._initialised\n\t}\n\n\t/**\n\t * Returns a contact that combines the content of the contact in this form with the content of all contents stored in the children\n\t */\n\tcoordinatedContact(): DecryptedContact {\n\t\tconst childrenContacts = this.children.map((c) => c.coordinatedContact())\n\t\tconst thisKeptServiceIds = (this.currentContact.subContacts ?? []).filter((sc) => sc.formId === this.rootForm.id).flatMap((sc) => (sc.services ?? []).map((s) => s.serviceId))\n\t\treturn new DecryptedContact({\n\t\t\t...this.currentContact,\n\t\t\tservices: childrenContacts\n\t\t\t\t.reduce((acc: DecryptedService[], c: DecryptedContact) => acc.concat(c.services ?? []), [])\n\t\t\t\t.concat((this.currentContact.services ?? []).filter((s) => thisKeptServiceIds.includes(s.id))),\n\t\t\tsubContacts: childrenContacts\n\t\t\t\t.reduce((acc: DecryptedSubContact[], c: DecryptedContact) => acc.concat(c.subContacts ?? []), [])\n\t\t\t\t.concat((this.currentContact.subContacts ?? []).filter((s) => s.formId === this.rootForm.id)),\n\t\t})\n\t}\n\n\t/**\n\t * Returns a contact that combines the content of the contact in this form with the content of all contents stored in the children\n\t */\n\tallForms(): CardinalForm[] {\n\t\treturn [this.rootForm].concat(this.children.flatMap((c) => c.allForms()))\n\t}\n\n\tconstructor(\n\t\trootForm: CardinalForm,\n\t\tcurrentContact: DecryptedContact,\n\t\tcontactsHistory: DecryptedContact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => DecryptedService,\n\t\tchildren: ContactFormValuesContainer[],\n\t\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>,\n\t\tformRecycler: (formId: string) => Promise<void>,\n\t\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[] = [],\n\t\tinitialised = true,\n\t) {\n\t\tconsole.log(`Creating contact FVC (${rootForm.formTemplateId}) with ${children.length} children [${this._id}]`)\n\n\t\tif (contactsHistory.includes(currentContact)) {\n\t\t\tthrow new Error('Illegal argument, the history must not contain the currentContact')\n\t\t}\n\t\tthis.rootForm = rootForm\n\t\tthis.currentContact = currentContact\n\t\tthis.contactsHistory = sortedBy(contactsHistory, 'created', 'desc')\n\t\tthis.children = children\n\t\tthis.serviceFactory = serviceFactory\n\t\tthis.formFactory = formFactory\n\t\tthis.formRecycler = formRecycler\n\t\tthis.changeListeners = changeListeners\n\t\tthis._initialised = initialised\n\n\t\tthis.synchronise()\n\t}\n\n\tsynchronise() {\n\t\tthis.children.forEach((childFVC) => {\n\t\t\tthis.registerChildFormValuesContainer(childFVC.synchronise())\n\t\t})\n\t\treturn this\n\t}\n\n\t//Make sure that when a child is changed, a new version of this is created with the updated child\n\tregisterChildFormValuesContainer(childFormValueContainer: ContactFormValuesContainer) {\n\t\tchildFormValueContainer.changeListeners = [\n\t\t\t(newValue) => {\n\t\t\t\tconsole.log(`Child ${newValue._id} ${childFormValueContainer.rootForm.formTemplateId} changed, updating parent ${this._id} ${this.rootForm.formTemplateId}`)\n\t\t\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\t\tthis.rootForm,\n\t\t\t\t\tthis.currentContact,\n\t\t\t\t\tthis.contactsHistory,\n\t\t\t\t\tthis.serviceFactory,\n\t\t\t\t\tthis.children.map((c) => {\n\t\t\t\t\t\treturn c.rootForm.id === childFormValueContainer.rootForm.id ? newValue : c\n\t\t\t\t\t}),\n\t\t\t\t\tthis.formFactory,\n\t\t\t\t\tthis.formRecycler,\n\t\t\t\t)\n\t\t\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t\t\t},\n\t\t]\n\t}\n\n\tstatic async fromFormsHierarchy(\n\t\trootForm: CardinalForm,\n\t\tcurrentContact: DecryptedContact,\n\t\tcontactsHistory: DecryptedContact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => DecryptedService,\n\t\tformChildrenProvider: (parentId: string | undefined) => Promise<CardinalForm[]>,\n\t\tformFactory: (parentId: string, anchorId: string, formTemplateId: string, label: string) => Promise<CardinalForm>,\n\t\tformRecycler: (formId: string) => Promise<void>,\n\t\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[] = [],\n\t): Promise<ContactFormValuesContainer> {\n\t\tconst contactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\trootForm,\n\t\t\tcurrentContact,\n\t\t\tcontactsHistory,\n\t\t\tserviceFactory,\n\t\t\trootForm.id\n\t\t\t\t? await Promise.all(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tawait formChildrenProvider(rootForm.id)\n\t\t\t\t\t\t).map(\n\t\t\t\t\t\t\tasync (f) =>\n\t\t\t\t\t\t\t\t// eslint-disable-next-line max-len\n\t\t\t\t\t\t\t\tawait ContactFormValuesContainer.fromFormsHierarchy(f, currentContact, contactsHistory, serviceFactory, formChildrenProvider, formFactory, formRecycler),\n\t\t\t\t\t\t),\n\t\t\t\t )\n\t\t\t\t: [],\n\t\t\tformFactory,\n\t\t\tformRecycler,\n\t\t\tchangeListeners,\n\t\t\tfalse,\n\t\t)\n\t\tcontactFormValuesContainer.children.forEach((childFVC) => contactFormValuesContainer.registerChildFormValuesContainer(childFVC))\n\n\t\treturn contactFormValuesContainer\n\t}\n\n\tgetLabel(): string {\n\t\treturn this.rootForm.descr ?? ''\n\t}\n\n\tgetFormId(): string | undefined {\n\t\treturn this.rootForm?.formTemplateId\n\t}\n\n\tregisterChangeListener(listener: (newValue: ContactFormValuesContainer) => void): void {\n\t\tthis.changeListeners.push(listener)\n\t}\n\n\tunregisterChangeListener(listener: (newValue: ContactFormValuesContainer) => void): void {\n\t\tthis.changeListeners = this.changeListeners.filter((l) => l !== listener)\n\t}\n\n\tgetChildren(): ContactFormValuesContainer[] {\n\t\treturn this.children\n\t}\n\n\tgetValidationErrors(): [FieldMetadata, string][] {\n\t\tthrow new Error('Validation not supported at contact level')\n\t}\n\n\tgetValues(revisionsFilter: (id: string, history: Version<ServiceMetadata>[]) => (string | null)[]): VersionedData<DecryptedService> {\n\t\treturn Object.entries(this.getServicesInHistory(revisionsFilter)).reduce(\n\t\t\t(acc, [id, history]) =>\n\t\t\t\thistory.length\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t[id]: [...history].sort((a, b) => (b?.modified || +new Date()) - (a?.modified || +new Date())),\n\t\t\t\t\t }\n\t\t\t\t\t: acc,\n\t\t\t{},\n\t\t)\n\t}\n\n\tgetMetadata(id: string, revisions: (string | null)[]): VersionedData<ServiceMetadata> {\n\t\treturn [this.currentContact]\n\t\t\t.concat(this.contactsHistory)\n\t\t\t.filter((ctc) => ctc.rev !== undefined && revisions.includes(ctc.rev))\n\t\t\t.reduce(\n\t\t\t\t(acc, ctc) =>\n\t\t\t\t\t(ctc.services ?? [])\n\t\t\t\t\t\t.filter((s) => s.id === id)\n\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t(acc, s) =>\n\t\t\t\t\t\t\t\ts.id\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t\t[s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({\n\t\t\t\t\t\t\t\t\t\t\t\trevision: ctc.rev ?? null,\n\t\t\t\t\t\t\t\t\t\t\t\tmodified: s.modified,\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: s.label ?? s.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresponsible: s.responsible,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t: acc,\n\t\t\t\t\t\t\tacc,\n\t\t\t\t\t\t) ?? acc,\n\t\t\t\t{} as { [id: string]: Version<ServiceMetadata>[] },\n\t\t\t) //index services in history by id\n\t}\n\n\tsetMetadata(meta: ServiceMetadata, id?: string): void {\n\t\tconst service = (id && this.getServiceInCurrentContact(id)) || this.serviceFactory(meta.label, id)\n\t\tif (!service.id) {\n\t\t\tthrow new Error('Service id must be defined')\n\t\t}\n\t\tif (\n\t\t\t(meta.responsible && service.responsible !== meta.responsible) ||\n\t\t\t(meta.valueDate && service.valueDate !== meta.valueDate) ||\n\t\t\t(meta.codes && service.codes !== meta.codes) ||\n\t\t\t(meta.tags && service.tags !== meta.tags)\n\t\t) {\n\t\t\tconst newService = new DecryptedService({ ...service, modified: Date.now() })\n\t\t\tmeta.responsible && (newService.responsible = meta.responsible)\n\t\t\tmeta.valueDate && (newService.valueDate = meta.valueDate)\n\t\t\tmeta.codes && (newService.codes = normalizeCodes(meta.codes))\n\t\t\tmeta.tags && (newService.tags = normalizeCodes(meta.tags))\n\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\t{\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tservices: this.currentContact.services?.map((s) => (s.id === service.id ? newService : s)),\n\t\t\t\t},\n\t\t\t\tthis.contactsHistory,\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tsetValue(label: string, language: string, value?: DecryptedService, id?: string, metadata?: ServiceMetadata, changeListenersOverrider?: (fvc: ContactFormValuesContainer) => void): void {\n\t\tconst service = (id && this.getServicesInHistory((sid: string, history) => (sid === id ? history.map((x) => x.revision) : []))[id]?.[0]?.value) || this.serviceFactory(label, id)\n\t\tif (!service.id) {\n\t\t\tthrow new Error('Service id must be defined')\n\t\t}\n\t\tconsole.log('Setting value of service', service.id, 'with', value, 'and metadata', metadata)\n\t\tconst newContent = value?.content?.[language]\n\t\tconst newCodes = value?.codes ? normalizeCodes(value.codes) : []\n\t\tif (!isContentEqual(service.content?.[language], newContent) || (newCodes && !areCodesEqual(newCodes, service.codes ?? []))) {\n\t\t\tconst newService = new DecryptedService({ ...service, modified: Date.now() })\n\t\t\tconst newContents = newContent\n\t\t\t\t? {\n\t\t\t\t\t\t...(service.content || {}),\n\t\t\t\t\t\t[language]: newContent,\n\t\t\t\t }\n\t\t\t\t: { ...(service.content || {}) }\n\t\t\tif (!newContent) {\n\t\t\t\tdelete newContents[language]\n\t\t\t}\n\n\t\t\tlet newCurrentContact: DecryptedContact\n\t\t\tif (!Object.entries(newContents).filter(([, cnt]) => cnt !== undefined).length) {\n\t\t\t\tnewCurrentContact = {\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tsubContacts: (this.currentContact.subContacts ?? []).some((sc) => sc.formId === this.rootForm.id)\n\t\t\t\t\t\t? (this.currentContact.subContacts ?? []).map((sc) => {\n\t\t\t\t\t\t\t\tif (sc.formId === this.rootForm.id) {\n\t\t\t\t\t\t\t\t\treturn { ...sc, services: (sc.services ?? []).filter((s) => s.serviceId !== service.id).concat([{ serviceId: service.id }]) }\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn sc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t })\n\t\t\t\t\t\t: (this.currentContact.subContacts ?? []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })),\n\t\t\t\t\tservices: (this.currentContact.services ?? []).some((s) => s.id === service.id)\n\t\t\t\t\t\t? (this.currentContact.services ?? []).filter((s) => s.id !== service.id)\n\t\t\t\t\t\t: [...(this.currentContact.services ?? [])],\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewService.content = newContents\n\t\t\t\tnewService.codes = newCodes\n\n\t\t\t\tif (metadata) {\n\t\t\t\t\tnewService.responsible = metadata.responsible ?? newService.responsible\n\t\t\t\t\tnewService.valueDate = metadata.valueDate ?? newService.valueDate\n\t\t\t\t\tnewService.tags = metadata.tags ? normalizeCodes(metadata.tags) : newService.tags\n\t\t\t\t\tnewService.label = metadata.label ?? newService.label\n\t\t\t\t}\n\n\t\t\t\tnewCurrentContact = {\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tsubContacts: (this.currentContact.subContacts ?? []).some((sc) => sc.formId === this.rootForm.id)\n\t\t\t\t\t\t? (this.currentContact.subContacts ?? []).map((sc) => {\n\t\t\t\t\t\t\t\tif (sc.formId === this.rootForm.id) {\n\t\t\t\t\t\t\t\t\treturn { ...sc, services: (sc.services ?? []).filter((s) => s.serviceId !== service.id).concat([{ serviceId: service.id }]) }\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn sc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t })\n\t\t\t\t\t\t: (this.currentContact.subContacts ?? []).concat(new DecryptedSubContact({ formId: this.rootForm.id, services: [{ serviceId: service.id }] })),\n\t\t\t\t\tservices: (this.currentContact.services ?? []).some((s) => s.id === service.id)\n\t\t\t\t\t\t? (this.currentContact.services ?? []).map((s) => (s.id === service.id ? newService : s))\n\t\t\t\t\t\t: [...(this.currentContact.services ?? []), newService],\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\tnewCurrentContact,\n\t\t\t\tthis.contactsHistory.map((c) => (c === this.currentContact ? newCurrentContact : c)),\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tchangeListenersOverrider ? changeListenersOverrider(newFormValuesContainer) : this.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tdelete(serviceId: string): void {\n\t\tconst service = this.getServiceInCurrentContact(serviceId)\n\t\tif (service) {\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\t{\n\t\t\t\t\t...this.currentContact,\n\t\t\t\t\tservices: this.currentContact.services?.map((s) =>\n\t\t\t\t\t\ts.id === serviceId\n\t\t\t\t\t\t\t? new DecryptedService({\n\t\t\t\t\t\t\t\t\t...service,\n\t\t\t\t\t\t\t\t\tendOfLife: Date.now(),\n\t\t\t\t\t\t\t })\n\t\t\t\t\t\t\t: s,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tthis.contactsHistory,\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children,\n\t\t\t\tthis.formFactory,\n\t\t\t\tthis.formRecycler,\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => notify(l, newFormValuesContainer))\n\t\t}\n\t}\n\n\tcompute<T>(): T | undefined {\n\t\tthrow new Error('Compute not supported at contact level')\n\t}\n\n\t/** returns all services in history that match a selector\n\t *\n\t * @private\n\t * @param revisionsFilter\n\t */\n\tprivate getServicesInHistory(revisionsFilter: (id: string, history: Version<ServiceMetadata>[]) => (string | null)[]): VersionedData<DecryptedService> {\n\t\tconst indexedServices = [this.currentContact].concat(this.contactsHistory).reduce((acc, ctc) => {\n\t\t\tconst services =\n\t\t\t\tctc.services\n\t\t\t\t\t?.filter((s) => ctc.subContacts?.some((sc) => sc.formId === this.rootForm.id && sc.services?.some((sss) => sss.serviceId === s.id)))\n\t\t\t\t\t?.reduce(\n\t\t\t\t\t\t(acc, s) =>\n\t\t\t\t\t\t\ts.id\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t[s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({\n\t\t\t\t\t\t\t\t\t\t\trevision: ctc.rev ?? null,\n\t\t\t\t\t\t\t\t\t\t\tmodified: ctc.created,\n\t\t\t\t\t\t\t\t\t\t\tvalue: s,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t: acc,\n\t\t\t\t\t\tacc,\n\t\t\t\t\t) ?? acc\n\t\t\treturn services\n\t\t}, {} as VersionedData<DecryptedService>) //index services in history by id\n\t\treturn Object.entries(indexedServices)\n\t\t\t.map(([id, history]) => {\n\t\t\t\tconst keptRevisions = revisionsFilter(\n\t\t\t\t\tid,\n\t\t\t\t\thistory.map(({ revision, modified, value: s }) => ({\n\t\t\t\t\t\trevision,\n\t\t\t\t\t\tmodified,\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tlabel: s.label ?? s.id ?? '',\n\t\t\t\t\t\t\towner: s.responsible,\n\t\t\t\t\t\t\tvalueDate: s.valueDate,\n\t\t\t\t\t\t\tcodes: s.codes,\n\t\t\t\t\t\t\ttags: s.tags,\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t)\n\t\t\t\treturn [id, history.filter(({ revision }) => keptRevisions.includes(revision))] as [string, Version<DecryptedService>[]]\n\t\t\t})\n\t\t\t.reduce((acc, [id, history]) => ({ ...acc, [id]: history }), {})\n\t}\n\n\tasync addChild(anchorId: string, templateId: string, label: string): Promise<void> {\n\t\tconst parentId = this.rootForm.id\n\t\tif (!parentId) return\n\n\t\tconst newForm = await this.formFactory(parentId, anchorId, templateId, label)\n\t\tconst childFVC = new ContactFormValuesContainer(newForm, this.currentContact, this.contactsHistory, this.serviceFactory, [], this.formFactory, this.formRecycler, [], false)\n\n\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\tthis.rootForm,\n\t\t\tthis.currentContact,\n\t\t\tthis.contactsHistory,\n\t\t\tthis.serviceFactory,\n\t\t\t[...this.children, childFVC],\n\t\t\tthis.formFactory,\n\t\t\tthis.formRecycler,\n\t\t\tthis.changeListeners,\n\t\t)\n\t\tnewContactFormValuesContainer.registerChildFormValuesContainer(childFVC)\n\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t}\n\n\tprivate getServiceInCurrentContact(id: string): DecryptedService | undefined {\n\t\tconst service = (this.currentContact.services || [])?.find((s) => s.id === id)\n\t\treturn service ?? undefined\n\t}\n\n\tasync removeChild(container: ContactFormValuesContainer): Promise<void> {\n\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\tthis.rootForm,\n\t\t\tthis.currentContact,\n\t\t\tthis.contactsHistory,\n\t\t\tthis.serviceFactory,\n\t\t\tthis.children.filter((c) => c.rootForm.id !== container.rootForm.id),\n\t\t\tthis.formFactory,\n\t\t\tthis.formRecycler,\n\t\t\tthis.changeListeners,\n\t\t)\n\t\tthis.changeListeners.forEach((l) => notify(l, newContactFormValuesContainer))\n\t}\n}\n\nconst setValueOnContactFormValuesContainer = (\n\tcfvc: ContactFormValuesContainer,\n\tlabel: string,\n\tlanguage: string,\n\tfv?: FieldValue,\n\tid?: string,\n\tmetadata?: FieldMetadata,\n\tchangeListenersOverrider?: (fvc: ContactFormValuesContainer) => void,\n) => {\n\tconst value = fv?.content[language]\n\tcfvc.setValue(\n\t\tlabel,\n\t\tlanguage,\n\t\tnew DecryptedService({\n\t\t\tid: id,\n\t\t\tcodes: fv?.codes?.map((x) => new CodeStub(x)) ?? [],\n\t\t\tcontent: value\n\t\t\t\t? {\n\t\t\t\t\t\t[language]: primitiveTypeToContent(language, value),\n\t\t\t\t }\n\t\t\t\t: undefined,\n\t\t}),\n\t\tid,\n\t\tmetadata\n\t\t\t? {\n\t\t\t\t\tlabel: metadata?.label ?? label,\n\t\t\t\t\tresponsible: metadata?.owner,\n\t\t\t\t\tvalueDate: metadata?.valueDate,\n\t\t\t\t\ttags: metadata?.tags?.map((x) => new CodeStub(x)),\n\t\t\t }\n\t\t\t: undefined,\n\t\tchangeListenersOverrider,\n\t)\n}\n"]}
|