@icure/form 1.1.26 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarn/install-state.gz +0 -0
- package/components/common/metadata-buttons-bar.js +66 -15
- package/components/common/metadata-buttons-bar.js.map +1 -1
- package/components/icure-button/index.js +66 -15
- package/components/icure-button/index.js.map +1 -1
- package/components/icure-button-group/index.js +66 -15
- package/components/icure-button-group/index.js.map +1 -1
- package/components/icure-date-picker/index.js +70 -18
- package/components/icure-date-picker/index.js.map +1 -1
- package/components/icure-dropdown-field/index.js +66 -15
- package/components/icure-dropdown-field/index.js.map +1 -1
- package/components/icure-form/index.js +66 -15
- package/components/icure-form/index.js.map +1 -1
- package/components/icure-form/renderer/form/form-selection-button.d.ts +6 -1
- package/components/icure-form/renderer/form/form-selection-button.js +1126 -58
- package/components/icure-form/renderer/form/form-selection-button.js.map +1 -1
- package/components/icure-form/renderer/form/form.js +22 -19
- package/components/icure-form/renderer/form/form.js.map +1 -1
- package/components/icure-label/index.js +66 -15
- package/components/icure-label/index.js.map +1 -1
- package/components/icure-text-field/index.js +66 -15
- package/components/icure-text-field/index.js.map +1 -1
- package/components/model/index.d.ts +7 -1
- package/components/model/index.js +47 -3
- package/components/model/index.js.map +1 -1
- package/components/themes/default/index.js +2 -0
- package/components/themes/default/index.js.map +1 -1
- package/components/themes/icure-blue/index.js +2 -0
- package/components/themes/icure-blue/index.js.map +1 -1
- package/components/themes/kendo/index.js +2 -0
- package/components/themes/kendo/index.js.map +1 -1
- package/generic/model.d.ts +6 -5
- package/generic/model.js.map +1 -1
- package/icure/form-values-container.d.ts +31 -17
- package/icure/form-values-container.js +134 -75
- package/icure/form-values-container.js.map +1 -1
- package/package.json +1 -1
- package/utils/code-utils.d.ts +2 -0
- package/utils/code-utils.js +4 -1
- package/utils/code-utils.js.map +1 -1
- package/utils/fields-values-provider.d.ts +4 -9
- package/utils/fields-values-provider.js +6 -15
- package/utils/fields-values-provider.js.map +1 -1
- package/utils/form-value-container.d.ts +1 -1
- package/utils/form-value-container.js +25 -36
- package/utils/form-value-container.js.map +1 -1
|
@@ -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 { Contact, Form as ICureForm, Service } from '@icure/api'\nimport { sortedBy } from '../utils/no-lodash'\nimport { FormValuesContainer, FormValuesContainerMutation, ID, 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'\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: Contact\n\tprivate contactFormValuesContainer: ContactFormValuesContainer\n\tprivate _children: BridgedFormValuesContainer[] | undefined\n\tget children(): BridgedFormValuesContainer[] {\n\t\treturn (\n\t\t\tthis._children ??\n\t\t\t(this._children = this.contactFormValuesContainer\n\t\t\t\t.getChildren()\n\t\t\t\t.map(\n\t\t\t\t\t(fvc) =>\n\t\t\t\t\t\tnew BridgedFormValuesContainer(\n\t\t\t\t\t\t\tthis.responsible,\n\t\t\t\t\t\t\tfvc,\n\t\t\t\t\t\t\tthis.interpreter,\n\t\t\t\t\t\t\tthis.contact,\n\t\t\t\t\t\t\tthis.dependentValuesProvider,\n\t\t\t\t\t\t\tthis.validatorsProvider,\n\t\t\t\t\t\t\tthis.language,\n\t\t\t\t\t\t\tthis.changeListeners,\n\t\t\t\t\t\t),\n\t\t\t\t))\n\t\t)\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 */\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?: Contact,\n\t\tprivate dependentValuesProvider: (anchorId: string | undefined, templateId: string) => { metadata: FieldMetadata; formula: string }[] = () => [],\n\t\tprivate validatorsProvider: (anchorId: string | undefined, templateId: string) => { metadata: FieldMetadata; validators: Validator[] }[] = () => [],\n\t\tprivate language = 'en',\n\t\tprivate changeListeners: ((newValue: BridgedFormValuesContainer) => void)[] = [],\n\t) {\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.contact = contact ?? contactFormValuesContainer.currentContact\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\tprivate mutateAndNotify(newContactFormValuesContainer: ContactFormValuesContainer) {\n\t\tconst newBridgedFormValueContainer = new BridgedFormValuesContainer(\n\t\t\tthis.responsible,\n\t\t\tnewContactFormValuesContainer,\n\t\t\tthis.interpreter,\n\t\t\tthis.contact === this.contactFormValuesContainer.currentContact ? newContactFormValuesContainer.currentContact : this.contact,\n\t\t\tthis.dependentValuesProvider,\n\t\t\tthis.validatorsProvider,\n\t\t\tthis.language,\n\t\t\tthis.changeListeners,\n\t\t)\n\t\tthis.changeListeners.forEach((l) => l(newBridgedFormValueContainer))\n\t\treturn newBridgedFormValueContainer\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, formula }) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst currentValue = this.getVersionedValuesForKey(metadata.label)\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 currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\tthis.contactFormValuesContainer = setValueOnContactFormValuesContainer(\n\t\t\t\t\t\t\tthis.contactFormValuesContainer,\n\t\t\t\t\t\t\tmetadata.label,\n\t\t\t\t\t\t\tlng,\n\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\tObject.keys(currentValue ?? {})[0],\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t).formValuesContainer\n\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\tthis.contact = this.contactFormValuesContainer.currentContact\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\tsetValue(\n\t\tlabel: string,\n\t\tlanguage: string,\n\t\tfv?: FieldValue,\n\t\tid?: string,\n\t\tmetadata?: FieldMetadata,\n\t): FormValuesContainerMutation<FieldValue, FieldMetadata, BridgedFormValuesContainer, ID> {\n\t\tconst mutation = setValueOnContactFormValuesContainer(this.contactFormValuesContainer, label, language, fv, id, metadata)\n\t\treturn { result: mutation.result, formValuesContainer: this.mutateAndNotify(mutation.formValuesContainer) }\n\t}\n\n\tsetMetadata(meta: FieldMetadata, id?: string | undefined): FormValuesContainerMutation<FieldValue, FieldMetadata, BridgedFormValuesContainer, ID> {\n\t\tconst mutation = this.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,\n\t\t\t},\n\t\t\tid,\n\t\t)\n\t\treturn { result: mutation.result, formValuesContainer: this.mutateAndNotify(mutation.formValuesContainer) }\n\t}\n\n\tdelete(serviceId: string): FormValuesContainerMutation<FieldValue, FieldMetadata, BridgedFormValuesContainer, void> {\n\t\tconst mutation = this.contactFormValuesContainer.delete(serviceId)\n\t\treturn { result: undefined, formValuesContainer: this.mutateAndNotify(mutation.formValuesContainer) }\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\treturn this.contactFormValuesContainer.getChildren().map((fvc) => new BridgedFormValuesContainer(this.responsible, fvc, this.interpreter, this.contact))\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(\n\t\tanchorId: string,\n\t\ttemplateId: string,\n\t\tlabel: string,\n\t): Promise<FormValuesContainerMutation<FieldValue, FieldMetadata, BridgedFormValuesContainer, BridgedFormValuesContainer>> {\n\t\tconst mutation = await this.contactFormValuesContainer.addChild(anchorId, templateId, label)\n\t\tconst newBridgedFormValueContainer = this.mutateAndNotify(mutation.formValuesContainer)\n\t\tconst newChild = newBridgedFormValueContainer.children.find((c) => c.contactFormValuesContainer === mutation.result)\n\t\tif (!newChild) {\n\t\t\tthrow new Error('Illegal state, the new child must be found')\n\t\t}\n\t\treturn { result: newChild, formValuesContainer: newBridgedFormValueContainer }\n\t}\n\n\tasync removeChild(container: BridgedFormValuesContainer): Promise<FormValuesContainerMutation<FieldValue, FieldMetadata, BridgedFormValuesContainer, void>> {\n\t\tconst mutation = await this.contactFormValuesContainer.removeChild(container.contactFormValuesContainer)\n\t\treturn { result: undefined, formValuesContainer: this.mutateAndNotify(mutation.formValuesContainer) }\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<Service, ServiceMetadata> {\n\trootForm: ICureForm\n\tcurrentContact: Contact //The contact of the moment, used to record new modifications\n\tcontactsHistory: Contact[] //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) => Service\n\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>\n\n\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[]\n\n\tconstructor(\n\t\trootForm: ICureForm,\n\t\tcurrentContact: Contact,\n\t\tcontactsHistory: Contact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => Service,\n\t\tchildren: ContactFormValuesContainer[],\n\t\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>,\n\t\tchangeListeners: ((newValue: ContactFormValuesContainer) => void)[] = [],\n\t) {\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.changeListeners = changeListeners\n\t}\n\n\tregisterChildFormValuesContainer(childFVC: ContactFormValuesContainer) {\n\t\tchildFVC.registerChangeListener((newValue) => {\n\t\t\tconst newContactFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\tthis.currentContact,\n\t\t\t\tthis.contactsHistory,\n\t\t\t\tthis.serviceFactory,\n\t\t\t\tthis.children.map((c) => (c === childFVC ? newValue : c)),\n\t\t\t\tthis.formFactory,\n\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\t\t\tthis.changeListeners.forEach((l) => l(newContactFormValuesContainer))\n\t\t})\n\t}\n\n\tstatic async fromFormsHierarchy(\n\t\trootForm: ICureForm,\n\t\tcurrentContact: Contact,\n\t\tcontactsHistory: Contact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => Service,\n\t\tformChildrenProvider: (parentId: string) => Promise<ICureForm[]>,\n\t\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>,\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),\n\t\t\t\t\t\t),\n\t\t\t\t )\n\t\t\t\t: [],\n\t\t\tformFactory,\n\n\t\t\tchangeListeners,\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<Service> {\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): FormValuesContainerMutation<Service, ServiceMetadata, ContactFormValuesContainer, ID> {\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 Service({ ...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 = meta.codes)\n\t\t\tmeta.tags && (newService.tags = meta.tags)\n\n\t\t\tconst newFormValuesContainer = new ContactFormValuesContainer(\n\t\t\t\tthis.rootForm,\n\t\t\t\t{ ...this.currentContact, services: this.currentContact.services?.map((s) => (s.id === service.id ? newService : s)) },\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\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => l(newFormValuesContainer))\n\t\t\treturn { result: service.id, formValuesContainer: newFormValuesContainer }\n\t\t}\n\n\t\treturn { result: service.id, formValuesContainer: this }\n\t}\n\n\tsetValue(\n\t\tlabel: string,\n\t\tlanguage: string,\n\t\tvalue?: Service,\n\t\tid?: string,\n\t\tmetadata?: ServiceMetadata,\n\t): FormValuesContainerMutation<Service, ServiceMetadata, ContactFormValuesContainer, ID> {\n\t\tconst service =\n\t\t\t(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 ?? []\n\t\tif (!isContentEqual(service.content?.[language], newContent) || (newCodes && !areCodesEqual(newCodes, service.codes ?? []))) {\n\t\t\tconst newService = new Service({ ...service, modified: Date.now() })\n\t\t\tconst newContents = newContent ? { ...(service.content || {}), [language]: newContent } : { ...(service.content || {}) }\n\t\t\tif (!newContent) {\n\t\t\t\tdelete newContents[language]\n\t\t\t}\n\n\t\t\tlet newCurrentContact: Contact\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\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 ?? 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\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\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => l(newFormValuesContainer))\n\n\t\t\treturn { result: service.id!, formValuesContainer: newFormValuesContainer }\n\t\t}\n\n\t\treturn { result: service.id, formValuesContainer: this }\n\t}\n\n\tdelete(serviceId: string): FormValuesContainerMutation<Service, ServiceMetadata, ContactFormValuesContainer, 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{ ...this.currentContact, services: this.currentContact.services?.map((s) => (s.id === serviceId ? new Service({ ...service, endOfLife: Date.now() }) : s)) },\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\n\t\t\t\tthis.changeListeners,\n\t\t\t)\n\n\t\t\tthis.changeListeners.forEach((l) => l(newFormValuesContainer))\n\t\t\treturn { result: undefined, formValuesContainer: newFormValuesContainer }\n\t\t}\n\t\treturn { result: undefined, formValuesContainer: this }\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<Service> {\n\t\tconst indexedServices = [this.currentContact]\n\t\t\t.concat(this.contactsHistory)\n\t\t\t.reduce(\n\t\t\t\t(acc, ctc) =>\n\t\t\t\t\tctc.services?.reduce(\n\t\t\t\t\t\t(acc, s) => (s.id ? { ...acc, [s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({ revision: ctc.rev ?? null, modified: ctc.created, value: s }) } : acc),\n\t\t\t\t\t\tacc,\n\t\t\t\t\t) ?? acc,\n\t\t\t\t{} as VersionedData<Service>,\n\t\t\t) //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<Service>[]]\n\t\t\t})\n\t\t\t.reduce((acc, [id, history]) => ({ ...acc, [id]: history }), {})\n\t}\n\n\tasync addChild(\n\t\tanchorId: string,\n\t\ttemplateId: string,\n\t\tlabel: string,\n\t): Promise<FormValuesContainerMutation<Service, ServiceMetadata, ContactFormValuesContainer, ContactFormValuesContainer>> {\n\t\tconst newForm = await this.formFactory(anchorId, templateId, label)\n\t\tconst childFVC = new ContactFormValuesContainer(newForm, this.currentContact, this.contactsHistory, this.serviceFactory, [], this.formFactory)\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)\n\t\tnewContactFormValuesContainer.registerChildFormValuesContainer(childFVC)\n\t\tthis.changeListeners.forEach((l) => l(newContactFormValuesContainer))\n\t\treturn { result: childFVC, formValuesContainer: newContactFormValuesContainer }\n\t}\n\n\tprivate getServiceInCurrentContact(id: string): Service | 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<FormValuesContainerMutation<Service, ServiceMetadata, ContactFormValuesContainer, 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 !== container),\n\t\t\tthis.formFactory,\n\t\t)\n\t\tthis.changeListeners.forEach((l) => l(newContactFormValuesContainer))\n\t\treturn { result: undefined, formValuesContainer: newContactFormValuesContainer }\n\t}\n}\n\nconst setValueOnContactFormValuesContainer = (cfvc: ContactFormValuesContainer, label: string, language: string, fv?: FieldValue, id?: string, metadata?: FieldMetadata) => {\n\tconst value = fv?.content[language]\n\tconst mutation = cfvc.setValue(\n\t\tlabel,\n\t\tlanguage,\n\t\t{\n\t\t\tid: id,\n\t\t\tcodes: fv?.codes ?? [],\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,\n\t\t\t }\n\t\t\t: undefined,\n\t)\n\treturn mutation\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 { Contact, Form as ICureForm, Service } from '@icure/api'\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: Contact\n\tprivate contactFormValuesContainer: ContactFormValuesContainer\n\tprivate _id: string = uuidv4()\n\tprivate mutateAndNotify: (newContactFormValuesContainer: ContactFormValuesContainer) => BridgedFormValuesContainer\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?: Contact,\n\t\tprivate initialValuesProvider: (\n\t\t\tanchorId?: string,\n\t\t\ttemplateId?: string,\n\t\t) => { metadata: FieldMetadata; revisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]; formula: string }[] = () => [],\n\t\tprivate dependentValuesProvider: (\n\t\t\tanchorId: string | undefined,\n\t\t\ttemplateId: string | undefined,\n\t\t) => { metadata: FieldMetadata; revisionsFilter: (id: string, history: Version<FieldMetadata>[]) => (string | null)[]; formula: string }[] = () => [],\n\t\tprivate validatorsProvider: (anchorId: string | undefined, templateId: string) => { metadata: FieldMetadata; validators: Validator[] }[] = () => [],\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(\n\t\t\t\t({ metadata, revisionsFilter, formula }) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\t\tif (!currentValue || !Object.keys(currentValue).length) {\n\t\t\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\t\t\tif (newValue !== undefined) {\n\t\t\t\t\t\t\t\tconst lng = this.language ?? 'en'\n\t\t\t\t\t\t\t\tif (newValue && !newValue.content[lng] && newValue.content['*']) {\n\t\t\t\t\t\t\t\t\tnewValue.content[lng] = newValue.content['*']\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (newValue) {\n\t\t\t\t\t\t\t\t\tdelete newValue.content['*']\n\t\t\t\t\t\t\t\t}\n\t\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\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\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}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t\t}\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(\n\t\t\t\t({ metadata, revisionsFilter, formula }) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst currentValue = this.getValues(revisionsFilter)\n\t\t\t\t\t\tconst newValue = this.compute(formula) as FieldValue | undefined\n\t\t\t\t\t\tif (newValue !== undefined || currentValue != 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(\n\t\t\t\t\t\t\t\tthis.contactFormValuesContainer,\n\t\t\t\t\t\t\t\tmetadata.label,\n\t\t\t\t\t\t\t\tlng,\n\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\tObject.keys(currentValue ?? {})[0],\n\t\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t\t\t(fvc: ContactFormValuesContainer) => {\n\t\t\t\t\t\t\t\t\tconst currentContact = this.contactFormValuesContainer.currentContact\n\t\t\t\t\t\t\t\t\tthis.contactFormValuesContainer = fvc\n\t\t\t\t\t\t\t\t\tif (this.contact === currentContact) {\n\t\t\t\t\t\t\t\t\t\tthis.contact = fvc.currentContact\n\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)\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.log(`Error while computing formula : ${formula}`, e)\n\t\t\t\t\t}\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,\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(\n\t\t\t\t\t\tthis.responsible,\n\t\t\t\t\t\tfvc,\n\t\t\t\t\t\tthis.interpreter,\n\t\t\t\t\t\tthis.contact,\n\t\t\t\t\t\tthis.initialValuesProvider,\n\t\t\t\t\t\tthis.dependentValuesProvider,\n\t\t\t\t\t\tthis.validatorsProvider,\n\t\t\t\t\t\tthis.language,\n\t\t\t\t\t\t[],\n\t\t\t\t\t),\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<Service, ServiceMetadata> {\n\trootForm: ICureForm\n\tcurrentContact: Contact //The contact of the moment, used to record new modifications\n\tcontactsHistory: Contact[] //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) => Service\n\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>\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\tconstructor(\n\t\trootForm: ICureForm,\n\t\tcurrentContact: Contact,\n\t\tcontactsHistory: Contact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => Service,\n\t\tchildren: ContactFormValuesContainer[],\n\t\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>,\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.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)\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: ICureForm,\n\t\tcurrentContact: Contact,\n\t\tcontactsHistory: Contact[],\n\t\tserviceFactory: (label: string, serviceId?: string) => Service,\n\t\tformChildrenProvider: (parentId: string) => Promise<ICureForm[]>,\n\t\tformFactory: (anchorId: string, formTemplateId: string, label: string) => Promise<ICureForm>,\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),\n\t\t\t\t\t\t),\n\t\t\t\t )\n\t\t\t\t: [],\n\t\t\tformFactory,\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<Service> {\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 Service({ ...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{ ...this.currentContact, services: this.currentContact.services?.map((s) => (s.id === service.id ? newService : s)) },\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.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?: Service, id?: string, metadata?: ServiceMetadata, changeListenersOverrider?: (fvc: ContactFormValuesContainer) => void): void {\n\t\tconst service =\n\t\t\t(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 Service({ ...service, modified: Date.now() })\n\t\t\tconst newContents = newContent ? { ...(service.content || {}), [language]: newContent } : { ...(service.content || {}) }\n\t\t\tif (!newContent) {\n\t\t\t\tdelete newContents[language]\n\t\t\t}\n\n\t\t\tlet newCurrentContact: Contact\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\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\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.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{ ...this.currentContact, services: this.currentContact.services?.map((s) => (s.id === serviceId ? new Service({ ...service, endOfLife: Date.now() }) : s)) },\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.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<Service> {\n\t\tconst indexedServices = [this.currentContact]\n\t\t\t.concat(this.contactsHistory)\n\t\t\t.reduce(\n\t\t\t\t(acc, ctc) =>\n\t\t\t\t\tctc.services?.reduce(\n\t\t\t\t\t\t(acc, s) => (s.id ? { ...acc, [s.id]: (acc[s.id] ?? (acc[s.id] = [])).concat({ revision: ctc.rev ?? null, modified: ctc.created, value: s }) } : acc),\n\t\t\t\t\t\tacc,\n\t\t\t\t\t) ?? acc,\n\t\t\t\t{} as VersionedData<Service>,\n\t\t\t) //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<Service>[]]\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 newForm = await this.formFactory(anchorId, templateId, label)\n\t\tconst childFVC = new ContactFormValuesContainer(newForm, this.currentContact, this.contactsHistory, this.serviceFactory, [], this.formFactory, [], 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.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): Service | 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.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\t{\n\t\t\tid: id,\n\t\t\tcodes: fv?.codes ?? [],\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,\n\t\t\t }\n\t\t\t: undefined,\n\t\tchangeListenersOverrider,\n\t)\n}\n"]}
|
package/package.json
CHANGED
package/utils/code-utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Code, Field, SortOptions } from '../components/model';
|
|
2
2
|
import { Suggestion } from '../generic';
|
|
3
|
+
import { CodeStub } from '@icure/api';
|
|
3
4
|
/**
|
|
4
5
|
* Maps the options defined in a field into a list of codes
|
|
5
6
|
*
|
|
@@ -11,3 +12,4 @@ export declare const optionMapper: (language: string, field: Field, translationP
|
|
|
11
12
|
export declare const sortCodes: (codes: Code[], language: string, sortOptions?: SortOptions) => Code[];
|
|
12
13
|
export declare const sortSuggestions: (codes: (Code | Suggestion)[], language: string, sortOptions?: SortOptions) => Suggestion[];
|
|
13
14
|
export declare const filterAndSortOptionsFromFieldDefinition: (language: string, fg: Field, translationProvider: ((language: string, text: string) => string) | undefined, terms?: string[]) => Promise<Code[]>;
|
|
15
|
+
export declare const normalizeCodes: (codes: CodeStub[]) => CodeStub[];
|
package/utils/code-utils.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.filterAndSortOptionsFromFieldDefinition = exports.sortSuggestions = exports.sortCodes = exports.optionMapper = void 0;
|
|
3
|
+
exports.normalizeCodes = exports.filterAndSortOptionsFromFieldDefinition = exports.sortSuggestions = exports.sortCodes = exports.optionMapper = void 0;
|
|
4
4
|
const utils_1 = require("../components/common/utils");
|
|
5
|
+
const api_1 = require("@icure/api");
|
|
5
6
|
/**
|
|
6
7
|
* Maps the options defined in a field into a list of codes
|
|
7
8
|
*
|
|
@@ -31,4 +32,6 @@ const sortSuggestions = (codes, language, sortOptions) => ((sortOptions === null
|
|
|
31
32
|
exports.sortSuggestions = sortSuggestions;
|
|
32
33
|
const filterAndSortOptionsFromFieldDefinition = (language, fg, translationProvider, terms) => Promise.resolve((0, exports.sortCodes)((0, exports.optionMapper)(language, fg, translationProvider).filter((x) => (terms !== null && terms !== void 0 ? terms : []).map((st) => st.toLowerCase()).every((st) => x.label[language].toLowerCase().includes(st))), language, fg.sortOptions));
|
|
33
34
|
exports.filterAndSortOptionsFromFieldDefinition = filterAndSortOptionsFromFieldDefinition;
|
|
35
|
+
const normalizeCodes = (codes) => codes.map((c) => (0, api_1.normalizeCode)(c));
|
|
36
|
+
exports.normalizeCodes = normalizeCodes;
|
|
34
37
|
//# sourceMappingURL=code-utils.js.map
|
package/utils/code-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-utils.js","sourceRoot":"","sources":["../../tmp/utils/code-utils.ts"],"names":[],"mappings":";;;AACA,sDAA8H;
|
|
1
|
+
{"version":3,"file":"code-utils.js","sourceRoot":"","sources":["../../tmp/utils/code-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Code, Field, SortOptions } from '../components/model'\nimport { defaultCodePromoter, defaultCodesComparator, makePromoter, naturalCodesComparator } from '../components/common/utils'\nimport { Suggestion } from '../generic'\nimport { CodeStub, normalizeCode } from '@icure/api'\n\n/**\n * Maps the options defined in a field into a list of codes\n *\n * @param language\n * @param field\n * @param translationProvider\n */\nexport const optionMapper = (language: string, field: Field, translationProvider?: (language: string, text: string) => string): Code[] =>\n\tObject.keys(field?.options ?? []).map((optionKey) => {\n\t\tconst text: string = (field?.options?.[optionKey] as string) ?? ''\n\t\treturn {\n\t\t\tid: optionKey,\n\t\t\tlabel: { [language]: translationProvider ? translationProvider(language, text) : text },\n\t\t}\n\t})\n\nexport const sortCodes = (codes: Code[], language: string, sortOptions?: SortOptions) =>\n\tsortOptions?.sort && sortOptions?.sort !== 'natural'\n\t\t? codes.sort(defaultCodesComparator(language, sortOptions?.sort === 'asc', sortOptions?.promotions ? makePromoter(sortOptions.promotions.split(/ ?, ?/)) : defaultCodePromoter))\n\t\t: codes.sort(naturalCodesComparator(sortOptions?.promotions ? makePromoter(sortOptions.promotions.split(/ ?, ?/)) : defaultCodePromoter))\n\nexport const sortSuggestions = (codes: (Code | Suggestion)[], language: string, sortOptions?: SortOptions): Suggestion[] =>\n\t(sortOptions?.sort && sortOptions?.sort !== 'natural'\n\t\t? codes.sort(defaultCodesComparator(language, sortOptions?.sort === 'asc', sortOptions?.promotions ? makePromoter(sortOptions.promotions.split(/ ?, ?/)) : defaultCodePromoter))\n\t\t: codes.sort(naturalCodesComparator(sortOptions?.promotions ? makePromoter(sortOptions.promotions.split(/ ?, ?/)) : defaultCodePromoter))\n\t).map((c) => ({ id: c.id, label: c.label, text: c.label[language] ?? '', terms: [] }))\n\nexport const filterAndSortOptionsFromFieldDefinition = (\n\tlanguage: string,\n\tfg: Field,\n\ttranslationProvider: ((language: string, text: string) => string) | undefined,\n\tterms?: string[],\n) =>\n\tPromise.resolve(\n\t\tsortCodes(\n\t\t\toptionMapper(language, fg, translationProvider).filter((x) => (terms ?? []).map((st) => st.toLowerCase()).every((st) => x.label[language].toLowerCase().includes(st))),\n\t\t\tlanguage,\n\t\t\tfg.sortOptions,\n\t\t),\n\t)\n\nexport const normalizeCodes = (codes: CodeStub[]): CodeStub[] => codes.map((c) => normalizeCode(c))\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Field, FieldMetadata, FieldValue } from '../components/model';
|
|
2
|
-
import { FormValuesContainer, VersionedData } from '../generic';
|
|
2
|
+
import { FormValuesContainer, Version, VersionedData } from '../generic';
|
|
3
|
+
export declare function getRevisionsFilter(field: Field): (id: string, history: Version<FieldMetadata>[]) => string[];
|
|
3
4
|
export declare const fieldValuesProvider: (formValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>, field: Field) => (() => VersionedData<FieldValue>);
|
|
4
5
|
export declare function makeMetadata(field: Field, owner?: string, index?: number): {
|
|
5
6
|
label: string;
|
|
@@ -12,11 +13,5 @@ export declare function makeMetadata(field: Field, owner?: string, index?: numbe
|
|
|
12
13
|
}[] | undefined;
|
|
13
14
|
};
|
|
14
15
|
export declare const getValidationError: (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>, field?: Field) => (() => [FieldMetadata, string][]);
|
|
15
|
-
export declare const handleValueChangedProvider: (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>, field?: Field, owner?: string) => (label: string, language: string, value?: FieldValue, id?: string) =>
|
|
16
|
-
|
|
17
|
-
formValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>;
|
|
18
|
-
} | undefined;
|
|
19
|
-
export declare const handleMetadataChangedProvider: (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>) => (metadata: FieldMetadata, id?: string) => {
|
|
20
|
-
result: string;
|
|
21
|
-
formValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>;
|
|
22
|
-
} | undefined;
|
|
16
|
+
export declare const handleValueChangedProvider: (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>, field?: Field, owner?: string) => (label: string, language: string, value?: FieldValue, id?: string) => void;
|
|
17
|
+
export declare const handleMetadataChangedProvider: (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>) => (metadata: FieldMetadata, id?: string) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleMetadataChangedProvider = exports.handleValueChangedProvider = exports.getValidationError = exports.makeMetadata = exports.fieldValuesProvider = void 0;
|
|
3
|
+
exports.handleMetadataChangedProvider = exports.handleValueChangedProvider = exports.getValidationError = exports.makeMetadata = exports.fieldValuesProvider = exports.getRevisionsFilter = void 0;
|
|
4
4
|
const dates_1 = require("./dates");
|
|
5
5
|
function getRevisionsFilter(field) {
|
|
6
6
|
return (id, history) => history
|
|
@@ -8,6 +8,7 @@ function getRevisionsFilter(field) {
|
|
|
8
8
|
.map((fmd) => fmd.revision)
|
|
9
9
|
.filter((r) => r !== undefined); //null is used as a new revision indicator
|
|
10
10
|
}
|
|
11
|
+
exports.getRevisionsFilter = getRevisionsFilter;
|
|
11
12
|
const fieldValuesProvider = (formValuesContainer, field) => () => formValuesContainer.getValues(getRevisionsFilter(field));
|
|
12
13
|
exports.fieldValuesProvider = fieldValuesProvider;
|
|
13
14
|
function makeMetadata(field, owner, index) {
|
|
@@ -31,30 +32,20 @@ const getValidationError = (formsValueContainer, field) => () => {
|
|
|
31
32
|
};
|
|
32
33
|
exports.getValidationError = getValidationError;
|
|
33
34
|
const handleValueChangedProvider = (formsValueContainer, field, owner) => {
|
|
34
|
-
const wrapper = formsValueContainer ? [formsValueContainer] : [];
|
|
35
35
|
return (label, language, value, id) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const { result, formValuesContainer: newFvc } = fvc.setValue(label, language, value, id, !id && field // If the id is not set, we are creating a new value. In this case, we set the metadata.
|
|
36
|
+
if (formsValueContainer) {
|
|
37
|
+
formsValueContainer.setValue(label, language, value, id, !id && field // If the id is not set, we are creating a new value. In this case, we set the metadata.
|
|
39
38
|
? makeMetadata(field, owner)
|
|
40
39
|
: undefined);
|
|
41
|
-
wrapper[0] = newFvc;
|
|
42
|
-
return { result, formValuesContainer: newFvc };
|
|
43
40
|
}
|
|
44
|
-
return undefined;
|
|
45
41
|
};
|
|
46
42
|
};
|
|
47
43
|
exports.handleValueChangedProvider = handleValueChangedProvider;
|
|
48
44
|
const handleMetadataChangedProvider = (formsValueContainer) => {
|
|
49
|
-
const wrapper = formsValueContainer ? [formsValueContainer] : [];
|
|
50
45
|
return (metadata, id) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const { result, formValuesContainer: newFvc } = fvc.setMetadata(metadata, id);
|
|
54
|
-
wrapper[0] = newFvc;
|
|
55
|
-
return { result, formValuesContainer: newFvc };
|
|
46
|
+
if (formsValueContainer) {
|
|
47
|
+
formsValueContainer.setMetadata(metadata, id);
|
|
56
48
|
}
|
|
57
|
-
return undefined;
|
|
58
49
|
};
|
|
59
50
|
};
|
|
60
51
|
exports.handleMetadataChangedProvider = handleMetadataChangedProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields-values-provider.js","sourceRoot":"","sources":["../../tmp/utils/fields-values-provider.ts"],"names":[],"mappings":";;;AAGA,mCAAyC;AAEzC,
|
|
1
|
+
{"version":3,"file":"fields-values-provider.js","sourceRoot":"","sources":["../../tmp/utils/fields-values-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, FieldMetadata, FieldValue } from '../components/model'\nimport { FormValuesContainer, Version, VersionedData } from '../generic'\n\nimport { dateToFuzzyDate } from './dates'\n\nexport function getRevisionsFilter(field: Field): (id: string, history: Version<FieldMetadata>[]) => string[] {\n\treturn (id, history) =>\n\t\thistory\n\t\t\t.filter((fmd) => (field.tags?.length ? field.tags.every((t) => fmd?.value?.tags?.some((tt) => tt.id === t)) : fmd?.value?.label === field.label()))\n\t\t\t.map((fmd) => fmd.revision)\n\t\t\t.filter((r) => r !== undefined) as string[] //null is used as a new revision indicator\n}\n\nexport const fieldValuesProvider =\n\t(formValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>, field: Field): (() => VersionedData<FieldValue>) =>\n\t() =>\n\t\tformValuesContainer.getValues(getRevisionsFilter(field))\n\nexport function makeMetadata(field: Field, owner?: string, index?: number) {\n\treturn {\n\t\tlabel: field.label(),\n\t\tvalueDate: dateToFuzzyDate(new Date()),\n\t\towner: owner,\n\t\tindex: index,\n\t\ttags: field.tags?.map((t) => ({\n\t\t\tid: t,\n\t\t\tlabel: {},\n\t\t})),\n\t}\n}\n\nexport const getValidationError =\n\t(formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>, field?: Field): (() => [FieldMetadata, string][]) =>\n\t() => {\n\t\tconst validators = formsValueContainer?.getValidationErrors() ?? []\n\t\treturn validators.filter(([metadata]) => metadata.label === field?.label())\n\t}\n\nexport const handleValueChangedProvider = (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>, field?: Field, owner?: string) => {\n\treturn (label: string, language: string, value?: FieldValue, id?: string) => {\n\t\tif (formsValueContainer) {\n\t\t\tformsValueContainer.setValue(\n\t\t\t\tlabel,\n\t\t\t\tlanguage,\n\t\t\t\tvalue,\n\t\t\t\tid,\n\t\t\t\t!id && field // If the id is not set, we are creating a new value. In this case, we set the metadata.\n\t\t\t\t\t? makeMetadata(field, owner)\n\t\t\t\t\t: undefined,\n\t\t\t)\n\t\t}\n\t}\n}\n\nexport const handleMetadataChangedProvider = (formsValueContainer?: FormValuesContainer<FieldValue, FieldMetadata>) => {\n\treturn (metadata: FieldMetadata, id?: string) => {\n\t\tif (formsValueContainer) {\n\t\t\tformsValueContainer.setMetadata(metadata, id)\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { FieldMetadata, FieldValue, Form } from '../components/model';
|
|
2
2
|
import { FormValuesContainer } from '../generic';
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const computeFormDefaultValues: (formValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>, form?: Form, language?: string, owner?: string) => [FieldValue, FieldMetadata][];
|
|
@@ -1,45 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.computeFormDefaultValues = void 0;
|
|
4
4
|
const fields_values_provider_1 = require("./fields-values-provider");
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const extractDefaultValues = (fgs, language) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
value.content[lng] = value.content['*'];
|
|
23
|
-
}
|
|
24
|
-
//TODO support batch changes
|
|
25
|
-
(_f = fvc[0]) === null || _f === void 0 ? void 0 : _f.setValue(fg.label(), lng, value, undefined, (0, fields_values_provider_1.makeMetadata)(fg, owner));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
5
|
+
const computeFormDefaultValues = (formValuesContainer, form, language, owner) => {
|
|
6
|
+
var _a;
|
|
7
|
+
const extractDefaultValues = (fgs, language) => fgs.reduce((acc, fg) => {
|
|
8
|
+
var _a, _b, _c;
|
|
9
|
+
if (fg.clazz === 'group' && ((_a = fg.fields) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
10
|
+
return [...acc, ...extractDefaultValues(fg.fields, language)];
|
|
11
|
+
}
|
|
12
|
+
else if (fg.clazz === 'field') {
|
|
13
|
+
if ((_b = fg.computedProperties) === null || _b === void 0 ? void 0 : _b.defaultValue) {
|
|
14
|
+
const value = formValuesContainer === null || formValuesContainer === void 0 ? void 0 : formValuesContainer.compute((_c = fg.computedProperties) === null || _c === void 0 ? void 0 : _c.defaultValue);
|
|
15
|
+
if (value !== undefined) {
|
|
16
|
+
const lng = language !== null && language !== void 0 ? language : 'en';
|
|
17
|
+
if (!value.content[lng] && value.content['*']) {
|
|
18
|
+
value.content[lng] = value.content['*'];
|
|
19
|
+
}
|
|
20
|
+
if (value.content[lng]) {
|
|
21
|
+
return [...acc, [value, (0, fields_values_provider_1.makeMetadata)(fg, owner)]];
|
|
28
22
|
}
|
|
29
23
|
}
|
|
30
|
-
}
|
|
24
|
+
}
|
|
31
25
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
fvc[0].registerChangeListener(listener);
|
|
37
|
-
form === null || form === void 0 ? void 0 : form.sections.forEach((section) => {
|
|
26
|
+
return acc;
|
|
27
|
+
}, []);
|
|
28
|
+
return ((_a = form === null || form === void 0 ? void 0 : form.sections.reduce((acc, section) => {
|
|
38
29
|
var _a;
|
|
39
|
-
extractDefaultValues((_a = section.fields) !== null && _a !== void 0 ? _a : [], language);
|
|
40
|
-
});
|
|
41
|
-
fvc[0].unregisterChangeListener(listener);
|
|
42
|
-
return fvc[0];
|
|
30
|
+
return [...acc, ...extractDefaultValues((_a = section.fields) !== null && _a !== void 0 ? _a : [], language)];
|
|
31
|
+
}, [])) !== null && _a !== void 0 ? _a : []);
|
|
43
32
|
};
|
|
44
|
-
exports.
|
|
33
|
+
exports.computeFormDefaultValues = computeFormDefaultValues;
|
|
45
34
|
//# sourceMappingURL=form-value-container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-value-container.js","sourceRoot":"","sources":["../../tmp/utils/form-value-container.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"form-value-container.js","sourceRoot":"","sources":["../../tmp/utils/form-value-container.ts"],"names":[],"mappings":";;;AACA,qEAAuD;AAGhD,MAAM,wBAAwB,GAAG,CACvC,mBAAmE,EACnE,IAAW,EACX,QAAiB,EACjB,KAAc,EACkB,EAAE;;IAClC,MAAM,oBAAoB,GAAG,CAAC,GAAmC,EAAE,QAAiB,EAAiC,EAAE,CACtH,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;;QACtB,IAAI,EAAE,CAAC,KAAK,KAAK,OAAO,KAAI,MAAA,EAAE,CAAC,MAAM,0CAAE,MAAM,CAAA,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC9D,CAAC;aAAM,IAAI,EAAE,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACjC,IAAI,MAAA,EAAE,CAAC,kBAAkB,0CAAE,YAAY,EAAE,CAAC;gBACzC,MAAM,KAAK,GAA2B,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAO,CAAC,MAAA,EAAE,CAAC,kBAAkB,0CAAE,YAAY,CAAC,CAAA;gBACvG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI,CAAA;oBAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBACxC,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wBACxB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,IAAA,qCAAY,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;oBAClD,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAA;IACX,CAAC,EAAE,EAAmC,CAAC,CAAA;IAExC,OAAO,CACN,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;;QACtC,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,oBAAoB,CAAC,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzE,CAAC,EAAE,EAAmC,CAAC,mCAAI,EAAE,CAC7C,CAAA;AACF,CAAC,CAAA;AAhCY,QAAA,wBAAwB,4BAgCpC","sourcesContent":["import { Field, FieldMetadata, FieldValue, Form, Group, Subform } from '../components/model'\nimport { makeMetadata } from './fields-values-provider'\nimport { FormValuesContainer } from '../generic'\n\nexport const computeFormDefaultValues = (\n\tformValuesContainer: FormValuesContainer<FieldValue, FieldMetadata>,\n\tform?: Form,\n\tlanguage?: string,\n\towner?: string,\n): [FieldValue, FieldMetadata][] => {\n\tconst extractDefaultValues = (fgs: Array<Field | Group | Subform>, language?: string): [FieldValue, FieldMetadata][] =>\n\t\tfgs.reduce((acc, fg) => {\n\t\t\tif (fg.clazz === 'group' && fg.fields?.length) {\n\t\t\t\treturn [...acc, ...extractDefaultValues(fg.fields, language)]\n\t\t\t} else if (fg.clazz === 'field') {\n\t\t\t\tif (fg.computedProperties?.defaultValue) {\n\t\t\t\t\tconst value: FieldValue | undefined = formValuesContainer?.compute(fg.computedProperties?.defaultValue)\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tconst lng = language ?? 'en'\n\t\t\t\t\t\tif (!value.content[lng] && value.content['*']) {\n\t\t\t\t\t\t\tvalue.content[lng] = value.content['*']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value.content[lng]) {\n\t\t\t\t\t\t\treturn [...acc, [value, makeMetadata(fg, owner)]]\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\treturn acc\n\t\t}, [] as [FieldValue, FieldMetadata][])\n\n\treturn (\n\t\tform?.sections.reduce((acc, section) => {\n\t\t\treturn [...acc, ...extractDefaultValues(section.fields ?? [], language)]\n\t\t}, [] as [FieldValue, FieldMetadata][]) ?? []\n\t)\n}\n"]}
|