@yomotech/view-toolkit 0.0.84 → 0.0.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"yomotech-view-toolkit.mjs","sources":["../../../projects/view-toolkit/src/lib/containers/pagination/pagination.component.ts","../../../projects/view-toolkit/src/lib/containers/pagination/pagination.component.html","../../../projects/view-toolkit/src/lib/components/string/string.ts","../../../projects/view-toolkit/src/lib/components/string/string.html","../../../projects/view-toolkit/src/lib/services/request.service.ts","../../../projects/view-toolkit/src/lib/services/utility.service.ts","../../../projects/view-toolkit/src/lib/services/couchdb.ts","../../../projects/view-toolkit/src/lib/services/config.service.ts","../../../projects/view-toolkit/src/lib/services/notification.service.ts","../../../projects/view-toolkit/src/lib/containers/card/card.component.ts","../../../projects/view-toolkit/src/lib/containers/card/card.component.html","../../../projects/view-toolkit/src/lib/containers/form/form.component.ts","../../../projects/view-toolkit/src/lib/containers/form/form.component.html","../../../projects/view-toolkit/src/lib/containers/grid/grid.component.ts","../../../projects/view-toolkit/src/lib/containers/grid/grid.component.html","../../../projects/view-toolkit/src/lib/containers/header-menu/header-menu.component.ts","../../../projects/view-toolkit/src/lib/containers/header-menu/header-menu.component.html","../../../projects/view-toolkit/src/lib/services/network-log.service.ts","../../../projects/view-toolkit/src/lib/containers/logs/logs.component.ts","../../../projects/view-toolkit/src/lib/containers/logs/logs.component.html","../../../projects/view-toolkit/src/lib/components/label/label.ts","../../../projects/view-toolkit/src/lib/components/label/label.html","../../../projects/view-toolkit/src/lib/components/textbox/textbox.ts","../../../projects/view-toolkit/src/lib/components/textbox/textbox.html","../../../projects/view-toolkit/src/lib/components/autocomplete/autocomplete.ts","../../../projects/view-toolkit/src/lib/components/autocomplete/autocomplete.html","../../../projects/view-toolkit/src/lib/containers/model/model.component.ts","../../../projects/view-toolkit/src/lib/containers/model/model.component.html","../../../projects/view-toolkit/src/lib/components/button/button.ts","../../../projects/view-toolkit/src/lib/components/button/button.html","../../../projects/view-toolkit/src/lib/components/date/date.ts","../../../projects/view-toolkit/src/lib/components/date/date.html","../../../projects/view-toolkit/src/lib/components/dropdown/dropdown.ts","../../../projects/view-toolkit/src/lib/components/dropdown/dropdown.html","../../../projects/view-toolkit/src/lib/components/error-message/error-message.ts","../../../projects/view-toolkit/src/lib/components/error-message/error-message.html","../../../projects/view-toolkit/src/lib/components/time/time.ts","../../../projects/view-toolkit/src/lib/components/time/time.html","../../../projects/view-toolkit/src/lib/services/mobile-keycloak.service.ts","../../../projects/view-toolkit/src/lib/containers/side-menu/side-menu.component.ts","../../../projects/view-toolkit/src/lib/containers/side-menu/side-menu.component.html","../../../projects/view-toolkit/src/lib/view-toolkit.module.ts","../../../projects/view-toolkit/src/lib/app-version.ts","../../../projects/view-toolkit/src/lib/services/app-version-reset.service.ts","../../../projects/view-toolkit/src/public-api.ts","../../../projects/view-toolkit/src/yomotech-view-toolkit.ts"],"sourcesContent":["import {\r\n Platform,\r\n PlatformModule\r\n} from '@angular/cdk/platform';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrl: './pagination.component.css',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n PlatformModule\r\n ]\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n @Input() itemInfo: any = {\r\n layoutSchema: {},\r\n propertySchema: {},\r\n data: []\r\n };\r\n\r\n @Input() pageSize: any;\r\n @Input() currentPage: number = 0;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() pages: number[] = [];\r\n\r\n @Output() pageSizeChange =\r\n new EventEmitter<any>();\r\n\r\n @Output() onGoToPage =\r\n new EventEmitter<any>();\r\n\r\n isMobile: boolean = false;\r\n\r\n constructor(\r\n private platform: Platform\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n private updateDeviceMode(): void {\r\n const isNativeMobile =\r\n this.platform.ANDROID ||\r\n this.platform.IOS;\r\n\r\n const isSmallScreen =\r\n typeof window !== 'undefined' &&\r\n window.innerWidth <= 768;\r\n\r\n this.isMobile =\r\n isNativeMobile || isSmallScreen;\r\n }\r\n\r\n get isFirstPage(): boolean {\r\n return (\r\n !this.pages?.length ||\r\n this.currentPage <= 0\r\n );\r\n }\r\n\r\n get isLastPage(): boolean {\r\n return (\r\n !this.pages?.length ||\r\n this.currentPage >=\r\n this.pages.length - 1\r\n );\r\n }\r\n\r\n /*\r\n * Desktop returns the original schema style unchanged.\r\n * Mobile overrides only the layout direction.\r\n */\r\n get paginationStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.style\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'flex-direction': 'column',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n gap: '8px',\r\n width: '100%',\r\n padding: '8px',\r\n overflow: 'hidden',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n get listStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.listStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n 'flex-wrap': 'nowrap',\r\n gap: '4px',\r\n width: '100%',\r\n margin: '0',\r\n padding: '0',\r\n overflow: 'hidden',\r\n 'list-style': 'none',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n get sizeControlStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.sizeControlStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n gap: '8px',\r\n width: '100%',\r\n 'min-width': '0',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n getPaginationCaption(){\r\n let caption = this.itemInfo?.layoutSchema?.pagination?.caption;\r\n if(caption && this.selectedLanguageInfo && this.selectedLanguageInfo.selectedLanguage && this.selectedLanguageInfo.selectedLanguage[caption]){\r\n caption = this.selectedLanguageInfo.selectedLanguage[caption];\r\n }\r\n return caption;\r\n }\r\n\r\n get labelStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.labelStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n 'white-space': 'nowrap',\r\n 'font-size': baseStyle['font-size'] || '13px'\r\n };\r\n }\r\n\r\n get selectStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.selectStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n width: '68px',\r\n 'min-width': '68px',\r\n 'max-width': '68px'\r\n };\r\n }\r\n\r\n get pageSummaryStyle(): Record<string, any> {\r\n const pagination =\r\n this.itemInfo?.layoutSchema\r\n ?.pagination || {};\r\n\r\n const baseStyle = this.getStyle(\r\n pagination.itemStyle\r\n );\r\n\r\n const activeStyle = this.getStyle(\r\n pagination.activeItemStyle\r\n );\r\n\r\n return {\r\n ...baseStyle,\r\n ...activeStyle,\r\n width: '64px',\r\n 'min-width': '64px',\r\n height: '32px',\r\n padding: '0 6px',\r\n cursor: 'default',\r\n 'pointer-events': 'none',\r\n 'white-space': 'nowrap',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n getStyle(\r\n styleObject: any\r\n ): Record<string, any> {\r\n if (\r\n !styleObject ||\r\n typeof styleObject !== 'object'\r\n ) {\r\n return {};\r\n }\r\n\r\n const {\r\n classes,\r\n ...styleWithoutClasses\r\n } = styleObject;\r\n\r\n return styleWithoutClasses;\r\n }\r\n\r\n getPageItemStyle(\r\n page?: number,\r\n disabled: boolean = false\r\n ): Record<string, any> {\r\n const pagination =\r\n this.itemInfo?.layoutSchema\r\n ?.pagination || {};\r\n\r\n const baseStyle = this.getStyle(\r\n pagination.itemStyle\r\n );\r\n\r\n const activeStyle =\r\n page !== undefined &&\r\n this.currentPage === page\r\n ? this.getStyle(\r\n pagination.activeItemStyle\r\n )\r\n : {};\r\n\r\n const disabledStyle = disabled\r\n ? this.getStyle(\r\n pagination.disabledItemStyle\r\n )\r\n : {};\r\n\r\n /*\r\n * Desktop gets no additional styling.\r\n */\r\n const mobileStyle = this.isMobile\r\n ? {\r\n width: '32px',\r\n 'min-width': '32px',\r\n height: '32px',\r\n padding: '0'\r\n }\r\n : {};\r\n\r\n return {\r\n ...baseStyle,\r\n ...activeStyle,\r\n ...disabledStyle,\r\n ...mobileStyle,\r\n 'pointer-events': disabled\r\n ? 'none'\r\n : 'auto'\r\n };\r\n }\r\n\r\n invokeOnPageSizeChange(\r\n pageSize: any\r\n ): void {\r\n const normalizedPageSize =\r\n Number(pageSize);\r\n\r\n if (\r\n !Number.isFinite(\r\n normalizedPageSize\r\n ) ||\r\n normalizedPageSize <= 0\r\n ) {\r\n return;\r\n }\r\n\r\n this.pageSizeChange.emit(\r\n normalizedPageSize\r\n );\r\n }\r\n\r\n invokeGoToPage(page: number): void {\r\n if (\r\n page < 0 ||\r\n page > this.pages.length - 1 ||\r\n page === this.currentPage\r\n ) {\r\n return;\r\n }\r\n\r\n this.onGoToPage.emit(page);\r\n }\r\n}","<div [ngStyle]=\"paginationStyle\">\r\n\r\n <ul [ngStyle]=\"listStyle\" [style.z-index]=\"'auto'\">\r\n\r\n <!-- Existing desktop pagination: unchanged -->\r\n <ng-container *ngIf=\"!isMobile\">\r\n\r\n <li (click)=\"invokeGoToPage(0)\" [ngStyle]=\"getPageItemStyle(undefined, currentPage === 0)\">\r\n ««\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(currentPage - 1)\" [ngStyle]=\"getPageItemStyle(undefined, currentPage === 0)\">\r\n «\r\n </li>\r\n\r\n <li *ngFor=\"let page of pages\" (click)=\"invokeGoToPage(page)\" [ngStyle]=\"getPageItemStyle(page)\">\r\n {{ page + 1 }}\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(currentPage + 1)\" [ngStyle]=\"\r\n getPageItemStyle(\r\n undefined,\r\n currentPage === pages.length - 1\r\n )\r\n \">\r\n »\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(pages.length - 1)\" [ngStyle]=\"\r\n getPageItemStyle(\r\n undefined,\r\n currentPage === pages.length - 1\r\n )\r\n \">\r\n »»\r\n </li>\r\n\r\n </ng-container>\r\n\r\n <!-- Compact mobile pagination -->\r\n <ng-container *ngIf=\"isMobile\">\r\n\r\n <!-- First -->\r\n <li (click)=\"invokeGoToPage(0)\" [ngStyle]=\"getPageItemStyle(undefined, isFirstPage)\">\r\n ««\r\n </li>\r\n\r\n <!-- Previous -->\r\n <li (click)=\"invokeGoToPage(currentPage - 1)\" [ngStyle]=\"getPageItemStyle(undefined, isFirstPage)\">\r\n «\r\n </li>\r\n\r\n <!-- Current page / total pages -->\r\n <li [ngStyle]=\"pageSummaryStyle\">\r\n {{ currentPage + 1 }} / {{ pages.length }}\r\n </li>\r\n\r\n <!-- Next -->\r\n <li (click)=\"invokeGoToPage(currentPage + 1)\" [ngStyle]=\"getPageItemStyle(undefined, isLastPage)\">\r\n »\r\n </li>\r\n\r\n <!-- Last -->\r\n <li (click)=\"invokeGoToPage(pages.length - 1)\" [ngStyle]=\"getPageItemStyle(undefined, isLastPage)\">\r\n »»\r\n </li>\r\n\r\n </ng-container>\r\n\r\n </ul>\r\n\r\n <div *ngIf=\"itemInfo?.layoutSchema?.pagination?.pageSize\" [ngStyle]=\"sizeControlStyle\">\r\n <label for=\"pageSize\" [ngStyle]=\"labelStyle\">\r\n {{ getPaginationCaption() }}\r\n </label>\r\n\r\n <select id=\"pageSize\" [(ngModel)]=\"pageSize\" (change)=\"invokeOnPageSizeChange(pageSize)\"\r\n [ngStyle]=\"selectStyle\">\r\n <option *ngFor=\"\r\n let size of\r\n itemInfo?.layoutSchema\r\n ?.pagination?.pageSizeOptions ||\r\n [5, 10, 15, 20]\r\n \" [value]=\"size\">\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-string',\r\n standalone: true,\r\n templateUrl: './string.html',\r\n styleUrl: './string.css',\r\n})\r\nexport class String {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n}\r\n","<h5>{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n</h5>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RequestService {\r\n pageSize: number = 0;\r\n private readonly backendUrl = '/api';\r\n readonly apiUrl = `${this.backendUrl}/project`\r\n constructor(private http: HttpClient) { }\r\n\r\n getAllProject() {\r\n return this.http.get(\"../assets/main/layout_schema.json\");\r\n }\r\n\r\n getEnvironmet(selectedProject: any) {\r\n return this.http.get(`../../assets/projects/${selectedProject}/environments/environment.json`);\r\n }\r\n\r\n getSectionInfo(url: string, envUrl?: any, passToken: boolean = false, selectedProject: string = '', userInfo: any = null) {\r\n if (envUrl) {\r\n if (passToken && selectedProject) {\r\n return this.http.get(envUrl + url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.get(envUrl + url);\r\n }\r\n } else {\r\n return this.http.get(url);\r\n };\r\n }\r\n\r\n readFile(projectName: any, path: any) {\r\n return this.http.post(`${this.apiUrl}/read`, {\r\n projectName: projectName,\r\n filePath: path\r\n })\r\n }\r\n\r\n getMainLayout(selectedProject: any) {\r\n return this.http.get(`../assets/projects/${selectedProject}/main/layout_schema.json`)\r\n }\r\n\r\n getInfo(url: string) {\r\n return this.http.get(url);\r\n }\r\n\r\n dynamicCall(method: string = \"get\", body: any = null, url: string, passToken: boolean = false, selectedProject: string = '', userInfo: any = null) {\r\n switch (method.toLowerCase()) {\r\n case 'get':\r\n if (passToken && selectedProject) {\r\n return this.http.get(url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.get(url);\r\n }\r\n\r\n case 'post':\r\n if (passToken && selectedProject) {\r\n return this.http.post(url, body, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.post(url, body);\r\n }\r\n case 'put':\r\n if (passToken && selectedProject) {\r\n return this.http.put(url, body, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.put(url, body);\r\n }\r\n case 'delete':\r\n if (passToken && selectedProject) {\r\n return this.http.delete(url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.delete(url);\r\n };\r\n case 'patch':\r\n return this.http.patch(url, body);\r\n default:\r\n throw new Error(`Unsupported HTTP method: ${method}`);\r\n }\r\n }\r\n\r\n createAuthorizationHeader(userInfo: any, tokenExist: boolean = false) {\r\n let authHeaders: HttpHeaders = new HttpHeaders();\r\n let token = tokenExist ? userInfo : userInfo && userInfo.jwt ? userInfo.jwt : userInfo?.authToken ? userInfo?.authToken : '';\r\n return authHeaders.set(\r\n 'Authorization',\r\n 'Bearer ' + token\r\n )\r\n }\r\n\r\n getLoginUser(token: any) {\r\n return this.http.get(\"https://dev-78992019.okta.com/oauth2/default/v1/userinfo\", {\r\n headers: this.createAuthorizationHeader(token, true),\r\n })\r\n }\r\n\r\n saveDb(token: any, userInfo: any, order: any = {}) {\r\n if (token) {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `Bearer ${token}`,\r\n 'Accept': 'application/json'\r\n });\r\n let url2: any = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording?company=${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant ? userInfo.p5_plant : \" \"}&appVersion=1&resourceNo=${userInfo.p5_resource_no}`\r\n console.log('userInfo: ', userInfo);\r\n this.http.post(url2, order, { headers }).subscribe({\r\n next: res => {\r\n console.log('Save-res: ', res);\r\n }\r\n })\r\n }\r\n }\r\n\r\n getSaveOrder(\r\n token: string,\r\n userInfo: any,\r\n fromDate: string,\r\n toDate: string\r\n ) {\r\n if (!token) {\r\n throw new Error('Missing authentication token');\r\n }\r\n if (!userInfo?.p5_backend_url) {\r\n throw new Error('Missing p5_backend_url');\r\n }\r\n const headers = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n });\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n let backendPath: string;\r\n\r\n try {\r\n backendPath = new URL(\r\n userInfo.p5_backend_url\r\n ).pathname;\r\n } catch {\r\n backendPath = userInfo.p5_backend_url;\r\n }\r\n\r\n backendPath = `/${backendPath}`\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/+$/, '');\r\n\r\n const url =\r\n `${backendPath}` +\r\n '/assetsmobileservice/Zeiterfassung/' +\r\n 'requestBookedTimeRecording';\r\n\r\n const params = new HttpParams()\r\n .set(\r\n 'resourceNo',\r\n userInfo.p5_resource_no || ''\r\n )\r\n .set('workDayFrom', fromDate)\r\n .set('workDayTo', toDate)\r\n .set('company', company)\r\n .set('appVersion', '1');\r\n\r\n console.log('[Saved orders][Web] URL:', url);\r\n console.log(\r\n '[Saved orders][Web] Params:',\r\n params.toString()\r\n );\r\n\r\n return this.http.post(\r\n url,\r\n {},\r\n {\r\n headers,\r\n params\r\n }\r\n );\r\n }\r\n}\r\n\r\n","import { Platform } from '@angular/cdk/platform';\r\nimport { Injectable } from '@angular/core';\r\nimport { Preferences } from '@capacitor/preferences';\r\nimport { RequestService } from './request.service';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilityService {\r\n stripe: any = null;\r\n\r\n constructor(private platform: Platform,\r\n private requestService: RequestService) { }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getProperty(scope: any, itemInfo?: any) {\r\n const property = scope?.reference ? scope?.reference.split('/').pop() : '';\r\n return { key: property, productSchema: itemInfo.propertySchema[property] };\r\n }\r\n\r\n async setStorage(key: string, value: any) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.set({ key, value });\r\n } else {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n async getStorage(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n const { value } = await Preferences.get({ key });\r\n return value;\r\n } else {\r\n const storage = sessionStorage.getItem(key);\r\n return storage;\r\n }\r\n }\r\n\r\n async setLocalStorage(key: string, value: any) {\r\n const stringValue = JSON.stringify(value);\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.set({ key, value: stringValue });\r\n } else {\r\n localStorage.setItem(key, stringValue);\r\n }\r\n }\r\n\r\n async removeLocalStorage(keyName: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.remove({ key: keyName });\r\n } else {\r\n localStorage.removeItem(keyName);\r\n }\r\n }\r\n\r\n async removeStorage(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.remove({ key });\r\n } else {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n\r\n async getLocalStorage<T = unknown>(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n const { value } = await Preferences.get({ key });\r\n return value ? JSON.parse(value) : null;\r\n } else {\r\n const value = localStorage.getItem(key);\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(value) as T;\r\n } catch {\r\n return value;\r\n }\r\n }\r\n }\r\n\r\n async showAllProjects() {\r\n await this.removeStorage('selectedProject');\r\n window.location.reload();\r\n }\r\n\r\n parseBodyObject(obj: any): any {\r\n const jsonString = JSON.stringify(obj);\r\n const replacedString = jsonString.replace(/{{(.*?)}}/g, (match, expression) => {\r\n try {\r\n return new Function(`return ${expression.trim()};`).call(this);\r\n } catch (error) {\r\n console.error(`Error evaluating expression: ${expression}`, error);\r\n return match;\r\n }\r\n });\r\n return JSON.parse(replacedString);\r\n }\r\n\r\n getTotalPrice(tableitemInfo: any): number {\r\n const total = tableitemInfo.data.reduce((total: any, item: any) => {\r\n if (item.quantity && !isNaN(item.quantity)) {\r\n return total + (item.unitPrice * item.quantity);\r\n }\r\n return total;\r\n }, 0);\r\n return total.toFixed(2);\r\n }\r\n\r\n getTotalQuantity(tableitemInfo: any) {\r\n let quantity = 0;\r\n tableitemInfo.data.forEach((cartItem: any) => {\r\n if (cartItem.quantity) {\r\n quantity = cartItem.quantity + quantity;\r\n }\r\n });\r\n return quantity;\r\n }\r\n\r\n replacePaginationParams(url: string, currentPage: number, pageSize: number): string {\r\n if (url && url.includes('{{pageNumber}}')) {\r\n url = url.replace(/{{pageNumber}}/g, currentPage.toString());\r\n }\r\n\r\n if (url && url.includes('{{pageSize}}') && pageSize !== undefined) {\r\n url = url.replace(/{{pageSize}}/g, pageSize.toString());\r\n }\r\n return url;\r\n }\r\n\r\n customButton(option: any, propertySchema: any, projectSeleted: any, environment: any) {\r\n if (option.url) {\r\n let body = {}\r\n if (option.propertyKey) {\r\n body = Object.keys(propertySchema[option.propertyKey]).reduce((acc, key) => {\r\n acc[key] = propertySchema[option.propertyKey][key]?.value;\r\n return acc;\r\n }, {} as Record<string, string>);\r\n }\r\n let url = environment?.apiUrl + option.url;\r\n this.requestService.dynamicCall(option.method, body, url, option.passToken, projectSeleted).subscribe((res) => {\r\n window.location.reload();\r\n })\r\n }\r\n }\r\n\r\n setDefaultUser(item: any, userInfo: any, environment: any) {\r\n let schema: any = item;\r\n let role = \"default\";\r\n if (environment?.login?.type === \"keycloak\") {\r\n if (userInfo?.name && item.options?.userRoleMapping) {\r\n schema = item.options[item.options?.userRoleMapping[role]];\r\n }\r\n } else if (environment?.login?.type === \"jwtToken\") {\r\n if (item.options?.loginResponse && item.options?.loginResponse.storageType == \"sessionStorage\") {\r\n if (userInfo) {\r\n role = userInfo[item.options?.loginResponse.role]?.toLowerCase();\r\n }\r\n schema = item.options[item.options?.userRoleMapping[role]];\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n setTableData(data: any, options: any = {}, tableitemInfo: any, projectSeleted: any) {\r\n if (options?.pagination?.pageSize && options?.pagination?.scrollable) {\r\n tableitemInfo.pageSize = options?.pagination?.pageSize;\r\n }\r\n let records: any;\r\n if (options.dataKey) {\r\n records = data[options.dataKey];\r\n } else if (options.key && data?._embedded) {\r\n records = data?._embedded[options.key];\r\n } else {\r\n if (!data?._embedded?.products && !Array.isArray(data)) {\r\n records = [data];\r\n } else {\r\n records = data?._embedded?.products;\r\n }\r\n }\r\n tableitemInfo.totalRecords = data?.totalPages ? data?.totalPages : data?.page?.totalElements;\r\n tableitemInfo.data = records.map((record: any) => ({\r\n ...record,\r\n ...(record.hasOwnProperty('imageUrl') && record.imageUrl\r\n ? { imageUrl: `${projectSeleted}/Media/` + record.imageUrl.split('/').pop() }\r\n : {})\r\n }));\r\n return tableitemInfo;\r\n }\r\n\r\n setOktaWebCredential(environment: any, projectName: any) {\r\n return {\r\n logo: `favicon.ico`,\r\n baseUrl: environment.login.web.issuer.split('/oauth2')[0],\r\n clientId: environment.login.web.clientId,\r\n redirectUri: environment.login.web.redirectUri,\r\n authParams: {\r\n pkce: true,\r\n issuer: environment.login.web.issuer,\r\n scopes: environment.login.web.scopes\r\n }\r\n }\r\n }\r\n\r\n setOktaMobileCredential(environment: any) {\r\n return {\r\n appId: environment.login.mobile.clientId,\r\n authorizationBaseUrl: environment.login.mobile.authorizationBaseUrl,\r\n accessTokenEndpoint: environment.login.mobile.accessTokenEndpoint,\r\n redirectUrl: environment.login.mobile.redirectUrl,\r\n scope: environment.login.mobile.scope,\r\n responseType: environment.login.mobile.responseType,\r\n pkceEnabled: environment.login.mobile.pkceEnabled\r\n }\r\n }\r\n\r\n\r\n async setupStripePaymentForm(\r\n environment: any,\r\n form: any,\r\n onCardChange: (message: string) => void\r\n ): Promise<void> {\r\n let hasCreditCard = false;\r\n\r\n if (form.layoutSchema?.formSections) {\r\n form.layoutSchema.formSections.forEach((formSection: any) => {\r\n if (formSection.formFields?.length > 0) {\r\n const foundCreditCard = formSection.formFields.some((formField: any) => {\r\n const scopeKey = this.getScope(formField.scope?.reference);\r\n return form.propertySchema[scopeKey] &&\r\n form.propertySchema[scopeKey][formField.scope?.reference.split('/').pop()]?.type === 'carditCard';\r\n });\r\n if (foundCreditCard) {\r\n hasCreditCard = true;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (hasCreditCard) {\r\n this.stripe = await loadStripe(environment.stripePublishableKey);\r\n const elements = this.stripe.elements();\r\n const cardElement = elements.create('card', { hidePostalCode: true });\r\n cardElement.mount('#card-element');\r\n\r\n cardElement.on('change', (event: { complete: boolean, error?: { message: string } }) => {\r\n if (event.complete) {\r\n onCardChange('');\r\n } else if (event.error) {\r\n onCardChange(event.error.message);\r\n }\r\n });\r\n }\r\n }\r\n\r\n async formData(form: any, environment: any, cartInfo: any): Promise<void> {\r\n if (form.layoutSchema?.formSections) {\r\n for (const formSection of form.layoutSchema.formSections) {\r\n if (formSection.formFields?.length > 0) {\r\n for (const formField of formSection.formFields) {\r\n const scope = this.getScope(formField.scope?.reference);\r\n const fieldKey = formField.scope?.reference.split('/').pop();\r\n const field = form.propertySchema?.[scope]?.[fieldKey];\r\n\r\n if (!field) continue;\r\n\r\n // Checkbox logic with copy action\r\n if (field.type === 'checkbox' && formField.option?.innerAction?.action === 'copy') {\r\n const fromSchema = form.propertySchema[formField.option.innerAction.from];\r\n const toSchema = form.propertySchema[formField.option.innerAction.to];\r\n const keys = Object.keys(fromSchema);\r\n\r\n keys.forEach((key: any) => {\r\n if (toSchema[key]) {\r\n const sourceValue = fromSchema?.[key]?.value;\r\n toSchema[key].value = sourceValue || '';\r\n }\r\n });\r\n }\r\n\r\n // Dropdown logic (async data fetching)\r\n if (field.type === 'dropdown' && formField.option?.data_url) {\r\n try {\r\n const res: any = await lastValueFrom(this.requestService.getInfo(environment.apiUrl + formField.option.data_url));\r\n const key = Object.keys(res._embedded || {})[0];\r\n if (key) {\r\n field.data = res._embedded[key];\r\n }\r\n } catch (err) {\r\n console.error('Failed to load dropdown data', err);\r\n }\r\n }\r\n\r\n // Cart info logic for string fields\r\n if (field.type === 'string' && formField?.option?.cartInfo) {\r\n if (field.value?.toString()?.includes('{{quantity}}')) {\r\n field.value = cartInfo.quantity;\r\n } else if (field.value?.toString()?.includes('{{totalPrice}}')) {\r\n field.value = cartInfo.totalPrice;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // async processData(\r\n // data: any,\r\n // options: {\r\n // dataKey?: string;\r\n // setImageUrl?: boolean;\r\n // showTable?: boolean;\r\n // projectSelected: string;\r\n // },\r\n // tenantName: any\r\n // ): Promise<any[]> {\r\n // if (options.dataKey) {\r\n // data = data[options.dataKey];\r\n // } else {\r\n // if (!data?._embedded?.products && !Array.isArray(data)) {\r\n // data = [data];\r\n // } else {\r\n // data = data?._embedded?.products;\r\n // }\r\n // }\r\n // const transformed = await Promise.all(\r\n // data.map(async (record: any) => {\r\n // let imageUrl = record.imageUrl;\r\n // const imagePath = `Media/` +\r\n // record?.imageUrl?.split('/').pop();\r\n // if (\r\n // tenantName &&\r\n // record?.imageUrl &&\r\n // options.setImageUrl\r\n // ) {\r\n // try {\r\n // imageUrl = \"\";\r\n // imageUrl = await this.couchdbService.getFileContentFromCouchDb(\r\n // `${tenantName}_${options.projectSelected}`,\r\n // imagePath\r\n // );\r\n // } catch (err) {\r\n // console.warn(`Failed to fetch image from CouchDB for ${imagePath}`, err);\r\n // imageUrl = '';\r\n // }\r\n // }\r\n // return {\r\n // ...record,\r\n // ...(imageUrl ? { imageUrl } : {}),\r\n // ...(imagePath ? { imagePath } : {}),\r\n // };\r\n // })\r\n // );\r\n\r\n // return transformed;\r\n // }\r\n\r\n // async setTableDataImages(records: any, tenantName: any, projectSelected: any): Promise<any[]> {\r\n // const transformed = await Promise.all(\r\n // records.map(async (record: any) => {\r\n // let imageUrl = record.imageUrl;\r\n // const imagePath = record?.imagePath ? record?.imagePath : `Media/` +\r\n // record?.imageUrl?.split('/').pop();\r\n // if (\r\n // tenantName &&\r\n // record?.imageUrl &&\r\n // record.hasOwnProperty('imageUrl')\r\n // ) {\r\n // try {\r\n // imageUrl = \"\";\r\n // imageUrl = await this.couchdbService.getFileContentFromCouchDb(\r\n // `${tenantName}_${projectSelected}`,\r\n // imagePath\r\n // );\r\n // } catch (err) {\r\n // console.warn(`Failed to fetch image from CouchDB for ${imagePath}`, err);\r\n // imageUrl = '';\r\n // }\r\n // }\r\n // return {\r\n // ...record,\r\n // ...(imageUrl ? { imageUrl } : {}),\r\n // };\r\n // })\r\n // );\r\n // return transformed;\r\n // }\r\n\r\n // set date in localstorage\r\n normalizeDatesForStorage(obj: any): any {\r\n const normalized: any = {};\r\n Object.entries(obj).forEach(([key, value]: any) => {\r\n if (this.isDateLike(value)) {\r\n const date = value instanceof Date ? value : new Date(value);\r\n normalized[key] = this.toLocalISOString(date);\r\n } else {\r\n normalized[key] = value;\r\n }\r\n });\r\n return normalized;\r\n }\r\n\r\n\r\n isDateLike(value: any): boolean {\r\n if (!value) return false;\r\n\r\n // Actual Date object\r\n if (value instanceof Date && !isNaN(value.getTime())) {\r\n return true;\r\n }\r\n\r\n // ISO string (UTC or local)\r\n if (typeof value === 'string') {\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const tzOffset = date.getTimezoneOffset() * 60000;\r\n return new Date(date.getTime() - tzOffset)\r\n .toISOString()\r\n .slice(0, 19);\r\n }\r\n\r\n // restore date Field from localstorage\r\n restoreDatesFromStorage(records: any[], propertySchema: any): any[] {\r\n if (!Array.isArray(records)) return records;\r\n if (!propertySchema) return records;\r\n\r\n return records.map(record => {\r\n const restored = { ...record };\r\n\r\n Object.keys(propertySchema).forEach(scopeKey => {\r\n const schemaGroup = propertySchema[scopeKey];\r\n if (!schemaGroup) return;\r\n\r\n Object.keys(schemaGroup).forEach(fieldKey => {\r\n const fieldSchema = schemaGroup[fieldKey];\r\n const value = restored[fieldKey];\r\n if (!value || typeof value !== 'string') return;\r\n\r\n // ✅ DATE or TIME fields only\r\n if (fieldSchema.type === 'date' || fieldSchema.type === 'time') {\r\n restored[fieldKey] = this.parseLocalISODate(value);\r\n }\r\n });\r\n });\r\n\r\n return restored;\r\n });\r\n }\r\n\r\n parseLocalISODate(value: string): Date {\r\n // Remove Z to avoid UTC shift\r\n const clean = value.replace('Z', '');\r\n const [datePart, timePart = '00:00:00.000'] = clean.split('T');\r\n\r\n const [y, m, d] = datePart.split('-').map(Number);\r\n const [hh = 0, mm = 0, ss = 0, ms = 0] =\r\n timePart.split(/[:.]/).map(Number);\r\n\r\n return new Date(y, m - 1, d, hh, mm, ss, ms);\r\n }\r\n\r\n // savecard conversion\r\n convertToDailyLogs(cardOrCards: any | any[]): any[] {\r\n // Normalize input to array\r\n const cards = Array.isArray(cardOrCards) ? cardOrCards : [cardOrCards];\r\n\r\n const results: any[] = [];\r\n\r\n for (const card of cards) {\r\n\r\n const fromDate = new Date(card.fromDate);\r\n const toDate = new Date(card.toDate);\r\n\r\n const fromTime = new Date(card.workDayTimeFrom);\r\n const toTime = new Date(card.workDayTimeTo);\r\n\r\n // Normalize dates to midnight\r\n const startDay = new Date(fromDate);\r\n startDay.setHours(0, 0, 0, 0);\r\n\r\n const endDay = new Date(toDate);\r\n endDay.setHours(0, 0, 0, 0);\r\n\r\n let currentDay = new Date(startDay);\r\n\r\n while (currentDay <= endDay) {\r\n const isFirstDay = this.isSameDay(currentDay, fromDate);\r\n const isLastDay = this.isSameDay(currentDay, toDate);\r\n const isSameDay = isFirstDay && isLastDay;\r\n\r\n let workFrom: Date;\r\n let workTo: Date;\r\n\r\n // SAME DAY\r\n if (isSameDay) {\r\n workFrom = this.applyTimeToDay(currentDay, fromTime);\r\n workTo = this.applyTimeToDay(currentDay, toTime);\r\n }\r\n // FIRST DAY\r\n else if (isFirstDay) {\r\n workFrom = this.applyTimeToDay(currentDay, fromTime);\r\n workTo = this.endOfDay(currentDay);\r\n }\r\n // LAST DAY\r\n else if (isLastDay) {\r\n workFrom = this.startOfDay(currentDay);\r\n workTo = this.applyTimeToDay(currentDay, toTime);\r\n }\r\n // MIDDLE DAY\r\n else {\r\n workFrom = this.startOfDay(currentDay);\r\n workTo = this.endOfDay(currentDay);\r\n }\r\n\r\n results.push({\r\n comment: card.comments || \"\",\r\n onCallDuty: false,\r\n timeCredit: false,\r\n workDay: this.toLocalISO(currentDay, 0, 0),\r\n workDayTimeFrom: this.toLocalISO(workFrom),\r\n workDayTimeTo: this.toLocalISO(workTo),\r\n workOrderNo: card.workOrderNo,\r\n workType: \"A\"\r\n });\r\n\r\n currentDay.setDate(currentDay.getDate() + 1);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n private applyTimeToDay(day: Date, time: Date): Date {\r\n const d = new Date(day);\r\n d.setHours(time.getHours(), time.getMinutes(), 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfDay(d: Date): Date {\r\n const x = new Date(d);\r\n x.setHours(0, 0, 0, 0);\r\n return x;\r\n }\r\n\r\n private endOfDay(d: Date): Date {\r\n const x = new Date(d);\r\n x.setHours(23, 59, 0, 0);\r\n return x;\r\n }\r\n\r\n private isSameDay(a: Date, b: Date): boolean {\r\n return (\r\n a.getFullYear() === b.getFullYear() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getDate() === b.getDate()\r\n );\r\n }\r\n\r\n private toLocalISO(date: Date, hour?: number, minute?: number): string {\r\n const d = new Date(date);\r\n\r\n if (hour !== undefined && minute !== undefined) {\r\n d.setHours(hour, minute, 0, 0);\r\n }\r\n\r\n const pad = (n: number) => String(n).padStart(2, '0');\r\n\r\n const year = d.getFullYear();\r\n const month = pad(d.getMonth() + 1);\r\n const day = pad(d.getDate());\r\n const hrs = pad(d.getHours());\r\n const mins = pad(d.getMinutes());\r\n\r\n const offset = -d.getTimezoneOffset();\r\n const sign = offset >= 0 ? '+' : '-';\r\n const offH = pad(Math.floor(Math.abs(offset) / 60));\r\n const offM = pad(Math.abs(offset) % 60);\r\n\r\n return `${year}-${month}-${day}T${hrs}:${mins}:00${sign}${offH}:${offM}`;\r\n }\r\n\r\n getMediaSrc(file: any): string {\r\n if (!file) return '';\r\n if (file.src) {\r\n return file.src;\r\n }\r\n if (file.base64) {\r\n const mimeType = file.mimeType || 'image/png';\r\n return `data:${mimeType};base64,${file.base64}`;\r\n }\r\n if (file.dataUrl) {\r\n return file.dataUrl;\r\n }\r\n return '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UtilityService } from './utility.service';\r\nimport { Platform } from '@angular/cdk/platform';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class Couchdb {\r\n private readonly couchDbBaseUrl = 'https://couchdb.yomotech.de';\r\n\r\n constructor(private utilityService: UtilityService, private platform: Platform) { }\r\n\r\n async getTenantDatabases(tenantKey: any): Promise<any[]> {\r\n if (!tenantKey || !tenantKey.trim()) {\r\n throw new Error('Missing tenantKey');\r\n }\r\n\r\n const response = await fetch(`https://couchdb.yomotech.de/tenant-dbs`, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json',\r\n 'X-Tenant-Key': tenantKey.trim(),\r\n },\r\n });\r\n const data = await this.parseJsonOrText(response);\r\n\r\n // if (!response.ok) {\r\n // throw new Error(\r\n // `GET /tenant-dbs -> ${response.status} ${this.stringifyErrorDetails(data)}`\r\n // );\r\n // }\r\n\r\n return data;\r\n }\r\n\r\n private async parseJsonOrText(response: Response): Promise<any> {\r\n const rawText = await response.text();\r\n\r\n if (!rawText) return null;\r\n\r\n try {\r\n return JSON.parse(rawText);\r\n } catch {\r\n return rawText;\r\n }\r\n }\r\n\r\n private stringifyErrorDetails(data: any): string {\r\n if (typeof data === 'string') return data;\r\n\r\n try {\r\n return JSON.stringify(data);\r\n } catch {\r\n return 'Unknown error';\r\n }\r\n }\r\n\r\n async getFileContentFromCouchDb(\r\n couchDbName: string,\r\n filePath: string\r\n ): Promise<any | null> {\r\n try {\r\n\r\n const dbName = couchDbName?.toLowerCase();\r\n const docId = filePath?.trim();\r\n if (!docId) {\r\n console.error('Missing file path');\r\n return null;\r\n }\r\n\r\n const response = await fetch(this.getDocumentUrl(dbName, docId), {\r\n method: 'GET',\r\n headers: await this.getReadHeaders(),\r\n });\r\n\r\n const doc = await this.parseJsonOrText(response);\r\n\r\n if (!response.ok) {\r\n console.error(\r\n `Failed to fetch file \"${docId}\" from \"${dbName}\": ${response.status}`,\r\n doc\r\n );\r\n return null;\r\n }\r\n\r\n if (!doc?.data) {\r\n console.error(`Document \"${docId}\" does not contain file data`);\r\n return null;\r\n }\r\n\r\n // do not decode images as utf8 text\r\n if (\r\n doc.type === 'media' ||\r\n doc.type === 'base64file' ||\r\n this.isBinaryMediaFile(doc.name || doc.path || docId, doc.contentType)\r\n ) {\r\n return {\r\n type: doc.type || 'base64file',\r\n mimeType: this.getMimeType(doc.name || doc.path || docId, doc.contentType),\r\n base64: doc.data,\r\n src: `data:${this.getMimeType(doc.name || doc.path || docId, doc.contentType)};base64,${doc.data}`,\r\n name: doc.name,\r\n path: doc.path,\r\n metadata: doc.metadata || {},\r\n };\r\n }\r\n\r\n const decodedContent = this.fromBase64(doc.data);\r\n\r\n if (this.isJsonFile(doc.name || doc.path || docId, doc.contentType)) {\r\n try {\r\n return JSON.parse(decodedContent);\r\n } catch (jsonError) {\r\n console.error(`Failed to parse JSON for file \"${docId}\"`, jsonError);\r\n return decodedContent;\r\n }\r\n }\r\n\r\n return decodedContent;\r\n } catch (error) {\r\n console.error(\r\n `Unexpected error while fetching file \"${filePath}\" from \"${couchDbName}\"`,\r\n error\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n private isBinaryMediaFile(fileNameOrPath: string, contentType?: string): boolean {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n const type = contentType || '';\r\n\r\n return (\r\n type.startsWith('image/') ||\r\n type.startsWith('video/') ||\r\n type.startsWith('audio/') ||\r\n type === 'application/pdf' ||\r\n\r\n lower.endsWith('.png') ||\r\n lower.endsWith('.jpg') ||\r\n lower.endsWith('.jpeg') ||\r\n lower.endsWith('.ico') ||\r\n lower.endsWith('.svg') ||\r\n lower.endsWith('.webp') ||\r\n lower.endsWith('.gif') ||\r\n\r\n lower.endsWith('.mp4') ||\r\n lower.endsWith('.webm') ||\r\n lower.endsWith('.mp3') ||\r\n lower.endsWith('.wav') ||\r\n lower.endsWith('.m4a') ||\r\n\r\n lower.endsWith('.pdf')\r\n );\r\n }\r\n\r\n private getMimeType(fileNameOrPath: string, contentType?: string): string {\r\n if (contentType) return contentType;\r\n\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n\r\n if (lower.endsWith('.png')) return 'image/png';\r\n if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return 'image/jpeg';\r\n if (lower.endsWith('.ico')) return 'image/x-icon';\r\n if (lower.endsWith('.svg')) return 'image/svg+xml';\r\n if (lower.endsWith('.webp')) return 'image/webp';\r\n if (lower.endsWith('.gif')) return 'image/gif';\r\n\r\n if (lower.endsWith('.mp4')) return 'video/mp4';\r\n if (lower.endsWith('.webm')) return 'video/webm';\r\n\r\n if (lower.endsWith('.mp3')) return 'audio/mpeg';\r\n if (lower.endsWith('.wav')) return 'audio/wav';\r\n if (lower.endsWith('.m4a')) return 'audio/mp4';\r\n\r\n if (lower.endsWith('.pdf')) return 'application/pdf';\r\n\r\n return 'application/octet-stream';\r\n }\r\n\r\n private getImageMimeType(fileNameOrPath: string): string {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n\r\n if (lower.endsWith('.png')) return 'image/png';\r\n if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return 'image/jpeg';\r\n if (lower.endsWith('.ico')) return 'image/x-icon';\r\n if (lower.endsWith('.svg')) return 'image/svg+xml';\r\n\r\n return 'image/png';\r\n }\r\n\r\n private fromBase64(base64: string): string {\r\n try {\r\n return decodeURIComponent(escape(atob(base64)));\r\n } catch {\r\n return atob(base64);\r\n }\r\n }\r\n\r\n private isJsonFile(fileNameOrPath: string, contentType?: string): boolean {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n return lower.endsWith('.json') || contentType === 'application/json';\r\n }\r\n\r\n private getDocumentUrl(dbName: string, docId: string): string {\r\n return `${this.getDbUrl(dbName)}/${encodeURIComponent(docId)}`;\r\n }\r\n\r\n private getDbUrl(dbName: string): string {\r\n return `${this.couchDbBaseUrl}/${dbName}`;\r\n }\r\n\r\n private async getReadHeaders(): Promise<HeadersInit> {\r\n return {\r\n Accept: 'application/json',\r\n ...(await this.buildTenantHeaders()),\r\n };\r\n }\r\n\r\n private async buildTenantHeaders(): Promise<Record<string, string>> {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n\r\n const selectedTenant = await this.utilityService.getLocalStorage('selectedTenant');\r\n if (typeof tenantKey === 'string' && tenantKey.trim()) {\r\n return { 'X-Tenant-Key': tenantKey.trim() };\r\n }\r\n const normalizedTenantName = typeof tenantName === 'string' ? tenantName.trim() : '';\r\n const normalizedSelectedTenant = typeof selectedTenant === 'string' ? selectedTenant.trim() : '';\r\n const tenant = normalizedTenantName || normalizedSelectedTenant;\r\n if (!tenant) {\r\n throw new Error('Missing tenantKey, tenantName, ' + 'or selectedTenant');\r\n }\r\n return { 'X-Tenant': tenant, };\r\n }\r\n\r\n async getImageSrcFromCouchDb(\r\n couchDbName: string,\r\n filePath: string\r\n ): Promise<string> {\r\n const dbName = couchDbName?.toLowerCase();\r\n const docId = filePath?.trim();\r\n\r\n if (!docId) {\r\n throw new Error('Missing file path');\r\n }\r\n\r\n const response = await fetch(this.getDocumentUrl(dbName, docId), {\r\n method: 'GET',\r\n headers: await this.getReadHeaders(),\r\n });\r\n\r\n const doc = await this.parseJsonOrText(response);\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch image \"${docId}\" from \"${dbName}\": ${response.status} ${this.stringifyErrorDetails(doc)}`\r\n );\r\n }\r\n\r\n if (!doc?.data) {\r\n throw new Error(`Document \"${docId}\" does not contain image data`);\r\n }\r\n\r\n const mimeType = doc.contentType || 'image/png';\r\n\r\n return `data:${mimeType};base64,${doc.data}`;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { UtilityService } from './utility.service';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { Couchdb } from './couchdb';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigService {\r\n private config: any;\r\n private skipOkta = false;\r\n private keycloakConfig: any;\r\n\r\n constructor(private couchdbService: Couchdb, private utilityService: UtilityService, private platform: Platform) { }\r\n\r\n async loadOktaConfig(projectName: string): Promise<void> {\r\n try {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n if (tenantName) {\r\n this.config = await this.couchdbService.getFileContentFromCouchDb(\r\n `${tenantName}_${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n } else {\r\n this.config = await this.couchdbService.getFileContentFromCouchDb(\r\n `${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n }\r\n\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n if (this.config.environment.login.mobile) {\r\n this.setConfiguration(this.config.environment.login.mobile);\r\n } else {\r\n this.setConfiguration(null);\r\n }\r\n } else {\r\n if (this.config.environment.login.web) {\r\n this.setConfiguration(this.config.environment.login.web);\r\n } else {\r\n this.setConfiguration(null);\r\n }\r\n }\r\n\r\n } catch (err) {\r\n console.error('Error loading config:', err);\r\n }\r\n }\r\n\r\n setConfiguration(config: any) {\r\n if (config) {\r\n this.config = config;\r\n } else {\r\n this.config = {\r\n issuer: 'http://dummy',\r\n clientId: 'dummy',\r\n redirectUri: window.location.origin,\r\n responseType: 'code',\r\n scope: 'openid profile email',\r\n showDebugInformation: true,\r\n pkce: true,\r\n };\r\n }\r\n }\r\n\r\n skipOktaConfig() {\r\n this.skipOkta = true;\r\n }\r\n\r\n get oktaConfig() {\r\n if (this.skipOkta) {\r\n return null;\r\n }\r\n return this.config;\r\n }\r\n\r\n async loadKeycloakConfig(projectName: string): Promise<void> {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n let env: any = {};\r\n if (tenantName) {\r\n env = await this.couchdbService.getFileContentFromCouchDb(\r\n `${tenantName}_${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n } else {\r\n env = await this.couchdbService.getFileContentFromCouchDb(\r\n `${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n }\r\n if (env?.environment?.login.type === \"keycloak\") {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n this.keycloakConfig = {\r\n issuer: \"https://keycloak-poc.wilken.de/realms/p5\",\r\n clientId: \"mobile\",\r\n redirectUri: \"de.yomotech:/login/callback\",\r\n logoutRedirectUri: \"de.yomotech:/login/callback\",\r\n scope: \"openid profile email\",\r\n responseType: \"code\"\r\n }\r\n } else {\r\n this.keycloakConfig = {\r\n issuer: env?.environment?.login?.web?.issuer ?? 'http://dummy',\r\n clientId: env?.environment?.login?.web?.clientId ?? 'dummy',\r\n redirectUri: window.location.origin,\r\n responseType: 'code',\r\n scope: 'openid profile email',\r\n showDebugInformation: true\r\n };\r\n }\r\n } else {\r\n this.keycloakConfig = {};\r\n }\r\n }\r\n\r\n getKeycloakConfig() {\r\n return this.keycloakConfig;\r\n }\r\n\r\n getKeycloakMobileConfig() {\r\n if (!this.keycloakConfig) return null;\r\n return {\r\n issuer: this.keycloakConfig?.issuer ?? 'http://dummy',\r\n clientId: this.keycloakConfig?.clientId,\r\n redirectUri: this.keycloakConfig.redirectUri,\r\n logoutRedirectUri: this.keycloakConfig.logoutRedirectUri,\r\n scope: this.keycloakConfig.scope,\r\n responseType: this.keycloakConfig.responseType\r\n };\r\n }\r\n\r\n private updateLoaderValue = new BehaviorSubject<any>(null);\r\n currentLoader$ = this.updateLoaderValue.asObservable();\r\n\r\n updateLoader(value: any) {\r\n this.updateLoaderValue.next(value);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService {\r\n\r\n constructor(public toastr: ToastrService) { }\r\n\r\n success(message: string, time: number = 5000) {\r\n this.toastr.success(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n info(message: string, time: number = 5000) {\r\n this.toastr.info(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n warning(message: string, time: number = 20000) {\r\n this.toastr.warning(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n error(error: string, time: number = 20000, message?: string,) {\r\n this.toastr.error(error, message, { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { RequestService } from '../../services/request.service';\r\n\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { SimpleChanges } from '@angular/core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { CapacitorHttp } from '@capacitor/core';\r\n\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { NzModalModule, NzModalService } from 'ng-zorro-antd/modal';\r\n\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { PaginationComponent } from '../pagination/pagination.component';\r\nimport { String as StringComponent } from '../../components/string/string';\r\nimport { ConfigService } from '../../services/config.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'vl-card',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzIconModule,\r\n DatePickerModule,\r\n NzButtonModule,\r\n NzDatePickerModule,\r\n NzModalModule,\r\n PaginationComponent,\r\n MatTooltipModule,\r\n\tStringComponent\r\n ],\r\n standalone: true,\r\n templateUrl: './card.component.html',\r\n styleUrl: './card.component.css',\r\n})\r\nexport class CardComponent {\r\n @Input() itemInfo: any = {};\r\n @Input() currentPage: number = 0;\r\n @Input() pageSize: number = 5;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() mobileDisplay: boolean = false;\r\n @Input() scrollPagination: boolean = false;\r\n @Input() pages: number[] = [];\r\n @Output() cardButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() cardHeaderButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() linkDetails: EventEmitter<any> = new EventEmitter();\r\n @Output() imageDetails: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageSizeChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageChange: EventEmitter<any> = new EventEmitter();\r\n @Input() paginationMode: 'client' | 'server' = 'server';\r\n @Input() paginationLoading: boolean = false;\r\n @Output() cardDataChange = new EventEmitter<{\r\n records: any[];\r\n resetPage?: boolean;\r\n }>();\r\n @ViewChild('scrollPaginationSentinel')\r\n scrollPaginationSentinel?: ElementRef<HTMLElement>;\r\n\r\n private scrollObserver?: IntersectionObserver;\r\n private requestedScrollPage: number | null = null;\r\n cardPerRow: string = 'md:col-6 lg:col-';\r\n deviceMode: 'desktop' | 'tablet' | 'mobile' = 'desktop';\r\n isLoading: boolean = false;\r\n layoutSchemaCopy: any = {};\r\n headerSchemaCopy: any = {};\r\n footerSchemaCopy: any = {};\r\n\r\n constructor(\r\n private utilityService: UtilityService,\r\n private platform: Platform,\r\n private http: HttpClient,\r\n private configService: ConfigService,\r\n private cdr: ChangeDetectorRef,\r\n private zone: NgZone,\r\n private modalService: NzModalService,\r\n private notificationService: NotificationService,\r\n private oauthService: OAuthService,\r\n private requestService: RequestService,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform.isBrowser) {\r\n this.mobileDisplay = true;\r\n }\r\n\r\n this.updateDeviceMode();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateDeviceMode();\r\n if (\r\n changes['scrollPagination'] ||\r\n changes['currentPage'] ||\r\n changes['paginationLoading'] ||\r\n changes['pages']\r\n ) {\r\n if (!this.paginationLoading) {\r\n this.requestedScrollPage = null;\r\n }\r\n this.refreshScrollObserver();\r\n }\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n this.mobileDisplay = true;\r\n }\r\n if (changes['itemInfo']) {\r\n if (this.itemInfo.layoutSchema) {\r\n this.layoutSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.layoutSchema));\r\n }\r\n if (this.itemInfo.header) {\r\n this.headerSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.header));\r\n }\r\n if (this.itemInfo.footer) {\r\n this.footerSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.footer));\r\n }\r\n }\r\n if ((changes['selectedLanguageInfo'] || this.selectedLanguageInfo) && this.selectedLanguageInfo.selectedLanguage) {\r\n this.itemInfo.footer = this.updatebuttonLanguage(this.footerSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n this.itemInfo.header = this.updatebuttonLanguage(this.headerSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n this.itemInfo.layoutSchema = this.updateLayoutLanguage(this.layoutSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n get displayedRecords(): any[] {\r\n const records = Array.isArray(this.itemInfo?.data)\r\n ? this.itemInfo.data\r\n : [];\r\n\r\n /*\r\n * For server pagination, itemInfo.data contains either:\r\n * - the current numbered page, or\r\n * - all pages loaded through infinite scroll.\r\n */\r\n if (\r\n this.paginationMode === 'server' ||\r\n this.scrollPagination\r\n ) {\r\n return records;\r\n }\r\n\r\n const normalizedPageSize =\r\n Number(this.pageSize) ||\r\n Number(\r\n this.itemInfo?.layoutSchema?.pagination?.defaultPageSize\r\n ) ||\r\n 5;\r\n\r\n const normalizedCurrentPage =\r\n Number(this.currentPage) || 0;\r\n\r\n const startIndex =\r\n normalizedCurrentPage * normalizedPageSize;\r\n\r\n return records.slice(\r\n startIndex,\r\n startIndex + normalizedPageSize\r\n );\r\n }\r\n\r\n private setupScrollObserver(): void {\r\n this.destroyScrollObserver();\r\n\r\n if (\r\n !this.scrollPagination ||\r\n !this.scrollPaginationSentinel ||\r\n typeof IntersectionObserver === 'undefined'\r\n ) {\r\n return;\r\n }\r\n\r\n this.scrollObserver = new IntersectionObserver(\r\n entries => {\r\n const sentinelEntry = entries[0];\r\n\r\n if (sentinelEntry?.isIntersecting) {\r\n this.loadNextScrollPage();\r\n }\r\n },\r\n {\r\n root: null,\r\n rootMargin: '0px 0px 250px 0px',\r\n threshold: 0\r\n }\r\n );\r\n\r\n this.scrollObserver.observe(\r\n this.scrollPaginationSentinel.nativeElement\r\n );\r\n }\r\n\r\n private loadNextScrollPage(): void {\r\n if (\r\n !this.scrollPagination ||\r\n this.paginationLoading ||\r\n !this.hasNextScrollPage()\r\n ) {\r\n return;\r\n }\r\n\r\n const nextPage = this.currentPage + 1;\r\n\r\n if (this.requestedScrollPage === nextPage) {\r\n return;\r\n }\r\n\r\n this.requestedScrollPage = nextPage;\r\n this.onPageChange.emit(nextPage);\r\n }\r\n\r\n private hasNextScrollPage(): boolean {\r\n return (\r\n Array.isArray(this.pages) &&\r\n this.pages.length > 0 &&\r\n this.currentPage < this.pages.length - 1\r\n );\r\n }\r\n\r\n private refreshScrollObserver(): void {\r\n setTimeout(() => {\r\n this.setupScrollObserver();\r\n });\r\n }\r\n\r\n private destroyScrollObserver(): void {\r\n this.scrollObserver?.disconnect();\r\n this.scrollObserver = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyScrollObserver();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setupScrollObserver();\r\n }\r\n\r\n getRecordIndex(record: any): number {\r\n if (!Array.isArray(this.itemInfo?.data)) {\r\n return -1;\r\n }\r\n\r\n return this.itemInfo.data.indexOf(record);\r\n }\r\n\r\n private publishCardDataChange(\r\n resetPage: boolean = false\r\n ): void {\r\n const records = Array.isArray(this.itemInfo?.data)\r\n ? [...this.itemInfo.data]\r\n : [];\r\n\r\n this.cardDataChange.emit({\r\n records,\r\n resetPage\r\n });\r\n }\r\n\r\n private setFilteredCardData(\r\n records: any\r\n ): void {\r\n const normalizedRecords =\r\n this.utilityService.restoreDatesFromStorage(\r\n Array.isArray(records) ? records : [],\r\n this.itemInfo.propertySchema\r\n );\r\n\r\n this.itemInfo.data = normalizedRecords;\r\n\r\n /*\r\n * Filtering creates a new complete client-side dataset.\r\n * Move pagination back to the first page.\r\n */\r\n this.publishCardDataChange(true);\r\n }\r\n\r\n private updateDeviceMode(): void {\r\n if (typeof window === 'undefined') {\r\n this.deviceMode = this.mobileDisplay ? 'mobile' : 'desktop';\r\n return;\r\n }\r\n\r\n const width = window.innerWidth;\r\n\r\n if (this.mobileDisplay || width <= 768) {\r\n this.deviceMode = 'mobile';\r\n } else if (width <= 1024) {\r\n this.deviceMode = 'tablet';\r\n } else {\r\n this.deviceMode = 'desktop';\r\n }\r\n }\r\n\r\n private safeUpdate(fn: () => void) {\r\n if (NgZone.isInAngularZone()) {\r\n fn();\r\n this.cdr.markForCheck();\r\n } else {\r\n this.zone.run(() => {\r\n fn();\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n getHorizontalLayoutCaption(layout: any) {\r\n let lang = this.selectedLanguageInfo?.selectedLanguage;\r\n let caption = layout.label.caption\r\n ? layout.label.caption\r\n : this.itemInfo.propertySchema[this.getScope(layout.scope?.reference)]?.[\r\n layout.scope?.reference.split('/').pop()\r\n ]?.caption;\r\n return lang && lang[caption] ? lang[caption] : caption;\r\n }\r\n\r\n getHorizontalLayoutTooltip(layout: any) {\r\n let lang = this.selectedLanguageInfo?.selectedLanguage;\r\n let tooltip = layout.option && layout.option.tooltip || '';\r\n return lang && lang[tooltip] ? lang[tooltip] : tooltip;\r\n }\r\n\r\n forceNumericKeyboard(event: any) {\r\n const input = event?.target as HTMLInputElement;\r\n if (input && input.tagName === 'INPUT') {\r\n input.setAttribute('inputmode', 'numeric'); // Android\r\n input.setAttribute('pattern', '[0-9:]*'); // iOS\r\n input.setAttribute('type', 'tel'); // strongest signal\r\n }\r\n }\r\n\r\n onDateTyping(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 8);\r\n let formatted = '';\r\n if (digits.length <= 4) {\r\n formatted = digits;\r\n } else if (digits.length <= 6) {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4)}`;\r\n } else {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;\r\n }\r\n input.value = formatted;\r\n }\r\n\r\n updatebuttonLanguage<T>(schema: T, translations: Record<string, string>): T {\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // ✅ Replace direct caption (e.g. button.caption)\r\n if (typeof obj.caption === 'string') {\r\n const original = obj.caption;\r\n obj.caption = translations[original] ?? original;\r\n }\r\n\r\n if (obj.option && obj.option.tooltip && (typeof obj?.option?.tooltip === 'string')) {\r\n const original = obj?.option?.tooltip;\r\n obj.option.tooltip = translations[original] ?? original;\r\n }\r\n\r\n // ✅ Replace modalTitle if present\r\n if (typeof obj.modalTitle === 'string') {\r\n const original = obj.modalTitle;\r\n obj.modalTitle = translations[original] ?? original;\r\n }\r\n\r\n // 🔁 Recurse\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n updateLayoutLanguage<T>(schema: T, translations: Record<string, string>): T {\r\n // Deep clone to avoid mutating original schema\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // ✅ If label.caption exists → translate it\r\n if (obj.label && typeof obj.label.caption === 'string') {\r\n const originalCaption = obj.label.caption;\r\n obj.label.caption = translations[originalCaption] ?? originalCaption;\r\n }\r\n if (obj.elements && obj.elements.length > 0) {\r\n obj.elements.forEach((element: any) => {\r\n if (element.label && element.label.caption) {\r\n const originalElementCaption = element.label.caption;\r\n element.label.caption = translations[originalElementCaption] ?? originalElementCaption;\r\n }\r\n });\r\n }\r\n\r\n // 🔁 Recurse into object properties\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n dateChangeEvent(filter: any, value: any) {\r\n const scope = this.getScope(filter.scope.reference);\r\n const field = filter.scope?.reference.split('/').pop();\r\n this.itemInfo.propertySchema[scope][field].value = value\r\n this.applyDateFilter(this.extractFilterValues(this.itemInfo.propertySchema[scope]))\r\n }\r\n\r\n async applyDateFilter(filters: any) {\r\n const from = filters.fromDateFilter ? new Date(filters.fromDateFilter) : null;\r\n const to = filters.toDateFilter ? new Date(filters.toDateFilter) : null;\r\n if (to && from) {\r\n const formattedFrom = this.formatToOffsetISO(from);\r\n const formattedTo = this.formatToOffsetISO(to);\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n const logined: any = await this.utilityService.getLocalStorage('loginedUser');\r\n this.safeUpdate(() => this.isLoading = true);\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n try {\r\n const saveOrders = await this.getSaveOrder(\r\n keycloakInfo?.token,\r\n keycloakInfo,\r\n formattedFrom,\r\n formattedTo\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData(saveOrders);\r\n this.isLoading = false;\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to fetch saved work orders',\r\n error\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData([]);\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n return;\r\n } else {\r\n this.requestService\r\n .getSaveOrder(\r\n logined?.token,\r\n logined,\r\n formattedFrom,\r\n formattedTo\r\n )\r\n .subscribe({\r\n next: (saveOrders: any) => {\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData(saveOrders);\r\n this.isLoading = false;\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(\r\n 'Failed to fetch saved work orders',\r\n error\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData([]);\r\n this.isLoading = false;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n async getSaveOrder(\r\n token: string,\r\n userInfo: any,\r\n fromDate: any,\r\n toDate: any\r\n ) {\r\n if (!token) {\r\n return;\r\n }\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n const url = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/requestBookedTimeRecording`;\r\n\r\n try {\r\n const response = await CapacitorHttp.post({\r\n url,\r\n params: {\r\n resourceNo: userInfo.p5_resource_no,\r\n workDayFrom: fromDate,\r\n workDayTo: toDate,\r\n company,\r\n appVersion: '1',\r\n },\r\n headers: {\r\n Authorization: `Bearer ${token}`, // ✅ REQUIRED\r\n Accept: 'application/json',\r\n },\r\n // ❗ NO BODY needed for this endpoint\r\n });\r\n\r\n console.log('getSaveOrder response:', response.data);\r\n return response.data;\r\n } catch (error) {\r\n console.error('Failed to fetch saved orders', error);\r\n throw error;\r\n }\r\n }\r\n\r\n formatToOffsetISO(date: Date): string {\r\n if (!date) return '';\r\n\r\n const pad = (n: number, len = 2) => String(n).padStart(len, '0');\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n const ms = pad(date.getMilliseconds(), 4); // 4-digit milliseconds\r\n\r\n // timezone offset\r\n const offset = -date.getTimezoneOffset(); // in minutes\r\n const offSign = offset >= 0 ? '+' : '-';\r\n const offHours = pad(Math.floor(Math.abs(offset) / 60));\r\n const offMinutes = pad(Math.abs(offset) % 60);\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}:${ms}${offSign}${offHours}:${offMinutes}`;\r\n }\r\n\r\n extractFilterValues(schema: Record<string, any>): Record<string, any> {\r\n return Object.keys(schema).reduce(\r\n (acc, key) => {\r\n if (key.includes('Filter') && schema[key]?.value !== undefined) {\r\n acc[key] = schema[key].value;\r\n }\r\n return acc;\r\n },\r\n {} as Record<string, any>,\r\n );\r\n }\r\n\r\n invokeOnPageSizeChange(pageSize: any): void {\r\n const normalizedPageSize = Number(pageSize);\r\n\r\n if (\r\n !Number.isFinite(normalizedPageSize) ||\r\n normalizedPageSize <= 0\r\n ) {\r\n return;\r\n }\r\n\r\n this.onPageSizeChange.emit(normalizedPageSize);\r\n }\r\n\r\n invokeGoToPage(page: number): void {\r\n if (\r\n page < 0 ||\r\n page >= this.pages.length ||\r\n page === this.currentPage\r\n ) {\r\n return;\r\n }\r\n\r\n this.onPageChange.emit(page);\r\n }\r\n\r\n invokeOnCardHeader(element: any) {\r\n if (element.option && element.option.innerAction === \"saveAll\") {\r\n this.d4_SaveAll();\r\n } else {\r\n this.cardHeaderButtonClick.emit(element);\r\n }\r\n }\r\n\r\n invokeOnCardFooter(element: any) {\r\n // this.cardHeaderButtonClick.emit(element);\r\n }\r\n\r\n async invokeButtonClick(layout: any, record: any, recordIndex: any) {\r\n if (layout?.option?.action === 'delete' && layout?.option?.storageType == 'localstorage') {\r\n if (layout?.option?.deleteMessage) {\r\n this.showConfirm(layout?.option, recordIndex);\r\n }\r\n } else if (layout?.option?.action === 'save' && layout?.option?.storageType === 'database') {\r\n this.configService.updateLoader(true);\r\n const final_array = this.utilityService.convertToDailyLogs(record);\r\n await this.saveToDb(final_array, recordIndex, layout.option.data_url)\r\n } else {\r\n this.cardButtonClick.emit({ layout: layout, record: record, recordIndex: recordIndex });\r\n }\r\n }\r\n\r\n showConfirm(option: any, recordIndex: any) {\r\n this.modalService.confirm({\r\n nzTitle:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Confirm']\r\n ? this.selectedLanguageInfo.selectedLanguage['Confirm']\r\n : 'Confirm',\r\n nzContent:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage &&\r\n this.selectedLanguageInfo?.selectedLanguage[option.deleteMessage]\r\n ? this.selectedLanguageInfo.selectedLanguage[option.deleteMessage]\r\n : option.deleteMessage,\r\n nzOkText:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Delete']\r\n ? this.selectedLanguageInfo.selectedLanguage['Delete']\r\n : 'Delete',\r\n nzCancelText:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Cancel']\r\n ? this.selectedLanguageInfo.selectedLanguage['Cancel']\r\n : 'Cancel',\r\n nzOnOk: () => this.deleteRecord(recordIndex),\r\n });\r\n }\r\n\r\n async d4_SaveAll() {\r\n if (this.itemInfo?.data?.length) {\r\n let allOrders: any[] = [];\r\n for (let i = 0; i < this.itemInfo.data.length; i++) {\r\n const element = this.itemInfo.data[i];\r\n const dailyLogs = this.utilityService.convertToDailyLogs(element);\r\n if (Array.isArray(dailyLogs)) {\r\n allOrders.push(...dailyLogs);\r\n }\r\n }\r\n await this.saveToDb(allOrders, null, true);\r\n } else {\r\n this.notificationService.warning(this.selectedLanguageInfo?.selectedLanguage['noRecordFound'] ? this.selectedLanguageInfo?.selectedLanguage['noRecordFound'] : 'No Record Found')\r\n }\r\n }\r\n\r\n async deleteRecord(recordIndex: number): Promise<void> {\r\n if (\r\n !Array.isArray(this.itemInfo?.data) ||\r\n recordIndex < 0 ||\r\n recordIndex >= this.itemInfo.data.length\r\n ) {\r\n this.configService.updateLoader(false);\r\n return;\r\n }\r\n\r\n this.itemInfo.data.splice(recordIndex, 1);\r\n\r\n await this.utilityService.setLocalStorage(\r\n 'timeRecords',\r\n JSON.stringify(this.itemInfo.data)\r\n );\r\n\r\n /*\r\n * Notify AppComponent so page count is recalculated.\r\n */\r\n this.publishCardDataChange(false);\r\n\r\n this.configService.updateLoader(false);\r\n }\r\n\r\n async deleteAllRecord(): Promise<void> {\r\n this.itemInfo.data = [];\r\n\r\n await this.utilityService.setLocalStorage(\r\n 'timeRecords',\r\n JSON.stringify([])\r\n );\r\n\r\n this.publishCardDataChange(true);\r\n\r\n this.configService.updateLoader(false);\r\n }\r\n\r\n async saveToDb(orders: any, orderIndex?: any, data_url?: any, deleteAll: boolean = false) {\r\n this.safeUpdate(() => (this.isLoading = true));\r\n const token = this.oauthService.getAccessToken();\r\n const logined: any = await this.utilityService.getLocalStorage('loginedUser');\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n let saveobject = {\r\n ressourceNo: logined?.p5_resource_no ? logined.p5_resource_no : keycloakInfo?.p5_resource_no,\r\n returnTimeRecordingLine: orders\r\n }\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n const res = await this.mobileSaveDb(keycloakInfo.token, keycloakInfo, saveobject, orderIndex, data_url, deleteAll);\r\n } else {\r\n this.webSaveDb(token, logined, saveobject, orderIndex, data_url, deleteAll);\r\n }\r\n }\r\n\r\n webSaveDb(token: any, userInfo: any, order: any = {}, orderIndex?: any, dataUrl?: any, deleteAll: boolean = false) {\r\n if (token) {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `Bearer ${token}`,\r\n 'Accept': 'application/json'\r\n });\r\n let url2: any = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording?company=${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant ? userInfo.p5_plant : \" \"}&appVersion=1&resourceNo=${userInfo.p5_resource_no}`\r\n this.http.post(url2, order, { headers }).subscribe({\r\n next: res => {\r\n this.safeUpdate(() => this.isLoading = false);\r\n if (orderIndex > -1) {\r\n this.deleteRecord(orderIndex)\r\n } else {\r\n this.deleteAllRecord();\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n async mobileSaveDb(token: string, userInfo: any, order: any = {}, orderIndex: number, dataUrl: any, deleteAll: boolean = false) {\r\n if (!token) {\r\n console.log('NO-token', token);\r\n return;\r\n }\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n const url = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording`;\r\n\r\n try {\r\n const response = await CapacitorHttp.post({\r\n url,\r\n params: {\r\n company,\r\n appVersion: '1',\r\n resourceNo: userInfo.p5_resource_no,\r\n },\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n data: order,\r\n });\r\n if (orderIndex != null && orderIndex > -1) {\r\n this.deleteRecord(orderIndex);\r\n } else {\r\n this.deleteAllRecord();\r\n }\r\n this.safeUpdate(() => (this.isLoading = false));\r\n\r\n return response.data;\r\n } catch (error) {\r\n this.safeUpdate(() => (this.isLoading = false));\r\n console.error('Failed to save time recording', error);\r\n throw error;\r\n }\r\n }\r\n\r\n showLinkDetails(option: any, record: any) {\r\n this.linkDetails.emit({ option: option, record: record });\r\n }\r\n\r\n showImageDetails(option: any, record: any) {\r\n this.imageDetails.emit({ option: option, record: record });\r\n }\r\n\r\n getProperty(scope: any) {\r\n const property = scope ? scope.split('/').pop() : '';\r\n return {\r\n key: property,\r\n productSchema: this.itemInfo.propertySchema[this.getScope(scope)][property],\r\n };\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any): {\r\n classes: string;\r\n style: Record<string, any>;\r\n } {\r\n if (!styleObject) {\r\n return {\r\n classes: '',\r\n style: {},\r\n };\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n\r\n return {\r\n classes: Array.isArray(classes) ? classes.filter(Boolean).join(' ') : classes || '',\r\n style: styleWithoutClasses || {},\r\n };\r\n }\r\n\r\n getCardContainerStyle(): Record<string, any> {\r\n const schema = this.itemInfo?.layoutSchema || {};\r\n const layout = schema?.layout || {};\r\n\r\n let cardsPerRow = Number(layout.desktopCardsPerRow) || 3;\r\n\r\n if (this.deviceMode === 'tablet') {\r\n cardsPerRow = Number(layout.tabletCardsPerRow) || 2;\r\n }\r\n\r\n if (this.deviceMode === 'mobile') {\r\n cardsPerRow = Number(layout.mobileCardsPerRow) || 1;\r\n }\r\n\r\n const baseStyle: any = this.getStyleWithoutClasses(schema.style).style;\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n schema?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n display: 'grid',\r\n gridTemplateColumns: `repeat(${Math.max(1, cardsPerRow)}, minmax(0, 1fr))`,\r\n gap: layout.gap || baseStyle.gap || '16px',\r\n padding: '0px 10px 0px 10px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getSingleCardStyle(): Record<string, any> {\r\n const schema = this.itemInfo?.layoutSchema || {};\r\n\r\n const baseStyle = this.getStyleWithoutClasses(schema.stylePerCard).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n schema?.stylePerCard?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHeaderStyle(): Record<string, any> {\r\n const header = this.itemInfo?.header || {};\r\n\r\n const baseStyle: any = this.getStyleWithoutClasses(header.style).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n header?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n width: baseStyle.width || '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHeaderElementWrapperStyle(element: any): Record<string, any> {\r\n const baseStyle = this.getStyleWithoutClasses(element?.wrapperStyle).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n element?.responsiveWrapperStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHorizontalLayoutStyle(layout: any): Record<string, any> {\r\n const baseStyle: any = this.getStyleWithoutClasses(layout?.style).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n layout?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n display: baseStyle.display || 'grid',\r\n width: baseStyle.width || '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n showButtonIcon(button: any): boolean {\r\n const mode = button?.option?.buttonContent;\r\n\r\n if (mode === 'icon' || mode === 'iconCaption') {\r\n return !!button?.icon;\r\n }\r\n\r\n return !mode && !button?.caption && !!button?.icon;\r\n }\r\n\r\n showButtonCaption(button: any): boolean {\r\n const mode = button?.option?.buttonContent;\r\n\r\n if (mode === 'caption' || mode === 'iconCaption') {\r\n return !!button?.caption;\r\n }\r\n\r\n return !mode && !!button?.caption;\r\n }\r\n\r\n getScope(scope: any): string {\r\n if (!scope || typeof scope !== 'string') {\r\n return '';\r\n }\r\n\r\n const start = scope.indexOf('#/') + 2;\r\n const end = scope.indexOf('/', start);\r\n\r\n if (start < 2 || end <= start) {\r\n return '';\r\n }\r\n\r\n return scope.substring(start, end);\r\n }\r\n}\r\n","<!-- Loader Spinner -->\r\n<div *ngIf=\"isLoading\" class=\"loader-overlay\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n<div class=\"vl-card-runtime\">\r\n <!-- top pagination on card -->\r\n <div *ngIf=\"\r\n itemInfo?.layoutSchema?.pagination?.visible &&\r\n itemInfo?.layoutSchema?.pagination?.top\r\n \" class=\"card-pagination-wrapper\">\r\n <vl-pagination [itemInfo]=\"itemInfo\" [selectedLanguageInfo]=\"selectedLanguageInfo\" [pageSize]=\"pageSize\"\r\n [currentPage]=\"currentPage\" [pages]=\"pages\" (pageSizeChange)=\"invokeOnPageSizeChange($event)\"\r\n (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n </div>\r\n <div *ngIf=\"itemInfo?.header?.elements?.length\" [ngStyle]=\"getHeaderStyle()\" [class]=\"getStyleWithoutClasses(\r\n itemInfo?.header?.style\r\n ).classes\">\r\n <div *ngFor=\"let element of itemInfo.header?.elements; let c = index\"\r\n [ngStyle]=\"getHeaderElementWrapperStyle(element)\" [class]=\"getStyleWithoutClasses(\r\n element?.wrapperStyle\r\n ).classes\">\r\n <ng-container\r\n [ngSwitch]=\"element.scope?.reference && itemInfo.propertySchema[getScope(element.scope?.reference)] ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\" [class]=\"element.option?.visible ? 'card-field-wrapper' : 'hidden'\">\r\n\r\n <!-- LABEL -->\r\n <span *ngIf=\"element.label?.caption\" [style]=\"getStyleWithoutClasses(element.label?.style).style\"\r\n [class]=\"element.label?.style?.classes?.[0]\">\r\n {{ element.label.caption }}\r\n </span>\r\n </div>\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"mb-3\">\r\n <span *ngIf=\"element.option.protected\" [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">\r\n <vl-string [formField]=\"element\" [modalItemInfo]=\"itemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!element.option.protected\"\r\n [class]=\"element?.layout == 'horizontal' ? 'horizontal-layout' : ''\"\r\n [ngClass]=\"element?.style?.classes[0]\" [style]=\"getStyleWithoutClasses(element?.style).style\">\r\n <label [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">{{ element.label?.value\r\n ?\r\n element.label?.value : element.label?.caption ?\r\n element.label?.caption :\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <p-datepicker (ngModelChange)=\"dateChangeEvent(element, $event)\" [showIcon]=\"true\" type=\"number\"\r\n inputmode=\"numeric\"\r\n [dateFormat]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].format : 'yy-mm-dd'\"\r\n [(ngModel)]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].value\"\r\n (onFocus)=\"forceNumericKeyboard($event)\" (onInput)=\"onDateTyping($event)\"\r\n [class]=\"element?.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(element?.scope?.style).style\">\r\n </p-datepicker>\r\n </div>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"element.option?.visible ? 'row' : 'hidden'\"\r\n (click)=\"invokeOnCardHeader(element)\">\r\n <button nz-button type=\"button\" [matTooltip]=\"element?.option?.tooltip || ''\"\r\n [matTooltipTouchGestures]=\"'auto'\" [ngStyle]=\"getStyleWithoutClasses(element.style).style\"\r\n [class]=\"element.option.protected ? 'disabled-button' : getStyleWithoutClasses(element.style).classes\">\r\n <ng-container *ngIf=\"!element.caption; else headerTextContent\">\r\n <i nz-icon [nzType]=\"element.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #headerTextContent>{{ element.caption }}</ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"card-responsive-grid\" [ngStyle]=\"getCardContainerStyle()\" [class]=\"getStyleWithoutClasses(\r\n itemInfo?.layoutSchema?.style\r\n ).classes\">\r\n <div *ngFor=\"let record of displayedRecords; let k = index\" class=\"card-grid-item\">\r\n <div [ngStyle]=\"getSingleCardStyle()\"\r\n [class]=\"getStyleWithoutClasses(itemInfo?.layoutSchema?.stylePerCard).classes\">\r\n <div *ngFor=\"let layout of itemInfo?.layoutSchema?.cards || []\" class=\"card-layout-item\" [ngStyle]=\"\r\n layout?.type === 'HorizontalLayout'\r\n ? {}\r\n : getStyleWithoutClasses(layout?.style).style\r\n \" [class]=\"\r\n layout?.type === 'HorizontalLayout'\r\n ? ''\r\n : getStyleWithoutClasses(layout?.style).classes\r\n \">\r\n <ng-container\r\n [ngSwitch]=\"layout?.scope?.reference && itemInfo.propertySchema[getScope(layout.scope?.reference)] ? itemInfo.propertySchema[getScope(layout.scope?.reference)][layout.scope?.reference.split('/').pop()]?.type : layout?.type == 'HorizontalLayout' ? 'HorizontalLayout' : 'default'\">\r\n <!-- Image Control -->\r\n <div *ngSwitchCase=\"'image'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <img [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\"\r\n [src]=\"layout?.option?.src ? layout?.option?.src : record[layout.scope?.reference.split('/').pop()]\"\r\n alt=\"{{ layout.label ? layout.label : getProperty(layout.scope?.reference).productSchema.caption }}\"\r\n (click)=\"showImageDetails(layout.option, record)\" />\r\n </div>\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(layout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(layout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(layout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [ngStyle]=\"getStyleWithoutClasses(layout?.scope?.style).style\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()] ??\r\n itemInfo.propertySchema[getScope(layout.scope?.reference)]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ??\r\n '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- Date Control -->\r\n <div *ngSwitchCase=\"'date'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n <!-- LABEL -->\r\n <span *ngIf=\"layout?.label?.caption\" [class]=\"layout.label?.style?.classes?.[0]\">\r\n {{ layout.label.caption }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()]\r\n ?? itemInfo.propertySchema[\r\n getScope(layout.scope?.reference)\r\n ]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ?? '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- Time Control -->\r\n <div *ngSwitchCase=\"'time'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span *ngIf=\"layout?.label?.caption\" [class]=\"layout.label?.style?.classes?.[0]\">\r\n {{ layout.label.caption }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()]\r\n ?? itemInfo.propertySchema[\r\n getScope(layout.scope?.reference)\r\n ]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ?? '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- number Control -->\r\n <div *ngSwitchCase=\"'number'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <h3 *ngIf=\"itemInfo.propertySchema[getScope(layout.scope?.reference)] && itemInfo.propertySchema[getScope(layout.scope?.reference)][layout.scope?.reference.split('/').pop()]?.format.currency\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n {{ record[layout.scope?.reference.split('/').pop()] | currency: layout.option?.currency\r\n ?\r\n layout.option.currency\r\n :\r\n 'USD' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <button [style]=\"getStyleWithoutClasses(layout?.style).style\"\r\n [class]=\"layout.option.protected ? 'disabled-button' : getStyleWithoutClasses(layout?.style).classes\"\r\n (click)=\"\r\n invokeButtonClick(\r\n layout,\r\n record,\r\n getRecordIndex(record)\r\n )\r\n\">\r\n <ng-container *ngIf=\"!layout.caption; else textContent\">\r\n <i nz-icon [nzType]=\"layout.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #textContent>\r\n {{ layout.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n\r\n <!-- HorizontalLayout Control -->\r\n <div *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div class=\"card-horizontal-layout\" [class]=\"getStyleWithoutClasses(\r\n layout?.style\r\n ).classes\" [ngStyle]=\"getHorizontalLayoutStyle(layout)\">\r\n <ng-container *ngFor=\"let innerLayout of layout.elements\">\r\n <ng-container\r\n [ngSwitch]=\"innerLayout.scope?.reference && itemInfo.propertySchema[getScope(innerLayout.scope?.reference)] ? itemInfo.propertySchema[getScope(innerLayout.scope?.reference)][innerLayout.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n <!-- Image Control -->\r\n <div *ngSwitchCase=\"'image'\"\r\n [class]=\"innerLayout.option?.visible ? 'row' : 'hidden'\">\r\n <img [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n [src]=\"innerLayout?.option?.src ? innerLayout?.option?.src : record[innerLayout.scope?.reference.split('/').pop()]\"\r\n alt=\"{{ innerLayout.label ? innerLayout.label : getProperty(innerLayout.scope?.reference).productSchema.caption }}\"\r\n (click)=\"showImageDetails(innerLayout.option, record)\" />\r\n </div>\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n\r\n <!-- DATE FORMAT -->\r\n <ng-container\r\n *ngIf=\"innerLayout.option?.dateFormat; else checkInnerTime\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option.dateFormat) : '--' }}\r\n </ng-container>\r\n\r\n <!-- TIME FORMAT -->\r\n <ng-template #checkInnerTime>\r\n <ng-container\r\n *ngIf=\"innerLayout.option?.timeFormat; else normalInnerValue\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] |\r\n date: innerLayout.option.timeFormat) : '--' }}\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- NORMAL STRING -->\r\n <ng-template #normalInnerValue>\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ??\r\n '--' }}\r\n </ng-template>\r\n </h3>\r\n </div>\r\n\r\n <!-- number Control -->\r\n <div *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n <h3 *ngIf=\"itemInfo.propertySchema[getScope(innerLayout.scope?.reference)] && itemInfo.propertySchema[getScope(innerLayout.scope?.reference)][innerLayout.scope?.reference.split('/').pop()]?.format?.currency\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\">\r\n {{ record[innerLayout.scope?.reference.split('/').pop()] | currency:\r\n innerLayout.option?.currency ? innerLayout.option.currency : 'USD'\r\n }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Date Control -->\r\n <div *ngSwitchCase=\"'date'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option?.dateFormat ? innerLayout.option?.dateFormat :\r\n itemInfo.propertySchema[getScope(innerLayout.scope?.reference)]?.[innerLayout.scope?.reference.split('/').pop()]?.format\r\n || 'yyyy-MM-dd') : '--' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Time Control -->\r\n <div *ngSwitchCase=\"'time'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option?.timeFormat ? innerLayout.option?.timeFormat\r\n :itemInfo.propertySchema[getScope(innerLayout.scope?.reference)]?.[innerLayout.scope?.reference.split('/').pop()]?.format\r\n || 'HH:mm') : '--' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button nz-button [matTooltip]=\"getHorizontalLayoutTooltip(innerLayout)\"\r\n [matTooltipTouchGestures]=\"'auto'\"\r\n [style]=\"getStyleWithoutClasses(innerLayout?.style).style\"\r\n [class]=\"innerLayout.option?.visible ? innerLayout.option.protected ? 'disabled-button' : getStyleWithoutClasses(innerLayout?.style).classes : 'hidden'\"\r\n (click)=\"\r\n invokeButtonClick(\r\n innerLayout,\r\n record,\r\n getRecordIndex(record)\r\n )\r\n\">\r\n <span class=\"schema-btn-content\">\r\n <i *ngIf=\"showButtonIcon(innerLayout)\" nz-icon\r\n [nzType]=\"innerLayout.icon\" nzTheme=\"outline\">\r\n </i>\r\n\r\n <span *ngIf=\"showButtonCaption(innerLayout)\">\r\n {{ innerLayout.caption }}\r\n </span>\r\n\r\n <span *ngIf=\"\r\n !showButtonIcon(innerLayout) &&\r\n !showButtonCaption(innerLayout)\r\n \">\r\n Button\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"itemInfo?.footer?.elements && itemInfo?.data && itemInfo?.data.length\"\r\n [class]=\"getStyleWithoutClasses(itemInfo?.footer?.style).classes\">\r\n <span *ngFor=\"let element of itemInfo.footer?.elements; let c = index\">\r\n <ng-container\r\n [ngSwitch]=\"element.scope?.reference && itemInfo.propertySchema[getScope(element.scope?.reference)] ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"element.option.protected\" [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">\r\n <h5>{{\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n </h5>\r\n </span>\r\n <div *ngIf=\"!element.option.protected\">\r\n <div [class]=\"element?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">{{ element.label?.value\r\n ?\r\n element.label?.value : element.label?.caption ?\r\n element.label?.caption :\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n <nz-date-picker [required]=\"element.option.required\" [name]=\"element.scope?.reference\"\r\n [nzDisabled]=\"element?.option?.disabled\"\r\n (ngModelChange)=\"dateChangeEvent(element, $event)\"\r\n [nzFormat]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format : 'yyyy-MM-dd'\"\r\n [(ngModel)]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].value\"\r\n [style]=\"getStyleWithoutClasses(element?.style).style\"></nz-date-picker>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"element.option?.visible ? 'row' : 'hidden'\"\r\n (click)=\"invokeOnCardFooter(element)\">\r\n <button nz-button [style]=\"getStyleWithoutClasses(element.style).style\"\r\n [class]=\"element.option.protected ? 'disabled-button' : getStyleWithoutClasses(element.style).classes\">\r\n <ng-container *ngIf=\"!element.caption; else textContent\">\r\n <i nz-icon [nzType]=\"element.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #textContent>\r\n {{ element.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <!-- bottom pagination on card -->\r\n <div *ngIf=\"\r\n itemInfo?.data.length && \r\n itemInfo?.layoutSchema?.pagination?.visible &&\r\n !itemInfo?.layoutSchema?.pagination?.top &&\r\n !scrollPagination\r\n \" class=\"card-pagination-wrapper\">\r\n <vl-pagination [itemInfo]=\"itemInfo\" [selectedLanguageInfo]=\"selectedLanguageInfo\" [pageSize]=\"pageSize\"\r\n [currentPage]=\"currentPage\" [pages]=\"pages\" (pageSizeChange)=\"invokeOnPageSizeChange($event)\"\r\n (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n </div>\r\n\r\n\r\n @if (scrollPagination) {\r\n <div #scrollPaginationSentinel class=\"scroll-pagination-sentinel\" aria-hidden=\"true\">\r\n </div>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzSelectModule],\r\n selector: 'vl-form',\r\n templateUrl: './form.component.html',\r\n styleUrl: './form.component.css',\r\n})\r\nexport class FormComponent implements OnInit, OnChanges, AfterViewInit {\r\n customEmailPattern = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\r\n\r\n showPassword = false;\r\n formCopy: any = {};\r\n\r\n @Input() errorMessages: any = {};\r\n @Input() creditCardError: any = {};\r\n @Input() form: any = {};\r\n @Input() selectedLanguageInfo: any = {};\r\n\r\n @Output() formButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() checkBoxChangeEvent: EventEmitter<any> = new EventEmitter();\r\n\r\n ngOnInit(): void { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['form'] && this.form) {\r\n this.formCopy = this.safeClone(this.form);\r\n this.setValidations();\r\n }\r\n\r\n if (\r\n (changes['selectedLanguageInfo'] || this.selectedLanguageInfo) &&\r\n this.selectedLanguageInfo?.selectedLanguage\r\n ) {\r\n this.applySelectedLanguage();\r\n this.setValidations();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.setValidations();\r\n });\r\n }\r\n\r\n private safeClone(value: any): any {\r\n try {\r\n return JSON.parse(JSON.stringify(value || {}));\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n private applySelectedLanguage(): void {\r\n if (this.selectedLanguageInfo?.errorMessages) {\r\n this.errorMessages = this.selectedLanguageInfo.errorMessages;\r\n }\r\n\r\n if (!this.formCopy || !this.form) {\r\n return;\r\n }\r\n\r\n const selectedLanguage = this.selectedLanguageInfo.selectedLanguage;\r\n\r\n this.form.propertySchema = this.formCopy.propertySchema\r\n ? this.safeClone(this.formCopy.propertySchema)\r\n : {};\r\n\r\n this.form.propertySchema = this.translateSchema(\r\n this.form.propertySchema,\r\n selectedLanguage\r\n );\r\n\r\n if (this.formCopy?.layoutSchema?.formSections?.length) {\r\n this.formCopy.layoutSchema.formSections.forEach(\r\n (formSection: any, sectionIndex: number) => {\r\n if (\r\n formSection?.label?.caption &&\r\n selectedLanguage[formSection.label.caption]\r\n ) {\r\n this.form.layoutSchema.formSections[sectionIndex].label.caption =\r\n selectedLanguage[formSection.label.caption];\r\n }\r\n\r\n if (formSection?.formFields?.length) {\r\n formSection.formFields.forEach(\r\n (formField: any, fieldIndex: number) => {\r\n if (\r\n formField?.label?.caption &&\r\n selectedLanguage[formField.label.caption]\r\n ) {\r\n this.form.layoutSchema.formSections[sectionIndex].formFields[\r\n fieldIndex\r\n ].label.caption = selectedLanguage[formField.label.caption];\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n translateSchema(schema: any, selectedLanguage: any): any {\r\n if (!schema || typeof schema !== 'object' || !selectedLanguage) {\r\n return schema;\r\n }\r\n\r\n Object.keys(schema).forEach((key) => {\r\n const value = schema[key];\r\n\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n this.translateSchema(value, selectedLanguage);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach((item) => {\r\n if (item && typeof item === 'object') {\r\n this.translateSchema(item, selectedLanguage);\r\n }\r\n });\r\n }\r\n\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n typeof value.caption === 'string' &&\r\n value.caption.trim()\r\n ) {\r\n const original = value.caption.trim();\r\n\r\n if (selectedLanguage[original]) {\r\n value.caption = selectedLanguage[original];\r\n }\r\n }\r\n\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n typeof value.placeholder === 'string' &&\r\n value.placeholder.trim()\r\n ) {\r\n const original = value.placeholder.trim();\r\n\r\n if (selectedLanguage[original]) {\r\n value.placeholder = selectedLanguage[original];\r\n }\r\n }\r\n });\r\n\r\n return schema;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any): { classes: string; style: any } {\r\n if (!styleObject || typeof styleObject !== 'object') {\r\n return { classes: '', style: {} };\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n\r\n return {\r\n classes: Array.isArray(classes) ? classes.join(' ') : classes || '',\r\n style: styleWithoutClasses || {},\r\n };\r\n }\r\n\r\n getSectionBodyStyle(formSection: any): any {\r\n const layout = formSection?.layout || {};\r\n const schemaStyle = this.getStyleWithoutClasses(formSection?.style).style;\r\n\r\n return {\r\n display: schemaStyle?.display || 'grid',\r\n gridTemplateColumns:\r\n schemaStyle?.gridTemplateColumns ||\r\n `repeat(${layout?.desktopColumns || 12}, minmax(0, 1fr))`,\r\n gap: schemaStyle?.gap || layout?.gap || '10px',\r\n alignItems: schemaStyle?.alignItems || 'start',\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n ...schemaStyle,\r\n };\r\n }\r\n\r\n getFieldWrapperStyle(formField: any): any {\r\n const schemaStyle = this.getStyleWithoutClasses(formField?.style).style;\r\n\r\n return {\r\n minWidth: 0,\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n ...schemaStyle,\r\n };\r\n }\r\n\r\n getFieldInnerLayoutStyle(formField: any): any {\r\n if (formField?.layout === 'horizontal') {\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: 'minmax(110px, 30%) 1fr',\r\n alignItems: 'center',\r\n gap: '10px',\r\n };\r\n }\r\n\r\n return {\r\n display: 'block',\r\n };\r\n }\r\n\r\n getScope(scope: any): string {\r\n if (!scope || typeof scope !== 'string') {\r\n return '';\r\n }\r\n\r\n const start = scope.indexOf('#/') + 2;\r\n const end = scope.indexOf('/', start);\r\n\r\n if (start >= 2 && end > start) {\r\n return scope.substring(start, end);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n invokeFormBtnClick(option: any, propertySchema: any): void {\r\n this.formButtonClick.emit({\r\n option,\r\n propertySchema,\r\n });\r\n }\r\n\r\n setformData(): void {\r\n this.checkBoxChangeEvent.emit(this.form?.propertySchema);\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, field: any): string {\r\n let error = '';\r\n let fieldName = '';\r\n\r\n if (field?.errors?.required) {\r\n error = errorMessages?.required || '';\r\n } else if (field?.errors?.email || field?.errors?.pattern) {\r\n error = errorMessages?.pattern || '';\r\n } else if (field?.errors?.minlength) {\r\n error = errorMessages?.minlength || '';\r\n } else if (field?.errors?.maxlength) {\r\n error = errorMessages?.maxlength || '';\r\n }\r\n\r\n if (formField?.label?.value) {\r\n fieldName = formField.label.value;\r\n } else {\r\n const scope = this.getScope(formField?.scope?.reference);\r\n const key = formField?.scope?.reference?.split('/').pop();\r\n const propertySchema = this.form?.propertySchema?.[scope]?.[key];\r\n\r\n fieldName = propertySchema?.caption || propertySchema?.placeholder || '';\r\n }\r\n\r\n if (error && error.toString().includes('{{requiredLength}}')) {\r\n error = error.replace(\r\n /{{\\s*requiredLength\\s*}}/g,\r\n formField?.minlength?.toString() || ''\r\n );\r\n }\r\n\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n setValidations(): void {\r\n if (!this.form?.layoutSchema?.formSections?.length) {\r\n return;\r\n }\r\n\r\n this.form.layoutSchema.formSections.forEach((formSection: any) => {\r\n if (!formSection?.formFields?.length) {\r\n return;\r\n }\r\n\r\n formSection.formFields.forEach((formField: any) => {\r\n const reference = formField?.scope?.reference;\r\n\r\n if (!reference || !this.form?.propertySchema) {\r\n return;\r\n }\r\n\r\n const scope = this.getScope(reference);\r\n const key = reference.split('/').pop();\r\n\r\n const property = this.form.propertySchema?.[scope]?.[key];\r\n\r\n if (!property?.validation?.length) {\r\n return;\r\n }\r\n\r\n property.validation.forEach((validation: any) => {\r\n if (validation.required) {\r\n formField.required = true;\r\n }\r\n\r\n if (validation.email) {\r\n formField.email = true;\r\n }\r\n\r\n if (validation.minlength) {\r\n formField.minlength = validation.minlength;\r\n }\r\n\r\n if (validation.maxlength) {\r\n formField.maxlength = validation.maxlength;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}","<div class=\"form-renderer\" [ngClass]=\"getStyleWithoutClasses(form?.layoutSchema?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(form?.layoutSchema?.style)?.style\">\r\n <form *ngIf=\"form?.layoutSchema?.formSections?.length > 0\">\r\n <div *ngFor=\"let formSection of form?.layoutSchema?.formSections; let i = index\" class=\"section-card\">\r\n <div *ngIf=\"formSection?.label?.caption\" class=\"section-header\">\r\n <div class=\"section-title\" [ngClass]=\"getStyleWithoutClasses(formSection?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formSection?.label?.style)?.style\">\r\n {{ formSection.label.caption }}\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"formSection?.formFields?.length > 0\" class=\"section-body\"\r\n [ngClass]=\"getStyleWithoutClasses(formSection?.style)?.classes\" [ngStyle]=\"getSectionBodyStyle(formSection)\">\r\n <div *ngFor=\"let formField of formSection.formFields\" class=\"field-row\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.style)?.classes\" [ngStyle]=\"getFieldWrapperStyle(formField)\">\r\n <div [ngSwitch]=\"\r\n formField?.scope?.reference &&\r\n form?.propertySchema?.[getScope(formField.scope?.reference)]\r\n ? form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.type\r\n : 'default'\r\n \">\r\n <!-- image control -->\r\n <div *ngSwitchCase=\"'image'\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <img [src]=\"formField?.option?.src\" [alt]=\"'img'\" />\r\n </div>\r\n\r\n <!-- credit card control -->\r\n <div *ngSwitchCase=\"'carditCard'\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <div id=\"card-element\"></div>\r\n <div id=\"card-errors\" [class]=\"creditCardError?.textContent !== '' ? 'text-red-400 m-0' : ''\"></div>\r\n </div>\r\n\r\n <!-- string control -->\r\n <span *ngSwitchCase=\"'string'\" class=\"form-group\">\r\n <span *ngIf=\"formField?.option?.protected\">\r\n <h5 style=\"display: flex; justify-content: space-between\">\r\n <span [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </span>\r\n\r\n <span>\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.value\r\n }}\r\n </span>\r\n </h5>\r\n </span>\r\n\r\n <span *ngIf=\"!formField?.option?.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n formField?.label?.value\r\n ? formField.label.value\r\n : formField?.label?.caption\r\n ? formField.label.caption\r\n : form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <div [ngStyle]=\"\r\n formField?.option?.password\r\n ? {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n : {}\r\n \">\r\n <input [type]=\"\r\n formField?.option?.password\r\n ? !showPassword\r\n ? 'password'\r\n : 'text'\r\n : 'text'\r\n \" #inputField=\"ngModel\" [required]=\"formField?.required\" [attr.inputmode]=\"\r\n formField?.option?.email\r\n ? 'email'\r\n : formField?.option?.password\r\n ? 'numeric'\r\n : 'text'\r\n \" [pattern]=\"formField?.email ? customEmailPattern : ''\" [email]=\"formField?.email\"\r\n [minlength]=\"formField?.minlength\" [maxlength]=\"formField?.maxlength\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" [placeholder]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.placeholder\r\n \" />\r\n\r\n <i *ngIf=\"formField?.option?.password\" class=\"fa\"\r\n [ngClass]=\"showPassword ? 'fa-eye' : 'fa-eye-slash'\" (click)=\"togglePasswordVisibility()\"\r\n style=\"position: absolute; right: 10px; cursor: pointer\"></i>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.validation?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.validation?.style)?.style\">\r\n <p [class]=\"\r\n formField?.layout === 'horizontal'\r\n ? 'text-red-400 m-0 horizontal-error'\r\n : 'text-red-400 m-0'\r\n \" *ngIf=\"inputField?.errors\">\r\n {{ setErroMessage(formField, errorMessages, inputField) }}\r\n </p>\r\n </div>\r\n </span>\r\n </span>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group\">\r\n <span *ngIf=\"formField?.option?.protected\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n <h5>\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.value\r\n | currency\r\n : formField?.option?.currency\r\n : true\r\n : formField?.option?.decimalPoint\r\n }}\r\n </h5>\r\n </span>\r\n\r\n <span *ngIf=\"!formField?.option?.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n formField?.label?.value\r\n ? formField.label.value\r\n : form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <input type=\"number\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" [placeholder]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.placeholder\r\n \" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- checkbox control -->\r\n <div *ngSwitchCase=\"'checkbox'\" class=\"form-group\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <span *ngIf=\"formField?.option?.postfixCaption\">\r\n <label class=\"form-check-label\">\r\n <input type=\"checkbox\" class=\"form-check-input mr-2\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" (ngModelChange)=\"setformData()\" />\r\n\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n </span>\r\n\r\n <div *ngIf=\"!formField?.option?.postfixCaption\" [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label class=\"form-check-label\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n\r\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" (ngModelChange)=\"setformData()\" />\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <!-- dropdown control -->\r\n <div *ngSwitchCase=\"'dropdown'\" class=\"form-group\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <span *ngIf=\"formField?.option?.postfixCaption\">\r\n <select id=\"dynamic-dropdown\" #dropdownField=\"ngModel\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \">\r\n <option *ngFor=\"\r\n let item of form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.data\r\n \" [value]=\"item[formField?.option?.optionValue]\">\r\n {{ item[formField?.option?.optionLabel] }}\r\n </option>\r\n </select>\r\n\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n </span>\r\n\r\n <div *ngIf=\"!formField?.option?.postfixCaption\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <nz-select nzShowSearch nzAllowClear nzPlaceHolder=\"Select\" #dropdownField=\"ngModel\"\r\n [required]=\"formField?.required\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\"\r\n [name]=\"formField.scope?.reference\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \">\r\n <nz-option *ngFor=\"\r\n let item of form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.data\r\n \" [nzLabel]=\"item[formField?.option?.optionLabel]\"\r\n [nzValue]=\"item[formField?.option?.optionValue]\"></nz-option>\r\n </nz-select>\r\n </div>\r\n\r\n <div *ngIf=\"dropdownField?.touched && dropdownField?.invalid\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.validation?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.validation?.style)?.style\">\r\n <p [class]=\"\r\n formField?.layout === 'horizontal'\r\n ? 'text-red-400 m-0 horizontal-error'\r\n : 'text-red-400 m-0'\r\n \" *ngIf=\"dropdownField?.errors\">\r\n {{ setErroMessage(formField, errorMessages, dropdownField) }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- button/default control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"submit\" [ngClass]=\"getStyleWithoutClasses(formField?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.style)?.style\"\r\n (click)=\"invokeFormBtnClick(formField?.option, form.propertySchema)\">\r\n {{ formField?.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { AfterViewInit, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { OktaAuthStateService } from '@okta/okta-angular';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzTableModule } from 'ng-zorro-antd/table';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { PaginationComponent } from '../pagination/pagination.component';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzTableModule,\r\n NzIconModule,\r\n ButtonModule,\r\n PaginationComponent\r\n ],\r\n selector: 'vl-grid',\r\n templateUrl: './grid.component.html',\r\n styleUrl: './grid.component.css'\r\n})\r\nexport class GridComponent implements AfterViewInit {\r\n isLogined: boolean = false;\r\n tableitemInfoCopy: any = {};\r\n @Input() errorMessages: any = {};\r\n @Input() environment: any;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() tableitemInfo: any = {};\r\n @Input() form: any = {};\r\n @Input() isTableDataLoad: boolean = false;\r\n @Input() currenTableOptions: any = {};\r\n @Input() projectSeleted: any = '';\r\n @Input() pageSize: number = 5;\r\n @Input() currentPage: number = 0;\r\n @Input() pages: number[] = [];\r\n @Input() userInfo: any;\r\n @Output() onPageChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageSizeChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onGridScroll: EventEmitter<any> = new EventEmitter();\r\n @Output() showGridLink: EventEmitter<any> = new EventEmitter();\r\n @Output() gridButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridIncreamentClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridDecreamentClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridImgClick: EventEmitter<any> = new EventEmitter();\r\n\r\n constructor(private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private notificationService: NotificationService,\r\n private oktaAuthService: OktaAuthStateService,) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.authenticating();\r\n setTimeout(() => {\r\n if (this.environment && this.environment?.login && this.environment?.login?.type == \"oktaAuth\") {\r\n this.oktaAuthService.authState$.subscribe(\r\n (result) => {\r\n if (result.isAuthenticated) {\r\n this.isLogined = true;\r\n }\r\n }\r\n );\r\n }\r\n }, 500);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n setTimeout(() => {\r\n if (changes['tableitemInfo'] && this.tableitemInfo) {\r\n console.log('this.tableitemInfo: ', this.tableitemInfo);\r\n console.log('this.selectedLanguageInfo?: ', this.selectedLanguageInfo);\r\n this.tableitemInfoCopy = JSON.parse(JSON.stringify(this.tableitemInfo));\r\n }\r\n if (changes['SelectedLanguage'] || this.selectedLanguageInfo?.selectedLanguage) {\r\n if (this.tableitemInfoCopy?.layoutSchema && this.tableitemInfoCopy.layoutSchema?.elements?.length) {\r\n this.tableitemInfo.propertySchema = JSON.parse(JSON.stringify(this.tableitemInfoCopy.propertySchema));\r\n this.tableitemInfo.propertySchema = this.translateSchema(this.tableitemInfo.propertySchema, this.selectedLanguageInfo.selectedLanguage);\r\n if (this.tableitemInfoCopy?.footer) {\r\n this.tableitemInfo.footer = JSON.parse(JSON.stringify(this.tableitemInfoCopy.footer));\r\n this.tableitemInfo.footer = this.translateSchema(this.tableitemInfo.footer, this.selectedLanguageInfo.selectedLanguage);\r\n }\r\n this.tableitemInfoCopy.layoutSchema.elements.forEach((column: any, index: any) => {\r\n if (column.label && column.label.caption && this.selectedLanguageInfo.selectedLanguage[column.label.caption]) {\r\n this.tableitemInfo.layoutSchema.elements[index].label.caption = this.selectedLanguageInfo.selectedLanguage[column.label.caption];\r\n }\r\n });\r\n }\r\n }\r\n }, 500);\r\n }\r\n\r\n translateSchema(schema: any, SelectedLanguage: any): any {\r\n if (schema && typeof schema === 'object') {\r\n for (const key of Object.keys(schema)) {\r\n const val = schema[key];\r\n if (val && typeof val === 'object') {\r\n this.translateSchema(val, SelectedLanguage);\r\n }\r\n if (val && val.caption !== undefined && typeof val.caption === 'string') {\r\n const original = val.caption.trim();\r\n if (original && SelectedLanguage[original]) {\r\n val.caption = SelectedLanguage[original];\r\n }\r\n }\r\n if (val && val.value !== undefined && typeof val.value === 'string' && !val.value.includes(\"{{\")) {\r\n const originalVal = val.value.trim();\r\n if (originalVal && SelectedLanguage[originalVal]) {\r\n val.value = SelectedLanguage[originalVal];\r\n }\r\n }\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n onScrollEvent(event: any) {\r\n this.onGridScroll.emit(event);\r\n }\r\n\r\n showLinkDetails(option: any, data: any) {\r\n this.showGridLink.emit({ option: option, data: data });\r\n }\r\n\r\n invokeGridBtnClick(option: any, propertySchema: any) {\r\n this.gridButtonClick.emit({ option: option, propertySchema: propertySchema });\r\n }\r\n\r\n upsertAction(option: any, data: any) {\r\n let url = option?.data_url;\r\n if (url && url?.includes(\"{{\")) {\r\n const regex = /{{(.*?)}}/g;\r\n const matches = [...url.matchAll(regex)].map(m => m[1]);\r\n if (matches && data && data[matches[0]]) {\r\n option.data_url = url.replace(`{{${matches[0]}}}`, data[matches[0]])\r\n }\r\n }\r\n let baseUrl = this.environment?.apiUrl + option.data_url;\r\n this.requestService.dynamicCall(option.method, {}, baseUrl, option?.passToken, this.projectSeleted, this.userInfo).subscribe((res: any) => {\r\n console.log('res: ', res);\r\n if (option?.reload) {\r\n window.location.reload();\r\n } else if (option.notifcation) {\r\n if(option.notifcation.success){\r\n this.notificationService.success(option.notifcation.success);\r\n let findObj: any = this.findDynamicKeyAndValue(option);\r\n if(findObj.keyName){\r\n data[findObj.keyName] = \"APPROVED\";\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n setActionColumn(option: any, data: any) {\r\n let showAction: boolean = true;\r\n let findCondiontionalKey: any = this.findDynamicKeyAndValue(option);\r\n if (findCondiontionalKey.keyName) {\r\n showAction = data[findCondiontionalKey.keyName] === findCondiontionalKey.value ? true : false;\r\n }\r\n return showAction;\r\n }\r\n\r\n findDynamicKeyAndValue(object: Record<string, any>) {\r\n const regex = /^\\{\\{(.*?)\\}\\}$/;\r\n for (const key of Object.keys(object)) {\r\n const match = key.match(regex);\r\n if (match) {\r\n return {\r\n keyName: match[1].trim(), \r\n value: object[key] \r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n incrementQuantity(index: any, field: any, option: any) {\r\n this.gridIncreamentClick.emit({ index: index, field: field, option: option });\r\n }\r\n\r\n invokeTableImageClick(column: any, data: any) {\r\n this.gridImgClick.emit({ col: column, data: data });\r\n }\r\n\r\n decrementQuantity(index: any, field: any, option: any) {\r\n this.gridDecreamentClick.emit({ index: index, field: field, option: option });\r\n }\r\n\r\n invokeOnPageSizeChange(pageSize: any) {\r\n this.onPageSizeChange.emit(pageSize);\r\n }\r\n\r\n invokeGoToPage(page: any) {\r\n this.onPageChange.emit(page);\r\n }\r\n\r\n authenticating() {\r\n this.utilityService.getStorage(`${this.projectSeleted}Logined`).then((logined: any) => {\r\n if (logined == \"true\") {\r\n this.isLogined = true;\r\n }\r\n })\r\n }\r\n}\r\n","<div *ngIf=\"!tableitemInfo.data?.length\" class=\"alert alert-warning col-md-12\" role=\"alert\">\r\n {{ tableitemInfo.layoutSchema?.noRecordMessage}}\r\n</div>\r\n<div *ngIf=\"tableitemInfo.data?.length\" class=\"reservation-container pt-5 px-3\">\r\n <nz-table #basicTable [nzData]=\"tableitemInfo.data\" [nzBordered]=\"true\"\r\n [nzFrontPagination]=\"currenTableOptions?.pagination?.tabs\"\r\n [style]=\"getStyleWithoutClasses(currenTableOptions?.style).style\" (scroll)=\"onScrollEvent($event)\"\r\n [nzLoading]=\"isTableDataLoad\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableitemInfo.layoutSchema.elements\">{{ column?.label?.caption }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of tableitemInfo.data; let i = index\">\r\n <td *ngFor=\"let col of tableitemInfo.layoutSchema.elements\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\">\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'string'\"\r\n [class]=\"getStyleWithoutClasses(col?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\">\r\n <span *ngIf=\"col.option.protected\">\r\n <span *ngIf=\"col.option?.link\" (click)=\"showLinkDetails(col.option, data)\">\r\n {{data[col.scope?.reference.split('/').pop()]}}\r\n </span>\r\n <span *ngIf=\"!col.option?.link\">\r\n <ng-container *ngIf=\"col?.option?.dateFormat; else string\">\r\n {{ data[col.scope?.reference.split('/').pop()] | date:'yyyy-MM-dd' }}\r\n </ng-container>\r\n <ng-template #string>\r\n {{ data[col.scope?.reference.split('/').pop()] }}\r\n </ng-template>\r\n </span>\r\n </span>\r\n <span *ngIf=\"!col.option.protected\">\r\n <input [(ngModel)]=\"data[col.scope?.reference.split('/').pop()]\"\r\n class=\"p-inputtext p-component\" />\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'number'\">\r\n <span *ngIf=\"col.option.protected\">\r\n <span *ngIf=\"col.option?.innerAction?.action == 'multiply'\">\r\n {{\r\n (data[col.option?.innerAction?.from] * data[col.option?.innerAction?.to])\r\n | number:'1.2-2'\r\n }}\r\n </span>\r\n <span *ngIf=\"!col.option?.innerAction\">\r\n {{data[col.scope?.reference.split('/').pop()] | currency:\r\n tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.currency\r\n :true }}\r\n </span>\r\n </span>\r\n <span *ngIf=\"!col.option.protected\">\r\n <input [(ngModel)]=\"data[col.scope?.reference.split('/').pop()]\" type=\"number\"\r\n class=\"p-inputtext p-component\" />\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'image'\">\r\n <img *ngIf=\"data[col.scope?.reference.split('/').pop()]\"\r\n [src]=\"data[col.scope?.reference.split('/').pop()]\" alt=\"Image\"\r\n (click)=\"invokeTableImageClick(col, data)\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\" />\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col?.scope?.reference\">\r\n <span *ngIf=\"col.option?.actionColumn\">\r\n <span nz-icon *ngIf=\"setActionColumn(col.option?.save, data)\" [nzType]=\"col.option?.save?.icon\" [nzTheme]=\"'twotone'\"\r\n [style]=\"col.option?.save?.style\" [nzTwotoneColor]=\"'#52c41a'\"\r\n [class]=\"col.option?.save?.style?.classes[0]\" (click)=\"upsertAction(col.option?.save, data)\">\r\n </span>\r\n <span nz-icon *ngIf=\"setActionColumn(col.option?.delete, data)\" [nzType]=\"col.option?.delete?.icon\" [nzTheme]=\"'twotone'\"\r\n [style]=\"col.option?.delete?.style\" [nzTwotoneColor]=\"'#FF0000'\"\r\n [class]=\"col.option?.delete?.style?.classes[0]\"\r\n (click)=\"upsertAction(col.option?.delete, data)\"></span>\r\n\r\n </span>\r\n <span *ngIf=\"!col.option?.actionColumn\">\r\n <button type=\"submit\" [style]=\"getStyleWithoutClasses(col?.label?.style).style\"\r\n (click)=\"invokeGridBtnClick(col.option, data)\" [class]=\"col?.label?.style?.classes[0]\">\r\n {{ col.label?.caption }}\r\n </button>\r\n </span>\r\n </ng-container>\r\n\r\n <!-- For quantity column, display increment/decrement buttons -->\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'quantity'\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <button pButton icon=\"pi pi-minus\"\r\n (click)=\"decrementQuantity(i,col.scope?.reference.split('/').pop(), col.option)\"\r\n [disabled]=\"data.quantity <= 0\"\r\n style=\"margin-right: 8px; height: 10px; width: 10px;\"></button>\r\n <span>{{ data[col.scope?.reference.split('/').pop()] }}</span>\r\n <button pButton icon=\"pi pi-plus\"\r\n (click)=\"incrementQuantity(i, col.scope?.reference.split('/').pop(), col.option)\"\r\n style=\"margin-left: 8px; height: 10px; width: 10px;\"></button>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n</div>\r\n\r\n<!-- table footer -->\r\n<div *ngIf=\"tableitemInfo?.footer?.formFields && tableitemInfo.data?.length\"\r\n class=\"table-footer flex flex-column align-items-end gap-2 pt-2 mx-4 border-top-1 border-cyan-500\">\r\n <div *ngFor=\"let tableField of tableitemInfo?.footer?.formFields\">\r\n <div\r\n [ngSwitch]=\"tableField?.scope?.reference && tableitemInfo.propertySchema[getScope(tableField.scope?.reference)] && tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()] ?\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- string control -->\r\n <div *ngSwitchCase=\"'string'\" class=\"form-group\">\r\n <span *ngIf=\"tableField.option.protected\">\r\n <h5 style=\"display: flex; justify-content: space-between;\">\r\n <span [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">\r\n {{\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n </span>\r\n <span>\r\n {{\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.value\r\n }}\r\n </span>\r\n </h5>\r\n </span>\r\n <div *ngIf=\"!tableField.option.protected\">\r\n <div [class]=\"tableField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">{{ tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"text\" #inputField=\"ngModel\" [required]=\"tableField.option.required\"\r\n [email]=\"tableField.option.email\" [class]=\"tableField.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(tableField?.scope?.style).style\"\r\n [(ngModel)]=\"tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"tableField.scope?.reference\"\r\n [placeholder]=\"tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(tableField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['required']\">{{tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['email']\">{{(tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group\">\r\n <span *ngIf=\"tableField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">\r\n <h5>{{\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }} {{\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.value\r\n |\r\n currency:tableField.option.currency :true: tableField.option?.decimalPoint}}\r\n </h5>\r\n </span>\r\n <span *ngIf=\"!tableField.option.protected\">\r\n <div [class]=\"tableField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">{{ tableField.label?.value ?\r\n tableField.label?.value :\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"number\" [class]=\"tableField.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(tableField?.scope?.style).style\"\r\n [(ngModel)]=\"form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"tableField.scope?.reference\"\r\n [placeholder]=\"form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- button control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"submit\" [style]=\"getStyleWithoutClasses(tableField.label.style).style\"\r\n (click)=\"invokeGridBtnClick(tableField.option, tableitemInfo.propertySchema)\">\r\n {{ tableField.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- bottom pagination on grid -->\r\n<div\r\n *ngIf=\"tableitemInfo.data?.length && !tableitemInfo?.layoutSchema?.pagination?.top && tableitemInfo?.layoutSchema?.pagination?.bottom\">\r\n <vl-pagination [itemInfo]=\"tableitemInfo\" [pageSize]=\"pageSize\" [currentPage]=\"currentPage\" [pages]=\"pages\"\r\n (pageSizeChange)=\"invokeOnPageSizeChange($event)\" (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n</div>","import { AfterViewInit, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { OktaAuthStateService } from '@okta/okta-angular';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { Couchdb } from '../../services/couchdb';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n NzIconModule\r\n ],\r\n selector: 'vl-header-menu',\r\n templateUrl: './header-menu.component.html',\r\n styleUrl: './header-menu.component.css'\r\n})\r\nexport class HeaderMenuComponent implements AfterViewInit {\r\n isLogined: boolean = false;\r\n\r\n @Input() headerItems: any[] = [];\r\n @Input() headerLayout: any = {};\r\n @Input() environment: any;\r\n @Input() tenantName: any;\r\n @Input() projectSeleted: any;\r\n @Input() cartInfo: any = {\r\n items: [],\r\n totalPrice: 0,\r\n quantity: 0\r\n };\r\n\r\n @Output() buttonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() showTableContent: EventEmitter<any> = new EventEmitter();\r\n @Output() searchItems: EventEmitter<any> = new EventEmitter();\r\n\r\n constructor(\r\n private oktaAuthService: OktaAuthStateService,\r\n private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private couchdbService: Couchdb,\r\n private platform: Platform\r\n ) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['headerItems'] && this.headerItems) {\r\n this.setHeaderItems(this.headerItems).then((updatedHeaderItems: any) => {\r\n this.headerItems = updatedHeaderItems;\r\n });\r\n }\r\n\r\n if (changes['environment'] && this.environment && this.environment?.login && this.environment?.login?.type == \"oktaAuth\") {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n this.utilityService.getLocalStorage(`loginedUser`).then((logined: any) => {\r\n if (logined && logined.token) {\r\n this.requestService.getLoginUser(logined?.token).subscribe(() => {\r\n this.isLogined = true;\r\n });\r\n }\r\n });\r\n }\r\n\r\n this.oktaAuthService.authState$.subscribe((result) => {\r\n if (result.isAuthenticated) {\r\n this.isLogined = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n getStyle(styleObject: any): Record<string, any> {\r\n if (!styleObject || typeof styleObject !== 'object') {\r\n return {};\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return styleWithoutClasses;\r\n }\r\n\r\n isVisible(header: any): boolean {\r\n return header?.option?.visible !== false;\r\n }\r\n\r\n shouldShowDefaultButton(header: any): boolean {\r\n if (!this.isVisible(header)) {\r\n return false;\r\n }\r\n\r\n if (header?.option?.islogin === true) {\r\n return this.isLogined;\r\n }\r\n\r\n if (header?.option?.islogin === false) {\r\n return !this.isLogined;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n invokeSearchedItems(option: any, search: any) {\r\n this.searchItems.emit({ option: option, search: search });\r\n }\r\n\r\n invokeHeaderButtonClick(option: any) {\r\n this.buttonClick.emit(option);\r\n }\r\n\r\n invokeShowtableContent(option: any) {\r\n this.showTableContent.emit(option);\r\n }\r\n\r\n async setHeaderItems(items: any[]): Promise<any[]> {\r\n for (const item of items) {\r\n if (item?.scope?.reference?.includes('logo')) {\r\n const logoUrl = item?.option?.src;\r\n if (logoUrl && this.projectSeleted) {\r\n let projectName = `${this.tenantName}_${this.projectSeleted}`\r\n const image = await this.couchdbService.getFileContentFromCouchDb(\r\n projectName,\r\n `Media/${logoUrl}`\r\n );\r\n item.option.src = this.utilityService.getMediaSrc(image);\r\n }\r\n }\r\n }\r\n return items;\r\n }\r\n}","<header *ngIf=\"headerItems.length > 0\" [ngStyle]=\"getStyle(headerLayout?.style)\">\r\n\r\n <ng-container *ngFor=\"let header of headerItems\"\r\n [ngSwitch]=\"header.scope?.reference ? header.scope?.reference.split('/').pop() : 'default'\">\r\n\r\n <!-- Logo -->\r\n <ng-container *ngSwitchCase=\"'logo'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <img [src]=\"header.option.src\" [alt]=\"header.alt || 'Logo'\"\r\n [ngStyle]=\"getStyle(header?.scope?.style)\" />\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Search -->\r\n <ng-container *ngSwitchCase=\"'searchInput'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <input #search type=\"text\" [placeholder]=\"header.option.placeholder\"\r\n (keyup.enter)=\"invokeSearchedItems(header.option, search)\"\r\n [ngStyle]=\"getStyle(header?.scope?.style)\" />\r\n\r\n <button *ngIf=\"header.option.button !== false\" type=\"button\"\r\n (click)=\"invokeSearchedItems(header.option, search)\" [ngStyle]=\"getStyle(header?.buttonStyle)\">\r\n <ng-container *ngIf=\"!header.caption; else searchTextContent\">\r\n <i nz-icon [nzType]=\"header.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n\r\n <ng-template #searchTextContent>\r\n {{ header.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Cart -->\r\n <ng-container *ngSwitchCase=\"'cart'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\"\r\n (click)=\"invokeShowtableContent(header.option)\">\r\n\r\n <span [ngStyle]=\"getStyle(header?.priceStyle)\">\r\n {{ cartInfo.totalPrice | currency : header.option?.currency ? header.option.currency : 'USD' }}\r\n </span>\r\n\r\n <span [ngStyle]=\"getStyle(header?.quantityStyle)\">\r\n {{ cartInfo.quantity }}\r\n </span>\r\n\r\n <i [class]=\"header.icon\" [ngStyle]=\"getStyle(header?.iconStyle)\">\r\n </i>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Default Button -->\r\n <ng-container *ngSwitchCase=\"'default'\">\r\n <div *ngIf=\"shouldShowDefaultButton(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <button type=\"button\" (click)=\"invokeHeaderButtonClick(header.option)\"\r\n [ngStyle]=\"getStyle(header?.buttonStyle)\">\r\n <ng-container *ngIf=\"!header.label; else buttonTextContent\">\r\n <i nz-icon [nzType]=\"header.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n\r\n <ng-template #buttonTextContent>\r\n {{ header.label }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n</header>","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NetworkLogService {\r\n\r\n private logs: any[] = [];\r\n\r\n addLog(log: any) {\r\n this.logs.unshift(log); // latest first\r\n localStorage.setItem('networkLogs', JSON.stringify(this.logs));\r\n }\r\n\r\n getLogsByDate(date: string): any[] {\r\n return this.logs.filter(l => l.date === date);\r\n }\r\n\r\n getAll(): any[] {\r\n return [...this.logs];\r\n }\r\n\r\n clear() {\r\n this.logs = [];\r\n localStorage.removeItem('networkLogs');\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NetworkLogService } from '../../services/network-log.service';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule\r\n ],\r\n selector: 'vl-logs',\r\n templateUrl: './logs.component.html',\r\n styleUrl: './logs.component.css'\r\n})\r\nexport class LogsComponent {\r\n logs: any[] = [];\r\n expandedRow: number | null = null;\r\n\r\n constructor(private logService: NetworkLogService) {}\r\n\r\n ngOnInit() {\r\n const today = new Date().toISOString().split('T')[0];\r\n this.logs = this.logService.getLogsByDate(today);\r\n console.log('this.logs: ', this.logs);\r\n }\r\n\r\n toggleRow(index: number) {\r\n this.expandedRow = this.expandedRow === index ? null : index;\r\n }\r\n}\r\n","<div class=\"network-log-wrapper\">\r\n\r\n <div class=\"network-log-table\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Time</th>\r\n <th>Method</th>\r\n <th>URL</th>\r\n <th>Status</th>\r\n <th>Duration (ms)</th>\r\n <th>Size (KB)</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let log of logs; let i = index\">\r\n\r\n <!-- MAIN ROW -->\r\n <tr class=\"log-row\" (click)=\"toggleRow(i)\">\r\n <td>{{ i + 1 }}</td>\r\n <td>{{ log.time }}</td>\r\n\r\n <td>\r\n <span class=\"method\" [class.get]=\"log.method === 'GET'\" [class.post]=\"log.method === 'POST'\"\r\n [class.put]=\"log.method === 'PUT'\" [class.delete]=\"log.method === 'DELETE'\">\r\n {{ log.method }}\r\n </span>\r\n </td>\r\n\r\n <td class=\"ellipsis\" [title]=\"log.url\">\r\n {{ log.url }}\r\n </td>\r\n\r\n <td [class.error]=\"log.status >= 400\">\r\n {{ log.status }}\r\n </td>\r\n\r\n <td>{{ log.duration }}</td>\r\n\r\n <td>{{ log.size | number:'1.0-2' }}</td>\r\n </tr>\r\n\r\n <!-- DETAILS ROW -->\r\n <tr *ngIf=\"expandedRow === i\" class=\"details-row\">\r\n <td colspan=\"7\">\r\n <div class=\"details-container\">\r\n\r\n <!-- META -->\r\n <div class=\"detail-block\">\r\n <h4>Meta</h4>\r\n <p><strong>Date:</strong> {{ log.date }}</p>\r\n <p><strong>Type:</strong> {{ log.type }}</p>\r\n </div>\r\n\r\n <!-- REQUEST -->\r\n <div class=\"detail-block\">\r\n <h4>Request</h4>\r\n <p><strong>Headers</strong></p>\r\n <pre>{{ log.requestHeaders | json }}</pre>\r\n\r\n <p><strong>Body</strong></p>\r\n <pre>{{ log.requestBody | json }}</pre>\r\n </div>\r\n\r\n <!-- RESPONSE -->\r\n <div class=\"detail-block\">\r\n <h4>Response</h4>\r\n <pre>{{ log.responseBody | json }}</pre>\r\n </div>\r\n\r\n <!-- PERFORMANCE -->\r\n <div class=\"detail-block\">\r\n <h4>Performance</h4>\r\n <p><strong>Duration:</strong> {{ log.duration }} ms</p>\r\n <p><strong>Size:</strong> {{ log.size | number:'1.0-2' }} KB</p>\r\n </div>\r\n\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-label',\r\n standalone: true,\r\n templateUrl: './label.html',\r\n styleUrl: './label.css',\r\n})\r\nexport class Label {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n\r\n}\r\n","<label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\" [class]=\"formField?.label?.style?.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>","import { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\n@Component({\r\n selector: 'vl-textbox',\r\n standalone: true,\r\n templateUrl: './textbox.html',\r\n styleUrl: './textbox.css',\r\n imports: [FormsModule, InputTextModule]\r\n})\r\nexport class Textbox {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n}\r\n","<input pInputText type=\"text\" #inputField=\"ngModel\" [required]=\"formField.option?.required\"\r\n [email]=\"formField.option?.email\" [disabled]=\"formField?.option?.disabled\"\r\n [readonly]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.readonly\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\" [class]=\"formField?.scope?.style?.classes ? formField?.scope?.style?.classes[0] : ''\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\" />","import { NgIf } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { SelectModule } from 'primeng/select';\r\n\r\n@Component({\r\n selector: 'vl-autocomplete',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n AutoCompleteModule,\r\n SelectModule,\r\n NgIf\r\n ],\r\n templateUrl: './autocomplete.html',\r\n styleUrl: './autocomplete.css',\r\n})\r\nexport class Autocomplete {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n @Input() matchData: any;\r\n @Input() selectedLanguageInfo: any;\r\n @Input() errorMessages: any;\r\n @Output() autocompChange: EventEmitter<any> = new EventEmitter();\r\n @Output() autocompFocusOut: EventEmitter<any> = new EventEmitter();\r\n\r\n autocompChangeEvent(event: any, formField: any) {\r\n this.autocompChange.emit({ event: event, formField: formField });\r\n }\r\n\r\n autocompFocusOutEvent(event: any, formField: any) {\r\n this.autocompFocusOut.emit({ event: event, formField: formField });\r\n }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, errorType: any) {\r\n let error: any = \"\";\r\n let fieldName: any = formField.label?.value ? formField.label?.value : formField.label?.caption ? formField.label?.caption : this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption;\r\n if (errorType == \"required\") {\r\n error = this.selectedLanguageInfo?.errorMessages?.required ? this.selectedLanguageInfo?.errorMessages.required : errorMessages.required\r\n }\r\n if (error && error.toString().includes(\"{{requiredLength}}\")) {\r\n error = error.replace(/{{\\s*requiredLength\\s*}}/g, formField?.minlength.toString());\r\n }\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n}\r\n","<p-autoComplete #autocompleteField=\"ngModel\" [required]=\"formField.option.required\" [name]=\"formField.scope?.reference\"\r\n inputmode\r\n styleClass=\"custom-autocomplete\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\" [class]=\"formField?.scope?.style?.classes ? formField?.scope?.style?.classes[0] : ''\"\r\n [suggestions]=\"matchData\" [dropdown]=\"true\" [optionLabel]=\"formField.option.autocomplete.response.label\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\"\r\n (completeMethod)=\"autocompChangeEvent($event, formField)\" \r\n (ngModelChange)=\"autocompFocusOutEvent($event, formField)\"\r\n [attr.inputmode]=\"formField.option.keyboard === 'numeric' ? 'numeric' : null\">\r\n</p-autoComplete>\r\n\r\n<!-- Error Message -->\r\n<div *ngIf=\"autocompleteField?.touched && autocompleteField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"autocompleteField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"autocompleteField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { Capacitor, CapacitorHttp } from '@capacitor/core';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { Label } from '../../components/label/label';\r\nimport { Textbox } from '../../components/textbox/textbox';\r\nimport { String } from '../../components/string/string';\r\nimport { Autocomplete } from '../../components/autocomplete/autocomplete';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-model',\r\n templateUrl: './model.component.html',\r\n styleUrl: './model.component.css',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzSelectModule,\r\n NzDatePickerModule,\r\n DatePickerModule,\r\n AutoCompleteModule,\r\n InputTextModule,\r\n Label,\r\n Textbox,\r\n String,\r\n Autocomplete\r\n ]\r\n})\r\nexport class ModelComponent implements OnChanges {\r\n matchData: any[] = [];\r\n date2: Date | undefined;\r\n\r\n @Input() errorMessages: any = {};\r\n @Input() modalItemInfo: any = {};\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() userInfo: any = {};\r\n @Input() setFormDataHandler?: () => void | Promise<void>;\r\n\r\n copyLayoutSchema: any = {};\r\n isLoading = false;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private readonly dialogRef: DynamicDialogRef\r\n ) { }\r\n\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n !changes['modalItemInfo'] &&\r\n !changes['selectedLanguageInfo'] &&\r\n !changes['userInfo']\r\n ) {\r\n return;\r\n }\r\n\r\n void this.initializeDialogContent();\r\n }\r\n\r\n private async initializeDialogContent(): Promise<void> {\r\n if (!this.modalItemInfo?.layoutSchema) {\r\n return;\r\n }\r\n\r\n this.copyLayoutSchema = JSON.parse(\r\n JSON.stringify(this.modalItemInfo.layoutSchema)\r\n );\r\n\r\n const translations =\r\n this.selectedLanguageInfo?.selectedLanguage;\r\n\r\n if (translations) {\r\n this.modalItemInfo.layoutSchema =\r\n this.updateLayoutLanguage(\r\n this.copyLayoutSchema,\r\n translations\r\n );\r\n }\r\n\r\n if (this.modalItemInfo?.currentRecord) {\r\n this.mapDataToPropertySchema(\r\n this.modalItemInfo.currentRecord,\r\n this.modalItemInfo\r\n );\r\n }\r\n\r\n await this.setAutoCompleteData();\r\n }\r\n\r\n\r\n updateLayoutLanguage<T>(\r\n schema: T,\r\n translations: Record<string, string>\r\n ): T {\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // 🔹 label.caption (most common in form schemas)\r\n if (obj.label && typeof obj.label.caption === 'string') {\r\n const original = obj.label.caption;\r\n obj.label.caption = translations[original] ?? original;\r\n }\r\n\r\n // 🔹 direct caption (fallback / buttons / future-proof)\r\n if (typeof obj.caption === 'string') {\r\n const original = obj.caption;\r\n obj.caption = translations[original] ?? original;\r\n }\r\n\r\n // 🚫 Skip huge data arrays (autocomplete datasets, etc.)\r\n if (Array.isArray(obj.data)) return;\r\n\r\n // 🔁 Recurse\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n\r\n mapDataToPropertySchema(data: any, modalItemInfo: any): void {\r\n if (!data || !modalItemInfo?.propertySchema) return;\r\n const [rootScope] = Object.keys(modalItemInfo.propertySchema);\r\n if (!rootScope) return;\r\n\r\n const schemaFields = modalItemInfo.propertySchema[rootScope];\r\n Object.keys(schemaFields).forEach((fieldKey) => {\r\n if (data.hasOwnProperty(fieldKey)) {\r\n if (!schemaFields[fieldKey]) {\r\n schemaFields[fieldKey] = {};\r\n }\r\n schemaFields[fieldKey].value = data[fieldKey];\r\n }\r\n });\r\n }\r\n\r\n\r\n async setAutoCompleteData(): Promise<void> {\r\n const sections =\r\n this.modalItemInfo?.layoutSchema?.formSections || [];\r\n\r\n for (const section of sections) {\r\n for (const field of section?.formFields || []) {\r\n const reference = field?.scope?.reference;\r\n\r\n if (!reference) {\r\n continue;\r\n }\r\n\r\n const scope = this.getScope(reference);\r\n const fieldName = reference.split('/').pop();\r\n\r\n const type =\r\n this.modalItemInfo?.propertySchema?.[scope]?.[fieldName]?.type;\r\n\r\n if (type === 'autocomplete' && field?.option?.autocomplete) {\r\n this.isLoading = true;\r\n this.cdr.detectChanges();\r\n\r\n try {\r\n field.data = await this.fetchAutocompleteData(field);\r\n } finally {\r\n this.isLoading = false;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n async fetchAutocompleteData(formField: any) {\r\n const config = formField.option?.autocomplete;\r\n if (!config) return [];\r\n const request: any = this.resolveAutocompleteConfig(config, this.userInfo);\r\n const response = await CapacitorHttp.request({\r\n url: request.url,\r\n method: request.method,\r\n params: request.params,\r\n headers: request.headers\r\n });\r\n\r\n return response.data?.length > 0 ? response.data : [];\r\n }\r\n\r\n resolveAutocompleteConfig(\r\n config: any,\r\n userInfo: any\r\n ) {\r\n const params: any = {};\r\n\r\n Object.entries(\r\n config.params || {}\r\n ).forEach(([key, value]: any) => {\r\n // Dynamic token\r\n if (\r\n typeof value === 'string' &&\r\n value.includes('{{')\r\n ) {\r\n params[key] =\r\n this.resolveToken(\r\n value,\r\n userInfo\r\n );\r\n }\r\n // Computed parameter\r\n else if (value?.type === 'company') {\r\n params[key] =\r\n this.buildCompany(userInfo);\r\n }\r\n // Static parameter\r\n else {\r\n params[key] = value;\r\n }\r\n });\r\n\r\n const requestUrl =\r\n this.getAutocompleteRequestUrl(\r\n userInfo?.p5_backend_url,\r\n config?.url\r\n );\r\n\r\n return {\r\n url: requestUrl,\r\n method: config.method || 'POST',\r\n params,\r\n headers: config.passToken\r\n ? {\r\n Authorization:\r\n `Bearer ${userInfo.token}`,\r\n Accept: 'application/json'\r\n }\r\n : {}\r\n };\r\n }\r\n\r\n private getAutocompleteRequestUrl(\r\n backendUrl: string,\r\n endpoint: string\r\n ): string {\r\n const normalizedBackendUrl = backendUrl?.trim()?.replace(/\\/+$/, '');\r\n const normalizedEndpoint = endpoint?.trim();\r\n\r\n if (!normalizedBackendUrl) {\r\n throw new Error(\r\n 'Missing p5_backend_url for autocomplete request'\r\n );\r\n }\r\n\r\n if (!normalizedEndpoint) {\r\n throw new Error(\r\n 'Missing autocomplete endpoint URL'\r\n );\r\n }\r\n\r\n if (Capacitor.isNativePlatform()) {\r\n if (\r\n /^https?:\\/\\//i.test(\r\n normalizedEndpoint\r\n )\r\n ) {\r\n return normalizedEndpoint;\r\n }\r\n\r\n return (\r\n `${normalizedBackendUrl}/` +\r\n normalizedEndpoint.replace(\r\n /^\\/+/,\r\n ''\r\n )\r\n );\r\n }\r\n\r\n /*\r\n * Web:\r\n * Return a same-origin path beginning with /p5ws.\r\n * Angular's development proxy will forward it.\r\n */\r\n if (\r\n /^https?:\\/\\//i.test(\r\n normalizedEndpoint\r\n )\r\n ) {\r\n const absoluteEndpoint =\r\n new URL(normalizedEndpoint);\r\n\r\n return (\r\n absoluteEndpoint.pathname +\r\n absoluteEndpoint.search\r\n );\r\n }\r\n\r\n let backendPath: string;\r\n\r\n try {\r\n backendPath =\r\n new URL(\r\n normalizedBackendUrl\r\n ).pathname;\r\n } catch {\r\n backendPath =\r\n normalizedBackendUrl;\r\n }\r\n\r\n backendPath = `/${backendPath}`\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/+$/, '');\r\n\r\n const endpointPath =\r\n normalizedEndpoint.replace(\r\n /^\\/+/,\r\n ''\r\n );\r\n\r\n return (\r\n `${backendPath}/${endpointPath}`\r\n );\r\n }\r\n\r\n buildCompany(userInfo: any): string {\r\n return userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n }\r\n\r\n resolveToken(template: string, context: any) {\r\n return template.replace(/{{(.*?)}}/g, (_, path) => {\r\n return path.split('.').reduce((acc: any, key: any) => acc?.[key], context) ?? '';\r\n });\r\n }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n autocompChangeEvent(event: any) {\r\n const q = (event?.event.query || '').toLowerCase();\r\n let fieldName = event?.formField.scope?.reference?.split('/')?.pop()\r\n if (fieldName) {\r\n this.matchData = event?.formField.data?.filter((x: any) => x[fieldName] && x[fieldName]?.toLowerCase()?.startsWith(q));\r\n }\r\n }\r\n\r\n autocompFocusOutEvent(event: any) {\r\n let actualObj = Object.keys(event?.event)\r\n if (actualObj.length && event.formField) {\r\n this.autocompSelectEvent(event?.event, event.formField)\r\n }\r\n }\r\n\r\n autocompSelectEvent(obj: any, formField?: any) {\r\n const mapping = formField.option?.onSelect?.mapFields;\r\n if (!mapping) return;\r\n Object.entries(mapping).forEach(([targetProp, sourceKey]) => {\r\n const scope = this.getScope(formField.scope.reference);\r\n if (this.modalItemInfo.propertySchema?.[scope]?.[targetProp]) {\r\n this.modalItemInfo.propertySchema[scope][targetProp].value = obj[sourceKey as string] ?? null;\r\n }\r\n });\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, errorType: any) {\r\n let error: any = \"\";\r\n let fieldName: any = formField.label?.value ? formField.label?.value : formField.label?.caption ? formField.label?.caption : this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption;\r\n if (errorType == \"required\") {\r\n error = this.selectedLanguageInfo?.errorMessages?.required ? this.selectedLanguageInfo?.errorMessages.required : errorMessages.required\r\n }\r\n if (error && error.toString().includes(\"{{requiredLength}}\")) {\r\n error = error.replace(/{{\\s*requiredLength\\s*}}/g, formField?.minlength.toString());\r\n }\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n getSectionBodyStyle(formSection: any): Record<string, any> {\r\n const sectionStyle = {\r\n ...(formSection?.style || {})\r\n };\r\n\r\n return this.getStyleWithoutClasses({\r\n display: sectionStyle.display || 'grid',\r\n gridTemplateColumns:\r\n sectionStyle.gridTemplateColumns ||\r\n sectionStyle['grid-template-columns'] ||\r\n 'repeat(12, minmax(0, 1fr))',\r\n gap: sectionStyle.gap || '12px',\r\n width: sectionStyle.width || '100%',\r\n boxSizing: sectionStyle.boxSizing || 'border-box',\r\n ...sectionStyle\r\n }).style;\r\n }\r\n\r\n getFieldWrapperStyle(formField: any): Record<string, any> {\r\n const style = formField?.style || {};\r\n\r\n return {\r\n gridColumn:\r\n style.gridColumn ||\r\n style['grid-column'] ||\r\n `span ${formField?.gridSpan || 12}`,\r\n gridRow: style.gridRow || style['grid-row'] || undefined,\r\n justifySelf: style.justifySelf || style['justify-self'] || undefined,\r\n alignSelf: style.alignSelf || style['align-self'] || undefined,\r\n width: style.width || '100%',\r\n maxWidth: style.maxWidth || style['max-width'] || undefined,\r\n minWidth: style.minWidth || style['min-width'] || '0',\r\n margin: style.margin || undefined,\r\n marginTop: style.marginTop || style['margin-top'] || undefined,\r\n marginRight: style.marginRight || style['margin-right'] || undefined,\r\n marginBottom: style.marginBottom || style['margin-bottom'] || undefined,\r\n marginLeft: style.marginLeft || style['margin-left'] || undefined,\r\n boxSizing: style.boxSizing || style['box-sizing'] || 'border-box'\r\n };\r\n }\r\n\r\n onTimePanelShow(formField: any, event: any) {\r\n let value = this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.value;\r\n if (!value) {\r\n let currentDate = new Date();\r\n this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value = currentDate;\r\n this.handleRules(formField, currentDate);\r\n }\r\n }\r\n\r\n\r\n getControlStyle(formField: any): Record<string, any> {\r\n const style = {\r\n ...(formField?.style || {})\r\n };\r\n\r\n /*\r\n * These properties belong to the field wrapper because the wrapper\r\n * is the direct child of the section grid.\r\n */\r\n delete style.gridColumn;\r\n delete style['grid-column'];\r\n delete style.gridRow;\r\n delete style['grid-row'];\r\n delete style.justifySelf;\r\n delete style['justify-self'];\r\n delete style.alignSelf;\r\n delete style['align-self'];\r\n delete style.margin;\r\n delete style.marginTop;\r\n delete style['margin-top'];\r\n delete style.marginRight;\r\n delete style['margin-right'];\r\n delete style.marginBottom;\r\n delete style['margin-bottom'];\r\n delete style.marginLeft;\r\n delete style['margin-left'];\r\n delete style.classes;\r\n\r\n return {\r\n width: style.width || '100%',\r\n maxWidth: style.maxWidth || style['max-width'] || undefined,\r\n minWidth: style.minWidth || style['min-width'] || '0',\r\n boxSizing: style.boxSizing || style['box-sizing'] || 'border-box',\r\n ...style\r\n };\r\n }\r\n\r\n getFieldInnerLayoutStyle(formField: any): Record<string, any> {\r\n const layoutStyle = formField?.layoutStyle || {};\r\n\r\n if (formField?.layout === 'horizontal') {\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns:\r\n layoutStyle.gridTemplateColumns ||\r\n layoutStyle['grid-template-columns'] ||\r\n '80px minmax(0, 1fr)',\r\n alignItems: layoutStyle.alignItems || 'center',\r\n gap: layoutStyle.gap || '10px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n ...layoutStyle\r\n };\r\n }\r\n\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: 'minmax(0, 1fr)',\r\n gap: layoutStyle.gap || '6px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n ...layoutStyle\r\n };\r\n }\r\n\r\n dateChangeEvent(formField: any, value: any) {\r\n this.handleRules(formField, value);\r\n }\r\n\r\n onDateTyping(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 8);\r\n let formatted = '';\r\n if (digits.length <= 4) {\r\n formatted = digits;\r\n } else if (digits.length <= 6) {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4)}`;\r\n } else {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;\r\n }\r\n input.value = formatted;\r\n }\r\n\r\n forceNumericKeyboard(event: any) {\r\n const input = event?.target as HTMLInputElement;\r\n if (input && input.tagName === 'INPUT') {\r\n input.setAttribute('inputmode', 'numeric'); // Android\r\n input.setAttribute('pattern', '[0-9:]*'); // iOS\r\n input.setAttribute('type', 'tel'); // strongest signal\r\n }\r\n }\r\n\r\n onTimeTyping(event: any) {\r\n const input: HTMLInputElement =\r\n event?.target || event?.originalEvent?.target;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 4);\r\n let formatted = '';\r\n if (digits.length <= 2) {\r\n formatted = digits;\r\n } else {\r\n formatted = `${digits.slice(0, 2)}:${digits.slice(2)}`;\r\n }\r\n\r\n input.value = formatted;\r\n }\r\n\r\n timeChangeEvent(formField: any, value: any) {\r\n this.handleRules(formField, value);\r\n }\r\n\r\n handleRules(formField: any, value: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n const field = formField.scope?.reference.split('/').pop()\r\n const rules = formField.option?.rules;\r\n this.modalItemInfo.propertySchema[scope][field].value = value;\r\n if (!rules) return;\r\n rules.forEach((rule: any) => {\r\n let exist = this.isRuleTriggered(rule, formField)\r\n if (!exist) return;\r\n switch (rule.action) {\r\n case 'calculateDuration':\r\n this.applyDurationRule(rule, formField);\r\n break;\r\n case 'resetValue':\r\n this.resetRule(rule, formField);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n resetRule(rule: any, formField: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n if (rule?.resetValue?.length > 0) {\r\n rule.resetValue.forEach((prop: any) => {\r\n this.modalItemInfo.propertySchema[scope][prop].value = null;\r\n });\r\n }\r\n }\r\n\r\n isRuleTriggered(rule: any, formField: any): boolean {\r\n if (rule.when === 'timeRangeComplete') {\r\n const scope = this.getScope(formField.scope.reference);\r\n return (\r\n this.modalItemInfo.propertySchema[scope]?.workDayTimeFrom?.value &&\r\n this.modalItemInfo.propertySchema[scope]?.workDayTimeTo?.value\r\n );\r\n } else if (rule.when === 'change') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n applyDurationRule(rule: any, formField: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n const schema = this.modalItemInfo.propertySchema[scope];\r\n const fromTimeVal: Date = schema?.workDayTimeFrom?.value;\r\n const toTimeVal: Date = schema?.workDayTimeTo?.value;\r\n const baseDateVal: Date = schema?.fromDate?.value;\r\n\r\n // 🔒 Guard\r\n if (!fromTimeVal || !toTimeVal || !baseDateVal) {\r\n schema[rule.params.durationField].value = '';\r\n return;\r\n }\r\n\r\n // 📅 Base date (From Date)\r\n const baseDate = new Date(baseDateVal);\r\n baseDate.setHours(0, 0, 0, 0);\r\n\r\n // ⏱ FROM datetime\r\n const fromDateTime = new Date(baseDate);\r\n fromDateTime.setHours(\r\n fromTimeVal.getHours(),\r\n fromTimeVal.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n\r\n // ⏱ TO datetime\r\n let toDateTime = new Date(baseDate);\r\n toDateTime.setHours(\r\n toTimeVal.getHours(),\r\n toTimeVal.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n\r\n // 🌙 Overnight handling\r\n if (toDateTime <= fromDateTime) {\r\n toDateTime.setDate(toDateTime.getDate() + 1);\r\n }\r\n\r\n // ⏳ Duration calculation\r\n const diffMs = toDateTime.getTime() - fromDateTime.getTime();\r\n const totalMinutes = Math.floor(diffMs / 60000);\r\n const hours = Math.floor(totalMinutes / 60);\r\n const minutes = totalMinutes % 60;\r\n const duration = `${hours}:${minutes.toString().padStart(2, '0')}`;\r\n // ✅ Set duration\r\n schema[rule.params.durationField].value = duration;\r\n\r\n // ✅ Auto set To Date\r\n schema.toDate.value = new Date(toDateTime);\r\n }\r\n\r\n invokeSetformData(): void {\r\n void this.setFormDataHandler?.();\r\n }\r\n\r\n invokeFormBtnClick(\r\n option: any,\r\n propertySchema: any,\r\n form: NgForm\r\n ): void {\r\n if (option?.innerAction === 'cancel') {\r\n this.onCancel();\r\n return;\r\n }\r\n\r\n if (option?.innerAction === 'submit') {\r\n const valid = this.checkValidty(form);\r\n\r\n if (!valid) {\r\n return;\r\n }\r\n\r\n this.dialogRef.close({\r\n option,\r\n action: 'buttonClick',\r\n propertySchema,\r\n recordIndex: this.modalItemInfo?.recordIndex\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n checkValidty(form: NgForm): boolean {\r\n if (!form) {\r\n return false;\r\n }\r\n\r\n Object.values(form.controls).forEach(control => {\r\n control.markAsTouched();\r\n control.updateValueAndValidity();\r\n });\r\n\r\n return !!form.valid;\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close({\r\n action: 'cancel'\r\n });\r\n }\r\n}\r\n","<!-- Loader Spinner -->\r\n<div *ngIf=\"isLoading\" class=\"loader-overlay\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n<div [style]=\"getStyleWithoutClasses(modalItemInfo?.layoutSchema?.style).style\"\r\n [class]=\"modalItemInfo?.layoutSchema?.style?.classes[0]\">\r\n <form #dynamicForm=\"ngForm\" *ngIf=\"modalItemInfo?.layoutSchema?.formSections?.length > 0\"\r\n (submit)=\"$event.preventDefault()\">\r\n <div *ngFor=\"let formSection of modalItemInfo?.layoutSchema?.formSections\">\r\n <div *ngIf=\"formSection?.label?.caption\" [class]=\"formSection?.label?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(formSection?.label?.style).style\">\r\n {{formSection.label.caption}}\r\n </div>\r\n <div *ngIf=\"formSection?.formFields?.length > 0\" [class]=\"formSection?.style?.classes?.[0] || ''\"\r\n [ngStyle]=\"getSectionBodyStyle(formSection)\">\r\n <div *ngFor=\"let formField of formSection.formFields\" [ngStyle]=\"getFieldWrapperStyle(formField)\"\r\n [class]=\"formField?.style?.classes || ''\">\r\n\r\n <div [ngSwitch]=\"\r\n formField?.scope?.reference &&\r\n modalItemInfo?.propertySchema?.[\r\n getScope(formField.scope.reference)\r\n ]\r\n ? modalItemInfo.propertySchema[\r\n getScope(formField.scope.reference)\r\n ]?.[\r\n formField.scope.reference.split('/').pop()\r\n ]?.type\r\n : 'default'\r\n \">\r\n <!-- image control -->\r\n <div *ngSwitchCase=\"'image'\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\">\r\n <img [src]=\"formField.option.src\" [alt]=\"'img'\" />\r\n </div>\r\n\r\n <!-- credit card control -->\r\n <div *ngSwitchCase=\"'carditCard'\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes[0]\">\r\n <div id=\"card-element\">\r\n <!-- a Stripe element will be inserted here -->\r\n </div>\r\n <!-- Used to display form errors -->\r\n <div id=\"card-errors\" class=\"displayError.textContent!=='': 'alert alert-danger mt-1'\">\r\n </div>\r\n </div>\r\n\r\n <!-- string control -->\r\n <div *ngSwitchCase=\"'string'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <vl-label [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-label>\r\n <vl-textbox [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\"></vl-textbox>\r\n </div>\r\n <!-- Error Message -->\r\n <!-- <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <h5>{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }} {{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.value\r\n |\r\n currency:formField.option.currency :true: formField.option?.decimalPoint}}\r\n </h5>\r\n </span>\r\n <span *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"number\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- DateRange control -->\r\n <div *ngSwitchCase=\"'dateRange'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <nz-range-picker #dateRangeField=\"ngModel\" [required]=\"formField.option.required\"\r\n [name]=\"formField.scope?.reference\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"></nz-range-picker>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dateRangeField?.touched && dateRangeField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dateRangeField?.errors?.['required']\">\r\n {{formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dateRangeField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n\r\n <p-datepicker #dateField=\"ngModel\" styleClass=\"custom-datepicker\"\r\n [required]=\"formField.option.required\" [name]=\"formField.scope?.reference\"\r\n [disabled]=\"formField?.option?.disabled\" [showIcon]=\"true\" appendTo=\"body\"\r\n [autoZIndex]=\"true\" [baseZIndex]=\"10000\"\r\n panelStyleClass=\"model-datepicker-panel\"\r\n (ngModelChange)=\"dateChangeEvent(formField, $event)\"\r\n (onInput)=\"onDateTyping($event)\"\r\n [dateFormat]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.format || 'yy-mm-dd'\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [class]=\"formField?.scope?.style?.classes?.[0] || ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\">\r\n </p-datepicker>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dateField?.touched && dateField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dateField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dateField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time control -->\r\n <div *ngSwitchCase=\"'time'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <p-datepicker #timeField=\"ngModel\" styleClass=\"custom-datepicker\" [required]=\"formField.option.required\"\r\n [name]=\"formField.scope?.reference\" (onShow)=\"onTimePanelShow(formField, $event)\" [timeOnly]=\"true\" hourFormat=\"24\"\r\n [disabled]=\"formField?.option?.disabled\" appendTo=\"body\" [autoZIndex]=\"true\"\r\n [baseZIndex]=\"10000\" panelStyleClass=\"model-datepicker-panel\"\r\n (onFocus)=\"forceNumericKeyboard($event)\" (onInput)=\"onTimeTyping($event)\"\r\n (ngModelChange)=\"timeChangeEvent(formField, $event)\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\"\r\n [(ngModel)]=\" modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [class]=\" formField?.scope?.style?.classes?.[0] || ''\">\r\n </p-datepicker>\r\n\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"timeField?.touched && timeField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"timeField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"timeField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Autocomplete control -->\r\n <div *ngSwitchCase=\"'autocomplete'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <vl-label [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-label>\r\n\r\n <vl-autocomplete [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\"\r\n [matchData]=\"matchData\" [selectedLanguageInfo]=\"selectedLanguageInfo\"\r\n [errorMessages]=\"errorMessages\" (autocompChange)=\"autocompChangeEvent($event)\"\r\n (autocompFocusOut)=\"autocompFocusOutEvent($event)\">\r\n </vl-autocomplete>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- checkBox control -->\r\n <div *ngSwitchCase=\"'checkbox'\" class=\"form-group mb-3\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0] : ''\">\r\n <span *ngIf=\"formField.option?.postfixCaption\">\r\n <label class=\"form-check-label\"><input type=\"checkbox\" class=\"form-check-input\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\" (ngModelChange)=\"invokeSetformData()\" />{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n </span>\r\n <div *ngIf=\"!formField.option?.postfixCaption\"\r\n [class]=\"formField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label class=\"form-check-label\">{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\" /></label>\r\n </div>\r\n </div>\r\n\r\n <!-- dropdown control -->\r\n <div *ngSwitchCase=\"'dropdown'\" class=\"form-group mb-3\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0] : ''\">\r\n <span *ngIf=\"formField.option?.postfixCaption\">\r\n <select id=\"dynamic-dropdown\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n #dropdownField=\"ngModel\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\">\r\n <option\r\n *ngFor=\"let item of modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.data\"\r\n [value]=\"formField.option.optionValue\"> {{\r\n formField.option.optionLabel}}</option>\r\n </select>\r\n <label\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\">{{modalItemInfo.propertySchema[getScope(formField.scope)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n </span>\r\n <div *ngIf=\"!formField.option?.postfixCaption\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\">{{modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n <nz-select nzShowSearch nzAllowClear nzPlaceHolder=\"Select\" #dropdownField=\"ngModel\"\r\n [required]=\"formField.option.required\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\">\r\n <nz-option\r\n *ngFor=\"let item of modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.data\"\r\n [nzLabel]=\"item[formField.option.optionLabel]\"\r\n [nzValue]=\"item[formField.option.optionValue]\"></nz-option>\r\n </nz-select>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dropdownField?.touched && dropdownField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dropdownField?.errors?.['required']\">\r\n {{formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dropdownField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- button control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"button\" [ngStyle]=\"getStyleWithoutClasses(formField.style).style\"\r\n (click)=\"invokeFormBtnClick(formField.option, modalItemInfo.propertySchema, dynamicForm)\"\r\n class=\"btn btn-primary btn-block\">\r\n {{ formField.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-button',\r\n standalone: true,\r\n templateUrl: './button.html',\r\n styleUrl: './button.css',\r\n})\r\nexport class Button {\r\n\r\n}\r\n","<p>button works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-date',\r\n standalone: true,\r\n templateUrl: './date.html',\r\n styleUrl: './date.css',\r\n})\r\nexport class Date {\r\n\r\n}\r\n","<p>date works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-dropdown',\r\n standalone: true,\r\n templateUrl: './dropdown.html',\r\n styleUrl: './dropdown.css',\r\n})\r\nexport class Dropdown {\r\n\r\n}\r\n","<p>dropdown works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-error-message',\r\n standalone: true,\r\n templateUrl: './error-message.html',\r\n styleUrl: './error-message.css',\r\n})\r\nexport class ErrorMessage {\r\n\r\n}\r\n","<p>error-message works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-time',\r\n standalone: true,\r\n templateUrl: './time.html',\r\n styleUrl: './time.css',\r\n})\r\nexport class Time {\r\n\r\n}\r\n","<p>time works!</p>\r\n","import { Injectable } from '@angular/core';\r\nimport { ConfigService } from './config.service';\r\nimport { Capacitor } from '@capacitor/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { OAuth2Client } from '@byteowls/capacitor-oauth2';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { UtilityService } from './utility.service';\r\n\r\n\r\nexport interface MobileAuthTokens {\r\n access_token: string;\r\n refresh_token?: string;\r\n id_token?: string;\r\n expires_in?: number;\r\n token_type?: string;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MobileKeycloakService {\r\n\r\n private tokens: MobileAuthTokens | any = null;\r\n constructor(private config: ConfigService, private http: HttpClient, private utilityService: UtilityService, private platform: Platform) {\r\n if (Capacitor.isNativePlatform()) {\r\n App.addListener('appUrlOpen', async (url: any) => {\r\n // Nothing to do here; capacitor-oauth2 resolves internally.\r\n // Keep listener to satisfy deep link expectations.\r\n });\r\n }\r\n }\r\n\r\n async login(): Promise<any> {\r\n if (!Capacitor.isNativePlatform()) return null;\r\n const cfg: any = this.config.getKeycloakMobileConfig();\r\n const discoveryUrl = `${cfg.issuer}/.well-known/openid-configuration`;\r\n const discovery: any = await (await fetch(discoveryUrl)).json();\r\n const result = await OAuth2Client.authenticate({\r\n appId: cfg.clientId, // <--- Keycloak clientId goes here\r\n authorizationBaseUrl: discovery.authorization_endpoint,\r\n accessTokenEndpoint: discovery.token_endpoint,\r\n responseType: 'code',\r\n redirectUrl: cfg.redirectUri,\r\n scope: cfg.scope,\r\n pkceEnabled: true,\r\n logsEnabled: true\r\n });\r\n console.log('result-KEyClaok: ', result);\r\n this.tokens = {\r\n access_token: result?.access_token_response?.access_token ? result?.access_token_response?.access_token : result.access_token,\r\n refresh_token: result?.access_token_response?.refresh_token,\r\n id_token: result?.access_token_response?.id_token,\r\n expires_in: result?.access_token_response?.expires_at ? result?.access_token_response?.expires_at : result?.access_token_response?.expires_in,\r\n token_type: result?.access_token_response?.token_type\r\n };\r\n let keycloakLoginUser = \"\";\r\n if (this.tokens.access_token) {\r\n keycloakLoginUser = await this.getUserInfo(this.tokens.access_token, cfg.issuer);\r\n console.log('keycloakLoginUser: ', keycloakLoginUser);\r\n if (keycloakLoginUser) {\r\n this.tokens['issuer'] = cfg.issuer;\r\n this.utilityService.setLocalStorage(\"KeycloakInfo\", this.tokens);\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n window.location.reload();\r\n }\r\n }\r\n }\r\n return keycloakLoginUser;\r\n }\r\n\r\n async getUserInfo(accessToken: any, issuer: any): Promise<any> {\r\n try {\r\n const headers = new HttpHeaders({\r\n Authorization: `Bearer ${accessToken}`,\r\n });\r\n const url = `${issuer}/protocol/openid-connect/userinfo`;\r\n return await this.http.get(url, { headers }).toPromise();\r\n } catch (err) {\r\n console.error('Error fetching user info:', err);\r\n throw err;\r\n }\r\n }\r\n\r\n getAccessToken(): string | null {\r\n return this.tokens?.access_token ?? null;\r\n }\r\n\r\n getRefreshToken(): string | null {\r\n return this.tokens?.refresh_token ?? null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n const cfg: any = this.config.getKeycloakMobileConfig();\r\n const idToken = keycloakInfo?.keycloakInfo?.id_token;\r\n const accessToken = keycloakInfo?.keycloakInfo?.access_token;\r\n if (!idToken || !accessToken) {\r\n console.warn('No tokens found for logout');\r\n return;\r\n }\r\n const endSessionUrl =\r\n `${cfg.issuer}/protocol/openid-connect/logout` +\r\n `?id_token_hint=${encodeURIComponent(idToken)}` +\r\n `&client_id=${encodeURIComponent(cfg.clientId)}` +\r\n `&post_logout_redirect_uri=${encodeURIComponent(cfg.logoutRedirectUri)}`;\r\n console.log('Logout URL:', endSessionUrl);\r\n await Browser.open({ url: endSessionUrl });\r\n this.tokens = null;\r\n await this.utilityService.removeLocalStorage('KeycloakInfo');\r\n window.location.reload();\r\n }\r\n\r\n}\r\n","import { Platform, PlatformModule } from '@angular/cdk/platform';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Injector,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\n\r\nimport { Device } from '@capacitor/device';\r\nimport {\r\n OKTA_AUTH,\r\n OktaAuthStateService\r\n} from '@okta/okta-angular';\r\nimport { jwtDecode } from 'jwt-decode';\r\nimport {\r\n de_DE,\r\n en_US,\r\n NzI18nService\r\n} from 'ng-zorro-antd/i18n';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport {\r\n DialogService,\r\n DynamicDialogModule\r\n} from 'primeng/dynamicdialog';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LogsComponent } from '../logs/logs.component';\r\nimport { Couchdb } from '../../services/couchdb';\r\nimport { MobileKeycloakService } from '../../services/mobile-keycloak.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-side-menu',\r\n templateUrl: './side-menu.component.html',\r\n styleUrl: './side-menu.component.css',\r\n imports: [\r\n CommonModule,\r\n PlatformModule,\r\n\r\n // NG-ZORRO\r\n NzMenuModule,\r\n NzIconModule,\r\n NzTooltipModule,\r\n NzButtonModule,\r\n\r\n // PrimeNG\r\n DynamicDialogModule\r\n ]\r\n})\r\nexport class SideMenuComponent\r\n implements AfterViewInit, OnChanges, OnDestroy {\r\n\r\n isCollapsed = false;\r\n isMobile = false;\r\n projectsLayoutSchema: any;\r\n loginUser: any = {};\r\n isLogined = false;\r\n loginedUserInfo: any = {};\r\n menuItemsCopy: any[] = [];\r\n settingMenu: any = {};\r\n setLanguage = false;\r\n tenantKey = '';\r\n\r\n private oktaAuthStateSubscription?: Subscription;\r\n private mobileLoginSubscription?: Subscription;\r\n private mobileLoginRequestInProgress = false;\r\n private currentMobileLoginToken?: string;\r\n\r\n @Input() menuItems: any[] = [];\r\n @Input() userInfo: any = {};\r\n @Input() settings: any = {};\r\n @Input() projects: any;\r\n @Input() tenantName: any;\r\n @Input() environment: any;\r\n @Input() projectSeleted: any;\r\n\r\n @Output() languageChange = new EventEmitter<any>();\r\n @Output() invokeMenu = new EventEmitter<any>();\r\n @Output() menuToggle = new EventEmitter<any>();\r\n @Output() invokeProject = new EventEmitter<any>();\r\n @Output() errorMessage = new EventEmitter<any>();\r\n @Output() deleteProject = new EventEmitter<any>();\r\n @Output() paginationType = new EventEmitter<any>();\r\n\r\n @ViewChild('sideMenu', { static: true })\r\n sideMenu!: ElementRef<HTMLElement>;\r\n\r\n readonly PRIME_DE = {\r\n firstDayOfWeek: 1,\r\n dayNames: [\r\n 'Sonntag',\r\n 'Montag',\r\n 'Dienstag',\r\n 'Mittwoch',\r\n 'Donnerstag',\r\n 'Freitag',\r\n 'Samstag'\r\n ],\r\n dayNamesShort: [\r\n 'So',\r\n 'Mo',\r\n 'Di',\r\n 'Mi',\r\n 'Do',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n dayNamesMin: [\r\n 'So',\r\n 'Mo',\r\n 'Di',\r\n 'Mi',\r\n 'Do',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n monthNames: [\r\n 'Januar',\r\n 'Februar',\r\n 'März',\r\n 'April',\r\n 'Mai',\r\n 'Juni',\r\n 'Juli',\r\n 'August',\r\n 'September',\r\n 'Oktober',\r\n 'November',\r\n 'Dezember'\r\n ],\r\n monthNamesShort: [\r\n 'Jan',\r\n 'Feb',\r\n 'Mär',\r\n 'Apr',\r\n 'Mai',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Okt',\r\n 'Nov',\r\n 'Dez'\r\n ],\r\n today: 'Heute',\r\n clear: 'Löschen',\r\n dateFormat: 'yy-mm-dd',\r\n weekHeader: 'KW'\r\n };\r\n\r\n readonly PRIME_EN = {\r\n firstDayOfWeek: 0,\r\n dayNames: [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n ],\r\n dayNamesShort: [\r\n 'Sun',\r\n 'Mon',\r\n 'Tue',\r\n 'Wed',\r\n 'Thu',\r\n 'Fri',\r\n 'Sat'\r\n ],\r\n dayNamesMin: [\r\n 'Su',\r\n 'Mo',\r\n 'Tu',\r\n 'We',\r\n 'Th',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n monthNames: [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n ],\r\n monthNamesShort: [\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr',\r\n 'May',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Oct',\r\n 'Nov',\r\n 'Dec'\r\n ],\r\n today: 'Today',\r\n clear: 'Clear',\r\n dateFormat: 'yy-mm-dd',\r\n weekHeader: 'Wk'\r\n };\r\n\r\n constructor(\r\n private i18n: NzI18nService,\r\n private mobileKeycloakService: MobileKeycloakService,\r\n private couchdbService: Couchdb,\r\n private oauthService: OAuthService,\r\n private platform: Platform,\r\n private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private dialogService: DialogService,\r\n private notificationService: NotificationService,\r\n private injector: Injector\r\n ) { }\r\n\r\n async ngOnInit(): Promise<void> {\r\n if (this.isNativeMobile()) {\r\n this.isCollapsed = true;\r\n this.isMobile = true;\r\n\r\n this.tenantKey =\r\n await this.utilityService.getLocalStorage('tenantKey') ?? '';\r\n } else {\r\n this.tenantKey =\r\n await this.utilityService.getStorage('tenantKey') ?? '';\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n changes['environment'] ||\r\n changes['userInfo'] ||\r\n changes['projectSeleted']\r\n ) {\r\n void this.setLoginUser();\r\n }\r\n\r\n if (\r\n changes['projects'] ||\r\n changes['projectSeleted']\r\n ) {\r\n this.initializeProjects();\r\n }\r\n\r\n if (\r\n changes['menuItems'] &&\r\n this.menuItems?.length\r\n ) {\r\n this.menuItemsCopy =\r\n JSON.parse(JSON.stringify(this.menuItems));\r\n\r\n void this.setProjectSetting();\r\n }\r\n\r\n if (\r\n changes['settings'] ||\r\n changes['tenantName'] ||\r\n changes['projectSeleted']\r\n ) {\r\n void this.setSettingImages();\r\n }\r\n }\r\n\r\n async ngAfterViewInit(): Promise<void> {\r\n this.initializeProjects();\r\n\r\n if (!this.isNativeMobile()) {\r\n return;\r\n }\r\n\r\n try {\r\n const deviceLanguage = await this.getDeviceLanguage();\r\n\r\n const supportedLanguage =\r\n deviceLanguage === 'de' ? 'de' : 'en';\r\n\r\n await this.changeLanguage(\r\n `${supportedLanguage}.json`\r\n );\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load device language:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyOktaSubscription();\r\n this.destroyMobileLoginSubscription();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n const path =\r\n event.composedPath() as HTMLElement[];\r\n\r\n const clickedInsideMenu =\r\n path.some(\r\n element =>\r\n element === this.sideMenu?.nativeElement\r\n );\r\n\r\n const clickedToggle =\r\n path.some(\r\n element =>\r\n element instanceof HTMLElement &&\r\n element.classList?.contains(\r\n 'side-toggle-handle'\r\n )\r\n );\r\n\r\n if (\r\n !clickedInsideMenu &&\r\n !clickedToggle &&\r\n this.isMobile\r\n ) {\r\n const button =\r\n document.getElementById('toggle-id');\r\n\r\n if (\r\n button &&\r\n !this.isCollapsed\r\n ) {\r\n button.click();\r\n }\r\n }\r\n }\r\n\r\n toggleCollapsed(): void {\r\n this.isCollapsed = !this.isCollapsed;\r\n\r\n if (!this.isMobile) {\r\n return;\r\n }\r\n\r\n const sideMenu =\r\n document.querySelector('.side-menu');\r\n\r\n sideMenu?.classList.toggle(\r\n 'open',\r\n !this.isCollapsed\r\n );\r\n }\r\n\r\n private isNativeMobile(): boolean {\r\n return (\r\n this.platform.ANDROID ||\r\n this.platform.IOS\r\n );\r\n }\r\n\r\n async getDeviceLanguage(): Promise<string> {\r\n const info =\r\n await Device.getLanguageCode();\r\n\r\n return info.value;\r\n }\r\n\r\n async setLoginUser(): Promise<void> {\r\n try {\r\n const loginType =\r\n this.environment?.login?.type;\r\n\r\n if (!loginType) {\r\n return;\r\n }\r\n\r\n if (loginType === 'oktaAuth') {\r\n if (this.isNativeMobile()) {\r\n await this.initializeMobileOktaUser();\r\n } else {\r\n this.initializeWebOktaUser();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // The current project is not an Okta project.\r\n this.destroyOktaSubscription();\r\n this.destroyMobileLoginSubscription();\r\n\r\n if (\r\n loginType === 'jwtToken' &&\r\n this.userInfo?.jwt\r\n ) {\r\n const decodedUser =\r\n this.getUserInfoFromToken(\r\n this.userInfo.jwt\r\n );\r\n\r\n if (decodedUser) {\r\n this.setLoginedUser(decodedUser);\r\n } else {\r\n this.clearLoginUser();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (\r\n loginType === 'keycloak' &&\r\n this.userInfo?.name\r\n ) {\r\n this.setLoginedUser(this.userInfo);\r\n return;\r\n }\r\n\r\n this.clearLoginUser();\r\n } catch (error) {\r\n console.error(\r\n 'Error while setting logged-in user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n }\r\n\r\n private async initializeMobileOktaUser(): Promise<void> {\r\n const logined: any =\r\n await this.utilityService.getLocalStorage(\r\n 'loginedUser'\r\n );\r\n\r\n if (!logined?.token) {\r\n this.destroyMobileLoginSubscription();\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n if (\r\n this.mobileLoginRequestInProgress &&\r\n this.currentMobileLoginToken ===\r\n logined.token\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.currentMobileLoginToken ===\r\n logined.token &&\r\n this.loginUser?.name\r\n ) {\r\n return;\r\n }\r\n\r\n this.destroyMobileLoginSubscription();\r\n\r\n this.currentMobileLoginToken =\r\n logined.token;\r\n\r\n this.mobileLoginRequestInProgress = true;\r\n\r\n this.mobileLoginSubscription =\r\n this.requestService\r\n .getLoginUser(logined.token)\r\n .subscribe({\r\n next: (userInfo: any) => {\r\n this.mobileLoginRequestInProgress =\r\n false;\r\n\r\n this.setLoginedUser({\r\n ...this.userInfo,\r\n ...userInfo,\r\n ...logined\r\n });\r\n },\r\n error: (error) => {\r\n this.mobileLoginRequestInProgress =\r\n false;\r\n\r\n console.error(\r\n 'Failed to fetch the mobile Okta user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n });\r\n }\r\n\r\n private initializeWebOktaUser(): void {\r\n if (this.oktaAuthStateSubscription) {\r\n return;\r\n }\r\n\r\n try {\r\n /*\r\n * Okta dependencies are resolved only when this is\r\n * an Okta project running in the web application.\r\n *\r\n * Keycloak projects will never request OKTA_AUTH.\r\n */\r\n const oktaAuthStateService =\r\n this.injector.get(\r\n OktaAuthStateService\r\n );\r\n\r\n const oktaAuth: any =\r\n this.injector.get(OKTA_AUTH);\r\n\r\n this.oktaAuthStateSubscription =\r\n oktaAuthStateService.authState$\r\n .subscribe({\r\n next: async authState => {\r\n if (!authState.isAuthenticated) {\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n try {\r\n const oktaWebUser =\r\n await oktaAuth.getUser();\r\n\r\n this.setLoginedUser({\r\n ...this.userInfo,\r\n ...oktaWebUser\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to fetch the web Okta user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n },\r\n error: error => {\r\n console.error(\r\n 'Okta authentication state error:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to initialize web Okta authentication:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n }\r\n\r\n private destroyOktaSubscription(): void {\r\n this.oktaAuthStateSubscription?.unsubscribe();\r\n this.oktaAuthStateSubscription = undefined;\r\n }\r\n\r\n private destroyMobileLoginSubscription(): void {\r\n this.mobileLoginSubscription?.unsubscribe();\r\n this.mobileLoginSubscription = undefined;\r\n this.mobileLoginRequestInProgress = false;\r\n this.currentMobileLoginToken = undefined;\r\n }\r\n\r\n private clearLoginUser(): void {\r\n this.loginUser = {};\r\n this.loginedUserInfo = {};\r\n this.isLogined = false;\r\n }\r\n\r\n getUserInfoFromToken(token: string): any | null {\r\n try {\r\n const decoded: any =\r\n jwtDecode(token);\r\n\r\n return {\r\n sub: decoded.sub,\r\n name:\r\n decoded.name ??\r\n 'User is undefined',\r\n role:\r\n decoded.role ??\r\n 'Role is undefined',\r\n email:\r\n decoded.email ??\r\n decoded.sub,\r\n iat: decoded.iat,\r\n exp: decoded.exp\r\n };\r\n } catch (error) {\r\n console.error(\r\n 'Failed to decode JWT:',\r\n error\r\n );\r\n\r\n return null;\r\n }\r\n }\r\n\r\n setLoginedUser(user: any): void {\r\n if (!user?.name) {\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n const logoutMenu =\r\n this.menuItems.find(\r\n (menu: any) =>\r\n menu?.options?.action === 'logout'\r\n );\r\n\r\n this.loginUser = {\r\n ...user\r\n };\r\n\r\n this.loginedUserInfo = {\r\n ...user,\r\n image: 'user.png',\r\n ...(logoutMenu\r\n ? { actions: [logoutMenu] }\r\n : {})\r\n };\r\n\r\n this.isLogined = true;\r\n }\r\n\r\n initializeProjects(): void {\r\n this.projectsLayoutSchema =\r\n this.projects;\r\n }\r\n\r\n async setProjectSetting(): Promise<void> {\r\n if (!this.menuItems?.length) {\r\n return;\r\n }\r\n\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const menuItem of this.menuItems) {\r\n if (\r\n menuItem?.label?.caption !== 'Setting' ||\r\n !menuItem?.submenu?.length\r\n ) {\r\n continue;\r\n }\r\n\r\n for (const subMenu of menuItem.submenu) {\r\n if (\r\n subMenu?.label?.caption !== 'Languages' ||\r\n !subMenu?.submenu?.length\r\n ) {\r\n continue;\r\n }\r\n\r\n for (const childMenu of subMenu.submenu) {\r\n tasks.push(\r\n this.setLanguageMenuImage(childMenu)\r\n );\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(tasks);\r\n }\r\n\r\n private async setLanguageMenuImage(\r\n childMenu: any\r\n ): Promise<void> {\r\n try {\r\n if (\r\n !this.tenantName ||\r\n !this.projectSeleted ||\r\n !childMenu?.icon\r\n ) {\r\n return;\r\n }\r\n\r\n const projectName =\r\n `${this.tenantName}_${this.projectSeleted}`;\r\n\r\n const imagePath =\r\n `Media/${childMenu.icon}`;\r\n\r\n const image =\r\n await this.couchdbService\r\n .getFileContentFromCouchDb(\r\n projectName,\r\n imagePath\r\n );\r\n\r\n const imageSource =\r\n this.getMediaSrc(image);\r\n\r\n if (imageSource) {\r\n childMenu.icon = imageSource;\r\n }\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load language icon:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n async setSettingImages(): Promise<void> {\r\n if (!this.settings) {\r\n this.settingMenu = {};\r\n return;\r\n }\r\n\r\n this.settingMenu =\r\n JSON.parse(JSON.stringify(this.settings));\r\n\r\n if (!this.settings?.submenu?.length) {\r\n return;\r\n }\r\n\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const menu of this.settings.submenu) {\r\n if (!menu?.submenu?.length) {\r\n continue;\r\n }\r\n\r\n for (const childMenu of menu.submenu) {\r\n if (\r\n childMenu?.options?.changeProject\r\n ) {\r\n tasks.push(\r\n this.setProjectMenuImage(childMenu)\r\n );\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(tasks);\r\n\r\n this.settingMenu =\r\n JSON.parse(JSON.stringify(this.settings));\r\n }\r\n\r\n private async setProjectMenuImage(\r\n childMenu: any\r\n ): Promise<void> {\r\n try {\r\n if (\r\n !this.tenantName ||\r\n !childMenu?.id ||\r\n !childMenu?.icon\r\n ) {\r\n return;\r\n }\r\n\r\n const projectName =\r\n `${this.tenantName}_${childMenu.id}`;\r\n\r\n const imagePath =\r\n `Media/${childMenu.icon}`;\r\n\r\n const image =\r\n await this.couchdbService\r\n .getFileContentFromCouchDb(\r\n projectName,\r\n imagePath\r\n );\r\n\r\n const imageSource =\r\n this.getMediaSrc(image);\r\n\r\n if (imageSource) {\r\n childMenu.icon = imageSource;\r\n }\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load project icon:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n getMediaSrc(file: any): string {\r\n if (!file) {\r\n return '';\r\n }\r\n\r\n if (file.src) {\r\n return file.src;\r\n }\r\n\r\n if (file.base64) {\r\n const mimeType =\r\n file.mimeType || 'image/png';\r\n\r\n return (\r\n `data:${mimeType};base64,` +\r\n file.base64\r\n );\r\n }\r\n\r\n if (file.dataUrl) {\r\n return file.dataUrl;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n isUrl(value: string): boolean {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n return (\r\n /^https?:\\/\\//.test(value) ||\r\n value.startsWith('blob:') ||\r\n value.startsWith('data:')\r\n );\r\n }\r\n\r\n async invokeNavigate(\r\n menu: any,\r\n parentMenu?: any\r\n ): Promise<void> {\r\n const options = menu?.options;\r\n\r\n if (!options) {\r\n return;\r\n }\r\n\r\n if (options.scrollPagination) {\r\n this.paginationType.emit({ scroll: true });\r\n return;\r\n }\r\n\r\n if (options.numberedPagination) {\r\n this.paginationType.emit({ scroll: false });\r\n return;\r\n }\r\n\r\n if (options?.switchTenant) {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n await this.utilityService.removeLocalStorage('tenantKey')\r\n await this.utilityService.removeLocalStorage('selectedProject')\r\n } else {\r\n await this.utilityService.removeStorage('tenantKey');\r\n await this.utilityService.removeStorage('selectedProject');\r\n }\r\n window.location.reload();\r\n return;\r\n }\r\n\r\n if (options.showAllProjects) {\r\n await this.utilityService.showAllProjects();\r\n return;\r\n }\r\n\r\n if (options.changeLang) {\r\n await this.changeLanguage(\r\n options.data_url\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.changeProject) {\r\n this.navigateToProject(menu);\r\n return;\r\n }\r\n\r\n if (options.logs) {\r\n this.openLogsTable();\r\n return;\r\n }\r\n\r\n if (options.terms) {\r\n this.notificationService.info(\r\n 'Term Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.projectPrivacy) {\r\n this.notificationService.warning(\r\n 'Project Privacy Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.projectVersion) {\r\n this.notificationService.warning(\r\n 'Project Version Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (\r\n options.action === 'login' &&\r\n this.environment?.login?.type ===\r\n 'keycloak'\r\n ) {\r\n if (this.isNativeMobile()) {\r\n await this.mobileKeycloakService.login();\r\n } else {\r\n this.oauthService.initLoginFlow();\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.toggleCollapsed();\r\n this.invokeMenu.emit(menu);\r\n }\r\n\r\n openLogsTable(): void {\r\n // this.dialogService.open(\r\n // LogsComponent,\r\n // {\r\n // width: '700px',\r\n // data: {}\r\n // }\r\n // );\r\n }\r\n\r\n deleteMenuItem(\r\n subChild: any,\r\n index: number,\r\n event: Event\r\n ): void {\r\n event.stopPropagation();\r\n\r\n const projectMenu =\r\n this.settings?.submenu?.[2]?.submenu;\r\n\r\n if (\r\n Array.isArray(projectMenu) &&\r\n index >= 0 &&\r\n index < projectMenu.length\r\n ) {\r\n projectMenu.splice(index, 1);\r\n }\r\n\r\n this.deleteProject.emit(subChild);\r\n }\r\n\r\n navigateToProject(project: any): void {\r\n this.invokeProject.emit(project);\r\n }\r\n\r\n async changeLanguage(lang: string): Promise<void> {\r\n if (\r\n !lang ||\r\n !this.tenantName ||\r\n !this.projectSeleted\r\n ) {\r\n return;\r\n }\r\n\r\n try {\r\n if (lang === 'de.json') {\r\n this.i18n.setLocale(de_DE);\r\n } else {\r\n this.i18n.setLocale(en_US);\r\n }\r\n\r\n const databaseName =\r\n `${this.tenantName}_${this.projectSeleted}`;\r\n\r\n const [\r\n selectedLanguage,\r\n errorMessages\r\n ] = await Promise.all([\r\n this.couchdbService\r\n .getFileContentFromCouchDb(\r\n databaseName,\r\n `languages/${lang}`\r\n ),\r\n\r\n this.couchdbService\r\n .getFileContentFromCouchDb(\r\n databaseName,\r\n `languages/errorMessage_${lang}`\r\n )\r\n ]);\r\n\r\n if (\r\n !selectedLanguage ||\r\n typeof selectedLanguage !== 'object'\r\n ) {\r\n console.warn(\r\n `Language file \"${lang}\" was not found.`\r\n );\r\n\r\n return;\r\n }\r\n\r\n this.languageChange.emit({\r\n selectedLanguage,\r\n errorMessages\r\n });\r\n\r\n this.setLanguage = true;\r\n\r\n this.applyMenuTranslations(\r\n selectedLanguage\r\n );\r\n\r\n this.applySettingTranslations(\r\n selectedLanguage\r\n );\r\n } catch (error) {\r\n console.error(\r\n `Failed to change language to \"${lang}\":`,\r\n error\r\n );\r\n }\r\n }\r\n\r\n private applyMenuTranslations(\r\n selectedLanguage: Record<string, string>\r\n ): void {\r\n if (!this.menuItemsCopy?.length) {\r\n return;\r\n }\r\n\r\n this.menuItemsCopy.forEach(\r\n (menu: any, menuIndex: number) => {\r\n const translatedCaption =\r\n selectedLanguage[\r\n menu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedCaption &&\r\n this.menuItems?.[menuIndex]?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].label.caption = translatedCaption;\r\n }\r\n\r\n menu?.submenu?.forEach(\r\n (\r\n subMenu: any,\r\n subMenuIndex: number\r\n ) => {\r\n const translatedSubCaption =\r\n selectedLanguage[\r\n subMenu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedSubCaption &&\r\n this.menuItems?.[menuIndex]\r\n ?.submenu?.[subMenuIndex]\r\n ?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].submenu[\r\n subMenuIndex\r\n ].label.caption =\r\n translatedSubCaption;\r\n }\r\n\r\n subMenu?.submenu?.forEach(\r\n (\r\n childMenu: any,\r\n childIndex: number\r\n ) => {\r\n const translatedChildCaption =\r\n selectedLanguage[\r\n childMenu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedChildCaption &&\r\n this.menuItems?.[menuIndex]\r\n ?.submenu?.[subMenuIndex]\r\n ?.submenu?.[childIndex]\r\n ?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].submenu[\r\n subMenuIndex\r\n ].submenu[\r\n childIndex\r\n ].label.caption =\r\n translatedChildCaption;\r\n }\r\n }\r\n );\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n private applySettingTranslations(\r\n selectedLanguage: Record<string, string>\r\n ): void {\r\n const settingCaption =\r\n this.settings?.label?.caption;\r\n\r\n if (\r\n settingCaption &&\r\n this.settingMenu?.label\r\n ) {\r\n this.settingMenu.label.caption =\r\n selectedLanguage[settingCaption] ??\r\n settingCaption;\r\n }\r\n\r\n this.settings?.submenu?.forEach(\r\n (menu: any, index: number) => {\r\n const originalCaption =\r\n menu?.label?.caption;\r\n\r\n if (\r\n !originalCaption ||\r\n !this.settingMenu?.submenu?.[index]\r\n ?.label\r\n ) {\r\n return;\r\n }\r\n\r\n this.settingMenu.submenu[\r\n index\r\n ].label.caption =\r\n selectedLanguage[originalCaption] ??\r\n originalCaption;\r\n }\r\n );\r\n }\r\n}","<div class=\"left-wrap sidemenu\" [class.collapsed]=\"isCollapsed\"\r\n [ngStyle]=\"{ 'z-index': !isCollapsed && isMobile ? 999999 : 'auto' }\" #sideMenu>\r\n <!-- Move toggle button OUTSIDE menu container -->\r\n <div class=\"side-toggle-handle\" id=\"toggle-id\" (click)=\"toggleCollapsed()\" [class.collapsed]=\"isCollapsed\">\r\n <span id=\"toggle-icon\" nz-icon [nzType]=\"isCollapsed ? 'caret-right' : 'caret-left'\"></span>\r\n </div>\r\n <div class=\"side-menu\" id=\"sidemenuwrap\"\r\n [ngStyle]=\"{ width: (isMobile && isCollapsed) ? '1px' : isCollapsed ? '60px' : '' }\">\r\n <!-- user content -->\r\n <ng-container *ngIf=\"loginedUserInfo && loginedUserInfo?.name\">\r\n <div class=\"user-profile\" [class.collapsed]=\"isCollapsed\">\r\n <img class=\"avatar\" [src]=\"loginedUserInfo?.image\" alt=\"User\" />\r\n <div [class]=\"isMobile ? '' : 'details'\" *ngIf=\"!isCollapsed\">\r\n <div class=\"name\">{{ loginedUserInfo.name }}</div>\r\n <div class=\"email\">{{ loginedUserInfo?.email }}</div>\r\n <div class=\"actions\" *ngIf=\"loginedUserInfo?.actions?.length\">\r\n <button *ngFor=\"let action of loginedUserInfo?.actions\" nz-button nzType=\"link\" nzSize=\"small\"\r\n (click)=\"invokeNavigate(action)\">\r\n <span>{{ action?.label?.caption }}</span>\r\n <span nz-icon [nzType]=\"action.icon\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- dynamic menu -->\r\n <ul nz-menu nzMode=\"inline\" nzTheme=\"dark\" [nzInlineCollapsed]=\"isCollapsed\">\r\n <ng-container *ngFor=\"let item of menuItems\">\r\n <ng-container *ngIf=\"!item.submenu && item?.options?.action != 'logout'; else submenu\">\r\n <span\r\n [class]=\"environment?.login?.type === 'oktaAuth' || environment?.login?.type === 'keycloak' ? item.options?.login === true ? loginedUserInfo?.name ? '' : 'hidden' : item.options?.login === false ? loginedUserInfo?.name ? 'hidden' : '' : '' : userInfo?.userId ? item.options?.login ? item.options.role ? item.options.role == userInfo.userRole ? '' : 'hidden' : '' : 'hidden' : !item.options?.login ? '' : 'hidden' \">\r\n <li (click)=\"invokeNavigate(item)\" nz-menu-item nz-tooltip nzTooltipPlacement=\"right\"\r\n [nzTooltipTitle]=\"isCollapsed && !isMobile ? item?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"item.icon\"></span>\r\n <span>{{ item?.label?.caption }}</span>\r\n </li>\r\n </span>\r\n </ng-container>\r\n <ng-template #submenu>\r\n <span\r\n [class]=\"item.options?.login === true && (environment?.login?.type === 'oktaAuth' || environment?.login?.type === 'keycloak') ? loginedUserInfo?.name ? '' : 'hidden' : item.options?.login === false ? loginedUserInfo?.name ? 'hidden' : '' : ''\">\r\n <li nz-submenu *ngIf=\"item?.options?.action != 'logout'\" [nzTitle]=\"item?.label?.caption\"\r\n [nzIcon]=\"item.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let child of item.submenu\">\r\n <li (click)=\"invokeNavigate(child)\" *ngIf=\"!child.submenu\" nz-menu-item nz-tooltip\r\n nzTooltipPlacement=\"right\" [nzTooltipTitle]=\"isCollapsed && !isMobile ? child?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"child?.icon\"></span>\r\n <span>{{ child?.label?.caption }}</span>\r\n </li>\r\n <ng-container *ngIf=\"child.submenu\">\r\n <li nz-submenu [nzTitle]=\"child?.label?.caption\" [nzIcon]=\"child?.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let subChild of child.submenu\">\r\n <li (click)=\"invokeNavigate(subChild)\" nz-menu-item>\r\n <ng-container *ngIf=\"subChild?.options?.setImageUrl; else antIcon\">\r\n <img *ngIf=\"isUrl(subChild?.icon)\" [src]=\"subChild?.icon\" alt=\"icon\"\r\n style=\"width: 16px; height: 16px; margin-right: 8px;\" />\r\n </ng-container>\r\n <ng-template #antIcon>\r\n <span nz-icon [nzType]=\"subChild?.icon\"></span>\r\n </ng-template>\r\n <span>{{ subChild?.label?.caption }}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- separator -->\r\n <li *ngIf=\"settingMenu.submenu\" class=\"menu-separator\"></li>\r\n\r\n <!-- settings menu -->\r\n <ng-container *ngIf=\"!settingMenu.submenu; else settingSubmenu\" style=\"position: absolute; bottom: 0;\">\r\n <li (click)=\"invokeNavigate(settingMenu)\" nz-menu-item nz-tooltip nzTooltipPlacement=\"right\"\r\n [nzTooltipTitle]=\"isCollapsed && !isMobile ? settingMenu?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"settingMenu.icon\"></span>\r\n <span>{{ settingMenu?.label?.caption }}</span>\r\n </li>\r\n </ng-container>\r\n <ng-template #settingSubmenu>\r\n <li nz-submenu [nzTitle]=\"settingMenu?.label?.caption\" [nzIcon]=\"settingMenu.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let child of settingMenu.submenu\">\r\n <li (click)=\"invokeNavigate(child)\" *ngIf=\"!child.submenu\" nz-menu-item nz-tooltip\r\n nzTooltipPlacement=\"right\" [nzTooltipTitle]=\"isCollapsed && !isMobile ? child?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"child?.icon\"></span>\r\n <span>{{ child?.label?.caption }}</span>\r\n </li>\r\n <ng-container *ngIf=\"child.submenu\">\r\n <li nz-submenu [nzTitle]=\"child?.label?.caption\" [nzIcon]=\"child?.icon\">\r\n <ul style=\"width: 260px;\">\r\n <ng-container *ngFor=\"let subChild of child.submenu; let i = index\">\r\n <li (click)=\"invokeNavigate(subChild, child)\" nz-menu-item>\r\n <span [class]=\"child?.label?.caption === 'Languages' ? '' : 'menu-row'\">\r\n <ng-container *ngIf=\"subChild?.options?.changeProject; else antIcon\">\r\n <img [src]=\"subChild?.icon\" alt=\"icon\"\r\n style=\"width: 16px; height: 16px; margin-right: 8px;\" />\r\n </ng-container>\r\n <ng-template #antIcon>\r\n <span nz-icon [nzType]=\"subChild?.icon\"></span>\r\n </ng-template>\r\n <span>{{ subChild?.label?.caption }}</span>\r\n <!-- Delete icon (prevent click bubbling) -->\r\n <span *ngIf=\"child?.label?.caption != 'Languages'\" nz-icon nzType=\"delete\" class=\"delete-icon\"\r\n style=\"padding-left: 5%;\" (click)=\"deleteMenuItem(subChild, i, $event)\"></span>\r\n </span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n\r\n </ul>\r\n </div>\r\n</div>","// lib/view-toolkit.module.ts\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from '@angular/core';\r\nimport { CardComponent } from \"./containers/card/card.component\";\r\nimport { FormComponent } from \"./containers/form/form.component\";\r\nimport { PaginationComponent } from \"./containers/pagination/pagination.component\";\r\nimport { GridComponent } from \"./containers/grid/grid.component\";\r\nimport { HeaderMenuComponent } from \"./containers/header-menu/header-menu.component\";\r\nimport { LogsComponent } from \"./containers/logs/logs.component\";\r\nimport { ModelComponent } from \"./containers/model/model.component\";\r\nimport { Autocomplete } from \"./components/autocomplete/autocomplete\";\r\nimport { Button } from \"./components/button/button\";\r\nimport { Date } from \"./components/date/date\";\r\nimport { Dropdown } from \"./components/dropdown/dropdown\";\r\nimport { ErrorMessage } from \"./components/error-message/error-message\";\r\nimport { Label } from \"./components/label/label\";\r\nimport { String } from \"./components/string/string\";\r\nimport { Textbox } from \"./components/textbox/textbox\";\r\nimport { Time } from \"./components/time/time\";\r\nimport { SideMenuComponent } from \"./containers/side-menu/side-menu.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n CardComponent,\r\n FormComponent,\r\n GridComponent,\r\n HeaderMenuComponent,\r\n LogsComponent,\r\n ModelComponent,\r\n PaginationComponent,\r\n SideMenuComponent,\r\n\r\n Autocomplete,\r\n Button,\r\n Date,\r\n Dropdown,\r\n ErrorMessage,\r\n Label,\r\n String,\r\n Textbox,\r\n Time\r\n ],\r\n exports: [\r\n CardComponent,\r\n FormComponent,\r\n GridComponent,\r\n HeaderMenuComponent,\r\n LogsComponent,\r\n ModelComponent,\r\n PaginationComponent,\r\n SideMenuComponent\r\n\r\n ]\r\n})\r\nexport class ViewToolkitModule { }","// AUTO-GENERATED. Do not edit.\nexport const APP_VERSION = '1.0.204';\n","import { Injectable } from '@angular/core';\r\nimport { Preferences } from '@capacitor/preferences';\r\nimport { APP_VERSION } from '../app-version';\r\nimport { Platform } from '@angular/cdk/platform';\r\n\r\nconst VERSION_KEY = 'APP_VERSION';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppVersionResetService {\r\n\r\n constructor(\r\n private platform: Platform) {\r\n }\r\n\r\n\r\n async run(): Promise<void> {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n await this.clearNativeIfChanged();\r\n // this.clearWebIfChanged();\r\n // return;\r\n }\r\n }\r\n\r\n private async clearNativeIfChanged(): Promise<void> {\r\n const { value: savedVersion } = await Preferences.get({ key: VERSION_KEY });\r\n if (savedVersion === APP_VERSION) return;\r\n console.log(`🧹 Clearing Capacitor Preferences (new build ${APP_VERSION})`);\r\n await Preferences.clear();\r\n this.clearWebStores();\r\n await Preferences.set({ key: VERSION_KEY, value: APP_VERSION });\r\n }\r\n\r\n // private clearWebIfChanged(): void {\r\n // const savedVersion = sessionStorage.getItem(VERSION_KEY) || localStorage.getItem(VERSION_KEY);\r\n // if (savedVersion === APP_VERSION) return;\r\n // this.clearWebStores();\r\n // localStorage.setItem(VERSION_KEY, APP_VERSION);\r\n // sessionStorage.setItem(VERSION_KEY, APP_VERSION);\r\n // }\r\n\r\n private clearWebStores(): void {\r\n try { localStorage.clear(); } catch { }\r\n try { sessionStorage.clear(); } catch { }\r\n try {\r\n if (typeof document !== 'undefined' && document.cookie) {\r\n document.cookie.split(';').forEach((c) => {\r\n const eqPos = c.indexOf('=');\r\n const name = eqPos > -1 ? c.substring(0, eqPos).trim() : c.trim();\r\n if (name) {\r\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;\r\n }\r\n });\r\n }\r\n } catch { }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of view-toolkit\r\n */\r\n\r\nexport * from './lib/view-toolkit.module';\r\n\r\n// container\r\nexport * from './lib/containers/card/card.component';\r\nexport * from './lib/containers/form/form.component';\r\nexport * from './lib/containers/grid/grid.component';\r\nexport * from './lib/containers/header-menu/header-menu.component';\r\nexport * from './lib/containers/logs/logs.component';\r\nexport * from './lib/containers/model/model.component';\r\nexport * from './lib/containers/pagination/pagination.component';\r\nexport * from './lib/containers/side-menu/side-menu.component';\r\n\r\n// services\r\nexport * from './lib/services/app-version-reset.service';\r\nexport * from './lib/services/config.service';\r\nexport * from './lib/services/couchdb';\r\nexport * from './lib/services/mobile-keycloak.service';\r\nexport * from './lib/services/network-log.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/request.service';\r\nexport * from './lib/services/utility.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["String","i1","i2.RequestService","i1.UtilityService","i2","i1.Couchdb","i2.UtilityService","i3","i4.ConfigService","i6.NotificationService","i8.RequestService","i10","i16","StringComponent","i9","i1.RequestService","i3.NotificationService","i5","i6","i7","i8","i3.UtilityService","i4.Couchdb","i1.NetworkLogService","i4","Date","i1.ConfigService","i2.MobileKeycloakService","i3.Couchdb","i6.RequestService","i7.UtilityService","i9.NotificationService","i11","i12","i14","i15"],"mappings":"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"}
1
+ {"version":3,"file":"yomotech-view-toolkit.mjs","sources":["../../../projects/view-toolkit/src/lib/containers/pagination/pagination.component.ts","../../../projects/view-toolkit/src/lib/containers/pagination/pagination.component.html","../../../projects/view-toolkit/src/lib/components/string/string.ts","../../../projects/view-toolkit/src/lib/components/string/string.html","../../../projects/view-toolkit/src/lib/services/request.service.ts","../../../projects/view-toolkit/src/lib/services/utility.service.ts","../../../projects/view-toolkit/src/lib/services/couchdb.ts","../../../projects/view-toolkit/src/lib/services/config.service.ts","../../../projects/view-toolkit/src/lib/services/notification.service.ts","../../../projects/view-toolkit/src/lib/containers/card/card.component.ts","../../../projects/view-toolkit/src/lib/containers/card/card.component.html","../../../projects/view-toolkit/src/lib/containers/form/form.component.ts","../../../projects/view-toolkit/src/lib/containers/form/form.component.html","../../../projects/view-toolkit/src/lib/containers/grid/grid.component.ts","../../../projects/view-toolkit/src/lib/containers/grid/grid.component.html","../../../projects/view-toolkit/src/lib/containers/header-menu/header-menu.component.ts","../../../projects/view-toolkit/src/lib/containers/header-menu/header-menu.component.html","../../../projects/view-toolkit/src/lib/services/network-log.service.ts","../../../projects/view-toolkit/src/lib/containers/logs/logs.component.ts","../../../projects/view-toolkit/src/lib/containers/logs/logs.component.html","../../../projects/view-toolkit/src/lib/components/label/label.ts","../../../projects/view-toolkit/src/lib/components/label/label.html","../../../projects/view-toolkit/src/lib/components/textbox/textbox.ts","../../../projects/view-toolkit/src/lib/components/textbox/textbox.html","../../../projects/view-toolkit/src/lib/components/autocomplete/autocomplete.ts","../../../projects/view-toolkit/src/lib/components/autocomplete/autocomplete.html","../../../projects/view-toolkit/src/lib/containers/model/model.component.ts","../../../projects/view-toolkit/src/lib/containers/model/model.component.html","../../../projects/view-toolkit/src/lib/components/button/button.ts","../../../projects/view-toolkit/src/lib/components/button/button.html","../../../projects/view-toolkit/src/lib/components/date/date.ts","../../../projects/view-toolkit/src/lib/components/date/date.html","../../../projects/view-toolkit/src/lib/components/dropdown/dropdown.ts","../../../projects/view-toolkit/src/lib/components/dropdown/dropdown.html","../../../projects/view-toolkit/src/lib/components/error-message/error-message.ts","../../../projects/view-toolkit/src/lib/components/error-message/error-message.html","../../../projects/view-toolkit/src/lib/components/time/time.ts","../../../projects/view-toolkit/src/lib/components/time/time.html","../../../projects/view-toolkit/src/lib/services/mobile-keycloak.service.ts","../../../projects/view-toolkit/src/lib/containers/side-menu/side-menu.component.ts","../../../projects/view-toolkit/src/lib/containers/side-menu/side-menu.component.html","../../../projects/view-toolkit/src/lib/view-toolkit.module.ts","../../../projects/view-toolkit/src/lib/app-version.ts","../../../projects/view-toolkit/src/lib/services/app-version-reset.service.ts","../../../projects/view-toolkit/src/public-api.ts","../../../projects/view-toolkit/src/yomotech-view-toolkit.ts"],"sourcesContent":["import {\r\n Platform,\r\n PlatformModule\r\n} from '@angular/cdk/platform';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\n\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrl: './pagination.component.css',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n PlatformModule\r\n ]\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n @Input() itemInfo: any = {\r\n layoutSchema: {},\r\n propertySchema: {},\r\n data: []\r\n };\r\n\r\n @Input() pageSize: any;\r\n @Input() currentPage: number = 0;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() pages: number[] = [];\r\n\r\n @Output() pageSizeChange =\r\n new EventEmitter<any>();\r\n\r\n @Output() onGoToPage =\r\n new EventEmitter<any>();\r\n\r\n isMobile: boolean = false;\r\n\r\n constructor(\r\n private platform: Platform\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n private updateDeviceMode(): void {\r\n const isNativeMobile =\r\n this.platform.ANDROID ||\r\n this.platform.IOS;\r\n\r\n const isSmallScreen =\r\n typeof window !== 'undefined' &&\r\n window.innerWidth <= 768;\r\n\r\n this.isMobile =\r\n isNativeMobile || isSmallScreen;\r\n }\r\n\r\n get isFirstPage(): boolean {\r\n return (\r\n !this.pages?.length ||\r\n this.currentPage <= 0\r\n );\r\n }\r\n\r\n get isLastPage(): boolean {\r\n return (\r\n !this.pages?.length ||\r\n this.currentPage >=\r\n this.pages.length - 1\r\n );\r\n }\r\n\r\n /*\r\n * Desktop returns the original schema style unchanged.\r\n * Mobile overrides only the layout direction.\r\n */\r\n get paginationStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.style\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'flex-direction': 'column',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n gap: '8px',\r\n width: '100%',\r\n padding: '8px',\r\n overflow: 'hidden',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n get listStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.listStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n 'flex-wrap': 'nowrap',\r\n gap: '4px',\r\n width: '100%',\r\n margin: '0',\r\n padding: '0',\r\n overflow: 'hidden',\r\n 'list-style': 'none',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n get sizeControlStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.sizeControlStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n display: 'flex',\r\n 'align-items': 'center',\r\n 'justify-content': 'center',\r\n gap: '8px',\r\n width: '100%',\r\n 'min-width': '0',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n getPaginationCaption(){\r\n let caption = this.itemInfo?.layoutSchema?.pagination?.caption;\r\n if(caption && this.selectedLanguageInfo && this.selectedLanguageInfo.selectedLanguage && this.selectedLanguageInfo.selectedLanguage[caption]){\r\n caption = this.selectedLanguageInfo.selectedLanguage[caption];\r\n }\r\n return caption;\r\n }\r\n\r\n get labelStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.labelStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n 'white-space': 'nowrap',\r\n 'font-size': baseStyle['font-size'] || '13px'\r\n };\r\n }\r\n\r\n get selectStyle(): Record<string, any> {\r\n const baseStyle = this.getStyle(\r\n this.itemInfo?.layoutSchema\r\n ?.pagination?.selectStyle\r\n );\r\n\r\n if (!this.isMobile) {\r\n return baseStyle;\r\n }\r\n\r\n return {\r\n ...baseStyle,\r\n width: '68px',\r\n 'min-width': '68px',\r\n 'max-width': '68px'\r\n };\r\n }\r\n\r\n get pageSummaryStyle(): Record<string, any> {\r\n const pagination =\r\n this.itemInfo?.layoutSchema\r\n ?.pagination || {};\r\n\r\n const baseStyle = this.getStyle(\r\n pagination.itemStyle\r\n );\r\n\r\n const activeStyle = this.getStyle(\r\n pagination.activeItemStyle\r\n );\r\n\r\n return {\r\n ...baseStyle,\r\n ...activeStyle,\r\n width: '64px',\r\n 'min-width': '64px',\r\n height: '32px',\r\n padding: '0 6px',\r\n cursor: 'default',\r\n 'pointer-events': 'none',\r\n 'white-space': 'nowrap',\r\n 'box-sizing': 'border-box'\r\n };\r\n }\r\n\r\n getStyle(\r\n styleObject: any\r\n ): Record<string, any> {\r\n if (\r\n !styleObject ||\r\n typeof styleObject !== 'object'\r\n ) {\r\n return {};\r\n }\r\n\r\n const {\r\n classes,\r\n ...styleWithoutClasses\r\n } = styleObject;\r\n\r\n return styleWithoutClasses;\r\n }\r\n\r\n getPageItemStyle(\r\n page?: number,\r\n disabled: boolean = false\r\n ): Record<string, any> {\r\n const pagination =\r\n this.itemInfo?.layoutSchema\r\n ?.pagination || {};\r\n\r\n const baseStyle = this.getStyle(\r\n pagination.itemStyle\r\n );\r\n\r\n const activeStyle =\r\n page !== undefined &&\r\n this.currentPage === page\r\n ? this.getStyle(\r\n pagination.activeItemStyle\r\n )\r\n : {};\r\n\r\n const disabledStyle = disabled\r\n ? this.getStyle(\r\n pagination.disabledItemStyle\r\n )\r\n : {};\r\n\r\n /*\r\n * Desktop gets no additional styling.\r\n */\r\n const mobileStyle = this.isMobile\r\n ? {\r\n width: '32px',\r\n 'min-width': '32px',\r\n height: '32px',\r\n padding: '0'\r\n }\r\n : {};\r\n\r\n return {\r\n ...baseStyle,\r\n ...activeStyle,\r\n ...disabledStyle,\r\n ...mobileStyle,\r\n 'pointer-events': disabled\r\n ? 'none'\r\n : 'auto'\r\n };\r\n }\r\n\r\n invokeOnPageSizeChange(\r\n pageSize: any\r\n ): void {\r\n const normalizedPageSize =\r\n Number(pageSize);\r\n\r\n if (\r\n !Number.isFinite(\r\n normalizedPageSize\r\n ) ||\r\n normalizedPageSize <= 0\r\n ) {\r\n return;\r\n }\r\n\r\n this.pageSizeChange.emit(\r\n normalizedPageSize\r\n );\r\n }\r\n\r\n invokeGoToPage(page: number): void {\r\n if (\r\n page < 0 ||\r\n page > this.pages.length - 1 ||\r\n page === this.currentPage\r\n ) {\r\n return;\r\n }\r\n\r\n this.onGoToPage.emit(page);\r\n }\r\n}","<div [ngStyle]=\"paginationStyle\">\r\n\r\n <ul [ngStyle]=\"listStyle\" [style.z-index]=\"'auto'\">\r\n\r\n <!-- Existing desktop pagination: unchanged -->\r\n <ng-container *ngIf=\"!isMobile\">\r\n\r\n <li (click)=\"invokeGoToPage(0)\" [ngStyle]=\"getPageItemStyle(undefined, currentPage === 0)\">\r\n ««\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(currentPage - 1)\" [ngStyle]=\"getPageItemStyle(undefined, currentPage === 0)\">\r\n «\r\n </li>\r\n\r\n <li *ngFor=\"let page of pages\" (click)=\"invokeGoToPage(page)\" [ngStyle]=\"getPageItemStyle(page)\">\r\n {{ page + 1 }}\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(currentPage + 1)\" [ngStyle]=\"\r\n getPageItemStyle(\r\n undefined,\r\n currentPage === pages.length - 1\r\n )\r\n \">\r\n »\r\n </li>\r\n\r\n <li (click)=\"invokeGoToPage(pages.length - 1)\" [ngStyle]=\"\r\n getPageItemStyle(\r\n undefined,\r\n currentPage === pages.length - 1\r\n )\r\n \">\r\n »»\r\n </li>\r\n\r\n </ng-container>\r\n\r\n <!-- Compact mobile pagination -->\r\n <ng-container *ngIf=\"isMobile\">\r\n\r\n <!-- First -->\r\n <li (click)=\"invokeGoToPage(0)\" [ngStyle]=\"getPageItemStyle(undefined, isFirstPage)\">\r\n ««\r\n </li>\r\n\r\n <!-- Previous -->\r\n <li (click)=\"invokeGoToPage(currentPage - 1)\" [ngStyle]=\"getPageItemStyle(undefined, isFirstPage)\">\r\n «\r\n </li>\r\n\r\n <!-- Current page / total pages -->\r\n <li [ngStyle]=\"pageSummaryStyle\">\r\n {{ currentPage + 1 }} / {{ pages.length }}\r\n </li>\r\n\r\n <!-- Next -->\r\n <li (click)=\"invokeGoToPage(currentPage + 1)\" [ngStyle]=\"getPageItemStyle(undefined, isLastPage)\">\r\n »\r\n </li>\r\n\r\n <!-- Last -->\r\n <li (click)=\"invokeGoToPage(pages.length - 1)\" [ngStyle]=\"getPageItemStyle(undefined, isLastPage)\">\r\n »»\r\n </li>\r\n\r\n </ng-container>\r\n\r\n </ul>\r\n\r\n <div *ngIf=\"itemInfo?.layoutSchema?.pagination?.pageSize\" [ngStyle]=\"sizeControlStyle\">\r\n <label for=\"pageSize\" [ngStyle]=\"labelStyle\">\r\n {{ getPaginationCaption() }}\r\n </label>\r\n\r\n <select id=\"pageSize\" [(ngModel)]=\"pageSize\" (change)=\"invokeOnPageSizeChange(pageSize)\"\r\n [ngStyle]=\"selectStyle\">\r\n <option *ngFor=\"\r\n let size of\r\n itemInfo?.layoutSchema\r\n ?.pagination?.pageSizeOptions ||\r\n [5, 10, 15, 20]\r\n \" [value]=\"size\">\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-string',\r\n standalone: true,\r\n templateUrl: './string.html',\r\n styleUrl: './string.css',\r\n})\r\nexport class String {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n}\r\n","<h5>{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n</h5>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RequestService {\r\n pageSize: number = 0;\r\n private readonly backendUrl = '/api';\r\n readonly apiUrl = `${this.backendUrl}/project`\r\n constructor(private http: HttpClient) { }\r\n\r\n getAllProject() {\r\n return this.http.get(\"../assets/main/layout_schema.json\");\r\n }\r\n\r\n getEnvironmet(selectedProject: any) {\r\n return this.http.get(`../../assets/projects/${selectedProject}/environments/environment.json`);\r\n }\r\n\r\n getSectionInfo(url: string, envUrl?: any, passToken: boolean = false, selectedProject: string = '', userInfo: any = null) {\r\n if (envUrl) {\r\n if (passToken && selectedProject) {\r\n return this.http.get(envUrl + url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.get(envUrl + url);\r\n }\r\n } else {\r\n return this.http.get(url);\r\n };\r\n }\r\n\r\n readFile(projectName: any, path: any) {\r\n return this.http.post(`${this.apiUrl}/read`, {\r\n projectName: projectName,\r\n filePath: path\r\n })\r\n }\r\n\r\n getMainLayout(selectedProject: any) {\r\n return this.http.get(`../assets/projects/${selectedProject}/main/layout_schema.json`)\r\n }\r\n\r\n getInfo(url: string) {\r\n return this.http.get(url);\r\n }\r\n\r\n dynamicCall(method: string = \"get\", body: any = null, url: string, passToken: boolean = false, selectedProject: string = '', userInfo: any = null) {\r\n switch (method.toLowerCase()) {\r\n case 'get':\r\n if (passToken && selectedProject) {\r\n return this.http.get(url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.get(url);\r\n }\r\n\r\n case 'post':\r\n if (passToken && selectedProject) {\r\n return this.http.post(url, body, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.post(url, body);\r\n }\r\n case 'put':\r\n if (passToken && selectedProject) {\r\n return this.http.put(url, body, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.put(url, body);\r\n }\r\n case 'delete':\r\n if (passToken && selectedProject) {\r\n return this.http.delete(url, {\r\n headers: this.createAuthorizationHeader(userInfo),\r\n })\r\n } else {\r\n return this.http.delete(url);\r\n };\r\n case 'patch':\r\n return this.http.patch(url, body);\r\n default:\r\n throw new Error(`Unsupported HTTP method: ${method}`);\r\n }\r\n }\r\n\r\n createAuthorizationHeader(userInfo: any, tokenExist: boolean = false) {\r\n let authHeaders: HttpHeaders = new HttpHeaders();\r\n let token = tokenExist ? userInfo : userInfo && userInfo.jwt ? userInfo.jwt : userInfo?.authToken ? userInfo?.authToken : '';\r\n return authHeaders.set(\r\n 'Authorization',\r\n 'Bearer ' + token\r\n )\r\n }\r\n\r\n getLoginUser(token: any) {\r\n return this.http.get(\"https://dev-78992019.okta.com/oauth2/default/v1/userinfo\", {\r\n headers: this.createAuthorizationHeader(token, true),\r\n })\r\n }\r\n\r\n saveDb(token: any, userInfo: any, order: any = {}) {\r\n if (token) {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `Bearer ${token}`,\r\n 'Accept': 'application/json'\r\n });\r\n let url2: any = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording?company=${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant ? userInfo.p5_plant : \" \"}&appVersion=1&resourceNo=${userInfo.p5_resource_no}`\r\n console.log('userInfo: ', userInfo);\r\n this.http.post(url2, order, { headers }).subscribe({\r\n next: res => {\r\n console.log('Save-res: ', res);\r\n }\r\n })\r\n }\r\n }\r\n\r\n getSaveOrder(\r\n token: string,\r\n userInfo: any,\r\n fromDate: string,\r\n toDate: string\r\n ) {\r\n if (!token) {\r\n throw new Error('Missing authentication token');\r\n }\r\n if (!userInfo?.p5_backend_url) {\r\n throw new Error('Missing p5_backend_url');\r\n }\r\n const headers = new HttpHeaders({\r\n Authorization: `Bearer ${token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json'\r\n });\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n let backendPath: string;\r\n\r\n try {\r\n backendPath = new URL(\r\n userInfo.p5_backend_url\r\n ).pathname;\r\n } catch {\r\n backendPath = userInfo.p5_backend_url;\r\n }\r\n\r\n backendPath = `/${backendPath}`\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/+$/, '');\r\n\r\n const url =\r\n `${backendPath}` +\r\n '/assetsmobileservice/Zeiterfassung/' +\r\n 'requestBookedTimeRecording';\r\n\r\n const params = new HttpParams()\r\n .set(\r\n 'resourceNo',\r\n userInfo.p5_resource_no || ''\r\n )\r\n .set('workDayFrom', fromDate)\r\n .set('workDayTo', toDate)\r\n .set('company', company)\r\n .set('appVersion', '1');\r\n\r\n console.log('[Saved orders][Web] URL:', url);\r\n console.log(\r\n '[Saved orders][Web] Params:',\r\n params.toString()\r\n );\r\n\r\n return this.http.post(\r\n url,\r\n {},\r\n {\r\n headers,\r\n params\r\n }\r\n );\r\n }\r\n}\r\n\r\n","import { Platform } from '@angular/cdk/platform';\r\nimport { Injectable } from '@angular/core';\r\nimport { Preferences } from '@capacitor/preferences';\r\nimport { RequestService } from './request.service';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilityService {\r\n stripe: any = null;\r\n\r\n constructor(private platform: Platform,\r\n private requestService: RequestService) { }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getProperty(scope: any, itemInfo?: any) {\r\n const property = scope?.reference ? scope?.reference.split('/').pop() : '';\r\n return { key: property, productSchema: itemInfo.propertySchema[property] };\r\n }\r\n\r\n async setStorage(key: string, value: any) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.set({ key, value });\r\n } else {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n async getStorage(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n const { value } = await Preferences.get({ key });\r\n return value;\r\n } else {\r\n const storage = sessionStorage.getItem(key);\r\n return storage;\r\n }\r\n }\r\n\r\n async setLocalStorage(key: string, value: any) {\r\n const stringValue = JSON.stringify(value);\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.set({ key, value: stringValue });\r\n } else {\r\n localStorage.setItem(key, stringValue);\r\n }\r\n }\r\n\r\n async removeLocalStorage(keyName: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.remove({ key: keyName });\r\n } else {\r\n localStorage.removeItem(keyName);\r\n }\r\n }\r\n\r\n async removeStorage(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n await Preferences.remove({ key });\r\n } else {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n\r\n async getLocalStorage<T = unknown>(key: string) {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n const { value } = await Preferences.get({ key });\r\n return value ? JSON.parse(value) : null;\r\n } else {\r\n const value = localStorage.getItem(key);\r\n\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(value) as T;\r\n } catch {\r\n return value;\r\n }\r\n }\r\n }\r\n\r\n async showAllProjects() {\r\n await this.removeStorage('selectedProject');\r\n window.location.reload();\r\n }\r\n\r\n parseBodyObject(obj: any): any {\r\n const jsonString = JSON.stringify(obj);\r\n const replacedString = jsonString.replace(/{{(.*?)}}/g, (match, expression) => {\r\n try {\r\n return new Function(`return ${expression.trim()};`).call(this);\r\n } catch (error) {\r\n console.error(`Error evaluating expression: ${expression}`, error);\r\n return match;\r\n }\r\n });\r\n return JSON.parse(replacedString);\r\n }\r\n\r\n getTotalPrice(tableitemInfo: any): number {\r\n const total = tableitemInfo.data.reduce((total: any, item: any) => {\r\n if (item.quantity && !isNaN(item.quantity)) {\r\n return total + (item.unitPrice * item.quantity);\r\n }\r\n return total;\r\n }, 0);\r\n return total.toFixed(2);\r\n }\r\n\r\n getTotalQuantity(tableitemInfo: any) {\r\n let quantity = 0;\r\n tableitemInfo.data.forEach((cartItem: any) => {\r\n if (cartItem.quantity) {\r\n quantity = cartItem.quantity + quantity;\r\n }\r\n });\r\n return quantity;\r\n }\r\n\r\n replacePaginationParams(url: string, currentPage: number, pageSize: number): string {\r\n if (url && url.includes('{{pageNumber}}')) {\r\n url = url.replace(/{{pageNumber}}/g, currentPage.toString());\r\n }\r\n\r\n if (url && url.includes('{{pageSize}}') && pageSize !== undefined) {\r\n url = url.replace(/{{pageSize}}/g, pageSize.toString());\r\n }\r\n return url;\r\n }\r\n\r\n customButton(option: any, propertySchema: any, projectSeleted: any, environment: any) {\r\n if (option.url) {\r\n let body = {}\r\n if (option.propertyKey) {\r\n body = Object.keys(propertySchema[option.propertyKey]).reduce((acc, key) => {\r\n acc[key] = propertySchema[option.propertyKey][key]?.value;\r\n return acc;\r\n }, {} as Record<string, string>);\r\n }\r\n let url = environment?.apiUrl + option.url;\r\n this.requestService.dynamicCall(option.method, body, url, option.passToken, projectSeleted).subscribe((res) => {\r\n window.location.reload();\r\n })\r\n }\r\n }\r\n\r\n setDefaultUser(item: any, userInfo: any, environment: any) {\r\n let schema: any = item;\r\n let role = \"default\";\r\n if (environment?.login?.type === \"keycloak\") {\r\n if (userInfo?.name && item.options?.userRoleMapping) {\r\n schema = item.options[item.options?.userRoleMapping[role]];\r\n }\r\n } else if (environment?.login?.type === \"jwtToken\") {\r\n if (item.options?.loginResponse && item.options?.loginResponse.storageType == \"sessionStorage\") {\r\n if (userInfo) {\r\n role = userInfo[item.options?.loginResponse.role]?.toLowerCase();\r\n }\r\n schema = item.options[item.options?.userRoleMapping[role]];\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n setTableData(data: any, options: any = {}, tableitemInfo: any, projectSeleted: any) {\r\n if (options?.pagination?.pageSize && options?.pagination?.scrollable) {\r\n tableitemInfo.pageSize = options?.pagination?.pageSize;\r\n }\r\n let records: any;\r\n if (options.dataKey) {\r\n records = data[options.dataKey];\r\n } else if (options.key && data?._embedded) {\r\n records = data?._embedded[options.key];\r\n } else {\r\n if (!data?._embedded?.products && !Array.isArray(data)) {\r\n records = [data];\r\n } else {\r\n records = data?._embedded?.products;\r\n }\r\n }\r\n tableitemInfo.totalRecords = data?.totalPages ? data?.totalPages : data?.page?.totalElements;\r\n tableitemInfo.data = records.map((record: any) => ({\r\n ...record,\r\n ...(record.hasOwnProperty('imageUrl') && record.imageUrl\r\n ? { imageUrl: `${projectSeleted}/Media/` + record.imageUrl.split('/').pop() }\r\n : {})\r\n }));\r\n return tableitemInfo;\r\n }\r\n\r\n setOktaWebCredential(environment: any, projectName: any) {\r\n return {\r\n logo: `favicon.ico`,\r\n baseUrl: environment.login.web.issuer.split('/oauth2')[0],\r\n clientId: environment.login.web.clientId,\r\n redirectUri: environment.login.web.redirectUri,\r\n authParams: {\r\n pkce: true,\r\n issuer: environment.login.web.issuer,\r\n scopes: environment.login.web.scopes\r\n }\r\n }\r\n }\r\n\r\n setOktaMobileCredential(environment: any) {\r\n return {\r\n appId: environment.login.mobile.clientId,\r\n authorizationBaseUrl: environment.login.mobile.authorizationBaseUrl,\r\n accessTokenEndpoint: environment.login.mobile.accessTokenEndpoint,\r\n redirectUrl: environment.login.mobile.redirectUrl,\r\n scope: environment.login.mobile.scope,\r\n responseType: environment.login.mobile.responseType,\r\n pkceEnabled: environment.login.mobile.pkceEnabled\r\n }\r\n }\r\n\r\n\r\n async setupStripePaymentForm(\r\n environment: any,\r\n form: any,\r\n onCardChange: (message: string) => void\r\n ): Promise<void> {\r\n let hasCreditCard = false;\r\n\r\n if (form.layoutSchema?.formSections) {\r\n form.layoutSchema.formSections.forEach((formSection: any) => {\r\n if (formSection.formFields?.length > 0) {\r\n const foundCreditCard = formSection.formFields.some((formField: any) => {\r\n const scopeKey = this.getScope(formField.scope?.reference);\r\n return form.propertySchema[scopeKey] &&\r\n form.propertySchema[scopeKey][formField.scope?.reference.split('/').pop()]?.type === 'carditCard';\r\n });\r\n if (foundCreditCard) {\r\n hasCreditCard = true;\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (hasCreditCard) {\r\n this.stripe = await loadStripe(environment.stripePublishableKey);\r\n const elements = this.stripe.elements();\r\n const cardElement = elements.create('card', { hidePostalCode: true });\r\n cardElement.mount('#card-element');\r\n\r\n cardElement.on('change', (event: { complete: boolean, error?: { message: string } }) => {\r\n if (event.complete) {\r\n onCardChange('');\r\n } else if (event.error) {\r\n onCardChange(event.error.message);\r\n }\r\n });\r\n }\r\n }\r\n\r\n async formData(form: any, environment: any, cartInfo: any): Promise<void> {\r\n if (form.layoutSchema?.formSections) {\r\n for (const formSection of form.layoutSchema.formSections) {\r\n if (formSection.formFields?.length > 0) {\r\n for (const formField of formSection.formFields) {\r\n const scope = this.getScope(formField.scope?.reference);\r\n const fieldKey = formField.scope?.reference.split('/').pop();\r\n const field = form.propertySchema?.[scope]?.[fieldKey];\r\n\r\n if (!field) continue;\r\n\r\n // Checkbox logic with copy action\r\n if (field.type === 'checkbox' && formField.option?.innerAction?.action === 'copy') {\r\n const fromSchema = form.propertySchema[formField.option.innerAction.from];\r\n const toSchema = form.propertySchema[formField.option.innerAction.to];\r\n const keys = Object.keys(fromSchema);\r\n\r\n keys.forEach((key: any) => {\r\n if (toSchema[key]) {\r\n const sourceValue = fromSchema?.[key]?.value;\r\n toSchema[key].value = sourceValue || '';\r\n }\r\n });\r\n }\r\n\r\n // Dropdown logic (async data fetching)\r\n if (field.type === 'dropdown' && formField.option?.data_url) {\r\n try {\r\n const res: any = await lastValueFrom(this.requestService.getInfo(environment.apiUrl + formField.option.data_url));\r\n const key = Object.keys(res._embedded || {})[0];\r\n if (key) {\r\n field.data = res._embedded[key];\r\n }\r\n } catch (err) {\r\n console.error('Failed to load dropdown data', err);\r\n }\r\n }\r\n\r\n // Cart info logic for string fields\r\n if (field.type === 'string' && formField?.option?.cartInfo) {\r\n if (field.value?.toString()?.includes('{{quantity}}')) {\r\n field.value = cartInfo.quantity;\r\n } else if (field.value?.toString()?.includes('{{totalPrice}}')) {\r\n field.value = cartInfo.totalPrice;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // async processData(\r\n // data: any,\r\n // options: {\r\n // dataKey?: string;\r\n // setImageUrl?: boolean;\r\n // showTable?: boolean;\r\n // projectSelected: string;\r\n // },\r\n // tenantName: any\r\n // ): Promise<any[]> {\r\n // if (options.dataKey) {\r\n // data = data[options.dataKey];\r\n // } else {\r\n // if (!data?._embedded?.products && !Array.isArray(data)) {\r\n // data = [data];\r\n // } else {\r\n // data = data?._embedded?.products;\r\n // }\r\n // }\r\n // const transformed = await Promise.all(\r\n // data.map(async (record: any) => {\r\n // let imageUrl = record.imageUrl;\r\n // const imagePath = `Media/` +\r\n // record?.imageUrl?.split('/').pop();\r\n // if (\r\n // tenantName &&\r\n // record?.imageUrl &&\r\n // options.setImageUrl\r\n // ) {\r\n // try {\r\n // imageUrl = \"\";\r\n // imageUrl = await this.couchdbService.getFileContentFromCouchDb(\r\n // `${tenantName}_${options.projectSelected}`,\r\n // imagePath\r\n // );\r\n // } catch (err) {\r\n // console.warn(`Failed to fetch image from CouchDB for ${imagePath}`, err);\r\n // imageUrl = '';\r\n // }\r\n // }\r\n // return {\r\n // ...record,\r\n // ...(imageUrl ? { imageUrl } : {}),\r\n // ...(imagePath ? { imagePath } : {}),\r\n // };\r\n // })\r\n // );\r\n\r\n // return transformed;\r\n // }\r\n\r\n // async setTableDataImages(records: any, tenantName: any, projectSelected: any): Promise<any[]> {\r\n // const transformed = await Promise.all(\r\n // records.map(async (record: any) => {\r\n // let imageUrl = record.imageUrl;\r\n // const imagePath = record?.imagePath ? record?.imagePath : `Media/` +\r\n // record?.imageUrl?.split('/').pop();\r\n // if (\r\n // tenantName &&\r\n // record?.imageUrl &&\r\n // record.hasOwnProperty('imageUrl')\r\n // ) {\r\n // try {\r\n // imageUrl = \"\";\r\n // imageUrl = await this.couchdbService.getFileContentFromCouchDb(\r\n // `${tenantName}_${projectSelected}`,\r\n // imagePath\r\n // );\r\n // } catch (err) {\r\n // console.warn(`Failed to fetch image from CouchDB for ${imagePath}`, err);\r\n // imageUrl = '';\r\n // }\r\n // }\r\n // return {\r\n // ...record,\r\n // ...(imageUrl ? { imageUrl } : {}),\r\n // };\r\n // })\r\n // );\r\n // return transformed;\r\n // }\r\n\r\n // set date in localstorage\r\n normalizeDatesForStorage(obj: any): any {\r\n const normalized: any = {};\r\n Object.entries(obj).forEach(([key, value]: any) => {\r\n if (this.isDateLike(value)) {\r\n const date = value instanceof Date ? value : new Date(value);\r\n normalized[key] = this.toLocalISOString(date);\r\n } else {\r\n normalized[key] = value;\r\n }\r\n });\r\n return normalized;\r\n }\r\n\r\n\r\n isDateLike(value: any): boolean {\r\n if (!value) return false;\r\n\r\n // Actual Date object\r\n if (value instanceof Date && !isNaN(value.getTime())) {\r\n return true;\r\n }\r\n\r\n // ISO string (UTC or local)\r\n if (typeof value === 'string') {\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const tzOffset = date.getTimezoneOffset() * 60000;\r\n return new Date(date.getTime() - tzOffset)\r\n .toISOString()\r\n .slice(0, 19);\r\n }\r\n\r\n // restore date Field from localstorage\r\n restoreDatesFromStorage(records: any[], propertySchema: any): any[] {\r\n if (!Array.isArray(records)) return records;\r\n if (!propertySchema) return records;\r\n\r\n return records.map(record => {\r\n const restored = { ...record };\r\n\r\n Object.keys(propertySchema).forEach(scopeKey => {\r\n const schemaGroup = propertySchema[scopeKey];\r\n if (!schemaGroup) return;\r\n\r\n Object.keys(schemaGroup).forEach(fieldKey => {\r\n const fieldSchema = schemaGroup[fieldKey];\r\n const value = restored[fieldKey];\r\n if (!value || typeof value !== 'string') return;\r\n\r\n // ✅ DATE or TIME fields only\r\n if (fieldSchema.type === 'date' || fieldSchema.type === 'time') {\r\n restored[fieldKey] = this.parseLocalISODate(value);\r\n }\r\n });\r\n });\r\n\r\n return restored;\r\n });\r\n }\r\n\r\n parseLocalISODate(value: string): Date {\r\n // Remove Z to avoid UTC shift\r\n const clean = value.replace('Z', '');\r\n const [datePart, timePart = '00:00:00.000'] = clean.split('T');\r\n\r\n const [y, m, d] = datePart.split('-').map(Number);\r\n const [hh = 0, mm = 0, ss = 0, ms = 0] =\r\n timePart.split(/[:.]/).map(Number);\r\n\r\n return new Date(y, m - 1, d, hh, mm, ss, ms);\r\n }\r\n\r\n // savecard conversion\r\n convertToDailyLogs(cardOrCards: any | any[]): any[] {\r\n // Normalize input to array\r\n const cards = Array.isArray(cardOrCards) ? cardOrCards : [cardOrCards];\r\n\r\n const results: any[] = [];\r\n\r\n for (const card of cards) {\r\n\r\n const fromDate = new Date(card.fromDate);\r\n const toDate = new Date(card.toDate);\r\n\r\n const fromTime = new Date(card.workDayTimeFrom);\r\n const toTime = new Date(card.workDayTimeTo);\r\n\r\n // Normalize dates to midnight\r\n const startDay = new Date(fromDate);\r\n startDay.setHours(0, 0, 0, 0);\r\n\r\n const endDay = new Date(toDate);\r\n endDay.setHours(0, 0, 0, 0);\r\n\r\n let currentDay = new Date(startDay);\r\n\r\n while (currentDay <= endDay) {\r\n const isFirstDay = this.isSameDay(currentDay, fromDate);\r\n const isLastDay = this.isSameDay(currentDay, toDate);\r\n const isSameDay = isFirstDay && isLastDay;\r\n\r\n let workFrom: Date;\r\n let workTo: Date;\r\n\r\n // SAME DAY\r\n if (isSameDay) {\r\n workFrom = this.applyTimeToDay(currentDay, fromTime);\r\n workTo = this.applyTimeToDay(currentDay, toTime);\r\n }\r\n // FIRST DAY\r\n else if (isFirstDay) {\r\n workFrom = this.applyTimeToDay(currentDay, fromTime);\r\n workTo = this.endOfDay(currentDay);\r\n }\r\n // LAST DAY\r\n else if (isLastDay) {\r\n workFrom = this.startOfDay(currentDay);\r\n workTo = this.applyTimeToDay(currentDay, toTime);\r\n }\r\n // MIDDLE DAY\r\n else {\r\n workFrom = this.startOfDay(currentDay);\r\n workTo = this.endOfDay(currentDay);\r\n }\r\n\r\n results.push({\r\n comment: card.comments || \"\",\r\n onCallDuty: false,\r\n timeCredit: false,\r\n workDay: this.toLocalISO(currentDay, 0, 0),\r\n workDayTimeFrom: this.toLocalISO(workFrom),\r\n workDayTimeTo: this.toLocalISO(workTo),\r\n workOrderNo: card.workOrderNo,\r\n workType: \"A\"\r\n });\r\n\r\n currentDay.setDate(currentDay.getDate() + 1);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n private applyTimeToDay(day: Date, time: Date): Date {\r\n const d = new Date(day);\r\n d.setHours(time.getHours(), time.getMinutes(), 0, 0);\r\n return d;\r\n }\r\n\r\n private startOfDay(d: Date): Date {\r\n const x = new Date(d);\r\n x.setHours(0, 0, 0, 0);\r\n return x;\r\n }\r\n\r\n private endOfDay(d: Date): Date {\r\n const x = new Date(d);\r\n x.setHours(23, 59, 0, 0);\r\n return x;\r\n }\r\n\r\n private isSameDay(a: Date, b: Date): boolean {\r\n return (\r\n a.getFullYear() === b.getFullYear() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getDate() === b.getDate()\r\n );\r\n }\r\n\r\n private toLocalISO(date: Date, hour?: number, minute?: number): string {\r\n const d = new Date(date);\r\n\r\n if (hour !== undefined && minute !== undefined) {\r\n d.setHours(hour, minute, 0, 0);\r\n }\r\n\r\n const pad = (n: number) => String(n).padStart(2, '0');\r\n\r\n const year = d.getFullYear();\r\n const month = pad(d.getMonth() + 1);\r\n const day = pad(d.getDate());\r\n const hrs = pad(d.getHours());\r\n const mins = pad(d.getMinutes());\r\n\r\n const offset = -d.getTimezoneOffset();\r\n const sign = offset >= 0 ? '+' : '-';\r\n const offH = pad(Math.floor(Math.abs(offset) / 60));\r\n const offM = pad(Math.abs(offset) % 60);\r\n\r\n return `${year}-${month}-${day}T${hrs}:${mins}:00${sign}${offH}:${offM}`;\r\n }\r\n\r\n getMediaSrc(file: any): string {\r\n if (!file) return '';\r\n if (file.src) {\r\n return file.src;\r\n }\r\n if (file.base64) {\r\n const mimeType = file.mimeType || 'image/png';\r\n return `data:${mimeType};base64,${file.base64}`;\r\n }\r\n if (file.dataUrl) {\r\n return file.dataUrl;\r\n }\r\n return '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { UtilityService } from './utility.service';\r\nimport { Platform } from '@angular/cdk/platform';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class Couchdb {\r\n private readonly couchDbBaseUrl = 'https://couchdb.yomotech.de';\r\n\r\n constructor(private utilityService: UtilityService, private platform: Platform) { }\r\n\r\n async getTenantDatabases(tenantKey: any): Promise<any[]> {\r\n if (!tenantKey || !tenantKey.trim()) {\r\n throw new Error('Missing tenantKey');\r\n }\r\n\r\n const response = await fetch(`https://couchdb.yomotech.de/tenant-dbs`, {\r\n method: 'GET',\r\n headers: {\r\n Accept: 'application/json',\r\n 'X-Tenant-Key': tenantKey.trim(),\r\n },\r\n });\r\n const data = await this.parseJsonOrText(response);\r\n\r\n // if (!response.ok) {\r\n // throw new Error(\r\n // `GET /tenant-dbs -> ${response.status} ${this.stringifyErrorDetails(data)}`\r\n // );\r\n // }\r\n\r\n return data;\r\n }\r\n\r\n private async parseJsonOrText(response: Response): Promise<any> {\r\n const rawText = await response.text();\r\n\r\n if (!rawText) return null;\r\n\r\n try {\r\n return JSON.parse(rawText);\r\n } catch {\r\n return rawText;\r\n }\r\n }\r\n\r\n private stringifyErrorDetails(data: any): string {\r\n if (typeof data === 'string') return data;\r\n\r\n try {\r\n return JSON.stringify(data);\r\n } catch {\r\n return 'Unknown error';\r\n }\r\n }\r\n\r\n async getFileContentFromCouchDb(\r\n couchDbName: string,\r\n filePath: string\r\n ): Promise<any | null> {\r\n try {\r\n\r\n const dbName = couchDbName?.toLowerCase();\r\n const docId = filePath?.trim();\r\n if (!docId) {\r\n console.error('Missing file path');\r\n return null;\r\n }\r\n\r\n const response = await fetch(this.getDocumentUrl(dbName, docId), {\r\n method: 'GET',\r\n headers: await this.getReadHeaders(),\r\n });\r\n\r\n const doc = await this.parseJsonOrText(response);\r\n\r\n if (!response.ok) {\r\n console.error(\r\n `Failed to fetch file \"${docId}\" from \"${dbName}\": ${response.status}`,\r\n doc\r\n );\r\n return null;\r\n }\r\n\r\n if (!doc?.data) {\r\n console.error(`Document \"${docId}\" does not contain file data`);\r\n return null;\r\n }\r\n\r\n // do not decode images as utf8 text\r\n if (\r\n doc.type === 'media' ||\r\n doc.type === 'base64file' ||\r\n this.isBinaryMediaFile(doc.name || doc.path || docId, doc.contentType)\r\n ) {\r\n return {\r\n type: doc.type || 'base64file',\r\n mimeType: this.getMimeType(doc.name || doc.path || docId, doc.contentType),\r\n base64: doc.data,\r\n src: `data:${this.getMimeType(doc.name || doc.path || docId, doc.contentType)};base64,${doc.data}`,\r\n name: doc.name,\r\n path: doc.path,\r\n metadata: doc.metadata || {},\r\n };\r\n }\r\n\r\n const decodedContent = this.fromBase64(doc.data);\r\n\r\n if (this.isJsonFile(doc.name || doc.path || docId, doc.contentType)) {\r\n try {\r\n return JSON.parse(decodedContent);\r\n } catch (jsonError) {\r\n console.error(`Failed to parse JSON for file \"${docId}\"`, jsonError);\r\n return decodedContent;\r\n }\r\n }\r\n\r\n return decodedContent;\r\n } catch (error) {\r\n console.error(\r\n `Unexpected error while fetching file \"${filePath}\" from \"${couchDbName}\"`,\r\n error\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n private isBinaryMediaFile(fileNameOrPath: string, contentType?: string): boolean {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n const type = contentType || '';\r\n\r\n return (\r\n type.startsWith('image/') ||\r\n type.startsWith('video/') ||\r\n type.startsWith('audio/') ||\r\n type === 'application/pdf' ||\r\n\r\n lower.endsWith('.png') ||\r\n lower.endsWith('.jpg') ||\r\n lower.endsWith('.jpeg') ||\r\n lower.endsWith('.ico') ||\r\n lower.endsWith('.svg') ||\r\n lower.endsWith('.webp') ||\r\n lower.endsWith('.gif') ||\r\n\r\n lower.endsWith('.mp4') ||\r\n lower.endsWith('.webm') ||\r\n lower.endsWith('.mp3') ||\r\n lower.endsWith('.wav') ||\r\n lower.endsWith('.m4a') ||\r\n\r\n lower.endsWith('.pdf')\r\n );\r\n }\r\n\r\n private getMimeType(fileNameOrPath: string, contentType?: string): string {\r\n if (contentType) return contentType;\r\n\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n\r\n if (lower.endsWith('.png')) return 'image/png';\r\n if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return 'image/jpeg';\r\n if (lower.endsWith('.ico')) return 'image/x-icon';\r\n if (lower.endsWith('.svg')) return 'image/svg+xml';\r\n if (lower.endsWith('.webp')) return 'image/webp';\r\n if (lower.endsWith('.gif')) return 'image/gif';\r\n\r\n if (lower.endsWith('.mp4')) return 'video/mp4';\r\n if (lower.endsWith('.webm')) return 'video/webm';\r\n\r\n if (lower.endsWith('.mp3')) return 'audio/mpeg';\r\n if (lower.endsWith('.wav')) return 'audio/wav';\r\n if (lower.endsWith('.m4a')) return 'audio/mp4';\r\n\r\n if (lower.endsWith('.pdf')) return 'application/pdf';\r\n\r\n return 'application/octet-stream';\r\n }\r\n\r\n private getImageMimeType(fileNameOrPath: string): string {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n\r\n if (lower.endsWith('.png')) return 'image/png';\r\n if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return 'image/jpeg';\r\n if (lower.endsWith('.ico')) return 'image/x-icon';\r\n if (lower.endsWith('.svg')) return 'image/svg+xml';\r\n\r\n return 'image/png';\r\n }\r\n\r\n private fromBase64(base64: string): string {\r\n try {\r\n return decodeURIComponent(escape(atob(base64)));\r\n } catch {\r\n return atob(base64);\r\n }\r\n }\r\n\r\n private isJsonFile(fileNameOrPath: string, contentType?: string): boolean {\r\n const lower = (fileNameOrPath || '').toLowerCase();\r\n return lower.endsWith('.json') || contentType === 'application/json';\r\n }\r\n\r\n private getDocumentUrl(dbName: string, docId: string): string {\r\n return `${this.getDbUrl(dbName)}/${encodeURIComponent(docId)}`;\r\n }\r\n\r\n private getDbUrl(dbName: string): string {\r\n return `${this.couchDbBaseUrl}/${dbName}`;\r\n }\r\n\r\n private async getReadHeaders(): Promise<HeadersInit> {\r\n return {\r\n Accept: 'application/json',\r\n ...(await this.buildTenantHeaders()),\r\n };\r\n }\r\n\r\n private async buildTenantHeaders(): Promise<Record<string, string>> {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n\r\n const selectedTenant = await this.utilityService.getLocalStorage('selectedTenant');\r\n if (typeof tenantKey === 'string' && tenantKey.trim()) {\r\n return { 'X-Tenant-Key': tenantKey.trim() };\r\n }\r\n const normalizedTenantName = typeof tenantName === 'string' ? tenantName.trim() : '';\r\n const normalizedSelectedTenant = typeof selectedTenant === 'string' ? selectedTenant.trim() : '';\r\n const tenant = normalizedTenantName || normalizedSelectedTenant;\r\n if (!tenant) {\r\n throw new Error('Missing tenantKey, tenantName, ' + 'or selectedTenant');\r\n }\r\n return { 'X-Tenant': tenant, };\r\n }\r\n\r\n async getImageSrcFromCouchDb(\r\n couchDbName: string,\r\n filePath: string\r\n ): Promise<string> {\r\n const dbName = couchDbName?.toLowerCase();\r\n const docId = filePath?.trim();\r\n\r\n if (!docId) {\r\n throw new Error('Missing file path');\r\n }\r\n\r\n const response = await fetch(this.getDocumentUrl(dbName, docId), {\r\n method: 'GET',\r\n headers: await this.getReadHeaders(),\r\n });\r\n\r\n const doc = await this.parseJsonOrText(response);\r\n\r\n if (!response.ok) {\r\n throw new Error(\r\n `Failed to fetch image \"${docId}\" from \"${dbName}\": ${response.status} ${this.stringifyErrorDetails(doc)}`\r\n );\r\n }\r\n\r\n if (!doc?.data) {\r\n throw new Error(`Document \"${docId}\" does not contain image data`);\r\n }\r\n\r\n const mimeType = doc.contentType || 'image/png';\r\n\r\n return `data:${mimeType};base64,${doc.data}`;\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { UtilityService } from './utility.service';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { Couchdb } from './couchdb';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfigService {\r\n private config: any;\r\n private skipOkta = false;\r\n private keycloakConfig: any;\r\n\r\n constructor(private couchdbService: Couchdb, private utilityService: UtilityService, private platform: Platform) { }\r\n\r\n async loadOktaConfig(projectName: string): Promise<void> {\r\n try {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n if (tenantName) {\r\n this.config = await this.couchdbService.getFileContentFromCouchDb(\r\n `${tenantName}_${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n } else {\r\n this.config = await this.couchdbService.getFileContentFromCouchDb(\r\n `${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n }\r\n\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n if (this.config.environment.login.mobile) {\r\n this.setConfiguration(this.config.environment.login.mobile);\r\n } else {\r\n this.setConfiguration(null);\r\n }\r\n } else {\r\n if (this.config.environment.login.web) {\r\n this.setConfiguration(this.config.environment.login.web);\r\n } else {\r\n this.setConfiguration(null);\r\n }\r\n }\r\n\r\n } catch (err) {\r\n console.error('Error loading config:', err);\r\n }\r\n }\r\n\r\n setConfiguration(config: any) {\r\n if (config) {\r\n this.config = config;\r\n } else {\r\n this.config = {\r\n issuer: 'http://dummy',\r\n clientId: 'dummy',\r\n redirectUri: window.location.origin,\r\n responseType: 'code',\r\n scope: 'openid profile email',\r\n showDebugInformation: true,\r\n pkce: true,\r\n };\r\n }\r\n }\r\n\r\n skipOktaConfig() {\r\n this.skipOkta = true;\r\n }\r\n\r\n get oktaConfig() {\r\n if (this.skipOkta) {\r\n return null;\r\n }\r\n return this.config;\r\n }\r\n\r\n async loadKeycloakConfig(projectName: string): Promise<void> {\r\n let tenantKey: any = \"\";\r\n let tenantName: any = \"\";\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n tenantKey = await this.utilityService.getLocalStorage('tenantKey');\r\n tenantName = await this.utilityService.getLocalStorage('tenantName');\r\n } else {\r\n tenantKey = await this.utilityService.getStorage('tenantKey');\r\n tenantName = await this.utilityService.getStorage('tenantName');\r\n }\r\n let env: any = {};\r\n if (tenantName) {\r\n env = await this.couchdbService.getFileContentFromCouchDb(\r\n `${tenantName}_${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n } else {\r\n env = await this.couchdbService.getFileContentFromCouchDb(\r\n `${projectName}`,\r\n 'environments/environment.json'\r\n );\r\n }\r\n if (env?.environment?.login.type === \"keycloak\") {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n this.keycloakConfig = {\r\n issuer: \"https://keycloak-poc.wilken.de/realms/p5\",\r\n clientId: \"mobile\",\r\n redirectUri: \"de.yomotech:/login/callback\",\r\n logoutRedirectUri: \"de.yomotech:/login/callback\",\r\n scope: \"openid profile email\",\r\n responseType: \"code\"\r\n }\r\n } else {\r\n this.keycloakConfig = {\r\n issuer: env?.environment?.login?.web?.issuer ?? 'http://dummy',\r\n clientId: env?.environment?.login?.web?.clientId ?? 'dummy',\r\n redirectUri: window.location.origin,\r\n responseType: 'code',\r\n scope: 'openid profile email',\r\n showDebugInformation: true\r\n };\r\n }\r\n } else {\r\n this.keycloakConfig = {};\r\n }\r\n }\r\n\r\n getKeycloakConfig() {\r\n return this.keycloakConfig;\r\n }\r\n\r\n getKeycloakMobileConfig() {\r\n if (!this.keycloakConfig) return null;\r\n return {\r\n issuer: this.keycloakConfig?.issuer ?? 'http://dummy',\r\n clientId: this.keycloakConfig?.clientId,\r\n redirectUri: this.keycloakConfig.redirectUri,\r\n logoutRedirectUri: this.keycloakConfig.logoutRedirectUri,\r\n scope: this.keycloakConfig.scope,\r\n responseType: this.keycloakConfig.responseType\r\n };\r\n }\r\n\r\n private updateLoaderValue = new BehaviorSubject<any>(null);\r\n currentLoader$ = this.updateLoaderValue.asObservable();\r\n\r\n updateLoader(value: any) {\r\n this.updateLoaderValue.next(value);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService {\r\n\r\n constructor(public toastr: ToastrService) { }\r\n\r\n success(message: string, time: number = 5000) {\r\n this.toastr.success(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n info(message: string, time: number = 5000) {\r\n this.toastr.info(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n warning(message: string, time: number = 20000) {\r\n this.toastr.warning(message, \"\", { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n\r\n error(error: string, time: number = 20000, message?: string,) {\r\n this.toastr.error(error, message, { messageClass: 'toaster-font', titleClass: 'toaster-font', closeButton: true, timeOut: time });\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { RequestService } from '../../services/request.service';\r\n\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { SimpleChanges } from '@angular/core';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport { CapacitorHttp } from '@capacitor/core';\r\n\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { NzModalModule, NzModalService } from 'ng-zorro-antd/modal';\r\n\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { PaginationComponent } from '../pagination/pagination.component';\r\nimport { String as StringComponent } from '../../components/string/string';\r\nimport { ConfigService } from '../../services/config.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'vl-card',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzIconModule,\r\n DatePickerModule,\r\n NzButtonModule,\r\n NzDatePickerModule,\r\n NzModalModule,\r\n PaginationComponent,\r\n MatTooltipModule,\r\n\tStringComponent\r\n ],\r\n standalone: true,\r\n templateUrl: './card.component.html',\r\n styleUrl: './card.component.css',\r\n})\r\nexport class CardComponent {\r\n @Input() itemInfo: any = {};\r\n @Input() currentPage: number = 0;\r\n @Input() pageSize: number = 5;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() mobileDisplay: boolean = false;\r\n @Input() scrollPagination: boolean = false;\r\n @Input() pages: number[] = [];\r\n @Output() cardButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() cardHeaderButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() linkDetails: EventEmitter<any> = new EventEmitter();\r\n @Output() imageDetails: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageSizeChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageChange: EventEmitter<any> = new EventEmitter();\r\n @Input() paginationMode: 'client' | 'server' = 'server';\r\n @Input() paginationLoading: boolean = false;\r\n @Output() cardDataChange = new EventEmitter<{\r\n records: any[];\r\n resetPage?: boolean;\r\n }>();\r\n @ViewChild('scrollPaginationSentinel')\r\n scrollPaginationSentinel?: ElementRef<HTMLElement>;\r\n\r\n private scrollObserver?: IntersectionObserver;\r\n private requestedScrollPage: number | null = null;\r\n cardPerRow: string = 'md:col-6 lg:col-';\r\n deviceMode: 'desktop' | 'tablet' | 'mobile' = 'desktop';\r\n isLoading: boolean = false;\r\n layoutSchemaCopy: any = {};\r\n headerSchemaCopy: any = {};\r\n footerSchemaCopy: any = {};\r\n\r\n constructor(\r\n private utilityService: UtilityService,\r\n private platform: Platform,\r\n private http: HttpClient,\r\n private configService: ConfigService,\r\n private cdr: ChangeDetectorRef,\r\n private zone: NgZone,\r\n private modalService: NzModalService,\r\n private notificationService: NotificationService,\r\n private oauthService: OAuthService,\r\n private requestService: RequestService,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform.isBrowser) {\r\n this.mobileDisplay = true;\r\n }\r\n\r\n this.updateDeviceMode();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.updateDeviceMode();\r\n if (\r\n changes['scrollPagination'] ||\r\n changes['currentPage'] ||\r\n changes['paginationLoading'] ||\r\n changes['pages']\r\n ) {\r\n if (!this.paginationLoading) {\r\n this.requestedScrollPage = null;\r\n }\r\n this.refreshScrollObserver();\r\n }\r\n if ((this.platform.ANDROID || this.platform.IOS) && !this.platform?.isBrowser) {\r\n this.mobileDisplay = true;\r\n }\r\n if (changes['itemInfo']) {\r\n if (this.itemInfo.layoutSchema) {\r\n this.layoutSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.layoutSchema));\r\n }\r\n if (this.itemInfo.header) {\r\n this.headerSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.header));\r\n }\r\n if (this.itemInfo.footer) {\r\n this.footerSchemaCopy = JSON.parse(JSON.stringify(this.itemInfo.footer));\r\n }\r\n }\r\n if ((changes['selectedLanguageInfo'] || this.selectedLanguageInfo) && this.selectedLanguageInfo.selectedLanguage) {\r\n this.itemInfo.footer = this.updatebuttonLanguage(this.footerSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n this.itemInfo.header = this.updatebuttonLanguage(this.headerSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n this.itemInfo.layoutSchema = this.updateLayoutLanguage(this.layoutSchemaCopy, this.selectedLanguageInfo.selectedLanguage)\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.updateDeviceMode();\r\n }\r\n\r\n get displayedRecords(): any[] {\r\n const records = Array.isArray(this.itemInfo?.data)\r\n ? this.itemInfo.data\r\n : [];\r\n\r\n /*\r\n * For server pagination, itemInfo.data contains either:\r\n * - the current numbered page, or\r\n * - all pages loaded through infinite scroll.\r\n */\r\n if (\r\n this.paginationMode === 'server' ||\r\n this.scrollPagination\r\n ) {\r\n return records;\r\n }\r\n\r\n const normalizedPageSize =\r\n Number(this.pageSize) ||\r\n Number(\r\n this.itemInfo?.layoutSchema?.pagination?.defaultPageSize\r\n ) ||\r\n 5;\r\n\r\n const normalizedCurrentPage =\r\n Number(this.currentPage) || 0;\r\n\r\n const startIndex =\r\n normalizedCurrentPage * normalizedPageSize;\r\n\r\n return records.slice(\r\n startIndex,\r\n startIndex + normalizedPageSize\r\n );\r\n }\r\n\r\n private setupScrollObserver(): void {\r\n this.destroyScrollObserver();\r\n\r\n if (\r\n !this.scrollPagination ||\r\n !this.scrollPaginationSentinel ||\r\n typeof IntersectionObserver === 'undefined'\r\n ) {\r\n return;\r\n }\r\n\r\n this.scrollObserver = new IntersectionObserver(\r\n entries => {\r\n const sentinelEntry = entries[0];\r\n\r\n if (sentinelEntry?.isIntersecting) {\r\n this.loadNextScrollPage();\r\n }\r\n },\r\n {\r\n root: null,\r\n rootMargin: '0px 0px 250px 0px',\r\n threshold: 0\r\n }\r\n );\r\n\r\n this.scrollObserver.observe(\r\n this.scrollPaginationSentinel.nativeElement\r\n );\r\n }\r\n\r\n private loadNextScrollPage(): void {\r\n if (\r\n !this.scrollPagination ||\r\n this.paginationLoading ||\r\n !this.hasNextScrollPage()\r\n ) {\r\n return;\r\n }\r\n\r\n const nextPage = this.currentPage + 1;\r\n\r\n if (this.requestedScrollPage === nextPage) {\r\n return;\r\n }\r\n\r\n this.requestedScrollPage = nextPage;\r\n this.onPageChange.emit(nextPage);\r\n }\r\n\r\n private hasNextScrollPage(): boolean {\r\n return (\r\n Array.isArray(this.pages) &&\r\n this.pages.length > 0 &&\r\n this.currentPage < this.pages.length - 1\r\n );\r\n }\r\n\r\n private refreshScrollObserver(): void {\r\n setTimeout(() => {\r\n this.setupScrollObserver();\r\n });\r\n }\r\n\r\n private destroyScrollObserver(): void {\r\n this.scrollObserver?.disconnect();\r\n this.scrollObserver = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyScrollObserver();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.setupScrollObserver();\r\n }\r\n\r\n getRecordIndex(record: any): number {\r\n if (!Array.isArray(this.itemInfo?.data)) {\r\n return -1;\r\n }\r\n\r\n return this.itemInfo.data.indexOf(record);\r\n }\r\n\r\n private publishCardDataChange(\r\n resetPage: boolean = false\r\n ): void {\r\n const records = Array.isArray(this.itemInfo?.data)\r\n ? [...this.itemInfo.data]\r\n : [];\r\n\r\n this.cardDataChange.emit({\r\n records,\r\n resetPage\r\n });\r\n }\r\n\r\n private setFilteredCardData(\r\n records: any\r\n ): void {\r\n const normalizedRecords =\r\n this.utilityService.restoreDatesFromStorage(\r\n Array.isArray(records) ? records : [],\r\n this.itemInfo.propertySchema\r\n );\r\n\r\n this.itemInfo.data = normalizedRecords;\r\n\r\n /*\r\n * Filtering creates a new complete client-side dataset.\r\n * Move pagination back to the first page.\r\n */\r\n this.publishCardDataChange(true);\r\n }\r\n\r\n private updateDeviceMode(): void {\r\n if (typeof window === 'undefined') {\r\n this.deviceMode = this.mobileDisplay ? 'mobile' : 'desktop';\r\n return;\r\n }\r\n\r\n const width = window.innerWidth;\r\n\r\n if (this.mobileDisplay || width <= 768) {\r\n this.deviceMode = 'mobile';\r\n } else if (width <= 1024) {\r\n this.deviceMode = 'tablet';\r\n } else {\r\n this.deviceMode = 'desktop';\r\n }\r\n }\r\n\r\n private safeUpdate(fn: () => void) {\r\n if (NgZone.isInAngularZone()) {\r\n fn();\r\n this.cdr.markForCheck();\r\n } else {\r\n this.zone.run(() => {\r\n fn();\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n getHorizontalLayoutCaption(layout: any) {\r\n let lang = this.selectedLanguageInfo?.selectedLanguage;\r\n let caption = layout.label.caption\r\n ? layout.label.caption\r\n : this.itemInfo.propertySchema[this.getScope(layout.scope?.reference)]?.[\r\n layout.scope?.reference.split('/').pop()\r\n ]?.caption;\r\n return lang && lang[caption] ? lang[caption] : caption;\r\n }\r\n\r\n getHorizontalLayoutTooltip(layout: any) {\r\n let lang = this.selectedLanguageInfo?.selectedLanguage;\r\n let tooltip = layout.option && layout.option.tooltip || '';\r\n return lang && lang[tooltip] ? lang[tooltip] : tooltip;\r\n }\r\n\r\n forceNumericKeyboard(event: any) {\r\n const input = event?.target as HTMLInputElement;\r\n if (input && input.tagName === 'INPUT') {\r\n input.setAttribute('inputmode', 'numeric'); // Android\r\n input.setAttribute('pattern', '[0-9:]*'); // iOS\r\n input.setAttribute('type', 'tel'); // strongest signal\r\n }\r\n }\r\n\r\n onDateTyping(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 8);\r\n let formatted = '';\r\n if (digits.length <= 4) {\r\n formatted = digits;\r\n } else if (digits.length <= 6) {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4)}`;\r\n } else {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;\r\n }\r\n input.value = formatted;\r\n }\r\n\r\n updatebuttonLanguage<T>(schema: T, translations: Record<string, string>): T {\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // ✅ Replace direct caption (e.g. button.caption)\r\n if (typeof obj.caption === 'string') {\r\n const original = obj.caption;\r\n obj.caption = translations[original] ?? original;\r\n }\r\n\r\n if (obj.option && obj.option.tooltip && (typeof obj?.option?.tooltip === 'string')) {\r\n const original = obj?.option?.tooltip;\r\n obj.option.tooltip = translations[original] ?? original;\r\n }\r\n\r\n // ✅ Replace modalTitle if present\r\n if (typeof obj.modalTitle === 'string') {\r\n const original = obj.modalTitle;\r\n obj.modalTitle = translations[original] ?? original;\r\n }\r\n\r\n // 🔁 Recurse\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n updateLayoutLanguage<T>(schema: T, translations: Record<string, string>): T {\r\n // Deep clone to avoid mutating original schema\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // ✅ If label.caption exists → translate it\r\n if (obj.label && typeof obj.label.caption === 'string') {\r\n const originalCaption = obj.label.caption;\r\n obj.label.caption = translations[originalCaption] ?? originalCaption;\r\n }\r\n if (obj.elements && obj.elements.length > 0) {\r\n obj.elements.forEach((element: any) => {\r\n if (element.label && element.label.caption) {\r\n const originalElementCaption = element.label.caption;\r\n element.label.caption = translations[originalElementCaption] ?? originalElementCaption;\r\n }\r\n });\r\n }\r\n\r\n // 🔁 Recurse into object properties\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n dateChangeEvent(filter: any, value: any) {\r\n const scope = this.getScope(filter.scope.reference);\r\n const field = filter.scope?.reference.split('/').pop();\r\n this.itemInfo.propertySchema[scope][field].value = value\r\n this.applyDateFilter(this.extractFilterValues(this.itemInfo.propertySchema[scope]))\r\n }\r\n\r\n async applyDateFilter(filters: any) {\r\n const from = filters.fromDateFilter ? new Date(filters.fromDateFilter) : null;\r\n const to = filters.toDateFilter ? new Date(filters.toDateFilter) : null;\r\n if (to && from) {\r\n const formattedFrom = this.formatToOffsetISO(from);\r\n const formattedTo = this.formatToOffsetISO(to);\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n const logined: any = await this.utilityService.getLocalStorage('loginedUser');\r\n this.safeUpdate(() => this.isLoading = true);\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n try {\r\n const saveOrders = await this.getSaveOrder(\r\n keycloakInfo?.token,\r\n keycloakInfo,\r\n formattedFrom,\r\n formattedTo\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData(saveOrders);\r\n this.isLoading = false;\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to fetch saved work orders',\r\n error\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData([]);\r\n this.isLoading = false;\r\n });\r\n }\r\n\r\n return;\r\n } else {\r\n this.requestService\r\n .getSaveOrder(\r\n logined?.token,\r\n logined,\r\n formattedFrom,\r\n formattedTo\r\n )\r\n .subscribe({\r\n next: (saveOrders: any) => {\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData(saveOrders);\r\n this.isLoading = false;\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(\r\n 'Failed to fetch saved work orders',\r\n error\r\n );\r\n\r\n this.safeUpdate(() => {\r\n this.setFilteredCardData([]);\r\n this.isLoading = false;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n async getSaveOrder(\r\n token: string,\r\n userInfo: any,\r\n fromDate: any,\r\n toDate: any\r\n ) {\r\n if (!token) {\r\n return;\r\n }\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n const url = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/requestBookedTimeRecording`;\r\n\r\n try {\r\n const response = await CapacitorHttp.post({\r\n url,\r\n params: {\r\n resourceNo: userInfo.p5_resource_no,\r\n workDayFrom: fromDate,\r\n workDayTo: toDate,\r\n company,\r\n appVersion: '1',\r\n },\r\n headers: {\r\n Authorization: `Bearer ${token}`, // ✅ REQUIRED\r\n Accept: 'application/json',\r\n },\r\n // ❗ NO BODY needed for this endpoint\r\n });\r\n\r\n console.log('getSaveOrder response:', response.data);\r\n return response.data;\r\n } catch (error) {\r\n console.error('Failed to fetch saved orders', error);\r\n throw error;\r\n }\r\n }\r\n\r\n formatToOffsetISO(date: Date): string {\r\n if (!date) return '';\r\n\r\n const pad = (n: number, len = 2) => String(n).padStart(len, '0');\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n const ms = pad(date.getMilliseconds(), 4); // 4-digit milliseconds\r\n\r\n // timezone offset\r\n const offset = -date.getTimezoneOffset(); // in minutes\r\n const offSign = offset >= 0 ? '+' : '-';\r\n const offHours = pad(Math.floor(Math.abs(offset) / 60));\r\n const offMinutes = pad(Math.abs(offset) % 60);\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}:${ms}${offSign}${offHours}:${offMinutes}`;\r\n }\r\n\r\n extractFilterValues(schema: Record<string, any>): Record<string, any> {\r\n return Object.keys(schema).reduce(\r\n (acc, key) => {\r\n if (key.includes('Filter') && schema[key]?.value !== undefined) {\r\n acc[key] = schema[key].value;\r\n }\r\n return acc;\r\n },\r\n {} as Record<string, any>,\r\n );\r\n }\r\n\r\n invokeOnPageSizeChange(pageSize: any): void {\r\n const normalizedPageSize = Number(pageSize);\r\n\r\n if (\r\n !Number.isFinite(normalizedPageSize) ||\r\n normalizedPageSize <= 0\r\n ) {\r\n return;\r\n }\r\n\r\n this.onPageSizeChange.emit(normalizedPageSize);\r\n }\r\n\r\n invokeGoToPage(page: number): void {\r\n if (\r\n page < 0 ||\r\n page >= this.pages.length ||\r\n page === this.currentPage\r\n ) {\r\n return;\r\n }\r\n\r\n this.onPageChange.emit(page);\r\n }\r\n\r\n invokeOnCardHeader(element: any) {\r\n if (element.option && element.option.innerAction === \"saveAll\") {\r\n this.d4_SaveAll();\r\n } else {\r\n this.cardHeaderButtonClick.emit(element);\r\n }\r\n }\r\n\r\n invokeOnCardFooter(element: any) {\r\n // this.cardHeaderButtonClick.emit(element);\r\n }\r\n\r\n async invokeButtonClick(layout: any, record: any, recordIndex: any) {\r\n if (layout?.option?.action === 'delete' && layout?.option?.storageType == 'localstorage') {\r\n if (layout?.option?.deleteMessage) {\r\n this.showConfirm(layout?.option, recordIndex);\r\n }\r\n } else if (layout?.option?.action === 'save' && layout?.option?.storageType === 'database') {\r\n this.configService.updateLoader(true);\r\n const final_array = this.utilityService.convertToDailyLogs(record);\r\n await this.saveToDb(final_array, recordIndex, layout.option.data_url)\r\n } else {\r\n this.cardButtonClick.emit({ layout: layout, record: record, recordIndex: recordIndex });\r\n }\r\n }\r\n\r\n showConfirm(option: any, recordIndex: any) {\r\n this.modalService.confirm({\r\n nzTitle:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Confirm']\r\n ? this.selectedLanguageInfo.selectedLanguage['Confirm']\r\n : 'Confirm',\r\n nzContent:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage &&\r\n this.selectedLanguageInfo?.selectedLanguage[option.deleteMessage]\r\n ? this.selectedLanguageInfo.selectedLanguage[option.deleteMessage]\r\n : option.deleteMessage,\r\n nzOkText:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Delete']\r\n ? this.selectedLanguageInfo.selectedLanguage['Delete']\r\n : 'Delete',\r\n nzCancelText:\r\n this.selectedLanguageInfo && this.selectedLanguageInfo?.selectedLanguage && this.selectedLanguageInfo?.selectedLanguage['Cancel']\r\n ? this.selectedLanguageInfo.selectedLanguage['Cancel']\r\n : 'Cancel',\r\n nzOnOk: () => this.deleteRecord(recordIndex),\r\n });\r\n }\r\n\r\n async d4_SaveAll() {\r\n if (this.itemInfo?.data?.length) {\r\n let allOrders: any[] = [];\r\n for (let i = 0; i < this.itemInfo.data.length; i++) {\r\n const element = this.itemInfo.data[i];\r\n const dailyLogs = this.utilityService.convertToDailyLogs(element);\r\n if (Array.isArray(dailyLogs)) {\r\n allOrders.push(...dailyLogs);\r\n }\r\n }\r\n await this.saveToDb(allOrders, null, true);\r\n } else {\r\n this.notificationService.warning(this.selectedLanguageInfo?.selectedLanguage['noRecordFound'] ? this.selectedLanguageInfo?.selectedLanguage['noRecordFound'] : 'No Record Found')\r\n }\r\n }\r\n\r\n async deleteRecord(recordIndex: number): Promise<void> {\r\n if (\r\n !Array.isArray(this.itemInfo?.data) ||\r\n recordIndex < 0 ||\r\n recordIndex >= this.itemInfo.data.length\r\n ) {\r\n this.configService.updateLoader(false);\r\n return;\r\n }\r\n\r\n this.itemInfo.data.splice(recordIndex, 1);\r\n\r\n await this.utilityService.setLocalStorage(\r\n 'timeRecords',\r\n JSON.stringify(this.itemInfo.data)\r\n );\r\n\r\n /*\r\n * Notify AppComponent so page count is recalculated.\r\n */\r\n this.publishCardDataChange(false);\r\n\r\n this.configService.updateLoader(false);\r\n }\r\n\r\n async deleteAllRecord(): Promise<void> {\r\n this.itemInfo.data = [];\r\n\r\n await this.utilityService.setLocalStorage(\r\n 'timeRecords',\r\n JSON.stringify([])\r\n );\r\n\r\n this.publishCardDataChange(true);\r\n\r\n this.configService.updateLoader(false);\r\n }\r\n\r\n async saveToDb(orders: any, orderIndex?: any, data_url?: any, deleteAll: boolean = false) {\r\n this.safeUpdate(() => (this.isLoading = true));\r\n const token = this.oauthService.getAccessToken();\r\n const logined: any = await this.utilityService.getLocalStorage('loginedUser');\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n let saveobject = {\r\n ressourceNo: logined?.p5_resource_no ? logined.p5_resource_no : keycloakInfo?.p5_resource_no,\r\n returnTimeRecordingLine: orders\r\n }\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n const res = await this.mobileSaveDb(keycloakInfo.token, keycloakInfo, saveobject, orderIndex, data_url, deleteAll);\r\n } else {\r\n this.webSaveDb(token, logined, saveobject, orderIndex, data_url, deleteAll);\r\n }\r\n }\r\n\r\n webSaveDb(token: any, userInfo: any, order: any = {}, orderIndex?: any, dataUrl?: any, deleteAll: boolean = false) {\r\n if (token) {\r\n const headers = new HttpHeaders({\r\n 'Authorization': `Bearer ${token}`,\r\n 'Accept': 'application/json'\r\n });\r\n let url2: any = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording?company=${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant ? userInfo.p5_plant : \" \"}&appVersion=1&resourceNo=${userInfo.p5_resource_no}`\r\n this.http.post(url2, order, { headers }).subscribe({\r\n next: res => {\r\n this.safeUpdate(() => this.isLoading = false);\r\n if (orderIndex > -1) {\r\n this.deleteRecord(orderIndex)\r\n } else {\r\n this.deleteAllRecord();\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n async mobileSaveDb(token: string, userInfo: any, order: any = {}, orderIndex: number, dataUrl: any, deleteAll: boolean = false) {\r\n if (!token) {\r\n console.log('NO-token', token);\r\n return;\r\n }\r\n\r\n const company = userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n\r\n const url = `${userInfo.p5_backend_url}/assetsmobileservice/Zeiterfassung/registerTimeRecording`;\r\n\r\n try {\r\n const response = await CapacitorHttp.post({\r\n url,\r\n params: {\r\n company,\r\n appVersion: '1',\r\n resourceNo: userInfo.p5_resource_no,\r\n },\r\n headers: {\r\n Authorization: `Bearer ${token}`,\r\n Accept: 'application/json',\r\n 'Content-Type': 'application/json',\r\n },\r\n data: order,\r\n });\r\n if (orderIndex != null && orderIndex > -1) {\r\n this.deleteRecord(orderIndex);\r\n } else {\r\n this.deleteAllRecord();\r\n }\r\n this.safeUpdate(() => (this.isLoading = false));\r\n\r\n return response.data;\r\n } catch (error) {\r\n this.safeUpdate(() => (this.isLoading = false));\r\n console.error('Failed to save time recording', error);\r\n throw error;\r\n }\r\n }\r\n\r\n showLinkDetails(option: any, record: any) {\r\n this.linkDetails.emit({ option: option, record: record });\r\n }\r\n\r\n showImageDetails(option: any, record: any) {\r\n this.imageDetails.emit({ option: option, record: record });\r\n }\r\n\r\n getProperty(scope: any) {\r\n const property = scope ? scope.split('/').pop() : '';\r\n return {\r\n key: property,\r\n productSchema: this.itemInfo.propertySchema[this.getScope(scope)][property],\r\n };\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any): {\r\n classes: string;\r\n style: Record<string, any>;\r\n } {\r\n if (!styleObject) {\r\n return {\r\n classes: '',\r\n style: {},\r\n };\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n\r\n return {\r\n classes: Array.isArray(classes) ? classes.filter(Boolean).join(' ') : classes || '',\r\n style: styleWithoutClasses || {},\r\n };\r\n }\r\n\r\n getCardContainerStyle(): Record<string, any> {\r\n const schema = this.itemInfo?.layoutSchema || {};\r\n const layout = schema?.layout || {};\r\n\r\n let cardsPerRow = Number(layout.desktopCardsPerRow) || 3;\r\n\r\n if (this.deviceMode === 'tablet') {\r\n cardsPerRow = Number(layout.tabletCardsPerRow) || 2;\r\n }\r\n\r\n if (this.deviceMode === 'mobile') {\r\n cardsPerRow = Number(layout.mobileCardsPerRow) || 1;\r\n }\r\n\r\n const baseStyle: any = this.getStyleWithoutClasses(schema.style).style;\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n schema?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n display: 'grid',\r\n gridTemplateColumns: `repeat(${Math.max(1, cardsPerRow)}, minmax(0, 1fr))`,\r\n gap: layout.gap || baseStyle.gap || '16px',\r\n padding: '0px 10px 0px 10px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getSingleCardStyle(): Record<string, any> {\r\n const schema = this.itemInfo?.layoutSchema || {};\r\n\r\n const baseStyle = this.getStyleWithoutClasses(schema.stylePerCard).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n schema?.stylePerCard?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHeaderStyle(): Record<string, any> {\r\n const header = this.itemInfo?.header || {};\r\n\r\n const baseStyle: any = this.getStyleWithoutClasses(header.style).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n header?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n width: baseStyle.width || '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHeaderElementWrapperStyle(element: any): Record<string, any> {\r\n const baseStyle = this.getStyleWithoutClasses(element?.wrapperStyle).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n element?.responsiveWrapperStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n getHorizontalLayoutStyle(layout: any): Record<string, any> {\r\n const baseStyle: any = this.getStyleWithoutClasses(layout?.style).style;\r\n\r\n const responsiveStyle = this.getStyleWithoutClasses(\r\n layout?.responsiveStyle?.[this.deviceMode],\r\n ).style;\r\n\r\n return {\r\n ...baseStyle,\r\n ...responsiveStyle,\r\n display: baseStyle.display || 'grid',\r\n width: baseStyle.width || '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n };\r\n }\r\n\r\n showButtonIcon(button: any): boolean {\r\n const mode = button?.option?.buttonContent;\r\n\r\n if (mode === 'icon' || mode === 'iconCaption') {\r\n return !!button?.icon;\r\n }\r\n\r\n return !mode && !button?.caption && !!button?.icon;\r\n }\r\n\r\n showButtonCaption(button: any): boolean {\r\n const mode = button?.option?.buttonContent;\r\n\r\n if (mode === 'caption' || mode === 'iconCaption') {\r\n return !!button?.caption;\r\n }\r\n\r\n return !mode && !!button?.caption;\r\n }\r\n\r\n getScope(scope: any): string {\r\n if (!scope || typeof scope !== 'string') {\r\n return '';\r\n }\r\n\r\n const start = scope.indexOf('#/') + 2;\r\n const end = scope.indexOf('/', start);\r\n\r\n if (start < 2 || end <= start) {\r\n return '';\r\n }\r\n\r\n return scope.substring(start, end);\r\n }\r\n}\r\n","<!-- Loader Spinner -->\r\n<div *ngIf=\"isLoading\" class=\"loader-overlay\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n<div class=\"vl-card-runtime\">\r\n <!-- top pagination on card -->\r\n <div *ngIf=\"\r\n itemInfo?.layoutSchema?.pagination?.visible &&\r\n itemInfo?.layoutSchema?.pagination?.top\r\n \" class=\"card-pagination-wrapper\">\r\n <vl-pagination [itemInfo]=\"itemInfo\" [selectedLanguageInfo]=\"selectedLanguageInfo\" [pageSize]=\"pageSize\"\r\n [currentPage]=\"currentPage\" [pages]=\"pages\" (pageSizeChange)=\"invokeOnPageSizeChange($event)\"\r\n (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n </div>\r\n <div *ngIf=\"itemInfo?.header?.elements?.length\" [ngStyle]=\"getHeaderStyle()\" [class]=\"getStyleWithoutClasses(\r\n itemInfo?.header?.style\r\n ).classes\">\r\n <div *ngFor=\"let element of itemInfo.header?.elements; let c = index\"\r\n [ngStyle]=\"getHeaderElementWrapperStyle(element)\" [class]=\"element.option?.innerAction && element.option?.innerAction === 'saveAll' && !displayedRecords?.length ? \r\n 'hidden' :getStyleWithoutClasses(element?.wrapperStyle).classes\">\r\n <ng-container\r\n [ngSwitch]=\"element.scope?.reference && itemInfo.propertySchema[getScope(element.scope?.reference)] ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\" [class]=\"element.option?.visible ? 'card-field-wrapper' : 'hidden'\">\r\n\r\n <!-- LABEL -->\r\n <span *ngIf=\"element.label?.caption\" [style]=\"getStyleWithoutClasses(element.label?.style).style\"\r\n [class]=\"element.label?.style?.classes?.[0]\">\r\n {{ element.label.caption }}\r\n </span>\r\n </div>\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"mb-3\">\r\n <span *ngIf=\"element.option.protected\" [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">\r\n <vl-string [formField]=\"element\" [modalItemInfo]=\"itemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!element.option.protected\"\r\n [class]=\"element?.layout == 'horizontal' ? 'horizontal-layout' : ''\"\r\n [ngClass]=\"element?.style?.classes[0]\" [style]=\"getStyleWithoutClasses(element?.style).style\">\r\n <label [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">{{ element.label?.value\r\n ?\r\n element.label?.value : element.label?.caption ?\r\n element.label?.caption :\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <p-datepicker (ngModelChange)=\"dateChangeEvent(element, $event)\" [showIcon]=\"true\" type=\"number\"\r\n inputmode=\"numeric\"\r\n [dateFormat]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].format : 'yy-mm-dd'\"\r\n [(ngModel)]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].value\"\r\n (onFocus)=\"forceNumericKeyboard($event)\" (onInput)=\"onDateTyping($event)\"\r\n [class]=\"element?.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(element?.scope?.style).style\">\r\n </p-datepicker>\r\n </div>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"element.option?.visible ? 'row' : 'hidden'\"\r\n (click)=\"invokeOnCardHeader(element)\">\r\n <button nz-button type=\"button\" [matTooltip]=\"element?.option?.tooltip || ''\"\r\n [matTooltipTouchGestures]=\"'auto'\" [ngStyle]=\"getStyleWithoutClasses(element.style).style\"\r\n [class]=\"element.option.protected ? 'disabled-button' : getStyleWithoutClasses(element.style).classes\">\r\n <ng-container *ngIf=\"!element.caption; else headerTextContent\">\r\n <i nz-icon [nzType]=\"element.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #headerTextContent>{{ element.caption }}</ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"card-responsive-grid\" [ngStyle]=\"getCardContainerStyle()\" [class]=\"getStyleWithoutClasses(\r\n itemInfo?.layoutSchema?.style\r\n ).classes\">\r\n <div *ngFor=\"let record of displayedRecords; let k = index\" class=\"card-grid-item\">\r\n <div [ngStyle]=\"getSingleCardStyle()\"\r\n [class]=\"getStyleWithoutClasses(itemInfo?.layoutSchema?.stylePerCard).classes\">\r\n <div *ngFor=\"let layout of itemInfo?.layoutSchema?.cards || []\" class=\"card-layout-item\" [ngStyle]=\"\r\n layout?.type === 'HorizontalLayout'\r\n ? {}\r\n : getStyleWithoutClasses(layout?.style).style\r\n \" [class]=\"\r\n layout?.type === 'HorizontalLayout'\r\n ? ''\r\n : getStyleWithoutClasses(layout?.style).classes\r\n \">\r\n <ng-container\r\n [ngSwitch]=\"layout?.scope?.reference && itemInfo.propertySchema[getScope(layout.scope?.reference)] ? itemInfo.propertySchema[getScope(layout.scope?.reference)][layout.scope?.reference.split('/').pop()]?.type : layout?.type == 'HorizontalLayout' ? 'HorizontalLayout' : 'default'\">\r\n <!-- Image Control -->\r\n <div *ngSwitchCase=\"'image'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <img [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\"\r\n [src]=\"layout?.option?.src ? layout?.option?.src : record[layout.scope?.reference.split('/').pop()]\"\r\n alt=\"{{ layout.label ? layout.label : getProperty(layout.scope?.reference).productSchema.caption }}\"\r\n (click)=\"showImageDetails(layout.option, record)\" />\r\n </div>\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(layout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(layout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(layout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [ngStyle]=\"getStyleWithoutClasses(layout?.scope?.style).style\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()] ??\r\n itemInfo.propertySchema[getScope(layout.scope?.reference)]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ??\r\n '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- Date Control -->\r\n <div *ngSwitchCase=\"'date'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n <!-- LABEL -->\r\n <span *ngIf=\"layout?.label?.caption\" [class]=\"layout.label?.style?.classes?.[0]\">\r\n {{ layout.label.caption }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()]\r\n ?? itemInfo.propertySchema[\r\n getScope(layout.scope?.reference)\r\n ]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ?? '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- Time Control -->\r\n <div *ngSwitchCase=\"'time'\" [class]=\"layout.option?.visible ? 'card-field-wrapper' : 'hidden'\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span *ngIf=\"layout?.label?.caption\" [class]=\"layout.label?.style?.classes?.[0]\">\r\n {{ layout.label.caption }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <p *ngIf=\"layout.option?.protected && layout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n (click)=\"showLinkDetails(layout.option, record)\">\r\n {{\r\n record?.[layout.scope?.reference.split('/').pop()]\r\n ?? itemInfo.propertySchema[\r\n getScope(layout.scope?.reference)\r\n ]?.[layout.scope?.reference.split('/').pop()]?.default\r\n ?? '--'\r\n }}\r\n </p>\r\n </div>\r\n\r\n <!-- number Control -->\r\n <div *ngSwitchCase=\"'number'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <h3 *ngIf=\"itemInfo.propertySchema[getScope(layout.scope?.reference)] && itemInfo.propertySchema[getScope(layout.scope?.reference)][layout.scope?.reference.split('/').pop()]?.format.currency\"\r\n [class]=\"getStyleWithoutClasses(layout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(layout?.scope?.style).style\">\r\n {{ record[layout.scope?.reference.split('/').pop()] | currency: layout.option?.currency\r\n ?\r\n layout.option.currency\r\n :\r\n 'USD' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"layout.option?.visible ? 'row' : 'hidden'\">\r\n <button [style]=\"getStyleWithoutClasses(layout?.style).style\"\r\n [class]=\"layout.option.protected ? 'disabled-button' : getStyleWithoutClasses(layout?.style).classes\"\r\n (click)=\"\r\n invokeButtonClick(\r\n layout,\r\n record,\r\n getRecordIndex(record)\r\n )\r\n\">\r\n <ng-container *ngIf=\"!layout.caption; else textContent\">\r\n <i nz-icon [nzType]=\"layout.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #textContent>\r\n {{ layout.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n\r\n <!-- HorizontalLayout Control -->\r\n <div *ngSwitchCase=\"'HorizontalLayout'\">\r\n <div class=\"card-horizontal-layout\" [class]=\"getStyleWithoutClasses(\r\n layout?.style\r\n ).classes\" [ngStyle]=\"getHorizontalLayoutStyle(layout)\">\r\n <ng-container *ngFor=\"let innerLayout of layout.elements\">\r\n <ng-container\r\n [ngSwitch]=\"innerLayout.scope?.reference && itemInfo.propertySchema[getScope(innerLayout.scope?.reference)] ? itemInfo.propertySchema[getScope(innerLayout.scope?.reference)][innerLayout.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n <!-- Image Control -->\r\n <div *ngSwitchCase=\"'image'\"\r\n [class]=\"innerLayout.option?.visible ? 'row' : 'hidden'\">\r\n <img [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n [src]=\"innerLayout?.option?.src ? innerLayout?.option?.src : record[innerLayout.scope?.reference.split('/').pop()]\"\r\n alt=\"{{ innerLayout.label ? innerLayout.label : getProperty(innerLayout.scope?.reference).productSchema.caption }}\"\r\n (click)=\"showImageDetails(innerLayout.option, record)\" />\r\n </div>\r\n\r\n <!-- String Control -->\r\n <div *ngSwitchCase=\"'string'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n\r\n <!-- DATE FORMAT -->\r\n <ng-container\r\n *ngIf=\"innerLayout.option?.dateFormat; else checkInnerTime\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option.dateFormat) : '--' }}\r\n </ng-container>\r\n\r\n <!-- TIME FORMAT -->\r\n <ng-template #checkInnerTime>\r\n <ng-container\r\n *ngIf=\"innerLayout.option?.timeFormat; else normalInnerValue\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] |\r\n date: innerLayout.option.timeFormat) : '--' }}\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- NORMAL STRING -->\r\n <ng-template #normalInnerValue>\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ??\r\n '--' }}\r\n </ng-template>\r\n </h3>\r\n </div>\r\n\r\n <!-- number Control -->\r\n <div *ngSwitchCase=\"'number'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n <h3 *ngIf=\"itemInfo.propertySchema[getScope(innerLayout.scope?.reference)] && itemInfo.propertySchema[getScope(innerLayout.scope?.reference)][innerLayout.scope?.reference.split('/').pop()]?.format?.currency\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\">\r\n {{ record[innerLayout.scope?.reference.split('/').pop()] | currency:\r\n innerLayout.option?.currency ? innerLayout.option.currency : 'USD'\r\n }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Date Control -->\r\n <div *ngSwitchCase=\"'date'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option?.dateFormat ? innerLayout.option?.dateFormat :\r\n itemInfo.propertySchema[getScope(innerLayout.scope?.reference)]?.[innerLayout.scope?.reference.split('/').pop()]?.format\r\n || 'yyyy-MM-dd') : '--' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Time Control -->\r\n <div *ngSwitchCase=\"'time'\"\r\n [ngClass]=\"[innerLayout?.option?.visible ? 'card-field-wrapper' : 'hidden',getStyleWithoutClasses(innerLayout?.style).classes]\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.style).style\">\r\n\r\n <!-- LABEL -->\r\n <span [ngStyle]=\"getStyleWithoutClasses(innerLayout.label?.style).style\"\r\n [class]=\"getStyleWithoutClasses(innerLayout.label?.style).classes\">\r\n {{ getHorizontalLayoutCaption(innerLayout) }}\r\n </span>\r\n\r\n <!-- VALUE -->\r\n <h3 *ngIf=\"innerLayout.option?.protected && innerLayout.option?.visible\"\r\n [class]=\"getStyleWithoutClasses(innerLayout?.scope?.style).classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(innerLayout?.scope?.style).style\"\r\n (click)=\"showLinkDetails(innerLayout.option, record)\">\r\n {{ record?.[innerLayout.scope?.reference.split('/').pop()] ?\r\n (record[innerLayout.scope?.reference.split('/').pop()] | date:\r\n innerLayout.option?.timeFormat ? innerLayout.option?.timeFormat\r\n :itemInfo.propertySchema[getScope(innerLayout.scope?.reference)]?.[innerLayout.scope?.reference.split('/').pop()]?.format\r\n || 'HH:mm') : '--' }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button nz-button [matTooltip]=\"getHorizontalLayoutTooltip(innerLayout)\"\r\n [matTooltipTouchGestures]=\"'auto'\"\r\n [style]=\"getStyleWithoutClasses(innerLayout?.style).style\"\r\n [class]=\"innerLayout.option?.visible ? innerLayout.option.protected ? 'disabled-button' : getStyleWithoutClasses(innerLayout?.style).classes : 'hidden'\"\r\n (click)=\"\r\n invokeButtonClick(\r\n innerLayout,\r\n record,\r\n getRecordIndex(record)\r\n )\r\n\">\r\n <span class=\"schema-btn-content\">\r\n <i *ngIf=\"showButtonIcon(innerLayout)\" nz-icon\r\n [nzType]=\"innerLayout.icon\" nzTheme=\"outline\">\r\n </i>\r\n\r\n <span *ngIf=\"showButtonCaption(innerLayout)\">\r\n {{ innerLayout.caption }}\r\n </span>\r\n\r\n <span *ngIf=\"\r\n !showButtonIcon(innerLayout) &&\r\n !showButtonCaption(innerLayout)\r\n \">\r\n Button\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"itemInfo?.footer?.elements && itemInfo?.data && itemInfo?.data.length\"\r\n [class]=\"getStyleWithoutClasses(itemInfo?.footer?.style).classes\">\r\n <span *ngFor=\"let element of itemInfo.footer?.elements; let c = index\">\r\n <ng-container\r\n [ngSwitch]=\"element.scope?.reference && itemInfo.propertySchema[getScope(element.scope?.reference)] ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"element.option.protected\" [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">\r\n <h5>{{\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n </h5>\r\n </span>\r\n <div *ngIf=\"!element.option.protected\">\r\n <div [class]=\"element?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(element?.label?.style).style\"\r\n [class]=\"element?.label?.style?.classes[0]\">{{ element.label?.value\r\n ?\r\n element.label?.value : element.label?.caption ?\r\n element.label?.caption :\r\n itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n <nz-date-picker [required]=\"element.option.required\" [name]=\"element.scope?.reference\"\r\n [nzDisabled]=\"element?.option?.disabled\"\r\n (ngModelChange)=\"dateChangeEvent(element, $event)\"\r\n [nzFormat]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format ? itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()]?.format : 'yyyy-MM-dd'\"\r\n [(ngModel)]=\"itemInfo.propertySchema[getScope(element.scope?.reference)][element.scope?.reference.split('/').pop()].value\"\r\n [style]=\"getStyleWithoutClasses(element?.style).style\"></nz-date-picker>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Button Control -->\r\n <div *ngSwitchCase=\"'default'\" [class]=\"element.option?.visible ? 'row' : 'hidden'\"\r\n (click)=\"invokeOnCardFooter(element)\">\r\n <button nz-button [style]=\"getStyleWithoutClasses(element.style).style\"\r\n [class]=\"element.option.protected ? 'disabled-button' : getStyleWithoutClasses(element.style).classes\">\r\n <ng-container *ngIf=\"!element.caption; else textContent\">\r\n <i nz-icon [nzType]=\"element.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n <ng-template #textContent>\r\n {{ element.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <!-- bottom pagination on card -->\r\n <div *ngIf=\"\r\n itemInfo?.data.length && \r\n itemInfo?.layoutSchema?.pagination?.visible &&\r\n !itemInfo?.layoutSchema?.pagination?.top &&\r\n !scrollPagination\r\n \" class=\"card-pagination-wrapper\">\r\n <vl-pagination [itemInfo]=\"itemInfo\" [selectedLanguageInfo]=\"selectedLanguageInfo\" [pageSize]=\"pageSize\"\r\n [currentPage]=\"currentPage\" [pages]=\"pages\" (pageSizeChange)=\"invokeOnPageSizeChange($event)\"\r\n (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n </div>\r\n\r\n\r\n @if (scrollPagination) {\r\n <div #scrollPaginationSentinel class=\"scroll-pagination-sentinel\" aria-hidden=\"true\">\r\n </div>\r\n }\r\n</div>","import {\r\n AfterViewInit,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NzSelectModule],\r\n selector: 'vl-form',\r\n templateUrl: './form.component.html',\r\n styleUrl: './form.component.css',\r\n})\r\nexport class FormComponent implements OnInit, OnChanges, AfterViewInit {\r\n customEmailPattern = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$';\r\n\r\n showPassword = false;\r\n formCopy: any = {};\r\n\r\n @Input() errorMessages: any = {};\r\n @Input() creditCardError: any = {};\r\n @Input() form: any = {};\r\n @Input() selectedLanguageInfo: any = {};\r\n\r\n @Output() formButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() checkBoxChangeEvent: EventEmitter<any> = new EventEmitter();\r\n\r\n ngOnInit(): void { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['form'] && this.form) {\r\n this.formCopy = this.safeClone(this.form);\r\n this.setValidations();\r\n }\r\n\r\n if (\r\n (changes['selectedLanguageInfo'] || this.selectedLanguageInfo) &&\r\n this.selectedLanguageInfo?.selectedLanguage\r\n ) {\r\n this.applySelectedLanguage();\r\n this.setValidations();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.setValidations();\r\n });\r\n }\r\n\r\n private safeClone(value: any): any {\r\n try {\r\n return JSON.parse(JSON.stringify(value || {}));\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n private applySelectedLanguage(): void {\r\n if (this.selectedLanguageInfo?.errorMessages) {\r\n this.errorMessages = this.selectedLanguageInfo.errorMessages;\r\n }\r\n\r\n if (!this.formCopy || !this.form) {\r\n return;\r\n }\r\n\r\n const selectedLanguage = this.selectedLanguageInfo.selectedLanguage;\r\n\r\n this.form.propertySchema = this.formCopy.propertySchema\r\n ? this.safeClone(this.formCopy.propertySchema)\r\n : {};\r\n\r\n this.form.propertySchema = this.translateSchema(\r\n this.form.propertySchema,\r\n selectedLanguage\r\n );\r\n\r\n if (this.formCopy?.layoutSchema?.formSections?.length) {\r\n this.formCopy.layoutSchema.formSections.forEach(\r\n (formSection: any, sectionIndex: number) => {\r\n if (\r\n formSection?.label?.caption &&\r\n selectedLanguage[formSection.label.caption]\r\n ) {\r\n this.form.layoutSchema.formSections[sectionIndex].label.caption =\r\n selectedLanguage[formSection.label.caption];\r\n }\r\n\r\n if (formSection?.formFields?.length) {\r\n formSection.formFields.forEach(\r\n (formField: any, fieldIndex: number) => {\r\n if (\r\n formField?.label?.caption &&\r\n selectedLanguage[formField.label.caption]\r\n ) {\r\n this.form.layoutSchema.formSections[sectionIndex].formFields[\r\n fieldIndex\r\n ].label.caption = selectedLanguage[formField.label.caption];\r\n }\r\n }\r\n );\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n translateSchema(schema: any, selectedLanguage: any): any {\r\n if (!schema || typeof schema !== 'object' || !selectedLanguage) {\r\n return schema;\r\n }\r\n\r\n Object.keys(schema).forEach((key) => {\r\n const value = schema[key];\r\n\r\n if (value && typeof value === 'object' && !Array.isArray(value)) {\r\n this.translateSchema(value, selectedLanguage);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n value.forEach((item) => {\r\n if (item && typeof item === 'object') {\r\n this.translateSchema(item, selectedLanguage);\r\n }\r\n });\r\n }\r\n\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n typeof value.caption === 'string' &&\r\n value.caption.trim()\r\n ) {\r\n const original = value.caption.trim();\r\n\r\n if (selectedLanguage[original]) {\r\n value.caption = selectedLanguage[original];\r\n }\r\n }\r\n\r\n if (\r\n value &&\r\n typeof value === 'object' &&\r\n typeof value.placeholder === 'string' &&\r\n value.placeholder.trim()\r\n ) {\r\n const original = value.placeholder.trim();\r\n\r\n if (selectedLanguage[original]) {\r\n value.placeholder = selectedLanguage[original];\r\n }\r\n }\r\n });\r\n\r\n return schema;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any): { classes: string; style: any } {\r\n if (!styleObject || typeof styleObject !== 'object') {\r\n return { classes: '', style: {} };\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n\r\n return {\r\n classes: Array.isArray(classes) ? classes.join(' ') : classes || '',\r\n style: styleWithoutClasses || {},\r\n };\r\n }\r\n\r\n getSectionBodyStyle(formSection: any): any {\r\n const layout = formSection?.layout || {};\r\n const schemaStyle = this.getStyleWithoutClasses(formSection?.style).style;\r\n\r\n return {\r\n display: schemaStyle?.display || 'grid',\r\n gridTemplateColumns:\r\n schemaStyle?.gridTemplateColumns ||\r\n `repeat(${layout?.desktopColumns || 12}, minmax(0, 1fr))`,\r\n gap: schemaStyle?.gap || layout?.gap || '10px',\r\n alignItems: schemaStyle?.alignItems || 'start',\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n ...schemaStyle,\r\n };\r\n }\r\n\r\n getFieldWrapperStyle(formField: any): any {\r\n const schemaStyle = this.getStyleWithoutClasses(formField?.style).style;\r\n\r\n return {\r\n minWidth: 0,\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n ...schemaStyle,\r\n };\r\n }\r\n\r\n getFieldInnerLayoutStyle(formField: any): any {\r\n if (formField?.layout === 'horizontal') {\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: 'minmax(110px, 30%) 1fr',\r\n alignItems: 'center',\r\n gap: '10px',\r\n };\r\n }\r\n\r\n return {\r\n display: 'block',\r\n };\r\n }\r\n\r\n getScope(scope: any): string {\r\n if (!scope || typeof scope !== 'string') {\r\n return '';\r\n }\r\n\r\n const start = scope.indexOf('#/') + 2;\r\n const end = scope.indexOf('/', start);\r\n\r\n if (start >= 2 && end > start) {\r\n return scope.substring(start, end);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n invokeFormBtnClick(option: any, propertySchema: any): void {\r\n this.formButtonClick.emit({\r\n option,\r\n propertySchema,\r\n });\r\n }\r\n\r\n setformData(): void {\r\n this.checkBoxChangeEvent.emit(this.form?.propertySchema);\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, field: any): string {\r\n let error = '';\r\n let fieldName = '';\r\n\r\n if (field?.errors?.required) {\r\n error = errorMessages?.required || '';\r\n } else if (field?.errors?.email || field?.errors?.pattern) {\r\n error = errorMessages?.pattern || '';\r\n } else if (field?.errors?.minlength) {\r\n error = errorMessages?.minlength || '';\r\n } else if (field?.errors?.maxlength) {\r\n error = errorMessages?.maxlength || '';\r\n }\r\n\r\n if (formField?.label?.value) {\r\n fieldName = formField.label.value;\r\n } else {\r\n const scope = this.getScope(formField?.scope?.reference);\r\n const key = formField?.scope?.reference?.split('/').pop();\r\n const propertySchema = this.form?.propertySchema?.[scope]?.[key];\r\n\r\n fieldName = propertySchema?.caption || propertySchema?.placeholder || '';\r\n }\r\n\r\n if (error && error.toString().includes('{{requiredLength}}')) {\r\n error = error.replace(\r\n /{{\\s*requiredLength\\s*}}/g,\r\n formField?.minlength?.toString() || ''\r\n );\r\n }\r\n\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n setValidations(): void {\r\n if (!this.form?.layoutSchema?.formSections?.length) {\r\n return;\r\n }\r\n\r\n this.form.layoutSchema.formSections.forEach((formSection: any) => {\r\n if (!formSection?.formFields?.length) {\r\n return;\r\n }\r\n\r\n formSection.formFields.forEach((formField: any) => {\r\n const reference = formField?.scope?.reference;\r\n\r\n if (!reference || !this.form?.propertySchema) {\r\n return;\r\n }\r\n\r\n const scope = this.getScope(reference);\r\n const key = reference.split('/').pop();\r\n\r\n const property = this.form.propertySchema?.[scope]?.[key];\r\n\r\n if (!property?.validation?.length) {\r\n return;\r\n }\r\n\r\n property.validation.forEach((validation: any) => {\r\n if (validation.required) {\r\n formField.required = true;\r\n }\r\n\r\n if (validation.email) {\r\n formField.email = true;\r\n }\r\n\r\n if (validation.minlength) {\r\n formField.minlength = validation.minlength;\r\n }\r\n\r\n if (validation.maxlength) {\r\n formField.maxlength = validation.maxlength;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}","<div class=\"form-renderer\" [ngClass]=\"getStyleWithoutClasses(form?.layoutSchema?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(form?.layoutSchema?.style)?.style\">\r\n <form *ngIf=\"form?.layoutSchema?.formSections?.length > 0\">\r\n <div *ngFor=\"let formSection of form?.layoutSchema?.formSections; let i = index\" class=\"section-card\">\r\n <div *ngIf=\"formSection?.label?.caption\" class=\"section-header\">\r\n <div class=\"section-title\" [ngClass]=\"getStyleWithoutClasses(formSection?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formSection?.label?.style)?.style\">\r\n {{ formSection.label.caption }}\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"formSection?.formFields?.length > 0\" class=\"section-body\"\r\n [ngClass]=\"getStyleWithoutClasses(formSection?.style)?.classes\" [ngStyle]=\"getSectionBodyStyle(formSection)\">\r\n <div *ngFor=\"let formField of formSection.formFields\" class=\"field-row\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.style)?.classes\" [ngStyle]=\"getFieldWrapperStyle(formField)\">\r\n <div [ngSwitch]=\"\r\n formField?.scope?.reference &&\r\n form?.propertySchema?.[getScope(formField.scope?.reference)]\r\n ? form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.type\r\n : 'default'\r\n \">\r\n <!-- image control -->\r\n <div *ngSwitchCase=\"'image'\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <img [src]=\"formField?.option?.src\" [alt]=\"'img'\" />\r\n </div>\r\n\r\n <!-- credit card control -->\r\n <div *ngSwitchCase=\"'carditCard'\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <div id=\"card-element\"></div>\r\n <div id=\"card-errors\" [class]=\"creditCardError?.textContent !== '' ? 'text-red-400 m-0' : ''\"></div>\r\n </div>\r\n\r\n <!-- string control -->\r\n <span *ngSwitchCase=\"'string'\" class=\"form-group\">\r\n <span *ngIf=\"formField?.option?.protected\">\r\n <h5 style=\"display: flex; justify-content: space-between\">\r\n <span [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </span>\r\n\r\n <span>\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.value\r\n }}\r\n </span>\r\n </h5>\r\n </span>\r\n\r\n <span *ngIf=\"!formField?.option?.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n formField?.label?.value\r\n ? formField.label.value\r\n : formField?.label?.caption\r\n ? formField.label.caption\r\n : form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <div [ngStyle]=\"\r\n formField?.option?.password\r\n ? {\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center'\r\n }\r\n : {}\r\n \">\r\n <input [type]=\"\r\n formField?.option?.password\r\n ? !showPassword\r\n ? 'password'\r\n : 'text'\r\n : 'text'\r\n \" #inputField=\"ngModel\" [required]=\"formField?.required\" [attr.inputmode]=\"\r\n formField?.option?.email\r\n ? 'email'\r\n : formField?.option?.password\r\n ? 'numeric'\r\n : 'text'\r\n \" [pattern]=\"formField?.email ? customEmailPattern : ''\" [email]=\"formField?.email\"\r\n [minlength]=\"formField?.minlength\" [maxlength]=\"formField?.maxlength\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" [placeholder]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.placeholder\r\n \" />\r\n\r\n <i *ngIf=\"formField?.option?.password\" class=\"fa\"\r\n [ngClass]=\"showPassword ? 'fa-eye' : 'fa-eye-slash'\" (click)=\"togglePasswordVisibility()\"\r\n style=\"position: absolute; right: 10px; cursor: pointer\"></i>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.validation?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.validation?.style)?.style\">\r\n <p [class]=\"\r\n formField?.layout === 'horizontal'\r\n ? 'text-red-400 m-0 horizontal-error'\r\n : 'text-red-400 m-0'\r\n \" *ngIf=\"inputField?.errors\">\r\n {{ setErroMessage(formField, errorMessages, inputField) }}\r\n </p>\r\n </div>\r\n </span>\r\n </span>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group\">\r\n <span *ngIf=\"formField?.option?.protected\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n <h5>\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.value\r\n | currency\r\n : formField?.option?.currency\r\n : true\r\n : formField?.option?.decimalPoint\r\n }}\r\n </h5>\r\n </span>\r\n\r\n <span *ngIf=\"!formField?.option?.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n formField?.label?.value\r\n ? formField.label.value\r\n : form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <input type=\"number\" [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" [placeholder]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.placeholder\r\n \" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- checkbox control -->\r\n <div *ngSwitchCase=\"'checkbox'\" class=\"form-group\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <span *ngIf=\"formField?.option?.postfixCaption\">\r\n <label class=\"form-check-label\">\r\n <input type=\"checkbox\" class=\"form-check-input mr-2\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" (ngModelChange)=\"setformData()\" />\r\n\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n </span>\r\n\r\n <div *ngIf=\"!formField?.option?.postfixCaption\" [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label class=\"form-check-label\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n\r\n <input type=\"checkbox\" class=\"form-check-input\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \" [name]=\"formField.scope?.reference\" (ngModelChange)=\"setformData()\" />\r\n </label>\r\n </div>\r\n </div>\r\n\r\n <!-- dropdown control -->\r\n <div *ngSwitchCase=\"'dropdown'\" class=\"form-group\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\">\r\n <span *ngIf=\"formField?.option?.postfixCaption\">\r\n <select id=\"dynamic-dropdown\" #dropdownField=\"ngModel\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\" [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \">\r\n <option *ngFor=\"\r\n let item of form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.data\r\n \" [value]=\"item[formField?.option?.optionValue]\">\r\n {{ item[formField?.option?.optionLabel] }}\r\n </option>\r\n </select>\r\n\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n </span>\r\n\r\n <div *ngIf=\"!formField?.option?.postfixCaption\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [ngClass]=\"getStyleWithoutClasses(formField?.label?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.label?.style)?.style\">\r\n {{\r\n form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.caption\r\n }}\r\n </label>\r\n\r\n <nz-select nzShowSearch nzAllowClear nzPlaceHolder=\"Select\" #dropdownField=\"ngModel\"\r\n [required]=\"formField?.required\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.scope?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.scope?.style)?.style\"\r\n [name]=\"formField.scope?.reference\" [(ngModel)]=\"\r\n form.propertySchema[getScope(formField.scope?.reference)][\r\n formField.scope?.reference.split('/').pop()\r\n ].value\r\n \">\r\n <nz-option *ngFor=\"\r\n let item of form.propertySchema[getScope(formField.scope?.reference)]?.[\r\n formField.scope?.reference.split('/').pop()\r\n ]?.data\r\n \" [nzLabel]=\"item[formField?.option?.optionLabel]\"\r\n [nzValue]=\"item[formField?.option?.optionValue]\"></nz-option>\r\n </nz-select>\r\n </div>\r\n\r\n <div *ngIf=\"dropdownField?.touched && dropdownField?.invalid\"\r\n [ngClass]=\"getStyleWithoutClasses(formField?.validation?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.validation?.style)?.style\">\r\n <p [class]=\"\r\n formField?.layout === 'horizontal'\r\n ? 'text-red-400 m-0 horizontal-error'\r\n : 'text-red-400 m-0'\r\n \" *ngIf=\"dropdownField?.errors\">\r\n {{ setErroMessage(formField, errorMessages, dropdownField) }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- button/default control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"submit\" [ngClass]=\"getStyleWithoutClasses(formField?.style)?.classes\"\r\n [ngStyle]=\"getStyleWithoutClasses(formField?.style)?.style\"\r\n (click)=\"invokeFormBtnClick(formField?.option, form.propertySchema)\">\r\n {{ formField?.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { AfterViewInit, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { OktaAuthStateService } from '@okta/okta-angular';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NzTableModule } from 'ng-zorro-antd/table';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { PaginationComponent } from '../pagination/pagination.component';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzTableModule,\r\n NzIconModule,\r\n ButtonModule,\r\n PaginationComponent\r\n ],\r\n selector: 'vl-grid',\r\n templateUrl: './grid.component.html',\r\n styleUrl: './grid.component.css'\r\n})\r\nexport class GridComponent implements AfterViewInit {\r\n isLogined: boolean = false;\r\n tableitemInfoCopy: any = {};\r\n @Input() errorMessages: any = {};\r\n @Input() environment: any;\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() tableitemInfo: any = {};\r\n @Input() form: any = {};\r\n @Input() isTableDataLoad: boolean = false;\r\n @Input() currenTableOptions: any = {};\r\n @Input() projectSeleted: any = '';\r\n @Input() pageSize: number = 5;\r\n @Input() currentPage: number = 0;\r\n @Input() pages: number[] = [];\r\n @Input() userInfo: any;\r\n @Output() onPageChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onPageSizeChange: EventEmitter<any> = new EventEmitter();\r\n @Output() onGridScroll: EventEmitter<any> = new EventEmitter();\r\n @Output() showGridLink: EventEmitter<any> = new EventEmitter();\r\n @Output() gridButtonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridIncreamentClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridDecreamentClick: EventEmitter<any> = new EventEmitter();\r\n @Output() gridImgClick: EventEmitter<any> = new EventEmitter();\r\n\r\n constructor(private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private notificationService: NotificationService,\r\n private oktaAuthService: OktaAuthStateService,) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.authenticating();\r\n setTimeout(() => {\r\n if (this.environment && this.environment?.login && this.environment?.login?.type == \"oktaAuth\") {\r\n this.oktaAuthService.authState$.subscribe(\r\n (result) => {\r\n if (result.isAuthenticated) {\r\n this.isLogined = true;\r\n }\r\n }\r\n );\r\n }\r\n }, 500);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n setTimeout(() => {\r\n if (changes['tableitemInfo'] && this.tableitemInfo) {\r\n console.log('this.tableitemInfo: ', this.tableitemInfo);\r\n console.log('this.selectedLanguageInfo?: ', this.selectedLanguageInfo);\r\n this.tableitemInfoCopy = JSON.parse(JSON.stringify(this.tableitemInfo));\r\n }\r\n if (changes['SelectedLanguage'] || this.selectedLanguageInfo?.selectedLanguage) {\r\n if (this.tableitemInfoCopy?.layoutSchema && this.tableitemInfoCopy.layoutSchema?.elements?.length) {\r\n this.tableitemInfo.propertySchema = JSON.parse(JSON.stringify(this.tableitemInfoCopy.propertySchema));\r\n this.tableitemInfo.propertySchema = this.translateSchema(this.tableitemInfo.propertySchema, this.selectedLanguageInfo.selectedLanguage);\r\n if (this.tableitemInfoCopy?.footer) {\r\n this.tableitemInfo.footer = JSON.parse(JSON.stringify(this.tableitemInfoCopy.footer));\r\n this.tableitemInfo.footer = this.translateSchema(this.tableitemInfo.footer, this.selectedLanguageInfo.selectedLanguage);\r\n }\r\n this.tableitemInfoCopy.layoutSchema.elements.forEach((column: any, index: any) => {\r\n if (column.label && column.label.caption && this.selectedLanguageInfo.selectedLanguage[column.label.caption]) {\r\n this.tableitemInfo.layoutSchema.elements[index].label.caption = this.selectedLanguageInfo.selectedLanguage[column.label.caption];\r\n }\r\n });\r\n }\r\n }\r\n }, 500);\r\n }\r\n\r\n translateSchema(schema: any, SelectedLanguage: any): any {\r\n if (schema && typeof schema === 'object') {\r\n for (const key of Object.keys(schema)) {\r\n const val = schema[key];\r\n if (val && typeof val === 'object') {\r\n this.translateSchema(val, SelectedLanguage);\r\n }\r\n if (val && val.caption !== undefined && typeof val.caption === 'string') {\r\n const original = val.caption.trim();\r\n if (original && SelectedLanguage[original]) {\r\n val.caption = SelectedLanguage[original];\r\n }\r\n }\r\n if (val && val.value !== undefined && typeof val.value === 'string' && !val.value.includes(\"{{\")) {\r\n const originalVal = val.value.trim();\r\n if (originalVal && SelectedLanguage[originalVal]) {\r\n val.value = SelectedLanguage[originalVal];\r\n }\r\n }\r\n }\r\n }\r\n return schema;\r\n }\r\n\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n onScrollEvent(event: any) {\r\n this.onGridScroll.emit(event);\r\n }\r\n\r\n showLinkDetails(option: any, data: any) {\r\n this.showGridLink.emit({ option: option, data: data });\r\n }\r\n\r\n invokeGridBtnClick(option: any, propertySchema: any) {\r\n this.gridButtonClick.emit({ option: option, propertySchema: propertySchema });\r\n }\r\n\r\n upsertAction(option: any, data: any) {\r\n let url = option?.data_url;\r\n if (url && url?.includes(\"{{\")) {\r\n const regex = /{{(.*?)}}/g;\r\n const matches = [...url.matchAll(regex)].map(m => m[1]);\r\n if (matches && data && data[matches[0]]) {\r\n option.data_url = url.replace(`{{${matches[0]}}}`, data[matches[0]])\r\n }\r\n }\r\n let baseUrl = this.environment?.apiUrl + option.data_url;\r\n this.requestService.dynamicCall(option.method, {}, baseUrl, option?.passToken, this.projectSeleted, this.userInfo).subscribe((res: any) => {\r\n console.log('res: ', res);\r\n if (option?.reload) {\r\n window.location.reload();\r\n } else if (option.notifcation) {\r\n if(option.notifcation.success){\r\n this.notificationService.success(option.notifcation.success);\r\n let findObj: any = this.findDynamicKeyAndValue(option);\r\n if(findObj.keyName){\r\n data[findObj.keyName] = \"APPROVED\";\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n setActionColumn(option: any, data: any) {\r\n let showAction: boolean = true;\r\n let findCondiontionalKey: any = this.findDynamicKeyAndValue(option);\r\n if (findCondiontionalKey.keyName) {\r\n showAction = data[findCondiontionalKey.keyName] === findCondiontionalKey.value ? true : false;\r\n }\r\n return showAction;\r\n }\r\n\r\n findDynamicKeyAndValue(object: Record<string, any>) {\r\n const regex = /^\\{\\{(.*?)\\}\\}$/;\r\n for (const key of Object.keys(object)) {\r\n const match = key.match(regex);\r\n if (match) {\r\n return {\r\n keyName: match[1].trim(), \r\n value: object[key] \r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n incrementQuantity(index: any, field: any, option: any) {\r\n this.gridIncreamentClick.emit({ index: index, field: field, option: option });\r\n }\r\n\r\n invokeTableImageClick(column: any, data: any) {\r\n this.gridImgClick.emit({ col: column, data: data });\r\n }\r\n\r\n decrementQuantity(index: any, field: any, option: any) {\r\n this.gridDecreamentClick.emit({ index: index, field: field, option: option });\r\n }\r\n\r\n invokeOnPageSizeChange(pageSize: any) {\r\n this.onPageSizeChange.emit(pageSize);\r\n }\r\n\r\n invokeGoToPage(page: any) {\r\n this.onPageChange.emit(page);\r\n }\r\n\r\n authenticating() {\r\n this.utilityService.getStorage(`${this.projectSeleted}Logined`).then((logined: any) => {\r\n if (logined == \"true\") {\r\n this.isLogined = true;\r\n }\r\n })\r\n }\r\n}\r\n","<div *ngIf=\"!tableitemInfo.data?.length\" class=\"alert alert-warning col-md-12\" role=\"alert\">\r\n {{ tableitemInfo.layoutSchema?.noRecordMessage}}\r\n</div>\r\n<div *ngIf=\"tableitemInfo.data?.length\" class=\"reservation-container pt-5 px-3\">\r\n <nz-table #basicTable [nzData]=\"tableitemInfo.data\" [nzBordered]=\"true\"\r\n [nzFrontPagination]=\"currenTableOptions?.pagination?.tabs\"\r\n [style]=\"getStyleWithoutClasses(currenTableOptions?.style).style\" (scroll)=\"onScrollEvent($event)\"\r\n [nzLoading]=\"isTableDataLoad\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of tableitemInfo.layoutSchema.elements\">{{ column?.label?.caption }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of tableitemInfo.data; let i = index\">\r\n <td *ngFor=\"let col of tableitemInfo.layoutSchema.elements\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\">\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'string'\"\r\n [class]=\"getStyleWithoutClasses(col?.scope?.style).classes\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\">\r\n <span *ngIf=\"col.option.protected\">\r\n <span *ngIf=\"col.option?.link\" (click)=\"showLinkDetails(col.option, data)\">\r\n {{data[col.scope?.reference.split('/').pop()]}}\r\n </span>\r\n <span *ngIf=\"!col.option?.link\">\r\n <ng-container *ngIf=\"col?.option?.dateFormat; else string\">\r\n {{ data[col.scope?.reference.split('/').pop()] | date:'yyyy-MM-dd' }}\r\n </ng-container>\r\n <ng-template #string>\r\n {{ data[col.scope?.reference.split('/').pop()] }}\r\n </ng-template>\r\n </span>\r\n </span>\r\n <span *ngIf=\"!col.option.protected\">\r\n <input [(ngModel)]=\"data[col.scope?.reference.split('/').pop()]\"\r\n class=\"p-inputtext p-component\" />\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'number'\">\r\n <span *ngIf=\"col.option.protected\">\r\n <span *ngIf=\"col.option?.innerAction?.action == 'multiply'\">\r\n {{\r\n (data[col.option?.innerAction?.from] * data[col.option?.innerAction?.to])\r\n | number:'1.2-2'\r\n }}\r\n </span>\r\n <span *ngIf=\"!col.option?.innerAction\">\r\n {{data[col.scope?.reference.split('/').pop()] | currency:\r\n tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.currency\r\n :true }}\r\n </span>\r\n </span>\r\n <span *ngIf=\"!col.option.protected\">\r\n <input [(ngModel)]=\"data[col.scope?.reference.split('/').pop()]\" type=\"number\"\r\n class=\"p-inputtext p-component\" />\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'image'\">\r\n <img *ngIf=\"data[col.scope?.reference.split('/').pop()]\"\r\n [src]=\"data[col.scope?.reference.split('/').pop()]\" alt=\"Image\"\r\n (click)=\"invokeTableImageClick(col, data)\"\r\n [style]=\"getStyleWithoutClasses(col?.scope?.style).style\" />\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!col?.scope?.reference\">\r\n <span *ngIf=\"col.option?.actionColumn\">\r\n <span nz-icon *ngIf=\"setActionColumn(col.option?.save, data)\" [nzType]=\"col.option?.save?.icon\" [nzTheme]=\"'twotone'\"\r\n [style]=\"col.option?.save?.style\" [nzTwotoneColor]=\"'#52c41a'\"\r\n [class]=\"col.option?.save?.style?.classes[0]\" (click)=\"upsertAction(col.option?.save, data)\">\r\n </span>\r\n <span nz-icon *ngIf=\"setActionColumn(col.option?.delete, data)\" [nzType]=\"col.option?.delete?.icon\" [nzTheme]=\"'twotone'\"\r\n [style]=\"col.option?.delete?.style\" [nzTwotoneColor]=\"'#FF0000'\"\r\n [class]=\"col.option?.delete?.style?.classes[0]\"\r\n (click)=\"upsertAction(col.option?.delete, data)\"></span>\r\n\r\n </span>\r\n <span *ngIf=\"!col.option?.actionColumn\">\r\n <button type=\"submit\" [style]=\"getStyleWithoutClasses(col?.label?.style).style\"\r\n (click)=\"invokeGridBtnClick(col.option, data)\" [class]=\"col?.label?.style?.classes[0]\">\r\n {{ col.label?.caption }}\r\n </button>\r\n </span>\r\n </ng-container>\r\n\r\n <!-- For quantity column, display increment/decrement buttons -->\r\n <ng-container\r\n *ngIf=\"tableitemInfo.propertySchema[getScope(col.scope?.reference)] && tableitemInfo.propertySchema[getScope(col.scope?.reference)][col?.scope?.reference?.split('/').pop()]?.type === 'quantity'\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <button pButton icon=\"pi pi-minus\"\r\n (click)=\"decrementQuantity(i,col.scope?.reference.split('/').pop(), col.option)\"\r\n [disabled]=\"data.quantity <= 0\"\r\n style=\"margin-right: 8px; height: 10px; width: 10px;\"></button>\r\n <span>{{ data[col.scope?.reference.split('/').pop()] }}</span>\r\n <button pButton icon=\"pi pi-plus\"\r\n (click)=\"incrementQuantity(i, col.scope?.reference.split('/').pop(), col.option)\"\r\n style=\"margin-left: 8px; height: 10px; width: 10px;\"></button>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </nz-table>\r\n</div>\r\n\r\n<!-- table footer -->\r\n<div *ngIf=\"tableitemInfo?.footer?.formFields && tableitemInfo.data?.length\"\r\n class=\"table-footer flex flex-column align-items-end gap-2 pt-2 mx-4 border-top-1 border-cyan-500\">\r\n <div *ngFor=\"let tableField of tableitemInfo?.footer?.formFields\">\r\n <div\r\n [ngSwitch]=\"tableField?.scope?.reference && tableitemInfo.propertySchema[getScope(tableField.scope?.reference)] && tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()] ?\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.type : 'default'\">\r\n\r\n <!-- string control -->\r\n <div *ngSwitchCase=\"'string'\" class=\"form-group\">\r\n <span *ngIf=\"tableField.option.protected\">\r\n <h5 style=\"display: flex; justify-content: space-between;\">\r\n <span [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">\r\n {{\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n </span>\r\n <span>\r\n {{\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.value\r\n }}\r\n </span>\r\n </h5>\r\n </span>\r\n <div *ngIf=\"!tableField.option.protected\">\r\n <div [class]=\"tableField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">{{ tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"text\" #inputField=\"ngModel\" [required]=\"tableField.option.required\"\r\n [email]=\"tableField.option.email\" [class]=\"tableField.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(tableField?.scope?.style).style\"\r\n [(ngModel)]=\"tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"tableField.scope?.reference\"\r\n [placeholder]=\"tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(tableField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['required']\">{{tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['email']\">{{(tableField.label?.value ?\r\n tableField.label?.value :\r\n tableitemInfo.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group\">\r\n <span *ngIf=\"tableField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">\r\n <h5>{{\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }} {{\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.value\r\n |\r\n currency:tableField.option.currency :true: tableField.option?.decimalPoint}}\r\n </h5>\r\n </span>\r\n <span *ngIf=\"!tableField.option.protected\">\r\n <div [class]=\"tableField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label [style]=\"getStyleWithoutClasses(tableField?.label?.style).style\"\r\n [class]=\"tableField?.label?.style?.classes[0]\">{{ tableField.label?.value ?\r\n tableField.label?.value :\r\n form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"number\" [class]=\"tableField.scope?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(tableField?.scope?.style).style\"\r\n [(ngModel)]=\"form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"tableField.scope?.reference\"\r\n [placeholder]=\"form.propertySchema[getScope(tableField.scope?.reference)][tableField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- button control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"submit\" [style]=\"getStyleWithoutClasses(tableField.label.style).style\"\r\n (click)=\"invokeGridBtnClick(tableField.option, tableitemInfo.propertySchema)\">\r\n {{ tableField.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- bottom pagination on grid -->\r\n<div\r\n *ngIf=\"tableitemInfo.data?.length && !tableitemInfo?.layoutSchema?.pagination?.top && tableitemInfo?.layoutSchema?.pagination?.bottom\">\r\n <vl-pagination [itemInfo]=\"tableitemInfo\" [pageSize]=\"pageSize\" [currentPage]=\"currentPage\" [pages]=\"pages\"\r\n (pageSizeChange)=\"invokeOnPageSizeChange($event)\" (onGoToPage)=\"invokeGoToPage($event)\">\r\n </vl-pagination>\r\n</div>","import { AfterViewInit, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { OktaAuthStateService } from '@okta/okta-angular';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\nimport { Couchdb } from '../../services/couchdb';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n NzIconModule\r\n ],\r\n selector: 'vl-header-menu',\r\n templateUrl: './header-menu.component.html',\r\n styleUrl: './header-menu.component.css'\r\n})\r\nexport class HeaderMenuComponent implements AfterViewInit {\r\n isLogined: boolean = false;\r\n\r\n @Input() headerItems: any[] = [];\r\n @Input() headerLayout: any = {};\r\n @Input() environment: any;\r\n @Input() tenantName: any;\r\n @Input() projectSeleted: any;\r\n @Input() cartInfo: any = {\r\n items: [],\r\n totalPrice: 0,\r\n quantity: 0\r\n };\r\n\r\n @Output() buttonClick: EventEmitter<any> = new EventEmitter();\r\n @Output() showTableContent: EventEmitter<any> = new EventEmitter();\r\n @Output() searchItems: EventEmitter<any> = new EventEmitter();\r\n\r\n constructor(\r\n private oktaAuthService: OktaAuthStateService,\r\n private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private couchdbService: Couchdb,\r\n private platform: Platform\r\n ) { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['headerItems'] && this.headerItems) {\r\n this.setHeaderItems(this.headerItems).then((updatedHeaderItems: any) => {\r\n this.headerItems = updatedHeaderItems;\r\n });\r\n }\r\n\r\n if (changes['environment'] && this.environment && this.environment?.login && this.environment?.login?.type == \"oktaAuth\") {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n this.utilityService.getLocalStorage(`loginedUser`).then((logined: any) => {\r\n if (logined && logined.token) {\r\n this.requestService.getLoginUser(logined?.token).subscribe(() => {\r\n this.isLogined = true;\r\n });\r\n }\r\n });\r\n }\r\n\r\n this.oktaAuthService.authState$.subscribe((result) => {\r\n if (result.isAuthenticated) {\r\n this.isLogined = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n getStyle(styleObject: any): Record<string, any> {\r\n if (!styleObject || typeof styleObject !== 'object') {\r\n return {};\r\n }\r\n\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return styleWithoutClasses;\r\n }\r\n\r\n isVisible(header: any): boolean {\r\n return header?.option?.visible !== false;\r\n }\r\n\r\n shouldShowDefaultButton(header: any): boolean {\r\n if (!this.isVisible(header)) {\r\n return false;\r\n }\r\n\r\n if (header?.option?.islogin === true) {\r\n return this.isLogined;\r\n }\r\n\r\n if (header?.option?.islogin === false) {\r\n return !this.isLogined;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n invokeSearchedItems(option: any, search: any) {\r\n this.searchItems.emit({ option: option, search: search });\r\n }\r\n\r\n invokeHeaderButtonClick(option: any) {\r\n this.buttonClick.emit(option);\r\n }\r\n\r\n invokeShowtableContent(option: any) {\r\n this.showTableContent.emit(option);\r\n }\r\n\r\n async setHeaderItems(items: any[]): Promise<any[]> {\r\n for (const item of items) {\r\n if (item?.scope?.reference?.includes('logo')) {\r\n const logoUrl = item?.option?.src;\r\n if (logoUrl && this.projectSeleted) {\r\n let projectName = `${this.tenantName}_${this.projectSeleted}`\r\n const image = await this.couchdbService.getFileContentFromCouchDb(\r\n projectName,\r\n `Media/${logoUrl}`\r\n );\r\n item.option.src = this.utilityService.getMediaSrc(image);\r\n }\r\n }\r\n }\r\n return items;\r\n }\r\n}","<header *ngIf=\"headerItems.length > 0\" [ngStyle]=\"getStyle(headerLayout?.style)\">\r\n\r\n <ng-container *ngFor=\"let header of headerItems\"\r\n [ngSwitch]=\"header.scope?.reference ? header.scope?.reference.split('/').pop() : 'default'\">\r\n\r\n <!-- Logo -->\r\n <ng-container *ngSwitchCase=\"'logo'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <img [src]=\"header.option.src\" [alt]=\"header.alt || 'Logo'\"\r\n [ngStyle]=\"getStyle(header?.scope?.style)\" />\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Search -->\r\n <ng-container *ngSwitchCase=\"'searchInput'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <input #search type=\"text\" [placeholder]=\"header.option.placeholder\"\r\n (keyup.enter)=\"invokeSearchedItems(header.option, search)\"\r\n [ngStyle]=\"getStyle(header?.scope?.style)\" />\r\n\r\n <button *ngIf=\"header.option.button !== false\" type=\"button\"\r\n (click)=\"invokeSearchedItems(header.option, search)\" [ngStyle]=\"getStyle(header?.buttonStyle)\">\r\n <ng-container *ngIf=\"!header.caption; else searchTextContent\">\r\n <i nz-icon [nzType]=\"header.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n\r\n <ng-template #searchTextContent>\r\n {{ header.caption }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Cart -->\r\n <ng-container *ngSwitchCase=\"'cart'\">\r\n <div *ngIf=\"isVisible(header)\" [ngStyle]=\"getStyle(header?.option?.style)\"\r\n (click)=\"invokeShowtableContent(header.option)\">\r\n\r\n <span [ngStyle]=\"getStyle(header?.priceStyle)\">\r\n {{ cartInfo.totalPrice | currency : header.option?.currency ? header.option.currency : 'USD' }}\r\n </span>\r\n\r\n <span [ngStyle]=\"getStyle(header?.quantityStyle)\">\r\n {{ cartInfo.quantity }}\r\n </span>\r\n\r\n <i [class]=\"header.icon\" [ngStyle]=\"getStyle(header?.iconStyle)\">\r\n </i>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Default Button -->\r\n <ng-container *ngSwitchCase=\"'default'\">\r\n <div *ngIf=\"shouldShowDefaultButton(header)\" [ngStyle]=\"getStyle(header?.option?.style)\">\r\n\r\n <button type=\"button\" (click)=\"invokeHeaderButtonClick(header.option)\"\r\n [ngStyle]=\"getStyle(header?.buttonStyle)\">\r\n <ng-container *ngIf=\"!header.label; else buttonTextContent\">\r\n <i nz-icon [nzType]=\"header.icon\" nzTheme=\"outline\"></i>\r\n </ng-container>\r\n\r\n <ng-template #buttonTextContent>\r\n {{ header.label }}\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n</header>","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NetworkLogService {\r\n\r\n private logs: any[] = [];\r\n\r\n addLog(log: any) {\r\n this.logs.unshift(log); // latest first\r\n localStorage.setItem('networkLogs', JSON.stringify(this.logs));\r\n }\r\n\r\n getLogsByDate(date: string): any[] {\r\n return this.logs.filter(l => l.date === date);\r\n }\r\n\r\n getAll(): any[] {\r\n return [...this.logs];\r\n }\r\n\r\n clear() {\r\n this.logs = [];\r\n localStorage.removeItem('networkLogs');\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NetworkLogService } from '../../services/network-log.service';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n standalone: true,\r\n imports: [\r\n CommonModule\r\n ],\r\n selector: 'vl-logs',\r\n templateUrl: './logs.component.html',\r\n styleUrl: './logs.component.css'\r\n})\r\nexport class LogsComponent {\r\n logs: any[] = [];\r\n expandedRow: number | null = null;\r\n\r\n constructor(private logService: NetworkLogService) {}\r\n\r\n ngOnInit() {\r\n const today = new Date().toISOString().split('T')[0];\r\n this.logs = this.logService.getLogsByDate(today);\r\n console.log('this.logs: ', this.logs);\r\n }\r\n\r\n toggleRow(index: number) {\r\n this.expandedRow = this.expandedRow === index ? null : index;\r\n }\r\n}\r\n","<div class=\"network-log-wrapper\">\r\n\r\n <div class=\"network-log-table\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Time</th>\r\n <th>Method</th>\r\n <th>URL</th>\r\n <th>Status</th>\r\n <th>Duration (ms)</th>\r\n <th>Size (KB)</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let log of logs; let i = index\">\r\n\r\n <!-- MAIN ROW -->\r\n <tr class=\"log-row\" (click)=\"toggleRow(i)\">\r\n <td>{{ i + 1 }}</td>\r\n <td>{{ log.time }}</td>\r\n\r\n <td>\r\n <span class=\"method\" [class.get]=\"log.method === 'GET'\" [class.post]=\"log.method === 'POST'\"\r\n [class.put]=\"log.method === 'PUT'\" [class.delete]=\"log.method === 'DELETE'\">\r\n {{ log.method }}\r\n </span>\r\n </td>\r\n\r\n <td class=\"ellipsis\" [title]=\"log.url\">\r\n {{ log.url }}\r\n </td>\r\n\r\n <td [class.error]=\"log.status >= 400\">\r\n {{ log.status }}\r\n </td>\r\n\r\n <td>{{ log.duration }}</td>\r\n\r\n <td>{{ log.size | number:'1.0-2' }}</td>\r\n </tr>\r\n\r\n <!-- DETAILS ROW -->\r\n <tr *ngIf=\"expandedRow === i\" class=\"details-row\">\r\n <td colspan=\"7\">\r\n <div class=\"details-container\">\r\n\r\n <!-- META -->\r\n <div class=\"detail-block\">\r\n <h4>Meta</h4>\r\n <p><strong>Date:</strong> {{ log.date }}</p>\r\n <p><strong>Type:</strong> {{ log.type }}</p>\r\n </div>\r\n\r\n <!-- REQUEST -->\r\n <div class=\"detail-block\">\r\n <h4>Request</h4>\r\n <p><strong>Headers</strong></p>\r\n <pre>{{ log.requestHeaders | json }}</pre>\r\n\r\n <p><strong>Body</strong></p>\r\n <pre>{{ log.requestBody | json }}</pre>\r\n </div>\r\n\r\n <!-- RESPONSE -->\r\n <div class=\"detail-block\">\r\n <h4>Response</h4>\r\n <pre>{{ log.responseBody | json }}</pre>\r\n </div>\r\n\r\n <!-- PERFORMANCE -->\r\n <div class=\"detail-block\">\r\n <h4>Performance</h4>\r\n <p><strong>Duration:</strong> {{ log.duration }} ms</p>\r\n <p><strong>Size:</strong> {{ log.size | number:'1.0-2' }} KB</p>\r\n </div>\r\n\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-label',\r\n standalone: true,\r\n templateUrl: './label.html',\r\n styleUrl: './label.css',\r\n})\r\nexport class Label {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n\r\n}\r\n","<label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\" [class]=\"formField?.label?.style?.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>","import { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\n\r\n@Component({\r\n selector: 'vl-textbox',\r\n standalone: true,\r\n templateUrl: './textbox.html',\r\n styleUrl: './textbox.css',\r\n imports: [FormsModule, InputTextModule]\r\n})\r\nexport class Textbox {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n}\r\n","<input pInputText type=\"text\" #inputField=\"ngModel\" [required]=\"formField.option?.required\"\r\n [email]=\"formField.option?.email\" [disabled]=\"formField?.option?.disabled\"\r\n [readonly]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.readonly\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\" [class]=\"formField?.scope?.style?.classes ? formField?.scope?.style?.classes[0] : ''\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\" />","import { NgIf } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { SelectModule } from 'primeng/select';\r\n\r\n@Component({\r\n selector: 'vl-autocomplete',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n AutoCompleteModule,\r\n SelectModule,\r\n NgIf\r\n ],\r\n templateUrl: './autocomplete.html',\r\n styleUrl: './autocomplete.css',\r\n})\r\nexport class Autocomplete {\r\n @Input() formField: any;\r\n @Input() modalItemInfo: any;\r\n @Input() matchData: any;\r\n @Input() selectedLanguageInfo: any;\r\n @Input() errorMessages: any;\r\n @Output() autocompChange: EventEmitter<any> = new EventEmitter();\r\n @Output() autocompFocusOut: EventEmitter<any> = new EventEmitter();\r\n\r\n autocompChangeEvent(event: any, formField: any) {\r\n this.autocompChange.emit({ event: event, formField: formField });\r\n }\r\n\r\n autocompFocusOutEvent(event: any, formField: any) {\r\n this.autocompFocusOut.emit({ event: event, formField: formField });\r\n }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, errorType: any) {\r\n let error: any = \"\";\r\n let fieldName: any = formField.label?.value ? formField.label?.value : formField.label?.caption ? formField.label?.caption : this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption;\r\n if (errorType == \"required\") {\r\n error = this.selectedLanguageInfo?.errorMessages?.required ? this.selectedLanguageInfo?.errorMessages.required : errorMessages.required\r\n }\r\n if (error && error.toString().includes(\"{{requiredLength}}\")) {\r\n error = error.replace(/{{\\s*requiredLength\\s*}}/g, formField?.minlength.toString());\r\n }\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n}\r\n","<p-autoComplete #autocompleteField=\"ngModel\" [required]=\"formField.option.required\" [name]=\"formField.scope?.reference\"\r\n inputmode\r\n styleClass=\"custom-autocomplete\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\" [class]=\"formField?.scope?.style?.classes ? formField?.scope?.style?.classes[0] : ''\"\r\n [suggestions]=\"matchData\" [dropdown]=\"true\" [optionLabel]=\"formField.option.autocomplete.response.label\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\"\r\n (completeMethod)=\"autocompChangeEvent($event, formField)\" \r\n (ngModelChange)=\"autocompFocusOutEvent($event, formField)\"\r\n [attr.inputmode]=\"formField.option.keyboard === 'numeric' ? 'numeric' : null\">\r\n</p-autoComplete>\r\n\r\n<!-- Error Message -->\r\n<div *ngIf=\"autocompleteField?.touched && autocompleteField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"autocompleteField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"autocompleteField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { Capacitor, CapacitorHttp } from '@capacitor/core';\r\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\r\nimport { DynamicDialogRef } from 'primeng/dynamicdialog';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { Label } from '../../components/label/label';\r\nimport { Textbox } from '../../components/textbox/textbox';\r\nimport { String } from '../../components/string/string';\r\nimport { Autocomplete } from '../../components/autocomplete/autocomplete';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-model',\r\n templateUrl: './model.component.html',\r\n styleUrl: './model.component.css',\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzSelectModule,\r\n NzDatePickerModule,\r\n DatePickerModule,\r\n AutoCompleteModule,\r\n InputTextModule,\r\n Label,\r\n Textbox,\r\n String,\r\n Autocomplete\r\n ]\r\n})\r\nexport class ModelComponent implements OnChanges {\r\n matchData: any[] = [];\r\n date2: Date | undefined;\r\n\r\n @Input() errorMessages: any = {};\r\n @Input() modalItemInfo: any = {};\r\n @Input() selectedLanguageInfo: any = {};\r\n @Input() userInfo: any = {};\r\n @Input() setFormDataHandler?: () => void | Promise<void>;\r\n\r\n copyLayoutSchema: any = {};\r\n isLoading = false;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private readonly dialogRef: DynamicDialogRef\r\n ) { }\r\n\r\n ngAfterViewInit(): void {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n !changes['modalItemInfo'] &&\r\n !changes['selectedLanguageInfo'] &&\r\n !changes['userInfo']\r\n ) {\r\n return;\r\n }\r\n\r\n void this.initializeDialogContent();\r\n }\r\n\r\n private async initializeDialogContent(): Promise<void> {\r\n if (!this.modalItemInfo?.layoutSchema) {\r\n return;\r\n }\r\n\r\n this.copyLayoutSchema = JSON.parse(\r\n JSON.stringify(this.modalItemInfo.layoutSchema)\r\n );\r\n\r\n const translations =\r\n this.selectedLanguageInfo?.selectedLanguage;\r\n\r\n if (translations) {\r\n this.modalItemInfo.layoutSchema =\r\n this.updateLayoutLanguage(\r\n this.copyLayoutSchema,\r\n translations\r\n );\r\n }\r\n\r\n if (this.modalItemInfo?.currentRecord) {\r\n this.mapDataToPropertySchema(\r\n this.modalItemInfo.currentRecord,\r\n this.modalItemInfo\r\n );\r\n }\r\n\r\n await this.setAutoCompleteData();\r\n }\r\n\r\n\r\n updateLayoutLanguage<T>(\r\n schema: T,\r\n translations: Record<string, string>\r\n ): T {\r\n const cloned = JSON.parse(JSON.stringify(schema));\r\n\r\n const walk = (obj: any) => {\r\n if (!obj || typeof obj !== 'object') return;\r\n\r\n // 🔹 label.caption (most common in form schemas)\r\n if (obj.label && typeof obj.label.caption === 'string') {\r\n const original = obj.label.caption;\r\n obj.label.caption = translations[original] ?? original;\r\n }\r\n\r\n // 🔹 direct caption (fallback / buttons / future-proof)\r\n if (typeof obj.caption === 'string') {\r\n const original = obj.caption;\r\n obj.caption = translations[original] ?? original;\r\n }\r\n\r\n // 🚫 Skip huge data arrays (autocomplete datasets, etc.)\r\n if (Array.isArray(obj.data)) return;\r\n\r\n // 🔁 Recurse\r\n Object.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (typeof value === 'object') {\r\n walk(value);\r\n }\r\n });\r\n };\r\n\r\n walk(cloned);\r\n return cloned;\r\n }\r\n\r\n\r\n mapDataToPropertySchema(data: any, modalItemInfo: any): void {\r\n if (!data || !modalItemInfo?.propertySchema) return;\r\n const [rootScope] = Object.keys(modalItemInfo.propertySchema);\r\n if (!rootScope) return;\r\n\r\n const schemaFields = modalItemInfo.propertySchema[rootScope];\r\n Object.keys(schemaFields).forEach((fieldKey) => {\r\n if (data.hasOwnProperty(fieldKey)) {\r\n if (!schemaFields[fieldKey]) {\r\n schemaFields[fieldKey] = {};\r\n }\r\n schemaFields[fieldKey].value = data[fieldKey];\r\n }\r\n });\r\n }\r\n\r\n\r\n async setAutoCompleteData(): Promise<void> {\r\n const sections =\r\n this.modalItemInfo?.layoutSchema?.formSections || [];\r\n\r\n for (const section of sections) {\r\n for (const field of section?.formFields || []) {\r\n const reference = field?.scope?.reference;\r\n\r\n if (!reference) {\r\n continue;\r\n }\r\n\r\n const scope = this.getScope(reference);\r\n const fieldName = reference.split('/').pop();\r\n\r\n const type =\r\n this.modalItemInfo?.propertySchema?.[scope]?.[fieldName]?.type;\r\n\r\n if (type === 'autocomplete' && field?.option?.autocomplete) {\r\n this.isLoading = true;\r\n this.cdr.detectChanges();\r\n\r\n try {\r\n field.data = await this.fetchAutocompleteData(field);\r\n } finally {\r\n this.isLoading = false;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n async fetchAutocompleteData(formField: any) {\r\n const config = formField.option?.autocomplete;\r\n if (!config) return [];\r\n const request: any = this.resolveAutocompleteConfig(config, this.userInfo);\r\n const response = await CapacitorHttp.request({\r\n url: request.url,\r\n method: request.method,\r\n params: request.params,\r\n headers: request.headers\r\n });\r\n\r\n return response.data?.length > 0 ? response.data : [];\r\n }\r\n\r\n resolveAutocompleteConfig(\r\n config: any,\r\n userInfo: any\r\n ) {\r\n const params: any = {};\r\n\r\n Object.entries(\r\n config.params || {}\r\n ).forEach(([key, value]: any) => {\r\n // Dynamic token\r\n if (\r\n typeof value === 'string' &&\r\n value.includes('{{')\r\n ) {\r\n params[key] =\r\n this.resolveToken(\r\n value,\r\n userInfo\r\n );\r\n }\r\n // Computed parameter\r\n else if (value?.type === 'company') {\r\n params[key] =\r\n this.buildCompany(userInfo);\r\n }\r\n // Static parameter\r\n else {\r\n params[key] = value;\r\n }\r\n });\r\n\r\n const requestUrl =\r\n this.getAutocompleteRequestUrl(\r\n userInfo?.p5_backend_url,\r\n config?.url\r\n );\r\n\r\n return {\r\n url: requestUrl,\r\n method: config.method || 'POST',\r\n params,\r\n headers: config.passToken\r\n ? {\r\n Authorization:\r\n `Bearer ${userInfo.token}`,\r\n Accept: 'application/json'\r\n }\r\n : {}\r\n };\r\n }\r\n\r\n private getAutocompleteRequestUrl(\r\n backendUrl: string,\r\n endpoint: string\r\n ): string {\r\n const normalizedBackendUrl = backendUrl?.trim()?.replace(/\\/+$/, '');\r\n const normalizedEndpoint = endpoint?.trim();\r\n\r\n if (!normalizedBackendUrl) {\r\n throw new Error(\r\n 'Missing p5_backend_url for autocomplete request'\r\n );\r\n }\r\n\r\n if (!normalizedEndpoint) {\r\n throw new Error(\r\n 'Missing autocomplete endpoint URL'\r\n );\r\n }\r\n\r\n if (Capacitor.isNativePlatform()) {\r\n if (\r\n /^https?:\\/\\//i.test(\r\n normalizedEndpoint\r\n )\r\n ) {\r\n return normalizedEndpoint;\r\n }\r\n\r\n return (\r\n `${normalizedBackendUrl}/` +\r\n normalizedEndpoint.replace(\r\n /^\\/+/,\r\n ''\r\n )\r\n );\r\n }\r\n\r\n /*\r\n * Web:\r\n * Return a same-origin path beginning with /p5ws.\r\n * Angular's development proxy will forward it.\r\n */\r\n if (\r\n /^https?:\\/\\//i.test(\r\n normalizedEndpoint\r\n )\r\n ) {\r\n const absoluteEndpoint =\r\n new URL(normalizedEndpoint);\r\n\r\n return (\r\n absoluteEndpoint.pathname +\r\n absoluteEndpoint.search\r\n );\r\n }\r\n\r\n let backendPath: string;\r\n\r\n try {\r\n backendPath =\r\n new URL(\r\n normalizedBackendUrl\r\n ).pathname;\r\n } catch {\r\n backendPath =\r\n normalizedBackendUrl;\r\n }\r\n\r\n backendPath = `/${backendPath}`\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/+$/, '');\r\n\r\n const endpointPath =\r\n normalizedEndpoint.replace(\r\n /^\\/+/,\r\n ''\r\n );\r\n\r\n return (\r\n `${backendPath}/${endpointPath}`\r\n );\r\n }\r\n\r\n buildCompany(userInfo: any): string {\r\n return userInfo.p5_plant\r\n ? `${userInfo.p5_group}/${userInfo.p5_client}/${userInfo.p5_plant}`\r\n : `${userInfo.p5_group}/${userInfo.p5_client}/`;\r\n }\r\n\r\n resolveToken(template: string, context: any) {\r\n return template.replace(/{{(.*?)}}/g, (_, path) => {\r\n return path.split('.').reduce((acc: any, key: any) => acc?.[key], context) ?? '';\r\n });\r\n }\r\n\r\n getScope(scope: any) {\r\n let propertyScope = \"\";\r\n let start = scope?.indexOf(\"#/\") + 2;\r\n let end = scope?.indexOf(\"/\", start);\r\n if (start && end) {\r\n propertyScope = scope.substring(start, end);\r\n }\r\n return propertyScope;\r\n }\r\n\r\n autocompChangeEvent(event: any) {\r\n const q = (event?.event.query || '').toLowerCase();\r\n let fieldName = event?.formField.scope?.reference?.split('/')?.pop()\r\n if (fieldName) {\r\n this.matchData = event?.formField.data?.filter((x: any) => x[fieldName] && x[fieldName]?.toLowerCase()?.startsWith(q));\r\n }\r\n }\r\n\r\n autocompFocusOutEvent(event: any) {\r\n let actualObj = Object.keys(event?.event)\r\n if (actualObj.length && event.formField) {\r\n this.autocompSelectEvent(event?.event, event.formField)\r\n }\r\n }\r\n\r\n autocompSelectEvent(obj: any, formField?: any) {\r\n const mapping = formField.option?.onSelect?.mapFields;\r\n if (!mapping) return;\r\n Object.entries(mapping).forEach(([targetProp, sourceKey]) => {\r\n const scope = this.getScope(formField.scope.reference);\r\n if (this.modalItemInfo.propertySchema?.[scope]?.[targetProp]) {\r\n this.modalItemInfo.propertySchema[scope][targetProp].value = obj[sourceKey as string] ?? null;\r\n }\r\n });\r\n }\r\n\r\n setErroMessage(formField: any, errorMessages: any, errorType: any) {\r\n let error: any = \"\";\r\n let fieldName: any = formField.label?.value ? formField.label?.value : formField.label?.caption ? formField.label?.caption : this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption;\r\n if (errorType == \"required\") {\r\n error = this.selectedLanguageInfo?.errorMessages?.required ? this.selectedLanguageInfo?.errorMessages.required : errorMessages.required\r\n }\r\n if (error && error.toString().includes(\"{{requiredLength}}\")) {\r\n error = error.replace(/{{\\s*requiredLength\\s*}}/g, formField?.minlength.toString());\r\n }\r\n return error.replace(/{{\\s*field\\s*}}/g, fieldName);\r\n }\r\n\r\n getStyleWithoutClasses(styleObject: any) {\r\n if (!styleObject) {\r\n return { classes: '', style: {} };\r\n }\r\n const { classes, ...styleWithoutClasses } = styleObject;\r\n return { classes: classes && classes.length > 0 ? classes[0] : '', style: styleWithoutClasses };\r\n }\r\n\r\n getSectionBodyStyle(formSection: any): Record<string, any> {\r\n const sectionStyle = {\r\n ...(formSection?.style || {})\r\n };\r\n\r\n return this.getStyleWithoutClasses({\r\n display: sectionStyle.display || 'grid',\r\n gridTemplateColumns:\r\n sectionStyle.gridTemplateColumns ||\r\n sectionStyle['grid-template-columns'] ||\r\n 'repeat(12, minmax(0, 1fr))',\r\n gap: sectionStyle.gap || '12px',\r\n width: sectionStyle.width || '100%',\r\n boxSizing: sectionStyle.boxSizing || 'border-box',\r\n ...sectionStyle\r\n }).style;\r\n }\r\n\r\n getFieldWrapperStyle(formField: any): Record<string, any> {\r\n const style = formField?.style || {};\r\n\r\n return {\r\n gridColumn:\r\n style.gridColumn ||\r\n style['grid-column'] ||\r\n `span ${formField?.gridSpan || 12}`,\r\n gridRow: style.gridRow || style['grid-row'] || undefined,\r\n justifySelf: style.justifySelf || style['justify-self'] || undefined,\r\n alignSelf: style.alignSelf || style['align-self'] || undefined,\r\n width: style.width || '100%',\r\n maxWidth: style.maxWidth || style['max-width'] || undefined,\r\n minWidth: style.minWidth || style['min-width'] || '0',\r\n margin: style.margin || undefined,\r\n marginTop: style.marginTop || style['margin-top'] || undefined,\r\n marginRight: style.marginRight || style['margin-right'] || undefined,\r\n marginBottom: style.marginBottom || style['margin-bottom'] || undefined,\r\n marginLeft: style.marginLeft || style['margin-left'] || undefined,\r\n boxSizing: style.boxSizing || style['box-sizing'] || 'border-box'\r\n };\r\n }\r\n\r\n onTimePanelShow(formField: any, event: any) {\r\n let value = this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.value;\r\n if (!value) {\r\n let currentDate = new Date();\r\n this.modalItemInfo.propertySchema[this.getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value = currentDate;\r\n this.handleRules(formField, currentDate);\r\n }\r\n }\r\n\r\n\r\n getControlStyle(formField: any): Record<string, any> {\r\n const style = {\r\n ...(formField?.style || {})\r\n };\r\n\r\n /*\r\n * These properties belong to the field wrapper because the wrapper\r\n * is the direct child of the section grid.\r\n */\r\n delete style.gridColumn;\r\n delete style['grid-column'];\r\n delete style.gridRow;\r\n delete style['grid-row'];\r\n delete style.justifySelf;\r\n delete style['justify-self'];\r\n delete style.alignSelf;\r\n delete style['align-self'];\r\n delete style.margin;\r\n delete style.marginTop;\r\n delete style['margin-top'];\r\n delete style.marginRight;\r\n delete style['margin-right'];\r\n delete style.marginBottom;\r\n delete style['margin-bottom'];\r\n delete style.marginLeft;\r\n delete style['margin-left'];\r\n delete style.classes;\r\n\r\n return {\r\n width: style.width || '100%',\r\n maxWidth: style.maxWidth || style['max-width'] || undefined,\r\n minWidth: style.minWidth || style['min-width'] || '0',\r\n boxSizing: style.boxSizing || style['box-sizing'] || 'border-box',\r\n ...style\r\n };\r\n }\r\n\r\n getFieldInnerLayoutStyle(formField: any): Record<string, any> {\r\n const layoutStyle = formField?.layoutStyle || {};\r\n\r\n if (formField?.layout === 'horizontal') {\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns:\r\n layoutStyle.gridTemplateColumns ||\r\n layoutStyle['grid-template-columns'] ||\r\n '80px minmax(0, 1fr)',\r\n alignItems: layoutStyle.alignItems || 'center',\r\n gap: layoutStyle.gap || '10px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n ...layoutStyle\r\n };\r\n }\r\n\r\n return {\r\n display: 'grid',\r\n gridTemplateColumns: 'minmax(0, 1fr)',\r\n gap: layoutStyle.gap || '6px',\r\n width: '100%',\r\n minWidth: '0',\r\n boxSizing: 'border-box',\r\n ...layoutStyle\r\n };\r\n }\r\n\r\n dateChangeEvent(formField: any, value: any) {\r\n this.handleRules(formField, value);\r\n }\r\n\r\n onDateTyping(event: any) {\r\n const input = event.target as HTMLInputElement;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 8);\r\n let formatted = '';\r\n if (digits.length <= 4) {\r\n formatted = digits;\r\n } else if (digits.length <= 6) {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4)}`;\r\n } else {\r\n formatted = `${digits.slice(0, 4)}-${digits.slice(4, 6)}-${digits.slice(6)}`;\r\n }\r\n input.value = formatted;\r\n }\r\n\r\n forceNumericKeyboard(event: any) {\r\n const input = event?.target as HTMLInputElement;\r\n if (input && input.tagName === 'INPUT') {\r\n input.setAttribute('inputmode', 'numeric'); // Android\r\n input.setAttribute('pattern', '[0-9:]*'); // iOS\r\n input.setAttribute('type', 'tel'); // strongest signal\r\n }\r\n }\r\n\r\n onTimeTyping(event: any) {\r\n const input: HTMLInputElement =\r\n event?.target || event?.originalEvent?.target;\r\n if (!input) return;\r\n let digits = input.value.replace(/\\D/g, '');\r\n digits = digits.substring(0, 4);\r\n let formatted = '';\r\n if (digits.length <= 2) {\r\n formatted = digits;\r\n } else {\r\n formatted = `${digits.slice(0, 2)}:${digits.slice(2)}`;\r\n }\r\n\r\n input.value = formatted;\r\n }\r\n\r\n timeChangeEvent(formField: any, value: any) {\r\n this.handleRules(formField, value);\r\n }\r\n\r\n handleRules(formField: any, value: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n const field = formField.scope?.reference.split('/').pop()\r\n const rules = formField.option?.rules;\r\n this.modalItemInfo.propertySchema[scope][field].value = value;\r\n if (!rules) return;\r\n rules.forEach((rule: any) => {\r\n let exist = this.isRuleTriggered(rule, formField)\r\n if (!exist) return;\r\n switch (rule.action) {\r\n case 'calculateDuration':\r\n this.applyDurationRule(rule, formField);\r\n break;\r\n case 'resetValue':\r\n this.resetRule(rule, formField);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n resetRule(rule: any, formField: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n if (rule?.resetValue?.length > 0) {\r\n rule.resetValue.forEach((prop: any) => {\r\n this.modalItemInfo.propertySchema[scope][prop].value = null;\r\n });\r\n }\r\n }\r\n\r\n isRuleTriggered(rule: any, formField: any): boolean {\r\n if (rule.when === 'timeRangeComplete') {\r\n const scope = this.getScope(formField.scope.reference);\r\n return (\r\n this.modalItemInfo.propertySchema[scope]?.workDayTimeFrom?.value &&\r\n this.modalItemInfo.propertySchema[scope]?.workDayTimeTo?.value\r\n );\r\n } else if (rule.when === 'change') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n applyDurationRule(rule: any, formField: any) {\r\n const scope = this.getScope(formField.scope.reference);\r\n const schema = this.modalItemInfo.propertySchema[scope];\r\n const fromTimeVal: Date = schema?.workDayTimeFrom?.value;\r\n const toTimeVal: Date = schema?.workDayTimeTo?.value;\r\n const baseDateVal: Date = schema?.fromDate?.value;\r\n\r\n // 🔒 Guard\r\n if (!fromTimeVal || !toTimeVal || !baseDateVal) {\r\n schema[rule.params.durationField].value = '';\r\n return;\r\n }\r\n\r\n // 📅 Base date (From Date)\r\n const baseDate = new Date(baseDateVal);\r\n baseDate.setHours(0, 0, 0, 0);\r\n\r\n // ⏱ FROM datetime\r\n const fromDateTime = new Date(baseDate);\r\n fromDateTime.setHours(\r\n fromTimeVal.getHours(),\r\n fromTimeVal.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n\r\n // ⏱ TO datetime\r\n let toDateTime = new Date(baseDate);\r\n toDateTime.setHours(\r\n toTimeVal.getHours(),\r\n toTimeVal.getMinutes(),\r\n 0,\r\n 0\r\n );\r\n\r\n // 🌙 Overnight handling\r\n if (toDateTime <= fromDateTime) {\r\n toDateTime.setDate(toDateTime.getDate() + 1);\r\n }\r\n\r\n // ⏳ Duration calculation\r\n const diffMs = toDateTime.getTime() - fromDateTime.getTime();\r\n const totalMinutes = Math.floor(diffMs / 60000);\r\n const hours = Math.floor(totalMinutes / 60);\r\n const minutes = totalMinutes % 60;\r\n const duration = `${hours}:${minutes.toString().padStart(2, '0')}`;\r\n // ✅ Set duration\r\n schema[rule.params.durationField].value = duration;\r\n\r\n // ✅ Auto set To Date\r\n schema.toDate.value = new Date(toDateTime);\r\n }\r\n\r\n invokeSetformData(): void {\r\n void this.setFormDataHandler?.();\r\n }\r\n\r\n invokeFormBtnClick(\r\n option: any,\r\n propertySchema: any,\r\n form: NgForm\r\n ): void {\r\n if (option?.innerAction === 'cancel') {\r\n this.onCancel();\r\n return;\r\n }\r\n\r\n if (option?.innerAction === 'submit') {\r\n const valid = this.checkValidty(form);\r\n\r\n if (!valid) {\r\n return;\r\n }\r\n\r\n this.dialogRef.close({\r\n option,\r\n action: 'buttonClick',\r\n propertySchema,\r\n recordIndex: this.modalItemInfo?.recordIndex\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n checkValidty(form: NgForm): boolean {\r\n if (!form) {\r\n return false;\r\n }\r\n\r\n Object.values(form.controls).forEach(control => {\r\n control.markAsTouched();\r\n control.updateValueAndValidity();\r\n });\r\n\r\n return !!form.valid;\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close({\r\n action: 'cancel'\r\n });\r\n }\r\n}\r\n","<!-- Loader Spinner -->\r\n<div *ngIf=\"isLoading\" class=\"loader-overlay\">\r\n <div class=\"spinner\"></div>\r\n</div>\r\n<div [style]=\"getStyleWithoutClasses(modalItemInfo?.layoutSchema?.style).style\"\r\n [class]=\"modalItemInfo?.layoutSchema?.style?.classes[0]\">\r\n <form #dynamicForm=\"ngForm\" *ngIf=\"modalItemInfo?.layoutSchema?.formSections?.length > 0\"\r\n (submit)=\"$event.preventDefault()\">\r\n <div *ngFor=\"let formSection of modalItemInfo?.layoutSchema?.formSections\">\r\n <div *ngIf=\"formSection?.label?.caption\" [class]=\"formSection?.label?.style?.classes[0]\"\r\n [style]=\"getStyleWithoutClasses(formSection?.label?.style).style\">\r\n {{formSection.label.caption}}\r\n </div>\r\n <div *ngIf=\"formSection?.formFields?.length > 0\" [class]=\"formSection?.style?.classes?.[0] || ''\"\r\n [ngStyle]=\"getSectionBodyStyle(formSection)\">\r\n <div *ngFor=\"let formField of formSection.formFields\" [ngStyle]=\"getFieldWrapperStyle(formField)\"\r\n [class]=\"formField?.style?.classes || ''\">\r\n\r\n <div [ngSwitch]=\"\r\n formField?.scope?.reference &&\r\n modalItemInfo?.propertySchema?.[\r\n getScope(formField.scope.reference)\r\n ]\r\n ? modalItemInfo.propertySchema[\r\n getScope(formField.scope.reference)\r\n ]?.[\r\n formField.scope.reference.split('/').pop()\r\n ]?.type\r\n : 'default'\r\n \">\r\n <!-- image control -->\r\n <div *ngSwitchCase=\"'image'\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\">\r\n <img [src]=\"formField.option.src\" [alt]=\"'img'\" />\r\n </div>\r\n\r\n <!-- credit card control -->\r\n <div *ngSwitchCase=\"'carditCard'\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes[0]\">\r\n <div id=\"card-element\">\r\n <!-- a Stripe element will be inserted here -->\r\n </div>\r\n <!-- Used to display form errors -->\r\n <div id=\"card-errors\" class=\"displayError.textContent!=='': 'alert alert-danger mt-1'\">\r\n </div>\r\n </div>\r\n\r\n <!-- string control -->\r\n <div *ngSwitchCase=\"'string'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <vl-label [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-label>\r\n <vl-textbox [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\"></vl-textbox>\r\n </div>\r\n <!-- Error Message -->\r\n <!-- <div *ngIf=\"inputField?.touched && inputField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"inputField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <!-- number control -->\r\n <div *ngSwitchCase=\"'number'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <h5>{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }} {{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.value\r\n |\r\n currency:formField.option.currency :true: formField.option?.decimalPoint}}\r\n </h5>\r\n </span>\r\n <span *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <input type=\"number\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\"\r\n [placeholder]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.placeholder\" />\r\n </div>\r\n </span>\r\n </div>\r\n\r\n <!-- DateRange control -->\r\n <div *ngSwitchCase=\"'dateRange'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <nz-range-picker #dateRangeField=\"ngModel\" [required]=\"formField.option.required\"\r\n [name]=\"formField.scope?.reference\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"></nz-range-picker>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dateRangeField?.touched && dateRangeField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dateRangeField?.errors?.['required']\">\r\n {{formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dateRangeField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date control -->\r\n <div *ngSwitchCase=\"'date'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n\r\n <p-datepicker #dateField=\"ngModel\" styleClass=\"custom-datepicker\"\r\n [required]=\"formField.option.required\" [name]=\"formField.scope?.reference\"\r\n [disabled]=\"formField?.option?.disabled\" [showIcon]=\"true\" appendTo=\"body\"\r\n [autoZIndex]=\"true\" [baseZIndex]=\"10000\"\r\n panelStyleClass=\"model-datepicker-panel\"\r\n (ngModelChange)=\"dateChangeEvent(formField, $event)\"\r\n (onInput)=\"onDateTyping($event)\"\r\n [dateFormat]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.format || 'yy-mm-dd'\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [class]=\"formField?.scope?.style?.classes?.[0] || ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\">\r\n </p-datepicker>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dateField?.touched && dateField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dateField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dateField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time control -->\r\n <div *ngSwitchCase=\"'time'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">{{\r\n formField.label?.value\r\n ?\r\n formField.label?.value : formField.label?.caption ?\r\n formField.label?.caption :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n <p-datepicker #timeField=\"ngModel\" styleClass=\"custom-datepicker\" [required]=\"formField.option.required\"\r\n [name]=\"formField.scope?.reference\" (onShow)=\"onTimePanelShow(formField, $event)\" [timeOnly]=\"true\" hourFormat=\"24\"\r\n [disabled]=\"formField?.option?.disabled\" appendTo=\"body\" [autoZIndex]=\"true\"\r\n [baseZIndex]=\"10000\" panelStyleClass=\"model-datepicker-panel\"\r\n (onFocus)=\"forceNumericKeyboard($event)\" (onInput)=\"onTimeTyping($event)\"\r\n (ngModelChange)=\"timeChangeEvent(formField, $event)\"\r\n [style]=\"getStyleWithoutClasses(formField?.scope?.style).style\"\r\n [(ngModel)]=\" modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [class]=\" formField?.scope?.style?.classes?.[0] || ''\">\r\n </p-datepicker>\r\n\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"timeField?.touched && timeField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"timeField?.errors?.['required']\">\r\n {{setErroMessage(formField, errorMessages, \"required\")}}</p>\r\n <p class=\"text-danger\" *ngIf=\"timeField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Autocomplete control -->\r\n <div *ngSwitchCase=\"'autocomplete'\" class=\"form-group mb-3\">\r\n <span *ngIf=\"formField.option.protected\"\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\"\r\n [class]=\"formField?.label?.style.classes ? formField?.label?.style?.classes[0] : ''\">\r\n <vl-string [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-string>\r\n </span>\r\n <div *ngIf=\"!formField.option.protected\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <vl-label [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\">\r\n </vl-label>\r\n\r\n <vl-autocomplete [formField]=\"formField\" [modalItemInfo]=\"modalItemInfo\"\r\n [matchData]=\"matchData\" [selectedLanguageInfo]=\"selectedLanguageInfo\"\r\n [errorMessages]=\"errorMessages\" (autocompChange)=\"autocompChangeEvent($event)\"\r\n (autocompFocusOut)=\"autocompFocusOutEvent($event)\">\r\n </vl-autocomplete>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- checkBox control -->\r\n <div *ngSwitchCase=\"'checkbox'\" class=\"form-group mb-3\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0] : ''\">\r\n <span *ngIf=\"formField.option?.postfixCaption\">\r\n <label class=\"form-check-label\"><input type=\"checkbox\" class=\"form-check-input\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\" (ngModelChange)=\"invokeSetformData()\" />{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n </span>\r\n <div *ngIf=\"!formField.option?.postfixCaption\"\r\n [class]=\"formField?.layout == 'horizontal' ? 'horizontal-layout' : 'row'\">\r\n <label class=\"form-check-label\">{{\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\"\r\n [name]=\"formField.scope?.reference\" /></label>\r\n </div>\r\n </div>\r\n\r\n <!-- dropdown control -->\r\n <div *ngSwitchCase=\"'dropdown'\" class=\"form-group mb-3\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0] : ''\">\r\n <span *ngIf=\"formField.option?.postfixCaption\">\r\n <select id=\"dynamic-dropdown\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n #dropdownField=\"ngModel\" [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\">\r\n <option\r\n *ngFor=\"let item of modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.data\"\r\n [value]=\"formField.option.optionValue\"> {{\r\n formField.option.optionLabel}}</option>\r\n </select>\r\n <label\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\">{{modalItemInfo.propertySchema[getScope(formField.scope)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n </span>\r\n <div *ngIf=\"!formField.option?.postfixCaption\">\r\n <div [ngStyle]=\"getFieldInnerLayoutStyle(formField)\">\r\n <label\r\n [style]=\"getStyleWithoutClasses(formField?.label?.style).style\">{{modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n }}</label>\r\n\r\n <nz-select nzShowSearch nzAllowClear nzPlaceHolder=\"Select\" #dropdownField=\"ngModel\"\r\n [required]=\"formField.option.required\"\r\n [class]=\"formField.style?.classes ? formField.style?.classes[0]: ''\"\r\n [style]=\"getStyleWithoutClasses(formField?.style).style\"\r\n [name]=\"formField.scope?.reference\"\r\n [(ngModel)]=\"modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()].value\">\r\n <nz-option\r\n *ngFor=\"let item of modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.data\"\r\n [nzLabel]=\"item[formField.option.optionLabel]\"\r\n [nzValue]=\"item[formField.option.optionValue]\"></nz-option>\r\n </nz-select>\r\n </div>\r\n <!-- Error Message -->\r\n <div *ngIf=\"dropdownField?.touched && dropdownField?.invalid\"\r\n [style]=\"getStyleWithoutClasses(formField?.validation?.style).style\">\r\n <p class=\"text-danger\" *ngIf=\"dropdownField?.errors?.['required']\">\r\n {{formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption\r\n +\r\n ' ' + errorMessages.required}}</p>\r\n <p class=\"text-danger\" *ngIf=\"dropdownField?.errors?.['email']\">\r\n {{(formField.label?.value ?\r\n formField.label?.value :\r\n modalItemInfo.propertySchema[getScope(formField.scope?.reference)][formField.scope?.reference.split('/').pop()]?.caption)\r\n +\r\n ' ' + errorMessages.pattern}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- button control -->\r\n <div *ngSwitchCase=\"'default'\">\r\n <button type=\"button\" [ngStyle]=\"getStyleWithoutClasses(formField.style).style\"\r\n (click)=\"invokeFormBtnClick(formField.option, modalItemInfo.propertySchema, dynamicForm)\"\r\n class=\"btn btn-primary btn-block\">\r\n {{ formField.label?.caption }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-button',\r\n standalone: true,\r\n templateUrl: './button.html',\r\n styleUrl: './button.css',\r\n})\r\nexport class Button {\r\n\r\n}\r\n","<p>button works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-date',\r\n standalone: true,\r\n templateUrl: './date.html',\r\n styleUrl: './date.css',\r\n})\r\nexport class Date {\r\n\r\n}\r\n","<p>date works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-dropdown',\r\n standalone: true,\r\n templateUrl: './dropdown.html',\r\n styleUrl: './dropdown.css',\r\n})\r\nexport class Dropdown {\r\n\r\n}\r\n","<p>dropdown works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-error-message',\r\n standalone: true,\r\n templateUrl: './error-message.html',\r\n styleUrl: './error-message.css',\r\n})\r\nexport class ErrorMessage {\r\n\r\n}\r\n","<p>error-message works!</p>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vl-time',\r\n standalone: true,\r\n templateUrl: './time.html',\r\n styleUrl: './time.css',\r\n})\r\nexport class Time {\r\n\r\n}\r\n","<p>time works!</p>\r\n","import { Injectable } from '@angular/core';\r\nimport { ConfigService } from './config.service';\r\nimport { Capacitor } from '@capacitor/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { OAuth2Client } from '@byteowls/capacitor-oauth2';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Platform } from '@angular/cdk/platform';\r\nimport { UtilityService } from './utility.service';\r\n\r\n\r\nexport interface MobileAuthTokens {\r\n access_token: string;\r\n refresh_token?: string;\r\n id_token?: string;\r\n expires_in?: number;\r\n token_type?: string;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MobileKeycloakService {\r\n\r\n private tokens: MobileAuthTokens | any = null;\r\n constructor(private config: ConfigService, private http: HttpClient, private utilityService: UtilityService, private platform: Platform) {\r\n if (Capacitor.isNativePlatform()) {\r\n App.addListener('appUrlOpen', async (url: any) => {\r\n // Nothing to do here; capacitor-oauth2 resolves internally.\r\n // Keep listener to satisfy deep link expectations.\r\n });\r\n }\r\n }\r\n\r\n async login(): Promise<any> {\r\n if (!Capacitor.isNativePlatform()) return null;\r\n const cfg: any = this.config.getKeycloakMobileConfig();\r\n const discoveryUrl = `${cfg.issuer}/.well-known/openid-configuration`;\r\n const discovery: any = await (await fetch(discoveryUrl)).json();\r\n const result = await OAuth2Client.authenticate({\r\n appId: cfg.clientId, // <--- Keycloak clientId goes here\r\n authorizationBaseUrl: discovery.authorization_endpoint,\r\n accessTokenEndpoint: discovery.token_endpoint,\r\n responseType: 'code',\r\n redirectUrl: cfg.redirectUri,\r\n scope: cfg.scope,\r\n pkceEnabled: true,\r\n logsEnabled: true\r\n });\r\n console.log('result-KEyClaok: ', result);\r\n this.tokens = {\r\n access_token: result?.access_token_response?.access_token ? result?.access_token_response?.access_token : result.access_token,\r\n refresh_token: result?.access_token_response?.refresh_token,\r\n id_token: result?.access_token_response?.id_token,\r\n expires_in: result?.access_token_response?.expires_at ? result?.access_token_response?.expires_at : result?.access_token_response?.expires_in,\r\n token_type: result?.access_token_response?.token_type\r\n };\r\n let keycloakLoginUser = \"\";\r\n if (this.tokens.access_token) {\r\n keycloakLoginUser = await this.getUserInfo(this.tokens.access_token, cfg.issuer);\r\n console.log('keycloakLoginUser: ', keycloakLoginUser);\r\n if (keycloakLoginUser) {\r\n this.tokens['issuer'] = cfg.issuer;\r\n this.utilityService.setLocalStorage(\"KeycloakInfo\", this.tokens);\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n window.location.reload();\r\n }\r\n }\r\n }\r\n return keycloakLoginUser;\r\n }\r\n\r\n async getUserInfo(accessToken: any, issuer: any): Promise<any> {\r\n try {\r\n const headers = new HttpHeaders({\r\n Authorization: `Bearer ${accessToken}`,\r\n });\r\n const url = `${issuer}/protocol/openid-connect/userinfo`;\r\n return await this.http.get(url, { headers }).toPromise();\r\n } catch (err) {\r\n console.error('Error fetching user info:', err);\r\n throw err;\r\n }\r\n }\r\n\r\n getAccessToken(): string | null {\r\n return this.tokens?.access_token ?? null;\r\n }\r\n\r\n getRefreshToken(): string | null {\r\n return this.tokens?.refresh_token ?? null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const keycloakInfo: any = await this.utilityService.getLocalStorage('KeycloakInfo');\r\n const cfg: any = this.config.getKeycloakMobileConfig();\r\n const idToken = keycloakInfo?.keycloakInfo?.id_token;\r\n const accessToken = keycloakInfo?.keycloakInfo?.access_token;\r\n if (!idToken || !accessToken) {\r\n console.warn('No tokens found for logout');\r\n return;\r\n }\r\n const endSessionUrl =\r\n `${cfg.issuer}/protocol/openid-connect/logout` +\r\n `?id_token_hint=${encodeURIComponent(idToken)}` +\r\n `&client_id=${encodeURIComponent(cfg.clientId)}` +\r\n `&post_logout_redirect_uri=${encodeURIComponent(cfg.logoutRedirectUri)}`;\r\n console.log('Logout URL:', endSessionUrl);\r\n await Browser.open({ url: endSessionUrl });\r\n this.tokens = null;\r\n await this.utilityService.removeLocalStorage('KeycloakInfo');\r\n window.location.reload();\r\n }\r\n\r\n}\r\n","import { Platform, PlatformModule } from '@angular/cdk/platform';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Injector,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n ViewChild\r\n} from '@angular/core';\r\n\r\nimport { Device } from '@capacitor/device';\r\nimport {\r\n OKTA_AUTH,\r\n OktaAuthStateService\r\n} from '@okta/okta-angular';\r\nimport { jwtDecode } from 'jwt-decode';\r\nimport {\r\n de_DE,\r\n en_US,\r\n NzI18nService\r\n} from 'ng-zorro-antd/i18n';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzMenuModule } from 'ng-zorro-antd/menu';\r\nimport { NzTooltipModule } from 'ng-zorro-antd/tooltip';\r\nimport { OAuthService } from 'angular-oauth2-oidc';\r\nimport {\r\n DialogService,\r\n DynamicDialogModule\r\n} from 'primeng/dynamicdialog';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { LogsComponent } from '../logs/logs.component';\r\nimport { Couchdb } from '../../services/couchdb';\r\nimport { MobileKeycloakService } from '../../services/mobile-keycloak.service';\r\nimport { NotificationService } from '../../services/notification.service';\r\nimport { RequestService } from '../../services/request.service';\r\nimport { UtilityService } from '../../services/utility.service';\r\n\r\n@Component({\r\n standalone: true,\r\n selector: 'vl-side-menu',\r\n templateUrl: './side-menu.component.html',\r\n styleUrl: './side-menu.component.css',\r\n imports: [\r\n CommonModule,\r\n PlatformModule,\r\n\r\n // NG-ZORRO\r\n NzMenuModule,\r\n NzIconModule,\r\n NzTooltipModule,\r\n NzButtonModule,\r\n\r\n // PrimeNG\r\n DynamicDialogModule\r\n ]\r\n})\r\nexport class SideMenuComponent\r\n implements AfterViewInit, OnChanges, OnDestroy {\r\n\r\n isCollapsed = false;\r\n isMobile = false;\r\n projectsLayoutSchema: any;\r\n loginUser: any = {};\r\n isLogined = false;\r\n loginedUserInfo: any = {};\r\n menuItemsCopy: any[] = [];\r\n settingMenu: any = {};\r\n setLanguage = false;\r\n tenantKey = '';\r\n\r\n private oktaAuthStateSubscription?: Subscription;\r\n private mobileLoginSubscription?: Subscription;\r\n private mobileLoginRequestInProgress = false;\r\n private currentMobileLoginToken?: string;\r\n\r\n @Input() menuItems: any[] = [];\r\n @Input() userInfo: any = {};\r\n @Input() settings: any = {};\r\n @Input() projects: any;\r\n @Input() tenantName: any;\r\n @Input() environment: any;\r\n @Input() projectSeleted: any;\r\n\r\n @Output() languageChange = new EventEmitter<any>();\r\n @Output() invokeMenu = new EventEmitter<any>();\r\n @Output() menuToggle = new EventEmitter<any>();\r\n @Output() invokeProject = new EventEmitter<any>();\r\n @Output() errorMessage = new EventEmitter<any>();\r\n @Output() deleteProject = new EventEmitter<any>();\r\n @Output() paginationType = new EventEmitter<any>();\r\n\r\n @ViewChild('sideMenu', { static: true })\r\n sideMenu!: ElementRef<HTMLElement>;\r\n\r\n readonly PRIME_DE = {\r\n firstDayOfWeek: 1,\r\n dayNames: [\r\n 'Sonntag',\r\n 'Montag',\r\n 'Dienstag',\r\n 'Mittwoch',\r\n 'Donnerstag',\r\n 'Freitag',\r\n 'Samstag'\r\n ],\r\n dayNamesShort: [\r\n 'So',\r\n 'Mo',\r\n 'Di',\r\n 'Mi',\r\n 'Do',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n dayNamesMin: [\r\n 'So',\r\n 'Mo',\r\n 'Di',\r\n 'Mi',\r\n 'Do',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n monthNames: [\r\n 'Januar',\r\n 'Februar',\r\n 'März',\r\n 'April',\r\n 'Mai',\r\n 'Juni',\r\n 'Juli',\r\n 'August',\r\n 'September',\r\n 'Oktober',\r\n 'November',\r\n 'Dezember'\r\n ],\r\n monthNamesShort: [\r\n 'Jan',\r\n 'Feb',\r\n 'Mär',\r\n 'Apr',\r\n 'Mai',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Okt',\r\n 'Nov',\r\n 'Dez'\r\n ],\r\n today: 'Heute',\r\n clear: 'Löschen',\r\n dateFormat: 'yy-mm-dd',\r\n weekHeader: 'KW'\r\n };\r\n\r\n readonly PRIME_EN = {\r\n firstDayOfWeek: 0,\r\n dayNames: [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n ],\r\n dayNamesShort: [\r\n 'Sun',\r\n 'Mon',\r\n 'Tue',\r\n 'Wed',\r\n 'Thu',\r\n 'Fri',\r\n 'Sat'\r\n ],\r\n dayNamesMin: [\r\n 'Su',\r\n 'Mo',\r\n 'Tu',\r\n 'We',\r\n 'Th',\r\n 'Fr',\r\n 'Sa'\r\n ],\r\n monthNames: [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n ],\r\n monthNamesShort: [\r\n 'Jan',\r\n 'Feb',\r\n 'Mar',\r\n 'Apr',\r\n 'May',\r\n 'Jun',\r\n 'Jul',\r\n 'Aug',\r\n 'Sep',\r\n 'Oct',\r\n 'Nov',\r\n 'Dec'\r\n ],\r\n today: 'Today',\r\n clear: 'Clear',\r\n dateFormat: 'yy-mm-dd',\r\n weekHeader: 'Wk'\r\n };\r\n\r\n constructor(\r\n private i18n: NzI18nService,\r\n private mobileKeycloakService: MobileKeycloakService,\r\n private couchdbService: Couchdb,\r\n private oauthService: OAuthService,\r\n private platform: Platform,\r\n private requestService: RequestService,\r\n private utilityService: UtilityService,\r\n private dialogService: DialogService,\r\n private notificationService: NotificationService,\r\n private injector: Injector\r\n ) { }\r\n\r\n async ngOnInit(): Promise<void> {\r\n if (this.isNativeMobile()) {\r\n this.isCollapsed = true;\r\n this.isMobile = true;\r\n\r\n this.tenantKey =\r\n await this.utilityService.getLocalStorage('tenantKey') ?? '';\r\n } else {\r\n this.tenantKey =\r\n await this.utilityService.getStorage('tenantKey') ?? '';\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n changes['environment'] ||\r\n changes['userInfo'] ||\r\n changes['projectSeleted']\r\n ) {\r\n void this.setLoginUser();\r\n }\r\n\r\n if (\r\n changes['projects'] ||\r\n changes['projectSeleted']\r\n ) {\r\n this.initializeProjects();\r\n }\r\n\r\n if (\r\n changes['menuItems'] &&\r\n this.menuItems?.length\r\n ) {\r\n this.menuItemsCopy =\r\n JSON.parse(JSON.stringify(this.menuItems));\r\n\r\n void this.setProjectSetting();\r\n }\r\n\r\n if (\r\n changes['settings'] ||\r\n changes['tenantName'] ||\r\n changes['projectSeleted']\r\n ) {\r\n void this.setSettingImages();\r\n }\r\n }\r\n\r\n async ngAfterViewInit(): Promise<void> {\r\n this.initializeProjects();\r\n\r\n if (!this.isNativeMobile()) {\r\n return;\r\n }\r\n\r\n try {\r\n const deviceLanguage = await this.getDeviceLanguage();\r\n\r\n const supportedLanguage =\r\n deviceLanguage === 'de' ? 'de' : 'en';\r\n\r\n await this.changeLanguage(\r\n `${supportedLanguage}.json`\r\n );\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load device language:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyOktaSubscription();\r\n this.destroyMobileLoginSubscription();\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n const path =\r\n event.composedPath() as HTMLElement[];\r\n\r\n const clickedInsideMenu =\r\n path.some(\r\n element =>\r\n element === this.sideMenu?.nativeElement\r\n );\r\n\r\n const clickedToggle =\r\n path.some(\r\n element =>\r\n element instanceof HTMLElement &&\r\n element.classList?.contains(\r\n 'side-toggle-handle'\r\n )\r\n );\r\n\r\n if (\r\n !clickedInsideMenu &&\r\n !clickedToggle &&\r\n this.isMobile\r\n ) {\r\n const button =\r\n document.getElementById('toggle-id');\r\n\r\n if (\r\n button &&\r\n !this.isCollapsed\r\n ) {\r\n button.click();\r\n }\r\n }\r\n }\r\n\r\n toggleCollapsed(): void {\r\n this.isCollapsed = !this.isCollapsed;\r\n\r\n if (!this.isMobile) {\r\n return;\r\n }\r\n\r\n const sideMenu =\r\n document.querySelector('.side-menu');\r\n\r\n sideMenu?.classList.toggle(\r\n 'open',\r\n !this.isCollapsed\r\n );\r\n }\r\n\r\n private isNativeMobile(): boolean {\r\n return (\r\n this.platform.ANDROID ||\r\n this.platform.IOS\r\n );\r\n }\r\n\r\n async getDeviceLanguage(): Promise<string> {\r\n const info =\r\n await Device.getLanguageCode();\r\n\r\n return info.value;\r\n }\r\n\r\n async setLoginUser(): Promise<void> {\r\n try {\r\n const loginType =\r\n this.environment?.login?.type;\r\n\r\n if (!loginType) {\r\n return;\r\n }\r\n\r\n if (loginType === 'oktaAuth') {\r\n if (this.isNativeMobile()) {\r\n await this.initializeMobileOktaUser();\r\n } else {\r\n this.initializeWebOktaUser();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // The current project is not an Okta project.\r\n this.destroyOktaSubscription();\r\n this.destroyMobileLoginSubscription();\r\n\r\n if (\r\n loginType === 'jwtToken' &&\r\n this.userInfo?.jwt\r\n ) {\r\n const decodedUser =\r\n this.getUserInfoFromToken(\r\n this.userInfo.jwt\r\n );\r\n\r\n if (decodedUser) {\r\n this.setLoginedUser(decodedUser);\r\n } else {\r\n this.clearLoginUser();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (\r\n loginType === 'keycloak' &&\r\n this.userInfo?.name\r\n ) {\r\n this.setLoginedUser(this.userInfo);\r\n return;\r\n }\r\n\r\n this.clearLoginUser();\r\n } catch (error) {\r\n console.error(\r\n 'Error while setting logged-in user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n }\r\n\r\n private async initializeMobileOktaUser(): Promise<void> {\r\n const logined: any =\r\n await this.utilityService.getLocalStorage(\r\n 'loginedUser'\r\n );\r\n\r\n if (!logined?.token) {\r\n this.destroyMobileLoginSubscription();\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n if (\r\n this.mobileLoginRequestInProgress &&\r\n this.currentMobileLoginToken ===\r\n logined.token\r\n ) {\r\n return;\r\n }\r\n\r\n if (\r\n this.currentMobileLoginToken ===\r\n logined.token &&\r\n this.loginUser?.name\r\n ) {\r\n return;\r\n }\r\n\r\n this.destroyMobileLoginSubscription();\r\n\r\n this.currentMobileLoginToken =\r\n logined.token;\r\n\r\n this.mobileLoginRequestInProgress = true;\r\n\r\n this.mobileLoginSubscription =\r\n this.requestService\r\n .getLoginUser(logined.token)\r\n .subscribe({\r\n next: (userInfo: any) => {\r\n this.mobileLoginRequestInProgress =\r\n false;\r\n\r\n this.setLoginedUser({\r\n ...this.userInfo,\r\n ...userInfo,\r\n ...logined\r\n });\r\n },\r\n error: (error) => {\r\n this.mobileLoginRequestInProgress =\r\n false;\r\n\r\n console.error(\r\n 'Failed to fetch the mobile Okta user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n });\r\n }\r\n\r\n private initializeWebOktaUser(): void {\r\n if (this.oktaAuthStateSubscription) {\r\n return;\r\n }\r\n\r\n try {\r\n /*\r\n * Okta dependencies are resolved only when this is\r\n * an Okta project running in the web application.\r\n *\r\n * Keycloak projects will never request OKTA_AUTH.\r\n */\r\n const oktaAuthStateService =\r\n this.injector.get(\r\n OktaAuthStateService\r\n );\r\n\r\n const oktaAuth: any =\r\n this.injector.get(OKTA_AUTH);\r\n\r\n this.oktaAuthStateSubscription =\r\n oktaAuthStateService.authState$\r\n .subscribe({\r\n next: async authState => {\r\n if (!authState.isAuthenticated) {\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n try {\r\n const oktaWebUser =\r\n await oktaAuth.getUser();\r\n\r\n this.setLoginedUser({\r\n ...this.userInfo,\r\n ...oktaWebUser\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to fetch the web Okta user:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n },\r\n error: error => {\r\n console.error(\r\n 'Okta authentication state error:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n });\r\n } catch (error) {\r\n console.error(\r\n 'Failed to initialize web Okta authentication:',\r\n error\r\n );\r\n\r\n this.clearLoginUser();\r\n }\r\n }\r\n\r\n private destroyOktaSubscription(): void {\r\n this.oktaAuthStateSubscription?.unsubscribe();\r\n this.oktaAuthStateSubscription = undefined;\r\n }\r\n\r\n private destroyMobileLoginSubscription(): void {\r\n this.mobileLoginSubscription?.unsubscribe();\r\n this.mobileLoginSubscription = undefined;\r\n this.mobileLoginRequestInProgress = false;\r\n this.currentMobileLoginToken = undefined;\r\n }\r\n\r\n private clearLoginUser(): void {\r\n this.loginUser = {};\r\n this.loginedUserInfo = {};\r\n this.isLogined = false;\r\n }\r\n\r\n getUserInfoFromToken(token: string): any | null {\r\n try {\r\n const decoded: any =\r\n jwtDecode(token);\r\n\r\n return {\r\n sub: decoded.sub,\r\n name:\r\n decoded.name ??\r\n 'User is undefined',\r\n role:\r\n decoded.role ??\r\n 'Role is undefined',\r\n email:\r\n decoded.email ??\r\n decoded.sub,\r\n iat: decoded.iat,\r\n exp: decoded.exp\r\n };\r\n } catch (error) {\r\n console.error(\r\n 'Failed to decode JWT:',\r\n error\r\n );\r\n\r\n return null;\r\n }\r\n }\r\n\r\n setLoginedUser(user: any): void {\r\n if (!user?.name) {\r\n this.clearLoginUser();\r\n return;\r\n }\r\n\r\n const logoutMenu =\r\n this.menuItems.find(\r\n (menu: any) =>\r\n menu?.options?.action === 'logout'\r\n );\r\n\r\n this.loginUser = {\r\n ...user\r\n };\r\n\r\n this.loginedUserInfo = {\r\n ...user,\r\n image: 'user.png',\r\n ...(logoutMenu\r\n ? { actions: [logoutMenu] }\r\n : {})\r\n };\r\n\r\n this.isLogined = true;\r\n }\r\n\r\n initializeProjects(): void {\r\n this.projectsLayoutSchema =\r\n this.projects;\r\n }\r\n\r\n async setProjectSetting(): Promise<void> {\r\n if (!this.menuItems?.length) {\r\n return;\r\n }\r\n\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const menuItem of this.menuItems) {\r\n if (\r\n menuItem?.label?.caption !== 'Setting' ||\r\n !menuItem?.submenu?.length\r\n ) {\r\n continue;\r\n }\r\n\r\n for (const subMenu of menuItem.submenu) {\r\n if (\r\n subMenu?.label?.caption !== 'Languages' ||\r\n !subMenu?.submenu?.length\r\n ) {\r\n continue;\r\n }\r\n\r\n for (const childMenu of subMenu.submenu) {\r\n tasks.push(\r\n this.setLanguageMenuImage(childMenu)\r\n );\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(tasks);\r\n }\r\n\r\n private async setLanguageMenuImage(\r\n childMenu: any\r\n ): Promise<void> {\r\n try {\r\n if (\r\n !this.tenantName ||\r\n !this.projectSeleted ||\r\n !childMenu?.icon\r\n ) {\r\n return;\r\n }\r\n\r\n const projectName =\r\n `${this.tenantName}_${this.projectSeleted}`;\r\n\r\n const imagePath =\r\n `Media/${childMenu.icon}`;\r\n\r\n const image =\r\n await this.couchdbService\r\n .getFileContentFromCouchDb(\r\n projectName,\r\n imagePath\r\n );\r\n\r\n const imageSource =\r\n this.getMediaSrc(image);\r\n\r\n if (imageSource) {\r\n childMenu.icon = imageSource;\r\n }\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load language icon:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n async setSettingImages(): Promise<void> {\r\n if (!this.settings) {\r\n this.settingMenu = {};\r\n return;\r\n }\r\n\r\n this.settingMenu =\r\n JSON.parse(JSON.stringify(this.settings));\r\n\r\n if (!this.settings?.submenu?.length) {\r\n return;\r\n }\r\n\r\n const tasks: Promise<void>[] = [];\r\n\r\n for (const menu of this.settings.submenu) {\r\n if (!menu?.submenu?.length) {\r\n continue;\r\n }\r\n\r\n for (const childMenu of menu.submenu) {\r\n if (\r\n childMenu?.options?.changeProject\r\n ) {\r\n tasks.push(\r\n this.setProjectMenuImage(childMenu)\r\n );\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(tasks);\r\n\r\n this.settingMenu =\r\n JSON.parse(JSON.stringify(this.settings));\r\n }\r\n\r\n private async setProjectMenuImage(\r\n childMenu: any\r\n ): Promise<void> {\r\n try {\r\n if (\r\n !this.tenantName ||\r\n !childMenu?.id ||\r\n !childMenu?.icon\r\n ) {\r\n return;\r\n }\r\n\r\n const projectName =\r\n `${this.tenantName}_${childMenu.id}`;\r\n\r\n const imagePath =\r\n `Media/${childMenu.icon}`;\r\n\r\n const image =\r\n await this.couchdbService\r\n .getFileContentFromCouchDb(\r\n projectName,\r\n imagePath\r\n );\r\n\r\n const imageSource =\r\n this.getMediaSrc(image);\r\n\r\n if (imageSource) {\r\n childMenu.icon = imageSource;\r\n }\r\n } catch (error) {\r\n console.error(\r\n 'Failed to load project icon:',\r\n error\r\n );\r\n }\r\n }\r\n\r\n getMediaSrc(file: any): string {\r\n if (!file) {\r\n return '';\r\n }\r\n\r\n if (file.src) {\r\n return file.src;\r\n }\r\n\r\n if (file.base64) {\r\n const mimeType =\r\n file.mimeType || 'image/png';\r\n\r\n return (\r\n `data:${mimeType};base64,` +\r\n file.base64\r\n );\r\n }\r\n\r\n if (file.dataUrl) {\r\n return file.dataUrl;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n isUrl(value: string): boolean {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n return (\r\n /^https?:\\/\\//.test(value) ||\r\n value.startsWith('blob:') ||\r\n value.startsWith('data:')\r\n );\r\n }\r\n\r\n async invokeNavigate(\r\n menu: any,\r\n parentMenu?: any\r\n ): Promise<void> {\r\n const options = menu?.options;\r\n\r\n if (!options) {\r\n return;\r\n }\r\n\r\n if (options.scrollPagination) {\r\n this.paginationType.emit({ scroll: true });\r\n return;\r\n }\r\n\r\n if (options.numberedPagination) {\r\n this.paginationType.emit({ scroll: false });\r\n return;\r\n }\r\n\r\n if (options?.switchTenant) {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n await this.utilityService.removeLocalStorage('tenantKey')\r\n await this.utilityService.removeLocalStorage('selectedProject')\r\n } else {\r\n await this.utilityService.removeStorage('tenantKey');\r\n await this.utilityService.removeStorage('selectedProject');\r\n }\r\n window.location.reload();\r\n return;\r\n }\r\n\r\n if (options.showAllProjects) {\r\n await this.utilityService.showAllProjects();\r\n return;\r\n }\r\n\r\n if (options.changeLang) {\r\n await this.changeLanguage(\r\n options.data_url\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.changeProject) {\r\n this.navigateToProject(menu);\r\n return;\r\n }\r\n\r\n if (options.logs) {\r\n this.openLogsTable();\r\n return;\r\n }\r\n\r\n if (options.terms) {\r\n this.notificationService.info(\r\n 'Term Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.projectPrivacy) {\r\n this.notificationService.warning(\r\n 'Project Privacy Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (options.projectVersion) {\r\n this.notificationService.warning(\r\n 'Project Version Not Apply'\r\n );\r\n\r\n return;\r\n }\r\n\r\n if (\r\n options.action === 'login' &&\r\n this.environment?.login?.type ===\r\n 'keycloak'\r\n ) {\r\n if (this.isNativeMobile()) {\r\n await this.mobileKeycloakService.login();\r\n } else {\r\n this.oauthService.initLoginFlow();\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.toggleCollapsed();\r\n this.invokeMenu.emit(menu);\r\n }\r\n\r\n openLogsTable(): void {\r\n // this.dialogService.open(\r\n // LogsComponent,\r\n // {\r\n // width: '700px',\r\n // data: {}\r\n // }\r\n // );\r\n }\r\n\r\n deleteMenuItem(\r\n subChild: any,\r\n index: number,\r\n event: Event\r\n ): void {\r\n event.stopPropagation();\r\n\r\n const projectMenu =\r\n this.settings?.submenu?.[2]?.submenu;\r\n\r\n if (\r\n Array.isArray(projectMenu) &&\r\n index >= 0 &&\r\n index < projectMenu.length\r\n ) {\r\n projectMenu.splice(index, 1);\r\n }\r\n\r\n this.deleteProject.emit(subChild);\r\n }\r\n\r\n navigateToProject(project: any): void {\r\n this.invokeProject.emit(project);\r\n }\r\n\r\n async changeLanguage(lang: string): Promise<void> {\r\n if (\r\n !lang ||\r\n !this.tenantName ||\r\n !this.projectSeleted\r\n ) {\r\n return;\r\n }\r\n\r\n try {\r\n if (lang === 'de.json') {\r\n this.i18n.setLocale(de_DE);\r\n } else {\r\n this.i18n.setLocale(en_US);\r\n }\r\n\r\n const databaseName =\r\n `${this.tenantName}_${this.projectSeleted}`;\r\n\r\n const [\r\n selectedLanguage,\r\n errorMessages\r\n ] = await Promise.all([\r\n this.couchdbService\r\n .getFileContentFromCouchDb(\r\n databaseName,\r\n `languages/${lang}`\r\n ),\r\n\r\n this.couchdbService\r\n .getFileContentFromCouchDb(\r\n databaseName,\r\n `languages/errorMessage_${lang}`\r\n )\r\n ]);\r\n\r\n if (\r\n !selectedLanguage ||\r\n typeof selectedLanguage !== 'object'\r\n ) {\r\n console.warn(\r\n `Language file \"${lang}\" was not found.`\r\n );\r\n\r\n return;\r\n }\r\n\r\n this.languageChange.emit({\r\n selectedLanguage,\r\n errorMessages\r\n });\r\n\r\n this.setLanguage = true;\r\n\r\n this.applyMenuTranslations(\r\n selectedLanguage\r\n );\r\n\r\n this.applySettingTranslations(\r\n selectedLanguage\r\n );\r\n } catch (error) {\r\n console.error(\r\n `Failed to change language to \"${lang}\":`,\r\n error\r\n );\r\n }\r\n }\r\n\r\n private applyMenuTranslations(\r\n selectedLanguage: Record<string, string>\r\n ): void {\r\n if (!this.menuItemsCopy?.length) {\r\n return;\r\n }\r\n\r\n this.menuItemsCopy.forEach(\r\n (menu: any, menuIndex: number) => {\r\n const translatedCaption =\r\n selectedLanguage[\r\n menu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedCaption &&\r\n this.menuItems?.[menuIndex]?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].label.caption = translatedCaption;\r\n }\r\n\r\n menu?.submenu?.forEach(\r\n (\r\n subMenu: any,\r\n subMenuIndex: number\r\n ) => {\r\n const translatedSubCaption =\r\n selectedLanguage[\r\n subMenu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedSubCaption &&\r\n this.menuItems?.[menuIndex]\r\n ?.submenu?.[subMenuIndex]\r\n ?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].submenu[\r\n subMenuIndex\r\n ].label.caption =\r\n translatedSubCaption;\r\n }\r\n\r\n subMenu?.submenu?.forEach(\r\n (\r\n childMenu: any,\r\n childIndex: number\r\n ) => {\r\n const translatedChildCaption =\r\n selectedLanguage[\r\n childMenu?.label?.caption\r\n ];\r\n\r\n if (\r\n translatedChildCaption &&\r\n this.menuItems?.[menuIndex]\r\n ?.submenu?.[subMenuIndex]\r\n ?.submenu?.[childIndex]\r\n ?.label\r\n ) {\r\n this.menuItems[\r\n menuIndex\r\n ].submenu[\r\n subMenuIndex\r\n ].submenu[\r\n childIndex\r\n ].label.caption =\r\n translatedChildCaption;\r\n }\r\n }\r\n );\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n private applySettingTranslations(\r\n selectedLanguage: Record<string, string>\r\n ): void {\r\n const settingCaption =\r\n this.settings?.label?.caption;\r\n\r\n if (\r\n settingCaption &&\r\n this.settingMenu?.label\r\n ) {\r\n this.settingMenu.label.caption =\r\n selectedLanguage[settingCaption] ??\r\n settingCaption;\r\n }\r\n\r\n this.settings?.submenu?.forEach(\r\n (menu: any, index: number) => {\r\n const originalCaption =\r\n menu?.label?.caption;\r\n\r\n if (\r\n !originalCaption ||\r\n !this.settingMenu?.submenu?.[index]\r\n ?.label\r\n ) {\r\n return;\r\n }\r\n\r\n this.settingMenu.submenu[\r\n index\r\n ].label.caption =\r\n selectedLanguage[originalCaption] ??\r\n originalCaption;\r\n }\r\n );\r\n }\r\n}","<div class=\"left-wrap sidemenu\" [class.collapsed]=\"isCollapsed\"\r\n [ngStyle]=\"{ 'z-index': !isCollapsed && isMobile ? 999999 : 'auto' }\" #sideMenu>\r\n <!-- Move toggle button OUTSIDE menu container -->\r\n <div class=\"side-toggle-handle\" id=\"toggle-id\" (click)=\"toggleCollapsed()\" [class.collapsed]=\"isCollapsed\">\r\n <span id=\"toggle-icon\" nz-icon [nzType]=\"isCollapsed ? 'caret-right' : 'caret-left'\"></span>\r\n </div>\r\n <div class=\"side-menu\" id=\"sidemenuwrap\"\r\n [ngStyle]=\"{ width: (isMobile && isCollapsed) ? '1px' : isCollapsed ? '60px' : '' }\">\r\n <!-- user content -->\r\n <ng-container *ngIf=\"loginedUserInfo && loginedUserInfo?.name\">\r\n <div class=\"user-profile\" [class.collapsed]=\"isCollapsed\">\r\n <img class=\"avatar\" [src]=\"loginedUserInfo?.image\" alt=\"User\" />\r\n <div [class]=\"isMobile ? '' : 'details'\" *ngIf=\"!isCollapsed\">\r\n <div class=\"name\">{{ loginedUserInfo.name }}</div>\r\n <div class=\"email\">{{ loginedUserInfo?.email }}</div>\r\n <div class=\"actions\" *ngIf=\"loginedUserInfo?.actions?.length\">\r\n <button *ngFor=\"let action of loginedUserInfo?.actions\" nz-button nzType=\"link\" nzSize=\"small\"\r\n (click)=\"invokeNavigate(action)\">\r\n <span>{{ action?.label?.caption }}</span>\r\n <span nz-icon [nzType]=\"action.icon\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- dynamic menu -->\r\n <ul nz-menu nzMode=\"inline\" nzTheme=\"dark\" [nzInlineCollapsed]=\"isCollapsed\">\r\n <ng-container *ngFor=\"let item of menuItems\">\r\n <ng-container *ngIf=\"!item.submenu && item?.options?.action != 'logout'; else submenu\">\r\n <span\r\n [class]=\"environment?.login?.type === 'oktaAuth' || environment?.login?.type === 'keycloak' ? item.options?.login === true ? loginedUserInfo?.name ? '' : 'hidden' : item.options?.login === false ? loginedUserInfo?.name ? 'hidden' : '' : '' : userInfo?.userId ? item.options?.login ? item.options.role ? item.options.role == userInfo.userRole ? '' : 'hidden' : '' : 'hidden' : !item.options?.login ? '' : 'hidden' \">\r\n <li (click)=\"invokeNavigate(item)\" nz-menu-item nz-tooltip nzTooltipPlacement=\"right\"\r\n [nzTooltipTitle]=\"isCollapsed && !isMobile ? item?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"item.icon\"></span>\r\n <span>{{ item?.label?.caption }}</span>\r\n </li>\r\n </span>\r\n </ng-container>\r\n <ng-template #submenu>\r\n <span\r\n [class]=\"item.options?.login === true && (environment?.login?.type === 'oktaAuth' || environment?.login?.type === 'keycloak') ? loginedUserInfo?.name ? '' : 'hidden' : item.options?.login === false ? loginedUserInfo?.name ? 'hidden' : '' : ''\">\r\n <li nz-submenu *ngIf=\"item?.options?.action != 'logout'\" [nzTitle]=\"item?.label?.caption\"\r\n [nzIcon]=\"item.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let child of item.submenu\">\r\n <li (click)=\"invokeNavigate(child)\" *ngIf=\"!child.submenu\" nz-menu-item nz-tooltip\r\n nzTooltipPlacement=\"right\" [nzTooltipTitle]=\"isCollapsed && !isMobile ? child?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"child?.icon\"></span>\r\n <span>{{ child?.label?.caption }}</span>\r\n </li>\r\n <ng-container *ngIf=\"child.submenu\">\r\n <li nz-submenu [nzTitle]=\"child?.label?.caption\" [nzIcon]=\"child?.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let subChild of child.submenu\">\r\n <li (click)=\"invokeNavigate(subChild)\" nz-menu-item>\r\n <ng-container *ngIf=\"subChild?.options?.setImageUrl; else antIcon\">\r\n <img *ngIf=\"isUrl(subChild?.icon)\" [src]=\"subChild?.icon\" alt=\"icon\"\r\n style=\"width: 16px; height: 16px; margin-right: 8px;\" />\r\n </ng-container>\r\n <ng-template #antIcon>\r\n <span nz-icon [nzType]=\"subChild?.icon\"></span>\r\n </ng-template>\r\n <span>{{ subChild?.label?.caption }}</span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- separator -->\r\n <li *ngIf=\"settingMenu.submenu\" class=\"menu-separator\"></li>\r\n\r\n <!-- settings menu -->\r\n <ng-container *ngIf=\"!settingMenu.submenu; else settingSubmenu\" style=\"position: absolute; bottom: 0;\">\r\n <li (click)=\"invokeNavigate(settingMenu)\" nz-menu-item nz-tooltip nzTooltipPlacement=\"right\"\r\n [nzTooltipTitle]=\"isCollapsed && !isMobile ? settingMenu?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"settingMenu.icon\"></span>\r\n <span>{{ settingMenu?.label?.caption }}</span>\r\n </li>\r\n </ng-container>\r\n <ng-template #settingSubmenu>\r\n <li nz-submenu [nzTitle]=\"settingMenu?.label?.caption\" [nzIcon]=\"settingMenu.icon\">\r\n <ul>\r\n <ng-container *ngFor=\"let child of settingMenu.submenu\">\r\n <li (click)=\"invokeNavigate(child)\" *ngIf=\"!child.submenu\" nz-menu-item nz-tooltip\r\n nzTooltipPlacement=\"right\" [nzTooltipTitle]=\"isCollapsed && !isMobile ? child?.label?.caption : ''\">\r\n <span nz-icon [nzType]=\"child?.icon\"></span>\r\n <span>{{ child?.label?.caption }}</span>\r\n </li>\r\n <ng-container *ngIf=\"child.submenu\">\r\n <li nz-submenu [nzTitle]=\"child?.label?.caption\" [nzIcon]=\"child?.icon\">\r\n <ul style=\"width: 260px;\">\r\n <ng-container *ngFor=\"let subChild of child.submenu; let i = index\">\r\n <li (click)=\"invokeNavigate(subChild, child)\" nz-menu-item>\r\n <span [class]=\"child?.label?.caption === 'Languages' ? '' : 'menu-row'\">\r\n <ng-container *ngIf=\"subChild?.options?.changeProject; else antIcon\">\r\n <img [src]=\"subChild?.icon\" alt=\"icon\"\r\n style=\"width: 16px; height: 16px; margin-right: 8px;\" />\r\n </ng-container>\r\n <ng-template #antIcon>\r\n <span nz-icon [nzType]=\"subChild?.icon\"></span>\r\n </ng-template>\r\n <span>{{ subChild?.label?.caption }}</span>\r\n <!-- Delete icon (prevent click bubbling) -->\r\n <span *ngIf=\"child?.label?.caption != 'Languages'\" nz-icon nzType=\"delete\" class=\"delete-icon\"\r\n style=\"padding-left: 5%;\" (click)=\"deleteMenuItem(subChild, i, $event)\"></span>\r\n </span>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-template>\r\n\r\n </ul>\r\n </div>\r\n</div>","// lib/view-toolkit.module.ts\r\n\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from '@angular/core';\r\nimport { CardComponent } from \"./containers/card/card.component\";\r\nimport { FormComponent } from \"./containers/form/form.component\";\r\nimport { PaginationComponent } from \"./containers/pagination/pagination.component\";\r\nimport { GridComponent } from \"./containers/grid/grid.component\";\r\nimport { HeaderMenuComponent } from \"./containers/header-menu/header-menu.component\";\r\nimport { LogsComponent } from \"./containers/logs/logs.component\";\r\nimport { ModelComponent } from \"./containers/model/model.component\";\r\nimport { Autocomplete } from \"./components/autocomplete/autocomplete\";\r\nimport { Button } from \"./components/button/button\";\r\nimport { Date } from \"./components/date/date\";\r\nimport { Dropdown } from \"./components/dropdown/dropdown\";\r\nimport { ErrorMessage } from \"./components/error-message/error-message\";\r\nimport { Label } from \"./components/label/label\";\r\nimport { String } from \"./components/string/string\";\r\nimport { Textbox } from \"./components/textbox/textbox\";\r\nimport { Time } from \"./components/time/time\";\r\nimport { SideMenuComponent } from \"./containers/side-menu/side-menu.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n CardComponent,\r\n FormComponent,\r\n GridComponent,\r\n HeaderMenuComponent,\r\n LogsComponent,\r\n ModelComponent,\r\n PaginationComponent,\r\n SideMenuComponent,\r\n\r\n Autocomplete,\r\n Button,\r\n Date,\r\n Dropdown,\r\n ErrorMessage,\r\n Label,\r\n String,\r\n Textbox,\r\n Time\r\n ],\r\n exports: [\r\n CardComponent,\r\n FormComponent,\r\n GridComponent,\r\n HeaderMenuComponent,\r\n LogsComponent,\r\n ModelComponent,\r\n PaginationComponent,\r\n SideMenuComponent\r\n\r\n ]\r\n})\r\nexport class ViewToolkitModule { }","// AUTO-GENERATED. Do not edit.\nexport const APP_VERSION = '1.0.204';\n","import { Injectable } from '@angular/core';\r\nimport { Preferences } from '@capacitor/preferences';\r\nimport { APP_VERSION } from '../app-version';\r\nimport { Platform } from '@angular/cdk/platform';\r\n\r\nconst VERSION_KEY = 'APP_VERSION';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppVersionResetService {\r\n\r\n constructor(\r\n private platform: Platform) {\r\n }\r\n\r\n\r\n async run(): Promise<void> {\r\n if (this.platform.ANDROID || this.platform.IOS) {\r\n await this.clearNativeIfChanged();\r\n // this.clearWebIfChanged();\r\n // return;\r\n }\r\n }\r\n\r\n private async clearNativeIfChanged(): Promise<void> {\r\n const { value: savedVersion } = await Preferences.get({ key: VERSION_KEY });\r\n if (savedVersion === APP_VERSION) return;\r\n console.log(`🧹 Clearing Capacitor Preferences (new build ${APP_VERSION})`);\r\n await Preferences.clear();\r\n this.clearWebStores();\r\n await Preferences.set({ key: VERSION_KEY, value: APP_VERSION });\r\n }\r\n\r\n // private clearWebIfChanged(): void {\r\n // const savedVersion = sessionStorage.getItem(VERSION_KEY) || localStorage.getItem(VERSION_KEY);\r\n // if (savedVersion === APP_VERSION) return;\r\n // this.clearWebStores();\r\n // localStorage.setItem(VERSION_KEY, APP_VERSION);\r\n // sessionStorage.setItem(VERSION_KEY, APP_VERSION);\r\n // }\r\n\r\n private clearWebStores(): void {\r\n try { localStorage.clear(); } catch { }\r\n try { sessionStorage.clear(); } catch { }\r\n try {\r\n if (typeof document !== 'undefined' && document.cookie) {\r\n document.cookie.split(';').forEach((c) => {\r\n const eqPos = c.indexOf('=');\r\n const name = eqPos > -1 ? c.substring(0, eqPos).trim() : c.trim();\r\n if (name) {\r\n document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;\r\n }\r\n });\r\n }\r\n } catch { }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of view-toolkit\r\n */\r\n\r\nexport * from './lib/view-toolkit.module';\r\n\r\n// container\r\nexport * from './lib/containers/card/card.component';\r\nexport * from './lib/containers/form/form.component';\r\nexport * from './lib/containers/grid/grid.component';\r\nexport * from './lib/containers/header-menu/header-menu.component';\r\nexport * from './lib/containers/logs/logs.component';\r\nexport * from './lib/containers/model/model.component';\r\nexport * from './lib/containers/pagination/pagination.component';\r\nexport * from './lib/containers/side-menu/side-menu.component';\r\n\r\n// services\r\nexport * from './lib/services/app-version-reset.service';\r\nexport * from './lib/services/config.service';\r\nexport * from './lib/services/couchdb';\r\nexport * from './lib/services/mobile-keycloak.service';\r\nexport * from './lib/services/network-log.service';\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/request.service';\r\nexport * from './lib/services/utility.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["String","i1","i2.RequestService","i1.UtilityService","i2","i1.Couchdb","i2.UtilityService","i3","i4.ConfigService","i6.NotificationService","i8.RequestService","i10","i16","StringComponent","i9","i1.RequestService","i3.NotificationService","i5","i6","i7","i8","i3.UtilityService","i4.Couchdb","i1.NetworkLogService","i4","Date","i1.ConfigService","i2.MobileKeycloakService","i3.Couchdb","i6.RequestService","i7.UtilityService","i9.NotificationService","i11","i12","i14","i15"],"mappings":"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"}