@masterteam/forms 0.0.51 → 0.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-forms-client-form.mjs","sources":["../../../../packages/masterteam/forms/client-form/services/client-form-api.service.ts","../../../../packages/masterteam/forms/client-form/services/client-form-state.service.ts","../../../../packages/masterteam/forms/client-form/utils/form-config-mapper.ts","../../../../packages/masterteam/forms/client-form/client-form.ts","../../../../packages/masterteam/forms/client-form/client-form.html","../../../../packages/masterteam/forms/client-form/models/client-form.model.ts","../../../../packages/masterteam/forms/client-form/public-api.ts","../../../../packages/masterteam/forms/client-form/masterteam-forms-client-form.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\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} from '../models/client-form.model';\r\n\r\n/**\r\n * Stateless HTTP service for process-forms runtime APIs.\r\n * Root-provided — safe to share across multiple ClientForm instances.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientFormApiService {\r\n private readonly http = inject(HttpClient);\r\n\r\n /**\r\n * Load form configuration and values for a given operation context.\r\n * Backend determines mode (Approval vs Direct) based on published schema.\r\n */\r\n load(\r\n request: ProcessFormLoadRequest,\r\n ): Observable<Response<ProcessFormLoadResponse>> {\r\n return this.http.post<Response<ProcessFormLoadResponse>>(\r\n 'process-form-load',\r\n request,\r\n );\r\n }\r\n\r\n /**\r\n * Submit form values. Result depends on mode:\r\n * - Approval → status: 'PendingApproval'\r\n * - Direct → status: 'Executed'\r\n */\r\n submit(\r\n request: ProcessFormSubmitRequest,\r\n ): Observable<Response<ProcessFormSubmitResponse>> {\r\n return this.http.post<Response<ProcessFormSubmitResponse>>(\r\n 'process-submit',\r\n request,\r\n );\r\n }\r\n}\r\n","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 FormulaValidationRuleConfig,\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 SchemaConnectionFieldConfig,\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} 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\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 */\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): DynamicFormConfig {\r\n const validationRules = mapValidationRules(config, lang);\r\n\r\n return {\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 fields: visibleFields.map((field) =>\r\n mapFieldToConfig(field, lang, lookups),\r\n ),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0),\r\n validationRules,\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(([, value]) => value !== undefined && value !== null)\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): string[] {\r\n return config.sections.flatMap((section) =>\r\n (section.fields ?? [])\r\n .filter(\r\n (field) => isFieldVisible(field, mode) && isPreviewOnlyField(field),\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): EntityData[] {\r\n const resolvedValues = mapValuesToFormValue(values, config);\r\n\r\n return config.sections\r\n .slice()\r\n .sort((a, b) => a.order - b.order)\r\n .flatMap((section) =>\r\n (section.fields ?? [])\r\n .filter(\r\n (field) => isFieldVisible(field, mode) && isPreviewOnlyField(field),\r\n )\r\n .sort((a, b) => a.order - b.order)\r\n .flatMap((field) => {\r\n const property = field.propertyMetadata;\r\n\r\n return [\r\n {\r\n ...(property as EntityData),\r\n name: (property.name as any)?.display,\r\n key: property.key ?? field.propertyKey,\r\n value: resolvedValues[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 },\r\n } satisfies EntityData,\r\n ];\r\n }),\r\n );\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 (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\r\nfunction isPreviewOnlyField(field: ClientFormField): boolean {\r\n return field.isWrite === false && field.isRead !== false;\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): 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 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 return new UploadFileFieldConfig(base);\r\n\r\n // ── User Search ───────────────────────────────────────────\r\n case 'User':\r\n return new UserSearchFieldConfig({\r\n ...base,\r\n apiUrl: 'Identity/users',\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 'LookupMatrix':\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 // ── 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\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\nfunction mapValidationRules(\r\n config: ClientFormConfiguration,\r\n lang: 'en' | 'ar',\r\n): FormulaValidationRuleConfig[] {\r\n return (config.validations ?? []).map((rule) => ({\r\n id: rule.id,\r\n formulaTokens: rule.formulaTokens,\r\n formulaText: rule.formulaText,\r\n message:\r\n rule.message?.[lang] ??\r\n rule.message?.en ??\r\n rule.message?.ar ??\r\n 'Validation rule failed',\r\n severity: rule.severity,\r\n enabled: rule.enabled,\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): { label: string; value: string }[] {\r\n const lookupId = prop?.configuration?.['lookup'] as number | undefined;\r\n if (!lookupId || !lookups.length) return [];\r\n\r\n const lookup = lookups.find((l) => l.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 label: item.name?.display ?? item.key,\r\n value: item.key,\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\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 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\nfunction 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 effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { StepperModule } from 'primeng/stepper';\r\n\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 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 mapPreviewFieldsToEntities,\r\n mapToDynamicFormConfig,\r\n mapValuesToFormValue,\r\n mapFormValueToSubmitFields,\r\n} from './utils/form-config-mapper';\r\n\r\nimport type {\r\n ProcessFormLoadRequest,\r\n ProcessFormLoadResponse,\r\n ProcessFormSubmitRequest,\r\n ProcessFormSubmitResponse,\r\n ProcessFormSubmitField,\r\n ProcessFormMode,\r\n ProcessFormSource,\r\n ProcessFormValue,\r\n ClientLookup,\r\n} from './models/client-form.model';\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 * **No action buttons in template.** Parent controls all 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 EntitiesPreview,\r\n DynamicForm,\r\n Tabs,\r\n Skeleton,\r\n StepperModule,\r\n ],\r\n providers: [ClientFormStateService],\r\n templateUrl: './client-form.html',\r\n styleUrls: ['./client-form.scss'],\r\n})\r\nexport class ClientForm implements OnDestroy {\r\n private readonly api = inject(ClientFormApiService);\r\n protected readonly state = inject(ClientFormStateService);\r\n\r\n private loadSub?: Subscription;\r\n private submitSub?: Subscription;\r\n readonly runtimeMessages = signal<FormulaRuntimeMessage[]>([]);\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>();\r\n readonly levelId = input<number>();\r\n readonly levelDataId = input<number>();\r\n readonly moduleDataId = input<number>();\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\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<'form' | 'steps' | 'tabs' | undefined>();\r\n readonly showInternalStepActions = input<boolean>(true);\r\n readonly lang = input<'en' | 'ar'>('en');\r\n readonly lookups = input<ClientLookup[]>([]);\r\n readonly ignoredFieldKeys = input<string[]>([]);\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\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 );\r\n });\r\n\r\n readonly initialValues = computed<Record<string, any>>(() => {\r\n return mapValuesToFormValue(\r\n this.state.formValues(),\r\n this.state.formConfiguration(),\r\n );\r\n });\r\n\r\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\r\n this.state.virtualFields(),\r\n );\r\n\r\n readonly hasVirtualFields = computed(() => this.virtualFields().length > 0);\r\n readonly previewFieldKeys = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n return [\r\n ...new Set([\r\n ...getPreviewOnlyFieldKeys(config, this.formMode()),\r\n ...this.ignoredFieldKeys(),\r\n ]),\r\n ];\r\n });\r\n readonly previewEntities = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n const ignoredFieldKeys = new Set(this.ignoredFieldKeys());\r\n return mapPreviewFieldsToEntities(\r\n config,\r\n this.state.formValues(),\r\n this.formMode(),\r\n ).filter((entity) => !entity.key || !ignoredFieldKeys.has(entity.key));\r\n });\r\n readonly editableFormConfig = computed<DynamicFormConfig | null>(() => {\r\n const config = this.formConfig();\r\n if (!config) return null;\r\n\r\n const previewFieldKeys = new Set(this.previewFieldKeys());\r\n\r\n return {\r\n ...config,\r\n sections: config.sections\r\n .map((section) => ({\r\n ...section,\r\n fields: section.fields.filter(\r\n (field) => !field.key || !previewFieldKeys.has(field.key),\r\n ),\r\n }))\r\n .filter((section) =>\r\n section.fields.some((field) => field.type !== 'spacer'),\r\n ),\r\n };\r\n });\r\n readonly stepSections = computed(\r\n () => this.editableFormConfig()?.sections ?? [],\r\n );\r\n readonly hasEditableFormSections = computed(\r\n () => this.stepSections().length > 0,\r\n );\r\n readonly effectiveRenderMode = computed<'form' | 'steps' | 'tabs'>(() => {\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 (configRenderMode === 'steps' || configRenderMode === 'tabs') {\r\n return configRenderMode;\r\n }\r\n\r\n return 'form';\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 sectionNavigationEnabled = computed(\r\n () => this.stepsEnabled() || this.tabsEnabled(),\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 visibleSectionKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return null;\r\n\r\n const currentIndex = this.currentStep() - 1;\r\n const activeSection = this.stepSections()[currentIndex];\r\n\r\n if (!activeSection) return null;\r\n\r\n return [activeSection.key || `section-${currentIndex}`];\r\n });\r\n readonly forcedHiddenFieldKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return [];\r\n\r\n const sections = this.stepSections();\r\n const currentIndex = this.currentStep() - 1;\r\n const hiddenFieldKeys = new Set<string>();\r\n\r\n sections.forEach((section, index) => {\r\n if (index === currentIndex) return;\r\n section.fields\r\n .map((field) => field.key)\r\n .filter((key): key is string => !!key)\r\n .forEach((key) => hiddenFieldKeys.add(key));\r\n });\r\n\r\n return [...hiddenFieldKeys];\r\n });\r\n readonly effectiveForcedHiddenFieldKeys = computed(() => {\r\n return [\r\n ...new Set([...this.forcedHiddenFieldKeys(), ...this.ignoredFieldKeys()]),\r\n ];\r\n });\r\n\r\n // ============================================================================\r\n // Effects\r\n // ============================================================================\r\n\r\n constructor() {\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\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.runtimeMessages.set([]);\r\n this.state.loading.set(true);\r\n this.state.error.set(null);\r\n this.state.submitResponse.set(null);\r\n\r\n const request = this.buildLoadRequest();\r\n\r\n this.loadSub = this.api.load(request).subscribe({\r\n next: (response) => {\r\n this.state.loading.set(false);\r\n\r\n if (response.data) {\r\n this.state.setLoadResponse(response.data);\r\n this.loaded.emit(response.data);\r\n\r\n if (response.data.mode) {\r\n this.modeDetected.emit(response.data.mode);\r\n }\r\n\r\n if (response.data.formSource) {\r\n this.formSourceDetected.emit(response.data.formSource);\r\n }\r\n } else {\r\n const msg = response.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Submit the current form values.\r\n * Builds submit request from form value + load context.\r\n */\r\n submit(): void {\r\n if (this.state.submitting()) return;\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) {\r\n const msg = 'Form must be loaded before submit';\r\n this.state.submitError.set(msg);\r\n this.errored.emit(msg);\r\n return;\r\n }\r\n\r\n this.submitSub?.unsubscribe();\r\n this.state.submitting.set(true);\r\n this.state.submitError.set(null);\r\n\r\n const request = this.buildSubmitRequest(loadResponse);\r\n\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 = response.message ?? 'Failed to submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get the current form value as a flat key-value object.\r\n */\r\n getFormValue(): Record<string, any> {\r\n return this.formControl.value ?? {};\r\n }\r\n\r\n /**\r\n * Get the current form value mapped to submit payload format.\r\n */\r\n getSubmitFields(): ProcessFormSubmitField[] {\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) return [];\r\n return mapFormValueToSubmitFields(this.getFormValue(), loadResponse);\r\n }\r\n\r\n /**\r\n * Backward-compatible alias for consumers still using the previous helper name.\r\n */\r\n getSubmitValues(): ProcessFormSubmitField[] {\r\n return this.getSubmitFields();\r\n }\r\n\r\n /**\r\n * Check whether the current form state is valid.\r\n */\r\n isValid(): boolean {\r\n return this.formControl.valid;\r\n }\r\n\r\n /**\r\n * Reset the component to its initial state.\r\n */\r\n reset(): void {\r\n this.loadSub?.unsubscribe();\r\n this.submitSub?.unsubscribe();\r\n this.formControl.reset({});\r\n this.runtimeMessages.set([]);\r\n this.state.reset();\r\n }\r\n\r\n onRuntimeMessagesChange(messages: FormulaRuntimeMessage[]): void {\r\n this.runtimeMessages.set(messages ?? []);\r\n }\r\n\r\n onStepChange(value: number): void {\r\n const count = this.stepSections().length;\r\n if (value < 1 || value > count) return;\r\n this.currentStep.set(value);\r\n }\r\n\r\n goToPreviousStep(): void {\r\n this.onStepChange(this.currentStep() - 1);\r\n }\r\n\r\n goToNextStep(): void {\r\n this.onStepChange(this.currentStep() + 1);\r\n }\r\n\r\n canGoToPreviousStep(): boolean {\r\n return this.stepsEnabled() && this.currentStep() > 1;\r\n }\r\n\r\n canGoToNextStep(): boolean {\r\n return (\r\n this.stepsEnabled() && this.currentStep() < this.stepSections().length\r\n );\r\n }\r\n\r\n getCurrentStep(): number {\r\n return this.currentStep();\r\n }\r\n\r\n getStepCount(): number {\r\n return this.stepSections().length;\r\n }\r\n\r\n isStepNavigationEnabled(): boolean {\r\n return this.stepsEnabled();\r\n }\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n this.submitSub?.unsubscribe();\r\n }\r\n\r\n // ============================================================================\r\n // Private Helpers\r\n // ============================================================================\r\n\r\n private buildLoadRequest(): ProcessFormLoadRequest {\r\n const req: ProcessFormLoadRequest = {\r\n moduleKey: this.moduleKey(),\r\n operationKey: this.operationKey(),\r\n };\r\n\r\n const moduleId = this.moduleId();\r\n const levelId = this.levelId();\r\n const levelDataId = this.levelDataId();\r\n const moduleDataId = this.moduleDataId();\r\n const requestSchemaId = this.requestSchemaId();\r\n const draftProcessId = this.draftProcessId();\r\n const preview = this.preview();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (draftProcessId != null) req.draftProcessId = draftProcessId;\r\n if (preview) req.preview = preview;\r\n\r\n return req;\r\n }\r\n\r\n private buildSubmitRequest(\r\n loadResponse: ProcessFormLoadResponse,\r\n ): ProcessFormSubmitRequest {\r\n const context = this.state.context();\r\n const formValue = this.getFormValue();\r\n const fields: ProcessFormSubmitField[] = mapFormValueToSubmitFields(\r\n formValue,\r\n loadResponse,\r\n );\r\n\r\n const req: ProcessFormSubmitRequest = {\r\n moduleKey: this.moduleKey() ?? context?.moduleKey,\r\n operationKey: this.operationKey() ?? context?.operationKey,\r\n fields,\r\n };\r\n\r\n const moduleId = context?.moduleId ?? this.moduleId();\r\n const levelId = context?.levelId ?? this.levelId();\r\n const levelDataId = context?.levelDataId ?? this.levelDataId();\r\n const moduleDataId = context?.moduleDataId ?? this.moduleDataId();\r\n const requestSchemaId = context?.requestSchemaId ?? this.requestSchemaId();\r\n const recordId =\r\n moduleDataId ??\r\n (req.moduleKey === 'LevelData' && req.operationKey !== 'Create'\r\n ? levelDataId\r\n : undefined);\r\n const returnUrl = this.returnUrl();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (recordId != null) req.recordId = recordId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (returnUrl) req.returnUrl = returnUrl;\r\n\r\n return req;\r\n }\r\n}\r\n","<!-- Client Form Template — Render only, NO action buttons -->\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\">\r\n @if (previewEntities().length > 0) {\r\n <mt-entities-preview [entities]=\"previewEntities()\" />\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\">\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n Validation Errors\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n Validation Warnings\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <p-stepper\r\n [value]=\"currentStep()\"\r\n (valueChange)=\"onStepChange($event)\"\r\n >\r\n <p-step-list>\r\n @for (\r\n section of stepSections();\r\n track section.key || $index\r\n ) {\r\n <p-step [value]=\"$index + 1\">\r\n {{ section.label || \"Step \" + ($index + 1) }}\r\n </p-step>\r\n }\r\n </p-step-list>\r\n </p-stepper>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === 1\"\r\n (click)=\"goToPreviousStep()\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (click)=\"goToNextStep()\"\r\n >\r\n Next\r\n </button>\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 } @else if (previewEntities().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","// ============================================================================\r\n// API Response Wrapper\r\n// ============================================================================\r\n\r\nexport interface Response<T> {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message?: string | null;\r\n errors?: any | null;\r\n data: T;\r\n cacheSession?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Process Form Mode\r\n// ============================================================================\r\n\r\nexport type ProcessFormMode = 'Approval' | 'Direct';\r\nexport type ProcessFormSubmitStatus = 'PendingApproval' | 'Executed';\r\nexport type OperationType = 'FormOperation' | 'ActionOperation';\r\nexport type ProcessFormSource = 'Step' | 'None';\r\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;\r\n levelId?: number;\r\n levelDataId?: number;\r\n moduleDataId?: number;\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;\r\n levelId?: number;\r\n levelDataId?: number;\r\n moduleDataId?: number;\r\n recordId?: number;\r\n requestSchemaId?: number;\r\n returnUrl?: string;\r\n fields: ProcessFormSubmitField[];\r\n}\r\n\r\nexport interface ProcessFormSubmitField {\r\n requestPropertyId?: number;\r\n propertyKey: string;\r\n value: any;\r\n}\r\n\r\nexport type ProcessFormSubmitValue = ProcessFormSubmitField;\r\n\r\nexport interface ProcessFormSubmitResponse {\r\n status: ProcessFormSubmitStatus;\r\n moduleKey: string;\r\n operationKey: string;\r\n recordId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n requestSchemaId?: number | null;\r\n requestId?: number | null;\r\n resultModuleKey?: string | null;\r\n resultModuleId?: number | null;\r\n record?: ProcessFormSubmitRecord | null;\r\n}\r\n\r\nexport interface ProcessFormSubmitRecord {\r\n fields: ProcessFormSubmitRecordField[];\r\n}\r\n\r\nexport interface ProcessFormSubmitRecordField {\r\n id: number;\r\n key: string;\r\n normalizedKey: string;\r\n label: string;\r\n viewType: string;\r\n configuration: Record<string, unknown> | null;\r\n source: string;\r\n order: number;\r\n isRequired: boolean;\r\n isSystem: boolean;\r\n raw: any;\r\n value: any;\r\n display?: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// Values & Context\r\n// ============================================================================\r\n\r\nexport interface ProcessFormValue {\r\n propertyKey: string;\r\n rawValue?: any;\r\n value: any;\r\n metadata?: ProcessFormValueMetadata;\r\n}\r\n\r\nexport interface ProcessFormValueMetadata {\r\n propertyId: number;\r\n key: string;\r\n viewType: string;\r\n source: string;\r\n}\r\n\r\nexport interface ProcessFormContext {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n moduleDataId: number | null;\r\n requestSchemaId: number | null;\r\n requestId: number | null;\r\n stepId: number | null;\r\n stepSchemaId: number | null;\r\n preview: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration (runtime shape — no _pending/_deleting)\r\n// ============================================================================\r\n\r\nexport type ClientFieldWidth = '25' | '50' | '100';\r\nexport type ClientFormRenderMode = 'sections' | 'steps' | 'tabs';\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 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 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} from '../models/client-form.model';\r\n\r\n/**\r\n * Stateless HTTP service for process-forms runtime APIs.\r\n * Root-provided — safe to share across multiple ClientForm instances.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientFormApiService {\r\n private readonly http = inject(HttpClient);\r\n\r\n /**\r\n * Load form configuration and values for a given operation context.\r\n * Backend determines mode (Approval vs Direct) based on published schema.\r\n */\r\n load(\r\n request: ProcessFormLoadRequest,\r\n ): Observable<Response<ProcessFormLoadResponse>> {\r\n return this.http.post<Response<ProcessFormLoadResponse>>(\r\n 'process-form-load',\r\n request,\r\n );\r\n }\r\n\r\n /**\r\n * Submit form values. Result depends on mode:\r\n * - Approval → status: 'PendingApproval'\r\n * - Direct → status: 'Executed'\r\n */\r\n submit(\r\n request: ProcessFormSubmitRequest,\r\n ): Observable<Response<ProcessFormSubmitResponse>> {\r\n return this.http.post<Response<ProcessFormSubmitResponse>>(\r\n 'process-submit',\r\n request,\r\n );\r\n }\r\n}\r\n","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 FormulaValidationRuleConfig,\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 SchemaConnectionFieldConfig,\r\n SchedulePredecessorFieldConfig,\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} 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\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 */\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): DynamicFormConfig {\r\n const validationRules = mapValidationRules(config, lang);\r\n\r\n return {\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 fields: visibleFields.map((field) =>\r\n mapFieldToConfig(field, lang, lookups, context),\r\n ),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0),\r\n validationRules,\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(([, value]) => value !== undefined && value !== null)\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): string[] {\r\n return config.sections.flatMap((section) =>\r\n (section.fields ?? [])\r\n .filter(\r\n (field) => isFieldVisible(field, mode) && isPreviewOnlyField(field),\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): EntityData[] {\r\n const resolvedValues = mapValuesToFormValue(values, config);\r\n\r\n return config.sections\r\n .slice()\r\n .sort((a, b) => a.order - b.order)\r\n .flatMap((section) =>\r\n (section.fields ?? [])\r\n .filter(\r\n (field) => isFieldVisible(field, mode) && isPreviewOnlyField(field),\r\n )\r\n .sort((a, b) => a.order - b.order)\r\n .flatMap((field) => {\r\n const property = field.propertyMetadata;\r\n\r\n return [\r\n {\r\n ...(property as EntityData),\r\n name: (property.name as any)?.display,\r\n key: property.key ?? field.propertyKey,\r\n value: resolvedValues[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 },\r\n } satisfies EntityData,\r\n ];\r\n }),\r\n );\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 (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\r\nfunction isPreviewOnlyField(field: ClientFormField): boolean {\n return field.isWrite === false && field.isRead !== false;\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;\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): 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: field.isWrite === false,\n validators: field.isRequired\n ? [ValidatorConfig.required(`${label} is required`)]\n : [],\n formulaCondition: buildFormulaCondition(field),\n };\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 return new UploadFileFieldConfig(base);\r\n\r\n // ── User Search ───────────────────────────────────────────\r\n case 'User':\r\n return new UserSearchFieldConfig({\r\n ...base,\r\n apiUrl: 'Identity/users',\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 'LookupMatrix':\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 // ── 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 // ── 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\nfunction mapValidationRules(\r\n config: ClientFormConfiguration,\r\n lang: 'en' | 'ar',\r\n): FormulaValidationRuleConfig[] {\r\n return (config.validations ?? []).map((rule) => ({\r\n id: rule.id,\r\n formulaTokens: rule.formulaTokens,\r\n formulaText: rule.formulaText,\r\n message:\r\n rule.message?.[lang] ??\r\n rule.message?.en ??\r\n rule.message?.ar ??\r\n 'Validation rule failed',\r\n severity: rule.severity,\r\n enabled: rule.enabled,\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): { label: string; value: string }[] {\r\n const lookupId = prop?.configuration?.['lookup'] as number | undefined;\r\n if (!lookupId || !lookups.length) return [];\r\n\r\n const lookup = lookups.find((l) => l.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 label: item.name?.display ?? item.key,\r\n value: item.key,\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\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 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\nfunction 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 effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Skeleton } from 'primeng/skeleton';\r\n\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 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 mapPreviewFieldsToEntities,\r\n mapToDynamicFormConfig,\r\n mapValuesToFormValue,\r\n mapFormValueToSubmitFields,\r\n} from './utils/form-config-mapper';\r\n\r\nimport type {\n ClientFormFooterState,\n ClientFormResolvedRenderMode,\n ProcessFormLoadRequest,\n ProcessFormLoadResponse,\n ProcessFormSubmitRequest,\n ProcessFormSubmitResponse,\n ProcessFormSubmitField,\r\n ProcessFormMode,\r\n ProcessFormSource,\r\n ProcessFormValue,\r\n ClientLookup,\r\n ClientFormSubmitRequestMapper,\r\n} from './models/client-form.model';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\n\r\ntype StepTimelineState = 'completed' | 'current' | 'upcoming';\r\n\r\ninterface StepTimelineItem {\r\n key: string;\r\n label: string;\r\n value: number;\r\n state: StepTimelineState;\r\n selected: boolean;\r\n beforeLineActive: boolean;\r\n afterLineActive: boolean;\r\n}\r\n\r\n/**\r\n * Client Form — Runtime process form component.\r\n *\r\n * Self-contained, signal-based (no NGXS). Each instance manages its own state\n * via a component-scoped `ClientFormStateService`.\n *\n * Submit and reset actions stay external. Step navigation buttons are optional\n * and can be hidden with `showInternalStepActions`.\n *\n * Parent can control actions via `viewChild()`:\n *\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 EntitiesPreview,\r\n DynamicForm,\r\n Tabs,\r\n Skeleton,\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 {\n private readonly api = inject(ClientFormApiService);\n protected readonly state = inject(ClientFormStateService);\n\n private loadSub?: Subscription;\n private submitSub?: Subscription;\n private readonly hasStartedLoad = signal(false);\n readonly runtimeMessages = signal<FormulaRuntimeMessage[]>([]);\n private readonly translocoService = inject(TranslocoService);\n\r\n // ============================================================================\r\n // Public State Signals (for parent access via viewChild)\r\n // ============================================================================\r\n\r\n readonly submitting = computed(() => this.state.submitting());\r\n readonly submitError = computed(() => this.state.submitError());\r\n readonly isSubmitted = computed(() => this.state.isSubmitted());\r\n readonly isPendingApproval = computed(() => this.state.isPendingApproval());\r\n readonly isExecuted = computed(() => this.state.isExecuted());\r\n readonly isLoaded = computed(() => this.state.isLoaded());\r\n readonly loading = computed(() => this.state.loading());\r\n readonly runtimeErrors = computed(() =>\r\n this.runtimeMessages().filter((msg) => msg.severity === 'error'),\r\n );\r\n readonly runtimeWarnings = computed(() =>\r\n this.runtimeMessages().filter((msg) => msg.severity === 'warning'),\r\n );\r\n readonly currentStep = signal(1);\r\n\r\n // ============================================================================\r\n // Inputs — Required Context\r\n // ============================================================================\r\n\r\n readonly moduleKey = input.required<string>();\r\n readonly operationKey = input.required<string>();\r\n\r\n // ============================================================================\r\n // Inputs — Optional Context\r\n // ============================================================================\r\n\r\n readonly moduleId = input<number | string>();\r\n readonly levelId = input<number | string>();\r\n readonly levelDataId = input<number | string>();\r\n readonly moduleDataId = input<number | string>();\r\n readonly requestSchemaId = input<number>();\r\n readonly draftProcessId = input<number>();\r\n readonly preview = input(false);\r\n readonly returnUrl = input<string>();\r\n readonly submitRequestMapper = input<ClientFormSubmitRequestMapper | null>(\r\n null,\r\n );\r\n\r\n // ============================================================================\r\n // Inputs — UI Configuration\r\n // ============================================================================\r\n\r\n readonly readonly = input(false);\r\n readonly autoLoad = input(true);\n readonly formMode = input<'create' | 'edit'>('create');\n readonly renderMode = input<'form' | 'steps' | 'tabs' | undefined>();\n // Hide the built-in previous/next buttons when step actions are rendered by the parent.\n readonly showInternalStepActions = input<boolean>(true);\n readonly lang = signal(this.translocoService.getActiveLang() as 'en' | 'ar');\r\n readonly lookups = input<ClientLookup[]>([]);\r\n readonly ignoredFieldKeys = input<string[]>([]);\r\n readonly rtl = computed(() => this.lang() === 'ar');\r\n\r\n // ============================================================================\r\n // Outputs\r\n // ============================================================================\r\n\r\n readonly loaded = output<ProcessFormLoadResponse>();\r\n readonly submitted = output<ProcessFormSubmitResponse>();\r\n readonly errored = output<string>();\r\n readonly modeDetected = output<ProcessFormMode>();\n readonly formSourceDetected = output<ProcessFormSource>();\n readonly footerStateChanged = output<ClientFormFooterState>();\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 );\r\n });\r\n\r\n readonly initialValues = computed<Record<string, any>>(() => {\r\n return mapValuesToFormValue(\r\n this.state.formValues(),\r\n this.state.formConfiguration(),\r\n );\r\n });\r\n\r\n readonly virtualFields = computed<ProcessFormValue[]>(() =>\r\n this.state.virtualFields(),\r\n );\r\n\r\n readonly hasVirtualFields = computed(() => this.virtualFields().length > 0);\r\n readonly previewFieldKeys = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n return [\r\n ...new Set([\r\n ...getPreviewOnlyFieldKeys(config, this.formMode()),\r\n ...this.ignoredFieldKeys(),\r\n ]),\r\n ];\r\n });\r\n readonly previewEntities = computed(() => {\r\n const config = this.state.formConfiguration();\r\n if (!config) return [];\r\n const ignoredFieldKeys = new Set(this.ignoredFieldKeys());\r\n return mapPreviewFieldsToEntities(\r\n config,\r\n this.state.formValues(),\r\n this.formMode(),\r\n ).filter((entity) => !entity.key || !ignoredFieldKeys.has(entity.key));\r\n });\r\n readonly editableFormConfig = computed<DynamicFormConfig | null>(() => {\r\n const config = this.formConfig();\r\n if (!config) return null;\r\n\r\n const previewFieldKeys = new Set(this.previewFieldKeys());\r\n\r\n return {\r\n ...config,\r\n sections: config.sections\r\n .map((section) => ({\r\n ...section,\r\n fields: section.fields.filter(\r\n (field) => !field.key || !previewFieldKeys.has(field.key),\r\n ),\r\n }))\r\n .filter((section) =>\r\n section.fields.some((field) => field.type !== 'spacer'),\r\n ),\r\n };\r\n });\r\n readonly stepSections = computed(\r\n () => this.editableFormConfig()?.sections ?? [],\r\n );\r\n readonly hasEditableFormSections = computed(\r\n () => this.stepSections().length > 0,\r\n );\r\n readonly effectiveRenderMode = computed<'form' | 'steps' | 'tabs'>(() => {\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 (configRenderMode === 'steps' || configRenderMode === 'tabs') {\r\n return configRenderMode;\r\n }\r\n\r\n return 'form';\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 sectionNavigationEnabled = computed(\r\n () => this.stepsEnabled() || this.tabsEnabled(),\r\n );\r\n readonly tabOptions = computed<OptionItem[]>(() =>\r\n this.stepSections().map((section, index) => ({\r\n label: section.label || `Tab ${index + 1}`,\r\n value: index + 1,\r\n })),\r\n );\r\n readonly stepTimeline = computed<StepTimelineItem[]>(() => {\r\n const sections = this.stepSections();\r\n const currentStep = this.currentStep();\r\n\r\n return sections.map((section, index) => {\r\n const value = index + 1;\r\n const state = this.resolveStepTimelineState(value, currentStep);\r\n\r\n return {\r\n key: section.key || `section-${index}`,\r\n label: section.label || `Step ${value}`,\r\n value,\r\n state,\r\n selected: value === currentStep,\r\n beforeLineActive: index > 0 && value <= currentStep,\r\n afterLineActive: index < sections.length - 1 && value < currentStep,\r\n };\r\n });\r\n });\r\n readonly visibleSectionKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return null;\r\n\r\n const currentIndex = this.currentStep() - 1;\r\n const activeSection = this.stepSections()[currentIndex];\r\n\r\n if (!activeSection) return null;\r\n\r\n return [activeSection.key || `section-${currentIndex}`];\r\n });\r\n readonly forcedHiddenFieldKeys = computed(() => {\r\n if (!this.sectionNavigationEnabled()) return [];\r\n\r\n const sections = this.stepSections();\r\n const currentIndex = this.currentStep() - 1;\r\n const hiddenFieldKeys = new Set<string>();\r\n\r\n sections.forEach((section, index) => {\r\n if (index === currentIndex) return;\r\n section.fields\r\n .map((field) => field.key)\r\n .filter((key): key is string => !!key)\r\n .forEach((key) => hiddenFieldKeys.add(key));\r\n });\r\n\r\n return [...hiddenFieldKeys];\r\n });\r\n readonly effectiveForcedHiddenFieldKeys = computed(() => {\n return [\n ...new Set([...this.forcedHiddenFieldKeys(), ...this.ignoredFieldKeys()]),\n ];\n });\n readonly footerLoading = computed(() => {\n return (\n this.state.loading() ||\n (this.autoLoad() &&\n !this.hasStartedLoad() &&\n !this.state.isLoaded() &&\n !this.state.error())\n );\n });\n readonly footerState = computed<ClientFormFooterState>(() => {\n const loading = this.footerLoading();\n const isLoaded = this.state.isLoaded();\n const renderMode = this.effectiveRenderMode();\n const stepNavigationEnabled = this.stepsEnabled();\n const sectionNavigationEnabled = this.sectionNavigationEnabled();\n const currentStep = this.currentStep();\n const stepCount = this.stepSections().length;\n const canGoToPreviousStep = stepNavigationEnabled && currentStep > 1;\n const canGoToNextStep = stepNavigationEnabled && currentStep < stepCount;\n\n return {\n loading,\n isLoaded,\n renderMode,\n actionMode: loading\n ? 'loading'\n : stepNavigationEnabled\n ? 'steps'\n : 'submit',\n stepNavigationEnabled,\n sectionNavigationEnabled,\n currentStep,\n stepCount,\n canGoToPreviousStep,\n canGoToNextStep,\n showPreviousStep: stepNavigationEnabled,\n showNextStep: stepNavigationEnabled && canGoToNextStep,\n showSubmit:\n isLoaded && !loading && (!stepNavigationEnabled || !canGoToNextStep),\n };\n });\n\r\n // ============================================================================\r\n // Effects\r\n // ============================================================================\r\n\r\n constructor() {\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(() => {\n const count = this.stepSections().length;\n const current = this.currentStep();\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) {\n this.currentStep.set(1);\n }\n });\n\n effect(() => {\n const footerState = this.footerState();\n\n untracked(() => {\n this.footerStateChanged.emit(footerState);\n });\n });\n }\n\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 {\n if (this.state.loading()) return;\n\n this.loadSub?.unsubscribe();\n this.hasStartedLoad.set(true);\n this.runtimeMessages.set([]);\n this.state.loading.set(true);\n this.state.error.set(null);\n this.state.submitResponse.set(null);\r\n\r\n const request = this.buildLoadRequest();\r\n\r\n this.loadSub = this.api.load(request).subscribe({\r\n next: (response) => {\r\n this.state.loading.set(false);\r\n\r\n if (response.data) {\r\n this.state.setLoadResponse(response.data);\r\n this.loaded.emit(response.data);\r\n\r\n if (response.data.mode) {\r\n this.modeDetected.emit(response.data.mode);\r\n }\r\n\r\n if (response.data.formSource) {\r\n this.formSourceDetected.emit(response.data.formSource);\r\n }\r\n } else {\r\n const msg = response.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to load form';\r\n this.state.setError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Submit the current form values.\r\n * Builds submit request from form value + load context.\r\n */\r\n submit(): void {\r\n if (this.state.submitting()) return;\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) {\r\n const msg = 'Form must be loaded before submit';\r\n this.state.submitError.set(msg);\r\n this.errored.emit(msg);\r\n return;\r\n }\r\n\r\n this.submitSub?.unsubscribe();\r\n this.state.submitting.set(true);\r\n this.state.submitError.set(null);\r\n\r\n const request = this.buildSubmitRequest(loadResponse);\r\n\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 = response.message ?? 'Failed to submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n }\r\n },\r\n error: (err) => {\r\n const msg =\r\n err?.error?.message ?? err?.message ?? 'Failed to submit form';\r\n this.state.setSubmitError(msg);\r\n this.errored.emit(msg);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get the current form value as a flat key-value object.\r\n */\r\n getFormValue(): Record<string, any> {\r\n return this.formControl.value ?? {};\r\n }\r\n\r\n /**\r\n * Get the current form value mapped to submit payload format.\r\n */\r\n getSubmitFields(): ProcessFormSubmitField[] {\r\n const loadResponse = this.state.loadResponse();\r\n if (!loadResponse) return [];\r\n return mapFormValueToSubmitFields(this.getFormValue(), loadResponse);\r\n }\r\n\r\n /**\r\n * Backward-compatible alias for consumers still using the previous helper name.\r\n */\r\n getSubmitValues(): ProcessFormSubmitField[] {\r\n return this.getSubmitFields();\r\n }\r\n\r\n /**\r\n * Check whether the current form state is valid.\r\n */\r\n isValid(): boolean {\r\n return this.formControl.valid;\r\n }\r\n\r\n /**\r\n * Reset the component to its initial state.\r\n */\r\n reset(): void {\r\n this.loadSub?.unsubscribe();\r\n this.submitSub?.unsubscribe();\r\n this.formControl.reset({});\r\n this.runtimeMessages.set([]);\r\n this.state.reset();\r\n }\r\n\r\n onRuntimeMessagesChange(messages: FormulaRuntimeMessage[]): void {\r\n this.runtimeMessages.set(messages ?? []);\r\n }\r\n\r\n onStepChange(value: number): void {\r\n const count = this.stepSections().length;\r\n if (value < 1 || value > count) return;\r\n this.currentStep.set(value);\r\n }\r\n\r\n goToPreviousStep(): void {\r\n this.onStepChange(this.currentStep() - 1);\r\n }\r\n\r\n goToNextStep(): void {\r\n this.onStepChange(this.currentStep() + 1);\r\n }\r\n\r\n canGoToPreviousStep(): boolean {\r\n return this.stepsEnabled() && this.currentStep() > 1;\r\n }\r\n\r\n canGoToNextStep(): boolean {\r\n return (\r\n this.stepsEnabled() && this.currentStep() < this.stepSections().length\r\n );\r\n }\r\n\r\n getCurrentStep(): number {\r\n return this.currentStep();\r\n }\r\n\r\n getStepCount(): number {\r\n return this.stepSections().length;\r\n }\r\n\r\n isStepNavigationEnabled(): boolean {\n return this.stepsEnabled();\n }\n\n isSectionNavigationEnabled(): boolean {\n return this.sectionNavigationEnabled();\n }\n\n isFooterLoading(): boolean {\n return this.footerState().loading;\n }\n\n getResolvedRenderMode(): ClientFormResolvedRenderMode {\n return this.footerState().renderMode;\n }\n\n getFooterState(): ClientFormFooterState {\n return this.footerState();\n }\n\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 }\r\n\r\n // ============================================================================\r\n // Private Helpers\r\n // ============================================================================\r\n\r\n private buildLoadRequest(): ProcessFormLoadRequest {\r\n const req: ProcessFormLoadRequest = {\r\n moduleKey: this.moduleKey(),\r\n operationKey: this.operationKey(),\r\n };\r\n\r\n const moduleId = this.moduleId();\r\n const levelId = this.levelId();\r\n const levelDataId = this.levelDataId();\r\n const moduleDataId = this.moduleDataId();\r\n const requestSchemaId = this.requestSchemaId();\r\n const draftProcessId = this.draftProcessId();\r\n const preview = this.preview();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (draftProcessId != null) req.draftProcessId = draftProcessId;\r\n if (preview) req.preview = preview;\r\n\r\n return req;\r\n }\r\n\r\n private buildSubmitRequest(\r\n loadResponse: ProcessFormLoadResponse,\r\n ): ProcessFormSubmitRequest {\r\n const context = this.state.context();\r\n const formValue = this.getFormValue();\r\n const fields: ProcessFormSubmitField[] = mapFormValueToSubmitFields(\r\n formValue,\r\n loadResponse,\r\n );\r\n\r\n const req: ProcessFormSubmitRequest = {\r\n moduleKey: this.moduleKey() ?? context?.moduleKey,\r\n operationKey: this.operationKey() ?? context?.operationKey,\r\n fields,\r\n };\r\n\r\n const moduleId = context?.moduleId ?? this.moduleId();\r\n const levelId = context?.levelId ?? this.levelId();\r\n const levelDataId = context?.levelDataId ?? this.levelDataId();\r\n const moduleDataId = context?.moduleDataId ?? this.moduleDataId();\r\n const requestSchemaId = context?.requestSchemaId ?? this.requestSchemaId();\r\n const recordId =\r\n moduleDataId ??\r\n (req.moduleKey === 'LevelData' && req.operationKey !== 'Create'\r\n ? levelDataId\r\n : undefined);\r\n const returnUrl = this.returnUrl();\r\n\r\n if (moduleId != null) req.moduleId = moduleId;\r\n if (levelId != null) req.levelId = levelId;\r\n if (levelDataId != null) req.levelDataId = levelDataId;\r\n if (moduleDataId != null) req.moduleDataId = moduleDataId;\r\n if (recordId != null) req.recordId = recordId;\r\n if (requestSchemaId != null) req.requestSchemaId = requestSchemaId;\r\n if (returnUrl) req.returnUrl = returnUrl;\r\n\r\n const submitRequestMapper = this.submitRequestMapper();\r\n if (!submitRequestMapper) {\r\n return req;\r\n }\r\n\r\n return submitRequestMapper(req, {\r\n formValue,\r\n loadResponse,\r\n });\r\n }\r\n\r\n private 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 -->\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\">\r\n @if (previewEntities().length > 0) {\r\n <mt-entities-preview [entities]=\"previewEntities()\" />\r\n }\r\n\r\n <!-- Dynamic Form -->\r\n @if (state.requiresForm() && editableFormConfig(); as config) {\r\n @if (hasEditableFormSections()) {\r\n <div class=\"flex flex-col gap-4\">\r\n @if (runtimeErrors().length > 0 || runtimeWarnings().length > 0) {\r\n <div class=\"rounded-lg border border-surface-200 p-4 bg-surface-50\">\r\n @if (runtimeErrors().length > 0) {\r\n <div class=\"mb-3\">\r\n <h4 class=\"text-sm font-semibold text-red-600 mb-2\">\r\n Validation Errors\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-red-600 space-y-1\">\r\n @for (\r\n msg of runtimeErrors();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n @if (runtimeWarnings().length > 0) {\r\n <div>\r\n <h4 class=\"text-sm font-semibold text-amber-600 mb-2\">\r\n Validation Warnings\r\n </h4>\r\n <ul class=\"list-disc ps-5 text-sm text-amber-700 space-y-1\">\r\n @for (\r\n msg of runtimeWarnings();\r\n track msg.ruleId || msg.fieldKey || msg.message\r\n ) {\r\n <li>{{ msg.message }}</li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (stepsEnabled()) {\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"overflow-x-auto pb-2\">\r\n <div class=\"flex min-w-[36rem] items-start\">\r\n @for (\r\n step of stepTimeline();\r\n track step.key;\r\n let first = $first;\r\n let last = $last\r\n ) {\r\n <div\r\n class=\"relative flex min-w-[8rem] flex-1 justify-center\"\r\n >\r\n @if (!rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (!rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !last) {\r\n <span\r\n class=\"absolute top-5 left-0 right-1/2 h-0.5\"\r\n [ngClass]=\"\r\n step.afterLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n @if (rtl() && !first) {\r\n <span\r\n class=\"absolute top-5 left-1/2 right-0 h-0.5\"\r\n [ngClass]=\"\r\n step.beforeLineActive\r\n ? 'bg-primary'\r\n : 'bg-surface-300'\r\n \"\r\n ></span>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"relative z-10 flex w-full flex-col items-center gap-3 px-2 text-center focus-visible:outline-none\"\r\n [attr.aria-pressed]=\"step.selected\"\r\n [attr.aria-current]=\"\r\n step.state === 'current' ? 'step' : null\r\n \"\r\n [attr.title]=\"step.label\"\r\n (click)=\"onStepChange(step.value)\"\r\n >\r\n <span\r\n class=\"flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border text-sm font-semibold transition-all duration-200\"\r\n [ngClass]=\"{\r\n 'border-primary bg-primary text-surface-0 ring-4 ring-primary/10':\r\n step.state === 'completed' ||\r\n step.state === 'current',\r\n\r\n 'border-surface-300 bg-white text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n >\r\n {{ step.value }}\r\n </span>\r\n <span\r\n class=\"max-w-[8rem] text-center text-sm leading-5 transition-colors duration-200\"\r\n [ngClass]=\"{\r\n 'font-semibold text-primary':\r\n step.selected || step.state === 'current',\r\n 'font-medium text-surface-700':\r\n step.state === 'completed' && !step.selected,\r\n 'font-medium text-surface-500':\r\n step.state === 'upcoming',\r\n }\"\r\n dir=\"auto\"\r\n >\r\n {{ step.label }}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showInternalStepActions()) {\r\n <div class=\"flex justify-between gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === 1\"\r\n (click)=\"goToPreviousStep()\"\r\n >\r\n Previous\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 rounded border border-surface-300 text-sm\"\r\n [disabled]=\"currentStep() === stepSections().length\"\r\n (click)=\"goToNextStep()\"\r\n >\r\n Next\r\n </button>\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 } @else if (previewEntities().length === 0) {\r\n <div\r\n class=\"flex items-center justify-center p-6 rounded-lg bg-surface-50 border border-surface-200 border-dashed\"\r\n >\r\n <p class=\"text-sm text-muted-color\">\r\n No form required for this operation.\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n}\r\n","// ============================================================================\r\n// API Response Wrapper\r\n// ============================================================================\r\n\r\nexport interface Response<T> {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message?: string | null;\r\n errors?: any | null;\r\n data: T;\r\n cacheSession?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Process Form Mode\r\n// ============================================================================\r\n\r\nexport type ProcessFormMode = 'Approval' | 'Direct';\nexport type ProcessFormSubmitStatus = 'PendingApproval' | 'Executed';\nexport type OperationType = 'FormOperation' | 'ActionOperation';\nexport type ProcessFormSource = 'Step' | 'None';\nexport type ClientFormResolvedRenderMode = 'form' | 'steps' | 'tabs';\nexport type ClientFormFooterActionMode = 'loading' | 'steps' | 'submit';\n\nexport interface ClientFormFooterState {\n loading: boolean;\n isLoaded: boolean;\n renderMode: ClientFormResolvedRenderMode;\n actionMode: ClientFormFooterActionMode;\n stepNavigationEnabled: boolean;\n sectionNavigationEnabled: boolean;\n currentStep: number;\n stepCount: number;\n canGoToPreviousStep: boolean;\n canGoToNextStep: boolean;\n showPreviousStep: boolean;\n showNextStep: boolean;\n showSubmit: boolean;\n}\n\r\n// ============================================================================\r\n// Load Request / Response\r\n// ============================================================================\r\n\r\nexport interface ProcessFormLoadRequest {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n requestSchemaId?: number;\r\n draftProcessId?: number;\r\n preview?: boolean;\r\n}\r\n\r\nexport interface ProcessFormLoadResponse {\r\n mode: ProcessFormMode;\r\n formSource: ProcessFormSource;\r\n requiresForm: boolean;\r\n requestSchemaId: number | null;\r\n requestId: number | null;\r\n stepId: number | null;\r\n stepSchemaId: number | null;\r\n stepName: string | null;\r\n formConfiguration: ClientFormConfiguration | null;\r\n values: ProcessFormValue[];\r\n context: ProcessFormContext;\r\n}\r\n\r\n// ============================================================================\r\n// Submit Request / Response\r\n// ============================================================================\r\n\r\nexport interface ProcessFormSubmitRequest {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId?: number | string;\r\n levelId?: number | string;\r\n levelDataId?: number | string;\r\n moduleDataId?: number | string;\r\n recordId?: number | string;\r\n requestSchemaId?: number;\r\n returnUrl?: string;\r\n fields: ProcessFormSubmitField[];\r\n}\r\n\r\nexport interface ClientFormSubmitRequestMapperContext {\r\n formValue: Record<string, any>;\r\n loadResponse: ProcessFormLoadResponse;\r\n}\r\n\r\nexport type ClientFormSubmitRequestMapper = (\r\n request: ProcessFormSubmitRequest,\r\n context: ClientFormSubmitRequestMapperContext,\r\n) => ProcessFormSubmitRequest;\r\n\r\nexport interface ProcessFormSubmitField {\r\n requestPropertyId?: number;\r\n propertyKey: string;\r\n value: any;\r\n}\r\n\r\nexport type ProcessFormSubmitValue = ProcessFormSubmitField;\r\n\r\nexport interface ProcessFormSubmitResponse {\r\n status: ProcessFormSubmitStatus;\r\n moduleKey: string;\r\n operationKey: string;\r\n recordId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n requestSchemaId?: number | null;\r\n requestId?: number | null;\r\n resultModuleKey?: string | null;\r\n resultModuleId?: number | null;\r\n record?: ProcessFormSubmitRecord | null;\r\n}\r\n\r\nexport interface ProcessFormSubmitRecord {\r\n fields: ProcessFormSubmitRecordField[];\r\n}\r\n\r\nexport interface ProcessFormSubmitRecordField {\r\n id: number;\r\n key: string;\r\n normalizedKey: string;\r\n label: string;\r\n viewType: string;\r\n configuration: Record<string, unknown> | null;\r\n source: string;\r\n order: number;\r\n isRequired: boolean;\r\n isSystem: boolean;\r\n raw: any;\r\n value: any;\r\n display?: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// Values & Context\r\n// ============================================================================\r\n\r\nexport interface ProcessFormValue {\r\n propertyKey: string;\r\n rawValue?: any;\r\n value: any;\r\n metadata?: ProcessFormValueMetadata;\r\n}\r\n\r\nexport interface ProcessFormValueMetadata {\r\n propertyId: number;\r\n key: string;\r\n viewType: string;\r\n source: string;\r\n}\r\n\r\nexport interface ProcessFormContext {\r\n moduleKey: string;\r\n operationKey: string;\r\n moduleId: number | null;\r\n levelId: number | null;\r\n levelDataId: number | null;\r\n moduleDataId: number | null;\r\n requestSchemaId: number | null;\r\n requestId: number | null;\r\n stepId: number | null;\r\n stepSchemaId: number | null;\r\n preview: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration (runtime shape — no _pending/_deleting)\r\n// ============================================================================\r\n\r\nexport type ClientFieldWidth = '25' | '50' | '100';\r\nexport type ClientFormRenderMode = 'sections' | 'steps' | 'tabs';\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 {\n key: string;\n propertyId?: number;\n isCalculated?: boolean;\n name:\n | string\n | {\n display?: string;\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 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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"}