@masterteam/forms 0.0.60 → 0.0.62
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-forms-client-form.mjs","sources":["../../../../packages/masterteam/forms/client-form/services/client-form-api.service.ts","../../../../packages/masterteam/forms/client-form/services/client-form-state.service.ts","../../../../packages/masterteam/forms/client-form/utils/form-config-mapper.ts","../../../../packages/masterteam/forms/client-form/client-form.ts","../../../../packages/masterteam/forms/client-form/client-form.html","../../../../packages/masterteam/forms/client-form/models/client-form.model.ts","../../../../packages/masterteam/forms/client-form/public-api.ts","../../../../packages/masterteam/forms/client-form/masterteam-forms-client-form.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport type {\n Response,\n ProcessFormLoadRequest,\n ProcessFormLoadResponse,\n ProcessFormSubmitRequest,\n ProcessFormSubmitResponse,\n ProcessFormValidationRuntimeResult,\n} from '../models/client-form.model';\n\n/**\n * Stateless HTTP service for process-forms runtime APIs.\n * Root-provided — safe to share across multiple ClientForm instances.\n */\n@Injectable({ providedIn: 'root' })\nexport class ClientFormApiService {\n private readonly http = inject(HttpClient);\n\n /**\n * Load form configuration and values for a given operation context.\n * Backend determines mode (Approval vs Direct) based on published schema.\n */\n load(\n request: ProcessFormLoadRequest,\n ): Observable<Response<ProcessFormLoadResponse>> {\n return this.http.post<Response<ProcessFormLoadResponse>>(\n 'process-form-load',\n request,\n );\n }\n\n /**\n * Submit form values. Result depends on mode:\n * - Approval → status: 'PendingApproval'\n * - Direct → status: 'Executed'\n */\n submit(\n request: ProcessFormSubmitRequest,\n ): Observable<Response<ProcessFormSubmitResponse>> {\n return this.http.post<Response<ProcessFormSubmitResponse>>(\n 'process-submit',\n request,\n );\n }\n\n /**\n * Validate the exact submit payload against backend-owned form rules\n * before the real submit call.\n */\n validate(\n request: ProcessFormSubmitRequest,\n ): Observable<Response<ProcessFormValidationRuntimeResult>> {\n return this.http.post<Response<ProcessFormValidationRuntimeResult>>(\n 'process-submit/validate',\n request,\n );\n }\n}\n","import { Injectable, signal, computed } from '@angular/core';\r\n\r\nimport type {\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitResponse,\r\n ProcessFormValue,\r\n ProcessFormContext,\r\n ProcessFormMode,\r\n ProcessFormSource,\r\n ClientFormConfiguration,\r\n} from '../models/client-form.model';\r\n\r\n/**\r\n * Per-instance signal-based state for ClientForm.\r\n *\r\n * NOT providedIn root — each ClientForm component provides its own instance\r\n * via `providers: [ClientFormStateService]`, enabling multiple independent\r\n * forms on the same page.\r\n */\r\n@Injectable()\r\nexport class ClientFormStateService {\r\n // ============================================================================\r\n // Core State Signals\r\n // ============================================================================\r\n\r\n readonly loading = signal(false);\r\n readonly submitting = signal(false);\r\n readonly error = signal<string | null>(null);\r\n readonly submitError = signal<string | null>(null);\r\n readonly loadResponse = signal<ProcessFormLoadResponse | null>(null);\r\n readonly submitResponse = signal<ProcessFormSubmitResponse | null>(null);\r\n\r\n // ============================================================================\r\n // Derived Computeds — Load Response\r\n // ============================================================================\r\n\r\n readonly isLoaded = computed(() => !!this.loadResponse());\r\n\r\n readonly mode = computed<ProcessFormMode | null>(\r\n () => this.loadResponse()?.mode ?? null,\r\n );\r\n\r\n readonly isApproval = computed(() => this.mode() === 'Approval');\r\n readonly isDirect = computed(() => this.mode() === 'Direct');\r\n\r\n readonly formSource = computed<ProcessFormSource | null>(\r\n () => this.loadResponse()?.formSource ?? null,\r\n );\r\n\r\n readonly requiresForm = computed(\r\n () => this.loadResponse()?.requiresForm ?? false,\r\n );\r\n\r\n readonly formConfiguration = computed<ClientFormConfiguration | null>(\r\n () => this.loadResponse()?.formConfiguration ?? null,\r\n );\r\n\r\n readonly values = computed<ProcessFormValue[]>(\r\n () => this.loadResponse()?.values ?? [],\r\n );\r\n\r\n readonly context = computed<ProcessFormContext | null>(\r\n () => this.loadResponse()?.context ?? null,\r\n );\r\n\r\n readonly stepName = computed<string | null>(\r\n () => this.loadResponse()?.stepName ?? null,\r\n );\r\n\r\n readonly requestSchemaId = computed<number | null>(\r\n () => this.loadResponse()?.requestSchemaId ?? null,\r\n );\r\n\r\n readonly requestId = computed<number | null>(\r\n () => this.loadResponse()?.requestId ?? null,\r\n );\r\n\r\n readonly stepId = computed<number | null>(\r\n () => this.loadResponse()?.stepId ?? null,\r\n );\r\n\r\n readonly stepSchemaId = computed<number | null>(\r\n () => this.loadResponse()?.stepSchemaId ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Derived Computeds — Value Categories\r\n // ============================================================================\r\n\r\n /** Process virtual fields (Request_Date, Step_Name, etc.) — read-only display */\r\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\r\n this.values().filter((v) => v.metadata?.source === 'ProcessVirtual'),\r\n );\r\n\r\n /** Editable form values (non-virtual) */\r\n readonly formValues = computed<ProcessFormValue[]>(() =>\r\n this.values().filter((v) => v.metadata?.source !== 'ProcessVirtual'),\r\n );\r\n\r\n // ============================================================================\r\n // Derived Computeds — Submit Response\r\n // ============================================================================\r\n\r\n readonly isSubmitted = computed(() => !!this.submitResponse());\r\n\r\n readonly submitStatus = computed(() => this.submitResponse()?.status ?? null);\r\n\r\n readonly isPendingApproval = computed(\r\n () => this.submitStatus() === 'PendingApproval',\r\n );\r\n\r\n readonly isExecuted = computed(() => this.submitStatus() === 'Executed');\r\n\r\n // ============================================================================\r\n // State Mutations\r\n // ============================================================================\r\n\r\n setLoadResponse(response: ProcessFormLoadResponse): void {\r\n this.loadResponse.set(response);\r\n this.error.set(null);\r\n }\r\n\r\n setSubmitResponse(response: ProcessFormSubmitResponse): void {\r\n this.submitResponse.set(response);\r\n this.submitError.set(null);\r\n }\r\n\r\n setError(message: string): void {\r\n this.error.set(message);\r\n this.loading.set(false);\r\n }\r\n\r\n setSubmitError(message: string): void {\r\n this.submitError.set(message);\r\n this.submitting.set(false);\r\n }\r\n\r\n reset(): void {\r\n this.loading.set(false);\r\n this.submitting.set(false);\r\n this.error.set(null);\r\n this.submitError.set(null);\r\n this.loadResponse.set(null);\r\n this.submitResponse.set(null);\r\n }\r\n}\r\n","import type {\n DynamicFormConfig,\n DynamicFieldConfig,\n} from '@masterteam/components';\nimport type { EntityData, EntitySize } from '@masterteam/components/entities';\nimport {\n REQUEST_CONTEXT,\n ValidatorConfig,\n TextFieldConfig,\n EditorFieldConfig,\n SelectFieldConfig,\n MultiSelectFieldConfig,\n DateFieldConfig,\n NumberFieldConfig,\n SliderFieldConfig,\n ToggleFieldConfig,\n UserSearchFieldConfig,\n UploadFileFieldConfig,\n LookupMatrixFieldConfig,\n SchemaConnectionFieldConfig,\n SchedulePredecessorFieldConfig,\n} from '@masterteam/components';\nimport { HttpContext } from '@angular/common/http';\n\nimport type {\n ClientFormConfiguration,\n ClientFormField,\n ClientPropertyItem,\n ClientLookup,\n ProcessFormValue,\n ProcessFormLoadResponse,\n ProcessFormSubmitField,\n ProcessFormContext,\n} from '../models/client-form.model';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst WIDTH_TO_COLSPAN: Record<string, number> = {\n '25': 3,\n '50': 6,\n '100': 12,\n};\n\nconst WIDTH_TO_ENTITY_SIZE: Record<string, EntitySize> = {\n '25': 6,\n '50': 12,\n '100': 24,\n};\n\nexport interface ClientFormPreviewSection {\n key: string;\n label: string;\n order: number;\n entities: EntityData[];\n}\n\n// ============================================================================\n// Public Mapper Functions\n// ============================================================================\n\n/**\n * Convert a runtime FormConfiguration into a DynamicFormConfig\n * that can be passed directly to `<mt-dynamic-form>`.\n *\n * @param config The form configuration from the load API\n * @param lang Current UI language ('en' | 'ar')\n * @param mode 'create' or 'edit' — filters hidden fields accordingly\n * @param lookups Available lookup definitions for resolving Lookup/LookupMultiSelect options\n */\nexport function mapToDynamicFormConfig(\n config: ClientFormConfiguration,\n lang: 'en' | 'ar' = 'en',\n mode: 'create' | 'edit' = 'create',\n lookups: ClientLookup[] = [],\n context: ProcessFormContext | null = null,\n readonly = false,\n): DynamicFormConfig {\n return {\n sections: config.sections\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((section) => {\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\n\n const visibleFields = section.fields\n .filter((field) => {\n // isRead=false → completely hidden\n if (field.isWrite !== true && field.isRead === false) return false;\n if (mode === 'create') return !field.hiddenInCreation;\n return !field.hiddenInEditForm;\n })\n .sort((a, b) => a.order - b.order);\n\n return {\n key: section.id,\n label: sectionName,\n type: 'header' as const,\n columns: 12,\n order: section.order,\n fields: visibleFields.map((field) =>\n mapFieldToConfig(field, lang, lookups, context, readonly),\n ),\n };\n })\n .filter((section) => section.fields.length > 0),\n };\n}\n\n/**\n * Convert API property values into a flat key-value object\n * suitable for `formControl.patchValue()`.\n *\n * Only includes non-virtual (editable) values.\n */\nexport function mapValuesToFormValue(\n values: ProcessFormValue[],\n config?: ClientFormConfiguration | null,\n): Record<string, any> {\n const result: Record<string, any> = {};\n const fieldMap = config ? buildFieldValueMap(config) : null;\n\n for (const v of values) {\n if (v.metadata?.source === 'ProcessVirtual') continue;\n\n const targetFieldKey =\n resolveValueTargetKey(v, fieldMap) ?? v.propertyKey ?? null;\n if (!targetFieldKey) continue;\n\n result[targetFieldKey] = resolveLoadedFieldValue(v);\n }\n\n return result;\n}\n\n/**\n * Convert the current form value back into the submit payload format.\n *\n * Uses form configuration metadata (same source used to render fields)\n * to map `requestPropertyId` and `viewType`.\n */\nexport function mapFormValueToSubmitFields(\n formValue: Record<string, any>,\n loadResponse: ProcessFormLoadResponse,\n): ProcessFormSubmitField[] {\n const metadataByKey = new Map<\n string,\n { propertyId?: number; viewType?: string }\n >();\n\n for (const section of loadResponse.formConfiguration?.sections ?? []) {\n for (const field of section.fields ?? []) {\n const { propertyId, viewType } = resolveFieldMeta(field);\n metadataByKey.set(field.propertyKey, {\n propertyId,\n viewType,\n });\n }\n }\n\n return Object.entries(formValue)\n .filter(([propertyKey, value]) => {\n if (value === undefined || value === null) return false;\n return metadataByKey.get(propertyKey)?.viewType !== 'LookupMatrix';\n })\n .map(([propertyKey, value]) => {\n const meta = metadataByKey.get(propertyKey);\n const normalizedValue = normalizeSubmitValue(value, meta?.viewType);\n if (normalizedValue === undefined || normalizedValue === null) {\n return null;\n }\n\n const submitField: ProcessFormSubmitField = {\n propertyKey,\n value: normalizedValue,\n };\n\n if (meta?.propertyId) {\n submitField.requestPropertyId = meta.propertyId;\n }\n\n return submitField;\n })\n .filter((value): value is ProcessFormSubmitField => !!value);\n}\n\nexport function getPreviewOnlyFieldKeys(\n config: ClientFormConfiguration,\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): string[] {\n return config.sections.flatMap((section) =>\n (section.fields ?? [])\n .filter(\n (field) =>\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\n )\n .map((field) => field.propertyKey),\n );\n}\n\nexport function mapPreviewFieldsToEntities(\n config: ClientFormConfiguration,\n values: ProcessFormValue[],\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): EntityData[] {\n return mapPreviewSectionsToEntities(\n config,\n values,\n 'en',\n mode,\n readonly,\n ).flatMap((section) => section.entities);\n}\n\nexport function mapPreviewSectionsToEntities(\n config: ClientFormConfiguration,\n values: ProcessFormValue[],\n lang: 'en' | 'ar' = 'en',\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): ClientFormPreviewSection[] {\n const fieldMap = buildFieldValueMap(config);\n const previewValueByKey = new Map<string, any>();\n\n for (const value of values) {\n if (value.metadata?.source === 'ProcessVirtual') continue;\n\n const targetFieldKey =\n resolveValueTargetKey(value, fieldMap) ?? value.propertyKey ?? null;\n if (!targetFieldKey) continue;\n\n previewValueByKey.set(targetFieldKey, value.value);\n }\n\n return config.sections\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((section) => ({\n key: section.id,\n label: section.name[lang] ?? section.name.en ?? '',\n order: section.order,\n entities: (section.fields ?? [])\n .filter(\n (field) =>\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\n )\n .sort((a, b) => a.order - b.order)\n .map((field) => {\n const property = field.propertyMetadata;\n\n return {\n ...(property as EntityData),\n name: (property.name as any)?.display,\n key: property.key ?? field.propertyKey,\n value: previewValueByKey.get(field.propertyKey),\n order: section.order * 1000 + field.order,\n configuration: {\n ...(property.configuration as Record<string, unknown>),\n size: WIDTH_TO_ENTITY_SIZE[field.width] ?? 24,\n },\n } satisfies EntityData;\n }),\n }))\n .filter((section) => section.entities.length > 0);\n}\n\n// ============================================================================\n// Internal Helpers\n// ============================================================================\n\nfunction isFieldVisible(\n field: ClientFormField,\n mode: 'create' | 'edit',\n): boolean {\n if (!isFieldReadable(field) && field.isWrite !== true) return false;\n if (mode === 'create') return !field.hiddenInCreation;\n return !field.hiddenInEditForm;\n}\n\nfunction isPreviewOnlyField(field: ClientFormField, readonly = false): boolean {\n return isFieldReadable(field) && (readonly || field.isWrite === false);\n}\n\nfunction isFieldReadable(field: ClientFormField): boolean {\n return field.isRead !== false || field.isWrite === true;\n}\n\nfunction isCalculatedField(field: ClientFormField): boolean {\n return field.propertyMetadata?.isCalculated === true;\n}\n\nfunction resolveFieldMeta(field: ClientFormField): {\n property: ClientPropertyItem;\n propertyId?: number;\n viewType: string;\n} {\n const property = field.propertyMetadata;\n return {\n property,\n propertyId: property?.propertyId,\n viewType: property?.viewType ?? 'Text',\n };\n}\n\nfunction mapFieldToConfig(\n field: ClientFormField,\n lang: 'en' | 'ar',\n lookups: ClientLookup[],\n context: ProcessFormContext | null,\n readonly = false,\n): DynamicFieldConfig {\n const { property: prop, viewType } = resolveFieldMeta(field);\n const label =\n (prop?.name as { display?: string } | undefined)?.display ??\n field.propertyKey;\n const colSpan = WIDTH_TO_COLSPAN[field.width] ?? 12;\n\n const base = {\n key: field.propertyKey,\n label,\n colSpan,\n order: field.order,\n placeholder: label,\n required: field.isRequired ?? false,\n disabled: isCalculatedField(field),\n readonly: readonly || field.isWrite === false,\n validators: field.isRequired\n ? [ValidatorConfig.required(`${label} is required`)]\n : [],\n formulaCondition: buildFormulaCondition(field),\n };\n\n switch (viewType) {\n // ── Text-like ──────────────────────────────────────────────\n case 'Text':\n case 'EditableListView':\n case 'LookupLog':\n return new TextFieldConfig(base);\n\n case 'LongText':\n return new EditorFieldConfig(base);\n\n // ── Numeric ───────────────────────────────────────────────\n case 'Number':\n return new NumberFieldConfig(base);\n\n case 'Currency':\n return new NumberFieldConfig({\n ...base,\n useGrouping: true,\n });\n\n case 'Percentage':\n return new SliderFieldConfig({\n ...base,\n min: 0,\n max: 100,\n unit: '%',\n });\n\n // ── Date / Time ───────────────────────────────────────────\n case 'Date':\n return new DateFieldConfig({ ...base, showTime: false });\n\n case 'DateTime':\n return new DateFieldConfig({ ...base, showTime: true });\n\n case 'Time':\n return new DateFieldConfig({ ...base, showTime: true });\n\n // ── Boolean ───────────────────────────────────────────────\n case 'Checkbox':\n return new ToggleFieldConfig(base);\n\n // ── File ──────────────────────────────────────────────────\n case 'Attachment':\n return new UploadFileFieldConfig(base);\n\n // ── User Search ───────────────────────────────────────────\n case 'User':\n return new UserSearchFieldConfig({\n ...base,\n apiUrl: 'Identity/users',\n context: new HttpContext().set(REQUEST_CONTEXT, {\n useBaseUrl: false,\n }),\n });\n\n // ── Lookup (single select) ────────────────────────────────\n case 'Lookup': {\n const items = resolveLookupOptions(prop, lookups);\n return new SelectFieldConfig({\n ...base,\n options: items,\n optionLabel: 'label',\n optionValue: 'value',\n filter: items.length > 10,\n showClear: !(field.isRequired ?? false),\n });\n }\n\n // ── Lookup (multi select) ─────────────────────────────────\n case 'LookupMultiSelect': {\n const items = resolveLookupOptions(prop, lookups);\n return new MultiSelectFieldConfig({\n ...base,\n options: items,\n optionLabel: 'label',\n optionValue: 'value',\n filter: items.length > 10,\n display: 'chip',\n });\n }\n\n // ── Other select-based types ──────────────────────────────\n case 'Status':\n case 'InternalModule':\n case 'DynamicList':\n case 'API':\n case 'Location': {\n const options = extractOptionsFromProperty(prop);\n return new SelectFieldConfig({\n ...base,\n options: options ?? [],\n optionLabel: 'label',\n optionValue: 'value',\n });\n }\n\n case 'LookupMatrix':\n return buildLookupMatrixFieldConfig(base, prop, lookups);\n\n // ── Connection (level-to-level) ─────────────────────────\n case 'Connection': {\n const connectionConfig = prop?.configuration ?? {};\n return new SchemaConnectionFieldConfig({\n ...base,\n configuration: connectionConfig,\n });\n }\n case 'Predecessor':\n return new SchedulePredecessorFieldConfig({\n ...base,\n configuration: prop?.configuration ?? null,\n runtimeContext: context\n ? {\n levelId: context.levelId,\n levelDataId: context.levelDataId,\n moduleDataId: context.moduleDataId,\n }\n : null,\n });\n\n // ── Fallback ──────────────────────────────────────────────\n default:\n return new TextFieldConfig(base);\n }\n}\n\nfunction buildFormulaCondition(\n field: ClientFormField,\n): { formulaTokens: string; formulaText?: string; mode?: 'auto' } | undefined {\n if (!field.showConditionalDisplayFormula) return undefined;\n const formulaTokens = (field.conditionalDisplayFormula ?? '').trim();\n if (!formulaTokens) return undefined;\n\n return {\n formulaTokens,\n formulaText: field.conditionalDisplayFormula ?? '',\n mode: 'auto',\n };\n}\n\n/**\n * Resolve lookup items for Lookup / LookupMultiSelect viewTypes.\n *\n * Reads `configuration.lookup` (the lookup ID) from the property metadata,\n * finds the matching lookup definition, and maps its items to select options.\n */\nfunction resolveLookupOptions(\n prop: ClientPropertyItem | undefined,\n lookups: ClientLookup[],\n): ResolvedLookupOption[] {\n return resolveLookupOptionsById(\n coerceLookupId(prop?.configuration?.['lookup']),\n lookups,\n );\n}\n\n/**\n * Fallback option extractor for non-lookup select types\n * (Status, InternalModule, DynamicList, API, etc.).\n */\nfunction extractOptionsFromProperty(\n property: ClientPropertyItem | undefined,\n): { label: string; value: any }[] | null {\n if (!property?.configuration) return null;\n\n const config = property.configuration;\n\n if (Array.isArray(config['options'])) {\n return config['options'] as { label: string; value: any }[];\n }\n\n if (Array.isArray(config['items'])) {\n return (config['items'] as any[]).map((item) => ({\n label:\n typeof item.name === 'string'\n ? item.name\n : (item.name?.['en'] ?? item.label ?? String(item.value)),\n value: item.id ?? item.value ?? item.key,\n }));\n }\n\n return null;\n}\n\ntype ResolvedLookupOption = {\n id?: number | string;\n key?: string;\n label: string;\n value: any;\n color?: string | null;\n description?: string;\n};\n\nfunction resolveLookupOptionsById(\n lookupId: number | null,\n lookups: ClientLookup[],\n): ResolvedLookupOption[] {\n if (!lookupId || !lookups.length) return [];\n\n const lookup = lookups.find((item) => item.id === lookupId);\n if (!lookup) return [];\n\n return lookup.items\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((item) => ({\n id: item.id,\n key: item.key,\n label: item.name?.display ?? item.name?.en ?? item.key,\n value: item.key,\n color: item.color ?? null,\n description:\n item.description?.display ?? item.description?.en ?? undefined,\n }));\n}\n\nfunction resolveLookupNameById(\n lookupId: number | null,\n lookups: ClientLookup[],\n): string {\n if (!lookupId) return '';\n\n const lookup = lookups.find((item) => item.id === lookupId);\n return lookup?.name?.display ?? lookup?.name?.en ?? lookup?.key ?? '';\n}\n\nfunction buildLookupMatrixFieldConfig(\n base: {\n key: string;\n label: string;\n colSpan: number;\n order: number;\n placeholder: string;\n required: boolean;\n disabled: boolean;\n readonly: boolean;\n validators: ValidatorConfig[];\n formulaCondition:\n | { formulaTokens: string; formulaText?: string; mode?: 'auto' }\n | undefined;\n },\n prop: ClientPropertyItem | undefined,\n lookups: ClientLookup[],\n): LookupMatrixFieldConfig {\n const configuration = (prop?.configuration ?? {}) as Record<string, unknown>;\n const xLookupId = coerceLookupId(configuration['xlookupSource']);\n const yLookupId = coerceLookupId(configuration['ylookupSource']);\n const zLookupId = coerceLookupId(configuration['zlookupId']);\n\n const xOptions = resolveLookupOptionsById(xLookupId, lookups);\n const yOptions = resolveLookupOptionsById(yLookupId, lookups);\n const zOptions = resolveLookupOptionsById(zLookupId, lookups);\n const zOptionsById = new Map(\n zOptions\n .filter((item) => item.id != null)\n .map((item) => [String(item.id), item] as const),\n );\n\n const rawCells = Array.isArray(configuration['lookupsMatrix'])\n ? (configuration['lookupsMatrix'] as Array<Record<string, unknown>>)\n : [];\n\n return new LookupMatrixFieldConfig({\n ...base,\n required: false,\n xFieldKey: String(configuration['xPropertyLookupKey'] ?? ''),\n yFieldKey: String(configuration['yPropertyLookupKey'] ?? ''),\n xAxisLabel: resolveLookupNameById(xLookupId, lookups),\n yAxisLabel: resolveLookupNameById(yLookupId, lookups),\n xOptions,\n yOptions,\n cells: rawCells.map((cell) => {\n const zOption = zOptionsById.get(String(cell['value'] ?? ''));\n\n return {\n row: Number(cell['row'] ?? 0),\n column: Number(cell['column'] ?? 0),\n xLookupItemId: String(cell['xValue'] ?? ''),\n yLookupItemId: String(cell['yValue'] ?? ''),\n zLookupItemId: cell['value'] == null ? null : String(cell['value']),\n label: zOption?.label ?? String(cell['value'] ?? ''),\n color: zOption?.color ?? null,\n };\n }),\n });\n}\n\nfunction coerceLookupId(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n return null;\n}\n\nfunction normalizeSubmitValue(value: any, viewType?: string): any {\n switch (viewType) {\n case 'User':\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value['id'] ?? value;\n }\n return value;\n\n default:\n return value;\n }\n}\n\nfunction resolveLoadedFieldValue(value: ProcessFormValue): any {\n const resolvedValue =\n value.metadata?.viewType === 'User'\n ? value.value\n : (value.rawValue ?? value.value);\n\n switch (value.metadata?.viewType) {\n case 'Date':\n case 'DateTime':\n case 'Time':\n return coerceToDate(resolvedValue);\n\n default:\n return resolvedValue;\n }\n}\n\nfunction coerceToDate(value: any): any {\n if (value === null || value === undefined || value === '') {\n return value;\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n const coerced = new Date(value);\n return Number.isNaN(coerced.getTime()) ? value : coerced;\n}\n\ntype FieldValueMeta = {\n key: string;\n propertyId?: number;\n};\n\ntype FieldValueMap = {\n fieldsByKey: Map<string, FieldValueMeta>;\n propertyIdToKey: Map<number, string>;\n aliasToKey: Map<string, string>;\n};\n\nfunction buildFieldValueMap(config: ClientFormConfiguration): FieldValueMap {\n const fieldsByKey = new Map<string, FieldValueMeta>();\n const propertyIdCandidates = new Map<number, Set<string>>();\n const aliasCandidates = new Map<string, Set<string>>();\n\n for (const section of config.sections ?? []) {\n for (const field of section.fields ?? []) {\n const { propertyId } = resolveFieldMeta(field);\n const fieldMeta: FieldValueMeta = {\n key: field.propertyKey,\n propertyId,\n };\n\n fieldsByKey.set(field.propertyKey, fieldMeta);\n\n if (propertyId != null) {\n if (!propertyIdCandidates.has(propertyId)) {\n propertyIdCandidates.set(propertyId, new Set<string>());\n }\n propertyIdCandidates.get(propertyId)!.add(field.propertyKey);\n }\n\n const aliases = new Set<string>([\n field.propertyKey,\n stripTemplatePrefix(field.propertyKey),\n ]);\n\n const property = field.propertyMetadata;\n if (property?.key) {\n aliases.add(property.key);\n aliases.add(stripTemplatePrefix(property.key));\n }\n\n aliases.forEach((alias) => {\n if (!alias) return;\n if (!aliasCandidates.has(alias)) {\n aliasCandidates.set(alias, new Set<string>());\n }\n aliasCandidates.get(alias)!.add(field.propertyKey);\n });\n }\n }\n\n const propertyIdToKey = new Map<number, string>();\n propertyIdCandidates.forEach((keys, propertyId) => {\n if (keys.size !== 1) return;\n propertyIdToKey.set(propertyId, [...keys][0]);\n });\n\n const aliasToKey = new Map<string, string>();\n aliasCandidates.forEach((keys, alias) => {\n if (keys.size !== 1) return;\n aliasToKey.set(alias, [...keys][0]);\n });\n\n return {\n fieldsByKey,\n propertyIdToKey,\n aliasToKey,\n };\n}\n\nfunction resolveValueTargetKey(\n value: ProcessFormValue,\n fieldMap: FieldValueMap | null,\n): string | null {\n if (!fieldMap) {\n return value.propertyKey ?? null;\n }\n\n const exactCandidates = [value.propertyKey, value.metadata?.key].filter(\n (candidate): candidate is string => !!candidate,\n );\n\n for (const candidate of exactCandidates) {\n if (fieldMap.fieldsByKey.has(candidate)) {\n return candidate;\n }\n }\n\n const propertyId = value.metadata?.propertyId;\n if (propertyId != null && fieldMap.propertyIdToKey.has(propertyId)) {\n return fieldMap.propertyIdToKey.get(propertyId)!;\n }\n\n const aliasCandidates = exactCandidates.flatMap((candidate) => [\n candidate,\n stripTemplatePrefix(candidate),\n ]);\n\n for (const candidate of aliasCandidates) {\n if (!candidate) continue;\n if (fieldMap.aliasToKey.has(candidate)) {\n return fieldMap.aliasToKey.get(candidate)!;\n }\n }\n\n return null;\n}\n\nfunction stripTemplatePrefix(value: string): string {\n return value.replace(/^template_\\d+_/, '');\n}\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n OnDestroy,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { EMPTY, Subscription, map, switchMap } from 'rxjs';\nimport { Skeleton } from 'primeng/skeleton';\n\nimport { Button } from '@masterteam/components/button';\nimport { EntitiesPreview } from '@masterteam/components/entities';\nimport { Tabs, type OptionItem } from '@masterteam/components/tabs';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Icon } from '@masterteam/icons';\nimport type {\n DynamicFormConfig,\n FormulaRuntimeMessage,\n} from '@masterteam/components';\n\nimport { ClientFormApiService } from './services/client-form-api.service';\nimport { ClientFormStateService } from './services/client-form-state.service';\nimport {\n getPreviewOnlyFieldKeys,\n mapPreviewSectionsToEntities,\n mapToDynamicFormConfig,\n mapValuesToFormValue,\n mapFormValueToSubmitFields,\n} from './utils/form-config-mapper';\n\nimport type {\n ClientFormFooterState,\n ClientFormResolvedRenderMode,\n ProcessFormLoadRequest,\n ProcessFormLoadResponse,\n ProcessFormSubmitRequest,\n ProcessFormSubmitResponse,\n ProcessFormSubmitField,\n ProcessFormValidationRuleResult,\n ProcessFormMode,\n ProcessFormSource,\n ProcessFormValue,\n ClientLookup,\n ClientFormSubmitRequestMapper,\n ClientFormTranslatableValue,\n} from './models/client-form.model';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\n\ntype StepTimelineState = 'completed' | 'current' | 'upcoming';\n\ninterface StepTimelineItem {\n key: string;\n label: string;\n value: number;\n state: StepTimelineState;\n selected: boolean;\n beforeLineActive: boolean;\n afterLineActive: boolean;\n}\n\n/**\n * Client Form — Runtime process form component.\n *\n * Self-contained, signal-based (no NGXS). Each instance manages its own state\n * via a component-scoped `ClientFormStateService`.\n *\n * Submit and reset actions stay external. Step navigation buttons are optional\n * and can be hidden with `showInternalStepActions`.\n *\n * Parent can control actions via `viewChild()`:\n *\n * ```html\n * <mt-client-form #processForm [moduleKey]=\"'Risk'\" [operationKey]=\"'CloseRisk'\" />\n * <button (click)=\"processForm.load()\">Load</button>\n * <button (click)=\"processForm.submit()\">Submit</button>\n * ```\n *\n * Or programmatically:\n * ```typescript\n * readonly processForm = viewChild.required(ClientForm);\n * this.processForm().load();\n * this.processForm().submit();\n * ```\n */\n@Component({\n selector: 'mt-client-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n Button,\n EntitiesPreview,\n DynamicForm,\n Tabs,\n Skeleton,\n Icon,\n TranslocoDirective,\n ],\n providers: [ClientFormStateService],\n templateUrl: './client-form.html',\n styleUrls: ['./client-form.scss'],\n})\nexport class ClientForm implements OnDestroy {\n private readonly api = inject(ClientFormApiService);\n protected readonly state = inject(ClientFormStateService);\n\n private loadSub?: Subscription;\n private submitSub?: Subscription;\n private formValueSub?: Subscription;\n private readonly hasStartedLoad = signal(false);\n private readonly formRuntimeMessages = signal<FormulaRuntimeMessage[]>([]);\n private readonly submitValidationMessages = signal<FormulaRuntimeMessage[]>(\n [],\n );\n readonly runtimeMessages = computed(() => [\n ...this.formRuntimeMessages(),\n ...this.submitValidationMessages(),\n ]);\n private readonly translocoService = inject(TranslocoService);\n\n // ============================================================================\n // Public State Signals (for parent access via viewChild)\n // ============================================================================\n\n readonly submitting = computed(() => this.state.submitting());\n readonly submitError = computed(() => this.state.submitError());\n readonly isSubmitted = computed(() => this.state.isSubmitted());\n readonly isPendingApproval = computed(() => this.state.isPendingApproval());\n readonly isExecuted = computed(() => this.state.isExecuted());\n readonly isLoaded = computed(() => this.state.isLoaded());\n readonly loading = computed(() => this.state.loading());\n readonly runtimeErrors = computed(() =>\n this.runtimeMessages().filter((msg) => msg.severity === 'error'),\n );\n readonly runtimeWarnings = computed(() =>\n this.runtimeMessages().filter((msg) => msg.severity === 'warning'),\n );\n readonly currentStep = signal(1);\n\n // ============================================================================\n // Inputs — Required Context\n // ============================================================================\n\n readonly moduleKey = input.required<string>();\n readonly operationKey = input.required<string>();\n\n // ============================================================================\n // Inputs — Optional Context\n // ============================================================================\n\n readonly moduleId = input<number | string>();\n readonly levelId = input<number | string>();\n readonly levelDataId = input<number | string>();\n readonly moduleDataId = input<number | string>();\n readonly requestSchemaId = input<number>();\n readonly draftProcessId = input<number>();\n readonly preview = input(false);\n readonly returnUrl = input<string>();\n readonly submitRequestMapper = input<ClientFormSubmitRequestMapper | null>(\n null,\n );\n\n // ============================================================================\n // Inputs — UI Configuration\n // ============================================================================\n\n readonly readonly = input(false);\n readonly autoLoad = input(true);\n readonly formMode = input<'create' | 'edit'>('create');\n readonly renderMode = input<\n 'form' | 'steps' | 'tabs' | 'wizard' | undefined\n >();\n // Hide the built-in previous/next buttons when step actions are rendered by the parent.\n readonly showInternalStepActions = input<boolean>(true);\n readonly lang = signal(this.translocoService.getActiveLang() as 'en' | 'ar');\n readonly lookups = input<ClientLookup[]>([]);\n readonly ignoredFieldKeys = input<string[]>([]);\n readonly rtl = computed(() => this.lang() === 'ar');\n\n // ============================================================================\n // Outputs\n // ============================================================================\n\n readonly loaded = output<ProcessFormLoadResponse>();\n readonly submitted = output<ProcessFormSubmitResponse>();\n readonly errored = output<string>();\n readonly modeDetected = output<ProcessFormMode>();\n readonly formSourceDetected = output<ProcessFormSource>();\n readonly footerStateChanged = output<ClientFormFooterState>();\n\n // ============================================================================\n // Internal Form Control\n // ============================================================================\n\n readonly formControl = new FormControl<Record<string, any>>({});\n\n // ============================================================================\n // Computed — Dynamic Form Config\n // ============================================================================\n\n readonly formConfig = computed<DynamicFormConfig | null>(() => {\n const config = this.state.formConfiguration();\n if (!config) return null;\n return mapToDynamicFormConfig(\n config,\n this.lang(),\n this.formMode(),\n this.lookups(),\n this.state.context(),\n this.readonly(),\n );\n });\n\n readonly initialValues = computed<Record<string, any>>(() => {\n return mapValuesToFormValue(\n this.state.formValues(),\n this.state.formConfiguration(),\n );\n });\n\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\n this.state.virtualFields(),\n );\n\n readonly hasVirtualFields = computed(() => this.virtualFields().length > 0);\n readonly previewFieldKeys = computed(() => {\n const config = this.state.formConfiguration();\n if (!config) return [];\n return [\n ...new Set([\n ...getPreviewOnlyFieldKeys(config, this.formMode(), this.readonly()),\n ...this.ignoredFieldKeys(),\n ]),\n ];\n });\n readonly previewEntitySections = computed(() => {\n const config = this.state.formConfiguration();\n if (!config) return [];\n const ignoredFieldKeys = new Set(this.ignoredFieldKeys());\n return mapPreviewSectionsToEntities(\n config,\n this.state.formValues(),\n this.lang(),\n this.formMode(),\n this.readonly(),\n )\n .map((section) => ({\n ...section,\n entities: section.entities.filter(\n (entity) => !entity.key || !ignoredFieldKeys.has(entity.key),\n ),\n }))\n .filter((section) => section.entities.length > 0);\n });\n readonly editableFormConfig = computed<DynamicFormConfig | null>(() => {\n if (this.readonly()) {\n return null;\n }\n\n const config = this.formConfig();\n if (!config) return null;\n\n const previewFieldKeys = new Set(this.previewFieldKeys());\n\n return {\n ...config,\n sections: config.sections\n .map((section) => ({\n ...section,\n fields: section.fields.filter(\n (field) => !field.key || !previewFieldKeys.has(field.key),\n ),\n }))\n .filter((section) =>\n section.fields.some((field) => field.type !== 'spacer'),\n ),\n };\n });\n readonly stepSections = computed(\n () => this.editableFormConfig()?.sections ?? [],\n );\n readonly hasEditableFormSections = computed(\n () => this.stepSections().length > 0,\n );\n readonly effectiveRenderMode = computed<'form' | 'steps' | 'tabs' | 'wizard'>(\n () => {\n const explicitRenderMode = this.renderMode();\n if (explicitRenderMode) return explicitRenderMode;\n\n const configRenderMode = this.state.formConfiguration()?.renderMode;\n if (\n configRenderMode === 'steps' ||\n configRenderMode === 'tabs' ||\n configRenderMode === 'wizard'\n ) {\n return configRenderMode;\n }\n\n return 'form';\n },\n );\n readonly stepsEnabled = computed(\n () =>\n this.effectiveRenderMode() === 'steps' && this.stepSections().length > 1,\n );\n readonly tabsEnabled = computed(\n () =>\n this.effectiveRenderMode() === 'tabs' && this.stepSections().length > 1,\n );\n readonly wizardEnabled = computed(\n () =>\n this.effectiveRenderMode() === 'wizard' && this.stepSections().length > 1,\n );\n readonly wizardFormConfig = computed<DynamicFormConfig | null>(() => {\n const config = this.editableFormConfig();\n if (!config) return null;\n return {\n ...config,\n sections: config.sections.map((s) => ({ ...s, label: undefined })),\n };\n });\n readonly sectionNavigationEnabled = computed(\n () => this.stepsEnabled() || this.tabsEnabled() || this.wizardEnabled(),\n );\n readonly tabOptions = computed<OptionItem[]>(() =>\n this.stepSections().map((section, index) => ({\n label: section.label || `Tab ${index + 1}`,\n value: index + 1,\n })),\n );\n readonly stepTimeline = computed<StepTimelineItem[]>(() => {\n const sections = this.stepSections();\n const currentStep = this.currentStep();\n\n return sections.map((section, index) => {\n const value = index + 1;\n const state = this.resolveStepTimelineState(value, currentStep);\n\n return {\n key: section.key || `section-${index}`,\n label: section.label || `Step ${value}`,\n value,\n state,\n selected: value === currentStep,\n beforeLineActive: index > 0 && value <= currentStep,\n afterLineActive: index < sections.length - 1 && value < currentStep,\n };\n });\n });\n readonly visibleSectionKeys = computed(() => {\n if (!this.sectionNavigationEnabled()) return null;\n\n const currentIndex = this.currentStep() - 1;\n const activeSection = this.stepSections()[currentIndex];\n\n if (!activeSection) return null;\n\n return [activeSection.key || `section-${currentIndex}`];\n });\n readonly forcedHiddenFieldKeys = computed(() => {\n if (!this.sectionNavigationEnabled()) return [];\n\n const sections = this.stepSections();\n const currentIndex = this.currentStep() - 1;\n const hiddenFieldKeys = new Set<string>();\n\n sections.forEach((section, index) => {\n if (index === currentIndex) return;\n section.fields\n .map((field) => field.key)\n .filter((key): key is string => !!key)\n .forEach((key) => hiddenFieldKeys.add(key));\n });\n\n return [...hiddenFieldKeys];\n });\n readonly effectiveForcedHiddenFieldKeys = computed(() => {\n return [\n ...new Set([...this.forcedHiddenFieldKeys(), ...this.ignoredFieldKeys()]),\n ];\n });\n readonly footerLoading = computed(() => {\n return (\n this.state.loading() ||\n (this.autoLoad() &&\n !this.hasStartedLoad() &&\n !this.state.isLoaded() &&\n !this.state.error())\n );\n });\n readonly footerState = computed<ClientFormFooterState>(() => {\n const loading = this.footerLoading();\n const isLoaded = this.state.isLoaded();\n const renderMode = this.effectiveRenderMode();\n const stepNavigationEnabled = this.stepsEnabled() || this.wizardEnabled();\n const sectionNavigationEnabled = this.sectionNavigationEnabled();\n const currentStep = this.currentStep();\n const stepCount = this.stepSections().length;\n const canGoToPreviousStep = stepNavigationEnabled && currentStep > 1;\n const canGoToNextStep = stepNavigationEnabled && currentStep < stepCount;\n\n return {\n loading,\n isLoaded,\n renderMode,\n actionMode: loading\n ? 'loading'\n : stepNavigationEnabled\n ? 'steps'\n : 'submit',\n stepNavigationEnabled,\n sectionNavigationEnabled,\n currentStep,\n stepCount,\n canGoToPreviousStep,\n canGoToNextStep,\n showPreviousStep: stepNavigationEnabled,\n showNextStep: stepNavigationEnabled && canGoToNextStep,\n showSubmit:\n isLoaded && !loading && (!stepNavigationEnabled || !canGoToNextStep),\n };\n });\n\n // ============================================================================\n // Effects\n // ============================================================================\n\n constructor() {\n this.formValueSub = this.formControl.valueChanges.subscribe(() => {\n if (this.submitValidationMessages().length > 0) {\n this.submitValidationMessages.set([]);\n }\n });\n\n // Auto-load when inputs are ready\n effect(() => {\n const autoLoad = this.autoLoad();\n const moduleKey = this.moduleKey();\n const operationKey = this.operationKey();\n\n if (autoLoad && moduleKey && operationKey) {\n untracked(() => this.load());\n }\n });\n\n // Patch form values after load\n effect(() => {\n const values = this.initialValues();\n const isLoaded = this.state.isLoaded();\n\n if (isLoaded && Object.keys(values).length > 0) {\n untracked(() => {\n this.formControl.patchValue(values, { emitEvent: false });\n });\n }\n });\n\n effect(() => {\n const count = this.stepSections().length;\n const current = this.currentStep();\n\n if (count === 0) {\n if (current !== 1) this.currentStep.set(1);\n return;\n }\n\n if (current < 1 || current > count) {\n this.currentStep.set(1);\n }\n });\n\n effect(() => {\n const footerState = this.footerState();\n\n untracked(() => {\n this.footerStateChanged.emit(footerState);\n });\n });\n }\n\n // ============================================================================\n // Public API (accessed via viewChild)\n // ============================================================================\n\n /**\n * Load form configuration from the API.\n * Builds request from current input values.\n */\n load(): void {\n if (this.state.loading()) return;\n\n this.loadSub?.unsubscribe();\n this.hasStartedLoad.set(true);\n this.formRuntimeMessages.set([]);\n this.submitValidationMessages.set([]);\n this.state.loading.set(true);\n this.state.error.set(null);\n this.state.submitResponse.set(null);\n\n const request = this.buildLoadRequest();\n\n this.loadSub = this.api.load(request).subscribe({\n next: (response) => {\n this.state.loading.set(false);\n\n if (response.data) {\n this.state.setLoadResponse(response.data);\n this.loaded.emit(response.data);\n\n if (response.data.mode) {\n this.modeDetected.emit(response.data.mode);\n }\n\n if (response.data.formSource) {\n this.formSourceDetected.emit(response.data.formSource);\n }\n } else {\n const msg = response.message ?? 'Failed to load form';\n this.state.setError(msg);\n this.errored.emit(msg);\n }\n },\n error: (err) => {\n const msg =\n err?.error?.message ?? err?.message ?? 'Failed to load form';\n this.state.setError(msg);\n this.errored.emit(msg);\n },\n });\n }\n\n /**\n * Submit the current form values.\n * Builds submit request from form value + load context.\n */\n submit(): void {\n if (this.state.submitting()) return;\n const loadResponse = this.state.loadResponse();\n if (!loadResponse) {\n const msg = 'Form must be loaded before submit';\n this.state.submitError.set(msg);\n this.errored.emit(msg);\n return;\n }\n\n this.submitSub?.unsubscribe();\n this.state.submitting.set(true);\n this.state.submitError.set(null);\n\n const request = this.buildSubmitRequest(loadResponse);\n this.submitValidationMessages.set([]);\n\n this.submitSub = this.api\n .validate(request)\n .pipe(\n switchMap((validationResponse) => {\n const validation = validationResponse.data;\n\n if (!validation) {\n const msg = validationResponse.message ?? 'Failed to validate form';\n this.state.submitting.set(false);\n this.state.setSubmitError(msg);\n this.errored.emit(msg);\n return EMPTY;\n }\n\n this.submitValidationMessages.set(\n this.mapSubmitValidationMessages(validation.results ?? []),\n );\n\n if (validation.hasBlockingFailures) {\n this.state.submitting.set(false);\n return EMPTY;\n }\n\n return this.api.submit(request).pipe(\n map((response) => ({\n kind: 'submit' as const,\n response,\n })),\n );\n }),\n )\n .subscribe({\n next: ({ response }) => {\n this.state.submitting.set(false);\n\n if (response.data) {\n this.state.setSubmitResponse(response.data);\n this.submitted.emit(response.data);\n } else {\n const msg = response.message ?? 'Failed to submit form';\n this.state.setSubmitError(msg);\n this.errored.emit(msg);\n }\n },\n error: (err) => {\n const msg =\n err?.error?.message ??\n err?.message ??\n 'Failed to validate or submit form';\n this.state.setSubmitError(msg);\n this.errored.emit(msg);\n },\n });\n }\n\n /**\n * Get the current form value as a flat key-value object.\n */\n getFormValue(): Record<string, any> {\n return this.formControl.value ?? {};\n }\n\n /**\n * Get the current form value mapped to submit payload format.\n */\n getSubmitFields(): ProcessFormSubmitField[] {\n const loadResponse = this.state.loadResponse();\n if (!loadResponse) return [];\n return mapFormValueToSubmitFields(this.getFormValue(), loadResponse);\n }\n\n /**\n * Backward-compatible alias for consumers still using the previous helper name.\n */\n getSubmitValues(): ProcessFormSubmitField[] {\n return this.getSubmitFields();\n }\n\n /**\n * Check whether the current form state is valid.\n */\n isValid(): boolean {\n return this.formControl.valid && this.runtimeErrors().length === 0;\n }\n\n /**\n * Reset the component to its initial state.\n */\n reset(): void {\n this.loadSub?.unsubscribe();\n this.submitSub?.unsubscribe();\n this.formControl.reset({});\n this.formRuntimeMessages.set([]);\n this.submitValidationMessages.set([]);\n this.state.reset();\n }\n\n onRuntimeMessagesChange(messages: FormulaRuntimeMessage[]): void {\n this.formRuntimeMessages.set(messages ?? []);\n }\n\n onStepChange(value: number): void {\n const count = this.stepSections().length;\n if (value < 1 || value > count) return;\n this.currentStep.set(value);\n }\n\n goToPreviousStep(): void {\n this.onStepChange(this.currentStep() - 1);\n }\n\n goToNextStep(): void {\n this.onStepChange(this.currentStep() + 1);\n }\n\n canGoToPreviousStep(): boolean {\n return (\n (this.stepsEnabled() || this.wizardEnabled()) && this.currentStep() > 1\n );\n }\n\n canGoToNextStep(): boolean {\n return (\n (this.stepsEnabled() || this.wizardEnabled()) &&\n this.currentStep() < this.stepSections().length\n );\n }\n\n getCurrentStep(): number {\n return this.currentStep();\n }\n\n getStepCount(): number {\n return this.stepSections().length;\n }\n\n isStepNavigationEnabled(): boolean {\n return this.stepsEnabled();\n }\n\n isSectionNavigationEnabled(): boolean {\n return this.sectionNavigationEnabled();\n }\n\n isFooterLoading(): boolean {\n return this.footerState().loading;\n }\n\n getResolvedRenderMode(): ClientFormResolvedRenderMode {\n return this.footerState().renderMode;\n }\n\n getFooterState(): ClientFormFooterState {\n return this.footerState();\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n ngOnDestroy(): void {\n this.loadSub?.unsubscribe();\n this.submitSub?.unsubscribe();\n this.formValueSub?.unsubscribe();\n }\n\n // ============================================================================\n // Private Helpers\n // ============================================================================\n\n private buildLoadRequest(): ProcessFormLoadRequest {\n const req: ProcessFormLoadRequest = {\n moduleKey: this.moduleKey(),\n operationKey: this.operationKey(),\n };\n\n const moduleId = this.moduleId();\n const levelId = this.levelId();\n const levelDataId = this.levelDataId();\n const moduleDataId = this.moduleDataId();\n const requestSchemaId = this.requestSchemaId();\n const draftProcessId = this.draftProcessId();\n const preview = this.preview();\n\n if (moduleId != null) req.moduleId = moduleId;\n if (levelId != null) req.levelId = levelId;\n if (levelDataId != null) req.levelDataId = levelDataId;\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\n if (draftProcessId != null) req.draftProcessId = draftProcessId;\n if (preview) req.preview = preview;\n\n return req;\n }\n\n private buildSubmitRequest(\n loadResponse: ProcessFormLoadResponse,\n ): ProcessFormSubmitRequest {\n const context = this.state.context();\n const formValue = this.getFormValue();\n const fields: ProcessFormSubmitField[] = mapFormValueToSubmitFields(\n formValue,\n loadResponse,\n );\n\n const req: ProcessFormSubmitRequest = {\n moduleKey: this.moduleKey() ?? context?.moduleKey,\n operationKey: this.operationKey() ?? context?.operationKey,\n fields,\n };\n\n const moduleId = context?.moduleId ?? this.moduleId();\n const levelId = context?.levelId ?? this.levelId();\n const levelDataId = context?.levelDataId ?? this.levelDataId();\n const moduleDataId = context?.moduleDataId ?? this.moduleDataId();\n const requestSchemaId = context?.requestSchemaId ?? this.requestSchemaId();\n const recordId =\n moduleDataId ??\n (req.moduleKey === 'LevelData' && req.operationKey !== 'Create'\n ? levelDataId\n : undefined);\n const returnUrl = this.returnUrl();\n\n if (moduleId != null) req.moduleId = moduleId;\n if (levelId != null) req.levelId = levelId;\n if (levelDataId != null) req.levelDataId = levelDataId;\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\n if (recordId != null) req.recordId = recordId;\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\n if (returnUrl) req.returnUrl = returnUrl;\n\n const submitRequestMapper = this.submitRequestMapper();\n if (!submitRequestMapper) {\n return req;\n }\n\n return submitRequestMapper(req, {\n formValue,\n loadResponse,\n });\n }\n\n private mapSubmitValidationMessages(\n results: ProcessFormValidationRuleResult[],\n ): FormulaRuntimeMessage[] {\n return results\n .filter((result) => !result.passed)\n .map((result) => ({\n code: result.isEvaluationError\n ? 'FORMULA_EVALUATION_ERROR'\n : 'FORMULA_FALSE',\n severity: result.severity,\n message: this.resolveSubmitValidationMessage(result),\n ruleId: result.ruleId,\n }));\n }\n\n private resolveSubmitValidationMessage(\n result: ProcessFormValidationRuleResult,\n ): string {\n const translatedMessage = this.resolveTranslatableValue(result.message);\n if (translatedMessage) {\n return translatedMessage;\n }\n\n const errorMessage = result.errorMessage?.trim();\n if (errorMessage) {\n return errorMessage;\n }\n\n return 'Form validation failed';\n }\n\n private resolveTranslatableValue(\n value: ClientFormTranslatableValue | string | null | undefined,\n ): string | null {\n if (typeof value === 'string') {\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n }\n\n if (!value) {\n return null;\n }\n\n const lang = this.lang();\n const localized =\n value.display ?? value[lang] ?? value.en ?? value.ar ?? null;\n\n if (typeof localized !== 'string') {\n return null;\n }\n\n const normalized = localized.trim();\n return normalized.length > 0 ? normalized : null;\n }\n\n private resolveStepTimelineState(\n stepValue: number,\n currentStep: number,\n ): StepTimelineState {\n if (stepValue < currentStep) {\n return 'completed';\n }\n\n if (stepValue === currentStep) {\n return 'current';\n }\n\n return 'upcoming';\n }\n}\n","<!-- Client Form Template - render only; step navigation buttons are optional -->\r\n\r\n<!-- Loading State -->\r\n@if (state.loading()) {\r\n <div class=\"flex flex-col gap-6\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Second section skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n\r\n<!-- Loaded State -->\r\n@if (state.isLoaded() && !state.loading()) {\r\n <div class=\"flex flex-col gap-4\" *transloco=\"let t; prefix: 'clientForm'\">\r\n @if (previewEntitySections().length > 0) {\r\n <div class=\"flex flex-col gap-3\">\r\n @for (section of previewEntitySections(); track section.key) {\r\n <div class=\"flex flex-col gap-3\">\r\n @if (section.label) {\r\n <h3\r\n class=\"text-lg font-semibold text-color border-b-2 border-gray-200 pb-2 mb-3\"\r\n >\r\n {{ section.label }}\r\n </h3>\r\n }\r\n <mt-entities-preview [entities]=\"section.entities\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n @if (wizardEnabled()) {\r\n <!-- Wizard Mode: vertical stepper left + form right -->\r\n <div class=\"flex gap-0 min-h-0\">\r\n <!-- Vertical Stepper -->\r\n <div class=\"w-[30%] shrink-0 flex flex-col py-4 px-6\">\r\n @for (\r\n step of stepTimeline();\r\n track step.key;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n @if (!first) {\r\n <div\r\n class=\"ms-6 w-0.5 h-5 shrink-0\"\r\n [ngClass]=\"\r\n step.beforeLineActive ? 'bg-primary' : 'bg-surface-300'\r\n \"\r\n ></div>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center cursor-pointer gap-3 text-left focus-visible:outline-none\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"step.state === 'current' ? 'step' : null\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-12 w-12 shrink-0 items-center justify-center rounded text-base font-semibold transition-all duration-200\"\r\n [class]=\"\r\n step.state === 'current'\r\n ? 'ring-2 ring-primary/20 bg-primary text-white '\r\n : step.state === 'completed'\r\n ? 'text-primary bg-primary-100 '\r\n : step.state === 'upcoming'\r\n ? 'bg-primary-100 text-white'\r\n : ''\r\n \"\r\n >\r\n @if (step.state === \"completed\") {\r\n <mt-icon icon=\"general.check\" class=\"text-xl\" />\r\n } @else {\r\n {{ step.value }}\r\n }\r\n </span>\r\n <span\r\n class=\"text-sm leading-5 truncate transition-colors duration-200\"\r\n [ngClass]=\"{\r\n 'font-semibold text-primary': step.state === 'current',\r\n 'font-medium text-surface-700':\r\n step.state === 'completed',\r\n 'font-medium text-surface-400': step.state === 'upcoming',\r\n }\"\r\n dir=\"auto\"\r\n >\r\n {{ step.label }}\r\n </span>\r\n </button>\r\n @if (!last) {\r\n <div\r\n class=\"ms-6 w-0.5 h-5 shrink-0\"\r\n [ngClass]=\"\r\n step.afterLineActive ? 'bg-primary' : 'bg-surface-300'\r\n \"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n <!-- Form Content + Buttons -->\r\n <div class=\"flex-1 flex flex-col gap-4 min-w-0 ps-6\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\"\r\n >\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n {{ t(\"validation-errors\") }}\r\n </h4>\r\n <ul\r\n class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\"\r\n >\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <mt-dynamic-form\r\n [formConfig]=\"wizardFormConfig() ?? config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"effectiveForcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-end gap-2 pt-4 mt-auto\">\r\n <mt-button\r\n [label]=\"t('previous')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === 1\"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"t('next')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (onClick)=\"goToNextStep()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\"\r\n >\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n {{ t(\"validation-errors\") }}\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n {{ t(\"validation-warnings\") }}\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"overflow-x-auto pb-2\">\r\n <div class=\"flex min-w-[36rem] items-start\">\r\n @for (\r\n step of stepTimeline();\r\n track step.key;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n <div\r\n class=\"relative flex min-w-[8rem] flex-1 justify-center\"\r\n >\r\n @if (!rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (!rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"relative z-10 flex w-full flex-col items-center gap-3 px-2 text-center focus-visible:outline-none\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"\r\n step.state === 'current' ? 'step' : null\r\n \"\r\n [attr.title]=\"step.label\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\"\r\n [ngClass]=\"{\r\n 'border-primary bg-primary text-surface-0 ring-4 ring-primary/10':\r\n step.state === 'completed' ||\r\n step.state === 'current',\r\n\r\n 'border-surface-300 bg-white text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n >\r\n {{ step.value }}\r\n </span>\r\n <span\r\n class=\"max-w-[8rem] text-center text-sm leading-5 transition-colors duration-200\"\r\n [ngClass]=\"{\r\n 'font-semibold text-primary':\r\n step.selected || step.state === 'current',\r\n 'font-medium text-surface-700':\r\n step.state === 'completed' && !step.selected,\r\n 'font-medium text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n dir=\"auto\"\r\n >\r\n {{ step.label }}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <mt-button\r\n [label]=\"t('previous')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === 1\"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"t('next')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (onClick)=\"goToNextStep()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (tabsEnabled()) {\r\n <mt-tabs\r\n [active]=\"currentStep()\"\r\n (activeChange)=\"onStepChange($event)\"\r\n [options]=\"tabOptions()\"\r\n size=\"small\"\r\n fluid\r\n />\r\n }\r\n <mt-dynamic-form\r\n [formConfig]=\"config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"effectiveForcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n </div>\r\n }\r\n }\r\n } @else if (previewEntitySections().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","// ============================================================================\n// API Response Wrapper\n// ============================================================================\n\nexport interface Response<T> {\n endpoint: string;\n status: number;\n code: number;\n locale: string;\n message?: string | null;\n errors?: any | null;\n data: T;\n cacheSession?: string;\n}\n\n// ============================================================================\n// Process Form Mode\n// ============================================================================\n\nexport type ProcessFormMode = 'Approval' | 'Direct';\nexport type ProcessFormSubmitStatus = 'PendingApproval' | 'Executed';\nexport type OperationType = 'FormOperation' | 'ActionOperation';\nexport type ProcessFormSource = 'Step' | 'None';\nexport type ClientFormResolvedRenderMode = 'form' | 'steps' | 'tabs' | 'wizard';\nexport type ClientFormFooterActionMode = 'loading' | 'steps' | 'submit';\n\nexport interface ClientFormFooterState {\n loading: boolean;\n isLoaded: boolean;\n renderMode: ClientFormResolvedRenderMode;\n actionMode: ClientFormFooterActionMode;\n stepNavigationEnabled: boolean;\n sectionNavigationEnabled: boolean;\n currentStep: number;\n stepCount: number;\n canGoToPreviousStep: boolean;\n canGoToNextStep: boolean;\n showPreviousStep: boolean;\n showNextStep: boolean;\n showSubmit: boolean;\n}\n\n// ============================================================================\n// Load Request / Response\n// ============================================================================\n\nexport interface ProcessFormLoadRequest {\n moduleKey: string;\n operationKey: string;\n moduleId?: number | string;\n levelId?: number | string;\n levelDataId?: number | string;\n moduleDataId?: number | string;\n requestSchemaId?: number;\n draftProcessId?: number;\n preview?: boolean;\n}\n\nexport interface ProcessFormLoadResponse {\n mode: ProcessFormMode;\n formSource: ProcessFormSource;\n requiresForm: boolean;\n requestSchemaId: number | null;\n requestId: number | null;\n stepId: number | null;\n stepSchemaId: number | null;\n stepName: string | null;\n formConfiguration: ClientFormConfiguration | null;\n values: ProcessFormValue[];\n context: ProcessFormContext;\n}\n\n// ============================================================================\n// Submit Request / Response\n// ============================================================================\n\nexport interface ProcessFormSubmitRequest {\n moduleKey: string;\n operationKey: string;\n moduleId?: number | string;\n levelId?: number | string;\n levelDataId?: number | string;\n moduleDataId?: number | string;\n recordId?: number | string;\n requestSchemaId?: number;\n returnUrl?: string;\n fields: ProcessFormSubmitField[];\n}\n\nexport interface ProcessFormValidationRuntimeResult {\n isValid: boolean;\n hasBlockingFailures: boolean;\n results: ProcessFormValidationRuleResult[];\n}\n\nexport interface ProcessFormValidationRuleResult {\n ruleId: string | number;\n message?: ClientFormTranslatableValue | string | null;\n severity: 'error' | 'warning';\n passed: boolean;\n isBlocking: boolean;\n isEvaluationError: boolean;\n errorMessage?: string | null;\n}\n\nexport interface ClientFormSubmitRequestMapperContext {\n formValue: Record<string, any>;\n loadResponse: ProcessFormLoadResponse;\n}\n\nexport type ClientFormSubmitRequestMapper = (\n request: ProcessFormSubmitRequest,\n context: ClientFormSubmitRequestMapperContext,\n) => ProcessFormSubmitRequest;\n\nexport interface ProcessFormSubmitField {\n requestPropertyId?: number;\n propertyKey: string;\n value: any;\n}\n\nexport type ProcessFormSubmitValue = ProcessFormSubmitField;\n\nexport interface ProcessFormSubmitResponse {\n status: ProcessFormSubmitStatus;\n moduleKey: string;\n operationKey: string;\n recordId: number | null;\n levelId: number | null;\n levelDataId: number | null;\n requestSchemaId?: number | null;\n requestId?: number | null;\n resultModuleKey?: string | null;\n resultModuleId?: number | null;\n record?: ProcessFormSubmitRecord | null;\n}\n\nexport interface ProcessFormSubmitRecord {\n fields: ProcessFormSubmitRecordField[];\n}\n\nexport interface ProcessFormSubmitRecordField {\n id: number;\n key: string;\n normalizedKey: string;\n label: string;\n viewType: string;\n configuration: Record<string, unknown> | null;\n source: string;\n order: number;\n isRequired: boolean;\n isSystem: boolean;\n raw: any;\n value: any;\n display?: string | null;\n}\n\n// ============================================================================\n// Values & Context\n// ============================================================================\n\nexport interface ProcessFormValue {\n propertyKey: string;\n rawValue?: any;\n value: any;\n metadata?: ProcessFormValueMetadata;\n}\n\nexport interface ProcessFormValueMetadata {\n propertyId: number;\n key: string;\n viewType: string;\n source: string;\n}\n\nexport interface ProcessFormContext {\n moduleKey: string;\n operationKey: string;\n moduleId: number | null;\n levelId: number | null;\n levelDataId: number | null;\n moduleDataId: number | null;\n requestSchemaId: number | null;\n requestId: number | null;\n stepId: number | null;\n stepSchemaId: number | null;\n preview: boolean;\n}\n\n// ============================================================================\n// Form Configuration (runtime shape — no _pending/_deleting)\n// ============================================================================\n\nexport type ClientFieldWidth = '25' | '50' | '100';\nexport type ClientFormRenderMode =\n | 'sections'\n | 'steps'\n | 'tabs'\n | 'wizard'\n | undefined;\n\nexport interface ClientFormConfiguration {\n isActive?: boolean;\n renderMode?: ClientFormRenderMode;\n sections: ClientFormSection[];\n validations?: ClientValidationRule[];\n}\n\nexport interface ClientFormSection {\n id: string;\n name: {\n en: string;\n ar: string;\n };\n order: number;\n fields: ClientFormField[];\n}\n\nexport interface ClientFormField {\n id: string;\n sectionId: string;\n propertyKey: string;\n /** Runtime property metadata returned by the API */\n propertyMetadata: ClientPropertyItem;\n width: ClientFieldWidth;\n order: number;\n hiddenInCreation?: boolean;\n hiddenInEditForm?: boolean;\n isRequired?: boolean;\n isRead?: boolean;\n isWrite?: boolean;\n showConditionalDisplayFormula?: boolean;\n conditionalDisplayFormula?: string;\n}\n\nexport interface ClientPropertyItem {\n key: string;\n propertyId?: number;\n isCalculated?: boolean;\n name:\n | string\n | {\n display?: string;\n en?: string;\n ar?: string;\n [k: string]: string | undefined;\n };\n viewType?: string;\n source?: string;\n configuration?: Record<string, unknown> | null;\n [key: string]: any;\n}\n\nexport interface ClientFormTranslatableValue {\n display?: string;\n en?: string;\n ar?: string;\n [key: string]: string | undefined;\n}\n\nexport interface ClientValidationRule {\n id: string | number;\n formulaTokens: string;\n formulaText: string;\n message: {\n en: string;\n ar: string;\n };\n severity: 'error' | 'warning';\n enabled: boolean;\n}\n\n// ============================================================================\n// Lookup Definitions (passed as input to ClientForm)\n// ============================================================================\n\nexport interface ClientLookup {\n id: number;\n key: string;\n name: { display?: string; ar?: string; en?: string };\n items: ClientLookupItem[];\n}\n\nexport interface ClientLookupItem {\n id: number;\n lookupId: number;\n key: string;\n name: { display?: string; ar?: string; en?: string };\n description?: { display?: string; ar?: string; en?: string };\n color?: string;\n order: number;\n}\n\n// ============================================================================\n// Legacy Command Interception\n// ============================================================================\n\nexport interface FormRequiredInterception {\n requestSchemaId: number;\n operationType: OperationType;\n status: 'FormRequired';\n message: string;\n levelId: number;\n levelDataId: number;\n moduleDataId: number;\n}\n\n/**\n * Type guard to detect a FormRequired interception response from legacy commands.\n * Use in HTTP interceptors to redirect to process-form runtime flow.\n */\nexport function isFormRequiredInterception(\n response: any,\n): response is FormRequiredInterception {\n return (\n response?.status === 'FormRequired' &&\n typeof response?.requestSchemaId === 'number'\n );\n}\n","// Client Form - Runtime process form component\r\nexport * from './client-form';\r\nexport * from './models/client-form.model';\r\nexport * from './services/client-form-api.service';\r\nexport * from './services/client-form-state.service';\r\nexport * from './utils/form-config-mapper';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-forms-client-form.mjs","sources":["../../../../packages/masterteam/forms/client-form/services/client-form-api.service.ts","../../../../packages/masterteam/forms/client-form/services/client-form-state.service.ts","../../../../packages/masterteam/forms/client-form/utils/form-config-mapper.ts","../../../../packages/masterteam/forms/client-form/client-form.ts","../../../../packages/masterteam/forms/client-form/client-form.html","../../../../packages/masterteam/forms/client-form/models/client-form.model.ts","../../../../packages/masterteam/forms/client-form/public-api.ts","../../../../packages/masterteam/forms/client-form/masterteam-forms-client-form.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport type {\r\n Response,\r\n ProcessFormLoadRequest,\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitRequest,\r\n ProcessFormSubmitResponse,\r\n ProcessFormValidationRuntimeResult,\r\n} from '../models/client-form.model';\r\n\r\n/**\r\n * Stateless HTTP service for process-forms runtime APIs.\r\n * Root-provided — safe to share across multiple ClientForm instances.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientFormApiService {\r\n private readonly http = inject(HttpClient);\r\n\r\n /**\r\n * Load form configuration and values for a given operation context.\r\n * Backend determines mode (Approval vs Direct) based on published schema.\r\n */\r\n load(\r\n request: ProcessFormLoadRequest,\r\n ): Observable<Response<ProcessFormLoadResponse>> {\r\n return this.http.post<Response<ProcessFormLoadResponse>>(\r\n 'process-form-load',\r\n request,\r\n );\r\n }\r\n\r\n /**\r\n * Submit form values. Result depends on mode:\r\n * - Approval → status: 'PendingApproval'\r\n * - Direct → status: 'Executed'\r\n */\r\n submit(\r\n request: ProcessFormSubmitRequest,\r\n ): Observable<Response<ProcessFormSubmitResponse>> {\r\n return this.http.post<Response<ProcessFormSubmitResponse>>(\r\n 'process-submit',\r\n request,\r\n );\r\n }\r\n\r\n /**\r\n * Validate the exact submit payload against backend-owned form rules\r\n * before the real submit call.\r\n */\r\n validate(\r\n request: ProcessFormSubmitRequest,\r\n ): Observable<Response<ProcessFormValidationRuntimeResult>> {\r\n return this.http.post<Response<ProcessFormValidationRuntimeResult>>(\r\n 'process-submit/validate',\r\n request,\r\n );\r\n }\r\n}\r\n","import { Injectable, signal, computed } from '@angular/core';\r\n\r\nimport type {\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitResponse,\r\n ProcessFormValue,\r\n ProcessFormContext,\r\n ProcessFormMode,\r\n ProcessFormSource,\r\n ClientFormConfiguration,\r\n} from '../models/client-form.model';\r\n\r\n/**\r\n * Per-instance signal-based state for ClientForm.\r\n *\r\n * NOT providedIn root — each ClientForm component provides its own instance\r\n * via `providers: [ClientFormStateService]`, enabling multiple independent\r\n * forms on the same page.\r\n */\r\n@Injectable()\r\nexport class ClientFormStateService {\r\n // ============================================================================\r\n // Core State Signals\r\n // ============================================================================\r\n\r\n readonly loading = signal(false);\r\n readonly submitting = signal(false);\r\n readonly error = signal<string | null>(null);\r\n readonly submitError = signal<string | null>(null);\r\n readonly loadResponse = signal<ProcessFormLoadResponse | null>(null);\r\n readonly submitResponse = signal<ProcessFormSubmitResponse | null>(null);\r\n\r\n // ============================================================================\r\n // Derived Computeds — Load Response\r\n // ============================================================================\r\n\r\n readonly isLoaded = computed(() => !!this.loadResponse());\r\n\r\n readonly mode = computed<ProcessFormMode | null>(\r\n () => this.loadResponse()?.mode ?? null,\r\n );\r\n\r\n readonly isApproval = computed(() => this.mode() === 'Approval');\r\n readonly isDirect = computed(() => this.mode() === 'Direct');\r\n\r\n readonly formSource = computed<ProcessFormSource | null>(\r\n () => this.loadResponse()?.formSource ?? null,\r\n );\r\n\r\n readonly requiresForm = computed(\r\n () => this.loadResponse()?.requiresForm ?? false,\r\n );\r\n\r\n readonly formConfiguration = computed<ClientFormConfiguration | null>(\r\n () => this.loadResponse()?.formConfiguration ?? null,\r\n );\r\n\r\n readonly values = computed<ProcessFormValue[]>(\r\n () => this.loadResponse()?.values ?? [],\r\n );\r\n\r\n readonly context = computed<ProcessFormContext | null>(\r\n () => this.loadResponse()?.context ?? null,\r\n );\r\n\r\n readonly stepName = computed<string | null>(\r\n () => this.loadResponse()?.stepName ?? null,\r\n );\r\n\r\n readonly requestSchemaId = computed<number | null>(\r\n () => this.loadResponse()?.requestSchemaId ?? null,\r\n );\r\n\r\n readonly requestId = computed<number | null>(\r\n () => this.loadResponse()?.requestId ?? null,\r\n );\r\n\r\n readonly stepId = computed<number | null>(\r\n () => this.loadResponse()?.stepId ?? null,\r\n );\r\n\r\n readonly stepSchemaId = computed<number | null>(\r\n () => this.loadResponse()?.stepSchemaId ?? null,\r\n );\r\n\r\n // ============================================================================\r\n // Derived Computeds — Value Categories\r\n // ============================================================================\r\n\r\n /** Process virtual fields (Request_Date, Step_Name, etc.) — read-only display */\r\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\r\n this.values().filter((v) => v.metadata?.source === 'ProcessVirtual'),\r\n );\r\n\r\n /** Editable form values (non-virtual) */\r\n readonly formValues = computed<ProcessFormValue[]>(() =>\r\n this.values().filter((v) => v.metadata?.source !== 'ProcessVirtual'),\r\n );\r\n\r\n // ============================================================================\r\n // Derived Computeds — Submit Response\r\n // ============================================================================\r\n\r\n readonly isSubmitted = computed(() => !!this.submitResponse());\r\n\r\n readonly submitStatus = computed(() => this.submitResponse()?.status ?? null);\r\n\r\n readonly isPendingApproval = computed(\r\n () => this.submitStatus() === 'PendingApproval',\r\n );\r\n\r\n readonly isExecuted = computed(() => this.submitStatus() === 'Executed');\r\n\r\n // ============================================================================\r\n // State Mutations\r\n // ============================================================================\r\n\r\n setLoadResponse(response: ProcessFormLoadResponse): void {\r\n this.loadResponse.set(response);\r\n this.error.set(null);\r\n }\r\n\r\n setSubmitResponse(response: ProcessFormSubmitResponse): void {\r\n this.submitResponse.set(response);\r\n this.submitError.set(null);\r\n }\r\n\r\n setError(message: string): void {\r\n this.error.set(message);\r\n this.loading.set(false);\r\n }\r\n\r\n setSubmitError(message: string): void {\r\n this.submitError.set(message);\r\n this.submitting.set(false);\r\n }\r\n\r\n reset(): void {\r\n this.loading.set(false);\r\n this.submitting.set(false);\r\n this.error.set(null);\r\n this.submitError.set(null);\r\n this.loadResponse.set(null);\r\n this.submitResponse.set(null);\r\n }\r\n}\r\n","import type {\n DynamicFormConfig,\n DynamicFieldConfig,\n} from '@masterteam/components';\nimport type { EntityData, EntitySize } from '@masterteam/components/entities';\nimport {\n REQUEST_CONTEXT,\n ValidatorConfig,\n TextFieldConfig,\n EditorFieldConfig,\n SelectFieldConfig,\n MultiSelectFieldConfig,\n DateFieldConfig,\n NumberFieldConfig,\n SliderFieldConfig,\n ToggleFieldConfig,\n UserSearchFieldConfig,\n UploadFileFieldConfig,\n LookupMatrixFieldConfig,\n SchemaConnectionFieldConfig,\n SchedulePredecessorFieldConfig,\n} from '@masterteam/components';\nimport { HttpContext } from '@angular/common/http';\n\nimport type {\n ClientFormConfiguration,\n ClientFormField,\n ClientPropertyItem,\n ClientLookup,\n ProcessFormValue,\n ProcessFormLoadResponse,\n ProcessFormSubmitField,\n ProcessFormContext,\n} from '../models/client-form.model';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst WIDTH_TO_COLSPAN: Record<string, number> = {\n '25': 3,\n '50': 6,\n '100': 12,\n};\n\nconst WIDTH_TO_ENTITY_SIZE: Record<string, EntitySize> = {\n '25': 6,\n '50': 12,\n '100': 24,\n};\n\nexport interface ClientFormPreviewSection {\n key: string;\n label: string;\n order: number;\n entities: EntityData[];\n}\n\n// ============================================================================\n// Public Mapper Functions\n// ============================================================================\n\n/**\n * Convert a runtime FormConfiguration into a DynamicFormConfig\n * that can be passed directly to `<mt-dynamic-form>`.\n *\n * @param config The form configuration from the load API\n * @param lang Current UI language ('en' | 'ar')\n * @param mode 'create' or 'edit' — filters hidden fields accordingly\n * @param lookups Available lookup definitions for resolving Lookup/LookupMultiSelect options\n */\nexport function mapToDynamicFormConfig(\n config: ClientFormConfiguration,\n lang: 'en' | 'ar' = 'en',\n mode: 'create' | 'edit' = 'create',\n lookups: ClientLookup[] = [],\n context: ProcessFormContext | null = null,\n readonly = false,\n): DynamicFormConfig {\n return {\n sections: config.sections\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((section) => {\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\n\n const visibleFields = section.fields\n .filter((field) => {\n // isRead=false → completely hidden\n if (field.isWrite !== true && field.isRead === false) return false;\n if (mode === 'create') return !field.hiddenInCreation;\n return !field.hiddenInEditForm;\n })\n .sort((a, b) => a.order - b.order);\n\n return {\n key: section.id,\n label: sectionName,\n type: 'header' as const,\n columns: 12,\n order: section.order,\n fields: visibleFields.map((field) =>\n mapFieldToConfig(field, lang, lookups, context, readonly),\n ),\n };\n })\n .filter((section) => section.fields.length > 0),\n };\n}\n\n/**\n * Convert API property values into a flat key-value object\n * suitable for `formControl.patchValue()`.\n *\n * Only includes non-virtual (editable) values.\n */\nexport function mapValuesToFormValue(\n values: ProcessFormValue[],\n config?: ClientFormConfiguration | null,\n): Record<string, any> {\n const result: Record<string, any> = {};\n const fieldMap = config ? buildFieldValueMap(config) : null;\n\n for (const v of values) {\n if (v.metadata?.source === 'ProcessVirtual') continue;\n\n const targetFieldKey =\n resolveValueTargetKey(v, fieldMap) ?? v.propertyKey ?? null;\n if (!targetFieldKey) continue;\n\n result[targetFieldKey] = resolveLoadedFieldValue(v);\n }\n\n return result;\n}\n\n/**\n * Convert the current form value back into the submit payload format.\n *\n * Uses form configuration metadata (same source used to render fields)\n * to map `requestPropertyId` and `viewType`.\n */\nexport function mapFormValueToSubmitFields(\n formValue: Record<string, any>,\n loadResponse: ProcessFormLoadResponse,\n): ProcessFormSubmitField[] {\n const metadataByKey = new Map<\n string,\n { propertyId?: number; viewType?: string }\n >();\n\n for (const section of loadResponse.formConfiguration?.sections ?? []) {\n for (const field of section.fields ?? []) {\n const { propertyId, viewType } = resolveFieldMeta(field);\n metadataByKey.set(field.propertyKey, {\n propertyId,\n viewType,\n });\n }\n }\n\n return Object.entries(formValue)\n .filter(([propertyKey, value]) => {\n if (value === undefined || value === null) return false;\n return metadataByKey.get(propertyKey)?.viewType !== 'LookupMatrix';\n })\n .map(([propertyKey, value]) => {\n const meta = metadataByKey.get(propertyKey);\n const normalizedValue = normalizeSubmitValue(value, meta?.viewType);\n if (normalizedValue === undefined || normalizedValue === null) {\n return null;\n }\n\n const submitField: ProcessFormSubmitField = {\n propertyKey,\n value: normalizedValue,\n };\n\n if (meta?.propertyId) {\n submitField.requestPropertyId = meta.propertyId;\n }\n\n return submitField;\n })\n .filter((value): value is ProcessFormSubmitField => !!value);\n}\n\nexport function getPreviewOnlyFieldKeys(\n config: ClientFormConfiguration,\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): string[] {\n return config.sections.flatMap((section) =>\n (section.fields ?? [])\n .filter(\n (field) =>\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\n )\n .map((field) => field.propertyKey),\n );\n}\n\nexport function mapPreviewFieldsToEntities(\n config: ClientFormConfiguration,\n values: ProcessFormValue[],\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): EntityData[] {\n return mapPreviewSectionsToEntities(\n config,\n values,\n 'en',\n mode,\n readonly,\n ).flatMap((section) => section.entities);\n}\n\nexport function mapPreviewSectionsToEntities(\n config: ClientFormConfiguration,\n values: ProcessFormValue[],\n lang: 'en' | 'ar' = 'en',\n mode: 'create' | 'edit' = 'create',\n readonly = false,\n): ClientFormPreviewSection[] {\n const fieldMap = buildFieldValueMap(config);\n const previewValueByKey = new Map<string, any>();\n\n for (const value of values) {\n if (value.metadata?.source === 'ProcessVirtual') continue;\n\n const targetFieldKey =\n resolveValueTargetKey(value, fieldMap) ?? value.propertyKey ?? null;\n if (!targetFieldKey) continue;\n\n previewValueByKey.set(targetFieldKey, value.value);\n }\n\n return config.sections\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((section) => ({\n key: section.id,\n label: section.name[lang] ?? section.name.en ?? '',\n order: section.order,\n entities: (section.fields ?? [])\n .filter(\n (field) =>\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\n )\n .sort((a, b) => a.order - b.order)\n .map((field) => {\n const property = field.propertyMetadata;\n\n return {\n ...(property as EntityData),\n name: (property.name as any)?.display,\n key: property.key ?? field.propertyKey,\n value: previewValueByKey.get(field.propertyKey),\n order: section.order * 1000 + field.order,\n configuration: {\n ...(property.configuration as Record<string, unknown>),\n size: WIDTH_TO_ENTITY_SIZE[field.width] ?? 24,\n labelPosition: 'top',\n },\n } satisfies EntityData;\n }),\n }))\n .filter((section) => section.entities.length > 0);\n}\n\n// ============================================================================\n// Internal Helpers\n// ============================================================================\n\nfunction isFieldVisible(\n field: ClientFormField,\n mode: 'create' | 'edit',\n): boolean {\n if (!isFieldReadable(field) && field.isWrite !== true) return false;\n if (mode === 'create') return !field.hiddenInCreation;\n return !field.hiddenInEditForm;\n}\n\nfunction isPreviewOnlyField(field: ClientFormField, readonly = false): boolean {\n return isFieldReadable(field) && (readonly || field.isWrite === false);\n}\n\nfunction isFieldReadable(field: ClientFormField): boolean {\n return field.isRead !== false || field.isWrite === true;\n}\n\nfunction isCalculatedField(field: ClientFormField): boolean {\n return field.propertyMetadata?.isCalculated === true;\n}\n\nfunction resolveFieldMeta(field: ClientFormField): {\n property: ClientPropertyItem;\n propertyId?: number;\n viewType: string;\n} {\n const property = field.propertyMetadata;\n return {\n property,\n propertyId: property?.propertyId,\n viewType: property?.viewType ?? 'Text',\n };\n}\n\nfunction mapFieldToConfig(\n field: ClientFormField,\n lang: 'en' | 'ar',\n lookups: ClientLookup[],\n context: ProcessFormContext | null,\n readonly = false,\n): DynamicFieldConfig {\n const { property: prop, viewType } = resolveFieldMeta(field);\n const label =\n (prop?.name as { display?: string } | undefined)?.display ??\n field.propertyKey;\n const colSpan = WIDTH_TO_COLSPAN[field.width] ?? 12;\n\n const base = {\n key: field.propertyKey,\n label,\n colSpan,\n order: field.order,\n placeholder: label,\n required: field.isRequired ?? false,\n disabled: isCalculatedField(field),\n readonly: readonly || field.isWrite === false,\n validators: field.isRequired\n ? [ValidatorConfig.required(`${label} is required`)]\n : [],\n formulaCondition: buildFormulaCondition(field),\n };\n\n switch (viewType) {\n // ── Text-like ──────────────────────────────────────────────\n case 'Text':\n case 'EditableListView':\n case 'LookupLog':\n return new TextFieldConfig(base);\n\n case 'LongText':\n return new EditorFieldConfig(base);\n\n // ── Numeric ───────────────────────────────────────────────\n case 'Number':\n return new NumberFieldConfig(base);\n\n case 'Currency':\n return new NumberFieldConfig({\n ...base,\n useGrouping: true,\n });\n\n case 'Percentage':\n return new SliderFieldConfig({\n ...base,\n min: 0,\n max: 100,\n unit: '%',\n });\n\n // ── Date / Time ───────────────────────────────────────────\n case 'Date':\n return new DateFieldConfig({ ...base, showTime: false });\n\n case 'DateTime':\n return new DateFieldConfig({ ...base, showTime: true });\n\n case 'Time':\n return new DateFieldConfig({ ...base, showTime: true });\n\n // ── Boolean ───────────────────────────────────────────────\n case 'Checkbox':\n return new ToggleFieldConfig(base);\n\n // ── File ──────────────────────────────────────────────────\n case 'Attachment':\n return new UploadFileFieldConfig(base);\n\n // ── User Search ───────────────────────────────────────────\n case 'User':\n return new UserSearchFieldConfig({\n ...base,\n apiUrl: 'Identity/users',\n context: new HttpContext().set(REQUEST_CONTEXT, {\n useBaseUrl: false,\n }),\n });\n\n // ── Lookup (single select) ────────────────────────────────\n case 'Lookup': {\n const items = resolveLookupOptions(prop, lookups);\n return new SelectFieldConfig({\n ...base,\n options: items,\n optionLabel: 'label',\n optionValue: 'value',\n filter: items.length > 10,\n showClear: !(field.isRequired ?? false),\n });\n }\n\n // ── Lookup (multi select) ─────────────────────────────────\n case 'LookupMultiSelect': {\n const items = resolveLookupOptions(prop, lookups);\n return new MultiSelectFieldConfig({\n ...base,\n options: items,\n optionLabel: 'label',\n optionValue: 'value',\n filter: items.length > 10,\n display: 'chip',\n });\n }\n\n // ── Other select-based types ──────────────────────────────\n case 'Status':\n case 'InternalModule':\n case 'DynamicList':\n case 'API':\n case 'Location': {\n const options = extractOptionsFromProperty(prop);\n return new SelectFieldConfig({\n ...base,\n options: options ?? [],\n optionLabel: 'label',\n optionValue: 'value',\n });\n }\n\n case 'LookupMatrix':\n return buildLookupMatrixFieldConfig(base, prop, lookups);\n\n // ── Connection (level-to-level) ─────────────────────────\n case 'Connection': {\n const connectionConfig = prop?.configuration ?? {};\n return new SchemaConnectionFieldConfig({\n ...base,\n configuration: connectionConfig,\n });\n }\n case 'Predecessor':\n return new SchedulePredecessorFieldConfig({\n ...base,\n configuration: prop?.configuration ?? null,\n runtimeContext: context\n ? {\n levelId: context.levelId,\n levelDataId: context.levelDataId,\n moduleDataId: context.moduleDataId,\n }\n : null,\n });\n\n // ── Fallback ──────────────────────────────────────────────\n default:\n return new TextFieldConfig(base);\n }\n}\n\nfunction buildFormulaCondition(\n field: ClientFormField,\n): { formulaTokens: string; formulaText?: string; mode?: 'auto' } | undefined {\n if (!field.showConditionalDisplayFormula) return undefined;\n const formulaTokens = (field.conditionalDisplayFormula ?? '').trim();\n if (!formulaTokens) return undefined;\n\n return {\n formulaTokens,\n formulaText: field.conditionalDisplayFormula ?? '',\n mode: 'auto',\n };\n}\n\n/**\n * Resolve lookup items for Lookup / LookupMultiSelect viewTypes.\n *\n * Reads `configuration.lookup` (the lookup ID) from the property metadata,\n * finds the matching lookup definition, and maps its items to select options.\n */\nfunction resolveLookupOptions(\n prop: ClientPropertyItem | undefined,\n lookups: ClientLookup[],\n): ResolvedLookupOption[] {\n return resolveLookupOptionsById(\n coerceLookupId(prop?.configuration?.['lookup']),\n lookups,\n );\n}\n\n/**\n * Fallback option extractor for non-lookup select types\n * (Status, InternalModule, DynamicList, API, etc.).\n */\nfunction extractOptionsFromProperty(\n property: ClientPropertyItem | undefined,\n): { label: string; value: any }[] | null {\n if (!property?.configuration) return null;\n\n const config = property.configuration;\n\n if (Array.isArray(config['options'])) {\n return config['options'] as { label: string; value: any }[];\n }\n\n if (Array.isArray(config['items'])) {\n return (config['items'] as any[]).map((item) => ({\n label:\n typeof item.name === 'string'\n ? item.name\n : (item.name?.['en'] ?? item.label ?? String(item.value)),\n value: item.id ?? item.value ?? item.key,\n }));\n }\n\n return null;\n}\n\ntype ResolvedLookupOption = {\n id?: number | string;\n key?: string;\n label: string;\n value: any;\n color?: string | null;\n description?: string;\n};\n\nfunction resolveLookupOptionsById(\n lookupId: number | null,\n lookups: ClientLookup[],\n): ResolvedLookupOption[] {\n if (!lookupId || !lookups.length) return [];\n\n const lookup = lookups.find((item) => item.id === lookupId);\n if (!lookup) return [];\n\n return lookup.items\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((item) => ({\n id: item.id,\n key: item.key,\n label: item.name?.display ?? item.name?.en ?? item.key,\n value: item.key,\n color: item.color ?? null,\n description:\n item.description?.display ?? item.description?.en ?? undefined,\n }));\n}\n\nfunction resolveLookupNameById(\n lookupId: number | null,\n lookups: ClientLookup[],\n): string {\n if (!lookupId) return '';\n\n const lookup = lookups.find((item) => item.id === lookupId);\n return lookup?.name?.display ?? lookup?.name?.en ?? lookup?.key ?? '';\n}\n\nfunction buildLookupMatrixFieldConfig(\n base: {\n key: string;\n label: string;\n colSpan: number;\n order: number;\n placeholder: string;\n required: boolean;\n disabled: boolean;\n readonly: boolean;\n validators: ValidatorConfig[];\n formulaCondition:\n | { formulaTokens: string; formulaText?: string; mode?: 'auto' }\n | undefined;\n },\n prop: ClientPropertyItem | undefined,\n lookups: ClientLookup[],\n): LookupMatrixFieldConfig {\n const configuration = (prop?.configuration ?? {}) as Record<string, unknown>;\n const xLookupId = coerceLookupId(configuration['xlookupSource']);\n const yLookupId = coerceLookupId(configuration['ylookupSource']);\n const zLookupId = coerceLookupId(configuration['zlookupId']);\n\n const xOptions = resolveLookupOptionsById(xLookupId, lookups);\n const yOptions = resolveLookupOptionsById(yLookupId, lookups);\n const zOptions = resolveLookupOptionsById(zLookupId, lookups);\n const zOptionsById = new Map(\n zOptions\n .filter((item) => item.id != null)\n .map((item) => [String(item.id), item] as const),\n );\n\n const rawCells = Array.isArray(configuration['lookupsMatrix'])\n ? (configuration['lookupsMatrix'] as Array<Record<string, unknown>>)\n : [];\n\n return new LookupMatrixFieldConfig({\n ...base,\n required: false,\n xFieldKey: String(configuration['xPropertyLookupKey'] ?? ''),\n yFieldKey: String(configuration['yPropertyLookupKey'] ?? ''),\n xAxisLabel: resolveLookupNameById(xLookupId, lookups),\n yAxisLabel: resolveLookupNameById(yLookupId, lookups),\n xOptions,\n yOptions,\n cells: rawCells.map((cell) => {\n const zOption = zOptionsById.get(String(cell['value'] ?? ''));\n\n return {\n row: Number(cell['row'] ?? 0),\n column: Number(cell['column'] ?? 0),\n xLookupItemId: String(cell['xValue'] ?? ''),\n yLookupItemId: String(cell['yValue'] ?? ''),\n zLookupItemId: cell['value'] == null ? null : String(cell['value']),\n label: zOption?.label ?? String(cell['value'] ?? ''),\n color: zOption?.color ?? null,\n };\n }),\n });\n}\n\nfunction coerceLookupId(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n return null;\n}\n\nfunction normalizeSubmitValue(value: any, viewType?: string): any {\n switch (viewType) {\n case 'User':\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n return value['id'] ?? value;\n }\n return value;\n\n default:\n return value;\n }\n}\n\nfunction resolveLoadedFieldValue(value: ProcessFormValue): any {\n const resolvedValue =\n value.metadata?.viewType === 'User'\n ? value.value\n : (value.rawValue ?? value.value);\n\n switch (value.metadata?.viewType) {\n case 'Date':\n case 'DateTime':\n case 'Time':\n return coerceToDate(resolvedValue);\n\n default:\n return resolvedValue;\n }\n}\n\nfunction coerceToDate(value: any): any {\n if (value === null || value === undefined || value === '') {\n return value;\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n const coerced = new Date(value);\n return Number.isNaN(coerced.getTime()) ? value : coerced;\n}\n\ntype FieldValueMeta = {\n key: string;\n propertyId?: number;\n};\n\ntype FieldValueMap = {\n fieldsByKey: Map<string, FieldValueMeta>;\n propertyIdToKey: Map<number, string>;\n aliasToKey: Map<string, string>;\n};\n\nfunction buildFieldValueMap(config: ClientFormConfiguration): FieldValueMap {\n const fieldsByKey = new Map<string, FieldValueMeta>();\n const propertyIdCandidates = new Map<number, Set<string>>();\n const aliasCandidates = new Map<string, Set<string>>();\n\n for (const section of config.sections ?? []) {\n for (const field of section.fields ?? []) {\n const { propertyId } = resolveFieldMeta(field);\n const fieldMeta: FieldValueMeta = {\n key: field.propertyKey,\n propertyId,\n };\n\n fieldsByKey.set(field.propertyKey, fieldMeta);\n\n if (propertyId != null) {\n if (!propertyIdCandidates.has(propertyId)) {\n propertyIdCandidates.set(propertyId, new Set<string>());\n }\n propertyIdCandidates.get(propertyId)!.add(field.propertyKey);\n }\n\n const aliases = new Set<string>([\n field.propertyKey,\n stripTemplatePrefix(field.propertyKey),\n ]);\n\n const property = field.propertyMetadata;\n if (property?.key) {\n aliases.add(property.key);\n aliases.add(stripTemplatePrefix(property.key));\n }\n\n aliases.forEach((alias) => {\n if (!alias) return;\n if (!aliasCandidates.has(alias)) {\n aliasCandidates.set(alias, new Set<string>());\n }\n aliasCandidates.get(alias)!.add(field.propertyKey);\n });\n }\n }\n\n const propertyIdToKey = new Map<number, string>();\n propertyIdCandidates.forEach((keys, propertyId) => {\n if (keys.size !== 1) return;\n propertyIdToKey.set(propertyId, [...keys][0]);\n });\n\n const aliasToKey = new Map<string, string>();\n aliasCandidates.forEach((keys, alias) => {\n if (keys.size !== 1) return;\n aliasToKey.set(alias, [...keys][0]);\n });\n\n return {\n fieldsByKey,\n propertyIdToKey,\n aliasToKey,\n };\n}\n\nfunction resolveValueTargetKey(\n value: ProcessFormValue,\n fieldMap: FieldValueMap | null,\n): string | null {\n if (!fieldMap) {\n return value.propertyKey ?? null;\n }\n\n const exactCandidates = [value.propertyKey, value.metadata?.key].filter(\n (candidate): candidate is string => !!candidate,\n );\n\n for (const candidate of exactCandidates) {\n if (fieldMap.fieldsByKey.has(candidate)) {\n return candidate;\n }\n }\n\n const propertyId = value.metadata?.propertyId;\n if (propertyId != null && fieldMap.propertyIdToKey.has(propertyId)) {\n return fieldMap.propertyIdToKey.get(propertyId)!;\n }\n\n const aliasCandidates = exactCandidates.flatMap((candidate) => [\n candidate,\n stripTemplatePrefix(candidate),\n ]);\n\n for (const candidate of aliasCandidates) {\n if (!candidate) continue;\n if (fieldMap.aliasToKey.has(candidate)) {\n return fieldMap.aliasToKey.get(candidate)!;\n }\n }\n\n return null;\n}\n\nfunction stripTemplatePrefix(value: string): string {\n return value.replace(/^template_\\d+_/, '');\n}\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EMPTY, Subscription, map, switchMap } from 'rxjs';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\r\nimport { Button } from '@masterteam/components/button';\r\nimport { EntitiesPreview } from '@masterteam/components/entities';\r\nimport { Tabs, type OptionItem } from '@masterteam/components/tabs';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Icon } from '@masterteam/icons';\r\nimport type {\r\n DynamicFormConfig,\r\n FormulaRuntimeMessage,\r\n} from '@masterteam/components';\r\n\r\nimport { ClientFormApiService } from './services/client-form-api.service';\r\nimport { ClientFormStateService } from './services/client-form-state.service';\r\nimport {\r\n getPreviewOnlyFieldKeys,\r\n mapPreviewSectionsToEntities,\r\n mapToDynamicFormConfig,\r\n mapValuesToFormValue,\r\n mapFormValueToSubmitFields,\r\n} from './utils/form-config-mapper';\r\n\r\nimport type {\r\n ClientFormFooterState,\r\n ClientFormResolvedRenderMode,\r\n ProcessFormLoadRequest,\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitRequest,\r\n ProcessFormSubmitResponse,\r\n ProcessFormSubmitField,\r\n ProcessFormValidationRuleResult,\r\n ProcessFormMode,\r\n ProcessFormSource,\r\n ProcessFormValue,\r\n ClientLookup,\r\n ClientFormSubmitRequestMapper,\r\n ClientFormTranslatableValue,\r\n} from './models/client-form.model';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\n\r\ntype StepTimelineState = 'completed' | 'current' | 'upcoming';\r\n\r\ninterface StepTimelineItem {\r\n key: string;\r\n label: string;\r\n value: number;\r\n state: StepTimelineState;\r\n selected: boolean;\r\n beforeLineActive: boolean;\r\n afterLineActive: boolean;\r\n}\r\n\r\n/**\r\n * Client Form — Runtime process form component.\r\n *\r\n * Self-contained, signal-based (no NGXS). Each instance manages its own state\r\n * via a component-scoped `ClientFormStateService`.\r\n *\r\n * Submit and reset actions stay external. Step navigation buttons are optional\r\n * and can be hidden with `showInternalStepActions`.\r\n *\r\n * Parent can control actions via `viewChild()`:\r\n *\r\n * ```html\r\n * <mt-client-form #processForm [moduleKey]=\"'Risk'\" [operationKey]=\"'CloseRisk'\" />\r\n * <button (click)=\"processForm.load()\">Load</button>\r\n * <button (click)=\"processForm.submit()\">Submit</button>\r\n * ```\r\n *\r\n * Or programmatically:\r\n * ```typescript\r\n * readonly processForm = viewChild.required(ClientForm);\r\n * this.processForm().load();\r\n * this.processForm().submit();\r\n * ```\r\n */\r\n@Component({\r\n selector: 'mt-client-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n Button,\r\n EntitiesPreview,\r\n DynamicForm,\r\n Tabs,\r\n Skeleton,\r\n Icon,\r\n TranslocoDirective,\r\n ],\r\n providers: [ClientFormStateService],\r\n templateUrl: './client-form.html',\r\n styleUrls: ['./client-form.scss'],\r\n})\r\nexport class ClientForm implements OnDestroy {\r\n private readonly api = inject(ClientFormApiService);\r\n protected readonly state = inject(ClientFormStateService);\r\n\r\n private loadSub?: Subscription;\r\n private submitSub?: Subscription;\r\n private formValueSub?: Subscription;\r\n private readonly hasStartedLoad = signal(false);\r\n private readonly formRuntimeMessages = signal<FormulaRuntimeMessage[]>([]);\r\n private readonly submitValidationMessages = signal<FormulaRuntimeMessage[]>(\r\n [],\r\n );\r\n readonly runtimeMessages = computed(() => [\r\n ...this.formRuntimeMessages(),\r\n ...this.submitValidationMessages(),\r\n ]);\r\n private readonly translocoService = inject(TranslocoService);\r\n\r\n // ============================================================================\r\n // Public State Signals (for parent access via viewChild)\r\n // ============================================================================\r\n\r\n readonly submitting = computed(() => this.state.submitting());\r\n readonly submitError = computed(() => this.state.submitError());\r\n readonly isSubmitted = computed(() => this.state.isSubmitted());\r\n readonly isPendingApproval = computed(() => this.state.isPendingApproval());\r\n readonly isExecuted = computed(() => this.state.isExecuted());\r\n readonly isLoaded = computed(() => this.state.isLoaded());\r\n readonly loading = computed(() => this.state.loading());\r\n readonly runtimeErrors = computed(() =>\r\n this.runtimeMessages().filter((msg) => msg.severity === 'error'),\r\n );\r\n readonly runtimeWarnings = computed(() =>\r\n this.runtimeMessages().filter((msg) => msg.severity === 'warning'),\r\n );\r\n readonly currentStep = signal(1);\r\n\r\n // ============================================================================\r\n // Inputs — Required Context\r\n // ============================================================================\r\n\r\n readonly moduleKey = input.required<string>();\r\n readonly operationKey = input.required<string>();\r\n\r\n // ============================================================================\r\n // Inputs — Optional Context\r\n // ============================================================================\r\n\r\n readonly moduleId = input<number | string>();\r\n readonly levelId = input<number | string>();\r\n readonly levelDataId = input<number | string>();\r\n readonly moduleDataId = input<number | string>();\r\n readonly requestSchemaId = input<number>();\r\n readonly draftProcessId = input<number>();\r\n readonly preview = input(false);\r\n readonly returnUrl = input<string>();\r\n readonly submitRequestMapper = input<ClientFormSubmitRequestMapper | null>(\r\n null,\r\n );\r\n\r\n // ============================================================================\r\n // Inputs — UI Configuration\r\n // ============================================================================\r\n\r\n readonly readonly = input(false);\r\n readonly autoLoad = input(true);\r\n readonly formMode = input<'create' | 'edit'>('create');\r\n readonly renderMode = input<\r\n 'form' | 'steps' | 'tabs' | 'wizard' | undefined\r\n >();\r\n // Hide the built-in previous/next buttons when step actions are rendered by the parent.\r\n readonly showInternalStepActions = input<boolean>(true);\r\n readonly lang = signal(this.translocoService.getActiveLang() as 'en' | 'ar');\r\n readonly lookups = input<ClientLookup[]>([]);\r\n readonly ignoredFieldKeys = input<string[]>([]);\r\n readonly rtl = computed(() => this.lang() === 'ar');\r\n\r\n // ============================================================================\r\n // Outputs\r\n // ============================================================================\r\n\r\n readonly loaded = output<ProcessFormLoadResponse>();\r\n readonly submitted = output<ProcessFormSubmitResponse>();\r\n readonly errored = output<string>();\r\n readonly modeDetected = output<ProcessFormMode>();\r\n readonly formSourceDetected = output<ProcessFormSource>();\r\n readonly footerStateChanged = output<ClientFormFooterState>();\r\n\r\n // ============================================================================\r\n // Internal Form Control\r\n // ============================================================================\r\n\r\n readonly formControl = new FormControl<Record<string, any>>({});\r\n\r\n // ============================================================================\r\n // Computed — Dynamic Form Config\r\n // ============================================================================\r\n\r\n readonly formConfig = computed<DynamicFormConfig | null>(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return null;\r\n return mapToDynamicFormConfig(\r\n config,\r\n this.lang(),\r\n this.formMode(),\r\n this.lookups(),\r\n this.state.context(),\r\n this.readonly(),\r\n );\r\n });\r\n\r\n readonly initialValues = computed<Record<string, any>>(() => {\r\n return mapValuesToFormValue(\r\n this.state.formValues(),\r\n this.state.formConfiguration(),\r\n );\r\n });\r\n\r\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\r\n this.state.virtualFields(),\r\n );\r\n\r\n readonly hasVirtualFields = computed(() => this.virtualFields().length > 0);\r\n readonly previewFieldKeys = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n return [\r\n ...new Set([\r\n ...getPreviewOnlyFieldKeys(config, this.formMode(), this.readonly()),\r\n ...this.ignoredFieldKeys(),\r\n ]),\r\n ];\r\n });\r\n readonly previewEntitySections = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n const ignoredFieldKeys = new Set(this.ignoredFieldKeys());\r\n return mapPreviewSectionsToEntities(\r\n config,\r\n this.state.formValues(),\r\n this.lang(),\r\n this.formMode(),\r\n this.readonly(),\r\n )\r\n .map((section) => ({\r\n ...section,\r\n entities: section.entities.filter(\r\n (entity) => !entity.key || !ignoredFieldKeys.has(entity.key),\r\n ),\r\n }))\r\n .filter((section) => section.entities.length > 0);\r\n });\r\n readonly editableFormConfig = computed<DynamicFormConfig | null>(() => {\r\n if (this.readonly()) {\r\n return null;\r\n }\r\n\r\n const config = this.formConfig();\r\n if (!config) return null;\r\n\r\n const previewFieldKeys = new Set(this.previewFieldKeys());\r\n\r\n return {\r\n ...config,\r\n sections: config.sections\r\n .map((section) => ({\r\n ...section,\r\n fields: section.fields.filter(\r\n (field) => !field.key || !previewFieldKeys.has(field.key),\r\n ),\r\n }))\r\n .filter((section) =>\r\n section.fields.some((field) => field.type !== 'spacer'),\r\n ),\r\n };\r\n });\r\n readonly stepSections = computed(\r\n () => this.editableFormConfig()?.sections ?? [],\r\n );\r\n readonly hasEditableFormSections = computed(\r\n () => this.stepSections().length > 0,\r\n );\r\n readonly effectiveRenderMode = computed<'form' | 'steps' | 'tabs' | 'wizard'>(\r\n () => {\r\n const explicitRenderMode = this.renderMode();\r\n if (explicitRenderMode) return explicitRenderMode;\r\n\r\n const configRenderMode = this.state.formConfiguration()?.renderMode;\r\n if (\r\n configRenderMode === 'steps' ||\r\n configRenderMode === 'tabs' ||\r\n configRenderMode === 'wizard'\r\n ) {\r\n return configRenderMode;\r\n }\r\n\r\n return 'form';\r\n },\r\n );\r\n readonly stepsEnabled = computed(\r\n () =>\r\n this.effectiveRenderMode() === 'steps' && this.stepSections().length > 1,\r\n );\r\n readonly tabsEnabled = computed(\r\n () =>\r\n this.effectiveRenderMode() === 'tabs' && this.stepSections().length > 1,\r\n );\r\n readonly wizardEnabled = computed(\r\n () =>\r\n this.effectiveRenderMode() === 'wizard' && this.stepSections().length > 1,\r\n );\r\n readonly wizardFormConfig = computed<DynamicFormConfig | null>(() => {\r\n const config = this.editableFormConfig();\r\n if (!config) return null;\r\n return {\r\n ...config,\r\n sections: config.sections.map((s) => ({ ...s, label: undefined })),\r\n };\r\n });\r\n readonly sectionNavigationEnabled = computed(\r\n () => this.stepsEnabled() || this.tabsEnabled() || this.wizardEnabled(),\r\n );\r\n readonly tabOptions = computed<OptionItem[]>(() =>\r\n this.stepSections().map((section, index) => ({\r\n label: section.label || `Tab ${index + 1}`,\r\n value: index + 1,\r\n })),\r\n );\r\n readonly stepTimeline = computed<StepTimelineItem[]>(() => {\r\n const sections = this.stepSections();\r\n const currentStep = this.currentStep();\r\n\r\n return sections.map((section, index) => {\r\n const value = index + 1;\r\n const state = this.resolveStepTimelineState(value, currentStep);\r\n\r\n return {\r\n key: section.key || `section-${index}`,\r\n label: section.label || `Step ${value}`,\r\n value,\r\n state,\r\n selected: value === currentStep,\r\n beforeLineActive: index > 0 && value <= currentStep,\r\n afterLineActive: index < sections.length - 1 && value < currentStep,\r\n };\r\n });\r\n });\r\n readonly visibleSectionKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return null;\r\n\r\n const currentIndex = this.currentStep() - 1;\r\n const activeSection = this.stepSections()[currentIndex];\r\n\r\n if (!activeSection) return null;\r\n\r\n return [activeSection.key || `section-${currentIndex}`];\r\n });\r\n readonly forcedHiddenFieldKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return [];\r\n\r\n const sections = this.stepSections();\r\n const currentIndex = this.currentStep() - 1;\r\n const hiddenFieldKeys = new Set<string>();\r\n\r\n sections.forEach((section, index) => {\r\n if (index === currentIndex) return;\r\n section.fields\r\n .map((field) => field.key)\r\n .filter((key): key is string => !!key)\r\n .forEach((key) => hiddenFieldKeys.add(key));\r\n });\r\n\r\n return [...hiddenFieldKeys];\r\n });\r\n readonly effectiveForcedHiddenFieldKeys = computed(() => {\r\n return [\r\n ...new Set([...this.forcedHiddenFieldKeys(), ...this.ignoredFieldKeys()]),\r\n ];\r\n });\r\n readonly footerLoading = computed(() => {\r\n return (\r\n this.state.loading() ||\r\n (this.autoLoad() &&\r\n !this.hasStartedLoad() &&\r\n !this.state.isLoaded() &&\r\n !this.state.error())\r\n );\r\n });\r\n readonly footerState = computed<ClientFormFooterState>(() => {\r\n const loading = this.footerLoading();\r\n const isLoaded = this.state.isLoaded();\r\n const renderMode = this.effectiveRenderMode();\r\n const stepNavigationEnabled = this.stepsEnabled() || this.wizardEnabled();\r\n const sectionNavigationEnabled = this.sectionNavigationEnabled();\r\n const currentStep = this.currentStep();\r\n const stepCount = this.stepSections().length;\r\n const canGoToPreviousStep = stepNavigationEnabled && currentStep > 1;\r\n const canGoToNextStep = stepNavigationEnabled && currentStep < stepCount;\r\n\r\n return {\r\n loading,\r\n isLoaded,\r\n renderMode,\r\n actionMode: loading\r\n ? 'loading'\r\n : stepNavigationEnabled\r\n ? 'steps'\r\n : 'submit',\r\n stepNavigationEnabled,\r\n sectionNavigationEnabled,\r\n currentStep,\r\n stepCount,\r\n canGoToPreviousStep,\r\n canGoToNextStep,\r\n showPreviousStep: stepNavigationEnabled,\r\n showNextStep: stepNavigationEnabled && canGoToNextStep,\r\n showSubmit:\r\n isLoaded && !loading && (!stepNavigationEnabled || !canGoToNextStep),\r\n };\r\n });\r\n\r\n // ============================================================================\r\n // Effects\r\n // ============================================================================\r\n\r\n constructor() {\r\n this.formValueSub = this.formControl.valueChanges.subscribe(() => {\r\n if (this.submitValidationMessages().length > 0) {\r\n this.submitValidationMessages.set([]);\r\n }\r\n });\r\n\r\n // Auto-load when inputs are ready\r\n effect(() => {\r\n const autoLoad = this.autoLoad();\r\n const moduleKey = this.moduleKey();\r\n const operationKey = this.operationKey();\r\n\r\n if (autoLoad && moduleKey && operationKey) {\r\n untracked(() => this.load());\r\n }\r\n });\r\n\r\n // Patch form values after load\r\n effect(() => {\r\n const values = this.initialValues();\r\n const isLoaded = this.state.isLoaded();\r\n\r\n if (isLoaded && Object.keys(values).length > 0) {\r\n untracked(() => {\r\n this.formControl.patchValue(values, { emitEvent: false });\r\n });\r\n }\r\n });\r\n\r\n effect(() => {\r\n const count = this.stepSections().length;\r\n const current = this.currentStep();\r\n\r\n if (count === 0) {\r\n if (current !== 1) this.currentStep.set(1);\r\n return;\r\n }\r\n\r\n if (current < 1 || current > count) {\r\n this.currentStep.set(1);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const footerState = this.footerState();\r\n\r\n untracked(() => {\r\n this.footerStateChanged.emit(footerState);\r\n });\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Public API (accessed via viewChild)\r\n // ============================================================================\r\n\r\n /**\r\n * Load form configuration from the API.\r\n * Builds request from current input values.\r\n */\r\n load(): void {\r\n if (this.state.loading()) return;\r\n\r\n this.loadSub?.unsubscribe();\r\n this.hasStartedLoad.set(true);\r\n this.formRuntimeMessages.set([]);\r\n this.submitValidationMessages.set([]);\r\n this.state.loading.set(true);\r\n this.state.error.set(null);\r\n this.state.submitResponse.set(null);\r\n\r\n const request = this.buildLoadRequest();\r\n\r\n this.loadSub = this.api.load(request).subscribe({\r\n next: (response) => {\r\n this.state.loading.set(false);\r\n\r\n if (response.data) {\r\n this.state.setLoadResponse(response.data);\r\n this.loaded.emit(response.data);\r\n\r\n if (response.data.mode) {\r\n this.modeDetected.emit(response.data.mode);\r\n }\r\n\r\n if (response.data.formSource) {\r\n this.formSourceDetected.emit(response.data.formSource);\r\n }\r\n } else {\r\n const msg = response.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Submit the current form values.\r\n * Builds submit request from form value + load context.\r\n */\r\n submit(): void {\r\n if (this.state.submitting()) return;\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) {\r\n const msg = 'Form must be loaded before submit';\r\n this.state.submitError.set(msg);\r\n this.errored.emit(msg);\r\n return;\r\n }\r\n\r\n this.submitSub?.unsubscribe();\r\n this.state.submitting.set(true);\r\n this.state.submitError.set(null);\r\n\r\n const request = this.buildSubmitRequest(loadResponse);\r\n this.submitValidationMessages.set([]);\r\n\r\n this.submitSub = this.api\r\n .validate(request)\r\n .pipe(\r\n switchMap((validationResponse) => {\r\n const validation = validationResponse.data;\r\n\r\n if (!validation) {\r\n const msg = validationResponse.message ?? 'Failed to validate form';\r\n this.state.submitting.set(false);\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n return EMPTY;\r\n }\r\n\r\n this.submitValidationMessages.set(\r\n this.mapSubmitValidationMessages(validation.results ?? []),\r\n );\r\n\r\n if (validation.hasBlockingFailures) {\r\n this.state.submitting.set(false);\r\n return EMPTY;\r\n }\r\n\r\n return this.api.submit(request).pipe(\r\n map((response) => ({\r\n kind: 'submit' as const,\r\n response,\r\n })),\r\n );\r\n }),\r\n )\r\n .subscribe({\r\n next: ({ response }) => {\r\n this.state.submitting.set(false);\r\n\r\n if (response.data) {\r\n this.state.setSubmitResponse(response.data);\r\n this.submitted.emit(response.data);\r\n } else {\r\n const msg = response.message ?? 'Failed to submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ??\r\n err?.message ??\r\n 'Failed to validate or submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get the current form value as a flat key-value object.\r\n */\r\n getFormValue(): Record<string, any> {\r\n return this.formControl.value ?? {};\r\n }\r\n\r\n /**\r\n * Get the current form value mapped to submit payload format.\r\n */\r\n getSubmitFields(): ProcessFormSubmitField[] {\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) return [];\r\n return mapFormValueToSubmitFields(this.getFormValue(), loadResponse);\r\n }\r\n\r\n /**\r\n * Backward-compatible alias for consumers still using the previous helper name.\r\n */\r\n getSubmitValues(): ProcessFormSubmitField[] {\r\n return this.getSubmitFields();\r\n }\r\n\r\n /**\r\n * Check whether the current form state is valid.\r\n */\r\n isValid(): boolean {\r\n return this.formControl.valid && this.runtimeErrors().length === 0;\r\n }\r\n\r\n /**\r\n * Reset the component to its initial state.\r\n */\r\n reset(): void {\r\n this.loadSub?.unsubscribe();\r\n this.submitSub?.unsubscribe();\r\n this.formControl.reset({});\r\n this.formRuntimeMessages.set([]);\r\n this.submitValidationMessages.set([]);\r\n this.state.reset();\r\n }\r\n\r\n onRuntimeMessagesChange(messages: FormulaRuntimeMessage[]): void {\r\n this.formRuntimeMessages.set(messages ?? []);\r\n }\r\n\r\n onStepChange(value: number): void {\r\n const count = this.stepSections().length;\r\n if (value < 1 || value > count) return;\r\n this.currentStep.set(value);\r\n }\r\n\r\n goToPreviousStep(): void {\r\n this.onStepChange(this.currentStep() - 1);\r\n }\r\n\r\n goToNextStep(): void {\r\n this.onStepChange(this.currentStep() + 1);\r\n }\r\n\r\n canGoToPreviousStep(): boolean {\r\n return (\r\n (this.stepsEnabled() || this.wizardEnabled()) && this.currentStep() > 1\r\n );\r\n }\r\n\r\n canGoToNextStep(): boolean {\r\n return (\r\n (this.stepsEnabled() || this.wizardEnabled()) &&\r\n this.currentStep() < this.stepSections().length\r\n );\r\n }\r\n\r\n getCurrentStep(): number {\r\n return this.currentStep();\r\n }\r\n\r\n getStepCount(): number {\r\n return this.stepSections().length;\r\n }\r\n\r\n isStepNavigationEnabled(): boolean {\r\n return this.stepsEnabled();\r\n }\r\n\r\n isSectionNavigationEnabled(): boolean {\r\n return this.sectionNavigationEnabled();\r\n }\r\n\r\n isFooterLoading(): boolean {\r\n return this.footerState().loading;\r\n }\r\n\r\n getResolvedRenderMode(): ClientFormResolvedRenderMode {\r\n return this.footerState().renderMode;\r\n }\r\n\r\n getFooterState(): ClientFormFooterState {\r\n return this.footerState();\r\n }\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n this.submitSub?.unsubscribe();\r\n this.formValueSub?.unsubscribe();\r\n }\r\n\r\n // ============================================================================\r\n // Private Helpers\r\n // ============================================================================\r\n\r\n private buildLoadRequest(): ProcessFormLoadRequest {\r\n const req: ProcessFormLoadRequest = {\r\n moduleKey: this.moduleKey(),\r\n operationKey: this.operationKey(),\r\n };\r\n\r\n const moduleId = this.moduleId();\r\n const levelId = this.levelId();\r\n const levelDataId = this.levelDataId();\r\n const moduleDataId = this.moduleDataId();\r\n const requestSchemaId = this.requestSchemaId();\r\n const draftProcessId = this.draftProcessId();\r\n const preview = this.preview();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (draftProcessId != null) req.draftProcessId = draftProcessId;\r\n if (preview) req.preview = preview;\r\n\r\n return req;\r\n }\r\n\r\n private buildSubmitRequest(\r\n loadResponse: ProcessFormLoadResponse,\r\n ): ProcessFormSubmitRequest {\r\n const context = this.state.context();\r\n const formValue = this.getFormValue();\r\n const fields: ProcessFormSubmitField[] = mapFormValueToSubmitFields(\r\n formValue,\r\n loadResponse,\r\n );\r\n\r\n const req: ProcessFormSubmitRequest = {\r\n moduleKey: this.moduleKey() ?? context?.moduleKey,\r\n operationKey: this.operationKey() ?? context?.operationKey,\r\n fields,\r\n };\r\n\r\n const moduleId = context?.moduleId ?? this.moduleId();\r\n const levelId = context?.levelId ?? this.levelId();\r\n const levelDataId = context?.levelDataId ?? this.levelDataId();\r\n const moduleDataId = context?.moduleDataId ?? this.moduleDataId();\r\n const requestSchemaId = context?.requestSchemaId ?? this.requestSchemaId();\r\n const recordId =\r\n moduleDataId ??\r\n (req.moduleKey === 'LevelData' && req.operationKey !== 'Create'\r\n ? levelDataId\r\n : undefined);\r\n const returnUrl = this.returnUrl();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (recordId != null) req.recordId = recordId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (returnUrl) req.returnUrl = returnUrl;\r\n\r\n const submitRequestMapper = this.submitRequestMapper();\r\n if (!submitRequestMapper) {\r\n return req;\r\n }\r\n\r\n return submitRequestMapper(req, {\r\n formValue,\r\n loadResponse,\r\n });\r\n }\r\n\r\n private mapSubmitValidationMessages(\r\n results: ProcessFormValidationRuleResult[],\r\n ): FormulaRuntimeMessage[] {\r\n return results\r\n .filter((result) => !result.passed)\r\n .map((result) => ({\r\n code: result.isEvaluationError\r\n ? 'FORMULA_EVALUATION_ERROR'\r\n : 'FORMULA_FALSE',\r\n severity: result.severity,\r\n message: this.resolveSubmitValidationMessage(result),\r\n ruleId: result.ruleId,\r\n }));\r\n }\r\n\r\n private resolveSubmitValidationMessage(\r\n result: ProcessFormValidationRuleResult,\r\n ): string {\r\n const translatedMessage = this.resolveTranslatableValue(result.message);\r\n if (translatedMessage) {\r\n return translatedMessage;\r\n }\r\n\r\n const errorMessage = result.errorMessage?.trim();\r\n if (errorMessage) {\r\n return errorMessage;\r\n }\r\n\r\n return 'Form validation failed';\r\n }\r\n\r\n private resolveTranslatableValue(\r\n value: ClientFormTranslatableValue | string | null | undefined,\r\n ): string | null {\r\n if (typeof value === 'string') {\r\n const normalized = value.trim();\r\n return normalized.length > 0 ? normalized : null;\r\n }\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const lang = this.lang();\r\n const localized =\r\n value.display ?? value[lang] ?? value.en ?? value.ar ?? null;\r\n\r\n if (typeof localized !== 'string') {\r\n return null;\r\n }\r\n\r\n const normalized = localized.trim();\r\n return normalized.length > 0 ? normalized : null;\r\n }\r\n\r\n private resolveStepTimelineState(\r\n stepValue: number,\r\n currentStep: number,\r\n ): StepTimelineState {\r\n if (stepValue < currentStep) {\r\n return 'completed';\r\n }\r\n\r\n if (stepValue === currentStep) {\r\n return 'current';\r\n }\r\n\r\n return 'upcoming';\r\n }\r\n}\r\n","<!-- Client Form Template - render only; step navigation buttons are optional -->\r\n\r\n<!-- Loading State -->\r\n@if (state.loading()) {\r\n <div class=\"flex flex-col gap-6\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"30%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"40%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"25%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"45%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Second section skeleton -->\r\n <div class=\"flex flex-col gap-4\">\r\n <p-skeleton width=\"25%\" height=\"1.5rem\" />\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"35%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-6 flex flex-col gap-2\">\r\n <p-skeleton width=\"50%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"2.5rem\" />\r\n </div>\r\n <div class=\"col-span-12 flex flex-col gap-2\">\r\n <p-skeleton width=\"30%\" height=\"0.875rem\" />\r\n <p-skeleton width=\"100%\" height=\"5rem\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n\r\n<!-- Loaded State -->\r\n@if (state.isLoaded() && !state.loading()) {\r\n <div class=\"flex flex-col gap-4\" *transloco=\"let t; prefix: 'clientForm'\">\r\n @if (previewEntitySections().length > 0) {\r\n <div class=\"flex flex-col gap-3\">\r\n @for (section of previewEntitySections(); track section.key) {\r\n <div class=\"flex flex-col gap-3\">\r\n @if (section.label) {\r\n <h3\r\n class=\"text-lg font-semibold text-color border-b-2 border-gray-200 pb-2 mb-3\"\r\n >\r\n {{ section.label }}\r\n </h3>\r\n }\r\n <mt-entities-preview [entities]=\"section.entities\" />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n @if (wizardEnabled()) {\r\n <!-- Wizard Mode: vertical stepper left + form right -->\r\n <div class=\"flex gap-0 min-h-0\">\r\n <!-- Vertical Stepper -->\r\n <div class=\"w-[30%] shrink-0 flex flex-col py-4 px-6\">\r\n @for (\r\n step of stepTimeline();\r\n track step.key;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n @if (!first) {\r\n <div\r\n class=\"ms-6 w-0.5 h-5 shrink-0\"\r\n [ngClass]=\"\r\n step.beforeLineActive ? 'bg-primary' : 'bg-surface-300'\r\n \"\r\n ></div>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center cursor-pointer gap-3 text-left focus-visible:outline-none\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"step.state === 'current' ? 'step' : null\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-12 w-12 shrink-0 items-center justify-center rounded text-base font-semibold transition-all duration-200\"\r\n [class]=\"\r\n step.state === 'current'\r\n ? 'ring-2 ring-primary/20 bg-primary text-white '\r\n : step.state === 'completed'\r\n ? 'text-primary bg-primary-100 '\r\n : step.state === 'upcoming'\r\n ? 'bg-primary-100 text-white'\r\n : ''\r\n \"\r\n >\r\n @if (step.state === \"completed\") {\r\n <mt-icon icon=\"general.check\" class=\"text-xl\" />\r\n } @else {\r\n {{ step.value }}\r\n }\r\n </span>\r\n <span\r\n class=\"text-sm leading-5 truncate transition-colors duration-200\"\r\n [ngClass]=\"{\r\n 'font-semibold text-primary': step.state === 'current',\r\n 'font-medium text-surface-700':\r\n step.state === 'completed',\r\n 'font-medium text-surface-400': step.state === 'upcoming',\r\n }\"\r\n dir=\"auto\"\r\n >\r\n {{ step.label }}\r\n </span>\r\n </button>\r\n @if (!last) {\r\n <div\r\n class=\"ms-6 w-0.5 h-5 shrink-0\"\r\n [ngClass]=\"\r\n step.afterLineActive ? 'bg-primary' : 'bg-surface-300'\r\n \"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n <!-- Form Content + Buttons -->\r\n <div class=\"flex-1 flex flex-col gap-4 min-w-0 ps-6\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\"\r\n >\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n {{ t(\"validation-errors\") }}\r\n </h4>\r\n <ul\r\n class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\"\r\n >\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <mt-dynamic-form\r\n [formConfig]=\"wizardFormConfig() ?? config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"effectiveForcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-end gap-2 pt-4 mt-auto\">\r\n <mt-button\r\n [label]=\"t('previous')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === 1\"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"t('next')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (onClick)=\"goToNextStep()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\"\r\n >\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n {{ t(\"validation-errors\") }}\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n {{ t(\"validation-warnings\") }}\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"overflow-x-auto pb-2\">\r\n <div class=\"flex min-w-[36rem] items-start\">\r\n @for (\r\n step of stepTimeline();\r\n track step.key;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n <div\r\n class=\"relative flex min-w-[8rem] flex-1 justify-center\"\r\n >\r\n @if (!rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (!rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"relative z-10 flex w-full flex-col items-center gap-3 px-2 text-center focus-visible:outline-none\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"\r\n step.state === 'current' ? 'step' : null\r\n \"\r\n [attr.title]=\"step.label\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\"\r\n [ngClass]=\"{\r\n 'border-primary bg-primary text-surface-0 ring-4 ring-primary/10':\r\n step.state === 'completed' ||\r\n step.state === 'current',\r\n\r\n 'border-surface-300 bg-white text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n >\r\n {{ step.value }}\r\n </span>\r\n <span\r\n class=\"max-w-[8rem] text-center text-sm leading-5 transition-colors duration-200\"\r\n [ngClass]=\"{\r\n 'font-semibold text-primary':\r\n step.selected || step.state === 'current',\r\n 'font-medium text-surface-700':\r\n step.state === 'completed' && !step.selected,\r\n 'font-medium text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n dir=\"auto\"\r\n >\r\n {{ step.label }}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <mt-button\r\n [label]=\"t('previous')\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === 1\"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"t('next')\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (onClick)=\"goToNextStep()\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (tabsEnabled()) {\r\n <mt-tabs\r\n [active]=\"currentStep()\"\r\n (activeChange)=\"onStepChange($event)\"\r\n [options]=\"tabOptions()\"\r\n size=\"small\"\r\n fluid\r\n />\r\n }\r\n <mt-dynamic-form\r\n [formConfig]=\"config\"\r\n [formControl]=\"formControl\"\r\n [visibleSectionKeys]=\"visibleSectionKeys()\"\r\n [forcedHiddenFieldKeys]=\"effectiveForcedHiddenFieldKeys()\"\r\n [preserveForcedHiddenValues]=\"true\"\r\n (runtimeMessagesChange)=\"onRuntimeMessagesChange($event)\"\r\n />\r\n </div>\r\n }\r\n }\r\n } @else if (previewEntitySections().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","// ============================================================================\r\n// API Response Wrapper\r\n// ============================================================================\r\n\r\nexport interface Response<T> {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message?: string | null;\r\n errors?: any | null;\r\n data: T;\r\n cacheSession?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Process Form Mode\r\n// ============================================================================\r\n\r\nexport type ProcessFormMode = 'Approval' | 'Direct';\r\nexport type ProcessFormSubmitStatus = 'PendingApproval' | 'Executed';\r\nexport type OperationType = 'FormOperation' | 'ActionOperation';\r\nexport type ProcessFormSource = 'Step' | 'None';\r\nexport type ClientFormResolvedRenderMode = 'form' | 'steps' | 'tabs' | 'wizard';\r\nexport type ClientFormFooterActionMode = 'loading' | 'steps' | 'submit';\r\n\r\nexport interface ClientFormFooterState {\r\n loading: boolean;\r\n isLoaded: boolean;\r\n renderMode: ClientFormResolvedRenderMode;\r\n actionMode: ClientFormFooterActionMode;\r\n stepNavigationEnabled: boolean;\r\n sectionNavigationEnabled: boolean;\r\n currentStep: number;\r\n stepCount: number;\r\n canGoToPreviousStep: boolean;\r\n canGoToNextStep: boolean;\r\n showPreviousStep: boolean;\r\n showNextStep: boolean;\r\n showSubmit: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Load Request / Response\r\n// ============================================================================\r\n\r\nexport interface ProcessFormLoadRequest {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n requestSchemaId?: number;\r\n draftProcessId?: number;\r\n preview?: boolean;\r\n}\r\n\r\nexport interface ProcessFormLoadResponse {\r\n mode: ProcessFormMode;\r\n formSource: ProcessFormSource;\r\n requiresForm: boolean;\r\n requestSchemaId: number | null;\r\n requestId: number | null;\r\n stepId: number | null;\r\n stepSchemaId: number | null;\r\n stepName: string | null;\r\n formConfiguration: ClientFormConfiguration | null;\r\n values: ProcessFormValue[];\r\n context: ProcessFormContext;\r\n}\r\n\r\n// ============================================================================\r\n// Submit Request / Response\r\n// ============================================================================\r\n\r\nexport interface ProcessFormSubmitRequest {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n recordId?: number | string;\r\n requestSchemaId?: number;\r\n returnUrl?: string;\r\n fields: ProcessFormSubmitField[];\r\n}\r\n\r\nexport interface ProcessFormValidationRuntimeResult {\r\n isValid: boolean;\r\n hasBlockingFailures: boolean;\r\n results: ProcessFormValidationRuleResult[];\r\n}\r\n\r\nexport interface ProcessFormValidationRuleResult {\r\n ruleId: string | number;\r\n message?: ClientFormTranslatableValue | string | null;\r\n severity: 'error' | 'warning';\r\n passed: boolean;\r\n isBlocking: boolean;\r\n isEvaluationError: boolean;\r\n errorMessage?: string | null;\r\n}\r\n\r\nexport interface ClientFormSubmitRequestMapperContext {\r\n formValue: Record<string, any>;\r\n loadResponse: ProcessFormLoadResponse;\r\n}\r\n\r\nexport type ClientFormSubmitRequestMapper = (\r\n request: ProcessFormSubmitRequest,\r\n context: ClientFormSubmitRequestMapperContext,\r\n) => ProcessFormSubmitRequest;\r\n\r\nexport interface ProcessFormSubmitField {\r\n requestPropertyId?: number;\r\n propertyKey: string;\r\n value: any;\r\n}\r\n\r\nexport type ProcessFormSubmitValue = ProcessFormSubmitField;\r\n\r\nexport interface ProcessFormSubmitResponse {\r\n status: ProcessFormSubmitStatus;\r\n moduleKey: string;\r\n operationKey: string;\r\n recordId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n requestSchemaId?: number | null;\r\n requestId?: number | null;\r\n resultModuleKey?: string | null;\r\n resultModuleId?: number | null;\r\n record?: ProcessFormSubmitRecord | null;\r\n}\r\n\r\nexport interface ProcessFormSubmitRecord {\r\n fields: ProcessFormSubmitRecordField[];\r\n}\r\n\r\nexport interface ProcessFormSubmitRecordField {\r\n id: number;\r\n key: string;\r\n normalizedKey: string;\r\n label: string;\r\n viewType: string;\r\n configuration: Record<string, unknown> | null;\r\n source: string;\r\n order: number;\r\n isRequired: boolean;\r\n isSystem: boolean;\r\n raw: any;\r\n value: any;\r\n display?: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// Values & Context\r\n// ============================================================================\r\n\r\nexport interface ProcessFormValue {\r\n propertyKey: string;\r\n rawValue?: any;\r\n value: any;\r\n metadata?: ProcessFormValueMetadata;\r\n}\r\n\r\nexport interface ProcessFormValueMetadata {\r\n propertyId: number;\r\n key: string;\r\n viewType: string;\r\n source: string;\r\n}\r\n\r\nexport interface ProcessFormContext {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n moduleDataId: number | null;\r\n requestSchemaId: number | null;\r\n requestId: number | null;\r\n stepId: number | null;\r\n stepSchemaId: number | null;\r\n preview: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration (runtime shape — no _pending/_deleting)\r\n// ============================================================================\r\n\r\nexport type ClientFieldWidth = '25' | '50' | '100';\r\nexport type ClientFormRenderMode =\r\n | 'sections'\r\n | 'steps'\r\n | 'tabs'\r\n | 'wizard'\r\n | undefined;\r\n\r\nexport interface ClientFormConfiguration {\r\n isActive?: boolean;\r\n renderMode?: ClientFormRenderMode;\r\n sections: ClientFormSection[];\r\n validations?: ClientValidationRule[];\r\n}\r\n\r\nexport interface ClientFormSection {\r\n id: string;\r\n name: {\r\n en: string;\r\n ar: string;\r\n };\r\n order: number;\r\n fields: ClientFormField[];\r\n}\r\n\r\nexport interface ClientFormField {\r\n id: string;\r\n sectionId: string;\r\n propertyKey: string;\r\n /** Runtime property metadata returned by the API */\r\n propertyMetadata: ClientPropertyItem;\r\n width: ClientFieldWidth;\r\n order: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n isRead?: boolean;\r\n isWrite?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n}\r\n\r\nexport interface ClientPropertyItem {\r\n key: string;\r\n propertyId?: number;\r\n isCalculated?: boolean;\r\n name:\r\n | string\r\n | {\r\n display?: string;\r\n en?: string;\r\n ar?: string;\r\n [k: string]: string | undefined;\r\n };\r\n viewType?: string;\r\n source?: string;\r\n configuration?: Record<string, unknown> | null;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface ClientFormTranslatableValue {\r\n display?: string;\r\n en?: string;\r\n ar?: string;\r\n [key: string]: string | undefined;\r\n}\r\n\r\nexport interface ClientValidationRule {\r\n id: string | number;\r\n formulaTokens: string;\r\n formulaText: string;\r\n message: {\r\n en: string;\r\n ar: string;\r\n };\r\n severity: 'error' | 'warning';\r\n enabled: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Lookup Definitions (passed as input to ClientForm)\r\n// ============================================================================\r\n\r\nexport interface ClientLookup {\r\n id: number;\r\n key: string;\r\n name: { display?: string; ar?: string; en?: string };\r\n items: ClientLookupItem[];\r\n}\r\n\r\nexport interface ClientLookupItem {\r\n id: number;\r\n lookupId: number;\r\n key: string;\r\n name: { display?: string; ar?: string; en?: string };\r\n description?: { display?: string; ar?: string; en?: string };\r\n color?: string;\r\n order: number;\r\n}\r\n\r\n// ============================================================================\r\n// Legacy Command Interception\r\n// ============================================================================\r\n\r\nexport interface FormRequiredInterception {\r\n requestSchemaId: number;\r\n operationType: OperationType;\r\n status: 'FormRequired';\r\n message: string;\r\n levelId: number;\r\n levelDataId: number;\r\n moduleDataId: number;\r\n}\r\n\r\n/**\r\n * Type guard to detect a FormRequired interception response from legacy commands.\r\n * Use in HTTP interceptors to redirect to process-form runtime flow.\r\n */\r\nexport function isFormRequiredInterception(\r\n response: any,\r\n): response is FormRequiredInterception {\r\n return (\r\n response?.status === 'FormRequired' &&\r\n typeof response?.requestSchemaId === 'number'\r\n );\r\n}\r\n","// Client Form - Runtime process form component\r\nexport * from './client-form';\r\nexport * from './models/client-form.model';\r\nexport * from './services/client-form-api.service';\r\nexport * from './services/client-form-state.service';\r\nexport * from './utils/form-config-mapper';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ class DynamicField {
|
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
112
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DynamicField, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: DynamicField, isStandalone: true, selector: "mt-dynamic-field", inputs: { fieldConfig: { classPropertyName: "fieldConfig", publicName: "fieldConfig", isSignal: true, isRequired: true, transformFunction: null }, fieldName: { classPropertyName: "fieldName", publicName: "fieldName", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@switch (transformedFieldConfig().type) {\n @case (\"text\") {\n <mt-text-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [type]=\"transformedFieldConfig().inputType || 'text'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"textarea\") {\n <mt-textarea-field\n [label]=\"transformedFieldConfig().label\"\n [rows]=\"transformedFieldConfig().rows || 3\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"select\") {\n <mt-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [group]=\"transformedFieldConfig().group || false\"\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\n [optionGroupChildren]=\"\n transformedFieldConfig().optionGroupChildren || 'items'\n \"\n [size]=\"transformedFieldConfig().size\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [filter]=\"transformedFieldConfig().filter\"\n [formControlName]=\"fieldName()\"\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\n />\n }\n @case (\"date\") {\n <mt-date-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [showTime]=\"transformedFieldConfig().showTime\"\n />\n }\n @case (\"number\") {\n <mt-number-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"slider\") {\n <mt-slider-field\n [label]=\"transformedFieldConfig().label\"\n [min]=\"transformedFieldConfig().min ?? 0\"\n [max]=\"transformedFieldConfig().max ?? 100\"\n [step]=\"transformedFieldConfig().step\"\n [animate]=\"transformedFieldConfig().animate ?? false\"\n [unit]=\"transformedFieldConfig().unit || ''\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"multi-select\") {\n <mt-multi-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"pick-list\") {\n <mt-pick-list-field\n [label]=\"transformedFieldConfig().label || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\n [filterBy]=\"transformedFieldConfig().filterBy\"\n [dataKey]=\"transformedFieldConfig().dataKey\"\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\n [responsive]=\"transformedFieldConfig().responsive\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"user-search\") {\n <mt-user-search-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [hint]=\"transformedFieldConfig().hint || ''\"\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [context]=\"transformedFieldConfig().context\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"checkbox\") {\n <mt-checkbox-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-button\") {\n <mt-radio-button-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-cards\") {\n <mt-radio-cards-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [size]=\"transformedFieldConfig().size || 'small'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"toggle\") {\n <mt-toggle-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\n [icon]=\"transformedFieldConfig().icon\"\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"icon-field\") {\n <mt-icon-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"color-picker\") {\n <mt-color-picker-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [appendTo]=\"transformedFieldConfig().appendTo\"\n />\n }\n @case (\"editor-field\") {\n <mt-editor-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"upload-file\") {\n <mt-upload-field\n [label]=\"transformedFieldConfig().label\"\n [formControlName]=\"fieldName()\"\n [shape]=\"transformedFieldConfig().shape\"\n [size]=\"transformedFieldConfig().size\"\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\n [multiple]=\"transformedFieldConfig().multiple\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [endPoint]=\"transformedFieldConfig().endPoint\"\n [accept]=\"transformedFieldConfig().accept\"\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\n [context]=\"transformedFieldConfig().context\"\n [title]=\"transformedFieldConfig().title\"\n [description]=\"transformedFieldConfig().description\"\n />\n }\n @case (\"lookup-matrix\") {\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\n }\n @case (\"spacer\") {\n <div class=\"spacer\"></div>\n }\n @case (\"schema-connection\") {\n <mt-schema-connection-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [context]=\"transformedFieldConfig().context\"\n [filter]=\"transformedFieldConfig().filter ?? true\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"predecessor\") {\n <mt-schedule-predecessor-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n}\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "component", type: TextareaField, selector: "mt-textarea-field", inputs: ["field", "label", "placeholder", "class", "readonly", "noErrorStyle", "pInputs", "rows", "required"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "component", type: NumberField, selector: "mt-number-field", inputs: ["field", "label", "placeholder", "class", "readonly", "pInputs", "format", "useGrouping", "maxFractionDigits", "min", "max", "required"] }, { kind: "component", type: SliderField, selector: "mt-slider-field", inputs: ["field", "label", "animate", "class", "min", "max", "step", "hideNumber", "unit", "readonly", "pInputs", "required"], outputs: ["onChange", "onSlideEnd"] }, { kind: "component", type: MultiSelectField, selector: "mt-multi-select-field", inputs: ["field", "label", "placeholder", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "display", "required", "maxSelectedLabels", "group", "optionGroupLabel", "optionGroupChildren", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: PickListField, selector: "mt-pick-list-field", inputs: ["label", "class", "readonly", "options", "optionLabel", "optionValue", "sourceHeader", "targetHeader", "showSourceControls", "showTargetControls", "showSourceFilter", "showTargetFilter", "filterBy", "dataKey", "filterLocale", "filterMatchMode", "dragdrop", "responsive", "required"] }, { kind: "component", type: CheckboxField, selector: "mt-checkbox-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "component", type: ColorPickerField, selector: "mt-color-picker-field", inputs: ["label", "appendTo", "placeholder", "class", "variant", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IconField, selector: "mt-icon-field", inputs: ["label", "required"] }, { kind: "component", type: EditorField, selector: "mt-editor-field", inputs: ["label", "placeholder", "readonly", "theme", "height", "dir", "modules", "required"] }, { kind: "component", type: RadioButtonField, selector: "mt-radio-button-field", inputs: ["labelPosition", "orientation", "readonly", "pInputs", "required", "options", "size", "label"], outputs: ["onChange"] }, { kind: "component", type: RadioCardsField, selector: "mt-radio-cards-field", inputs: ["circle", "label", "readonly", "required", "color", "size", "optionLabel", "optionValue", "options"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "component", type: UserSearchField, selector: "mt-user-search-field", inputs: ["hint", "label", "placeholder", "class", "readonly", "required", "apiUrl", "dataKey", "paramName", "context", "size"] }, { kind: "component", type: UploadField, selector: "mt-upload-field", inputs: ["label", "title", "description", "endPoint", "size", "userImgClass", "shape", "multiple", "accept", "isDragging", "fileSizeLimit", "readonly", "context"], outputs: ["isDraggingChange", "onChange"] }, { kind: "component", type: LookupMatrixField, selector: "mt-lookup-matrix-field", inputs: ["config"] }, { kind: "component", type: SchemaConnectionField, selector: "mt-schema-connection-field", inputs: ["label", "placeholder", "readonly", "required", "filter", "configuration", "context"] }, { kind: "component", type: SchedulePredecessorField, selector: "mt-schedule-predecessor-field", inputs: ["label", "placeholder", "readonly", "required", "configuration", "runtimeContext"] }], viewProviders: [
|
|
113
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: DynamicField, isStandalone: true, selector: "mt-dynamic-field", inputs: { fieldConfig: { classPropertyName: "fieldConfig", publicName: "fieldConfig", isSignal: true, isRequired: true, transformFunction: null }, fieldName: { classPropertyName: "fieldName", publicName: "fieldName", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@switch (transformedFieldConfig().type) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [type]=\"transformedFieldConfig().inputType || 'text'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"textarea\") {\r\n <mt-textarea-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [rows]=\"transformedFieldConfig().rows || 3\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [group]=\"transformedFieldConfig().group || false\"\r\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\r\n [optionGroupChildren]=\"\r\n transformedFieldConfig().optionGroupChildren || 'items'\r\n \"\r\n [size]=\"transformedFieldConfig().size\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [filter]=\"transformedFieldConfig().filter\"\r\n [formControlName]=\"fieldName()\"\r\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\r\n />\r\n }\r\n @case (\"date\") {\r\n <mt-date-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [showTime]=\"transformedFieldConfig().showTime\"\r\n />\r\n }\r\n @case (\"number\") {\r\n <mt-number-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"slider\") {\r\n <mt-slider-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [min]=\"transformedFieldConfig().min ?? 0\"\r\n [max]=\"transformedFieldConfig().max ?? 100\"\r\n [step]=\"transformedFieldConfig().step\"\r\n [animate]=\"transformedFieldConfig().animate ?? false\"\r\n [unit]=\"transformedFieldConfig().unit || ''\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"multi-select\") {\r\n <mt-multi-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"pick-list\") {\r\n <mt-pick-list-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\r\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\r\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\r\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\r\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\r\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\r\n [filterBy]=\"transformedFieldConfig().filterBy\"\r\n [dataKey]=\"transformedFieldConfig().dataKey\"\r\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\r\n [responsive]=\"transformedFieldConfig().responsive\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"user-search\") {\r\n <mt-user-search-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [hint]=\"transformedFieldConfig().hint || ''\"\r\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"checkbox\") {\r\n <mt-checkbox-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-button\") {\r\n <mt-radio-button-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-cards\") {\r\n <mt-radio-cards-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [size]=\"transformedFieldConfig().size || 'small'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"toggle\") {\r\n <mt-toggle-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\r\n [icon]=\"transformedFieldConfig().icon\"\r\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"icon-field\") {\r\n <mt-icon-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"color-picker\") {\r\n <mt-color-picker-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [appendTo]=\"transformedFieldConfig().appendTo\"\r\n />\r\n }\r\n @case (\"editor-field\") {\r\n <mt-editor-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"upload-file\") {\r\n <mt-upload-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [formControlName]=\"fieldName()\"\r\n [shape]=\"transformedFieldConfig().shape\"\r\n [size]=\"transformedFieldConfig().size\"\r\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\r\n [multiple]=\"transformedFieldConfig().multiple\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [endPoint]=\"transformedFieldConfig().endPoint\"\r\n [accept]=\"transformedFieldConfig().accept\"\r\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [title]=\"transformedFieldConfig().title\"\r\n [description]=\"transformedFieldConfig().description\"\r\n />\r\n }\r\n @case (\"lookup-matrix\") {\r\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\r\n }\r\n @case (\"spacer\") {\r\n <div class=\"spacer\"></div>\r\n }\r\n @case (\"schema-connection\") {\r\n <mt-schema-connection-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [filter]=\"transformedFieldConfig().filter ?? true\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"predecessor\") {\r\n <mt-schedule-predecessor-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n}\r\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "component", type: TextareaField, selector: "mt-textarea-field", inputs: ["field", "label", "placeholder", "class", "readonly", "noErrorStyle", "pInputs", "rows", "required"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "component", type: NumberField, selector: "mt-number-field", inputs: ["field", "label", "placeholder", "class", "readonly", "pInputs", "format", "useGrouping", "maxFractionDigits", "min", "max", "required"] }, { kind: "component", type: SliderField, selector: "mt-slider-field", inputs: ["field", "label", "animate", "class", "min", "max", "step", "hideNumber", "unit", "readonly", "pInputs", "required"], outputs: ["onChange", "onSlideEnd"] }, { kind: "component", type: MultiSelectField, selector: "mt-multi-select-field", inputs: ["field", "label", "placeholder", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "display", "required", "maxSelectedLabels", "group", "optionGroupLabel", "optionGroupChildren", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: PickListField, selector: "mt-pick-list-field", inputs: ["label", "class", "readonly", "options", "optionLabel", "optionValue", "sourceHeader", "targetHeader", "showSourceControls", "showTargetControls", "showSourceFilter", "showTargetFilter", "filterBy", "dataKey", "filterLocale", "filterMatchMode", "dragdrop", "responsive", "required"] }, { kind: "component", type: CheckboxField, selector: "mt-checkbox-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "component", type: ColorPickerField, selector: "mt-color-picker-field", inputs: ["label", "appendTo", "placeholder", "class", "variant", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: IconField, selector: "mt-icon-field", inputs: ["label", "required"] }, { kind: "component", type: EditorField, selector: "mt-editor-field", inputs: ["label", "placeholder", "readonly", "theme", "height", "dir", "modules", "required"] }, { kind: "component", type: RadioButtonField, selector: "mt-radio-button-field", inputs: ["labelPosition", "orientation", "readonly", "pInputs", "required", "options", "size", "label"], outputs: ["onChange"] }, { kind: "component", type: RadioCardsField, selector: "mt-radio-cards-field", inputs: ["circle", "label", "readonly", "required", "color", "size", "optionLabel", "optionValue", "options"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { kind: "component", type: UserSearchField, selector: "mt-user-search-field", inputs: ["hint", "label", "placeholder", "class", "readonly", "required", "apiUrl", "dataKey", "paramName", "context", "size"] }, { kind: "component", type: UploadField, selector: "mt-upload-field", inputs: ["label", "title", "description", "endPoint", "size", "userImgClass", "shape", "multiple", "accept", "isDragging", "fileSizeLimit", "readonly", "context"], outputs: ["isDraggingChange", "onChange"] }, { kind: "component", type: LookupMatrixField, selector: "mt-lookup-matrix-field", inputs: ["config"] }, { kind: "component", type: SchemaConnectionField, selector: "mt-schema-connection-field", inputs: ["label", "placeholder", "readonly", "required", "filter", "configuration", "context"] }, { kind: "component", type: SchedulePredecessorField, selector: "mt-schedule-predecessor-field", inputs: ["label", "placeholder", "readonly", "required", "configuration", "runtimeContext"] }], viewProviders: [
|
|
114
114
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
115
115
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
116
116
|
}
|
|
@@ -140,7 +140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
140
140
|
SchedulePredecessorField,
|
|
141
141
|
], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [
|
|
142
142
|
{ provide: ControlContainer, useExisting: FormGroupDirective },
|
|
143
|
-
], template: "@switch (transformedFieldConfig().type) {\n @case (\"text\") {\n <mt-text-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [type]=\"transformedFieldConfig().inputType || 'text'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"textarea\") {\n <mt-textarea-field\n [label]=\"transformedFieldConfig().label\"\n [rows]=\"transformedFieldConfig().rows || 3\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"select\") {\n <mt-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [group]=\"transformedFieldConfig().group || false\"\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\n [optionGroupChildren]=\"\n transformedFieldConfig().optionGroupChildren || 'items'\n \"\n [size]=\"transformedFieldConfig().size\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [filter]=\"transformedFieldConfig().filter\"\n [formControlName]=\"fieldName()\"\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\n />\n }\n @case (\"date\") {\n <mt-date-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [showTime]=\"transformedFieldConfig().showTime\"\n />\n }\n @case (\"number\") {\n <mt-number-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"slider\") {\n <mt-slider-field\n [label]=\"transformedFieldConfig().label\"\n [min]=\"transformedFieldConfig().min ?? 0\"\n [max]=\"transformedFieldConfig().max ?? 100\"\n [step]=\"transformedFieldConfig().step\"\n [animate]=\"transformedFieldConfig().animate ?? false\"\n [unit]=\"transformedFieldConfig().unit || ''\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"multi-select\") {\n <mt-multi-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"pick-list\") {\n <mt-pick-list-field\n [label]=\"transformedFieldConfig().label || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\n [filterBy]=\"transformedFieldConfig().filterBy\"\n [dataKey]=\"transformedFieldConfig().dataKey\"\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\n [responsive]=\"transformedFieldConfig().responsive\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"user-search\") {\n <mt-user-search-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [hint]=\"transformedFieldConfig().hint || ''\"\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [context]=\"transformedFieldConfig().context\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"checkbox\") {\n <mt-checkbox-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-button\") {\n <mt-radio-button-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-cards\") {\n <mt-radio-cards-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [size]=\"transformedFieldConfig().size || 'small'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"toggle\") {\n <mt-toggle-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\n [icon]=\"transformedFieldConfig().icon\"\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"icon-field\") {\n <mt-icon-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"color-picker\") {\n <mt-color-picker-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [appendTo]=\"transformedFieldConfig().appendTo\"\n />\n }\n @case (\"editor-field\") {\n <mt-editor-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"upload-file\") {\n <mt-upload-field\n [label]=\"transformedFieldConfig().label\"\n [formControlName]=\"fieldName()\"\n [shape]=\"transformedFieldConfig().shape\"\n [size]=\"transformedFieldConfig().size\"\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\n [multiple]=\"transformedFieldConfig().multiple\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [endPoint]=\"transformedFieldConfig().endPoint\"\n [accept]=\"transformedFieldConfig().accept\"\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\n [context]=\"transformedFieldConfig().context\"\n [title]=\"transformedFieldConfig().title\"\n [description]=\"transformedFieldConfig().description\"\n />\n }\n @case (\"lookup-matrix\") {\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\n }\n @case (\"spacer\") {\n <div class=\"spacer\"></div>\n }\n @case (\"schema-connection\") {\n <mt-schema-connection-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [context]=\"transformedFieldConfig().context\"\n [filter]=\"transformedFieldConfig().filter ?? true\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"predecessor\") {\n <mt-schedule-predecessor-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n}\n", styles: [":host{display:block;width:100%}\n"] }]
|
|
143
|
+
], template: "@switch (transformedFieldConfig().type) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [type]=\"transformedFieldConfig().inputType || 'text'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"textarea\") {\r\n <mt-textarea-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [rows]=\"transformedFieldConfig().rows || 3\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [group]=\"transformedFieldConfig().group || false\"\r\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\r\n [optionGroupChildren]=\"\r\n transformedFieldConfig().optionGroupChildren || 'items'\r\n \"\r\n [size]=\"transformedFieldConfig().size\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [filter]=\"transformedFieldConfig().filter\"\r\n [formControlName]=\"fieldName()\"\r\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\r\n />\r\n }\r\n @case (\"date\") {\r\n <mt-date-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [showTime]=\"transformedFieldConfig().showTime\"\r\n />\r\n }\r\n @case (\"number\") {\r\n <mt-number-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"slider\") {\r\n <mt-slider-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [min]=\"transformedFieldConfig().min ?? 0\"\r\n [max]=\"transformedFieldConfig().max ?? 100\"\r\n [step]=\"transformedFieldConfig().step\"\r\n [animate]=\"transformedFieldConfig().animate ?? false\"\r\n [unit]=\"transformedFieldConfig().unit || ''\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"multi-select\") {\r\n <mt-multi-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"pick-list\") {\r\n <mt-pick-list-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\r\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\r\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\r\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\r\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\r\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\r\n [filterBy]=\"transformedFieldConfig().filterBy\"\r\n [dataKey]=\"transformedFieldConfig().dataKey\"\r\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\r\n [responsive]=\"transformedFieldConfig().responsive\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"user-search\") {\r\n <mt-user-search-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [hint]=\"transformedFieldConfig().hint || ''\"\r\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"checkbox\") {\r\n <mt-checkbox-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-button\") {\r\n <mt-radio-button-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-cards\") {\r\n <mt-radio-cards-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [size]=\"transformedFieldConfig().size || 'small'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"toggle\") {\r\n <mt-toggle-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\r\n [icon]=\"transformedFieldConfig().icon\"\r\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"icon-field\") {\r\n <mt-icon-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"color-picker\") {\r\n <mt-color-picker-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [appendTo]=\"transformedFieldConfig().appendTo\"\r\n />\r\n }\r\n @case (\"editor-field\") {\r\n <mt-editor-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"upload-file\") {\r\n <mt-upload-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [formControlName]=\"fieldName()\"\r\n [shape]=\"transformedFieldConfig().shape\"\r\n [size]=\"transformedFieldConfig().size\"\r\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\r\n [multiple]=\"transformedFieldConfig().multiple\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [endPoint]=\"transformedFieldConfig().endPoint\"\r\n [accept]=\"transformedFieldConfig().accept\"\r\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [title]=\"transformedFieldConfig().title\"\r\n [description]=\"transformedFieldConfig().description\"\r\n />\r\n }\r\n @case (\"lookup-matrix\") {\r\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\r\n }\r\n @case (\"spacer\") {\r\n <div class=\"spacer\"></div>\r\n }\r\n @case (\"schema-connection\") {\r\n <mt-schema-connection-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [filter]=\"transformedFieldConfig().filter ?? true\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"predecessor\") {\r\n <mt-schedule-predecessor-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n}\r\n", styles: [":host{display:block;width:100%}\n"] }]
|
|
144
144
|
}], ctorParameters: () => [], propDecorators: { fieldConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldConfig", required: true }] }], fieldName: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldName", required: true }] }] } });
|
|
145
145
|
|
|
146
146
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-forms-dynamic-field.mjs","sources":["../../../../packages/masterteam/forms/dynamic-field/dynamic-field.ts","../../../../packages/masterteam/forms/dynamic-field/dynamic-field.html","../../../../packages/masterteam/forms/dynamic-field/masterteam-forms-dynamic-field.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n computed,\r\n ChangeDetectionStrategy,\r\n Signal,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ReactiveFormsModule,\r\n ControlContainer,\r\n FormGroupDirective,\r\n} from '@angular/forms';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { NumberField } from '@masterteam/components/number-field';\r\nimport { SliderField } from '@masterteam/components/slider-field';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport { ColorPickerField } from '@masterteam/components/color-picker-field';\r\nimport { PickListField } from '@masterteam/components/pick-list-field';\r\nimport {\r\n TextFieldConfig,\r\n TextareaFieldConfig,\r\n SelectFieldConfig,\r\n DateFieldConfig,\r\n NumberFieldConfig,\r\n SliderFieldConfig,\r\n MultiSelectFieldConfig,\r\n PickListFieldConfig,\r\n CheckboxFieldConfig,\r\n ColorPickerFieldConfig,\r\n DynamicFieldConfig,\r\n IconFieldConfig,\r\n RadioButtonFieldConfig,\r\n RadioCardsFieldConfig,\r\n ToggleFieldConfig,\r\n EditorFieldConfig,\r\n UserSearchFieldConfig,\r\n UploadFileFieldConfig,\r\n SpacerFieldConfig,\r\n LookupMatrixFieldConfig,\r\n SchemaConnectionFieldConfig,\r\n SchedulePredecessorFieldConfig,\r\n} from '@masterteam/components';\r\nimport { IconField } from '@masterteam/components/icon-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { RadioCardsField } from '@masterteam/components/radio-cards-field';\r\nimport { RadioButtonField } from '@masterteam/components/radio-button-field';\r\nimport { EditorField } from '@masterteam/components/editor-field';\r\nimport { UserSearchField } from '@masterteam/components/user-search-field';\r\nimport { UploadField } from '@masterteam/components/upload-field';\r\nimport {\r\n LookupMatrixField,\r\n SchemaConnectionField,\r\n SchedulePredecessorField,\r\n} from '@masterteam/components/business-fields';\r\n\r\n@Component({\r\n selector: 'mt-dynamic-field',\r\n standalone: true,\r\n imports: [\r\n TextField,\r\n TextareaField,\r\n SelectField,\r\n DateField,\r\n NumberField,\r\n SliderField,\r\n MultiSelectField,\r\n PickListField,\r\n CheckboxField,\r\n ColorPickerField,\r\n ReactiveFormsModule,\r\n IconField,\r\n EditorField,\r\n RadioButtonField,\r\n RadioCardsField,\r\n ToggleField,\r\n UserSearchField,\r\n UploadField,\r\n LookupMatrixField,\r\n SchemaConnectionField,\r\n SchedulePredecessorField,\r\n ],\r\n templateUrl: './dynamic-field.html',\r\n styleUrls: ['./dynamic-field.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class DynamicField {\r\n // Input signal with transform to handle class for text type\r\n readonly fieldConfig = input.required<DynamicFieldConfig>();\r\n\r\n // Computed property for transformed field config\r\n readonly transformedFieldConfig: Signal<DynamicFieldConfig> = computed(() =>\r\n this.transformToFieldConfig(this.fieldConfig()),\r\n );\r\n readonly isRequired = computed(() => {\r\n const field = this.transformedFieldConfig();\r\n return Boolean(\r\n field.required ||\r\n field.validators?.some(\r\n (validator: any) => validator?.type === 'required',\r\n ),\r\n );\r\n });\r\n\r\n // Inject ControlContainer to connect directly with parent form\r\n private controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n // Input for the form control name\r\n readonly fieldName = input.required<string>();\r\n constructor() {}\r\n\r\n private transformToFieldConfig(value: any): DynamicFieldConfig {\r\n // If it's a plain object, transform it to appropriate field config\r\n if (typeof value === 'object') {\r\n if (value.type === 'text') {\r\n return new TextFieldConfig(value);\r\n }\r\n if (value.type === 'textarea') {\r\n return new TextareaFieldConfig(value);\r\n }\r\n if (value.type === 'select') {\r\n return new SelectFieldConfig(value);\r\n }\r\n if (value.type === 'date') {\r\n return new DateFieldConfig(value);\r\n }\r\n if (value.type === 'number') {\r\n return new NumberFieldConfig(value);\r\n }\r\n if (value.type === 'slider') {\r\n return new SliderFieldConfig(value);\r\n }\r\n if (value.type === 'multi-select') {\r\n return new MultiSelectFieldConfig(value);\r\n }\r\n if (value.type === 'pick-list') {\r\n return new PickListFieldConfig(value);\r\n }\r\n if (value.type === 'checkbox') {\r\n return new CheckboxFieldConfig(value);\r\n }\r\n if (value.type === 'radio-button') {\r\n return new RadioButtonFieldConfig(value);\r\n }\r\n if (value.type === 'radio-cards') {\r\n return new RadioCardsFieldConfig(value);\r\n }\r\n if (value.type === 'user-search') {\r\n return new UserSearchFieldConfig(value);\r\n }\r\n if (value.type === 'toggle') {\r\n return new ToggleFieldConfig(value);\r\n }\r\n if (value.type === 'editor-field') {\r\n return new EditorFieldConfig(value);\r\n }\r\n if (value.type === 'icon-field') {\r\n return new IconFieldConfig(value);\r\n }\r\n if (value.type === 'color-picker') {\r\n return new ColorPickerFieldConfig(value);\r\n }\r\n if (value.type === 'upload-file') {\r\n return new UploadFileFieldConfig(value);\r\n }\r\n if (value.type === 'spacer') {\r\n return new SpacerFieldConfig(value);\r\n }\r\n if (value.type === 'lookup-matrix') {\r\n return new LookupMatrixFieldConfig(value);\r\n }\r\n if (value.type === 'schema-connection') {\r\n return new SchemaConnectionFieldConfig(value);\r\n }\r\n if (value.type === 'predecessor') {\r\n return new SchedulePredecessorFieldConfig(value);\r\n }\r\n }\r\n\r\n // Default fallback to TextFieldConfig\r\n return new TextFieldConfig({\r\n ...value,\r\n });\r\n }\r\n}\r\n","@switch (transformedFieldConfig().type) {\n @case (\"text\") {\n <mt-text-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [type]=\"transformedFieldConfig().inputType || 'text'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"textarea\") {\n <mt-textarea-field\n [label]=\"transformedFieldConfig().label\"\n [rows]=\"transformedFieldConfig().rows || 3\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"select\") {\n <mt-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [group]=\"transformedFieldConfig().group || false\"\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\n [optionGroupChildren]=\"\n transformedFieldConfig().optionGroupChildren || 'items'\n \"\n [size]=\"transformedFieldConfig().size\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [filter]=\"transformedFieldConfig().filter\"\n [formControlName]=\"fieldName()\"\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\n />\n }\n @case (\"date\") {\n <mt-date-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [showTime]=\"transformedFieldConfig().showTime\"\n />\n }\n @case (\"number\") {\n <mt-number-field\n [label]=\"transformedFieldConfig().label\"\n [placeholder]=\"transformedFieldConfig().placeholder\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"slider\") {\n <mt-slider-field\n [label]=\"transformedFieldConfig().label\"\n [min]=\"transformedFieldConfig().min ?? 0\"\n [max]=\"transformedFieldConfig().max ?? 100\"\n [step]=\"transformedFieldConfig().step\"\n [animate]=\"transformedFieldConfig().animate ?? false\"\n [unit]=\"transformedFieldConfig().unit || ''\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"multi-select\") {\n <mt-multi-select-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"pick-list\") {\n <mt-pick-list-field\n [label]=\"transformedFieldConfig().label || ''\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\n [filterBy]=\"transformedFieldConfig().filterBy\"\n [dataKey]=\"transformedFieldConfig().dataKey\"\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\n [responsive]=\"transformedFieldConfig().responsive\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"user-search\") {\n <mt-user-search-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [hint]=\"transformedFieldConfig().hint || ''\"\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [context]=\"transformedFieldConfig().context\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"checkbox\") {\n <mt-checkbox-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-button\") {\n <mt-radio-button-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"radio-cards\") {\n <mt-radio-cards-field\n [label]=\"transformedFieldConfig().label\"\n [options]=\"transformedFieldConfig().options || []\"\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\n [size]=\"transformedFieldConfig().size || 'small'\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"toggle\") {\n <mt-toggle-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\n [icon]=\"transformedFieldConfig().icon\"\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"icon-field\") {\n <mt-icon-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"color-picker\") {\n <mt-color-picker-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n [appendTo]=\"transformedFieldConfig().appendTo\"\n />\n }\n @case (\"editor-field\") {\n <mt-editor-field\n [label]=\"transformedFieldConfig().label\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"upload-file\") {\n <mt-upload-field\n [label]=\"transformedFieldConfig().label\"\n [formControlName]=\"fieldName()\"\n [shape]=\"transformedFieldConfig().shape\"\n [size]=\"transformedFieldConfig().size\"\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\n [multiple]=\"transformedFieldConfig().multiple\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [endPoint]=\"transformedFieldConfig().endPoint\"\n [accept]=\"transformedFieldConfig().accept\"\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\n [context]=\"transformedFieldConfig().context\"\n [title]=\"transformedFieldConfig().title\"\n [description]=\"transformedFieldConfig().description\"\n />\n }\n @case (\"lookup-matrix\") {\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\n }\n @case (\"spacer\") {\n <div class=\"spacer\"></div>\n }\n @case (\"schema-connection\") {\n <mt-schema-connection-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [context]=\"transformedFieldConfig().context\"\n [filter]=\"transformedFieldConfig().filter ?? true\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n @case (\"predecessor\") {\n <mt-schedule-predecessor-field\n [label]=\"transformedFieldConfig().label || ''\"\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\n [configuration]=\"transformedFieldConfig().configuration\"\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\n [required]=\"isRequired()\"\n [readonly]=\"transformedFieldConfig().readonly!\"\n [formControlName]=\"fieldName()\"\n />\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-forms-dynamic-field.mjs","sources":["../../../../packages/masterteam/forms/dynamic-field/dynamic-field.ts","../../../../packages/masterteam/forms/dynamic-field/dynamic-field.html","../../../../packages/masterteam/forms/dynamic-field/masterteam-forms-dynamic-field.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n computed,\r\n ChangeDetectionStrategy,\r\n Signal,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n ReactiveFormsModule,\r\n ControlContainer,\r\n FormGroupDirective,\r\n} from '@angular/forms';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { NumberField } from '@masterteam/components/number-field';\r\nimport { SliderField } from '@masterteam/components/slider-field';\r\nimport { MultiSelectField } from '@masterteam/components/multi-select-field';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport { ColorPickerField } from '@masterteam/components/color-picker-field';\r\nimport { PickListField } from '@masterteam/components/pick-list-field';\r\nimport {\r\n TextFieldConfig,\r\n TextareaFieldConfig,\r\n SelectFieldConfig,\r\n DateFieldConfig,\r\n NumberFieldConfig,\r\n SliderFieldConfig,\r\n MultiSelectFieldConfig,\r\n PickListFieldConfig,\r\n CheckboxFieldConfig,\r\n ColorPickerFieldConfig,\r\n DynamicFieldConfig,\r\n IconFieldConfig,\r\n RadioButtonFieldConfig,\r\n RadioCardsFieldConfig,\r\n ToggleFieldConfig,\r\n EditorFieldConfig,\r\n UserSearchFieldConfig,\r\n UploadFileFieldConfig,\r\n SpacerFieldConfig,\r\n LookupMatrixFieldConfig,\r\n SchemaConnectionFieldConfig,\r\n SchedulePredecessorFieldConfig,\r\n} from '@masterteam/components';\r\nimport { IconField } from '@masterteam/components/icon-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { RadioCardsField } from '@masterteam/components/radio-cards-field';\r\nimport { RadioButtonField } from '@masterteam/components/radio-button-field';\r\nimport { EditorField } from '@masterteam/components/editor-field';\r\nimport { UserSearchField } from '@masterteam/components/user-search-field';\r\nimport { UploadField } from '@masterteam/components/upload-field';\r\nimport {\r\n LookupMatrixField,\r\n SchemaConnectionField,\r\n SchedulePredecessorField,\r\n} from '@masterteam/components/business-fields';\r\n\r\n@Component({\r\n selector: 'mt-dynamic-field',\r\n standalone: true,\r\n imports: [\r\n TextField,\r\n TextareaField,\r\n SelectField,\r\n DateField,\r\n NumberField,\r\n SliderField,\r\n MultiSelectField,\r\n PickListField,\r\n CheckboxField,\r\n ColorPickerField,\r\n ReactiveFormsModule,\r\n IconField,\r\n EditorField,\r\n RadioButtonField,\r\n RadioCardsField,\r\n ToggleField,\r\n UserSearchField,\r\n UploadField,\r\n LookupMatrixField,\r\n SchemaConnectionField,\r\n SchedulePredecessorField,\r\n ],\r\n templateUrl: './dynamic-field.html',\r\n styleUrls: ['./dynamic-field.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n viewProviders: [\r\n { provide: ControlContainer, useExisting: FormGroupDirective },\r\n ],\r\n})\r\nexport class DynamicField {\r\n // Input signal with transform to handle class for text type\r\n readonly fieldConfig = input.required<DynamicFieldConfig>();\r\n\r\n // Computed property for transformed field config\r\n readonly transformedFieldConfig: Signal<DynamicFieldConfig> = computed(() =>\r\n this.transformToFieldConfig(this.fieldConfig()),\r\n );\r\n readonly isRequired = computed(() => {\r\n const field = this.transformedFieldConfig();\r\n return Boolean(\r\n field.required ||\r\n field.validators?.some(\r\n (validator: any) => validator?.type === 'required',\r\n ),\r\n );\r\n });\r\n\r\n // Inject ControlContainer to connect directly with parent form\r\n private controlContainer = inject(ControlContainer, { optional: true });\r\n\r\n // Input for the form control name\r\n readonly fieldName = input.required<string>();\r\n constructor() {}\r\n\r\n private transformToFieldConfig(value: any): DynamicFieldConfig {\r\n // If it's a plain object, transform it to appropriate field config\r\n if (typeof value === 'object') {\r\n if (value.type === 'text') {\r\n return new TextFieldConfig(value);\r\n }\r\n if (value.type === 'textarea') {\r\n return new TextareaFieldConfig(value);\r\n }\r\n if (value.type === 'select') {\r\n return new SelectFieldConfig(value);\r\n }\r\n if (value.type === 'date') {\r\n return new DateFieldConfig(value);\r\n }\r\n if (value.type === 'number') {\r\n return new NumberFieldConfig(value);\r\n }\r\n if (value.type === 'slider') {\r\n return new SliderFieldConfig(value);\r\n }\r\n if (value.type === 'multi-select') {\r\n return new MultiSelectFieldConfig(value);\r\n }\r\n if (value.type === 'pick-list') {\r\n return new PickListFieldConfig(value);\r\n }\r\n if (value.type === 'checkbox') {\r\n return new CheckboxFieldConfig(value);\r\n }\r\n if (value.type === 'radio-button') {\r\n return new RadioButtonFieldConfig(value);\r\n }\r\n if (value.type === 'radio-cards') {\r\n return new RadioCardsFieldConfig(value);\r\n }\r\n if (value.type === 'user-search') {\r\n return new UserSearchFieldConfig(value);\r\n }\r\n if (value.type === 'toggle') {\r\n return new ToggleFieldConfig(value);\r\n }\r\n if (value.type === 'editor-field') {\r\n return new EditorFieldConfig(value);\r\n }\r\n if (value.type === 'icon-field') {\r\n return new IconFieldConfig(value);\r\n }\r\n if (value.type === 'color-picker') {\r\n return new ColorPickerFieldConfig(value);\r\n }\r\n if (value.type === 'upload-file') {\r\n return new UploadFileFieldConfig(value);\r\n }\r\n if (value.type === 'spacer') {\r\n return new SpacerFieldConfig(value);\r\n }\r\n if (value.type === 'lookup-matrix') {\r\n return new LookupMatrixFieldConfig(value);\r\n }\r\n if (value.type === 'schema-connection') {\r\n return new SchemaConnectionFieldConfig(value);\r\n }\r\n if (value.type === 'predecessor') {\r\n return new SchedulePredecessorFieldConfig(value);\r\n }\r\n }\r\n\r\n // Default fallback to TextFieldConfig\r\n return new TextFieldConfig({\r\n ...value,\r\n });\r\n }\r\n}\r\n","@switch (transformedFieldConfig().type) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [type]=\"transformedFieldConfig().inputType || 'text'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"textarea\") {\r\n <mt-textarea-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [rows]=\"transformedFieldConfig().rows || 3\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [group]=\"transformedFieldConfig().group || false\"\r\n [optionGroupLabel]=\"transformedFieldConfig().optionGroupLabel || 'label'\"\r\n [optionGroupChildren]=\"\r\n transformedFieldConfig().optionGroupChildren || 'items'\r\n \"\r\n [size]=\"transformedFieldConfig().size\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [filter]=\"transformedFieldConfig().filter\"\r\n [formControlName]=\"fieldName()\"\r\n [hasPlaceholderPrefix]=\"transformedFieldConfig().hasPlaceholderPrefix\"\r\n />\r\n }\r\n @case (\"date\") {\r\n <mt-date-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [showTime]=\"transformedFieldConfig().showTime\"\r\n />\r\n }\r\n @case (\"number\") {\r\n <mt-number-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [placeholder]=\"transformedFieldConfig().placeholder\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [useGrouping]=\"transformedFieldConfig().useGrouping ?? false\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"slider\") {\r\n <mt-slider-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [min]=\"transformedFieldConfig().min ?? 0\"\r\n [max]=\"transformedFieldConfig().max ?? 100\"\r\n [step]=\"transformedFieldConfig().step\"\r\n [animate]=\"transformedFieldConfig().animate ?? false\"\r\n [unit]=\"transformedFieldConfig().unit || ''\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"multi-select\") {\r\n <mt-multi-select-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [maxSelectedLabels]=\"transformedFieldConfig().maxSelectedLabels\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"pick-list\") {\r\n <mt-pick-list-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [sourceHeader]=\"transformedFieldConfig().sourceHeader || 'Available'\"\r\n [targetHeader]=\"transformedFieldConfig().targetHeader || 'Selected'\"\r\n [showSourceControls]=\"transformedFieldConfig().showSourceControls ?? true\"\r\n [showTargetControls]=\"transformedFieldConfig().showTargetControls ?? true\"\r\n [showSourceFilter]=\"transformedFieldConfig().showSourceFilter ?? false\"\r\n [showTargetFilter]=\"transformedFieldConfig().showTargetFilter ?? false\"\r\n [filterBy]=\"transformedFieldConfig().filterBy\"\r\n [dataKey]=\"transformedFieldConfig().dataKey\"\r\n [dragdrop]=\"transformedFieldConfig().dragdrop\"\r\n [responsive]=\"transformedFieldConfig().responsive\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"user-search\") {\r\n <mt-user-search-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [hint]=\"transformedFieldConfig().hint || ''\"\r\n [apiUrl]=\"transformedFieldConfig().apiUrl || ''\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"checkbox\") {\r\n <mt-checkbox-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-button\") {\r\n <mt-radio-button-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [orientation]=\"transformedFieldConfig().orientation || 'vertical'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"radio-cards\") {\r\n <mt-radio-cards-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [options]=\"transformedFieldConfig().options || []\"\r\n [optionLabel]=\"transformedFieldConfig().optionLabel || 'label'\"\r\n [optionValue]=\"transformedFieldConfig().optionValue || 'value'\"\r\n [size]=\"transformedFieldConfig().size || 'small'\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"toggle\") {\r\n <mt-toggle-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [toggleShape]=\"transformedFieldConfig().toggleShape || 'toggle'\"\r\n [icon]=\"transformedFieldConfig().icon\"\r\n [descriptionCard]=\"transformedFieldConfig().descriptionCard\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"icon-field\") {\r\n <mt-icon-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"color-picker\") {\r\n <mt-color-picker-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n [appendTo]=\"transformedFieldConfig().appendTo\"\r\n />\r\n }\r\n @case (\"editor-field\") {\r\n <mt-editor-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"upload-file\") {\r\n <mt-upload-field\r\n [label]=\"transformedFieldConfig().label\"\r\n [formControlName]=\"fieldName()\"\r\n [shape]=\"transformedFieldConfig().shape\"\r\n [size]=\"transformedFieldConfig().size\"\r\n [userImgClass]=\"transformedFieldConfig().userImgClass\"\r\n [multiple]=\"transformedFieldConfig().multiple\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [endPoint]=\"transformedFieldConfig().endPoint\"\r\n [accept]=\"transformedFieldConfig().accept\"\r\n [fileSizeLimit]=\"transformedFieldConfig().fileSizeLimit\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [title]=\"transformedFieldConfig().title\"\r\n [description]=\"transformedFieldConfig().description\"\r\n />\r\n }\r\n @case (\"lookup-matrix\") {\r\n <mt-lookup-matrix-field [config]=\"transformedFieldConfig()\" />\r\n }\r\n @case (\"spacer\") {\r\n <div class=\"spacer\"></div>\r\n }\r\n @case (\"schema-connection\") {\r\n <mt-schema-connection-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [context]=\"transformedFieldConfig().context\"\r\n [filter]=\"transformedFieldConfig().filter ?? true\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n @case (\"predecessor\") {\r\n <mt-schedule-predecessor-field\r\n [label]=\"transformedFieldConfig().label || ''\"\r\n [placeholder]=\"transformedFieldConfig().placeholder || ''\"\r\n [configuration]=\"transformedFieldConfig().configuration\"\r\n [runtimeContext]=\"transformedFieldConfig().runtimeContext\"\r\n [required]=\"isRequired()\"\r\n [readonly]=\"transformedFieldConfig().readonly!\"\r\n [formControlName]=\"fieldName()\"\r\n />\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/forms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.62",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/forms",
|
|
6
6
|
"linkDirectory": true,
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"primeng": "21.0.1",
|
|
18
18
|
"@primeuix/themes": "^2.0.2",
|
|
19
19
|
"rxjs": "^7.8.2",
|
|
20
|
-
"@masterteam/components": "^0.0.
|
|
20
|
+
"@masterteam/components": "^0.0.130"
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"exports": {
|