@masterteam/forms 0.0.77 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/masterteam-forms-client-form.mjs +13 -4
- package/fesm2022/masterteam-forms-client-form.mjs.map +1 -1
- package/fesm2022/masterteam-forms-dynamic-field.mjs +8 -3
- package/fesm2022/masterteam-forms-dynamic-field.mjs.map +1 -1
- package/fesm2022/masterteam-forms-runtime-action-dialog.mjs +26 -5
- package/fesm2022/masterteam-forms-runtime-action-dialog.mjs.map +1 -1
- package/package.json +2 -2
- package/types/masterteam-forms-client-form.d.ts +2 -2
- package/types/masterteam-forms-runtime-action-dialog.d.ts +6 -2
|
@@ -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';\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\nexport interface TeamMemberApiDto {\r\n userId: string;\r\n user: { displayName?: string; fullName?: string; [key: string]: any } | null;\r\n [key: string]: any;\r\n}\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 /**\r\n * Fetch team members for a given level data entry.\r\n * Used when a User-type property has justTeamMembers configuration enabled.\r\n */\r\n getTeamMembers(\r\n levelDataId: number | string,\r\n ): Observable<Response<TeamMemberApiDto[]>> {\r\n return this.http.get<Response<TeamMemberApiDto[]>>(\r\n `LevelData/${levelDataId}/team-members`,\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 {\r\n DynamicFormConfig,\r\n DynamicFieldConfig,\r\n} from '@masterteam/components';\r\nimport type { EntityData, EntitySize } from '@masterteam/components/entities';\r\nimport {\r\n REQUEST_CONTEXT,\r\n ValidatorConfig,\r\n TextFieldConfig,\r\n EditorFieldConfig,\r\n SelectFieldConfig,\r\n MultiSelectFieldConfig,\r\n DateFieldConfig,\r\n NumberFieldConfig,\r\n SliderFieldConfig,\r\n ToggleFieldConfig,\r\n UserSearchFieldConfig,\r\n UploadFileFieldConfig,\r\n LookupMatrixFieldConfig,\r\n SchemaConnectionFieldConfig,\r\n SchedulePredecessorFieldConfig,\r\n EntityListFieldConfig,\r\n} from '@masterteam/components';\r\nimport { HttpContext } from '@angular/common/http';\r\n\r\nimport type {\r\n ClientFormConfiguration,\r\n ClientFormField,\r\n ClientPropertyItem,\r\n ClientLookup,\r\n ProcessFormValue,\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitField,\r\n ProcessFormContext,\r\n PropertyValueComparison,\r\n} from '../models/client-form.model';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\nconst WIDTH_TO_COLSPAN: Record<string, number> = {\r\n '25': 3,\r\n '50': 6,\r\n '100': 12,\r\n};\r\n\r\nconst WIDTH_TO_ENTITY_SIZE: Record<string, EntitySize> = {\r\n '25': 6,\r\n '50': 12,\r\n '100': 24,\r\n};\r\n\r\nconst SECTION_MODE_LAYOUT: NonNullable<DynamicFormConfig['layout']> = {\r\n sectionClass:\r\n 'flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0',\r\n};\r\n\r\nconst SECTION_MODE_HEADER_CLASS =\r\n 'm-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color';\r\n\r\nconst SECTION_MODE_BODY_CLASS =\r\n '@container grid grid-cols-12 gap-4 items-start p-4';\r\n\r\nexport interface ClientFormPreviewSection {\r\n key: string;\r\n label: string;\r\n order: number;\r\n entities: EntityData[];\r\n}\r\n\r\nexport interface TeamMemberOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\n// ============================================================================\r\n// Public Mapper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Convert a runtime FormConfiguration into a DynamicFormConfig\r\n * that can be passed directly to `<mt-dynamic-form>`.\r\n *\r\n * @param config The form configuration from the load API\r\n * @param lang Current UI language ('en' | 'ar')\r\n * @param mode 'create' or 'edit' — filters hidden fields accordingly\r\n * @param lookups Available lookup definitions for resolving Lookup/LookupMultiSelect options\r\n * @param teamMemberOptions Pre-fetched team member options (used when property configuration has justTeamMembers=true)\r\n */\r\nexport function mapToDynamicFormConfig(\r\n config: ClientFormConfiguration,\r\n lang: 'en' | 'ar' = 'en',\r\n mode: 'create' | 'edit' = 'create',\r\n lookups: ClientLookup[] = [],\r\n context: ProcessFormContext | null = null,\r\n readonly = false,\r\n teamMemberOptions: TeamMemberOption[] = [],\r\n): DynamicFormConfig {\r\n const useSectionModeStyles =\r\n config.renderMode === 'sections' || config.renderMode == null;\r\n\r\n return {\r\n ...(useSectionModeStyles ? { layout: SECTION_MODE_LAYOUT } : {}),\r\n sections: config.sections\r\n .slice()\r\n .sort((a, b) => a.order - b.order)\r\n .map((section) => {\r\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\r\n\r\n const visibleFields = section.fields\r\n .filter((field) => {\r\n // isRead=false → completely hidden\r\n if (field.isWrite !== true && field.isRead === false) return false;\r\n if (mode === 'create') return !field.hiddenInCreation;\r\n return !field.hiddenInEditForm;\r\n })\r\n .sort((a, b) => a.order - b.order);\r\n\r\n return {\r\n key: section.id,\r\n label: sectionName,\r\n type: 'header' as const,\r\n columns: 12,\r\n order: section.order,\r\n ...(useSectionModeStyles\r\n ? {\r\n headerClass: SECTION_MODE_HEADER_CLASS,\r\n bodyClass: SECTION_MODE_BODY_CLASS,\r\n }\r\n : {}),\r\n fields: visibleFields.map((field) =>\r\n mapFieldToConfig(\r\n field,\r\n lang,\r\n lookups,\r\n context,\r\n readonly,\r\n teamMemberOptions,\r\n ),\r\n ),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0),\r\n };\r\n}\r\n\r\n/**\r\n * Convert API property values into a flat key-value object\r\n * suitable for `formControl.patchValue()`.\r\n *\r\n * Only includes non-virtual (editable) values.\r\n */\r\nexport function mapValuesToFormValue(\r\n values: ProcessFormValue[],\r\n config?: ClientFormConfiguration | null,\r\n): Record<string, any> {\r\n const result: Record<string, any> = {};\r\n const fieldMap = config ? buildFieldValueMap(config) : null;\r\n\r\n for (const v of values) {\r\n if (v.metadata?.source === 'ProcessVirtual') continue;\r\n\r\n const targetFieldKey =\r\n resolveValueTargetKey(v, fieldMap) ?? v.propertyKey ?? null;\r\n if (!targetFieldKey) continue;\r\n\r\n result[targetFieldKey] = resolveLoadedFieldValue(v);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Convert the current form value back into the submit payload format.\r\n *\r\n * Uses form configuration metadata (same source used to render fields)\r\n * to map `requestPropertyId` and `viewType`.\r\n */\r\nexport function mapFormValueToSubmitFields(\r\n formValue: Record<string, any>,\r\n loadResponse: ProcessFormLoadResponse,\r\n): ProcessFormSubmitField[] {\r\n const metadataByKey = new Map<\r\n string,\r\n { propertyId?: number; viewType?: string }\r\n >();\r\n\r\n for (const section of loadResponse.formConfiguration?.sections ?? []) {\r\n for (const field of section.fields ?? []) {\r\n const { propertyId, viewType } = resolveFieldMeta(field);\r\n metadataByKey.set(field.propertyKey, {\r\n propertyId,\r\n viewType,\r\n });\r\n }\r\n }\r\n\r\n return Object.entries(formValue)\r\n .filter(([propertyKey, value]) => {\r\n if (value === undefined || value === null) return false;\r\n return metadataByKey.get(propertyKey)?.viewType !== 'LookupMatrix';\r\n })\r\n .map(([propertyKey, value]) => {\r\n const meta = metadataByKey.get(propertyKey);\r\n const normalizedValue = normalizeSubmitValue(value, meta?.viewType);\r\n if (normalizedValue === undefined || normalizedValue === null) {\r\n return null;\r\n }\r\n\r\n const submitField: ProcessFormSubmitField = {\r\n propertyKey,\r\n value: normalizedValue,\r\n };\r\n\r\n if (meta?.propertyId) {\r\n submitField.requestPropertyId = meta.propertyId;\r\n }\r\n\r\n return submitField;\r\n })\r\n .filter((value): value is ProcessFormSubmitField => !!value);\r\n}\r\n\r\nexport function getPreviewOnlyFieldKeys(\r\n config: ClientFormConfiguration,\r\n mode: 'create' | 'edit' = 'create',\r\n readonly = false,\r\n): string[] {\r\n return config.sections.flatMap((section) =>\r\n (section.fields ?? [])\r\n .filter(\r\n (field) =>\r\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\r\n )\r\n .map((field) => field.propertyKey),\r\n );\r\n}\r\n\r\nexport function mapPreviewFieldsToEntities(\r\n config: ClientFormConfiguration,\r\n values: ProcessFormValue[],\r\n mode: 'create' | 'edit' = 'create',\r\n readonly = false,\r\n): EntityData[] {\r\n return mapPreviewSectionsToEntities(\r\n config,\r\n values,\r\n 'en',\r\n mode,\r\n readonly,\r\n ).flatMap((section) => section.entities);\r\n}\r\n\r\nexport function mapPreviewSectionsToEntities(\r\n config: ClientFormConfiguration,\r\n values: ProcessFormValue[],\r\n lang: 'en' | 'ar' = 'en',\r\n mode: 'create' | 'edit' = 'create',\r\n readonly = false,\r\n): ClientFormPreviewSection[] {\r\n const fieldMap = buildFieldValueMap(config);\r\n const previewValueByKey = new Map<string, any>();\r\n const comparisonByKey = new Map<string, PropertyValueComparison>();\r\n\r\n for (const value of values) {\r\n if (value.metadata?.source === 'ProcessVirtual') continue;\r\n\r\n const targetFieldKey =\r\n resolveValueTargetKey(value, fieldMap) ?? value.propertyKey ?? null;\r\n if (!targetFieldKey) continue;\r\n\r\n previewValueByKey.set(targetFieldKey, value.value);\r\n if (value.comparison) {\r\n comparisonByKey.set(targetFieldKey, value.comparison);\r\n }\r\n }\r\n\r\n return config.sections\r\n .slice()\r\n .sort((a, b) => a.order - b.order)\r\n .map((section) => ({\r\n key: section.id,\r\n label: section.name[lang] ?? section.name.en ?? '',\r\n order: section.order,\r\n entities: (section.fields ?? [])\r\n .filter(\r\n (field) =>\r\n isFieldVisible(field, mode) && isPreviewOnlyField(field, readonly),\r\n )\r\n .sort((a, b) => a.order - b.order)\r\n .map((field) => {\r\n const property = field.propertyMetadata;\r\n\r\n return {\r\n ...(property as EntityData),\r\n name: (property.name as any)?.display,\r\n key: property.key ?? field.propertyKey,\r\n value: previewValueByKey.get(field.propertyKey),\r\n order: section.order * 1000 + field.order,\r\n configuration: {\r\n ...(property.configuration as Record<string, unknown>),\r\n size: WIDTH_TO_ENTITY_SIZE[field.width] ?? 24,\r\n labelPosition: 'top',\r\n },\r\n comparison: comparisonByKey.get(field.propertyKey),\r\n } satisfies EntityData;\r\n }),\r\n }))\r\n .filter((section) => section.entities.length > 0);\r\n}\r\n\r\n// ============================================================================\r\n// Internal Helpers\r\n// ============================================================================\r\n\r\nfunction isFieldVisible(\r\n field: ClientFormField,\r\n mode: 'create' | 'edit',\r\n): boolean {\r\n if (!isFieldReadable(field) && field.isWrite !== true) return false;\r\n if (mode === 'create') return !field.hiddenInCreation;\r\n return !field.hiddenInEditForm;\r\n}\r\n\r\nfunction isPreviewOnlyField(field: ClientFormField, readonly = false): boolean {\r\n return isFieldReadable(field) && (readonly || field.isWrite === false);\r\n}\r\n\r\nfunction isFieldReadable(field: ClientFormField): boolean {\r\n return field.isRead !== false || field.isWrite === true;\r\n}\r\n\r\nfunction isCalculatedField(field: ClientFormField): boolean {\r\n return field.propertyMetadata?.isCalculated === true;\r\n}\r\n\r\nfunction resolveFieldMeta(field: ClientFormField): {\r\n property: ClientPropertyItem;\r\n propertyId?: number;\r\n viewType: string;\r\n} {\r\n const property = field.propertyMetadata;\r\n return {\r\n property,\r\n propertyId: property?.propertyId,\r\n viewType: property?.viewType ?? 'Text',\r\n };\r\n}\r\n\r\nfunction mapFieldToConfig(\r\n field: ClientFormField,\r\n lang: 'en' | 'ar',\r\n lookups: ClientLookup[],\r\n context: ProcessFormContext | null,\r\n readonly = false,\r\n teamMemberOptions: TeamMemberOption[] = [],\r\n): DynamicFieldConfig {\r\n const { property: prop, viewType } = resolveFieldMeta(field);\r\n const label =\r\n (prop?.name as { display?: string } | undefined)?.display ??\r\n field.propertyKey;\r\n const colSpan = WIDTH_TO_COLSPAN[field.width] ?? 12;\r\n\r\n const base = {\r\n key: field.propertyKey,\r\n label,\r\n colSpan,\r\n order: field.order,\r\n placeholder: label,\r\n required: field.isRequired ?? false,\r\n disabled: isCalculatedField(field),\r\n readonly: readonly || field.isWrite === false,\r\n validators: field.isRequired\r\n ? [ValidatorConfig.required(`${label} is required`)]\r\n : [],\r\n formulaCondition: buildFormulaCondition(field),\r\n };\r\n\r\n switch (viewType) {\r\n // ── Text-like ──────────────────────────────────────────────\r\n case 'Text':\r\n case 'EditableListView':\r\n case 'LookupLog':\r\n return new TextFieldConfig(base);\r\n\r\n case 'LongText':\r\n return new EditorFieldConfig(base);\r\n\r\n // ── Numeric ───────────────────────────────────────────────\r\n case 'Number':\r\n return new NumberFieldConfig(base);\r\n\r\n case 'Currency':\r\n return new NumberFieldConfig({\r\n ...base,\r\n useGrouping: true,\r\n });\r\n\r\n case 'Percentage':\r\n return new SliderFieldConfig({\r\n ...base,\r\n min: 0,\r\n max: 100,\r\n unit: '%',\r\n });\r\n\r\n // ── Date / Time ───────────────────────────────────────────\r\n case 'Date':\r\n return new DateFieldConfig({ ...base, showTime: false });\r\n\r\n case 'DateTime':\r\n return new DateFieldConfig({ ...base, showTime: true });\r\n\r\n case 'Time':\r\n return new DateFieldConfig({ ...base, showTime: true });\r\n\r\n // ── Boolean ───────────────────────────────────────────────\r\n case 'Checkbox':\r\n return new ToggleFieldConfig(base);\r\n\r\n // ── File ──────────────────────────────────────────────────\r\n case 'Attachment': {\r\n const isMultiple =\r\n (prop?.configuration?.['IsMulitple'] as boolean) ?? false;\r\n return new UploadFileFieldConfig({\r\n ...base,\r\n multiple: isMultiple,\r\n });\r\n }\r\n\r\n // ── User Search ───────────────────────────────────────────\r\n case 'User': {\r\n const justTeamMembers = !!prop?.configuration?.['justTeamMembers'];\r\n if (justTeamMembers) {\r\n return new SelectFieldConfig({\r\n ...base,\r\n options: teamMemberOptions,\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n filter: teamMemberOptions.length > 10,\r\n showClear: !(field.isRequired ?? false),\r\n });\r\n }\r\n return new UserSearchFieldConfig({\r\n ...base,\r\n apiUrl: resolveUserSearchApiUrl(prop),\r\n context: new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n }),\r\n });\r\n }\r\n\r\n case 'MultiUser':\r\n return new UserSearchFieldConfig({\r\n ...base,\r\n apiUrl: resolveUserSearchApiUrl(prop),\r\n isMultiple: true,\r\n context: new HttpContext().set(REQUEST_CONTEXT, {\r\n useBaseUrl: false,\r\n }),\r\n });\r\n\r\n // ── Lookup (single select) ────────────────────────────────\r\n case 'Lookup': {\r\n const items = resolveLookupOptions(prop, lookups);\r\n return new SelectFieldConfig({\r\n ...base,\r\n options: items,\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n filter: items.length > 10,\r\n showClear: !(field.isRequired ?? false),\r\n });\r\n }\r\n\r\n // ── Lookup (multi select) ─────────────────────────────────\r\n case 'LookupMultiSelect': {\r\n const items = resolveLookupOptions(prop, lookups);\r\n return new MultiSelectFieldConfig({\r\n ...base,\r\n options: items,\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n filter: items.length > 10,\r\n display: 'chip',\r\n });\r\n }\r\n\r\n // ── Other select-based types ──────────────────────────────\r\n case 'Status':\r\n case 'InternalModule':\r\n case 'DynamicList':\r\n case 'API':\r\n case 'Location': {\r\n const options = extractOptionsFromProperty(prop);\r\n return new SelectFieldConfig({\r\n ...base,\r\n options: options ?? [],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n });\r\n }\r\n\r\n case 'LookupMatrix':\r\n return buildLookupMatrixFieldConfig(base, prop, lookups);\r\n\r\n // ── Connection (level-to-level) ─────────────────────────\r\n case 'Connection': {\r\n const connectionConfig = prop?.configuration ?? {};\r\n return new SchemaConnectionFieldConfig({\r\n ...base,\r\n configuration: connectionConfig,\r\n });\r\n }\r\n case 'Predecessor':\r\n return new SchedulePredecessorFieldConfig({\r\n ...base,\r\n configuration: prop?.configuration ?? null,\r\n runtimeContext: context\r\n ? {\r\n levelId: context.levelId,\r\n levelDataId: context.levelDataId,\r\n moduleDataId: context.moduleDataId,\r\n }\r\n : null,\r\n });\r\n\r\n // ── EntityList (related items list) ────────────────────\r\n case 'EntityList':\r\n return new EntityListFieldConfig({\r\n ...base,\r\n propertyId: prop?.propertyId ?? null,\r\n configuration: prop?.configuration ?? null,\r\n runtimeContext: context\r\n ? {\r\n sourceId: context.moduleDataId ?? context.levelDataId ?? null,\r\n levelId: context.levelId ?? null,\r\n levelDataId: context.levelDataId ?? null,\r\n }\r\n : null,\r\n });\r\n\r\n // ── Fallback ──────────────────────────────────────────────\r\n default:\r\n return new TextFieldConfig(base);\r\n }\r\n}\r\n\r\nfunction buildFormulaCondition(\r\n field: ClientFormField,\r\n): { formulaTokens: string; formulaText?: string; mode?: 'auto' } | undefined {\r\n if (!field.showConditionalDisplayFormula) return undefined;\r\n const formulaTokens = (field.conditionalDisplayFormula ?? '').trim();\r\n if (!formulaTokens) return undefined;\r\n\r\n return {\r\n formulaTokens,\r\n formulaText: field.conditionalDisplayFormula ?? '',\r\n mode: 'auto',\r\n };\r\n}\r\n\r\n/**\r\n * Resolve lookup items for Lookup / LookupMultiSelect viewTypes.\r\n *\r\n * Reads `configuration.lookup` (the lookup ID) from the property metadata,\r\n * finds the matching lookup definition, and maps its items to select options.\r\n */\r\nfunction resolveLookupOptions(\r\n prop: ClientPropertyItem | undefined,\r\n lookups: ClientLookup[],\r\n): ResolvedLookupOption[] {\r\n return resolveLookupOptionsById(\r\n coerceLookupId(prop?.configuration?.['lookup']),\r\n lookups,\r\n );\r\n}\r\n\r\n/**\r\n * Fallback option extractor for non-lookup select types\r\n * (Status, InternalModule, DynamicList, API, etc.).\r\n */\r\nfunction extractOptionsFromProperty(\r\n property: ClientPropertyItem | undefined,\r\n): { label: string; value: any }[] | null {\r\n if (!property?.configuration) return null;\r\n\r\n const config = property.configuration;\r\n\r\n if (Array.isArray(config['options'])) {\r\n return config['options'] as { label: string; value: any }[];\r\n }\r\n\r\n if (Array.isArray(config['items'])) {\r\n return (config['items'] as any[]).map((item) => ({\r\n label:\r\n typeof item.name === 'string'\r\n ? item.name\r\n : (item.name?.['en'] ?? item.label ?? String(item.value)),\r\n value: item.id ?? item.value ?? item.key,\r\n }));\r\n }\r\n\r\n return null;\r\n}\r\n\r\ntype ResolvedLookupOption = {\r\n id?: number | string;\r\n key?: string;\r\n label: string;\r\n value: any;\r\n color?: string | null;\r\n description?: string;\r\n};\r\n\r\nfunction resolveLookupOptionsById(\r\n lookupId: number | null,\r\n lookups: ClientLookup[],\r\n): ResolvedLookupOption[] {\r\n if (!lookupId || !lookups.length) return [];\r\n\r\n const lookup = lookups.find((item) => item.id === lookupId);\r\n if (!lookup) return [];\r\n\r\n return lookup.items\r\n .slice()\r\n .sort((a, b) => a.order - b.order)\r\n .map((item) => ({\r\n id: item.id,\r\n key: item.key,\r\n label: item.name?.display ?? item.name?.en ?? item.key,\r\n value: item.key,\r\n color: item.color ?? null,\r\n description:\r\n item.description?.display ?? item.description?.en ?? undefined,\r\n }));\r\n}\r\n\r\nfunction resolveLookupNameById(\r\n lookupId: number | null,\r\n lookups: ClientLookup[],\r\n): string {\r\n if (!lookupId) return '';\r\n\r\n const lookup = lookups.find((item) => item.id === lookupId);\r\n return lookup?.name?.display ?? lookup?.name?.en ?? lookup?.key ?? '';\r\n}\r\n\r\nfunction buildLookupMatrixFieldConfig(\r\n base: {\r\n key: string;\r\n label: string;\r\n colSpan: number;\r\n order: number;\r\n placeholder: string;\r\n required: boolean;\r\n disabled: boolean;\r\n readonly: boolean;\r\n validators: ValidatorConfig[];\r\n formulaCondition:\r\n | { formulaTokens: string; formulaText?: string; mode?: 'auto' }\r\n | undefined;\r\n },\r\n prop: ClientPropertyItem | undefined,\r\n lookups: ClientLookup[],\r\n): LookupMatrixFieldConfig {\r\n const configuration = (prop?.configuration ?? {}) as Record<string, unknown>;\r\n const xLookupId = coerceLookupId(configuration['xlookupSource']);\r\n const yLookupId = coerceLookupId(configuration['ylookupSource']);\r\n const zLookupId = coerceLookupId(configuration['zlookupId']);\r\n\r\n const xOptions = resolveLookupOptionsById(xLookupId, lookups);\r\n const yOptions = resolveLookupOptionsById(yLookupId, lookups);\r\n const zOptions = resolveLookupOptionsById(zLookupId, lookups);\r\n const zOptionsById = new Map(\r\n zOptions\r\n .filter((item) => item.id != null)\r\n .map((item) => [String(item.id), item] as const),\r\n );\r\n\r\n const rawCells = Array.isArray(configuration['lookupsMatrix'])\r\n ? (configuration['lookupsMatrix'] as Array<Record<string, unknown>>)\r\n : [];\r\n\r\n return new LookupMatrixFieldConfig({\r\n ...base,\r\n required: false,\r\n xFieldKey: String(configuration['xPropertyLookupKey'] ?? ''),\r\n yFieldKey: String(configuration['yPropertyLookupKey'] ?? ''),\r\n xAxisLabel: resolveLookupNameById(xLookupId, lookups),\r\n yAxisLabel: resolveLookupNameById(yLookupId, lookups),\r\n xOptions,\r\n yOptions,\r\n cells: rawCells.map((cell) => {\r\n const zOption = zOptionsById.get(String(cell['value'] ?? ''));\r\n\r\n return {\r\n row: Number(cell['row'] ?? 0),\r\n column: Number(cell['column'] ?? 0),\r\n xLookupItemId: String(cell['xValue'] ?? ''),\r\n yLookupItemId: String(cell['yValue'] ?? ''),\r\n zLookupItemId: cell['value'] == null ? null : String(cell['value']),\r\n label: zOption?.label ?? String(cell['value'] ?? ''),\r\n color: zOption?.color ?? null,\r\n };\r\n }),\r\n });\r\n}\r\n\r\nfunction resolveUserSearchApiUrl(prop: ClientPropertyItem | undefined): string {\r\n const groupId = prop?.configuration?.['group'];\r\n\r\n if (typeof groupId === 'number' && Number.isFinite(groupId) && groupId > 0) {\r\n return `Identity/users/search/group/${groupId}`;\r\n }\r\n\r\n if (typeof groupId === 'string') {\r\n const trimmed = groupId.trim();\r\n if (trimmed) {\r\n return `Identity/users/search/group/${trimmed}`;\r\n }\r\n }\r\n\r\n return 'Identity/users/search';\r\n}\r\n\r\nfunction coerceLookupId(value: unknown): number | null {\r\n if (typeof value === 'number' && Number.isFinite(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim() !== '') {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : null;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction normalizeSubmitValue(value: any, viewType?: string): any {\r\n switch (viewType) {\r\n case 'User':\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n return value['id'] ?? value;\r\n }\r\n return value;\r\n\r\n case 'MultiUser':\r\n if (Array.isArray(value)) {\r\n return value.map((v) =>\r\n v && typeof v === 'object' ? (v['id'] ?? v) : v,\r\n );\r\n }\r\n return value;\r\n\r\n case 'Attachment':\r\n if (Array.isArray(value)) {\r\n return value.map((v) =>\r\n v && typeof v === 'object' ? (v['id'] ?? v) : v,\r\n );\r\n }\r\n if (value && typeof value === 'object') {\r\n return value['id'] ?? value;\r\n }\r\n return value;\r\n\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction resolveLoadedFieldValue(value: ProcessFormValue): any {\r\n const resolvedValue =\r\n value.metadata?.viewType === 'User'\r\n ? value.value\r\n : (value.rawValue ?? value.value);\r\n\r\n switch (value.metadata?.viewType) {\r\n // case 'Date':\r\n // case 'DateTime':\r\n // case 'Time':\r\n // return coerceToDate(resolvedValue);\r\n\r\n default:\r\n return resolvedValue;\r\n }\r\n}\r\n\r\n// function coerceToDate(value: any): any {\r\n// if (value === null || value === undefined || value === '') {\r\n// return value;\r\n// }\r\n\r\n// if (value instanceof Date) {\r\n// return value;\r\n// }\r\n\r\n// const coerced = new Date(value);\r\n// return Number.isNaN(coerced.getTime()) ? value : coerced;\r\n// }\r\n\r\ntype FieldValueMeta = {\r\n key: string;\r\n propertyId?: number;\r\n};\r\n\r\ntype FieldValueMap = {\r\n fieldsByKey: Map<string, FieldValueMeta>;\r\n propertyIdToKey: Map<number, string>;\r\n aliasToKey: Map<string, string>;\r\n};\r\n\r\nfunction buildFieldValueMap(config: ClientFormConfiguration): FieldValueMap {\r\n const fieldsByKey = new Map<string, FieldValueMeta>();\r\n const propertyIdCandidates = new Map<number, Set<string>>();\r\n const aliasCandidates = new Map<string, Set<string>>();\r\n\r\n for (const section of config.sections ?? []) {\r\n for (const field of section.fields ?? []) {\r\n const { propertyId } = resolveFieldMeta(field);\r\n const fieldMeta: FieldValueMeta = {\r\n key: field.propertyKey,\r\n propertyId,\r\n };\r\n\r\n fieldsByKey.set(field.propertyKey, fieldMeta);\r\n\r\n if (propertyId != null) {\r\n if (!propertyIdCandidates.has(propertyId)) {\r\n propertyIdCandidates.set(propertyId, new Set<string>());\r\n }\r\n propertyIdCandidates.get(propertyId)!.add(field.propertyKey);\r\n }\r\n\r\n const aliases = new Set<string>([\r\n field.propertyKey,\r\n stripTemplatePrefix(field.propertyKey),\r\n ]);\r\n\r\n const property = field.propertyMetadata;\r\n if (property?.key) {\r\n aliases.add(property.key);\r\n aliases.add(stripTemplatePrefix(property.key));\r\n }\r\n\r\n aliases.forEach((alias) => {\r\n if (!alias) return;\r\n if (!aliasCandidates.has(alias)) {\r\n aliasCandidates.set(alias, new Set<string>());\r\n }\r\n aliasCandidates.get(alias)!.add(field.propertyKey);\r\n });\r\n }\r\n }\r\n\r\n const propertyIdToKey = new Map<number, string>();\r\n propertyIdCandidates.forEach((keys, propertyId) => {\r\n if (keys.size !== 1) return;\r\n propertyIdToKey.set(propertyId, [...keys][0]);\r\n });\r\n\r\n const aliasToKey = new Map<string, string>();\r\n aliasCandidates.forEach((keys, alias) => {\r\n if (keys.size !== 1) return;\r\n aliasToKey.set(alias, [...keys][0]);\r\n });\r\n\r\n return {\r\n fieldsByKey,\r\n propertyIdToKey,\r\n aliasToKey,\r\n };\r\n}\r\n\r\nfunction resolveValueTargetKey(\r\n value: ProcessFormValue,\r\n fieldMap: FieldValueMap | null,\r\n): string | null {\r\n if (!fieldMap) {\r\n return value.propertyKey ?? null;\r\n }\r\n\r\n const exactCandidates = [value.propertyKey, value.metadata?.key].filter(\r\n (candidate): candidate is string => !!candidate,\r\n );\r\n\r\n for (const candidate of exactCandidates) {\r\n if (fieldMap.fieldsByKey.has(candidate)) {\r\n return candidate;\r\n }\r\n }\r\n\r\n const propertyId = value.metadata?.propertyId;\r\n if (propertyId != null && fieldMap.propertyIdToKey.has(propertyId)) {\r\n return fieldMap.propertyIdToKey.get(propertyId)!;\r\n }\r\n\r\n const aliasCandidates = exactCandidates.flatMap((candidate) => [\r\n candidate,\r\n stripTemplatePrefix(candidate),\r\n ]);\r\n\r\n for (const candidate of aliasCandidates) {\r\n if (!candidate) continue;\r\n if (fieldMap.aliasToKey.has(candidate)) {\r\n return fieldMap.aliasToKey.get(candidate)!;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction stripTemplatePrefix(value: string): string {\r\n return value.replace(/^template_\\d+_/, '');\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Message } from 'primeng/message';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\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 type TeamMemberOption,\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 {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} 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 Message,\r\n TranslocoDirective,\r\n TranslocoPipe,\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 private readonly teamMemberOptions = signal<TeamMemberOption[]>([]);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n protected readonly state = inject(ClientFormStateService);\r\n readonly validationSummary =\r\n viewChild<ElementRef<HTMLElement>>('validationSummary');\r\n private readonly dynamicForm = viewChild(DynamicForm);\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 stepValidationPending = 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 defaultValues = input<Record<string, any> | null>(null);\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 confirmWarningsOnSubmit = input(true);\r\n readonly confirmWarningsOnStepChange = input(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 /**\r\n * When non-empty, only fields whose property key is in this list are rendered\r\n * in the editable form. The preview section is hidden as well so the form\r\n * shows nothing but the allowed fields. Used by callers like the EntityList\r\n * Write-mode add dialog to restrict the form to `writeFields`.\r\n */\r\n readonly allowedFieldKeys = input<string[]>([]);\r\n readonly rtl = computed(() => this.lang() === 'ar');\r\n readonly stepNavigationValidating = computed(() =>\r\n this.stepValidationPending(),\r\n );\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 this.teamMemberOptions(),\r\n );\r\n });\r\n\r\n readonly initialValues = computed<Record<string, any>>(() => {\r\n const mappedValues = mapValuesToFormValue(\r\n this.state.formValues(),\r\n this.state.formConfiguration(),\r\n );\r\n\r\n return {\r\n ...(this.defaultValues() ?? {}),\r\n ...mappedValues,\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 // When restricted to a specific allow-list, hide the preview entirely.\r\n if (this.allowedFieldKeys().length > 0) 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 const allowedKeys = this.allowedFieldKeys();\r\n const allowedSet = allowedKeys.length > 0 ? new Set(allowedKeys) : null;\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((field) => {\r\n if (field.key && previewFieldKeys.has(field.key)) return false;\r\n if (allowedSet && (!field.key || !allowedSet.has(field.key)))\r\n return false;\r\n return true;\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() || this.tabsEnabled()) 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 stepValidationPending = this.stepValidationPending();\r\n const canGoToPreviousStep =\r\n stepNavigationEnabled && currentStep > 1 && !stepValidationPending;\r\n const canGoToNextStep =\r\n stepNavigationEnabled &&\r\n currentStep < stepCount &&\r\n !stepValidationPending;\r\n const hasNextStep = 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: hasNextStep,\r\n showSubmit:\r\n isLoaded &&\r\n !loading &&\r\n !stepValidationPending &&\r\n (!stepNavigationEnabled || currentStep >= stepCount),\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 effect(() => {\r\n const submitValidationCount = this.submitValidationMessages().length;\r\n const validationSummary = this.validationSummary()?.nativeElement;\r\n\r\n if (submitValidationCount === 0 || !validationSummary) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n queueMicrotask(() => {\r\n validationSummary.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\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.teamMemberOptions.set([]);\r\n this.stepValidationPending.set(false);\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\r\n // Fetch team members if any User field has justTeamMembers=true\r\n const hasJustTeamMembers =\r\n response.data.formConfiguration?.sections\r\n .flatMap((s) => s.fields ?? [])\r\n .some(\r\n (f) =>\r\n f.propertyMetadata?.viewType === 'User' &&\r\n !!f.propertyMetadata?.configuration?.['justTeamMembers'],\r\n ) ?? false;\r\n\r\n const levelDataId =\r\n this.levelDataId() ?? response.data.context?.levelDataId;\r\n if (hasJustTeamMembers && levelDataId != null) {\r\n this.api.getTeamMembers(levelDataId).subscribe({\r\n next: (res) => {\r\n const options: TeamMemberOption[] = (res.data ?? []).map(\r\n (m) => ({\r\n label: m.user?.displayName ?? m.user?.fullName ?? m.userId,\r\n value: m.userId,\r\n }),\r\n );\r\n this.teamMemberOptions.set(options);\r\n },\r\n });\r\n }\r\n } else {\r\n const msg: string =\r\n response.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-load-failed',\r\n );\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg: string =\r\n err?.error?.message ??\r\n err?.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-load-failed',\r\n );\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 = this.translocoService.translate(\r\n 'clientForm.form-must-load-submit',\r\n );\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.submitError.set(null);\r\n this.submitValidationMessages.set([]);\r\n\r\n if (!this.validateLocalFormForSubmit()) {\r\n return;\r\n }\r\n\r\n this.state.submitting.set(true);\r\n\r\n const submitRequest = this.buildSubmitRequest(loadResponse);\r\n const validationRequest = this.buildSubmitRequest(loadResponse, {\r\n IsSteps: this.resolveValidateIsSteps(false),\r\n });\r\n\r\n this.submitSub = this.api.validate(validationRequest).subscribe({\r\n next: (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;\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;\r\n }\r\n\r\n const warnings = this.runtimeWarnings();\r\n if (this.confirmWarningsOnSubmit() && warnings.length > 0) {\r\n this.state.submitting.set(false);\r\n this.confirmValidationWarnings(\r\n warnings,\r\n 'clientForm.warning-confirmation-question',\r\n this.translocoService.translate('clientForm.continue-submit'),\r\n () => {\r\n this.state.submitting.set(true);\r\n this.submitValidationMessages.set([]);\r\n this.executeSubmit(submitRequest);\r\n },\r\n );\r\n return;\r\n }\r\n\r\n this.executeSubmit(submitRequest);\r\n },\r\n error: (err) => {\r\n this.state.submitting.set(false);\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to validate 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.stepValidationPending.set(false);\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 if (this.stepValidationPending()) return;\r\n\r\n const currentStep = this.currentStep();\r\n if (value === currentStep) return;\r\n if (this.isBlockedFutureStep(value, currentStep)) return;\r\n\r\n if (!this.requiresForwardStepValidation(value, currentStep)) {\r\n this.applyStepChange(value);\r\n return;\r\n }\r\n\r\n const targetStep = Math.min(value, currentStep + 1);\r\n this.validateAndAdvanceStep(targetStep);\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()) &&\r\n this.currentStep() > 1 &&\r\n !this.stepValidationPending()\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 !this.stepValidationPending()\r\n );\r\n }\r\n\r\n isStepButtonDisabled(value: number): boolean {\r\n return (\r\n this.stepNavigationValidating() ||\r\n this.isBlockedFutureStep(value, this.currentStep())\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 options?: {\r\n IsSteps?: boolean;\r\n },\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 if (options?.IsSteps != null) req.IsSteps = options.IsSteps;\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 validateAndAdvanceStep(targetStep: number): void {\r\n if (this.stepValidationPending()) {\r\n return;\r\n }\r\n\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) {\r\n const msg = this.translocoService.translate(\r\n 'clientForm.form-must-load-step',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(msg, 'error'),\r\n ]);\r\n this.errored.emit(msg);\r\n return;\r\n }\r\n\r\n this.submitSub?.unsubscribe();\r\n this.stepValidationPending.set(true);\r\n this.state.submitError.set(null);\r\n this.submitValidationMessages.set([]);\r\n\r\n const request = this.buildSubmitRequest(loadResponse, {\r\n IsSteps: this.resolveValidateIsSteps(true),\r\n });\r\n\r\n this.submitSub = this.api.validate(request).subscribe({\r\n next: (validationResponse) => {\r\n this.stepValidationPending.set(false);\r\n\r\n const validation = validationResponse.data;\r\n if (!validation) {\r\n const msg = validationResponse.message ?? 'Failed to validate form';\r\n this.handleValidationRequestFailure(msg);\r\n return;\r\n }\r\n\r\n const backendMessages = this.mapSubmitValidationMessages(\r\n validation.results ?? [],\r\n );\r\n const localBlockingIssues = this.hasLocalBlockingValidationIssues();\r\n\r\n this.submitValidationMessages.set([\r\n ...backendMessages,\r\n ...(localBlockingIssues\r\n ? [\r\n this.createValidationFeedbackMessage(\r\n this.translocoService.translate('clientForm.validation-next'),\r\n 'error',\r\n ),\r\n ]\r\n : []),\r\n ]);\r\n\r\n if (validation.hasBlockingFailures || localBlockingIssues) {\r\n return;\r\n }\r\n\r\n const warnings = this.runtimeWarnings();\r\n if (this.confirmWarningsOnStepChange() && warnings.length > 0) {\r\n this.confirmValidationWarnings(\r\n warnings,\r\n 'clientForm.warning-confirmation-question-next',\r\n this.translocoService.translate('clientForm.next'),\r\n () => this.applyStepChange(targetStep),\r\n );\r\n return;\r\n }\r\n\r\n this.applyStepChange(targetStep);\r\n },\r\n error: (err) => {\r\n this.stepValidationPending.set(false);\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to validate form';\r\n this.handleValidationRequestFailure(msg);\r\n },\r\n });\r\n }\r\n\r\n private applyStepChange(value: number): void {\r\n this.submitValidationMessages.set([]);\r\n this.currentStep.set(value);\r\n }\r\n\r\n private requiresForwardStepValidation(\r\n targetStep: number,\r\n currentStep: number,\r\n ): boolean {\r\n return (\r\n targetStep > currentStep && (this.stepsEnabled() || this.wizardEnabled())\r\n );\r\n }\r\n\r\n private isBlockedFutureStep(\r\n targetStep: number,\r\n currentStep: number,\r\n ): boolean {\r\n return (\r\n targetStep > currentStep + 1 &&\r\n (this.stepsEnabled() || this.wizardEnabled())\r\n );\r\n }\r\n\r\n private resolveValidateIsSteps(\r\n isIntermediateStepValidation: boolean,\r\n ): boolean | undefined {\r\n if (!(this.stepsEnabled() || this.wizardEnabled())) {\r\n return undefined;\r\n }\r\n\r\n return isIntermediateStepValidation;\r\n }\r\n\r\n private hasLocalBlockingValidationIssues(): boolean {\r\n return (\r\n this.formControl.invalid ||\r\n this.formRuntimeMessages().some((msg) => msg.severity === 'error')\r\n );\r\n }\r\n\r\n private validateLocalFormForSubmit(): boolean {\r\n this.dynamicForm()?.markAllAsTouched();\r\n this.formControl.markAllAsTouched();\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n\r\n if (!this.hasLocalBlockingValidationIssues()) {\r\n return true;\r\n }\r\n\r\n this.showFirstInvalidSection();\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(\r\n this.translocoService.translate('clientForm.validation'),\r\n 'error',\r\n ),\r\n ]);\r\n\r\n return false;\r\n }\r\n\r\n private showFirstInvalidSection(): void {\r\n if (!this.sectionNavigationEnabled()) {\r\n return;\r\n }\r\n\r\n const dynamicForm = this.dynamicForm();\r\n if (!dynamicForm) {\r\n return;\r\n }\r\n\r\n const invalidSectionIndex = this.stepSections().findIndex((section) =>\r\n section.fields.some(\r\n (field) => !!field.key && dynamicForm.isControlInvalid(field.key),\r\n ),\r\n );\r\n\r\n if (invalidSectionIndex >= 0) {\r\n this.currentStep.set(invalidSectionIndex + 1);\r\n }\r\n }\r\n\r\n private handleValidationRequestFailure(message: string): void {\r\n this.state.setSubmitError(message);\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(message, 'error'),\r\n ]);\r\n this.errored.emit(message);\r\n }\r\n\r\n private createValidationFeedbackMessage(\r\n message: string,\r\n severity: 'error' | 'warning',\r\n ): FormulaRuntimeMessage {\r\n return {\r\n code: 'FORMULA_FALSE',\r\n severity,\r\n message,\r\n };\r\n }\r\n\r\n private confirmValidationWarnings(\r\n warnings: FormulaRuntimeMessage[],\r\n questionTranslationKey: string,\r\n acceptLabel: string,\r\n onAccept: () => void,\r\n ): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n header: this.translocoService.translate(\r\n 'clientForm.warning-confirmation-header',\r\n ),\r\n message: this.buildWarningConfirmationMessage(\r\n warnings,\r\n questionTranslationKey,\r\n ),\r\n acceptLabel: acceptLabel,\r\n acceptButton: {\r\n severity: 'warn',\r\n },\r\n accept: onAccept,\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private executeSubmit(request: ProcessFormSubmitRequest): void {\r\n this.submitSub = this.api.submit(request).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: string =\r\n response.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-submit-failed',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n this.state.submitting.set(false);\r\n const msg: string =\r\n err?.error?.message ??\r\n err?.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-submit-failed',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n private buildWarningConfirmationMessage(\r\n warnings: FormulaRuntimeMessage[],\r\n questionTranslationKey: string,\r\n ): string {\r\n const intro = this.translocoService.translate(\r\n 'clientForm.warning-confirmation-message',\r\n );\r\n const question = this.translocoService.translate(questionTranslationKey);\r\n const warningLines = [\r\n ...new Set(\r\n warnings\r\n .map((warning) => warning.message?.trim())\r\n .filter((message): message is string => !!message),\r\n ),\r\n ].map((message) => `- ${message}`);\r\n\r\n return [intro, ...warningLines, '', question].join('\\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 this.translocoService.translate('clientForm.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-4\">\r\n @for (section of previewEntitySections(); track section.key) {\r\n <div\r\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\r\n >\r\n @if (section.label) {\r\n <h3\r\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\r\n >\r\n {{ section.label }}\r\n </h3>\r\n }\r\n <div class=\"p-4\">\r\n <mt-entities-preview [entities]=\"section.entities\" />\r\n </div>\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 gap-3 text-left focus-visible:outline-none\"\r\n [class.cursor-pointer]=\"!isStepButtonDisabled(step.value)\"\r\n [class.cursor-default]=\"isStepButtonDisabled(step.value)\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"step.state === 'current' ? 'step' : null\"\r\n [disabled]=\"isStepButtonDisabled(step.value)\"\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 border text-base font-semibold transition-all duration-200\"\r\n [class]=\"\r\n step.state === 'current'\r\n ? 'border-primary ring-2 ring-primary/20 bg-primary text-white '\r\n : step.state === 'completed'\r\n ? 'border-primary text-primary bg-primary-100 '\r\n : step.state === 'upcoming'\r\n ? 'border-transparent 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 #validationSummary class=\"flex flex-col gap-3 scroll-mt-4\">\r\n @if (runtimeErrors().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-errors\") }}\r\n </p>\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"error\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-warnings\") }}\r\n </p>\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"warn\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\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]=\"'previous' | transloco\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === 1 || stepNavigationValidating()\r\n \"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"'next' | transloco\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === stepSections().length ||\r\n stepNavigationValidating()\r\n \"\r\n [loading]=\"stepNavigationValidating()\"\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 #validationSummary class=\"flex flex-col gap-3 scroll-mt-4\">\r\n @if (runtimeErrors().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-errors\") }}\r\n </p>\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"error\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-warnings\") }}\r\n </p>\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"warn\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\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 [class.cursor-pointer]=\"\r\n !isStepButtonDisabled(step.value)\r\n \"\r\n [class.cursor-default]=\"\r\n isStepButtonDisabled(step.value)\r\n \"\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 [disabled]=\"isStepButtonDisabled(step.value)\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-10 w-10 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\"\r\n [class.cursor-pointer]=\"\r\n !isStepButtonDisabled(step.value)\r\n \"\r\n [class.cursor-default]=\"\r\n isStepButtonDisabled(step.value)\r\n \"\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]=\"'previous' | transloco\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === 1 || stepNavigationValidating()\r\n \"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"'next' | transloco\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === stepSections().length ||\r\n stepNavigationValidating()\r\n \"\r\n [loading]=\"stepNavigationValidating()\"\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 {{ t(\"no-form-required\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import type { PropertyValueComparison } from '@masterteam/components/entities';\r\n\r\nexport type {\r\n ComparisonValueSide,\r\n ValueComparison,\r\n EntityComparisonField,\r\n EntityComparisonOperation,\r\n EntityListComparisonRow,\r\n EntityListComparison,\r\n PropertyValueComparison,\r\n} from '@masterteam/components/entities';\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 IsSteps?: boolean;\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 comparison?: PropertyValueComparison;\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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"}
|
|
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\nexport interface TeamMemberApiDto {\r\n userId: string;\r\n user: { displayName?: string; fullName?: string; [key: string]: any } | null;\r\n [key: string]: any;\r\n}\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 /**\r\n * Fetch team members for a given level data entry.\r\n * Used when a User-type property has justTeamMembers configuration enabled.\r\n */\r\n getTeamMembers(\r\n levelDataId: number | string,\r\n ): Observable<Response<TeamMemberApiDto[]>> {\r\n return this.http.get<Response<TeamMemberApiDto[]>>(\r\n `LevelData/${levelDataId}/team-members`,\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 EntityListFieldConfig,\n LocationFieldConfig,\n} from '@masterteam/components';\nimport { normalizeLocationValue } from '@masterteam/components/location-field';\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 PropertyValueComparison,\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\nconst SECTION_MODE_LAYOUT: NonNullable<DynamicFormConfig['layout']> = {\n sectionClass:\n 'flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0',\n};\n\nconst SECTION_MODE_HEADER_CLASS =\n 'm-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color';\n\nconst SECTION_MODE_BODY_CLASS =\n '@container grid grid-cols-12 gap-4 items-start p-4';\n\nexport interface ClientFormPreviewSection {\n key: string;\n label: string;\n order: number;\n entities: EntityData[];\n}\n\nexport interface TeamMemberOption {\n label: string;\n value: string;\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 * @param teamMemberOptions Pre-fetched team member options (used when property configuration has justTeamMembers=true)\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 teamMemberOptions: TeamMemberOption[] = [],\n): DynamicFormConfig {\n const useSectionModeStyles =\n config.renderMode === 'sections' || config.renderMode == null;\n\n return {\n ...(useSectionModeStyles ? { layout: SECTION_MODE_LAYOUT } : {}),\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 ...(useSectionModeStyles\n ? {\n headerClass: SECTION_MODE_HEADER_CLASS,\n bodyClass: SECTION_MODE_BODY_CLASS,\n }\n : {}),\n fields: visibleFields.map((field) =>\n mapFieldToConfig(\n field,\n lang,\n lookups,\n context,\n readonly,\n teamMemberOptions,\n ),\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 const comparisonByKey = new Map<string, PropertyValueComparison>();\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 if (value.comparison) {\n comparisonByKey.set(targetFieldKey, value.comparison);\n }\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 comparison: comparisonByKey.get(field.propertyKey),\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 teamMemberOptions: TeamMemberOption[] = [],\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 const isMultiple =\n (prop?.configuration?.['IsMulitple'] as boolean) ?? false;\n return new UploadFileFieldConfig({\n ...base,\n multiple: isMultiple,\n });\n }\n\n // ── User Search ───────────────────────────────────────────\n case 'User': {\n const justTeamMembers = !!prop?.configuration?.['justTeamMembers'];\n if (justTeamMembers) {\n return new SelectFieldConfig({\n ...base,\n options: teamMemberOptions,\n optionLabel: 'label',\n optionValue: 'value',\n filter: teamMemberOptions.length > 10,\n showClear: !(field.isRequired ?? false),\n });\n }\n return new UserSearchFieldConfig({\n ...base,\n apiUrl: resolveUserSearchApiUrl(prop),\n context: new HttpContext().set(REQUEST_CONTEXT, {\n useBaseUrl: false,\n }),\n });\n }\n\n case 'MultiUser':\n return new UserSearchFieldConfig({\n ...base,\n apiUrl: resolveUserSearchApiUrl(prop),\n isMultiple: true,\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 const options = extractOptionsFromProperty(prop);\n return new SelectFieldConfig({\n ...base,\n options: options ?? [],\n optionLabel: 'label',\n optionValue: 'value',\n });\n }\n\n case 'Location':\n return new LocationFieldConfig({\n ...base,\n configuration: prop?.configuration ?? null,\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 // ── EntityList (related items list) ────────────────────\n case 'EntityList':\n return new EntityListFieldConfig({\n ...base,\n propertyId: prop?.propertyId ?? null,\n configuration: prop?.configuration ?? null,\n runtimeContext: context\n ? {\n sourceId: context.moduleDataId ?? context.levelDataId ?? null,\n levelId: context.levelId ?? null,\n levelDataId: context.levelDataId ?? null,\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 resolveUserSearchApiUrl(prop: ClientPropertyItem | undefined): string {\n const groupId = prop?.configuration?.['group'];\n\n if (typeof groupId === 'number' && Number.isFinite(groupId) && groupId > 0) {\n return `Identity/users/search/group/${groupId}`;\n }\n\n if (typeof groupId === 'string') {\n const trimmed = groupId.trim();\n if (trimmed) {\n return `Identity/users/search/group/${trimmed}`;\n }\n }\n\n return 'Identity/users/search';\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 case 'MultiUser':\n if (Array.isArray(value)) {\n return value.map((v) =>\n v && typeof v === 'object' ? (v['id'] ?? v) : v,\n );\n }\n return value;\n\n case 'Attachment':\n if (Array.isArray(value)) {\n return value.map((v) =>\n v && typeof v === 'object' ? (v['id'] ?? v) : v,\n );\n }\n if (value && typeof value === 'object') {\n return value['id'] ?? value;\n }\n return value;\n\n case 'Location':\n return normalizeLocationValue(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 case 'Location':\n return normalizeLocationValue(resolvedValue);\n\n default:\n return resolvedValue;\n }\n}\n\n// function 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 ElementRef,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Message } from 'primeng/message';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\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 type TeamMemberOption,\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 {\r\n TranslocoDirective,\r\n TranslocoPipe,\r\n TranslocoService,\r\n} 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 Message,\r\n TranslocoDirective,\r\n TranslocoPipe,\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 private readonly teamMemberOptions = signal<TeamMemberOption[]>([]);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n protected readonly state = inject(ClientFormStateService);\r\n readonly validationSummary =\r\n viewChild<ElementRef<HTMLElement>>('validationSummary');\r\n private readonly dynamicForm = viewChild(DynamicForm);\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 stepValidationPending = 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 defaultValues = input<Record<string, any> | null>(null);\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 confirmWarningsOnSubmit = input(true);\r\n readonly confirmWarningsOnStepChange = input(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 /**\r\n * When non-empty, only fields whose property key is in this list are rendered\r\n * in the editable form. The preview section is hidden as well so the form\r\n * shows nothing but the allowed fields. Used by callers like the EntityList\r\n * Write-mode add dialog to restrict the form to `writeFields`.\r\n */\r\n readonly allowedFieldKeys = input<string[]>([]);\r\n readonly rtl = computed(() => this.lang() === 'ar');\r\n readonly stepNavigationValidating = computed(() =>\r\n this.stepValidationPending(),\r\n );\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 this.teamMemberOptions(),\r\n );\r\n });\r\n\r\n readonly initialValues = computed<Record<string, any>>(() => {\r\n const mappedValues = mapValuesToFormValue(\r\n this.state.formValues(),\r\n this.state.formConfiguration(),\r\n );\r\n\r\n return {\r\n ...(this.defaultValues() ?? {}),\r\n ...mappedValues,\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 // When restricted to a specific allow-list, hide the preview entirely.\r\n if (this.allowedFieldKeys().length > 0) 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 const allowedKeys = this.allowedFieldKeys();\r\n const allowedSet = allowedKeys.length > 0 ? new Set(allowedKeys) : null;\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((field) => {\r\n if (field.key && previewFieldKeys.has(field.key)) return false;\r\n if (allowedSet && (!field.key || !allowedSet.has(field.key)))\r\n return false;\r\n return true;\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() || this.tabsEnabled()) 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 stepValidationPending = this.stepValidationPending();\r\n const canGoToPreviousStep =\r\n stepNavigationEnabled && currentStep > 1 && !stepValidationPending;\r\n const canGoToNextStep =\r\n stepNavigationEnabled &&\r\n currentStep < stepCount &&\r\n !stepValidationPending;\r\n const hasNextStep = 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: hasNextStep,\r\n showSubmit:\r\n isLoaded &&\r\n !loading &&\r\n !stepValidationPending &&\r\n (!stepNavigationEnabled || currentStep >= stepCount),\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 effect(() => {\r\n const submitValidationCount = this.submitValidationMessages().length;\r\n const validationSummary = this.validationSummary()?.nativeElement;\r\n\r\n if (submitValidationCount === 0 || !validationSummary) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n queueMicrotask(() => {\r\n validationSummary.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n });\r\n });\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.teamMemberOptions.set([]);\r\n this.stepValidationPending.set(false);\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\r\n // Fetch team members if any User field has justTeamMembers=true\r\n const hasJustTeamMembers =\r\n response.data.formConfiguration?.sections\r\n .flatMap((s) => s.fields ?? [])\r\n .some(\r\n (f) =>\r\n f.propertyMetadata?.viewType === 'User' &&\r\n !!f.propertyMetadata?.configuration?.['justTeamMembers'],\r\n ) ?? false;\r\n\r\n const levelDataId =\r\n this.levelDataId() ?? response.data.context?.levelDataId;\r\n if (hasJustTeamMembers && levelDataId != null) {\r\n this.api.getTeamMembers(levelDataId).subscribe({\r\n next: (res) => {\r\n const options: TeamMemberOption[] = (res.data ?? []).map(\r\n (m) => ({\r\n label: m.user?.displayName ?? m.user?.fullName ?? m.userId,\r\n value: m.userId,\r\n }),\r\n );\r\n this.teamMemberOptions.set(options);\r\n },\r\n });\r\n }\r\n } else {\r\n const msg: string =\r\n response.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-load-failed',\r\n );\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg: string =\r\n err?.error?.message ??\r\n err?.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-load-failed',\r\n );\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 = this.translocoService.translate(\r\n 'clientForm.form-must-load-submit',\r\n );\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.submitError.set(null);\r\n this.submitValidationMessages.set([]);\r\n\r\n if (!this.validateLocalFormForSubmit()) {\r\n return;\r\n }\r\n\r\n this.state.submitting.set(true);\r\n\r\n const submitRequest = this.buildSubmitRequest(loadResponse);\r\n const validationRequest = this.buildSubmitRequest(loadResponse, {\r\n IsSteps: this.resolveValidateIsSteps(false),\r\n });\r\n\r\n this.submitSub = this.api.validate(validationRequest).subscribe({\r\n next: (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;\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;\r\n }\r\n\r\n const warnings = this.runtimeWarnings();\r\n if (this.confirmWarningsOnSubmit() && warnings.length > 0) {\r\n this.state.submitting.set(false);\r\n this.confirmValidationWarnings(\r\n warnings,\r\n 'clientForm.warning-confirmation-question',\r\n this.translocoService.translate('clientForm.continue-submit'),\r\n () => {\r\n this.state.submitting.set(true);\r\n this.submitValidationMessages.set([]);\r\n this.executeSubmit(submitRequest);\r\n },\r\n );\r\n return;\r\n }\r\n\r\n this.executeSubmit(submitRequest);\r\n },\r\n error: (err) => {\r\n this.state.submitting.set(false);\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to validate 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.stepValidationPending.set(false);\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 if (this.stepValidationPending()) return;\r\n\r\n const currentStep = this.currentStep();\r\n if (value === currentStep) return;\r\n if (this.isBlockedFutureStep(value, currentStep)) return;\r\n\r\n if (!this.requiresForwardStepValidation(value, currentStep)) {\r\n this.applyStepChange(value);\r\n return;\r\n }\r\n\r\n const targetStep = Math.min(value, currentStep + 1);\r\n this.validateAndAdvanceStep(targetStep);\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()) &&\r\n this.currentStep() > 1 &&\r\n !this.stepValidationPending()\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 !this.stepValidationPending()\r\n );\r\n }\r\n\r\n isStepButtonDisabled(value: number): boolean {\r\n return (\r\n this.stepNavigationValidating() ||\r\n this.isBlockedFutureStep(value, this.currentStep())\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 options?: {\r\n IsSteps?: boolean;\r\n },\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 if (options?.IsSteps != null) req.IsSteps = options.IsSteps;\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 validateAndAdvanceStep(targetStep: number): void {\r\n if (this.stepValidationPending()) {\r\n return;\r\n }\r\n\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) {\r\n const msg = this.translocoService.translate(\r\n 'clientForm.form-must-load-step',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(msg, 'error'),\r\n ]);\r\n this.errored.emit(msg);\r\n return;\r\n }\r\n\r\n this.submitSub?.unsubscribe();\r\n this.stepValidationPending.set(true);\r\n this.state.submitError.set(null);\r\n this.submitValidationMessages.set([]);\r\n\r\n const request = this.buildSubmitRequest(loadResponse, {\r\n IsSteps: this.resolveValidateIsSteps(true),\r\n });\r\n\r\n this.submitSub = this.api.validate(request).subscribe({\r\n next: (validationResponse) => {\r\n this.stepValidationPending.set(false);\r\n\r\n const validation = validationResponse.data;\r\n if (!validation) {\r\n const msg = validationResponse.message ?? 'Failed to validate form';\r\n this.handleValidationRequestFailure(msg);\r\n return;\r\n }\r\n\r\n const backendMessages = this.mapSubmitValidationMessages(\r\n validation.results ?? [],\r\n );\r\n const localBlockingIssues = this.hasLocalBlockingValidationIssues();\r\n\r\n this.submitValidationMessages.set([\r\n ...backendMessages,\r\n ...(localBlockingIssues\r\n ? [\r\n this.createValidationFeedbackMessage(\r\n this.translocoService.translate('clientForm.validation-next'),\r\n 'error',\r\n ),\r\n ]\r\n : []),\r\n ]);\r\n\r\n if (validation.hasBlockingFailures || localBlockingIssues) {\r\n return;\r\n }\r\n\r\n const warnings = this.runtimeWarnings();\r\n if (this.confirmWarningsOnStepChange() && warnings.length > 0) {\r\n this.confirmValidationWarnings(\r\n warnings,\r\n 'clientForm.warning-confirmation-question-next',\r\n this.translocoService.translate('clientForm.next'),\r\n () => this.applyStepChange(targetStep),\r\n );\r\n return;\r\n }\r\n\r\n this.applyStepChange(targetStep);\r\n },\r\n error: (err) => {\r\n this.stepValidationPending.set(false);\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to validate form';\r\n this.handleValidationRequestFailure(msg);\r\n },\r\n });\r\n }\r\n\r\n private applyStepChange(value: number): void {\r\n this.submitValidationMessages.set([]);\r\n this.currentStep.set(value);\r\n }\r\n\r\n private requiresForwardStepValidation(\r\n targetStep: number,\r\n currentStep: number,\r\n ): boolean {\r\n return (\r\n targetStep > currentStep && (this.stepsEnabled() || this.wizardEnabled())\r\n );\r\n }\r\n\r\n private isBlockedFutureStep(\r\n targetStep: number,\r\n currentStep: number,\r\n ): boolean {\r\n return (\r\n targetStep > currentStep + 1 &&\r\n (this.stepsEnabled() || this.wizardEnabled())\r\n );\r\n }\r\n\r\n private resolveValidateIsSteps(\r\n isIntermediateStepValidation: boolean,\r\n ): boolean | undefined {\r\n if (!(this.stepsEnabled() || this.wizardEnabled())) {\r\n return undefined;\r\n }\r\n\r\n return isIntermediateStepValidation;\r\n }\r\n\r\n private hasLocalBlockingValidationIssues(): boolean {\r\n return (\r\n this.formControl.invalid ||\r\n this.formRuntimeMessages().some((msg) => msg.severity === 'error')\r\n );\r\n }\r\n\r\n private validateLocalFormForSubmit(): boolean {\r\n this.dynamicForm()?.markAllAsTouched();\r\n this.formControl.markAllAsTouched();\r\n this.formControl.updateValueAndValidity({ emitEvent: false });\r\n\r\n if (!this.hasLocalBlockingValidationIssues()) {\r\n return true;\r\n }\r\n\r\n this.showFirstInvalidSection();\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(\r\n this.translocoService.translate('clientForm.validation'),\r\n 'error',\r\n ),\r\n ]);\r\n\r\n return false;\r\n }\r\n\r\n private showFirstInvalidSection(): void {\r\n if (!this.sectionNavigationEnabled()) {\r\n return;\r\n }\r\n\r\n const dynamicForm = this.dynamicForm();\r\n if (!dynamicForm) {\r\n return;\r\n }\r\n\r\n const invalidSectionIndex = this.stepSections().findIndex((section) =>\r\n section.fields.some(\r\n (field) => !!field.key && dynamicForm.isControlInvalid(field.key),\r\n ),\r\n );\r\n\r\n if (invalidSectionIndex >= 0) {\r\n this.currentStep.set(invalidSectionIndex + 1);\r\n }\r\n }\r\n\r\n private handleValidationRequestFailure(message: string): void {\r\n this.state.setSubmitError(message);\r\n this.submitValidationMessages.set([\r\n this.createValidationFeedbackMessage(message, 'error'),\r\n ]);\r\n this.errored.emit(message);\r\n }\r\n\r\n private createValidationFeedbackMessage(\r\n message: string,\r\n severity: 'error' | 'warning',\r\n ): FormulaRuntimeMessage {\r\n return {\r\n code: 'FORMULA_FALSE',\r\n severity,\r\n message,\r\n };\r\n }\r\n\r\n private confirmValidationWarnings(\r\n warnings: FormulaRuntimeMessage[],\r\n questionTranslationKey: string,\r\n acceptLabel: string,\r\n onAccept: () => void,\r\n ): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n header: this.translocoService.translate(\r\n 'clientForm.warning-confirmation-header',\r\n ),\r\n message: this.buildWarningConfirmationMessage(\r\n warnings,\r\n questionTranslationKey,\r\n ),\r\n acceptLabel: acceptLabel,\r\n acceptButton: {\r\n severity: 'warn',\r\n },\r\n accept: onAccept,\r\n reject: () => {},\r\n });\r\n }\r\n\r\n private executeSubmit(request: ProcessFormSubmitRequest): void {\r\n this.submitSub = this.api.submit(request).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: string =\r\n response.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-submit-failed',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n this.state.submitting.set(false);\r\n const msg: string =\r\n err?.error?.message ??\r\n err?.message ??\r\n this.translocoService.translate<string>(\r\n 'clientForm.form-submit-failed',\r\n );\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n private buildWarningConfirmationMessage(\r\n warnings: FormulaRuntimeMessage[],\r\n questionTranslationKey: string,\r\n ): string {\r\n const intro = this.translocoService.translate(\r\n 'clientForm.warning-confirmation-message',\r\n );\r\n const question = this.translocoService.translate(questionTranslationKey);\r\n const warningLines = [\r\n ...new Set(\r\n warnings\r\n .map((warning) => warning.message?.trim())\r\n .filter((message): message is string => !!message),\r\n ),\r\n ].map((message) => `- ${message}`);\r\n\r\n return [intro, ...warningLines, '', question].join('\\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 this.translocoService.translate('clientForm.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-4\">\r\n @for (section of previewEntitySections(); track section.key) {\r\n <div\r\n class=\"flex flex-col gap-0 overflow-hidden rounded-md border border-surface-200 bg-surface-0\"\r\n >\r\n @if (section.label) {\r\n <h3\r\n class=\"m-0 border-b border-surface-200 bg-surface-50 px-4 py-3 text-lg font-semibold text-color\"\r\n >\r\n {{ section.label }}\r\n </h3>\r\n }\r\n <div class=\"p-4\">\r\n <mt-entities-preview [entities]=\"section.entities\" />\r\n </div>\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 gap-3 text-left focus-visible:outline-none\"\r\n [class.cursor-pointer]=\"!isStepButtonDisabled(step.value)\"\r\n [class.cursor-default]=\"isStepButtonDisabled(step.value)\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"step.state === 'current' ? 'step' : null\"\r\n [disabled]=\"isStepButtonDisabled(step.value)\"\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 border text-base font-semibold transition-all duration-200\"\r\n [class]=\"\r\n step.state === 'current'\r\n ? 'border-primary ring-2 ring-primary/20 bg-primary text-white '\r\n : step.state === 'completed'\r\n ? 'border-primary text-primary bg-primary-100 '\r\n : step.state === 'upcoming'\r\n ? 'border-transparent 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 #validationSummary class=\"flex flex-col gap-3 scroll-mt-4\">\r\n @if (runtimeErrors().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-errors\") }}\r\n </p>\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"error\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-warnings\") }}\r\n </p>\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"warn\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\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]=\"'previous' | transloco\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === 1 || stepNavigationValidating()\r\n \"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"'next' | transloco\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === stepSections().length ||\r\n stepNavigationValidating()\r\n \"\r\n [loading]=\"stepNavigationValidating()\"\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 #validationSummary class=\"flex flex-col gap-3 scroll-mt-4\">\r\n @if (runtimeErrors().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-errors\") }}\r\n </p>\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"error\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <p\r\n class=\"m-0 text-xs font-semibold uppercase tracking-[0.18em] text-slate-500\"\r\n >\r\n {{ t(\"validation-warnings\") }}\r\n </p>\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <p-message\r\n severity=\"warn\"\r\n styleClass=\"w-full\"\r\n [text]=\"msg.message\"\r\n />\r\n }\r\n </section>\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 [class.cursor-pointer]=\"\r\n !isStepButtonDisabled(step.value)\r\n \"\r\n [class.cursor-default]=\"\r\n isStepButtonDisabled(step.value)\r\n \"\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 [disabled]=\"isStepButtonDisabled(step.value)\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-10 w-10 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\"\r\n [class.cursor-pointer]=\"\r\n !isStepButtonDisabled(step.value)\r\n \"\r\n [class.cursor-default]=\"\r\n isStepButtonDisabled(step.value)\r\n \"\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]=\"'previous' | transloco\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === 1 || stepNavigationValidating()\r\n \"\r\n (onClick)=\"goToPreviousStep()\"\r\n />\r\n <mt-button\r\n [label]=\"'next' | transloco\"\r\n severity=\"primary\"\r\n variant=\"outlined\"\r\n [disabled]=\"\r\n currentStep() === stepSections().length ||\r\n stepNavigationValidating()\r\n \"\r\n [loading]=\"stepNavigationValidating()\"\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 {{ t(\"no-form-required\") }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import type { PropertyValueComparison } from '@masterteam/components/entities';\r\n\r\nexport type {\r\n ComparisonValueSide,\r\n ValueComparison,\r\n EntityComparisonField,\r\n EntityComparisonOperation,\r\n EntityListComparisonRow,\r\n EntityListComparison,\r\n PropertyValueComparison,\r\n} from '@masterteam/components/entities';\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 IsSteps?: boolean;\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 comparison?: PropertyValueComparison;\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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"}
|