{"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","\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: [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, 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  readonly situation = input(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])\" [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 * @ignore\n */\n@Injectable()\nexport class ObjectFormScriptService {\n  constructor(\n    private logger: Logger,\n    private backend: BackendService\n  ) {}\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 {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  output,\n  ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\nimport {\n  ObjectFormControl,\n  ObjectFormControlWrapper,\n  ObjectFormGroup,\n  Situation,\n  SystemService,\n  UserService,\n  Utils\n} 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 { FormStatusChangedEvent, ObjectFormModelChange, ObjectFormOptions } from './object-form.interface';\nimport { ObjectFormService } from './object-form.service';\nimport { ObjectFormUtils } from './object-form.utils';\nimport { FormValidation } from './object-form.validation';\n\n@Component({\n  selector: 'yuv-object-form',\n  standalone: true,\n  imports: [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(\n        (event) =>\n          event.data && this.#onScriptingModelChanged(event.data.formControlName, event.data.change, event.data.formId)\n      );\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(\n            Validators.compose(\n              this.#getValidators(control._eoFormElement).concat([this.#initialValidators[control._eoFormElement.name]])\n            )\n          );\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(\n            Validators.compose(\n              this.#getValidators(fc._eoFormElement).concat([this.#initialValidators[fc._eoFormElement.name]])\n            )\n          );\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 =\n            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 =\n            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(\n        formElement.type,\n        formElement.classifications,\n        formElement.catalog\n      );\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\n      ? this.#formHelperService.extractFormData(this.form, fo.formModel.situation, fo.data, this.isInnerTableForm())\n      : {};\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\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\" />\n    </div>\n    <div class=\"form-element-wrap data\">\n      <yuv-object-form-group [group]=\"getGroup('data')\" [situation]=\"fo.formModel.situation\" />\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","observableForkJoin","_map"],"mappings":"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"}