@yuuvis/client-framework 2.3.24 → 2.3.25
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/fesm2022/yuuvis-client-framework-forms.mjs +129 -5
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +4 -3
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +15 -5
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +3 -2
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/forms/index.d.ts +0 -1
- package/forms/lib/elements/catalog/catalog.component.d.ts +1 -0
- package/forms/lib/elements/i18n-catalog/i18n-catalog.component.d.ts +43 -0
- package/forms/lib/elements/index.d.ts +2 -0
- package/forms/lib/forms.module.d.ts +2 -1
- package/object-details/lib/object-metadata/object-metadata-section/object-metadata-section.component.d.ts +2 -1
- package/object-details/lib/object-metadata/object-metadata.component.d.ts +2 -0
- package/object-form/lib/object-form.component.d.ts +2 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-object-form.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-form/src/lib/form-scripting.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-extension.interface.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.validation.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.utils.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-element/object-form-element.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-element/object-form-element.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-group/object-form-group.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-group/object-form-group.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/object-form-script.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/object-form-scripting-scope.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.module.ts","../../../../../libs/yuuvis/client-framework/object-form/src/yuuvis-client-framework-object-form.ts"],"sourcesContent":["import { inject, Injectable, NgZone, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ApiBase,\n AppCacheService,\n BackendService,\n DmsObject,\n DmsService,\n EventService,\n HttpOptions,\n NotificationService,\n Operator,\n SearchQuery,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateService,\n UserService,\n Utils,\n YuvEventType,\n YuvUser\n} from '@yuuvis/client-core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { FormScriptingAPI, FormScriptingElementExtension } from './form-scripting.api.interface';\nimport { ObjectFormComponent } from './object-form.component';\n\n@Injectable()\nexport class FormScriptingApiService {\n #ngZone = inject(NgZone);\n #router = inject(Router);\n #eventService = inject(EventService);\n #userService = inject(UserService);\n #dmsService = inject(DmsService);\n #systemService = inject(SystemService);\n #searchService = inject(SearchService);\n #backend = inject(BackendService);\n #translate = inject(TranslateService);\n #notifications = inject(NotificationService);\n #appCache = inject(AppCacheService);\n\n static EVENT_MODEL_CHANGED = 'yuv.event.object-form.model.changed';\n #activeFormComponents = new Map<string, ObjectFormComponent>();\n elementExtensions = signal<Record<string, FormScriptingElementExtension>>({});\n formId?: string;\n\n get api() {\n return this.getApi();\n }\n\n registerActiveForm(component: ObjectFormComponent) {\n const id = component.formOptions()?.formModel?.name || component?.id;\n return id && this.#activeFormComponents.set(id, component);\n }\n\n unregisterActiveForm(component: ObjectFormComponent) {\n const id = component.formOptions()?.formModel?.name || component?.id;\n return id && this.#activeFormComponents.delete(id);\n }\n\n getApi(): FormScriptingAPI {\n const formId = this.formId;\n return {\n elementExtensions: {\n register: (extensions: FormScriptingElementExtension[]) => {\n extensions.forEach((ext) => {\n if (ext.id) this.elementExtensions.set({ ...this.elementExtensions(), [ext.id]: ext });\n });\n }\n },\n events: {\n yuuvisEventType: YuvEventType,\n on: (type: string) => this.#ngZone.run(() => this.#eventService.on(type)),\n trigger: (type: string, data?: any) => this.#ngZone.run(() => this.#eventService.trigger(type, data))\n },\n session: {\n getUser: () => this.getCurrentUser(),\n user: {\n get: () => this.getCurrentUser(),\n hasRole: (role: string) => this.getCurrentUser().authorities?.includes(role) || false\n }\n },\n http: {\n get: (uri, base, options) => this.get(uri, base, options),\n post: (uri, data, base, options) => this.post(uri, data, base, options),\n del: (uri, base, options) => this.del(uri, base, options),\n put: (uri, data, base, options) => this.put(uri, data, base, options)\n },\n form: {\n activeForms: this.#activeFormComponents,\n getValue: (formControlName) =>\n Array.from(this.#activeFormComponents.values()).reduce(\n (prev: Record<string, unknown>, cur: ObjectFormComponent) => ({ ...prev, ...(cur.formData || {}) }),\n {}\n )[formControlName],\n setValue: (formControlName, newValue) => this.api.form.modelChange(formControlName, { name: 'value', newValue }),\n modelChange: (formControlName, change) =>\n this.#ngZone.run(() =>\n this.#eventService.trigger(FormScriptingApiService.EVENT_MODEL_CHANGED, {\n formId,\n formControlName,\n change\n })\n )\n },\n storage: {\n getItem: (key) => firstValueFrom(this.#appCache.getItem(key)),\n setItem: (key, value) => firstValueFrom(this.#appCache.setItem(key, value))\n },\n notifier: {\n success: (text, title) => this.#notifications.success(title, text),\n error: (text, title) => this.#notifications.error(title, text),\n info: (text, title) => this.#notifications.info(title, text),\n warning: (text, title) => this.#notifications.warning(title, text)\n },\n util: {\n translate: (key, data) => this.#translate.instant(key, data)\n }\n };\n }\n\n get(uri: string, base?: string, options?: HttpOptions) {\n return firstValueFrom(\n this.#backend.get(uri, base || ApiBase.none, options || { observe: 'response' }).pipe(\n map((res: any) => {\n return options ? res : { status: res.status, data: res.body };\n })\n )\n );\n }\n\n put(uri: string, data: Record<string, unknown>, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.put(uri, data, base || ApiBase.none, options));\n }\n\n post(uri: string, data: Record<string, unknown>, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.post(uri, data, base || ApiBase.none, options));\n }\n\n del(uri: string, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.delete(uri, base || ApiBase.none, options));\n }\n\n getCurrentUser(): YuvUser {\n return this.#userService.getCurrentUser();\n }\n\n getDmsObject(id: string, version: number): Promise<DmsObject> {\n return firstValueFrom(this.#dmsService.getDmsObject(id, version))\n .then((response) => {\n return Promise.resolve(response);\n })\n .catch(this.#handleError);\n }\n\n /**\n * fetches dms objects from the server that match the given params\n *\n * @param fields - the fields to match. example: {name: 'max', plz: '47111}\n * @param type - the target object type\n */\n getResult(fields: Record<string, unknown>, type?: string): Promise<DmsObject[]> {\n const searchQuery: SearchQuery = {\n filters: Object.keys(fields).map((f) => ({\n f,\n o: Operator.EQUAL,\n v1: fields[f]\n }))\n };\n if (type) searchQuery.types = [type];\n return firstValueFrom(this.#searchService.search(searchQuery))\n .then((res: SearchResult) => {\n return Promise.resolve(\n res.items.map((resItem: SearchResultItem) => {\n new DmsObject(resItem);\n })\n );\n })\n .catch(this.#handleError);\n }\n\n encodeFileName(filename: string) {\n return Utils.encodeFileName(filename);\n }\n\n #handleError(error: any): Promise<any> {\n return Promise.reject(error.message || error);\n }\n}\n","import { Component, inject, input, Type } from '@angular/core';\nimport { FormScriptingAPI } from './form-scripting.api.interface';\nimport { FormScriptingApiService } from './form-scripting.service';\n\n// Extension of a particular form element\nexport interface IObjectFormElementExtension {\n property: string;\n cmp: Type<ObjectFormElementExtension>;\n}\n\nexport interface IObjectFormElementExtensionComponentInput {\n formControlName: string;\n}\n\n/**\n * Class to extend by form element extensions.\n */\n@Component({\n template: '',\n standalone: true\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport abstract class ObjectFormElementExtension {\n #formScriptingApiService = inject(FormScriptingApiService);\n\n input = input.required<IObjectFormElementExtensionComponentInput>();\n\n protected getApi(): FormScriptingAPI {\n return this.#formScriptingApiService.getApi();\n }\n\n protected getCurrentValue(): unknown {\n return this.getApi().form.getValue(this.input().formControlName);\n }\n\n setValue(value: unknown) {\n // only set the value if the value is different. Otherwise the form\n // will end up in an infinite loop\n if (value !== this.getCurrentValue()) this.getApi().form.setValue(this.input().formControlName, value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { FormScriptingElementExtension } from '../../form-scripting.api.interface';\nimport { ObjectFormElementExtension } from '../../object-form-extension.interface';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'yuv-form-scripting-element-extension',\n standalone: true,\n imports: [CommonModule, YuvIconComponent, MatTooltipModule],\n templateUrl: './form-scripting-element-extension.component.html',\n styleUrl: './form-scripting-element-extension.component.scss' \n})\nexport class FormScriptingElementExtensionComponent extends ObjectFormElementExtension {\n ext = input<FormScriptingElementExtension>();\n defaultIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h560q33 0 56.5 23.5T800-760v80h80v80h-80v80h80v80h-80v80h80v80h-80v80q0 33-23.5 56.5T720-120H160Zm0-80h560v-560H160v560Zm80-80h200v-160H240v160Zm240-280h160v-120H480v120Zm-240 80h200v-200H240v200Zm240 200h160v-240H480v240ZM160-760v560-560Z\"/></svg>';\n\n run() {\n this.ext()?.callback();\n }\n}\n","@let x = ext();\n@if (x) {\n @if (x.icon) {\n <button class=\"secondary\" (click)=\"run()\" [matTooltip]=\"x.label\">\n <yuv-icon [svg]=\"x.icon\"></yuv-icon>\n </button>\n } @else if (x.label) {\n <button class=\"secondary\" (click)=\"run()\">{{ x.label }}</button>\n } @else {\n <button class=\"secondary\" (click)=\"run()\">\n <yuv-icon [svg]=\"defaultIcon\"></yuv-icon>\n </button>\n }\n}\n","import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';\nimport { ObjectFormControl, Situation } from '@yuuvis/client-core';\n/**\n * @ignore\n * Custom validation class.\n */\nexport class FormValidation {\n /**\n * Build validators for the given form element to be attached to\n * a reactive formControl.\n *\n * @param formElement - form element object\n * @param situation - form situation to fetch validators for\n */\n static getValidators(formElement: any, situation: string): ValidatorFn[] {\n const elmValidators: ValidatorFn[] = [];\n const { required, regex } = formElement;\n\n // apply situation based validations\n switch (situation) {\n case Situation.SEARCH: {\n // TODO: implement general validators for SEARCH situation\n break;\n }\n default: {\n if (required) {\n elmValidators.push(Validators.required);\n }\n if (regex && !formElement.multiselect) {\n elmValidators.push(Validators.pattern(regex));\n }\n break;\n }\n }\n return elmValidators;\n }\n\n /**\n *\n * @param control - from object control\n * @returns Validation object {eoformScript: {valid: boolean}} or null\n */\n static customScriptingValidation(): ValidatorFn {\n return (control: AbstractControl) => {\n const ctrl = control as ObjectFormControl;\n return ctrl._eoFormElement && ctrl._eoFormElement.error ? { eoformScript: { valid: false } } : null;\n };\n }\n}\n","import { Classification, ContentStreamField, ObjectFormControl, ObjectFormControlWrapper, Situation } from '@yuuvis/client-core';\nimport { FormValidation } from './object-form.validation';\n\n/**\n * Provides a rendering of form control in `ObjectFormComponent`, `QuickSearchComponent` so wie `SearchFilterFormComponent`.\n */\n\nexport class ObjectFormUtils {\n /**\n * Converts a form element object to an ObjectFormControlWrapper which then can be used to\n * render a from control. Result can be used as input for FormElementComponent.\n *\n * @param element - the element object or a json string\n * @param situation - optional property to set up a form situation for the control (default is EDIT)\n * @return the converted ObjectFormControlWrapper or null in case of an error\n */\n static elementToFormControl(formElement: any, situation?: string): ObjectFormControlWrapper {\n // Create the ObjectFormControlWrapper\n const wrapper = new ObjectFormControlWrapper({});\n const formSituation = situation ? situation : Situation.EDIT;\n\n wrapper._eoFormControlWrapper = {\n controlName: formElement.name,\n situation: formSituation\n };\n\n // create the actual form control\n const controlDisabled = !!formElement.readonly;\n const formControl = new ObjectFormControl(\n {\n value: formElement.value,\n disabled: controlDisabled\n },\n FormValidation.getValidators(formElement, formSituation)\n );\n\n // Form elements in SEARCH situation may arrive with a value set to NULL (explicit search for\n // fields that are NOT set). In that case we need to prepare the form control\n if (formSituation === Situation.SEARCH && formElement.value === null) {\n formElement.isNotSetValue = true;\n }\n\n ObjectFormUtils.updateFormElement(formElement);\n\n formControl._eoFormElement = formElement;\n wrapper.addControl(formElement.name, formControl);\n\n return wrapper;\n }\n /**\n * Update a form element after change a form element object.\n * @param formElement - the form element object\n */\n static updateFormElement(formElement: any) {\n if (formElement.type === 'decimal' && !formElement.scale) {\n formElement.scale = 2;\n }\n\n if (formElement.type === 'integer' && formElement.id === ContentStreamField.LENGTH) {\n formElement.classifications = [Classification.NUMBER_FILESIZE];\n }\n return formElement;\n }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { ObjectFormControlWrapper, ObjectFormGroup, ObjectFormModel, Situation, YuvUser } from '@yuuvis/client-core';\n\nimport { IObjectFormElementExtension, ObjectFormElementExtension } from './object-form-extension.interface';\nimport { ObjectFormUtils } from './object-form.utils';\nimport { Subject } from 'rxjs';\nimport { FormStatusChangedEvent } from './object-form.interface';\n\n/**\n * @ignore\n */\n@Injectable()\nexport class ObjectFormService {\n #formExtensions: IObjectFormElementExtension[] = [];\n\n // Subject to notify about form status/value changes, e.g. when a form is reset or set to pristine.\n formChanged = new Subject<FormStatusChangedEvent>();\n\n setElementExtensions(formExtensions: IObjectFormElementExtension[]) {\n this.#formExtensions = formExtensions;\n }\n\n getElementExtensions(propertyName: string): Type<ObjectFormElementExtension>[] {\n return this.#formExtensions.filter((ext) => ext.property === propertyName).map((ext) => ext.cmp);\n }\n\n /**\n * Converts a form element object to an ObjectFormControlWrapper which then can be used to\n * render a from control. Result can be used as input for FormElementComponent.\n *\n * @param element - the element object or a json string\n * @param situation - optional property to set up a form situation for the control (default is EDIT)\n * @return the converted ObjectFormControlWrapper or null in case of an error\n */\n elementToFormControl(element: any, situation?: string): ObjectFormControlWrapper | null {\n let formElement;\n if (typeof element === 'string') {\n try {\n formElement = JSON.parse(element);\n } catch (e) {\n console.error('Unable to parse form element from json ', formElement);\n }\n } else {\n formElement = element;\n }\n return formElement ? ObjectFormUtils.elementToFormControl(element, situation) : null;\n }\n\n /**\n * Extract data from an object form based on situation.\n *\n * @param form - form to extract data from\n * @param situation - form situation\n * @param [initialData] - optional form data to match the current values against\n * This is required for editig indexdata (EDIT situation), because we have to compare new values\n * against the initial values. If a property that is contained in the forms initial data is removed\n * (e.g. set to null) then we have to set this null value, because otherwise the server would\n * ignore the changes.\n * @param isTableRowEditForm Flag indicating that the provided form is an inline form used by\n * a forms table element for editing rows. Those need a special handling.\n * @return extracted data as object\n */\n extractFormData(form: ObjectFormGroup, situation: string, initialData?: any, isTableRowEditForm?: boolean) {\n const extractedData = {};\n this.#getElementValues(extractedData, form, situation || 'EDIT', initialData, isTableRowEditForm);\n return extractedData;\n }\n\n // Recursive method to get the values from each form control.\n #getElementValues(data: any, formControl: ObjectFormModel, situation: string, initialData?: any, isTableRowEditForm?: boolean) {\n if (!formControl || !formControl.controls) {\n return;\n }\n\n if (formControl instanceof ObjectFormControlWrapper) {\n const fc: any = formControl._eoFormControlWrapper ? formControl.controls[formControl._eoFormControlWrapper.controlName] : null;\n if (!fc) {\n return;\n }\n\n if (fc._eoFormElement.isNotSetValue === true) {\n // form elements may explicitly set to have NULL value (e.g. from Search form if values are requested that have no values)\n this.#setDataValue(fc._eoFormElement.name, null, data, fc._eoFormElement, !isTableRowEditForm);\n } \n else if (fc.value !== undefined || fc.dirty) {\n const val = fc.value;\n\n switch (situation) {\n case Situation.SEARCH: {\n if (val !== null) {\n this.#setDataValue(fc._eoFormElement.name, val, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n case Situation.CREATE: {\n if (val !== null) {\n this.#setDataValue(fc._eoFormElement.name, val, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n case Situation.EDIT: {\n // in edit situation we have to compare new values against the initial values\n // If a property that is contained in the forms initial data is removed (e.g. set to null)\n // then we have to set this null value, because otherwise the server will ignore the changes\n const v = val === undefined ? null : val;\n if (v !== null || (initialData && initialData[fc._eoFormElement.name] !== undefined)) {\n // data[fc._eoFormElement.name] = val;\n this.#setDataValue(fc._eoFormElement.name, v, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n }\n // tri-state boolean fields could have a value of 'undefined' that needs to be transformed\n // into 'null' to be correctly be processed by the backend\n if (fc._eoFormElement.type === 'boolean' && fc.value === undefined) {\n this.#setDataValue(fc._eoFormElement.name, null, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n }\n } else {\n Object.keys(formControl.controls).forEach((controlKey) => {\n const formControlKeyed = <ObjectFormGroup>formControl.controls[controlKey];\n this.#getElementValues(data, formControlKeyed, situation, initialData, isTableRowEditForm);\n });\n }\n }\n\n #setDataValue(key: string, value: unknown, data: Record<string, unknown>, formElement: any, isTableRowEditForm: boolean) {\n data[key] = value;\n\n if (isTableRowEditForm && formElement.dataMeta) {\n if (formElement._internalType === 'string:organization') {\n data[key + '_title'] = formElement.dataMeta.map((d: YuvUser) => d.title);\n }\n // else if (formElement._internalType === 'string:reference') {\n // data[key + '_title'] = formElement.dataMeta.map((e: ReferenceEntry) => e.title);\n // }\n }\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, Type, untracked, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { Classification, ObjectFormControlWrapper } from '@yuuvis/client-core';\nimport { MetadataFormFieldComponent } from '@yuuvis/client-framework/metadata-form';\nimport { FormScriptingElementExtension } from '../form-scripting.api.interface';\nimport { FormScriptingApiService } from '../form-scripting.service';\nimport { IObjectFormElementExtensionComponentInput, ObjectFormElementExtension } from '../object-form-extension.interface';\nimport { FormScriptingElementExtensionComponent } from '../object-form-script/form-scripting-element-extension/form-scripting-element-extension.component';\nimport { ObjectFormService } from '../object-form.service';\n\n@Component({\n selector: 'yuv-object-form-element',\n standalone: true,\n imports: [CommonModule, MetadataFormFieldComponent, NgComponentOutlet, ReactiveFormsModule],\n templateUrl: './object-form-element.component.html',\n styleUrls: ['./object-form-element.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'yuv-object-form-element' }\n})\nexport class ObjectFormElementComponent {\n #objectFormService = inject(ObjectFormService);\n #scriptingApi = inject(FormScriptingApiService);\n\n createForm = signal(false);\n\n formChangedSubject = this.#objectFormService.formChanged;\n formControlName?: string;\n formElementRef: any;\n errors?: string[];\n extensionComponents: Type<ObjectFormElementExtension>[] = [];\n #scriptingExtensions = this.#scriptingApi.elementExtensions;\n scriptingExtensions = computed(() =>\n Object.values(this.#scriptingExtensions()).filter((ext: FormScriptingElementExtension) => ext.propertyName === this.formControlName)\n );\n\n scriptExtensionCmp = FormScriptingElementExtensionComponent;\n situation = input<string>();\n\n element = input<ObjectFormControlWrapper>();\n #elementEffect = effect(() => {\n const element = this.element();\n\n untracked(() => {\n this.createForm.set(true);\n element && this.#setElement(element);\n });\n });\n\n get extensionComponentInput(): Record<string, unknown> {\n const xti: IObjectFormElementExtensionComponentInput = {\n formControlName: this.formControlName || ''\n };\n return xti as Record<string, any>;\n }\n\n #setElement(el: ObjectFormControlWrapper | undefined) {\n if (el && el._eoFormControlWrapper) {\n this.formControlName = el._eoFormControlWrapper.controlName;\n this.formElementRef = el.controls[this.formControlName];\n this.formElementRef._eoFormElement = this.#setGrouping(this.formElementRef?._eoFormElement);\n this.extensionComponents = this.#objectFormService.getElementExtensions(this.formControlName);\n this.createForm.set(false);\n }\n }\n\n /**\n * formating rules...\n * https://wiki.optimal-systems.de/display/PM/Status+yuuvis+Momentum+-+Flex+client\n */\n #setGrouping(formElement: any) {\n return { ...formElement, grouping: !!formElement?.classifications?.includes(Classification.NUMBER_DIGIT) };\n }\n\n onDataMetaChange(data: any) {\n this.formElementRef._eoFormElement.dataMeta = data;\n }\n}\n","@let el = element();\n\n@if (!createForm()) {\n @if (el && formElementRef) {\n <div class=\"form-element input\" [formGroup]=\"el\">\n <yuv-metadata-form-field\n [formChangedSubject]=\"formChangedSubject\"\n [field]=\"formElementRef._eoFormElement\"\n [formControlName]=\"el._eoFormControlWrapper!.controlName\"\n [situation]=\"situation()\"\n ></yuv-metadata-form-field>\n\n <div class=\"ext\">\n @for (cmp of extensionComponents; track $index) {\n <ng-container *ngComponentOutlet=\"cmp; inputs: { input: extensionComponentInput }\"></ng-container>\n }\n @for (scmp of scriptingExtensions(); track $index) {\n <ng-container *ngComponentOutlet=\"scriptExtensionCmp; inputs: { ext: scmp }\"></ng-container>\n }\n </div>\n </div>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, input, Input, ViewEncapsulation } from '@angular/core';\nimport { AbstractControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { KeysPipe, ObjectFormControlWrapper, ObjectFormGroup, Situation, YuvFormGroup, YuvFormGroupWrapper } from '@yuuvis/client-core';\nimport { ObjectFormElementComponent } from '../object-form-element/object-form-element.component';\n\n@Component({\n selector: 'yuv-object-form-group',\n standalone: true,\n imports: [CommonModule, MatTabsModule, KeysPipe, ObjectFormElementComponent, ReactiveFormsModule],\n templateUrl: './object-form-group.component.html',\n styleUrls: ['./object-form-group.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ObjectFormGroupComponent {\n private types = {\n STACK: 'stack',\n GROUP: 'group',\n FIELDSET: 'fieldset'\n };\n\n groupType?: string;\n isCore = false;\n isData = false;\n\n // @ViewChild('tabView') tabView: TabView;\n\n // form situation, if not set default will be 'EDIT'\n @Input() situation = Situation.EDIT;\n\n group = input<ObjectFormGroup>();\n #groupEffect = effect(() => {\n const g = this.group();\n\n if (g) {\n this.isCore = !!g._eoFormGroup && g._eoFormGroup.label === 'core';\n this.isData = !!g._eoFormGroup && g._eoFormGroup.label === 'data';\n this.groupType = this.#getGroupType();\n }\n });\n\n noGroupLabels = input<boolean>();\n\n getHeaderStyleClass(ctrl: AbstractControl): string {\n return `dirty-${ctrl.dirty} invalid-${ctrl.invalid}`;\n }\n\n getChildControl(ctrl: AbstractControl): ObjectFormGroup {\n return ctrl as ObjectFormGroup;\n }\n\n getObjectFormGroup(control: any): YuvFormGroup | undefined {\n return (control as ObjectFormGroup)._eoFormGroup;\n }\n\n getObjectFormControlWrapper(control: any): YuvFormGroupWrapper | undefined {\n return (control as ObjectFormControlWrapper)?._eoFormControlWrapper;\n }\n\n getElement(control: any): ObjectFormControlWrapper {\n return control as ObjectFormControlWrapper;\n }\n\n #getGroupType(): string | undefined {\n // may as well be an ObjectFormControlWrapper so check first\n // if we got a real group\n const group = this.group() as ObjectFormGroup;\n if (group?._eoFormGroup) {\n if (group._eoFormGroup.type === 'o2mGroupStack') {\n // for data section only render as stack (tabs) if we have more than one child\n if (this.isData && Object.keys(group.controls).length === 1) {\n return this.types.GROUP;\n }\n return this.types.STACK;\n }\n if (group._eoFormGroup.type === 'o2mGroup') {\n return group._eoFormGroup.label && !(this.isCore || this.isData) && !this.noGroupLabels && !this.#parentIsStack(group)\n ? this.types.FIELDSET\n : this.types.GROUP;\n }\n return this.types.GROUP;\n } else return undefined;\n }\n\n #parentIsStack(group: ObjectFormGroup): boolean {\n const parentFormElement = group.parent && (group.parent as any)['_eoFormGroup'];\n return parentFormElement && parentFormElement.type === 'o2mGroupStack';\n }\n}\n","@let grp = group();\n@if (grp) {\n <div\n class=\"form-element {{ grp._eoFormGroup ? grp._eoFormGroup.type : 'o2mControlWrap' }} align-{{\n grp._eoFormGroup && grp._eoFormGroup.layout ? grp._eoFormGroup.layout.align : ''\n }}\"\n [formGroup]=\"grp\"\n >\n @switch (groupType) {\n <!-- group stacks (tabs) -->\n @case ('stack') {\n <mat-tab-group>\n @for (key of grp.controls | keys; track key) {\n <mat-tab [label]=\"getObjectFormGroup(grp.controls[key])?.label || ''\">\n <ng-template matTabContent>\n <div class=\"stack\" [ngClass]=\"{ stackBase: grp._eoFormGroup?.label === 'data' }\">\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n </div>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n }\n\n <!-- group with legend -->\n @case ('fieldset') {\n <div class=\"om-group fieldset\">\n <div class=\"legend\">\n <span>{{ grp._eoFormGroup?.label }}</span>\n </div>\n\n <div>\n @for (key of grp.controls | keys; track key) {\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n }\n </div>\n </div>\n }\n <!-- group -->\n @case ('group') {\n @for (key of grp.controls | keys; track key) {\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n }\n }\n }\n </div>\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BackendService, Logger } from '@yuuvis/client-core';\nimport { Observable, forkJoin as observableForkJoin } from 'rxjs';\nimport { map as _map } from 'rxjs/operators';\nimport { ObjectFormScriptingScope } from './object-form-scripting-scope';\n\n\n/**\n * @ignore\n */\n@Injectable()\nexport class ObjectFormScriptService {\n constructor(private logger: Logger, private backend: BackendService) { }\n\n /**\n * Run a form script.\n * @param scope - the current scripting scope\n * @param script - the script to be executed\n * @param [scriptName] - the scripts name\n */\n public runFormScript(scope: ObjectFormScriptingScope, script: any, scriptName?: string) {\n try {\n // Define form script the function\n const formScriptFunction = this.defineFunction('Formscript/' + scriptName, script);\n // run the form script\n const formScriptReturn = formScriptFunction(scope);\n // Check if the form script returns something and may export global scripts\n if (formScriptReturn) {\n this.importGlobalScriptsAndCallInit(scope, formScriptReturn);\n }\n } catch (e) {\n if (e instanceof SyntaxError) {\n alert('Syntax error in Form-Script. See console log for details.');\n }\n this.logger.error('Got script error', e);\n }\n }\n\n /**\n * Define form script function, appending source url as comment.\n * Enables debugging using browser debugging tools (Chrome+Firefox)\n * @see: https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Debug_eval_sources\n *\n * @param name - the name of the script\n * @param script - script to be wrapped in a function\n * @returns the function\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n private defineFunction(name: string, script: any): Function {\n // Appending source url as comment. See https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Debug_eval_sources\n // Enables debugging using browser debugging tools (Chrome+Firefox)\n // The line feed is needed, if the script has a comment in the last line\n return new Function('scope', script + '\\n;//# sourceURL=' + name + '.js');\n }\n\n /**\n * If the script contains global script, this function will import and run them\n * before running the actual script.\n *\n * @param scope - the current scripting scope\n * @param formScriptReturn - the return value of the actual form script\n */\n private importGlobalScriptsAndCallInit(scope: ObjectFormScriptingScope, formScriptReturn: any) {\n if (!formScriptReturn.init) {\n return;\n }\n\n if (formScriptReturn.uses) {\n // collect the global script exports promises\n const exports: any[] = [];\n const globals = [];\n\n // collect Observables for fetching global scripts\n for (const use of formScriptReturn.uses) {\n globals.push(this.resolveGlobalScript(use, scope));\n }\n\n observableForkJoin(globals).subscribe((globalReturns) => {\n for (const scriptReturn of globalReturns) {\n exports.push(scriptReturn['exports']);\n }\n // Invoke init function on form script return with the\n // collected exports using javascript apply magic\n formScriptReturn.init.apply(this, exports);\n });\n } else {\n // invoke init direct (no use of global scripts)\n formScriptReturn.init();\n }\n }\n\n /**\n * Fetch global scripts.\n * @param name - the name of the global script\n * @param scope - the current scripting scope\n * @returns\n */\n private resolveGlobalScript(name: string, scope: ObjectFormScriptingScope): Observable<any> {\n const requestOptions = {\n headers: new HttpHeaders({\n Accept: 'text/plain'\n }),\n responseType: 'text'\n };\n\n return this.backend.get(`/script/${name}/script`, undefined, requestOptions).pipe(\n _map((res: any) => {\n // define the global function ...\n const globalScript = this.defineFunction('Global/' + name, res);\n // ... and run it\n return globalScript(scope);\n })\n );\n }\n}\n","/**\n * @ignore\n * This class will be injected as scope into form scripts.\n */\nexport class ObjectFormScriptingScope {\n // List of all form fields (elements)\n public model: any = {};\n\n // all data values including invisible elements (READONLY)\n public data: any = {};\n\n // The id of the current DMS-Object (READONLY)\n public objectId?: string;\n\n // actions passed by BPM forms\n public actions: any = {};\n // additional objects provided by the object form\n // used for example to pass dms objects attached to a work item\n // to the script (READONLY)\n // may contain: FormScriptDmsObject, FileEntry\n public objects: any[] = [];\n public context: { id: string; title: string; objectTypeId: string } = { id: '', title: '', objectTypeId: '' };\n\n /**\n * Constructor\n * @param situation - Current form model situation (could be CREATE, SEARCH or EDIT)\n * @param onScriptingModelChange - callback function to be called when the scripting model changed\n * Be aware to provide an instance method as callback for the scripting scope.\n * @see: https://blog.johnnyreilly.com/2014/04/typescript-instance-methods.html\n *\n * @param api - Plugin API reference\n * @param isTableRowScope - set this to true if the current scripting scope is created for a\n * row editing form from a table element. It will then provide the right parameters for the scripting functions\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(public situation: string, private onScriptingModelChange: Function, public api: any, private isTableRowScope?: boolean) {}\n\n /**\n * Sets the internal model and wraps every model element with an observer to be\n * able to track their changes from within a form script\n * @param model\n */\n public setModel(model: any) {\n this.model = {};\n for (const k of Object.keys(model)) {\n this.model[k] = new ScopeElement(model[k], this.onScriptingModelChange);\n }\n }\n\n /**\n * Returns the observed model. Used for row editing forms of table elements that\n * create their own scripting scope in context of their parent form.\n * @returns the observed scripting scope model\n */\n public getModel() {\n return this.model;\n }\n\n /**\n * Called by the object form when the form model changes.\n * @param change - object with key equals name of the element\n * that changes and value of the new value\n */\n public modelChanged(change: any) {\n // find the changed element in the scopes model\n const propertyName = Object.keys(change)[0];\n if (change[propertyName] === undefined) {\n return;\n }\n\n if (this.model[propertyName]) {\n const el = this.model[propertyName];\n el.update(change[propertyName], this.model);\n }\n }\n}\n/**\n * @ignore\n */\nclass ScopeElement {\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(private element: any, private onScriptingModelChange: Function) {\n if (this.element.value === undefined) {\n this.element.value = null;\n }\n if (this.isProxyable(this.element.value)) {\n this.element.value = this.createProxy(this.element.value);\n }\n }\n\n private isProxyable(value: any, key?: string) {\n return (\n (typeof value === 'object' || Array.isArray(value)) &&\n value !== null &&\n !(value instanceof Date) &&\n !value.isProxy &&\n (key ? !key.includes('_meta') : true)\n );\n }\n\n private createProxy(value: any) {\n const handler = {\n set: (target: Record<string, unknown>, key: string, val: unknown) => {\n const previousValue = structuredClone(this.element.value);\n if (this.isProxyable(val, key)) {\n target[key] = this.createProxy(val);\n } else {\n target[key] = val;\n }\n if (this.hasValueChanged(this.element.value, previousValue) && !key.includes('_meta')) {\n this.onScriptingModelChange(this.element.name, { newValue: structuredClone(this.element.value), name: 'value' });\n }\n return true;\n },\n // This get trap is only used to find out, if an object is a proxy or not.\n get: (target: Record<string, unknown>, key: string) => {\n if (key === 'isProxy') {\n return true;\n }\n return target[key];\n }\n };\n\n Object.keys(value).forEach((key) => {\n if (this.isProxyable(value[key], key)) {\n value[key] = this.createProxy(value[key]);\n }\n });\n return new Proxy(value, handler);\n }\n\n private hasValueChanged(value1: unknown, value2: unknown) {\n return JSON.stringify(value1) !== JSON.stringify(value2);\n }\n\n update(value: unknown, model: any) {\n const newValue = structuredClone(value);\n if (this.hasValueChanged(this.element.value, value)) {\n if (this.isProxyable(value)) {\n this.element.value = this.createProxy(newValue);\n } else {\n this.element.value = newValue;\n }\n if (this.element.onchange) {\n this.element.onchange(this, model);\n }\n }\n }\n\n set value(value) {\n if (this.hasValueChanged(this.element.value, value)) {\n if (this.isProxyable(value)) {\n this.element.value = this.createProxy(value);\n } else {\n this.element.value = value;\n }\n this.onScriptingModelChange(this.element.name, { newValue: structuredClone(this.element.value), name: 'value' });\n }\n }\n\n get value() {\n return this.element.value;\n }\n\n set onchange(onchange) {\n this.element.onchange = onchange;\n this.onScriptingModelChange(this.element.name, { newValue: onchange, name: 'onchange' });\n }\n\n get onchange() {\n return this.element.onchange;\n }\n\n set required(required) {\n this.element.required = required;\n this.onScriptingModelChange(this.element.name, { newValue: required, name: 'required' });\n }\n\n get required() {\n return this.element.required;\n }\n\n set readonly(readonly) {\n this.element.readonly = readonly;\n this.onScriptingModelChange(this.element.name, { newValue: readonly, name: 'readonly' });\n }\n\n get readonly() {\n return this.element.readonly;\n }\n\n set error(error) {\n this.element.error = error;\n this.onScriptingModelChange(this.element.name, { newValue: error, name: 'error' });\n }\n\n get error() {\n return this.element.error;\n }\n\n set onrowedit(onrowedit) {\n this.element.onrowedit = onrowedit;\n this.onScriptingModelChange(this.element.name, { newValue: onrowedit, name: 'onrowedit' });\n }\n\n get onrowedit() {\n return this.element.onrowedit;\n }\n\n setList(obj: any) {\n if (this.element.setList) {\n this.element.setList(obj);\n }\n }\n\n applyFilter(obj: any) {\n if (this.element.applyFilter) {\n this.element.applyFilter(obj);\n }\n }\n\n setFilter(obj: any) {\n if (this.element.setFilter) {\n this.element.setFilter(obj);\n }\n }\n\n get name() {\n return this.element.name;\n }\n\n get qname() {\n return this.element.qname;\n }\n\n get label() {\n return this.element.label;\n }\n\n get description() {\n return this.element.description;\n }\n\n get type() {\n return this.element.type;\n }\n\n get multiselect() {\n return this.element.multiselect;\n }\n\n get codesystem() {\n return this.element.codesystem;\n }\n\n get minlen() {\n return this.element.minLength;\n }\n\n get maxlen() {\n return this.element.maxLength;\n }\n\n get classifications() {\n return this.element.classifications;\n }\n\n get scale() {\n return this.element.scale;\n }\n\n get precision() {\n return this.element.precision;\n }\n\n get withtime() {\n return this.element.withtime;\n }\n\n get elements() {\n return this.element.elements;\n }\n\n get aliases() {\n return this.element.aliases;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, effect, ElementRef, inject, input, OnDestroy, output, signal, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { ObjectFormControl, ObjectFormControlWrapper, ObjectFormGroup, Situation, SystemService, UserService, Utils } from '@yuuvis/client-core';\nimport { debounceTime, merge, Observable, of, Subscription } from 'rxjs';\nimport { FormScriptingApiService } from './form-scripting.service';\nimport { IObjectFormElementExtension } from './object-form-extension.interface';\nimport { ObjectFormGroupComponent } from './object-form-group/object-form-group.component';\nimport { ObjectFormScriptService } from './object-form-script/object-form-script.service';\nimport { ObjectFormScriptingScope } from './object-form-script/object-form-scripting-scope';\nimport { ObjectFormService } from './object-form.service';\nimport { ObjectFormUtils } from './object-form.utils';\nimport { FormValidation } from './object-form.validation';\nimport { ObjectFormOptions, FormStatusChangedEvent, ObjectFormModelChange } from './object-form.interface';\n\n@Component({\n selector: 'yuv-object-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ObjectFormGroupComponent],\n providers: [ObjectFormService, ObjectFormScriptService, FormScriptingApiService],\n templateUrl: './object-form.component.html',\n styleUrl: './object-form.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'yuv-object-form',\n '[attr.inert]': 'inert() ? true : null'\n }\n})\nexport class ObjectFormComponent implements OnDestroy, AfterViewInit {\n #elementRef = inject(ElementRef);\n #systemService = inject(SystemService);\n #formScriptService = inject(ObjectFormScriptService);\n #formHelperService = inject(ObjectFormService);\n #userService = inject(UserService);\n #cdRef = inject(ChangeDetectorRef);\n #formScriptingApiService = inject(FormScriptingApiService);\n\n #skipTranslationsFor = ['core', 'data'];\n #namePrefix = 'fg_';\n gCount = 0;\n\n id = Utils.uuid();\n\n fo?: ObjectFormOptions;\n formOptions = input<ObjectFormOptions>();\n #formOptionsEffect = effect(() => {\n this.#init(this.formOptions());\n });\n\n inert = input<boolean>();\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n #elementExtensionsEffect = effect(() => {\n this.#formHelperService.setElementExtensions(this.elementExtensions());\n });\n\n /**\n * There are special scenarios where forms are within a form themselves.\n * Setting this property to true, will handle the current form in a\n * slightly different way when it comes to form scripting.\n */\n isInnerTableForm = input<boolean>();\n\n /**\n * triggered when the forms state has been changed\n */\n statusChanged = output<FormStatusChangedEvent>();\n\n /**\n * handler to be executed after the form has been set up\n */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFormReady = output();\n\n // the actual form instance\n form?: ObjectFormGroup;\n // property for holding the forms data used for comparison when a form-changed-event\n // is fetched to indicate wher or not the indexdata were changed or just the properties\n // of the form elements (eg. form script setting fields to readonly)\n formData: any;\n #scriptModel: any = {};\n #scriptingScope?: ObjectFormScriptingScope;\n #subscriptions: Subscription[] = [];\n\n // local store for all the form control references\n #formControls: any = {};\n #initialValidators: any = {};\n\n constructor() {\n this.#formScriptingApiService.formId = this.id;\n this.#formScriptingApiService.api.events\n .on(FormScriptingApiService.EVENT_MODEL_CHANGED)\n .pipe(takeUntilDestroyed())\n .subscribe((event) => event.data && this.#onScriptingModelChanged(event.data.formControlName, event.data.change, event.data.formId));\n\n this.#formScriptingApiService.formId = this.id;\n }\n\n // initialize the form based on the provided form options\n #init(fo: ObjectFormOptions | undefined) {\n this.form = undefined;\n if (!fo) return;\n if (!this.#validateFormModel(fo)) return;\n setTimeout(() => {\n this.#initialValidators = {};\n this.unsubscribeAll();\n this.#buildReactiveForm(fo);\n }, 0);\n }\n\n #validateFormModel(fo: ObjectFormOptions): boolean {\n const model = fo.formModel;\n const valid =\n model &&\n model.elements &&\n model.elements.length === 2 &&\n // core\n model.elements[0].type === 'o2mGroup' &&\n // data\n model.elements[1].type === 'o2mGroupStack';\n if (!valid) console.error('Invalid form model', model);\n return valid;\n }\n\n #initScriptingScope(formOptions: ObjectFormOptions, dataFormModel: any) {\n const { data, actions, objects, context } = (formOptions || {}) as ObjectFormOptions;\n\n if (this.#scriptingScope) {\n this.#scriptingScope.setModel(this.#scriptModel);\n /** provide access to actions (used inside of BPM-Forms) */\n this.#scriptingScope.actions = actions;\n /** provide access to additional objects (used for example in BPM-Start-Forms to\n * add data of DMS-Objects to start the process for)\n */\n this.#scriptingScope.objects = objects || [];\n this.#scriptingScope.context = context || { id: '', title: '', objectTypeId: '' };\n /** provide readonly access to initial form data (which may also contain values that\n * are not rendered as form elements (invisible values))\n */\n this.#scriptingScope.data = data;\n\n /** by default, scripting scopes are applied to forms. But table elements create their own scope\n * for editing rows. Being one of those inner forms should not run the form script again, but\n * instead just provide the observing abilities of the scripting scope.\n */\n if (!this.isInnerTableForm() && dataFormModel) {\n const scriptName = dataFormModel.name + '_' + dataFormModel.situation;\n console.debug('executing form script ' + scriptName);\n this.#formScriptService.runFormScript(this.#scriptingScope, dataFormModel.script, scriptName);\n }\n }\n }\n\n focusForm() {\n this.#elementRef.nativeElement.querySelector('input').focus();\n }\n\n getGroup(id: string): ObjectFormGroup {\n return this.form?.get(id) as ObjectFormGroup;\n }\n\n setFormData(data: Record<string, unknown>) {\n const fo = this.formOptions();\n if (!fo) return;\n fo.data = data;\n setTimeout(() => this.#init(fo), 0);\n }\n\n patchValue(data: Record<string, unknown>) {\n Object.keys(data).forEach((key) => {\n this.#onScriptingModelChanged(key, {\n name: 'value',\n newValue: data[key]\n });\n });\n }\n\n /**\n * Extracts the values from the form model. Each form value is represented by one\n * property on the result object holding the fields value. The keys (properties) are the `name`\n * properties of the form element.\n *\n * How values are extracted is influenced by the forms situation.\n *\n * @return object of key value pairs\n */\n getFormData() {\n return this.#formToData();\n }\n\n getFormElements() {\n const formElements: any = {};\n Object.keys(this.#formControls).forEach((k) => {\n formElements[k] = this.#formControls[k].__eoFormElement;\n });\n return formElements;\n }\n\n setFormPristine() {\n if (!this.form) return;\n this.form.markAsPristine();\n this.#formHelperService.formChanged.next({\n invalid: this.form.invalid,\n dirty: this.form.dirty,\n data: this.formData,\n indexdataChanged: false\n });\n // also set the data of the form options to the current data\n // so resetting the form afterwards will reset to the current \n // pristine state\n const fo = this.formOptions();\n if (!fo) return;\n fo.data = this.formData;\n }\n\n // reset the form to its initial state\n resetForm() {\n const fo = this.formOptions();\n if (!fo) return;\n this.setFormData(fo.data);\n this.#emitFormChangedEvent();\n }\n\n /**\n * Returns the observed model that was passed to the current form script running. If there is\n * no form script, this method will return NULL.\n * @returns\n */\n getObservedScriptModel() {\n return this.#scriptingScope ? this.#scriptingScope.getModel() : null;\n }\n\n // Create a reactive form from the enaio form model\n #buildReactiveForm(formOptions: ObjectFormOptions) {\n this.#scriptingScope = undefined;\n this.#scriptModel = {};\n this.#formControls = {};\n const formModel = this.#dataToForm(formOptions.formModel, formOptions.data);\n if (!formModel) {\n return;\n }\n // if a script is available, we'll init the form scripting for the\n // current form\n if (this.isInnerTableForm() || (formModel.script && formModel.script.length > 0)) {\n console.debug('adding form scripting scope');\n this.#scriptingScope = new ObjectFormScriptingScope(\n formModel.situation,\n this.#onScriptingModelChanged,\n this.#formScriptingApiService.getApi(),\n this.isInnerTableForm()\n );\n this.#scriptingScope.objectId = this.formOptions()!.objectId;\n }\n\n const form = new ObjectFormGroup({});\n if (formModel?.elements[0]?.elements) {\n this.#addFormControl(form, formModel.elements[0], 'core');\n }\n if (formModel?.elements[1]?.elements) {\n this.#addFormControl(form, formModel.elements[1], 'data');\n }\n this.form = form;\n this.#formScriptingApiService.registerActiveForm(this);\n setTimeout(() => {\n if (!this.form) return;\n this.initValidators(this.form);\n this.#subscriptions.push(\n merge(this.form.valueChanges, this.form.statusChanges)\n .pipe(debounceTime(500))\n .subscribe(() => this.#emitFormChangedEvent())\n );\n\n this.#initScriptingScope(formOptions, formModel);\n\n this.onFormReady.emit();\n this.#emitFormChangedEvent(false);\n }, 300); //<-- init validation is delayed\n }\n\n initValidators(form: any) {\n if (this.form) {\n for (const key of Object.keys(form.controls)) {\n const control = form.controls[key];\n if (control.controls) {\n this.initValidators(control);\n } else {\n this.#initialValidators[control._eoFormElement.name] = control.validator;\n control.setValidators(Validators.compose(this.#getValidators(control._eoFormElement).concat([this.#initialValidators[control._eoFormElement.name]])));\n control.updateValueAndValidity();\n }\n }\n }\n }\n\n #emitFormChangedEvent(compare = true) {\n // check if indexdata has been changed\n const currentFormData = this.getFormData();\n const idxChange = compare ? JSON.stringify(this.formData) !== JSON.stringify(currentFormData) : false;\n this.formData = currentFormData;\n if (this.form) {\n const e = {\n invalid: this.form.invalid,\n dirty: this.form.dirty,\n data: this.formData,\n indexdataChanged: idxChange\n };\n this.statusChanged.emit(e);\n this.#formHelperService.formChanged.next(e);\n }\n }\n\n /**\n * This method will be called each time the script changes its internal model.\n * It is used to transfer the script changes to the actual form model.\n *\n * To ensure the right context, we define an instance method as callback for the scripting scope\n * @see: https://blog.johnnyreilly.com/2014/04/typescript-instance-methods.html\n *\n * @param formControlName\n * @param change\n */\n #onScriptingModelChanged = (formControlName: string, change: ObjectFormModelChange, formId?: string) => {\n if (!this.form || (formId && this.id !== formId)) return;\n // find the target control\n const fc: ObjectFormControl = this.#formControls[formControlName] as ObjectFormControl;\n if (fc) {\n // change only allowed properties\n switch (change.name) {\n case 'value': {\n if (Array.isArray(change.newValue)) {\n this.#processArrayValueChange(fc, change);\n } else {\n fc._eoFormElement.value = change.newValue;\n if (fc.value !== change.newValue) {\n fc.patchValue(change.newValue);\n fc.updateValueAndValidity();\n fc.markAsDirty();\n }\n }\n this.form.markAsDirty();\n break;\n }\n case 'required': {\n fc._eoFormElement.required = change.newValue;\n // apply new validators\n // @see: https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular-2-model-driven-forms\n fc.setValidators(Validators.compose(this.#getValidators(fc._eoFormElement).concat([this.#initialValidators[fc._eoFormElement.name]])));\n // need to mark form control as touched because otherwise form validation will not show\n // error messages\n fc.markAsTouched();\n fc.updateValueAndValidity();\n break;\n }\n case 'readonly': {\n fc._eoFormElement.readonly = change.newValue;\n if (change.newValue === true) {\n fc.disable();\n } else {\n fc.enable();\n }\n break;\n }\n case 'error': {\n fc._eoFormElement.error = change.newValue;\n fc.markAsTouched();\n fc.updateValueAndValidity();\n break;\n }\n // new onrowedit function was applied by the script\n case 'onrowedit': {\n fc._eoFormElement.onrowedit = change.newValue;\n break;\n }\n // new onchange function was applied by the script\n case 'onchange': {\n fc._eoFormElement.onchange = change.newValue;\n break;\n }\n }\n this.#cdRef.detectChanges();\n }\n };\n\n #processArrayValueChange(fc: any, change: any) {\n const newVal = change.newValue;\n const targetType = fc._eoFormElement.type;\n // for some types we have to ensure that meta data are provided as well\n switch (targetType) {\n case 'ORGANIZATION': {\n this.#getDataMeta(fc._eoFormElement, newVal).subscribe((m) => {\n fc._eoFormElement.dataMeta = m;\n });\n break;\n }\n case 'TABLE': {\n const dataToBeProcessed: Record<string, unknown> = {};\n fc._eoFormElement.elements.forEach((e: any) => {\n if (e.type === 'ORGANIZATION' || e.type === 'CODESYSTEM') {\n dataToBeProcessed[e.name] = e;\n }\n });\n if (Object.keys(dataToBeProcessed).length) {\n newVal.forEach((rowData: any) => {\n Object.keys(rowData).forEach((key) => {\n if (dataToBeProcessed[key]) {\n this.#getDataMeta(dataToBeProcessed[key], rowData[key]).subscribe((m) => {\n if (m) {\n rowData[key + '_meta'] = m;\n } else {\n delete rowData[key + '_meta'];\n }\n this.#updateArrayValue(fc, newVal);\n });\n }\n });\n });\n }\n break;\n }\n }\n this.#updateArrayValue(fc, newVal);\n }\n\n #updateArrayValue(fc: any, newValue: any) {\n fc._eoFormElement.value = [].concat(newValue);\n fc.patchValue([].concat(newValue));\n fc.updateValueAndValidity();\n fc.markAsDirty();\n }\n\n #getDataMeta(formElement: any, newValue: any): Observable<any> {\n if (newValue) {\n switch (formElement.type) {\n case 'ORGANIZATION': {\n return this.#userService.getUserById(newValue);\n }\n }\n }\n return of(null);\n }\n\n #patchFormValue(formValue: string[] | string) {\n let value: any;\n if (Array.isArray(formValue)) {\n value = [];\n // copy by value for arrays of objects (e.g. table data)\n formValue.forEach((o) => value.push(JSON.parse(JSON.stringify(o))));\n } else {\n value = formValue;\n }\n return value;\n }\n\n /**\n * Recursive method adding a new FormControl (group or control) to a parent form group\n *\n * @param parentGroup - the parent group to add the control to\n * @param formElement - the enaio form model element to create the child control from\n * @param [useName] - use this name instead of the one from the model\n */\n #addFormControl(parentGroup: ObjectFormGroup, formElement: any, useName?: string) {\n const fo = this.formOptions();\n if (!fo) return;\n\n let ctrl;\n let name;\n\n // add a form group\n if (formElement.type === 'o2mGroup' || formElement.type === 'o2mGroupStack') {\n // do not add groups that are empty\n const isRootGroup = formElement.name && (formElement.name !== 'data' || formElement.name !== 'core');\n if (!isRootGroup && (!formElement.elements || formElement.elements.length === 0)) {\n console.error('Found empty form group', formElement);\n return;\n }\n\n ctrl = new ObjectFormGroup({});\n ctrl._eoFormGroup = {\n layout: formElement.layout,\n type: formElement.type\n };\n\n if (formElement.name) {\n if (this.#skipTranslationsFor.includes(formElement.name)) {\n ctrl._eoFormGroup.label = formElement.name;\n } else if (!formElement.label) {\n // no label, so try to translate the technical name\n ctrl._eoFormGroup.label = this.#systemService.getLocalizedResource(`${formElement.name}_label`) || formElement.name;\n } else {\n // there is a label so we take this one\n ctrl._eoFormGroup.label = formElement.label;\n }\n }\n\n if (useName === 'core' || useName === 'data') {\n ctrl._eoFormGroup.label = useName;\n }\n\n for (const e of formElement.elements) {\n this.#addFormControl(ctrl, e);\n }\n name = useName || 'fg' + this.gCount++;\n } else {\n // add form control\n // To be able to integrate recursive form controls into the main form,\n // we have to wrap them in a form group\n ctrl = new ObjectFormControlWrapper({});\n ctrl._eoFormControlWrapper = {\n // the name of the wrapped FormControl\n controlName: formElement.name,\n situation: fo.formModel.situation\n };\n\n // do not set a reference as the form controls value\n // otherwise we could not reset the form\n const value = formElement?.value\n ? this.#patchFormValue(formElement?.value)\n : !Utils.isEmpty(formElement?.defaultvalue) && fo.formModel.situation === Situation.CREATE\n ? this.#patchFormValue(formElement?.defaultvalue)\n : formElement?.value;\n\n // create the actual form control\n const controlDisabled = fo.disabled || !!formElement.readonly;\n const formControl = new ObjectFormControl({\n value,\n disabled: controlDisabled\n });\n\n // if form element has a 'label' property it will be shown as is ...\n if (!formElement.label) {\n // ... if there is no label but a 'labelKey' property we are going to localize that key ...\n if (formElement.labelkey) {\n formElement.label = this.#systemService.getLocalizedResource(`${formElement.labelkey}_label`) || formElement.labelkey;\n formElement.description = this.#systemService.getLocalizedResource(`${formElement.labelkey}_description`);\n } else {\n // ... no 'label' and also no 'labelKey' means that we are showing technical name instead\n formElement.label = formElement.name;\n }\n }\n formElement.readonly = controlDisabled;\n // we are using an internal type to distinguish between the components\n // to be used to render certain form elements\n formElement._internalType = this.#systemService.getInternalFormElementType(formElement.type, formElement.classifications);\n\n formControl._eoFormElement = formElement;\n this.#formControls[formElement.name] = formControl;\n\n if (formElement.type === 'TABLE') {\n // Add 'onrowedit' property even if it's not set.\n // This is required because otherwise mobX-Observer would not recognize\n // changes to this property applied by the form script\n if (!Object.keys(formControl._eoFormElement).includes('onrowedit')) {\n formControl._eoFormElement.onrowedit = null;\n }\n\n if (this.#scriptingScope && formControl._eoFormElement.value) {\n // having a scripting scope and table rows means that we need to set empty\n // columns to NULL, because otherwise mobX won't be able to track those values\n const valueFields = formControl._eoFormElement.elements.map((e: any) => e.name);\n formControl._eoFormElement.value.forEach((rowValue: any) => {\n valueFields.forEach((valueField: string) => {\n if (!Object.keys(rowValue).includes(valueField)) {\n rowValue[valueField] = null;\n }\n });\n });\n // update form controls value as well to reflect the observed value\n formControl.patchValue(formControl._eoFormElement.value, {\n onlySelf: true,\n emitEvent: false,\n emitModelToViewChange: false,\n emitViewToModelChange: false\n });\n }\n }\n\n if (formElement._internalType === 'string:organization') {\n formControl._eoFormElement.setFilter = (filterObject: any) => {\n formControl._eoFormElement.filter = filterObject;\n };\n }\n\n ObjectFormUtils.updateFormElement(formElement);\n\n // remove empty descriptions\n const desc = formControl._eoFormElement.description;\n if (desc && desc.trim().length === 0) {\n formControl._eoFormElement.description = null;\n }\n\n // add the form element to the script model that will be injected into\n // the forms scripting scope later on\n this.#scriptModel[formElement.name] = formControl._eoFormElement;\n\n // apply change listener to the form control, that will trigger\n // the form elements onChange listener\n const controlWatch = ctrl.valueChanges.pipe(debounceTime(500));\n this.#subscriptions.push(\n controlWatch.subscribe((v) => {\n if (this.#scriptingScope) {\n this.#scriptingScope.modelChanged(v);\n }\n })\n );\n\n ctrl.addControl(formElement.name, formControl);\n name = this.#namePrefix + formElement.name;\n }\n parentGroup.addControl(name, ctrl);\n }\n\n /**\n * Build validators for the given form element to be attached to\n * a reactive formControl.\n *\n * @param formElement - form element object\n */\n #getValidators(formElement: any): ValidatorFn[] {\n const fo = this.formOptions();\n const elmValidators = FormValidation.getValidators(formElement, fo?.formModel.situation);\n\n // add custom validator for script enabled forms\n if (this.#scriptingScope) {\n elmValidators.push(FormValidation.customScriptingValidation);\n }\n\n return elmValidators;\n }\n\n /**\n * Extract the values from the form\n */\n #formToData() {\n const fo = this.formOptions();\n return fo && this.form ? this.#formHelperService.extractFormData(this.form, fo.formModel.situation, fo.data, this.isInnerTableForm()) : {};\n }\n\n /**\n * Merge data into a form model.\n *\n * @param model - form model\n * @param data - data object or array of SearchFilter objects in case of a search form\n */\n #dataToForm(model: any, data: any) {\n if (model && data) {\n this.#setElementValues(model.elements, data);\n }\n return model;\n }\n\n // recursive method for adding values to model elements\n #setElementValues(elements: any[], data: Record<string, unknown>) {\n elements?.forEach((element) => {\n if (this.#hasValue(data, element)) {\n element.value = this.#getValue(data, element);\n } else {\n delete element.value;\n }\n if (element.type !== 'TABLE' && element.elements && element.elements.length > 0) {\n this.#setElementValues(element.elements, data);\n }\n });\n }\n\n #hasValue(data: Record<string, unknown>, element: any) {\n // differ between array of SearchFilters and a form data object\n if (Array.isArray(data)) {\n return !!data.find((filter) => filter.property === element.id);\n } else {\n return Object.keys(data).includes(element.name);\n }\n }\n\n #getValue(data: Record<string, unknown>, element: any) {\n return data[element.name];\n }\n\n ngOnDestroy() {\n this.unsubscribeAll();\n this.#formScriptingApiService.unregisterActiveForm(this);\n }\n\n ngAfterViewInit() {\n this.#cdRef.detectChanges();\n }\n\n // unsubscribe from all value change listeners for the current form\n // to avoid memory leaks. This method will also be called every time\n // a new form is rendered to get rid of the old form element subscriptions\n private unsubscribeAll() {\n if (this.#subscriptions.length) {\n console.debug('unsubscribed from ' + this.#subscriptions.length + ' value change listeners.');\n this.#subscriptions.forEach((s) => s.unsubscribe());\n this.#subscriptions = [];\n }\n }\n}\n","@let fo = formOptions();\n@if (fo && form) {\n <div class=\"yuv-object-form\" [formGroup]=\"form\">\n <div class=\"form-element-wrap core\">\n <yuv-object-form-group [group]=\"getGroup('core')\" [situation]=\"fo.formModel.situation\"></yuv-object-form-group>\n </div>\n <div class=\"form-element-wrap data\">\n <yuv-object-form-group [group]=\"getGroup('data')\" [situation]=\"fo.formModel.situation\"></yuv-object-form-group>\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { ObjectFormComponent } from './object-form.component';\n\n@NgModule({\n imports: [ObjectFormComponent],\n exports: [ObjectFormComponent],\n})\nexport class YuvObjectFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","observableForkJoin","_map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-object-form.mjs","sources":["../../../../../libs/yuuvis/client-framework/object-form/src/lib/form-scripting.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-extension.interface.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.validation.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.utils.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-element/object-form-element.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-element/object-form-element.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-group/object-form-group.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-group/object-form-group.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/object-form-script.service.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form-script/object-form-scripting-scope.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.component.ts","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.component.html","../../../../../libs/yuuvis/client-framework/object-form/src/lib/object-form.module.ts","../../../../../libs/yuuvis/client-framework/object-form/src/yuuvis-client-framework-object-form.ts"],"sourcesContent":["import { inject, Injectable, NgZone, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n ApiBase,\n AppCacheService,\n BackendService,\n DmsObject,\n DmsService,\n EventService,\n HttpOptions,\n NotificationService,\n Operator,\n SearchQuery,\n SearchResult,\n SearchResultItem,\n SearchService,\n SystemService,\n TranslateService,\n UserService,\n Utils,\n YuvEventType,\n YuvUser\n} from '@yuuvis/client-core';\nimport { firstValueFrom, map } from 'rxjs';\nimport { FormScriptingAPI, FormScriptingElementExtension } from './form-scripting.api.interface';\nimport { ObjectFormComponent } from './object-form.component';\n\n@Injectable()\nexport class FormScriptingApiService {\n #ngZone = inject(NgZone);\n #router = inject(Router);\n #eventService = inject(EventService);\n #userService = inject(UserService);\n #dmsService = inject(DmsService);\n #systemService = inject(SystemService);\n #searchService = inject(SearchService);\n #backend = inject(BackendService);\n #translate = inject(TranslateService);\n #notifications = inject(NotificationService);\n #appCache = inject(AppCacheService);\n\n static EVENT_MODEL_CHANGED = 'yuv.event.object-form.model.changed';\n #activeFormComponents = new Map<string, ObjectFormComponent>();\n elementExtensions = signal<Record<string, FormScriptingElementExtension>>({});\n formId?: string;\n\n get api() {\n return this.getApi();\n }\n\n registerActiveForm(component: ObjectFormComponent) {\n const id = component.formOptions()?.formModel?.name || component?.id;\n return id && this.#activeFormComponents.set(id, component);\n }\n\n unregisterActiveForm(component: ObjectFormComponent) {\n const id = component.formOptions()?.formModel?.name || component?.id;\n return id && this.#activeFormComponents.delete(id);\n }\n\n getApi(): FormScriptingAPI {\n const formId = this.formId;\n return {\n elementExtensions: {\n register: (extensions: FormScriptingElementExtension[]) => {\n extensions.forEach((ext) => {\n if (ext.id) this.elementExtensions.set({ ...this.elementExtensions(), [ext.id]: ext });\n });\n }\n },\n events: {\n yuuvisEventType: YuvEventType,\n on: (type: string) => this.#ngZone.run(() => this.#eventService.on(type)),\n trigger: (type: string, data?: any) => this.#ngZone.run(() => this.#eventService.trigger(type, data))\n },\n session: {\n getUser: () => this.getCurrentUser(),\n user: {\n get: () => this.getCurrentUser(),\n hasRole: (role: string) => this.getCurrentUser().authorities?.includes(role) || false\n }\n },\n http: {\n get: (uri, base, options) => this.get(uri, base, options),\n post: (uri, data, base, options) => this.post(uri, data, base, options),\n del: (uri, base, options) => this.del(uri, base, options),\n put: (uri, data, base, options) => this.put(uri, data, base, options)\n },\n form: {\n activeForms: this.#activeFormComponents,\n getValue: (formControlName) =>\n Array.from(this.#activeFormComponents.values()).reduce(\n (prev: Record<string, unknown>, cur: ObjectFormComponent) => ({ ...prev, ...(cur.formData || {}) }),\n {}\n )[formControlName],\n setValue: (formControlName, newValue) => this.api.form.modelChange(formControlName, { name: 'value', newValue }),\n modelChange: (formControlName, change) =>\n this.#ngZone.run(() =>\n this.#eventService.trigger(FormScriptingApiService.EVENT_MODEL_CHANGED, {\n formId,\n formControlName,\n change\n })\n )\n },\n storage: {\n getItem: (key) => firstValueFrom(this.#appCache.getItem(key)),\n setItem: (key, value) => firstValueFrom(this.#appCache.setItem(key, value))\n },\n notifier: {\n success: (text, title) => this.#notifications.success(title, text),\n error: (text, title) => this.#notifications.error(title, text),\n info: (text, title) => this.#notifications.info(title, text),\n warning: (text, title) => this.#notifications.warning(title, text)\n },\n util: {\n translate: (key, data) => this.#translate.instant(key, data)\n }\n };\n }\n\n get(uri: string, base?: string, options?: HttpOptions) {\n return firstValueFrom(\n this.#backend.get(uri, base || ApiBase.none, options || { observe: 'response' }).pipe(\n map((res: any) => {\n return options ? res : { status: res.status, data: res.body };\n })\n )\n );\n }\n\n put(uri: string, data: Record<string, unknown>, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.put(uri, data, base || ApiBase.none, options));\n }\n\n post(uri: string, data: Record<string, unknown>, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.post(uri, data, base || ApiBase.none, options));\n }\n\n del(uri: string, base?: string, options?: HttpOptions) {\n return firstValueFrom(this.#backend.delete(uri, base || ApiBase.none, options));\n }\n\n getCurrentUser(): YuvUser {\n return this.#userService.getCurrentUser();\n }\n\n getDmsObject(id: string, version: number): Promise<DmsObject> {\n return firstValueFrom(this.#dmsService.getDmsObject(id, version))\n .then((response) => {\n return Promise.resolve(response);\n })\n .catch(this.#handleError);\n }\n\n /**\n * fetches dms objects from the server that match the given params\n *\n * @param fields - the fields to match. example: {name: 'max', plz: '47111}\n * @param type - the target object type\n */\n getResult(fields: Record<string, unknown>, type?: string): Promise<DmsObject[]> {\n const searchQuery: SearchQuery = {\n filters: Object.keys(fields).map((f) => ({\n f,\n o: Operator.EQUAL,\n v1: fields[f]\n }))\n };\n if (type) searchQuery.types = [type];\n return firstValueFrom(this.#searchService.search(searchQuery))\n .then((res: SearchResult) => {\n return Promise.resolve(\n res.items.map((resItem: SearchResultItem) => {\n new DmsObject(resItem);\n })\n );\n })\n .catch(this.#handleError);\n }\n\n encodeFileName(filename: string) {\n return Utils.encodeFileName(filename);\n }\n\n #handleError(error: any): Promise<any> {\n return Promise.reject(error.message || error);\n }\n}\n","import { Component, inject, input, Type } from '@angular/core';\nimport { FormScriptingAPI } from './form-scripting.api.interface';\nimport { FormScriptingApiService } from './form-scripting.service';\n\n// Extension of a particular form element\nexport interface IObjectFormElementExtension {\n property: string;\n cmp: Type<ObjectFormElementExtension>;\n}\n\nexport interface IObjectFormElementExtensionComponentInput {\n formControlName: string;\n}\n\n/**\n * Class to extend by form element extensions.\n */\n@Component({\n template: '',\n standalone: true\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport abstract class ObjectFormElementExtension {\n #formScriptingApiService = inject(FormScriptingApiService);\n\n input = input.required<IObjectFormElementExtensionComponentInput>();\n\n protected getApi(): FormScriptingAPI {\n return this.#formScriptingApiService.getApi();\n }\n\n protected getCurrentValue(): unknown {\n return this.getApi().form.getValue(this.input().formControlName);\n }\n\n setValue(value: unknown) {\n // only set the value if the value is different. Otherwise the form\n // will end up in an infinite loop\n if (value !== this.getCurrentValue()) this.getApi().form.setValue(this.input().formControlName, value);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\nimport { YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { FormScriptingElementExtension } from '../../form-scripting.api.interface';\nimport { ObjectFormElementExtension } from '../../object-form-extension.interface';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'yuv-form-scripting-element-extension',\n standalone: true,\n imports: [CommonModule, YuvIconComponent, MatTooltipModule],\n templateUrl: './form-scripting-element-extension.component.html',\n styleUrl: './form-scripting-element-extension.component.scss' \n})\nexport class FormScriptingElementExtensionComponent extends ObjectFormElementExtension {\n ext = input<FormScriptingElementExtension>();\n defaultIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M160-120q-33 0-56.5-23.5T80-200v-560q0-33 23.5-56.5T160-840h560q33 0 56.5 23.5T800-760v80h80v80h-80v80h80v80h-80v80h80v80h-80v80q0 33-23.5 56.5T720-120H160Zm0-80h560v-560H160v560Zm80-80h200v-160H240v160Zm240-280h160v-120H480v120Zm-240 80h200v-200H240v200Zm240 200h160v-240H480v240ZM160-760v560-560Z\"/></svg>';\n\n run() {\n this.ext()?.callback();\n }\n}\n","@let x = ext();\n@if (x) {\n @if (x.icon) {\n <button class=\"secondary\" (click)=\"run()\" [matTooltip]=\"x.label\">\n <yuv-icon [svg]=\"x.icon\"></yuv-icon>\n </button>\n } @else if (x.label) {\n <button class=\"secondary\" (click)=\"run()\">{{ x.label }}</button>\n } @else {\n <button class=\"secondary\" (click)=\"run()\">\n <yuv-icon [svg]=\"defaultIcon\"></yuv-icon>\n </button>\n }\n}\n","import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';\nimport { ObjectFormControl, Situation } from '@yuuvis/client-core';\n/**\n * @ignore\n * Custom validation class.\n */\nexport class FormValidation {\n /**\n * Build validators for the given form element to be attached to\n * a reactive formControl.\n *\n * @param formElement - form element object\n * @param situation - form situation to fetch validators for\n */\n static getValidators(formElement: any, situation: string): ValidatorFn[] {\n const elmValidators: ValidatorFn[] = [];\n const { required, regex } = formElement;\n\n // apply situation based validations\n switch (situation) {\n case Situation.SEARCH: {\n // TODO: implement general validators for SEARCH situation\n break;\n }\n default: {\n if (required) {\n elmValidators.push(Validators.required);\n }\n if (regex && !formElement.multiselect) {\n elmValidators.push(Validators.pattern(regex));\n }\n break;\n }\n }\n return elmValidators;\n }\n\n /**\n *\n * @param control - from object control\n * @returns Validation object {eoformScript: {valid: boolean}} or null\n */\n static customScriptingValidation(): ValidatorFn {\n return (control: AbstractControl) => {\n const ctrl = control as ObjectFormControl;\n return ctrl._eoFormElement && ctrl._eoFormElement.error ? { eoformScript: { valid: false } } : null;\n };\n }\n}\n","import { Classification, ContentStreamField, ObjectFormControl, ObjectFormControlWrapper, Situation } from '@yuuvis/client-core';\nimport { FormValidation } from './object-form.validation';\n\n/**\n * Provides a rendering of form control in `ObjectFormComponent`, `QuickSearchComponent` so wie `SearchFilterFormComponent`.\n */\n\nexport class ObjectFormUtils {\n /**\n * Converts a form element object to an ObjectFormControlWrapper which then can be used to\n * render a from control. Result can be used as input for FormElementComponent.\n *\n * @param element - the element object or a json string\n * @param situation - optional property to set up a form situation for the control (default is EDIT)\n * @return the converted ObjectFormControlWrapper or null in case of an error\n */\n static elementToFormControl(formElement: any, situation?: string): ObjectFormControlWrapper {\n // Create the ObjectFormControlWrapper\n const wrapper = new ObjectFormControlWrapper({});\n const formSituation = situation ? situation : Situation.EDIT;\n\n wrapper._eoFormControlWrapper = {\n controlName: formElement.name,\n situation: formSituation\n };\n\n // create the actual form control\n const controlDisabled = !!formElement.readonly;\n const formControl = new ObjectFormControl(\n {\n value: formElement.value,\n disabled: controlDisabled\n },\n FormValidation.getValidators(formElement, formSituation)\n );\n\n // Form elements in SEARCH situation may arrive with a value set to NULL (explicit search for\n // fields that are NOT set). In that case we need to prepare the form control\n if (formSituation === Situation.SEARCH && formElement.value === null) {\n formElement.isNotSetValue = true;\n }\n\n ObjectFormUtils.updateFormElement(formElement);\n\n formControl._eoFormElement = formElement;\n wrapper.addControl(formElement.name, formControl);\n\n return wrapper;\n }\n /**\n * Update a form element after change a form element object.\n * @param formElement - the form element object\n */\n static updateFormElement(formElement: any) {\n if (formElement.type === 'decimal' && !formElement.scale) {\n formElement.scale = 2;\n }\n\n if (formElement.type === 'integer' && formElement.id === ContentStreamField.LENGTH) {\n formElement.classifications = [Classification.NUMBER_FILESIZE];\n }\n return formElement;\n }\n}\n","import { Injectable, Type } from '@angular/core';\nimport { ObjectFormControlWrapper, ObjectFormGroup, ObjectFormModel, Situation, YuvUser } from '@yuuvis/client-core';\n\nimport { IObjectFormElementExtension, ObjectFormElementExtension } from './object-form-extension.interface';\nimport { ObjectFormUtils } from './object-form.utils';\nimport { Subject } from 'rxjs';\nimport { FormStatusChangedEvent } from './object-form.interface';\n\n/**\n * @ignore\n */\n@Injectable()\nexport class ObjectFormService {\n #formExtensions: IObjectFormElementExtension[] = [];\n\n // Subject to notify about form status/value changes, e.g. when a form is reset or set to pristine.\n formChanged = new Subject<FormStatusChangedEvent>();\n\n setElementExtensions(formExtensions: IObjectFormElementExtension[]) {\n this.#formExtensions = formExtensions;\n }\n\n getElementExtensions(propertyName: string): Type<ObjectFormElementExtension>[] {\n return this.#formExtensions.filter((ext) => ext.property === propertyName).map((ext) => ext.cmp);\n }\n\n /**\n * Converts a form element object to an ObjectFormControlWrapper which then can be used to\n * render a from control. Result can be used as input for FormElementComponent.\n *\n * @param element - the element object or a json string\n * @param situation - optional property to set up a form situation for the control (default is EDIT)\n * @return the converted ObjectFormControlWrapper or null in case of an error\n */\n elementToFormControl(element: any, situation?: string): ObjectFormControlWrapper | null {\n let formElement;\n if (typeof element === 'string') {\n try {\n formElement = JSON.parse(element);\n } catch (e) {\n console.error('Unable to parse form element from json ', formElement);\n }\n } else {\n formElement = element;\n }\n return formElement ? ObjectFormUtils.elementToFormControl(element, situation) : null;\n }\n\n /**\n * Extract data from an object form based on situation.\n *\n * @param form - form to extract data from\n * @param situation - form situation\n * @param [initialData] - optional form data to match the current values against\n * This is required for editig indexdata (EDIT situation), because we have to compare new values\n * against the initial values. If a property that is contained in the forms initial data is removed\n * (e.g. set to null) then we have to set this null value, because otherwise the server would\n * ignore the changes.\n * @param isTableRowEditForm Flag indicating that the provided form is an inline form used by\n * a forms table element for editing rows. Those need a special handling.\n * @return extracted data as object\n */\n extractFormData(form: ObjectFormGroup, situation: string, initialData?: any, isTableRowEditForm?: boolean) {\n const extractedData = {};\n this.#getElementValues(extractedData, form, situation || 'EDIT', initialData, isTableRowEditForm);\n return extractedData;\n }\n\n // Recursive method to get the values from each form control.\n #getElementValues(data: any, formControl: ObjectFormModel, situation: string, initialData?: any, isTableRowEditForm?: boolean) {\n if (!formControl || !formControl.controls) {\n return;\n }\n\n if (formControl instanceof ObjectFormControlWrapper) {\n const fc: any = formControl._eoFormControlWrapper ? formControl.controls[formControl._eoFormControlWrapper.controlName] : null;\n if (!fc) {\n return;\n }\n\n if (fc._eoFormElement.isNotSetValue === true) {\n // form elements may explicitly set to have NULL value (e.g. from Search form if values are requested that have no values)\n this.#setDataValue(fc._eoFormElement.name, null, data, fc._eoFormElement, !isTableRowEditForm);\n } \n else if (fc.value !== undefined || fc.dirty) {\n const val = fc.value;\n\n switch (situation) {\n case Situation.SEARCH: {\n if (val !== null) {\n this.#setDataValue(fc._eoFormElement.name, val, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n case Situation.CREATE: {\n if (val !== null) {\n this.#setDataValue(fc._eoFormElement.name, val, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n case Situation.EDIT: {\n // in edit situation we have to compare new values against the initial values\n // If a property that is contained in the forms initial data is removed (e.g. set to null)\n // then we have to set this null value, because otherwise the server will ignore the changes\n const v = val === undefined ? null : val;\n if (v !== null || (initialData && initialData[fc._eoFormElement.name] !== undefined)) {\n // data[fc._eoFormElement.name] = val;\n this.#setDataValue(fc._eoFormElement.name, v, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n break;\n }\n }\n // tri-state boolean fields could have a value of 'undefined' that needs to be transformed\n // into 'null' to be correctly be processed by the backend\n if (fc._eoFormElement.type === 'boolean' && fc.value === undefined) {\n this.#setDataValue(fc._eoFormElement.name, null, data, fc._eoFormElement, !!isTableRowEditForm);\n }\n }\n } else {\n Object.keys(formControl.controls).forEach((controlKey) => {\n const formControlKeyed = <ObjectFormGroup>formControl.controls[controlKey];\n this.#getElementValues(data, formControlKeyed, situation, initialData, isTableRowEditForm);\n });\n }\n }\n\n #setDataValue(key: string, value: unknown, data: Record<string, unknown>, formElement: any, isTableRowEditForm: boolean) {\n data[key] = value;\n\n if (isTableRowEditForm && formElement.dataMeta) {\n if (formElement._internalType === 'string:organization') {\n data[key + '_title'] = formElement.dataMeta.map((d: YuvUser) => d.title);\n }\n // else if (formElement._internalType === 'string:reference') {\n // data[key + '_title'] = formElement.dataMeta.map((e: ReferenceEntry) => e.title);\n // }\n }\n }\n}\n","import { CommonModule, NgComponentOutlet } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, Type, untracked, ViewEncapsulation } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { Classification, ObjectFormControlWrapper } from '@yuuvis/client-core';\nimport { MetadataFormFieldComponent } from '@yuuvis/client-framework/metadata-form';\nimport { FormScriptingElementExtension } from '../form-scripting.api.interface';\nimport { FormScriptingApiService } from '../form-scripting.service';\nimport { IObjectFormElementExtensionComponentInput, ObjectFormElementExtension } from '../object-form-extension.interface';\nimport { FormScriptingElementExtensionComponent } from '../object-form-script/form-scripting-element-extension/form-scripting-element-extension.component';\nimport { ObjectFormService } from '../object-form.service';\n\n@Component({\n selector: 'yuv-object-form-element',\n standalone: true,\n imports: [CommonModule, MetadataFormFieldComponent, NgComponentOutlet, ReactiveFormsModule],\n templateUrl: './object-form-element.component.html',\n styleUrls: ['./object-form-element.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'yuv-object-form-element' }\n})\nexport class ObjectFormElementComponent {\n #objectFormService = inject(ObjectFormService);\n #scriptingApi = inject(FormScriptingApiService);\n\n createForm = signal(false);\n\n formChangedSubject = this.#objectFormService.formChanged;\n formControlName?: string;\n formElementRef: any;\n errors?: string[];\n extensionComponents: Type<ObjectFormElementExtension>[] = [];\n #scriptingExtensions = this.#scriptingApi.elementExtensions;\n scriptingExtensions = computed(() =>\n Object.values(this.#scriptingExtensions()).filter((ext: FormScriptingElementExtension) => ext.propertyName === this.formControlName)\n );\n\n scriptExtensionCmp = FormScriptingElementExtensionComponent;\n situation = input<string>();\n\n element = input<ObjectFormControlWrapper>();\n #elementEffect = effect(() => {\n const element = this.element();\n\n untracked(() => {\n this.createForm.set(true);\n element && this.#setElement(element);\n });\n });\n\n get extensionComponentInput(): Record<string, unknown> {\n const xti: IObjectFormElementExtensionComponentInput = {\n formControlName: this.formControlName || ''\n };\n return xti as Record<string, any>;\n }\n\n #setElement(el: ObjectFormControlWrapper | undefined) {\n if (el && el._eoFormControlWrapper) {\n this.formControlName = el._eoFormControlWrapper.controlName;\n this.formElementRef = el.controls[this.formControlName];\n this.formElementRef._eoFormElement = this.#setGrouping(this.formElementRef?._eoFormElement);\n this.extensionComponents = this.#objectFormService.getElementExtensions(this.formControlName);\n this.createForm.set(false);\n }\n }\n\n /**\n * formating rules...\n * https://wiki.optimal-systems.de/display/PM/Status+yuuvis+Momentum+-+Flex+client\n */\n #setGrouping(formElement: any) {\n return { ...formElement, grouping: !!formElement?.classifications?.includes(Classification.NUMBER_DIGIT) };\n }\n\n onDataMetaChange(data: any) {\n this.formElementRef._eoFormElement.dataMeta = data;\n }\n}\n","@let el = element();\n\n@if (!createForm()) {\n @if (el && formElementRef) {\n <div class=\"form-element input\" [formGroup]=\"el\">\n <yuv-metadata-form-field\n [formChangedSubject]=\"formChangedSubject\"\n [field]=\"formElementRef._eoFormElement\"\n [formControlName]=\"el._eoFormControlWrapper!.controlName\"\n [situation]=\"situation()\"\n ></yuv-metadata-form-field>\n\n <div class=\"ext\">\n @for (cmp of extensionComponents; track $index) {\n <ng-container *ngComponentOutlet=\"cmp; inputs: { input: extensionComponentInput }\"></ng-container>\n }\n @for (scmp of scriptingExtensions(); track $index) {\n <ng-container *ngComponentOutlet=\"scriptExtensionCmp; inputs: { ext: scmp }\"></ng-container>\n }\n </div>\n </div>\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, input, Input, ViewEncapsulation } from '@angular/core';\nimport { AbstractControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { KeysPipe, ObjectFormControlWrapper, ObjectFormGroup, Situation, YuvFormGroup, YuvFormGroupWrapper } from '@yuuvis/client-core';\nimport { ObjectFormElementComponent } from '../object-form-element/object-form-element.component';\n\n@Component({\n selector: 'yuv-object-form-group',\n standalone: true,\n imports: [CommonModule, MatTabsModule, KeysPipe, ObjectFormElementComponent, ReactiveFormsModule],\n templateUrl: './object-form-group.component.html',\n styleUrls: ['./object-form-group.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ObjectFormGroupComponent {\n private types = {\n STACK: 'stack',\n GROUP: 'group',\n FIELDSET: 'fieldset'\n };\n\n groupType?: string;\n isCore = false;\n isData = false;\n\n // @ViewChild('tabView') tabView: TabView;\n\n // form situation, if not set default will be 'EDIT'\n @Input() situation = Situation.EDIT;\n\n group = input<ObjectFormGroup>();\n #groupEffect = effect(() => {\n const g = this.group();\n\n if (g) {\n this.isCore = !!g._eoFormGroup && g._eoFormGroup.label === 'core';\n this.isData = !!g._eoFormGroup && g._eoFormGroup.label === 'data';\n this.groupType = this.#getGroupType();\n }\n });\n\n noGroupLabels = input<boolean>();\n\n getHeaderStyleClass(ctrl: AbstractControl): string {\n return `dirty-${ctrl.dirty} invalid-${ctrl.invalid}`;\n }\n\n getChildControl(ctrl: AbstractControl): ObjectFormGroup {\n return ctrl as ObjectFormGroup;\n }\n\n getObjectFormGroup(control: any): YuvFormGroup | undefined {\n return (control as ObjectFormGroup)._eoFormGroup;\n }\n\n getObjectFormControlWrapper(control: any): YuvFormGroupWrapper | undefined {\n return (control as ObjectFormControlWrapper)?._eoFormControlWrapper;\n }\n\n getElement(control: any): ObjectFormControlWrapper {\n return control as ObjectFormControlWrapper;\n }\n\n #getGroupType(): string | undefined {\n // may as well be an ObjectFormControlWrapper so check first\n // if we got a real group\n const group = this.group() as ObjectFormGroup;\n if (group?._eoFormGroup) {\n if (group._eoFormGroup.type === 'o2mGroupStack') {\n // for data section only render as stack (tabs) if we have more than one child\n if (this.isData && Object.keys(group.controls).length === 1) {\n return this.types.GROUP;\n }\n return this.types.STACK;\n }\n if (group._eoFormGroup.type === 'o2mGroup') {\n return group._eoFormGroup.label && !(this.isCore || this.isData) && !this.noGroupLabels && !this.#parentIsStack(group)\n ? this.types.FIELDSET\n : this.types.GROUP;\n }\n return this.types.GROUP;\n } else return undefined;\n }\n\n #parentIsStack(group: ObjectFormGroup): boolean {\n const parentFormElement = group.parent && (group.parent as any)['_eoFormGroup'];\n return parentFormElement && parentFormElement.type === 'o2mGroupStack';\n }\n}\n","@let grp = group();\n@if (grp) {\n <div\n class=\"form-element {{ grp._eoFormGroup ? grp._eoFormGroup.type : 'o2mControlWrap' }} align-{{\n grp._eoFormGroup && grp._eoFormGroup.layout ? grp._eoFormGroup.layout.align : ''\n }}\"\n [formGroup]=\"grp\"\n >\n @switch (groupType) {\n <!-- group stacks (tabs) -->\n @case ('stack') {\n <mat-tab-group>\n @for (key of grp.controls | keys; track key) {\n <mat-tab [label]=\"getObjectFormGroup(grp.controls[key])?.label || ''\">\n <ng-template matTabContent>\n <div class=\"stack\" [ngClass]=\"{ stackBase: grp._eoFormGroup?.label === 'data' }\">\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n </div>\n </ng-template>\n </mat-tab>\n }\n </mat-tab-group>\n }\n\n <!-- group with legend -->\n @case ('fieldset') {\n <div class=\"om-group fieldset\">\n <div class=\"legend\">\n <span>{{ grp._eoFormGroup?.label }}</span>\n </div>\n\n <div>\n @for (key of grp.controls | keys; track key) {\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n }\n </div>\n </div>\n }\n <!-- group -->\n @case ('group') {\n @for (key of grp.controls | keys; track key) {\n @if (getObjectFormControlWrapper(grp.controls[key])) {\n <yuv-object-form-element [element]=\"getElement(grp.controls[key])\" [situation]=\"situation\"></yuv-object-form-element>\n } @else {\n <yuv-object-form-group [group]=\"getChildControl(grp.controls[key])\" [noGroupLabels]=\"true\" [situation]=\"situation\"></yuv-object-form-group>\n }\n }\n }\n }\n </div>\n}\n","import { HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { BackendService, Logger } from '@yuuvis/client-core';\nimport { Observable, forkJoin as observableForkJoin } from 'rxjs';\nimport { map as _map } from 'rxjs/operators';\nimport { ObjectFormScriptingScope } from './object-form-scripting-scope';\n\n\n/**\n * @ignore\n */\n@Injectable()\nexport class ObjectFormScriptService {\n constructor(private logger: Logger, private backend: BackendService) { }\n\n /**\n * Run a form script.\n * @param scope - the current scripting scope\n * @param script - the script to be executed\n * @param [scriptName] - the scripts name\n */\n public runFormScript(scope: ObjectFormScriptingScope, script: any, scriptName?: string) {\n try {\n // Define form script the function\n const formScriptFunction = this.defineFunction('Formscript/' + scriptName, script);\n // run the form script\n const formScriptReturn = formScriptFunction(scope);\n // Check if the form script returns something and may export global scripts\n if (formScriptReturn) {\n this.importGlobalScriptsAndCallInit(scope, formScriptReturn);\n }\n } catch (e) {\n if (e instanceof SyntaxError) {\n alert('Syntax error in Form-Script. See console log for details.');\n }\n this.logger.error('Got script error', e);\n }\n }\n\n /**\n * Define form script function, appending source url as comment.\n * Enables debugging using browser debugging tools (Chrome+Firefox)\n * @see: https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Debug_eval_sources\n *\n * @param name - the name of the script\n * @param script - script to be wrapped in a function\n * @returns the function\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n private defineFunction(name: string, script: any): Function {\n // Appending source url as comment. See https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Debug_eval_sources\n // Enables debugging using browser debugging tools (Chrome+Firefox)\n // The line feed is needed, if the script has a comment in the last line\n return new Function('scope', script + '\\n;//# sourceURL=' + name + '.js');\n }\n\n /**\n * If the script contains global script, this function will import and run them\n * before running the actual script.\n *\n * @param scope - the current scripting scope\n * @param formScriptReturn - the return value of the actual form script\n */\n private importGlobalScriptsAndCallInit(scope: ObjectFormScriptingScope, formScriptReturn: any) {\n if (!formScriptReturn.init) {\n return;\n }\n\n if (formScriptReturn.uses) {\n // collect the global script exports promises\n const exports: any[] = [];\n const globals = [];\n\n // collect Observables for fetching global scripts\n for (const use of formScriptReturn.uses) {\n globals.push(this.resolveGlobalScript(use, scope));\n }\n\n observableForkJoin(globals).subscribe((globalReturns) => {\n for (const scriptReturn of globalReturns) {\n exports.push(scriptReturn['exports']);\n }\n // Invoke init function on form script return with the\n // collected exports using javascript apply magic\n formScriptReturn.init.apply(this, exports);\n });\n } else {\n // invoke init direct (no use of global scripts)\n formScriptReturn.init();\n }\n }\n\n /**\n * Fetch global scripts.\n * @param name - the name of the global script\n * @param scope - the current scripting scope\n * @returns\n */\n private resolveGlobalScript(name: string, scope: ObjectFormScriptingScope): Observable<any> {\n const requestOptions = {\n headers: new HttpHeaders({\n Accept: 'text/plain'\n }),\n responseType: 'text'\n };\n\n return this.backend.get(`/script/${name}/script`, undefined, requestOptions).pipe(\n _map((res: any) => {\n // define the global function ...\n const globalScript = this.defineFunction('Global/' + name, res);\n // ... and run it\n return globalScript(scope);\n })\n );\n }\n}\n","/**\n * @ignore\n * This class will be injected as scope into form scripts.\n */\nexport class ObjectFormScriptingScope {\n // List of all form fields (elements)\n public model: any = {};\n\n // all data values including invisible elements (READONLY)\n public data: any = {};\n\n // The id of the current DMS-Object (READONLY)\n public objectId?: string;\n\n // actions passed by BPM forms\n public actions: any = {};\n // additional objects provided by the object form\n // used for example to pass dms objects attached to a work item\n // to the script (READONLY)\n // may contain: FormScriptDmsObject, FileEntry\n public objects: any[] = [];\n public context: { id: string; title: string; objectTypeId: string } = { id: '', title: '', objectTypeId: '' };\n\n /**\n * Constructor\n * @param situation - Current form model situation (could be CREATE, SEARCH or EDIT)\n * @param onScriptingModelChange - callback function to be called when the scripting model changed\n * Be aware to provide an instance method as callback for the scripting scope.\n * @see: https://blog.johnnyreilly.com/2014/04/typescript-instance-methods.html\n *\n * @param api - Plugin API reference\n * @param isTableRowScope - set this to true if the current scripting scope is created for a\n * row editing form from a table element. It will then provide the right parameters for the scripting functions\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(public situation: string, private onScriptingModelChange: Function, public api: any, private isTableRowScope?: boolean) {}\n\n /**\n * Sets the internal model and wraps every model element with an observer to be\n * able to track their changes from within a form script\n * @param model\n */\n public setModel(model: any) {\n this.model = {};\n for (const k of Object.keys(model)) {\n this.model[k] = new ScopeElement(model[k], this.onScriptingModelChange);\n }\n }\n\n /**\n * Returns the observed model. Used for row editing forms of table elements that\n * create their own scripting scope in context of their parent form.\n * @returns the observed scripting scope model\n */\n public getModel() {\n return this.model;\n }\n\n /**\n * Called by the object form when the form model changes.\n * @param change - object with key equals name of the element\n * that changes and value of the new value\n */\n public modelChanged(change: any) {\n // find the changed element in the scopes model\n const propertyName = Object.keys(change)[0];\n if (change[propertyName] === undefined) {\n return;\n }\n\n if (this.model[propertyName]) {\n const el = this.model[propertyName];\n el.update(change[propertyName], this.model);\n }\n }\n}\n/**\n * @ignore\n */\nclass ScopeElement {\n // eslint-disable-next-line @typescript-eslint/ban-types\n constructor(private element: any, private onScriptingModelChange: Function) {\n if (this.element.value === undefined) {\n this.element.value = null;\n }\n if (this.isProxyable(this.element.value)) {\n this.element.value = this.createProxy(this.element.value);\n }\n }\n\n private isProxyable(value: any, key?: string) {\n return (\n (typeof value === 'object' || Array.isArray(value)) &&\n value !== null &&\n !(value instanceof Date) &&\n !value.isProxy &&\n (key ? !key.includes('_meta') : true)\n );\n }\n\n private createProxy(value: any) {\n const handler = {\n set: (target: Record<string, unknown>, key: string, val: unknown) => {\n const previousValue = structuredClone(this.element.value);\n if (this.isProxyable(val, key)) {\n target[key] = this.createProxy(val);\n } else {\n target[key] = val;\n }\n if (this.hasValueChanged(this.element.value, previousValue) && !key.includes('_meta')) {\n this.onScriptingModelChange(this.element.name, { newValue: structuredClone(this.element.value), name: 'value' });\n }\n return true;\n },\n // This get trap is only used to find out, if an object is a proxy or not.\n get: (target: Record<string, unknown>, key: string) => {\n if (key === 'isProxy') {\n return true;\n }\n return target[key];\n }\n };\n\n Object.keys(value).forEach((key) => {\n if (this.isProxyable(value[key], key)) {\n value[key] = this.createProxy(value[key]);\n }\n });\n return new Proxy(value, handler);\n }\n\n private hasValueChanged(value1: unknown, value2: unknown) {\n return JSON.stringify(value1) !== JSON.stringify(value2);\n }\n\n update(value: unknown, model: any) {\n const newValue = structuredClone(value);\n if (this.hasValueChanged(this.element.value, value)) {\n if (this.isProxyable(value)) {\n this.element.value = this.createProxy(newValue);\n } else {\n this.element.value = newValue;\n }\n if (this.element.onchange) {\n this.element.onchange(this, model);\n }\n }\n }\n\n set value(value) {\n if (this.hasValueChanged(this.element.value, value)) {\n if (this.isProxyable(value)) {\n this.element.value = this.createProxy(value);\n } else {\n this.element.value = value;\n }\n this.onScriptingModelChange(this.element.name, { newValue: structuredClone(this.element.value), name: 'value' });\n }\n }\n\n get value() {\n return this.element.value;\n }\n\n set onchange(onchange) {\n this.element.onchange = onchange;\n this.onScriptingModelChange(this.element.name, { newValue: onchange, name: 'onchange' });\n }\n\n get onchange() {\n return this.element.onchange;\n }\n\n set required(required) {\n this.element.required = required;\n this.onScriptingModelChange(this.element.name, { newValue: required, name: 'required' });\n }\n\n get required() {\n return this.element.required;\n }\n\n set readonly(readonly) {\n this.element.readonly = readonly;\n this.onScriptingModelChange(this.element.name, { newValue: readonly, name: 'readonly' });\n }\n\n get readonly() {\n return this.element.readonly;\n }\n\n set error(error) {\n this.element.error = error;\n this.onScriptingModelChange(this.element.name, { newValue: error, name: 'error' });\n }\n\n get error() {\n return this.element.error;\n }\n\n set onrowedit(onrowedit) {\n this.element.onrowedit = onrowedit;\n this.onScriptingModelChange(this.element.name, { newValue: onrowedit, name: 'onrowedit' });\n }\n\n get onrowedit() {\n return this.element.onrowedit;\n }\n\n setList(obj: any) {\n if (this.element.setList) {\n this.element.setList(obj);\n }\n }\n\n applyFilter(obj: any) {\n if (this.element.applyFilter) {\n this.element.applyFilter(obj);\n }\n }\n\n setFilter(obj: any) {\n if (this.element.setFilter) {\n this.element.setFilter(obj);\n }\n }\n\n get name() {\n return this.element.name;\n }\n\n get qname() {\n return this.element.qname;\n }\n\n get label() {\n return this.element.label;\n }\n\n get description() {\n return this.element.description;\n }\n\n get type() {\n return this.element.type;\n }\n\n get multiselect() {\n return this.element.multiselect;\n }\n\n get codesystem() {\n return this.element.codesystem;\n }\n\n get minlen() {\n return this.element.minLength;\n }\n\n get maxlen() {\n return this.element.maxLength;\n }\n\n get classifications() {\n return this.element.classifications;\n }\n\n get scale() {\n return this.element.scale;\n }\n\n get precision() {\n return this.element.precision;\n }\n\n get withtime() {\n return this.element.withtime;\n }\n\n get elements() {\n return this.element.elements;\n }\n\n get aliases() {\n return this.element.aliases;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, ChangeDetectorRef, Component, effect, ElementRef, inject, input, OnDestroy, output, signal, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport { ObjectFormControl, ObjectFormControlWrapper, ObjectFormGroup, Situation, SystemService, UserService, Utils } from '@yuuvis/client-core';\nimport { debounceTime, merge, Observable, of, Subscription } from 'rxjs';\nimport { FormScriptingApiService } from './form-scripting.service';\nimport { IObjectFormElementExtension } from './object-form-extension.interface';\nimport { ObjectFormGroupComponent } from './object-form-group/object-form-group.component';\nimport { ObjectFormScriptService } from './object-form-script/object-form-script.service';\nimport { ObjectFormScriptingScope } from './object-form-script/object-form-scripting-scope';\nimport { ObjectFormService } from './object-form.service';\nimport { ObjectFormUtils } from './object-form.utils';\nimport { FormValidation } from './object-form.validation';\nimport { ObjectFormOptions, FormStatusChangedEvent, ObjectFormModelChange } from './object-form.interface';\n\n@Component({\n selector: 'yuv-object-form',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ObjectFormGroupComponent],\n providers: [ObjectFormService, ObjectFormScriptService, FormScriptingApiService],\n templateUrl: './object-form.component.html',\n styleUrl: './object-form.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'yuv-object-form',\n '[attr.inert]': 'inert() ? true : null'\n }\n})\nexport class ObjectFormComponent implements OnDestroy, AfterViewInit {\n #elementRef = inject(ElementRef);\n #systemService = inject(SystemService);\n #formScriptService = inject(ObjectFormScriptService);\n #formHelperService = inject(ObjectFormService);\n #userService = inject(UserService);\n #cdRef = inject(ChangeDetectorRef);\n #formScriptingApiService = inject(FormScriptingApiService);\n\n #skipTranslationsFor = ['core', 'data'];\n #namePrefix = 'fg_';\n gCount = 0;\n\n id = Utils.uuid();\n\n fo?: ObjectFormOptions;\n formOptions = input<ObjectFormOptions>();\n #formOptionsEffect = effect(() => {\n this.#init(this.formOptions());\n });\n\n inert = input<boolean>();\n readonly = input<boolean>();\n elementExtensions = input<IObjectFormElementExtension[]>([]);\n #elementExtensionsEffect = effect(() => {\n this.#formHelperService.setElementExtensions(this.elementExtensions());\n });\n\n /**\n * There are special scenarios where forms are within a form themselves.\n * Setting this property to true, will handle the current form in a\n * slightly different way when it comes to form scripting.\n */\n isInnerTableForm = input<boolean>();\n\n /**\n * triggered when the forms state has been changed\n */\n statusChanged = output<FormStatusChangedEvent>();\n\n /**\n * handler to be executed after the form has been set up\n */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onFormReady = output();\n\n // the actual form instance\n form?: ObjectFormGroup;\n // property for holding the forms data used for comparison when a form-changed-event\n // is fetched to indicate wher or not the indexdata were changed or just the properties\n // of the form elements (eg. form script setting fields to readonly)\n formData: any;\n #scriptModel: any = {};\n #scriptingScope?: ObjectFormScriptingScope;\n #subscriptions: Subscription[] = [];\n\n // local store for all the form control references\n #formControls: any = {};\n #initialValidators: any = {};\n\n constructor() {\n this.#formScriptingApiService.formId = this.id;\n this.#formScriptingApiService.api.events\n .on(FormScriptingApiService.EVENT_MODEL_CHANGED)\n .pipe(takeUntilDestroyed())\n .subscribe((event) => event.data && this.#onScriptingModelChanged(event.data.formControlName, event.data.change, event.data.formId));\n\n this.#formScriptingApiService.formId = this.id;\n }\n\n // initialize the form based on the provided form options\n #init(fo: ObjectFormOptions | undefined) {\n this.form = undefined;\n if (!fo) return;\n if (!this.#validateFormModel(fo)) return;\n setTimeout(() => {\n this.#initialValidators = {};\n this.unsubscribeAll();\n this.#buildReactiveForm(fo);\n }, 0);\n }\n\n #validateFormModel(fo: ObjectFormOptions): boolean {\n const model = fo.formModel;\n const valid =\n model &&\n model.elements &&\n model.elements.length === 2 &&\n // core\n model.elements[0].type === 'o2mGroup' &&\n // data\n model.elements[1].type === 'o2mGroupStack';\n if (!valid) console.error('Invalid form model', model);\n return valid;\n }\n\n #initScriptingScope(formOptions: ObjectFormOptions, dataFormModel: any) {\n const { data, actions, objects, context } = (formOptions || {}) as ObjectFormOptions;\n\n if (this.#scriptingScope) {\n this.#scriptingScope.setModel(this.#scriptModel);\n /** provide access to actions (used inside of BPM-Forms) */\n this.#scriptingScope.actions = actions;\n /** provide access to additional objects (used for example in BPM-Start-Forms to\n * add data of DMS-Objects to start the process for)\n */\n this.#scriptingScope.objects = objects || [];\n this.#scriptingScope.context = context || { id: '', title: '', objectTypeId: '' };\n /** provide readonly access to initial form data (which may also contain values that\n * are not rendered as form elements (invisible values))\n */\n this.#scriptingScope.data = data;\n\n /** by default, scripting scopes are applied to forms. But table elements create their own scope\n * for editing rows. Being one of those inner forms should not run the form script again, but\n * instead just provide the observing abilities of the scripting scope.\n */\n if (!this.isInnerTableForm() && dataFormModel) {\n const scriptName = dataFormModel.name + '_' + dataFormModel.situation;\n console.debug('executing form script ' + scriptName);\n this.#formScriptService.runFormScript(this.#scriptingScope, dataFormModel.script, scriptName);\n }\n }\n }\n\n focusForm() {\n this.#elementRef.nativeElement.querySelector('input').focus();\n }\n\n getGroup(id: string): ObjectFormGroup {\n return this.form?.get(id) as ObjectFormGroup;\n }\n\n setFormData(data: Record<string, unknown>) {\n const fo = this.formOptions();\n if (!fo) return;\n fo.data = data;\n setTimeout(() => this.#init(fo), 0);\n }\n\n patchValue(data: Record<string, unknown>) {\n Object.keys(data).forEach((key) => {\n this.#onScriptingModelChanged(key, {\n name: 'value',\n newValue: data[key]\n });\n });\n }\n\n /**\n * Extracts the values from the form model. Each form value is represented by one\n * property on the result object holding the fields value. The keys (properties) are the `name`\n * properties of the form element.\n *\n * How values are extracted is influenced by the forms situation.\n *\n * @return object of key value pairs\n */\n getFormData() {\n return this.#formToData();\n }\n\n getFormElements() {\n const formElements: any = {};\n Object.keys(this.#formControls).forEach((k) => {\n formElements[k] = this.#formControls[k].__eoFormElement;\n });\n return formElements;\n }\n\n setFormPristine() {\n if (!this.form) return;\n this.form.markAsPristine();\n this.#formHelperService.formChanged.next({\n invalid: this.form.invalid,\n dirty: this.form.dirty,\n data: this.formData,\n indexdataChanged: false\n });\n // also set the data of the form options to the current data\n // so resetting the form afterwards will reset to the current \n // pristine state\n const fo = this.formOptions();\n if (!fo) return;\n fo.data = this.formData;\n }\n\n // reset the form to its initial state\n resetForm() {\n const fo = this.formOptions();\n if (!fo) return;\n this.setFormData(fo.data);\n this.#emitFormChangedEvent();\n }\n\n /**\n * Returns the observed model that was passed to the current form script running. If there is\n * no form script, this method will return NULL.\n * @returns\n */\n getObservedScriptModel() {\n return this.#scriptingScope ? this.#scriptingScope.getModel() : null;\n }\n\n // Create a reactive form from the enaio form model\n #buildReactiveForm(formOptions: ObjectFormOptions) {\n this.#scriptingScope = undefined;\n this.#scriptModel = {};\n this.#formControls = {};\n const formModel = this.#dataToForm(formOptions.formModel, formOptions.data);\n if (!formModel) {\n return;\n }\n // if a script is available, we'll init the form scripting for the\n // current form\n if (this.isInnerTableForm() || (formModel.script && formModel.script.length > 0)) {\n console.debug('adding form scripting scope');\n this.#scriptingScope = new ObjectFormScriptingScope(\n formModel.situation,\n this.#onScriptingModelChanged,\n this.#formScriptingApiService.getApi(),\n this.isInnerTableForm()\n );\n this.#scriptingScope.objectId = this.formOptions()!.objectId;\n }\n\n const form = new ObjectFormGroup({});\n if (formModel?.elements[0]?.elements) {\n this.#addFormControl(form, formModel.elements[0], 'core');\n }\n if (formModel?.elements[1]?.elements) {\n this.#addFormControl(form, formModel.elements[1], 'data');\n }\n this.form = form;\n this.#formScriptingApiService.registerActiveForm(this);\n setTimeout(() => {\n if (!this.form) return;\n this.initValidators(this.form);\n this.#subscriptions.push(\n merge(this.form.valueChanges, this.form.statusChanges)\n .pipe(debounceTime(500))\n .subscribe(() => this.#emitFormChangedEvent())\n );\n\n this.#initScriptingScope(formOptions, formModel);\n\n this.onFormReady.emit();\n this.#emitFormChangedEvent(false);\n }, 300); //<-- init validation is delayed\n }\n\n initValidators(form: any) {\n if (this.form) {\n for (const key of Object.keys(form.controls)) {\n const control = form.controls[key];\n if (control.controls) {\n this.initValidators(control);\n } else {\n this.#initialValidators[control._eoFormElement.name] = control.validator;\n control.setValidators(Validators.compose(this.#getValidators(control._eoFormElement).concat([this.#initialValidators[control._eoFormElement.name]])));\n control.updateValueAndValidity();\n }\n }\n }\n }\n\n #emitFormChangedEvent(compare = true) {\n // check if indexdata has been changed\n const currentFormData = this.getFormData();\n const idxChange = compare ? JSON.stringify(this.formData) !== JSON.stringify(currentFormData) : false;\n this.formData = currentFormData;\n if (this.form) {\n const e = {\n invalid: this.form.invalid,\n dirty: this.form.dirty,\n data: this.formData,\n indexdataChanged: idxChange\n };\n this.statusChanged.emit(e);\n this.#formHelperService.formChanged.next(e);\n }\n }\n\n /**\n * This method will be called each time the script changes its internal model.\n * It is used to transfer the script changes to the actual form model.\n *\n * To ensure the right context, we define an instance method as callback for the scripting scope\n * @see: https://blog.johnnyreilly.com/2014/04/typescript-instance-methods.html\n *\n * @param formControlName\n * @param change\n */\n #onScriptingModelChanged = (formControlName: string, change: ObjectFormModelChange, formId?: string) => {\n if (!this.form || (formId && this.id !== formId)) return;\n // find the target control\n const fc: ObjectFormControl = this.#formControls[formControlName] as ObjectFormControl;\n if (fc) {\n // change only allowed properties\n switch (change.name) {\n case 'value': {\n if (Array.isArray(change.newValue)) {\n this.#processArrayValueChange(fc, change);\n } else {\n fc._eoFormElement.value = change.newValue;\n if (fc.value !== change.newValue) {\n fc.patchValue(change.newValue);\n fc.updateValueAndValidity();\n fc.markAsDirty();\n }\n }\n this.form.markAsDirty();\n break;\n }\n case 'required': {\n fc._eoFormElement.required = change.newValue;\n // apply new validators\n // @see: https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular-2-model-driven-forms\n fc.setValidators(Validators.compose(this.#getValidators(fc._eoFormElement).concat([this.#initialValidators[fc._eoFormElement.name]])));\n // need to mark form control as touched because otherwise form validation will not show\n // error messages\n fc.markAsTouched();\n fc.updateValueAndValidity();\n break;\n }\n case 'readonly': {\n fc._eoFormElement.readonly = change.newValue;\n if (change.newValue === true) {\n fc.disable();\n } else {\n fc.enable();\n }\n break;\n }\n case 'error': {\n fc._eoFormElement.error = change.newValue;\n fc.markAsTouched();\n fc.updateValueAndValidity();\n break;\n }\n // new onrowedit function was applied by the script\n case 'onrowedit': {\n fc._eoFormElement.onrowedit = change.newValue;\n break;\n }\n // new onchange function was applied by the script\n case 'onchange': {\n fc._eoFormElement.onchange = change.newValue;\n break;\n }\n }\n this.#cdRef.detectChanges();\n }\n };\n\n #processArrayValueChange(fc: any, change: any) {\n const newVal = change.newValue;\n const targetType = fc._eoFormElement.type;\n // for some types we have to ensure that meta data are provided as well\n switch (targetType) {\n case 'ORGANIZATION': {\n this.#getDataMeta(fc._eoFormElement, newVal).subscribe((m) => {\n fc._eoFormElement.dataMeta = m;\n });\n break;\n }\n case 'TABLE': {\n const dataToBeProcessed: Record<string, unknown> = {};\n fc._eoFormElement.elements.forEach((e: any) => {\n if (e.type === 'ORGANIZATION' || e.type === 'CODESYSTEM') {\n dataToBeProcessed[e.name] = e;\n }\n });\n if (Object.keys(dataToBeProcessed).length) {\n newVal.forEach((rowData: any) => {\n Object.keys(rowData).forEach((key) => {\n if (dataToBeProcessed[key]) {\n this.#getDataMeta(dataToBeProcessed[key], rowData[key]).subscribe((m) => {\n if (m) {\n rowData[key + '_meta'] = m;\n } else {\n delete rowData[key + '_meta'];\n }\n this.#updateArrayValue(fc, newVal);\n });\n }\n });\n });\n }\n break;\n }\n }\n this.#updateArrayValue(fc, newVal);\n }\n\n #updateArrayValue(fc: any, newValue: any) {\n fc._eoFormElement.value = [].concat(newValue);\n fc.patchValue([].concat(newValue));\n fc.updateValueAndValidity();\n fc.markAsDirty();\n }\n\n #getDataMeta(formElement: any, newValue: any): Observable<any> {\n if (newValue) {\n switch (formElement.type) {\n case 'ORGANIZATION': {\n return this.#userService.getUserById(newValue);\n }\n }\n }\n return of(null);\n }\n\n #patchFormValue(formValue: string[] | string) {\n let value: any;\n if (Array.isArray(formValue)) {\n value = [];\n // copy by value for arrays of objects (e.g. table data)\n formValue.forEach((o) => value.push(JSON.parse(JSON.stringify(o))));\n } else {\n value = formValue;\n }\n return value;\n }\n\n /**\n * Recursive method adding a new FormControl (group or control) to a parent form group\n *\n * @param parentGroup - the parent group to add the control to\n * @param formElement - the enaio form model element to create the child control from\n * @param [useName] - use this name instead of the one from the model\n */\n #addFormControl(parentGroup: ObjectFormGroup, formElement: any, useName?: string) {\n const fo = this.formOptions();\n if (!fo) return;\n\n let ctrl;\n let name;\n\n // add a form group\n if (formElement.type === 'o2mGroup' || formElement.type === 'o2mGroupStack') {\n // do not add groups that are empty\n const isRootGroup = formElement.name && (formElement.name !== 'data' || formElement.name !== 'core');\n if (!isRootGroup && (!formElement.elements || formElement.elements.length === 0)) {\n console.error('Found empty form group', formElement);\n return;\n }\n\n ctrl = new ObjectFormGroup({});\n ctrl._eoFormGroup = {\n layout: formElement.layout,\n type: formElement.type\n };\n\n if (formElement.name) {\n if (this.#skipTranslationsFor.includes(formElement.name)) {\n ctrl._eoFormGroup.label = formElement.name;\n } else if (!formElement.label) {\n // no label, so try to translate the technical name\n ctrl._eoFormGroup.label = this.#systemService.getLocalizedResource(`${formElement.name}_label`) || formElement.name;\n } else {\n // there is a label so we take this one\n ctrl._eoFormGroup.label = formElement.label;\n }\n }\n\n if (useName === 'core' || useName === 'data') {\n ctrl._eoFormGroup.label = useName;\n }\n\n for (const e of formElement.elements) {\n this.#addFormControl(ctrl, e);\n }\n name = useName || 'fg' + this.gCount++;\n } else {\n // add form control\n // To be able to integrate recursive form controls into the main form,\n // we have to wrap them in a form group\n ctrl = new ObjectFormControlWrapper({});\n ctrl._eoFormControlWrapper = {\n // the name of the wrapped FormControl\n controlName: formElement.name,\n situation: fo.formModel.situation\n };\n\n // do not set a reference as the form controls value\n // otherwise we could not reset the form\n const value = formElement?.value\n ? this.#patchFormValue(formElement?.value)\n : !Utils.isEmpty(formElement?.defaultvalue) && fo.formModel.situation === Situation.CREATE\n ? this.#patchFormValue(formElement?.defaultvalue)\n : formElement?.value;\n\n // create the actual form control\n const controlDisabled = fo.disabled || !!formElement.readonly || this.readonly();\n const formControl = new ObjectFormControl({\n value,\n disabled: controlDisabled\n });\n\n // if form element has a 'label' property it will be shown as is ...\n if (!formElement.label) {\n // ... if there is no label but a 'labelKey' property we are going to localize that key ...\n if (formElement.labelkey) {\n formElement.label = this.#systemService.getLocalizedResource(`${formElement.labelkey}_label`) || formElement.labelkey;\n formElement.description = this.#systemService.getLocalizedResource(`${formElement.labelkey}_description`);\n } else {\n // ... no 'label' and also no 'labelKey' means that we are showing technical name instead\n formElement.label = formElement.name;\n }\n }\n formElement.readonly = controlDisabled;\n // we are using an internal type to distinguish between the components\n // to be used to render certain form elements\n formElement._internalType = this.#systemService.getInternalFormElementType(formElement.type, formElement.classifications);\n\n formControl._eoFormElement = formElement;\n this.#formControls[formElement.name] = formControl;\n\n if (formElement.type === 'TABLE') {\n // Add 'onrowedit' property even if it's not set.\n // This is required because otherwise mobX-Observer would not recognize\n // changes to this property applied by the form script\n if (!Object.keys(formControl._eoFormElement).includes('onrowedit')) {\n formControl._eoFormElement.onrowedit = null;\n }\n\n if (this.#scriptingScope && formControl._eoFormElement.value) {\n // having a scripting scope and table rows means that we need to set empty\n // columns to NULL, because otherwise mobX won't be able to track those values\n const valueFields = formControl._eoFormElement.elements.map((e: any) => e.name);\n formControl._eoFormElement.value.forEach((rowValue: any) => {\n valueFields.forEach((valueField: string) => {\n if (!Object.keys(rowValue).includes(valueField)) {\n rowValue[valueField] = null;\n }\n });\n });\n // update form controls value as well to reflect the observed value\n formControl.patchValue(formControl._eoFormElement.value, {\n onlySelf: true,\n emitEvent: false,\n emitModelToViewChange: false,\n emitViewToModelChange: false\n });\n }\n }\n\n if (formElement._internalType === 'string:organization') {\n formControl._eoFormElement.setFilter = (filterObject: any) => {\n formControl._eoFormElement.filter = filterObject;\n };\n }\n\n ObjectFormUtils.updateFormElement(formElement);\n\n // remove empty descriptions\n const desc = formControl._eoFormElement.description;\n if (desc && desc.trim().length === 0) {\n formControl._eoFormElement.description = null;\n }\n\n // add the form element to the script model that will be injected into\n // the forms scripting scope later on\n this.#scriptModel[formElement.name] = formControl._eoFormElement;\n\n // apply change listener to the form control, that will trigger\n // the form elements onChange listener\n const controlWatch = ctrl.valueChanges.pipe(debounceTime(500));\n this.#subscriptions.push(\n controlWatch.subscribe((v) => {\n if (this.#scriptingScope) {\n this.#scriptingScope.modelChanged(v);\n }\n })\n );\n\n ctrl.addControl(formElement.name, formControl);\n name = this.#namePrefix + formElement.name;\n }\n parentGroup.addControl(name, ctrl);\n }\n\n /**\n * Build validators for the given form element to be attached to\n * a reactive formControl.\n *\n * @param formElement - form element object\n */\n #getValidators(formElement: any): ValidatorFn[] {\n const fo = this.formOptions();\n const elmValidators = FormValidation.getValidators(formElement, fo?.formModel.situation);\n\n // add custom validator for script enabled forms\n if (this.#scriptingScope) {\n elmValidators.push(FormValidation.customScriptingValidation);\n }\n\n return elmValidators;\n }\n\n /**\n * Extract the values from the form\n */\n #formToData() {\n const fo = this.formOptions();\n return fo && this.form ? this.#formHelperService.extractFormData(this.form, fo.formModel.situation, fo.data, this.isInnerTableForm()) : {};\n }\n\n /**\n * Merge data into a form model.\n *\n * @param model - form model\n * @param data - data object or array of SearchFilter objects in case of a search form\n */\n #dataToForm(model: any, data: any) {\n if (model && data) {\n this.#setElementValues(model.elements, data);\n }\n return model;\n }\n\n // recursive method for adding values to model elements\n #setElementValues(elements: any[], data: Record<string, unknown>) {\n elements?.forEach((element) => {\n if (this.#hasValue(data, element)) {\n element.value = this.#getValue(data, element);\n } else {\n delete element.value;\n }\n if (element.type !== 'TABLE' && element.elements && element.elements.length > 0) {\n this.#setElementValues(element.elements, data);\n }\n });\n }\n\n #hasValue(data: Record<string, unknown>, element: any) {\n // differ between array of SearchFilters and a form data object\n if (Array.isArray(data)) {\n return !!data.find((filter) => filter.property === element.id);\n } else {\n return Object.keys(data).includes(element.name);\n }\n }\n\n #getValue(data: Record<string, unknown>, element: any) {\n return data[element.name];\n }\n\n ngOnDestroy() {\n this.unsubscribeAll();\n this.#formScriptingApiService.unregisterActiveForm(this);\n }\n\n ngAfterViewInit() {\n this.#cdRef.detectChanges();\n }\n\n // unsubscribe from all value change listeners for the current form\n // to avoid memory leaks. This method will also be called every time\n // a new form is rendered to get rid of the old form element subscriptions\n private unsubscribeAll() {\n if (this.#subscriptions.length) {\n console.debug('unsubscribed from ' + this.#subscriptions.length + ' value change listeners.');\n this.#subscriptions.forEach((s) => s.unsubscribe());\n this.#subscriptions = [];\n }\n }\n}\n","@let fo = formOptions();\n@if (fo && form) {\n <div class=\"yuv-object-form\" [formGroup]=\"form\">\n <div class=\"form-element-wrap core\">\n <yuv-object-form-group [group]=\"getGroup('core')\" [situation]=\"fo.formModel.situation\"></yuv-object-form-group>\n </div>\n <div class=\"form-element-wrap data\">\n <yuv-object-form-group [group]=\"getGroup('data')\" [situation]=\"fo.formModel.situation\"></yuv-object-form-group>\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { ObjectFormComponent } from './object-form.component';\n\n@NgModule({\n imports: [ObjectFormComponent],\n exports: [ObjectFormComponent],\n})\nexport class YuvObjectFormModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","observableForkJoin","_map"],"mappings":"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"}
|
package/forms/index.d.ts
CHANGED
|
@@ -10,5 +10,4 @@ export * from './lib/elements/range-select-date/range-select-date.component';
|
|
|
10
10
|
export * from './lib/elements/range-select-date/range-select-date.interface';
|
|
11
11
|
export * from './lib/elements/range-select-filesize/range-select-filesize.component';
|
|
12
12
|
export * from './lib/elements/range-select-filesize/range-select-filesize.interface';
|
|
13
|
-
export * from './lib/elements/catalog/catalog.component';
|
|
14
13
|
export * from './lib/forms.utils';
|