@codex-ts/core-lib 1.1.6 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/codex-ts-core-lib.mjs +239 -20
- package/fesm2022/codex-ts-core-lib.mjs.map +1 -1
- package/lib/components/base-task-dashboard.component.d.ts +5 -0
- package/lib/models/base-task.model.d.ts +5 -0
- package/lib/models/workflow.model.d.ts +9 -0
- package/lib/services/base-task.service.d.ts +7 -0
- package/lib/services/http-utility.service.d.ts +3 -0
- package/lib/services/task-entity-service.interface.d.ts +3 -0
- package/lib/workflow-engine/workflow-engine-api.service.d.ts +104 -0
- package/lib/workflow-engine/workflow-engine.models.d.ts +236 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-ts-core-lib.mjs","sources":["../../../projects/core-lib/src/lib/constants/app.constants.ts","../../../projects/core-lib/src/lib/constants/app.messages.ts","../../../projects/core-lib/src/lib/enums/component-context.enum.ts","../../../projects/core-lib/src/lib/services/utils.service.ts","../../../projects/core-lib/src/lib/services/notification.service.ts","../../../projects/core-lib/src/lib/components/base-page.component.ts","../../../projects/core-lib/src/lib/services/enum-registry.service.ts","../../../projects/core-lib/src/lib/services/formly-config.service.ts","../../../projects/core-lib/src/lib/components/base-form.component.ts","../../../projects/core-lib/src/lib/models/pagination/table-column-datatype.enum.ts","../../../projects/core-lib/src/lib/components/base-table.component.ts","../../../projects/core-lib/src/lib/components/base-list-page.component.ts","../../../projects/core-lib/src/lib/components/base-list-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-task-dashboard.component.ts","../../../projects/core-lib/src/lib/services/form.service.ts","../../../projects/core-lib/src/lib/components/base-task-details.component.ts","../../../projects/core-lib/src/lib/keycloak/keycloak-service.token.ts","../../../projects/core-lib/src/lib/services/base-error.service.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.token.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.service.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.guard.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.interceptor.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.providers.ts","../../../projects/core-lib/src/lib/services/base-entity.service.ts","../../../projects/core-lib/src/lib/services/http-utility.service.ts","../../../projects/core-lib/src/lib/services/base-task.service.ts","../../../projects/core-lib/src/lib/services/reference-data-provider.service.ts","../../../projects/core-lib/src/lib/services/entity-registry.service.ts","../../../projects/core-lib/src/lib/pipes/indian-date.pipe.ts","../../../projects/core-lib/src/lib/models/base-task.model.ts","../../../projects/core-lib/src/lib/models/base.comment.model.ts","../../../projects/core-lib/src/lib/enums/tabbed-form-type.enum.ts","../../../projects/core-lib/src/lib/enums/task-role.enum.ts","../../../projects/core-lib/src/lib/components/formly/types/text-input.type.ts","../../../projects/core-lib/src/lib/components/formly/types/select.type.ts","../../../projects/core-lib/src/lib/components/formly/types/radio.type.ts","../../../projects/core-lib/src/lib/components/formly/types/numeric-input.type.ts","../../../projects/core-lib/src/lib/components/formly/types/multiselect.type.ts","../../../projects/core-lib/src/lib/components/formly/types/date.type.ts","../../../projects/core-lib/src/lib/components/formly/types/checkbox.type.ts","../../../projects/core-lib/src/lib/components/formly/types/textarea.type.ts","../../../projects/core-lib/src/lib/components/formly/form-field.wrapper.ts","../../../projects/core-lib/src/lib/components/formly/formly.constants.ts","../../../projects/core-lib/src/lib/components/formly/types/file-upload.type.ts","../../../projects/core-lib/src/lib/validators/common-validators.ts","../../../projects/core-lib/src/lib/components/formly/core-formly.module.ts","../../../projects/core-lib/src/lib/components/formly/primeng-formly.module.ts","../../../projects/core-lib/src/lib/components/keycloak-error-banner/keycloak-error-page.component.ts","../../../projects/core-lib/src/lib/components/not-found/not-found.component.ts","../../../projects/core-lib/src/lib/components/unauthorized/unauthorized.component.ts","../../../projects/core-lib/src/public-api.ts","../../../projects/core-lib/src/codex-ts-core-lib.ts"],"sourcesContent":["export class AppConstants {\r\n static readonly FORM = {\r\n MODE: 'mode',\r\n UUID: 'uuid',\r\n NEW: 'new'\r\n } as const;\r\n\r\n static readonly PAGE_MODE = {\r\n CREATE: 'create',\r\n EDIT: 'edit',\r\n VIEW: 'view'\r\n } as const;\r\n}\r\n\r\nexport type PageMode = typeof AppConstants.PAGE_MODE[keyof typeof AppConstants.PAGE_MODE];\r\n","export const AppMessages = {\r\n COMMON: {\r\n ERROR: {\r\n GENERAL: 'An error occurred',\r\n INVALID_INPUT: 'Invalid input provided',\r\n REQUIRED_FIELD: 'This field is required'\r\n },\r\n SUCCESS: {\r\n SAVE: 'saved successfully',\r\n UPDATE: 'updated successfully',\r\n DELETE: 'deleted successfully'\r\n }\r\n },\r\n FORM: {\r\n ERROR: {\r\n INIT: 'Failed to initialize form',\r\n SAVE: 'Failed to save',\r\n LOAD: 'Failed to load',\r\n VALIDATION: 'Please fill in all required fields correctly'\r\n },\r\n SUCCESS: {\r\n SAVE: 'saved successfully'\r\n }\r\n },\r\n LIST: {\r\n ERROR: {\r\n LOAD: 'Failed to load',\r\n DELETE: 'Failed to delete',\r\n NAVIGATION: 'Navigation failed',\r\n INVALID_ID: 'Cannot perform action without ID'\r\n },\r\n SUCCESS: {\r\n DELETE: 'deleted successfully'\r\n }\r\n }\r\n} as const;\r\n","export enum ComponentContext {\r\n STANDALONE = 'STANDALONE',\r\n TABBED = 'TABBED',\r\n MODAL = 'MODAL',\r\n EMBEDDED = 'EMBEDDED'\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * A utility service that provides common reusable functionality\r\n * such as UUID validation and error message display\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n /**\r\n * Validates if a string is a valid UUID\r\n * @param uuid The string to validate\r\n * @returns boolean indicating if the string is a valid UUID\r\n */\r\n isValidUUID(uuid: string): boolean {\r\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\r\n return uuidRegex.test(uuid);\r\n }\r\n\r\n /**\r\n * Shows an error message using PrimeNG's MessageService\r\n * @param message The error message to display\r\n * @param messageService The MessageService instance to use\r\n */\r\n showError(message: string, messageService?: MessageService) {\r\n if (messageService) {\r\n messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Shows a success message using PrimeNG's MessageService\r\n * @param message The success message to display\r\n * @param messageService The MessageService instance to use\r\n */\r\n showSuccess(message: string, messageService?: MessageService) {\r\n if (messageService) {\r\n messageService.add({\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the display value for an enum key or array of enum keys\r\n * @param enumType The enum type\r\n * @param key The enum key or array of enum keys\r\n * @returns The display value for the enum key or comma-separated list of display values for array of keys\r\n */\r\n getEnumValue<T>(enumType: T, key: string | string[]): string {\r\n if (!key) return '';\r\n \r\n if (Array.isArray(key)) {\r\n // Handle array of keys - map each to its display value and join with comma\r\n return key.map(k => (enumType as any)[k] || k).join(', ');\r\n }\r\n \r\n // Handle single key\r\n return (enumType as any)[key] || key;\r\n }\r\n\r\n /**\r\n * Gets all values from an enum type for use in formly select fields\r\n * @param enumType The enum type to get values from\r\n * @returns Array of {label, value} pairs for formly select options\r\n */\r\n getEnumValues<T extends { [key: string]: string | number }>(enumType: T): Array<{label: string, value: string}> {\r\n return Object.entries(enumType)\r\n .filter(([key]) => isNaN(Number(key))) // Filter out reverse mappings\r\n .map(([key, value]) => ({\r\n value: key, // enum key as the value\r\n label: value as string // enum value as the label\r\n }));\r\n }\r\n\r\n /**\r\n * Converts a camelCase string to Title Case with spaces\r\n * @param camelCase The camelCase string to convert\r\n * @returns The Title Case string\r\n */\r\n camelCaseToTitleCase(camelCase: string): string {\r\n if (!camelCase) return '';\r\n const spacedString = camelCase.replace(/([a-z])([A-Z])/g, '$1 $2');\r\n return spacedString.charAt(0).toUpperCase() + spacedString.slice(1);\r\n }\r\n\r\n /**\r\n * Converts a string to kebab-case\r\n * @param input The string to convert\r\n * @returns The kebab-case string\r\n */\r\n toKebabCase(input: string): string {\r\n return input\r\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\r\n .replace(/([A-Z])([A-Z])(?=[a-z])/g, '$1-$2')\r\n .toLowerCase();\r\n }\r\n\r\n /**\r\n * Converts a string to camelCase.\r\n * Example: \"loan-application\" becomes \"loanApplication\"\r\n * @param input The string to convert\r\n * @returns The camelCase string\r\n */\r\n toCamelCase(input: string): string {\r\n if (!input) return '';\r\n \r\n // Split by non-alphanumeric chars\r\n const words = input.split(/[^a-zA-Z0-9]/);\r\n const result = [words[0].toLowerCase()];\r\n \r\n // Capitalize first letter of remaining words\r\n for (let i = 1; i < words.length; i++) {\r\n const word = words[i];\r\n if (word) {\r\n result.push(word.charAt(0).toUpperCase() + word.substring(1).toLowerCase());\r\n }\r\n }\r\n \r\n return result.join('');\r\n }\r\n\r\n /**\r\n * Removes double forward slashes from an endpoint string while preserving the protocol\r\n * e.g. \"http://localhost:8080//api//v1//users\" -> \"http://localhost:8080/api/v1/users\"\r\n * @param endpoint The endpoint string to clean\r\n * @returns The cleaned endpoint string without double slashes\r\n */\r\n removeDoubleSlashes(endpoint: string): string {\r\n if (!endpoint) return '';\r\n \r\n // Split the URL into protocol and the rest to preserve protocol slashes\r\n const [protocol, ...rest] = endpoint.split('://');\r\n \r\n if (!rest.length) {\r\n // If no protocol is present, just clean the entire string\r\n return endpoint.replace(/\\/+/g, '/');\r\n }\r\n \r\n // Clean the path part (after protocol) and reconstruct the URL\r\n const cleanPath = rest.join('://').replace(/\\/+/g, '/');\r\n return `${protocol}://${cleanPath}`;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationService {\r\n private messageSubject = new BehaviorSubject<any>(null);\r\n message$ = this.messageSubject.asObservable();\r\n\r\n constructor(private messageService: MessageService) {}\r\n\r\n showSuccess(message: string) {\r\n const msgObj = {\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: message,\r\n life: 3000\r\n };\r\n this.messageSubject.next(msgObj);\r\n }\r\n\r\n showError(message: string) {\r\n const msgObj = {\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n };\r\n this.messageSubject.next(msgObj);\r\n }\r\n\r\n clearMessage() {\r\n this.messageSubject.next(null);\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\n\r\n/**\r\n * Base component for all page components in the application.\r\n * Provides common functionality like loading state, message display,\r\n * and role-based access control.\r\n */\r\n@Directive()\r\nexport abstract class BasePageComponent {\r\n protected loading: boolean = false;\r\n \r\n constructor(\r\n protected utilsService: UtilsService,\r\n protected notificationService: NotificationService\r\n ) {}\r\n\r\n /**\r\n * Display an error message to the user\r\n * @param detail The error message to display\r\n */\r\n protected showError(detail: string): void {\r\n this.notificationService.showError(detail);\r\n }\r\n\r\n /**\r\n * Display a success message to the user\r\n * @param detail The success message to display\r\n */\r\n protected showSuccess(detail: string): void {\r\n this.notificationService.showSuccess(detail);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UtilsService } from './utils.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnumRegistryService {\r\n private enumMap = new Map<string, any>();\r\n\r\n constructor(private utilsService: UtilsService) {}\r\n\r\n /**\r\n * Initialize global enums\r\n */\r\n static registerGlobalEnums(enums: Record<string, any>) {\r\n return {\r\n provide: EnumRegistryService,\r\n useFactory: (utilsService: UtilsService) => {\r\n const service = new EnumRegistryService(utilsService);\r\n Object.entries(enums).forEach(([name, enumType]) => {\r\n service.register(name, enumType);\r\n });\r\n return service;\r\n },\r\n deps: [UtilsService]\r\n };\r\n }\r\n \r\n /**\r\n * Register an enum type with the service\r\n * @param name Name to register the enum under\r\n * @param enumType The enum type to register\r\n */\r\n register(name: string, enumType: any) {\r\n this.enumMap.set(name, enumType);\r\n }\r\n \r\n /**\r\n * Get formly-compatible options array for a registered enum\r\n * @param name Name of the registered enum\r\n * @returns Array of {label, value} pairs suitable for formly select fields\r\n */\r\n getEnumValues(name: string) {\r\n const enumType = this.enumMap.get(name);\r\n if (!enumType) {\r\n console.warn(`Enum type \"${name}\" not found in registry`);\r\n return [];\r\n }\r\n return this.utilsService.getEnumValues(enumType);\r\n }\r\n\r\n /**\r\n * Check if an enum type is registered\r\n * @param name Name of the enum to check\r\n */\r\n hasEnum(name: string): boolean {\r\n return this.enumMap.has(name);\r\n }\r\n\r\n /**\r\n * Clear all registered enums\r\n */\r\n clear() {\r\n this.enumMap.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { PageMode } from '../constants/app.constants';\r\nimport { EnumRegistryService } from './enum-registry.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormlyConfigService {\r\n constructor(private enumRegistry: EnumRegistryService) {}\r\n\r\n getFormConfig(\r\n fields: FormlyFieldConfig[], \r\n mode: PageMode,\r\n dynamicOptions?: Record<string, any>\r\n ): FormlyFieldConfig[] {\r\n const commonConfig = {\r\n props: {\r\n disabled: mode === 'view'\r\n }\r\n };\r\n\r\n return fields.map((field: FormlyFieldConfig) => {\r\n // Apply dynamic options from child component\r\n if (dynamicOptions && field.key && typeof field.key === 'string') {\r\n const fieldOptions = dynamicOptions[field.key];\r\n if (fieldOptions) {\r\n field.props = {\r\n ...field.props,\r\n ...fieldOptions\r\n };\r\n }\r\n }\r\n\r\n // Handle field groups recursively\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.getFormConfig(field.fieldGroup, mode, dynamicOptions);\r\n }\r\n\r\n return {\r\n ...field,\r\n ...commonConfig,\r\n props: {\r\n ...field.props,\r\n ...commonConfig.props\r\n }\r\n };\r\n });\r\n }\r\n}\r\n","import { Component, Injectable, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, finalize, map, mergeMap, switchMap, take, takeUntil, tap } from 'rxjs/operators';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { BasePageComponent } from './base-page.component';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseFormComponent<T extends BaseModel>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n\r\n protected state: FormComponentState<T> = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.STANDALONE\r\n };\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected formlyConfigService: FormlyConfigService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeForm()\r\n .pipe(\r\n switchMap(() => this.loadFormData()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => this.onFormReady(),\r\n error: error => this.handleInitError(error)\r\n });\r\n }\r\n\r\n private initializeForm(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n take(1),\r\n map(params => {\r\n this.initializeFormMode(params[AppConstants.FORM.MODE]);\r\n this.setupFormState();\r\n this.initializeFormSubscriptions();\r\n })\r\n );\r\n }\r\n\r\n private loadFormData(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n take(1),\r\n mergeMap(params => {\r\n const state = this.getRouterState();\r\n \r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n return of(void 0);\r\n }\r\n\r\n if (state?.formData) {\r\n this.updateFormState(state.formData);\r\n return of(void 0);\r\n }\r\n\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (!uuid) {\r\n throw new Error(`UUID is required for ${this.state.mode} mode`);\r\n }\r\n\r\n return this.getEntityOperations().getById(uuid)\r\n .pipe(\r\n tap(data => this.updateFormState(data)),\r\n map(() => void 0)\r\n );\r\n })\r\n );\r\n }\r\n\r\n private getRouterState(): any {\r\n return {\r\n ...this.router.getCurrentNavigation()?.extras?.state,\r\n ...window.history.state,\r\n ...this.route.snapshot.data\r\n };\r\n }\r\n\r\n private initializeFormSubscriptions(): void {\r\n this.state.form.valueChanges\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe(() => {\r\n this.updateCurrentData();\r\n this.checkFormChanges();\r\n });\r\n\r\n // Check for context in router state\r\n const routerState = window.history.state;\r\n if (routerState?.context) {\r\n this.state.context = routerState.context;\r\n console.log('[BaseFormComponent] Context set from router state:', this.state.context);\r\n }\r\n }\r\n\r\n @Input() set formData(data: T | null) {\r\n console.log('[BaseFormComponent] Form data input changed:', data);\r\n if (data) {\r\n // Reset form with new data\r\n this.state.fields = this.getFormlyFieldConfig();\r\n this.state.form.reset();\r\n this.state.currentData = { ...data };\r\n this.state.originalData = data;\r\n this.state.isNew = false;\r\n\r\n // Update form values after reset\r\n this.state.form.patchValue(data);\r\n \r\n console.log('[BaseFormComponent] Form state updated:', {\r\n fields: this.state.fields,\r\n formValue: this.state.form.value,\r\n currentData: this.state.currentData\r\n });\r\n }\r\n }\r\n\r\n private updateCurrentData(): void {\r\n this.state.currentData = {\r\n ...this.state.form.value,\r\n uuid: this.state.originalData?.uuid\r\n };\r\n }\r\n\r\n private checkFormChanges(): void {\r\n this.state.hasChanges = this.hasFormChanges(this.state.currentData);\r\n }\r\n\r\n protected updateFormState(data: T): void {\r\n this.state = {\r\n ...this.state,\r\n currentData: { ...data },\r\n originalData: data,\r\n isNew: false,\r\n loading: false\r\n };\r\n this.state.form.patchValue(data, { emitEvent: false });\r\n }\r\n\r\n private handleInitError(error: any): void {\r\n console.error('Form initialization error:', error);\r\n this.notificationService.showError(AppMessages.FORM.ERROR.INIT);\r\n this.state.loading = false;\r\n }\r\n\r\n private handleLoadError(error: any): void {\r\n const entityName = this.getEntityName();\r\n console.error(`Error loading ${entityName}:`, error);\r\n this.notificationService.showError(\r\n `${AppMessages.FORM.ERROR.LOAD} ${entityName}`\r\n );\r\n this.state.loading = false;\r\n }\r\n\r\n protected patchFormData(data: any) {\r\n this.formData = data;\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n } else if (this.isValidPageMode(routeMode)) {\r\n this.state.mode = routeMode;\r\n } else {\r\n throw new Error(`Invalid page mode: ${routeMode}`);\r\n }\r\n }\r\n\r\n private setupFormState() {\r\n this.state.fields = this.getFormlyFieldConfig();\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.state.form.disable();\r\n }\r\n }\r\n\r\n private onFormReady(): void {\r\n console.log('[BaseFormComponent] Form initialized successfully');\r\n }\r\n\r\n protected getFormlyFieldConfig(): FormlyFieldConfig[] {\r\n return this.formlyConfigService.getFormConfig(\r\n this.getJsonFields(),\r\n this.state.mode,\r\n this.getDropdownOptions()\r\n );\r\n }\r\n\r\n protected onSubmitRoute(): string[] {\r\n return [`/${this.getEntityName().toLowerCase()}s`];\r\n }\r\n\r\n protected getEntityOperations(): {\r\n create: (data: Omit<T, typeof AppConstants.FORM.UUID>) => Observable<T>;\r\n update: (uuid: string, data: Omit<T, typeof AppConstants.FORM.UUID>) => Observable<T>;\r\n getById: (uuid: string) => Observable<T>;\r\n } {\r\n const entityService = this.getEntityService();\r\n return {\r\n create: (data) => entityService.create(data),\r\n update: (uuid, data) => entityService.update(uuid, { ...data, uuid } as T),\r\n getById: (uuid) => entityService.getById(uuid)\r\n };\r\n }\r\n\r\n protected onSubmit(): void {\r\n if (!this.validateSubmission()) {\r\n return;\r\n }\r\n\r\n this.state.loading = true;\r\n const operation$ = this.getSubmitOperation();\r\n\r\n operation$\r\n .pipe(\r\n finalize(() => this.state.loading = false),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => this.handleSubmitSuccess(),\r\n error: error => this.handleSubmitError(error)\r\n });\r\n }\r\n\r\n private validateSubmission(): boolean {\r\n if (!this.state.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n if (!this.state.hasChanges && !this.state.isNew) {\r\n this.notificationService.showSuccess('No changes to save');\r\n return false;\r\n }\r\n\r\n if (!this.state.currentData || Object.keys(this.state.currentData).length === 0) {\r\n this.notificationService.showError('No data to save');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private getSubmitOperation(): Observable<T> {\r\n const formData = this.state.currentData as Omit<T, typeof AppConstants.FORM.UUID>;\r\n const operations = this.getEntityOperations();\r\n\r\n return this.state.isNew\r\n ? operations.create(formData)\r\n : operations.update(this.state.originalData!.uuid, formData);\r\n }\r\n\r\n private handleSubmitSuccess(): void {\r\n const entityName = this.getEntityName();\r\n this.notificationService.showSuccess(`${entityName} ${AppMessages.FORM.SUCCESS.SAVE}`);\r\n this.router.navigate(this.onSubmitRoute());\r\n }\r\n\r\n private handleSubmitError(error: any): void {\r\n const entityName = this.getEntityName();\r\n const errorMessage = error.error?.message || `${AppMessages.FORM.ERROR.SAVE} ${entityName}`;\r\n this.showError(errorMessage);\r\n }\r\n\r\n protected hasFormChanges(currentData: any): boolean {\r\n if (!this.state.originalData || this.state.isNew) {\r\n return true;\r\n }\r\n\r\n console.log('[BaseFormComponent] Checking for changes:', {\r\n currentData,\r\n originalData: this.state.originalData\r\n });\r\n\r\n const hasChanges = Object.keys(currentData).some(key => {\r\n const currentValue = currentData[key];\r\n const originalValue = (this.state.originalData as any)[key];\r\n const changed = currentValue !== originalValue;\r\n \r\n if (changed) {\r\n console.log(`[BaseFormComponent] Field '${key}' changed:`, {\r\n from: originalValue,\r\n to: currentValue\r\n });\r\n }\r\n \r\n return changed;\r\n });\r\n\r\n console.log('[BaseFormComponent] Changes detected:', hasChanges);\r\n return hasChanges;\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n protected abstract getEntityService(): EntityService<T>;\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n protected getDropdownOptions(): Record<string, any> {\r\n return {};\r\n }\r\n\r\n protected abstract getJsonFields(): any;\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Checks if the component is running in a specific context\r\n * @param contextType The context type to check against\r\n */\r\n protected isInContext(contextType: ComponentContext): boolean {\r\n return this.state.context === contextType;\r\n }\r\n}\r\n","export enum TableColumnDatatype {\r\n STRING = 'STRING',\r\n NUMBER = 'NUMBER',\r\n DATE = 'DATE',\r\n BOOLEAN = 'BOOLEAN'\r\n}\r\n","import { OnInit, OnDestroy, ViewChild, Directive } from '@angular/core';\r\nimport { Table, TableLazyLoadEvent } from 'primeng/table';\r\nimport { Subscription, Observable } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { FilterCriteria, FilterOperator } from '../models/pagination/filter-criteria.interface';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { TableColumnDatatype } from '../models/pagination/table-column-datatype.enum';\r\n\r\n/**\r\n * Base component for all table components in the application.\r\n * Provides common functionality for table operations like loading data,\r\n * pagination, sorting, and filtering.\r\n */\r\n@Directive()\r\nexport abstract class BaseTableComponent<T extends { uuid: string }> extends BasePageComponent {\r\n @ViewChild('dt') table!: Table;\r\n items: T[] = [];\r\n rows: number = 10;\r\n totalRecords: number = 0;\r\n filters: FilterCriteria[] = [];\r\n protected columns: any[] = [];\r\n protected subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n protected override utilsService: UtilsService,\r\n protected override notificationService: NotificationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Initialize the component and load initial data\r\n */\r\n ngOnInit() {\r\n // Subscribe to loading state if available\r\n const loadingObservable = this.getLoadingObservable();\r\n if (loadingObservable) {\r\n this.subscriptions.push(\r\n loadingObservable.subscribe(\r\n isLoading => this.loading = isLoading\r\n )\r\n );\r\n }\r\n this.loadData();\r\n }\r\n\r\n /**\r\n * Clean up any subscriptions when the component is destroyed\r\n */\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(sub => sub.unsubscribe());\r\n }\r\n\r\n /**\r\n * Handle search event from the UI\r\n * @param event The search event\r\n */\r\n onSearch(event: Event): void {\r\n const element = event.target as HTMLInputElement;\r\n if (this.table) {\r\n this.table.filterGlobal(element.value, 'contains');\r\n }\r\n }\r\n\r\n /**\r\n * Load data with pagination and sorting\r\n * @param event The lazy load event from PrimeNG table\r\n */\r\n loadData(event?: TableLazyLoadEvent) {\r\n console.log('LoadData called with event:', event);\r\n this.loading = true;\r\n\r\n // Create page request with default values\r\n const pageRequest: PageRequest = {\r\n page: 0,\r\n size: 10,\r\n sorts: [],\r\n filters: []\r\n };\r\n\r\n if (event) {\r\n // Handle pagination\r\n if (event.first !== undefined && event.rows) {\r\n pageRequest.page = Math.floor(event.first / event.rows);\r\n pageRequest.size = event.rows;\r\n }\r\n\r\n // Handle sorting\r\n if (event.sortField) {\r\n pageRequest.sorts = [{\r\n field: Array.isArray(event.sortField) ? event.sortField[0] : event.sortField,\r\n direction: event.sortOrder === 1 ? 'asc' : 'desc'\r\n }];\r\n }\r\n\r\n // Handle filtering\r\n if (event.filters) {\r\n const convertedFilters = this.convertFilters(event.filters);\r\n console.log('Converted filters:', convertedFilters);\r\n pageRequest.filters = convertedFilters;\r\n }\r\n }\r\n\r\n console.log('Sending page request:', pageRequest);\r\n\r\n this.getEntityService().getAll(pageRequest)\r\n .pipe(finalize(() => this.loading = false))\r\n .subscribe({\r\n next: (response: Page<T>) => {\r\n this.items = [...response.content];\r\n this.totalRecords = response.totalElements;\r\n this.rows = response.pageable.pageSize;\r\n },\r\n error: (error) => {\r\n console.error('Failed to load data:', error);\r\n this.showError(`Failed to load data`);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Convert PrimeNG filters to backend format with proper operator mapping\r\n */\r\n protected convertFilters(filters: { [key: string]: any }): FilterCriteria[] {\r\n const backendFilters: FilterCriteria[] = [];\r\n if (!filters) return backendFilters;\r\n\r\n // Dynamically map field to datatype using column definitions\r\n const getColumnDatatype = (field: string): TableColumnDatatype => {\r\n // Assumes this.columns is an array of column definitions with 'field' and 'type'\r\n if (!this['columns']) return TableColumnDatatype.STRING;\r\n const col = this['columns'].find((c: any) => c.field === field);\r\n if (!col) return TableColumnDatatype.STRING;\r\n switch (col.type) {\r\n case 'text':\r\n case 'string':\r\n return TableColumnDatatype.STRING;\r\n case 'numeric':\r\n case 'number':\r\n return TableColumnDatatype.NUMBER;\r\n case 'date':\r\n return TableColumnDatatype.DATE;\r\n case 'boolean':\r\n return TableColumnDatatype.BOOLEAN;\r\n default:\r\n return TableColumnDatatype.STRING;\r\n }\r\n };\r\n\r\n console.log('Raw PrimeNG filters:', filters);\r\n\r\n Object.entries(filters).forEach(([key, filterMeta]) => {\r\n console.log(`Processing filter for ${key}:`, filterMeta);\r\n\r\n const datatype = getColumnDatatype(key);\r\n\r\n // Handle array of filter metadata (multiple filters for same column)\r\n if (Array.isArray(filterMeta)) {\r\n const validFilters = filterMeta\r\n .filter(meta => meta.value !== null && meta.value !== undefined && meta.value !== '')\r\n .map(meta => ({\r\n field: key,\r\n value: this.transformFilterValue(String(meta.value)),\r\n operator: this.transformOperator(meta.matchMode),\r\n datatype\r\n }));\r\n backendFilters.push(...validFilters);\r\n }\r\n // Handle single filter metadata\r\n else if (filterMeta?.value !== null && filterMeta?.value !== undefined && filterMeta?.value !== '') {\r\n backendFilters.push({\r\n field: key,\r\n value: this.transformFilterValue(String(filterMeta.value)),\r\n operator: this.transformOperator(filterMeta.matchMode),\r\n datatype\r\n });\r\n }\r\n });\r\n\r\n console.log('Converted filters:', backendFilters);\r\n return backendFilters;\r\n }\r\n\r\n /**\r\n * Transform filter value based on backend requirements - all values must be strings\r\n */\r\n protected transformFilterValue(value: any): string {\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n if (typeof value === 'string') {\r\n return value.trim();\r\n }\r\n if (Array.isArray(value)) {\r\n return value.join(',');\r\n }\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return value.toString();\r\n }\r\n return String(value);\r\n }\r\n\r\n /**\r\n * Map PrimeNG operators to backend operators\r\n */\r\n protected transformOperator(operator: string): FilterOperator {\r\n const operatorMap: { [key: string]: FilterOperator } = {\r\n 'contains': 'CONTAINS',\r\n 'startsWith': 'STARTS_WITH',\r\n 'endsWith': 'ENDS_WITH',\r\n 'equals': 'EQUALS',\r\n 'notEquals': 'NOT_EQUALS',\r\n 'gt': 'GREATER_THAN',\r\n 'gte': 'GREATER_THAN_EQUALS',\r\n 'lt': 'LESS_THAN',\r\n 'lte': 'LESS_THAN_EQUALS'\r\n };\r\n return operatorMap[operator] || 'EQUALS'; // Default to EQUALS if operator not found\r\n }\r\n\r\n /**\r\n * Get an observable for loading state from the entity service\r\n * @returns An observable of loading state if available, null otherwise\r\n */\r\n protected getLoadingObservable(): Observable<boolean> | null {\r\n const service = this.getEntityService() as any;\r\n return service.loading$ || null;\r\n }\r\n\r\n /**\r\n * Get the entity service for data operations\r\n */\r\n protected abstract getEntityService(): {\r\n getAll: (pageRequest?: PageRequest) => Observable<Page<T>>;\r\n };\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { Observable } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\n\r\n/**\r\n * Base component for all list page components in the application.\r\n * Provides common functionality for list operations like CRUD operations\r\n * while inheriting table functionality from BaseTableComponent.\r\n */\r\n@Directive()\r\nexport abstract class BaseListPageComponent<T extends { uuid: string }> extends BaseTableComponent<T> {\r\n actionLoading: boolean = false;\r\n\r\n constructor(\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected confirmationService: ConfirmationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Navigate to create a new entity\r\n */\r\n public onCreate(): void {\r\n // Navigate to the form route and pass the mode as a query parameter\r\n this.navigateTo([this.getFormRoute()], { [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.CREATE });\r\n }\r\n\r\n /**\r\n * Navigate to view an entity\r\n * @param item The entity to view\r\n */\r\n onView(item: T) {\r\n if (!this.validateItemUuid(item, 'view')) return;\r\n // Navigate to form route, pass mode and uuid as query params\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.VIEW, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Navigate to edit an entity\r\n * @param item The entity to edit\r\n */\r\n onEdit(item: T) {\r\n if (!this.validateItemUuid(item, 'edit')) return;\r\n // Navigate to form route, pass mode and uuid as query params\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.EDIT, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Delete an entity with confirmation\r\n * @param item The entity to delete\r\n */\r\n onDelete(item: T) {\r\n if (!this.validateItemUuid(item, 'delete')) return;\r\n\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete this ${this.getEntityName()}?`,\r\n header: 'Confirm Deletion',\r\n icon: 'pi pi-exclamation-triangle',\r\n accept: () => {\r\n this.actionLoading = true;\r\n this.getEntityService().delete(item.uuid)\r\n .pipe(finalize(() => this.actionLoading = false))\r\n .subscribe({\r\n next: () => {\r\n this.showSuccess(`${this.getEntityName()} ${AppMessages.LIST.SUCCESS.DELETE}`);\r\n this.loadData();\r\n },\r\n error: (error) => {\r\n console.error('Delete failed:', error);\r\n this.showError(`${AppMessages.LIST.ERROR.DELETE} ${this.getEntityName()}`);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Navigate to a route with error handling\r\n * @param path The route path\r\n * @param matrixParams Optional matrix parameters\r\n */\r\n protected navigateTo(path: any[], matrixParams?: { [key: string]: any }): void {\r\n this.router.navigate(path, { queryParams: matrixParams })\r\n .catch(error => {\r\n console.error('Navigation error:', error);\r\n this.showError(AppMessages.LIST.ERROR.NAVIGATION);\r\n });\r\n }\r\n\r\n /**\r\n * Validate that an entity has a UUID\r\n * @param item The entity to validate\r\n * @param action The action being performed\r\n * @returns true if valid, false otherwise\r\n */\r\n protected validateItemUuid(item: T, action: string): boolean {\r\n if (!item?.uuid) {\r\n this.showError(`${AppMessages.LIST.ERROR.INVALID_ID} ${action}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Override the getEntityService to include the delete operation\r\n */\r\n protected abstract override getEntityService(): {\r\n getAll: (pageRequest?: any) => Observable<any>;\r\n delete: (uuid: string) => Observable<any>;\r\n };\r\n\r\n /**\r\n * Get the entity name for display in messages\r\n */\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Get the route to the entity form\r\n */\r\n protected abstract getFormRoute(): string;\r\n}\r\n","import { Component, OnInit, OnDestroy, Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { Observable, Subject, ReplaySubject, take, map, takeUntil, distinctUntilChanged, catchError, of } from 'rxjs';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\n\r\nimport { TabConfig } from '../states/tabbed-form.state';\r\nimport { ListTabbedFormState } from '../states/list-tabbed-form.state';\r\n\r\ninterface TabState<T> {\r\n activeTab: string;\r\n currentData: T;\r\n originalData: T | null;\r\n}\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseListTabbedFormComponent<T extends { uuid: string }>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n private readonly tabState$ = new ReplaySubject<TabState<T>>(1);\r\n\r\n public state: ListTabbedFormState<T> & FormComponentState<T> = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.TABBED,\r\n activeTab: '',\r\n tabs: [],\r\n formDataList: []\r\n };\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFormFromQueryParams();\r\n this.setupTabStateSubscription();\r\n this.setupRouteParamsSubscription();\r\n }\r\n\r\n private initializeFormFromQueryParams(): void {\r\n this.route.queryParams.pipe(\r\n take(1),\r\n catchError(error => {\r\n console.error('Error initializing form:', error);\r\n this.showError(AppMessages.FORM.ERROR.INIT);\r\n throw error;\r\n }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(params => this.initializeForm(params));\r\n }\r\n\r\n private setupTabStateSubscription(): void {\r\n this.tabState$.pipe(\r\n distinctUntilChanged((prev, curr) => \r\n prev.activeTab === curr.activeTab && \r\n prev.currentData?.uuid === curr.currentData?.uuid\r\n ),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(state => {\r\n this.updateComponentState(state);\r\n });\r\n }\r\n\r\n private setupRouteParamsSubscription(): void {\r\n this.route.params.pipe(\r\n takeUntil(this.destroyed$)\r\n ).subscribe(params => {\r\n const uuid = params['id'];\r\n if (uuid && this.state.formDataList?.length) {\r\n this.handleTabChange(uuid);\r\n }\r\n });\r\n }\r\n\r\n private handleTabChange(uuid: string): void {\r\n const selectedData = this.findTabData(uuid);\r\n if (selectedData) {\r\n this.tabState$.next({\r\n activeTab: uuid,\r\n currentData: selectedData,\r\n originalData: { ...selectedData }\r\n });\r\n } else {\r\n console.warn(`[BaseListTabbedFormComponent] Tab data not found for uuid: ${uuid}`);\r\n }\r\n }\r\n\r\n private findTabData(uuid: string): T | undefined {\r\n return this.state.formDataList.find(data => data.uuid === uuid);\r\n }\r\n\r\n private updateComponentState(tabState: TabState<T>): void {\r\n this.state = {\r\n ...this.state,\r\n activeTab: tabState.activeTab,\r\n currentData: tabState.currentData,\r\n originalData: tabState.originalData\r\n };\r\n }\r\n\r\n private initializeForm(params: any) {\r\n try {\r\n const routeMode = params[AppConstants.FORM.MODE];\r\n this.initializeFormMode(routeMode);\r\n this.setupFormState();\r\n this.initializeListForm();\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n console.error('Error initializing form:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.INIT}: ${errorMessage}`);\r\n throw error; // Re-throw to trigger error handling in the subscription\r\n }\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n return;\r\n }\r\n\r\n if (!this.isValidPageMode(routeMode)) {\r\n const validModes = Object.values(AppConstants.PAGE_MODE).join(', ');\r\n throw new Error(`Invalid page mode: ${routeMode}. Valid modes are: ${validModes}`);\r\n }\r\n\r\n this.state.mode = routeMode;\r\n }\r\n\r\n private setupFormState() {\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n }\r\n\r\n protected initializeListForm() {\r\n const routerState = this.router.getCurrentNavigation()?.extras?.state || window.history.state;\r\n const formDataList = routerState?.formDataList;\r\n\r\n if (!formDataList?.length) {\r\n throw new Error('formDataList is required in state for LIST type');\r\n }\r\n\r\n this.state.formDataList = [...formDataList]; // Create a new array to avoid reference issues\r\n this.state.tabs = this.createTabsFromFormDataList(this.state.formDataList);\r\n \r\n const firstTab = this.state.tabs[0].value;\r\n const firstItem = this.state.formDataList[0];\r\n\r\n // Initialize tab state\r\n this.tabState$.next({\r\n activeTab: firstTab,\r\n currentData: firstItem,\r\n originalData: { ...firstItem }\r\n });\r\n\r\n // Navigate to the first tab\r\n this.navigateToTab(firstTab);\r\n }\r\n\r\n private createTabsFromFormDataList(formDataList: T[]): TabConfig[] {\r\n return formDataList.map((data: T) => ({\r\n value: data.uuid,\r\n title: this.getTabTitle(data)\r\n }));\r\n }\r\n\r\n protected onTabChange(event: any): void {\r\n const uuid = event?.toString() || '';\r\n console.log('[BaseListTabbedFormComponent] Tab change event:', uuid);\r\n \r\n const selectedData = this.findTabData(uuid);\r\n if (selectedData) {\r\n this.handleTabChange(uuid);\r\n this.navigateToTab(uuid);\r\n } else {\r\n console.warn(`[BaseListTabbedFormComponent] Tab data not found for uuid: ${uuid}`);\r\n }\r\n }\r\n\r\n protected navigateToTab(uuid: string): void {\r\n const selectedData = this.findTabData(uuid);\r\n if (!selectedData) {\r\n console.error(`[BaseListTabbedFormComponent] Cannot navigate: No data found for uuid ${uuid}`);\r\n return;\r\n }\r\n\r\n this.router.navigate([uuid], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData: selectedData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n this.tabState$.complete();\r\n }\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n // Abstract methods that must be implemented by child classes\r\n protected abstract getTabTitle(data: T): string;\r\n}\r\n","import { Component, OnInit, OnDestroy, Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { Observable, Subject, BehaviorSubject, take, map, takeUntil, catchError, finalize, tap, of } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { TabConfig, TabbedFormState } from '../states/tabbed-form.state';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseTabbedFormComponent<T extends BaseModel>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n private readonly stateManager$ = new BehaviorSubject<TabbedFormState<T>>(this.getInitialState());\r\n\r\n private getInitialState(): TabbedFormState<T> {\r\n return {\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.TABBED,\r\n activeTab: '',\r\n tabs: []\r\n };\r\n }\r\n\r\n protected get state(): TabbedFormState<T> {\r\n return this.stateManager$.value;\r\n }\r\n\r\n protected set state(value: TabbedFormState<T>) {\r\n // Only emit if there are actual changes\r\n if (this.hasStateChanged(this.state, value)) {\r\n this.stateManager$.next(value);\r\n }\r\n }\r\n\r\n private hasStateChanged(current: TabbedFormState<T>, next: TabbedFormState<T>): boolean {\r\n // Quick reference check\r\n if (current === next) return false;\r\n\r\n // Check essential properties that affect rendering\r\n return current.loading !== next.loading ||\r\n current.activeTab !== next.activeTab ||\r\n current.hasChanges !== next.hasChanges ||\r\n current.mode !== next.mode ||\r\n current.isNew !== next.isNew ||\r\n !this.areTabsEqual(current.tabs, next.tabs) ||\r\n this.detectChanges(current.currentData, next.currentData);\r\n }\r\n\r\n private areTabsEqual(current: TabConfig[], next: TabConfig[]): boolean {\r\n if (current === next) return true;\r\n if (current.length !== next.length) return false;\r\n return current.every((tab, index) => \r\n tab.value === next[index].value && \r\n tab.isParentModel === next[index].isParentModel\r\n );\r\n }\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFormWithErrorHandling();\r\n this.setupStateSubscription();\r\n }\r\n\r\n private initializeFormWithErrorHandling(): void {\r\n // Initialize tabs first\r\n const tabs = this.getTabs();\r\n this.state = {\r\n ...this.state,\r\n tabs,\r\n activeTab: tabs[0]?.value || ''\r\n };\r\n\r\n // Then initialize form\r\n this.route.queryParams.pipe(\r\n take(1),\r\n tap(() => this.state = { ...this.state, loading: true }),\r\n tap(params => this.initializeForm(params)),\r\n map(() => void 0),\r\n catchError(error => {\r\n console.error('Error initializing form:', error);\r\n this.showError(AppMessages.FORM.ERROR.INIT);\r\n return of(void 0);\r\n }),\r\n finalize(() => this.state = { ...this.state, loading: false }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe();\r\n }\r\n\r\n private setupStateSubscription(): void {\r\n this.stateManager$.pipe(\r\n distinctUntilChanged((prev, curr) => !this.hasStateChanged(prev, curr)),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(state => {\r\n this.handleStateChange(state);\r\n });\r\n }\r\n\r\n private handleStateChange(state: TabbedFormState<T>): void {\r\n // Track significant state changes\r\n const stateUpdates: string[] = [];\r\n\r\n if (state.loading) {\r\n stateUpdates.push('loading');\r\n }\r\n if (state.hasChanges) {\r\n stateUpdates.push('hasChanges');\r\n }\r\n if (state.activeTab) {\r\n stateUpdates.push('activeTab');\r\n }\r\n\r\n if (stateUpdates.length > 0) {\r\n console.log('[BaseTabbedFormComponent] State updated:', {\r\n updates: stateUpdates,\r\n activeTab: state.activeTab,\r\n loading: state.loading,\r\n hasChanges: state.hasChanges\r\n });\r\n }\r\n }\r\n\r\n\r\n private initializeFormData() {\r\n console.log('[BaseTabbedFormComponent] Initializing form data');\r\n console.log('[BaseTabbedFormComponent] Current mode:', this.state.mode);\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n console.log('[BaseTabbedFormComponent] Create mode, using defaults');\r\n this.loadDefaultTab();\r\n return;\r\n }\r\n\r\n const state = {\r\n ...this.router.getCurrentNavigation()?.extras?.state,\r\n ...window.history.state\r\n } as { formData?: T };\r\n\r\n console.log('[BaseTabbedFormComponent] Combined state:', state);\r\n\r\n if (state?.formData) {\r\n console.log('[BaseTabbedFormComponent] Found form data in state:', state.formData);\r\n this.patchFormData(state.formData);\r\n this.loadDefaultTab();\r\n } else {\r\n console.log('[BaseTabbedFormComponent] No form data, loading from UUID');\r\n this.loadFromUuid();\r\n }\r\n }\r\n\r\n private loadFromUuid(): void {\r\n this.route.queryParams.pipe(\r\n take(1),\r\n map((params: { [key: string]: string }) => {\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (!uuid) {\r\n throw new Error(`UUID is required for ${this.state.mode} mode when no formData is provided`);\r\n }\r\n return uuid;\r\n }),\r\n tap(() => this.state = { ...this.state, loading: true }),\r\n tap(uuid => this.loadEntity(uuid)),\r\n catchError(error => {\r\n console.error('Error loading UUID:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.LOAD} UUID`);\r\n return of(void 0);\r\n }),\r\n finalize(() => this.state = { ...this.state, loading: false }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe();\r\n }\r\n\r\n private initializeForm(params: any) {\r\n const routeMode = params[AppConstants.FORM.MODE];\r\n\r\n try {\r\n this.initializeFormMode(routeMode);\r\n this.setupFormState();\r\n this.initializeFormData();\r\n } catch (error) {\r\n console.error('Error initializing form:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.INIT}: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n protected patchFormData(data: T | null) {\r\n if (data) {\r\n this.state.currentData = { ...data };\r\n this.state.originalData = { ...data }; // Create a deep copy to avoid reference issues\r\n this.state.isNew = false;\r\n }\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n return;\r\n }\r\n\r\n // Validate mode more explicitly\r\n if (!this.isValidPageMode(routeMode)) {\r\n const validModes = Object.values(AppConstants.PAGE_MODE).join(', ');\r\n throw new Error(`Invalid page mode: ${routeMode}. Valid modes are: ${validModes}`);\r\n }\r\n\r\n this.state.mode = routeMode;\r\n }\r\n\r\n private setupFormState() {\r\n console.log('[BaseTabbedFormComponent] Setting up form state, mode:', this.state.mode);\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n console.log('[BaseTabbedFormComponent] Create mode setup');\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n }\r\n\r\n protected loadEntity(uuid: string): void {\r\n const entityName = this.getEntityName();\r\n\r\n this.getEntityService().getById(uuid).pipe(\r\n tap(() => this.state = { \r\n ...this.state, \r\n loading: true,\r\n isNew: false \r\n }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe({\r\n next: (data: T) => {\r\n this.state = {\r\n ...this.state,\r\n originalData: data,\r\n currentData: { ...data },\r\n loading: false\r\n };\r\n console.log('[BaseTabbedFormComponent] Data loaded:', { original: data, current: this.state.currentData });\r\n this.loadDefaultTab();\r\n },\r\n error: (error: Error) => {\r\n console.error('[BaseTabbedFormComponent] Error loading entity:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.LOAD} ${entityName}`);\r\n this.state = { ...this.state, loading: false };\r\n }\r\n });\r\n }\r\n\r\n protected findTabByValue(value: string): TabConfig | undefined {\r\n return this.state.tabs.find((tab: TabConfig) => tab.value === value);\r\n }\r\n\r\n protected loadDefaultTab() {\r\n console.log('[BaseTabbedFormComponent] Loading default tab');\r\n const defaultTab = this.state.tabs.find((tab: TabConfig) => tab.isParentModel) || this.state.tabs[0];\r\n\r\n if (!defaultTab) return;\r\n\r\n const formData = this.getTabFormData(defaultTab);\r\n\r\n this.router.navigate([defaultTab.value], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData,\r\n parentFormData: this.state.currentData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n protected getTabFormData(tabConfig: TabConfig): T | null {\r\n if (!tabConfig) return null;\r\n\r\n if (tabConfig.isParentModel) {\r\n return this.state.currentData;\r\n }\r\n\r\n const fieldName = this.utilsService.toCamelCase(tabConfig.value);\r\n const nestedData = (this.state.currentData as Record<string, unknown>)[fieldName];\r\n \r\n if (this.isTabFormData(nestedData)) {\r\n return nestedData;\r\n }\r\n\r\n console.warn(`Invalid tab form data for field: ${fieldName}`, nestedData);\r\n return null;\r\n }\r\n\r\n private isTabFormData(data: unknown): data is T {\r\n return data != null && \r\n typeof data === 'object' && \r\n 'uuid' in data &&\r\n typeof (data as T).uuid === 'string';\r\n }\r\n\r\n protected onTabChange(value: string | number): void {\r\n const tabConfig = this.findTabByValue(value as string);\r\n if (!tabConfig) {\r\n console.warn(`Tab not found: ${value}`);\r\n return;\r\n }\r\n\r\n this.state.activeTab = tabConfig.value;\r\n const formData = this.getTabFormData(tabConfig);\r\n\r\n this.router.navigate([this.state.activeTab], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData: formData,\r\n parentFormData: this.state.currentData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n protected hasFormChanges(currentData: T): boolean {\r\n if (this.state.isNew || !this.state.originalData) {\r\n return true;\r\n }\r\n return this.detectChanges(currentData, this.state.originalData);\r\n }\r\n\r\n private detectChanges(current: T, original: T): boolean {\r\n try {\r\n return JSON.stringify(current) !== JSON.stringify(original);\r\n } catch (error) {\r\n console.error('[BaseTabbedFormComponent] Error comparing objects:', error);\r\n // Fallback to basic comparison if JSON.stringify fails\r\n return Object.keys(current as Record<string, unknown>).some(key => \r\n (current as Record<string, unknown>)[key] !== (original as Record<string, unknown>)[key]\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n this.stateManager$.complete();\r\n }\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n // Abstract methods that must be implemented by child classes\r\n protected abstract getTabs(): TabConfig[];\r\n protected abstract getEntityService(): EntityService<T>;\r\n protected abstract getEntityName(): string;\r\n protected getTabTitle(data: T): string {\r\n throw new Error('Method not implemented.');\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { finalize, debounceTime } from 'rxjs/operators';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { TaskEntityService } from '../services/task-entity-service.interface';\r\nimport { BaseTask } from '../models/base-task.model';\r\n\r\n/**\r\n * Base component for all task dashboard components in the application.\r\n * Provides common functionality for task management operations while\r\n * inheriting table functionality from BaseTableComponent.\r\n */\r\n@Directive()\r\nexport abstract class BaseTaskDashboardComponent<\r\n T extends BaseTask,\r\n S extends string = string,\r\n E extends string = string\r\n> extends BaseTableComponent<T> {\r\n \r\n actionLoading: boolean = false;\r\n protected taskStatuses: any[] = [];\r\n protected taskPriorities: any[] = [];\r\n protected assignedToOptions: any[] = [];\r\n protected dateRange: { start: Date | null; end: Date | null } = {\r\n start: null,\r\n end: null\r\n };\r\n // Removed skipNextLoadData and loadDataSubject\r\n\r\n constructor(\r\n protected entityService: TaskEntityService<T, S, E>,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected confirmationService: ConfirmationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Initialize the component and handle loading state subscription\r\n */\r\n override ngOnInit() {\r\n const loadingObservable = this.getLoadingObservable();\r\n if (loadingObservable) {\r\n this.subscriptions.push(\r\n loadingObservable.subscribe(\r\n isLoading => this.loading = isLoading\r\n )\r\n );\r\n }\r\n this.loadReferenceData();\r\n }\r\n\r\n /**\r\n * Direct loadData call, no debounce or skip logic\r\n */\r\n override loadData(event?: any): void {\r\n super.loadData(event);\r\n }\r\n\r\n /**\r\n * Cleanup resources\r\n */\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n }\r\n\r\n /**\r\n * Load all reference data needed for the task dashboard\r\n */\r\n protected loadReferenceData(): void {\r\n \r\n }\r\n\r\n /**\r\n * Create a new task\r\n */\r\n public onCreate(): void {\r\n this.navigateTo([this.getFormRoute()], { [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.CREATE });\r\n }\r\n\r\n /**\r\n * Navigate to view a task\r\n * @param item The task to view\r\n */\r\n onView(item: T) {\r\n if (!this.validateItemUuid(item, 'view')) return;\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.VIEW, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Navigate to edit a task\r\n * @param item The task to edit\r\n */\r\n onEdit(item: T) {\r\n if (!this.validateItemUuid(item, 'edit')) return;\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.EDIT, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Delete a task with confirmation\r\n * @param item The task to delete\r\n */\r\n onDelete(item: T) {\r\n if (!this.validateItemUuid(item, 'delete')) return;\r\n\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete this ${this.getEntityName()}?`,\r\n header: 'Confirm Deletion',\r\n icon: 'pi pi-exclamation-triangle',\r\n accept: () => {\r\n this.actionLoading = true;\r\n this.entityService.delete(item.uuid)\r\n .pipe(finalize(() => this.actionLoading = false))\r\n .subscribe({\r\n next: () => {\r\n this.showSuccess(`${this.getEntityName()} ${AppMessages.LIST.SUCCESS.DELETE}`);\r\n this.loadData();\r\n },\r\n error: (error: Error) => {\r\n console.error('Delete failed:', error);\r\n this.showError(`${AppMessages.LIST.ERROR.DELETE} ${this.getEntityName()}`);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Navigate to a route with error handling\r\n * @param path The route path\r\n * @param matrixParams Optional matrix parameters\r\n */\r\n protected navigateTo(path: any[], matrixParams?: { [key: string]: any }): void {\r\n this.router.navigate(path, { queryParams: matrixParams })\r\n .catch(error => {\r\n console.error('Navigation error:', error);\r\n this.showError(AppMessages.LIST.ERROR.NAVIGATION);\r\n });\r\n }\r\n\r\n /**\r\n * Validate that an item has a UUID\r\n * @param item The item to validate\r\n * @param action The action being performed\r\n * @returns true if valid, false otherwise\r\n */\r\n protected validateItemUuid(item: T, action: string): boolean {\r\n if (!item?.uuid) {\r\n this.showError(`${AppMessages.LIST.ERROR.INVALID_ID} ${action}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the entity name for display in messages\r\n */\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Get the route to the entity form\r\n */\r\n protected abstract getFormRoute(): string;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { finalize, map, take, debounceTime } from 'rxjs/operators';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { EntityService } from './entity-service.interface';\r\nimport { FormlyConfigService } from './formly-config.service';\r\nimport { NotificationService } from './notification.service';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\nexport class FormService<T extends BaseModel> {\r\n public formState: FormComponentState<T>;\r\n\r\n constructor(\r\n private entityService: EntityService<T>,\r\n private formlyConfigService: FormlyConfigService,\r\n private notificationService: NotificationService,\r\n private entityName: string,\r\n private jsonFields: any,\r\n private dropdownOptions: Record<string, any> = {}\r\n ) {\r\n this.formState = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n };\r\n\r\n // Initialize form with debounced value changes subscription\r\n this.formState.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe(() => this.handleFormChange());\r\n\r\n this.initializeForm();\r\n }\r\n\r\n private handleFormChange(): void {\r\n console.log('[FormService] Form value changed:', this.formState.form.value);\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n console.log('[FormService] Form state updated:', {\r\n currentData,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n private updateState(newState: Partial<FormComponentState<T>>): void {\r\n this.formState = {\r\n ...this.formState,\r\n ...newState\r\n };\r\n }\r\n\r\n private calculateHasChanges(currentData: any): boolean {\r\n if (!this.formState.originalData || this.formState.isNew) {\r\n return true;\r\n }\r\n\r\n return Object.keys(currentData).some(key => {\r\n const current = currentData[key];\r\n const original = (this.formState.originalData as any)[key];\r\n return current !== original;\r\n });\r\n }\r\n\r\n private initializeForm(): void {\r\n console.log('[FormService] Initializing form');\r\n \r\n // Initialize fields\r\n this.formState.fields = this.getFormlyFieldConfig();\r\n \r\n // Reset form and state\r\n this.formState.form.reset();\r\n this.formState.hasChanges = false;\r\n this.formState.currentData = {} as T;\r\n this.formState.originalData = null;\r\n \r\n // Set form mode\r\n if (this.formState.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\r\n } else {\r\n this.formState.form.enable();\r\n }\r\n \r\n console.log('[FormService] Form initialized:', {\r\n mode: this.formState.mode,\r\n fields: this.formState.fields.length,\r\n enabled: this.formState.form.enabled\r\n });\r\n }\r\n\r\n private getFormlyFieldConfig(): FormlyFieldConfig[] {\r\n return this.formlyConfigService.getFormConfig(\r\n this.jsonFields,\r\n this.formState.mode,\r\n this.dropdownOptions\r\n );\r\n }\r\n\r\n public loadData(uuid?: string): Observable<void> {\r\n if (!uuid || this.formState.mode === AppConstants.PAGE_MODE.CREATE) {\r\n return of(void 0);\r\n }\r\n\r\n this.formState.loading = true;\r\n return this.entityService.getById(uuid).pipe(\r\n take(1),\r\n map(data => {\r\n this.updateFormState(data);\r\n }),\r\n finalize(() => this.formState.loading = false)\r\n );\r\n }\r\n\r\n private updateFormState(data: T): void {\r\n console.log('[FormService] Updating form state, received data:', data);\r\n\r\n const form = this.formState.form;\r\n form.reset();\r\n\r\n this.updateState({\r\n form,\r\n currentData: { ...data },\r\n originalData: { ...data },\r\n isNew: false,\r\n loading: false,\r\n hasChanges: false\r\n });\r\n\r\n form.patchValue(data, { emitEvent: true });\r\n \r\n console.log('[FormService] Form state initialized:', {\r\n currentData: this.formState.currentData,\r\n formValue: form.value,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n public submit(): Observable<T> {\r\n if (!this.validateSubmission()) {\r\n return of(null as unknown as T);\r\n }\r\n\r\n this.formState.loading = true;\r\n const operation$ = this.getSubmitOperation();\r\n\r\n return operation$.pipe(\r\n finalize(() => this.formState.loading = false),\r\n map(result => {\r\n this.notificationService.showSuccess(\r\n `${this.entityName} ${AppMessages.FORM.SUCCESS.SAVE}`\r\n );\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n private validateSubmission(): boolean {\r\n console.log('[FormService] Validating submission state:', {\r\n formValid: this.formState.form.valid,\r\n hasChanges: this.formState.hasChanges,\r\n isNew: this.formState.isNew,\r\n currentData: this.formState.currentData,\r\n formValues: this.formState.form.value\r\n });\r\n\r\n if (!this.formState.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n // Force check for changes before submission\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n if (!this.formState.hasChanges && !this.formState.isNew) {\r\n console.log('[FormService] No changes detected during validation');\r\n this.notificationService.showSuccess('No changes to save');\r\n return false;\r\n }\r\n\r\n if (!this.formState.currentData || Object.keys(this.formState.currentData).length === 0) {\r\n this.notificationService.showError('No data to save');\r\n return false;\r\n }\r\n\r\n console.log('[FormService] Submission validation passed');\r\n return true;\r\n }\r\n\r\n private getSubmitOperation(): Observable<T> {\r\n const formData = this.formState.currentData as Omit<T, 'uuid'>;\r\n // Merge form data with original entity to preserve properties not present in the form\r\n const mergedData = { ...this.formState.originalData, ...formData };\r\n return this.formState.isNew\r\n ? this.entityService.create(formData)\r\n : this.entityService.update(this.formState.originalData!.uuid, mergedData);\r\n }\r\n\r\n public setMode(mode: PageMode): void {\r\n this.formState.mode = mode;\r\n if (mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\r\n } else {\r\n this.formState.form.enable();\r\n }\r\n }\r\n\r\n public getState(): FormComponentState<T> {\r\n return this.formState;\r\n }\r\n\r\n public patchValue(value: Partial<T>): void {\r\n console.log('[FormService] Patching value:', {\r\n incoming: value,\r\n current: this.formState.currentData,\r\n form: this.formState.form.value\r\n });\r\n\r\n // Deep copy incoming value\r\n const newValue = JSON.parse(JSON.stringify(value));\r\n\r\n // Update form while triggering change detection\r\n this.formState.form.patchValue(newValue, { emitEvent: true });\r\n\r\n // Force state update\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n console.log('[FormService] After patch:', {\r\n formValue: this.formState.form.value,\r\n currentData: this.formState.currentData,\r\n originalData: this.formState.originalData,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n}\r\n","import { Directive, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, Subject, of } from 'rxjs';\r\nimport { takeUntil, switchMap, map, finalize } from 'rxjs/operators';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormService} from '../services/form.service';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { AppMessages } from '../constants/app.messages';\r\n\r\n/**\r\n * Base component for all task detail components in the application.\r\n * Uses composition with FormService for form functionality.\r\n */\r\n@Directive()\r\nexport abstract class BaseTaskDetailsComponent<T extends BaseModel> \r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n \r\n private readonly destroyed$ = new Subject<void>();\r\n protected formService!: FormService<T>;\r\n protected state!: FormComponentState<T>;\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected formlyConfigService: FormlyConfigService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n protected initializeServices(): Observable<void> {\r\n return of(void 0).pipe(\r\n map(() => {\r\n console.log('[BaseTaskDetailsComponent] Initializing services');\r\n \r\n // Initialize FormService\r\n this.formService = new FormService<T>(\r\n this.getEntityService(),\r\n this.formlyConfigService,\r\n this.notificationService,\r\n this.getEntityName(),\r\n this.getJsonFields(),\r\n this.getDropdownOptions()\r\n );\r\n\r\n // Initialize component state with form service state\r\n const formState = this.formService.getState();\r\n this.state = {\r\n ...formState,\r\n context: ComponentContext.STANDALONE\r\n };\r\n this.loading = this.state.loading;\r\n\r\n console.log('[BaseTaskDetailsComponent] Services initialized');\r\n })\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeServices()\r\n .pipe(\r\n switchMap(() => this.initializeFromRoute()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => console.log('[BaseTaskDetailsComponent] Initialized successfully'),\r\n error: error => this.handleInitError(error)\r\n });\r\n }\r\n\r\n private initializeFromRoute(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n map(params => {\r\n // Handle mode\r\n const mode = params[AppConstants.FORM.MODE];\r\n if (mode) {\r\n this.formService.setMode(mode);\r\n }\r\n\r\n // Handle context from router state\r\n const routerState = window.history.state;\r\n if (routerState?.context) {\r\n this.state.context = routerState.context;\r\n }\r\n\r\n // Load data if UUID provided\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (uuid) {\r\n this.loadData(uuid);\r\n }\r\n\r\n // Always sync state after route initialization\r\n this.syncWithFormService();\r\n })\r\n );\r\n }\r\n\r\n protected loadData(uuid: string): void {\r\n this.state.loading = true;\r\n this.formService.loadData(uuid)\r\n .pipe(\r\n takeUntil(this.destroyed$),\r\n finalize(() => {\r\n this.syncWithFormService();\r\n this.state.loading = false;\r\n })\r\n )\r\n .subscribe({\r\n error: (error) => this.handleLoadError(error)\r\n });\r\n }\r\n\r\n private syncWithFormService(): void {\r\n const formState = this.formService.getState();\r\n const context = this.state?.context || ComponentContext.STANDALONE;\r\n \r\n this.state = {\r\n ...formState,\r\n context\r\n };\r\n \r\n this.loading = formState.loading;\r\n \r\n console.log('[BaseTaskDetailsComponent] State synchronized:', {\r\n hasChanges: this.state.hasChanges,\r\n isNew: this.state.isNew,\r\n mode: this.state.mode\r\n });\r\n }\r\n\r\n protected onSubmit(): void {\r\n this.loading = true;\r\n this.syncWithFormService();\r\n\r\n this.formService.submit()\r\n .pipe(takeUntil(this.destroyed$), finalize(() => { this.loading = false; }))\r\n .subscribe({\r\n next: () => this.navigateAfterSubmit(),\r\n error: (error) => this.handleSubmitError(error)\r\n });\r\n }\r\n\r\n protected navigateAfterSubmit(): void {\r\n if (this.isInContext(ComponentContext.TABBED)) {\r\n return; // Stay on current route when in tab\r\n }\r\n this.router.navigate([`/${this.getEntityName().toLowerCase()}s`]);\r\n }\r\n\r\n private handleInitError(error: any): void {\r\n console.error('Initialization error:', error);\r\n this.notificationService.showError(AppMessages.FORM.ERROR.INIT);\r\n this.state.loading = false;\r\n }\r\n\r\n protected handleLoadError(error: any): void {\r\n console.error('Load error:', error);\r\n this.notificationService.showError(`Failed to load ${this.getEntityName()}`);\r\n }\r\n\r\n protected handleSubmitError(error: any): void {\r\n console.error('Submit error:', error);\r\n const errorMessage = error.error?.message || `Failed to save ${this.getEntityName()}`;\r\n this.showError(errorMessage);\r\n }\r\n\r\n protected isInContext(contextType: ComponentContext): boolean {\r\n return this.state.context === contextType;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n /**\r\n * Get the entity service for CRUD operations\r\n */\r\n protected abstract getEntityService(): EntityService<T>;\r\n\r\n /**\r\n * Get field configuration for the form\r\n */\r\n protected abstract getJsonFields(): any;\r\n\r\n /**\r\n * Get dropdown options for form fields\r\n */\r\n protected abstract getDropdownOptions(): Record<string, any>;\r\n\r\n /**\r\n * Get entity name for messages\r\n */\r\n protected abstract getEntityName(): string;\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { IKeycloakService } from './keycloak.interface';\r\n\r\nexport const KEYCLOAK_SERVICE = new InjectionToken<IKeycloakService>('KEYCLOAK_SERVICE');\r\n","import { Injectable, InjectionToken, inject, signal, Signal } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { MessageService } from 'primeng/api';\r\n\r\nexport interface ErrorState {\r\n type: string;\r\n message: string;\r\n code?: string | number;\r\n [key: string]: any;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BaseErrorService {\r\n private readonly _error = signal<ErrorState | null>(null);\r\n private readonly router = inject(Router);\r\n private readonly messageService = inject(MessageService);\r\n\r\n get error(): Signal<ErrorState | null> {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Handle HTTP and other errors in the application\r\n */\r\n handleError(error: HttpErrorResponse | Error) {\r\n let errorMessage = 'An error occurred';\r\n let errorType = 'unknown';\r\n let statusCode: number | undefined;\r\n \r\n if (error instanceof HttpErrorResponse) {\r\n statusCode = error.status;\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = `Error: ${error.error.message}`;\r\n errorType = 'client';\r\n } else {\r\n // Server-side error\r\n errorType = 'server';\r\n switch (error.status) {\r\n case 0:\r\n errorMessage = 'Unable to connect to the server. Please check your connection.';\r\n errorType = 'connection';\r\n break;\r\n case 401:\r\n errorMessage = 'Unauthorized access';\r\n errorType = 'unauthorized';\r\n this.router.navigate(['/unauthorized']);\r\n break;\r\n case 403:\r\n errorMessage = 'You do not have permission to access this resource.';\r\n errorType = 'forbidden';\r\n this.router.navigate(['/unauthorized']);\r\n break;\r\n case 404:\r\n errorMessage = 'Resource not found';\r\n errorType = 'not-found';\r\n this.router.navigate(['/404']);\r\n break;\r\n case 500:\r\n errorMessage = 'Internal server error. Please try again later.';\r\n errorType = 'server';\r\n break;\r\n default:\r\n errorMessage = error.error?.message || error.message || 'An unexpected error occurred';\r\n }\r\n }\r\n } else {\r\n // Non-HTTP Error\r\n errorMessage = error.message || 'An unexpected error occurred';\r\n errorType = error.name?.toLowerCase() || 'application';\r\n }\r\n\r\n // Update error state\r\n this.setError({\r\n type: errorType,\r\n message: errorMessage,\r\n code: statusCode,\r\n timestamp: new Date().toISOString(),\r\n raw: error\r\n });\r\n\r\n // Show toast message for errors that don't trigger navigation\r\n if (!['unauthorized', 'not-found'].includes(errorType)) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: errorMessage,\r\n life: 5000\r\n });\r\n }\r\n }\r\n\r\n setError(error: ErrorState) {\r\n this._error.set(error);\r\n }\r\n\r\n clearError() {\r\n this._error.set(null);\r\n }\r\n}\r\n\r\nexport const ERROR_SERVICE = new InjectionToken<BaseErrorService>('ERROR_SERVICE', {\r\n providedIn: 'root',\r\n factory: () => inject(BaseErrorService)\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\n\r\nexport const KEYCLOAK_CONFIG = new InjectionToken<KeycloakConfig>('KEYCLOAK_CONFIG');\r\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { ERROR_SERVICE, ErrorState } from '../services/base-error.service';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { IKeycloakService } from './keycloak.interface';\r\nimport Keycloak from 'keycloak-js';\r\n\r\n/** Common types */\r\ntype KeycloakOnLoad = 'check-sso' | 'login-required';\r\n\r\ninterface KeycloakCommon {\r\n token?: string;\r\n realmAccess?: { roles: string[] };\r\n resourceAccess?: { [clientId: string]: { roles: string[] } };\r\n loadUserProfile(): Promise<any>;\r\n updateToken(minValidity: number): Promise<boolean>;\r\n logout(): Promise<void>;\r\n init: Function;\r\n login: Function;\r\n}\r\n\r\ntype KeycloakInstance = KeycloakCommon;\r\n\r\n/** Detect if we're using Keycloak v26+ */\r\nfunction isModernKeycloak(instance: KeycloakInstance): boolean {\r\n return 'init' in instance && !instance.init.toString().includes('redirectUri');\r\n}\r\n\r\n/**\r\n * Service for handling Keycloak authentication and authorization\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakService implements IKeycloakService {\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n\r\n #keycloakInstance = signal<KeycloakInstance | null>(null);\r\n #isAuthenticated = signal<boolean>(false);\r\n #userProfile = signal<any>(null);\r\n\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n\r\n readonly isAuthenticated$ = computed(() => this.#isAuthenticated());\r\n readonly userProfile$ = computed(() => this.#userProfile());\r\n readonly token$ = computed(() => this.#keycloakInstance()?.token);\r\n\r\n get error$() {\r\n return this.errorService.error;\r\n }\r\n\r\n constructor() {\r\n // Error handling is now done through the error service\r\n }\r\n\r\n /**\r\n * Starts logging the user profile every 100 ms to the console for debugging.\r\n * Call this method after initialization to monitor profile changes.\r\n */\r\n // startProfileDebugLogging(): void {\r\n // setInterval(() => {\r\n // console.log('[KeycloakService] Debug profile:', this.#userProfile());\r\n // }, 100);\r\n // }\r\n\r\n /** Check if URL should be excluded from bearer token */\r\n isUrlExcluded(url: string): boolean {\r\n return this.config.options?.excludedUrls?.some(excluded =>\r\n url.startsWith(excluded) || new RegExp(excluded).test(url)\r\n ) ?? false;\r\n }\r\n\r\n /** Initialize Keycloak authentication */\r\n async initialize(): Promise<boolean> {\r\n console.log('[KeycloakService] initialize called');\r\n\r\n const keycloak = new Keycloak({\r\n url: this.config.authServerUrl,\r\n realm: this.config.realm,\r\n clientId: this.config.clientId\r\n });\r\n\r\n let redirectUrl = this.config.options?.loginRedirect || window.location.pathname;\r\n if (!redirectUrl.startsWith('http')) {\r\n redirectUrl = new URL(redirectUrl, window.location.origin).toString();\r\n }\r\n\r\n this.#keycloakInstance.set(keycloak);\r\n\r\n try {\r\n const isModern = isModernKeycloak(keycloak);\r\n const initOptions = {\r\n onLoad: 'login-required' as KeycloakOnLoad,\r\n [isModern ? 'redirect_uri' : 'redirectUri']: redirectUrl\r\n };\r\n\r\n const authenticated = await Promise.race([\r\n keycloak.init(initOptions) as Promise<boolean>,\r\n new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), 2000))\r\n ]) as boolean;\r\n\r\n this.#isAuthenticated.set(authenticated);\r\n this.errorService.clearError(); // Clear any previous errors\r\n\r\n if (authenticated) {\r\n await this.loadUserProfile();\r\n // this.startProfileDebugLogging();\r\n }\r\n\r\n return authenticated;\r\n } catch (error) {\r\n if (error instanceof Error && error.message === 'Connection timeout') {\r\n console.error('[KeycloakService] Failed to connect to Keycloak server');\r\n this.errorService.setError({\r\n type: 'connection',\r\n message: 'Unable to connect to authentication server'\r\n });\r\n } else {\r\n console.error('[KeycloakService] Failed to initialize Keycloak:', error);\r\n this.errorService.setError({\r\n type: 'other',\r\n message: 'Authentication service error'\r\n });\r\n }\r\n this.#keycloakInstance.set(null);\r\n this.#isAuthenticated.set(false);\r\n return false;\r\n }\r\n\r\n }\r\n\r\n /** Clear any Keycloak errors */\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n /** Login with optional redirect URI */\r\n login(options: { redirectUri?: string } = {}): Promise<void> {\r\n console.log('[KeycloakService] login called', options);\r\n const instance = this.#keycloakInstance();\r\n if (!instance) throw new Error('Keycloak not initialized');\r\n\r\n let redirectUrl = options.redirectUri || this.config.options?.loginRedirect || window.location.pathname;\r\n if (!redirectUrl.startsWith('http')) {\r\n redirectUrl = new URL(redirectUrl, window.location.origin).toString();\r\n }\r\n\r\n const isModern = isModernKeycloak(instance);\r\n return instance.login({\r\n [isModern ? 'redirect_uri' : 'redirectUri']: redirectUrl\r\n });\r\n }\r\n\r\n /** Logout the current user */\r\n logout(): Promise<void> {\r\n console.log('[KeycloakService] logout called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance) throw new Error('Keycloak not initialized');\r\n return instance.logout();\r\n }\r\n\r\n /** Get roles for the current user */\r\n getRoles(): string[] {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n return [];\r\n }\r\n\r\n const realmRoles = instance.realmAccess?.roles ?? [];\r\n const resourceAccess = instance.resourceAccess || {};\r\n\r\n const clientRoles = Object.entries(resourceAccess)\r\n .map(([_, access]) => access?.roles || [])\r\n .flat();\r\n\r\n // Combine all roles and remove duplicates\r\n const allRoles = [...new Set([...realmRoles, ...clientRoles])];\r\n\r\n return allRoles;\r\n }\r\n\r\n /** Check if user has a specific role */\r\n hasRole(role: string): boolean {\r\n const result = this.getRoles().includes(role);\r\n // console.log('[KeycloakService] hasRole called', role, 'result:', result);\r\n return result;\r\n }\r\n\r\n /** Get the current access token */\r\n async getToken(): Promise<string | null> {\r\n console.log('[KeycloakService] getToken called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance?.token) return null;\r\n\r\n const validityThreshold = this.config.options?.tokenValidityThreshold ?? 60;\r\n await this.updateToken(validityThreshold);\r\n return instance.token;\r\n }\r\n\r\n /** Update token if it's close to expiring */\r\n private async updateToken(minValidity: number): Promise<boolean> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance?.token) return false;\r\n\r\n try {\r\n return await instance.updateToken(minValidity);\r\n } catch (error) {\r\n this.login(); // Redirect to login if token refresh fails\r\n return false;\r\n }\r\n }\r\n\r\n getCurrentUserId(): string | null {\r\n // Try user profile first\r\n const profile = this.#userProfile();\r\n if (profile && profile.id) {\r\n console.log('[KeycloakService] getCurrentUserId (profile):', profile.id);\r\n return profile.id;\r\n }\r\n // Fallback to token\r\n const token = this.token$();\r\n if (token) {\r\n try {\r\n const tokenData = JSON.parse(atob(token.split('.')[1]));\r\n console.log('[KeycloakService] getCurrentUserId (token):', tokenData.sub);\r\n return tokenData.sub;\r\n } catch (e) {\r\n console.error('[KeycloakService] Error parsing token:', e);\r\n }\r\n }\r\n\r\n // Log warning if both methods failed\r\n console.warn('[KeycloakService] Could not determine user ID - both profile and token are unavailable');\r\n return null;\r\n }\r\n\r\n getCurrentUsername(): string | null {\r\n // Try user profile first\r\n const profile = this.#userProfile();\r\n if (profile && profile.username) {\r\n return profile.username;\r\n }\r\n // Fallback to token\r\n const token = this.token$();\r\n if (token) {\r\n try {\r\n const tokenData = JSON.parse(atob(token.split('.')[1]));\r\n return tokenData.preferred_username;\r\n } catch (e) {\r\n console.error('[KeycloakService] Error parsing token:', e);\r\n }\r\n }\r\n\r\n // Log warning if both methods failed\r\n console.warn('[KeycloakService] Could not determine username - both profile and token are unavailable');\r\n return null;\r\n }\r\n\r\n getCurrentUserFullName(): string | null {\r\n const profile = this.#userProfile();\r\n if (profile && (profile.firstName || profile.lastName)) {\r\n const fullName = [profile.firstName, profile.lastName].filter(Boolean).join(' ');\r\n // console.log('[KeycloakService] getCurrentUserFullName (profile):', fullName);\r\n return fullName;\r\n }\r\n\r\n // If no full name in profile, try to use username as fallback\r\n const username = this.getCurrentUsername();\r\n if (username) {\r\n // console.log('[KeycloakService] getCurrentUserFullName (fallback to username):', username);\r\n return username;\r\n }\r\n\r\n console.warn('[KeycloakService] Could not determine user full name - no profile data available');\r\n return null;\r\n }\r\n\r\n private async loadUserProfile(): Promise<void> {\r\n console.log('[KeycloakService] loadUserProfile called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n console.warn('[KeycloakService] Cannot load user profile - Keycloak instance is null');\r\n return;\r\n }\r\n\r\n try {\r\n const profile = await instance.loadUserProfile();\r\n this.#userProfile.set(profile);\r\n console.log('[KeycloakService] loadUserProfile result:', profile);\r\n } catch (error) {\r\n console.error('[KeycloakService] Failed to load user profile:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Check the current authentication state and return diagnostic information\r\n * Useful for debugging authentication issues\r\n */\r\n getAuthenticationState(): { authenticated: boolean; hasProfile: boolean; hasToken: boolean } {\r\n const authenticated = this.#isAuthenticated();\r\n const profile = this.#userProfile();\r\n const token = this.token$();\r\n\r\n const state = {\r\n authenticated,\r\n hasProfile: !!profile,\r\n hasToken: !!token\r\n };\r\n\r\n console.log('[KeycloakService] Authentication state:', state);\r\n return state;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { Observable, map } from 'rxjs';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { ERROR_SERVICE } from '../services/base-error.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakAuthGuard {\r\n private readonly keycloakService = inject(KeycloakService);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n private readonly router = inject(Router);\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n console.log('[KeycloakAuthGuard] canActivate called for route:', route.url.join('/'));\r\n return new Observable<boolean | UrlTree>(subscriber => {\r\n const authenticated = this.keycloakService.isAuthenticated$();\r\n subscriber.next(this.processAuthentication(authenticated, route, state));\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n private processAuthentication(\r\n authenticated: boolean, \r\n route: ActivatedRouteSnapshot, \r\n state: RouterStateSnapshot\r\n ): boolean | UrlTree {\r\n console.log('[KeycloakAuthGuard] Processing authentication, authenticated:', authenticated);\r\n \r\n // Check for connection errors before attempting login\r\n if (!authenticated && this.errorService.error()?.type === 'connection') {\r\n console.log('[KeycloakAuthGuard] Keycloak connection error, redirecting to error page');\r\n return this.router.createUrlTree(['/keycloak-error']);\r\n }\r\n\r\n if (!authenticated) {\r\n const redirectUri = window.location.origin + state.url;\r\n try {\r\n this.keycloakService.login({ redirectUri });\r\n } catch (error) {\r\n console.error('[KeycloakAuthGuard] Login failed:', error);\r\n return this.router.createUrlTree(['/keycloak-error']);\r\n }\r\n return false;\r\n }\r\n\r\n // Check for route-specific roles first, then fallback to default roles\r\n const routeRoles = route.data['roles'] as string[] | undefined;\r\n const defaultRoles = this.config.options?.roles;\r\n const requiredRoles = routeRoles || defaultRoles;\r\n\r\n console.log('[KeycloakAuthGuard] Required roles:', requiredRoles);\r\n if (requiredRoles?.length && !this.hasRequiredRoles(requiredRoles)) {\r\n console.log('[KeycloakAuthGuard] User lacks required roles, redirecting to unauthorized');\r\n return this.router.createUrlTree(['/unauthorized']);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private hasRequiredRoles(roles: string[]): boolean {\r\n const hasRoles = roles.some(role => this.keycloakService.hasRole(role));\r\n console.log('[KeycloakAuthGuard] Checking required roles:', roles);\r\n console.log('[KeycloakAuthGuard] User has required roles:', hasRoles);\r\n return hasRoles;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, catchError, from, mergeMap, throwError } from 'rxjs';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\n\r\n@Injectable()\r\nexport class KeycloakAuthInterceptor implements HttpInterceptor {\r\n private readonly keycloakService = inject(KeycloakService);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (!this.config.options?.bearerToken || this.keycloakService.isUrlExcluded(req.url)) {\r\n return next.handle(req);\r\n }\r\n\r\n return from(this.keycloakService.getToken()).pipe(\r\n mergeMap(token => {\r\n if (!token) return next.handle(req);\r\n\r\n const authReq = req.clone({\r\n headers: req.headers.set('Authorization', `Bearer ${token}`)\r\n });\r\n return next.handle(authReq);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n if (error.status === 401 || error.status === 403) {\r\n this.keycloakService.login();\r\n }\r\n return throwError(() => error);\r\n })\r\n );\r\n }\r\n}\r\n","import { APP_INITIALIZER, importProvidersFrom } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { KeycloakAuthInterceptor } from './keycloak.interceptor';\r\n\r\n/**\r\n * Provides Keycloak authentication and authorization services\r\n * @param config Keycloak configuration\r\n * @returns Array of providers for Keycloak integration\r\n */\r\nexport function provideKeycloak(config: KeycloakConfig) {\r\n return [\r\n importProvidersFrom(HttpClientModule),\r\n { provide: KEYCLOAK_CONFIG, useValue: config },\r\n KeycloakService,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (keycloak: KeycloakService) => () => keycloak.initialize(),\r\n multi: true,\r\n deps: [KeycloakService]\r\n },\r\n // Only provide the interceptor if bearer token is enabled\r\n ...(config.options?.bearerToken ? [{\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: KeycloakAuthInterceptor,\r\n multi: true\r\n }] : [])\r\n ];\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { UtilsService } from './utils.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { EntityService } from './entity-service.interface';\r\nimport { ReferenceDto } from '../models/reference-dto.interface';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\nexport abstract class BaseEntityService<T extends BaseModel> implements EntityService<T> {\r\n // Use the loading state from HttpUtilityService\r\n get loading$() {\r\n return this.httpUtility.loading$;\r\n }\r\n\r\n protected apiUrl: string;\r\n\r\n /**\r\n * Creates an instance of BaseCrudService.\r\n * @param httpUtility - Service for making HTTP requests\r\n * @param utilsService - Utility service for common operations\r\n * @param resourcePath - API resource path (e.g., 'customers', 'products')\r\n * @param backendBaseUrl - Base URL for the backend API\r\n * @param messageService - Optional service for showing messages\r\n */\r\n protected constructor(\r\n protected httpUtility: HttpUtilityService,\r\n protected utilsService: UtilsService,\r\n protected resourcePath: string,\r\n protected backendBaseUrl: string,\r\n protected messageService: MessageService | undefined\r\n ) {\r\n this.apiUrl = this.joinUrls(backendBaseUrl, resourcePath);\r\n }\r\n\r\n /**\r\n * Find entities by createdBy with pagination using PageRequest and filters.\r\n * POST /page with { ...pageRequest, filters: [{ field: 'createdBy', value: createdBy }] }\r\n */\r\n findByCreatedBy(createdBy: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, {\r\n ...request,\r\n filters: [{ field: 'createdBy', value: createdBy }]\r\n });\r\n }\r\n\r\n /**\r\n * Get all entities with pagination.\r\n * POST /page with pageRequest\r\n */\r\n public getAll(pageRequest?: PageRequest): Observable<Page<T>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, request);\r\n }\r\n\r\n /**\r\n * Joins URL parts ensuring no double slashes\r\n */\r\n private joinUrls(...parts: string[]): string {\r\n return parts.map(part => part.replace(/^\\/+|\\/+$/g, '')).join('/');\r\n }\r\n\r\n\r\n getById(uuid: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.get<T>(`${this.apiUrl}/${uuid}`);\r\n }\r\n\r\n create(entity: Omit<T, 'uuid'>): Observable<T> {\r\n return this.httpUtility.post<T>(this.apiUrl, entity);\r\n }\r\n\r\n update(uuid: string, entity: Omit<T, 'uuid'>): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.put<T>(`${this.apiUrl}/${uuid}`, entity);\r\n }\r\n\r\n delete(uuid: string): Observable<void> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.delete<void>(`${this.apiUrl}/${uuid}`);\r\n }\r\n\r\n /**\r\n * Get all entities without pagination.\r\n * GET /\r\n */\r\n findAll(): Observable<T[]> {\r\n return this.httpUtility.get<T[]>(this.apiUrl);\r\n }\r\n\r\n /**\r\n * Get detailed entity information by UUID.\r\n * GET /{uuid}/detailed\r\n */\r\n findDetailedByUuid(uuid: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.get<T>(`${this.apiUrl}/${uuid}/detailed`);\r\n }\r\n\r\n /**\r\n * Partially update an entity with the specified field values.\r\n * PATCH /{uuid}\r\n */\r\n patch(uuid: string, updates: Partial<T>): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.patch<T>(`${this.apiUrl}/${uuid}`, updates);\r\n }\r\n\r\n /**\r\n * Get all entities as reference data.\r\n * GET /reference\r\n */\r\n findAllReference(): Observable<ReferenceDto[]> {\r\n return this.httpUtility.get<ReferenceDto[]>(`${this.apiUrl}/reference`);\r\n }\r\n\r\n /**\r\n * Get paginated reference data.\r\n * POST /reference/page\r\n */\r\n findAllReferencePaginated(pageRequest?: PageRequest): Observable<Page<ReferenceDto>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<ReferenceDto>>(`${this.apiUrl}/reference/page`, request);\r\n }\r\n \r\n\r\n /**\r\n * Get all entities with filters (non-paginated).\r\n * GET /search?field=value&...\r\n */\r\n public findAllWithFilters(filters: Record<string, string>): Observable<T[]> {\r\n const params = new HttpParams({ fromObject: filters });\r\n return this.httpUtility.get<T[]>(`${this.apiUrl}/search`, { params });\r\n }\r\n\r\n /**\r\n * Get a single entity by filters (non-paginated).\r\n * GET /search-one?field=value&...\r\n */\r\n public findOneWithFilters(filters: Record<string, string>): Observable<T | null> {\r\n const params = new HttpParams({ fromObject: filters });\r\n return this.httpUtility.get<T>(`${this.apiUrl}/search-one`, { params });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse, HttpEvent } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject, finalize, forkJoin } from 'rxjs';\r\nimport { catchError, retry, timeout } from 'rxjs/operators';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * A general-purpose HTTP utility service that provides enhanced HTTP operations\r\n * beyond the standard Angular HttpClient. This service includes features such as:\r\n * - Loading state management\r\n * - Standardized error handling\r\n * - Request timeouts and retries\r\n * - File upload capabilities\r\n * - Batch request handling\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpUtilityService {\r\n private loading = new BehaviorSubject<boolean>(false);\r\n loading$ = this.loading.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private messageService?: MessageService\r\n ) {}\r\n\r\n /**\r\n * Perform a GET request with enhanced options\r\n * @param url The endpoint URL\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n get<T>(url: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.get<T>(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n\r\n /**\r\n * Perform a POST request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n post<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.post<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n\r\n /**\r\n * Perform a PUT request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n put<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.put<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n\r\n /**\r\n * Perform a PATCH request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n patch<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.patch<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n\r\n /**\r\n * Perform a DELETE request with enhanced options\r\n * @param url The endpoint URL\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n delete<T>(url: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.delete<T>(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n \r\n /**\r\n * Upload a file with optional additional data\r\n * @param url The upload endpoint URL\r\n * @param file The file to upload\r\n * @param additionalData Additional form data to include\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n uploadFile<T>(url: string, file: File, additionalData?: Record<string, any>, options?: {\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number,\r\n onProgress?: (percentage: number) => void\r\n }): Observable<T> {\r\n this.loading.next(true);\r\n \r\n const formData = new FormData();\r\n formData.append('file', file, file.name);\r\n \r\n if (additionalData) {\r\n Object.keys(additionalData).forEach(key => {\r\n formData.append(key, additionalData[key]);\r\n });\r\n }\r\n \r\n let httpOptions: any = {\r\n headers: options?.headers,\r\n withCredentials: options?.withCredentials\r\n };\r\n \r\n // If progress tracking is requested\r\n if (options?.onProgress) {\r\n httpOptions.reportProgress = true;\r\n httpOptions.observe = 'events';\r\n }\r\n \r\n // Create the request\r\n let request$ = this.http.post<any>(url, formData, httpOptions);\r\n \r\n // Add retries if specified\r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n // Add timeout if specified\r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n // Track progress if a callback is provided\r\n if (options?.onProgress) {\r\n return new Observable<T>(observer => {\r\n request$.subscribe({\r\n next: (event: HttpEvent<any>) => {\r\n if (event.type === 1 && event.total) { // HttpEventType.UploadProgress\r\n const percentDone = Math.round(100 * event.loaded / event.total);\r\n options.onProgress!(percentDone);\r\n } else if (event.type === 4) { // HttpEventType.Response\r\n observer.next(event.body);\r\n observer.complete();\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(this.handleError(error));\r\n this.loading.next(false);\r\n },\r\n complete: () => {\r\n this.loading.next(false);\r\n }\r\n });\r\n });\r\n }\r\n \r\n // Standard request without progress tracking\r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n ) as Observable<T>;\r\n }\r\n\r\n /**\r\n * Execute multiple HTTP requests in parallel\r\n * @param requests Array of HTTP request observables\r\n * @returns An observable that emits when all requests complete\r\n */\r\n batchRequests<T>(requests: Observable<T>[]): Observable<T[]> {\r\n this.loading.next(true);\r\n return forkJoin(requests).pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n \r\n /**\r\n * Download a file from the server\r\n * @param url The file URL\r\n * @param filename Optional filename to save as\r\n * @param options Additional request options\r\n */\r\n downloadFile(url: string, filename?: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n withCredentials?: boolean,\r\n timeoutMs?: number\r\n }): Observable<Blob> {\r\n this.loading.next(true);\r\n \r\n let request$ = this.http.get(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: 'blob',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.loading.next(false))\r\n );\r\n }\r\n\r\n /**\r\n * Create parameter string from an object\r\n * @param params Object containing parameters\r\n * @returns HttpParams object\r\n */\r\n createParams(params: Record<string, any>): HttpParams {\r\n let httpParams = new HttpParams();\r\n \r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n if (value !== undefined && value !== null) {\r\n httpParams = httpParams.append(key, value.toString());\r\n }\r\n });\r\n \r\n return httpParams;\r\n }\r\n\r\n /**\r\n * Standardized error handler for HTTP requests\r\n * @param error The HTTP error\r\n * @returns An observable that errors with the processed error object\r\n */\r\n private handleError(error: HttpErrorResponse) {\r\n console.error('An HTTP error occurred:', error);\r\n \r\n let errorMessage = 'An error occurred';\r\n let errorCode: string | undefined;\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Server-side error\r\n errorCode = error.status.toString();\r\n \r\n switch (error.status) {\r\n case 400:\r\n errorMessage = error.error?.message || 'Bad request';\r\n break;\r\n case 401:\r\n errorMessage = 'Unauthorized';\r\n break;\r\n case 403:\r\n errorMessage = 'Access denied';\r\n break;\r\n case 404:\r\n errorMessage = 'Resource not found';\r\n break;\r\n case 408:\r\n errorMessage = 'Request timeout';\r\n break;\r\n case 500:\r\n errorMessage = 'Server error';\r\n break;\r\n case 503:\r\n errorMessage = 'Service unavailable';\r\n break;\r\n default:\r\n errorMessage = error.error?.message || `Error ${error.status}`;\r\n break;\r\n }\r\n }\r\n\r\n this.showError(errorMessage);\r\n return throwError(() => ({\r\n error,\r\n message: errorMessage,\r\n code: errorCode\r\n }));\r\n }\r\n\r\n /**\r\n * Display an error message using the message service\r\n * @param message Error message to display\r\n */\r\n private showError(message: string) {\r\n if (this.messageService) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { UtilsService } from './utils.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { BaseEntityService } from './base-entity.service';\r\nimport { KeycloakService } from '../keycloak/keycloak.service';\r\nimport { BaseTask } from '../models/base-task.model';\r\nimport { TaskEntityService } from './task-entity-service.interface';\r\n\r\n/**\r\n * Base service for task-related operations that extends the BaseCrudService.\r\n * Implements endpoints defined in Java BaseTaskController.\r\n */\r\n@Injectable()\r\nexport abstract class BaseTaskService<\r\n T extends BaseTask,\r\n AU = any,\r\n S extends string = string,\r\n E extends string = string\r\n> extends BaseEntityService<T> implements TaskEntityService<T, S, E> {\r\n constructor(\r\n protected override httpUtility: HttpUtilityService,\r\n protected override utilsService: UtilsService,\r\n protected override resourcePath: string,\r\n protected override backendBaseUrl: string,\r\n protected override messageService: MessageService | undefined,\r\n public readonly keycloakService: KeycloakService\r\n ) {\r\n super(httpUtility, utilsService, resourcePath, backendBaseUrl, messageService);\r\n }\r\n\r\n\r\n /**\r\n * Send an event for a task\r\n * Maps to PUT /{uuid}/event/{event} endpoint\r\n * For ASSIGN events, userId and department are required\r\n */\r\n sendEvent(uuid: string, event: E, userId?: string, department?: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n throw new Error('Invalid UUID format');\r\n }\r\n\r\n let params = new HttpParams();\r\n if (userId) {\r\n params = params.set('userId', userId);\r\n }\r\n if (department) {\r\n params = params.set('department', department);\r\n }\r\n\r\n return this.httpUtility.put<T>(\r\n `${this.apiUrl}/${uuid}/event/${event}`,\r\n null,\r\n { params }\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Calls POST /current-assignees-in endpoint to fetch tasks by assignees with pagination.\r\n */\r\n getByCurrentAssigneesIn(assigneeIds: string[], pageable: any = { page: 0, size: 10 }): Observable<Page<T>> {\r\n let params = new HttpParams();\r\n assigneeIds.forEach(id => {\r\n params = params.append('assignees', id);\r\n });\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/current-assignees-in`, pageable, { params });\r\n }\r\n\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReferenceDataProviderService {\r\n\r\n private endpoints: Record<string, string> = {};\r\n\r\n // Method to set/update endpoints\r\n setEndpoints(endpoints: Record<string, string>) {\r\n this.endpoints = { ...this.endpoints, ...endpoints };\r\n }\r\n\r\n getReferenceEndpoint(entityName: string): string | null {\r\n console.log('getReferenceEndpoint', entityName, this.endpoints);\r\n let endpoint = this.endpoints[entityName];\r\n if (endpoint != null && endpoint.length > 0) {\r\n if (endpoint.startsWith('http://') || endpoint.startsWith('https://')) {\r\n return endpoint; // Absolute URL\r\n } else {\r\n // Relative URL, assume it's within the application's base context\r\n return endpoint;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { ReferenceDataProviderService } from './reference-data-provider.service';\r\nimport { ReferenceDto } from '../models/reference-dto.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityRegistryService {\r\n constructor(\r\n private httpUtility: HttpUtilityService,\r\n private dataProvider: ReferenceDataProviderService\r\n ) {}\r\n\r\n /**\r\n * Gets reference options for an entity, suitable for select/dropdown components\r\n * @param entityName The name of the entity (e.g., 'customers', 'departments')\r\n * @returns Observable of options array with label/value pairs\r\n */\r\n getEntityOptions(entityName: string): Observable<{ label: string; value: string; data?: any; }[]> {\r\n console.log('getEntityOptions', entityName);\r\n const url = this.dataProvider.getReferenceEndpoint(entityName);\r\n\r\n if (!url) {\r\n console.warn(`No endpoint configured for entity: ${entityName}`);\r\n return new Observable(subscriber => {\r\n subscriber.next([]);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n return this.httpUtility.get<ReferenceDto[]>(url, {\r\n retries: 1,\r\n timeoutMs: 10000,\r\n }).pipe(\r\n map((items) =>\r\n items?.map((item) => ({\r\n label: item.displayLabel,\r\n value: item.key,\r\n data: item.data,\r\n })) || []\r\n )\r\n );\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\ntype DateFormat = 'default' | 'short' | 'medium';\r\n\r\n@Pipe({\r\n name: 'indianDate',\r\n standalone: true\r\n})\r\nexport class IndianDatePipe implements PipeTransform {\r\n constructor(private datePipe: DatePipe) {}\r\n\r\n transform(value: string | null, format: DateFormat = 'default'): string | null {\r\n if (!value) return null;\r\n\r\n // First validate dd-MM-yyyy format\r\n const dateRegex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\\d{4}$/;\r\n if (!dateRegex.test(value)) {\r\n throw new Error(`Invalid date format: ${value}. Expected format: dd-MM-yyyy`);\r\n }\r\n\r\n // Validate real date\r\n const [day, month, year] = value.split('-').map(Number);\r\n const date = new Date(year, month - 1, day);\r\n if (\r\n date.getFullYear() !== year ||\r\n date.getMonth() !== month - 1 ||\r\n date.getDate() !== day\r\n ) {\r\n throw new Error(`Invalid date: ${value}`);\r\n }\r\n\r\n // Apply requested format\r\n switch (format) {\r\n case 'short':\r\n // Pad with leading zeros for consistent format\r\n const paddedDay = day.toString().padStart(2, '0');\r\n const paddedMonth = month.toString().padStart(2, '0');\r\n return `${paddedDay}-${paddedMonth}-${year}`; // 10-03-2025\r\n case 'medium':\r\n return this.datePipe.transform(date, 'dd MMM yyyy'); // 10 Jan 2019\r\n default:\r\n return value; // original dd-MM-yyyy\r\n }\r\n }\r\n}\r\n","// TypeScript model for BaseTaskDto\r\n\r\nimport { Workflow } from './workflow.model';\r\nimport { BaseComment } from './base.comment.model';\r\n\r\nexport interface BaseTask<S = string, C = BaseComment> extends Workflow<S, C> {\r\n title: string;\r\n description: string;\r\n type: string;\r\n category: string;\r\n priority: string;\r\n assignedUser: string;\r\n assignedDepartment: string;\r\n product: string;\r\n subProduct: string;\r\n business: string;\r\n}\r\n","// TypeScript model for BaseCommentDto\r\n\r\nexport interface BaseComment {\r\n comment: string;\r\n createdBy: string;\r\n createdAt: Date;\r\n}\r\n","export enum TabbedFormType {\r\n STANDARD = 'STANDARD',\r\n LIST = 'LIST'\r\n}\r\n","/**\r\n * Standard task roles that define user permissions within a task workflow.\r\n * These roles control what operations a user can perform on tasks.\r\n */\r\nexport enum TaskRole {\r\n /**\r\n * Can create new tasks. This could be a user initiating a task manually\r\n * or a system process creating tasks automatically.\r\n */\r\n TASK_CREATOR = 'TASK_CREATOR',\r\n\r\n /**\r\n * Can assign or reassign tasks to other users. Typically used by\r\n * team leads or workflow managers to distribute work.\r\n */\r\n TASK_ASSIGNER = 'TASK_ASSIGNER',\r\n\r\n /**\r\n * Can pick tasks for self-assignment from a task pool.\r\n * Useful in scenarios where tasks can be claimed by available workers.\r\n */\r\n TASK_PICKER = 'TASK_PICKER',\r\n\r\n /**\r\n * Can review and approve completed tasks. This role is responsible for\r\n * quality assurance or approval steps in the workflow.\r\n */\r\n TASK_REVIEWER = 'TASK_REVIEWER',\r\n\r\n /**\r\n * Can view task details but cannot modify them. Useful for stakeholders\r\n * who need to monitor task progress without making changes.\r\n */\r\n TASK_VIEWER = 'TASK_VIEWER',\r\n\r\n /**\r\n * Has full administrative control over tasks. Can override or force\r\n * state changes, bypass normal workflow restrictions, and manage\r\n * task configuration.\r\n */\r\n TASK_ADMIN = 'TASK_ADMIN'\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\n// Define the allowed text transformations\r\nexport type TextTransform = 'uppercase' | 'lowercase' | 'capitalize' | 'none';\r\n\r\n@Component({\r\n selector: 'formly-field-text-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n InputTextModule\r\n ],\r\n template: `\r\n <input pInputText\r\n [type]=\"props['type'] || 'text'\"\r\n [formControl]=\"$any(formControl)\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [formlyAttributes]=\"field\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [attr.aria-label]=\"props['label'] || props['placeholder'] || ''\"\r\n [class.ng-invalid]=\"showError\"\r\n [class.ng-dirty]=\"showError\"\r\n [class.p-invalid]=\"showError\"\r\n [style.text-transform]=\"textTransformStyle\"\r\n (input)=\"onInputChange($event)\"\r\n class=\"w-full\"/>\r\n `\r\n})\r\nexport class TextInputType extends FieldType implements OnInit {\r\n override defaultOptions = {\r\n props: {\r\n type: 'text',\r\n placeholder: '',\r\n textTransform: 'none' as TextTransform\r\n }\r\n };\r\n \r\n ngOnInit() {\r\n // Subscribe to value changes to apply transformations\r\n if (this.shouldTransformText) {\r\n this.formControl?.valueChanges.subscribe(value => {\r\n if (value && typeof value === 'string') {\r\n const transformedValue = this.transformText(value);\r\n if (value !== transformedValue) {\r\n this.formControl?.setValue(transformedValue, { emitEvent: false });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n onInputChange(event: Event) {\r\n if (!this.shouldTransformText) return;\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value;\r\n const transformedValue = this.transformText(value);\r\n \r\n // Only update if it's actually different to avoid cursor position issues\r\n if (value !== transformedValue) {\r\n // Preserve cursor position\r\n const start = input.selectionStart || 0;\r\n const end = input.selectionEnd || 0;\r\n \r\n // Set the transformed value\r\n this.formControl?.setValue(transformedValue);\r\n \r\n // Try to restore cursor position (may not work perfectly for all transformations)\r\n setTimeout(() => {\r\n input.setSelectionRange(start, end);\r\n }, 0);\r\n }\r\n }\r\n \r\n get textTransformStyle(): string {\r\n return this.props['textTransform'] as string || 'none';\r\n }\r\n \r\n get shouldTransformText(): boolean {\r\n return this.props['textTransform'] !== 'none';\r\n }\r\n \r\n transformText(value: string): string {\r\n switch (this.props['textTransform']) {\r\n case 'uppercase':\r\n return value.toUpperCase();\r\n case 'lowercase':\r\n return value.toLowerCase();\r\n case 'capitalize':\r\n return value.replace(/\\b\\w/g, char => char.toUpperCase());\r\n default:\r\n return value;\r\n }\r\n }\r\n \r\n override get showError(): boolean {\r\n if (!this.formControl) {\r\n return false;\r\n }\r\n \r\n const { touched, dirty, invalid } = this.formControl;\r\n return invalid && (touched || dirty);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { Observable, of, isObservable } from 'rxjs';\r\n\r\ninterface SelectOption {\r\n value: any;\r\n label: string;\r\n [key: string]: any; // For additional properties\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n SelectModule\r\n ],\r\n template: `\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <p-select\r\n [formControl]=\"$any(formControl)\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [formlyAttributes]=\"field\"\r\n [options]=\"options\"\r\n [virtualScroll]=\"false\"\r\n [showClear]=\"!props['readonly']\"\r\n [editable]=\"!props['readonly']\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\r\n [filter]=\"!props['readonly']\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </ng-container>\r\n `\r\n})\r\nexport class SelectType extends FieldType {\r\n get options$(): Observable<SelectOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: [],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Select',\r\n showClear: false,\r\n filter: false,\r\n virtualScroll: false\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FieldType } from '@ngx-formly/core';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { Observable, isObservable, of } from 'rxjs';\r\n\r\ninterface RadioOption {\r\n value: any;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-radio',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n RadioButtonModule\r\n ],\r\n template: `\r\n <div class=\"flex flex-column gap-1\">\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <div *ngFor=\"let option of options; let i = index\" class=\"flex align-items-center gap-2\">\r\n <p-radioButton\r\n [name]=\"field.name || ''\"\r\n [value]=\"option.value\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [size]=\"'small'\"\r\n [inputId]=\"field.key + '_' + i\">\r\n </p-radioButton>\r\n <label [for]=\"field.key + '_' + i\" class=\"p-radio-label cursor-pointer\">\r\n {{option.label}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `\r\n})\r\nexport class RadioType extends FieldType {\r\n get options$(): Observable<RadioOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: []\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\n\r\n@Component({\r\n selector: 'formly-field-numeric-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n InputNumberModule\r\n ],\r\n template: `\r\n <p-inputNumber\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [min]=\"props['min'] || 0\"\r\n [max]=\"props['max']\"\r\n [minFractionDigits]=\"props['minFractionDigits'] || 0\"\r\n [maxFractionDigits]=\"props['maxFractionDigits'] || 0\"\r\n [prefix]=\"props['prefix'] || ''\"\r\n [suffix]=\"props['suffix'] || ''\"\r\n [useGrouping]=\"props['useGrouping'] ?? true\"\r\n [showButtons]=\"true\"\r\n class=\"w-full\">\r\n </p-inputNumber>\r\n `\r\n})\r\nexport class NumericInputType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n min: undefined,\r\n max: undefined,\r\n minFractionDigits: 0,\r\n maxFractionDigits: 0,\r\n prefix: '',\r\n suffix: '',\r\n useGrouping: true\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { Observable, isObservable, of } from 'rxjs';\r\n\r\ninterface SelectOption {\r\n value: any;\r\n label: string;\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-multiselect',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MultiSelectModule\r\n ],\r\n template: `\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <p-multiSelect\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [options]=\"options\"\r\n [optionLabel]=\"props['optionLabel'] || 'label'\"\r\n [optionValue]=\"props['optionValue'] || 'value'\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\r\n [filter]=\"props['filter'] || true\"\r\n [filterBy]=\"props['filterBy'] || 'label'\"\r\n [maxSelectedLabels]=\"props['maxSelectedLabels'] || 2\"\r\n [showToggleAll]=\"props['showToggleAll'] || true\"\r\n [virtualScroll]=\"props['virtualScroll'] || false\"\r\n [display]=\"props['display'] || 'chip'\"\r\n styleClass=\"w-full\">\r\n </p-multiSelect>\r\n </ng-container>\r\n `\r\n})\r\nexport class MultiselectType extends FieldType {\r\n get options$(): Observable<SelectOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: [] as SelectOption[],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Select',\r\n filter: false,\r\n maxSelectedLabels: 3,\r\n showToggleAll: true,\r\n virtualScroll: false\r\n }\r\n };\r\n}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { formatDate } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'formly-field-date',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n DatePickerModule\r\n ],\r\n template: `\r\n <p-datepicker\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [showIcon]=\"true\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [dateFormat]=\"props['dateFormat'] || 'dd-mm-yy'\"\r\n [showTime]=\"props['showTime'] || false\"\r\n [touchUI]=\"props['touchUI'] || false\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [minDate]=\"props['minDate']\"\r\n [maxDate]=\"props['maxDate']\"\r\n [showOnFocus]=\"false\"\r\n [todayButtonStyleClass]=\"'p-button-secondary'\"\r\n [clearButtonStyleClass]=\"'p-button-secondary'\"\r\n styleClass=\"w-full\"\r\n (onSelect)=\"onDateSelect($event)\"\r\n (onInput)=\"onDateInput($event)\">\r\n </p-datepicker>\r\n `\r\n})\r\nexport class DateType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n dateFormat: 'dd-mm-yy',\r\n showTime: false,\r\n touchUI: false,\r\n placeholder: '',\r\n showButtonBar: true,\r\n }\r\n };\r\n\r\n onDateSelect(event: Date): void {\r\n this.formatAndSetDate(event);\r\n }\r\n\r\n onDateInput(event: any): void {\r\n const inputValue = event.target.value.trim();\r\n if (this.isValidDateInput(inputValue, this.props['dateFormat'] || 'dd-mm-yy')) {\r\n const parsedDate = this.parseDate(inputValue, this.props['dateFormat'] || 'dd-mm-yy');\r\n if (parsedDate) {\r\n this.formatAndSetDate(parsedDate);\r\n }\r\n } else {\r\n this.formControl?.setErrors({ invalidDate: true });\r\n }\r\n }\r\n\r\n private formatAndSetDate(date: Date): void {\r\n if (this.formControl) {\r\n const formattedDate = formatDate(date, 'dd-MM-yyyy', 'en-US');\r\n this.formControl.setValue(formattedDate);\r\n }\r\n }\r\n\r\n private parseDate(value: string, format: string): Date | null {\r\n const parts = value.split(/[-/]/); // Split by common delimiters\r\n if (parts.length === 3) {\r\n const [day, month, year] = format === 'dd-mm-yy'\r\n ? [parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)]\r\n : [parseInt(parts[1], 10), parseInt(parts[0], 10) - 1, parseInt(parts[2], 10)];\r\n return new Date(year, month, day);\r\n }\r\n return null;\r\n }\r\n\r\n private isValidDateInput(value: string, format: string): boolean {\r\n const dateRegex = format === 'dd-mm-yy'\r\n ? /^\\d{2}-\\d{2}-\\d{4}$/\r\n : /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\r\n return dateRegex.test(value);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\n\r\n@Component({\r\n selector: 'formly-field-checkbox',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n CheckboxModule\r\n ],\r\n template: `\r\n <div class=\"checkbox-container\">\r\n <p-checkbox\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [binary]=\"!props['options']\"\r\n [trueValue]=\"props['trueValue']\"\r\n [falseValue]=\"props['falseValue']\">\r\n {{props['checkboxLabel'] || ''}}\r\n </p-checkbox>\r\n </div>\r\n `,\r\n styles: [`\r\n .checkbox-container {\r\n display: flex;\r\n align-items: center;\r\n height: 40px;\r\n }\r\n `]\r\n})\r\nexport class CheckboxType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n trueValue: true,\r\n falseValue: false\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { Textarea } from 'primeng/inputtextarea';\r\n\r\n@Component({\r\n selector: 'formly-field-textarea',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n Textarea\r\n ],\r\n template: `\r\n <textarea pInputTextarea\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [rows]=\"props['rows'] || 3\"\r\n [cols]=\"props['cols']\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [autoResize]=\"props['autoResize']\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n class=\"w-full\">\r\n </textarea>\r\n `\r\n})\r\nexport class TextareaType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n rows: 3,\r\n cols: undefined,\r\n autoResize: true,\r\n placeholder: ''\r\n }\r\n };\r\n}\r\n","import { Component, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FieldWrapper, FormlyFieldConfig, FormlyConfig } from '@ngx-formly/core';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { FormlyValidationMessages } from './field.interface';\r\n\r\ninterface FormlyFieldProps {\r\n label?: string;\r\n required?: boolean;\r\n tooltip?: string;\r\n description?: string;\r\n validation?: {\r\n messages?: FormlyValidationMessages;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'formly-wrapper-form-field',\r\n standalone: true,\r\n imports: [CommonModule, TooltipModule],\r\n template: `\r\n <div class=\"field mb-4\">\r\n <label *ngIf=\"props.label\" [for]=\"id\" class=\"font-medium\">\r\n {{ props.label }}\r\n <span class=\"required-star\" *ngIf=\"props.required\">*</span>\r\n <i *ngIf=\"props.tooltip\" \r\n class=\"pi pi-info-circle ml-2\" \r\n [pTooltip]=\"props.tooltip\">\r\n </i>\r\n </label>\r\n \r\n <div [class.p-input-error]=\"showError\">\r\n <ng-container #fieldComponent></ng-container>\r\n </div>\r\n \r\n <small *ngIf=\"props.description\" class=\"block mt-1\">\r\n {{ props.description }}\r\n </small>\r\n \r\n <small *ngIf=\"showError\" class=\"p-error block\">\r\n <i class=\"pi pi-exclamation-circle mr-2\"></i>\r\n {{ errorMessage }}\r\n </small>\r\n </div>\r\n `,\r\n styles: [`\r\n :host ::ng-deep {\r\n .required-star {\r\n color: var(--red-500);\r\n margin-left: 0.25rem;\r\n }\r\n \r\n /* Text Input validation styles */\r\n .p-input-error :where(input, .p-inputtext),\r\n .p-input-error .p-inputtext.ng-invalid,\r\n .p-input-error .p-inputtext.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error :where(input:enabled:focus, .p-inputtext:enabled:focus),\r\n .p-input-error .p-inputtext.ng-invalid:focus,\r\n .p-input-error .p-inputtext.ng-dirty.ng-invalid:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Select validation styles */\r\n .p-input-error .p-select,\r\n .p-input-error .p-select.ng-invalid,\r\n .p-input-error .p-select.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-select:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Date picker validation styles */\r\n .p-input-error .p-datepicker,\r\n .p-input-error .p-datepicker.ng-invalid,\r\n .p-input-error .p-datepicker.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-datepicker:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Multi-select validation styles */\r\n .p-input-error .p-multiselect,\r\n .p-input-error .p-multiselect.ng-invalid,\r\n .p-input-error .p-multiselect.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-multiselect:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Numeric input validation styles */\r\n .p-input-error .p-inputnumber,\r\n .p-input-error .p-inputnumber.ng-invalid,\r\n .p-input-error .p-inputnumber.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-inputnumber:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Textarea validation styles */\r\n .p-input-error .p-inputtextarea,\r\n .p-input-error .p-inputtextarea.ng-invalid,\r\n .p-input-error .p-inputtextarea.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-inputtextarea:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Checkbox validation styles */\r\n .p-input-error .p-checkbox .p-checkbox-box,\r\n .p-input-error .p-checkbox.ng-invalid .p-checkbox-box,\r\n .p-input-error .p-checkbox.ng-dirty.ng-invalid .p-checkbox-box {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-checkbox:not(.p-disabled) .p-checkbox-box:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Radio button validation styles */\r\n .p-input-error .p-radiobutton .p-radiobutton-box,\r\n .p-input-error .p-radiobutton.ng-invalid .p-radiobutton-box,\r\n .p-input-error .p-radiobutton.ng-dirty.ng-invalid .p-radiobutton-box {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-radiobutton:not(.p-disabled) .p-radiobutton-box:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* File upload validation styles */\r\n .p-input-error .p-fileupload,\r\n .p-input-error .p-fileupload.ng-invalid,\r\n .p-input-error .p-fileupload.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-error {\r\n color: var(--red-500);\r\n margin-top: 0.5rem;\r\n }\r\n\r\n small {\r\n color: var(--text-color-secondary);\r\n }\r\n\r\n /* Additional styles for direct control of PrimeNG components */\r\n input.ng-dirty.ng-invalid,\r\n .p-inputtext.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n input.ng-dirty.ng-invalid:focus,\r\n .p-inputtext.ng-dirty.ng-invalid:focus {\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Global validation class support for any missed components */\r\n .p-input-error [class*=\"p-\"]:not(.p-disabled).ng-invalid,\r\n .p-input-error [class*=\"p-\"]:not(.p-disabled).ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n }\r\n `]\r\n})\r\nexport class FormFieldWrapper extends FieldWrapper<FormlyFieldConfig<FormlyFieldProps>> {\r\n constructor(@Optional() private formlyConfig: FormlyConfig) {\r\n super();\r\n }\r\n\r\n // ngOnInit() {\r\n // const originalDisable = this.formControl.disable.bind(this.formControl);\r\n // this.formControl.disable = (opts?: any) => {\r\n // const value = this.formControl.value;\r\n // originalDisable(opts);\r\n // if (value !== null && value !== undefined) {\r\n // this.formControl.setValue(value, { emitEvent: false });\r\n // }\r\n // };\r\n // }\r\n\r\n\r\n get errorMessage(): string {\r\n if (!this.field.formControl?.errors) {\r\n return '';\r\n }\r\n\r\n const firstErrorKey = Object.keys(this.field.formControl.errors)[0];\r\n const error = this.field.formControl.errors[firstErrorKey];\r\n\r\n // Try to get message from field.validation (field-specific)\r\n if (this.field.validation?.messages?.[firstErrorKey]) {\r\n const message = this.field.validation.messages[firstErrorKey];\r\n if (typeof message === 'string') {\r\n return message;\r\n }\r\n }\r\n\r\n // Try to get message from props.validation (template-specific)\r\n if (this.props.validation?.messages?.[firstErrorKey]) {\r\n return this.props.validation.messages[firstErrorKey];\r\n }\r\n\r\n // Use field validator's own message if available\r\n if (error && error.message) {\r\n return error.message;\r\n }\r\n\r\n // Use global validation messages from FormlyConfig\r\n if (this.formlyConfig) {\r\n // Try to get the validator message function\r\n const getErrorMessage = this.formlyConfig.getValidatorMessage(firstErrorKey);\r\n\r\n // Handle function-based validator messages\r\n if (getErrorMessage && typeof getErrorMessage === 'function') {\r\n const result = getErrorMessage(error, this.field);\r\n if (typeof result === 'string') {\r\n return result;\r\n }\r\n }\r\n\r\n // For 'required' errors, return the standard message if we couldn't get it above\r\n if (firstErrorKey === 'required') {\r\n return 'This field is required';\r\n }\r\n }\r\n\r\n // Fallback for the most common error if all else fails\r\n return 'This field is invalid';\r\n }\r\n\r\n override get showError(): boolean {\r\n if (!this.field.formControl) {\r\n return false;\r\n }\r\n\r\n const { touched, dirty, invalid } = this.field.formControl;\r\n return invalid && (touched || dirty);\r\n }\r\n}\r\n","export const FORMLY_TYPES = {\r\n TEXT: 'text',\r\n NUMBER: 'number',\r\n DATE: 'date',\r\n CHECKBOX: 'checkbox',\r\n RADIO: 'radio',\r\n SELECT: 'select',\r\n MULTISELECT: 'multiselect',\r\n TEXTAREA: 'textarea',\r\n FILE_UPLOAD: 'file-upload'\r\n};\r\n\r\nexport const FORMLY_WRAPPERS = {\r\n FORM_FIELD: 'form-field'\r\n};\r\n","import { Component, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\n\r\n/**\r\n * File upload formly field type component\r\n * \r\n * Can be used for:\r\n * 1. Simple file uploads with customizable UI\r\n * 2. Document management with list, download, and delete functionality\r\n */\r\n@Component({\r\n selector: 'formly-field-file-upload',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ToastModule,\r\n ProgressBarModule,\r\n ButtonModule,\r\n TableModule,\r\n ConfirmDialogModule\r\n ],\r\n providers: [\r\n MessageService,\r\n ConfirmationService\r\n ],\r\n styles: [`\r\n :host ::ng-deep .small-buttons .p-button {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n }\r\n :host ::ng-deep .p-button-sm {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n }\r\n `],\r\n template: `\r\n <p-toast></p-toast>\r\n <p-confirmDialog header=\"Confirmation\" icon=\"pi pi-exclamation-triangle\"></p-confirmDialog>\r\n \r\n <!-- Custom File Upload UI -->\r\n <p-toast></p-toast>\r\n <p-confirmDialog header=\"Confirmation\" icon=\"pi pi-exclamation-triangle\"></p-confirmDialog>\r\n <div>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [attr.multiple]=\"props['multiple'] ? '' : null\"\r\n [attr.accept]=\"props['accept']\"\r\n style=\"display: none\"\r\n (change)=\"onFileSelect($event)\"\r\n />\r\n <button\r\n pButton\r\n type=\"button\"\r\n [label]=\"props['chooseLabel'] || 'Choose File'\"\r\n [disabled]=\"props['disabled']\"\r\n (click)=\"fileInput.click()\"\r\n [class.p-button-sm]=\"props['buttonSize'] === 'small'\"\r\n ></button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <p-table\r\n [value]=\"allDocuments\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [loading]=\"props['loading'] || false\"\r\n styleClass=\"p-datatable-sm\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>File Name</th>\r\n <th>File Size</th>\r\n <th>Uploaded By</th>\r\n <th>Uploaded At</th>\r\n <th>Actions</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-document let-rowIndex=\"rowIndex\">\r\n <tr>\r\n <td>{{ document.fileName || document.name }}</td>\r\n <td>{{ document.size ? formatFileSize(document.size) : '-' }}</td>\r\n <td>{{ document.uploadedBy ? document.uploadedBy : 'You' }}</td>\r\n <td>\r\n {{ document.uploadedAt ? (document.uploadedAt | date:'short') : '-' }}\r\n </td>\r\n <td>\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-download\"\r\n class=\"p-button-sm p-button-text\"\r\n (click)=\"downloadDocument(document)\"\r\n *ngIf=\"document.id || document.s3Key\"\r\n ></button>\r\n <button\r\n pButton\r\n icon=\"pi pi-trash\"\r\n class=\"p-button-sm p-button-text p-button-danger\"\r\n (click)=\"document.id || document.s3Key ? deleteDocument(document) : removeDocument(document, rowIndex)\"\r\n [label]=\"document.id || document.s3Key ? 'Delete' : 'Remove'\"\r\n ></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"4\" class=\"text-center p-3\">\r\n No documents found\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <p-progressBar\r\n *ngIf=\"uploading\"\r\n [value]=\"progress\"\r\n [showValue]=\"false\"\r\n styleClass=\"mt-2\"\r\n ></p-progressBar>\r\n `\r\n})\r\nexport class FileUploadType extends FieldType {\r\n uploading: boolean = false;\r\n progress: number = 0;\r\n selectedFiles: File[] = [];\r\n\r\n get allDocuments(): any[] {\r\n // Combine uploaded documents and selected files\r\n const uploaded = Array.isArray(this.props['documentList']) ? this.props['documentList'] : [];\r\n return [...uploaded, ...this.selectedFiles];\r\n }\r\n\r\n constructor(private confirmationService: ConfirmationService, private messageService: MessageService) {\r\n super();\r\n }\r\n\r\n onFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files) {\r\n const newFiles = Array.from(input.files);\r\n // Append new files, avoiding duplicates by name\r\n const existingNames = new Set(this.selectedFiles.map(f => f.name));\r\n const filesToAdd = newFiles.filter(f => !existingNames.has(f.name));\r\n this.selectedFiles = [...this.selectedFiles, ...filesToAdd];\r\n // Sync form control value with selectedFiles\r\n this.formControl.setValue(this.selectedFiles);\r\n this.formControl.markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Get selected files for upload on form submit\r\n */\r\n getSelectedFiles(): File[] {\r\n return this.selectedFiles;\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n accept: '',\r\n disabled: false,\r\n chooseLabel: 'Upload File',\r\n buttonSize: 'small',\r\n documentList: undefined as any[] | undefined,\r\n loading: false,\r\n onDownloadDocument: undefined as ((document: any) => void) | undefined,\r\n onDeleteDocument: undefined as ((document: any) => void) | undefined,\r\n onRefreshDocuments: undefined as (() => void) | undefined\r\n }\r\n };\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 B';\r\n const k = 1024;\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n }\r\n\r\n /**\r\n * Download a document\r\n * Uses the onDownloadDocument callback from props if provided\r\n */\r\n downloadDocument(document: any): void {\r\n if (this.props['onDownloadDocument']) {\r\n this.props['onDownloadDocument'](document);\r\n } else {\r\n console.warn('No download handler provided. Define onDownloadDocument in props.');\r\n }\r\n }\r\n\r\n /**\r\n * Confirm document deletion with confirmation dialog\r\n */\r\n confirmDeleteDocument(document: any): void {\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete ${document.fileName || 'this document'}?`,\r\n accept: () => {\r\n this.deleteDocument(document);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove document handler for selected files\r\n */\r\n removeDocument(document: any, rowIndex: number): void {\r\n this.selectedFiles.splice(rowIndex, 1);\r\n this.formControl.setValue(this.selectedFiles);\r\n this.formControl.markAsDirty();\r\n }\r\n\r\n /**\r\n * Delete a document (existing uploaded document)\r\n */\r\n deleteDocument(document: any): void {\r\n if (this.props['onDeleteDocument']) {\r\n this.props['onDeleteDocument'](document);\r\n\r\n // Remove from documentList after successful deletion (optimistic UI)\r\n if (Array.isArray(this.props['documentList'])) {\r\n this.props['documentList'] = this.props['documentList'].filter((doc: any) => doc.id !== document.id);\r\n }\r\n\r\n // Refresh document list after successful deletion\r\n if (this.props['onRefreshDocuments']) {\r\n setTimeout(() => {\r\n this.props['onRefreshDocuments']();\r\n }, 500); // Small delay to ensure backend deletion is complete\r\n }\r\n } else {\r\n console.warn('No delete handler provided. Define onDeleteDocument in props.');\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\n/**\r\n * Common Validators for form fields\r\n */\r\nexport class CommonValidators {\r\n /**\r\n * Email validator pattern\r\n * Matches standard email format with @ and domain\r\n */\r\n static readonly EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n \r\n /**\r\n * Indian mobile number validator pattern\r\n * Matches 10-digit numbers, optionally starting with +91 or 0\r\n */\r\n static readonly MOBILE_PATTERN = /^(?:\\+91|0)?[6-9]\\d{9}$/;\r\n \r\n /**\r\n * PAN card validator pattern\r\n * Format: AAAAA0000A (5 letters, 4 numbers, 1 letter)\r\n */\r\n static readonly PAN_PATTERN = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;\r\n\r\n /**\r\n * Returns a validator function to check if the value matches the given pattern\r\n * @param pattern - Regular expression to test\r\n * @param errorMessage - Optional custom error message\r\n */\r\n static patternValidator(pattern: RegExp, errorMessage?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = pattern.test(control.value);\r\n return valid ? null : { \r\n pattern: {\r\n message: errorMessage || 'Invalid format'\r\n } \r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Email validator function\r\n */\r\n static email(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.EMAIL_PATTERN.test(control.value);\r\n return valid ? null : { \r\n email: {\r\n value: control.value,\r\n message: 'Please enter a valid email address'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * Mobile number validator function\r\n */\r\n static mobileNumber(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.MOBILE_PATTERN.test(control.value);\r\n return valid ? null : { \r\n mobileNumber: {\r\n value: control.value,\r\n message: 'Please enter a valid 10-digit mobile number'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * PAN card validator function\r\n */\r\n static panCard(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.PAN_PATTERN.test(control.value);\r\n return valid ? null : { \r\n panCard: {\r\n value: control.value,\r\n message: 'Please enter a valid PAN card number (AAAAA0000A)'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for email\r\n */\r\n static formlyEmailValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.EMAIL_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid email address',\r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for mobile number\r\n */\r\n static formlyMobileValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.MOBILE_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid 10-digit mobile number',\r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for PAN card\r\n */\r\n static formlyPanValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.PAN_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid PAN card number (AAAAA0000A)',\r\n };\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { TextInputType } from './types/text-input.type';\r\nimport { SelectType } from './types/select.type';\r\nimport { RadioType } from './types/radio.type';\r\nimport { NumericInputType } from './types/numeric-input.type';\r\nimport { MultiselectType } from './types/multiselect.type';\r\nimport { DateType } from './types/date.type';\r\nimport { CheckboxType } from './types/checkbox.type';\r\nimport { TextareaType } from './types/textarea.type';\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { FORMLY_TYPES, FORMLY_WRAPPERS } from './formly.constants';\r\nimport { FileUploadType } from './types/file-upload.type';\r\nimport { CommonValidators } from '../../validators/common-validators';\r\n\r\n@NgModule({\r\n imports: [\r\n FormlyModule.forRoot({\r\n types: [\r\n { name: FORMLY_TYPES.TEXT, component: TextInputType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.NUMBER, component: NumericInputType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.DATE, component: DateType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.CHECKBOX, component: CheckboxType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.RADIO, component: RadioType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.SELECT, component: SelectType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.MULTISELECT, component: MultiselectType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.TEXTAREA, component: TextareaType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.FILE_UPLOAD, component: FileUploadType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n ],\r\n wrappers: [\r\n { name: FORMLY_WRAPPERS.FORM_FIELD, component: FormFieldWrapper }\r\n ],\r\n validators: [\r\n { name: 'email', validation: CommonValidators.email },\r\n { name: 'mobileNumber', validation: CommonValidators.mobileNumber },\r\n { name: 'panCard', validation: CommonValidators.panCard }\r\n ],\r\n validationMessages: [\r\n { name: 'required', message: 'This field is required' },\r\n { name: 'minlength', message: (error, field) => `Minimum length is ${error.requiredLength} characters` },\r\n { name: 'maxlength', message: (error, field) => `Maximum length is ${error.requiredLength} characters` },\r\n { name: 'min', message: (error, field) => `Minimum value is ${error.min}` },\r\n { name: 'max', message: (error, field) => `Maximum value is ${error.max}` },\r\n { name: 'email', message: 'Please enter a valid email address' },\r\n { name: 'pattern', message: 'Invalid format' },\r\n { name: 'mobileNumber', message: 'Please enter a valid 10-digit mobile number' },\r\n { name: 'panCard', message: 'Please enter a valid PAN card number (AAAAA0000A)' },\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class CoreFormlyModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\n\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { TextInputType } from './types/text-input.type';\r\nimport { NumericInputType } from './types/numeric-input.type';\r\nimport { CheckboxType } from './types/checkbox.type';\r\nimport { DateType } from './types/date.type';\r\nimport { RadioType } from './types/radio.type';\r\nimport { SelectType } from './types/select.type';\r\nimport { MultiselectType } from './types/multiselect.type';\r\nimport { TextareaType } from './types/textarea.type';\r\nimport { FileUploadType } from './types/file-upload.type';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InputTextModule,\r\n DropdownModule,\r\n DatePickerModule,\r\n CheckboxModule,\r\n RadioButtonModule,\r\n MultiSelectModule,\r\n FileUploadModule,\r\n ToastModule,\r\n ButtonModule,\r\n ProgressBarModule,\r\n FormlyModule.forRoot({\r\n wrappers: [\r\n { name: 'form-field', component: FormFieldWrapper }\r\n ],\r\n types: [\r\n {\r\n name: 'text-input',\r\n component: TextInputType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'numeric-input',\r\n component: NumericInputType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'checkbox',\r\n component: CheckboxType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'radio',\r\n component: RadioType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'date',\r\n component: DateType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'select',\r\n component: SelectType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'multiselect',\r\n component: MultiselectType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'textarea',\r\n component: TextareaType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'file-upload',\r\n component: FileUploadType,\r\n wrappers: ['form-field']\r\n }\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class PrimeNGFormlyModule { }\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-keycloak-error-page',\r\n standalone: true,\r\n template: `\r\n <div class=\"keycloak-error-page\">\r\n <h1>Authentication Service Unavailable</h1>\r\n <p>\r\n The authentication service (Keycloak) is not responding.<br>\r\n Please ensure the Keycloak server is running and try again.\r\n </p>\r\n <button (click)=\"reload()\">Retry</button>\r\n </div>\r\n `,\r\n styles: [`\r\n .keycloak-error-page {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 60vh;\r\n color: #b71c1c;\r\n background: #fff3f3;\r\n border-radius: 8px;\r\n margin: 2rem;\r\n padding: 2rem;\r\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\r\n }\r\n .keycloak-error-page h1 {\r\n font-size: 2rem;\r\n margin-bottom: 1rem;\r\n }\r\n .keycloak-error-page p {\r\n font-size: 1.2rem;\r\n margin-bottom: 2rem;\r\n text-align: center;\r\n }\r\n .keycloak-error-page button {\r\n background: #b71c1c;\r\n color: #fff;\r\n border: none;\r\n padding: 0.75rem 2rem;\r\n border-radius: 4px;\r\n font-size: 1rem;\r\n cursor: pointer;\r\n }\r\n .keycloak-error-page button:hover {\r\n background: #d32f2f;\r\n }\r\n `]\r\n})\r\nexport class KeycloakErrorPageComponent {\r\n reload() {\r\n window.location.reload();\r\n }\r\n}\r\n","import { Component, inject, OnDestroy } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ERROR_SERVICE } from '../../services/base-error.service';\r\n\r\n@Component({\r\n selector: 'app-not-found',\r\n standalone: true,\r\n imports: [RouterModule, ButtonModule],\r\n template: `\r\n <div class=\"flex align-items-center justify-content-center min-h-screen\">\r\n <div class=\"text-center p-4\">\r\n <h1 class=\"text-6xl font-bold text-primary-500 mb-4\">404</h1>\r\n <h2 class=\"text-3xl font-medium mb-4\">Page Not Found</h2>\r\n <p class=\"text-gray-600 mb-6\">{{ errorMessage }}</p>\r\n <button \r\n pButton \r\n label=\"Go to Home\" \r\n icon=\"pi pi-home\" \r\n [routerLink]=\"['/']\"\r\n class=\"p-button-primary\"\r\n (click)=\"clearError()\">\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n min-height: 100vh;\r\n background-color: var(--surface-ground);\r\n }\r\n `]\r\n})\r\nexport class NotFoundComponent implements OnDestroy {\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n readonly error = this.errorService.error;\r\n\r\n get errorMessage(): string {\r\n return this.error()?.message ?? \"The page you are looking for doesn't exist or has been moved.\";\r\n }\r\n\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.errorService.clearError();\r\n }\r\n}\r\n","import { Component, inject, OnDestroy } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ERROR_SERVICE } from '../../services/base-error.service';\r\n\r\n@Component({\r\n selector: 'app-unauthorized',\r\n standalone: true,\r\n imports: [RouterModule, ButtonModule],\r\n template: `\r\n <div class=\"flex align-items-center justify-content-center min-h-screen\">\r\n <div class=\"text-center p-4\">\r\n <h1 class=\"text-6xl font-bold text-primary-500 mb-4\">{{ statusCode }}</h1>\r\n <h2 class=\"text-3xl font-medium mb-4\">Unauthorized Access</h2>\r\n <p class=\"text-gray-600 mb-6\">{{ errorMessage }}</p>\r\n <button \r\n pButton \r\n label=\"Go to Home\" \r\n icon=\"pi pi-home\" \r\n [routerLink]=\"['/']\"\r\n class=\"p-button-primary\"\r\n (click)=\"clearError()\">\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n min-height: 100vh;\r\n background-color: var(--surface-ground);\r\n }\r\n `]\r\n})\r\nexport class UnauthorizedComponent implements OnDestroy {\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n readonly error = this.errorService.error;\r\n\r\n get statusCode(): string {\r\n return this.error()?.code?.toString() ?? '401';\r\n }\r\n\r\n get errorMessage(): string {\r\n return this.error()?.message ?? \"You don't have permission to access this page.\";\r\n }\r\n\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.errorService.clearError();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of core-lib\r\n */\r\n\r\n// Components\r\nexport * from './lib/components/base-form.component';\r\nexport * from './lib/components/base-list-page.component';\r\nexport * from './lib/components/base-list-tabbed-form.component';\r\nexport * from './lib/components/base-page.component';\r\nexport * from './lib/components/base-tabbed-form.component';\r\nexport * from './lib/components/base-table.component';\r\nexport * from './lib/components/base-task-dashboard.component';\r\nexport * from './lib/components/base-task-details.component';\r\n\r\n// Keycloak\r\nexport * from './lib/keycloak/keycloak-config.interface';\r\nexport * from './lib/keycloak/keycloak.interface';\r\nexport * from './lib/keycloak/keycloak-service.token';\r\nexport * from './lib/keycloak/keycloak.guard';\r\nexport * from './lib/keycloak/keycloak.providers';\r\nexport * from './lib/keycloak/keycloak.service';\r\nexport * from './lib/keycloak/keycloak.token';\r\n\r\nexport * from './lib/models/department.interface';\r\nexport * from './lib/services/master-data-service.interface';\r\n\r\n// Error Handling\r\nexport * from './lib/services/base-error.service';\r\n\r\nexport * from './lib/services/base-entity.service';\r\nexport * from './lib/services/base-task.service';\r\nexport * from './lib/services/entity-service.interface';\r\nexport * from './lib/services/task-entity-service.interface';\r\nexport * from './lib/services/entity-service.interface';\r\nexport * from './lib/services/entity-registry.service';\r\nexport * from './lib/services/enum-registry.service';\r\nexport * from './lib/services/form.service';\r\nexport * from './lib/services/formly-config.service';\r\nexport * from './lib/services/http-utility.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/reference-data-provider.service';\r\nexport * from './lib/services/utils.service';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/indian-date.pipe';\r\n\r\nexport * from './lib/models/base.model';\r\nexport * from './lib/models/base-request.model';\r\nexport * from './lib/models/base-response.model';\r\nexport * from './lib/models/base-task.model';\r\nexport * from './lib/models/base.comment.model';\r\nexport * from './lib/models/base-create-request.model';\r\nexport * from './lib/models/base-update-request.model';\r\nexport * from './lib/models/pagination/filter-criteria.interface';\r\nexport * from './lib/models/pagination/table-column-datatype.enum';\r\nexport * from './lib/models/pagination/page-request.interface';\r\nexport * from './lib/models/pagination/page.interface';\r\nexport * from './lib/models/pagination/sort-criteria.interface';\r\n\r\n// Enums\r\nexport * from './lib/enums/component-context.enum';\r\nexport * from './lib/enums/tabbed-form-type.enum';\r\nexport * from './lib/enums/task-role.enum';\r\n\r\n// Constants\r\nexport * from './lib/constants/app.constants';\r\nexport * from './lib/constants/app.messages';\r\n\r\n// Formly\r\nexport * from './lib/components/formly/core-formly.module';\r\nexport * from './lib/components/formly/field.interface';\r\nexport * from './lib/components/formly/form-field.wrapper';\r\nexport * from './lib/components/formly/formly.constants';\r\nexport * from './lib/components/formly/primeng-formly.module';\r\n\r\n// Validators\r\nexport * from './lib/validators/common-validators';\r\n\r\n// Common Components\r\nexport * from './lib/components/keycloak-error-banner/keycloak-error-page.component';\r\nexport * from './lib/components/not-found/not-found.component';\r\nexport * from './lib/components/unauthorized/unauthorized.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UtilsService","i2.NotificationService","i1.EnumRegistryService","i1","i3.UtilsService","i4.FormlyConfigService","i4","take","takeUntil","distinctUntilChanged","tap","map","finalize","mergeMap","catchError","i2","i1.HttpUtilityService","i2.ReferenceDataProviderService","i3","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codex-ts-core-lib.mjs","sources":["../../../projects/core-lib/src/lib/constants/app.constants.ts","../../../projects/core-lib/src/lib/constants/app.messages.ts","../../../projects/core-lib/src/lib/enums/component-context.enum.ts","../../../projects/core-lib/src/lib/services/utils.service.ts","../../../projects/core-lib/src/lib/services/notification.service.ts","../../../projects/core-lib/src/lib/components/base-page.component.ts","../../../projects/core-lib/src/lib/services/enum-registry.service.ts","../../../projects/core-lib/src/lib/services/formly-config.service.ts","../../../projects/core-lib/src/lib/components/base-form.component.ts","../../../projects/core-lib/src/lib/models/pagination/table-column-datatype.enum.ts","../../../projects/core-lib/src/lib/components/base-table.component.ts","../../../projects/core-lib/src/lib/components/base-list-page.component.ts","../../../projects/core-lib/src/lib/components/base-list-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-task-dashboard.component.ts","../../../projects/core-lib/src/lib/services/form.service.ts","../../../projects/core-lib/src/lib/components/base-task-details.component.ts","../../../projects/core-lib/src/lib/keycloak/keycloak-service.token.ts","../../../projects/core-lib/src/lib/services/base-error.service.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.token.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.service.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.guard.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.interceptor.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.providers.ts","../../../projects/core-lib/src/lib/services/base-entity.service.ts","../../../projects/core-lib/src/lib/services/http-utility.service.ts","../../../projects/core-lib/src/lib/services/base-task.service.ts","../../../projects/core-lib/src/lib/services/reference-data-provider.service.ts","../../../projects/core-lib/src/lib/services/entity-registry.service.ts","../../../projects/core-lib/src/lib/pipes/indian-date.pipe.ts","../../../projects/core-lib/src/lib/models/base-task.model.ts","../../../projects/core-lib/src/lib/models/base.comment.model.ts","../../../projects/core-lib/src/lib/enums/tabbed-form-type.enum.ts","../../../projects/core-lib/src/lib/enums/task-role.enum.ts","../../../projects/core-lib/src/lib/components/formly/types/text-input.type.ts","../../../projects/core-lib/src/lib/components/formly/types/select.type.ts","../../../projects/core-lib/src/lib/components/formly/types/radio.type.ts","../../../projects/core-lib/src/lib/components/formly/types/numeric-input.type.ts","../../../projects/core-lib/src/lib/components/formly/types/multiselect.type.ts","../../../projects/core-lib/src/lib/components/formly/types/date.type.ts","../../../projects/core-lib/src/lib/components/formly/types/checkbox.type.ts","../../../projects/core-lib/src/lib/components/formly/types/textarea.type.ts","../../../projects/core-lib/src/lib/components/formly/form-field.wrapper.ts","../../../projects/core-lib/src/lib/components/formly/formly.constants.ts","../../../projects/core-lib/src/lib/components/formly/types/file-upload.type.ts","../../../projects/core-lib/src/lib/validators/common-validators.ts","../../../projects/core-lib/src/lib/components/formly/core-formly.module.ts","../../../projects/core-lib/src/lib/components/formly/primeng-formly.module.ts","../../../projects/core-lib/src/lib/components/keycloak-error-banner/keycloak-error-page.component.ts","../../../projects/core-lib/src/lib/components/not-found/not-found.component.ts","../../../projects/core-lib/src/lib/components/unauthorized/unauthorized.component.ts","../../../projects/core-lib/src/lib/workflow-engine/workflow-engine.models.ts","../../../projects/core-lib/src/lib/workflow-engine/workflow-engine-api.service.ts","../../../projects/core-lib/src/public-api.ts","../../../projects/core-lib/src/codex-ts-core-lib.ts"],"sourcesContent":["export class AppConstants {\r\n static readonly FORM = {\r\n MODE: 'mode',\r\n UUID: 'uuid',\r\n NEW: 'new'\r\n } as const;\r\n\r\n static readonly PAGE_MODE = {\r\n CREATE: 'create',\r\n EDIT: 'edit',\r\n VIEW: 'view'\r\n } as const;\r\n}\r\n\r\nexport type PageMode = typeof AppConstants.PAGE_MODE[keyof typeof AppConstants.PAGE_MODE];\r\n","export const AppMessages = {\r\n COMMON: {\r\n ERROR: {\r\n GENERAL: 'An error occurred',\r\n INVALID_INPUT: 'Invalid input provided',\r\n REQUIRED_FIELD: 'This field is required'\r\n },\r\n SUCCESS: {\r\n SAVE: 'saved successfully',\r\n UPDATE: 'updated successfully',\r\n DELETE: 'deleted successfully'\r\n }\r\n },\r\n FORM: {\r\n ERROR: {\r\n INIT: 'Failed to initialize form',\r\n SAVE: 'Failed to save',\r\n LOAD: 'Failed to load',\r\n VALIDATION: 'Please fill in all required fields correctly'\r\n },\r\n SUCCESS: {\r\n SAVE: 'saved successfully'\r\n }\r\n },\r\n LIST: {\r\n ERROR: {\r\n LOAD: 'Failed to load',\r\n DELETE: 'Failed to delete',\r\n NAVIGATION: 'Navigation failed',\r\n INVALID_ID: 'Cannot perform action without ID'\r\n },\r\n SUCCESS: {\r\n DELETE: 'deleted successfully'\r\n }\r\n }\r\n} as const;\r\n","export enum ComponentContext {\r\n STANDALONE = 'STANDALONE',\r\n TABBED = 'TABBED',\r\n MODAL = 'MODAL',\r\n EMBEDDED = 'EMBEDDED'\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * A utility service that provides common reusable functionality\r\n * such as UUID validation and error message display\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n /**\r\n * Validates if a string is a valid UUID\r\n * @param uuid The string to validate\r\n * @returns boolean indicating if the string is a valid UUID\r\n */\r\n isValidUUID(uuid: string): boolean {\r\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\r\n return uuidRegex.test(uuid);\r\n }\r\n\r\n /**\r\n * Shows an error message using PrimeNG's MessageService\r\n * @param message The error message to display\r\n * @param messageService The MessageService instance to use\r\n */\r\n showError(message: string, messageService?: MessageService) {\r\n if (messageService) {\r\n messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Shows a success message using PrimeNG's MessageService\r\n * @param message The success message to display\r\n * @param messageService The MessageService instance to use\r\n */\r\n showSuccess(message: string, messageService?: MessageService) {\r\n if (messageService) {\r\n messageService.add({\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the display value for an enum key or array of enum keys\r\n * @param enumType The enum type\r\n * @param key The enum key or array of enum keys\r\n * @returns The display value for the enum key or comma-separated list of display values for array of keys\r\n */\r\n getEnumValue<T>(enumType: T, key: string | string[]): string {\r\n if (!key) return '';\r\n \r\n if (Array.isArray(key)) {\r\n // Handle array of keys - map each to its display value and join with comma\r\n return key.map(k => (enumType as any)[k] || k).join(', ');\r\n }\r\n \r\n // Handle single key\r\n return (enumType as any)[key] || key;\r\n }\r\n\r\n /**\r\n * Gets all values from an enum type for use in formly select fields\r\n * @param enumType The enum type to get values from\r\n * @returns Array of {label, value} pairs for formly select options\r\n */\r\n getEnumValues<T extends { [key: string]: string | number }>(enumType: T): Array<{label: string, value: string}> {\r\n return Object.entries(enumType)\r\n .filter(([key]) => isNaN(Number(key))) // Filter out reverse mappings\r\n .map(([key, value]) => ({\r\n value: key, // enum key as the value\r\n label: value as string // enum value as the label\r\n }));\r\n }\r\n\r\n /**\r\n * Converts a camelCase string to Title Case with spaces\r\n * @param camelCase The camelCase string to convert\r\n * @returns The Title Case string\r\n */\r\n camelCaseToTitleCase(camelCase: string): string {\r\n if (!camelCase) return '';\r\n const spacedString = camelCase.replace(/([a-z])([A-Z])/g, '$1 $2');\r\n return spacedString.charAt(0).toUpperCase() + spacedString.slice(1);\r\n }\r\n\r\n /**\r\n * Converts a string to kebab-case\r\n * @param input The string to convert\r\n * @returns The kebab-case string\r\n */\r\n toKebabCase(input: string): string {\r\n return input\r\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\r\n .replace(/([A-Z])([A-Z])(?=[a-z])/g, '$1-$2')\r\n .toLowerCase();\r\n }\r\n\r\n /**\r\n * Converts a string to camelCase.\r\n * Example: \"loan-application\" becomes \"loanApplication\"\r\n * @param input The string to convert\r\n * @returns The camelCase string\r\n */\r\n toCamelCase(input: string): string {\r\n if (!input) return '';\r\n \r\n // Split by non-alphanumeric chars\r\n const words = input.split(/[^a-zA-Z0-9]/);\r\n const result = [words[0].toLowerCase()];\r\n \r\n // Capitalize first letter of remaining words\r\n for (let i = 1; i < words.length; i++) {\r\n const word = words[i];\r\n if (word) {\r\n result.push(word.charAt(0).toUpperCase() + word.substring(1).toLowerCase());\r\n }\r\n }\r\n \r\n return result.join('');\r\n }\r\n\r\n /**\r\n * Removes double forward slashes from an endpoint string while preserving the protocol\r\n * e.g. \"http://localhost:8080//api//v1//users\" -> \"http://localhost:8080/api/v1/users\"\r\n * @param endpoint The endpoint string to clean\r\n * @returns The cleaned endpoint string without double slashes\r\n */\r\n removeDoubleSlashes(endpoint: string): string {\r\n if (!endpoint) return '';\r\n \r\n // Split the URL into protocol and the rest to preserve protocol slashes\r\n const [protocol, ...rest] = endpoint.split('://');\r\n \r\n if (!rest.length) {\r\n // If no protocol is present, just clean the entire string\r\n return endpoint.replace(/\\/+/g, '/');\r\n }\r\n \r\n // Clean the path part (after protocol) and reconstruct the URL\r\n const cleanPath = rest.join('://').replace(/\\/+/g, '/');\r\n return `${protocol}://${cleanPath}`;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NotificationService {\r\n private messageSubject = new BehaviorSubject<any>(null);\r\n message$ = this.messageSubject.asObservable();\r\n\r\n constructor(private messageService: MessageService) {}\r\n\r\n showSuccess(message: string) {\r\n const msgObj = {\r\n severity: 'success',\r\n summary: 'Success',\r\n detail: message,\r\n life: 3000\r\n };\r\n this.messageSubject.next(msgObj);\r\n }\r\n\r\n showError(message: string) {\r\n const msgObj = {\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n };\r\n this.messageSubject.next(msgObj);\r\n }\r\n\r\n clearMessage() {\r\n this.messageSubject.next(null);\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\n\r\n/**\r\n * Base component for all page components in the application.\r\n * Provides common functionality like loading state, message display,\r\n * and role-based access control.\r\n */\r\n@Directive()\r\nexport abstract class BasePageComponent {\r\n protected loading: boolean = false;\r\n \r\n constructor(\r\n protected utilsService: UtilsService,\r\n protected notificationService: NotificationService\r\n ) {}\r\n\r\n /**\r\n * Display an error message to the user\r\n * @param detail The error message to display\r\n */\r\n protected showError(detail: string): void {\r\n this.notificationService.showError(detail);\r\n }\r\n\r\n /**\r\n * Display a success message to the user\r\n * @param detail The success message to display\r\n */\r\n protected showSuccess(detail: string): void {\r\n this.notificationService.showSuccess(detail);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UtilsService } from './utils.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnumRegistryService {\r\n private enumMap = new Map<string, any>();\r\n\r\n constructor(private utilsService: UtilsService) {}\r\n\r\n /**\r\n * Initialize global enums\r\n */\r\n static registerGlobalEnums(enums: Record<string, any>) {\r\n return {\r\n provide: EnumRegistryService,\r\n useFactory: (utilsService: UtilsService) => {\r\n const service = new EnumRegistryService(utilsService);\r\n Object.entries(enums).forEach(([name, enumType]) => {\r\n service.register(name, enumType);\r\n });\r\n return service;\r\n },\r\n deps: [UtilsService]\r\n };\r\n }\r\n \r\n /**\r\n * Register an enum type with the service\r\n * @param name Name to register the enum under\r\n * @param enumType The enum type to register\r\n */\r\n register(name: string, enumType: any) {\r\n this.enumMap.set(name, enumType);\r\n }\r\n \r\n /**\r\n * Get formly-compatible options array for a registered enum\r\n * @param name Name of the registered enum\r\n * @returns Array of {label, value} pairs suitable for formly select fields\r\n */\r\n getEnumValues(name: string) {\r\n const enumType = this.enumMap.get(name);\r\n if (!enumType) {\r\n console.warn(`Enum type \"${name}\" not found in registry`);\r\n return [];\r\n }\r\n return this.utilsService.getEnumValues(enumType);\r\n }\r\n\r\n /**\r\n * Check if an enum type is registered\r\n * @param name Name of the enum to check\r\n */\r\n hasEnum(name: string): boolean {\r\n return this.enumMap.has(name);\r\n }\r\n\r\n /**\r\n * Clear all registered enums\r\n */\r\n clear() {\r\n this.enumMap.clear();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { PageMode } from '../constants/app.constants';\r\nimport { EnumRegistryService } from './enum-registry.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormlyConfigService {\r\n constructor(private enumRegistry: EnumRegistryService) {}\r\n\r\n getFormConfig(\r\n fields: FormlyFieldConfig[], \r\n mode: PageMode,\r\n dynamicOptions?: Record<string, any>\r\n ): FormlyFieldConfig[] {\r\n const commonConfig = {\r\n props: {\r\n disabled: mode === 'view'\r\n }\r\n };\r\n\r\n return fields.map((field: FormlyFieldConfig) => {\r\n // Apply dynamic options from child component\r\n if (dynamicOptions && field.key && typeof field.key === 'string') {\r\n const fieldOptions = dynamicOptions[field.key];\r\n if (fieldOptions) {\r\n field.props = {\r\n ...field.props,\r\n ...fieldOptions\r\n };\r\n }\r\n }\r\n\r\n // Handle field groups recursively\r\n if (field.fieldGroup) {\r\n field.fieldGroup = this.getFormConfig(field.fieldGroup, mode, dynamicOptions);\r\n }\r\n\r\n return {\r\n ...field,\r\n ...commonConfig,\r\n props: {\r\n ...field.props,\r\n ...commonConfig.props\r\n }\r\n };\r\n });\r\n }\r\n}\r\n","import { Component, Injectable, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, finalize, map, mergeMap, switchMap, take, takeUntil, tap } from 'rxjs/operators';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { BasePageComponent } from './base-page.component';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseFormComponent<T extends BaseModel>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n\r\n protected state: FormComponentState<T> = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.STANDALONE\r\n };\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected formlyConfigService: FormlyConfigService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeForm()\r\n .pipe(\r\n switchMap(() => this.loadFormData()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => this.onFormReady(),\r\n error: error => this.handleInitError(error)\r\n });\r\n }\r\n\r\n private initializeForm(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n take(1),\r\n map(params => {\r\n this.initializeFormMode(params[AppConstants.FORM.MODE]);\r\n this.setupFormState();\r\n this.initializeFormSubscriptions();\r\n })\r\n );\r\n }\r\n\r\n private loadFormData(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n take(1),\r\n mergeMap(params => {\r\n const state = this.getRouterState();\r\n \r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n return of(void 0);\r\n }\r\n\r\n if (state?.formData) {\r\n this.updateFormState(state.formData);\r\n return of(void 0);\r\n }\r\n\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (!uuid) {\r\n throw new Error(`UUID is required for ${this.state.mode} mode`);\r\n }\r\n\r\n return this.getEntityOperations().getById(uuid)\r\n .pipe(\r\n tap(data => this.updateFormState(data)),\r\n map(() => void 0)\r\n );\r\n })\r\n );\r\n }\r\n\r\n private getRouterState(): any {\r\n return {\r\n ...this.router.getCurrentNavigation()?.extras?.state,\r\n ...window.history.state,\r\n ...this.route.snapshot.data\r\n };\r\n }\r\n\r\n private initializeFormSubscriptions(): void {\r\n this.state.form.valueChanges\r\n .pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe(() => {\r\n this.updateCurrentData();\r\n this.checkFormChanges();\r\n });\r\n\r\n // Check for context in router state\r\n const routerState = window.history.state;\r\n if (routerState?.context) {\r\n this.state.context = routerState.context;\r\n console.log('[BaseFormComponent] Context set from router state:', this.state.context);\r\n }\r\n }\r\n\r\n @Input() set formData(data: T | null) {\r\n console.log('[BaseFormComponent] Form data input changed:', data);\r\n if (data) {\r\n // Reset form with new data\r\n this.state.fields = this.getFormlyFieldConfig();\r\n this.state.form.reset();\r\n this.state.currentData = { ...data };\r\n this.state.originalData = data;\r\n this.state.isNew = false;\r\n\r\n // Update form values after reset\r\n this.state.form.patchValue(data);\r\n \r\n console.log('[BaseFormComponent] Form state updated:', {\r\n fields: this.state.fields,\r\n formValue: this.state.form.value,\r\n currentData: this.state.currentData\r\n });\r\n }\r\n }\r\n\r\n private updateCurrentData(): void {\r\n this.state.currentData = {\r\n ...this.state.form.value,\r\n uuid: this.state.originalData?.uuid\r\n };\r\n }\r\n\r\n private checkFormChanges(): void {\r\n this.state.hasChanges = this.hasFormChanges(this.state.currentData);\r\n }\r\n\r\n protected updateFormState(data: T): void {\r\n this.state = {\r\n ...this.state,\r\n currentData: { ...data },\r\n originalData: data,\r\n isNew: false,\r\n loading: false\r\n };\r\n this.state.form.patchValue(data, { emitEvent: false });\r\n }\r\n\r\n private handleInitError(error: any): void {\r\n console.error('Form initialization error:', error);\r\n this.notificationService.showError(AppMessages.FORM.ERROR.INIT);\r\n this.state.loading = false;\r\n }\r\n\r\n private handleLoadError(error: any): void {\r\n const entityName = this.getEntityName();\r\n console.error(`Error loading ${entityName}:`, error);\r\n this.notificationService.showError(\r\n `${AppMessages.FORM.ERROR.LOAD} ${entityName}`\r\n );\r\n this.state.loading = false;\r\n }\r\n\r\n protected patchFormData(data: any) {\r\n this.formData = data;\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n } else if (this.isValidPageMode(routeMode)) {\r\n this.state.mode = routeMode;\r\n } else {\r\n throw new Error(`Invalid page mode: ${routeMode}`);\r\n }\r\n }\r\n\r\n private setupFormState() {\r\n this.state.fields = this.getFormlyFieldConfig();\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.state.form.disable();\r\n }\r\n }\r\n\r\n private onFormReady(): void {\r\n console.log('[BaseFormComponent] Form initialized successfully');\r\n }\r\n\r\n protected getFormlyFieldConfig(): FormlyFieldConfig[] {\r\n return this.formlyConfigService.getFormConfig(\r\n this.getJsonFields(),\r\n this.state.mode,\r\n this.getDropdownOptions()\r\n );\r\n }\r\n\r\n protected onSubmitRoute(): string[] {\r\n return [`/${this.getEntityName().toLowerCase()}s`];\r\n }\r\n\r\n protected getEntityOperations(): {\r\n create: (data: Omit<T, typeof AppConstants.FORM.UUID>) => Observable<T>;\r\n update: (uuid: string, data: Omit<T, typeof AppConstants.FORM.UUID>) => Observable<T>;\r\n getById: (uuid: string) => Observable<T>;\r\n } {\r\n const entityService = this.getEntityService();\r\n return {\r\n create: (data) => entityService.create(data),\r\n update: (uuid, data) => entityService.update(uuid, { ...data, uuid } as T),\r\n getById: (uuid) => entityService.getById(uuid)\r\n };\r\n }\r\n\r\n protected onSubmit(): void {\r\n if (!this.validateSubmission()) {\r\n return;\r\n }\r\n\r\n this.state.loading = true;\r\n const operation$ = this.getSubmitOperation();\r\n\r\n operation$\r\n .pipe(\r\n finalize(() => this.state.loading = false),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => this.handleSubmitSuccess(),\r\n error: error => this.handleSubmitError(error)\r\n });\r\n }\r\n\r\n private validateSubmission(): boolean {\r\n if (!this.state.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n if (!this.state.hasChanges && !this.state.isNew) {\r\n this.notificationService.showSuccess('No changes to save');\r\n return false;\r\n }\r\n\r\n if (!this.state.currentData || Object.keys(this.state.currentData).length === 0) {\r\n this.notificationService.showError('No data to save');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private getSubmitOperation(): Observable<T> {\r\n const formData = this.state.currentData as Omit<T, typeof AppConstants.FORM.UUID>;\r\n const operations = this.getEntityOperations();\r\n\r\n return this.state.isNew\r\n ? operations.create(formData)\r\n : operations.update(this.state.originalData!.uuid, formData);\r\n }\r\n\r\n private handleSubmitSuccess(): void {\r\n const entityName = this.getEntityName();\r\n this.notificationService.showSuccess(`${entityName} ${AppMessages.FORM.SUCCESS.SAVE}`);\r\n this.router.navigate(this.onSubmitRoute());\r\n }\r\n\r\n private handleSubmitError(error: any): void {\r\n const entityName = this.getEntityName();\r\n const errorMessage = error.error?.message || `${AppMessages.FORM.ERROR.SAVE} ${entityName}`;\r\n this.showError(errorMessage);\r\n }\r\n\r\n protected hasFormChanges(currentData: any): boolean {\r\n if (!this.state.originalData || this.state.isNew) {\r\n return true;\r\n }\r\n\r\n console.log('[BaseFormComponent] Checking for changes:', {\r\n currentData,\r\n originalData: this.state.originalData\r\n });\r\n\r\n const hasChanges = Object.keys(currentData).some(key => {\r\n const currentValue = currentData[key];\r\n const originalValue = (this.state.originalData as any)[key];\r\n const changed = currentValue !== originalValue;\r\n \r\n if (changed) {\r\n console.log(`[BaseFormComponent] Field '${key}' changed:`, {\r\n from: originalValue,\r\n to: currentValue\r\n });\r\n }\r\n \r\n return changed;\r\n });\r\n\r\n console.log('[BaseFormComponent] Changes detected:', hasChanges);\r\n return hasChanges;\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n protected abstract getEntityService(): EntityService<T>;\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n protected getDropdownOptions(): Record<string, any> {\r\n return {};\r\n }\r\n\r\n protected abstract getJsonFields(): any;\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Checks if the component is running in a specific context\r\n * @param contextType The context type to check against\r\n */\r\n protected isInContext(contextType: ComponentContext): boolean {\r\n return this.state.context === contextType;\r\n }\r\n}\r\n","export enum TableColumnDatatype {\r\n STRING = 'STRING',\r\n NUMBER = 'NUMBER',\r\n DATE = 'DATE',\r\n BOOLEAN = 'BOOLEAN'\r\n}\r\n","import { OnInit, OnDestroy, ViewChild, Directive } from '@angular/core';\r\nimport { Table, TableLazyLoadEvent } from 'primeng/table';\r\nimport { Subscription, Observable } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { FilterCriteria, FilterOperator } from '../models/pagination/filter-criteria.interface';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { TableColumnDatatype } from '../models/pagination/table-column-datatype.enum';\r\n\r\n/**\r\n * Base component for all table components in the application.\r\n * Provides common functionality for table operations like loading data,\r\n * pagination, sorting, and filtering.\r\n */\r\n@Directive()\r\nexport abstract class BaseTableComponent<T extends { uuid: string }> extends BasePageComponent {\r\n @ViewChild('dt') table!: Table;\r\n items: T[] = [];\r\n rows: number = 10;\r\n totalRecords: number = 0;\r\n filters: FilterCriteria[] = [];\r\n protected columns: any[] = [];\r\n protected subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n protected override utilsService: UtilsService,\r\n protected override notificationService: NotificationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Initialize the component and load initial data\r\n */\r\n ngOnInit() {\r\n // Subscribe to loading state if available\r\n const loadingObservable = this.getLoadingObservable();\r\n if (loadingObservable) {\r\n this.subscriptions.push(\r\n loadingObservable.subscribe(\r\n isLoading => this.loading = isLoading\r\n )\r\n );\r\n }\r\n this.loadData();\r\n }\r\n\r\n /**\r\n * Clean up any subscriptions when the component is destroyed\r\n */\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(sub => sub.unsubscribe());\r\n }\r\n\r\n /**\r\n * Handle search event from the UI\r\n * @param event The search event\r\n */\r\n onSearch(event: Event): void {\r\n const element = event.target as HTMLInputElement;\r\n if (this.table) {\r\n this.table.filterGlobal(element.value, 'contains');\r\n }\r\n }\r\n\r\n /**\r\n * Load data with pagination and sorting\r\n * @param event The lazy load event from PrimeNG table\r\n */\r\n loadData(event?: TableLazyLoadEvent) {\r\n console.log('LoadData called with event:', event);\r\n this.loading = true;\r\n\r\n // Create page request with default values\r\n const pageRequest: PageRequest = {\r\n page: 0,\r\n size: 10,\r\n sorts: [],\r\n filters: []\r\n };\r\n\r\n if (event) {\r\n // Handle pagination\r\n if (event.first !== undefined && event.rows) {\r\n pageRequest.page = Math.floor(event.first / event.rows);\r\n pageRequest.size = event.rows;\r\n }\r\n\r\n // Handle sorting\r\n if (event.sortField) {\r\n pageRequest.sorts = [{\r\n field: Array.isArray(event.sortField) ? event.sortField[0] : event.sortField,\r\n direction: event.sortOrder === 1 ? 'asc' : 'desc'\r\n }];\r\n }\r\n\r\n // Handle filtering\r\n if (event.filters) {\r\n const convertedFilters = this.convertFilters(event.filters);\r\n console.log('Converted filters:', convertedFilters);\r\n pageRequest.filters = convertedFilters;\r\n }\r\n }\r\n\r\n console.log('Sending page request:', pageRequest);\r\n\r\n this.getEntityService().getAll(pageRequest)\r\n .pipe(finalize(() => this.loading = false))\r\n .subscribe({\r\n next: (response: Page<T>) => {\r\n this.items = [...response.content];\r\n this.totalRecords = response.totalElements;\r\n this.rows = response.pageable.pageSize;\r\n },\r\n error: (error) => {\r\n console.error('Failed to load data:', error);\r\n this.showError(`Failed to load data`);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Convert PrimeNG filters to backend format with proper operator mapping\r\n */\r\n protected convertFilters(filters: { [key: string]: any }): FilterCriteria[] {\r\n const backendFilters: FilterCriteria[] = [];\r\n if (!filters) return backendFilters;\r\n\r\n // Dynamically map field to datatype using column definitions\r\n const getColumnDatatype = (field: string): TableColumnDatatype => {\r\n // Assumes this.columns is an array of column definitions with 'field' and 'type'\r\n if (!this['columns']) return TableColumnDatatype.STRING;\r\n const col = this['columns'].find((c: any) => c.field === field);\r\n if (!col) return TableColumnDatatype.STRING;\r\n switch (col.type) {\r\n case 'text':\r\n case 'string':\r\n return TableColumnDatatype.STRING;\r\n case 'numeric':\r\n case 'number':\r\n return TableColumnDatatype.NUMBER;\r\n case 'date':\r\n return TableColumnDatatype.DATE;\r\n case 'boolean':\r\n return TableColumnDatatype.BOOLEAN;\r\n default:\r\n return TableColumnDatatype.STRING;\r\n }\r\n };\r\n\r\n console.log('Raw PrimeNG filters:', filters);\r\n\r\n Object.entries(filters).forEach(([key, filterMeta]) => {\r\n console.log(`Processing filter for ${key}:`, filterMeta);\r\n\r\n const datatype = getColumnDatatype(key);\r\n\r\n // Handle array of filter metadata (multiple filters for same column)\r\n if (Array.isArray(filterMeta)) {\r\n const validFilters = filterMeta\r\n .filter(meta => meta.value !== null && meta.value !== undefined && meta.value !== '')\r\n .map(meta => ({\r\n field: key,\r\n value: this.transformFilterValue(String(meta.value)),\r\n operator: this.transformOperator(meta.matchMode),\r\n datatype\r\n }));\r\n backendFilters.push(...validFilters);\r\n }\r\n // Handle single filter metadata\r\n else if (filterMeta?.value !== null && filterMeta?.value !== undefined && filterMeta?.value !== '') {\r\n backendFilters.push({\r\n field: key,\r\n value: this.transformFilterValue(String(filterMeta.value)),\r\n operator: this.transformOperator(filterMeta.matchMode),\r\n datatype\r\n });\r\n }\r\n });\r\n\r\n console.log('Converted filters:', backendFilters);\r\n return backendFilters;\r\n }\r\n\r\n /**\r\n * Transform filter value based on backend requirements - all values must be strings\r\n */\r\n protected transformFilterValue(value: any): string {\r\n if (value === null || value === undefined) {\r\n return '';\r\n }\r\n if (typeof value === 'string') {\r\n return value.trim();\r\n }\r\n if (Array.isArray(value)) {\r\n return value.join(',');\r\n }\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n if (typeof value === 'number' || typeof value === 'boolean') {\r\n return value.toString();\r\n }\r\n return String(value);\r\n }\r\n\r\n /**\r\n * Map PrimeNG operators to backend operators\r\n */\r\n protected transformOperator(operator: string): FilterOperator {\r\n const operatorMap: { [key: string]: FilterOperator } = {\r\n 'contains': 'CONTAINS',\r\n 'startsWith': 'STARTS_WITH',\r\n 'endsWith': 'ENDS_WITH',\r\n 'equals': 'EQUALS',\r\n 'notEquals': 'NOT_EQUALS',\r\n 'gt': 'GREATER_THAN',\r\n 'gte': 'GREATER_THAN_EQUALS',\r\n 'lt': 'LESS_THAN',\r\n 'lte': 'LESS_THAN_EQUALS'\r\n };\r\n return operatorMap[operator] || 'EQUALS'; // Default to EQUALS if operator not found\r\n }\r\n\r\n /**\r\n * Get an observable for loading state from the entity service\r\n * @returns An observable of loading state if available, null otherwise\r\n */\r\n protected getLoadingObservable(): Observable<boolean> | null {\r\n const service = this.getEntityService() as any;\r\n return service.loading$ || null;\r\n }\r\n\r\n /**\r\n * Get the entity service for data operations\r\n */\r\n protected abstract getEntityService(): {\r\n getAll: (pageRequest?: PageRequest) => Observable<Page<T>>;\r\n };\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { Observable } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\n\r\n/**\r\n * Base component for all list page components in the application.\r\n * Provides common functionality for list operations like CRUD operations\r\n * while inheriting table functionality from BaseTableComponent.\r\n */\r\n@Directive()\r\nexport abstract class BaseListPageComponent<T extends { uuid: string }> extends BaseTableComponent<T> {\r\n actionLoading: boolean = false;\r\n\r\n constructor(\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected confirmationService: ConfirmationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Navigate to create a new entity\r\n */\r\n public onCreate(): void {\r\n // Navigate to the form route and pass the mode as a query parameter\r\n this.navigateTo([this.getFormRoute()], { [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.CREATE });\r\n }\r\n\r\n /**\r\n * Navigate to view an entity\r\n * @param item The entity to view\r\n */\r\n onView(item: T) {\r\n if (!this.validateItemUuid(item, 'view')) return;\r\n // Navigate to form route, pass mode and uuid as query params\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.VIEW, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Navigate to edit an entity\r\n * @param item The entity to edit\r\n */\r\n onEdit(item: T) {\r\n if (!this.validateItemUuid(item, 'edit')) return;\r\n // Navigate to form route, pass mode and uuid as query params\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.EDIT, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Delete an entity with confirmation\r\n * @param item The entity to delete\r\n */\r\n onDelete(item: T) {\r\n if (!this.validateItemUuid(item, 'delete')) return;\r\n\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete this ${this.getEntityName()}?`,\r\n header: 'Confirm Deletion',\r\n icon: 'pi pi-exclamation-triangle',\r\n accept: () => {\r\n this.actionLoading = true;\r\n this.getEntityService().delete(item.uuid)\r\n .pipe(finalize(() => this.actionLoading = false))\r\n .subscribe({\r\n next: () => {\r\n this.showSuccess(`${this.getEntityName()} ${AppMessages.LIST.SUCCESS.DELETE}`);\r\n this.loadData();\r\n },\r\n error: (error) => {\r\n console.error('Delete failed:', error);\r\n this.showError(`${AppMessages.LIST.ERROR.DELETE} ${this.getEntityName()}`);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n \r\n /**\r\n * Navigate to a route with error handling\r\n * @param path The route path\r\n * @param matrixParams Optional matrix parameters\r\n */\r\n protected navigateTo(path: any[], matrixParams?: { [key: string]: any }): void {\r\n this.router.navigate(path, { queryParams: matrixParams })\r\n .catch(error => {\r\n console.error('Navigation error:', error);\r\n this.showError(AppMessages.LIST.ERROR.NAVIGATION);\r\n });\r\n }\r\n\r\n /**\r\n * Validate that an entity has a UUID\r\n * @param item The entity to validate\r\n * @param action The action being performed\r\n * @returns true if valid, false otherwise\r\n */\r\n protected validateItemUuid(item: T, action: string): boolean {\r\n if (!item?.uuid) {\r\n this.showError(`${AppMessages.LIST.ERROR.INVALID_ID} ${action}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Override the getEntityService to include the delete operation\r\n */\r\n protected abstract override getEntityService(): {\r\n getAll: (pageRequest?: any) => Observable<any>;\r\n delete: (uuid: string) => Observable<any>;\r\n };\r\n\r\n /**\r\n * Get the entity name for display in messages\r\n */\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Get the route to the entity form\r\n */\r\n protected abstract getFormRoute(): string;\r\n}\r\n","import { Component, OnInit, OnDestroy, Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { Observable, Subject, ReplaySubject, take, map, takeUntil, distinctUntilChanged, catchError, of } from 'rxjs';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\n\r\nimport { TabConfig } from '../states/tabbed-form.state';\r\nimport { ListTabbedFormState } from '../states/list-tabbed-form.state';\r\n\r\ninterface TabState<T> {\r\n activeTab: string;\r\n currentData: T;\r\n originalData: T | null;\r\n}\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseListTabbedFormComponent<T extends { uuid: string }>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n private readonly tabState$ = new ReplaySubject<TabState<T>>(1);\r\n\r\n public state: ListTabbedFormState<T> & FormComponentState<T> = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.TABBED,\r\n activeTab: '',\r\n tabs: [],\r\n formDataList: []\r\n };\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFormFromQueryParams();\r\n this.setupTabStateSubscription();\r\n this.setupRouteParamsSubscription();\r\n }\r\n\r\n private initializeFormFromQueryParams(): void {\r\n this.route.queryParams.pipe(\r\n take(1),\r\n catchError(error => {\r\n console.error('Error initializing form:', error);\r\n this.showError(AppMessages.FORM.ERROR.INIT);\r\n throw error;\r\n }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(params => this.initializeForm(params));\r\n }\r\n\r\n private setupTabStateSubscription(): void {\r\n this.tabState$.pipe(\r\n distinctUntilChanged((prev, curr) => \r\n prev.activeTab === curr.activeTab && \r\n prev.currentData?.uuid === curr.currentData?.uuid\r\n ),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(state => {\r\n this.updateComponentState(state);\r\n });\r\n }\r\n\r\n private setupRouteParamsSubscription(): void {\r\n this.route.params.pipe(\r\n takeUntil(this.destroyed$)\r\n ).subscribe(params => {\r\n const uuid = params['id'];\r\n if (uuid && this.state.formDataList?.length) {\r\n this.handleTabChange(uuid);\r\n }\r\n });\r\n }\r\n\r\n private handleTabChange(uuid: string): void {\r\n const selectedData = this.findTabData(uuid);\r\n if (selectedData) {\r\n this.tabState$.next({\r\n activeTab: uuid,\r\n currentData: selectedData,\r\n originalData: { ...selectedData }\r\n });\r\n } else {\r\n console.warn(`[BaseListTabbedFormComponent] Tab data not found for uuid: ${uuid}`);\r\n }\r\n }\r\n\r\n private findTabData(uuid: string): T | undefined {\r\n return this.state.formDataList.find(data => data.uuid === uuid);\r\n }\r\n\r\n private updateComponentState(tabState: TabState<T>): void {\r\n this.state = {\r\n ...this.state,\r\n activeTab: tabState.activeTab,\r\n currentData: tabState.currentData,\r\n originalData: tabState.originalData\r\n };\r\n }\r\n\r\n private initializeForm(params: any) {\r\n try {\r\n const routeMode = params[AppConstants.FORM.MODE];\r\n this.initializeFormMode(routeMode);\r\n this.setupFormState();\r\n this.initializeListForm();\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n console.error('Error initializing form:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.INIT}: ${errorMessage}`);\r\n throw error; // Re-throw to trigger error handling in the subscription\r\n }\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n return;\r\n }\r\n\r\n if (!this.isValidPageMode(routeMode)) {\r\n const validModes = Object.values(AppConstants.PAGE_MODE).join(', ');\r\n throw new Error(`Invalid page mode: ${routeMode}. Valid modes are: ${validModes}`);\r\n }\r\n\r\n this.state.mode = routeMode;\r\n }\r\n\r\n private setupFormState() {\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n }\r\n\r\n protected initializeListForm() {\r\n const routerState = this.router.getCurrentNavigation()?.extras?.state || window.history.state;\r\n const formDataList = routerState?.formDataList;\r\n\r\n if (!formDataList?.length) {\r\n throw new Error('formDataList is required in state for LIST type');\r\n }\r\n\r\n this.state.formDataList = [...formDataList]; // Create a new array to avoid reference issues\r\n this.state.tabs = this.createTabsFromFormDataList(this.state.formDataList);\r\n \r\n const firstTab = this.state.tabs[0].value;\r\n const firstItem = this.state.formDataList[0];\r\n\r\n // Initialize tab state\r\n this.tabState$.next({\r\n activeTab: firstTab,\r\n currentData: firstItem,\r\n originalData: { ...firstItem }\r\n });\r\n\r\n // Navigate to the first tab\r\n this.navigateToTab(firstTab);\r\n }\r\n\r\n private createTabsFromFormDataList(formDataList: T[]): TabConfig[] {\r\n return formDataList.map((data: T) => ({\r\n value: data.uuid,\r\n title: this.getTabTitle(data)\r\n }));\r\n }\r\n\r\n protected onTabChange(event: any): void {\r\n const uuid = event?.toString() || '';\r\n console.log('[BaseListTabbedFormComponent] Tab change event:', uuid);\r\n \r\n const selectedData = this.findTabData(uuid);\r\n if (selectedData) {\r\n this.handleTabChange(uuid);\r\n this.navigateToTab(uuid);\r\n } else {\r\n console.warn(`[BaseListTabbedFormComponent] Tab data not found for uuid: ${uuid}`);\r\n }\r\n }\r\n\r\n protected navigateToTab(uuid: string): void {\r\n const selectedData = this.findTabData(uuid);\r\n if (!selectedData) {\r\n console.error(`[BaseListTabbedFormComponent] Cannot navigate: No data found for uuid ${uuid}`);\r\n return;\r\n }\r\n\r\n this.router.navigate([uuid], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData: selectedData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n this.tabState$.complete();\r\n }\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n // Abstract methods that must be implemented by child classes\r\n protected abstract getTabTitle(data: T): string;\r\n}\r\n","import { Component, OnInit, OnDestroy, Injectable } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { Observable, Subject, BehaviorSubject, take, map, takeUntil, catchError, finalize, tap, of } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { TabConfig, TabbedFormState } from '../states/tabbed-form.state';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseTabbedFormComponent<T extends BaseModel>\r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n private readonly destroyed$ = new Subject<void>();\r\n private readonly stateManager$ = new BehaviorSubject<TabbedFormState<T>>(this.getInitialState());\r\n\r\n private getInitialState(): TabbedFormState<T> {\r\n return {\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n context: ComponentContext.TABBED,\r\n activeTab: '',\r\n tabs: []\r\n };\r\n }\r\n\r\n protected get state(): TabbedFormState<T> {\r\n return this.stateManager$.value;\r\n }\r\n\r\n protected set state(value: TabbedFormState<T>) {\r\n // Only emit if there are actual changes\r\n if (this.hasStateChanged(this.state, value)) {\r\n this.stateManager$.next(value);\r\n }\r\n }\r\n\r\n private hasStateChanged(current: TabbedFormState<T>, next: TabbedFormState<T>): boolean {\r\n // Quick reference check\r\n if (current === next) return false;\r\n\r\n // Check essential properties that affect rendering\r\n return current.loading !== next.loading ||\r\n current.activeTab !== next.activeTab ||\r\n current.hasChanges !== next.hasChanges ||\r\n current.mode !== next.mode ||\r\n current.isNew !== next.isNew ||\r\n !this.areTabsEqual(current.tabs, next.tabs) ||\r\n this.detectChanges(current.currentData, next.currentData);\r\n }\r\n\r\n private areTabsEqual(current: TabConfig[], next: TabConfig[]): boolean {\r\n if (current === next) return true;\r\n if (current.length !== next.length) return false;\r\n return current.every((tab, index) => \r\n tab.value === next[index].value && \r\n tab.isParentModel === next[index].isParentModel\r\n );\r\n }\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFormWithErrorHandling();\r\n this.setupStateSubscription();\r\n }\r\n\r\n private initializeFormWithErrorHandling(): void {\r\n // Initialize tabs first\r\n const tabs = this.getTabs();\r\n this.state = {\r\n ...this.state,\r\n tabs,\r\n activeTab: tabs[0]?.value || ''\r\n };\r\n\r\n // Then initialize form\r\n this.route.queryParams.pipe(\r\n take(1),\r\n tap(() => this.state = { ...this.state, loading: true }),\r\n tap(params => this.initializeForm(params)),\r\n map(() => void 0),\r\n catchError(error => {\r\n console.error('Error initializing form:', error);\r\n this.showError(AppMessages.FORM.ERROR.INIT);\r\n return of(void 0);\r\n }),\r\n finalize(() => this.state = { ...this.state, loading: false }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe();\r\n }\r\n\r\n private setupStateSubscription(): void {\r\n this.stateManager$.pipe(\r\n distinctUntilChanged((prev, curr) => !this.hasStateChanged(prev, curr)),\r\n takeUntil(this.destroyed$)\r\n ).subscribe(state => {\r\n this.handleStateChange(state);\r\n });\r\n }\r\n\r\n private handleStateChange(state: TabbedFormState<T>): void {\r\n // Track significant state changes\r\n const stateUpdates: string[] = [];\r\n\r\n if (state.loading) {\r\n stateUpdates.push('loading');\r\n }\r\n if (state.hasChanges) {\r\n stateUpdates.push('hasChanges');\r\n }\r\n if (state.activeTab) {\r\n stateUpdates.push('activeTab');\r\n }\r\n\r\n if (stateUpdates.length > 0) {\r\n console.log('[BaseTabbedFormComponent] State updated:', {\r\n updates: stateUpdates,\r\n activeTab: state.activeTab,\r\n loading: state.loading,\r\n hasChanges: state.hasChanges\r\n });\r\n }\r\n }\r\n\r\n\r\n private initializeFormData() {\r\n console.log('[BaseTabbedFormComponent] Initializing form data');\r\n console.log('[BaseTabbedFormComponent] Current mode:', this.state.mode);\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n console.log('[BaseTabbedFormComponent] Create mode, using defaults');\r\n this.loadDefaultTab();\r\n return;\r\n }\r\n\r\n const state = {\r\n ...this.router.getCurrentNavigation()?.extras?.state,\r\n ...window.history.state\r\n } as { formData?: T };\r\n\r\n console.log('[BaseTabbedFormComponent] Combined state:', state);\r\n\r\n if (state?.formData) {\r\n console.log('[BaseTabbedFormComponent] Found form data in state:', state.formData);\r\n this.patchFormData(state.formData);\r\n this.loadDefaultTab();\r\n } else {\r\n console.log('[BaseTabbedFormComponent] No form data, loading from UUID');\r\n this.loadFromUuid();\r\n }\r\n }\r\n\r\n private loadFromUuid(): void {\r\n this.route.queryParams.pipe(\r\n take(1),\r\n map((params: { [key: string]: string }) => {\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (!uuid) {\r\n throw new Error(`UUID is required for ${this.state.mode} mode when no formData is provided`);\r\n }\r\n return uuid;\r\n }),\r\n tap(() => this.state = { ...this.state, loading: true }),\r\n tap(uuid => this.loadEntity(uuid)),\r\n catchError(error => {\r\n console.error('Error loading UUID:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.LOAD} UUID`);\r\n return of(void 0);\r\n }),\r\n finalize(() => this.state = { ...this.state, loading: false }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe();\r\n }\r\n\r\n private initializeForm(params: any) {\r\n const routeMode = params[AppConstants.FORM.MODE];\r\n\r\n try {\r\n this.initializeFormMode(routeMode);\r\n this.setupFormState();\r\n this.initializeFormData();\r\n } catch (error) {\r\n console.error('Error initializing form:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.INIT}: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n protected patchFormData(data: T | null) {\r\n if (data) {\r\n this.state.currentData = { ...data };\r\n this.state.originalData = { ...data }; // Create a deep copy to avoid reference issues\r\n this.state.isNew = false;\r\n }\r\n }\r\n\r\n private initializeFormMode(routeMode: string | undefined) {\r\n if (!routeMode) {\r\n this.state.mode = AppConstants.PAGE_MODE.CREATE;\r\n return;\r\n }\r\n\r\n // Validate mode more explicitly\r\n if (!this.isValidPageMode(routeMode)) {\r\n const validModes = Object.values(AppConstants.PAGE_MODE).join(', ');\r\n throw new Error(`Invalid page mode: ${routeMode}. Valid modes are: ${validModes}`);\r\n }\r\n\r\n this.state.mode = routeMode;\r\n }\r\n\r\n private setupFormState() {\r\n console.log('[BaseTabbedFormComponent] Setting up form state, mode:', this.state.mode);\r\n\r\n if (this.state.mode === AppConstants.PAGE_MODE.CREATE) {\r\n console.log('[BaseTabbedFormComponent] Create mode setup');\r\n this.state.isNew = true;\r\n this.state.loading = false;\r\n this.state.originalData = null;\r\n }\r\n }\r\n\r\n protected loadEntity(uuid: string): void {\r\n const entityName = this.getEntityName();\r\n\r\n this.getEntityService().getById(uuid).pipe(\r\n tap(() => this.state = { \r\n ...this.state, \r\n loading: true,\r\n isNew: false \r\n }),\r\n takeUntil(this.destroyed$)\r\n ).subscribe({\r\n next: (data: T) => {\r\n this.state = {\r\n ...this.state,\r\n originalData: data,\r\n currentData: { ...data },\r\n loading: false\r\n };\r\n console.log('[BaseTabbedFormComponent] Data loaded:', { original: data, current: this.state.currentData });\r\n this.loadDefaultTab();\r\n },\r\n error: (error: Error) => {\r\n console.error('[BaseTabbedFormComponent] Error loading entity:', error);\r\n this.showError(`${AppMessages.FORM.ERROR.LOAD} ${entityName}`);\r\n this.state = { ...this.state, loading: false };\r\n }\r\n });\r\n }\r\n\r\n protected findTabByValue(value: string): TabConfig | undefined {\r\n return this.state.tabs.find((tab: TabConfig) => tab.value === value);\r\n }\r\n\r\n protected loadDefaultTab() {\r\n console.log('[BaseTabbedFormComponent] Loading default tab');\r\n const defaultTab = this.state.tabs.find((tab: TabConfig) => tab.isParentModel) || this.state.tabs[0];\r\n\r\n if (!defaultTab) return;\r\n\r\n const formData = this.getTabFormData(defaultTab);\r\n\r\n this.router.navigate([defaultTab.value], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData,\r\n parentFormData: this.state.currentData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n protected getTabFormData(tabConfig: TabConfig): T | null {\r\n if (!tabConfig) return null;\r\n\r\n if (tabConfig.isParentModel) {\r\n return this.state.currentData;\r\n }\r\n\r\n const fieldName = this.utilsService.toCamelCase(tabConfig.value);\r\n const nestedData = (this.state.currentData as Record<string, unknown>)[fieldName];\r\n \r\n if (this.isTabFormData(nestedData)) {\r\n return nestedData;\r\n }\r\n\r\n console.warn(`Invalid tab form data for field: ${fieldName}`, nestedData);\r\n return null;\r\n }\r\n\r\n private isTabFormData(data: unknown): data is T {\r\n return data != null && \r\n typeof data === 'object' && \r\n 'uuid' in data &&\r\n typeof (data as T).uuid === 'string';\r\n }\r\n\r\n protected onTabChange(value: string | number): void {\r\n const tabConfig = this.findTabByValue(value as string);\r\n if (!tabConfig) {\r\n console.warn(`Tab not found: ${value}`);\r\n return;\r\n }\r\n\r\n this.state.activeTab = tabConfig.value;\r\n const formData = this.getTabFormData(tabConfig);\r\n\r\n this.router.navigate([this.state.activeTab], {\r\n relativeTo: this.route,\r\n queryParamsHandling: 'preserve',\r\n state: {\r\n formData: formData,\r\n parentFormData: this.state.currentData,\r\n context: ComponentContext.TABBED\r\n }\r\n });\r\n }\r\n\r\n protected hasFormChanges(currentData: T): boolean {\r\n if (this.state.isNew || !this.state.originalData) {\r\n return true;\r\n }\r\n return this.detectChanges(currentData, this.state.originalData);\r\n }\r\n\r\n private detectChanges(current: T, original: T): boolean {\r\n try {\r\n return JSON.stringify(current) !== JSON.stringify(original);\r\n } catch (error) {\r\n console.error('[BaseTabbedFormComponent] Error comparing objects:', error);\r\n // Fallback to basic comparison if JSON.stringify fails\r\n return Object.keys(current as Record<string, unknown>).some(key => \r\n (current as Record<string, unknown>)[key] !== (original as Record<string, unknown>)[key]\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n this.stateManager$.complete();\r\n }\r\n\r\n private isValidPageMode(mode: string): mode is PageMode {\r\n return Object.values(AppConstants.PAGE_MODE).includes(mode as PageMode);\r\n }\r\n\r\n // Abstract methods that must be implemented by child classes\r\n protected abstract getTabs(): TabConfig[];\r\n protected abstract getEntityService(): EntityService<T>;\r\n protected abstract getEntityName(): string;\r\n protected getTabTitle(data: T): string {\r\n throw new Error('Method not implemented.');\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { finalize, debounceTime } from 'rxjs/operators';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { BaseTableComponent } from './base-table.component';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { TaskEntityService } from '../services/task-entity-service.interface';\r\nimport { BaseTask } from '../models/base-task.model';\r\n\r\n/**\r\n * Base component for all task dashboard components in the application.\r\n * Provides common functionality for task management operations while\r\n * inheriting table functionality from BaseTableComponent.\r\n *\r\n * @deprecated Depends on {@link TaskEntityService}, which targets a Java controller\r\n * (`BaseTaskController`) that no longer exists — see that interface's `@deprecated` note. Build\r\n * queue/dashboard UIs against `WorkflowEngineApiService` from `workflow-engine/` instead, which\r\n * targets `workflow-engine-lib`'s actual `/workflow/queue` endpoints.\r\n */\r\n@Directive()\r\nexport abstract class BaseTaskDashboardComponent<\r\n T extends BaseTask,\r\n S extends string = string,\r\n E extends string = string\r\n> extends BaseTableComponent<T> {\r\n \r\n actionLoading: boolean = false;\r\n protected taskStatuses: any[] = [];\r\n protected taskPriorities: any[] = [];\r\n protected assignedToOptions: any[] = [];\r\n protected dateRange: { start: Date | null; end: Date | null } = {\r\n start: null,\r\n end: null\r\n };\r\n // Removed skipNextLoadData and loadDataSubject\r\n\r\n constructor(\r\n protected entityService: TaskEntityService<T, S, E>,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected confirmationService: ConfirmationService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n /**\r\n * Initialize the component and handle loading state subscription\r\n */\r\n override ngOnInit() {\r\n const loadingObservable = this.getLoadingObservable();\r\n if (loadingObservable) {\r\n this.subscriptions.push(\r\n loadingObservable.subscribe(\r\n isLoading => this.loading = isLoading\r\n )\r\n );\r\n }\r\n this.loadReferenceData();\r\n }\r\n\r\n /**\r\n * Direct loadData call, no debounce or skip logic\r\n */\r\n override loadData(event?: any): void {\r\n super.loadData(event);\r\n }\r\n\r\n /**\r\n * Cleanup resources\r\n */\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n }\r\n\r\n /**\r\n * Load all reference data needed for the task dashboard\r\n */\r\n protected loadReferenceData(): void {\r\n \r\n }\r\n\r\n /**\r\n * Create a new task\r\n */\r\n public onCreate(): void {\r\n this.navigateTo([this.getFormRoute()], { [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.CREATE });\r\n }\r\n\r\n /**\r\n * Navigate to view a task\r\n * @param item The task to view\r\n */\r\n onView(item: T) {\r\n if (!this.validateItemUuid(item, 'view')) return;\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.VIEW, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Navigate to edit a task\r\n * @param item The task to edit\r\n */\r\n onEdit(item: T) {\r\n if (!this.validateItemUuid(item, 'edit')) return;\r\n this.navigateTo([this.getFormRoute()], { \r\n [AppConstants.FORM.MODE]: AppConstants.PAGE_MODE.EDIT, \r\n [AppConstants.FORM.UUID]: item.uuid \r\n });\r\n }\r\n\r\n /**\r\n * Delete a task with confirmation\r\n * @param item The task to delete\r\n */\r\n onDelete(item: T) {\r\n if (!this.validateItemUuid(item, 'delete')) return;\r\n\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete this ${this.getEntityName()}?`,\r\n header: 'Confirm Deletion',\r\n icon: 'pi pi-exclamation-triangle',\r\n accept: () => {\r\n this.actionLoading = true;\r\n this.entityService.delete(item.uuid)\r\n .pipe(finalize(() => this.actionLoading = false))\r\n .subscribe({\r\n next: () => {\r\n this.showSuccess(`${this.getEntityName()} ${AppMessages.LIST.SUCCESS.DELETE}`);\r\n this.loadData();\r\n },\r\n error: (error: Error) => {\r\n console.error('Delete failed:', error);\r\n this.showError(`${AppMessages.LIST.ERROR.DELETE} ${this.getEntityName()}`);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Navigate to a route with error handling\r\n * @param path The route path\r\n * @param matrixParams Optional matrix parameters\r\n */\r\n protected navigateTo(path: any[], matrixParams?: { [key: string]: any }): void {\r\n this.router.navigate(path, { queryParams: matrixParams })\r\n .catch(error => {\r\n console.error('Navigation error:', error);\r\n this.showError(AppMessages.LIST.ERROR.NAVIGATION);\r\n });\r\n }\r\n\r\n /**\r\n * Validate that an item has a UUID\r\n * @param item The item to validate\r\n * @param action The action being performed\r\n * @returns true if valid, false otherwise\r\n */\r\n protected validateItemUuid(item: T, action: string): boolean {\r\n if (!item?.uuid) {\r\n this.showError(`${AppMessages.LIST.ERROR.INVALID_ID} ${action}`);\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the entity name for display in messages\r\n */\r\n protected abstract getEntityName(): string;\r\n\r\n /**\r\n * Get the route to the entity form\r\n */\r\n protected abstract getFormRoute(): string;\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { finalize, map, take, debounceTime } from 'rxjs/operators';\r\nimport { AppConstants, PageMode } from '../constants/app.constants';\r\nimport { AppMessages } from '../constants/app.messages';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { EntityService } from './entity-service.interface';\r\nimport { FormlyConfigService } from './formly-config.service';\r\nimport { NotificationService } from './notification.service';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\nexport class FormService<T extends BaseModel> {\r\n public formState: FormComponentState<T>;\r\n\r\n constructor(\r\n private entityService: EntityService<T>,\r\n private formlyConfigService: FormlyConfigService,\r\n private notificationService: NotificationService,\r\n private entityName: string,\r\n private jsonFields: any,\r\n private dropdownOptions: Record<string, any> = {}\r\n ) {\r\n this.formState = {\r\n form: new FormGroup({}),\r\n fields: [],\r\n isNew: true,\r\n mode: AppConstants.PAGE_MODE.CREATE,\r\n currentData: {} as T,\r\n originalData: null,\r\n hasChanges: false,\r\n loading: false,\r\n };\r\n\r\n // Initialize form with debounced value changes subscription\r\n this.formState.form.valueChanges\r\n .pipe(debounceTime(300))\r\n .subscribe(() => this.handleFormChange());\r\n\r\n this.initializeForm();\r\n }\r\n\r\n private handleFormChange(): void {\r\n console.log('[FormService] Form value changed:', this.formState.form.value);\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n console.log('[FormService] Form state updated:', {\r\n currentData,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n private updateState(newState: Partial<FormComponentState<T>>): void {\r\n this.formState = {\r\n ...this.formState,\r\n ...newState\r\n };\r\n }\r\n\r\n private calculateHasChanges(currentData: any): boolean {\r\n if (!this.formState.originalData || this.formState.isNew) {\r\n return true;\r\n }\r\n\r\n return Object.keys(currentData).some(key => {\r\n const current = currentData[key];\r\n const original = (this.formState.originalData as any)[key];\r\n return current !== original;\r\n });\r\n }\r\n\r\n private initializeForm(): void {\r\n console.log('[FormService] Initializing form');\r\n \r\n // Initialize fields\r\n this.formState.fields = this.getFormlyFieldConfig();\r\n \r\n // Reset form and state\r\n this.formState.form.reset();\r\n this.formState.hasChanges = false;\r\n this.formState.currentData = {} as T;\r\n this.formState.originalData = null;\r\n \r\n // Set form mode\r\n if (this.formState.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\r\n } else {\r\n this.formState.form.enable();\r\n }\r\n \r\n console.log('[FormService] Form initialized:', {\r\n mode: this.formState.mode,\r\n fields: this.formState.fields.length,\r\n enabled: this.formState.form.enabled\r\n });\r\n }\r\n\r\n private getFormlyFieldConfig(): FormlyFieldConfig[] {\r\n return this.formlyConfigService.getFormConfig(\r\n this.jsonFields,\r\n this.formState.mode,\r\n this.dropdownOptions\r\n );\r\n }\r\n\r\n public loadData(uuid?: string): Observable<void> {\r\n if (!uuid || this.formState.mode === AppConstants.PAGE_MODE.CREATE) {\r\n return of(void 0);\r\n }\r\n\r\n this.formState.loading = true;\r\n return this.entityService.getById(uuid).pipe(\r\n take(1),\r\n map(data => {\r\n this.updateFormState(data);\r\n }),\r\n finalize(() => this.formState.loading = false)\r\n );\r\n }\r\n\r\n private updateFormState(data: T): void {\r\n console.log('[FormService] Updating form state, received data:', data);\r\n\r\n const form = this.formState.form;\r\n form.reset();\r\n\r\n this.updateState({\r\n form,\r\n currentData: { ...data },\r\n originalData: { ...data },\r\n isNew: false,\r\n loading: false,\r\n hasChanges: false\r\n });\r\n\r\n form.patchValue(data, { emitEvent: true });\r\n \r\n console.log('[FormService] Form state initialized:', {\r\n currentData: this.formState.currentData,\r\n formValue: form.value,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n public submit(): Observable<T> {\r\n if (!this.validateSubmission()) {\r\n return of(null as unknown as T);\r\n }\r\n\r\n this.formState.loading = true;\r\n const operation$ = this.getSubmitOperation();\r\n\r\n return operation$.pipe(\r\n finalize(() => this.formState.loading = false),\r\n map(result => {\r\n this.notificationService.showSuccess(\r\n `${this.entityName} ${AppMessages.FORM.SUCCESS.SAVE}`\r\n );\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n private validateSubmission(): boolean {\r\n console.log('[FormService] Validating submission state:', {\r\n formValid: this.formState.form.valid,\r\n hasChanges: this.formState.hasChanges,\r\n isNew: this.formState.isNew,\r\n currentData: this.formState.currentData,\r\n formValues: this.formState.form.value\r\n });\r\n\r\n if (!this.formState.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n // Force check for changes before submission\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n if (!this.formState.hasChanges && !this.formState.isNew) {\r\n console.log('[FormService] No changes detected during validation');\r\n this.notificationService.showSuccess('No changes to save');\r\n return false;\r\n }\r\n\r\n if (!this.formState.currentData || Object.keys(this.formState.currentData).length === 0) {\r\n this.notificationService.showError('No data to save');\r\n return false;\r\n }\r\n\r\n console.log('[FormService] Submission validation passed');\r\n return true;\r\n }\r\n\r\n private getSubmitOperation(): Observable<T> {\r\n const formData = this.formState.currentData as Omit<T, 'uuid'>;\r\n // Merge form data with original entity to preserve properties not present in the form\r\n const mergedData = { ...this.formState.originalData, ...formData };\r\n return this.formState.isNew\r\n ? this.entityService.create(formData)\r\n : this.entityService.update(this.formState.originalData!.uuid, mergedData);\r\n }\r\n\r\n public setMode(mode: PageMode): void {\r\n this.formState.mode = mode;\r\n if (mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\r\n } else {\r\n this.formState.form.enable();\r\n }\r\n }\r\n\r\n public getState(): FormComponentState<T> {\r\n return this.formState;\r\n }\r\n\r\n public patchValue(value: Partial<T>): void {\r\n console.log('[FormService] Patching value:', {\r\n incoming: value,\r\n current: this.formState.currentData,\r\n form: this.formState.form.value\r\n });\r\n\r\n // Deep copy incoming value\r\n const newValue = JSON.parse(JSON.stringify(value));\r\n\r\n // Update form while triggering change detection\r\n this.formState.form.patchValue(newValue, { emitEvent: true });\r\n\r\n // Force state update\r\n const formValue = this.formState.form.value;\r\n const currentData = {\r\n ...formValue,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n\r\n this.updateState({\r\n currentData,\r\n hasChanges: this.calculateHasChanges(currentData)\r\n });\r\n\r\n console.log('[FormService] After patch:', {\r\n formValue: this.formState.form.value,\r\n currentData: this.formState.currentData,\r\n originalData: this.formState.originalData,\r\n hasChanges: this.formState.hasChanges\r\n });\r\n }\r\n\r\n}\r\n","import { Directive, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, Subject, of } from 'rxjs';\r\nimport { takeUntil, switchMap, map, finalize } from 'rxjs/operators';\r\nimport { BasePageComponent } from './base-page.component';\r\nimport { UtilsService } from '../services/utils.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { EntityService } from '../services/entity-service.interface';\r\nimport { FormService} from '../services/form.service';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { ComponentContext } from '../enums/component-context.enum';\r\nimport { BaseModel } from '../models/base.model';\r\nimport { FormComponentState } from '../states/form-component.state';\r\nimport { AppMessages } from '../constants/app.messages';\r\n\r\n/**\r\n * Base component for all task detail components in the application.\r\n * Uses composition with FormService for form functionality.\r\n */\r\n@Directive()\r\nexport abstract class BaseTaskDetailsComponent<T extends BaseModel> \r\n extends BasePageComponent implements OnInit, OnDestroy {\r\n \r\n private readonly destroyed$ = new Subject<void>();\r\n protected formService!: FormService<T>;\r\n protected state!: FormComponentState<T>;\r\n\r\n constructor(\r\n protected route: ActivatedRoute,\r\n protected router: Router,\r\n protected override notificationService: NotificationService,\r\n protected override utilsService: UtilsService,\r\n protected formlyConfigService: FormlyConfigService\r\n ) {\r\n super(utilsService, notificationService);\r\n }\r\n\r\n protected initializeServices(): Observable<void> {\r\n return of(void 0).pipe(\r\n map(() => {\r\n console.log('[BaseTaskDetailsComponent] Initializing services');\r\n \r\n // Initialize FormService\r\n this.formService = new FormService<T>(\r\n this.getEntityService(),\r\n this.formlyConfigService,\r\n this.notificationService,\r\n this.getEntityName(),\r\n this.getJsonFields(),\r\n this.getDropdownOptions()\r\n );\r\n\r\n // Initialize component state with form service state\r\n const formState = this.formService.getState();\r\n this.state = {\r\n ...formState,\r\n context: ComponentContext.STANDALONE\r\n };\r\n this.loading = this.state.loading;\r\n\r\n console.log('[BaseTaskDetailsComponent] Services initialized');\r\n })\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeServices()\r\n .pipe(\r\n switchMap(() => this.initializeFromRoute()),\r\n takeUntil(this.destroyed$)\r\n )\r\n .subscribe({\r\n next: () => console.log('[BaseTaskDetailsComponent] Initialized successfully'),\r\n error: error => this.handleInitError(error)\r\n });\r\n }\r\n\r\n private initializeFromRoute(): Observable<void> {\r\n return this.route.queryParams.pipe(\r\n map(params => {\r\n // Handle mode\r\n const mode = params[AppConstants.FORM.MODE];\r\n if (mode) {\r\n this.formService.setMode(mode);\r\n }\r\n\r\n // Handle context from router state\r\n const routerState = window.history.state;\r\n if (routerState?.context) {\r\n this.state.context = routerState.context;\r\n }\r\n\r\n // Load data if UUID provided\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (uuid) {\r\n this.loadData(uuid);\r\n }\r\n\r\n // Always sync state after route initialization\r\n this.syncWithFormService();\r\n })\r\n );\r\n }\r\n\r\n protected loadData(uuid: string): void {\r\n this.state.loading = true;\r\n this.formService.loadData(uuid)\r\n .pipe(\r\n takeUntil(this.destroyed$),\r\n finalize(() => {\r\n this.syncWithFormService();\r\n this.state.loading = false;\r\n })\r\n )\r\n .subscribe({\r\n error: (error) => this.handleLoadError(error)\r\n });\r\n }\r\n\r\n private syncWithFormService(): void {\r\n const formState = this.formService.getState();\r\n const context = this.state?.context || ComponentContext.STANDALONE;\r\n \r\n this.state = {\r\n ...formState,\r\n context\r\n };\r\n \r\n this.loading = formState.loading;\r\n \r\n console.log('[BaseTaskDetailsComponent] State synchronized:', {\r\n hasChanges: this.state.hasChanges,\r\n isNew: this.state.isNew,\r\n mode: this.state.mode\r\n });\r\n }\r\n\r\n protected onSubmit(): void {\r\n this.loading = true;\r\n this.syncWithFormService();\r\n\r\n this.formService.submit()\r\n .pipe(takeUntil(this.destroyed$), finalize(() => { this.loading = false; }))\r\n .subscribe({\r\n next: () => this.navigateAfterSubmit(),\r\n error: (error) => this.handleSubmitError(error)\r\n });\r\n }\r\n\r\n protected navigateAfterSubmit(): void {\r\n if (this.isInContext(ComponentContext.TABBED)) {\r\n return; // Stay on current route when in tab\r\n }\r\n this.router.navigate([`/${this.getEntityName().toLowerCase()}s`]);\r\n }\r\n\r\n private handleInitError(error: any): void {\r\n console.error('Initialization error:', error);\r\n this.notificationService.showError(AppMessages.FORM.ERROR.INIT);\r\n this.state.loading = false;\r\n }\r\n\r\n protected handleLoadError(error: any): void {\r\n console.error('Load error:', error);\r\n this.notificationService.showError(`Failed to load ${this.getEntityName()}`);\r\n }\r\n\r\n protected handleSubmitError(error: any): void {\r\n console.error('Submit error:', error);\r\n const errorMessage = error.error?.message || `Failed to save ${this.getEntityName()}`;\r\n this.showError(errorMessage);\r\n }\r\n\r\n protected isInContext(contextType: ComponentContext): boolean {\r\n return this.state.context === contextType;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n /**\r\n * Get the entity service for CRUD operations\r\n */\r\n protected abstract getEntityService(): EntityService<T>;\r\n\r\n /**\r\n * Get field configuration for the form\r\n */\r\n protected abstract getJsonFields(): any;\r\n\r\n /**\r\n * Get dropdown options for form fields\r\n */\r\n protected abstract getDropdownOptions(): Record<string, any>;\r\n\r\n /**\r\n * Get entity name for messages\r\n */\r\n protected abstract getEntityName(): string;\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { IKeycloakService } from './keycloak.interface';\r\n\r\nexport const KEYCLOAK_SERVICE = new InjectionToken<IKeycloakService>('KEYCLOAK_SERVICE');\r\n","import { Injectable, InjectionToken, inject, signal, Signal } from '@angular/core';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { MessageService } from 'primeng/api';\r\n\r\nexport interface ErrorState {\r\n type: string;\r\n message: string;\r\n code?: string | number;\r\n [key: string]: any;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BaseErrorService {\r\n private readonly _error = signal<ErrorState | null>(null);\r\n private readonly router = inject(Router);\r\n private readonly messageService = inject(MessageService);\r\n\r\n get error(): Signal<ErrorState | null> {\r\n return this._error;\r\n }\r\n\r\n /**\r\n * Handle HTTP and other errors in the application\r\n */\r\n handleError(error: HttpErrorResponse | Error) {\r\n let errorMessage = 'An error occurred';\r\n let errorType = 'unknown';\r\n let statusCode: number | undefined;\r\n \r\n if (error instanceof HttpErrorResponse) {\r\n statusCode = error.status;\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = `Error: ${error.error.message}`;\r\n errorType = 'client';\r\n } else {\r\n // Server-side error\r\n errorType = 'server';\r\n switch (error.status) {\r\n case 0:\r\n errorMessage = 'Unable to connect to the server. Please check your connection.';\r\n errorType = 'connection';\r\n break;\r\n case 401:\r\n errorMessage = 'Unauthorized access';\r\n errorType = 'unauthorized';\r\n this.router.navigate(['/unauthorized']);\r\n break;\r\n case 403:\r\n errorMessage = 'You do not have permission to access this resource.';\r\n errorType = 'forbidden';\r\n this.router.navigate(['/unauthorized']);\r\n break;\r\n case 404:\r\n errorMessage = 'Resource not found';\r\n errorType = 'not-found';\r\n this.router.navigate(['/404']);\r\n break;\r\n case 500:\r\n errorMessage = 'Internal server error. Please try again later.';\r\n errorType = 'server';\r\n break;\r\n default:\r\n errorMessage = error.error?.message || error.message || 'An unexpected error occurred';\r\n }\r\n }\r\n } else {\r\n // Non-HTTP Error\r\n errorMessage = error.message || 'An unexpected error occurred';\r\n errorType = error.name?.toLowerCase() || 'application';\r\n }\r\n\r\n // Update error state\r\n this.setError({\r\n type: errorType,\r\n message: errorMessage,\r\n code: statusCode,\r\n timestamp: new Date().toISOString(),\r\n raw: error\r\n });\r\n\r\n // Show toast message for errors that don't trigger navigation\r\n if (!['unauthorized', 'not-found'].includes(errorType)) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: errorMessage,\r\n life: 5000\r\n });\r\n }\r\n }\r\n\r\n setError(error: ErrorState) {\r\n this._error.set(error);\r\n }\r\n\r\n clearError() {\r\n this._error.set(null);\r\n }\r\n}\r\n\r\nexport const ERROR_SERVICE = new InjectionToken<BaseErrorService>('ERROR_SERVICE', {\r\n providedIn: 'root',\r\n factory: () => inject(BaseErrorService)\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\n\r\nexport const KEYCLOAK_CONFIG = new InjectionToken<KeycloakConfig>('KEYCLOAK_CONFIG');\r\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { ERROR_SERVICE, ErrorState } from '../services/base-error.service';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { IKeycloakService } from './keycloak.interface';\r\nimport Keycloak from 'keycloak-js';\r\n\r\n/** Common types */\r\ntype KeycloakOnLoad = 'check-sso' | 'login-required';\r\n\r\ninterface KeycloakCommon {\r\n token?: string;\r\n realmAccess?: { roles: string[] };\r\n resourceAccess?: { [clientId: string]: { roles: string[] } };\r\n loadUserProfile(): Promise<any>;\r\n updateToken(minValidity: number): Promise<boolean>;\r\n logout(): Promise<void>;\r\n init: Function;\r\n login: Function;\r\n}\r\n\r\ntype KeycloakInstance = KeycloakCommon;\r\n\r\n/** Detect if we're using Keycloak v26+ */\r\nfunction isModernKeycloak(instance: KeycloakInstance): boolean {\r\n return 'init' in instance && !instance.init.toString().includes('redirectUri');\r\n}\r\n\r\n/**\r\n * Service for handling Keycloak authentication and authorization\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakService implements IKeycloakService {\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n\r\n #keycloakInstance = signal<KeycloakInstance | null>(null);\r\n #isAuthenticated = signal<boolean>(false);\r\n #userProfile = signal<any>(null);\r\n\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n\r\n readonly isAuthenticated$ = computed(() => this.#isAuthenticated());\r\n readonly userProfile$ = computed(() => this.#userProfile());\r\n readonly token$ = computed(() => this.#keycloakInstance()?.token);\r\n\r\n get error$() {\r\n return this.errorService.error;\r\n }\r\n\r\n constructor() {\r\n // Error handling is now done through the error service\r\n }\r\n\r\n /**\r\n * Starts logging the user profile every 100 ms to the console for debugging.\r\n * Call this method after initialization to monitor profile changes.\r\n */\r\n // startProfileDebugLogging(): void {\r\n // setInterval(() => {\r\n // console.log('[KeycloakService] Debug profile:', this.#userProfile());\r\n // }, 100);\r\n // }\r\n\r\n /** Check if URL should be excluded from bearer token */\r\n isUrlExcluded(url: string): boolean {\r\n return this.config.options?.excludedUrls?.some(excluded =>\r\n url.startsWith(excluded) || new RegExp(excluded).test(url)\r\n ) ?? false;\r\n }\r\n\r\n /** Initialize Keycloak authentication */\r\n async initialize(): Promise<boolean> {\r\n console.log('[KeycloakService] initialize called');\r\n\r\n const keycloak = new Keycloak({\r\n url: this.config.authServerUrl,\r\n realm: this.config.realm,\r\n clientId: this.config.clientId\r\n });\r\n\r\n let redirectUrl = this.config.options?.loginRedirect || window.location.pathname;\r\n if (!redirectUrl.startsWith('http')) {\r\n redirectUrl = new URL(redirectUrl, window.location.origin).toString();\r\n }\r\n\r\n this.#keycloakInstance.set(keycloak);\r\n\r\n try {\r\n const isModern = isModernKeycloak(keycloak);\r\n const initOptions = {\r\n onLoad: 'login-required' as KeycloakOnLoad,\r\n [isModern ? 'redirect_uri' : 'redirectUri']: redirectUrl\r\n };\r\n\r\n const authenticated = await Promise.race([\r\n keycloak.init(initOptions) as Promise<boolean>,\r\n new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), 2000))\r\n ]) as boolean;\r\n\r\n this.#isAuthenticated.set(authenticated);\r\n this.errorService.clearError(); // Clear any previous errors\r\n\r\n if (authenticated) {\r\n await this.loadUserProfile();\r\n // this.startProfileDebugLogging();\r\n }\r\n\r\n return authenticated;\r\n } catch (error) {\r\n if (error instanceof Error && error.message === 'Connection timeout') {\r\n console.error('[KeycloakService] Failed to connect to Keycloak server');\r\n this.errorService.setError({\r\n type: 'connection',\r\n message: 'Unable to connect to authentication server'\r\n });\r\n } else {\r\n console.error('[KeycloakService] Failed to initialize Keycloak:', error);\r\n this.errorService.setError({\r\n type: 'other',\r\n message: 'Authentication service error'\r\n });\r\n }\r\n this.#keycloakInstance.set(null);\r\n this.#isAuthenticated.set(false);\r\n return false;\r\n }\r\n\r\n }\r\n\r\n /** Clear any Keycloak errors */\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n /** Login with optional redirect URI */\r\n login(options: { redirectUri?: string } = {}): Promise<void> {\r\n console.log('[KeycloakService] login called', options);\r\n const instance = this.#keycloakInstance();\r\n if (!instance) throw new Error('Keycloak not initialized');\r\n\r\n let redirectUrl = options.redirectUri || this.config.options?.loginRedirect || window.location.pathname;\r\n if (!redirectUrl.startsWith('http')) {\r\n redirectUrl = new URL(redirectUrl, window.location.origin).toString();\r\n }\r\n\r\n const isModern = isModernKeycloak(instance);\r\n return instance.login({\r\n [isModern ? 'redirect_uri' : 'redirectUri']: redirectUrl\r\n });\r\n }\r\n\r\n /** Logout the current user */\r\n logout(): Promise<void> {\r\n console.log('[KeycloakService] logout called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance) throw new Error('Keycloak not initialized');\r\n return instance.logout();\r\n }\r\n\r\n /** Get roles for the current user */\r\n getRoles(): string[] {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n return [];\r\n }\r\n\r\n const realmRoles = instance.realmAccess?.roles ?? [];\r\n const resourceAccess = instance.resourceAccess || {};\r\n\r\n const clientRoles = Object.entries(resourceAccess)\r\n .map(([_, access]) => access?.roles || [])\r\n .flat();\r\n\r\n // Combine all roles and remove duplicates\r\n const allRoles = [...new Set([...realmRoles, ...clientRoles])];\r\n\r\n return allRoles;\r\n }\r\n\r\n /** Check if user has a specific role */\r\n hasRole(role: string): boolean {\r\n const result = this.getRoles().includes(role);\r\n // console.log('[KeycloakService] hasRole called', role, 'result:', result);\r\n return result;\r\n }\r\n\r\n /** Get the current access token */\r\n async getToken(): Promise<string | null> {\r\n console.log('[KeycloakService] getToken called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance?.token) return null;\r\n\r\n const validityThreshold = this.config.options?.tokenValidityThreshold ?? 60;\r\n await this.updateToken(validityThreshold);\r\n return instance.token;\r\n }\r\n\r\n /** Update token if it's close to expiring */\r\n private async updateToken(minValidity: number): Promise<boolean> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance?.token) return false;\r\n\r\n try {\r\n return await instance.updateToken(minValidity);\r\n } catch (error) {\r\n this.login(); // Redirect to login if token refresh fails\r\n return false;\r\n }\r\n }\r\n\r\n getCurrentUserId(): string | null {\r\n // Try user profile first\r\n const profile = this.#userProfile();\r\n if (profile && profile.id) {\r\n console.log('[KeycloakService] getCurrentUserId (profile):', profile.id);\r\n return profile.id;\r\n }\r\n // Fallback to token\r\n const token = this.token$();\r\n if (token) {\r\n try {\r\n const tokenData = JSON.parse(atob(token.split('.')[1]));\r\n console.log('[KeycloakService] getCurrentUserId (token):', tokenData.sub);\r\n return tokenData.sub;\r\n } catch (e) {\r\n console.error('[KeycloakService] Error parsing token:', e);\r\n }\r\n }\r\n\r\n // Log warning if both methods failed\r\n console.warn('[KeycloakService] Could not determine user ID - both profile and token are unavailable');\r\n return null;\r\n }\r\n\r\n getCurrentUsername(): string | null {\r\n // Try user profile first\r\n const profile = this.#userProfile();\r\n if (profile && profile.username) {\r\n return profile.username;\r\n }\r\n // Fallback to token\r\n const token = this.token$();\r\n if (token) {\r\n try {\r\n const tokenData = JSON.parse(atob(token.split('.')[1]));\r\n return tokenData.preferred_username;\r\n } catch (e) {\r\n console.error('[KeycloakService] Error parsing token:', e);\r\n }\r\n }\r\n\r\n // Log warning if both methods failed\r\n console.warn('[KeycloakService] Could not determine username - both profile and token are unavailable');\r\n return null;\r\n }\r\n\r\n getCurrentUserFullName(): string | null {\r\n const profile = this.#userProfile();\r\n if (profile && (profile.firstName || profile.lastName)) {\r\n const fullName = [profile.firstName, profile.lastName].filter(Boolean).join(' ');\r\n // console.log('[KeycloakService] getCurrentUserFullName (profile):', fullName);\r\n return fullName;\r\n }\r\n\r\n // If no full name in profile, try to use username as fallback\r\n const username = this.getCurrentUsername();\r\n if (username) {\r\n // console.log('[KeycloakService] getCurrentUserFullName (fallback to username):', username);\r\n return username;\r\n }\r\n\r\n console.warn('[KeycloakService] Could not determine user full name - no profile data available');\r\n return null;\r\n }\r\n\r\n private async loadUserProfile(): Promise<void> {\r\n console.log('[KeycloakService] loadUserProfile called');\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n console.warn('[KeycloakService] Cannot load user profile - Keycloak instance is null');\r\n return;\r\n }\r\n\r\n try {\r\n const profile = await instance.loadUserProfile();\r\n this.#userProfile.set(profile);\r\n console.log('[KeycloakService] loadUserProfile result:', profile);\r\n } catch (error) {\r\n console.error('[KeycloakService] Failed to load user profile:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Check the current authentication state and return diagnostic information\r\n * Useful for debugging authentication issues\r\n */\r\n getAuthenticationState(): { authenticated: boolean; hasProfile: boolean; hasToken: boolean } {\r\n const authenticated = this.#isAuthenticated();\r\n const profile = this.#userProfile();\r\n const token = this.token$();\r\n\r\n const state = {\r\n authenticated,\r\n hasProfile: !!profile,\r\n hasToken: !!token\r\n };\r\n\r\n console.log('[KeycloakService] Authentication state:', state);\r\n return state;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { Observable, map } from 'rxjs';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { ERROR_SERVICE } from '../services/base-error.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakAuthGuard {\r\n private readonly keycloakService = inject(KeycloakService);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n private readonly router = inject(Router);\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n console.log('[KeycloakAuthGuard] canActivate called for route:', route.url.join('/'));\r\n return new Observable<boolean | UrlTree>(subscriber => {\r\n const authenticated = this.keycloakService.isAuthenticated$();\r\n subscriber.next(this.processAuthentication(authenticated, route, state));\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n private processAuthentication(\r\n authenticated: boolean, \r\n route: ActivatedRouteSnapshot, \r\n state: RouterStateSnapshot\r\n ): boolean | UrlTree {\r\n console.log('[KeycloakAuthGuard] Processing authentication, authenticated:', authenticated);\r\n \r\n // Check for connection errors before attempting login\r\n if (!authenticated && this.errorService.error()?.type === 'connection') {\r\n console.log('[KeycloakAuthGuard] Keycloak connection error, redirecting to error page');\r\n return this.router.createUrlTree(['/keycloak-error']);\r\n }\r\n\r\n if (!authenticated) {\r\n const redirectUri = window.location.origin + state.url;\r\n try {\r\n this.keycloakService.login({ redirectUri });\r\n } catch (error) {\r\n console.error('[KeycloakAuthGuard] Login failed:', error);\r\n return this.router.createUrlTree(['/keycloak-error']);\r\n }\r\n return false;\r\n }\r\n\r\n // Check for route-specific roles first, then fallback to default roles\r\n const routeRoles = route.data['roles'] as string[] | undefined;\r\n const defaultRoles = this.config.options?.roles;\r\n const requiredRoles = routeRoles || defaultRoles;\r\n\r\n console.log('[KeycloakAuthGuard] Required roles:', requiredRoles);\r\n if (requiredRoles?.length && !this.hasRequiredRoles(requiredRoles)) {\r\n console.log('[KeycloakAuthGuard] User lacks required roles, redirecting to unauthorized');\r\n return this.router.createUrlTree(['/unauthorized']);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private hasRequiredRoles(roles: string[]): boolean {\r\n const hasRoles = roles.some(role => this.keycloakService.hasRole(role));\r\n console.log('[KeycloakAuthGuard] Checking required roles:', roles);\r\n console.log('[KeycloakAuthGuard] User has required roles:', hasRoles);\r\n return hasRoles;\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, catchError, from, mergeMap, throwError } from 'rxjs';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\n\r\n@Injectable()\r\nexport class KeycloakAuthInterceptor implements HttpInterceptor {\r\n private readonly keycloakService = inject(KeycloakService);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (!this.config.options?.bearerToken || this.keycloakService.isUrlExcluded(req.url)) {\r\n return next.handle(req);\r\n }\r\n\r\n return from(this.keycloakService.getToken()).pipe(\r\n mergeMap(token => {\r\n if (!token) return next.handle(req);\r\n\r\n const authReq = req.clone({\r\n headers: req.headers.set('Authorization', `Bearer ${token}`)\r\n });\r\n return next.handle(authReq);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n // Only re-authenticate on 401 (missing/expired credentials). A 403 means the\r\n // user IS authenticated but lacks permission — re-login won't grant it and\r\n // would needlessly discard app state, so let the app handle 403 itself.\r\n if (error.status === 401) {\r\n this.keycloakService.login();\r\n }\r\n return throwError(() => error);\r\n })\r\n );\r\n }\r\n}\r\n","import { APP_INITIALIZER, importProvidersFrom } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { KeycloakAuthInterceptor } from './keycloak.interceptor';\r\n\r\n/**\r\n * Provides Keycloak authentication and authorization services\r\n * @param config Keycloak configuration\r\n * @returns Array of providers for Keycloak integration\r\n */\r\nexport function provideKeycloak(config: KeycloakConfig) {\r\n return [\r\n importProvidersFrom(HttpClientModule),\r\n { provide: KEYCLOAK_CONFIG, useValue: config },\r\n KeycloakService,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (keycloak: KeycloakService) => () => keycloak.initialize(),\r\n multi: true,\r\n deps: [KeycloakService]\r\n },\r\n // Only provide the interceptor if bearer token is enabled\r\n ...(config.options?.bearerToken ? [{\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: KeycloakAuthInterceptor,\r\n multi: true\r\n }] : [])\r\n ];\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { UtilsService } from './utils.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { EntityService } from './entity-service.interface';\r\nimport { ReferenceDto } from '../models/reference-dto.interface';\r\nimport { BaseModel } from '../models/base.model';\r\n\r\nexport abstract class BaseEntityService<T extends BaseModel> implements EntityService<T> {\r\n // Use the loading state from HttpUtilityService\r\n get loading$() {\r\n return this.httpUtility.loading$;\r\n }\r\n\r\n protected apiUrl: string;\r\n\r\n /**\r\n * Creates an instance of BaseCrudService.\r\n * @param httpUtility - Service for making HTTP requests\r\n * @param utilsService - Utility service for common operations\r\n * @param resourcePath - API resource path (e.g., 'customers', 'products')\r\n * @param backendBaseUrl - Base URL for the backend API\r\n * @param messageService - Optional service for showing messages\r\n */\r\n protected constructor(\r\n protected httpUtility: HttpUtilityService,\r\n protected utilsService: UtilsService,\r\n protected resourcePath: string,\r\n protected backendBaseUrl: string,\r\n protected messageService: MessageService | undefined\r\n ) {\r\n this.apiUrl = this.joinUrls(backendBaseUrl, resourcePath);\r\n }\r\n\r\n /**\r\n * Find entities by createdBy with pagination using PageRequest and filters.\r\n * POST /page with { ...pageRequest, filters: [{ field: 'createdBy', value: createdBy }] }\r\n */\r\n findByCreatedBy(createdBy: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, {\r\n ...request,\r\n filters: [{ field: 'createdBy', value: createdBy }]\r\n });\r\n }\r\n\r\n /**\r\n * Get all entities with pagination.\r\n * POST /page with pageRequest\r\n */\r\n public getAll(pageRequest?: PageRequest): Observable<Page<T>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, request);\r\n }\r\n\r\n /**\r\n * Joins URL parts ensuring no double slashes\r\n */\r\n private joinUrls(...parts: string[]): string {\r\n return parts.map(part => part.replace(/^\\/+|\\/+$/g, '')).join('/');\r\n }\r\n\r\n\r\n getById(uuid: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.get<T>(`${this.apiUrl}/${uuid}`);\r\n }\r\n\r\n create(entity: Omit<T, 'uuid'>): Observable<T> {\r\n return this.httpUtility.post<T>(this.apiUrl, entity);\r\n }\r\n\r\n update(uuid: string, entity: Omit<T, 'uuid'>): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.put<T>(`${this.apiUrl}/${uuid}`, entity);\r\n }\r\n\r\n delete(uuid: string): Observable<void> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.delete<void>(`${this.apiUrl}/${uuid}`);\r\n }\r\n\r\n /**\r\n * Get all entities without pagination.\r\n * GET /\r\n */\r\n findAll(): Observable<T[]> {\r\n return this.httpUtility.get<T[]>(this.apiUrl);\r\n }\r\n\r\n /**\r\n * Get detailed entity information by UUID.\r\n * GET /{uuid}/detailed\r\n */\r\n findDetailedByUuid(uuid: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.get<T>(`${this.apiUrl}/${uuid}/detailed`);\r\n }\r\n\r\n /**\r\n * Partially update an entity with the specified field values.\r\n * PATCH /{uuid}\r\n */\r\n patch(uuid: string, updates: Partial<T>): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n return throwError(() => new Error('Invalid UUID format'));\r\n }\r\n return this.httpUtility.patch<T>(`${this.apiUrl}/${uuid}`, updates);\r\n }\r\n\r\n /**\r\n * Get all entities as reference data.\r\n * GET /reference\r\n */\r\n findAllReference(): Observable<ReferenceDto[]> {\r\n return this.httpUtility.get<ReferenceDto[]>(`${this.apiUrl}/reference`);\r\n }\r\n\r\n /**\r\n * Get paginated reference data.\r\n * POST /reference/page\r\n */\r\n findAllReferencePaginated(pageRequest?: PageRequest): Observable<Page<ReferenceDto>> {\r\n const request = pageRequest || { page: 0, size: 10 };\r\n return this.httpUtility.post<Page<ReferenceDto>>(`${this.apiUrl}/reference/page`, request);\r\n }\r\n \r\n\r\n /**\r\n * Get all entities with filters (non-paginated).\r\n * GET /search?field=value&...\r\n */\r\n public findAllWithFilters(filters: Record<string, string>): Observable<T[]> {\r\n const params = new HttpParams({ fromObject: filters });\r\n return this.httpUtility.get<T[]>(`${this.apiUrl}/search`, { params });\r\n }\r\n\r\n /**\r\n * Get a single entity by filters (non-paginated).\r\n * GET /search-one?field=value&...\r\n */\r\n public findOneWithFilters(filters: Record<string, string>): Observable<T | null> {\r\n const params = new HttpParams({ fromObject: filters });\r\n return this.httpUtility.get<T>(`${this.apiUrl}/search-one`, { params });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams, HttpHeaders, HttpErrorResponse, HttpEvent } from '@angular/common/http';\r\nimport { Observable, throwError, BehaviorSubject, finalize, forkJoin } from 'rxjs';\r\nimport { catchError, retry, timeout } from 'rxjs/operators';\r\nimport { MessageService } from 'primeng/api';\r\n\r\n/**\r\n * A general-purpose HTTP utility service that provides enhanced HTTP operations\r\n * beyond the standard Angular HttpClient. This service includes features such as:\r\n * - Loading state management\r\n * - Standardized error handling\r\n * - Request timeouts and retries\r\n * - File upload capabilities\r\n * - Batch request handling\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpUtilityService {\r\n private loading = new BehaviorSubject<boolean>(false);\r\n loading$ = this.loading.asObservable();\r\n\r\n // Reference count of in-flight requests. A single boolean flag was buggy: when\r\n // concurrent requests overlapped, the first to finish flipped loading to false\r\n // while others were still running. Emit loading = (inFlight > 0) instead.\r\n private inFlight = 0;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private messageService?: MessageService\r\n ) {}\r\n\r\n private startLoading(): void {\r\n this.inFlight++;\r\n this.loading.next(this.inFlight > 0);\r\n }\r\n\r\n private endLoading(): void {\r\n this.inFlight = Math.max(0, this.inFlight - 1);\r\n this.loading.next(this.inFlight > 0);\r\n }\r\n\r\n /**\r\n * Perform a GET request with enhanced options\r\n * @param url The endpoint URL\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n get<T>(url: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.get<T>(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n\r\n /**\r\n * Perform a POST request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n post<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.post<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n\r\n /**\r\n * Perform a PUT request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n put<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.put<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n\r\n /**\r\n * Perform a PATCH request with enhanced options\r\n * @param url The endpoint URL\r\n * @param body The request payload\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n patch<T>(url: string, body: any, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.patch<T>(url, body, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n\r\n /**\r\n * Perform a DELETE request with enhanced options\r\n * @param url The endpoint URL\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n delete<T>(url: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n responseType?: 'json',\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.delete<T>(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: options?.responseType as 'json',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n \r\n /**\r\n * Upload a file with optional additional data\r\n * @param url The upload endpoint URL\r\n * @param file The file to upload\r\n * @param additionalData Additional form data to include\r\n * @param options Additional request options\r\n * @returns An observable of the response\r\n */\r\n uploadFile<T>(url: string, file: File, additionalData?: Record<string, any>, options?: {\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n withCredentials?: boolean,\r\n retries?: number,\r\n timeoutMs?: number,\r\n onProgress?: (percentage: number) => void\r\n }): Observable<T> {\r\n this.startLoading();\r\n \r\n const formData = new FormData();\r\n formData.append('file', file, file.name);\r\n \r\n if (additionalData) {\r\n Object.keys(additionalData).forEach(key => {\r\n formData.append(key, additionalData[key]);\r\n });\r\n }\r\n \r\n let httpOptions: any = {\r\n headers: options?.headers,\r\n withCredentials: options?.withCredentials\r\n };\r\n \r\n // If progress tracking is requested\r\n if (options?.onProgress) {\r\n httpOptions.reportProgress = true;\r\n httpOptions.observe = 'events';\r\n }\r\n \r\n // Create the request\r\n let request$ = this.http.post<any>(url, formData, httpOptions);\r\n \r\n // Add retries if specified\r\n if (options?.retries) {\r\n request$ = request$.pipe(retry(options.retries));\r\n }\r\n \r\n // Add timeout if specified\r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n // Track progress if a callback is provided\r\n if (options?.onProgress) {\r\n return new Observable<T>(observer => {\r\n request$.subscribe({\r\n next: (event: HttpEvent<any>) => {\r\n if (event.type === 1 && event.total) { // HttpEventType.UploadProgress\r\n const percentDone = Math.round(100 * event.loaded / event.total);\r\n options.onProgress!(percentDone);\r\n } else if (event.type === 4) { // HttpEventType.Response\r\n observer.next(event.body);\r\n observer.complete();\r\n }\r\n },\r\n error: (error) => {\r\n observer.error(this.handleError(error));\r\n this.endLoading();\r\n },\r\n complete: () => {\r\n this.endLoading();\r\n }\r\n });\r\n });\r\n }\r\n \r\n // Standard request without progress tracking\r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n ) as Observable<T>;\r\n }\r\n\r\n /**\r\n * Execute multiple HTTP requests in parallel\r\n * @param requests Array of HTTP request observables\r\n * @returns An observable that emits when all requests complete\r\n */\r\n batchRequests<T>(requests: Observable<T>[]): Observable<T[]> {\r\n this.startLoading();\r\n return forkJoin(requests).pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n \r\n /**\r\n * Download a file from the server\r\n * @param url The file URL\r\n * @param filename Optional filename to save as\r\n * @param options Additional request options\r\n */\r\n downloadFile(url: string, filename?: string, options?: {\r\n params?: HttpParams | Record<string, string | number | boolean | readonly (string | number | boolean)[]>,\r\n headers?: HttpHeaders | Record<string, string | string[]>,\r\n withCredentials?: boolean,\r\n timeoutMs?: number\r\n }): Observable<Blob> {\r\n this.startLoading();\r\n \r\n let request$ = this.http.get(url, {\r\n params: options?.params,\r\n headers: options?.headers,\r\n responseType: 'blob',\r\n withCredentials: options?.withCredentials\r\n });\r\n \r\n if (options?.timeoutMs) {\r\n request$ = request$.pipe(timeout(options.timeoutMs));\r\n }\r\n \r\n return request$.pipe(\r\n catchError(this.handleError.bind(this)),\r\n finalize(() => this.endLoading())\r\n );\r\n }\r\n\r\n /**\r\n * Create parameter string from an object\r\n * @param params Object containing parameters\r\n * @returns HttpParams object\r\n */\r\n createParams(params: Record<string, any>): HttpParams {\r\n let httpParams = new HttpParams();\r\n \r\n Object.keys(params).forEach(key => {\r\n const value = params[key];\r\n if (value !== undefined && value !== null) {\r\n httpParams = httpParams.append(key, value.toString());\r\n }\r\n });\r\n \r\n return httpParams;\r\n }\r\n\r\n /**\r\n * Standardized error handler for HTTP requests\r\n * @param error The HTTP error\r\n * @returns An observable that errors with the processed error object\r\n */\r\n private handleError(error: HttpErrorResponse) {\r\n console.error('An HTTP error occurred:', error);\r\n \r\n let errorMessage = 'An error occurred';\r\n let errorCode: string | undefined;\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = error.error.message;\r\n } else {\r\n // Server-side error\r\n errorCode = error.status.toString();\r\n \r\n switch (error.status) {\r\n case 400:\r\n errorMessage = error.error?.message || 'Bad request';\r\n break;\r\n case 401:\r\n errorMessage = 'Unauthorized';\r\n break;\r\n case 403:\r\n errorMessage = 'Access denied';\r\n break;\r\n case 404:\r\n errorMessage = 'Resource not found';\r\n break;\r\n case 408:\r\n errorMessage = 'Request timeout';\r\n break;\r\n case 500:\r\n errorMessage = 'Server error';\r\n break;\r\n case 503:\r\n errorMessage = 'Service unavailable';\r\n break;\r\n default:\r\n errorMessage = error.error?.message || `Error ${error.status}`;\r\n break;\r\n }\r\n }\r\n\r\n this.showError(errorMessage);\r\n return throwError(() => ({\r\n error,\r\n message: errorMessage,\r\n code: errorCode\r\n }));\r\n }\r\n\r\n /**\r\n * Display an error message using the message service\r\n * @param message Error message to display\r\n */\r\n private showError(message: string) {\r\n if (this.messageService) {\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: message,\r\n life: 3000\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { UtilsService } from './utils.service';\r\nimport { MessageService } from 'primeng/api';\r\nimport { Page } from '../models/pagination/page.interface';\r\nimport { PageRequest } from '../models/pagination/page-request.interface';\r\nimport { BaseEntityService } from './base-entity.service';\r\nimport { KeycloakService } from '../keycloak/keycloak.service';\r\nimport { BaseTask } from '../models/base-task.model';\r\nimport { TaskEntityService } from './task-entity-service.interface';\r\n\r\n/**\r\n * Base service for task-related operations that extends the BaseCrudService.\r\n * Implements endpoints defined in Java BaseTaskController.\r\n *\r\n * @deprecated `BaseTaskController` (the Java controller this service's `sendEvent`/`PUT\r\n * /{uuid}/event/{event}` call targets) no longer exists — it was deleted along with\r\n * `microservice-starter-lib`'s Spring-State-Machine-based workflow subsystem in favor of\r\n * `workflow-engine-lib`. Calling `sendEvent` against any current backend will 404. Use\r\n * `WorkflowEngineApiService` from `workflow-engine/` instead, which targets the actual current\r\n * engine API (`claim`/`unclaim`/`start`/`complete`/`reject`/`reassign` on `/workflow/tasks`).\r\n */\r\n@Injectable()\r\nexport abstract class BaseTaskService<\r\n T extends BaseTask,\r\n AU = any,\r\n S extends string = string,\r\n E extends string = string\r\n> extends BaseEntityService<T> implements TaskEntityService<T, S, E> {\r\n constructor(\r\n protected override httpUtility: HttpUtilityService,\r\n protected override utilsService: UtilsService,\r\n protected override resourcePath: string,\r\n protected override backendBaseUrl: string,\r\n protected override messageService: MessageService | undefined,\r\n public readonly keycloakService: KeycloakService\r\n ) {\r\n super(httpUtility, utilsService, resourcePath, backendBaseUrl, messageService);\r\n }\r\n\r\n\r\n /**\r\n * Send an event for a task\r\n * Maps to PUT /{uuid}/event/{event} endpoint\r\n * For ASSIGN events, userId and department are required\r\n */\r\n sendEvent(uuid: string, event: E, userId?: string, department?: string): Observable<T> {\r\n if (!this.utilsService.isValidUUID(uuid)) {\r\n this.utilsService.showError('Invalid UUID format', this.messageService);\r\n throw new Error('Invalid UUID format');\r\n }\r\n\r\n let params = new HttpParams();\r\n if (userId) {\r\n params = params.set('userId', userId);\r\n }\r\n if (department) {\r\n params = params.set('department', department);\r\n }\r\n\r\n return this.httpUtility.put<T>(\r\n `${this.apiUrl}/${uuid}/event/${event}`,\r\n null,\r\n { params }\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Calls POST /current-assignees-in endpoint to fetch tasks by assignees with pagination.\r\n */\r\n getByCurrentAssigneesIn(assigneeIds: string[], pageable: any = { page: 0, size: 10 }): Observable<Page<T>> {\r\n let params = new HttpParams();\r\n assigneeIds.forEach(id => {\r\n params = params.append('assignees', id);\r\n });\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/current-assignees-in`, pageable, { params });\r\n }\r\n\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReferenceDataProviderService {\r\n\r\n private endpoints: Record<string, string> = {};\r\n\r\n // Method to set/update endpoints\r\n setEndpoints(endpoints: Record<string, string>) {\r\n this.endpoints = { ...this.endpoints, ...endpoints };\r\n }\r\n\r\n getReferenceEndpoint(entityName: string): string | null {\r\n console.log('getReferenceEndpoint', entityName, this.endpoints);\r\n let endpoint = this.endpoints[entityName];\r\n if (endpoint != null && endpoint.length > 0) {\r\n if (endpoint.startsWith('http://') || endpoint.startsWith('https://')) {\r\n return endpoint; // Absolute URL\r\n } else {\r\n // Relative URL, assume it's within the application's base context\r\n return endpoint;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map } from 'rxjs';\r\nimport { HttpUtilityService } from './http-utility.service';\r\nimport { ReferenceDataProviderService } from './reference-data-provider.service';\r\nimport { ReferenceDto } from '../models/reference-dto.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EntityRegistryService {\r\n constructor(\r\n private httpUtility: HttpUtilityService,\r\n private dataProvider: ReferenceDataProviderService\r\n ) {}\r\n\r\n /**\r\n * Gets reference options for an entity, suitable for select/dropdown components\r\n * @param entityName The name of the entity (e.g., 'customers', 'departments')\r\n * @returns Observable of options array with label/value pairs\r\n */\r\n getEntityOptions(entityName: string): Observable<{ label: string; value: string; data?: any; }[]> {\r\n console.log('getEntityOptions', entityName);\r\n const url = this.dataProvider.getReferenceEndpoint(entityName);\r\n\r\n if (!url) {\r\n console.warn(`No endpoint configured for entity: ${entityName}`);\r\n return new Observable(subscriber => {\r\n subscriber.next([]);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n return this.httpUtility.get<ReferenceDto[]>(url, {\r\n retries: 1,\r\n timeoutMs: 10000,\r\n }).pipe(\r\n map((items) =>\r\n items?.map((item) => ({\r\n label: item.displayLabel,\r\n value: item.key,\r\n data: item.data,\r\n })) || []\r\n )\r\n );\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\n\r\ntype DateFormat = 'default' | 'short' | 'medium';\r\n\r\n@Pipe({\r\n name: 'indianDate',\r\n standalone: true\r\n})\r\nexport class IndianDatePipe implements PipeTransform {\r\n constructor(private datePipe: DatePipe) {}\r\n\r\n transform(value: string | null, format: DateFormat = 'default'): string | null {\r\n if (!value) return null;\r\n\r\n // First validate dd-MM-yyyy format\r\n const dateRegex = /^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[0-2])-\\d{4}$/;\r\n if (!dateRegex.test(value)) {\r\n throw new Error(`Invalid date format: ${value}. Expected format: dd-MM-yyyy`);\r\n }\r\n\r\n // Validate real date\r\n const [day, month, year] = value.split('-').map(Number);\r\n const date = new Date(year, month - 1, day);\r\n if (\r\n date.getFullYear() !== year ||\r\n date.getMonth() !== month - 1 ||\r\n date.getDate() !== day\r\n ) {\r\n throw new Error(`Invalid date: ${value}`);\r\n }\r\n\r\n // Apply requested format\r\n switch (format) {\r\n case 'short':\r\n // Pad with leading zeros for consistent format\r\n const paddedDay = day.toString().padStart(2, '0');\r\n const paddedMonth = month.toString().padStart(2, '0');\r\n return `${paddedDay}-${paddedMonth}-${year}`; // 10-03-2025\r\n case 'medium':\r\n return this.datePipe.transform(date, 'dd MMM yyyy'); // 10 Jan 2019\r\n default:\r\n return value; // original dd-MM-yyyy\r\n }\r\n }\r\n}\r\n","// TypeScript model for BaseTaskDto\r\n\r\nimport { Workflow } from './workflow.model';\r\nimport { BaseComment } from './base.comment.model';\r\n\r\n/**\r\n * @deprecated Models `io.codex.library.core.task.BaseTaskDto`, paired with the same removed\r\n * controller as {@link Workflow} — see that interface's `@deprecated` note. Use `WorkflowTask`\r\n * from `workflow-engine/` instead.\r\n */\r\nexport interface BaseTask<S = string, C = BaseComment> extends Workflow<S, C> {\r\n title: string;\r\n description: string;\r\n type: string;\r\n category: string;\r\n priority: string;\r\n assignedUser: string;\r\n assignedDepartment: string;\r\n product: string;\r\n subProduct: string;\r\n business: string;\r\n}\r\n","// TypeScript model for BaseCommentDto\r\n\r\nexport interface BaseComment {\r\n comment: string;\r\n createdBy: string;\r\n createdAt: Date;\r\n}\r\n","export enum TabbedFormType {\r\n STANDARD = 'STANDARD',\r\n LIST = 'LIST'\r\n}\r\n","/**\r\n * Standard task roles that define user permissions within a task workflow.\r\n * These roles control what operations a user can perform on tasks.\r\n */\r\nexport enum TaskRole {\r\n /**\r\n * Can create new tasks. This could be a user initiating a task manually\r\n * or a system process creating tasks automatically.\r\n */\r\n TASK_CREATOR = 'TASK_CREATOR',\r\n\r\n /**\r\n * Can assign or reassign tasks to other users. Typically used by\r\n * team leads or workflow managers to distribute work.\r\n */\r\n TASK_ASSIGNER = 'TASK_ASSIGNER',\r\n\r\n /**\r\n * Can pick tasks for self-assignment from a task pool.\r\n * Useful in scenarios where tasks can be claimed by available workers.\r\n */\r\n TASK_PICKER = 'TASK_PICKER',\r\n\r\n /**\r\n * Can review and approve completed tasks. This role is responsible for\r\n * quality assurance or approval steps in the workflow.\r\n */\r\n TASK_REVIEWER = 'TASK_REVIEWER',\r\n\r\n /**\r\n * Can view task details but cannot modify them. Useful for stakeholders\r\n * who need to monitor task progress without making changes.\r\n */\r\n TASK_VIEWER = 'TASK_VIEWER',\r\n\r\n /**\r\n * Has full administrative control over tasks. Can override or force\r\n * state changes, bypass normal workflow restrictions, and manage\r\n * task configuration.\r\n */\r\n TASK_ADMIN = 'TASK_ADMIN'\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\n// Define the allowed text transformations\r\nexport type TextTransform = 'uppercase' | 'lowercase' | 'capitalize' | 'none';\r\n\r\n@Component({\r\n selector: 'formly-field-text-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n InputTextModule\r\n ],\r\n template: `\r\n <input pInputText\r\n [type]=\"props['type'] || 'text'\"\r\n [formControl]=\"$any(formControl)\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [formlyAttributes]=\"field\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [attr.aria-label]=\"props['label'] || props['placeholder'] || ''\"\r\n [class.ng-invalid]=\"showError\"\r\n [class.ng-dirty]=\"showError\"\r\n [class.p-invalid]=\"showError\"\r\n [style.text-transform]=\"textTransformStyle\"\r\n (input)=\"onInputChange($event)\"\r\n class=\"w-full\"/>\r\n `\r\n})\r\nexport class TextInputType extends FieldType implements OnInit {\r\n override defaultOptions = {\r\n props: {\r\n type: 'text',\r\n placeholder: '',\r\n textTransform: 'none' as TextTransform\r\n }\r\n };\r\n \r\n ngOnInit() {\r\n // Subscribe to value changes to apply transformations\r\n if (this.shouldTransformText) {\r\n this.formControl?.valueChanges.subscribe(value => {\r\n if (value && typeof value === 'string') {\r\n const transformedValue = this.transformText(value);\r\n if (value !== transformedValue) {\r\n this.formControl?.setValue(transformedValue, { emitEvent: false });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n onInputChange(event: Event) {\r\n if (!this.shouldTransformText) return;\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value;\r\n const transformedValue = this.transformText(value);\r\n \r\n // Only update if it's actually different to avoid cursor position issues\r\n if (value !== transformedValue) {\r\n // Preserve cursor position\r\n const start = input.selectionStart || 0;\r\n const end = input.selectionEnd || 0;\r\n \r\n // Set the transformed value\r\n this.formControl?.setValue(transformedValue);\r\n \r\n // Try to restore cursor position (may not work perfectly for all transformations)\r\n setTimeout(() => {\r\n input.setSelectionRange(start, end);\r\n }, 0);\r\n }\r\n }\r\n \r\n get textTransformStyle(): string {\r\n return this.props['textTransform'] as string || 'none';\r\n }\r\n \r\n get shouldTransformText(): boolean {\r\n return this.props['textTransform'] !== 'none';\r\n }\r\n \r\n transformText(value: string): string {\r\n switch (this.props['textTransform']) {\r\n case 'uppercase':\r\n return value.toUpperCase();\r\n case 'lowercase':\r\n return value.toLowerCase();\r\n case 'capitalize':\r\n return value.replace(/\\b\\w/g, char => char.toUpperCase());\r\n default:\r\n return value;\r\n }\r\n }\r\n \r\n override get showError(): boolean {\r\n if (!this.formControl) {\r\n return false;\r\n }\r\n \r\n const { touched, dirty, invalid } = this.formControl;\r\n return invalid && (touched || dirty);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { Observable, of, isObservable } from 'rxjs';\r\n\r\ninterface SelectOption {\r\n value: any;\r\n label: string;\r\n [key: string]: any; // For additional properties\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n SelectModule\r\n ],\r\n template: `\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <p-select\r\n [formControl]=\"$any(formControl)\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [formlyAttributes]=\"field\"\r\n [options]=\"options\"\r\n [virtualScroll]=\"false\"\r\n [showClear]=\"!props['readonly']\"\r\n [editable]=\"!props['readonly']\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\r\n [filter]=\"!props['readonly']\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </ng-container>\r\n `\r\n})\r\nexport class SelectType extends FieldType {\r\n get options$(): Observable<SelectOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: [],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Select',\r\n showClear: false,\r\n filter: false,\r\n virtualScroll: false\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FieldType } from '@ngx-formly/core';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { Observable, isObservable, of } from 'rxjs';\r\n\r\ninterface RadioOption {\r\n value: any;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-radio',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n RadioButtonModule\r\n ],\r\n template: `\r\n <div class=\"flex flex-column gap-1\">\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <div *ngFor=\"let option of options; let i = index\" class=\"flex align-items-center gap-2\">\r\n <p-radioButton\r\n [name]=\"field.name || ''\"\r\n [value]=\"option.value\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [size]=\"'small'\"\r\n [inputId]=\"field.key + '_' + i\">\r\n </p-radioButton>\r\n <label [for]=\"field.key + '_' + i\" class=\"p-radio-label cursor-pointer\">\r\n {{option.label}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n `\r\n})\r\nexport class RadioType extends FieldType {\r\n get options$(): Observable<RadioOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: []\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { InputNumberModule } from 'primeng/inputnumber';\r\n\r\n@Component({\r\n selector: 'formly-field-numeric-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n InputNumberModule\r\n ],\r\n template: `\r\n <p-inputNumber\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [min]=\"props['min'] || 0\"\r\n [max]=\"props['max']\"\r\n [minFractionDigits]=\"props['minFractionDigits'] || 0\"\r\n [maxFractionDigits]=\"props['maxFractionDigits'] || 0\"\r\n [prefix]=\"props['prefix'] || ''\"\r\n [suffix]=\"props['suffix'] || ''\"\r\n [useGrouping]=\"props['useGrouping'] ?? true\"\r\n [showButtons]=\"true\"\r\n class=\"w-full\">\r\n </p-inputNumber>\r\n `\r\n})\r\nexport class NumericInputType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n min: undefined,\r\n max: undefined,\r\n minFractionDigits: 0,\r\n maxFractionDigits: 0,\r\n prefix: '',\r\n suffix: '',\r\n useGrouping: true\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { Observable, isObservable, of } from 'rxjs';\r\n\r\ninterface SelectOption {\r\n value: any;\r\n label: string;\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n selector: 'formly-field-multiselect',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MultiSelectModule\r\n ],\r\n template: `\r\n <ng-container *ngIf=\"options$ | async as options\">\r\n <p-multiSelect\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [options]=\"options\"\r\n [optionLabel]=\"props['optionLabel'] || 'label'\"\r\n [optionValue]=\"props['optionValue'] || 'value'\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\r\n [filter]=\"props['filter'] || true\"\r\n [filterBy]=\"props['filterBy'] || 'label'\"\r\n [maxSelectedLabels]=\"props['maxSelectedLabels'] || 2\"\r\n [showToggleAll]=\"props['showToggleAll'] || true\"\r\n [virtualScroll]=\"props['virtualScroll'] || false\"\r\n [display]=\"props['display'] || 'chip'\"\r\n styleClass=\"w-full\">\r\n </p-multiSelect>\r\n </ng-container>\r\n `\r\n})\r\nexport class MultiselectType extends FieldType {\r\n get options$(): Observable<SelectOption[]> {\r\n const options = this.props['options'];\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n options: [] as SelectOption[],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Select',\r\n filter: false,\r\n maxSelectedLabels: 3,\r\n showToggleAll: true,\r\n virtualScroll: false\r\n }\r\n };\r\n}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { formatDate } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'formly-field-date',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n DatePickerModule\r\n ],\r\n template: `\r\n <p-datepicker\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [showIcon]=\"true\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [dateFormat]=\"props['dateFormat'] || 'dd-mm-yy'\"\r\n [showTime]=\"props['showTime'] || false\"\r\n [touchUI]=\"props['touchUI'] || false\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [minDate]=\"props['minDate']\"\r\n [maxDate]=\"props['maxDate']\"\r\n [showOnFocus]=\"false\"\r\n [todayButtonStyleClass]=\"'p-button-secondary'\"\r\n [clearButtonStyleClass]=\"'p-button-secondary'\"\r\n styleClass=\"w-full\"\r\n (onSelect)=\"onDateSelect($event)\"\r\n (onInput)=\"onDateInput($event)\">\r\n </p-datepicker>\r\n `\r\n})\r\nexport class DateType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n dateFormat: 'dd-mm-yy',\r\n showTime: false,\r\n touchUI: false,\r\n placeholder: '',\r\n showButtonBar: true,\r\n }\r\n };\r\n\r\n onDateSelect(event: Date): void {\r\n this.formatAndSetDate(event);\r\n }\r\n\r\n onDateInput(event: any): void {\r\n const inputValue = event.target.value.trim();\r\n if (this.isValidDateInput(inputValue, this.props['dateFormat'] || 'dd-mm-yy')) {\r\n const parsedDate = this.parseDate(inputValue, this.props['dateFormat'] || 'dd-mm-yy');\r\n if (parsedDate) {\r\n this.formatAndSetDate(parsedDate);\r\n }\r\n } else {\r\n this.formControl?.setErrors({ invalidDate: true });\r\n }\r\n }\r\n\r\n private formatAndSetDate(date: Date): void {\r\n if (this.formControl) {\r\n const formattedDate = formatDate(date, 'dd-MM-yyyy', 'en-US');\r\n this.formControl.setValue(formattedDate);\r\n }\r\n }\r\n\r\n private parseDate(value: string, format: string): Date | null {\r\n const parts = value.split(/[-/]/); // Split by common delimiters\r\n if (parts.length === 3) {\r\n const [day, month, year] = format === 'dd-mm-yy'\r\n ? [parseInt(parts[0], 10), parseInt(parts[1], 10) - 1, parseInt(parts[2], 10)]\r\n : [parseInt(parts[1], 10), parseInt(parts[0], 10) - 1, parseInt(parts[2], 10)];\r\n return new Date(year, month, day);\r\n }\r\n return null;\r\n }\r\n\r\n private isValidDateInput(value: string, format: string): boolean {\r\n const dateRegex = format === 'dd-mm-yy'\r\n ? /^\\d{2}-\\d{2}-\\d{4}$/\r\n : /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\r\n return dateRegex.test(value);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\n\r\n@Component({\r\n selector: 'formly-field-checkbox',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n CheckboxModule\r\n ],\r\n template: `\r\n <div class=\"checkbox-container\">\r\n <p-checkbox\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [binary]=\"!props['options']\"\r\n [trueValue]=\"props['trueValue']\"\r\n [falseValue]=\"props['falseValue']\">\r\n {{props['checkboxLabel'] || ''}}\r\n </p-checkbox>\r\n </div>\r\n `,\r\n styles: [`\r\n .checkbox-container {\r\n display: flex;\r\n align-items: center;\r\n height: 40px;\r\n }\r\n `]\r\n})\r\nexport class CheckboxType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n trueValue: true,\r\n falseValue: false\r\n }\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { Textarea } from 'primeng/inputtextarea';\r\n\r\n@Component({\r\n selector: 'formly-field-textarea',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n Textarea\r\n ],\r\n template: `\r\n <textarea pInputTextarea\r\n [formControl]=\"$any(formControl)\"\r\n [formlyAttributes]=\"field\"\r\n [rows]=\"props['rows'] || 3\"\r\n [cols]=\"props['cols']\"\r\n [disabled]=\"props['disabled'] || false\"\r\n [readonly]=\"props['readonly'] || false\"\r\n [autoResize]=\"props['autoResize']\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n class=\"w-full\">\r\n </textarea>\r\n `\r\n})\r\nexport class TextareaType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n rows: 3,\r\n cols: undefined,\r\n autoResize: true,\r\n placeholder: ''\r\n }\r\n };\r\n}\r\n","import { Component, Optional } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FieldWrapper, FormlyFieldConfig, FormlyConfig } from '@ngx-formly/core';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { FormlyValidationMessages } from './field.interface';\r\n\r\ninterface FormlyFieldProps {\r\n label?: string;\r\n required?: boolean;\r\n tooltip?: string;\r\n description?: string;\r\n validation?: {\r\n messages?: FormlyValidationMessages;\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'formly-wrapper-form-field',\r\n standalone: true,\r\n imports: [CommonModule, TooltipModule],\r\n template: `\r\n <div class=\"field mb-4\">\r\n <label *ngIf=\"props.label\" [for]=\"id\" class=\"font-medium\">\r\n {{ props.label }}\r\n <span class=\"required-star\" *ngIf=\"props.required\">*</span>\r\n <i *ngIf=\"props.tooltip\" \r\n class=\"pi pi-info-circle ml-2\" \r\n [pTooltip]=\"props.tooltip\">\r\n </i>\r\n </label>\r\n \r\n <div [class.p-input-error]=\"showError\">\r\n <ng-container #fieldComponent></ng-container>\r\n </div>\r\n \r\n <small *ngIf=\"props.description\" class=\"block mt-1\">\r\n {{ props.description }}\r\n </small>\r\n \r\n <small *ngIf=\"showError\" class=\"p-error block\">\r\n <i class=\"pi pi-exclamation-circle mr-2\"></i>\r\n {{ errorMessage }}\r\n </small>\r\n </div>\r\n `,\r\n styles: [`\r\n :host ::ng-deep {\r\n .required-star {\r\n color: var(--red-500);\r\n margin-left: 0.25rem;\r\n }\r\n \r\n /* Text Input validation styles */\r\n .p-input-error :where(input, .p-inputtext),\r\n .p-input-error .p-inputtext.ng-invalid,\r\n .p-input-error .p-inputtext.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error :where(input:enabled:focus, .p-inputtext:enabled:focus),\r\n .p-input-error .p-inputtext.ng-invalid:focus,\r\n .p-input-error .p-inputtext.ng-dirty.ng-invalid:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Select validation styles */\r\n .p-input-error .p-select,\r\n .p-input-error .p-select.ng-invalid,\r\n .p-input-error .p-select.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-select:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Date picker validation styles */\r\n .p-input-error .p-datepicker,\r\n .p-input-error .p-datepicker.ng-invalid,\r\n .p-input-error .p-datepicker.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-datepicker:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Multi-select validation styles */\r\n .p-input-error .p-multiselect,\r\n .p-input-error .p-multiselect.ng-invalid,\r\n .p-input-error .p-multiselect.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-multiselect:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Numeric input validation styles */\r\n .p-input-error .p-inputnumber,\r\n .p-input-error .p-inputnumber.ng-invalid,\r\n .p-input-error .p-inputnumber.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-inputnumber:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Textarea validation styles */\r\n .p-input-error .p-inputtextarea,\r\n .p-input-error .p-inputtextarea.ng-invalid,\r\n .p-input-error .p-inputtextarea.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-inputtextarea:not(.p-disabled):focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Checkbox validation styles */\r\n .p-input-error .p-checkbox .p-checkbox-box,\r\n .p-input-error .p-checkbox.ng-invalid .p-checkbox-box,\r\n .p-input-error .p-checkbox.ng-dirty.ng-invalid .p-checkbox-box {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-checkbox:not(.p-disabled) .p-checkbox-box:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Radio button validation styles */\r\n .p-input-error .p-radiobutton .p-radiobutton-box,\r\n .p-input-error .p-radiobutton.ng-invalid .p-radiobutton-box,\r\n .p-input-error .p-radiobutton.ng-dirty.ng-invalid .p-radiobutton-box {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-input-error .p-radiobutton:not(.p-disabled) .p-radiobutton-box:focus {\r\n border-color: var(--red-500) !important;\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* File upload validation styles */\r\n .p-input-error .p-fileupload,\r\n .p-input-error .p-fileupload.ng-invalid,\r\n .p-input-error .p-fileupload.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n .p-error {\r\n color: var(--red-500);\r\n margin-top: 0.5rem;\r\n }\r\n\r\n small {\r\n color: var(--text-color-secondary);\r\n }\r\n\r\n /* Additional styles for direct control of PrimeNG components */\r\n input.ng-dirty.ng-invalid,\r\n .p-inputtext.ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n\r\n input.ng-dirty.ng-invalid:focus,\r\n .p-inputtext.ng-dirty.ng-invalid:focus {\r\n box-shadow: 0 0 0 1px var(--red-500) !important;\r\n }\r\n\r\n /* Global validation class support for any missed components */\r\n .p-input-error [class*=\"p-\"]:not(.p-disabled).ng-invalid,\r\n .p-input-error [class*=\"p-\"]:not(.p-disabled).ng-dirty.ng-invalid {\r\n border-color: var(--red-500) !important;\r\n }\r\n }\r\n `]\r\n})\r\nexport class FormFieldWrapper extends FieldWrapper<FormlyFieldConfig<FormlyFieldProps>> {\r\n constructor(@Optional() private formlyConfig: FormlyConfig) {\r\n super();\r\n }\r\n\r\n // ngOnInit() {\r\n // const originalDisable = this.formControl.disable.bind(this.formControl);\r\n // this.formControl.disable = (opts?: any) => {\r\n // const value = this.formControl.value;\r\n // originalDisable(opts);\r\n // if (value !== null && value !== undefined) {\r\n // this.formControl.setValue(value, { emitEvent: false });\r\n // }\r\n // };\r\n // }\r\n\r\n\r\n get errorMessage(): string {\r\n if (!this.field.formControl?.errors) {\r\n return '';\r\n }\r\n\r\n const firstErrorKey = Object.keys(this.field.formControl.errors)[0];\r\n const error = this.field.formControl.errors[firstErrorKey];\r\n\r\n // Try to get message from field.validation (field-specific)\r\n if (this.field.validation?.messages?.[firstErrorKey]) {\r\n const message = this.field.validation.messages[firstErrorKey];\r\n if (typeof message === 'string') {\r\n return message;\r\n }\r\n }\r\n\r\n // Try to get message from props.validation (template-specific)\r\n if (this.props.validation?.messages?.[firstErrorKey]) {\r\n return this.props.validation.messages[firstErrorKey];\r\n }\r\n\r\n // Use field validator's own message if available\r\n if (error && error.message) {\r\n return error.message;\r\n }\r\n\r\n // Use global validation messages from FormlyConfig\r\n if (this.formlyConfig) {\r\n // Try to get the validator message function\r\n const getErrorMessage = this.formlyConfig.getValidatorMessage(firstErrorKey);\r\n\r\n // Handle function-based validator messages\r\n if (getErrorMessage && typeof getErrorMessage === 'function') {\r\n const result = getErrorMessage(error, this.field);\r\n if (typeof result === 'string') {\r\n return result;\r\n }\r\n }\r\n\r\n // For 'required' errors, return the standard message if we couldn't get it above\r\n if (firstErrorKey === 'required') {\r\n return 'This field is required';\r\n }\r\n }\r\n\r\n // Fallback for the most common error if all else fails\r\n return 'This field is invalid';\r\n }\r\n\r\n override get showError(): boolean {\r\n if (!this.field.formControl) {\r\n return false;\r\n }\r\n\r\n const { touched, dirty, invalid } = this.field.formControl;\r\n return invalid && (touched || dirty);\r\n }\r\n}\r\n","export const FORMLY_TYPES = {\r\n TEXT: 'text',\r\n NUMBER: 'number',\r\n DATE: 'date',\r\n CHECKBOX: 'checkbox',\r\n RADIO: 'radio',\r\n SELECT: 'select',\r\n MULTISELECT: 'multiselect',\r\n TEXTAREA: 'textarea',\r\n FILE_UPLOAD: 'file-upload'\r\n};\r\n\r\nexport const FORMLY_WRAPPERS = {\r\n FORM_FIELD: 'form-field'\r\n};\r\n","import { Component, TemplateRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TableModule } from 'primeng/table';\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\n\r\n/**\r\n * File upload formly field type component\r\n * \r\n * Can be used for:\r\n * 1. Simple file uploads with customizable UI\r\n * 2. Document management with list, download, and delete functionality\r\n */\r\n@Component({\r\n selector: 'formly-field-file-upload',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ToastModule,\r\n ProgressBarModule,\r\n ButtonModule,\r\n TableModule,\r\n ConfirmDialogModule\r\n ],\r\n providers: [\r\n MessageService,\r\n ConfirmationService\r\n ],\r\n styles: [`\r\n :host ::ng-deep .small-buttons .p-button {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n }\r\n :host ::ng-deep .p-button-sm {\r\n padding: 0.5rem 1rem;\r\n font-size: 0.875rem;\r\n }\r\n `],\r\n template: `\r\n <p-toast></p-toast>\r\n <p-confirmDialog header=\"Confirmation\" icon=\"pi pi-exclamation-triangle\"></p-confirmDialog>\r\n \r\n <!-- Custom File Upload UI -->\r\n <p-toast></p-toast>\r\n <p-confirmDialog header=\"Confirmation\" icon=\"pi pi-exclamation-triangle\"></p-confirmDialog>\r\n <div>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [attr.multiple]=\"props['multiple'] ? '' : null\"\r\n [attr.accept]=\"props['accept']\"\r\n style=\"display: none\"\r\n (change)=\"onFileSelect($event)\"\r\n />\r\n <button\r\n pButton\r\n type=\"button\"\r\n [label]=\"props['chooseLabel'] || 'Choose File'\"\r\n [disabled]=\"props['disabled']\"\r\n (click)=\"fileInput.click()\"\r\n [class.p-button-sm]=\"props['buttonSize'] === 'small'\"\r\n ></button>\r\n </div>\r\n <div class=\"mt-3\">\r\n <p-table\r\n [value]=\"allDocuments\"\r\n [tableStyle]=\"{'min-width': '50rem'}\"\r\n [loading]=\"props['loading'] || false\"\r\n styleClass=\"p-datatable-sm\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>File Name</th>\r\n <th>File Size</th>\r\n <th>Uploaded By</th>\r\n <th>Uploaded At</th>\r\n <th>Actions</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-document let-rowIndex=\"rowIndex\">\r\n <tr>\r\n <td>{{ document.fileName || document.name }}</td>\r\n <td>{{ document.size ? formatFileSize(document.size) : '-' }}</td>\r\n <td>{{ document.uploadedBy ? document.uploadedBy : 'You' }}</td>\r\n <td>\r\n {{ document.uploadedAt ? (document.uploadedAt | date:'short') : '-' }}\r\n </td>\r\n <td>\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-download\"\r\n class=\"p-button-sm p-button-text\"\r\n (click)=\"downloadDocument(document)\"\r\n *ngIf=\"document.id || document.s3Key\"\r\n ></button>\r\n <button\r\n pButton\r\n icon=\"pi pi-trash\"\r\n class=\"p-button-sm p-button-text p-button-danger\"\r\n (click)=\"document.id || document.s3Key ? deleteDocument(document) : removeDocument(document, rowIndex)\"\r\n [label]=\"document.id || document.s3Key ? 'Delete' : 'Remove'\"\r\n ></button>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"4\" class=\"text-center p-3\">\r\n No documents found\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <p-progressBar\r\n *ngIf=\"uploading\"\r\n [value]=\"progress\"\r\n [showValue]=\"false\"\r\n styleClass=\"mt-2\"\r\n ></p-progressBar>\r\n `\r\n})\r\nexport class FileUploadType extends FieldType {\r\n uploading: boolean = false;\r\n progress: number = 0;\r\n selectedFiles: File[] = [];\r\n\r\n get allDocuments(): any[] {\r\n // Combine uploaded documents and selected files\r\n const uploaded = Array.isArray(this.props['documentList']) ? this.props['documentList'] : [];\r\n return [...uploaded, ...this.selectedFiles];\r\n }\r\n\r\n constructor(private confirmationService: ConfirmationService, private messageService: MessageService) {\r\n super();\r\n }\r\n\r\n onFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files) {\r\n const newFiles = Array.from(input.files);\r\n // Append new files, avoiding duplicates by name\r\n const existingNames = new Set(this.selectedFiles.map(f => f.name));\r\n const filesToAdd = newFiles.filter(f => !existingNames.has(f.name));\r\n this.selectedFiles = [...this.selectedFiles, ...filesToAdd];\r\n // Sync form control value with selectedFiles\r\n this.formControl.setValue(this.selectedFiles);\r\n this.formControl.markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Get selected files for upload on form submit\r\n */\r\n getSelectedFiles(): File[] {\r\n return this.selectedFiles;\r\n }\r\n\r\n override defaultOptions = {\r\n props: {\r\n multiple: false,\r\n accept: '',\r\n disabled: false,\r\n chooseLabel: 'Upload File',\r\n buttonSize: 'small',\r\n documentList: undefined as any[] | undefined,\r\n loading: false,\r\n onDownloadDocument: undefined as ((document: any) => void) | undefined,\r\n onDeleteDocument: undefined as ((document: any) => void) | undefined,\r\n onRefreshDocuments: undefined as (() => void) | undefined\r\n }\r\n };\r\n\r\n formatFileSize(bytes: number): string {\r\n if (bytes === 0) return '0 B';\r\n const k = 1024;\r\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\r\n }\r\n\r\n /**\r\n * Download a document\r\n * Uses the onDownloadDocument callback from props if provided\r\n */\r\n downloadDocument(document: any): void {\r\n if (this.props['onDownloadDocument']) {\r\n this.props['onDownloadDocument'](document);\r\n } else {\r\n console.warn('No download handler provided. Define onDownloadDocument in props.');\r\n }\r\n }\r\n\r\n /**\r\n * Confirm document deletion with confirmation dialog\r\n */\r\n confirmDeleteDocument(document: any): void {\r\n this.confirmationService.confirm({\r\n message: `Are you sure you want to delete ${document.fileName || 'this document'}?`,\r\n accept: () => {\r\n this.deleteDocument(document);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove document handler for selected files\r\n */\r\n removeDocument(document: any, rowIndex: number): void {\r\n this.selectedFiles.splice(rowIndex, 1);\r\n this.formControl.setValue(this.selectedFiles);\r\n this.formControl.markAsDirty();\r\n }\r\n\r\n /**\r\n * Delete a document (existing uploaded document)\r\n */\r\n deleteDocument(document: any): void {\r\n if (this.props['onDeleteDocument']) {\r\n this.props['onDeleteDocument'](document);\r\n\r\n // Remove from documentList after successful deletion (optimistic UI)\r\n if (Array.isArray(this.props['documentList'])) {\r\n this.props['documentList'] = this.props['documentList'].filter((doc: any) => doc.id !== document.id);\r\n }\r\n\r\n // Refresh document list after successful deletion\r\n if (this.props['onRefreshDocuments']) {\r\n setTimeout(() => {\r\n this.props['onRefreshDocuments']();\r\n }, 500); // Small delay to ensure backend deletion is complete\r\n }\r\n } else {\r\n console.warn('No delete handler provided. Define onDeleteDocument in props.');\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\n/**\r\n * Common Validators for form fields\r\n */\r\nexport class CommonValidators {\r\n /**\r\n * Email validator pattern\r\n * Matches standard email format with @ and domain\r\n */\r\n static readonly EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n \r\n /**\r\n * Indian mobile number validator pattern\r\n * Matches 10-digit numbers, optionally starting with +91 or 0\r\n */\r\n static readonly MOBILE_PATTERN = /^(?:\\+91|0)?[6-9]\\d{9}$/;\r\n \r\n /**\r\n * PAN card validator pattern\r\n * Format: AAAAA0000A (5 letters, 4 numbers, 1 letter)\r\n */\r\n static readonly PAN_PATTERN = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;\r\n\r\n /**\r\n * Returns a validator function to check if the value matches the given pattern\r\n * @param pattern - Regular expression to test\r\n * @param errorMessage - Optional custom error message\r\n */\r\n static patternValidator(pattern: RegExp, errorMessage?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = pattern.test(control.value);\r\n return valid ? null : { \r\n pattern: {\r\n message: errorMessage || 'Invalid format'\r\n } \r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Email validator function\r\n */\r\n static email(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.EMAIL_PATTERN.test(control.value);\r\n return valid ? null : { \r\n email: {\r\n value: control.value,\r\n message: 'Please enter a valid email address'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * Mobile number validator function\r\n */\r\n static mobileNumber(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.MOBILE_PATTERN.test(control.value);\r\n return valid ? null : { \r\n mobileNumber: {\r\n value: control.value,\r\n message: 'Please enter a valid 10-digit mobile number'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * PAN card validator function\r\n */\r\n static panCard(control: AbstractControl): ValidationErrors | null {\r\n if (!control.value) {\r\n return null;\r\n }\r\n \r\n const valid = CommonValidators.PAN_PATTERN.test(control.value);\r\n return valid ? null : { \r\n panCard: {\r\n value: control.value,\r\n message: 'Please enter a valid PAN card number (AAAAA0000A)'\r\n } \r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for email\r\n */\r\n static formlyEmailValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.EMAIL_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid email address',\r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for mobile number\r\n */\r\n static formlyMobileValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.MOBILE_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid 10-digit mobile number',\r\n };\r\n }\r\n\r\n /**\r\n * Generate formly validator configuration for PAN card\r\n */\r\n static formlyPanValidator(): { expression: (fc: AbstractControl) => boolean, message: (error: any, field: FormlyFieldConfig) => string } {\r\n return {\r\n expression: (fc: AbstractControl) => !fc.value || CommonValidators.PAN_PATTERN.test(fc.value),\r\n message: () => 'Please enter a valid PAN card number (AAAAA0000A)',\r\n };\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { TextInputType } from './types/text-input.type';\r\nimport { SelectType } from './types/select.type';\r\nimport { RadioType } from './types/radio.type';\r\nimport { NumericInputType } from './types/numeric-input.type';\r\nimport { MultiselectType } from './types/multiselect.type';\r\nimport { DateType } from './types/date.type';\r\nimport { CheckboxType } from './types/checkbox.type';\r\nimport { TextareaType } from './types/textarea.type';\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { FORMLY_TYPES, FORMLY_WRAPPERS } from './formly.constants';\r\nimport { FileUploadType } from './types/file-upload.type';\r\nimport { CommonValidators } from '../../validators/common-validators';\r\n\r\n@NgModule({\r\n imports: [\r\n FormlyModule.forRoot({\r\n types: [\r\n { name: FORMLY_TYPES.TEXT, component: TextInputType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.NUMBER, component: NumericInputType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.DATE, component: DateType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.CHECKBOX, component: CheckboxType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.RADIO, component: RadioType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.SELECT, component: SelectType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.MULTISELECT, component: MultiselectType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.TEXTAREA, component: TextareaType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n { name: FORMLY_TYPES.FILE_UPLOAD, component: FileUploadType, wrappers: [FORMLY_WRAPPERS.FORM_FIELD] },\r\n ],\r\n wrappers: [\r\n { name: FORMLY_WRAPPERS.FORM_FIELD, component: FormFieldWrapper }\r\n ],\r\n validators: [\r\n { name: 'email', validation: CommonValidators.email },\r\n { name: 'mobileNumber', validation: CommonValidators.mobileNumber },\r\n { name: 'panCard', validation: CommonValidators.panCard }\r\n ],\r\n validationMessages: [\r\n { name: 'required', message: 'This field is required' },\r\n { name: 'minlength', message: (error, field) => `Minimum length is ${error.requiredLength} characters` },\r\n { name: 'maxlength', message: (error, field) => `Maximum length is ${error.requiredLength} characters` },\r\n { name: 'min', message: (error, field) => `Minimum value is ${error.min}` },\r\n { name: 'max', message: (error, field) => `Maximum value is ${error.max}` },\r\n { name: 'email', message: 'Please enter a valid email address' },\r\n { name: 'pattern', message: 'Invalid format' },\r\n { name: 'mobileNumber', message: 'Please enter a valid 10-digit mobile number' },\r\n { name: 'panCard', message: 'Please enter a valid PAN card number (AAAAA0000A)' },\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class CoreFormlyModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { DropdownModule } from 'primeng/dropdown';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { RadioButtonModule } from 'primeng/radiobutton';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { ToastModule } from 'primeng/toast';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\n\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { TextInputType } from './types/text-input.type';\r\nimport { NumericInputType } from './types/numeric-input.type';\r\nimport { CheckboxType } from './types/checkbox.type';\r\nimport { DateType } from './types/date.type';\r\nimport { RadioType } from './types/radio.type';\r\nimport { SelectType } from './types/select.type';\r\nimport { MultiselectType } from './types/multiselect.type';\r\nimport { TextareaType } from './types/textarea.type';\r\nimport { FileUploadType } from './types/file-upload.type';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InputTextModule,\r\n DropdownModule,\r\n DatePickerModule,\r\n CheckboxModule,\r\n RadioButtonModule,\r\n MultiSelectModule,\r\n FileUploadModule,\r\n ToastModule,\r\n ButtonModule,\r\n ProgressBarModule,\r\n FormlyModule.forRoot({\r\n wrappers: [\r\n { name: 'form-field', component: FormFieldWrapper }\r\n ],\r\n types: [\r\n {\r\n name: 'text-input',\r\n component: TextInputType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'numeric-input',\r\n component: NumericInputType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'checkbox',\r\n component: CheckboxType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'radio',\r\n component: RadioType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'date',\r\n component: DateType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'select',\r\n component: SelectType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'multiselect',\r\n component: MultiselectType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'textarea',\r\n component: TextareaType,\r\n wrappers: ['form-field']\r\n },\r\n {\r\n name: 'file-upload',\r\n component: FileUploadType,\r\n wrappers: ['form-field']\r\n }\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class PrimeNGFormlyModule { }\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-keycloak-error-page',\r\n standalone: true,\r\n template: `\r\n <div class=\"keycloak-error-page\">\r\n <h1>Authentication Service Unavailable</h1>\r\n <p>\r\n The authentication service (Keycloak) is not responding.<br>\r\n Please ensure the Keycloak server is running and try again.\r\n </p>\r\n <button (click)=\"reload()\">Retry</button>\r\n </div>\r\n `,\r\n styles: [`\r\n .keycloak-error-page {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 60vh;\r\n color: #b71c1c;\r\n background: #fff3f3;\r\n border-radius: 8px;\r\n margin: 2rem;\r\n padding: 2rem;\r\n box-shadow: 0 2px 8px rgba(0,0,0,0.08);\r\n }\r\n .keycloak-error-page h1 {\r\n font-size: 2rem;\r\n margin-bottom: 1rem;\r\n }\r\n .keycloak-error-page p {\r\n font-size: 1.2rem;\r\n margin-bottom: 2rem;\r\n text-align: center;\r\n }\r\n .keycloak-error-page button {\r\n background: #b71c1c;\r\n color: #fff;\r\n border: none;\r\n padding: 0.75rem 2rem;\r\n border-radius: 4px;\r\n font-size: 1rem;\r\n cursor: pointer;\r\n }\r\n .keycloak-error-page button:hover {\r\n background: #d32f2f;\r\n }\r\n `]\r\n})\r\nexport class KeycloakErrorPageComponent {\r\n reload() {\r\n window.location.reload();\r\n }\r\n}\r\n","import { Component, inject, OnDestroy } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ERROR_SERVICE } from '../../services/base-error.service';\r\n\r\n@Component({\r\n selector: 'app-not-found',\r\n standalone: true,\r\n imports: [RouterModule, ButtonModule],\r\n template: `\r\n <div class=\"flex align-items-center justify-content-center min-h-screen\">\r\n <div class=\"text-center p-4\">\r\n <h1 class=\"text-6xl font-bold text-primary-500 mb-4\">404</h1>\r\n <h2 class=\"text-3xl font-medium mb-4\">Page Not Found</h2>\r\n <p class=\"text-gray-600 mb-6\">{{ errorMessage }}</p>\r\n <button \r\n pButton \r\n label=\"Go to Home\" \r\n icon=\"pi pi-home\" \r\n [routerLink]=\"['/']\"\r\n class=\"p-button-primary\"\r\n (click)=\"clearError()\">\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n min-height: 100vh;\r\n background-color: var(--surface-ground);\r\n }\r\n `]\r\n})\r\nexport class NotFoundComponent implements OnDestroy {\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n readonly error = this.errorService.error;\r\n\r\n get errorMessage(): string {\r\n return this.error()?.message ?? \"The page you are looking for doesn't exist or has been moved.\";\r\n }\r\n\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.errorService.clearError();\r\n }\r\n}\r\n","import { Component, inject, OnDestroy } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ERROR_SERVICE } from '../../services/base-error.service';\r\n\r\n@Component({\r\n selector: 'app-unauthorized',\r\n standalone: true,\r\n imports: [RouterModule, ButtonModule],\r\n template: `\r\n <div class=\"flex align-items-center justify-content-center min-h-screen\">\r\n <div class=\"text-center p-4\">\r\n <h1 class=\"text-6xl font-bold text-primary-500 mb-4\">{{ statusCode }}</h1>\r\n <h2 class=\"text-3xl font-medium mb-4\">Unauthorized Access</h2>\r\n <p class=\"text-gray-600 mb-6\">{{ errorMessage }}</p>\r\n <button \r\n pButton \r\n label=\"Go to Home\" \r\n icon=\"pi pi-home\" \r\n [routerLink]=\"['/']\"\r\n class=\"p-button-primary\"\r\n (click)=\"clearError()\">\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: block;\r\n min-height: 100vh;\r\n background-color: var(--surface-ground);\r\n }\r\n `]\r\n})\r\nexport class UnauthorizedComponent implements OnDestroy {\r\n private readonly errorService = inject(ERROR_SERVICE);\r\n readonly error = this.errorService.error;\r\n\r\n get statusCode(): string {\r\n return this.error()?.code?.toString() ?? '401';\r\n }\r\n\r\n get errorMessage(): string {\r\n return this.error()?.message ?? \"You don't have permission to access this page.\";\r\n }\r\n\r\n clearError() {\r\n this.errorService.clearError();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.errorService.clearError();\r\n }\r\n}\r\n","/**\n * Types mirroring `workflow-engine-lib`'s REST contract (`WorkflowDtos.java`), field-for-field.\n *\n * This is a separate concept from this library's older `Workflow`/`BaseTask` models, which\n * targeted a different, now-removed Java controller (`microservice-starter-lib`'s\n * Spring-State-Machine-based `BaseWorkflowController`/`BaseTaskController`, deleted in favor of\n * `workflow-engine-lib`). See those models' `@deprecated` notices for the distinction.\n */\n\n/** Lifecycle state of a task (`domain/task/TaskState.java`). */\nexport type TaskState =\n | 'CREATED'\n | 'ASSIGNED'\n | 'CLAIMED'\n | 'STARTED'\n | 'COMPLETED'\n | 'REJECTED'\n | 'CANCELLED';\n\n/** Queue ordering. */\nexport type TaskPriority = 'LOW' | 'NORMAL' | 'HIGH' | 'CRITICAL';\n\n/** Lifecycle status of a workflow instance (`domain/instance/InstanceStatus.java`). */\nexport type InstanceStatus = 'RUNNING' | 'COMPLETED' | 'FAILED' | 'CANCELLED';\n\n/** How urgently an attribute's value should read. */\nexport type Severity = 'critical' | 'warn' | 'ok';\n\n/** Which queue view to load. */\nexport type QueueView = 'my' | 'team' | 'completed' | 'overdue';\n\n/** The group name whose attributes belong in the queue row rather than a detail panel. */\nexport const WORKFLOW_PRIMARY_GROUP = 'primary';\n\n/**\n * One display attribute captured on a task when it was raised, or declared on a business object\n * type (`WorkflowDtos.AttributeResponse`). `value` is only ever populated on a task snapshot —\n * declaration-only attributes (e.g. from `BusinessObject.attributes`) always carry `value: null`.\n */\nexport interface WorkflowTaskAttribute {\n key: string;\n label: string;\n value: string | null;\n type: 'TEXT' | 'NUMBER' | 'MONEY' | 'DATE' | 'DATETIME' | 'BOOLEAN' | 'ENUM';\n group: string;\n order: number;\n severity: Severity | null;\n}\n\n/** A unit of work (`WorkflowDtos.TaskResponse`). */\nexport interface WorkflowTask {\n id: string;\n instanceId: string;\n nodeKey: string;\n type: 'HUMAN' | 'SYSTEM';\n state: TaskState;\n name: string;\n formKey: string | null;\n assigneeType: string | null;\n assignee: string | null;\n claimedBy: string | null;\n priority: TaskPriority;\n dueDate: string | null;\n slaMinutes: number | null;\n outcome: string | null;\n createdAt: string;\n claimedAt: string | null;\n startedAt: string | null;\n completedAt: string | null;\n completedBy: string | null;\n\n // --- business context snapshot, captured at task creation ---\n definitionKey: string | null;\n category: string | null;\n subject: string | null;\n businessObject: string | null;\n businessKey: string | null;\n /** Worst severity across all attributes, for a single row-level indicator. */\n severity: Severity | null;\n attributes: WorkflowTaskAttribute[];\n}\n\n/** One execution of a workflow (`WorkflowDtos.InstanceResponse`). */\nexport interface WorkflowInstance {\n id: string;\n definitionKey: string;\n versionNumber: number;\n businessKey: string | null;\n status: InstanceStatus;\n currentNodeKey: string | null;\n variables: Record<string, unknown>;\n startedBy: string | null;\n startedAt: string;\n completedAt: string | null;\n failureReason: string | null;\n}\n\n/** One entry in the audit trail (`WorkflowDtos.AuditResponse`). */\nexport interface WorkflowAuditEntry {\n id: string;\n instanceId: string;\n taskId: string | null;\n nodeKey: string | null;\n action: string;\n actor: string | null;\n occurredAt: string;\n detail: Record<string, unknown>;\n}\n\n/** A workflow definition (`WorkflowDtos.DefinitionResponse`). */\nexport interface WorkflowDefinitionSummary {\n id: string;\n key: string;\n name: string;\n description: string | null;\n category: string | null;\n businessObject: string | null;\n}\n\n/** One deployed version of a workflow, without its authored document (`WorkflowDtos.VersionResponse`). */\nexport interface WorkflowVersionSummary {\n id: string;\n definitionKey: string;\n versionNumber: number;\n status: string;\n nodeCount: number;\n deployedBy: string | null;\n deployedAt: string;\n}\n\n/** One deployed version of a workflow, including its authored document (`WorkflowDtos.VersionDetailResponse`). */\nexport interface WorkflowVersionDetail {\n id: string;\n definitionKey: string;\n versionNumber: number;\n status: string;\n definition: string;\n deployedBy: string | null;\n deployedAt: string;\n}\n\n/** A registered business object type (`WorkflowDtos.BusinessObjectResponse`). */\nexport interface BusinessObject {\n id: string;\n code: string;\n name: string;\n description: string | null;\n category: string | null;\n keyLabel: string;\n active: boolean;\n attributes: WorkflowTaskAttribute[];\n workflows: string[];\n}\n\n/** A registered form under a business object (`WorkflowDtos.FormResponse`). */\nexport interface WorkflowForm {\n id: string;\n businessObject: string | null;\n formKey: string;\n name: string;\n version: number;\n schema: string | null;\n active: boolean;\n createdBy: string | null;\n createdAt: string;\n}\n\n/** A page of results, as returned by the engine's queue endpoints (`WorkflowDtos.PageResponse`). */\nexport interface WorkflowPage<T> {\n content: T[];\n pageNumber: number;\n pageSize: number;\n totalElements: number;\n totalPages: number;\n}\n\n/** An engine error response (`WorkflowDtos.ErrorResponse`). */\nexport interface WorkflowErrorResponse {\n error: string;\n message: string;\n timestamp: string;\n}\n\n/** Request body for deploying a workflow definition. */\nexport interface DeployWorkflowRequest {\n key: string;\n name?: string;\n description?: string;\n category?: string;\n definition: string;\n businessObject?: string;\n activate?: boolean;\n}\n\n/** Request body for starting a new instance. */\nexport interface StartInstanceRequest {\n definitionKey: string;\n versionNumber?: number;\n businessKey?: string;\n variables?: Record<string, unknown>;\n}\n\n/** Request body for completing or rejecting a task. */\nexport interface CompleteTaskRequest {\n outcome?: string;\n variables?: Record<string, unknown>;\n comment?: string;\n}\n\n/** Request body for reassigning a task. */\nexport interface ReassignTaskRequest {\n assigneeType: string;\n assignee: string;\n}\n\n/** Request body for cancelling an instance. */\nexport interface CancelInstanceRequest {\n reason?: string;\n}\n\n/** Request body for signalling an external event to an instance. */\nexport interface SignalEventRequest {\n eventName: string;\n variables?: Record<string, unknown>;\n}\n\n/** Request body for setting instance variables directly. */\nexport interface SetVariablesRequest {\n variables?: Record<string, unknown>;\n}\n\n/** Search criteria for `POST /workflow/queue/search`. */\nexport interface QueueSearchCriteria {\n definitionKey?: string;\n nodeKey?: string;\n claimedBy?: string;\n searchText?: string;\n /** ISO instant. */\n dueBefore?: string;\n minPriority?: TaskPriority;\n states?: TaskState[];\n types?: Array<'HUMAN' | 'SYSTEM'>;\n assignees?: string[];\n}\n\n/** One declared attribute in a business-object registration request. */\nexport interface RegisterAttributeRequest {\n key: string;\n label?: string;\n type?: string;\n group?: string;\n order?: number;\n valueTemplate?: string;\n severityExpression?: string;\n}\n\n/** Request body for registering a business object type. */\nexport interface RegisterBusinessObjectRequest {\n code: string;\n name?: string;\n description?: string;\n category?: string;\n keyLabel?: string;\n attributes?: RegisterAttributeRequest[];\n}\n\n/** Request body for registering a form under a business object. */\nexport interface RegisterFormRequest {\n formKey: string;\n name?: string;\n schema?: string;\n activate?: boolean;\n}\n","import { Observable, throwError } from 'rxjs';\nimport { MessageService } from 'primeng/api';\nimport { HttpUtilityService } from '../services/http-utility.service';\nimport { UtilsService } from '../services/utils.service';\nimport {\n BusinessObject,\n CancelInstanceRequest,\n CompleteTaskRequest,\n DeployWorkflowRequest,\n QueueSearchCriteria,\n QueueView,\n ReassignTaskRequest,\n RegisterBusinessObjectRequest,\n RegisterFormRequest,\n SetVariablesRequest,\n SignalEventRequest,\n StartInstanceRequest,\n WorkflowAuditEntry,\n WorkflowDefinitionSummary,\n WorkflowForm,\n WorkflowInstance,\n WorkflowPage,\n WorkflowTask,\n WorkflowVersionDetail,\n WorkflowVersionSummary,\n} from './workflow-engine.models';\n\n/**\n * Client for `workflow-engine-lib`'s REST API — the data-driven engine that replaced\n * `microservice-starter-lib`'s Spring-State-Machine-based workflow subsystem.\n *\n * Follows this library's established DI convention (see {@link BaseEntityService}): not\n * `providedIn: 'root'`, constructed with the backend base URL by the consuming application —\n * *\n * ```ts\n * providers: [{\n * provide: WorkflowEngineApiService,\n * useFactory: (http: HttpUtilityService, utils: UtilsService, msg: MessageService) =>\n * new WorkflowEngineApiService(http, utils, 'https://api.example.com/workflow', msg),\n * deps: [HttpUtilityService, UtilsService, MessageService],\n * }]\n * ```\n *\n * Every method maps one-to-one onto an engine endpoint; nothing here is business-specific.\n *\n * Deliberately not decorated with {@code @Injectable()} — like {@link BaseEntityService}, this\n * class is always provided via an explicit `useFactory`/`useClass` provider (see above), never\n * auto-constructed by Angular's injector, so its constructor isn't required to be fully\n * DI-resolvable (`backendBaseUrl: string` isn't a valid injection token on its own).\n */\nexport class WorkflowEngineApiService {\n protected apiUrl: string;\n\n /**\n * Creates the client.\n *\n * @param httpUtility HTTP requests, loading state, standardised error handling\n * @param utilsService UUID validation\n * @param backendBaseUrl base URL of the service hosting `workflow-engine-lib`, e.g.\n * `https://api.example.com/workflow`\n * @param messageService optional, shown on client-side validation failures\n */\n constructor(\n protected httpUtility: HttpUtilityService,\n protected utilsService: UtilsService,\n protected backendBaseUrl: string,\n protected messageService: MessageService | undefined,\n ) {\n this.apiUrl = backendBaseUrl.replace(/\\/+$/, '');\n }\n\n private requireUuid(value: string): Observable<never> | null {\n if (this.utilsService.isValidUUID(value)) {\n return null;\n }\n this.utilsService.showError('Invalid UUID format', this.messageService);\n return throwError(() => new Error('Invalid UUID format'));\n }\n\n // ---------------------------------------------------------------- tasks\n\n /** Finds a task by id. `GET /tasks/{id}` */\n getTask(id: string): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.get<WorkflowTask>(`${this.apiUrl}/tasks/${id}`);\n }\n\n /** Claims a task out of a shared queue. `POST /tasks/{id}/claim` */\n claimTask(id: string): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/claim`, {});\n }\n\n /** Releases a claim, returning the task to its queue. `POST /tasks/{id}/unclaim` */\n unclaimTask(id: string): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/unclaim`, {});\n }\n\n /** Marks work on a task as actively started. `POST /tasks/{id}/start` */\n startTask(id: string): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/start`, {});\n }\n\n /** Completes a task and resumes its workflow. `POST /tasks/{id}/complete` */\n completeTask(id: string, request: CompleteTaskRequest = {}): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/complete`, request);\n }\n\n /** Rejects a task, resuming its workflow down a different path. `POST /tasks/{id}/reject` */\n rejectTask(id: string, request: CompleteTaskRequest = {}): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/reject`, request);\n }\n\n /** Reassigns a task to a different subject. `POST /tasks/{id}/reassign` */\n reassignTask(id: string, request: ReassignTaskRequest): Observable<WorkflowTask> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowTask>(`${this.apiUrl}/tasks/${id}/reassign`, request);\n }\n\n // ---------------------------------------------------------------- instances\n\n /** Starts a new workflow instance. `POST /instances` */\n startInstance(request: StartInstanceRequest): Observable<WorkflowInstance> {\n return this.httpUtility.post<WorkflowInstance>(`${this.apiUrl}/instances`, request);\n }\n\n /** Finds an instance by id. `GET /instances/{id}` */\n getInstance(id: string): Observable<WorkflowInstance> {\n return this.requireUuid(id) ?? this.httpUtility.get<WorkflowInstance>(`${this.apiUrl}/instances/${id}`);\n }\n\n /** Finds instances by business key. `GET /instances?businessKey=...` */\n findInstancesByBusinessKey(businessKey: string): Observable<WorkflowInstance[]> {\n return this.httpUtility.get<WorkflowInstance[]>(`${this.apiUrl}/instances`, {\n params: { businessKey },\n });\n }\n\n /** Loads an instance's audit history, oldest first. `GET /instances/{id}/history` */\n instanceHistory(id: string): Observable<WorkflowAuditEntry[]> {\n return this.requireUuid(id) ?? this.httpUtility.get<WorkflowAuditEntry[]>(`${this.apiUrl}/instances/${id}/history`);\n }\n\n /** Reads an instance's current variables. `GET /instances/{id}/variables` */\n getInstanceVariables(id: string): Observable<Record<string, unknown>> {\n return this.requireUuid(id) ?? this.httpUtility.get<Record<string, unknown>>(`${this.apiUrl}/instances/${id}/variables`);\n }\n\n /** Sets or replaces instance variables outside of any node execution. `PUT /instances/{id}/variables` */\n setInstanceVariables(id: string, request: SetVariablesRequest): Observable<WorkflowInstance> {\n return this.requireUuid(id) ?? this.httpUtility.put<WorkflowInstance>(`${this.apiUrl}/instances/${id}/variables`, request);\n }\n\n /** Signals an external event to a waiting instance. `POST /instances/{id}/signal` */\n signalInstance(id: string, request: SignalEventRequest): Observable<WorkflowInstance> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowInstance>(`${this.apiUrl}/instances/${id}/signal`, request);\n }\n\n /** Cancels a running instance and withdraws its open tasks. `POST /instances/{id}/cancel` */\n cancelInstance(id: string, request: CancelInstanceRequest = {}): Observable<WorkflowInstance> {\n return this.requireUuid(id) ?? this.httpUtility.post<WorkflowInstance>(`${this.apiUrl}/instances/${id}/cancel`, request);\n }\n\n // ---------------------------------------------------------------- definitions\n\n /** Deploys a workflow definition, creating a new immutable version. `POST /definitions` */\n deployDefinition(request: DeployWorkflowRequest): Observable<WorkflowVersionSummary> {\n return this.httpUtility.post<WorkflowVersionSummary>(`${this.apiUrl}/definitions`, request);\n }\n\n /** Lists every workflow definition. `GET /definitions` */\n listDefinitions(): Observable<WorkflowDefinitionSummary[]> {\n return this.httpUtility.get<WorkflowDefinitionSummary[]>(`${this.apiUrl}/definitions`);\n }\n\n /** Finds a definition by key. `GET /definitions/{key}` */\n getDefinition(key: string): Observable<WorkflowDefinitionSummary> {\n return this.httpUtility.get<WorkflowDefinitionSummary>(`${this.apiUrl}/definitions/${key}`);\n }\n\n /** Lists every deployed version of a definition. `GET /definitions/{key}/versions` */\n listVersions(key: string): Observable<WorkflowVersionSummary[]> {\n return this.httpUtility.get<WorkflowVersionSummary[]>(`${this.apiUrl}/definitions/${key}/versions`);\n }\n\n /** Loads the active version's authored document. `GET /definitions/{key}/versions/active` */\n activeVersion(key: string): Observable<WorkflowVersionDetail> {\n return this.httpUtility.get<WorkflowVersionDetail>(`${this.apiUrl}/definitions/${key}/versions/active`);\n }\n\n /** Activates a specific version. `POST /definitions/{key}/versions/{versionNumber}/activate` */\n activateVersion(key: string, versionNumber: number): Observable<WorkflowVersionSummary> {\n return this.httpUtility.post<WorkflowVersionSummary>(\n `${this.apiUrl}/definitions/${key}/versions/${versionNumber}/activate`,\n {},\n );\n }\n\n // ---------------------------------------------------------------- queue\n\n /** Loads one of the queue views. `GET /queue/{view}` */\n queue(view: QueueView, page = 0, size = 20): Observable<WorkflowPage<WorkflowTask>> {\n return this.httpUtility.get<WorkflowPage<WorkflowTask>>(`${this.apiUrl}/queue/${view}`, {\n params: { page, size },\n });\n }\n\n /** Searches the queue with structured criteria. `POST /queue/search` */\n searchQueue(\n criteria: QueueSearchCriteria = {},\n page = 0,\n size = 20,\n ): Observable<WorkflowPage<WorkflowTask>> {\n return this.httpUtility.post<WorkflowPage<WorkflowTask>>(`${this.apiUrl}/queue/search`, criteria, {\n params: { page, size },\n });\n }\n\n // ---------------------------------------------------------------- business objects\n\n /** Registers a business object type, or updates one with the same code. `POST /business-objects` */\n registerBusinessObject(request: RegisterBusinessObjectRequest): Observable<BusinessObject> {\n return this.httpUtility.post<BusinessObject>(`${this.apiUrl}/business-objects`, request);\n }\n\n /** Lists every registered business object. `GET /business-objects` */\n listBusinessObjects(): Observable<BusinessObject[]> {\n return this.httpUtility.get<BusinessObject[]>(`${this.apiUrl}/business-objects`);\n }\n\n /** Finds one business object, including the workflows bound to it. `GET /business-objects/{code}` */\n getBusinessObject(code: string): Observable<BusinessObject> {\n return this.httpUtility.get<BusinessObject>(`${this.apiUrl}/business-objects/${code}`);\n }\n\n /** Registers a new version of a form under a business object. `POST /business-objects/{code}/forms` */\n registerForm(code: string, request: RegisterFormRequest): Observable<WorkflowForm> {\n return this.httpUtility.post<WorkflowForm>(`${this.apiUrl}/business-objects/${code}/forms`, request);\n }\n\n /** Lists every form registered under a business object. `GET /business-objects/{code}/forms` */\n listForms(code: string): Observable<WorkflowForm[]> {\n return this.httpUtility.get<WorkflowForm[]>(`${this.apiUrl}/business-objects/${code}/forms`);\n }\n\n /** Finds the active form version a new task would render. `GET /business-objects/{code}/forms/{formKey}` */\n activeForm(code: string, formKey: string): Observable<WorkflowForm> {\n return this.httpUtility.get<WorkflowForm>(`${this.apiUrl}/business-objects/${code}/forms/${formKey}`);\n }\n}\n","/*\r\n * Public API Surface of core-lib\r\n */\r\n\r\n// Components\r\nexport * from './lib/components/base-form.component';\r\nexport * from './lib/components/base-list-page.component';\r\nexport * from './lib/components/base-list-tabbed-form.component';\r\nexport * from './lib/components/base-page.component';\r\nexport * from './lib/components/base-tabbed-form.component';\r\nexport * from './lib/components/base-table.component';\r\nexport * from './lib/components/base-task-dashboard.component';\r\nexport * from './lib/components/base-task-details.component';\r\n\r\n// Keycloak\r\nexport * from './lib/keycloak/keycloak-config.interface';\r\nexport * from './lib/keycloak/keycloak.interface';\r\nexport * from './lib/keycloak/keycloak-service.token';\r\nexport * from './lib/keycloak/keycloak.guard';\r\nexport * from './lib/keycloak/keycloak.providers';\r\nexport * from './lib/keycloak/keycloak.service';\r\nexport * from './lib/keycloak/keycloak.token';\r\n\r\nexport * from './lib/models/department.interface';\r\nexport * from './lib/services/master-data-service.interface';\r\n\r\n// Error Handling\r\nexport * from './lib/services/base-error.service';\r\n\r\nexport * from './lib/services/base-entity.service';\r\nexport * from './lib/services/base-task.service';\r\nexport * from './lib/services/entity-service.interface';\r\nexport * from './lib/services/task-entity-service.interface';\r\nexport * from './lib/services/entity-service.interface';\r\nexport * from './lib/services/entity-registry.service';\r\nexport * from './lib/services/enum-registry.service';\r\nexport * from './lib/services/form.service';\r\nexport * from './lib/services/formly-config.service';\r\nexport * from './lib/services/http-utility.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/reference-data-provider.service';\r\nexport * from './lib/services/utils.service';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/indian-date.pipe';\r\n\r\nexport * from './lib/models/base.model';\r\nexport * from './lib/models/base-request.model';\r\nexport * from './lib/models/base-response.model';\r\nexport * from './lib/models/base-task.model';\r\nexport * from './lib/models/base.comment.model';\r\nexport * from './lib/models/base-create-request.model';\r\nexport * from './lib/models/base-update-request.model';\r\nexport * from './lib/models/pagination/filter-criteria.interface';\r\nexport * from './lib/models/pagination/table-column-datatype.enum';\r\nexport * from './lib/models/pagination/page-request.interface';\r\nexport * from './lib/models/pagination/page.interface';\r\nexport * from './lib/models/pagination/sort-criteria.interface';\r\n\r\n// Enums\r\nexport * from './lib/enums/component-context.enum';\r\nexport * from './lib/enums/tabbed-form-type.enum';\r\nexport * from './lib/enums/task-role.enum';\r\n\r\n// Constants\r\nexport * from './lib/constants/app.constants';\r\nexport * from './lib/constants/app.messages';\r\n\r\n// Formly\r\nexport * from './lib/components/formly/core-formly.module';\r\nexport * from './lib/components/formly/field.interface';\r\nexport * from './lib/components/formly/form-field.wrapper';\r\nexport * from './lib/components/formly/formly.constants';\r\nexport * from './lib/components/formly/primeng-formly.module';\r\n\r\n// Validators\r\nexport * from './lib/validators/common-validators';\r\n\r\n// Common Components\r\nexport * from './lib/components/keycloak-error-banner/keycloak-error-page.component';\r\nexport * from './lib/components/not-found/not-found.component';\r\nexport * from './lib/components/unauthorized/unauthorized.component';\r\n\r\n// Workflow Engine (workflow-engine-lib client — see workflow-engine.models.ts for why this is\r\n// a separate concept from the deprecated Workflow/BaseTask models above)\r\nexport * from './lib/workflow-engine/workflow-engine.models';\r\nexport * from './lib/workflow-engine/workflow-engine-api.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UtilsService","i2.NotificationService","i1.EnumRegistryService","i1","i3.UtilsService","i4.FormlyConfigService","i4","take","takeUntil","distinctUntilChanged","tap","map","finalize","mergeMap","catchError","i2","i1.HttpUtilityService","i2.ReferenceDataProviderService","i3","i5"],"mappings":"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"}
|