@codex-ts/core-lib 1.0.18 → 1.0.20
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 +87 -195
- package/fesm2022/codex-ts-core-lib.mjs.map +1 -1
- package/lib/keycloak/keycloak-config.interface.d.ts +15 -54
- package/lib/keycloak/keycloak.guard.d.ts +1 -0
- package/lib/keycloak/keycloak.interceptor.d.ts +2 -3
- package/lib/keycloak/keycloak.providers.d.ts +1 -2
- package/lib/keycloak/keycloak.service.d.ts +13 -53
- package/package.json +3 -2
|
@@ -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/enums/tabbed-form-type.enum.ts","../../../projects/core-lib/src/lib/enums/task-role.enum.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.interceptor.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.providers.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.guard.ts","../../../projects/core-lib/src/lib/services/http-utility.service.ts","../../../projects/core-lib/src/lib/services/utils.service.ts","../../../projects/core-lib/src/lib/services/notification.service.ts","../../../projects/core-lib/src/lib/services/base-crud.service.ts","../../../projects/core-lib/src/lib/services/base-task.service.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/services/form.service.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/core-formly.module.ts","../../../projects/core-lib/src/lib/components/base-page.component.ts","../../../projects/core-lib/src/lib/components/base-form.component.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-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-list-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-task-details.component.ts","../../../projects/core-lib/src/lib/components/base-task-dashboard.component.ts","../../../projects/core-lib/src/lib/pipes/indian-date.pipe.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","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 { 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, inject, Injectable, signal } from '@angular/core';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Observable } from 'rxjs';\r\n\r\ndeclare var Keycloak: any;\r\n\r\n/** Keycloak error types */\r\nexport enum KeycloakErrorType {\r\n SCRIPT_LOAD = 'SCRIPT_LOAD_ERROR',\r\n INIT = 'INIT_ERROR',\r\n TOKEN_REFRESH = 'TOKEN_REFRESH_ERROR',\r\n PROFILE_LOAD = 'PROFILE_LOAD_ERROR'\r\n}\r\n\r\n/** Keycloak error with type and details */\r\nexport class KeycloakError extends Error {\r\n constructor(\r\n public type: KeycloakErrorType,\r\n message: string,\r\n public originalError?: any\r\n ) {\r\n super(message);\r\n this.name = 'KeycloakError';\r\n }\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 {\r\n private readonly http = inject(HttpClient);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n\r\n #keycloakInstance = signal<any>(null);\r\n #isAuthenticated = signal<boolean>(false);\r\n #userProfile = signal<any>(null);\r\n\r\n readonly isAuthenticated$ = computed(() => this.#isAuthenticated());\r\n readonly userProfile$ = computed(() => this.#userProfile());\r\n\r\n /** Check if URL should be excluded from bearer token */\r\n isUrlExcluded(url: string): boolean {\r\n return this.config.bearerExcludedUrls?.some(excluded => \r\n url.startsWith(excluded) || new RegExp(excluded).test(url)\r\n ) ?? false;\r\n }\r\n\r\n /** Validate Keycloak configuration */\r\n private validateConfig() {\r\n if (!this.config.authServerUrl) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Auth server URL is required'\r\n );\r\n }\r\n if (!this.config.realm) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Realm is required'\r\n );\r\n }\r\n if (!this.config.clientId) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Client ID is required'\r\n );\r\n }\r\n }\r\n\r\n private loadKeycloakScript(): Promise<void> {\r\n if (!this.isBrowser) return Promise.resolve();\r\n if (typeof Keycloak !== 'undefined') return Promise.resolve();\r\n\r\n return new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = `${this.config.authServerUrl}/js/keycloak.js`;\r\n script.async = true;\r\n script.onload = () => resolve();\r\n script.onerror = () => reject(new Error('Failed to load Keycloak script'));\r\n document.head.appendChild(script);\r\n });\r\n }\r\n\r\n private getSilentCheckUrl(): string {\r\n if (!this.isBrowser) return '';\r\n // Use the configured URL or fallback to a default location\r\n return this.config.silentCheckSsoRedirectUri ?? \r\n `${window.location.origin}/assets/silent-check-sso.html`;\r\n }\r\n\r\n /**\r\n * Initialize Keycloak authentication\r\n * @returns Promise resolving to true if initialization is successful\r\n * @throws KeycloakError if initialization fails\r\n */\r\n async initialize(): Promise<boolean> {\r\n if (!this.isBrowser) return false;\r\n\r\n try {\r\n this.validateConfig();\r\n await this.loadKeycloakScript();\r\n \r\n const keycloak = new Keycloak(this.config);\r\n this.#keycloakInstance.set(keycloak);\r\n \r\n const initOptions = {\r\n onLoad: 'login-required',\r\n silentCheckSsoRedirectUri: this.getSilentCheckUrl(),\r\n checkLoginIframe: false,\r\n ...this.config.initOptions\r\n };\r\n\r\n const authenticated = await keycloak.init(initOptions);\r\n this.#isAuthenticated.set(authenticated);\r\n \r\n if (authenticated) {\r\n await this.loadUserProfile();\r\n }\r\n\r\n return authenticated;\r\n } catch (error) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Failed to initialize Keycloak',\r\n error\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Redirect to Keycloak login page\r\n * @param options Additional login options\r\n * @returns Promise resolving when login is complete\r\n */\r\n login(options: any = {}): Promise<void> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Keycloak not initialized'\r\n );\r\n }\r\n\r\n const loginOptions = {\r\n ...this.config.loginOptions,\r\n ...options\r\n };\r\n return instance.login(loginOptions);\r\n }\r\n\r\n /**\r\n * Logout the current user\r\n * @returns Promise resolving when logout is complete\r\n */\r\n logout(): Promise<void> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Keycloak not initialized'\r\n );\r\n }\r\n return instance.logout();\r\n }\r\n\r\n /**\r\n * Get the current access token\r\n * @returns Promise resolving to the access token or null\r\n */\r\n async getToken(): Promise<string | null> {\r\n try {\r\n await this.updateToken(this.config.tokenValidityInSeconds || 60);\r\n return this.#keycloakInstance()?.token ?? null;\r\n } catch (error) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.TOKEN_REFRESH,\r\n 'Failed to get token',\r\n error\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get the current user's roles\r\n * @returns Array of role names\r\n */\r\n getRoles(): string[] {\r\n const keycloak = this.#keycloakInstance();\r\n if (!keycloak) {\r\n throw new KeycloakError(\r\n KeycloakErrorType.INIT,\r\n 'Keycloak not initialized'\r\n );\r\n }\r\n return keycloak.realmAccess?.roles ?? [];\r\n }\r\n\r\n /**\r\n * Check if the current user has a specific role\r\n * @param role Role name to check\r\n * @returns true if user has the role\r\n */\r\n hasRole(role: string): boolean {\r\n return this.getRoles().includes(role);\r\n }\r\n\r\n /**\r\n * Update the access token if it's close to expiring\r\n * @param minValidity Minimum validity time in seconds\r\n * @returns Promise resolving to true if token was refreshed\r\n */\r\n updateToken(minValidity: number = 60): Promise<boolean> {\r\n return new Promise<boolean>((resolve, reject) => {\r\n const keycloak = this.#keycloakInstance();\r\n if (!keycloak?.token) {\r\n reject(new KeycloakError(\r\n KeycloakErrorType.TOKEN_REFRESH,\r\n 'No token available'\r\n ));\r\n return;\r\n }\r\n\r\n keycloak.updateToken(minValidity)\r\n .then((refreshed: boolean) => {\r\n resolve(refreshed);\r\n })\r\n .catch((error: any) => {\r\n reject(new KeycloakError(\r\n KeycloakErrorType.TOKEN_REFRESH,\r\n 'Failed to refresh token',\r\n error\r\n ));\r\n });\r\n });\r\n }\r\n\r\n private async loadUserProfile(): Promise<void> {\r\n try {\r\n const keycloak = this.#keycloakInstance();\r\n if (!keycloak) return;\r\n \r\n const profile = await keycloak.loadUserProfile();\r\n this.#userProfile.set(profile);\r\n } catch (error) {\r\n console.error('Failed to load user profile:', error);\r\n }\r\n }\r\n}\r\n","import { Injectable } 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\n\r\n@Injectable()\r\nexport class KeycloakAuthInterceptor implements HttpInterceptor {\r\n constructor(private keycloakService: KeycloakService) {}\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // Skip bearer token for excluded URLs\r\n if (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) {\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 return next.handle(req);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n // Handle 401/403 errors by refreshing token or redirecting to login\r\n if (error.status === 401 || error.status === 403) {\r\n return from(this.keycloakService.updateToken()).pipe(\r\n mergeMap(refreshed => {\r\n if (refreshed) {\r\n return from(this.keycloakService.getToken()).pipe(\r\n mergeMap(newToken => {\r\n const authReq = req.clone({\r\n headers: req.headers.set('Authorization', `Bearer ${newToken}`)\r\n });\r\n return next.handle(authReq);\r\n })\r\n );\r\n } else {\r\n // Token refresh failed, redirect to login\r\n this.keycloakService.login();\r\n return throwError(() => error);\r\n }\r\n })\r\n );\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\nexport function initializeKeycloak(keycloak: KeycloakService) {\r\n return () => keycloak.initialize();\r\n}\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 {\r\n provide: KEYCLOAK_CONFIG,\r\n useValue: config\r\n },\r\n KeycloakService,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: initializeKeycloak,\r\n multi: true,\r\n deps: [KeycloakService]\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: KeycloakAuthInterceptor,\r\n multi: true\r\n }\r\n ];\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { Observable, map } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakAuthGuard {\r\n private readonly keycloakService = inject(KeycloakService);\r\n private readonly router = inject(Router);\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n return toObservable(this.keycloakService.isAuthenticated$).pipe(\r\n map(authenticated => {\r\n if (!authenticated) {\r\n this.keycloakService.login({\r\n redirectUri: window.location.origin + state.url\r\n });\r\n return false;\r\n }\r\n\r\n const requiredRoles = route.data['roles'] as string[];\r\n if (requiredRoles && !this.hasRequiredRoles(requiredRoles)) {\r\n return this.router.createUrlTree(['/unauthorized']);\r\n }\r\n\r\n return true;\r\n })\r\n );\r\n }\r\n\r\n private hasRequiredRoles(requiredRoles: string[]): boolean {\r\n return requiredRoles.every(role => this.keycloakService.getRoles().includes(role));\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 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 { 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 { HttpParams, HttpErrorResponse } 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';\r\n\r\nexport abstract class BaseCrudService<T extends { uuid: string }> 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 * 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 getAll(pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, pageRequest);\r\n } else {\r\n return this.httpUtility.get<Page<T>>(this.apiUrl);\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\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\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\r\n return this.httpUtility.delete<void>(`${this.apiUrl}/${uuid}`);\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 { BaseCrudService } from './base-crud.service';\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<T extends { uuid: string }> extends BaseCrudService<T> {\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 ) {\r\n super(httpUtility, utilsService, resourcePath, backendBaseUrl, messageService);\r\n }\r\n\r\n /**\r\n * Find tasks by department with pagination\r\n * Maps to GET /department/{department} endpoint\r\n */\r\n findByDepartment(department: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/department/${department}/page`, pageRequest);\r\n }\r\n return this.httpUtility.get<Page<T>>(`${this.apiUrl}/department/${department}`);\r\n }\r\n\r\n /**\r\n * Find tasks by assigned user with pagination\r\n * Maps to GET /user/{userId} endpoint\r\n */\r\n findByAssignedUser(userId: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/user/${userId}/page`, pageRequest);\r\n }\r\n return this.httpUtility.get<Page<T>>(`${this.apiUrl}/user/${userId}`);\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: string, 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","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 { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { finalize, map, take } 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';\r\nimport { FormlyConfigService } from './formly-config.service';\r\nimport { NotificationService } from './notification.service';\r\n\r\nexport class FormService<T extends { uuid: string }> {\r\n protected 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 this.initializeForm();\r\n }\r\n\r\n private initializeForm(): void {\r\n this.formState.fields = this.getFormlyFieldConfig();\r\n if (this.formState.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\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 this.formState = {\r\n ...this.formState,\r\n currentData: { ...data },\r\n originalData: data,\r\n isNew: false,\r\n loading: false\r\n };\r\n this.formState.form.patchValue(data, { emitEvent: false });\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 if (!this.formState.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n if (!this.formState.hasChanges && !this.formState.isNew) {\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 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 return this.formState.isNew\r\n ? this.entityService.create(formData)\r\n : this.entityService.update(this.formState.originalData!.uuid, formData);\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 this.formState.form.patchValue(value);\r\n this.updateCurrentData();\r\n this.checkFormChanges();\r\n }\r\n\r\n private updateCurrentData(): void {\r\n this.formState.currentData = {\r\n ...this.formState.form.value,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n }\r\n\r\n private checkFormChanges(): void {\r\n this.formState.hasChanges = this.hasFormChanges(this.formState.currentData);\r\n }\r\n\r\n private hasFormChanges(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 currentValue = currentData[key];\r\n const originalValue = (this.formState.originalData as any)[key];\r\n return currentValue !== originalValue;\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 { InputTextModule } from 'primeng/inputtext';\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 [formlyAttributes]=\"field\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [attr.aria-label]=\"props['label'] || props['placeholder'] || ''\"\r\n class=\"w-full\"/>\r\n `\r\n})\r\nexport class TextInputType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n type: 'text',\r\n placeholder: ''\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 [formlyAttributes]=\"field\"\r\n [options]=\"options\"\r\n [virtualScroll]=\"false\"\r\n [showClear]=\"false\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\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 [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}","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 [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}","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 [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 [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 [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 [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}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\ninterface FormlyValidationMessage {\r\n [key: string]: string;\r\n}\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?: FormlyValidationMessage;\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 .p-input-error :where(input, .p-inputtext) {\r\n border-color: var(--red-500);\r\n }\r\n\r\n .p-input-error :where(input:enabled:focus, .p-inputtext:enabled:focus) {\r\n border-color: var(--red-500);\r\n box-shadow: 0 0 0 1px var(--red-500);\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 `]\r\n})\r\nexport class FormFieldWrapper extends FieldWrapper<FormlyFieldConfig<FormlyFieldProps>> {\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 return this.props.validation?.messages?.[firstErrorKey] || 'This field is required';\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}","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};\r\n\r\nexport const FORMLY_WRAPPERS = {\r\n FORM_FIELD: 'form-field'\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'; // Added import\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { FORMLY_TYPES, FORMLY_WRAPPERS } from './formly.constants'; // Added import\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] }, // Added textarea type\r\n ],\r\n wrappers: [\r\n { name: FORMLY_WRAPPERS.FORM_FIELD, component: FormFieldWrapper }\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class CoreFormlyModule { }\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 and message display.\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 { 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';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\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 { uuid: string }>\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","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\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 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 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 // 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 }));\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 });\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 { 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';\r\nimport { TabConfig, TabbedFormState } from '../states/tabbed-form.state';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseTabbedFormComponent<T extends { uuid: string }>\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 { 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';\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 { 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';\r\nimport { FormService} from '../services/form.service';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { ComponentContext } from '../enums/component-context.enum';\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 { uuid: string }> \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 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 protected initializeServices(): Observable<void> {\r\n return of(void 0).pipe(\r\n map(() => {\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 this.state = this.formService.getState();\r\n this.loading = this.state.loading;\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: () => this.onInitialized(),\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 const mode = params[AppConstants.FORM.MODE];\r\n if (mode) {\r\n this.formService.setMode(mode);\r\n this.state = this.formService.getState();\r\n }\r\n\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (uuid) {\r\n this.loadData(uuid);\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 }\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.state.loading = false;\r\n this.state = this.formService.getState();\r\n })\r\n )\r\n .subscribe({\r\n error: (error) => this.handleLoadError(error)\r\n });\r\n }\r\n\r\n protected onSubmit(): void {\r\n this.formService.submit()\r\n .pipe(takeUntil(this.destroyed$))\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 onInitialized(): void {\r\n console.log('[BaseTaskDetailsComponent] Initialized successfully');\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 { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { finalize } 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\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<T extends { uuid: string }> 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\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 * Initialize the component and load reference data\r\n */\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.loadReferenceData();\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.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 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 * Override the getEntityService to include task-specific operations\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 { 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","/*\r\n * Public API Surface of core-lib\r\n */\r\n\r\n// Constants\r\nexport * from './lib/constants/app.constants';\r\nexport * from './lib/constants/app.messages';\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// Models\r\nexport * from './lib/models/base.model';\r\nexport * from './lib/models/base-task.model';\r\nexport * from './lib/models/base-request.model';\r\nexport * from './lib/models/base-response.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/page.interface';\r\nexport * from './lib/models/pagination/page-request.interface';\r\n\r\n// Keycloak\r\nexport { KEYCLOAK_CONFIG } from './lib/keycloak/keycloak.token';\r\nexport * from './lib/keycloak/keycloak-config.interface';\r\nexport * from './lib/keycloak/keycloak.service';\r\nexport { provideKeycloak } from './lib/keycloak/keycloak.providers';\r\nexport { KeycloakAuthGuard } from './lib/keycloak/keycloak.guard';\r\n\r\n\r\n// Services\r\nexport * from './lib/services/http-utility.service';\r\nexport * from './lib/services/utils.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/entity.service';\r\nexport * from './lib/services/base-crud.service';\r\nexport * from './lib/services/base-task.service';\r\nexport * from './lib/services/formly-config.service';\r\nexport * from './lib/services/form.service';\r\n\r\n// Components\r\nexport * from './lib/components/formly/core-formly.module';\r\nexport * from './lib/components/base-form.component';\r\nexport * from './lib/components/base-page.component';\r\nexport * from './lib/components/base-list-page.component';\r\nexport * from './lib/components/base-tabbed-form.component';\r\nexport * from './lib/components/base-list-tabbed-form.component';\r\nexport * from './lib/components/base-task-details.component';\r\nexport * from './lib/components/base-task-dashboard.component';\r\n\r\n// States\r\nexport * from './lib/states/form.state';\r\nexport * from './lib/states/form-component.state';\r\nexport * from './lib/states/tabbed-form.state';\r\nexport * from './lib/states/list-tabbed-form.state';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/indian-date.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.KeycloakService","catchError","i2","i1","i1.UtilsService","i1.EnumRegistryService","map","finalize","i4","i3","i2.NotificationService","mergeMap","i3.UtilsService","i4.FormlyConfigService","take","tap","takeUntil","distinctUntilChanged"],"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/enums/tabbed-form-type.enum.ts","../../../projects/core-lib/src/lib/enums/task-role.enum.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.interceptor.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.providers.ts","../../../projects/core-lib/src/lib/keycloak/keycloak.guard.ts","../../../projects/core-lib/src/lib/services/http-utility.service.ts","../../../projects/core-lib/src/lib/services/utils.service.ts","../../../projects/core-lib/src/lib/services/notification.service.ts","../../../projects/core-lib/src/lib/services/base-crud.service.ts","../../../projects/core-lib/src/lib/services/base-task.service.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/services/form.service.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/core-formly.module.ts","../../../projects/core-lib/src/lib/components/base-page.component.ts","../../../projects/core-lib/src/lib/components/base-form.component.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-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-list-tabbed-form.component.ts","../../../projects/core-lib/src/lib/components/base-task-details.component.ts","../../../projects/core-lib/src/lib/components/base-task-dashboard.component.ts","../../../projects/core-lib/src/lib/pipes/indian-date.pipe.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","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 { 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, inject, Injectable, signal } from '@angular/core';\r\nimport { KeycloakConfig } from './keycloak-config.interface';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport Keycloak from 'keycloak-js';\r\n\r\n/**\r\n * Service for handling Keycloak authentication and authorization\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class KeycloakService {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly config = inject(KEYCLOAK_CONFIG);\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n\r\n #keycloakInstance = signal<Keycloak | null>(null);\r\n #isAuthenticated = signal<boolean>(false);\r\n #userProfile = signal<any>(null);\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 /** 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 if (!this.isBrowser) return false;\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 this.#keycloakInstance.set(keycloak);\r\n \r\n try {\r\n const authenticated = await keycloak.init({\r\n onLoad: 'login-required',\r\n redirectUri: this.config.options?.loginRedirect || window.location.origin\r\n });\r\n \r\n this.#isAuthenticated.set(authenticated);\r\n \r\n if (authenticated) {\r\n await this.loadUserProfile();\r\n }\r\n\r\n return authenticated;\r\n } catch (error) {\r\n console.error('Failed to initialize Keycloak:', error);\r\n this.#keycloakInstance.set(null);\r\n this.#isAuthenticated.set(false);\r\n throw error;\r\n }\r\n }\r\n\r\n /** Login with optional redirect URI */\r\n login(options: { redirectUri?: string } = {}): Promise<void> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) throw new Error('Keycloak not initialized');\r\n\r\n return instance.login({\r\n redirectUri: options.redirectUri || this.config.options?.loginRedirect || window.location.origin\r\n });\r\n }\r\n\r\n /** Logout the current user */\r\n logout(): Promise<void> {\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 return instance?.realmAccess?.roles ?? [];\r\n }\r\n\r\n /** Check if user has a specific role */\r\n hasRole(role: string): boolean {\r\n return this.getRoles().includes(role);\r\n }\r\n\r\n /** Get the current access token */\r\n async getToken(): Promise<string | null> {\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 private async loadUserProfile(): Promise<void> {\r\n const instance = this.#keycloakInstance();\r\n if (!instance) return;\r\n \r\n try {\r\n const profile = await instance.loadUserProfile();\r\n this.#userProfile.set(profile);\r\n } catch (error) {\r\n console.error('Failed to load user profile:', error);\r\n }\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 { Injectable, inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree, Router } from '@angular/router';\r\nimport { KeycloakService } from './keycloak.service';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport { Observable, map } from 'rxjs';\r\nimport { KEYCLOAK_CONFIG } from './keycloak.token';\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\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable<boolean | UrlTree> {\r\n return toObservable(this.keycloakService.isAuthenticated$).pipe(\r\n map(authenticated => {\r\n if (!authenticated) {\r\n this.keycloakService.login({ redirectUri: window.location.origin + state.url });\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 if (requiredRoles?.length && !this.hasRequiredRoles(requiredRoles)) {\r\n return this.router.createUrlTree(['/unauthorized']);\r\n }\r\n\r\n return true;\r\n })\r\n );\r\n }\r\n\r\n private hasRequiredRoles(roles: string[]): boolean {\r\n return roles.every(role => this.keycloakService.hasRole(role));\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 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 { 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 { HttpParams, HttpErrorResponse } 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';\r\n\r\nexport abstract class BaseCrudService<T extends { uuid: string }> 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 * 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 getAll(pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/page`, pageRequest);\r\n } else {\r\n return this.httpUtility.get<Page<T>>(this.apiUrl);\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\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\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\r\n return this.httpUtility.delete<void>(`${this.apiUrl}/${uuid}`);\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 { BaseCrudService } from './base-crud.service';\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<T extends { uuid: string }> extends BaseCrudService<T> {\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 ) {\r\n super(httpUtility, utilsService, resourcePath, backendBaseUrl, messageService);\r\n }\r\n\r\n /**\r\n * Find tasks by department with pagination\r\n * Maps to GET /department/{department} endpoint\r\n */\r\n findByDepartment(department: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/department/${department}/page`, pageRequest);\r\n }\r\n return this.httpUtility.get<Page<T>>(`${this.apiUrl}/department/${department}`);\r\n }\r\n\r\n /**\r\n * Find tasks by assigned user with pagination\r\n * Maps to GET /user/{userId} endpoint\r\n */\r\n findByAssignedUser(userId: string, pageRequest?: PageRequest): Observable<Page<T>> {\r\n if (pageRequest) {\r\n return this.httpUtility.post<Page<T>>(`${this.apiUrl}/user/${userId}/page`, pageRequest);\r\n }\r\n return this.httpUtility.get<Page<T>>(`${this.apiUrl}/user/${userId}`);\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: string, 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","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 { FormGroup } from '@angular/forms';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { finalize, map, take } 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';\r\nimport { FormlyConfigService } from './formly-config.service';\r\nimport { NotificationService } from './notification.service';\r\n\r\nexport class FormService<T extends { uuid: string }> {\r\n protected 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 this.initializeForm();\r\n }\r\n\r\n private initializeForm(): void {\r\n this.formState.fields = this.getFormlyFieldConfig();\r\n if (this.formState.mode === AppConstants.PAGE_MODE.VIEW) {\r\n this.formState.form.disable();\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 this.formState = {\r\n ...this.formState,\r\n currentData: { ...data },\r\n originalData: data,\r\n isNew: false,\r\n loading: false\r\n };\r\n this.formState.form.patchValue(data, { emitEvent: false });\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 if (!this.formState.form.valid) {\r\n this.notificationService.showError('Please check form errors');\r\n return false;\r\n }\r\n\r\n if (!this.formState.hasChanges && !this.formState.isNew) {\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 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 return this.formState.isNew\r\n ? this.entityService.create(formData)\r\n : this.entityService.update(this.formState.originalData!.uuid, formData);\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 this.formState.form.patchValue(value);\r\n this.updateCurrentData();\r\n this.checkFormChanges();\r\n }\r\n\r\n private updateCurrentData(): void {\r\n this.formState.currentData = {\r\n ...this.formState.form.value,\r\n uuid: this.formState.originalData?.uuid\r\n };\r\n }\r\n\r\n private checkFormChanges(): void {\r\n this.formState.hasChanges = this.hasFormChanges(this.formState.currentData);\r\n }\r\n\r\n private hasFormChanges(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 currentValue = currentData[key];\r\n const originalValue = (this.formState.originalData as any)[key];\r\n return currentValue !== originalValue;\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 { InputTextModule } from 'primeng/inputtext';\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 [formlyAttributes]=\"field\"\r\n [placeholder]=\"props['placeholder'] || ''\"\r\n [attr.aria-label]=\"props['label'] || props['placeholder'] || ''\"\r\n class=\"w-full\"/>\r\n `\r\n})\r\nexport class TextInputType extends FieldType {\r\n override defaultOptions = {\r\n props: {\r\n type: 'text',\r\n placeholder: ''\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 [formlyAttributes]=\"field\"\r\n [options]=\"options\"\r\n [virtualScroll]=\"false\"\r\n [showClear]=\"false\"\r\n [placeholder]=\"props['placeholder'] || 'Select'\"\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 [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}","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 [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}","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 [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 [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 [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 [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}","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FieldWrapper, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\ninterface FormlyValidationMessage {\r\n [key: string]: string;\r\n}\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?: FormlyValidationMessage;\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 .p-input-error :where(input, .p-inputtext) {\r\n border-color: var(--red-500);\r\n }\r\n\r\n .p-input-error :where(input:enabled:focus, .p-inputtext:enabled:focus) {\r\n border-color: var(--red-500);\r\n box-shadow: 0 0 0 1px var(--red-500);\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 `]\r\n})\r\nexport class FormFieldWrapper extends FieldWrapper<FormlyFieldConfig<FormlyFieldProps>> {\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 return this.props.validation?.messages?.[firstErrorKey] || 'This field is required';\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}","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};\r\n\r\nexport const FORMLY_WRAPPERS = {\r\n FORM_FIELD: 'form-field'\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'; // Added import\r\nimport { FormFieldWrapper } from './form-field.wrapper';\r\nimport { FORMLY_TYPES, FORMLY_WRAPPERS } from './formly.constants'; // Added import\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] }, // Added textarea type\r\n ],\r\n wrappers: [\r\n { name: FORMLY_WRAPPERS.FORM_FIELD, component: FormFieldWrapper }\r\n ]\r\n })\r\n ],\r\n exports: [FormlyModule]\r\n})\r\nexport class CoreFormlyModule { }\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 and message display.\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 { 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';\r\nimport { FormlyConfigService } from '../services/formly-config.service';\r\nimport { NotificationService } from '../services/notification.service';\r\nimport { UtilsService } from '../services/utils.service';\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 { uuid: string }>\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","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\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 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 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 // 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 }));\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 });\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 { 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';\r\nimport { TabConfig, TabbedFormState } from '../states/tabbed-form.state';\r\n\r\n@Injectable()\r\n@Component({\r\n template: ''\r\n})\r\nexport abstract class BaseTabbedFormComponent<T extends { uuid: string }>\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 { 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';\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 { 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';\r\nimport { FormService} from '../services/form.service';\r\nimport { AppConstants } from '../constants/app.constants';\r\nimport { ComponentContext } from '../enums/component-context.enum';\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 { uuid: string }> \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 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 protected initializeServices(): Observable<void> {\r\n return of(void 0).pipe(\r\n map(() => {\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 this.state = this.formService.getState();\r\n this.loading = this.state.loading;\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: () => this.onInitialized(),\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 const mode = params[AppConstants.FORM.MODE];\r\n if (mode) {\r\n this.formService.setMode(mode);\r\n this.state = this.formService.getState();\r\n }\r\n\r\n const uuid = params[AppConstants.FORM.UUID];\r\n if (uuid) {\r\n this.loadData(uuid);\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 }\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.state.loading = false;\r\n this.state = this.formService.getState();\r\n })\r\n )\r\n .subscribe({\r\n error: (error) => this.handleLoadError(error)\r\n });\r\n }\r\n\r\n protected onSubmit(): void {\r\n this.formService.submit()\r\n .pipe(takeUntil(this.destroyed$))\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 onInitialized(): void {\r\n console.log('[BaseTaskDetailsComponent] Initialized successfully');\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 { Directive } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { finalize } 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\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<T extends { uuid: string }> 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\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 * Initialize the component and load reference data\r\n */\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this.loadReferenceData();\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.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 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 * Override the getEntityService to include task-specific operations\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 { 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","/*\r\n * Public API Surface of core-lib\r\n */\r\n\r\n// Constants\r\nexport * from './lib/constants/app.constants';\r\nexport * from './lib/constants/app.messages';\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// Models\r\nexport * from './lib/models/base.model';\r\nexport * from './lib/models/base-task.model';\r\nexport * from './lib/models/base-request.model';\r\nexport * from './lib/models/base-response.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/page.interface';\r\nexport * from './lib/models/pagination/page-request.interface';\r\n\r\n// Keycloak\r\nexport { KEYCLOAK_CONFIG } from './lib/keycloak/keycloak.token';\r\nexport * from './lib/keycloak/keycloak-config.interface';\r\nexport * from './lib/keycloak/keycloak.service';\r\nexport { provideKeycloak } from './lib/keycloak/keycloak.providers';\r\nexport { KeycloakAuthGuard } from './lib/keycloak/keycloak.guard';\r\n\r\n\r\n// Services\r\nexport * from './lib/services/http-utility.service';\r\nexport * from './lib/services/utils.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/entity.service';\r\nexport * from './lib/services/base-crud.service';\r\nexport * from './lib/services/base-task.service';\r\nexport * from './lib/services/formly-config.service';\r\nexport * from './lib/services/form.service';\r\n\r\n// Components\r\nexport * from './lib/components/formly/core-formly.module';\r\nexport * from './lib/components/base-form.component';\r\nexport * from './lib/components/base-page.component';\r\nexport * from './lib/components/base-list-page.component';\r\nexport * from './lib/components/base-tabbed-form.component';\r\nexport * from './lib/components/base-list-tabbed-form.component';\r\nexport * from './lib/components/base-task-details.component';\r\nexport * from './lib/components/base-task-dashboard.component';\r\n\r\n// States\r\nexport * from './lib/states/form.state';\r\nexport * from './lib/states/form-component.state';\r\nexport * from './lib/states/tabbed-form.state';\r\nexport * from './lib/states/list-tabbed-form.state';\r\n\r\n// Pipes\r\nexport * from './lib/pipes/indian-date.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["catchError","i2","i1","i1.UtilsService","i1.EnumRegistryService","map","finalize","i4","i3","i2.NotificationService","mergeMap","i3.UtilsService","i4.FormlyConfigService","take","tap","takeUntil","distinctUntilChanged"],"mappings":"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"}
|