@unifylib/ui-lib 1.2.25 → 1.2.26

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":"iq-ui-lib.mjs","sources":["../../../../projects/invoiceq/ui-lib/src/lib/components/action-confirmation/action-confirmation.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/action-confirmation/action-confirmation.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/action-comment/action-comment.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/action-comment/action-comment.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/button-actions/button-actions.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/button-actions/button-actions.component.html","../../../../projects/invoiceq/ui-lib/src/lib/base-model/button-action-settings.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/table-column.interface.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/field-info.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/page-info.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/report-request.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/filter-request.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/filter.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/lookupItem.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/snack-message.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/table-page-user-action.interface.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/do-action-request.ts","../../../../projects/invoiceq/ui-lib/src/lib/utils/base-utils.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/response-envelop.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/title-bar/title-bar.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/title-bar/title-bar.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/paginator/paginator.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/paginator/paginator.component.html","../../../../projects/invoiceq/ui-lib/src/lib/validators/match-list.validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/validators/multi-email-validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/validators/date-range-validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/column-def.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/top-panel.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/backend-service.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/trigger-form.service.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/multi-auto-complete/multi-auto-complete.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/multi-auto-complete/multi-auto-complete.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/auto-complete/auto-complete.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/auto-complete/auto-complete.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/attachment-uploader/attachment-uploader.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/attachment-uploader/attachment-uploader.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/NumbersOnlyDirective.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/MaxDigitsDirective.ts","../../../../projects/invoiceq/ui-lib/src/lib/directives/phone-number-only.directive.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/base-form-canvas.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/base-form-canvas.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/field-filter/field-filter.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/field-filter/field-filter.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/filter-builder/filter-builder.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/filter-builder/filter-builder.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-table/base-table.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-table/base-table.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-list/audit-log.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-list/audit-log.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/equation-builder/equation-builder.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/equation-builder/equation-builder.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/editable-base-table/editable-base-table.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/editable-base-table/editable-base-table.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared-list/shared-list.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared-list/shared-list.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form/base-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form/base-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/section-form-canvas/section-form-canvas.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/section-form-canvas/section-form-canvas.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/report-details-dialog/report-details-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/report-details-dialog/report-details-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/report-form/report-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/report-form/report-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/activity-report-form/activity-report-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/activity-report-form/activity-report-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/base-model/line-item.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/items-total.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-input-dialog/base-input-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-input-dialog/base-input-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/search-bar/search-bar.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/search-bar/search-bar.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/snackbar-static/snackbar-static.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/snackbar-static/snackbar-static.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-button/action-button.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-button/action-button.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-card/action-card.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-card/action-card.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/item-line-editor/item-line-editor.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/item-line-editor/item-line-editor.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/permission-matrix/permission-matrix.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/permission-matrix/permission-matrix.component.html","../../../../projects/invoiceq/ui-lib/src/public-api.ts","../../../../projects/invoiceq/ui-lib/src/iq-ui-lib.ts"],"sourcesContent":["import {Component, HostBinding, HostListener, Inject, Input, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle\n} from \"@angular/material/dialog\";\nimport {MatFormField} from \"@angular/material/form-field\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {MatIcon} from \"@angular/material/icon\";\n\nexport interface IconConfig {\n name: string;\n color: string;\n}\n\n@Component({\n selector: 'app-action-confirmation',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatButton,\n MatIconButton,\n MatIcon\n ],\n templateUrl: './action-confirmation.component.html',\n styleUrl: './action-confirmation.component.css'\n})\nexport class ActionConfirmationComponent implements OnInit {\n @Input() icon: IconConfig = { name: 'check_circle', color: '#0d7d6a' };\n acceptActionLabel : string =''\n rejectActionLabel : string =''\n subMsg : string = '';\n titleMsg : string = '';\n listTitle: string = '';\n listMessages: string[] = [];\n isListMessagesTranslatable: boolean = true;\n extraWarningMsg: string = '';\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n constructor(public dialogRef: MatDialogRef<ActionConfirmationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.acceptActionLabel = this.data.acceptActionLabel || 'accept' ;\n this.rejectActionLabel = this.data.rejectActionLabel || 'reject';\n this.subMsg = this.data.warningMsg || '';\n this.titleMsg = this.data.confirmMsg || '';\n this.listTitle = this.data.listTitle || '';\n this.listMessages = this.data.listMessages || [];\n this.extraWarningMsg = this.data.extraWarningMsg || '';\n this.currentDirection = this.data.direction;\n this.isListMessagesTranslatable = this.data.isListMessagesTranslatable ?? true;\n this.icon = this.data.icon || { name: 'check_circle', color: '#0d7d6a' };\n }\n\n\n commentAndClose() {\n this.dialogRef.close('accept');\n\n return \"\";\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n}\n","<div class=\"confirm-dialog\" [dir]=\"currentDirection\">\n\n <div class=\"header-section\">\n <div class=\"header-row\">\n <div class=\"icon-container\">\n <mat-icon class=\"check-icon\" [style.color]=\"icon.color\">{{ icon.name }}</mat-icon>\n </div>\n\n </div>\n <div class=\"title-container\">\n <h2 class=\"title\">{{ titleMsg | translate }}</h2>\n </div>\n </div>\n\n <div class=\"message-container\">\n <p class=\"message\" *ngIf=\"subMsg\">\n {{ subMsg | translate }}\n </p>\n\n <div class=\"list-section\" *ngIf=\"listTitle || listMessages.length > 0\">\n <p class=\"list-title\" *ngIf=\"listTitle\"><strong>{{ listTitle | translate }}</strong></p>\n <ul class=\"list-messages\" *ngIf=\"listMessages.length > 0\">\n @if (isListMessagesTranslatable) {\n <li *ngFor=\"let message of listMessages\" class=\"list-item\">\n {{ message | translate }}\n </li>\n }\n @else{\n <li *ngFor=\"let message of listMessages\" class=\"list-item\">\n {{ message }}\n </li>\n }\n </ul>\n </div>\n\n <p class=\"extra-warning\" *ngIf=\"extraWarningMsg\">\n {{ extraWarningMsg | translate }}\n </p>\n </div>\n\n <div class=\"actions\">\n <button\n mat-stroked-button\n class=\"btn-cancel\"\n (click)=\"cancel()\"\n id=\"rejectActionLabel\">\n {{ rejectActionLabel | translate }}\n </button>\n\n <button\n mat-flat-button\n class=\"btn-confirm\"\n (click)=\"commentAndClose()\"\n id=\"acceptActionLabel\">\n {{ acceptActionLabel | translate }}\n </button>\n </div>\n\n</div>\n","import { Component, HostListener, Inject, OnInit } from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatInput } from '@angular/material/input';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { NgForOf, NgIf } from '@angular/common';\n\n@Component({\n selector: 'app-action-comment',\n standalone: true,\n imports: [\n MatDialogTitle,\n MatFormField,\n MatLabel,\n MatDialogContent,\n FormsModule,\n CdkTextareaAutosize,\n TranslateModule,\n MatDialogActions,\n MatButton,\n MatInput,\n MatIcon,\n MatOption,\n MatSelect,\n NgForOf,\n NgIf\n ],\n templateUrl: './action-comment.component.html',\n styleUrl: './action-comment.component.css'\n})\nexport class ActionCommentComponent implements OnInit {\n itemName: string = '';\n titleKey: string = '';\n subtitleKey: string = '';\n reasonLabelKey: string = '';\n placeholderKey: string = '';\n warningKey: string = '';\n cancelKey: string = '';\n actionKey: string = '';\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n actionLabel : string =''\n isTermination : boolean=false;\n comment: string = '';\n otherComment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n otp: string = \"\";\n isSubmitted: boolean = false;\n warningMsg = false;\n\n constructor(public dialogRef: MatDialogRef<ActionCommentComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n public translate: TranslateService) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.actionLabel = this.data.label;\n this.isTermination = this.data.isTermination ;\n this.signingRequired = this.data.signingRequired;\n this.tokenReference = this.data.tokenReference;\n this.warningMsg = this.data.warningMsg || false;\n\n this.itemName = this.data.itemName;\n this.titleKey = this.data.titleKey;\n this.subtitleKey = this.data.subtitleKey;\n this.reasonLabelKey = this.data.reasonLabelKey;\n this.placeholderKey = this.data.placeholderKey;\n this.warningKey = this.data.warningKey;\n this.cancelKey = this.data.cancelKey;\n this.actionKey = this.data.actionKey;\n this.currentDirection = this.data.direction;\n }\n\n\n commentAndClose() {\n this.isSubmitted = true;\n\n if (this.signingRequired && !this.otp) {\n return false;\n }\n\n const finalComment =\n this.comment === 'OTHER' ? this.otherComment : this.translate.instant(this.comment);\n\n const obj: { [key: string]: any } = {\n comment: finalComment,\n shareExternal: this.external\n };\n\n if (this.signingRequired) {\n obj['token'] = this.otp;\n obj['tokenReference'] = this.tokenReference;\n }\n\n this.dialogRef.close(obj);\n return true;\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n}\n","<div class=\"dialog-container\" [dir]=\"currentDirection\">\n\n <div class=\"desktop-view\">\n <h2 mat-dialog-title class=\"dialog-title\">\n {{ titleKey | translate}} {{itemName}}\n </h2>\n\n <p class=\"dialog-subtitle\">\n {{ subtitleKey | translate }}\n </p>\n\n <mat-dialog-content class=\"content-section\">\n\n <ng-container *ngIf=\"data?.options?.length; else textMode\">\n\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-select\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\">\n\n <mat-option *ngFor=\"let item of data.options\" [value]=\"item\">\n {{ data.translate ? (item | translate) : item }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"comment === 'OTHER'\"\n appearance=\"outline\"\n class=\"w-100\">\n <textarea\n matInput\n [(ngModel)]=\"otherComment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n maxlength=\"1000\"\n cdkAutosizeMaxRows=\"5\">\n </textarea>\n </mat-form-field>\n\n </ng-container>\n\n <ng-template #textMode>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>{{ reasonLabelKey | translate }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n maxlength=\"1000\"\n cdkAutosizeMaxRows=\"5\">\n </textarea>\n </mat-form-field>\n </ng-template>\n\n <div class=\"info-box\">\n <mat-icon>info</mat-icon>\n <span class=\"info-text\">\n {{ warningKey | translate }}\n </span>\n </div>\n\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\" class=\"footer-actions\">\n <button mat-stroked-button class=\"btn-none-background-primary cancel-btn\" (click)=\"cancel()\">\n {{ cancelKey | translate }}\n </button>\n\n <button\n mat-flat-button\n class=\"btn-background-primary warn-btn\"\n (click)=\"commentAndClose()\"\n [disabled]=\"!comment || (comment === 'OTHER' && !otherComment)\">\n {{ actionKey | translate }}\n </button>\n </mat-dialog-actions>\n </div>\n\n <div class=\"mobile-view\">\n <div class=\"modal-header\">\n <div class=\"handle\"></div>\n <div class=\"header-content\">\n <p class=\"modal-title\">{{ titleKey | translate }}</p>\n <button class=\"close-button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"modal-body\">\n\n <ng-container *ngIf=\"data?.options?.length; else mobileText\">\n\n <mat-form-field appearance=\"outline\" class=\"textarea-field-mobile\">\n <mat-select\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n class=\"textarea-mobile\">\n\n <mat-option *ngFor=\"let item of data.options\" [value]=\"item\">\n {{ data.translate ? ( item | translate) : item }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"comment === 'OTHER'\"\n appearance=\"outline\"\n class=\"textarea-field-mobile\">\n <mat-label>{{ placeholderKey | translate }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"otherComment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n cdkAutosizeMaxRows=\"5\"\n maxlength=\"1000\"\n class=\"textarea-mobile\">\n </textarea>\n </mat-form-field>\n\n </ng-container>\n\n <ng-template #mobileText>\n <mat-form-field appearance=\"outline\" class=\"textarea-field-mobile\">\n <mat-label>{{ reasonLabelKey | translate }} {{ itemName }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n cdkAutosizeMaxRows=\"5\"\n maxlength=\"1000\"\n class=\"textarea-mobile\">\n </textarea>\n </mat-form-field>\n </ng-template>\n\n <div class=\"info-box-mobile\">\n <mat-icon class=\"info-icon-mobile\">info</mat-icon>\n <span class=\"info-text-mobile\">\n {{ warningKey | translate }}\n </span>\n </div>\n\n </div>\n\n <div class=\"modal-actions-mobile\">\n <div class=\"actions-buttons-container\">\n <button mat-stroked-button class=\"btn-cancel-mobile\" (click)=\"cancel()\">\n {{ cancelKey | translate }}\n </button>\n <button\n mat-flat-button\n class=\"btn-action-mobile\"\n (click)=\"commentAndClose()\"\n [disabled]=\"!comment || (comment === 'OTHER' && !otherComment)\">\n {{ actionKey | translate }}\n </button>\n </div>\n <div class=\"home-indicator\"></div>\n </div>\n </div>\n\n</div>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ButtonActionSettings} from \"../../base-model/button-action-settings\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {TranslateModule} from \"@ngx-translate/core\";\n\n@Component({\n selector: 'app-button-actions',\n standalone: true,\n imports: [\n MatIcon,\n MatMenuTrigger,\n MatIconButton,\n MatMenu,\n MatMenuItem,\n NgIf,\n NgClass,\n NgForOf,\n TranslateModule\n ],\n templateUrl: './button-actions.component.html',\n styleUrl: './button-actions.component.scss'\n})\nexport class ButtonActionsComponent {\n constructor(public dialog: MatDialog) { }\n\n @Input()\n actions: ButtonActionSettings[] =[];\n @Input()\n disabled?: boolean = false;\n\n @Output()\n clickedButton: EventEmitter<any> = new EventEmitter();\n\n @Input()\n buttonsAction: boolean = false;\n\n @Input()\n listAction: ButtonActionSettings[] = [];\n\n @Input()\n row?: unknown;\n\n ngOnInit(): void {\n }\n\n resolveActionHref(action: ButtonActionSettings): string | null {\n if (this.disabled) {\n return null;\n }\n if (action.showCommentDialog) {\n return null;\n }\n const linkHref = action.linkHref;\n if (linkHref == null || linkHref === '') {\n return null;\n }\n if (typeof linkHref === 'function') {\n if (this.row === undefined || this.row === null) {\n return null;\n }\n const resolved = linkHref(this.row);\n const s = resolved != null ? String(resolved).trim() : '';\n return s.length > 0 ? s : null;\n }\n const s = String(linkHref).trim();\n return s.length > 0 ? s : null;\n }\n\n getClickedAction(action: ButtonActionSettings, event?: MouseEvent) {\n const href = this.resolveActionHref(action);\n if (href && event) {\n if (event.ctrlKey || event.metaKey || event.button === 1) {\n return;\n }\n event.preventDefault();\n }\n if (action.showCommentDialog === true) {\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: action.label, isTermination: action.commentRequired, external: false,\n warningMsg: false},\n width: '600px',\n height: 'auto',\n direction: 'ltr' // this.authService.dir === 'rtl' ? 'rtl': 'ltr'\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n action.comment = result.comment;\n action.shareExternal = result.shareExternal;\n this.clickedButton.emit(action);\n }\n });\n\n } else {\n this.clickedButton.emit(action);\n }\n }\n\n}\n","<ng-container *ngIf=\"buttonsAction; else list_Action\">\n <div class=\"action-buttons-container\" *ngIf=\"(actions?.length ? actions : listAction)?.length > 0\">\n <ng-container *ngFor=\"let action of (actions?.length ? actions : listAction); let i = index\">\n <a\n *ngIf=\"resolveActionHref(action) as href\"\n class=\"action-button\"\n [href]=\"href\"\n (click)=\"getClickedAction(action, $event)\"\n [attr.id]=\"action.id || ('actions-btn-' + action.label)\"\n [title]=\"action.label | translate\"\n >\n <mat-icon *ngIf=\"action.icon?.length\" class=\"action-icon\">{{ action.icon }}</mat-icon>\n </a>\n <button\n *ngIf=\"!resolveActionHref(action)\"\n type=\"button\"\n class=\"action-button\"\n (click)=\"getClickedAction(action)\"\n [disabled]=\"disabled\"\n [attr.id]=\"action.id || ('actions-btn-' + action.label)\"\n [title]=\"action.label | translate\"\n >\n <mat-icon *ngIf=\"action.icon?.length\" class=\"action-icon\">{{ action.icon }}</mat-icon>\n </button>\n </ng-container>\n </div>\n</ng-container>\n\n<ng-template #list_Action>\n <div *ngIf=\"listAction?.length > 0\">\n <button\n type=\"button\"\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"\n style=\"justify-content: center; color: grey\"\n id=\"actions-menu-trigger\"\n [attr.aria-label]=\"'BASE_TABLE.moreActions' | translate\"\n [attr.aria-haspopup]=\"true\">\n <mat-icon aria-hidden=\"true\">more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let list_Action of listAction\">\n <a\n *ngIf=\"resolveActionHref(list_Action) as href\"\n mat-menu-item\n [href]=\"href\"\n (click)=\"getClickedAction(list_Action, $event)\"\n [attr.id]=\"list_Action.id || ('actions-menu-item-' + list_Action.label)\"\n >\n <span>{{ list_Action.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveActionHref(list_Action)\"\n type=\"button\"\n mat-menu-item\n (click)=\"getClickedAction(list_Action)\"\n [attr.id]=\"list_Action.id || ('actions-menu-item-' + list_Action.label)\"\n >\n <span>{{ list_Action.label | translate }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </div>\n</ng-template>\n","\nexport class ButtonActionSettings {\n constructor(buttonActionSettings: ButtonActionSettings) {\n this.key = buttonActionSettings.key;\n this.id = buttonActionSettings.id;\n this.action = buttonActionSettings.action;\n this.label = buttonActionSettings.label;\n this.color = buttonActionSettings.color;\n this.isPrimary = buttonActionSettings.isPrimary;\n this.icon = buttonActionSettings.icon;\n this.showCommentDialog = buttonActionSettings.showCommentDialog;\n this.comment = buttonActionSettings.comment;\n this.shareExternal = buttonActionSettings.shareExternal;\n this.commentRequired = buttonActionSettings.commentRequired || false;\n this.linkHref = buttonActionSettings.linkHref;\n }\n\n linkHref?: string | ((row: unknown) => string | null | undefined);\n\n label: string;\n id: string;\n action?: any;\n key: number;\n isPrimary?: boolean;\n icon?: any;\n showCommentDialog?:boolean;\n comment?: any;\n shareExternal?: boolean;\n selectedId?: number;\n commentRequired? : boolean;\n color?: string;\n}\n","export interface TableColumn<T> {\n property: string;\n type: 'text' | 'croppedText' | 'image' | 'netAmount' | 'workflowStatus' | 'onOff' | 'progress' | 'checkbox' | 'button' | 'date' | 'number'| 'icon' |'bigdecimal'|'builder'|'localDateTime'|'report-sequence' | 'listAction' | 'info' | 'stateType' | 'hyper-text'|'year' | 'reportType' | 'status' | 'list'\n viewType?:string;\n enableSorting: boolean;\n visible?: boolean;\n cssClasses?: string[];\n reportVisible?:boolean | true;\n reportProperty?: string;\n reportType?: string;\n showSum?:boolean;\n showCount?:boolean;\n translate?: boolean;\n width?:number;\n label?:string;\n reportwidth?:number;\n langDrivenName?:boolean;\n additionalProperty?: string;\n currency?: string;\n orderByProperty?: string;\n advancedFilter?: boolean;\n enableQuickFilter?: boolean;\n format?:string;\n group?:string;\n arraySubProperty?: string;\n digitInfo?:string;\n sortKey?:string;\n mobileCardId?: boolean; // Mark this column as ID/name for mobile card header\n mobileCardStatus?: boolean; // Mark this column as status for mobile card header\n}\n\nexport const FRONT_END_COLUMN_TYPES = ['listAction', 'button','hyper-text'];\n","import {ValidatorFn} from \"@angular/forms\";\nimport {Filter} from \"./filter.model\";\n\nexport class FieldInfo {\n property: string = \"\";\n targetProperty?: string = \"\";\n row: number;\n required: boolean = false;\n type: 'text' | 'amount' |'color-picker' | 'currency' | 'date' | 'number' | 'sequence' | 'list' |'lookup'| 'multi-select' | 'password'| 'rich-text'|'radio-button'| 'phone-number'| 'iban-text'|'checkbox' |'textarea' |'button'|'spacer' | 'attachment'| 'section-title'| 'chip-list' |'time' | 'divider' | 'hyper-text' |'stateType'|'status' | 'year' | 'equation-builder'| 'toggle'| 'bigdecimal' | 'multi-state-checkbox' = 'text';\n textFormat?: 'json';\n readonly?: boolean = false;\n viewonly?: boolean ;\n label?: string = '';\n currency?: string;\n lookupApiPath?: string;\n multi?:boolean;\n supportedTypes?:string;\n cascadedBy?: string;\n cascadedByProperty?: string;\n pathParams?: string;\n listOptions?: any[];\n operators?: any[];\n fieldsApi?: string;\n reportFilter?:string;\n updateOnly?: boolean;\n fieldSize ?: number ;\n includeAllOption?: boolean;\n defaultListOption?: any;\n acceptNewItem?: boolean;\n translate?: boolean = false;\n validators?: ValidatorFn[];\n placeholder?: any;\n visible?: boolean = true;\n pattern?: string;\n disabled?: boolean;\n advancedFilter?: boolean;\n filterOperator?: 'GREATER_THAN_EQUAL'|'GREATER_THAN'| 'LESS_THAN'|'LESS_THAN_EQUAL'| 'EQUALS'| 'LIKE'| 'NOT_EQ'| 'IN' ;\n workflowManaged?: boolean;\n workflowCascadingField?: string;\n attachmentType?: string;\n lookupFilterList?: Filter[];\n buttonType?: string;\n hideFiles?: boolean;\n behavioralName?: string;\n flattenBySubAttribute?: string;\n defaultValue?:any;\n extraLookupsColumns?: string[];\n displayColumn?: string;\n searchAttribute?:string;\n validationMessages?: any;\n hideLabel?:boolean;\n searchOperator?:\"GREATER_THAN_EQUAL\" | \"GREATER_THAN\" | \"LESS_THAN\" | \"LESS_THAN_EQUAL\" | \"EQUALS\" | \"LIKE\" | \"NOT_EQ\" | \"IN\" | \"NOT_NULL\";\n showSearchIcon?: boolean;\n multiLevelSearchEnable?: boolean = false;\n maxDecimals?: number ;\n emptyReadonlyPlaceholderKey?: string;\n maxLength?: number ;\n readonlyDateDisplay?: 'date' | 'datetime';\n allowNegative?: boolean;\n phoneNumberOnly?: boolean;\n\n constructor(fieldInfo: FieldInfo) {\n this.property = fieldInfo.property;\n this.targetProperty = fieldInfo.targetProperty;\n this.required = fieldInfo.required;\n this.type = fieldInfo.type;\n this.readonly = fieldInfo.readonly;\n this.label = fieldInfo.label;\n this.fieldSize = fieldInfo.fieldSize;\n this.lookupApiPath = fieldInfo.lookupApiPath ? fieldInfo.lookupApiPath : fieldInfo.property;\n this.row = fieldInfo.row;\n this.supportedTypes = fieldInfo.supportedTypes;\n this.listOptions = fieldInfo.listOptions;\n this.pathParams = fieldInfo.pathParams;\n this.viewonly = fieldInfo.viewonly;\n this.multi = fieldInfo.multi;\n this.updateOnly = fieldInfo.updateOnly;\n this.includeAllOption = fieldInfo.includeAllOption;\n this.defaultListOption = fieldInfo.defaultListOption;\n this.acceptNewItem = fieldInfo.acceptNewItem;\n this.cascadedBy = fieldInfo.cascadedBy;\n this.cascadedByProperty = fieldInfo.cascadedByProperty ? fieldInfo.cascadedByProperty : fieldInfo.cascadedBy;\n this.currency = fieldInfo.currency;\n this.translate = fieldInfo.translate;\n this.advancedFilter = fieldInfo.advancedFilter;\n this.placeholder = fieldInfo.placeholder;\n this.validators = fieldInfo.validators;\n this.filterOperator = fieldInfo.filterOperator;\n this.pattern = fieldInfo.pattern;\n this.workflowManaged = fieldInfo.workflowManaged;\n this.workflowCascadingField = fieldInfo.workflowCascadingField;\n this.visible = fieldInfo.visible === undefined || fieldInfo.visible;\n this.attachmentType = fieldInfo.attachmentType;\n this.lookupFilterList = fieldInfo.lookupFilterList;\n this.extraLookupsColumns = fieldInfo.extraLookupsColumns;\n this.displayColumn = fieldInfo.displayColumn;\n this.textFormat = fieldInfo.textFormat;\n this.buttonType = fieldInfo.buttonType;\n this.hideFiles = fieldInfo.hideFiles;\n this.behavioralName = fieldInfo.behavioralName;\n this.flattenBySubAttribute = fieldInfo.flattenBySubAttribute;\n this.defaultValue = fieldInfo.defaultValue;\n this.searchAttribute = fieldInfo.searchAttribute || this.property;\n this.validationMessages = fieldInfo.validationMessages;\n this.hideLabel = fieldInfo.hideLabel;\n this.searchOperator = fieldInfo.searchOperator || 'EQUALS';\n this.showSearchIcon = fieldInfo.showSearchIcon;\n this.multiLevelSearchEnable = fieldInfo.multiLevelSearchEnable;\n this.maxDecimals = fieldInfo.maxDecimals ?? 10;\n this.maxLength = fieldInfo.maxLength ?? 1000;\n this.emptyReadonlyPlaceholderKey = fieldInfo.emptyReadonlyPlaceholderKey;\n this.readonlyDateDisplay = fieldInfo.readonlyDateDisplay;\n this.allowNegative = fieldInfo.allowNegative ?? false;\n this.phoneNumberOnly = fieldInfo.phoneNumberOnly ?? false;\n }\n\n}\n","export interface PageInfo {\n hasHint?: boolean;\n id: string;\n labelsSection: string;\n hasAddButton: boolean;\n apiUri?: string;\n selfRouting?: boolean;\n addNewRoutePath?: string;\n editRoutePath?: string;\n listRoutePath?: string;\n hideTitle?: boolean;\n hideSubtitle?: boolean;\n saveLabel?: string;\n pageHeight?: 'full' | 'match',\n processId?: number,\n draftSupported: boolean;\n hasExtraTabs?: boolean;\n attachmentEnabled?: boolean;\n attachmentDefaultExternal?: boolean;\n printAction?: boolean;\n completedStatusFilterLabel?: string;\n enableHideTerminated?: boolean;\n embededTableOnly?: boolean;\n hasCustomFields?: boolean;\n hidePagination?: boolean;\n hideExtractButton?: boolean;\n hideReportsExtractButton?: boolean;\n externalPropertyName?: string;\n lazyLoadData?: boolean;\n groupByProperty?: string;\n groupByValue?: string[];\n supportGroupingInExport?: boolean;\n pageSize?: number;\n hideAuditLog?: boolean;\n stayOnPage?: boolean;\n hideAdvancedFilter?: boolean;\n}\n\nexport const EMPTY_PAGE_INFO = {\n id: \"\",\n labelsSection: \"\",\n hasAddButton: false,\n selfRouting: true,\n draftSupported: false,\n hasExtraTabs: false,\n attachmentEnabled: false,\n printAction: false,\n hidePagination: false,\n attachmentDefaultExternal: false,\n supportGroupingInExport: false,\n hideReportsExtractButton: false,\n hideAuditLog: false,\n stayOnPage: true\n\n}\n","import {ColumnDef} from \"./column-def.model\";\nimport {FieldPredicate} from \"./field-predicate.model\";\nimport {FilterRequest} from \"./filter-request\";\n\nexport class ReportRequest {\n sessionId: string;\n title: string;\n prefLang: string;\n columns: ColumnDef[];\n filter: string;\n reportType: 'pdf' | 'xlsx'\n dataset: any[];\n orientation: string;\n searchStr?: string;\n filtersList?: FieldPredicate[];\n filterRequest?: FilterRequest;\n reportCode?: string;\n constructor(br : any) {\n this.sessionId = br.sessionId;\n this.title = br.title;\n this.prefLang = br.prefLang;\n this.searchStr = br.searchStr;\n this.filter = br.filter;\n this.columns = br.columns;\n this.reportType=br.reportType;\n this.dataset = br.dataset;\n this.orientation = br.orientation;\n this.filtersList = br.filtersList;\n this.filterRequest = br.filterRequest;\n this.reportCode = br.reportCode;\n }\n\n}\n","import {Filter} from \"./filter.model\";\nimport {MATCH_TYPE} from \"./SearchStrConfig\";\n\nexport class FilterRequest {\n filters?: Filter[];\n searchStr: string;\n pageIndex: number;\n pageSize: number;\n sortKey: string;\n sortDirection: 'ASC'|'DESC';\n apiUri: string;\n columns: string[];\n pendingPage: boolean;\n matchType?: MATCH_TYPE;\n\n constructor(pageSize: number = 10) {\n this.apiUri = '';\n this.searchStr = '';\n this.pageIndex = 0;\n this.pageSize = pageSize;\n this.sortKey = 'id';\n this.sortDirection = \"DESC\";\n this.columns = [];\n this.pendingPage = false;\n }\n}\n\n","export class Filter {\n id?: any;\n key?: any;\n label?: string;\n fieldName?: string;\n joinObjectName?: string;\n valueObject?: any;\n fieldType?: string;\n objectFieldName?: string;\n filterType?: 'ASSIGNED_TO_ME'|'FILED_FILTER' | 'CLEAR_FILTERS' | 'CUSTOMER_ID'| 'VENDOR_ID' | 'INVOICE_CUSTOMER_ID'|\n 'INVOICE_VENDOR_ID' | 'DATE' | 'ASSIGNED_DEPARTMENT'| 'ASSIGNED_DEPARTMENT_MANAGER_STEPS';\n operator?: 'GREATER_THAN_EQUAL'|'GREATER_THAN'| 'LESS_THAN'|'LESS_THAN_EQUAL'| 'EQUALS'| 'LIKE'| 'NOT_EQ'| 'IN' | 'NOT_NULL';\n firstValue?: any;\n secondValue?: string;\n values?: string[];\n autoSelect?: boolean = false;\n\n constructor(filter : Filter) {\n this.id = filter.id;\n this.key = filter.key;\n this.label = filter.label;\n this.fieldName = filter.fieldName;\n this.joinObjectName = filter.joinObjectName;\n this.objectFieldName = filter.objectFieldName;\n this.valueObject = filter.valueObject;\n this.filterType = filter.filterType || 'FILED_FILTER';\n this.fieldType = filter.fieldType;\n this.operator = filter.operator || 'EQUALS';\n this.firstValue = filter.firstValue;\n this.secondValue = filter.secondValue;\n this.values = filter.values;\n this.autoSelect = filter.autoSelect;\n }\n}\n\nexport const HIDE_TERMINATED: Filter = new Filter(\n {key: 2, label: 'hideTerminated', filterType: 'FILED_FILTER', fieldType: 'number' , fieldName: 'statusId', firstValue: '3' , operator: 'NOT_EQ' , autoSelect:true});\n\nexport const ASSIGNED_TO_ME_FILTER: Filter = new Filter(\n {key: -1, label: 'Assigned to me', fieldName: 'stepId', filterType: 'ASSIGNED_TO_ME', autoSelect: true});\n\nexport const PENDING_STATUS_FILTER: Filter = new Filter(\n {key: -2, label: 'Pending Items', fieldName: 'statusId', firstValue: '2', filterType: 'FILED_FILTER'});\n\nexport const CLEAR_FILTERS: Filter = new Filter(\n {key: -3, label: 'clear', filterType:'CLEAR_FILTERS'});\n\nexport const ASSIGNED_DEPARTMENT_FILTER : Filter = new Filter(\n {key: -4, label: 'ASSIGNED_DEPARTMENT', filterType:'ASSIGNED_DEPARTMENT'});\n","export class LookupItem {\n id: number;\n arabicName: string;\n englishName: string;\n defaultValue?: boolean = false;\n\n constructor(lookup: LookupItem) {\n this.id = lookup.id;\n this.englishName = lookup.englishName;\n this.arabicName = lookup.arabicName;\n this.defaultValue = lookup.defaultValue;\n }\n}\n\nexport const ALL_ITEM= {\n id: -100,\n arabicName:'Select All',\n englishName:'Select All',\n defaultValue: false\n}\n\n","export class SnackMessage {\n message: string='';\n translate: boolean=false;\n type: 'info' | 'success' | 'error' | 'warning';\n translateParams: any;\n\n\n constructor(message: string, translate=false , type?:any , translateParams: any = {}) {\n this.message = message;\n this.translate = translate;\n this.type = type;\n this.translateParams = translateParams;\n }\n}\n","import {PageInfo} from \"./page-info\";\n\nexport interface TablePageUserAction {\n type: 'add' | 'select' | 'extra';\n id?:number;\n item?:any;\n actionKey?: string;\n pageInfo?:PageInfo\n}\n\nexport const SELECT_RECORD_ACTION: TablePageUserAction = {\n type:'select'\n}\nexport const EXTRA_ACTION: TablePageUserAction = {\n type:'extra'\n}\n\nexport const DRILL_DOWN_ACTION: TablePageUserAction = {\n type:'extra'\n}\nexport const JUNIOR_DOWN_ACTION: TablePageUserAction = {\n type:'extra'\n}\n\nexport const ADD_NEW_RECORD_ACTION: TablePageUserAction = {\n type:'add',\n id: -1\n}\n\nexport const TABLE_RECORD_ACTION: TablePageUserAction = {\n type:'extra',\n id: -1\n}\n","export const NEW =1;\nexport const SAVE =2;\nexport const REJECT =3;\nexport const APPROVE =4;\nexport const SAVE_AND_COMPLETE =5;\n\nexport class DoActionRequest {\n actionId: number;\n comment: string;\n subject: any;\n}\n","import {FieldInfo, EMPTY_PAGE_INFO, PageInfo, FilterRequest, SAVE_AND_COMPLETE} from \"../base-model\";\nimport {APPROVE, NEW, SAVE} from \"../base-model/do-action-request\";\nimport {Validators} from \"@angular/forms\";\n\nexport class BaseUtils {\n\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n labelKey(column: any) {\n if (column.type === 'workflowStatus') {\n return 'INVENTORY.workflowStatus'\n }\n if (!column.property.length) {\n return \"\";\n }\n const configuredKey = column.label ? column.label : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n labelKeyByValue(column: any, element) {\n if (!column.property.length) {\n return \"\";\n }\n return `${this.pageInfo.labelsSection}.${element[column.property]}`\n }\n\n formatTimeToDate(v: any){\n const fromTime: Date = new Date();\n if (v) {\n let split = v.split(\":\");\n fromTime.setHours(split[0], split[1]);\n }\n return new Date(fromTime.getTime());\n }\n}\n\nexport function buildFormFields(fields: FieldInfo[], item:any){\n let fieldsControls: string[] = [];\n for (let field of fields) {\n if (field.type !== 'spacer') {\n const emptyValue =\n field.type === 'lookup' || field.type === 'multi-select'\n ? null\n : field.type === 'multi-state-checkbox'\n ? []\n : '';\n const extractedValue = item ? extractFieldName(item, field.property) : undefined;\n let validators = field.required\n ? [...(field.validators || []), Validators.required]\n : [...(field.validators || [])];\n if (field.type === 'number' && !field.allowNegative) {\n validators = [...validators, Validators.min(0)];\n }\n\n fieldsControls[field.property] = extractedValue !== undefined && extractedValue !== null\n ? [extractedValue, validators]\n : [emptyValue, validators];\n }\n }\n return fieldsControls;\n}\nexport function buildItemsList(searchStr: string, apiPath?: string, cascadedByProperty?:string){\n const filterRequest : FilterRequest = new FilterRequest();\n // return {\n filterRequest.apiUri = cascadedByProperty ? `${apiPath}/${cascadedByProperty}` :apiPath;\n filterRequest.searchStr= searchStr\n filterRequest.pageIndex = 0;\n filterRequest.pageSize= 10;\n filterRequest.sortKey= 'id';\n filterRequest.sortDirection = \"DESC\" as const;\n // }\n return filterRequest;\n}\n\nexport function extractFieldName(element: any, property: string) {\n if (property.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n}\n\nexport function getPositiveWfActionKey(stateType: any) {\n if (stateType === \"COMPLETED\") {\n return \"save\";\n } else if (stateType === \"PENDING\" || stateType === \"NEW\") {\n return \"approve\";\n }\n return \"save\";\n}\n\nexport function getNegativeWfActionKey(stateType: any) {\n if (stateType === \"COMPLETED\" ) {\n return \"cancel\";\n } else if (stateType === \"PENDING\"|| stateType === \"NEW\") {\n return \"reject\";\n }\n return \"cancel\";\n}\n\nexport function getWfActionId(stateType) {\n let actionId = NEW;\n if (stateType === \"COMPLETED\") {\n actionId = SAVE;\n } else if (stateType === \"PENDING\" || stateType === \"NEW\") {\n actionId = APPROVE;\n }\n return actionId;\n}\n\n","export class ResponseEnvelop {\n valid: boolean;\n messages: string[];\n body: any;\n pagesCount: number;\n totalSize: number;\n\n constructor(responseEnvelop:ResponseEnvelop) {\n this.valid = responseEnvelop.valid;\n this.messages = responseEnvelop.messages;\n this.body = responseEnvelop.body;\n this.pagesCount = responseEnvelop.pagesCount;\n this.totalSize = responseEnvelop.totalSize;\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {Location, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {ButtonActionSettings, PageInfo} from \"../../base-model\";\nimport {MatChipListbox, MatChipOption} from \"@angular/material/chips\";\n\n@Component({\n selector: 'app-title-bar',\n standalone: true,\n imports: [\n NgIf,\n MatIconModule,\n MatButton,\n MatMenuItem,\n MatMenu,\n NgForOf,\n MatMenuTrigger,\n TranslateModule,\n MatChipListbox,\n MatChipOption,\n ],\n templateUrl: './title-bar.component.html',\n styleUrls: ['./title-bar.component.css', 'title-bar.component.scss']\n})\nexport class TitleBarComponent implements OnInit, OnChanges {\n @Input()\n pageTitle: string = \"\";\n\n @Input()\n showExtractButton: boolean = false;\n\n @Input()\n totalElements?: number;\n\n @Input()\n titleMode: string = '';\n\n @Input()\n pageInfo: PageInfo;\n\n @Input()\n subTitle: string = '';\n\n @Input()\n statusDesc?: string;\n\n @Input()\n newAction: boolean = false;\n\n\n @Input() // @ts-ignore\n extraButton: string;\n\n\n @Input()\n showDetails: any = [];\n\n @Input()\n showImport = false;\n\n @Input()\n showButton = false;\n\n @Output()\n newActionClicked = new EventEmitter();\n\n @Output()\n extraButtonClicked = new EventEmitter();\n\n\n @Output()\n extractReport = new EventEmitter();\n\n @Input()\n extraData = '';\n\n listTitle = '';\n newButton = '';\n\n @Input()\n titleCorporateAdmin: string = '';\n\n isRoot: boolean = false;\n @Input()\n hideBackButton: boolean = true;\n\n @Input() buttons: ButtonActionSettings[] = [];\n @Input() buttonsDisplayMode: 'dropdown' | 'list' = 'dropdown';\n @Output() buttonClicked = new EventEmitter<ButtonActionSettings>();\n @Input() draftSupported: boolean = false;\n @Input() isPending: boolean = false;\n @Input() onViewModeChange?: (isPending: boolean) => void;\n @Output() viewModeChanged = new EventEmitter<boolean>();\n\n private _isPending: boolean = false;\n\n constructor(private location:Location,\n private dir: Directionality) {\n }\n\n ngOnInit(): void {\n this.listTitle = this.pageTitle;\n this.newButton = this.extraButton;\n // this.isRoot = this.authService.isRootOrg();\n this.isRoot = false;\n this._isPending = this.isPending;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"pageTitle\"] && !changes[\"pageTitle\"].isFirstChange() ) {\n this.listTitle = this.pageTitle;\n }\n if (changes[\"isPending\"]) {\n this._isPending = this.isPending;\n }\n }\n\n get currentIsPending(): boolean {\n return this._isPending;\n }\n\n get backIcon(): string {\n return this.dir.value === 'rtl' ? 'arrow_back' : 'arrow_forward';\n }\n\n publishEvent() {\n this.newActionClicked.emit(true);\n }\n\n\n doExtractReport(value: any) {\n this.extractReport.emit(value);\n }\n publishExtraButtonEvent() {\n this.extraButtonClicked.emit(true);\n }\n\n goBack() {\n this.location.back()\n }\n\n resolveButtonHref(btn: ButtonActionSettings): string | null {\n if (btn.showCommentDialog) {\n return null;\n }\n const lh = btn.linkHref;\n if (lh == null || lh === '') {\n return null;\n }\n if (typeof lh === 'function') {\n const resolved = lh(undefined as unknown);\n const s = resolved != null ? String(resolved).trim() : '';\n return s.length > 0 ? s : null;\n }\n const s = String(lh).trim();\n return s.length > 0 ? s : null;\n }\n\n onButtonClick(btn: ButtonActionSettings, event?: MouseEvent) {\n const href = this.resolveButtonHref(btn);\n if (href && event) {\n if (event.ctrlKey || event.metaKey || event.button === 1) {\n return;\n }\n event.preventDefault();\n }\n this.buttonClicked.emit(btn);\n }\n\n onViewModeChanged(isPending: boolean) {\n this._isPending = isPending;\n if (this.onViewModeChange) {\n this.onViewModeChange(isPending);\n }\n this.viewModeChanged.emit(isPending);\n }\n\n onChipSelectionChange(event: any, listbox?: MatChipListbox): void {\n const value = event.value;\n if (value !== 'COMPLETED' && value !== 'PENDING') {\n setTimeout(() => listbox && (listbox.value = this._isPending ? 'PENDING' : 'COMPLETED'));\n return;\n }\n if (this._isPending !== (value === 'PENDING')) this.onViewModeChanged(value === 'PENDING');\n }\n}\n","<div class=\"row mainTitleBar gap-20 default-align\">\n\n <div class=\"column flex-auto textTitle\" >\n <h2 *ngIf=\"!pageInfo.hideTitle\" style=\"margin: 0;\">\n <span class=\"textTitle__titleMode\">{{ titleMode | translate }}</span>\n {{ listTitle | translate }}\n <span *ngIf=\"titleCorporateAdmin && isRoot\">({{ titleCorporateAdmin }})</span>\n {{ extraData }}\n </h2>\n <span *ngIf=\"subTitle\" class=\"textTitle__subTitle\">{{ subTitle | translate }}</span>\n <div *ngIf=\"pageInfo.draftSupported\" class=\"chips-container\">\n <mat-chip-listbox #box [attr.aria-label]=\"'BASE_TABLE.documentStatus' | translate\" [multiple]=\"false\" [value]=\"currentIsPending ? 'PENDING' : 'COMPLETED'\" (click)=\"$event.stopPropagation()\" (change)=\"onChipSelectionChange($event, box)\">\n <mat-chip-option [selected]=\"!currentIsPending\" [color]=\"'accent'\" value=\"COMPLETED\" (click)=\"$event.stopPropagation()\">\n <mat-icon *ngIf=\"!currentIsPending\" style=\"font-size: 14px; width: 14px; height: 14px; margin-right: 4px;\">check</mat-icon>\n {{'finished' | translate}}\n </mat-chip-option>\n <mat-chip-option [selected]=\"currentIsPending\" [color]=\"'accent'\" value=\"PENDING\" (click)=\"$event.stopPropagation()\">\n <mat-icon *ngIf=\"currentIsPending\" style=\"font-size: 14px; width: 14px; height: 14px; margin-right: 4px;\">check</mat-icon>\n {{'todo' | translate}}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n\n <div class=\"column end-items gap-20\">\n <button type=\"button\" mat-flat-button color=\"primary\" style=\"width: 100px\" *ngIf=\"!hideBackButton\" (click)=\"goBack()\" id=\"title-bar-back-btn\">\n <mat-icon color=\"second\">{{ backIcon }}</mat-icon>\n <span style=\"font-weight: bold\">{{ 'back' | translate }}</span>\n </button>\n\n <div class=\"row flex-auto gap-20 buttons-wrapper\">\n <ng-container *ngIf=\"buttonsDisplayMode === 'dropdown'\">\n <button\n type=\"button\"\n *ngIf=\"buttons && buttons.length > 0\"\n mat-flat-button\n [matMenuTriggerFor]=\"actionMenu\"\n class=\"title-bar-action-button\"\n [attr.id]=\"'title-bar-action-button'\">\n <div class=\"button-content\">\n <mat-icon class=\"button-icon\">{{ buttons[0].icon }}</mat-icon>\n <span class=\"button-label\">{{ buttons[0].label | translate }}</span>\n <mat-icon class=\"button-arrow\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #actionMenu=\"matMenu\" class=\"title-bar-action-menu\">\n <ng-container *ngFor=\"let btn of buttons\">\n <a\n *ngIf=\"resolveButtonHref(btn) as href\"\n mat-menu-item\n [href]=\"href\"\n (click)=\"onButtonClick(btn, $event)\"\n [attr.id]=\"btn.id || ('title-bar-menu-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveButtonHref(btn)\"\n type=\"button\"\n mat-menu-item\n (click)=\"onButtonClick(btn)\"\n [attr.id]=\"btn.id || ('title-bar-menu-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </ng-container>\n\n <ng-container *ngIf=\"buttonsDisplayMode === 'list'\">\n <ng-container *ngFor=\"let btn of buttons\">\n <a\n *ngIf=\"resolveButtonHref(btn) as href\"\n mat-flat-button\n color=\"primary\"\n class=\"title-bar-list-button\"\n [href]=\"href\"\n (click)=\"onButtonClick(btn, $event)\"\n [attr.id]=\"btn.id || ('title-bar-list-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveButtonHref(btn)\"\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n class=\"title-bar-list-button\"\n (click)=\"onButtonClick(btn)\"\n [attr.id]=\"btn.id || ('title-bar-list-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgIf, NgForOf } from '@angular/common';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-paginator',\n templateUrl: './paginator.component.html',\n styleUrls: ['./paginator.component.css'],\n standalone: true,\n imports: [MatIconModule, MatButtonModule, NgIf, NgForOf],\n})\nexport class PaginatorComponent implements OnInit, OnChanges {\n @Input() currentPage = 1;\n @Input() totalItems = 0;\n @Input() pageSize = 10;\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n @Input() mobileLoadMoreIncrement = 2;\n @Input() displayedItems = 0;\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n @Output() loadMore = new EventEmitter<number>();\n\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n constructor(\n private directionality: Directionality,\n private readonly liveAnnouncer: LiveAnnouncer,\n private readonly translate: TranslateService,\n ) {}\n\n ngOnInit() {\n this.currentDirection = this.directionality.value;\n this.directionality.change?.subscribe((value) => {\n this.currentDirection = value;\n });\n if (!this.pageSizeOptions.includes(this.pageSize)) {\n Promise.resolve().then(() => {\n this.pageSize = this.pageSizeOptions[1];\n this.pageSizeChange.emit(this.pageSize);\n });\n }\n if (this.displayedItems === 0) {\n this.displayedItems = this.pageSize;\n }\n }\n\n ngOnChanges() {\n if (this.currentPage > this.totalPages) {\n this.currentPage = this.totalPages || 1;\n }\n if (this.displayedItems === 0 || (this.displayedItems === this.pageSize && this.currentPage > 1)) {\n this.displayedItems = Math.min(this.currentPage * this.pageSize, this.totalItems);\n }\n }\n\n get totalPages(): number {\n return Math.ceil(this.totalItems / this.pageSize);\n }\n\n get startIndex(): number {\n return this.totalItems === 0 ? 0 : (this.currentPage - 1) * this.pageSize + 1;\n }\n\n get endIndex(): number {\n return Math.min(this.currentPage * this.pageSize, this.totalItems);\n }\n\n goToPage(page: number) {\n if (page >= 1 && page <= this.totalPages) {\n const previous = this.currentPage;\n this.currentPage = page;\n this.pageChange.emit(this.currentPage);\n if (previous !== this.currentPage) {\n queueMicrotask(() => this.announcePagination());\n }\n }\n }\n\n nextPage() {\n if (this.currentPage < this.totalPages) {\n this.goToPage(this.currentPage + 1);\n }\n }\n\n previousPage() {\n if (this.currentPage > 1) {\n this.goToPage(this.currentPage - 1);\n }\n }\n\n onPageSizeChange(size: number) {\n this.pageSize = size;\n this.currentPage = 1;\n this.pageSizeChange.emit(this.pageSize);\n this.pageChange.emit(this.currentPage);\n queueMicrotask(() => this.announcePagination());\n }\n\n private announcePagination(): void {\n const message = this.translate.instant('BASE_TABLE.paginationStatus', {\n current: this.currentPage,\n total: this.totalPages,\n start: this.startIndex,\n end: this.endIndex,\n items: this.totalItems,\n });\n void this.liveAnnouncer.announce(message, 'polite');\n }\n\n getPageNumbers(): (number | string)[] {\n const TOTAL = this.totalPages;\n const CURRENT = this.currentPage;\n const PAGES: (number | string)[] = [];\n\n if (TOTAL <= 7) {\n for (let i = 1; i <= TOTAL; i++) {\n PAGES.push(i);\n }\n } else {\n PAGES.push(1);\n\n if (CURRENT <= 3) {\n for (let i = 2; i <= 4; i++) {\n PAGES.push(i);\n }\n PAGES.push('...');\n PAGES.push(TOTAL - 1);\n PAGES.push(TOTAL);\n } else if (CURRENT >= TOTAL - 2) {\n PAGES.push(2);\n PAGES.push('...');\n for (let i = TOTAL - 3; i <= TOTAL; i++) {\n PAGES.push(i);\n }\n } else {\n PAGES.push(2);\n PAGES.push('...');\n PAGES.push(CURRENT - 1);\n PAGES.push(CURRENT);\n PAGES.push(CURRENT + 1);\n PAGES.push('...');\n PAGES.push(TOTAL - 1);\n PAGES.push(TOTAL);\n }\n }\n\n return PAGES;\n }\n\n isEllipsis(page: number | string): boolean {\n return page === '...';\n }\n\n isActive(page: number | string): boolean {\n return typeof page === 'number' && page === this.currentPage;\n }\n\n onLoadMore() {\n if (this.canLoadMore) {\n this.loadMore.emit(this.mobileLoadMoreIncrement);\n queueMicrotask(() => this.announcePagination());\n }\n }\n\n get canLoadMore(): boolean {\n return this.displayedItems < this.totalItems;\n }\n\n get currentPageNumber(): number {\n return Math.ceil(this.displayedItems / this.mobileLoadMoreIncrement) || 1;\n }\n\n get totalPageNumbers(): number {\n return Math.ceil(this.totalItems / this.mobileLoadMoreIncrement);\n }\n\n protected readonly Math = Math;\n}\n","<!-- Desktop Pagination -->\n<div class=\"paginator-container paginator-desktop\" [dir]=\"currentDirection\" [class.rtl]=\"currentDirection === 'rtl'\">\n <button\n class=\"paginator-button paginator-nav-button\"\n [class.disabled]=\"currentPage === 1\"\n [disabled]=\"currentPage === 1\"\n (click)=\"previousPage()\"\n type=\"button\">\n <mat-icon class=\"paginator-icon paginator-icon-left\">chevron_left</mat-icon>\n </button>\n\n <ng-container *ngFor=\"let page of getPageNumbers()\">\n <button\n *ngIf=\"!isEllipsis(page)\"\n class=\"paginator-button paginator-page-button\"\n [class.active]=\"isActive(page)\"\n [disabled]=\"isActive(page)\"\n (click)=\"goToPage(+page)\"\n type=\"button\">\n <span class=\"paginator-page-number\">{{ page }}</span>\n </button>\n <div *ngIf=\"isEllipsis(page)\" class=\"paginator-button paginator-ellipsis\">\n <span class=\"paginator-ellipsis-text\">...</span>\n </div>\n </ng-container>\n\n <button\n class=\"paginator-button paginator-nav-button\"\n [class.disabled]=\"currentPage === totalPages\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"nextPage()\"\n type=\"button\">\n <mat-icon class=\"paginator-icon paginator-icon-right\">chevron_right</mat-icon>\n </button>\n</div>\n\n<!-- Mobile \"Load More\" Pagination -->\n<div class=\"paginator-mobile\">\n <button\n class=\"paginator-load-more-button\"\n [disabled]=\"!canLoadMore\"\n (click)=\"onLoadMore()\"\n type=\"button\">\n <span class=\"paginator-load-more-text\">Load More</span>\n </button>\n <p class=\"paginator-page-indicator\">{{ currentPageNumber }} of {{ totalPageNumbers }}</p>\n</div>","import {FormGroup} from \"@angular/forms\";\nimport {LookupItem} from \"../base-model\";\n\nexport function RequireMatch(control: FormGroup) {\n const selection: any = control.value;\n if (typeof selection === 'string' || (selection instanceof LookupItem && selection.id === -1)) {\n return { incorrect: true };\n }\n return null;\n}\n","import { FormGroup } from '@angular/forms';\n\nexport function MultiEmailValidator(control: FormGroup) {\n if (!control.value) {\n return null;\n }\n const emails = control.value.split(';').map(email => email.trim());\n\n for (let email of emails) {\n if (!email.match(/^([\\w+-.%]+@[\\w-.]+\\.[A-Za-z]{2,7};?)*$/)) {\n return { 'invalidEmail': { value: control.value } };\n }\n }\n return null;\n}\n","import { AbstractControl, ValidationErrors, FormArray, FormGroup } from '@angular/forms';\n\nexport function DateRangeValidator(group: AbstractControl): ValidationErrors | null {\n let fromDateControl: AbstractControl | null = null;\n let toDateControl: AbstractControl | null = null;\n\n if (group.parent instanceof FormGroup && group.parent.parent instanceof FormArray) {\n const formGroup = group.parent;\n fromDateControl = formGroup.get('from');\n toDateControl = formGroup.get('to');\n } else {\n fromDateControl = group.root.get('from');\n toDateControl = group.root.get('to');\n }\n\n if (fromDateControl && toDateControl) {\n const fromDateValue = fromDateControl.value;\n const toDateValue = toDateControl.value;\n\n if (fromDateValue && toDateValue) {\n const fromDate = new Date(fromDateValue);\n const toDate = new Date(toDateValue);\n\n if (fromDate > toDate) {\n return { dateRangeInvalid: 'Invalid Date Range: To date must be after from date' };\n }\n }\n }\n\n return null;\n}\n","export class ColumnDef {\n order: number;\n label: string;\n fieldName: string;\n datatype: string;\n groupLabel: string;\n width: number;\n showSum: boolean=false;\n showCount: boolean=false;\n\n constructor(tableColumn: any, order: number, transLabel :string, lang?:string, groupLabel?:string) {\n this.order = order;\n this.label = transLabel;\n if (tableColumn.reportProperty) {\n this.fieldName = tableColumn.reportProperty;\n } else {\n this.fieldName = tableColumn.property.toString();\n }\n\n if (tableColumn.langDrivenName){\n this.fieldName = this.fieldName + \".\" + (lang === 'en'? \"englishName\": \"arabicName\");\n }\n\n if (tableColumn.reportType) {\n this.datatype = tableColumn.reportType;\n } else {\n this.datatype = tableColumn.type === 'stateType' || tableColumn.type === 'list' ? 'text' : tableColumn.type;\n }\n this.width = tableColumn.reportwidth ? tableColumn.reportwidth : null;\n this.showSum = tableColumn.showSum;\n this.showCount = tableColumn.showCount;\n this.groupLabel = groupLabel;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {SnackMessage} from \"../base-model/snack-message.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopPanel {\n\n public topPanelMessage$ = new BehaviorSubject<SnackMessage>({\n message: '',\n translate: false,\n type: 'info',\n translateParams: {}\n });\n\n}\n","import {Inject, Injectable} from \"@angular/core\";\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams} from \"@angular/common/http\";\nimport {Observable, of, Subject} from \"rxjs\";\nimport {catchError, distinctUntilChanged} from \"rxjs/operators\";\nimport {SnackMessage} from \"../base-model/snack-message.model\";\nimport {PageInfo} from \"../base-model/page-info\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {ColumnDef} from \"../base-model/column-def.model\";\nimport {TableColumn} from \"../base-model/table-column.interface\";\nimport {GetItemsList} from \"../base-model/get-items-list\";\nimport {FieldAction} from \"../base-model/field-action\";\nimport {Workflow} from \"../base-model/workflow/workflow.model\";\nimport {ReportRequest} from \"../base-model/report-request.model\";\nimport {FilterRequest} from \"../base-model/filter-request\";\nimport {ResponseEnvelop} from \"../base-model/response-envelop.model\";\nimport {FormGroup} from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport {TopPanel} from \"./top-panel\";\nimport {DoActionRequest} from \"../base-model/do-action-request\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActionConfirmationComponent} from \"../components/action-confirmation/action-confirmation.component\";\n\nconst WORKFLOW_STATES_MAP: Record<number, string> = {\n 1: 'New',\n 2: 'Pending',\n 3: 'Terminated',\n 4: 'Completed',\n 5: 'Updated',\n 6: 'Default'\n};\n\nconst EXCLUDED_REPORT_COLUMNS = ['listAction','button', 'checkbox'];\n@Injectable({\n providedIn: 'root'\n})\nexport class BackendService {\n public topPanelMessage$ = new Subject<SnackMessage>();\n // @ts-ignore\n public parentForm: FormGroup;\n public childForm: FormGroup;\n public fieldAction$ = new Subject<FieldAction>();\n public isEmptyItems: boolean = true;\n\n constructor(private http: HttpClient,\n private topPanel: TopPanel,\n private translateService: TranslateService,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n @Inject('config') private config: any,\n @Inject('secretsManager') private secretsManager: any) {\n\n this.topPanelMessage$.subscribe(msg => {\n this.topPanel.topPanelMessage$.next(msg);\n })\n }\n\n set defaults(value: any | undefined) {\n }\n\n get defaults(): any | undefined {\n return {};\n }\n\n getStatusDescription(element: any, workflow: Workflow) {\n if (element?.stepId) {\n\n let index = workflow?.workflowSteps?.findIndex(s => s.stepId === element.stepId);\n if (index > -1) {\n return this.translateService.getDefaultLang() === 'ar' ?\n workflow?.workflowSteps[index].stepNameAr || workflow?.workflowSteps[index].stepName:\n workflow?.workflowSteps[index].stepName;\n // return this.translateService.instant(workflow?.workflowSteps[index].stepName);\n } else {\n return this.translateService.instant('INVENTORY.inprocessStatus');\n }\n } else {\n if (element.statusId === 4 && element.statusDescription) {\n return element.statusDescription;\n } else if (element.statusId) {\n return this.translateService.instant(WORKFLOW_STATES_MAP[element.statusId]);\n } else {\n return \"unknown\";\n }\n }\n }\n//sss\n getItemsByFilter(reportRequest: any, apiUrl: string): Observable<any> {\n const url = `${this.getApiBasePath()}/api/v1${apiUrl}/list`;\n return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n getItemAuditLog(reportRequest: any, apiUrl: string): Observable<any> {\n const url = `${this.getApiBasePath()}/api/v1${apiUrl}/audit-log`;\n return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n\n private buildSecuredHeader() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: this.config.getAuthToken()\n });\n return headers;\n }\n\n public buildFormSecuredHeader() {\n const headers = new HttpHeaders({\n Authorization: this.config.getAuthToken()\n });\n return headers;\n }\n\n labelKey(column: any, pageInfo: PageInfo) {\n const configuredKey = column.label ? column.label : column.property;\n\n if (configuredKey && configuredKey.trim() !== '' && configuredKey.startsWith(pageInfo.labelsSection)) {\n return configuredKey;\n }\n\n return `${pageInfo.labelsSection}.${configuredKey}`;\n }\n\n\n private buildReportColumn(columns: TableColumn<any>[], pageInfo: PageInfo): ColumnDef[] {\n let columnDef: ColumnDef[] = [];\n\n columns.filter(x => !EXCLUDED_REPORT_COLUMNS.includes(x.type)).forEach((c, index) => {\n let transLabel = this.translateService.instant(this.labelKey(c,pageInfo));\n let transGroup = pageInfo.supportGroupingInExport ?\n c.group.trim() ? this.translateService.instant(c.group) : ' ' : null;\n if (c.type === 'workflowStatus') {\n transLabel = this.translateService.instant('workflowStatus');\n }\n if ((c.reportVisible === true) || (c.visible === true && c.reportVisible !== false)) {\n columnDef.push(new ColumnDef(c, index, transLabel, this.translateService.getDefaultLang(),transGroup));\n }\n });\n return columnDef;\n }\n\n private base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64); // Comment this if not using base64\n const bytes = new Uint8Array(binaryString.length);\n return bytes.map((byte, i) => binaryString.charCodeAt(i));\n }\n\n buildReportRequest(columns: TableColumn<any>[], title: string | string[], filterRequest: FilterRequest, reportType: any, pageInfo: PageInfo, searchStr: string ,orientation='PORTRAIT'): ReportRequest {\n const columnDef = this.buildReportColumn(columns, pageInfo);\n const reportRequest = new ReportRequest({\n dataset: [], filter: \"\",\n columns: columnDef,\n // sessionId: this.topPanel.userSession().sessionId,\n sessionId: this.config.getAuthToken(),\n title: this.translateService.instant(title),\n prefLang: this.translateService.getDefaultLang(),\n reportType: reportType,\n searchStr: searchStr,\n filterRequest: filterRequest,\n orientation: orientation});\n return reportRequest;\n }\n\n getLookupItemsByMultiFilter(listItems: GetItemsList, filterRequest?: FilterRequest): Observable<any> {\n listItems.pageSize = 100;\n filterRequest.pageSize = 100;\n const params = new HttpParams().set('searchStr', listItems.searchStr);\n let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;\n return this.http.post(url, filterRequest, { headers: this.buildSecuredHeader(), params: params}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n getLookupItemsByFilter(listItems: GetItemsList, cascadedId?: any): Observable<any> {\n listItems.pageSize = 500;\n const params = new HttpParams().set('searchStr', listItems.searchStr);\n let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;\n if (cascadedId) {\n url = url + `/${cascadedId}`\n }\n\n return this.http.post(url, listItems,{ headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n\n\n downloadReport(reportRequest: ReportRequest, pageApiPath : string, readyPath? : boolean ) {\n const s = readyPath === true ? `/api/v1${pageApiPath}` : `/api/v1${pageApiPath}/extractAndDownloadListReport`;\n return this.http.post<ResponseEnvelop>(this.getApiBasePath() + s, reportRequest, {headers: this.buildSecuredHeader()}).subscribe(\n (resp:ResponseEnvelop) => {\n if (resp.valid) {\n if (resp.body) {\n this.topPanelMessage$.next(\n new SnackMessage(\n 'report.download.start',\n true,\n 'success',\n {\n entity: reportRequest.title,\n format: reportRequest.reportType?.toUpperCase()\n }\n )\n );\n const filename = reportRequest.title + \".\" + reportRequest.reportType;\n const blob = new Blob([this.base64ToArrayBuffer(resp.body)]);\n if (navigator.msSaveBlob) {\n navigator.msSaveBlob(blob, filename);\n } else {\n const link = document.createElement('a');\n // Browsers that support HTML5 download attribute\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n }\n } else {\n this.topPanelMessage$.next(new SnackMessage('report.download.failed', false, 'error')); }\n }\n );\n\n }\n\n private getApiBasePath(){\n return this.config.getBaseApi();\n }\n\n doActionWithAttachments(request: DoActionRequest, param2: any[], pageInfo: PageInfo) {\n const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;\n const formData: FormData = new FormData();\n formData.set('doActionRequest', new Blob([JSON.stringify(request)], {\n type: \"application/json\"\n }));\n\n return this.http.post(url, formData, { headers: this.buildFormSecuredHeader() }).pipe(\n distinctUntilChanged(),\n catchError((error: HttpErrorResponse) => {\n return of(error.error);\n })\n );\n\n }\n doActionWithAttachment(request: DoActionRequest, file: File, pageInfo: PageInfo) {\n const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;\n const formData: FormData = new FormData();\n\n formData.append('files', file);\n formData.set('doActionRequest', new Blob([JSON.stringify(request)], {\n type: \"application/json\"\n }));\n\n return this.http.post<any>(url, formData, {\n headers: this.buildFormSecuredHeader()\n }).pipe(\n distinctUntilChanged(),\n catchError((error: HttpErrorResponse) => {\n // Transform the error into a fake success-like response\n return of(error.error); // This will now be passed to `next` in subscribe()\n })\n );\n }\n\n encrypt(message: any) {\n return this.secretsManager.encryptSecret(message);\n }\n\n decrypt(secret: any) {\n return this.secretsManager.decryptSecret(secret);\n }\n\n public getConfirmation(): Observable<any> {\n const dialogRef = this.dialog.open(ActionConfirmationComponent, {\n data: {acceptActionLabel: 'accept',rejectActionLabel:'return', warningMsg: 'confirmation_message'},\n width: '600px',\n height: 'auto'\n });\n return dialogRef.afterClosed();\n }\n\n}\n\ndeclare global {\n interface Navigator {\n msSaveBlob: (blobOrBase64: Blob | string, filename: string) => void\n }\n}\n","import {Injectable, signal} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class ShareDataService {\n trigger = signal<boolean>(true);\n enableTrigger = (() => (() => this.trigger.update((val) => val = !val)))\n}\n","import {Component, ElementRef, EventEmitter, Input, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {ALL_ITEM, LookupItem} from \"../../base-model\";\nimport {MatAutocomplete, MatAutocompleteTrigger, MatOption} from \"@angular/material/autocomplete\";\nimport {Observable, of} from \"rxjs\";\nimport {FieldInfo} from \"../../base-model\";\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BackendService} from \"../../services\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {GetItemsList} from \"../../base-model/get-items-list\";\nimport {MatFormField} from \"@angular/material/form-field\";\nimport {MatChip, MatChipListbox} from \"@angular/material/chips\";\nimport {AsyncPipe, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatInput} from \"@angular/material/input\";\nimport {buildItemsList} from \"../../utils/base-utils\";\nimport {FilterRequest} from \"../../base-model\";\nimport {Filter} from \"../../base-model\";\nimport {RequireMatch} from \"../../validators\";\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\n\n\n@Component({\n selector: 'app-multi-auto-complete',\n standalone: true,\n imports: [\n MatFormField,\n MatChip,\n MatIconModule,\n MatChipsModule,\n NgForOf,\n MatIcon,\n ReactiveFormsModule,\n MatAutocompleteTrigger,\n MatInput,\n MatAutocomplete,\n MatOption,\n AsyncPipe,\n NgIf,\n MatChipListbox,\n TranslateModule,\n ],\n templateUrl: './multi-auto-complete.component.html',\n styleUrl: './multi-auto-complete.component.css'\n})\nexport class MultiAutoCompleteComponent {\n// @ts-ignore\n @ViewChild('itemInput') itemInput: ElementRef<HTMLInputElement>;\n @ViewChild('autocompleteTrigger') matACTrigger: MatAutocompleteTrigger;\n\n lookupItems$: Observable<LookupItem[]> | undefined;\n private lookupItems: LookupItem[] = [];\n\n selectedItems: LookupItem[] = [];\n cascadedIdz: number[] = [];\n isRequired: boolean= false;\n private timer: any;\n\n @Input()// @ts-ignore\n field: FieldInfo;\n //\n @Input()// @ts-ignore\n form: FormGroup;\n\n @Input()// @ts-ignore\n defaultValue: any;\n\n @Input()\n pathParam: any;\n\n @Input()\n readonly : boolean=false;\n\n @Input()\n labelsSection?: string;\n\n @Output()\n selectedValue: EventEmitter<LookupItem[]> = new EventEmitter();\n\n question = 'Would you like to add ?\"';\n\n multiControl = new FormControl();\n\n constructor(private backendService: BackendService, private translateService: TranslateService) {\n }\n\n ngOnInit(): void {\n this.multiControl = new FormControl(null);\n this.updateFieldAttributes();\n\n const initialValue = this.form?.controls[this.field?.property]?.value;\n if (initialValue) {\n this.patchLookupValue(initialValue);\n }\n\n this.multiControl.valueChanges.subscribe(v => {\n if (typeof v === 'string') {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.filterLookupItems(v, null);\n }, 700);\n }\n });\n\n this.getLookupData();\n if (this.field.cascadedBy) {\n this.form?.get(this.field.cascadedBy)?.valueChanges.subscribe(v => {\n this.removeChildItemsIfCascadedByRemoved(v);\n });\n }\n }\n\n private updateFieldAttributes() {\n if (this.field.readonly) {\n this.multiControl.disable();\n } else {\n this.multiControl.enable();\n }\n this.syncFormControlState();\n }\n\n private syncFormControlState(): void {\n const control = this.form?.get(this.field?.property);\n if (!control) {\n return;\n }\n\n if (this.field.readonly) {\n control.clearValidators();\n } else if (this.field.required) {\n control.setValidators([Validators.required]);\n } else {\n control.clearValidators();\n }\n\n control.updateValueAndValidity({ emitEvent: false });\n this.updateInputValidators();\n }\n\n private updateInputValidators(): void {\n if (this.field.readonly) {\n this.multiControl.clearValidators();\n this.isRequired = false;\n this.multiControl.updateValueAndValidity({ emitEvent: false });\n return;\n }\n\n const validators = [];\n if (!this.field.acceptNewItem) {\n validators.push(RequireMatch);\n }\n\n const hasSelectedItems = (this.selectedItems?.length ?? 0) > 0;\n if (this.field.required && !hasSelectedItems) {\n validators.push(Validators.required);\n }\n\n this.multiControl.setValidators(validators);\n this.isRequired = this.field.required && !hasSelectedItems;\n this.multiControl.updateValueAndValidity({ emitEvent: false });\n }\n\n private removeChildItemsIfCascadedByRemoved(v) {\n this.cascadedIdz = [];\n v.forEach(a => {\n this.cascadedIdz.push(a.id);\n });\n let toDeleteIdz = [];\n this.selectedItems?.forEach(x => {\n const del = this.cascadedIdz.findIndex(y => y === x[this.field.cascadedBy]?.id);\n if (del < 0) {\n toDeleteIdz.push(x['id']);\n }\n });\n\n if (toDeleteIdz) {\n this.selectedItems = this.selectedItems.filter(s => !toDeleteIdz.includes(s.id));\n this.form.get(this.field.property).patchValue(this.selectedItems, {emitEvent: true});\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n ngOnChanges({defaultValue, field}: SimpleChanges): void {\n this.patchLookupValue(defaultValue?.currentValue);\n if (field?.currentValue) {\n this.field = field.currentValue;\n this.updateFieldAttributes();\n }\n }\n\n private getLookupData() {\n const listItems: GetItemsList = buildItemsList('', this.field.lookupApiPath);\n\n const filterRequest: FilterRequest = new FilterRequest();\n filterRequest.filters = [];\n this.cascadedIdz = [];\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedBy)?.value?.forEach(a => {\n this.cascadedIdz.push(a.id);\n })\n }\n if (this.field.cascadedBy && this.cascadedIdz?.length > 0) {\n filterRequest.filters.push(new Filter({\n key: 'id', fieldName: this.field.cascadedBy, label: '',\n filterType: 'FILED_FILTER', operator: 'IN',\n valueObject: this.cascadedIdz\n }));\n }\n\n filterRequest.columns = ['id','code','englishName','arabicName'];\n if (!this.field.readonly) {\n this.backendService.getLookupItemsByMultiFilter(listItems, filterRequest).subscribe((resp => {\n if (resp.valid) {\n this.lookupItems = this.field.includeAllOption ? [ALL_ITEM].concat(resp.body) : resp.body;\n if (!this.form.get('id')?.value) {\n this.patchLookupValue(this.lookupItems?.find(l => l.defaultValue));\n }\n const selected = this.selectedItems?.length\n ? this.selectedItems\n : this.form?.get(this.field.property)?.value;\n this.patchLookupValue(selected);\n\n }\n\n }));\n }\n else{\n this.patchLookupValue(this.selectedItems.length ? this.selectedItems : this.form?.get(this.field.property)?.value);\n }\n }\n\n\n selected(value: any): void {\n if (value.id !== -1 && this.selectedItems.findIndex(i => i.id == value.id) === -1) {\n this.selectedItems?.push(value);\n this.itemInput.nativeElement.value = '';\n this.form.get(this.field.property)?.setValue(this.selectedItems);\n this.selectedValue.emit(this.selectedItems);\n this.multiControl.setValue(null, { emitEvent: false });\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n displayFn(selected: any): string {\n return selected ? selected.englishName : undefined;\n\n }\n isSelected(item: any): boolean {\n return this.selectedItems?.some((selected: any) => selected?.code == item?.code);\n }\n\n private availableLookupItems(items: LookupItem[]): LookupItem[] {\n return (items ?? []).filter(item => !this.isSelected(item));\n }\n\n private publishAvailableLookupItems(): void {\n this.lookupItems$ = of(this.availableLookupItems(this.lookupItems));\n }\n\n _allowSelection(option: LookupItem): { [className: string]: boolean } {\n return {\n 'prevent-selection': option.id === -1,\n }\n }\n\n itemNameByLag(item: any): string {\n // return item.arabicName;\n return this.translateService.getDefaultLang() === 'en' ? item.englishName : item.arabicName\n }\n\n private readonly _columns = ['id','code','englishName','arabicName'];\n\n filterLookupItems(name: any, trigger: MatAutocompleteTrigger) {\n if (trigger) {\n trigger.openPanel();\n }\n if (name === undefined) {\n name = '';\n }\n\n const listItems: GetItemsList = buildItemsList(name, this.field.lookupApiPath);\n\n const filterRequest: FilterRequest = new FilterRequest();\n filterRequest.filters = this.field.lookupFilterList || [];\n filterRequest.searchStr = name;\n this.cascadedIdz = [];\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedBy)?.value?.forEach(a => {\n this.cascadedIdz.push(a.id);\n })\n }\n if (this.field.cascadedBy && this.cascadedIdz?.length > 0) {\n filterRequest.filters.push(new Filter({\n key: 'id',joinObjectName: this.field.cascadedBy, fieldName: this.field.cascadedBy, label: '',\n filterType: 'FILED_FILTER', operator: 'IN',\n valueObject: this.cascadedIdz\n }));\n }\n\n filterRequest.columns = [...this._columns, ...(this.field.extraLookupsColumns ?? [])];\n\n this.backendService.getLookupItemsByMultiFilter(listItems, filterRequest).subscribe(resp => {\n let items: LookupItem[] = [];\n if (resp.valid) {\n this.lookupItems = resp.body ?? [];\n items = this.availableLookupItems(this.lookupItems);\n if (!items?.length) {\n this.field.acceptNewItem ?\n items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})):\n items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '})) ;\n\n }\n } else {\n this.field.acceptNewItem ?\n items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})):\n items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '})) ;\n }\n this.lookupItems$ = of(items);\n });\n return;\n }\n\n private patchLookupValue(defaultValue: any) {\n if (defaultValue) {\n this.selectedItems = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n this.multiControl.setValue(null, { emitEvent: false });\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n remove(item: LookupItem) {\n const index = this.selectedItems.indexOf(item);\n if (index >= 0) {\n this.selectedItems.splice(index, 1);\n this.form.get(this.field.property).patchValue(this.selectedItems, {emitEvent: true});\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n getPlaceholderKey(): string {\n if (!this.field?.placeholder) {\n return '';\n }\n const configuredKey = this.field.placeholder;\n if (!this.labelsSection) {\n return configuredKey;\n }\n return configuredKey.startsWith(this.labelsSection)\n ? configuredKey\n : `${this.labelsSection}.${configuredKey}`;\n }\n\n get showInputPlaceholder(): boolean {\n return !!this.field?.placeholder && (this.selectedItems?.length ?? 0) === 0;\n }\n\n onInputClick(autocompleteTrigger: MatAutocompleteTrigger): void {\n if (this.field?.readonly || this.readonly) {\n return;\n }\n this.openLookupPanel(autocompleteTrigger);\n }\n\n onTriggerClick(event: MouseEvent, autocompleteTrigger: MatAutocompleteTrigger): void {\n event.stopPropagation();\n if (this.field?.readonly || this.readonly) {\n return;\n }\n this.openLookupPanel(autocompleteTrigger);\n }\n\n onKeydown(event: KeyboardEvent, autocompleteTrigger: MatAutocompleteTrigger) {\n if (event.key === 'Enter') {\n this.filterLookupItems('', autocompleteTrigger);\n autocompleteTrigger.openPanel();\n event.preventDefault();\n }\n }\n\n openLookupPanel(autocompleteTrigger: MatAutocompleteTrigger): void {\n this.filterLookupItems('', autocompleteTrigger);\n autocompleteTrigger.openPanel();\n }\n getId() {\n return this.field.property;\n }\n}\n","<ng-container *ngIf=\"field\" class=\"main-multi-auto\">\n <div class=\"mat-field-wrapper\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{ field.property }}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\">\n {{ 'optional' | translate }}\n </span>\n </div>\n\n <div class=\"multi-select-control\">\n <mat-form-field class=\"full-width multi-autocomplete-field\" appearance=\"outline\">\n <mat-chip-listbox #chipList class=\"chip-listbox\" [selectable]=\"true\">\n <mat-chip\n *ngFor=\"let item of selectedItems\"\n class=\"multi-select-chip\"\n [removable]=\"true\"\n (removed)=\"remove(item)\">\n {{ itemNameByLag(item) }}\n <mat-icon *ngIf=\"!field.readonly\" matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n class=\"chip-input app-input\"\n type=\"text\"\n [id]=\"getId()\"\n #itemInput\n [formControl]=\"multiControl\"\n [matAutocomplete]=\"auto\"\n matInput\n [placeholder]=\"showInputPlaceholder ? (getPlaceholderKey() | translate) : ''\"\n [readonly]=\"readonly\"\n [required]=\"isRequired\"\n (click)=\"onInputClick(autocompleteTrigger); $event.stopPropagation()\"\n (keydown)=\"onKeydown($event, autocompleteTrigger)\"\n [disabled]=\"field.readonly\"\n #autocompleteTrigger=\"matAutocompleteTrigger\"\n [attr.aria-labelledby]=\"'label-' + field.property\">\n </mat-chip-listbox>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayFn\"\n (optionSelected)=\"selected($event.option.value)\">\n <ng-container *ngIf=\"!field.readonly\">\n <mat-option\n *ngFor=\"let item of lookupItems$ | async\"\n [value]=\"item\">\n {{ itemNameByLag(item) }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </mat-form-field>\n\n <button\n type=\"button\"\n class=\"multi-select-arrow-trigger\"\n [disabled]=\"field.readonly || readonly\"\n [attr.aria-label]=\"'BASE_TABLE.openLookupOptions' | translate\"\n [attr.id]=\"'multi-select-trigger-' + field.property\"\n (click)=\"onTriggerClick($event, autocompleteTrigger)\">\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n </svg>\n </button>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {FieldInfo, Filter, LookupItem} from \"../../base-model\";\nimport {MatAutocomplete, MatAutocompleteTrigger, MatOption} from \"@angular/material/autocomplete\";\nimport {Observable, of, Subject, takeUntil} from \"rxjs\";\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BackendService} from \"../../services\";\nimport {GetItemsList} from \"../../base-model/get-items-list\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {AsyncPipe, NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {buildItemsList} from \"../../utils/base-utils\";\nimport {RequireMatch} from \"../../validators\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'app-auto-complete',\n standalone: true,\n imports: [\n TranslateModule,\n MatFormFieldModule,\n MatAutocompleteTrigger,\n MatInputModule,\n ReactiveFormsModule,\n NgIf,\n MatAutocomplete,\n AsyncPipe,\n MatOption,\n NgClass,\n MatIcon,\n NgForOf,\n MatIconButton,\n MatButton,\n\n ],\n templateUrl: './auto-complete.component.html',\n styleUrl: './auto-complete.component.css'\n})\nexport class AutoCompleteComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('autocompleteTrigger') matACTrigger: MatAutocompleteTrigger;\n\n lookupItems$: Observable<LookupItem[]> | undefined;\n lookupItems: LookupItem[] = [];\n items: LookupItem[] = [];\n\n // @ts-ignore\n // form: FormGroup;\n\n @Input()// @ts-ignore\n field: FieldInfo;\n\n @Input()// @ts-ignore\n form: FormGroup;\n @Input()// @ts-ignore\n defaultValue: any;\n\n @Input()\n readonly:boolean = false;\n\n @Input()\n supportingAttributes: any;\n\n @Output()\n selectedValue: EventEmitter<LookupItem> = new EventEmitter();\n\n @ViewChild(MatAutocompleteTrigger) autocompleteTrigger!: MatAutocompleteTrigger;\n\n question = 'Would you like to add ?\"';\n cascadedId: number = 0;\n isRequired:boolean = false;\n\n private timer: any;\n private lastOpenLookupRefreshAt = 0;\n private readonly openLookupRefreshGuardMs = 150;\n private readonly destroy$ = new Subject<void>();\n myControl = new FormControl();\n\n constructor(private backendService: BackendService,\n protected translateService: TranslateService,\n @Inject('secretsManager') private secretsManager: any) {\n }\n\n ngOnInit(): void {\n this.buildControl();\n this.extractWorkflowGuidedCascading();\n this.getLookupData();\n // this.myControl.valueChanges.subscribe(v => {\n // if (typeof v === 'string') this.filterLookupItems(v, null);\n // });\n\n this.form.get(this.field.property).valueChanges.subscribe(x => {\n if (x?.id === -100) {\n this.myControl.reset()\n }\n })\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedByProperty)?.valueChanges.subscribe(v => {\n this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;\n this.lookupItems = [];\n this.myControl.setValue(undefined);\n this.myControl.patchValue(undefined, {emitEvent: true});\n this.form.get(this.field.property)?.setValue(undefined);\n this.form.get(this.field.property)?.patchValue(undefined, {emitEvent: true});\n this.getLookupData();\n });\n }\n\n this.translateService.onLangChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.refreshDisplayedValue());\n }\n\n private extractWorkflowGuidedCascading() {\n if (this.supportingAttributes && this.field.workflowCascadingField && this.supportingAttributes[this.field.workflowCascadingField]) {\n this.cascadedId = this.supportingAttributes[this.field.workflowCascadingField];\n }\n }\n\n private buildControl() {\n this.myControl = new FormControl(this.form?.controls[this.field?.property]);\n this.backendService.fieldAction$.subscribe( e => {\n if (e.property === this.field?.property) {\n this.field.readonly = e.fieldInfo.readonly;\n this.updateAttributes();\n }\n });\n this.updateAttributes();\n\n this.myControl.valueChanges.subscribe( v => {\n if (typeof v === 'string') {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.filterLookupItems(v, null); }, 700);\n }\n }\n );\n }\n\n private updateAttributes() {\n this.myControl.enable();\n if (this.field.readonly) {\n this.myControl.disable();\n this.isRequired = false;\n } else if (this.field.required) {\n this.form?.controls[this.field?.property].setValidators([Validators.required]);\n this.myControl.setValidators([Validators.required]);\n this.isRequired = true;\n }\n\n if (!this.field.acceptNewItem) {\n // @ts-ignore\n this.myControl.setValidators(RequireMatch);\n }\n\n this.myControl.setValue(this.form?.get(this.field?.property)?.value);\n }\n\n ngOnChanges({defaultValue}: SimpleChanges): void {\n this.patchLookupValue(defaultValue?.currentValue);\n }\n\n private getLookupData() {\n if (this.field.cascadedBy && !this.cascadedId) {\n } else {\n const listItems = buildItemsList('', this.field.lookupApiPath, this.field.cascadedBy);\n listItems.columns = ['id','code','englishName','arabicName'];\n\n this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe((resp => {\n if (resp.valid) {\n this.lookupItems = resp.body;\n this.lookupItems = [];\n resp.body.forEach((r: LookupItem) => this.lookupItems.push(r));\n if (!this.form?.get('id')?.value) {\n this.patchLookupValue(this.lookupItems?.find(l => l.defaultValue));\n }\n this.patchLookupValue(this.myControl.value);\n }\n\n }));\n }\n }\n\n itemSelected(value: any) {\n if (value && value.id !== -1) {\n if (value.englishName.indexOf(this.question) === 0) {\n value.englishName = value.englishName.substring(this.question.length).split('\"?')[0];\n }\n if (value.arabicName && value.arabicName.indexOf(this.question) === 0) {\n value.arabicName = value.arabicName.substring(this.question.length).split('\"?')[0];\n }\n this.form.get(this.field.property)?.setValue(value);\n // @ts-ignore\n this.selectedValue.emit(this.myControl.value);\n }\n setTimeout(() => {\n this.autocompleteTrigger.closePanel();\n });\n\n }\n\n displayFn(selected: any): string | undefined {\n if (selected?.id < 0) {\n return null;\n }\n\n if (Array.isArray(selected))\n selected = this.defaultValue\n return this.currentLanguage() === 'en'\n ? selected?.englishName\n : selected?.arabicName;\n }\n\n\n _allowSelection(option: LookupItem): { [className: string]: boolean } {\n return {\n 'prevent-selection': option.id === -1,\n };\n }\n\n itemNameByLag(item: any): string {\n return this.currentLanguage() === 'en' ? item.englishName : item.arabicName\n\n }\n\n private currentLanguage(): string {\n return this.translateService.currentLang\n || this.translateService.defaultLang\n || this.translateService.getDefaultLang()\n || 'en';\n }\n\n private refreshDisplayedValue(): void {\n const selectedValue = this.myControl.value;\n if (!selectedValue || typeof selectedValue === 'string') {\n return;\n }\n\n this.myControl.setValue(selectedValue, {emitEvent: false});\n this.lookupItems$ = of(this.items);\n }\n\n filterLookupItems(name: any, trigger: MatAutocompleteTrigger) {\n if (this.myControl.enabled) {\n if (trigger) {\n trigger.openPanel();\n }\n if (name === undefined) {\n name = '';\n }\n\n if (name === '' && !this.myControl.value) {\n this.myControl.setValue(undefined);\n this.myControl.updateValueAndValidity();\n }\n\n const listItems: GetItemsList = buildItemsList(name, this.field.lookupApiPath, this.field.cascadedBy);\n listItems.filters = this.field.lookupFilterList;\n this.addLookupFilterByAnotherProperties(listItems);\n listItems.columns = ['id','code','englishName','arabicName'];\n this.backendService.getLookupItemsByFilter(listItems);\n if (this.field.cascadedBy) {\n this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;\n } else {\n this.extractWorkflowGuidedCascading();\n }\n listItems.columns = ['id','code','englishName','arabicName'];\n this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe(resp => {\n if (resp.valid) {\n this.items = this.buildVisibleItems(resp.body ?? []);\n if (!this.items?.length) {\n this.field.acceptNewItem ?\n this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :\n this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));\n }\n } else {\n if (this.items?.length == 0)\n this.field.acceptNewItem && this.backendService.parentForm.get(this.field.cascadedBy).value != null ?\n this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :\n this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));\n }\n this.lookupItems$ = of(this.items);\n });\n return;\n }\n }\n\n private buildVisibleItems(items: LookupItem[]): LookupItem[] {\n const selectedId = this.myControl.value?.id;\n if (selectedId === undefined || selectedId === null) {\n return items;\n }\n\n return items.filter((item: LookupItem) => item.id !== selectedId);\n }\n\n showNoneOption(): boolean {\n const selectedValue = this.myControl.value;\n return this.items.length > 1 &&\n !!this.lookupItems$ &&\n selectedValue &&\n typeof selectedValue !== 'string' &&\n selectedValue.id !== undefined &&\n selectedValue.id !== null;\n }\n\n addLookupFilterByAnotherProperties(listItems: GetItemsList) {\n const properties = this.field.lookupFilterList;\n if (!Array.isArray(properties)) return;\n\n const newFilters: Filter[] = [];\n\n for (const prop of properties) {\n const fieldValue = this.form?.value?.[prop.fieldName];\n const finalValue = typeof fieldValue === 'object' && fieldValue !== null ? fieldValue.code : fieldValue;\n if (!finalValue) continue;\n\n const fieldName =typeof fieldValue === 'object' && fieldValue !== null ? prop.fieldName + \".\" + this.field.flattenBySubAttribute : prop.fieldName;\n const filter = new Filter({\n fieldType: 'FILED_FILTER',\n filterType: undefined,\n operator: prop.operator,\n valueObject: finalValue,\n fieldName: fieldName\n });\n\n newFilters.push(filter);\n }\n\n if (newFilters.length) {\n listItems.filters = [...(listItems.filters || []), ...newFilters];\n }\n listItems.filters = listItems.filters.filter(f => f.valueObject);\n }\n\n private patchLookupValue(defaultValue: any) {\n if (defaultValue) {\n\n // this.form?.get(this.field.property)?.patchValue(defaultValue);\n this.myControl.setValue(defaultValue);\n this.myControl.patchValue(defaultValue, {emitEvent: true});\n }\n }\n get matErrorDescribedBy(): string | null {\n const control = this.form?.get(this.field?.property);\n if (!control || !this.field?.property) {\n return null;\n }\n const visible =\n (control.value || control.value === 0) && control.status === 'INVALID';\n return visible ? `error-${this.field.property}` : null;\n }\n\n getId() {\n return this.field.property;\n }\n\n openLookupPanel(autocompleteTrigger: MatAutocompleteTrigger = this.autocompleteTrigger): void {\n if (!autocompleteTrigger || this.field?.readonly || this.readonly || this.myControl.disabled) {\n return;\n }\n\n const now = Date.now();\n if (now - this.lastOpenLookupRefreshAt < this.openLookupRefreshGuardMs) {\n autocompleteTrigger.openPanel();\n return;\n }\n\n this.lastOpenLookupRefreshAt = now;\n this.filterLookupItems('', autocompleteTrigger);\n }\n\n onKeydown(event: KeyboardEvent, autocompleteTrigger: MatAutocompleteTrigger) {\n if (event.key === 'Enter') {\n this.openLookupPanel(autocompleteTrigger);\n event.preventDefault();\n }\n }\n\n closed() {\n if (!this.myControl.value){\n this.form.get(this.field.property)?.setValue(this.myControl.value);\n this.selectedValue.emit(this.myControl.value);\n } else if (typeof this.myControl.value === 'string') {\n this.myControl.setValue(null);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<ng-container *ngIf=\"field\" class=\"main-auto-complete\">\n <div class=\"mat-field-wrapper\" [formGroup]=\"form\">\n\n <div class=\"label-and-asterisk-container\">\n <span class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n\n <mat-form-field class=\"autocomplete-field\" appearance=\"outline\" (click)=\"openLookupPanel(); $event.stopPropagation()\">\n <input type=\"text\"\n [placeholder]=\"'search_placeholder' | translate\"\n [id]=\"getId()\"\n [formControl]=\"myControl\"\n (keydown)=\"onKeydown($event, autocompleteTrigger)\"\n [matAutocomplete]=\"auto\"\n (focus)=\"openLookupPanel(autocompleteTrigger)\"\n (click)=\"openLookupPanel(autocompleteTrigger); $event.stopPropagation()\"\n matInput\n [required]=\"isRequired\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"matErrorDescribedBy\"\n #autocompleteTrigger=\"matAutocompleteTrigger\"\n [readonly]=\"readonly\"\n >\n\n <button mat-button matSuffix\n color=\"primary\"\n class=\"autocomplete-button\"\n (click)=\"openLookupPanel(autocompleteTrigger); $event.stopPropagation()\"\n [attr.id]=\"'autocomplete-trigger-' + field.property\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"itemSelected($event.option.value)\"\n (closed)=\"closed()\">\n <ng-container *ngIf=\"!field.readonly\">\n <mat-option *ngIf=\"showNoneOption()\" [value]=\"null\">{{ \"none\" | translate }}</mat-option>\n <mat-option *ngFor=\"let item of lookupItems$ | async\" [value]=\"item\" [ngClass]=\"_allowSelection(item)\">\n {{ itemNameByLag(item) }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n\n </div>\n</ng-container>\n","import {Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {NgIf} from \"@angular/common\";\nimport {MatTooltip} from \"@angular/material/tooltip\";\n\n@Component({\n selector: 'app-attachment-uploader',\n standalone: true,\n imports: [\n MatIcon,\n TranslateModule,\n MatButton,\n NgIf,\n MatTooltip,\n MatIconButton,\n ],\n templateUrl: './attachment-uploader.component.html',\n styleUrl: './attachment-uploader.component.css'\n})\nexport class AttachmentUploaderComponent {\n @ViewChild('fileUpload') fileUpload!: ElementRef<HTMLInputElement>;\n @Output() fileSelected = new EventEmitter<File | null>();\n @Input() acceptedTypes?: string; // e.g., \".jpg,.png,.pdf\" or \"image/*,application/pdf\"\n @Input() ariaDescribedBy?: string | null;\n\n selectedFile: File | null = null;\n isDragOver = false;\n\n triggerAttachmentUpload(): void {\n this.fileUpload.nativeElement.click();\n }\n\n uploadFileToServer(): void {\n const file = this.fileUpload.nativeElement.files?.[0];\n if (file) {\n this.selectedFile = file;\n this.fileSelected.emit(file);\n }\n }\n\n clearFile(): void {\n this.selectedFile = null;\n this.fileUpload.nativeElement.value = '';\n this.fileSelected.emit(null);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n const file = files[0];\n this.selectedFile = file;\n this.fileSelected.emit(file);\n }\n }\n}","<div class=\"attachment-uploader\"\n [class.drag-over]=\"isDragOver\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <div class=\"upload-content\">\n <div class=\"upload-icon\">\n <mat-icon>upload_file</mat-icon>\n </div>\n\n <p class=\"main-text\">{{ 'attachmentUploader.dragAndDrop' | translate }}</p>\n\n <p class=\"info-text\">{{ 'attachmentUploader.fileInfo' | translate }}</p>\n\n <button mat-stroked-button\n type=\"button\"\n class=\"browse-button\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (click)=\"triggerAttachmentUpload()\">\n {{ 'attachmentUploader.browseFiles' | translate }}\n </button>\n </div>\n\n <div *ngIf=\"selectedFile\" class=\"selected-file\">\n <div class=\"file-info\">\n <mat-icon class=\"file-icon\">description</mat-icon>\n <span class=\"file-name\">{{ selectedFile.name }}</span>\n </div>\n <button mat-icon-button\n type=\"button\"\n class=\"clear-button\"\n (click)=\"clearFile()\"\n [attr.aria-label]=\"'attachmentUploader.removeFile' | translate\"\n matTooltip=\"{{ 'attachmentUploader.removeFile' | translate }}\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n\n <input #fileUpload\n type=\"file\"\n class=\"hidden-input\"\n [accept]=\"acceptedTypes\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (change)=\"uploadFileToServer()\" />\n</div>\n","import { Directive, ElementRef, HostListener, Input, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[numbersOnly]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DecimalOnlyDirective),\n multi: true\n }\n ]\n})\nexport class DecimalOnlyDirective implements ControlValueAccessor {\n\n @Input() maxDecimals = 15;\n @Input() numbersOnly = false;\n @Input() numbersOnlyWithPlus = false;\n\n private _value: string = '';\n private _displayValue: string = '';\n private tempZeroIndex: number | null = null;\n\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n writeValue(value: any): void {\n this._value = value == null ? '' : String(value);\n\n if (this.tempZeroIndex !== null && this._displayValue.includes('.0')) {\n this.el.nativeElement.value = this._displayValue;\n } else {\n this._displayValue = this._value;\n this.el.nativeElement.value = this._displayValue;\n }\n }\n\n registerOnChange(fn: any): void { this.onChange = fn; }\n registerOnTouched(fn: any): void { this.onTouched = fn; }\n\n setDisabledState?(isDisabled: boolean): void {\n this.el.nativeElement.disabled = isDisabled;\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.numbersOnly) return;\n const input = this.el.nativeElement;\n const cursor = input.selectionStart ?? 0;\n let value = input.value;\n\n if (event.ctrlKey || event.metaKey || event.altKey ||\n ['Backspace','Tab','ArrowLeft','ArrowRight','Delete','Home','End'].includes(event.key)) return;\n\n if (this.numbersOnlyWithPlus) {\n if (event.key === '+') {\n if (cursor !== 0 || value.includes('+')) {\n event.preventDefault();\n }\n return;\n }\n if (event.key >= '0' && event.key <= '9') {\n return;\n }\n event.preventDefault();\n return;\n }\n\n if (event.key === '-') {\n if (cursor !== 0 || value.includes('-')) event.preventDefault();\n return;\n }\n\n if (event.key === '.') {\n if (this.maxDecimals === 0 || value.includes('.')) {\n event.preventDefault();\n return;\n }\n\n event.preventDefault();\n value = value.slice(0, cursor) + '.0' + value.slice(cursor);\n input.value = value;\n this._displayValue = value;\n this.tempZeroIndex = cursor + 1;\n\n setTimeout(() => input.setSelectionRange(cursor + 2, cursor + 2));\n return;\n }\n\n // digits\n if (event.key >= '0' && event.key <= '9') {\n const dotIndex = value.indexOf('.');\n if (dotIndex !== -1 && cursor > dotIndex) {\n const decimalsCount = value.length - dotIndex - 1;\n if (decimalsCount >= this.maxDecimals) { event.preventDefault(); return; }\n }\n\n if (this.tempZeroIndex !== null && cursor === this.tempZeroIndex + 1 && event.key !== '0') {\n event.preventDefault();\n value = value.slice(0, this.tempZeroIndex) + event.key + value.slice(this.tempZeroIndex + 1);\n input.value = value;\n this._displayValue = value;\n this.tempZeroIndex = null;\n this._value = value;\n this.onChange(this._value);\n\n setTimeout(() => input.setSelectionRange(cursor, cursor));\n return;\n }\n\n this.tempZeroIndex = null;\n return;\n }\n\n event.preventDefault();\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n if (!this.numbersOnly) return;\n this._value = event.target.value;\n this._displayValue = this._value;\n this.onChange(this._value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n if (!this.numbersOnly) return;\n const pasted = event.clipboardData?.getData('text') ?? '';\n if (this.numbersOnlyWithPlus) {\n const regex = /^\\+?\\d*$/;\n if (!regex.test(pasted)) {\n event.preventDefault();\n }\n return;\n }\n const regex = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${this.maxDecimals}})?$`);\n if (!regex.test(pasted)) event.preventDefault();\n }\n\n @HostListener('blur')\n onBlur() {\n this.onTouched();\n this.tempZeroIndex = null;\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[maxDigits]',\n standalone: true\n})\nexport class MaxDigitsDirective {\n @Input() maxDigits!: number;\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n\n if (!this.maxDigits) return;\n\n let value = input.value;\n\n if (value.length > this.maxDigits) {\n input.value = value.slice(0, this.maxDigits);\n input.dispatchEvent(new Event('input'));\n }\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[phoneNumberOnly]',\n standalone: true\n})\nexport class PhoneNumberOnlyDirective {\n @Input() phoneNumberOnly = false;\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.phoneNumberOnly) return;\n\n const key = event.key;\n const input = event.target as HTMLInputElement;\n const cursor = input.selectionStart ?? 0;\n const value = input.value;\n\n // Allow control keys\n if (event.ctrlKey || event.metaKey || event.altKey ||\n ['Backspace', 'Tab', 'ArrowLeft', 'ArrowRight', 'Delete', 'Home', 'End', 'Enter'].includes(key)) {\n return;\n }\n\n // Allow '+' only at the first position\n if (key === '+') {\n if (cursor !== 0 || value.includes('+')) {\n event.preventDefault();\n }\n return;\n }\n\n // Allow only digits\n if (key >= '0' && key <= '9') {\n // Check for max length 15 (if not already handled by maxLength attribute)\n // Note: We should account for the selected text being replaced\n const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);\n if (value.length - selectedText.length >= 15) {\n event.preventDefault();\n }\n return;\n }\n\n // Block everything else\n event.preventDefault();\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n if (!this.phoneNumberOnly) return;\n\n const pastedData = event.clipboardData?.getData('text') ?? '';\n const input = event.target as HTMLInputElement;\n const value = input.value;\n const cursor = input.selectionStart ?? 0;\n const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);\n\n // Construct what the new value would be\n const newValue = value.slice(0, cursor) + pastedData + value.slice(input.selectionEnd ?? cursor);\n\n // Regex: starts with optional +, followed by only digits, max 15 characters total\n const regex = /^\\+?\\d{0,15}$/;\n\n if (!regex.test(newValue)) {\n event.preventDefault();\n }\n }\n}\n","import {\n Component, ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n computed,\n model,\n signal\n} from '@angular/core';\nimport {FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, FormControl} from \"@angular/forms\";\nimport {\n MatChip,\n MatChipGrid,\n MatChipInput,\n MatChipInputEvent,\n MatChipListbox, MatChipOption, MatChipRemove,\n MatChipRow\n} from \"@angular/material/chips\";\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {PageInfo} from \"../../base-model/page-info\";\nimport {COMMA, ENTER, SEMICOLON} from \"@angular/cdk/keycodes\";\nimport {LookupItem} from \"../../base-model/lookupItem\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n KeyValuePipe,\n NgForOf,\n NgIf, NgClass, NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgTemplateOutlet\n} from \"@angular/common\";\nimport {MatError, MatFormFieldModule, MatLabel} from \"@angular/material/form-field\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle, MatDateRangeInput} from \"@angular/material/datepicker\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {CdkTextareaAutosize} from \"@angular/cdk/text-field\";\nimport {MatRadioButton, MatRadioGroup} from \"@angular/material/radio\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\nimport {MatSlideToggle} from \"@angular/material/slide-toggle\";\nimport {MatOption, MatSelect} from \"@angular/material/select\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatDivider} from \"@angular/material/divider\";\nimport {NgxJsonViewerModule} from \"ngx-json-viewer\";\nimport {NgxMatIntlTelInputComponent} from \"ngx-mat-intl-tel-input\";\nimport {MultiAutoCompleteComponent} from \"../multi-auto-complete/multi-auto-complete.component\";\nimport {AutoCompleteComponent} from \"../auto-complete/auto-complete.component\";\nimport {AttachmentUploaderComponent} from \"../shared/attachment-uploader/attachment-uploader.component\";\nimport {MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger} from \"@angular/material/autocomplete\";\nimport {BehaviorSubject, map} from \"rxjs\";\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\nimport {buildFormFields, extractFieldName} from \"../../utils/base-utils\";\nimport moment, {Moment} from \"moment/moment\";\nimport {MatCell, MatCellDef, MatHeaderCell, MatHeaderCellDef} from \"@angular/material/table\";\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from \"@angular/material/core\";\nimport {MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter} from \"@angular/material-moment-adapter\";\nimport {DecimalOnlyDirective} from \"./NumbersOnlyDirective\";\nimport {MaxDigitsDirective} from \"./MaxDigitsDirective\";\nimport {PhoneNumberOnlyDirective} from \"../../directives/phone-number-only.directive\";\nexport const DD_MM_YYYY_Format = {\n parse: { dateInput: 'DD/MM/YYYY' },\n display: {\n dateInput: 'DD/MM/YYYY',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'DD/MM/YYYY',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'app-base-form-canvas',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgSwitch,\n FormsModule,\n NgForOf,\n NgTemplateOutlet,\n KeyValuePipe,\n NgIf,\n NgClass,\n MatLabel,\n MatFormFieldModule,\n TranslateModule,\n MatInputModule,\n MatDatepickerInput,\n MatDatepicker,\n MatDatepickerToggle,\n MatError,\n NgSwitchCase,\n MatIcon,\n MatIconButton,\n MatAutocomplete,\n MatAutocompleteTrigger,\n MatChip,\n CdkTextareaAutosize,\n MatRadioGroup,\n MatCheckbox,\n MatRadioButton,\n MatSlideToggle,\n MatSelect,\n MatOption,\n PhoneNumberOnlyDirective,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatDivider,\n DatePipe,\n NgxJsonViewerModule,\n CurrencyPipe,\n NgxMatIntlTelInputComponent,\n MatChipGrid,\n MatChipInput,\n MatChipRow,\n MatChipListbox,\n MatChipOption,\n MultiAutoCompleteComponent,\n AutoCompleteComponent,\n MatDateRangeInput,\n AsyncPipe,\n MatChipRemove,\n MatCell,\n MatCellDef,\n MatHeaderCell,\n MatHeaderCellDef,\n NgStyle,\n AttachmentUploaderComponent,\n DecimalOnlyDirective,\n MaxDigitsDirective\n ],\n templateUrl: './base-form-canvas.component.html',\n styleUrl: './base-form-canvas.component.css',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n },\n { provide: MAT_DATE_FORMATS, useValue: DD_MM_YYYY_Format },\n { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }\n ]\n\n})\nexport class BaseFormCanvasComponent implements OnInit, OnChanges, OnDestroy {\n public hide: boolean = true;\n dateViewMode: 'month' | 'year' | 'multi-year' = 'month';\n @Input()\n pageInfo!: PageInfo;\n\n\n @Input()\n currency: string;\n\n @Input()// @ts-ignore\n fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n errors: FieldMessage[] = [];\n\n @Input()\n workflowEditableFields: string[]=[];\n @Input()\n isWorkflowEditableManaged: boolean = false;\n\n @Input()\n supportingAttributes: any;\n\n @Input()\n editable: boolean = false;\n\n @Input()\n attachmentsAlwaysEditable?: boolean;\n\n // When true, emit formUpdated on every value change. Default is false to avoid\n // noisy emissions for all consumers. Item-line-editor will enable this explicitly.\n @Input()\n emitOnValueChanges: boolean = false;\n\n @Input()\n filterResetNonce = 0;\n\n @Input()\n item: any = {};\n\n _defaults: any = {};\n\n @Output() attachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() actionEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n hyperTextEvent: EventEmitter<boolean> = new EventEmitter();\n\n\n formParam!: FormGroup;\n screenFields = new Map<number, FieldInfo[]>();\n removable = true;\n selectable = true;\n addOnBlur = true;\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA, SEMICOLON];\n\n readonly minDate = moment([1800, 0, 1]);\n\n public isPending: boolean = false;\n public isNew: boolean = false;\n itemId: number | undefined;\n\n equationOperators : string[] = ['+','-','(' ];\n @Input() equationSuggestedFields: { name: string, id: string }[] = [];\n allEquationFields: BehaviorSubject<string[]>;\n readonly equationValues = signal<string[]>([]);\n currentEquationValue = model<string>('');\n\n readonly equationFilteredFields = computed(() => {\n const currentEquationValue = this.currentEquationValue().toLowerCase();\n return this.allEquationFields.pipe(\n map(fields =>\n currentEquationValue ? fields?.filter(field => field.toLowerCase().includes(currentEquationValue)) : fields?.slice()\n )\n );\n });\n @ViewChild('EquationValueInput') fieldsInput: ElementRef<HTMLInputElement>;\n\n set defaults(value: any | undefined) {\n // this.backendService._defaults = value;\n this._defaults = value;\n this.buildForm();\n // this.myCallback = value;\n }\n\n get defaults(): any | undefined {\n // this.myCallback;\n return this._defaults;\n // return this.backendService._defaults;\n }\n\n constructor(protected translateService: TranslateService,\n protected activatedRoute: ActivatedRoute,\n protected backendService: BackendService,\n private fb: FormBuilder,\n private announcer: LiveAnnouncer) {\n }\n\n ngOnInit(): void {\n if(this.item && this.item.fieldValue){\n this.equationValues.update(value => this.item.fieldValue)\n }\n this.defaults = this.item;\n this.extractLables();\n this.buildForm();\n this.activatedRoute.data.subscribe(data => {\n this.isPending = data['mode'] === 'pending';\n this.isNew = data['mode'] === 'new';\n });\n // this.authService.summaryPanelState$.next(Constants.SUMMARY_PANEL_CLOSED);\n // this.defaults = {};\n // this.invoiceQInit();\n this.allEquationFields = new BehaviorSubject<string[]>([]);\n\n this.updateEquationOptions();\n }\n\n formatTimeToDate(v: any){\n const fromTime: Date = new Date();\n if (v) {\n let split = v.split(\":\");\n fromTime.setHours(split[0], split[1]);\n return new Date(fromTime.getTime());\n }\n return \"\";\n }\n\n patchLookupValue($event: LookupItem, fieldName: string) {\n if ($event?.id !== -1 && this.defaults) {\n // @ts-ignore\n this.defaults[fieldName] = this.formParam.get(fieldName).value;\n }\n }\n getBankName(fieldName: string) {\n //TODO Batool do we need this here ?\n if (this.formParam.get(fieldName).value?.length > 10 && !isNaN(this.formParam.get(fieldName).value) ) {\n return ' / ' + this.translateService.instant('BANK.' + this.formParam.get(fieldName).value?.substr(4, 4));\n } else {\n return '';\n }\n }\n\n patchMultiSelectValue($event: LookupItem[], fieldName: string) {\n if ($event?.length >= 0 && this.defaults) {\n this.defaults[fieldName] = this.formParam.get(fieldName).value;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { item, errors, fields, filterResetNonce } = changes;\n\n errors?.currentValue?.forEach((msg: FieldMessage) => {\n this.formParam.get(msg.fieldName)?.setErrors({serverError: msg.message});\n });\n\n if (item?.currentValue && !item.isFirstChange()){\n this.defaults = item.currentValue;\n }\n\n if (fields?.currentValue && !fields.isFirstChange()){\n this.buildForm();\n }\n\n if (\n filterResetNonce &&\n !filterResetNonce.isFirstChange() &&\n filterResetNonce.currentValue !== filterResetNonce.previousValue\n ) {\n this.resetFilterFormValues();\n }\n }\n\n showField(item: any, field: any) {\n return (item.id || (!item.id && !field.updateOnly)) && field.visible\n }\n\n get isAttachmentFieldEditable(): boolean {\n return this.attachmentsAlwaysEditable ?? this.editable;\n }\n\n workflowEditableField(field: { property: string; }) {\n const x = this.isWorkflowEditableManaged ? this.workflowEditableFields?.findIndex(d => d === field.property) > -1 : true;\n return x;\n }\n\n showMultiSelectValuesAsReadonly(field: FieldInfo) {\n console.log(\".03151251564\")\n const viewProp = this.translateService.getDefaultLang() === 'en' ? 'englishName' : 'arabicName';\n return this.extractFieldName(this.defaults,field.property)?.map((a: { [x: string]: any; }) => a[viewProp]);\n }\n\n splitReadonly(values: any) {\n return !values || values === '' ? []: values.split(';');\n }\n\n\n referenceAttributeTrue(fieldName: string, attribute: any) {\n // return this.authService.referenceAttributeTrue(fieldName, this.pageInfo.processId, attribute);\n }\n\n translateLable(itemElement: any) {\n return this.translateService.instant(itemElement)\n }\n\n buildForm() {\n if (!this.fields || this.fields.length === 0 || !this.defaults) return;\n\n if (!this.formParam) {\n this.formParam = this.fb.group(buildFormFields(this.fields, this.defaults));\n this.patchDisabledFormValidity();\n // Emit initial form reference\n this.formUpdated.next(this.formParam);\n // Emit on every value change so parent components can react live\n if (this.emitOnValueChanges) {\n this.formParam.valueChanges.subscribe(() => {\n this.formUpdated.emit(this.formParam);\n });\n }\n return;\n }\n\n const patchValues: any = {};\n for (const field of this.fields) {\n if (field.readonly) {\n this.formParam.get(field.property)?.disable({ emitEvent: false });\n } else {\n this.formParam.get(field.property)?.enable({ emitEvent: false });\n }\n if (field.type !== 'spacer') {\n let v = extractFieldName(this.defaults, field.property);\n if (field.type === 'multi-state-checkbox' && (v === undefined || v === null)) {\n v = [];\n }\n patchValues[field.property] = v;\n }\n }\n\n this.formParam.patchValue(patchValues, { emitEvent: false });\n this.patchDisabledFormValidity();\n }\n\n\n private patchDisabledFormValidity(): void {\n const form = this.formParam;\n if (!form) {\n return;\n }\n Object.defineProperty(form, 'valid', {\n get: () => form.status === 'DISABLED' || form.status === 'VALID',\n configurable: true\n });\n }\n\n private resetFilterFormValues(): void {\n if (!this.formParam || !this.fields?.length) {\n return;\n }\n const empty: Record<string, unknown> = {};\n for (const field of this.fields) {\n if (field.type !== 'spacer') {\n empty[field.property] = field.type === 'multi-state-checkbox' ? [] : null;\n }\n }\n this.formParam.patchValue(empty, { emitEvent: true });\n }\n\n labelKey(column: any) {\n const configuredKey = column.label ? column.label : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n labelKeyPlaceHolder(column: any) {\n const configuredKey = column.placeholder ? column.placeholder : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n blockNegativeNumberKeydown(event: KeyboardEvent, field: FieldInfo): void {\n if (field.allowNegative) {\n return;\n }\n if (event.key === '-' || event.code === 'Minus' || event.code === 'NumpadSubtract') {\n event.preventDefault();\n }\n }\n\n openTimePicker(input: HTMLInputElement): void {\n if (!input || input.disabled || input.readOnly) {\n return;\n }\n\n if (typeof input.showPicker === 'function') {\n try {\n input.showPicker();\n return;\n } catch {\n input.focus();\n }\n }\n\n input.focus();\n input.click();\n }\n\n getErrors(prop: string): string {\n const control = this.formParam?.get([prop]);\n if (!control || control.disabled) return '';\n\n if (control.invalid && control.errors) {\n const err = control.errors;\n if (err['matDatepickerMin']) {\n return 'matDatepickerMin';\n }\n if (err['matDatepickerMax']) {\n return 'matDatepickerMax';\n }\n }\n\n const field = this.fields.find(f => f.property === prop);\n\n if (!field?.validationMessages) {\n if (field?.type === 'phone-number' && control.touched && control.dirty && !control.value) {\n const prefix = this.pageInfo.labelsSection + \".\";\n return prefix + 'INVALID_PHONE_NUMBER';\n }\n if (control.value && control.status !== 'VALID' && this.getFirstErrorKey) {\n return this.getFirstErrorKey(prop);\n }\n return '';\n }\n\n if (field?.type === 'phone-number' && control.touched && control.dirty && !control.value) {\n const prefix = this.pageInfo.labelsSection + \".\";\n return prefix + (field.validationMessages?.validatePhoneNumber || 'INVALID_PHONE_NUMBER');\n }\n\n if (control.invalid) {\n const errors = control.errors || {};\n const prefix = this.pageInfo.labelsSection + \".\";\n\n if (errors['required']) return prefix + 'REQUIRED';\n if (errors['min']) return prefix + (field.validationMessages?.min || 'NUMBER_MIN');\n if (errors['max']) return prefix + (field.validationMessages?.max || 'NUMBER_MAX');\n if (errors['maxlength']) return prefix + (field.validationMessages?.maxlength || 'MAX_LENGTH');\n if (errors['decimalMin']) return prefix + (field.validationMessages?.decimalMin || 'DECIMAL_MIN');\n if (errors['decimalMax']) return prefix + (field.validationMessages?.decimalMax || 'DECIMAL_MAX');\n if (errors['pattern']) return prefix + (field.validationMessages?.pattern || 'INVALID_FORMAT');\n if (errors['validatePhoneNumber']) return prefix + (field.validationMessages?.validatePhoneNumber || 'INVALID_PHONE_NUMBER');\n if (errors['invalidMathExpression']) return prefix + 'INVALID_MATH';\n if (errors['dateRangeInvalid']) return prefix + 'dateRangeInvalid';\n if (errors['serverError']) return prefix + errors['serverError'];\n\n return prefix + 'INVALID_VALUE';\n }\n\n return '';\n }\n\n\n getFirstErrorKey(prop: string): string {\n const errors = this.formParam?.get([prop])?.errors;\n\n if (!errors || Object.keys(errors).length === 0) {\n return errors?.['serverError'] || 'INVALID_FORMAT';\n }\n\n return Object.keys(errors)[0];\n }\n\n public getCountryCodeList() {\n return ['af', 'ax', 'al', 'dz', 'as', 'ad', 'ao', 'ai', 'aq', 'ag', 'ar', 'am', 'aw', 'au', 'at', 'az',\n 'bs', 'bh', 'bd', 'bb', 'by', 'be', 'bz', 'bj', 'bm', 'bt', 'bo', 'ba', 'bw', 'bv', 'br', 'io', 'bn',\n 'bg', 'bf', 'bi', 'kh', 'cm', 'ca', 'cv', 'ky', 'cf', 'td', 'cl', 'cn', 'cx', 'cc', 'co', 'km', 'cg',\n 'cd', 'ck', 'cr', 'ci', 'hr', 'cu', 'cy', 'cz', 'dk', 'dj', 'dm', 'do', 'ec', 'eg', 'sv', 'gq', 'er',\n 'ee', 'et', 'fk', 'fo', 'fj', 'fi', 'fr', 'gf', 'pf', 'tf', 'ga', 'gm', 'ge', 'de', 'gh', 'gi', 'gr',\n 'gl', 'gd', 'gp', 'gu', 'gt', 'gg', 'gn', 'gw', 'gy', 'ht', 'hm', 'va', 'hn', 'hk', 'hu', 'is', 'in',\n 'id', 'ir', 'iq', 'ie', 'im', 'it', 'jm', 'jp', 'je', 'jo', 'kz', 'ke', 'ki', 'kr', 'kw', 'kg', 'la',\n 'lv', 'lb', 'ls', 'lr', 'ly', 'li', 'lt', 'lu', 'mo', 'mk', 'mg', 'mw', 'my', 'mv', 'ml', 'mt', 'mh',\n 'mq', 'mr', 'mu', 'yt', 'mx', 'fm', 'md', 'mc', 'mn', 'me', 'ms', 'ma', 'mz', 'mm', 'na', 'nr', 'np',\n 'nl', 'an', 'nc', 'nz', 'ni', 'ne', 'ng', 'nu', 'nf', 'mp', 'no', 'om', 'pk', 'pw', 'ps', 'pa', 'pg',\n 'py', 'pe', 'ph', 'pn', 'pl', 'pt', 'pr', 'qa', 're', 'ro', 'ru', 'rw', 'bl', 'sh', 'kn', 'lc', 'mf',\n 'pm', 'vc', 'ws', 'sm', 'st', 'sa', 'sn', 'rs', 'sc', 'sl', 'sg', 'sk', 'si', 'sb', 'so', 'za', 'gs',\n 'es', 'lk', 'sd', 'sr', 'sj', 'sz', 'se', 'ch', 'sy', 'tw', 'tj', 'tz', 'th', 'tl', 'tg', 'tk', 'to',\n 'tt', 'tn', 'tr', 'tm', 'tc', 'tv', 'ug', 'ua', 'ae', 'gb', 'us', 'um', 'uy', 'uz', 'vu', 've', 'vn',\n 'vg', 'vi', 'wf', 'eh', 'ye', 'zm', 'zw'];\n }\n\n\n friendlyName(fullPath: string , subPath: string , item: string){\n return fullPath.substring(0, fullPath.indexOf(subPath)) + item ;\n }\n\n showValue(defaults, field){\n return this.friendlyName(field.label , field.property , defaults[field.property]);\n }\n\n showError(prop: string) {\n const CONTROL = this.formParam?.get([prop]);\n const field = this.fields.find(f => f.property === prop);\n if (field?.type === 'phone-number') {\n return CONTROL?.touched && CONTROL?.dirty && !CONTROL?.value;\n }\n return (CONTROL?.value || CONTROL?.value === 0) && CONTROL?.status === 'INVALID';\n }\n\n getFieldCurrentLength(prop: string): number {\n const value = this.formParam?.get([prop])?.value;\n return value === undefined || value === null ? 0 : String(value).length;\n }\n\n clearFieldValue(prop: string): void {\n this.formParam?.get([prop])?.setValue('');\n }\n\n ngOnDestroy(): void {\n this.defaults = null;\n }\n\n private extractLables() {\n this.fields.forEach(f => {\n if (f.visible) {\n f.label = this.labelKey(f);\n\n if (!this.screenFields.has(f.row)) {\n this.screenFields.set(f.row, []);\n }\n this.screenFields.get(f.row)!.push(f);\n\n if (f.cascadedBy) {\n this.formParam?.get([f.cascadedBy])?.valueChanges.subscribe(() => {\n this.formParam?.get([f.property])?.patchValue(null);\n })\n }\n }\n });\n\n for (let i = 1; i < this.screenFields.size; i++) {\n this.calcFlexSize(i);\n }\n // console.log(this.screenFields)\n }\n\n private calcFlexSize(i: number){\n // Preserve explicit fieldSize values only. For fields without fieldSize, allow\n // the layout to auto-size via flex (handled in the template/CSS).\n // Intentionally do nothing here so that unspecified fields remain flexible.\n return;\n }\n\n getCurrencyPattern(field: FieldInfo) {\n // const decimalPlaces = this.authService?.myCurrencies?.find(c => c.key === this.formParam.get(field.currency)?.value)?.currencyNumOfDecimalPattern || 3;\n const decimalPlaces = 3;\n return '^\\\\d*(?:[.,]\\\\d{1,' + decimalPlaces + '})?$';\n }\n\n splittedChips(form: FormGroup, fieldName: string):string[] {\n return form.get(fieldName).value === '' ? []: form.get(fieldName).value.trim().split(';');\n }\n\n\n fixArabicNumbers(str: any) {\n // if(typeof str === 'string') {\n // str = str.replace(/([٠١٢٣٤٥٦٧٨٩])|([۰۱۲۳۴۵۶۷۸۹])/g, (m, $1, $2) => m.charCodeAt(0) - ($1 ? 1632 : 1776));\n // }\n // console.log(str);\n }\n\n listShowValue(defaults: any, field: FieldInfo) {\n return defaults[field.property] ? this.showValue(defaults, field) : '';\n }\n\n removeChipsItem(form: FormGroup, fieldName: string, idx: number) {\n const emails = this.splittedChips(form, fieldName);\n if (emails.length >= 1){\n emails.splice(idx,1);\n }\n let cleanedEmails = emails.join(\";\");\n form.get(fieldName).setValue(cleanedEmails);\n }\n\n extractFieldName(element: any, property: string) {\n if (property?.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n }\n\n isReadonlyTextValueEmpty(defaults: any, field: FieldInfo): boolean {\n const value = this.extractFieldName(defaults, field.property);\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim() === '';\n }\n return false;\n }\n\n getReadonlyDateFormat(field: FieldInfo): string {\n return field.readonlyDateDisplay === 'datetime' ? 'dd/MM/yyyy HH:mm' : 'dd/MM/yyyy';\n }\n\n onMultiStateMenuInnerKeydown(event: Event, field: FieldInfo): void {\n if (!(event instanceof KeyboardEvent)) {\n return;\n }\n if (!this.isMultiStateMenuActivateKey(event)) {\n return;\n }\n const row = this.findMultiStateRowFromKeyboardEvent(event);\n if (!row) {\n return;\n }\n const code = row.getAttribute('data-multi-state-code');\n if (!code) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const next = !this.isMultiStateSelected(field.property, code);\n this.toggleMultiStateFilter(field.property, code, next);\n }\n\n private isMultiStateMenuActivateKey(event: KeyboardEvent): boolean {\n return (\n event.key === 'Enter' ||\n event.key === ' ' ||\n event.key === 'Spacebar' ||\n event.code === 'Space' ||\n event.code === 'NumpadEnter'\n );\n }\n\n private findMultiStateRowFromKeyboardEvent(event: KeyboardEvent): HTMLElement | null {\n const path =\n typeof event.composedPath === 'function' ? event.composedPath() : [];\n const fromPath = path.find(\n (n): n is HTMLElement =>\n n instanceof HTMLElement && n.classList.contains('multi-state-filter__row'),\n );\n if (fromPath) {\n return fromPath;\n }\n const t = event.target;\n return t instanceof HTMLElement ? t.closest('.multi-state-filter__row') : null;\n }\n\n onMultiStateRowClick(event: MouseEvent, property: string, code: string): void {\n event.stopPropagation();\n const target = event.target as HTMLElement | null;\n if (target?.closest('mat-checkbox')) {\n return;\n }\n const next = !this.isMultiStateSelected(property, code);\n this.toggleMultiStateFilter(property, code, next);\n }\n\n toggleMultiStateFilter(property: string, code: string, checked: boolean): void {\n const ctrl = this.formParam.get(property);\n if (!ctrl) {\n return;\n }\n const raw = ctrl.value;\n const cur: string[] = Array.isArray(raw) ? [...raw] : [];\n if (checked) {\n if (!cur.includes(code)) {\n cur.push(code);\n }\n } else {\n const idx = cur.indexOf(code);\n if (idx >= 0) {\n cur.splice(idx, 1);\n }\n }\n ctrl.setValue(cur);\n }\n\n isMultiStateSelected(property: string, code: string): boolean {\n const raw = this.formParam.get(property)?.value;\n return Array.isArray(raw) && raw.includes(code);\n }\n\n isMultiStateEmpty(property: string): boolean {\n const raw = this.formParam.get(property)?.value;\n return !Array.isArray(raw) || raw.length === 0;\n }\n\n /** Trigger label: empty => caller shows placeholder; else short summary. */\n getMultiStateFilterTriggerLabel(field: FieldInfo): string {\n const raw = this.formParam.get(field.property)?.value;\n const selected = Array.isArray(raw) ? raw : [];\n const section = this.pageInfo?.labelsSection || '';\n if (selected.length === 0) {\n return this.translateService.instant(this.pageInfo.labelsSection+ \".\" + field.placeholder);\n }\n // if (this.areAllMultiStateOptionsSelected(field, selected)) {\n // return this.translateService.instant(this.pageInfo.labelsSection+ \".\" + field.placeholder);\n // }\n if (selected.length <= 2) {\n return selected\n .map(c => this.translateService.instant(section ? `${section}.${c}` : c))\n .join(', ');\n }\n return this.translateService.instant('FILTER-BUILDER.multiStatusSummary', { count: selected.length });\n }\n\n private areAllMultiStateOptionsSelected(field: FieldInfo, selected: string[]): boolean {\n const options = field.listOptions || [];\n return options.length > 0 && options.every((code: string) => selected.includes(code));\n }\n\n statusOptionLabelKey(field: FieldInfo, code: string): string {\n const section = this.pageInfo?.labelsSection;\n return section ? `${section}.${code}` : code;\n }\n\n getMultiStateReadonlySummary(field: FieldInfo, defaults: any): string {\n const raw = this.extractFieldName(defaults, field.property);\n const selected = Array.isArray(raw) ? raw : [];\n const section = this.pageInfo?.labelsSection || '';\n return selected\n .map(c => this.translateService.instant(section ? `${section}.${c}` : c))\n .join(', ');\n }\n\n getMultiValue(field: FieldInfo) {\n return this.formParam.get(field.property)?.value;\n }\n\n private validateEmail(email) {\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n addEmailToChips(event: MatChipInputEvent, form: FormGroup, fieldName: string) {\n\n const input = event.input;\n const value = event.value;\n const items = value.split(';');\n // value.split(' ');\n items.forEach(itm => {\n if (this.validateEmail((itm || '').trim())) {\n const x = this.splittedChips(form, fieldName);\n x.push(itm);\n form.get(fieldName).patchValue(x.join(';'));\n if (input) {\n input.value = '';\n }\n }\n });\n\n }\n\n extractJsonFieldName(defaults: any, property: string) {\n const x= this.extractFieldName(defaults, property);\n if (x?.length > 0)\n return JSON.parse(x);\n else return '{}';\n }\n\n getOptionValue(item: any) {\n const value = typeof item === 'object' ?\n this.translateService.getDefaultLang() === 'en' ? item.englishName : item.arabicName\n : item;\n return value;\n }\n\n getHyperTextEvent() {\n this.hyperTextEvent.emit(true);\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.equationOperators.includes(value) || !this.equationValues().includes(value)) {\n this.equationValues.update(equationValues => [...equationValues, value]);\n }\n }\n\n this.fieldsInput.nativeElement.value = '';\n this.currentEquationValue.set('');\n this.updateEquationOptions();\n\n }\n\n remove(item: string, index: number): void {\n this.equationValues.update(equationValues => {\n if (index < 0) {\n return equationValues;\n }\n\n equationValues.splice(index, 1);\n this.announcer.announce(`Removed ${item}`);\n return [...equationValues];\n });\n this.updateEquationOptions();\n }\n\n selected(event: MatAutocompleteSelectedEvent): void{\n const selectedValue = event.option.viewValue.trim();\n\n if (!this.equationOperators.includes(selectedValue) && !this.equationValues().includes(selectedValue)) {\n this.equationValues.update(equationValues => [...equationValues, selectedValue]);\n } else if (this.equationOperators.includes(selectedValue)) {\n this.equationValues.update(equationValues => [...equationValues, selectedValue]);\n }\n\n this.currentEquationValue.set('');\n event.option.deselect();\n this.fieldsInput.nativeElement.value = '';\n this.updateEquationOptions();\n }\n\n updateEquationOptions(){\n this.reflectEquationValueOnForm();\n\n let updatedFields: string[];\n if (this.equationValues().length === 0) {\n updatedFields = this.getNamesFromSuggestedEquationFields();\n } else {\n let lastElement = this.equationValues()[this.equationValues().length - 1];\n if (this.equationOperators.includes(lastElement)) {\n updatedFields = this.getNamesFromSuggestedEquationFields();\n } else {\n updatedFields = this.equationOperators;\n }\n }\n // console.log('*****', updatedFields);\n this.allEquationFields.next(updatedFields);\n }\n\n getNamesFromSuggestedEquationFields(): string[] {\n return this.equationSuggestedFields?.map(field => field.name);\n }\n\n reflectEquationValueOnForm() {\n if (this.formParam && this.formParam.get('fieldValue')) {\n this.formParam.get('fieldValue').setValue(this.equationValues());\n } else {\n // console.log('Form or fieldValue is not available.');\n }\n }\n\n checkEquation(field: FieldInfo, $event: Event) {\n // console.log('$event', $event);\n // try {\n // evaluate(equation.replace(/[a-zA-Z0-9]+/g, '1')); // Replace variables with dummy values\n // this.formGroups[index].get('xyz').setErrors(null);\n // console.log('valid ', equation)\n // } catch (e) {\n // this.formGroups[index].get('xyz').setErrors({serverError: 'incomplete '});\n // console.log('bad ', equation)\n // }\n }\n\n getView(field): 'month' | 'year' | 'multi-year' {\n return field.pattern || 'month';\n }\n\n setMonthAndYear(normalizedMonthAndYear: Moment, picker: MatDatepicker<Moment>, field) {\n console.log('field.pattern', field.pattern)\n if (field.pattern === 'multi-year') {\n console.log('hi')\n const date = new FormControl(moment());\n const ctrlValue = date.value;\n ctrlValue.year(normalizedMonthAndYear.year());\n ctrlValue.month(1);\n ctrlValue.dayOfYear(1);\n this.formParam.get(field.property).setValue(ctrlValue)\n picker.close();\n }\n }\n\n getAcceptedFileTypes(field: FieldInfo): string | undefined {\n if (!field.supportedTypes) {\n return undefined;\n }\n // Convert \".jpg,.png,.pdf\" format to \"image/jpeg,image/png,application/pdf\" or keep as is\n // For simplicity, we'll pass the supportedTypes as-is and let the browser handle it\n // The browser accepts both formats\n return field.supportedTypes;\n }\n\n onAttachmentFileSelected(file: File | null, field: FieldInfo): void {\n if (file) {\n // Validate file type if supportedTypes is specified\n if (field.supportedTypes) {\n const allowedTypes = field.supportedTypes.split(',').map(t => t.trim().toLowerCase());\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n if (!allowedTypes.includes(fileExtension)) {\n // File type not supported - could show error message\n console.warn(`File type ${fileExtension} is not supported. Allowed types: ${field.supportedTypes}`);\n return;\n }\n }\n\n // Update form control if it exists\n if (this.formParam && this.formParam.get(field.property)) {\n this.formParam.get(field.property)?.setValue(file);\n }\n\n // Emit attachment event\n this.attachmentEmitter.emit({\n file: file,\n field: field,\n attachmentType: field.attachmentType\n });\n } else {\n // Clear the form control if file is removed\n if (this.formParam && this.formParam.get(field.property)) {\n this.formParam.get(field.property)?.setValue(null);\n }\n }\n }\n}\n","<div class=\"main-form-canvas\">\n <div class=\"form-wrapper\">\n <ng-container *ngIf=\"defaults\">\n <ng-container *ngIf=\"editable; else readonlyView\" class=\"form-container\">\n <form [formGroup]=\"formParam\" class=\"form-content\">\n <div class=\"form-row\">\n <div class=\"form-column\">\n <ng-container *ngFor=\"let row of screenFields | keyvalue\">\n <div class=\"row-container\">\n <ng-container *ngFor=\"let field of row.value\">\n <div class=\"field-column\" [style.flex]=\"field.fieldSize ? ('0 0 ' + field.fieldSize + '%') : '1 1 0'\">\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <input matInput\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n (dateChange)=\"formParam.get(field.property).setValue($event.value)\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n formControlName=\"{{field.property}}\"\n [required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n\n <mat-datepicker-toggle *ngIf=\"!field.readonly\" matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-datepicker #picker\n [startView]=\"getView(field)\"\n (yearSelected)=\"setMonthAndYear($event, picker, field)\"\n panelClass=\"example-month-picker\">\n </mat-datepicker>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'phone-number'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container class=\"custom-ngx-mat-intl-tel-input\" *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <div class=\"phone-input-wrapper\">\n <ngx-mat-intl-tel-input\n formControlName=\"{{ field.property }}\"\n [inputPlaceholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [preferredCountries]=\"['qa']\"\n [enablePlaceholder]=\"true\"\n [enableSearch]=\"true\"\n [onlyCountries]=\"getCountryCodeList()\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n </ngx-mat-intl-tel-input>\n </div>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'iban-text'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'password'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input matInput\n class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n [type]=\"hide && !field.disabled ? 'password' : 'text'\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <!-- <mat-icon matSuffix-->\n <!-- (click)=\"hide = !hide\">-->\n <!-- {{ hide ? 'visibility_off' : 'visibility' }}-->\n <!-- </mat-icon>-->\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-icon *ngIf=\"field.showSearchIcon\" matPrefix>search</mat-icon>\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n (keyup)=\"fixArabicNumbers($event.target)\"\n [attr.aria-required]=\"field.required\"\n [maxDigits]=\"field.maxLength\"\n [phoneNumberOnly]=\"field.phoneNumberOnly\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <span\n *ngIf=\"field.showSearchIcon && !field.readonly && (formParam?.get([field.property])?.value ?? '') !== ''\"\n matSuffix\n class=\"clear-icon-suffix\">\n <button\n mat-icon-button\n type=\"button\"\n class=\"clear-icon-button\"\n [attr.aria-label]=\"'BASE_TABLE.clearField' | translate\"\n (click)=\"clearFieldValue(field.property)\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n </span>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-state-checkbox'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"multi-state-filter\" [formGroup]=\"formParam\">\n <button\n type=\"button\"\n class=\"multi-state-filter__trigger\"\n [matMenuTriggerFor]=\"statusMultiMenu\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"false\"\n [attr.aria-label]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : (field.label | translate)\">\n <span\n class=\"multi-state-filter__trigger-text\"\n [class.multi-state-filter__trigger-text--placeholder]=\"isMultiStateEmpty(field.property)\">\n {{\n getMultiStateFilterTriggerLabel(field)\n || (field.placeholder\n ? (labelKeyPlaceHolder(field) | translate)\n : ('FILTER-BUILDER.selectStatus' | translate))\n }}\n </span>\n <mat-icon class=\"multi-state-filter__chevron\" aria-hidden=\"true\">keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #statusMultiMenu=\"matMenu\" class=\"multi-state-filter__menu-panel\" [hasBackdrop]=\"true\">\n <div\n class=\"multi-state-filter__menu-inner\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"onMultiStateMenuInnerKeydown($event, field)\">\n <div\n *ngFor=\"let code of field.listOptions || []\"\n mat-menu-item\n class=\"multi-state-filter__row\"\n [attr.data-multi-state-code]=\"code\"\n (click)=\"onMultiStateRowClick($event, field.property, code)\">\n <mat-checkbox\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n [checked]=\"isMultiStateSelected(field.property, code)\"\n (change)=\"toggleMultiStateFilter(field.property, code, $event.checked)\">\n </mat-checkbox>\n <span\n class=\"multi-state-filter__pill stateType\"\n [ngClass]=\"code\">\n {{ statusOptionLabelKey(field, code) | translate }}\n </span>\n </div>\n </div>\n </mat-menu>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip-list'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n\n <mat-chip-grid [attr.aria-labelledby]=\"'label-' + field.property\"\n formControlName=\"{{ field.property }}\">\n <mat-chip-row\n *ngFor=\"let mail of splittedChips(formParam, field.property); let idx = index\"\n [removable]=\"removable\"\n (removed)=\"removeChipsItem(formParam, field.property, idx)\">\n {{ mail }}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip-row>\n\n <input [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [matChipInputFor]=\"null\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addEmailToChips($event, formParam, field.property)\">\n </mat-chip-grid>\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'amount'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"amountReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n type=\"number\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'sequence'\">\n <ng-container\n *ngIf=\"referenceAttributeTrue(field.property, 'autoGenerated'); else noSequence\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"true\"\n [disabled]=\"true\"\n [attr.aria-labelledby]=\"'label-' + field.property\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n\n <ng-template #noSequence>\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [readonly]=\"false\"\n [disabled]=\"false\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [required]=\"field.required\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-template>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textareaReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <textarea cdkFocusInitial\n formControlName=\"{{ field.property }}\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [maxDigits]=\"field.maxLength\"\n [attr.maxlength]=\"field.maxLength || null\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"></textarea>\n <mat-hint *ngIf=\"field.maxLength\" align=\"end\">\n {{ getFieldCurrentLength(field.property) }}/{{ field.maxLength }}\n </mat-hint>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n type=\"number\"\n [attr.min]=\"field.allowNegative ? null : 0\"\n (keydown)=\"blockNegativeNumberKeydown($event, field)\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [maxDigits]=\"field.maxLength\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.readonly ? false : field.required\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [pattern]=\"field.pattern\">\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n inputmode=\"numeric\"\n formControlName=\"{{ field.property }}\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [numbersOnly]=\"true\" [maxDecimals]=\"field.maxDecimals\"\n [maxDigits]=\"field.maxLength\"\n [pattern]=\"field.pattern\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.readonly ? false : field.required\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\">\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'time'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"timeReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input\n #timeInput\n matInput\n class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n type=\"time\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.required\">\n <span *ngIf=\"!field.readonly\" matSuffix class=\"mat-datepicker-toggle time-picker-toggle\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"time-picker-toggle-button\"\n [attr.aria-label]=\"field.label! | translate\"\n (click)=\"openTimePicker(timeInput); $event.stopPropagation()\">\n <mat-icon>schedule</mat-icon>\n </button>\n </span>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <mat-checkbox\n appearance=\"outline\"\n style=\"padding-bottom: 14px; padding-top: 14px;\"\n [disabled]=\"field.readonly\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n formControlName=\"{{ field.property }}\">\n {{ field.label! | translate }}\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-checkbox>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'toggle'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"toggleReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-slide-toggle\n [disabled]=\"field.readonly\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n formControlName=\"{{ field.property }}\">\n </mat-slide-toggle>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'color-picker'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center\">\n <h4 style=\"margin-right: 10px\">{{ field.label! | translate }}</h4>\n <input\n ejs-colorpicker\n type=\"color\"\n id=\"colorpicker\"\n formControlName=\"{{ field.property }}\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n />\n </div>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'radio-button'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"radioButtonReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <mat-radio-group\n formControlName=\"{{field.property}}\"\n class=\"app-radio\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <div class=\"field-row\">\n <div class=\"field-label\">\n <span class=\"custom-label\">{{ field.label! | translate }}</span>\n </div>\n <div class=\"field-input\">\n <div class=\"radio-group-custom\">\n <mat-radio-button\n *ngFor=\"let option of field.listOptions\"\n [value]=\"option\"\n [attr.aria-labelledby]=\"option\">\n {{ option | translate }}\n </mat-radio-button>\n </div>\n </div>\n </div>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-radio-group>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"listReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\" class=\"list-field\" style=\"width: 100%\">\n <mat-select\n panelClass=\"base-form-list-panel\"\n formControlName=\"{{field.property}}\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [disabled]=\"field.readonly\"\n [multiple]=\"field.multi || false\"\n [required]=\"field.readonly ? false : field.required\"\n [(value)]=\"field.defaultListOption\">\n <ng-container *ngIf=\"field.translate; else lookup_no_translation\">\n <mat-option\n *ngFor=\"let item of field.listOptions; let i = index\"\n [value]=\"item\">\n {{ friendlyName(field.label, field.property, item) | translate }}\n </mat-option>\n </ng-container>\n <ng-template #lookup_no_translation>\n <mat-option\n *ngFor=\"let item of field.listOptions\"\n [value]=\"item\">\n {{ getOptionValue(item) }}\n </mat-option>\n </ng-template>\n </mat-select>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'attachment'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <app-attachment-uploader\n [acceptedTypes]=\"getAcceptedFileTypes(field)\"\n [ariaDescribedBy]=\"showError(field.property) ? 'error-' + field.property : null\"\n (fileSelected)=\"onAttachmentFileSelected($event, field)\"\n style=\"margin-top: 5px\">\n </app-attachment-uploader>\n </ng-container>\n <mat-error class=\"iq-error\"\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"lookupReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <app-auto-complete\n [form]=\"formParam\"\n [field]=\"field\"\n [supportingAttributes]=\"supportingAttributes\"\n [defaultValue]=\"this.formParam.get(field.property)?.value\"\n (selectedValue)=\"patchLookupValue($event, field.property)\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </app-auto-complete>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'currency'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"currencyReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <!-- Uncomment and use the currency control when ready -->\n <!-- <app-currency\n [form]=\"formParam\"\n [field]=\"field\"\n [defaultValue]=\"this.formParam.get(field.property)?.value\"\n (selectedValue)=\"patchCurrencyValue($event, field.property)\">\n </app-currency> -->\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-select'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"multiSelectReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <app-multi-auto-complete\n [form]=\"formParam\"\n [field]=\"field\"\n [labelsSection]=\"pageInfo.labelsSection\"\n [defaultValue]=\"getMultiValue(field)\"\n (selectedValue)=\"patchMultiSelectValue($event, field.property)\">\n </app-multi-auto-complete>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'rich-text'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <!-- Uncomment and use the rich text editor when ready -->\n <!-- <ckeditor\n [editor]=\"Editor\"\n [disabled]=\"field.readonly\"\n formControlName=\"{{field.property}}\">\n </ckeditor> -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'divider'\">\n <mat-divider></mat-divider>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <div>\n <mat-label\n (click)=\"getHyperTextEvent()\"\n class=\"hyper-link\">\n {{ field.label! | translate }}\n </mat-label>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'section-title'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"hrdivider-mid\">\n <span>{{ field.label | translate }}</span>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'equation-builder'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\" dir=\"ltr\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n <!-- <ng-container *ngSwitchCase=\"'equation-builder'\" [formGroup]=\"formParam\">-->\n <!-- <ng-container *ngIf=\"showField(defaults, field)\">-->\n <!-- <ng-container *ngIf=\"!workflowEditableField(field)\">-->\n <!-- <ng-container-->\n <!-- [ngTemplateOutlet]=\"dateReadonly\"-->\n <!-- [ngTemplateOutletContext]=\"{ field: field }\">-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n <!-- <ng-container *ngIf=\"workflowEditableField(field)\">-->\n <!-- <div style=\"display: flex; width: 350%\">-->\n <!-- <mat-label>{{ field.label! | translate }}</mat-label>-->\n <!-- <mat-form-field style=\"width: 400%\" appearance=\"outline\">-->\n <!-- <mat-chip-grid #chipGrid>-->\n <!-- <ng-container *ngFor=\"let equationValue of equationValues(); let i = index\">-->\n <!-- <mat-chip-row (removed)=\"remove(equationValue, i)\">-->\n <!-- {{ equationValue }}-->\n <!-- <button-->\n <!-- matChipRemove-->\n <!-- [attr.aria-label]=\"'remove ' + equationValue\">-->\n <!-- <mat-icon>cancel</mat-icon>-->\n <!-- </button>-->\n <!-- </mat-chip-row>-->\n <!-- </ng-container>-->\n <!-- </mat-chip-grid>-->\n <!-- <input-->\n <!-- [(ngModel)]=\"currentEquationValue\"-->\n <!-- [matChipInputFor]=\"chipGrid\"-->\n <!-- [matAutocomplete]=\"auto\"-->\n <!-- [ngModelOptions]=\"{ standalone: true }\"-->\n <!-- [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"-->\n <!-- (matChipInputTokenEnd)=\"add($event)\"-->\n <!-- aria-label=\"Add equation value\" />-->\n <!-- <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">-->\n <!-- <ng-container *ngFor=\"let filteredField of (equationFilteredFields() | async)\">-->\n <!-- <mat-option [value]=\"filteredField\">{{ filteredField }}</mat-option>-->\n <!-- </ng-container>-->\n <!-- </mat-autocomplete>-->\n <!-- </mat-form-field>-->\n <!-- </div>-->\n <!-- <mat-error class=\"iq-error\" *ngIf=\"showError(field.property)\" aria-live=\"assertive\">-->\n <!-- {{ getErrors(field.property) | translate }}-->\n <!-- </mat-error>-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n </form>\n </ng-container>\n </ng-container>\n </div>\n\n</div>\n<ng-template #dateReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <ng-container *ngIf=\"isReadonlyTextValueEmpty(defaults, field) && field.emptyReadonlyPlaceholderKey; else dateReadonlyHasValue\">\n <span class=\"readonly-value readonly-value--empty\">{{ field.emptyReadonlyPlaceholderKey | translate }}</span>\n </ng-container>\n <ng-template #dateReadonlyHasValue>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) | date: getReadonlyDateFormat(field) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #timeReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ formatTimeToDate(defaults[field.property]) | date: 'shortTime' }}</span>\n </div>\n</ng-template>\n\n<ng-template #phoneNumberReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #textReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\" *ngIf=\"!field.advancedFilter\"></label>\n <ng-container *ngIf=\"isReadonlyTextValueEmpty(defaults, field) && field.emptyReadonlyPlaceholderKey; else textReadonlyHasValue\">\n <span class=\"readonly-value readonly-value--empty\">{{ field.emptyReadonlyPlaceholderKey | translate }}</span>\n </ng-container>\n <ng-template #textReadonlyHasValue>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #textareaReadonly let-field=\"field\">\n <ng-container *ngIf=\"field.textFormat === 'json'; else normalText\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <div class=\"readonly-value json-viewer\">\n <ngx-json-viewer [json]=\"extractJsonFieldName(defaults, field.property)\" [expanded]=\"true\"></ngx-json-viewer>\n </div>\n </div>\n </ng-container>\n <ng-template #normalText>\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n </ng-template>\n</ng-template>\n\n<ng-template #numberReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #currencyReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #radioButtonReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ translateLable(defaults[field.property]) }}</span>\n </div>\n</ng-template>\n\n<ng-template #richTextReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\" [innerHtml]=\"extractFieldName(defaults, field.property)\"></span>\n </div>\n</ng-template>\n\n<ng-template #checkboxReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n <mat-icon color=\"warn\" *ngIf=\"extractFieldName(defaults, field.property); else showNo\">done</mat-icon>\n <ng-template #showNo>\n <mat-icon color=\"warn\">close</mat-icon>\n </ng-template>\n </span>\n </div>\n</ng-template>\n\n<ng-template #toggleReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n <mat-icon color=\"warn\" *ngIf=\"extractFieldName(defaults, field.property); else showNo\">done</mat-icon>\n <ng-template #showNo>\n <mat-icon color=\"warn\">close</mat-icon>\n </ng-template>\n </span>\n </div>\n</ng-template>\n\n<ng-template #listReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\" *ngIf=\"field.translate; else noTranslate\">\n {{ listShowValue(defaults, field) | translate }}\n </span>\n <ng-template #noTranslate>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #sequenceReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #lookupReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n {{ extractFieldName(defaults, field.property)?.[translateService.getDefaultLang() === 'en' ? 'englishName' : 'arabicName'] }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #amountReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n {{ extractFieldName(defaults, field.property) | currency: currency }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #multiSelectReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <mat-chip-grid class=\"readonly-value chipList\">\n <mat-chip *ngFor=\"let filedProp of showMultiSelectValuesAsReadonly(field)\">\n {{ filedProp }}\n </mat-chip>\n </mat-chip-grid>\n </div>\n</ng-template>\n\n<ng-template #chipListReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHTML]=\"field.label | translate\"></label>\n <mat-chip-listbox class=\"readonly-value chipList\">\n <mat-chip-option *ngFor=\"let loc of splitReadonly(extractFieldName(defaults, field.property))\"\n [selectable]=\"true\"\n color=\"warn\"\n [removable]=\"false\">\n {{ loc }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n</ng-template>\n\n\n<ng-template #readonlyView>\n <div class=\"row-wrapper\">\n <div class=\"column-wrapper\">\n <ng-container *ngFor=\"let row of screenFields | keyvalue\">\n <div class=\"row-container\">\n <ng-container *ngFor=\"let field of row.value\">\n <div class=\"field-column readonly-item\" [style.flex]=\"field.fieldSize ? ('0 0 ' + field.fieldSize + '%') : '1 1 0'\">\n\n <ng-container [ngSwitch]=\"field.type\">\n\n <ng-container *ngSwitchCase=\"'attachment'\">\n <ng-container *ngIf=\"isAttachmentFieldEditable && showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n </div>\n <app-attachment-uploader\n [acceptedTypes]=\"getAcceptedFileTypes(field)\"\n [ariaDescribedBy]=\"showError(field.property) ? 'error-' + field.property : null\"\n (fileSelected)=\"onAttachmentFileSelected($event, field)\"\n style=\"margin-top: 5px\">\n </app-attachment-uploader>\n <mat-error class=\"iq-error\"\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"dateReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'time'\">\n <ng-container [ngTemplateOutlet]=\"timeReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'phone-number'\">\n <ng-container [ngTemplateOutlet]=\"phoneNumberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <ng-container [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container [ngTemplateOutlet]=\"textareaReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"currencyReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'radio-button'\">\n <ng-container [ngTemplateOutlet]=\"radioButtonReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <ng-container [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'toggle'\">\n <ng-container [ngTemplateOutlet]=\"toggleReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <ng-container [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\">\n <ng-container [ngTemplateOutlet]=\"lookupReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'amount'\">\n <ng-container [ngTemplateOutlet]=\"amountReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-select'\">\n <ng-container [ngTemplateOutlet]=\"multiSelectReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip-list'\">\n <ng-container [ngTemplateOutlet]=\"chipListReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'sequence'\">\n <ng-container [ngTemplateOutlet]=\"sequenceReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ng-container [ngTemplateOutlet]=\"listReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-state-checkbox'\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" *ngIf=\"!field.hideLabel\" [innerHtml]=\"field.label | translate\"></label>\n <span class=\"readonly-value\">{{ getMultiStateReadonlySummary(field, defaults) }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'iban-text'\">\n <p class=\"label\">\n <span [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></span>\n <span> : </span>\n <span class=\"value\" [innerHtml]=\"extractFieldName(defaults, field.property)\"></span>\n </p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'section-title'\">\n <div class=\"hrdivider-mid\">\n <span>{{ field.label | translate }}</span>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FormGroup} from \"@angular/forms\";\nimport {FieldFilter} from \"../../../base-model/field-filter.model\";\nimport {FieldInfo, PageInfo} from \"../../../base-model\";\nimport {BaseFormCanvasComponent} from \"../../base-form-canvas/base-form-canvas.component\";\n\n@Component({\n selector: 'app-field-filter',\n templateUrl: './field-filter.component.html',\n standalone: true,\n imports: [\n BaseFormCanvasComponent\n ],\n styleUrls: ['./field-filter.component.scss']\n})\n\nexport class FieldFilterComponent implements OnInit {\n\n @Input()\n filter: FieldFilter;\n\n @Input()\n pageInfo: PageInfo;\n\n @Input()\n filterFields: FieldInfo[];\n\n filterForm: FormGroup;\n\n @Input()\n item: any;\n\n @Input()\n editable = false;\n\n @Input()\n filterResetNonce = 0;\n\n @Output()\n selectedValue: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n filterFieldInformation: EventEmitter<any> = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit(): void {\n\n }\n\n\n formChanges($event: FormGroup) {\n this.filterForm = $event;\n this.filterForm.valueChanges.subscribe(v => {\n this.filterFieldInformation.emit(this.filterForm.value);\n });\n }\n}\n","\n<app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"filterFields\"\n [editable]=\"editable\"\n [filterResetNonce]=\"filterResetNonce\"\n (formUpdated)=\"formChanges($event)\"\n>\n</app-base-form-canvas>\n","import {Component, EventEmitter, HostListener, inject, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {CommonModule, formatDate, NgForOf} from '@angular/common';\nimport {FieldInfo, PageInfo, TableColumn} from \"../../../base-model\";\nimport {FieldFilter} from \"../../../base-model/field-filter.model\";\nimport {FieldFilterComponent} from \"../field-filter/field-filter.component\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\n\n@Component({\n selector: 'app-filter-builder',\n templateUrl: './filter-builder.component.html',\n standalone: true,\n imports: [\n CommonModule,\n FieldFilterComponent,\n TranslateModule,\n MatButtonModule,\n MatIcon,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n NgForOf\n ],\n styleUrls: ['./filter-builder.component.scss']\n})\nexport class FilterBuilderComponent implements OnInit, OnDestroy {\n\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly translate = inject(TranslateService);\n\n @Input()\n columns: TableColumn<any>[];\n\n @Input()\n isChecked: boolean;\n @Input()\n filterFields: FieldInfo[];\n @Input()\n pageInfo: PageInfo;\n @Input()\n pendingFilters: FieldFilter[] = [];\n\n @Input()\n showExportButton: boolean = false;\n\n filter: FieldFilter;\n filters: FieldFilter[] = [];\n\n private searchTimeout: any;\n\n filterResetNonce = 0;\n\n @Output()\n filterInformation: EventEmitter<{ filters: FieldFilter[], searchStr: string }> = new EventEmitter<{ filters: FieldFilter[], searchStr: string }>();\n\n @Output()\n isEmpty: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n applyFilter: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n sortByClicked: EventEmitter<string> = new EventEmitter<string>();\n\n @Output()\n exportClicked: EventEmitter<string> = new EventEmitter<string>();\n\n constructor() {\n }\n\n isMobile(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= 768;\n }\n\n getSortableColumns(): TableColumn<any>[] {\n if (!this.columns) {\n return [];\n }\n return this.columns.filter(column =>\n column.visible === true && column.enableSorting === true\n );\n }\n\n labelKey(column: TableColumn<any>): string {\n if (!column || !column.property) {\n return '';\n }\n const configuredKey = column.label ? column.label : column.property;\n if (!this.pageInfo || !this.pageInfo.labelsSection) {\n return configuredKey;\n }\n return configuredKey.startsWith(this.pageInfo.labelsSection)\n ? `${configuredKey}`\n : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n onSortByClick(columnProperty: string): void {\n this.sortByClicked.emit(columnProperty);\n }\n\n onExportClick(reportType: string): void {\n this.exportClicked.emit(reportType);\n }\n\n ngOnInit(): void {\n\n\n this.switchToAdvanced();\n if (!this.filter) {\n this.filter = this.createDefaultFieldFilter();\n }\n if (this.filterFields && this.filterFields.length) {\n this.filters = this.filterFields.map(() => this.createDefaultFieldFilter());\n }\n }\n\n ngOnDestroy(): void {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey && !event.ctrlKey && !event.metaKey) {\n const target = event.target as HTMLElement;\n const isInputElement = target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable;\n\n if (isInputElement) {\n event.preventDefault();\n event.stopPropagation();\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n setTimeout(() => {\n this.doSearch();\n this.onApplyFilter();\n }, 0);\n return;\n }\n this.onApplyFilter();\n }\n }\n\n\n doSearch() {\n let searchStr = '';\n const filtersArray = (this.filters || [])\n .filter(f => !!f && !!f.fieldName && this.hasFilterValue(f.valueObject))\n .map(f => {\n const fieldInfo = this.filterFields?.find(field => field.property === f.fieldName);\n if (fieldInfo?.multiLevelSearchEnable && f.valueObject) {\n searchStr = f.valueObject;\n return null;\n }\n return {...f};\n })\n .filter(f => f !== null);\n\n this.filterInformation.emit({ filters: filtersArray, searchStr });\n }\n\n onApplyFilter(): void {\n setTimeout(() => {\n this.doSearch();\n this.applyFilter.emit();\n const msg = this.translate.instant('BASE_TABLE.filterApplied');\n void this.liveAnnouncer.announce(msg, 'polite');\n }, 0);\n }\n\n private scheduleSearch(delayMs: number = 800) {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(() => {\n this.doSearch();\n }, delayMs);\n }\n\n formChanges($event: any, index?: number, fieldInfo?: FieldInfo) {\n const formatIfDate = (type?: string, value?: any) => {\n if (!type || value === undefined || value === null || value === '') return value;\n if ((type || '').toLowerCase().includes('date')) {\n return formatDate(value, 'yyyy-MM-dd', 'en_US');\n }\n return value;\n };\n\n if (index === undefined || !fieldInfo) {\n if (!this.filterFields || !this.filterFields.length) {\n this.filters = [];\n this.doSearch();\n return;\n }\n\n this.filters = this.filterFields.map((fi) => {\n const controlName = fi.property;\n let value = $event ? $event[controlName] : undefined;\n if (!this.isFilterValueActive(fi, value)) {\n return this.createDefaultFieldFilter();\n }\n const fieldName = controlName === 'from' || controlName === 'to' ? fi.targetProperty : controlName;\n\n return {\n fieldName: fieldName,\n operator: fi.filterOperator || 'EQUALS',\n filterType: 'FILED_FILTER',\n fieldType: this.typeMap(fi.type) as any,\n valueObject: formatIfDate(fi.type, value) as any\n } as FieldFilter;\n });\n\n const hasTextField = (this.filterFields || []).some(fi => ((fi.type || '').toLowerCase() === 'text'));\n if (hasTextField) {\n this.scheduleSearch();\n } else {\n this.doSearch();\n }\n return;\n }\n\n if (!this.filters) {\n this.filters = [];\n }\n if (this.filters.length < index + 1) {\n this.filters.length = index + 1;\n }\n\n let controlName = fieldInfo.property;\n let value = $event ? $event[controlName] : undefined;\n if ($event && $event.filterField !== undefined && $event.fromValue !== undefined) {\n controlName = $event.filterField || controlName;\n value = $event.fromValue;\n }\n\n if (!this.isFilterValueActive(fieldInfo, value)) {\n this.filters[index] = this.createDefaultFieldFilter();\n } else {\n this.filters[index] = {\n fieldName: controlName,\n operator: fieldInfo.filterOperator || 'EQUALS',\n filterType: 'FILED_FILTER',\n fieldType: this.typeMap(fieldInfo.type) as any,\n valueObject: formatIfDate(fieldInfo.type, value) as any\n } as FieldFilter;\n }\n const isTextField = ((fieldInfo.type || '').toLowerCase() === 'text');\n if (isTextField) {\n this.scheduleSearch();\n } else {\n this.doSearch();\n }\n }\n typeMap(colType?: string): string {\n const t = (colType || '').toLowerCase();\n if (t.includes('number') || t.includes('int') || t === 'long') return 'Long';\n if (t.includes('date') || t.includes('time')) return 'Date';\n if (t.includes('bool')) return 'Boolean';\n return 'String';\n }\n\n isEditable(_index?: number) {\n return true;\n }\n\n\n deleteAll() {\n this.filter = this.createDefaultFieldFilter();\n this.filters = this.filterFields ? this.filterFields.map(() => this.createDefaultFieldFilter()) : [];\n this.isEmpty.emit(true);\n }\n\n onClearFilters(): void {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n this.filterResetNonce++;\n setTimeout(() => this.deleteAll(), 0);\n }\n\n switchToAdvanced() {\n if (this.isChecked) {\n if (!this.filter || Object.keys(this.filter).length === 0) {\n this.filter = this.createDefaultFieldFilter();\n }\n }\n }\n\n\n private createDefaultFieldFilter(): FieldFilter {\n return {\n fieldName: '',\n operator: '',\n filterType: '',\n fieldType: '',\n valueObject: ''\n } as FieldFilter;\n }\n\n private hasFilterValue(value: unknown): boolean {\n if (value === undefined || value === null || value === '') {\n return false;\n }\n return !Array.isArray(value) || value.length > 0;\n }\n\n private isFilterValueActive(fieldInfo: FieldInfo, value: unknown): boolean {\n if (!this.hasFilterValue(value)) {\n return false;\n }\n if ((fieldInfo.type || '') !== 'multi-state-checkbox') {\n return true;\n }\n const selected = Array.isArray(value) ? value : [];\n const options = fieldInfo.listOptions || [];\n return options.length === 0 || !options.every((code: string) => selected.includes(code));\n }\n}\n","<div class=\"main-filter-builder\">\n\n <!-- Desktop View -->\n <div class=\"filterForm desktop-view\">\n <div class=\"filterForm__row\">\n <div class=\"filterForm__col\">\n <app-field-filter\n [editable]=\"isEditable()\"\n [filter]=\"filter\"\n [pageInfo]=\"pageInfo\"\n *ngIf=\"isEditable()\"\n [filterFields]=\"filterFields\"\n [filterResetNonce]=\"filterResetNonce\"\n (filterFieldInformation)=\"formChanges($event)\"\n class=\"filterForm__filed-filter\"\n >\n </app-field-filter>\n </div>\n <div class=\"button-group\">\n <button\n mat-flat-button\n class=\"btn-apply-filter\"\n type=\"button\"\n (click)=\"onClearFilters()\">\n <div class=\"button-text\">\n <mat-icon>clear_all</mat-icon>\n <span>{{ 'FILTER-BUILDER.clearFilters' | translate }}</span>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-apply-filter\"\n type=\"button\"\n (click)=\"onApplyFilter()\">\n <div class=\"button-text\">\n <mat-icon>filter_list</mat-icon>\n <span>{{ 'FILTER-BUILDER.applyFilter' | translate }}</span>\n </div>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Mobile View -->\n <div class=\"mobile-view\">\n <!-- Mobile Row 1: Search Field and Export Button -->\n <div class=\"mobile-search-row\">\n <div class=\"mobile-search-field\">\n <app-field-filter\n [editable]=\"isEditable()\"\n [filter]=\"filter\"\n [pageInfo]=\"pageInfo\"\n *ngIf=\"isEditable()\"\n [filterFields]=\"filterFields\"\n [filterResetNonce]=\"filterResetNonce\"\n (filterFieldInformation)=\"formChanges($event)\"\n class=\"mobile-field-filter\"\n >\n </app-field-filter>\n </div>\n <button\n *ngIf=\"showExportButton\"\n mat-flat-button\n class=\"btn-export-mobile\"\n [matMenuTriggerFor]=\"exportMenu\">\n <div class=\"button-content\">\n <mat-icon>file_export</mat-icon>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onExportClick('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"onExportClick('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"onExportClick('csv')\">CSV</button>\n </mat-menu>\n </div>\n\n <!-- Mobile Row 2: Filter By and Sort By Buttons -->\n <div class=\"mobile-filter-row\">\n <button\n mat-flat-button\n class=\"btn-filter-by btn-filter-by--icon-only\"\n type=\"button\"\n (click)=\"onClearFilters()\"\n [attr.aria-label]=\"'FILTER-BUILDER.clearFilters' | translate\">\n <div class=\"button-content\">\n <mat-icon>delete_sweep</mat-icon>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-filter-by\"\n type=\"button\"\n (click)=\"onApplyFilter()\">\n <div class=\"button-content\">\n <mat-icon>filter_list</mat-icon>\n <span>{{ 'FILTER-BUILDER.applyFilter' | translate }}</span>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-sort-by\"\n type=\"button\"\n [matMenuTriggerFor]=\"sortMenu\">\n <div class=\"button-content\">\n <mat-icon>unfold_more</mat-icon>\n <span>{{ 'FILTER-BUILDER.sortBy' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #sortMenu=\"matMenu\">\n <button\n *ngFor=\"let column of getSortableColumns()\"\n mat-menu-item\n (click)=\"onSortByClick(column.property)\">\n {{ labelKey(column) | translate }}\n </button>\n <button\n *ngIf=\"getSortableColumns().length === 0\"\n mat-menu-item\n disabled>\n {{ 'FILTER-BUILDER.noSortableColumns' | translate }}\n </button>\n </mat-menu>\n </div>\n </div>\n\n<!-- <div *ngIf=\"checkIsEmpty()\" class=\"line-top\">-->\n<!-- <mat-divider></mat-divider>-->\n<!-- </div>-->\n\n<!-- <div class=\"line-bottom\">-->\n<!-- <mat-divider></mat-divider>-->\n<!-- </div>-->\n\n<!-- <div class=\"action\">-->\n<!-- <button class=\"btn-none-background-primary action__clear\" mat-button (click)=\"deleteAll()\">-->\n<!-- {{'FILTER-BUILDER.clearAllFilters' | translate}}-->\n<!-- </button>-->\n<!-- <button class=\"btn-background-primary\" mat-button (click)=\"doSearch()\">-->\n<!-- {{'FILTER-BUILDER.search' | translate}}-->\n<!-- </button>-->\n<!-- </div>-->\n</div>\n","import {\n Component,\n effect,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges\n} from \"@angular/core\";\nimport {MatTableDataSource} from \"@angular/material/table\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatSortModule, Sort} from \"@angular/material/sort\";\nimport {\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgClass,\n NgForOf,\n NgIf,\n NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault\n} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton, MatButtonModule, MatIconButton} from \"@angular/material/button\";\nimport {NgxPaginationModule} from \"ngx-pagination\";\nimport {ButtonActionsComponent} from \"../button-actions/button-actions.component\";\nimport {ShareDataService} from \"../../services/trigger-form.service\";\nimport {BaseUtils} from \"../../utils/base-utils\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {\n ButtonActionSettings,\n EMPTY_PAGE_INFO,\n FieldInfo,\n FRONT_END_COLUMN_TYPES,\n PageInfo,\n TABLE_RECORD_ACTION,\n TableColumn\n} from \"../../base-model\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {TablePageUserAction} from \"../../base-model/table-page-user-action.interface\";\nimport {Workflow} from \"../../base-model/workflow/workflow.model\";\nimport {ResponseEnvelop} from \"../../base-model/response-envelop.model\";\nimport {Router} from \"@angular/router\";\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {PaginatorComponent} from \"../paginator/paginator.component\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\nimport {FilterBuilderComponent} from \"../advanced-filter/filter-builder/filter-builder.component\";\nimport {FieldFilter} from \"../../base-model/field-filter.model\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {BreakpointObserver, Breakpoints} from \"@angular/cdk/layout\";\n\n@Component({\n selector: 'app-base-table',\n standalone: true,\n templateUrl: './base-table.component.html',\n styleUrls: ['./base-table.component.scss'],\n animations: [],\n imports: [\n NgStyle,\n NgClass,\n TranslateModule,\n MatIcon,\n MatSortModule,\n NgIf,\n NgSwitch,\n MatButtonModule,\n DatePipe,\n CurrencyPipe,\n NgxPaginationModule,\n NgSwitchCase,\n NgSwitchDefault,\n MatIconButton,\n NgForOf,\n MatButton,\n ButtonActionsComponent,\n TitleBarComponent,\n PaginatorComponent,\n DecimalPipe,\n MatCheckbox,\n FilterBuilderComponent,\n MatMenuTrigger,\n MatMenu,\n MatMenuItem,\n\n ]\n})\nexport class BaseTableComponent extends BaseUtils implements OnInit, OnChanges, OnDestroy {\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n collection = {count: 60, data: []};\n config = {\n itemsPerPage: 10,\n currentPage: 1,\n totalItems: this.collection.count\n };\n public maxSize: number = 7;\n public directionLinks: boolean = true;\n public autoHide: boolean = false;\n public responsive: boolean = true;\n public labels: any = {\n previousLabel: '<',\n nextLabel: '>',\n screenReaderPaginationLabel: 'Pagination',\n screenReaderPageLabel: 'page',\n screenReaderCurrentLabel: `You're on page`\n };\n\n @Input()\n filterFields: FieldInfo[];\n @Input() noDataFoundSvgPath: string;\n @Input() noDataFoundTitle = 'noDataFoundTitle';\n @Input() noDataFoundSubtitle = 'noDataFoundSubtitle';\n @Input() noResultSvgPath: string;\n @Input() noResultTitle = 'noResultTitle';\n @Input() noResultSubtitle = 'noResultSubtitle';\n totalElements = 0;\n pagesCount = 0;\n pageIndex = 1;\n pageSize = 10;\n mobileDisplayedItems = 0;\n private selectedStatusFilter: Filter[] = [];\n advancedAppliedFilter: any[] = [];\n pendingFilters: any[] = [];\n searchStr: string = '';\n private filterRequest: FilterRequest = new FilterRequest();\n private timer: any;\n @Input()\n override pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n @Input()\n enablePagination: boolean = true;\n\n @Input()\n mobilePageSize: number = 2;\n\n @Input()\n mobileLoadMoreIncrement: number = 2;\n\n @Input() data?: MatTableDataSource<any>;\n @Input()\n listAction: ButtonActionSettings[] = [];\n\n @Input()\n extraActions: ButtonActionSettings[] = [];\n\n @Input()\n buttonsDisplayMode: 'dropdown' | 'list' = 'dropdown';\n\n @Input()\n columns: TableColumn<any>[];\n\n @Input()\n filters: Filter[] = [];\n\n @Input() //@ts-ignore\n pathParam: number;\n\n @Input()\n extraButton: ButtonActionSettings[] = [];\n\n @Output() buttonClicked = new EventEmitter<ButtonActionSettings>();\n\n @Input() //@ts-ignore\n enforceRefresh: boolean = false;\n\n @Input()\n isPending: boolean = false;\n\n @Input()\n trigger: boolean = false;\n\n @Input()\n reportRequest: ReportRequest = new ReportRequest({});\n\n @Input()\n separateEndpointData: any;\n @Input()\n manageablePages: boolean = false;\n @Input()\n totalPagesCount: number = 0;\n @Input()\n currentPageIndex: number = 0;\n\n @Output()\n pageChange: EventEmitter<any> = new EventEmitter();\n\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n @Output()\n hyperLinkAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n\n @Output()\n extraAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n\n @Output()\n selectedColumn: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n @Output()\n listActionClicked: EventEmitter<{ action: ButtonActionSettings, row: any , isPending: boolean}> = new EventEmitter<{\n action: ButtonActionSettings,\n row: any,\n isPending: boolean\n }>();\n\n @Output()\n pendingViewModeChanged = new EventEmitter<boolean>();\n\n @Output()\n showDialog: EventEmitter<any> = new EventEmitter<any>();\n\n usedWorkflow!: Workflow;\n\n mode:any;\n\n @Input()\n customizedData?: MatTableDataSource<any>;\n dataSource: MatTableDataSource<any>;\n selectedRowIndex = -1;\n noDataFound = false;\n totalRequiredCountItem = 0;\n\n\n @Output()\n clickRoutePage: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(\n private backendService: BackendService,\n public translateService: TranslateService,\n public shareDataService: ShareDataService,\n private breakpointObserver: BreakpointObserver,\n @Inject('securityManager') private securityManager: any,\n private router: Router,\n private readonly liveAnnouncer: LiveAnnouncer,\n ) {\n super();\n this.dataSource = new MatTableDataSource();\n this.columns = [];\n this.filterRequest = new FilterRequest();\n\n\n effect(() => {\n if (this.pageInfo.lazyLoadData !== true || this.enforceRefresh === true) {\n this.loadData();\n }\n });\n\n }\n\n ngOnDestroy(): void {\n }\n\n ngOnInit(): void {\n this.backendService.isEmptyItems = this.dataSource.data.length <= 0;\n if (this.customizedData) {\n this.dataSource = this.customizedData;\n }\n if(this.manageablePages) {\n this.pagesCount = this.totalPagesCount;\n this.pageIndex = this.currentPageIndex;\n }\n\n this.mobileDisplayedItems = this.pageSize;\n\n this.breakpointObserver\n .observe(['(max-width: 768px)'])\n .subscribe(result => {\n if (result.matches) {\n this.pageSize = 2;\n this.loadData();\n }else {\n this.pageSize = 10;\n this.loadData();\n }\n });\n }\n\n onPageChange(event: number) {\n this.pageIndex = event;\n this.getNext(this.pageIndex - 1);\n if (this.manageablePages) {\n this.pageChange.emit(this.pageIndex);\n }\n }\n\n\n extractFieldName(element: any, property: string) {\n if (property?.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n const c = this.columns.find(c => c.property === property);\n if (Array.isArray(element[property]) && c?.arraySubProperty) {\n const fieldValues = element[property].map(f => f[c.arraySubProperty]);\n return fieldValues.join(', ');\n }\n if (c?.type === 'list' && Array.isArray(element[property])) {\n return this.getListItems(element, property).join(' • ');\n }\n return element[property];\n }\n }\n\n getListItems(element: any, property: string): string[] {\n const value = property?.includes('.')\n ? property.split('.').reduce((acc, part) => acc && acc[part], element)\n : element?.[property];\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map(item => (item == null ? '' : String(item)))\n .filter(item => item.length > 0);\n }\n\n get visibleColumns() {\n this.buildGroups()\n return this.columns.filter(column => column.visible).map(column => column.property);\n }\n\n get visibleColumnsArray() {\n return this.visibleColumns;\n }\n\n getColumn(property: string): TableColumn<any> | undefined {\n return this.columns.find(c => c.property === property);\n }\n\n getSortDirection(property: string): 'asc' | 'desc' | '' {\n if (this.reportRequest?.filterRequest?.sortKey) {\n return this.reportRequest.filterRequest.sortDirection === 'ASC' ? 'asc' : 'desc';\n }\n return '';\n }\n\n handleSortClick(property: string): void {\n const COLUMN = this.getColumn(property);\n if (!COLUMN || !COLUMN.enableSorting) {\n return;\n }\n\n const CURRENT_DIRECTION = this.getSortDirection(property);\n let NEW_DIRECTION: 'asc' | 'desc' = 'asc';\n\n if (CURRENT_DIRECTION === 'asc') {\n NEW_DIRECTION = 'desc';\n }\n\n this.onSortAction({\n active: property,\n direction: NEW_DIRECTION\n });\n }\n\n onSortHeaderKeydown(event: KeyboardEvent, columnProp: string): void {\n if (!this.getColumn(columnProp)?.enableSorting) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleSortClick(columnProp);\n }\n }\n\n /** aria-sort on sortable column headers (WCAG table semantics). */\n getColumnAriaSort(columnProp: string): 'ascending' | 'descending' | 'none' | null {\n if (!this.getColumn(columnProp)?.enableSorting) {\n return null;\n }\n const d = this.getSortDirection(columnProp);\n if (d === 'asc') {\n return 'ascending';\n }\n if (d === 'desc') {\n return 'descending';\n }\n return 'none';\n }\n\n sortState: any = {};\n\n getNext(pageIndex: number) {\n this.reportRequest.filterRequest.pageIndex = pageIndex;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.loadData();\n }\n onPageSizeChange(event: number) {\n this.pageSize = event;\n this.pageIndex = 1; // reset to first page on page size change\n this.mobileDisplayedItems = 0;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.getNext(0);\n }\n\n onLoadMore(itemsToLoad: number) {\n const currentDisplayed = this.mobileDisplayedItems || this.dataSource.data.length || this.pageSize;\n this.pageSize = Math.min(currentDisplayed + itemsToLoad, this.totalElements);\n this.mobileDisplayedItems = this.pageSize;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.reportRequest.filterRequest.pageIndex = 0;\n this.pageIndex = 1;\n this.loadData(true);\n }\n\n private loadData(skipMobileReset: boolean = false) {\n clearTimeout(this.timer);\n\n if (!skipMobileReset) {\n // this.initializeMobilePageSize();\n }\n\n if (!this.reportRequest.filterRequest) {\n this.reportRequest.filterRequest = new FilterRequest(this.pageSize || this.pageInfo.pageSize);\n this.reportRequest.filterRequest.searchStr = this.searchStr;\n this.reportRequest.filterRequest.filters = [\n ...(this.advancedAppliedFilter || []),\n ...(this.filters || []).filter(f =>\n !(this.advancedAppliedFilter || []).some(a => a.field === f.fieldName)\n )\n ];\n }\n\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n if (this.separateEndpointData || !this.pageInfo.apiUri || this.pageInfo.apiUri.length === 0) {\n this.dataSource.data = this.separateEndpointData;\n queueMicrotask(() => this.announceTableResults());\n } else if(this.reportRequest == undefined){\n return;\n } else if(!this.manageablePages) {\n this.timer = setTimeout(() => {\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.reportRequest.filterRequest.columns = this.columns?.filter(c => FRONT_END_COLUMN_TYPES.indexOf(c.type) < 0 ).map(c => c.property) || [];\n this.reportRequest.filterRequest.pendingPage = this.isPending;\n this.reportRequest.filterRequest.searchStr = this.searchStr;\n this.reportRequest.filterRequest.filters = [\n ...(this.advancedAppliedFilter || []),\n ...(this.filters || []).filter(f =>\n !(this.advancedAppliedFilter || []).some(a => a.field === f.fieldName)\n )\n ];\n this.backendService.getItemsByFilter(this.reportRequest?.filterRequest, this.pageInfo.apiUri).subscribe(resp => {\n const responseEnvelope = new ResponseEnvelop(resp);\n if (responseEnvelope.valid) {\n this.totalRequiredCountItem = this.reportRequest.filterRequest.pageSize\n this.noDataFound = responseEnvelope.body.length < 1;\n this.dataSource.data = responseEnvelope.body;\n this.backendService.isEmptyItems = this.dataSource.data.length <= 0;\n this.totalElements = responseEnvelope.totalSize || 0;\n this.pagesCount = Math.ceil(this.totalElements / this.pageSize) || 1;\n this.pageIndex = (this.reportRequest.filterRequest.pageIndex || 0) + 1;\n this.config.totalItems = responseEnvelope.totalSize || 0;\n this.config.currentPage = this.pageIndex + 1;\n this.mobileDisplayedItems = this.dataSource.data.length;\n queueMicrotask(() => this.announceTableResults());\n }\n });\n }\n , 300);\n }\n }\n\n private announceTableResults(): void {\n const visible = this.dataSource?.data?.length ?? 0;\n const total = this.totalElements ?? visible;\n const message = this.translateService.instant('BASE_TABLE.resultsAnnouncement', {\n visible,\n total,\n });\n void this.liveAnnouncer.announce(message, 'polite');\n }\n\n getStatusDescription(element: any) {\n return this.backendService.getStatusDescription(element, this.usedWorkflow);\n }\n\n getStateType(element: any) {\n return element.stateType\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customizedData\"] && !changes[\"customizedData\"].isFirstChange()) {\n this.dataSource.data = changes[\"customizedData\"].currentValue?.data || []; // Update data source with new data\n this.pagesCount=this.totalPagesCount;\n this.pageIndex=this.currentPageIndex;\n queueMicrotask(() => this.announceTableResults());\n }\n if (changes[\"enforceRefresh\"] && !changes[\"enforceRefresh\"].isFirstChange()) {\n this.loadData();\n }\n if (changes[\"isPending\"] && !changes[\"isPending\"].isFirstChange()) {\n this.loadData();\n }\n }\n getCroppedText(elementValue: any, subWidth: number = 20) {\n return elementValue && elementValue.length > subWidth ? elementValue.substring(0, subWidth) + \"...\" : elementValue;\n }\n\n emitEvent(element: any) {\n this.showDialog.emit(element);\n }\n\n extractFormat(column: TableColumn<any>) {\n return column?.format || 'd/M/yyyy, h:mm a';\n }\n\n actionListClicked(listAction: ButtonActionSettings, element: any) {\n this.listActionClicked.emit({action:listAction, row: element, isPending: this.isPending});\n }\n\n hyperLinkClicked(actionName: string, element: any) {\n const action = TABLE_RECORD_ACTION;\n action.actionKey = actionName;\n action.item = element;\n action.pageInfo = this.pageInfo;\n this.hyperLinkAction.emit(action)\n }\n\n\n emitRoutePage(element: any){\n this.clickRoutePage.emit(element);\n }\n\n onSelectItem(row: any) {\n if (this.pageInfo.selfRouting) {\n const mode = this.isPending ? 'pending' : 'view';\n const url = `${this.pageInfo.listRoutePath || this.router.url}/view`;\n\n const encryptedId = this.backendService.encrypt(String(row.id));\n const encryptedMode = this.backendService.encrypt(mode);\n\n const encryptedRow = this.backendService.encrypt(JSON.stringify(row));\n\n this.router.navigate([url], {\n queryParams: { token: encryptedId, mode: encryptedMode },\n state: { raw: encryptedRow },\n });\n return;\n }\n // const action = SELECT_RECORD_ACTION;\n // action.id = row?.id;\n // action.item = row;\n // this.userAction.emit(action)\n }\n\n openNewTab(row) {\n if (!this.pageInfo.embededTableOnly) {\n const mode = this.isPending ? 'pending' : 'view';\n window.open(`${this.pageInfo.listRoutePath}/${mode}` + '/' + row?.id);\n }\n }\n\n onViewModeChangedReceived(isPending: boolean) {\n this.pendingViewModeChanged.emit(isPending);\n this.switchViewMode(isPending);\n }\n\n switchViewMode(isPending: boolean) {\n this.isPending = isPending;\n this.loadData();\n }\n\n onAddNewAction($event: any) {\n const url = `${this.pageInfo.listRoutePath || this.router.url}/view`;\n const encryptedId = this.backendService.encrypt(\"-1\");\n const encryptedMode = this.backendService.encrypt(\"pending\");\n this.router.navigate([`${url}`],\n { queryParams: { token: encryptedId , mode : encryptedMode } });\n\n // const action = SELECT_RECORD_ACTION;\n // action.id = row?.id;\n // action.item = row;\n // this.userAction.emit(action)\n }\n\n showAddNew() {\n return this.pageInfo.hasAddButton ;\n }\n\n onExtraButtionAction($event: any) {\n this.extraAction.emit($event);\n\n }\n\n hasGroups() {\n let b = this.columns.findIndex(p => p.group);\n return b >= 0;\n }\n groupNames: any = []\n groupSpans: Map<string, number> = new Map();\n\n buildGroups(){\n let count = 0;\n this.groupNames = [];\n this.groupSpans.clear();\n if(this.hasGroups() === false){\n return;\n }\n this.columns\n .filter(column => column.visible === true)\n .forEach((column) => {\n if (column.group === \"-\") {\n this.groupNames.push(count.toString());\n this.insertInMap(count);\n count++;\n return;\n } else if (!this.groupNames.includes(column.group)) {\n this.groupNames.push(column.group);\n this.insertInMap(column.group);\n return;\n }\n this.insertInMap(column.group);\n });\n }\n\n insertInMap(key){\n if(this.groupSpans.has(key)){\n this.groupSpans.set(key.toString(), this.groupSpans.get(key) + 1);\n } else {\n this.groupSpans.set(key.toString(), 1);\n }\n }\n\n isHumanMade(str){\n return isNaN(str);\n }\n\n actionButtonClicked(actionKey: string, item: any): void {\n if (actionKey === 'navigate') {\n this.handleNavigateAction(item);\n return;\n }\n\n this.emitTableAction(actionKey, item);\n }\n\n private handleNavigateAction(item: any): void {\n const mode = this.isPending ? 'pending' : 'view';\n const basePath = this.pageInfo.listRoutePath || this.router.url;\n const url = `${basePath}/view`;\n\n const encryptedId = this.backendService.encrypt(item.id.toString());\n const encryptedMode = this.backendService.encrypt(mode);\n\n this.router.navigate([url], {\n queryParams: { token: encryptedId, mode: encryptedMode }\n });\n }\n\n private emitTableAction(actionKey: string, item: any): void {\n const action = TABLE_RECORD_ACTION;\n action.actionKey = actionKey;\n action.item = item;\n action.pageInfo = this.pageInfo;\n this.userAction.emit(action);\n }\n\n extractReport(reportType: any) {\n const myFilters = this.reportRequest.filterRequest;\n const reportRequest = this.backendService.buildReportRequest(this.columns, this.pageInfo.labelsSection + '.list_title',\n myFilters, reportType, this.pageInfo, this.searchStr, 'LANDSCAPE');\n this.backendService.downloadReport(reportRequest, this.pageInfo.apiUri);\n }\n\n getIcon(status: string): string {\n switch (status) {\n case 'pass': return 'check_circle';\n case 'warning': return 'warning';\n case 'error': return 'error';\n default: return 'help';\n }\n }\n\n getIconAriaLabelKey(status: string): string {\n switch (status) {\n case 'pass':\n return 'BASE_TABLE.statusIconPass';\n case 'warning':\n return 'BASE_TABLE.statusIconWarning';\n case 'error':\n return 'BASE_TABLE.statusIconError';\n default:\n return 'BASE_TABLE.statusIconUnknown';\n }\n }\n\n getOnOffFlagAriaLabelKey(value: boolean | null | undefined): string {\n if (value === true) {\n return 'BASE_TABLE.statusFlagActive';\n }\n if (value === false) {\n return 'BASE_TABLE.statusFlagInactive';\n }\n return 'BASE_TABLE.statusFlagPending';\n }\n\n actionCheckedClicked(property: string, element) {\n element[property]= !element[property];\n this.actionButtonClicked(property, element);\n }\n\n\n isDarkHighlight(row: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !row[groupByProp]) {\n return false;\n }\n\n const cellValue = row[groupByProp].toString();\n\n return groupByValues.some(val =>\n cellValue.includes(val) && cellValue.length > val.length\n );\n }\n\n shouldRenderAsHyperLink(element: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !element[groupByProp]) {\n return false;\n }\n\n const value = element[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n\n onSortAction($event: Sort) {\n const col = this.columns.find(c => c.property === $event.active);\n\n this.reportRequest.filterRequest.sortKey =\n $event.active && $event.direction\n ? (col?.sortKey ?? $event.active)\n : 'id';\n\n this.reportRequest.filterRequest.sortDirection = $event.direction === 'asc' ? 'ASC' : 'DESC';\n this.reportRequest.filterRequest.pageIndex = 0;\n this.selectedColumn.emit($event);\n this.loadData();\n }\n\n shouldShowButton(element: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !element[groupByProp]) {\n return true;\n }\n\n const value = element[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n storePendingFilters($event: { filters: FieldFilter[], searchStr: string }): void {\n this.pendingFilters = $event.filters || [];\n this.searchStr = $event.searchStr;\n }\n\n private resetPaginationForFilterChange(): void {\n if (!this.reportRequest.filterRequest) {\n this.reportRequest.filterRequest = new FilterRequest(this.pageSize || this.pageInfo.pageSize);\n }\n this.reportRequest.filterRequest.pageIndex = 0;\n this.pageIndex = 1;\n if (this.manageablePages) {\n this.pageChange.emit(this.pageIndex);\n }\n }\n\n applyPendingFilters(): void {\n this.advancedAppliedFilter = this.pendingFilters || [];\n this.resetPaginationForFilterChange();\n this.loadData();\n }\n\n handleFilterEmpty($event: boolean): void {\n if ($event) {\n this.pendingFilters = [];\n this.advancedAppliedFilter = [];\n this.searchStr = '';\n this.resetPaginationForFilterChange();\n this.loadData();\n }\n }\n\n resetData($event: boolean) {\n if ($event) {\n this.advancedAppliedFilter = [];\n this.pendingFilters = [];\n this.resetPaginationForFilterChange();\n this.loadData();\n // this.paginator.firstPage();\n }\n }\n\n hasFiltersApplied(): boolean {\n return (this.advancedAppliedFilter && this.advancedAppliedFilter.length > 0) ||\n (this.filters && this.filters.length > 0) ||\n (this.pendingFilters && this.pendingFilters.length > 0);\n }\n\n getDisplaySvgPath(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultSvgPath : this.noDataFoundSvgPath;\n }\n\n getDisplayTitle(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultTitle : this.noDataFoundTitle;\n }\n\n getDisplaySubtitle(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultSubtitle : this.noDataFoundSubtitle;\n }\n\n buttonClickedEvent($event: ButtonActionSettings) {\n\n }\n\n getMobileCardIdColumn(): TableColumn<any> | undefined {\n return this.columns.find(c => c.visible && c.mobileCardId === true);\n }\n\n getMobileCardStatusColumn(): TableColumn<any> | undefined {\n return this.columns.find(c => c.visible && c.mobileCardStatus === true);\n }\n\n getMobileCardColumns(): TableColumn<any>[] {\n const idCol = this.getMobileCardIdColumn();\n const statusCol = this.getMobileCardStatusColumn();\n\n return this.columns.filter(c =>\n c.visible &&\n c.property !== 'actions' &&\n c !== idCol &&\n c !== statusCol\n );\n }\n\n override labelKeyByValue(column: TableColumn<any> | undefined, row: any): string {\n if (!column || !column.property) return '';\n return super.labelKeyByValue(column, row);\n }\n}\n","<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(row[columnProp], row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FieldInfo, Filter, FilterRequest, PageInfo} from \"../../base-model\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services\";\nimport {DatePipe, NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {AuditLogEntry} from \"../../base-model/audit-log-entry\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle} from \"@angular/material/expansion\";\n\n@Component({\n selector: 'app-audit-log',\n standalone: true,\n imports: [\n NgForOf,\n MatButtonModule,\n TranslateModule,\n NgIf,\n MatIconModule,\n DatePipe,\n NgClass,\n MatExpansionPanelTitle,\n MatExpansionPanel,\n MatExpansionPanelHeader\n ],\n providers: [DatePipe],\n templateUrl: './audit-log.component.html',\n styleUrls: ['./audit-log.component.scss']\n})\nexport class AuditLogComponent implements OnInit {\n auditLogEntries: AuditLogEntry[] = [];\n\n @Input() pageInfo!: PageInfo;\n @Input() statusName!: string;\n @Input() module: string;\n @Input() identifier: string;\n @Input() fields: FieldInfo[] = [];\n @Input() showHiddenFields: string[] = [];\n @Input() nameField = 'name';\n\n auditRecordId: number | string | null = null;\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n constructor(\n public dialog: MatDialog,\n private activatedRoute: ActivatedRoute,\n private directionality: Directionality,\n @Inject('securityManager') private securityManager: any,\n public backendService: BackendService\n ) {}\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n });\n\n this.loadItem();\n }\n\n private resolveStateRecord(): Record<string, unknown> | null {\n const s = history.state as Record<string, unknown> | undefined;\n if (!s) {\n return null;\n }\n const candidate =\n (s['raw'] as Record<string, unknown> | undefined) ??\n (s['entityData'] as Record<string, unknown> | undefined) ??\n (s['userData'] as Record<string, unknown> | undefined) ??\n (s['entity'] as Record<string, unknown> | undefined) ??\n (s['data'] as Record<string, unknown> | undefined);\n return candidate ?? null;\n }\n\n private loadItem() {\n const state = this.resolveStateRecord();\n const id = state?.['id'];\n if (id !== undefined && id !== null && id !== '') {\n const num = Number(id);\n this.auditRecordId = !Number.isNaN(num) && num > 0 ? num : String(id);\n } else {\n this.auditRecordId = null;\n }\n\n if (this.auditRecordId === null) {\n return;\n }\n\n const filterRequest = new FilterRequest();\n filterRequest.filters = [];\n filterRequest.sortDirection = \"DESC\";\n filterRequest.pageSize = 1000;\n filterRequest.filters.push(new Filter({\n key: 0,\n fieldType: 'Long',\n fieldName: 'id',\n valueObject: this.auditRecordId,\n filterType: 'FILED_FILTER',\n operator: 'EQUALS'\n }));\n\n this.backendService.getItemAuditLog(filterRequest, this.pageInfo!.apiUri).subscribe({\n next: (resp) => {\n if (resp?.body?.length > 0) {\n this.auditLogEntries = resp.body.map((entry: AuditLogEntry) => ({\n ...entry\n }));\n }\n },\n });\n }\n\n getSubjectName(entry: AuditLogEntry): string {\n const subject = entry?.subject;\n if (subject == null || !this.nameField) {\n return '';\n }\n const value = this.resolveFieldPath(subject, this.nameField);\n return value != null && value !== '' ? String(value) : '';\n }\n\n private resolveFieldPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((current, key) => {\n if (current == null || typeof current !== 'object') {\n return undefined;\n }\n return (current as Record<string, unknown>)[key];\n }, obj);\n }\n}\n","<div *ngIf=\"auditRecordId !== null && this.auditLogEntries.length > 0\">\n\n<mat-expansion-panel class=\"location-card\"\n #panel=\"matExpansionPanel\"\n [expanded]=\"true\"\n [hideToggle]=\"true\"\n (opened)=\" panel.open() \"\n (closed)=\" panel.open()\">\n <mat-expansion-panel-header class=\"card-header\" >\n <mat-panel-title>\n <div class=\"title-container\">\n <h3 class=\"card-title\">\n {{ 'audit-log.title' | translate }}\n </h3>\n </div>\n </mat-panel-title>\n\n </mat-expansion-panel-header>\n <div class=\"panel-body\">\n <hr class=\"divider\"/>\n <div class=\"timeline-container\">\n <div *ngFor=\"let auditLog of auditLogEntries; let i = index\" class=\"timeline-item\">\n <div class=\"timeline-marker\">\n <div class=\"timeline-circle\"></div>\n <div *ngIf=\"i !== auditLogEntries.length - 1\" class=\"timeline-line\"></div>\n </div>\n\n <div class=\"timeline-content\">\n <div class=\"log-main-text\">\n <span class=\"actor-name\">{{ auditLog.createdByDisplayName || auditLog.createdBy || ('system' | translate) }}</span>\n <span class=\"action-text action-highlight\">{{\n 'audit-log.action_' +\n auditLog?.action +\n '_' +\n module\n | translate\n }}</span>\n <ng-container *ngIf=\"getSubjectName(auditLog)\">\n <span class=\"action-text\">{{ 'audit-log.for_' + module | translate }}</span>\n <span class=\"actor-name\">{{ getSubjectName(auditLog) }}</span>\n </ng-container>\n </div>\n <div class=\"log-timestamp\">{{ auditLog.createdOn | date: 'dd MMM, yyyy HH:mm a' }}</div>\n </div>\n </div>\n </div>\n\n\n </div>\n</mat-expansion-panel>\n\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport { FormGroup } from \"@angular/forms\";\nimport { AutoCompleteComponent } from \"../auto-complete/auto-complete.component\";\nimport { MatFormField, MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatLabel } from \"@angular/material/form-field\";\nimport {NgForOf, NgIf, NgSwitch, NgSwitchCase} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {TranslateModule} from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-equation-builder',\n standalone: true,\n imports: [\n AutoCompleteComponent,\n MatSelect,\n MatOption,\n MatFormField,\n MatLabel,\n NgSwitch,\n NgForOf,\n NgSwitchCase,\n MatIcon,\n MatIconButton,\n NgIf,\n TranslateModule,\n ],\n templateUrl: './equation-builder.component.html',\n styleUrl: './equation-builder.component.css'\n})\nexport class EquationBuilderComponent implements OnInit {\n @Input() form!: FormGroup;\n @Input() field!: any;\n @Input() isPending!: boolean;\n @Output() valueChanged = new EventEmitter<any>();\n\n operators = [\n { label: '+', value: '+' },\n { label: '-', value: '-' },\n { label: '=', value: '=' }\n ];\n\n items: any[] = [];\n @Input() readOnly!: boolean;\n\n ngOnInit() {\n const fieldValues: any[] = this.form.get('fieldValue')?.value;\n\n if (Array.isArray(fieldValues) && fieldValues.length > 0) {\n this.items = fieldValues.map(val => {\n if (this.operators.some(op => op.value === val)) {\n return { type: 'dropdown', value: val };\n } else {\n return {\n type: 'lookup',\n value: this.getLookupByCode(val)\n };\n }\n });\n } else {\n this.items = [{ type: 'lookup', value: null }];\n }\n\n }\n\n getLookupByCode(code: string): any {\n return { code: code, id: 1, englishName: code, arabicName: code }\n }\n\n onLookupChange(index: number, value: any) {\n this.items[index].value = value;\n\n if (index === this.items.length - 1) {\n this.items.push({ type: 'dropdown', value: null});\n }\n\n this.emitChange();\n }\n\n onDropdownChange(index: number, value: any) {\n this.items[index].value = value;\n\n if (index !== this.items.length - 1) {\n this.emitChange();\n return;\n }\n\n if (value === '=') {\n this.items = this.items.slice(0, index + 1);\n } else if (value != null && value !== '') {\n const lastItem = this.items[this.items.length - 1];\n if (lastItem.type !== 'lookup') {\n this.items.push({ type: 'lookup', value: null });\n }\n }\n\n this.emitChange();\n }\n\n emitChange() {\n const simplifiedItems = this.items.map(item => {\n if (item?.type === 'lookup') {\n return item.value?.code ?? null;\n } else if (item?.type === 'dropdown') {\n return item.value ?? null;\n }\n return null;\n });\n const isValid = simplifiedItems[simplifiedItems.length - 1] === '=';\n\n this.valueChanged.emit({\n value: simplifiedItems.filter(val => val !== '='),\n valid: isValid\n });\n }\n\n onClearAll(): void {\n this.items = [{ type: 'lookup', value: null }];\n this.emitChange();\n }\n\n\n}\n","<div class=\"flex-row gap-10 fill align-start-center\">\n <ng-container *ngFor=\"let item of items; let i = index\">\n <div class=\"flex-row align-start-center gap-5\">\n <ng-container [ngSwitch]=\"item.type\">\n <ng-container *ngSwitchCase=\"'lookup'\">\n <app-auto-complete\n class=\"flex-full\"\n [field]=\"field\"\n [form]=\"form\"\n [defaultValue]=\"item.value\"\n (selectedValue)=\"onLookupChange(i, $event)\">\n </app-auto-complete>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <mat-form-field class=\"flex-none\" appearance=\"outline\" style=\"width: 100px\">\n <mat-label>{{ 'BASE_TABLE.equationOperator' | translate }}</mat-label>\n <mat-select [disabled]=\"readOnly\" [value]=\"item.value\" (selectionChange)=\"onDropdownChange(i, $event.value)\">\n <mat-option *ngFor=\"let opt of operators\" [value]=\"opt.value\">\n {{ opt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <button\n [disabled]=\"isPending\"\n mat-icon-button\n type=\"button\"\n color=\"warn\"\n (click)=\"onClearAll()\"\n *ngIf=\"items.length > 0\"\n id=\"equation-clear-all-btn\"\n [attr.aria-label]=\"'BASE_TABLE.clearEquation' | translate\">\n <mat-icon aria-hidden=\"true\">delete</mat-icon>\n </button>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from \"@angular/core\";\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatSortModule} from \"@angular/material/sort\";\nimport {NgClass, NgForOf, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {NgxPaginationModule} from \"ngx-pagination\";\nimport {Router} from \"@angular/router\";\nimport {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {MatError, MatFormField, MatInput, MatLabel, MatSuffix} from \"@angular/material/input\";\nimport {BackendService} from \"../../services\";\nimport {\n BaseUtils,\n buildFormFields,\n getNegativeWfActionKey,\n getPositiveWfActionKey,\n getWfActionId\n} from \"../../utils/base-utils\";\nimport {\n EMPTY_PAGE_INFO,\n FieldInfo,\n Filter,\n FilterRequest,\n LookupItem,\n PageInfo,\n SELECT_RECORD_ACTION,\n SnackMessage,\n TableColumn\n} from \"../../base-model\";\nimport {DoActionRequest, REJECT, SAVE} from \"../../base-model/do-action-request\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from \"@angular/material/datepicker\";\nimport moment, {Moment} from 'moment';\nimport {AutoCompleteComponent} from \"../auto-complete/auto-complete.component\";\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOption} from \"@angular/material/core\";\nimport {MatChipListbox, MatChipOption} from \"@angular/material/chips\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {PaginatorComponent} from \"../paginator/paginator.component\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {AttachmentUploaderComponent} from \"../shared/attachment-uploader/attachment-uploader.component\";\nimport {EquationBuilderComponent} from \"../equation-builder/equation-builder.component\";\nimport {MatSelect} from \"@angular/material/select\";\n\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\n@Component({\n selector: 'app-editable-base-table',\n standalone: true,\n templateUrl: './editable-base-table.component.html',\n styleUrls: ['./editable-base-table.component.scss'],\n animations: [],\n imports: [\n NgClass,\n TranslateModule,\n MatIcon,\n MatSortModule,\n MatColumnDef,\n MatHeaderCellDef,\n NgIf,\n MatTable,\n MatHeaderCell,\n NgSwitch,\n MatButtonModule,\n MatCell,\n MatCellDef,\n NgxPaginationModule,\n MatRow,\n MatRowDef,\n MatHeaderRow,\n NgSwitchCase,\n NgSwitchDefault,\n MatHeaderRowDef,\n NgForOf,\n MatButton,\n ReactiveFormsModule,\n MatInput,\n AutoCompleteComponent,\n MatFormField,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatLabel,\n MatSuffix,\n MatChipListbox,\n MatChipOption,\n TitleBarComponent,\n PaginatorComponent,\n AttachmentUploaderComponent,\n EquationBuilderComponent,\n MatSelect,\n MatOption,\n BaseFormCanvasComponent,\n MatCheckbox,\n ],\n providers: [\n // `MomentDateAdapter` can be automatically provided by importing `MomentDateModule` in your\n // application's root module. We provide it at the component level here, due to limitations of\n // our example generation script.\n // {\n // provide: DateAdapter,\n // useClass: MomentDateAdapter,\n // deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n // },\n\n // { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\n\nexport class EditableBaseTableComponent extends BaseUtils implements OnInit, OnChanges {\n\n readonly minDate = moment([1800, 0, 1]);\n\n collection = {count: 60, data: []};\n config = {\n itemsPerPage: 10,\n currentPage: 1,\n totalItems: this.collection.count\n };\n public maxSize: number = 7;\n public directionLinks: boolean = true;\n public autoHide: boolean = false;\n public responsive: boolean = true;\n public labels: any = {\n previousLabel: '<',\n nextLabel: '>',\n screenReaderPaginationLabel: 'Pagination',\n screenReaderPageLabel: 'page',\n screenReaderCurrentLabel: `You're on page`\n };\n\n private timer: any;\n dataElements: any[] = [];\n noDataFound = false;\n isLoaded: boolean = false;\n totalElements = 0;\n pagesCount = 0;\n pageIndex = 1;\n pageSize = 10;\n formParam: FormGroup;\n searchForm: FormGroup;\n\n @Input()\n filterRequest: FilterRequest;\n\n @Input()\n superDataElements: any[];\n\n @Input()\n override pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n @Input() //@ts-ignore\n enforceRefresh: boolean = false;\n\n @Input()\n isPending: boolean = false;\n\n @Input()\n isBulkItemsSupported: boolean = false;\n\n @Input()// @ts-ignore\n public fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n public searchFormFields: FieldInfo[] = [];\n\n @Input() translationKey: string = 'addNew';\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n saveActionEmitter: EventEmitter<any> = new EventEmitter<any>();\n @Output()\n saveAttachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() actionRequestCallback!: (actionRequest: DoActionRequest) => DoActionRequest;\n\n @ViewChild('uploader') uploaderComponent!: AttachmentUploaderComponent;\n\n currentDirection: 'ltr' | 'rtl';\n selectedFileFromUploader: File | null = null;\n private selectedItem: any;\n\n\n constructor(\n private backendService: BackendService,\n private router: Router,\n private fb: FormBuilder,\n public dialog: MatDialog,\n private directionality: Directionality\n ) {\n super();\n }\n\n get dataFormArray(): FormArray {\n return this.formParam.get('dataFormArray') as FormArray;\n }\n\n extractFormat(column: TableColumn<any>) {\n return column?.format || 'd/M/yyyy, h:mm a';\n }\n\n get dataSource() {\n return this.dataFormArray.value;\n }\n\n ngOnInit(): void {\n\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n if(this.superDataElements?.length>0){\n this.dataElements=this.superDataElements;\n this.buildForm();\n this.isLoaded = true;\n }else {\n this.loadData();\n }\n }\n\n private loadData() {\n this.fields.forEach(field => field.readonly = this.isPending);\n\n this.dataElements = [];\n this.totalElements = 0;\n this.pagesCount = 1;\n this.pageIndex = 1;\n this.noDataFound = true;\n this.isLoaded = true;\n\n this.filterRequest.pendingPage = this.isPending;\n\n if (!this.pageInfo.lazyLoadData) {\n this.backendService.getItemsByFilter(this.filterRequest, this.pageInfo.apiUri)\n .subscribe(resp => {\n this.dataElements = resp.body || [];\n this.totalElements = resp.totalSize || 0;\n this.pagesCount = Math.max(Math.ceil(this.totalElements / this.pageSize), 1);\n this.pageIndex = (this.filterRequest.pageIndex || 0) + 1;\n this.noDataFound = this.dataElements.length === 0;\n this.isLoaded = true;\n });\n }\n\n this.buildForm();\n }\n\n private buildForm() {\n this.formParam = this.fb.group({\n dataFormArray: this.fb.array(this.dataElements.map(item => this.fb.group(buildFormFields(this.fields, item)))),\n });\n this.formUpdated.next(this.formParam);\n }\n\n onPageChange(event: number) {\n this.pageIndex = event;\n this.getNext(this.pageIndex - 1);\n }\n getNext(pageIndex: number) {\n this.filterRequest.pageIndex = pageIndex;\n this.filterRequest.pageSize = this.pageSize;\n this.loadData();\n }\n\n onPageSizeChange(event: number) {\n this.pageSize = event;\n this.pageIndex = 1;\n this.filterRequest.pageSize = this.pageSize;\n this.getNext(0);\n }\n\n\n extractFieldName(element: any, property: string) {\n if (property.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n }\n\n get visibleColumns() {\n return this.fields.filter(column => column.visible).map(column => column.property);\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"enforceRefresh\"] && !changes[\"enforceRefresh\"].isFirstChange() && changes[\"enforceRefresh\"].currentValue === true) {\n // this.loadData();\n }\n }\n\n onSelectItem(row: any) {\n if (this.pageInfo.selfRouting) {\n const mode = this.isPending ? 'pending' : 'view';\n const url = `${this.pageInfo.listRoutePath || this.router.url}/${mode}`;\n this.router.navigate([`${url}`, row?.id]);\n }\n const action = SELECT_RECORD_ACTION;\n action.id = row?.id;\n // this.userAction.emit(action)\n this.selectedItem = row;\n }\n\n openNewTab(row) {\n if (!this.pageInfo.embededTableOnly) {\n const mode = this.isPending ? 'pending' : 'view';\n window.open(`${this.pageInfo.listRoutePath}/${mode}` + '/' + row?.id);\n }\n }\n\n\n getField(element, column: FieldInfo) {\n return element.controls[column.property];\n }\n\n fieldButtonEvent(column, element, actionId: number) {\n this.doSaveApproveAction(element, actionId);\n }\n\n patchLookupValue($event: LookupItem, property: string) {\n this.formUpdated.emit(this.selectedItem)\n }\n\n addNewItem() {\n const currentValues = this.formParam?.get('dataFormArray')?.value;\n if (currentValues) {\n this.dataElements = [...currentValues];\n }\n this.dataElements.push({});\n this.buildForm();\n }\n\n\n doSaveApproveAction(element, userActionId) {\n let actionId = getWfActionId(element.value.stateType);\n if (userActionId === REJECT && this.isPending) {\n actionId =3\n }\n let request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = element.value;\n\n if (this.actionRequestCallback) {\n request = this.actionRequestCallback(request);\n if (request.subject.id === \"\") {\n request.subject.id = null;\n request.subject.stateType = \"NEW\";\n }\n }\n\n if (request.subject.id === \"\") {\n request.subject.id = null;\n request.subject.stateType = \"NEW\";\n }\n\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: userActionId === 2 ? 'save' : 'reject', isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n if (resp.valid) {\n this.loadData();\n let message = '';\n if (actionId === 1 ) {\n message = 'saved_successfully' ;\n } else if (actionId ===2 ) {\n message = 'updated_successfully';\n } else if (actionId ===3 ) {\n message = 'successful_reject_message';\n } else if (actionId ===4 ) {\n message = 'approve_successfully';\n }\n this.backendService.topPanelMessage$.next(new SnackMessage(message, true, 'success'));\n }else {\n const x = resp.message?.length >0 ? resp.message[0].errorMessage : 'FAILED_CONTACT_ADMIN';\n this.backendService.topPanelMessage$.next(new SnackMessage(x, true, 'error'));\n }\n this.saveActionEmitter.emit({item:request.subject, resp});\n });\n }\n });\n }\n protected readonly getPositiveWfActionKey = getPositiveWfActionKey;\n protected readonly getNegativeWfActionKey = getNegativeWfActionKey;\n protected readonly SAVE = SAVE;\n protected readonly REJECT = REJECT;\n\n\n setMonthAndYear(normalizedMonthAndYear: Moment, picker: MatDatepicker<Moment>, element, column) {\n const date = new FormControl(moment());\n const ctrlValue = date.value;\n ctrlValue.year(normalizedMonthAndYear.year());\n ctrlValue.month(1);\n ctrlValue.dayOfYear(1);\n element.controls[column.property].setValue(ctrlValue);\n picker.close();\n }\n\n switchViewMode(b: boolean) {\n this.isPending = b;\n this.loadData();\n }\n\n onChipSelectionChange(event: any, listbox?: MatChipListbox): void {\n const value = event.value;\n if (value !== 'COMPLETED' && value !== 'PENDING') {\n setTimeout(() => listbox && (listbox.value = this.isPending ? 'PENDING' : 'COMPLETED'));\n return;\n }\n const isPending = value === 'PENDING';\n if (this.isPending !== isPending) this.switchViewMode(isPending);\n }\n\n addBulkItems() {\n const merged: any[] = [];\n\n this.dataFormArray.controls.forEach((group: AbstractControl) => {\n merged.push(group.value);\n });\n\n let request = new DoActionRequest();\n request.actionId = 1;\n\n request.subject = { invoices: merged };\n\n if (this.actionRequestCallback) {\n request = this.actionRequestCallback(request);\n\n request.subject.invoices = request.subject.invoices.map((item: any) => {\n if (item.id === \"\") {\n item.id = null;\n item.stateType = \"NEW\";\n }\n return item;\n });\n }\n\n request.subject.invoices = request.subject.invoices.map((item: any) => {\n if (item.id === \"\") {\n item.id = null;\n item.stateType = \"NEW\";\n }\n return item;\n });\n\n\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'save' , isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachment(request, this.selectedFileFromUploader, this.pageInfo!).subscribe(resp => {\n if (resp.valid) {\n this.clearBulkItems();\n this.backendService.topPanelMessage$.next(new SnackMessage('saved_successfully', true, 'success'));\n this.loadData();\n }else {\n this.backendService.topPanelMessage$.next(new SnackMessage(this.pageInfo.labelsSection + '.' + resp.message?.[0]?.errorCode, true, 'error'));\n }\n this.saveAttachmentEmitter.emit({item:request.subject, resp});\n });\n }\n }); }\n\n @ViewChild('fileUpload') fileUpload: ElementRef<HTMLInputElement>;\n\n handleFileUpload($event: File) {\n let actionId = getWfActionId('NEW');\n let request = new DoActionRequest();\n request.actionId = actionId;\n\n this.selectedFileFromUploader = $event;\n\n }\n\n shouldDisableBulkAdd() {\n const hasFile = !!this.selectedFileFromUploader;\n return (!this.formParam?.valid || this.dataFormArray.controls.length === 0) && !hasFile;\n }\n handleEquationChange(event: { value: any[], valid: boolean }, element: FormGroup, column: any): void {\n element.value[column.property] = event.value;\n const { value, valid } = event;\n element.get(column.property)?.setValue(value);\n if (!valid) {\n element.get(column.property)?.setErrors({ invalidEquation: true });\n } else {\n element.get(column.property)?.setErrors(null);\n }\n }\n\n clearBulkItems() {\n this.dataElements = [];\n this.selectedFileFromUploader = null;\n this.uploaderComponent.clearFile();\n this.buildForm();\n this.formUpdated.emit(this.formParam);\n }\n\n hasDataToClear(): boolean {\n return (this.dataElements && this.dataElements.length > 0) || !!this.selectedFileFromUploader;\n }\ngetOptionValue(item: any) {\n const value = typeof item === 'object' ?\n item.englishName : item;\n return value;\n }\n\n disabledSaveButton(element) {\n return !element.valid || (!this.isPending && element.value.stateType == 'PENDING');\n }\n\n doSearch() {\n if (this.searchForm.valid) {\n const rawValues = this.searchForm.getRawValue();\n this.filterRequest.pageIndex=0;\n this.filterRequest.filters = [];\n this.searchFormFields.forEach(x => {\n const value = rawValues[x.property];\n if (value !== null && value !== undefined && value !== '') {\n const filter = new Filter({\n key: 0,\n label: x.property,\n fieldName: x.searchAttribute,\n valueObject : x.searchAttribute.includes('.') ? value[x.searchAttribute.split('.').pop()] : value,\n operator: x.searchOperator,\n filterType: 'FILED_FILTER'\n });\n this.filterRequest.filters.push(filter);\n }\n });\n this.loadData();\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_SEARCH_FORM', true, 'error'));\n }\n }\n\n showSearch() {\n return this.searchFormFields?.length > 0;\n }\n\n clearSearch() {\n this.searchForm.get('sectorType').setValue({id:-100, englishName:'aaa', code:'aaa', arabicName:'aaa'});\n this.searchForm.reset();\n this.doSearch();\n }\n\n updateSearchForm($event: FormGroup) {\n this.searchForm = $event\n }\n\n validSearchData() {\n return !this.searchForm.valid || true;\n }\n\n}\n","<div class=\"baseTable flex-column\">\n <div class=\"left-align\">\n <app-attachment-uploader #uploader\n *ngIf=\"isBulkItemsSupported\"\n (fileSelected)=\"handleFileUpload($event)\">\n </app-attachment-uploader>\n </div>\n\n <div class=\"flex-row full-width\">\n <div class=\"flex-half flex-column align-center-start\">\n <app-title-bar [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [titleMode]=\"''\"\n [newAction]=\"false\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\">\n </app-title-bar>\n <span class=\"font-small\">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>\n </div>\n <div class=\"flex-half flex-column align-start-end\">\n <mat-chip-listbox #box [attr.aria-label]=\"'BASE_TABLE.documentStatus' | translate\" [multiple]=\"false\" [value]=\"isPending ? 'PENDING' : 'COMPLETED'\" (click)=\"$event.stopPropagation()\" (change)=\"onChipSelectionChange($event, box)\" *ngIf=\"pageInfo.draftSupported\">\n <mat-chip-option [selected]=\"!isPending\" [color]=\"'accent'\" value=\"COMPLETED\" (click)=\"$event.stopPropagation()\">\n {{ 'finished' | translate }}\n </mat-chip-option>\n <mat-chip-option [selected]=\"isPending\" [color]=\"'accent'\" value=\"PENDING\" (click)=\"$event.stopPropagation()\">\n {{ 'todo' | translate }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"showSearch()\">\n <div class=\"flex-row full-width\">\n <div class=\"flex-80 flex-column align-start-end\">\n <app-base-form-canvas class=\"flex-fill\"\n [pageInfo]=\"pageInfo\"\n [fields]=\"searchFormFields\"\n [editable]=\"true\"\n (formUpdated)=\"updateSearchForm($event)\">\n </app-base-form-canvas>\n </div>\n <div class=\"flex-15 flex-column align-start-end\">\n <div class=\"flex-row align-center-center gap-8 full-width\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"doSearch()\" id=\"editable-search-btn\">\n <mat-icon>search</mat-icon>\n {{ 'search' | translate }}\n </button>\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearSearch()\" id=\"editable-clear-search-btn\">\n <mat-icon>clear</mat-icon>\n {{ 'clear' | translate }}\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"flex-row full-width baseTable__detailsColumn\">\n <div class=\"flex-full\">\n <ng-container *ngIf=\"isLoaded\">\n <div class=\"flex-row mainTable gap-0 align-start-start\">\n <form [formGroup]=\"formParam\" class=\"flex-fill\">\n <table [dataSource]=\"dataFormArray.controls\" class=\"flex-fill\" mat-table matSort>\n <ng-container *ngFor=\"let column of this.fields; let i = index\">\n <ng-container matColumnDef=\"{{column.property}}\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'equation-builder'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\" mat-cell>\n <lib-equation-builder\n [form]=\"element\"\n [field]=\"column\"\n [readOnly]=\"column.readonly\"\n [isPending]=\"isPending\"\n (valueChanged)=\"handleEquationChange($event, element, column)\">\n </lib-equation-builder>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <app-auto-complete\n [form]=\"element\"\n [field]=\"column\"\n [defaultValue]=\"element.get(column.property)?.value\"\n (selectedValue)=\"patchLookupValue($event, column.property)\">\n </app-auto-complete>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'list'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}</th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-label>{{element}}</mat-label>\n <mat-select\n formControlName=\"{{column.property}}\"\n [attr.aria-label]=\"column.label! | translate\"\n [multiple]=\"false\"\n [(value)]=\"element[column.property]\">\n <ng-container>\n <mat-option\n *ngFor=\"let item of column.listOptions\"\n [value]=\"item\">\n {{ getOptionValue(item) }}\n </mat-option>\n </ng-container>\n </mat-select>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'stateType'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ 'action' | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td mainTable__td__text-secondary__td\" mat-cell>\n <div class=\"flex-column\">\n <div class=\"flex-row full-width\">\n <div class=\"flex-third flex-column align-center-center\">\n <button mat-button class=\"btn-none-background-primary\"\n color=\"primary\"\n [disabled]=\"disabledSaveButton(element)\"\n (click)=\"fieldButtonEvent(column,element,SAVE)\"\n [attr.id]=\"'editable-save-' + (element.value?.id || '')\">\n {{ getPositiveWfActionKey(element.value.stateType) | translate }}\n </button>\n </div>\n <div class=\"flex-third flex-column align-center-center\">\n <button *ngIf=\"isPending\" mat-button class=\"btn-none-background-primary\"\n color=\"accent\"\n (click)=\"fieldButtonEvent(column,element,REJECT)\"\n [attr.id]=\"'editable-reject-' + (element.value?.id || '')\">\n {{ getNegativeWfActionKey(element.value.stateType) | translate }}\n </button>\n </div>\n <div class=\"flex-third flex-column align-center-center\"></div>\n </div>\n </div>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <mat-label>{{ labelKey(column) | translate }}</mat-label>\n <input matInput\n [disabled]=\"column.readonly\"\n [readonly]=\"column.readonly\"\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker startView=\"multi-year\"\n (yearSelected)=\"setMonthAndYear($event, picker, element,column)\"\n panelClass=\"example-month-picker\"></mat-datepicker>\n\n </mat-form-field>\n <!-- <mat-form-field class=\"flex-auto\" appearance=\"outline\" fxFlexFill>-->\n <!-- <input matInput [formControl]=\"getField(element, column)\">-->\n <!-- </mat-form-field>-->\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <!-- Visually hidden label just to trigger the floating label and asterisk -->\n <mat-label>\n </mat-label>\n\n <input matInput\n type=\"number\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'status'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-checkbox\n style=\"padding-bottom: 14px; padding-top: 14px;\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\"\n [style.pointer-events]=\"column.readonly ? 'none' : 'auto'\"\n [style.opacity]=\"column.readonly ? 0.7 : 1\"\n (click)=\"column.readonly ? $event.preventDefault() : null\">\n </mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'text'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <mat-label>\n {{ labelKey(column) | translate }}\n </mat-label>\n <input matInput\n type=\"text\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <input matInput\n [matDatepicker]=\"xpicker\"\n [min]=\"minDate\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [disabled]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"xpicker\"\n [disabled]=\"column.readonly\">\n </mat-datepicker-toggle>\n <mat-datepicker #xpicker></mat-datepicker>\n </mat-form-field>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <input matInput\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [formControl]=\"getField(element, column)\">\n </mat-form-field>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <tr *matHeaderRowDef=\"visibleColumns\" mat-header-row></tr>\n <tr (click)=\"onSelectItem(row)\" (auxclick)=\"openNewTab(row)\"\n *matRowDef=\"let row; columns: visibleColumns | paginate:config\"\n [attr.id]=\"'editable-row-' + (row?.value?.id || row?.value?.key || '')\"\n mat-row></tr>\n </table>\n </form>\n </div>\n\n <div *ngIf=\"noDataFound && !pageInfo.lazyLoadData\" class=\"flex-row dataNotFound\">\n <div class=\"flex-column flex-full\">\n <span class=\"dataNotFound__details\">\n <mat-icon class=\"dataNotFound__details__icon\">info</mat-icon>\n <span>{{ 'dataNotFound' | translate }}</span>\n </span>\n </div>\n </div>\n\n <div class=\"flex-row mainTable\" *ngIf=\"!selectedFileFromUploader\">\n <div>\n <button *ngIf=\"!isPending && pageInfo.hasAddButton\" mat-button color=\"primary\" type=\"button\"\n (click)=\"addNewItem()\" id=\"editable-add-item-btn\">\n <mat-icon>add_box</mat-icon>\n {{ translationKey | translate }}\n </button>\n </div>\n </div>\n\n <div class=\"flex-row flex-wrap align-center-center main-pagination\" *ngIf=\"totalElements > 0\">\n <div class=\"flex-column flex-full\">\n <app-paginator [currentPage]=\"pageIndex\" [totalItems]=\"totalElements\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\" (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"></app-paginator>\n </div>\n <div class=\"flex-column flex-full countItem hide-gt-xs\">\n <span class=\"countItem__totalElement\">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>\n </div>\n <div class=\"flex-column flex-2\"></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div *ngIf=\"isBulkItemsSupported\" class=\"flex-row gap-10 align-start-start mainTable\">\n <div>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addBulkItems()\" [disabled]=\"shouldDisableBulkAdd()\" id=\"editable-bulk-add-btn\">\n <mat-icon>add_box</mat-icon>\n {{ 'addAll' | translate }}\n </button>\n </div>\n <div>\n <button mat-flat-button color=\"warn\" type=\"button\" [disabled]=\"!hasDataToClear()\" (click)=\"clearBulkItems()\" id=\"editable-bulk-clear-btn\">\n <mat-icon>delete</mat-icon>\n {{ 'clearAll' | translate }}\n </button>\n </div>\n </div>\n</div>\n","import {Component, OnInit} from '@angular/core';\nimport {ActivatedRoute} from \"@angular/router\";\nimport {NgIf} from \"@angular/common\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {ButtonActionSettings, EMPTY_PAGE_INFO, FieldInfo, FilterRequest, PageInfo, TableColumn} from \"../../base-model\";\nimport {Filter} from \"../../base-model\";\nimport {EditableBaseTableComponent} from \"../editable-base-table/editable-base-table.component\";\n\n@Component({\n selector: 'app-shared-list',\n standalone: true,\n imports: [\n BaseTableComponent,\n NgIf,\n EditableBaseTableComponent\n ],\n templateUrl: './shared-list.component.html',\n styleUrls:[ './shared-list.component.css']\n})\nexport class SharedListComponent implements OnInit {\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n columnsDefinition: TableColumn<any>[] = [];\n fields: FieldInfo[] = [];\n filters: Filter[] = [];\n readyToLoad: boolean = false;\n isPending: boolean = false;\n listAction: ButtonActionSettings[] = [];\n editableTable : boolean = false;\n filterRequest: FilterRequest = new FilterRequest();\n constructor(private activatedRoute: ActivatedRoute) { }\n\n ngOnInit(): void {\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.columnsDefinition = data[\"columnsDefinition\"];\n this.filters = data[\"filters\"] || [];\n\n this.isPending = 'pending' === data[\"mode\"];\n this.listAction = data['actions'];\n this.editableTable = data['editableTable'] || false;\n this.fields = data['fields'];\n\n this.filterRequest = new FilterRequest();\n this.filterRequest.columns = this.fields?.filter(c => c.type !== 'button').map(c => c.property) || [];\n this.filterRequest.filters = this.filters;\n\n this.readyToLoad = true;\n\n });\n }\n\n\n}\n","<ng-container *ngIf=\"readyToLoad\">\n @if (editableTable) {\n <app-editable-base-table [filterRequest]=\"filterRequest\" [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [isPending]=\"isPending\"\n ></app-editable-base-table>\n\n } @else {\n\n <app-base-table [filters]=\"filters\" [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [listAction]=\"listAction\"\n [isPending]=\"isPending\"\n ></app-base-table>\n\n }\n</ng-container>\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FieldInfo, Filter, FilterRequest, NEW, PageInfo, SAVE_AND_COMPLETE, SnackMessage} from \"../../base-model\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services\";\nimport {FormGroup} from \"@angular/forms\";\nimport {Location, NgIf} from \"@angular/common\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DoActionRequest, SAVE} from \"../../base-model/do-action-request\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {BaseUtils, getNegativeWfActionKey, getPositiveWfActionKey, getWfActionId} from \"../../utils/base-utils\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {AuditLogComponent} from \"../audit-log-list/audit-log.component\";\nimport {Directionality} from \"@angular/cdk/bidi\";\n\n@Component({\n selector: 'app-base-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatButtonModule,\n TranslateModule,\n NgIf,\n MatIconModule,\n MatButton,\n AuditLogComponent\n ],\n templateUrl: './base-form.component.html',\n styleUrl: './base-form.component.scss'\n})\nexport class BaseFormComponent extends BaseUtils implements OnInit, OnChanges {\n\n @Input()\n override pageInfo!: PageInfo;\n\n @Input()// @ts-ignore\n fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n errors: FieldMessage[] = [];\n\n @Input()\n editable: boolean = false;\n\n @Input()\n itemId: number;\n\n @Output()\n actionResultEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n itemLoaded: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n extraAction: EventEmitter<any> = new EventEmitter<any>();\n\n item : any = {};\n isLoaded : boolean = false;\n\n @Output()\n hyperTextEvent: EventEmitter<boolean> = new EventEmitter();\n\n currentDirection: 'ltr' | 'rtl';\n isSaveDisabled: boolean = true;\n isRejectDisabled: boolean = true;\n\n @Input()\n hideBackButton: boolean = true;\n protected readonly SAVE = SAVE;\n private isPending: boolean;\n\n constructor(public dialog: MatDialog,\n private activatedRoute: ActivatedRoute,\n private router:Router,\n private directionality: Directionality,\n private location:Location,\n @Inject('securityManager') private securityManager: any,\n public backendService: BackendService) {\n super();\n }\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n // console.log('editable', this.editable)\n this.securityManager.loadPermissions().subscribe(x => {\n console.log(\"before edit\", this.editable);\n this.loadItem();\n console.log(\"after edit\", this.editable);\n });\n }\n\n ngOnChanges({item, errors, fields}: SimpleChanges): void {\n }\n\n isValid() {\n return this.backendService.parentForm?.valid;\n }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n private loadItem() {\n this.editable = false;\n\n const modeEncrypted = this.activatedRoute.snapshot.queryParams['mode'];\n this.isPending = !!modeEncrypted && this.backendService.decrypt(modeEncrypted) === 'pending';\n\n if (this.activatedRoute.snapshot.queryParams['token'] && this.activatedRoute.snapshot.queryParams['mode']) {\n this.itemId = this.backendService.decrypt(this.activatedRoute.snapshot.queryParams['token']);\n } else {\n // console.log(' ****** ****** ****** ****** error in url ')\n }\n if (this.itemId > 0) {\n const filterRequest = new FilterRequest;\n filterRequest.columns = this.fields.filter(c => c.type !== 'spacer').map(c => c.property);\n filterRequest.pendingPage = this.isPending;\n\n filterRequest.filters = [];\n filterRequest.filters.push(new Filter({\n key: 0,\n fieldType: 'Long',\n fieldName: 'id',\n valueObject: this.itemId,\n filterType: 'FILED_FILTER',\n operator: 'EQUALS'\n }));\n ///audit-log\n this.backendService.getItemAuditLog(filterRequest, this.pageInfo!.apiUri).subscribe(resp => {\n // console.log('resp', resp);\n });\n this.backendService.getItemsByFilter(filterRequest, this.pageInfo!.apiUri).subscribe(resp => {\n if (resp?.valid && resp.body?.length >= 0) {\n this.item = resp.body[0];\n this.editable = (!this.pageInfo.draftSupported || !this.isPending) && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT')\n && (!this.pageInfo.draftSupported ||this.item['stateType'] === 'COMPLETED' );\n this.itemLoaded.emit(this.item);\n this.isLoaded = true;\n }\n });\n } else {\n this.editable = this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT');\n this.item = {};\n this.itemLoaded.emit(this.item);\n this.isLoaded = true;\n }\n\n }\n\n buildDoActionSubject(): any {\n const newVar = this.editable ? Object.assign(this.item, this.backendService.parentForm.value) : this.item;\n if (this.itemId <= 0 && this.editable ) {\n //TODO this is like a hack and must be handled from backend\n newVar['stateType'] = 'NEW';\n }\n this.fields.forEach(field => {\n if (field.flattenBySubAttribute){\n newVar[field.property] = newVar[field.property][field.flattenBySubAttribute]\n }\n })\n if (!this.pageInfo.draftSupported){\n newVar['status'] = true;\n }\n return newVar;\n }\n\n\n doSaveApproveAction() {\n let actionId = getWfActionId(this.item.stateType);\n if (this.itemId <= 0 && this.editable ) {\n actionId = NEW\n }\n if (!this.pageInfo.draftSupported) {\n actionId = SAVE_AND_COMPLETE\n }\n if (this.editable && this.backendService.parentForm.valid !== true) {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_INPUT_FORM', true, 'error'));\n return;\n }\n const request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = this.buildDoActionSubject();\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'save', isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n console.log('step',actionId);\n this.actionResultEmitter.emit({ valid: resp.valid, actionId: actionId });\n if (resp.valid ) {\n let message = 'approve_successfully';\n switch (actionId) {\n case 1:\n message = 'saved_successfully';\n break;\n case 2:\n message = 'updated_successfully';\n break;\n default:\n message = 'approve_successfully';\n }\n this.backendService.topPanelMessage$.next(new SnackMessage(message, true, 'success'));\n if(!this.pageInfo.stayOnPage){\n this.backToParent();\n }\n }\n else{\n request.subject['stateType'] = null;\n if (resp.message[0].errorMessage.toLowerCase().includes('duplic'))\n this.backendService.topPanelMessage$.next(new SnackMessage(this.pageInfo.labelsSection + '.' + resp.message[0].errorCode, true, 'error'));\n }\n });\n }\n });\n }\n\n backToParent() {\n const idIdx = this.router.url.lastIndexOf('/');\n this.router.navigateByUrl(this.router.url.substring(0, idIdx));\n }\n\n\n getTitle() {\n return `${this.pageInfo.labelsSection}.${this.pageInfo.id}` ;\n }\n\n updateForm($event: FormGroup) {\n this.backendService.parentForm = $event;\n this.formUpdated.emit($event);\n }\n\n doCancelRejectAction() {\n if (!this.editable){\n let actionId = 3;\n // console.log('actionId',actionId);\n const request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = this.buildDoActionSubject();\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'reject', acceptActionLabel: 'accept', rejectActionLabel: 'return'},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n this.actionResultEmitter.emit({ valid: resp.valid, actionId: actionId });\n if (resp.valid) {\n this.backendService.topPanelMessage$.next(new SnackMessage('successful_reject_message', true, 'success'));\n if(!this.pageInfo.stayOnPage){\n this.backToParent();\n }\n }\n });\n }\n });\n }\n else {\n this.location.back()\n }\n }\n\n hasWfPermission() {\n return (this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT')\n || this.securityManager.hasPagePermission(this.pageInfo.id, 'COMPLETE')\n || this.securityManager.hasPagePermission(this.pageInfo.id, 'TERMINATE'))\n }\n\n protected readonly getPositiveWfActionKey = getPositiveWfActionKey;\n protected readonly getNegativeWfActionKey = getNegativeWfActionKey;\n\n hasWfPositivePermission() {\n return (!this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'COMPLETE')) ||\n (this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT'))\n }\n\n hasWfNegativePermission() {\n return (!this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'TERMINATE')) ||\n (this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT'))\n }\n\n doExtraAction() {\n this.extraAction.emit()\n }\n disabledSaveButton(element) {\n return (!this.isPending && element.stateType == 'PENDING') && this.pageInfo.draftSupported ;\n }\n\n}\n","<div class=\"page-container\">\n\n <div class=\"row full-width mt-2vh\">\n <div class=\"column full-width\">\n <app-title-bar\n [pageTitle]=\"getTitle()\"\n [newAction]=\"false\"\n [hideBackButton]=\"hideBackButton\">\n </app-title-bar>\n </div>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editable\"\n [errors]=\"errors\"\n [item]=\"item\"\n (formUpdated)=\"updateForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-49\">\n <div class=\"row row-center-start\">\n <button *ngIf=\"hasWfPositivePermission()\" color=\"primary\" mat-flat-button\n (click)=\"doSaveApproveAction()\"\n [disabled]=\"disabledSaveButton(item)\"\n class=\"action-button\"\n id=\"base-form-positive-btn\">\n {{ getPositiveWfActionKey(item?.stateType) | translate }}\n </button>\n <button *ngIf=\"hasWfNegativePermission()\" color=\"second\" mat-raised-button\n (click)=\"doCancelRejectAction()\"\n [disabled]=\"disabledSaveButton(item)\"\n class=\"action-button\"\n id=\"base-form-negative-btn\">\n {{ getNegativeWfActionKey(item?.stateType) | translate }}\n </button>\n <button *ngIf=\"pageInfo.hideExtractButton === false && itemId > 0 && editable\" color=\"primary\" mat-raised-button\n (click)=\"doExtraAction()\"\n class=\"action-button\"\n id=\"base-form-extra-btn\">\n {{ pageInfo.labelsSection + \".\" + \"EXTRA_BUTTON_NAME\" | translate }}\n </button>\n </div>\n </div>\n <div class=\"column flex-49\"></div>\n </div>\n\n\n <ng-container *ngIf=\"!pageInfo.hideAuditLog\">\n <div class=\"row main-form-canvas mt-4vh pb-5vh\">\n <div class=\"column flex-95\">\n <app-audit-log [pageInfo]=\"pageInfo\" [fields]=\"fields\"></app-audit-log>\n </div>\n </div>\n </ng-container>\n\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {ButtonActionSettings, FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseFormComponent} from \"../base-form/base-form.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {NgForOf, NgIf, NgClass} from \"@angular/common\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {FormGroup} from \"@angular/forms\";\nimport {\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelDescription,\n MatExpansionPanelTitle\n} from \"@angular/material/expansion\";\nimport {MatMenu, MatMenuTrigger, MatMenuItem} from \"@angular/material/menu\";\n\n@Component({\n selector: 'lib-section-form-canvas',\n standalone: true,\n imports: [\n MatIcon,\n MatButton,\n BaseFormComponent,\n BaseFormCanvasComponent,\n NgIf,\n NgClass,\n TranslateModule,\n MatExpansionPanel,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelHeader,\n NgForOf,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem\n ],\n templateUrl: './section-form-canvas.component.html',\n styleUrl: './section-form-canvas.component.scss'\n})\nexport class SectionFormCanvasComponent{\n @Input() pageInfo: PageInfo;\n @Input() fields: FieldInfo[];\n @Input() itemId: number;\n @Input() editable: boolean;\n @Input() attachmentsAlwaysEditable?: boolean;\n @Input() hideBackButton: boolean;\n @Input() item: any;\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTranslateTitle: boolean;\n @Input() isTranslateSubtitle: boolean = true;\n @Input() key: number;\n @Input() hideToggle: boolean = true;\n @Input() isExpanded: boolean = true;\n @Input() alwaysOpen: boolean = true;\n @Output() attachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n @Input() expansionHeaderTabIndex: number = -1;\n @Output() actionEdit: EventEmitter<any> = new EventEmitter();\n @Output() formEdit: EventEmitter<FormGroup> = new EventEmitter();\n @Input() buttons: ButtonActionSettings[] = [];\n @Input() itemStatus: string;\n @Output() buttonClicked = new EventEmitter<any>();\n\n formUpdated($event) {\n this.formEdit.emit($event);\n\n }\n\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n onPanelHeaderChildKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n }\n\n onButtonClick(btn: ButtonActionSettings, sectionKey: number): void {\n this.buttonClicked.emit({...btn , sectionKey: sectionKey});\n }\n\n getDownloadButton(): ButtonActionSettings | undefined {\n return this.buttons.find(btn => btn.id === 'download');\n }\n\n getMenuButtons(): ButtonActionSettings[] {\n return this.buttons.filter(btn => btn.id !== 'download');\n }\n\n attachmentHandler($event: any) {\n this.attachmentEmitter.emit($event);\n }\n}\n","<mat-expansion-panel class=\"location-card\"\n #panel=\"matExpansionPanel\"\n [expanded]=\"isExpanded\"\n [hideToggle]=\"hideToggle\"\n (opened)=\"alwaysOpen ? panel.open() : null\"\n (closed)=\"alwaysOpen ? panel.open() : null\">\n <mat-expansion-panel-header\n class=\"card-header\"\n (click)=\"toggleExpand()\"\n [tabIndex]=\"expansionHeaderTabIndex\">\n <mat-panel-title>\n <div class=\"title-container\">\n <h3 class=\"card-title\" *ngIf=\"isTranslateTitle\">\n {{ pageInfo.labelsSection + '.' + title | translate }}\n </h3>\n <h3 class=\"card-title\" *ngIf=\"!isTranslateTitle\">{{ title }}</h3>\n <p class=\"card-subtitle\" *ngIf=\"subtitle\">\n <span *ngIf=\"isTranslateSubtitle\">{{ pageInfo.labelsSection + '.' + subtitle | translate }}</span>\n <span *ngIf=\"!isTranslateSubtitle\">{{ subtitle }}</span>\n </p>\n <button\n mat-button\n *ngIf=\"itemStatus\"\n type=\"button\"\n class=\"stateType\"\n [ngClass]=\"itemStatus\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\">\n {{ pageInfo.labelsSection + '.' + itemStatus | translate }}\n </button>\n </div>\n </mat-panel-title>\n\n <mat-panel-description class=\"panel-description\" *ngIf=\"buttons && buttons.length > 0\">\n <div class=\"row flex-auto buttons-wrapper desktop-buttons\" [class.show-on-mobile]=\"!getDownloadButton()\">\n <button\n mat-flat-button\n *ngFor=\"let btn of buttons\"\n type=\"button\"\n [color]=\"btn.color || 'primary'\"\n (click)=\"onButtonClick(btn , key); $event.stopPropagation()\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-none-background-primary action\"\n [attr.id]=\"btn.id || ('section-btn-' + (btn.action || btn.label || btn.key))\"\n >\n <div class=\"button-text\">\n <mat-icon *ngIf=\"btn.icon\">{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </div>\n </button>\n </div>\n\n <div class=\"mobile-buttons\" *ngIf=\"getDownloadButton()\">\n <button\n mat-flat-button\n type=\"button\"\n color=\"primary\"\n (click)=\"onButtonClick(getDownloadButton()!, key); $event.stopPropagation()\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-download-mobile\"\n [attr.id]=\"getDownloadButton()?.id\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\"\n >\n <mat-icon aria-hidden=\"true\">{{ getDownloadButton()?.icon }}</mat-icon>\n </button>\n <button\n *ngIf=\"getMenuButtons().length > 0\"\n mat-stroked-button\n type=\"button\"\n [matMenuTriggerFor]=\"menu\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-menu-mobile\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let btn of getMenuButtons()\"\n (click)=\"onButtonClick(btn, key); $event.stopPropagation()\"\n [attr.id]=\"btn.id\"\n >\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"panel-body\">\n <hr class=\"divider\"/>\n <ng-content></ng-content>\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editable\"\n [attachmentsAlwaysEditable]=\"attachmentsAlwaysEditable\"\n [item]=\"item\"\n (attachmentEmitter)=\"attachmentHandler($event)\"\n (formUpdated)=\"formUpdated($event)\"\n ></app-base-form-canvas>\n </div>\n</mat-expansion-panel>\n","import {Component, HostListener, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle} from \"@angular/material/dialog\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton} from \"@angular/material/button\";\nimport {FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {MatDivider} from \"@angular/material/divider\";\n\n@Component({\n selector: 'app-audit-log-details-dialog',\n standalone: true,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormsModule,\n TranslateModule,\n MatButton,\n BaseFormCanvasComponent,\n MatDivider\n ],\n templateUrl: './audit-log-details-dialog.component.html',\n styleUrl: './audit-log-details-dialog.component.css'\n})\nexport class AuditLogDetailsDialogComponent implements OnInit {\n pageInfo: PageInfo;\n fields: FieldInfo[] = [];\n\n actionLabel : string =''\n isTermination : boolean=false;\n comment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n warningMsg = false;\n item: any = {};\n constructor(public dialogRef: MatDialogRef<AuditLogDetailsDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.pageInfo = this.data.pageInfo;\n this.fields = this.data.fields;\n\n this.fields = this.data.fields.map((f: any) => ({ ...f }));\n\n const showHiddenFields: string[] = this.data.showHiddenFields || [];\n this.fields.forEach(field => {\n if (showHiddenFields.includes(field.property)) {\n field.visible = true;\n }\n });\n this.item = this.data.item;\n this.comment = this.data.comment;\n this.warningMsg = this.data.warningMsg || false;\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n\n getTitle() {\n return `${this.pageInfo.labelsSection}.${this.pageInfo.id}`;\n }\n}\n","<mat-dialog-content class=\"mat-typography overflow-hidden\">\n <div style=\"'padding': '10px 30px 10px 0'\">\n <h2 mat-dialog-title>{{ getTitle()| translate }}</h2>\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"false\"\n [item]=\"item\"\n ></app-base-form-canvas>\n\n <p>\n <span class=\"invoice-label\">{{ 'audit-log.reason_dialog' | translate }} :</span>\n <span class=\"invoice-label-text\">{{ comment }}</span>\n </p>\n <mat-divider style=\"width: 97%\"></mat-divider>\n <br>\n <button mat-stroked-button color='accent' style=\"margin: 5px\"\n (click)=\"cancel()\" id=\"acceptActionLabel\">\n {{ 'audit-log.close' | translate }}\n </button>\n <br>\n </div>\n</mat-dialog-content>\n","import {AfterViewInit, Component, ElementRef, HostListener, Inject, OnInit} from '@angular/core';\nimport {\n MAT_DIALOG_DATA, MatDialogActions, MatDialogContent,\n MatDialogRef, MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {FieldInfo, PageInfo, ReportRequest, TableColumn} from \"../../base-model\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {BackendService} from \"../../services\";\nimport {MatIcon} from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-audit-log-details-dialog',\n standalone: true,\n imports: [\n FormsModule,\n TranslateModule,\n BaseTableComponent,\n MatDialogContent,\n MatDialogTitle,\n MatIconButton,\n MatIcon\n ],\n templateUrl: './report-details-dialog.component.html',\n styleUrl: './report-details-dialog.component.css'\n})\nexport class ReportDetailsDialogComponent implements OnInit , AfterViewInit{\n dialogDirection: 'ltr' | 'rtl' = 'ltr';\n\n pageInfo: PageInfo;\n fields: FieldInfo[] = [];\n\n isTermination : boolean=false;\n comment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n warningMsg = false;\n item: any = {};\n reportRequest: ReportRequest;\n columns: TableColumn<any>[];\n constructor(public dialogRef: MatDialogRef<ReportDetailsDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private translateService: TranslateService,\n public backendService:BackendService,\n private elRef: ElementRef) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.pageInfo = this.data.pageInfo;\n this.pageInfo.hideTitle = true;\n this.item = this.data.item;\n this.pageInfo.hideExtractButton = false;\n this.columns = this.data.columns;\n this.reportRequest = this.data.request;\n this.warningMsg = this.data.warningMsg || false;\n }\n\n ngAfterViewInit(): void {\n const container = this.elRef.nativeElement.closest('mat-dialog-container');\n if (container && container.getAttribute('dir')) {\n this.dialogDirection = container.getAttribute('dir') as 'ltr' | 'rtl';\n }\n }\n\n cancel() {\n this.reportRequest.filterRequest.filters = [];\n this.backendService.isEmptyItems = false;\n this.dialogRef.close();\n }\n\n @HostListener('document:click', ['$event'])\n onBackdropClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target.classList.contains('cdk-overlay-backdrop')) {\n this.reportRequest.filterRequest.filters = [];\n this.backendService.isEmptyItems = false;\n this.dialogRef.close();\n }\n }\n\n getTitle() {\n if (this.item?.isec_value_ar) {\n const isecLabel = this.translateService.instant('ISEC');\n return `<strong>${isecLabel} ${this.item.isec_value_ar}</strong>`;\n }\n\n const sectorLabel = this.translateService.instant('SECTOR');\n const periodLabel = this.translateService.instant('FOR_PERIOD');\n const directorateLabel = this.translateService.instant('DIRECTORATE');\n\n const sectorText = this.item.sector ? `${sectorLabel} ${this.item.sector}` : '';\n const periodText = this.item.period ? ` ${periodLabel} ${this.item.period}` : '';\n const yearText = this.item.year ? ` - ${this.item.year}` : '';\n const directorateLine = this.item.directorate ? `<br><strong>${directorateLabel} - ${this.item.directorate}</strong>` : '';\n\n const mainLine = (sectorText || periodText || yearText)\n ? `<strong>${[sectorText, periodText, yearText].filter(Boolean).join('')}</strong>`\n : '';\n\n return `${mainLine}${directorateLine}`;\n }\n\n\n\n}\n","<mat-dialog-content style=\"max-height: 70vh; overflow: auto; position: relative;\">\n <button\n mat-icon-button\n type=\"button\"\n class=\"close-button\"\n (click)=\"cancel()\"\n [attr.dir]=\"dialogDirection\"\n id=\"report-details-close-btn\"\n [attr.aria-label]=\"'BASE_TABLE.closeDialog' | translate\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n\n <h1 mat-dialog-title [innerHTML]=\"getTitle()\"></h1>\n\n <app-base-table\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n id=\"junior\"\n [enforceRefresh]=\"true\"\n [reportRequest]=\"reportRequest\">\n </app-base-table>\n</mat-dialog-content>\n\n","import {ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, OnInit, Output} from '@angular/core';\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {EMPTY_PAGE_INFO, PageInfo} from \"../../base-model/page-info\";\nimport {TableColumn} from \"../../base-model/table-column.interface\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FormBuilder, FormGroup} from \"@angular/forms\";\nimport {formatDate, NgForOf, NgIf} from \"@angular/common\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DRILL_DOWN_ACTION, JUNIOR_DOWN_ACTION, SnackMessage, TablePageUserAction} from \"../../base-model\";\nimport {} from \"../audit-log-details-dialog/audit-log-details-dialog.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ReportDetailsDialogComponent} from \"../report-details-dialog/report-details-dialog.component\";\nimport { cloneDeep } from 'lodash';\nimport {MatTooltip} from \"@angular/material/tooltip\";\nimport {Directionality} from \"@angular/cdk/bidi\";\n\n\nconst NON_REPORT_COLUMNS = ['listAction', 'button', 'checkbox'];\n\n@Component({\n selector: 'app-report-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatMenu,\n MatMenuItem,\n NgForOf,\n MatMenuTrigger,\n MatButtonModule,\n TranslateModule,\n BaseTableComponent,\n NgIf,\n MatIconModule,\n MatButton,\n MatTooltip\n ],\n templateUrl: './report-form.component.html',\n styleUrl: './report-form.component.scss'\n})\nexport class ReportFormComponent implements OnInit {\n @Input()\n showDetails : any = [];\n\n @Input()\n showExtractButton: boolean = true;\n\n @Input()\n columns: TableColumn<any>[] =[];\n\n @Input() actionRequestCallback!: (actionRequest: TablePageUserAction) => TablePageUserAction;\n @Input() enrichDrillDownReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichHyperLinkReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichJuniorReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n activeLevel: number = 1;\n\n private filterRequest: FilterRequest;\n x: any;\n isEditable: boolean = true;\n fields: FieldInfo[] = [];\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownPageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownColumns: TableColumn<any>[] = [];\n hideDrillDownButton: false;\n\n juniorPageInfo: PageInfo = EMPTY_PAGE_INFO;\n juniorColumns: TableColumn<any>[] = [];\n\n columnsDefinition: TableColumn<any>[] = [];\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n searchStr: string = '';\n\n errors: FieldMessage[] = [];\n\n reloadData: boolean = false;\n backButtonEnabled: boolean = true;\n\n\n reportRequest: ReportRequest = new ReportRequest({});\n childReportRequest: ReportRequest = new ReportRequest({});\n juniorReportRequest: ReportRequest = new ReportRequest({});\n public reportForm: FormGroup;\n readyToSearch = false;\n private pageSize: any;\n private dialogReportRequest: any;\n currentDirection: 'ltr' | 'rtl';\n\n constructor(private translateService: TranslateService,\n public backendService: BackendService,\n private activatedRoute: ActivatedRoute,\n private injector: Injector,\n private router: Router,\n private route: ActivatedRoute,\n private directionality: Directionality,\n public dialog: MatDialog,\n private fb: FormBuilder) {\n }\n\n disableExportAction : boolean = false;\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.pageSize = this.pageInfo.pageSize ?? 10;\n this.filterRequest = new FilterRequest(this.pageSize);\n data['pageInfo'].lazyLoadData = true;\n this.drillDownPageInfo = data['drillDownPageInfo'];\n this.drillDownColumns = data['drillDownColumns']?.filter(c => c.property !== 'selectItem');\n this.hideDrillDownButton = data['hideDrillDownButton'] ?? false;\n this.juniorPageInfo = data['juniorPageInfo'];\n this.juniorColumns = data['juniorColumns'];\n this.columnsDefinition = data['columnsDefinition'].filter(c => (this.drillDownPageInfo && this.drillDownColumns || (!NON_REPORT_COLUMNS.includes(c.type))));\n this.fields = data['fields'];\n if (data['enrichDrillDownReportRequest']) {\n this.enrichDrillDownReportRequest = data['enrichDrillDownReportRequest'](this.injector);\n }\n if (data['enrichJuniorReportRequest']) {\n this.enrichJuniorReportRequest = data['enrichJuniorReportRequest'](this.injector);\n }\n\n if (data['enrichHyperLinkReportRequest']) {\n this.enrichHyperLinkReportRequest = data['enrichHyperLinkReportRequest'](this.injector);\n }\n });\n this.route.queryParamMap.subscribe(params => {\n const isComparisonReport = params.get('comparisonReport') === 'true';\n\n if (isComparisonReport) {\n const comparisonStr = sessionStorage.getItem('comparisonReportPageInfo');\n\n if (comparisonStr) {\n const comparisonData = JSON.parse(comparisonStr);\n\n this.pageInfo.lazyLoadData = comparisonData.lazyLoadData ?? false;\n this.activeLevel = comparisonData.activeLevel ?? 2;\n this.isEditable = false;\n this.backButtonEnabled = false;\n this.drillDownPageInfo = comparisonData.drillDownPageInfo;\n this.drillDownColumns = comparisonData.drillDownColumns;\n this.reportForm = this.fb.group({\n directorate: [[]],\n fromDate: [''],\n toDate: [''],\n sector: [''],\n });\n\n this.reportForm.patchValue(comparisonData.form)\n this.fields = this.fields.filter(c => c.type !== 'checkbox');\n\n const reportRequest = comparisonData.reportRequest;\n\n this.childReportRequest = this.backendService.buildReportRequest(\n this.drillDownColumns,\n `${this.drillDownPageInfo.labelsSection}.${this.drillDownPageInfo.id}`,\n reportRequest,\n '',\n this.drillDownPageInfo,\n 'LANDSCAPE'\n );\n\n }\n }\n });\n }\n\n\n // ngOnChanges({item, errors, fields}: SimpleChanges): void {\n // // errors?.currentValue?.forEach((msg: FieldMessage) => {\n // // this.backendService.parentForm.get(msg.fieldName)?.setErrors({serverError: msg.message});\n // // });\n // // if (fields?.currentValue && !fields.isFirstChange()){\n // // this.buildForm();\n // // }\n // // this.buildForm();\n // }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n\n doAction(type: string) {\n if (this.backendService.parentForm.valid) {\n this.reloadData = !this.reloadData;\n const filterRequest: FilterRequest = new FilterRequest(this.pageSize);\n filterRequest.filters = [];\n let paramsString: string[] = [];\n this.fields.filter(x => x.type !== 'spacer').forEach(f => {\n if (this.getParamValue(f) != null && this.getParamValue(f).toString().trim() !== '')\n {\n if (f.type === 'multi-select' || f.type === 'lookup') {\n // do not filter if this field as cascading for another one and the other one got selected values\n const childFieldIdx = this.fields.findIndex(field => field.cascadedBy === f.property);\n if (childFieldIdx > -1 && this.backendService.parentForm.get(this.fields[childFieldIdx].property)?.value?.length > 0) {\n return;\n }\n const idz: number[] = [];\n const param: string[] = [];\n if (this.backendService.parentForm.get(f.property)?.value && Array.isArray(this.backendService.parentForm.get(f.property)?.value)\n && this.backendService.parentForm.get(f.property)?.value.length > 0) {\n this.backendService.parentForm.get(f.property)?.value.forEach((a: {\n channelId: number;\n englishName: string;\n id: number;\n }) => {\n if (f.flattenBySubAttribute) {\n idz.push(a[f.flattenBySubAttribute]);\n param.push(a[f.flattenBySubAttribute]);\n } else if (this.fields.find(s => s.property === 'terminalId')) {\n idz.push(a.channelId);\n param.push(a.englishName);\n } else {\n idz.push(a.id);\n param.push(a.englishName);\n }\n })\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: idz\n }));\n paramsString.push(this.translateService.instant(f.label) + ' : ' + param.join(','));\n } else if (this.backendService.parentForm.get(f.property)?.value && f.flattenBySubAttribute) {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)[f.flattenBySubAttribute]\n }));\n }\n } else {\n if (this.backendService.parentForm.get(f.property)?.value !== null &&\n this.backendService.parentForm.get(f.property)?.value !== undefined &&\n this.backendService.parentForm.get(f.property)?.value !== \"\") {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)\n }));\n }\n paramsString.push(this.translateService.instant(f.label) + ' : ' + this.getParamValueLabel(f));\n }\n }})\n const reportRequest = this.backendService.buildReportRequest(this.columnsDefinition, this.pageInfo.labelsSection + '.' + this.pageInfo.id,\n filterRequest, type, this.pageInfo, 'LANDSCAPE');\n reportRequest.searchStr = paramsString.join(' , ');\n this.reportRequest = reportRequest;\n // this.activeLevel = 1;\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_REPORT_FORM', true, 'error'));\n }\n }\n\n private getParamValue(f: FieldInfo) {\n if (f.type === 'date' && this.backendService.parentForm.get(f.property)?.value) {\n return formatDate(this.backendService.parentForm.get(f.property)?.value, 'yyyy-MM-dd', 'en_US')\n }else if (f.type === 'checkbox') {\n return !!this.backendService.parentForm.get(f.property)?.value;\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n private getParamValueLabel(f: FieldInfo) {\n if (f.type === 'checkbox') {\n return this.backendService.parentForm.get(f.property)?.value ? this.translateService.instant('yes') : this.translateService.instant('no');\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n getTitle() {\n const pageInfoMap = {\n 1: this.pageInfo,\n 2: this.drillDownPageInfo,\n 3: this.juniorPageInfo\n };\n\n const currentInfo = pageInfoMap[this.activeLevel] || this.pageInfo;\n return `${currentInfo.labelsSection}.${currentInfo.id}`;\n }\n\n updateForm($event: FormGroup) {\n this.reportForm = $event;\n this.backendService.parentForm = $event;\n\n this.setupDependentFieldWatchers();\n\n this.backendService.parentForm.valueChanges.subscribe(x => {\n this.readyToSearch = this.backendService.parentForm.valid;\n }\n\n );\n }\n\n private setupDependentFieldWatchers() {\n this.fields\n .filter(field => field.lookupFilterList && field.lookupFilterList.length > 0)\n .forEach(field => {\n const dependentFields = field.lookupFilterList.map(f => f.fieldName);\n\n dependentFields.forEach(dependentFieldName => {\n const dependentControl = this.reportForm.get(dependentFieldName);\n if (dependentControl) {\n dependentControl.valueChanges.subscribe(() => {\n const targetControl = this.reportForm.get(field.property);\n if (targetControl) {\n targetControl.setValue([]);\n }\n });\n }\n });\n });\n }\n\n isValidForm() {\n return this.readyToSearch ;\n\n }\n\n\n\n emitUserAction($event: TablePageUserAction) {\n $event.pageInfo = this.pageInfo;\n this.doADrillDownAction($event);\n }\n\n emitHyperLinkAction($event: TablePageUserAction) {\n if (!this.shouldProcessEventItem($event.item)) return;\n\n const item = $event.item;\n this.prepareDialogReportRequest(item);\n const reportRequest = this.buildDialogReportRequest();\n reportRequest.filterRequest.pageIndex = 0\n const dialogRef = this.dialog.open(ReportDetailsDialogComponent, {\n data: {\n pageInfo: this.juniorPageInfo,\n request: reportRequest,\n columns: this.juniorColumns,\n item,\n },\n height: '50vw',\n maxWidth: '120vw',\n direction: this.currentDirection,\n disableClose: false,\n });\n\n dialogRef.afterOpened().subscribe(() => this.doHyperLinkAction($event));\n dialogRef.afterClosed().subscribe(() => {});\n }\n\n private prepareDialogReportRequest(item: any): void {\n this.dialogReportRequest = cloneDeep(this.reportRequest);\n this.dialogReportRequest.filterRequest = { filters: [] };\n\n this.addStandardFilters(item);\n this.addOrReplaceFilter('isec1', 'iSec', item['isec_value']);\n this.addFilterType();\n }\n\n private addStandardFilters(item: any): void {\n const standardFilters = [\n { key: 'period', value: item['period'] },\n { key: 'year', value: item['year'] },\n { key: 'sector', value: item['sectorCode'] },\n { key: 'directorate', value: item['directorateCode'] },\n { key: 'subTaxRate', value: item['tax_rate_code'] },\n ];\n\n standardFilters.forEach(({ key, value }) =>\n this.dialogReportRequest.filterRequest.filters.push(\n this.createFilter(key, key, value)\n )\n );\n }\n\n private addFilterType(): void {\n const isTax = this.dialogReportRequest.actionKey?.toLowerCase().includes('tax');\n const filterType = isTax ? 'TAX' : 'VALUE';\n\n this.dialogReportRequest.filterRequest.filters.push(\n this.createFilter('filterType', 'filterType', filterType)\n );\n }\n\n private buildDialogReportRequest(): any {\n return this.backendService.buildReportRequest(\n this.juniorColumns,\n `${this.juniorPageInfo.labelsSection}.${this.juniorPageInfo.id}`,\n { ...this.dialogReportRequest.filterRequest },\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n }\n\n private createFilter(key: string, fieldName: string, value: any): Filter {\n return new Filter({\n key,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value,\n });\n }\n\n private addOrReplaceFilter(id: string, fieldName: string, value: any): void {\n const filter = new Filter({\n id,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value,\n });\n\n const filters = this.dialogReportRequest.filterRequest.filters;\n const existingIndex = filters.findIndex((f: Filter) => f.id === id);\n\n if (existingIndex !== -1) {\n filters.splice(existingIndex, 1, filter);\n } else {\n filters.push(filter);\n }\n }\n\n\n\n emitJuniorAction($event: TablePageUserAction) {\n const juniorAction = JUNIOR_DOWN_ACTION;\n juniorAction.pageInfo = this.drillDownPageInfo;\n this.doJuniorAction($event);\n }\n\n drillDown() {\n const drilldownaction = DRILL_DOWN_ACTION;\n drilldownaction.pageInfo = this.drillDownPageInfo;\n this.doADrillDownAction(drilldownaction);\n }\n\n private doJuniorAction($event: TablePageUserAction) {\n if (this.juniorColumns && this.juniorPageInfo) {\n if (this.enrichJuniorReportRequest) {\n if (this.activeLevel === 2) {\n this.isEditable = false;\n this.disableExportAction = this.juniorPageInfo.hideReportsExtractButton || false;\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.reportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichJuniorReportRequest($event, this.juniorReportRequest);\n }\n }\n this.activeLevel = this.activeLevel +1;\n }\n }\n private doADrillDownAction($event: TablePageUserAction) {\n if (this.drillDownColumns && this.drillDownPageInfo) {\n if (this.enrichDrillDownReportRequest) {\n if (this.activeLevel === 1) {\n this.isEditable = false;\n this.childReportRequest = this.backendService.buildReportRequest(this.drillDownColumns,\n this.drillDownPageInfo.labelsSection + '.' + this.drillDownPageInfo.id,\n this.reportRequest.filterRequest, '', this.drillDownPageInfo, 'LANDSCAPE');\n this.disableExportAction = this.drillDownPageInfo.hideReportsExtractButton || false;\n this.enrichDrillDownReportRequest($event, this.childReportRequest);\n }\n }\n this.activeLevel = this.activeLevel +1;\n }\n }\n\n private doHyperLinkAction($event: TablePageUserAction) {\n if (this.enrichHyperLinkReportRequest) {\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.dialogReportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.disableExportAction = this.juniorPageInfo.hideReportsExtractButton || false;\n this.enrichHyperLinkReportRequest($event, this.juniorReportRequest);\n }\n }\n\n extractReport(reportType: any) {\n if (this.activeLevel === 1) {\n this.reportRequest.reportType = reportType;\n this.backendService.downloadReport(this.reportRequest, this.pageInfo.apiUri );\n }\n else if (this.activeLevel === 2) {\n this.childReportRequest.reportType = reportType;\n this.backendService.downloadReport(this.childReportRequest, this.drillDownPageInfo.apiUri );\n }\n else if (this.activeLevel === 3) {\n this.juniorReportRequest.reportType = reportType;\n this.backendService.downloadReport(this.juniorReportRequest, this.juniorPageInfo.apiUri );\n }\n }\n\n goUp() {\n this.isEditable = true;\n this.activeLevel = this.activeLevel -1;\n this.doAction(this.x);\n this.reloadData = true;\n if (this.activeLevel >1) {\n this.isEditable = false;\n }\n this.disableExportAction = false\n }\n\n drillDownEnabled() {\n return this.drillDownPageInfo && !this.hideDrillDownButton && !this.getIsEmptyList();\n }\n\n drillDownLabel() {\n return `${this.pageInfo.labelsSection}.drillDownLabel` ;\n }\n getIsEmptyList() {\n return this.backendService.isEmptyItems || this.disableExportAction === true;\n }\n clear() {\n const currentUrl = this.router.url;\n this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n this.router.navigate([currentUrl]);\n });\n\n // if (this.reportForm) {\n // this.reportForm.reset();\n //\n // this.fields.forEach(field => {\n // if (field.type === 'lookup' || field.type === 'multi-select') {\n // const control = this.reportForm.get(field.property);\n // if (control) {\n // control.setValue([]);\n // }\n // }\n // });\n // }\n\n }\n\n\n isFormEmpty(): boolean {\n if (!this.reportForm || !this.reportForm.value) {\n return true;\n }\n\n return Object.values(this.reportForm.value).every(value => {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n return Array.isArray(value) && value.length === 0;\n\n\n });\n }\n\n shouldProcessEventItem(item: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !item[groupByProp]) {\n return true;\n }\n\n const value = item[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n}\n","<div class=\"column full-width\">\n\n <div class=\"row align-start-center\" style=\"margin-bottom: 10px;\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n\n <mat-icon\n *ngIf=\"pageInfo?.hasHint\"\n role=\"img\"\n [attr.aria-label]=\"(pageInfo.labelsSection + '.hint') | translate\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"hint-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"this.reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\"\n ></app-base-form-canvas>\n\n <br><br>\n\n <div class=\"column\">\n <div class=\"row gap-10 responsive-row\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\" [disabled]=\"!isValidForm()\" id=\"report-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\" color=\"primary\" id=\"report-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n\n <button mat-flat-button (click)=\"clear()\" [disabled]=\"isFormEmpty() || activeLevel > 1\" id=\"report-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button (click)=\"drillDown()\" id=\"report-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n\n <button *ngIf=\"activeLevel > 1 && backButtonEnabled\" color=\"warn\" mat-flat-button (click)=\"goUp()\" id=\"report-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"activeLevel >= 1\" class=\"main-form-canvas row align-start-start responsive-table\" style=\"margin-top: 3vh;\">\n <div class=\"column full-width\">\n <app-base-table\n *ngIf=\"activeLevel === 1\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [enforceRefresh]=\"reloadData\"\n id=\"parent\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 2\"\n [pageInfo]=\"drillDownPageInfo\"\n [columns]=\"drillDownColumns\"\n id=\"child\"\n [reportRequest]=\"childReportRequest\"\n (userAction)=\"emitJuniorAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 3\"\n [pageInfo]=\"juniorPageInfo\"\n [columns]=\"juniorColumns\"\n id=\"junior\"\n [reportRequest]=\"juniorReportRequest\">\n </app-base-table>\n </div>\n </div>\n\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'report-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {EMPTY_PAGE_INFO, PageInfo} from \"../../base-model/page-info\";\nimport {TableColumn} from \"../../base-model/table-column.interface\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FormBuilder, FormGroup} from \"@angular/forms\";\nimport {formatDate, NgForOf, NgIf} from \"@angular/common\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DRILL_DOWN_ACTION, JUNIOR_DOWN_ACTION, SnackMessage, TablePageUserAction} from \"../../base-model\";\nimport {} from \"../audit-log-details-dialog/audit-log-details-dialog.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ReportDetailsDialogComponent} from \"../report-details-dialog/report-details-dialog.component\";\nimport { cloneDeep } from 'lodash';\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {MatTooltip} from \"@angular/material/tooltip\";\n\n\nconst NON_REPORT_COLUMNS = ['listAction', 'button', 'checkbox'];\n\n@Component({\n selector: 'app-report-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatMenu,\n MatMenuItem,\n NgForOf,\n MatMenuTrigger,\n MatButtonModule,\n TranslateModule,\n BaseTableComponent,\n NgIf,\n MatIconModule,\n MatButton,\n MatTooltip\n ],\n templateUrl: './activity-report-form.component.html',\n styleUrl: './activity-report-form.component.scss'\n})\nexport class ActivityReportFormComponent implements OnInit{\n @Input()\n showDetails : any = [];\n\n @Input()\n showExtractButton: boolean = true;\n\n @Input()\n columns: TableColumn<any>[] =[];\n private originalColumns: any[] = [];\n\n\n @Input() actionRequestCallback!: (actionRequest: TablePageUserAction) => TablePageUserAction;\n @Input() enrichDrillDownReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichHyperLinkReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichJuniorReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n activeLevel: number = 1;\n items = [4, 5,6,7];\n private filterRequest: FilterRequest;\n x: any;\n isEditable: boolean = true;\n fields: FieldInfo[] = [];\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownPageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownColumns: TableColumn<any>[] = [];\n hideDrillDownButton: false;\n\n juniorPageInfo: PageInfo = EMPTY_PAGE_INFO;\n juniorColumns: TableColumn<any>[] = [];\n\n columnsDefinition: TableColumn<any>[] = [];\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n searchStr: string = '';\n\n errors: FieldMessage[] = [];\n\n reloadData: boolean = false;\n drillDownRequestStack: any[] = [];\n reportRequest: ReportRequest = new ReportRequest({});\n childReportRequest: ReportRequest = new ReportRequest({});\n juniorReportRequest: ReportRequest = new ReportRequest({});\n public reportForm: FormGroup;\n readyToSearch = false;\n private pageSize: any;\n private dialogReportRequest: any;\n currentDirection: 'ltr' | 'rtl';\n protected isComparisonReport: boolean = false;\n constructor(private translateService: TranslateService,\n public backendService: BackendService,\n private activatedRoute: ActivatedRoute,\n private injector: Injector,\n private router: Router,\n private route: ActivatedRoute,\n public dialog: MatDialog,\n private directionality: Directionality,\n private fb: FormBuilder) {\n }\n\n ngOnInit(): void {\n\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.pageSize = this.pageInfo.pageSize ?? 10;\n this.filterRequest= new FilterRequest(this.pageSize);\n data['pageInfo'].lazyLoadData = true;\n this.drillDownPageInfo = data['drillDownPageInfo'];\n this.drillDownColumns = data['drillDownColumns'];\n this.originalColumns = [...this.drillDownColumns];\n this.hideDrillDownButton = data['hideDrillDownButton'] ?? false;\n this.juniorPageInfo = data['juniorPageInfo'];\n this.juniorColumns = data['juniorColumns'];\n this.columnsDefinition = data['columnsDefinition'].filter(c => (this.drillDownPageInfo && this.drillDownColumns || (!NON_REPORT_COLUMNS.includes(c.type))));\n this.fields = data['fields'];\n if (data['enrichDrillDownReportRequest']) {\n this.enrichDrillDownReportRequest = data['enrichDrillDownReportRequest'](this.injector);\n }\n if (data['enrichJuniorReportRequest']) {\n this.enrichJuniorReportRequest = data['enrichJuniorReportRequest'](this.injector);\n }\n\n if (data['enrichHyperLinkReportRequest']) {\n this.enrichHyperLinkReportRequest = data['enrichHyperLinkReportRequest'](this.injector);\n }\n });\n\n this.route.queryParamMap.subscribe(params => {\n this.isComparisonReport = params.get('comparisonReport') === 'true';\n if (!this.isComparisonReport) return;\n\n const comparisonStr = sessionStorage.getItem('comparisonReportPageInfo');\n if (!comparisonStr) return;\n\n const comparisonData = JSON.parse(comparisonStr);\n this.initializeComparisonReport(comparisonData);\n });\n }\n\n private initializeComparisonReport(data: any): void {\n this.pageInfo.lazyLoadData = data.lazyLoadData ?? false;\n this.activeLevel = data.activeLevel ?? 2;\n this.isEditable = false;\n this.drillDownPageInfo = data.drillDownPageInfo;\n this.drillDownColumns = data.drillDownColumns;\n\n const reportRequest = data.reportRequest;\n\n this.reportRequest = this.backendService.buildReportRequest(\n this.drillDownColumns,\n `${this.drillDownPageInfo.labelsSection}.${this.drillDownPageInfo.id}`,\n reportRequest,\n '',\n this.drillDownPageInfo,\n 'LANDSCAPE'\n );\n\n this.setupForm(data.form);\n this.removeCheckboxFields();\n this.setupFilters(data.reportRequest, data.item);\n this.setupJuniorReportRequest();\n }\n\n private setupForm(formData: any): void {\n this.reportForm = this.fb.group({\n directorate: [[]],\n fromDate: [''],\n toDate: [''],\n sector: {},\n });\n\n if (formData) {\n this.reportForm.patchValue(formData);\n }\n }\n\n private removeCheckboxFields(): void {\n this.fields = this.fields.filter(field => field.type !== 'checkbox');\n }\n\n private setupFilters(reportRequest: any, item: any): void {\n this.filterRequest.filters = [];\n\n this.addOrUpdateFilter(reportRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'iSecValue',\n key: 'iSecValue',\n fieldName: 'iSecValue',\n value: item?.isec_value\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'period',\n key: 'period',\n fieldName: 'period',\n value: item?.period\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'year',\n key: 'year',\n fieldName: 'year',\n value: item?.year\n });\n\n this.reportRequest.filterRequest = reportRequest;\n }\n\n private setupJuniorReportRequest(): void {\n this.juniorReportRequest = this.backendService.buildReportRequest(\n this.juniorColumns,\n `${this.juniorPageInfo.labelsSection}.${this.juniorPageInfo.id}`,\n this.reportRequest.filterRequest,\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n\n this.juniorReportRequest.filterRequest.pageSize = 500;\n }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n\n doAction(type: string) {\n if (this.backendService.parentForm.valid) {\n this.reloadData = !this.reloadData;\n const filterRequest: FilterRequest = new FilterRequest(this.pageSize);\n filterRequest.filters = [];\n this.addOrUpdateFilter(filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n let paramsString: string[] = [];\n this.fields.filter(x => x.type !== 'spacer').forEach(f => {\n if (this.getParamValue(f) != null && this.getParamValue(f).toString().trim() !== '')\n {\n if (f.type === 'multi-select' || f.type === 'lookup') {\n // do not filter if this field as cascading for another one and the other one got selected values\n const childFieldIdx = this.fields.findIndex(field => field.cascadedBy === f.property);\n if (childFieldIdx > -1 && this.backendService.parentForm.get(this.fields[childFieldIdx].property)?.value?.length > 0) {\n return;\n }\n const idz: number[] = [];\n const param: string[] = [];\n if (this.backendService.parentForm.get(f.property)?.value && Array.isArray(this.backendService.parentForm.get(f.property)?.value)\n && this.backendService.parentForm.get(f.property)?.value.length > 0) {\n this.backendService.parentForm.get(f.property)?.value.forEach((a: {\n channelId: number;\n englishName: string;\n id: number;\n }) => {\n if (f.flattenBySubAttribute) {\n idz.push(a[f.flattenBySubAttribute]);\n param.push(a[f.flattenBySubAttribute]);\n } else if (this.fields.find(s => s.property === 'terminalId')) {\n idz.push(a.channelId);\n param.push(a.englishName);\n } else {\n idz.push(a.id);\n param.push(a.englishName);\n }\n })\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: idz\n }));\n paramsString.push(this.translateService.instant(f.label) + ' : ' + param.join(','));\n } else if (this.backendService.parentForm.get(f.property)?.value && f.flattenBySubAttribute) {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)[f.flattenBySubAttribute]\n }));\n }\n } else {\n if (this.backendService.parentForm.get(f.property)?.value !== null &&\n this.backendService.parentForm.get(f.property)?.value !== undefined &&\n this.backendService.parentForm.get(f.property)?.value !== \"\") {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)\n }));\n }\n paramsString.push(this.translateService.instant(f.label) + ' : ' + this.getParamValueLabel(f));\n }\n }})\n const reportRequest = this.backendService.buildReportRequest(this.columnsDefinition, this.pageInfo.labelsSection + '.' + this.pageInfo.id,\n filterRequest, type, this.pageInfo, 'LANDSCAPE');\n reportRequest.searchStr = paramsString.join(' , ');\n this.reportRequest = reportRequest;\n // this.activeLevel = 1;\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_REPORT_FORM', true, 'error'));\n }\n }\n\n private getParamValue(f: FieldInfo) {\n if (f.type === 'date' && this.backendService.parentForm.get(f.property)?.value) {\n return formatDate(this.backendService.parentForm.get(f.property)?.value, 'yyyy-MM-dd', 'en_US')\n }else if (f.type === 'checkbox') {\n return !!this.backendService.parentForm.get(f.property)?.value;\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n private getParamValueLabel(f: FieldInfo) {\n if (f.type === 'checkbox') {\n return this.backendService.parentForm.get(f.property)?.value ? this.translateService.instant('yes') : this.translateService.instant('no');\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n getTitle() {\n const pageInfoMap = {\n 1: this.pageInfo,\n 2: this.drillDownPageInfo,\n 3: this.juniorPageInfo\n };\n\n const currentInfo = pageInfoMap[this.activeLevel] || this.pageInfo;\n return `${currentInfo.labelsSection}.${currentInfo.id}`;\n }\n\n updateForm($event: FormGroup) {\n this.reportForm = $event;\n this.backendService.parentForm = $event;\n this.backendService.parentForm.valueChanges.subscribe(x => {\n this.readyToSearch = this.backendService.parentForm.valid;\n }\n\n );\n }\n\n isValidForm() {\n return this.readyToSearch ;\n\n }\n\n\n\n emitUserAction($event: TablePageUserAction) {\n $event.pageInfo = this.pageInfo;\n this.doADrillDownAction($event);\n }\n\n emitHyperLinkAction($event: TablePageUserAction) {\n if (this.shouldProcessEventItem($event.item)) {\n this.dialogReportRequest = cloneDeep(this.reportRequest);\n const reportRequest1 = this.backendService.buildReportRequest(\n this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n { ...this.dialogReportRequest.filterRequest },\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n reportRequest1.filterRequest.pageIndex = 0\n const dialogRef = this.dialog.open(ReportDetailsDialogComponent, {\n data: {\n pageInfo: this.juniorPageInfo,\n request: reportRequest1,\n columns: this.juniorColumns,\n item :$event.item\n },\n height: '50vw',\n maxWidth: '120vw',\n direction: this.currentDirection,\n disableClose: false,\n });\n\n dialogRef.afterOpened().subscribe(() => {\n this.doHyperLinkAction($event);\n });\n\n dialogRef.afterClosed().subscribe(() => {\n });\n }\n }\n\n\n\n emitJuniorAction($event: TablePageUserAction) {\n console.log('$event call junior', $event);\n const juniorAction = JUNIOR_DOWN_ACTION;\n juniorAction.pageInfo = this.drillDownPageInfo;\n this.doJuniorAction($event);\n }\n\n drillDown() {\n const drilldownaction = DRILL_DOWN_ACTION;\n drilldownaction.pageInfo = this.drillDownPageInfo;\n this.doADrillDownAction(drilldownaction);\n }\n\n private doJuniorAction($event: TablePageUserAction) {\n this.juniorColumns = this.originalColumns\n if (this.juniorColumns && this.juniorPageInfo) {\n if (this.enrichJuniorReportRequest) {\n\n this.isEditable = false;\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.reportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichJuniorReportRequest($event, this.juniorReportRequest);\n }\n this.activeLevel = this.activeLevel +1;\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n }\n }\n private doADrillDownAction($event: TablePageUserAction) {\n\n if (this.drillDownColumns && this.drillDownPageInfo) {\n this.drillDownRequestStack.push(cloneDeep(this.reportRequest));\n if (this.enrichDrillDownReportRequest) {\n this.isEditable = false;\n this.childReportRequest = this.backendService.buildReportRequest(this.drillDownColumns,\n this.drillDownPageInfo.labelsSection + '.' + this.drillDownPageInfo.id,\n this.reportRequest.filterRequest, '', this.drillDownPageInfo, 'LANDSCAPE');\n this.enrichDrillDownReportRequest($event, this.childReportRequest);\n\n }\n this.childReportRequest.filterRequest.pageSize = 500\n this.activeLevel = this.activeLevel +1;\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n if (this.isComparisonReport){\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n id: 'iSecValue',\n key: 'iSecValue',\n fieldName: 'iSecValue',\n value: $event.item.isec_value\n });\n\n }\n if (this.activeLevel === 4) {\n this.drillDownColumns = this.drillDownColumns.filter(item => item.type !== 'button');\n }\n this.reloadData = true\n }\n }\n\n private addOrUpdateFilter(\n filterRequest: FilterRequest,\n options: {\n id?: string;\n key: string;\n fieldName: string;\n value: any;\n }\n ): void {\n const { id, key, fieldName, value } = options;\n\n const existingFilterIndex = filterRequest.filters.findIndex((filter: Filter) =>\n id ? filter.id === id : filter.key === key\n );\n\n const newFilter = new Filter({\n ...(id && { id }),\n key,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value\n });\n\n if (existingFilterIndex !== -1) {\n filterRequest.filters[existingFilterIndex] = newFilter;\n } else {\n filterRequest.filters.push(newFilter);\n }\n }\n\n private doHyperLinkAction($event: TablePageUserAction) {\n if (this.enrichHyperLinkReportRequest) {\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.dialogReportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichHyperLinkReportRequest($event, this.juniorReportRequest);\n }\n }\n\n extractReport(reportType: any) {\n this.reportRequest.reportType = reportType;\n this.backendService.downloadReport(this.reportRequest, this.drillDownPageInfo.apiUri );\n\n }\n\n goUp() {\n Object.keys(this.reportForm.controls).forEach(controlName => {\n const control = this.reportForm.get(controlName);\n control?.clearValidators();\n control?.updateValueAndValidity();\n });\n this.isEditable = true;\n this.activeLevel = this.activeLevel - 1;\n if (this.activeLevel > 1 ) {\n this.isEditable = false;\n }\n this.doAction(this.x);\n this.reportRequest = this.drillDownRequestStack.pop();\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n this.reloadData = true;\n if (this.activeLevel !== 4) {\n this.drillDownColumns = [...this.originalColumns];\n }\n }\n\n\n drillDownEnabled() {\n return this.drillDownPageInfo && !this.hideDrillDownButton && !this.getIsEmptyList();\n }\n\n drillDownLabel() {\n return `${this.pageInfo.labelsSection}.drillDownLabel` ;\n }\n getIsEmptyList() {\n return this.backendService.isEmptyItems;\n }\n clear() {\n const currentUrl = this.router.url;\n this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n this.router.navigate([currentUrl]);\n });\n }\n\n\n isFormEmpty(): boolean {\n if (!this.reportForm || !this.reportForm.value) {\n return true;\n }\n\n return Object.values(this.reportForm.value).every(value => {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n return Array.isArray(value) && value.length === 0;\n\n });\n }\n\n shouldProcessEventItem(item: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !item[groupByProp]) {\n return true;\n }\n\n const value = item[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n}\n","<div class=\"page-container\">\n\n <div class=\"row row-center-start mb-10px full-width\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n <mat-icon *ngIf=\"pageInfo?.hasHint\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"help-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-49\">\n <div class=\"row row-center-start\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\"\n [disabled]=\"!isValidForm()\" class=\"action-button\" id=\"activity-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\"\n color=\"primary\" class=\"btn-none-background-primary action-button\" id=\"activity-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n <button mat-flat-button (click)=\"clear()\"\n [disabled]=\"isFormEmpty() || activeLevel > 1\"\n class=\"action-button\" id=\"activity-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button\n (click)=\"drillDown()\" class=\"action-button\" id=\"activity-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n <button *ngIf=\"activeLevel > 1 && !(isComparisonReport && activeLevel == 2)\" color=\"warn\"\n mat-flat-button (click)=\"goUp()\" class=\"action-button\" id=\"activity-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n <div class=\"column flex-49\"></div>\n </div>\n\n <!-- Base tables -->\n <ng-container *ngIf=\"activeLevel === 1\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"pageInfo\" [columns]=\"columnsDefinition\" [enforceRefresh]=\"reloadData\"\n id=\"parent\" [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 2\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\" id=\"child\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 3\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\" id=\"junior\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 4\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n</div>\n\n<!-- Menu -->\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'activity-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n","export class LineItem {\n itemType?: string | null;\n itemLine: string | null;\n description: string | null;\n unitPrice: number | null;\n discount: number | null;\n totalAmount: number | null;\n quantity: number | null;\n\n constructor(\n itemType: string | null,\n itemLine: string | null,\n description: string | null,\n unitPrice: number | null,\n quantity: number | null,\n discount: number | null,\n totalAmount: number | null\n ) {\n this.itemType = itemType;\n this.itemLine = itemLine;\n this.description = description;\n this.unitPrice = unitPrice;\n this.quantity = quantity;\n this.discount = discount;\n this.totalAmount = totalAmount;\n }\n}\n","export class ItemsTotal {\n subtotal: number;\n discount: number;\n grandTotal: number;\n\n\n constructor(subtotal: number, discount: number, grandTotal: number) {\n this.subtotal = subtotal;\n this.discount = discount;\n this.grandTotal = grandTotal;\n }\n}\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\nimport {FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass, NgIf} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatSelectModule} from \"@angular/material/select\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport { BaseFormCanvasComponent } from '../base-form-canvas/base-form-canvas.component';\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseUtils} from \"../../utils/base-utils\";\nimport {MatButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'lib-base-input-dialog',\n standalone: true,\n imports: [\n NgIf,\n NgClass,\n MatIconModule,\n ReactiveFormsModule,\n MatSelectModule,\n MatInputModule,\n BaseFormCanvasComponent,\n TranslateModule,\n NgIf,\n TranslateModule,\n TitleBarComponent,\n MatButton\n ],\n templateUrl: './base-input-dialog.component.html',\n styleUrl: './base-input-dialog.component.css'\n})\nexport class BaseInputDialogComponent extends BaseUtils implements OnInit {\n fieldsInfo: FieldInfo[];\n default: any;\n isLoaded: boolean = false;\n formGroup: FormGroup;\n\n constructor(public dialogRef: MatDialogRef<BaseInputDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n super()\n }\n\n ngOnInit(): void {\n console.log('data' ,this.data);\n this.fieldsInfo = this.data.fieldsInfo;\n this.pageInfo = this.data.pageInfo;\n this.default = this.data.element;\n this.isLoaded = true;\n }\n captureForm($event: FormGroup) {\n this.formGroup = $event;\n }\n\n saveDisabled() {\n return !this.formGroup?.valid;\n }\n\n getTitle() {\n return this.pageInfo.labelsSection + '.pop_up_title';\n }\n\n doSave(save: string) {\n if (this.formGroup.valid) {\n let id = this.default?.id;\n this.default = this.formGroup.value;\n this.default.id = id;\n this.dialogRef.close(this.default);\n }\n }\n\n doCancel(cancel: string) {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"container\">\n <div class=\"title-row\">\n <div class=\"full-column\">\n <app-title-bar [pageTitle]=\"getTitle()\"></app-title-bar>\n </div>\n </div>\n\n <ng-container *ngIf=\"isLoaded\">\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fieldsInfo\"\n [editable]=\"true\"\n [item]=\"default\"\n (formUpdated)=\"captureForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"button-row\">\n <div class=\"half-column\"></div>\n <div class=\"half-column right-align\">\n <div class=\"button-group\">\n <ng-container>\n <button\n mat-stroked-button\n class=\"btn-none-background-primary\"\n type=\"button\"\n (click)=\"doCancel('cancel')\"\n id=\"base-input-cancel-btn\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container>\n <button\n [ngClass]=\"saveDisabled() ? 'btn-none-background-primary' : 'btn-background-primary'\"\n [disabled]=\"saveDisabled()\"\n mat-stroked-button\n type=\"button\"\n (click)=\"doSave('save')\"\n id=\"base-input-save-btn\">\n Save\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {MatFormField, MatLabel} from \"@angular/material/form-field\";\nimport {MatOption, MatSelect} from \"@angular/material/select\";\nimport {FormsModule} from \"@angular/forms\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatInput} from \"@angular/material/input\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {NgForOf} from \"@angular/common\";\nimport {TableColumn} from \"../../base-model\";\nimport {TranslateModule} from \"@ngx-translate/core\";\ntype SearchType = 'exact' | 'like';\ntype SortType = 'ASC' | 'DESC';\n@Component({\n selector: 'ag-search-bar',\n templateUrl: './search-bar.component.html',\n standalone: true,\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n FormsModule,\n MatIcon,\n MatInput,\n MatIconButton,\n NgForOf,\n TranslateModule\n ],\n styleUrls: ['./search-bar.component.scss']\n})\nexport class SearchBarComponent implements OnInit {\n @Input() columns: TableColumn<any>[];\n @Input() defaultSortKey: string = '';\n\n searchValue: string = '';\n searchType: SearchType = 'like';\n selectedSortKey: string = '';\n selectedSortType: SortType = 'ASC';\n @Output() searchTriggered = new EventEmitter<{\n searchValue: string;\n searchType: SearchType;\n sortKey: string;\n sortType: string;\n }>();\n\n onSearch() {\n this.selectedSortKey ||= this.defaultSortKey || this.columns[0]?.property;\n\n this.searchTriggered.emit({\n searchValue: this.searchValue,\n searchType: this.searchType,\n sortKey: this.selectedSortKey,\n sortType: this.selectedSortType\n });\n }\n\n labelKey(column: { label?: string; property: string }): string {\n return column.label || column.property;\n }\n\n ngOnInit(): void {\n }\n\n getColumns() {\n return this.columns.filter(\n (column) => ['text', 'date', 'localDateTime'].includes(column.type)\n );\n }\n}\n","<div class=\"mainSearchBar\">\n <div class=\"search row align-start-center gap-16\">\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-50\">\n <mat-label>{{ 'BASE_TABLE.searchQuery' | translate }}</mat-label>\n <input\n matInput\n class=\"search__input\"\n (keydown.enter)=\"onSearch()\"\n [(ngModel)]=\"searchValue\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-15\">\n <mat-label>{{ 'BASE_TABLE.searchMatchType' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"searchType\">\n <mat-option value=\"exact\">Exact</mat-option>\n <mat-option value=\"like\">Like</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-15\">\n <mat-label>{{ 'BASE_TABLE.sortByColumn' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"selectedSortKey\">\n <mat-option *ngFor=\"let col of getColumns()\" [value]=\"col.property\">\n {{ labelKey(col) | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-10\">\n <mat-label>{{ 'BASE_TABLE.sortDirection' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"selectedSortType\">\n <mat-option value=\"ASC\">ASC</mat-option>\n <mat-option value=\"DESC\">DESC</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div class=\"search__button row align-center-center\">\n <button\n type=\"button\"\n class=\"icon-design\"\n mat-icon-button\n (click)=\"onSearch()\"\n [attr.aria-label]=\"'BASE_TABLE.runSearch' | translate\">\n <mat-icon class=\"icon-search\" color=\"primary\" aria-hidden=\"true\">search</mat-icon>\n </button>\n </div>\n\n </div>\n</div>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport {NgIf, NgStyle} from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-snackbar-static',\n standalone: true,\n imports: [MatIcon, NgIf, TranslateModule, MatIconButton, MatButton, NgStyle],\n templateUrl: './snackbar-static.component.html',\n styleUrls: ['./snackbar-static.component.scss']\n})\nexport class SnackbarStaticComponent {\n @Input() messageKey = '';\n @Input() titleKey = '';\n @Input() params: Record<string, any> = {};\n @Input() paramsTitle: Record<string, any> = {};\n @Input() type: 'error' | 'success' | 'warning' | 'info' | 'help'\n @Output() actionBtn: EventEmitter<void> = new EventEmitter();\n @Input() width: string = 'auto';\n @Input() textBtn: string;\n submit() {\n this.actionBtn.emit()\n }\n}\n","<div class=\"snackbar snackbar-{{type}}\" [ngStyle]=\"{'width': width == 'auto' ? 'auto' : width}\">\n <div class=\"sub-snackbar\">\n <mat-icon *ngIf=\"type === 'error'\">error</mat-icon>\n <mat-icon *ngIf=\"type === 'success'\">check_box</mat-icon>\n <mat-icon *ngIf=\"type === 'warning'\">warning</mat-icon>\n <mat-icon *ngIf=\"type === 'info'\">info</mat-icon>\n <mat-icon *ngIf=\"type === 'help'\">help</mat-icon>\n\n <div class=\"text-content\">\n <div class=\"title\">{{ titleKey | translate : paramsTitle }}</div>\n <div class=\"subtitle\">{{ messageKey | translate: params }}</div>\n </div>\n\n </div>\n <div class=\"action\" *ngIf=\"textBtn\">\n <button mat-stroked-button class=\"btn-none-background-primary action-btn\" (click)=\"submit()\" id=\"snackbar-action-btn\">\n {{ textBtn | translate}}\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, inject, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Subject, takeUntil, startWith } from 'rxjs';\n\n@Component({\n selector: 'lib-action-button',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n TranslateModule\n ],\n templateUrl: './action-button.component.html',\n styleUrl: './action-button.component.scss'\n})\nexport class ActionButtonComponent implements OnInit, OnDestroy {\n private readonly translateService = inject(TranslateService);\n private readonly destroy$ = new Subject<void>();\n\n @Input() buttonText: string = '';\n @Input() buttonTextKey?: string;\n @Input() buttonGradient: string = 'linear-gradient(90deg, #E4C9D0 0%, #8A1538 100%)';\n @Input() id?: string;\n @Output() buttonClick = new EventEmitter<void>();\n\n get isArabic(): boolean {\n const currentLang = this.translateService.currentLang\n || this.translateService.defaultLang\n || this.translateService.getBrowserLang()\n || 'en';\n return currentLang === 'ar';\n }\n\n ngOnInit(): void {\n this.translateService.onLangChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onButtonClick(): void {\n this.buttonClick.emit();\n }\n}\n","<button\n class=\"action-button\"\n (click)=\"onButtonClick()\"\n [style.background]=\"buttonGradient\"\n [attr.id]=\"id || (buttonTextKey ? ('action-button-' + buttonTextKey) : 'action-button')\"\n type=\"button\">\n <span class=\"button-texts\">\n <span *ngIf=\"buttonTextKey\">{{ buttonTextKey | translate }}</span>\n <span *ngIf=\"!buttonTextKey\">{{ buttonText }}</span>\n </span>\n <mat-icon class=\"arrow-icon\" [class.arrow-rtl]=\"isArabic\">arrow_forward</mat-icon>\n</button>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionButtonComponent } from '../action-button/action-button.component';\n\nexport interface FeatureItem {\n text?: string;\n textKey?: string;\n}\n\n@Component({\n selector: 'lib-action-card',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n TranslateModule,\n ActionButtonComponent\n ],\n templateUrl: './action-card.component.html',\n styleUrl: './action-card.component.scss'\n})\nexport class ActionCardComponent {\n\n @Input() icon: string = '';\n @Input() iconSvg?: string;\n @Input() title: string = '';\n @Input() description: string = '';\n @Input() buttonText: string = '';\n @Input() buttonTextKey?: string;\n @Input() titleKey?: string;\n @Input() descriptionKey?: string;\n @Input() iconColor: string = '#8A1538';\n @Input() borderColor: string = '#d1d1d1';\n @Input() borderLeftColor?: string;\n @Input() borderRightColor?: string;\n @Input() borderBottomColor?: string;\n @Input() topBorderColor?: string;\n @Input() topBorderGradient?: string;\n @Input() buttonGradient: string = 'linear-gradient(90deg, #E4C9D0 0%, #8A1538 100%)';\n @Input() decorativeIconColor: string = 'rgba(209, 203, 216, 1)';\n @Input() featureCheckIconColor?: string;\n @Input() variant: 'default' | 'extended' = 'default';\n @Input() iconSize: number = 40;\n @Input() features?: FeatureItem[];\n @Input() featuresHeading?: string;\n @Input() featuresHeadingKey?: string;\n @Input() showDivider: boolean = false;\n @Input() topBorderHeight: number = 12;\n @Output() buttonClick = new EventEmitter<void>();\n\n onButtonClick(): void {\n this.buttonClick.emit();\n }\n}","<div class=\"action-card\" \n [class.extended-variant]=\"variant === 'extended'\"\n [style.--top-border-gradient]=\"topBorderGradient || buttonGradient\" \n [style.--top-border-height]=\"topBorderHeight + 'px'\"\n [style.border-right-color]=\"borderRightColor || borderColor\" \n [style.border-bottom-color]=\"borderBottomColor || borderColor\" \n [style.border-left-color]=\"borderLeftColor || borderColor\">\n <div class=\"card-content\" [class.extended-content]=\"variant === 'extended'\">\n <div class=\"main-content\" [class.extended-main]=\"variant === 'extended'\">\n <div class=\"header-section\" [class.extended-header]=\"variant === 'extended'\">\n <div class=\"header-top-wrapper\" *ngIf=\"variant === 'default'\">\n <div class=\"icon-wrapper\" \n [style.color]=\"iconColor\"\n [style.width.px]=\"iconSize\"\n [style.height.px]=\"iconSize\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"icon-svg\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.font-size.px]=\"iconSize\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">{{ icon }}</mat-icon>\n </div>\n <div class=\"header-top\">\n <h2 class=\"card-title\">\n <span *ngIf=\"titleKey\">{{ titleKey | translate }}</span>\n <span *ngIf=\"!titleKey\">{{ title }}</span>\n </h2>\n </div>\n </div>\n <div class=\"icon-wrapper\" \n *ngIf=\"variant === 'extended'\"\n [style.color]=\"iconColor\"\n [style.width.px]=\"iconSize\"\n [style.height.px]=\"iconSize\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"icon-svg\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.font-size.px]=\"iconSize\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">{{ icon }}</mat-icon>\n </div>\n <div class=\"title-description-wrapper\" *ngIf=\"variant === 'extended'\">\n <h2 class=\"card-title\">\n <span *ngIf=\"titleKey\">{{ titleKey | translate }}</span>\n <span *ngIf=\"!titleKey\">{{ title }}</span>\n </h2>\n <p class=\"card-description\">\n <span *ngIf=\"descriptionKey\">{{ descriptionKey | translate }}</span>\n <span *ngIf=\"!descriptionKey\">{{ description }}</span>\n </p>\n </div>\n <p class=\"card-description\" *ngIf=\"variant === 'default'\">\n <span *ngIf=\"descriptionKey\">{{ descriptionKey | translate }}</span>\n <span *ngIf=\"!descriptionKey\">{{ description }}</span>\n </p>\n </div>\n <lib-action-button\n [buttonText]=\"buttonText\"\n [buttonTextKey]=\"buttonTextKey\"\n [buttonGradient]=\"buttonGradient\"\n (buttonClick)=\"onButtonClick()\">\n </lib-action-button>\n <div class=\"features-divider\" *ngIf=\"showDivider && features && features.length > 0\"></div>\n \n <div class=\"features-section\" *ngIf=\"features && features.length > 0\">\n <h3 class=\"features-heading\" *ngIf=\"featuresHeading || featuresHeadingKey\">\n <span *ngIf=\"featuresHeadingKey\">{{ featuresHeadingKey | translate }}</span>\n <span *ngIf=\"!featuresHeadingKey\">{{ featuresHeading }}</span>\n </h3>\n <div class=\"feature-item\" *ngFor=\"let feature of features\">\n <mat-icon class=\"feature-check-icon\" [style.color]=\"featureCheckIconColor || iconColor\">check_circle</mat-icon>\n <span class=\"feature-text\">\n <span *ngIf=\"feature.textKey\">{{ feature.textKey | translate }}</span>\n <span *ngIf=\"!feature.textKey\">{{ feature.text }}</span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"decorative-icon-wrapper\" *ngIf=\"variant === 'default' && (icon || iconSvg)\">\n <div class=\"decorative-icon\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"decorative-icon-svg\" [style.filter]=\"'opacity(0.3)'\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.color]=\"decorativeIconColor\">{{ icon }}</mat-icon>\n </div>\n </div>\n </div>\n</div>","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {AbstractControl, FormsModule} from \"@angular/forms\";\nimport {CommonModule} from \"@angular/common\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {FieldInfo, EMPTY_PAGE_INFO, PageInfo} from \"../../base-model\";\nimport {FormGroup} from \"@angular/forms\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {LineItem} from \"../../base-model/line-item.model\";\nimport {ItemsTotal} from \"../../base-model/items-total.model\";\n@Component({\n selector: 'app-item-line-editor',\n templateUrl: './item-line-editor.component.html',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n BaseFormCanvasComponent,\n TranslateModule\n ],\n styleUrls: ['./item-line-editor.component.scss']\n})\n\n\nexport class ItemLineEditorComponent implements OnChanges, OnInit {\n @Input() noDataFoundIcon: string;\n @Input() noDataFoundTitle: string;\n @Input() noDataFoundSubtitle: string;\n\n @Input() pageInfo: PageInfo;\n @Input() columnHeaderWidths: string[];\n @Input() title: string;\n @Input() subtitle: string;\n @Input() allowAdd: boolean = true;\n @Input() allowDelete: boolean = true;\n @Input() editable: boolean = true;\n @Input() currency: string;\n @Input() fields: FieldInfo[] = [];\n\n private baseFieldsSnapshot: FieldInfo[] | undefined;\n\n\n @Input() items: LineItem[] = [this.blankItem()];\n\n @Output() itemsChange = new EventEmitter<LineItem[]>();\n @Output() itemSaved = new EventEmitter<{ index: number, item: any }>();\n @Output() itemDeleted = new EventEmitter<{ index: number }>();\n @Output() totalsChange = new EventEmitter<ItemsTotal>();\n @Output() editStateChange = new EventEmitter<{ index: number, editing: boolean }>();\n formRefs: (FormGroup | undefined)[] = [];\n\n editing: boolean[] = [true];\n noDataFound: boolean = false\n\n isMobile(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= 768;\n }\n\n ngOnInit(): void {\n if (this.fields && this.fields.length > 0) {\n this.applyMobileFieldModifications();\n }\n }\n\n private applyMobileFieldModifications(): void {\n if (this.isMobile() && this.fields) {\n this.fields = this.fields.map(field => {\n const fieldCopy = { ...field };\n \n if (['itemCode', 'description', 'unitPrice', 'quantity', 'discount'].includes(field.property)) {\n fieldCopy.hideLabel = false;\n }\n\n if (['description'].includes(field.property)) {\n fieldCopy.row = 2;\n }\n \n if (['unitPrice', 'quantity', 'discount'].includes(field.property)) {\n fieldCopy.row = 3;\n }\n \n if (field.property === 'totalAmount') {\n fieldCopy.visible = false;\n }\n \n return fieldCopy;\n });\n }\n }\n \n get headerFields(): FieldInfo[] {\n return (this.fields || []).filter(f => f.visible && f.row === 1 && f.type !== 'spacer');\n }\n\n get hasInvalidEditingForm(): boolean {\n if (!this.formRefs || !this.editing) return false;\n for (let i = 0; i < this.formRefs.length; i++) {\n const frm = this.formRefs[i];\n if (this.editing[i] && frm && frm.invalid) {\n return true;\n }\n }\n return false;\n }\n\n get canAddNew(): boolean {\n return !this.hasInvalidEditingForm;\n }\n\n canSave(index: number): boolean {\n const frm = this.formRefs?.[index];\n if (!this.editing?.[index]) return true;\n return !!frm && frm.valid;\n }\n\n labelOf(field: FieldInfo): string {\n const configuredKey = field.label ? field.label : field.property;\n return configuredKey.startsWith(this.pageInfo.labelsSection)\n ? configuredKey\n : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n private blankItem() {\n return { itemLine: '', description: '', unitPrice: 0, quantity: 1, discount: 0, totalAmount: 0 };\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['items'] && changes['items'].currentValue) {\n const len = (this.items || []).length;\n this.noDataFound = len <= 0;\n if (changes['items'].firstChange) {\n this.formRefs = new Array(len).fill(undefined);\n this.editing = len > 0 ? new Array(len).fill(false) : [true];\n } else {\n const oldLen = this.editing?.length || 0;\n\n\n if (!this.formRefs) this.formRefs = [];\n if (this.formRefs.length > len) {\n this.formRefs = this.formRefs.slice(0, len);\n } else {\n while (this.formRefs.length < len) this.formRefs.push(undefined);\n }\n\n\n if (!this.editing) this.editing = [];\n if (this.editing.length > len) {\n this.editing = this.editing.slice(0, len);\n } else {\n for (let i = this.editing.length; i < len; i++) {\n this.editing[i] = true;\n }\n }\n\n\n if (oldLen === 0 && len > 0 && this.editing[0] === undefined) {\n this.editing[0] = true;\n }\n }\n this.emitTotals();\n }\n if (changes['fields'] && changes['fields'].currentValue) {\n this.baseFieldsSnapshot = (this.fields || []).map(f => ({...f}));\n this.applyMobileFieldModifications();\n }\n }\n\n onFormUpdated(form: FormGroup, index: number) {\n const discountCtrl = form.get('discount');\n\n if (discountCtrl) {\n\n const existing = discountCtrl.validator ? [discountCtrl.validator] : [];\n discountCtrl.setValidators([\n ...existing,\n this.discountValidator(index)\n ]);\n\n discountCtrl.updateValueAndValidity({ emitEvent: false });\n }\n\n this.formRefs[index] = form;\n try {\n const emittedItems = this.items.map((it, i) => {\n if (i !== index) return it;\n const v = this.getCurrentValues(i) || it || {};\n const up = Number(v?.unitPrice || 0);\n const q = Number(v?.quantity || 0);\n const disc = Number(v?.discount || 0);\n const total = Math.max(0, up * q - disc);\n return { ...it, ...v, total };\n });\n this.itemsChange.emit(emittedItems);\n } catch (_e) {\n\n }\n this.emitTotals();\n }\n\n addNewItem() {\n this.items.push(this.blankItem());\n this.formRefs.push(undefined);\n this.editing.push(true);\n\n this.restoreFieldsFromSnapshot();\n this.itemsChange.emit([...this.items]);\n this.editStateChange.emit({ index: this.items.length - 1, editing: true });\n this.emitTotals();\n }\n\n saveRow(index: number) {\n\n const frm = this.formRefs?.[index];\n if (this.editing[index] && frm && frm.invalid) {\n\n Object.values(frm.controls).forEach(c => c.markAsTouched());\n return;\n }\n const v = this.getCurrentValues(index);\n if (!v) return;\n this.items[index] = { ...v, total: this.calcLineTotal(index) };\n\n this.editing[index] = false;\n\n this.itemsChange.emit([...this.items]);\n this.itemSaved.emit({ index, item: this.items[index] });\n this.editStateChange.emit({ index, editing: false });\n this.emitTotals();\n }\n\n deleteItem(index: number) {\n if (index < 0 || index >= this.items.length) return;\n this.items.splice(index, 1);\n this.formRefs.splice(index, 1);\n this.editing.splice(index, 1);\n\n this.itemsChange.emit([...this.items]);\n this.itemDeleted.emit({ index });\n this.emitTotals();\n }\n\n clearAll() {\n this.items = [this.blankItem()];\n this.formRefs = [undefined];\n this.editing = [true];\n this.itemsChange.emit([...this.items]);\n this.emitTotals();\n }\n\n getCurrentValues(index: number) {\n const isEditing = this.editing[index];\n const frm = this.formRefs[index];\n\n const base = this.items[index] || {};\n const src = (isEditing && frm) ? { ...base, ...frm.value } : { ...base };\n if (!src) return null;\n const val: any = { ...src };\n val.unitPrice = val.unitPrice === null || val.unitPrice === '' ? null : Number(val.unitPrice);\n val.quantity = val.quantity === null || val.quantity === '' ? null : Number(val.quantity);\n val.discount = val.discount === null || val.discount === '' ? null : Number(val.discount);\n return val;\n }\n\n calcLineTotal(index: number): number {\n const val = this.getCurrentValues(index);\n if (!val) return Number(this.items[index]?.totalAmount || 0);\n return Math.max(0, (val.unitPrice || 0) * (val.quantity || 0) - (val.discount || 0));\n }\n\n get subtotal(): number {\n return this.items.reduce((s, _it, i) => {\n const v = this.getCurrentValues(i);\n const up = Number(v?.unitPrice || 0);\n const q = Number(v?.quantity || 0);\n return s + (up * q);\n }, 0);\n }\n\n get discountTotal(): number {\n return this.items.reduce((s, _it, i) => {\n const v = this.getCurrentValues(i);\n return s + Number(v?.discount || 0);\n }, 0);\n }\n\n get grandTotal(): number {\n return this.items.reduce((s, _it, i) => s + this.calcLineTotal(i), 0);\n }\n\n trackByIndex(index: number, _item: any) {\n return index;\n }\n\n editRow(index: number) {\n this.editing[index] = true;\n this.restoreFieldsFromSnapshot();\n this.editStateChange.emit({ index, editing: true });\n }\n\n private emitTotals() {\n this.totalsChange.emit({\n subtotal: this.subtotal,\n discount: this.discountTotal,\n grandTotal: this.grandTotal\n });\n }\n\n private restoreFieldsFromSnapshot() {\n if (this.baseFieldsSnapshot && this.baseFieldsSnapshot.length) {\n this.fields = this.baseFieldsSnapshot.map(f => ({...f}));\n this.applyMobileFieldModifications();\n }\n }\n\n get gridTemplate() {\n return this.columnHeaderWidths.join(' ');\n }\n\n private discountValidator(index: number) {\n return (control: AbstractControl) => {\n const val = this.getCurrentValues(index);\n if (!val) return null;\n\n const totalBeforeDiscount = (val.unitPrice ?? 0) * (val.quantity ?? 0);\n const discount = val.discount ?? null;\n\n if (discount != null && discount > totalBeforeDiscount) {\n return { discountTooHigh: true };\n }\n\n return null;\n };\n }\n\n}\n","<div class=\"item-line-editor\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"header-text\">\n <h3 class=\"title\">{{ title | translate }}</h3>\n <p class=\"subtitle\">{{ subtitle | translate }}</p>\n </div>\n </div>\n <div class=\"header-divider\"></div>\n </div>\n\n <div class=\"table-section\">\n @if (!noDataFound) {\n <div class=\"table-container\">\n <div class=\"table-header\" [ngStyle]=\"{ 'grid-template-columns': gridTemplate }\">\n <ng-container *ngFor=\"let f of headerFields; let idx = index\">\n <div class=\"header-cell\" [class.description-cell]=\"f.property === 'description'\">\n <span class=\"header-cell-text\">\n {{ labelOf(f) | translate }}\n <span *ngIf=\"f.required\" class=\"required-asterisk\">*</span>\n </span>\n </div>\n </ng-container>\n </div>\n\n <div class=\"table-body\">\n <div class=\"table-row-container\" *ngFor=\"let it of items; let i = index; trackBy: trackByIndex\">\n <div class=\"table-row\">\n <div class=\"row-inputs\" [attr.data-grid-columns]=\"gridTemplate\" [ngStyle]=\"{ '--grid-columns': gridTemplate }\">\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editing[i]\"\n [emitOnValueChanges]=\"true\"\n [item]=\"it\"\n [currency]=\"currency\"\n (formUpdated)=\"onFormUpdated($event, i)\">\n </app-base-form-canvas>\n </div>\n </div>\n\n <div class=\"row-actions\">\n <button *ngIf=\"editing[i]\" mat-stroked-button class=\"save-btn\" (click)=\"saveRow(i)\"\n [disabled]=\"!canSave(i)\">\n <div class=\"button-text\">\n <mat-icon>check</mat-icon>\n <span>{{ 'item-line.save' | translate }}</span>\n </div>\n </button>\n\n <button *ngIf=\"!editing[i] && editable\" mat-stroked-button class=\"edit-btn\"\n (click)=\"editRow(i)\">\n <div class=\"button-text\">\n <mat-icon>edit</mat-icon>\n <span>{{ 'item-line.edit' | translate }}</span>\n </div>\n </button>\n\n <button *ngIf=\"allowDelete && editable\" mat-stroked-button class=\"delete-btn\"\n (click)=\"deleteItem(i)\" type=\"button\">\n <div class=\"button-text\">\n <mat-icon>delete</mat-icon>\n <span>{{ 'item-line.delete' | translate }}</span>\n </div>\n </button>\n </div>\n\n <div class=\"row-divider\"></div>\n </div>\n </div>\n </div>\n }\n\n @if (noDataFound) {\n <div class=\"dataNotFound\">\n <mat-icon class=\"dataNotFound__icon\">{{ noDataFoundIcon }}</mat-icon>\n <span class=\"dataNotFound__title\">{{ noDataFoundTitle | translate }}</span>\n <span class=\"dataNotFound__subtitle\">{{ noDataFoundSubtitle | translate }}</span>\n </div>\n }\n\n <div class=\"add-item\" *ngIf=\"allowAdd && editable\">\n <button mat-stroked-button class=\"add-item-btn\" (click)=\"addNewItem()\"\n [disabled]=\"!canAddNew\">\n <div class=\"button-text\">\n <mat-icon>add_circle_outline</mat-icon>\n <span>{{ 'item-line.addNewItem' | translate }}</span>\n </div>\n </button>\n </div>\n </div>\n\n <!-- Totals Box -->\n @if (!noDataFound) {\n <div class=\"totals-box\">\n <div class=\"total-row\">\n <span class=\"label\">{{ 'item-line.discount' | translate }}</span>\n <span class=\"value red\">{{ discountTotal | currency:currency }}</span>\n </div>\n\n <div class=\"total-row\">\n <span class=\"label\">{{ 'item-line.amount' | translate }}</span>\n <span class=\"value\">{{ subtotal | currency:currency }}</span>\n </div>\n\n <div class=\"totals-divider\"></div>\n\n <div class=\"total-row grand\">\n <span class=\"label\">{{ 'item-line.grandTotal' | translate }}</span>\n <span class=\"value green\">{{ grandTotal | currency:currency }}</span>\n </div>\n </div>\n }\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PermissionConfig, PermissionMatrixItem, PermissionChangeEvent } from '../../base-model';\n\n@Component({\n selector: 'lib-permission-matrix',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n MatCheckboxModule,\n TranslateModule\n ],\n templateUrl: './permission-matrix.component.html',\n styleUrl: './permission-matrix.component.scss'\n})\nexport class PermissionMatrixComponent {\n\n @Input() items: PermissionMatrixItem[] = [];\n @Input() permissions: PermissionConfig[] = [\n { key: 'view', labelKey: 'GROUPS.view' },\n { key: 'edit', labelKey: 'GROUPS.edit' },\n { key: 'completeAndTerminate', labelKey: 'GROUPS.completeAndTerminate', combinedKeys: ['completePermission', 'terminatePermission'] }\n ];\n @Input() titleKey: string = 'GROUPS.groupMatrix';\n @Input() selectAllLabelKey: string = 'GROUPS.selectAll';\n @Input() expandAllLabelKey: string = 'GROUPS.expandAll';\n @Input() collapseAllLabelKey: string = 'GROUPS.collapseAll';\n @Input() readonly: boolean = false;\n @Input() hideSelectAll: boolean = false;\n @Input() autoLockView: boolean = false;\n @Output() itemsChange = new EventEmitter<PermissionMatrixItem[]>();\n @Output() permissionChange = new EventEmitter<PermissionChangeEvent>();\n\n areAllExpanded(): boolean {\n return this.items.length > 0 && this.items.every(item => item.expanded);\n }\n\n expandAllGroups(): void {\n const expand = !this.areAllExpanded();\n this.items.forEach(item => item.expanded = expand);\n this.emitItemsChange();\n }\n\n toggleGroup(item: PermissionMatrixItem): void {\n item.expanded = !item.expanded;\n this.emitItemsChange();\n }\n\n isAllPermissionsSelected(item: PermissionMatrixItem): boolean {\n return this.permissions.every(perm => {\n if (perm.combinedKeys) {\n return perm.combinedKeys.every(key => item.permissions[key]);\n }\n return item.permissions[perm.key];\n });\n }\n\n toggleSelectAll(item: PermissionMatrixItem): void {\n if (this.readonly) return;\n\n const allSelected = this.isAllPermissionsSelected(item);\n const newValue = !allSelected;\n\n this.permissions.forEach(perm => {\n if (this.autoLockView && !newValue && perm.key === 'view') {\n return;\n }\n if (perm.combinedKeys) {\n perm.combinedKeys.forEach(key => {\n item.permissions[key] = newValue;\n });\n } else {\n item.permissions[perm.key] = newValue;\n }\n });\n\n if (this.autoLockView) {\n this.syncViewPermission(item);\n }\n\n this.emitItemsChange();\n }\n\n isPermissionSelected(item: PermissionMatrixItem, permission: PermissionConfig): boolean {\n if (permission.combinedKeys) {\n return permission.combinedKeys.every(key => item.permissions[key]);\n }\n return item.permissions[permission.key];\n }\n\n isPermissionDisabled(item: PermissionMatrixItem, permission: PermissionConfig): boolean {\n return this.readonly;\n }\n\n togglePermission(item: PermissionMatrixItem, permission: PermissionConfig): void {\n if (this.isPermissionDisabled(item, permission)) {\n return;\n }\n\n const currentValue = this.isPermissionSelected(item, permission);\n const newValue = !currentValue;\n\n if (this.autoLockView && permission.key === 'view' && !newValue) {\n this.clearAllPermissions(item);\n this.permissionChange.emit({\n item,\n permissionKey: permission.key,\n newValue: false\n });\n this.emitItemsChange();\n return;\n }\n\n if (permission.combinedKeys) {\n permission.combinedKeys.forEach(key => {\n item.permissions[key] = newValue;\n });\n } else {\n item.permissions[permission.key] = newValue;\n }\n\n if (this.autoLockView) {\n this.syncViewPermission(item);\n }\n\n this.permissionChange.emit({\n item,\n permissionKey: permission.key,\n newValue\n });\n\n this.emitItemsChange();\n }\n\n private hasNonViewPermission(item: PermissionMatrixItem): boolean {\n return this.permissions.some(perm => {\n if (perm.key === 'view') {\n return false;\n }\n if (perm.combinedKeys) {\n return perm.combinedKeys.some(key => item.permissions[key]);\n }\n return !!item.permissions[perm.key];\n });\n }\n\n private clearAllPermissions(item: PermissionMatrixItem): void {\n this.permissions.forEach(perm => {\n if (perm.combinedKeys) {\n perm.combinedKeys.forEach(key => {\n item.permissions[key] = false;\n });\n } else {\n item.permissions[perm.key] = false;\n }\n });\n }\n\n /** Auto-select view when any non-view permission is selected; never auto-clear view. */\n private syncViewPermission(item: PermissionMatrixItem): void {\n const viewKey = this.permissions.find(p => p.key === 'view' && !p.combinedKeys)?.key;\n if (!viewKey || !this.hasNonViewPermission(item)) {\n return;\n }\n item.permissions[viewKey] = true;\n }\n\n private emitItemsChange(): void {\n if (this.autoLockView) {\n this.items.forEach(item => this.syncViewPermission(item));\n }\n this.itemsChange.emit([...this.items]);\n }\n\n trackByItem(index: number, item: PermissionMatrixItem): string | number {\n return item.id ?? index;\n }\n\n trackByPermission(index: number, permission: PermissionConfig): string {\n return permission.key;\n }\n}\n","<div class=\"permission-matrix-card\">\n <div class=\"matrix-header\">\n <h3 class=\"matrix-title\">{{ titleKey | translate }}</h3>\n <button\n class=\"expand-all-btn\"\n type=\"button\"\n (click)=\"expandAllGroups()\"\n [attr.aria-label]=\"(areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate\">\n <mat-icon class=\"expand-icon\" [class.rotated]=\"areAllExpanded()\">unfold_more</mat-icon>\n <span>{{ (areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate }}</span>\n </button>\n </div>\n\n <div class=\"matrix-divider\"></div>\n\n <div class=\"matrix-accordion-list\">\n <div\n *ngFor=\"let item of items; trackBy: trackByItem\"\n class=\"matrix-accordion-item\"\n [class.expanded]=\"item.expanded\">\n\n <!-- Accordion Header -->\n <div\n class=\"accordion-header\"\n (click)=\"toggleGroup(item)\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"item.expanded\"\n (keydown.enter)=\"toggleGroup(item)\"\n (keydown.space)=\"toggleGroup(item); $event.preventDefault()\">\n <div class=\"accordion-content\">\n <h4 class=\"accordion-title\">{{ item.title }}</h4>\n <p *ngIf=\"item.description\" class=\"accordion-description\">{{ item.description }}</p>\n </div>\n <mat-icon class=\"accordion-icon\" [class.rotated]=\"item.expanded\">keyboard_arrow_down</mat-icon>\n </div>\n\n <!-- Accordion Body -->\n <ng-container *ngIf=\"item.expanded\">\n <div class=\"accordion-divider\"></div>\n <div class=\"accordion-body\">\n <!-- Permission Header Row -->\n <div class=\"permission-header-row\">\n <span class=\"permission-group-label\">{{ item.title }}</span>\n <div *ngIf=\"!hideSelectAll\" class=\"permission-separator\"></div>\n <div\n *ngIf=\"!hideSelectAll\"\n class=\"select-all-container\"\n (click)=\"$event.stopPropagation()\">\n <span class=\"select-all-label\">{{ selectAllLabelKey | translate }}</span>\n <mat-checkbox\n [checked]=\"isAllPermissionsSelected(item)\"\n [disabled]=\"readonly\"\n (change)=\"toggleSelectAll(item)\"\n color=\"primary\"\n class=\"select-all-checkbox\">\n </mat-checkbox>\n </div>\n </div>\n\n <!-- Permissions Row -->\n <div class=\"permissions-row\" (click)=\"$event.stopPropagation()\">\n <div\n *ngFor=\"let permission of permissions; trackBy: trackByPermission\"\n class=\"permission-item\">\n <mat-checkbox\n [checked]=\"isPermissionSelected(item, permission)\"\n [disabled]=\"isPermissionDisabled(item, permission)\"\n (change)=\"togglePermission(item, permission)\"\n color=\"primary\">\n </mat-checkbox>\n <span class=\"permission-label\">{{ permission.labelKey | translate }}</span>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</div>","/*\n * Public API Surface of invoiceq-lib\n */\n\nexport * from './lib/components/action-confirmation/action-confirmation.component'\nexport * from './lib/components/base-table/base-table.component'\nexport * from './lib/components/audit-log-list/audit-log.component'\nexport * from './lib/components/editable-base-table/editable-base-table.component'\nexport * from './lib/components/title-bar/title-bar.component'\nexport * from './lib/components/shared-list/shared-list.component'\nexport * from './lib/components/base-form-canvas/base-form-canvas.component'\nexport * from './lib/components/section-form-canvas/section-form-canvas.component'\nexport * from './lib/components/base-form/base-form.component'\nexport * from './lib/components/audit-log-details-dialog/audit-log-details-dialog.component'\nexport * from './lib/components/report-form/report-form.component'\nexport * from './lib/components/activity-report-form/activity-report-form.component'\nexport * from './lib/components/report-details-dialog/report-details-dialog.component'\nexport * from './lib/base-model';\nexport * from './lib/base-model/line-item.model';\nexport * from './lib/base-model/items-total.model';\nexport * from './lib/services';\nexport * from './lib/validators';\nexport * from './lib/components/base-input-dialog/base-input-dialog.component'\nexport * from './lib/components/search-bar/search-bar.component'\nexport * from './lib/components/snackbar-static/snackbar-static.component'\nexport * from './lib/components/shared/action-card/action-card.component'\nexport * from './lib/components/shared/action-button/action-button.component'\nexport * from './lib/components/action-comment/action-comment.component'\nexport * from './lib/components/item-line-editor/item-line-editor.component'\nexport * from './lib/components/permission-matrix/permission-matrix.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2","i4","i2.TopPanel","i5","i1.BackendService","MatOption","i3.BackendService","i8","i6","i4.BackendService","MatFormField","moment","i7","i9","MatLabel","i5.BackendService","NON_REPORT_COLUMNS","i2.BackendService"],"mappings":"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,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAA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"}
1
+ {"version":3,"file":"iq-ui-lib.mjs","sources":["../../../../projects/invoiceq/ui-lib/src/lib/components/action-confirmation/action-confirmation.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/action-confirmation/action-confirmation.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/action-comment/action-comment.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/action-comment/action-comment.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/button-actions/button-actions.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/button-actions/button-actions.component.html","../../../../projects/invoiceq/ui-lib/src/lib/base-model/button-action-settings.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/table-column.interface.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/field-info.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/page-info.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/report-request.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/filter-request.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/filter.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/lookupItem.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/snack-message.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/table-page-user-action.interface.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/do-action-request.ts","../../../../projects/invoiceq/ui-lib/src/lib/utils/base-utils.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/response-envelop.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/title-bar/title-bar.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/title-bar/title-bar.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/paginator/paginator.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/paginator/paginator.component.html","../../../../projects/invoiceq/ui-lib/src/lib/validators/match-list.validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/validators/multi-email-validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/validators/date-range-validator.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/column-def.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/top-panel.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/backend-service.ts","../../../../projects/invoiceq/ui-lib/src/lib/services/trigger-form.service.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/multi-auto-complete/multi-auto-complete.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/multi-auto-complete/multi-auto-complete.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/auto-complete/auto-complete.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/auto-complete/auto-complete.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/attachment-uploader/attachment-uploader.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/attachment-uploader/attachment-uploader.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/NumbersOnlyDirective.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/MaxDigitsDirective.ts","../../../../projects/invoiceq/ui-lib/src/lib/directives/phone-number-only.directive.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/base-form-canvas.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form-canvas/base-form-canvas.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/field-filter/field-filter.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/field-filter/field-filter.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/filter-builder/filter-builder.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/advanced-filter/filter-builder/filter-builder.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-table/base-table.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-table/base-table.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-list/audit-log.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-list/audit-log.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/equation-builder/equation-builder.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/equation-builder/equation-builder.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/editable-base-table/editable-base-table.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/editable-base-table/editable-base-table.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared-list/shared-list.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared-list/shared-list.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form/base-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-form/base-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/section-form-canvas/section-form-canvas.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/section-form-canvas/section-form-canvas.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/audit-log-details-dialog/audit-log-details-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/report-details-dialog/report-details-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/report-details-dialog/report-details-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/report-form/report-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/report-form/report-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/activity-report-form/activity-report-form.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/activity-report-form/activity-report-form.component.html","../../../../projects/invoiceq/ui-lib/src/lib/base-model/line-item.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/base-model/items-total.model.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-input-dialog/base-input-dialog.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/base-input-dialog/base-input-dialog.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/search-bar/search-bar.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/search-bar/search-bar.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/snackbar-static/snackbar-static.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/snackbar-static/snackbar-static.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-button/action-button.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-button/action-button.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-card/action-card.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/shared/action-card/action-card.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/item-line-editor/item-line-editor.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/item-line-editor/item-line-editor.component.html","../../../../projects/invoiceq/ui-lib/src/lib/components/permission-matrix/permission-matrix.component.ts","../../../../projects/invoiceq/ui-lib/src/lib/components/permission-matrix/permission-matrix.component.html","../../../../projects/invoiceq/ui-lib/src/public-api.ts","../../../../projects/invoiceq/ui-lib/src/iq-ui-lib.ts"],"sourcesContent":["import {Component, HostBinding, HostListener, Inject, Input, OnInit} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle\n} from \"@angular/material/dialog\";\nimport {MatFormField} from \"@angular/material/form-field\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {MatIcon} from \"@angular/material/icon\";\n\nexport interface IconConfig {\n name: string;\n color: string;\n}\n\n@Component({\n selector: 'app-action-confirmation',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatButton,\n MatIconButton,\n MatIcon\n ],\n templateUrl: './action-confirmation.component.html',\n styleUrl: './action-confirmation.component.css'\n})\nexport class ActionConfirmationComponent implements OnInit {\n @Input() icon: IconConfig = { name: 'check_circle', color: '#0d7d6a' };\n acceptActionLabel : string =''\n rejectActionLabel : string =''\n subMsg : string = '';\n titleMsg : string = '';\n listTitle: string = '';\n listMessages: string[] = [];\n isListMessagesTranslatable: boolean = true;\n extraWarningMsg: string = '';\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n constructor(public dialogRef: MatDialogRef<ActionConfirmationComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.acceptActionLabel = this.data.acceptActionLabel || 'accept' ;\n this.rejectActionLabel = this.data.rejectActionLabel || 'reject';\n this.subMsg = this.data.warningMsg || '';\n this.titleMsg = this.data.confirmMsg || '';\n this.listTitle = this.data.listTitle || '';\n this.listMessages = this.data.listMessages || [];\n this.extraWarningMsg = this.data.extraWarningMsg || '';\n this.currentDirection = this.data.direction;\n this.isListMessagesTranslatable = this.data.isListMessagesTranslatable ?? true;\n this.icon = this.data.icon || { name: 'check_circle', color: '#0d7d6a' };\n }\n\n\n commentAndClose() {\n this.dialogRef.close('accept');\n\n return \"\";\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n}\n","<div class=\"confirm-dialog\" [dir]=\"currentDirection\">\n\n <div class=\"header-section\">\n <div class=\"header-row\">\n <div class=\"icon-container\">\n <mat-icon class=\"check-icon\" [style.color]=\"icon.color\">{{ icon.name }}</mat-icon>\n </div>\n\n </div>\n <div class=\"title-container\">\n <h2 class=\"title\">{{ titleMsg | translate }}</h2>\n </div>\n </div>\n\n <div class=\"message-container\">\n <p class=\"message\" *ngIf=\"subMsg\">\n {{ subMsg | translate }}\n </p>\n\n <div class=\"list-section\" *ngIf=\"listTitle || listMessages.length > 0\">\n <p class=\"list-title\" *ngIf=\"listTitle\"><strong>{{ listTitle | translate }}</strong></p>\n <ul class=\"list-messages\" *ngIf=\"listMessages.length > 0\">\n @if (isListMessagesTranslatable) {\n <li *ngFor=\"let message of listMessages\" class=\"list-item\">\n {{ message | translate }}\n </li>\n }\n @else{\n <li *ngFor=\"let message of listMessages\" class=\"list-item\">\n {{ message }}\n </li>\n }\n </ul>\n </div>\n\n <p class=\"extra-warning\" *ngIf=\"extraWarningMsg\">\n {{ extraWarningMsg | translate }}\n </p>\n </div>\n\n <div class=\"actions\">\n <button\n mat-stroked-button\n class=\"btn-cancel\"\n (click)=\"cancel()\"\n id=\"rejectActionLabel\">\n {{ rejectActionLabel | translate }}\n </button>\n\n <button\n mat-flat-button\n class=\"btn-confirm\"\n (click)=\"commentAndClose()\"\n id=\"acceptActionLabel\">\n {{ acceptActionLabel | translate }}\n </button>\n </div>\n\n</div>\n","import { Component, HostListener, Inject, OnInit } from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle\n} from '@angular/material/dialog';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatInput } from '@angular/material/input';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { NgForOf, NgIf } from '@angular/common';\n\n@Component({\n selector: 'app-action-comment',\n standalone: true,\n imports: [\n MatDialogTitle,\n MatFormField,\n MatLabel,\n MatDialogContent,\n FormsModule,\n CdkTextareaAutosize,\n TranslateModule,\n MatDialogActions,\n MatButton,\n MatInput,\n MatIcon,\n MatOption,\n MatSelect,\n NgForOf,\n NgIf\n ],\n templateUrl: './action-comment.component.html',\n styleUrl: './action-comment.component.css'\n})\nexport class ActionCommentComponent implements OnInit {\n itemName: string = '';\n titleKey: string = '';\n subtitleKey: string = '';\n reasonLabelKey: string = '';\n placeholderKey: string = '';\n warningKey: string = '';\n cancelKey: string = '';\n actionKey: string = '';\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n actionLabel : string =''\n isTermination : boolean=false;\n comment: string = '';\n otherComment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n otp: string = \"\";\n isSubmitted: boolean = false;\n warningMsg = false;\n\n constructor(public dialogRef: MatDialogRef<ActionCommentComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n public translate: TranslateService) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.actionLabel = this.data.label;\n this.isTermination = this.data.isTermination ;\n this.signingRequired = this.data.signingRequired;\n this.tokenReference = this.data.tokenReference;\n this.warningMsg = this.data.warningMsg || false;\n\n this.itemName = this.data.itemName;\n this.titleKey = this.data.titleKey;\n this.subtitleKey = this.data.subtitleKey;\n this.reasonLabelKey = this.data.reasonLabelKey;\n this.placeholderKey = this.data.placeholderKey;\n this.warningKey = this.data.warningKey;\n this.cancelKey = this.data.cancelKey;\n this.actionKey = this.data.actionKey;\n this.currentDirection = this.data.direction;\n }\n\n\n commentAndClose() {\n this.isSubmitted = true;\n\n if (this.signingRequired && !this.otp) {\n return false;\n }\n\n const finalComment =\n this.comment === 'OTHER' ? this.otherComment : this.translate.instant(this.comment);\n\n const obj: { [key: string]: any } = {\n comment: finalComment,\n shareExternal: this.external\n };\n\n if (this.signingRequired) {\n obj['token'] = this.otp;\n obj['tokenReference'] = this.tokenReference;\n }\n\n this.dialogRef.close(obj);\n return true;\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n}\n","<div class=\"dialog-container\" [dir]=\"currentDirection\">\n\n <div class=\"desktop-view\">\n <h2 mat-dialog-title class=\"dialog-title\">\n {{ titleKey | translate}} {{itemName}}\n </h2>\n\n <p class=\"dialog-subtitle\">\n {{ subtitleKey | translate }}\n </p>\n\n <mat-dialog-content class=\"content-section\">\n\n <ng-container *ngIf=\"data?.options?.length; else textMode\">\n\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-select\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\">\n\n <mat-option *ngFor=\"let item of data.options\" [value]=\"item\">\n {{ data.translate ? (item | translate) : item }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"comment === 'OTHER'\"\n appearance=\"outline\"\n class=\"w-100\">\n <textarea\n matInput\n [(ngModel)]=\"otherComment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n maxlength=\"1000\"\n cdkAutosizeMaxRows=\"5\">\n </textarea>\n </mat-form-field>\n\n </ng-container>\n\n <ng-template #textMode>\n <mat-form-field appearance=\"outline\" class=\"w-100\">\n <mat-label>{{ reasonLabelKey | translate }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n maxlength=\"1000\"\n cdkAutosizeMaxRows=\"5\">\n </textarea>\n </mat-form-field>\n </ng-template>\n\n <div class=\"info-box\">\n <mat-icon>info</mat-icon>\n <span class=\"info-text\">\n {{ warningKey | translate }}\n </span>\n </div>\n\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\" class=\"footer-actions\">\n <button mat-stroked-button class=\"btn-none-background-primary cancel-btn\" (click)=\"cancel()\">\n {{ cancelKey | translate }}\n </button>\n\n <button\n mat-flat-button\n class=\"btn-background-primary warn-btn\"\n (click)=\"commentAndClose()\"\n [disabled]=\"!comment || (comment === 'OTHER' && !otherComment)\">\n {{ actionKey | translate }}\n </button>\n </mat-dialog-actions>\n </div>\n\n <div class=\"mobile-view\">\n <div class=\"modal-header\">\n <div class=\"handle\"></div>\n <div class=\"header-content\">\n <p class=\"modal-title\">{{ titleKey | translate }}</p>\n <button class=\"close-button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n\n <div class=\"modal-body\">\n\n <ng-container *ngIf=\"data?.options?.length; else mobileText\">\n\n <mat-form-field appearance=\"outline\" class=\"textarea-field-mobile\">\n <mat-select\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n class=\"textarea-mobile\">\n\n <mat-option *ngFor=\"let item of data.options\" [value]=\"item\">\n {{ data.translate ? ( item | translate) : item }}\n </mat-option>\n\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"comment === 'OTHER'\"\n appearance=\"outline\"\n class=\"textarea-field-mobile\">\n <mat-label>{{ placeholderKey | translate }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"otherComment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n cdkAutosizeMaxRows=\"5\"\n maxlength=\"1000\"\n class=\"textarea-mobile\">\n </textarea>\n </mat-form-field>\n\n </ng-container>\n\n <ng-template #mobileText>\n <mat-form-field appearance=\"outline\" class=\"textarea-field-mobile\">\n <mat-label>{{ reasonLabelKey | translate }} {{ itemName }}</mat-label>\n <textarea\n matInput\n [(ngModel)]=\"comment\"\n [placeholder]=\"placeholderKey | translate\"\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"4\"\n cdkAutosizeMaxRows=\"5\"\n maxlength=\"1000\"\n class=\"textarea-mobile\">\n </textarea>\n </mat-form-field>\n </ng-template>\n\n <div class=\"info-box-mobile\">\n <mat-icon class=\"info-icon-mobile\">info</mat-icon>\n <span class=\"info-text-mobile\">\n {{ warningKey | translate }}\n </span>\n </div>\n\n </div>\n\n <div class=\"modal-actions-mobile\">\n <div class=\"actions-buttons-container\">\n <button mat-stroked-button class=\"btn-cancel-mobile\" (click)=\"cancel()\">\n {{ cancelKey | translate }}\n </button>\n <button\n mat-flat-button\n class=\"btn-action-mobile\"\n (click)=\"commentAndClose()\"\n [disabled]=\"!comment || (comment === 'OTHER' && !otherComment)\">\n {{ actionKey | translate }}\n </button>\n </div>\n <div class=\"home-indicator\"></div>\n </div>\n </div>\n\n</div>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ButtonActionSettings} from \"../../base-model/button-action-settings\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {TranslateModule} from \"@ngx-translate/core\";\n\n@Component({\n selector: 'app-button-actions',\n standalone: true,\n imports: [\n MatIcon,\n MatMenuTrigger,\n MatIconButton,\n MatMenu,\n MatMenuItem,\n NgIf,\n NgClass,\n NgForOf,\n TranslateModule\n ],\n templateUrl: './button-actions.component.html',\n styleUrl: './button-actions.component.scss'\n})\nexport class ButtonActionsComponent {\n constructor(public dialog: MatDialog) { }\n\n @Input()\n actions: ButtonActionSettings[] =[];\n @Input()\n disabled?: boolean = false;\n\n @Output()\n clickedButton: EventEmitter<any> = new EventEmitter();\n\n @Input()\n buttonsAction: boolean = false;\n\n @Input()\n listAction: ButtonActionSettings[] = [];\n\n @Input()\n row?: unknown;\n\n ngOnInit(): void {\n }\n\n resolveActionHref(action: ButtonActionSettings): string | null {\n if (this.disabled) {\n return null;\n }\n if (action.showCommentDialog) {\n return null;\n }\n const linkHref = action.linkHref;\n if (linkHref == null || linkHref === '') {\n return null;\n }\n if (typeof linkHref === 'function') {\n if (this.row === undefined || this.row === null) {\n return null;\n }\n const resolved = linkHref(this.row);\n const s = resolved != null ? String(resolved).trim() : '';\n return s.length > 0 ? s : null;\n }\n const s = String(linkHref).trim();\n return s.length > 0 ? s : null;\n }\n\n getClickedAction(action: ButtonActionSettings, event?: MouseEvent) {\n const href = this.resolveActionHref(action);\n if (href && event) {\n if (event.ctrlKey || event.metaKey || event.button === 1) {\n return;\n }\n event.preventDefault();\n }\n if (action.showCommentDialog === true) {\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: action.label, isTermination: action.commentRequired, external: false,\n warningMsg: false},\n width: '600px',\n height: 'auto',\n direction: 'ltr' // this.authService.dir === 'rtl' ? 'rtl': 'ltr'\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n action.comment = result.comment;\n action.shareExternal = result.shareExternal;\n this.clickedButton.emit(action);\n }\n });\n\n } else {\n this.clickedButton.emit(action);\n }\n }\n\n}\n","<ng-container *ngIf=\"buttonsAction; else list_Action\">\n <div class=\"action-buttons-container\" *ngIf=\"(actions?.length ? actions : listAction)?.length > 0\">\n <ng-container *ngFor=\"let action of (actions?.length ? actions : listAction); let i = index\">\n <a\n *ngIf=\"resolveActionHref(action) as href\"\n class=\"action-button\"\n [href]=\"href\"\n (click)=\"getClickedAction(action, $event)\"\n [attr.id]=\"action.id || ('actions-btn-' + action.label)\"\n [title]=\"action.label | translate\"\n >\n <mat-icon *ngIf=\"action.icon?.length\" class=\"action-icon\">{{ action.icon }}</mat-icon>\n </a>\n <button\n *ngIf=\"!resolveActionHref(action)\"\n type=\"button\"\n class=\"action-button\"\n (click)=\"getClickedAction(action)\"\n [disabled]=\"disabled\"\n [attr.id]=\"action.id || ('actions-btn-' + action.label)\"\n [title]=\"action.label | translate\"\n >\n <mat-icon *ngIf=\"action.icon?.length\" class=\"action-icon\">{{ action.icon }}</mat-icon>\n </button>\n </ng-container>\n </div>\n</ng-container>\n\n<ng-template #list_Action>\n <div *ngIf=\"listAction?.length > 0\">\n <button\n type=\"button\"\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"$event.stopPropagation()\"\n style=\"justify-content: center; color: grey\"\n id=\"actions-menu-trigger\"\n [attr.aria-label]=\"'BASE_TABLE.moreActions' | translate\"\n [attr.aria-haspopup]=\"true\">\n <mat-icon aria-hidden=\"true\">more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let list_Action of listAction\">\n <a\n *ngIf=\"resolveActionHref(list_Action) as href\"\n mat-menu-item\n [href]=\"href\"\n (click)=\"getClickedAction(list_Action, $event)\"\n [attr.id]=\"list_Action.id || ('actions-menu-item-' + list_Action.label)\"\n >\n <span>{{ list_Action.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveActionHref(list_Action)\"\n type=\"button\"\n mat-menu-item\n (click)=\"getClickedAction(list_Action)\"\n [attr.id]=\"list_Action.id || ('actions-menu-item-' + list_Action.label)\"\n >\n <span>{{ list_Action.label | translate }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </div>\n</ng-template>\n","\nexport class ButtonActionSettings {\n constructor(buttonActionSettings: ButtonActionSettings) {\n this.key = buttonActionSettings.key;\n this.id = buttonActionSettings.id;\n this.action = buttonActionSettings.action;\n this.label = buttonActionSettings.label;\n this.color = buttonActionSettings.color;\n this.isPrimary = buttonActionSettings.isPrimary;\n this.icon = buttonActionSettings.icon;\n this.showCommentDialog = buttonActionSettings.showCommentDialog;\n this.comment = buttonActionSettings.comment;\n this.shareExternal = buttonActionSettings.shareExternal;\n this.commentRequired = buttonActionSettings.commentRequired || false;\n this.linkHref = buttonActionSettings.linkHref;\n }\n\n linkHref?: string | ((row: unknown) => string | null | undefined);\n\n label: string;\n id: string;\n action?: any;\n key: number;\n isPrimary?: boolean;\n icon?: any;\n showCommentDialog?:boolean;\n comment?: any;\n shareExternal?: boolean;\n selectedId?: number;\n commentRequired? : boolean;\n color?: string;\n}\n","export interface TableColumn<T> {\n property: string;\n type: 'text' | 'croppedText' | 'image' | 'netAmount' | 'workflowStatus' | 'onOff' | 'progress' | 'checkbox' | 'button' | 'date' | 'number'| 'icon' |'bigdecimal'|'builder'|'localDateTime'|'report-sequence' | 'listAction' | 'info' | 'stateType' | 'hyper-text'|'year' | 'reportType' | 'status' | 'list'\n viewType?:string;\n enableSorting: boolean;\n visible?: boolean;\n cssClasses?: string[];\n reportVisible?:boolean | true;\n reportProperty?: string;\n reportType?: string;\n showSum?:boolean;\n showCount?:boolean;\n translate?: boolean;\n width?:number;\n label?:string;\n reportwidth?:number;\n langDrivenName?:boolean;\n additionalProperty?: string;\n currency?: string;\n orderByProperty?: string;\n advancedFilter?: boolean;\n enableQuickFilter?: boolean;\n format?:string;\n group?:string;\n arraySubProperty?: string;\n digitInfo?:string;\n sortKey?:string;\n mobileCardId?: boolean; // Mark this column as ID/name for mobile card header\n mobileCardStatus?: boolean; // Mark this column as status for mobile card header\n}\n\nexport const FRONT_END_COLUMN_TYPES = ['listAction', 'button','hyper-text'];\n","import {ValidatorFn} from \"@angular/forms\";\nimport {Filter} from \"./filter.model\";\n\nexport class FieldInfo {\n property: string = \"\";\n targetProperty?: string = \"\";\n row: number;\n required: boolean = false;\n type: 'text' | 'amount' |'color-picker' | 'currency' | 'date' | 'number' | 'sequence' | 'list' |'lookup'| 'multi-select' | 'password'| 'rich-text'|'radio-button'| 'phone-number'| 'iban-text'|'checkbox' |'textarea' |'button'|'spacer' | 'attachment'| 'section-title'| 'chip-list' |'time' | 'divider' | 'hyper-text' |'stateType'|'status' | 'year' | 'equation-builder'| 'toggle'| 'bigdecimal' | 'multi-state-checkbox' = 'text';\n textFormat?: 'json';\n readonly?: boolean = false;\n viewonly?: boolean ;\n label?: string = '';\n currency?: string;\n lookupApiPath?: string;\n multi?:boolean;\n supportedTypes?:string;\n cascadedBy?: string;\n cascadedByProperty?: string;\n pathParams?: string;\n listOptions?: any[];\n operators?: any[];\n fieldsApi?: string;\n reportFilter?:string;\n updateOnly?: boolean;\n fieldSize ?: number ;\n includeAllOption?: boolean;\n defaultListOption?: any;\n acceptNewItem?: boolean;\n translate?: boolean = false;\n validators?: ValidatorFn[];\n placeholder?: any;\n visible?: boolean = true;\n pattern?: string;\n disabled?: boolean;\n advancedFilter?: boolean;\n filterOperator?: 'GREATER_THAN_EQUAL'|'GREATER_THAN'| 'LESS_THAN'|'LESS_THAN_EQUAL'| 'EQUALS'| 'LIKE'| 'NOT_EQ'| 'IN' ;\n workflowManaged?: boolean;\n workflowCascadingField?: string;\n attachmentType?: string;\n lookupFilterList?: Filter[];\n buttonType?: string;\n hideFiles?: boolean;\n behavioralName?: string;\n flattenBySubAttribute?: string;\n defaultValue?:any;\n extraLookupsColumns?: string[];\n displayColumn?: string;\n searchAttribute?:string;\n validationMessages?: any;\n hideLabel?:boolean;\n searchOperator?:\"GREATER_THAN_EQUAL\" | \"GREATER_THAN\" | \"LESS_THAN\" | \"LESS_THAN_EQUAL\" | \"EQUALS\" | \"LIKE\" | \"NOT_EQ\" | \"IN\" | \"NOT_NULL\";\n showSearchIcon?: boolean;\n multiLevelSearchEnable?: boolean = false;\n maxDecimals?: number ;\n emptyReadonlyPlaceholderKey?: string;\n maxLength?: number ;\n readonlyDateDisplay?: 'date' | 'datetime';\n allowNegative?: boolean;\n phoneNumberOnly?: boolean;\n\n constructor(fieldInfo: FieldInfo) {\n this.property = fieldInfo.property;\n this.targetProperty = fieldInfo.targetProperty;\n this.required = fieldInfo.required;\n this.type = fieldInfo.type;\n this.readonly = fieldInfo.readonly;\n this.label = fieldInfo.label;\n this.fieldSize = fieldInfo.fieldSize;\n this.lookupApiPath = fieldInfo.lookupApiPath ? fieldInfo.lookupApiPath : fieldInfo.property;\n this.row = fieldInfo.row;\n this.supportedTypes = fieldInfo.supportedTypes;\n this.listOptions = fieldInfo.listOptions;\n this.pathParams = fieldInfo.pathParams;\n this.viewonly = fieldInfo.viewonly;\n this.multi = fieldInfo.multi;\n this.updateOnly = fieldInfo.updateOnly;\n this.includeAllOption = fieldInfo.includeAllOption;\n this.defaultListOption = fieldInfo.defaultListOption;\n this.acceptNewItem = fieldInfo.acceptNewItem;\n this.cascadedBy = fieldInfo.cascadedBy;\n this.cascadedByProperty = fieldInfo.cascadedByProperty ? fieldInfo.cascadedByProperty : fieldInfo.cascadedBy;\n this.currency = fieldInfo.currency;\n this.translate = fieldInfo.translate;\n this.advancedFilter = fieldInfo.advancedFilter;\n this.placeholder = fieldInfo.placeholder;\n this.validators = fieldInfo.validators;\n this.filterOperator = fieldInfo.filterOperator;\n this.pattern = fieldInfo.pattern;\n this.workflowManaged = fieldInfo.workflowManaged;\n this.workflowCascadingField = fieldInfo.workflowCascadingField;\n this.visible = fieldInfo.visible === undefined || fieldInfo.visible;\n this.attachmentType = fieldInfo.attachmentType;\n this.lookupFilterList = fieldInfo.lookupFilterList;\n this.extraLookupsColumns = fieldInfo.extraLookupsColumns;\n this.displayColumn = fieldInfo.displayColumn;\n this.textFormat = fieldInfo.textFormat;\n this.buttonType = fieldInfo.buttonType;\n this.hideFiles = fieldInfo.hideFiles;\n this.behavioralName = fieldInfo.behavioralName;\n this.flattenBySubAttribute = fieldInfo.flattenBySubAttribute;\n this.defaultValue = fieldInfo.defaultValue;\n this.searchAttribute = fieldInfo.searchAttribute || this.property;\n this.validationMessages = fieldInfo.validationMessages;\n this.hideLabel = fieldInfo.hideLabel;\n this.searchOperator = fieldInfo.searchOperator || 'EQUALS';\n this.showSearchIcon = fieldInfo.showSearchIcon;\n this.multiLevelSearchEnable = fieldInfo.multiLevelSearchEnable;\n this.maxDecimals = fieldInfo.maxDecimals ?? 10;\n this.maxLength = fieldInfo.maxLength ?? 1000;\n this.emptyReadonlyPlaceholderKey = fieldInfo.emptyReadonlyPlaceholderKey;\n this.readonlyDateDisplay = fieldInfo.readonlyDateDisplay;\n this.allowNegative = fieldInfo.allowNegative ?? false;\n this.phoneNumberOnly = fieldInfo.phoneNumberOnly ?? false;\n }\n\n}\n","export interface PageInfo {\n hasHint?: boolean;\n id: string;\n labelsSection: string;\n hasAddButton: boolean;\n apiUri?: string;\n selfRouting?: boolean;\n addNewRoutePath?: string;\n editRoutePath?: string;\n listRoutePath?: string;\n hideTitle?: boolean;\n hideSubtitle?: boolean;\n saveLabel?: string;\n pageHeight?: 'full' | 'match',\n processId?: number,\n draftSupported: boolean;\n hasExtraTabs?: boolean;\n attachmentEnabled?: boolean;\n attachmentDefaultExternal?: boolean;\n printAction?: boolean;\n completedStatusFilterLabel?: string;\n enableHideTerminated?: boolean;\n embededTableOnly?: boolean;\n hasCustomFields?: boolean;\n hidePagination?: boolean;\n hideExtractButton?: boolean;\n hideReportsExtractButton?: boolean;\n externalPropertyName?: string;\n lazyLoadData?: boolean;\n groupByProperty?: string;\n groupByValue?: string[];\n supportGroupingInExport?: boolean;\n pageSize?: number;\n hideAuditLog?: boolean;\n stayOnPage?: boolean;\n hideAdvancedFilter?: boolean;\n}\n\nexport const EMPTY_PAGE_INFO = {\n id: \"\",\n labelsSection: \"\",\n hasAddButton: false,\n selfRouting: true,\n draftSupported: false,\n hasExtraTabs: false,\n attachmentEnabled: false,\n printAction: false,\n hidePagination: false,\n attachmentDefaultExternal: false,\n supportGroupingInExport: false,\n hideReportsExtractButton: false,\n hideAuditLog: false,\n stayOnPage: true\n\n}\n","import {ColumnDef} from \"./column-def.model\";\nimport {FieldPredicate} from \"./field-predicate.model\";\nimport {FilterRequest} from \"./filter-request\";\n\nexport class ReportRequest {\n sessionId: string;\n title: string;\n prefLang: string;\n columns: ColumnDef[];\n filter: string;\n reportType: 'pdf' | 'xlsx'\n dataset: any[];\n orientation: string;\n searchStr?: string;\n filtersList?: FieldPredicate[];\n filterRequest?: FilterRequest;\n reportCode?: string;\n constructor(br : any) {\n this.sessionId = br.sessionId;\n this.title = br.title;\n this.prefLang = br.prefLang;\n this.searchStr = br.searchStr;\n this.filter = br.filter;\n this.columns = br.columns;\n this.reportType=br.reportType;\n this.dataset = br.dataset;\n this.orientation = br.orientation;\n this.filtersList = br.filtersList;\n this.filterRequest = br.filterRequest;\n this.reportCode = br.reportCode;\n }\n\n}\n","import {Filter} from \"./filter.model\";\nimport {MATCH_TYPE} from \"./SearchStrConfig\";\n\nexport class FilterRequest {\n filters?: Filter[];\n searchStr: string;\n pageIndex: number;\n pageSize: number;\n sortKey: string;\n sortDirection: 'ASC'|'DESC';\n apiUri: string;\n columns: string[];\n pendingPage: boolean;\n matchType?: MATCH_TYPE;\n\n constructor(pageSize: number = 10) {\n this.apiUri = '';\n this.searchStr = '';\n this.pageIndex = 0;\n this.pageSize = pageSize;\n this.sortKey = 'id';\n this.sortDirection = \"DESC\";\n this.columns = [];\n this.pendingPage = false;\n }\n}\n\n","export class Filter {\n id?: any;\n key?: any;\n label?: string;\n fieldName?: string;\n joinObjectName?: string;\n valueObject?: any;\n fieldType?: string;\n objectFieldName?: string;\n filterType?: 'ASSIGNED_TO_ME'|'FILED_FILTER' | 'CLEAR_FILTERS' | 'CUSTOMER_ID'| 'VENDOR_ID' | 'INVOICE_CUSTOMER_ID'|\n 'INVOICE_VENDOR_ID' | 'DATE' | 'ASSIGNED_DEPARTMENT'| 'ASSIGNED_DEPARTMENT_MANAGER_STEPS';\n operator?: 'GREATER_THAN_EQUAL'|'GREATER_THAN'| 'LESS_THAN'|'LESS_THAN_EQUAL'| 'EQUALS'| 'LIKE'| 'NOT_EQ'| 'IN' | 'NOT_NULL';\n firstValue?: any;\n secondValue?: string;\n values?: string[];\n autoSelect?: boolean = false;\n\n constructor(filter : Filter) {\n this.id = filter.id;\n this.key = filter.key;\n this.label = filter.label;\n this.fieldName = filter.fieldName;\n this.joinObjectName = filter.joinObjectName;\n this.objectFieldName = filter.objectFieldName;\n this.valueObject = filter.valueObject;\n this.filterType = filter.filterType || 'FILED_FILTER';\n this.fieldType = filter.fieldType;\n this.operator = filter.operator || 'EQUALS';\n this.firstValue = filter.firstValue;\n this.secondValue = filter.secondValue;\n this.values = filter.values;\n this.autoSelect = filter.autoSelect;\n }\n}\n\nexport const HIDE_TERMINATED: Filter = new Filter(\n {key: 2, label: 'hideTerminated', filterType: 'FILED_FILTER', fieldType: 'number' , fieldName: 'statusId', firstValue: '3' , operator: 'NOT_EQ' , autoSelect:true});\n\nexport const ASSIGNED_TO_ME_FILTER: Filter = new Filter(\n {key: -1, label: 'Assigned to me', fieldName: 'stepId', filterType: 'ASSIGNED_TO_ME', autoSelect: true});\n\nexport const PENDING_STATUS_FILTER: Filter = new Filter(\n {key: -2, label: 'Pending Items', fieldName: 'statusId', firstValue: '2', filterType: 'FILED_FILTER'});\n\nexport const CLEAR_FILTERS: Filter = new Filter(\n {key: -3, label: 'clear', filterType:'CLEAR_FILTERS'});\n\nexport const ASSIGNED_DEPARTMENT_FILTER : Filter = new Filter(\n {key: -4, label: 'ASSIGNED_DEPARTMENT', filterType:'ASSIGNED_DEPARTMENT'});\n","export class LookupItem {\n id: number;\n arabicName: string;\n englishName: string;\n defaultValue?: boolean = false;\n\n constructor(lookup: LookupItem) {\n this.id = lookup.id;\n this.englishName = lookup.englishName;\n this.arabicName = lookup.arabicName;\n this.defaultValue = lookup.defaultValue;\n }\n}\n\nexport const ALL_ITEM= {\n id: -100,\n arabicName:'Select All',\n englishName:'Select All',\n defaultValue: false\n}\n\n","export class SnackMessage {\n message: string='';\n translate: boolean=false;\n type: 'info' | 'success' | 'error' | 'warning';\n translateParams: any;\n\n\n constructor(message: string, translate=false , type?:any , translateParams: any = {}) {\n this.message = message;\n this.translate = translate;\n this.type = type;\n this.translateParams = translateParams;\n }\n}\n","import {PageInfo} from \"./page-info\";\n\nexport interface TablePageUserAction {\n type: 'add' | 'select' | 'extra';\n id?:number;\n item?:any;\n actionKey?: string;\n pageInfo?:PageInfo\n}\n\nexport const SELECT_RECORD_ACTION: TablePageUserAction = {\n type:'select'\n}\nexport const EXTRA_ACTION: TablePageUserAction = {\n type:'extra'\n}\n\nexport const DRILL_DOWN_ACTION: TablePageUserAction = {\n type:'extra'\n}\nexport const JUNIOR_DOWN_ACTION: TablePageUserAction = {\n type:'extra'\n}\n\nexport const ADD_NEW_RECORD_ACTION: TablePageUserAction = {\n type:'add',\n id: -1\n}\n\nexport const TABLE_RECORD_ACTION: TablePageUserAction = {\n type:'extra',\n id: -1\n}\n","export const NEW =1;\nexport const SAVE =2;\nexport const REJECT =3;\nexport const APPROVE =4;\nexport const SAVE_AND_COMPLETE =5;\n\nexport class DoActionRequest {\n actionId: number;\n comment: string;\n subject: any;\n}\n","import {FieldInfo, EMPTY_PAGE_INFO, PageInfo, FilterRequest, SAVE_AND_COMPLETE} from \"../base-model\";\nimport {APPROVE, NEW, SAVE} from \"../base-model/do-action-request\";\nimport {Validators} from \"@angular/forms\";\n\nexport class BaseUtils {\n\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n labelKey(column: any) {\n if (column.type === 'workflowStatus') {\n return 'INVENTORY.workflowStatus'\n }\n if (!column.property.length) {\n return \"\";\n }\n const configuredKey = column.label ? column.label : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n labelKeyByValue(column: any, element) {\n if (!column.property.length) {\n return \"\";\n }\n return `${this.pageInfo.labelsSection}.${element[column.property]}`\n }\n\n formatTimeToDate(v: any){\n const fromTime: Date = new Date();\n if (v) {\n let split = v.split(\":\");\n fromTime.setHours(split[0], split[1]);\n }\n return new Date(fromTime.getTime());\n }\n}\n\nexport function buildFormFields(fields: FieldInfo[], item:any){\n let fieldsControls: string[] = [];\n for (let field of fields) {\n if (field.type !== 'spacer') {\n const emptyValue =\n field.type === 'lookup' || field.type === 'multi-select'\n ? null\n : field.type === 'multi-state-checkbox'\n ? []\n : '';\n const extractedValue = item ? extractFieldName(item, field.property) : undefined;\n let validators = field.required\n ? [...(field.validators || []), Validators.required]\n : [...(field.validators || [])];\n if (field.type === 'number' && !field.allowNegative) {\n validators = [...validators, Validators.min(0)];\n }\n\n fieldsControls[field.property] = extractedValue !== undefined && extractedValue !== null\n ? [extractedValue, validators]\n : [emptyValue, validators];\n }\n }\n return fieldsControls;\n}\nexport function buildItemsList(searchStr: string, apiPath?: string, cascadedByProperty?:string){\n const filterRequest : FilterRequest = new FilterRequest();\n // return {\n filterRequest.apiUri = cascadedByProperty ? `${apiPath}/${cascadedByProperty}` :apiPath;\n filterRequest.searchStr= searchStr\n filterRequest.pageIndex = 0;\n filterRequest.pageSize= 10;\n filterRequest.sortKey= 'id';\n filterRequest.sortDirection = \"DESC\" as const;\n // }\n return filterRequest;\n}\n\nexport function extractFieldName(element: any, property: string) {\n if (property.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n}\n\nexport function getPositiveWfActionKey(stateType: any) {\n if (stateType === \"COMPLETED\") {\n return \"save\";\n } else if (stateType === \"PENDING\" || stateType === \"NEW\") {\n return \"approve\";\n }\n return \"save\";\n}\n\nexport function getNegativeWfActionKey(stateType: any) {\n if (stateType === \"COMPLETED\" ) {\n return \"cancel\";\n } else if (stateType === \"PENDING\"|| stateType === \"NEW\") {\n return \"reject\";\n }\n return \"cancel\";\n}\n\nexport function getWfActionId(stateType) {\n let actionId = NEW;\n if (stateType === \"COMPLETED\") {\n actionId = SAVE;\n } else if (stateType === \"PENDING\" || stateType === \"NEW\") {\n actionId = APPROVE;\n }\n return actionId;\n}\n\n","export class ResponseEnvelop {\n valid: boolean;\n messages: string[];\n body: any;\n pagesCount: number;\n totalSize: number;\n\n constructor(responseEnvelop:ResponseEnvelop) {\n this.valid = responseEnvelop.valid;\n this.messages = responseEnvelop.messages;\n this.body = responseEnvelop.body;\n this.pagesCount = responseEnvelop.pagesCount;\n this.totalSize = responseEnvelop.totalSize;\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {Location, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {ButtonActionSettings, PageInfo} from \"../../base-model\";\nimport {MatChipListbox, MatChipOption} from \"@angular/material/chips\";\n\n@Component({\n selector: 'app-title-bar',\n standalone: true,\n imports: [\n NgIf,\n MatIconModule,\n MatButton,\n MatMenuItem,\n MatMenu,\n NgForOf,\n MatMenuTrigger,\n TranslateModule,\n MatChipListbox,\n MatChipOption,\n ],\n templateUrl: './title-bar.component.html',\n styleUrls: ['./title-bar.component.css', 'title-bar.component.scss']\n})\nexport class TitleBarComponent implements OnInit, OnChanges {\n @Input()\n pageTitle: string = \"\";\n\n @Input()\n showExtractButton: boolean = false;\n\n @Input()\n totalElements?: number;\n\n @Input()\n titleMode: string = '';\n\n @Input()\n pageInfo: PageInfo;\n\n @Input()\n subTitle: string = '';\n\n @Input()\n statusDesc?: string;\n\n @Input()\n newAction: boolean = false;\n\n\n @Input() // @ts-ignore\n extraButton: string;\n\n\n @Input()\n showDetails: any = [];\n\n @Input()\n showImport = false;\n\n @Input()\n showButton = false;\n\n @Output()\n newActionClicked = new EventEmitter();\n\n @Output()\n extraButtonClicked = new EventEmitter();\n\n\n @Output()\n extractReport = new EventEmitter();\n\n @Input()\n extraData = '';\n\n listTitle = '';\n newButton = '';\n\n @Input()\n titleCorporateAdmin: string = '';\n\n isRoot: boolean = false;\n @Input()\n hideBackButton: boolean = true;\n\n @Input() buttons: ButtonActionSettings[] = [];\n @Input() buttonsDisplayMode: 'dropdown' | 'list' = 'dropdown';\n @Output() buttonClicked = new EventEmitter<ButtonActionSettings>();\n @Input() draftSupported: boolean = false;\n @Input() isPending: boolean = false;\n @Input() onViewModeChange?: (isPending: boolean) => void;\n @Output() viewModeChanged = new EventEmitter<boolean>();\n\n private _isPending: boolean = false;\n\n constructor(private location:Location,\n private dir: Directionality) {\n }\n\n ngOnInit(): void {\n this.listTitle = this.pageTitle;\n this.newButton = this.extraButton;\n // this.isRoot = this.authService.isRootOrg();\n this.isRoot = false;\n this._isPending = this.isPending;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"pageTitle\"] && !changes[\"pageTitle\"].isFirstChange() ) {\n this.listTitle = this.pageTitle;\n }\n if (changes[\"isPending\"]) {\n this._isPending = this.isPending;\n }\n }\n\n get currentIsPending(): boolean {\n return this._isPending;\n }\n\n get backIcon(): string {\n return this.dir.value === 'rtl' ? 'arrow_back' : 'arrow_forward';\n }\n\n publishEvent() {\n this.newActionClicked.emit(true);\n }\n\n\n doExtractReport(value: any) {\n this.extractReport.emit(value);\n }\n publishExtraButtonEvent() {\n this.extraButtonClicked.emit(true);\n }\n\n goBack() {\n this.location.back()\n }\n\n resolveButtonHref(btn: ButtonActionSettings): string | null {\n if (btn.showCommentDialog) {\n return null;\n }\n const lh = btn.linkHref;\n if (lh == null || lh === '') {\n return null;\n }\n if (typeof lh === 'function') {\n const resolved = lh(undefined as unknown);\n const s = resolved != null ? String(resolved).trim() : '';\n return s.length > 0 ? s : null;\n }\n const s = String(lh).trim();\n return s.length > 0 ? s : null;\n }\n\n onButtonClick(btn: ButtonActionSettings, event?: MouseEvent) {\n const href = this.resolveButtonHref(btn);\n if (href && event) {\n if (event.ctrlKey || event.metaKey || event.button === 1) {\n return;\n }\n event.preventDefault();\n }\n this.buttonClicked.emit(btn);\n }\n\n onViewModeChanged(isPending: boolean) {\n this._isPending = isPending;\n if (this.onViewModeChange) {\n this.onViewModeChange(isPending);\n }\n this.viewModeChanged.emit(isPending);\n }\n\n onChipSelectionChange(event: any, listbox?: MatChipListbox): void {\n const value = event.value;\n if (value !== 'COMPLETED' && value !== 'PENDING') {\n setTimeout(() => listbox && (listbox.value = this._isPending ? 'PENDING' : 'COMPLETED'));\n return;\n }\n if (this._isPending !== (value === 'PENDING')) this.onViewModeChanged(value === 'PENDING');\n }\n}\n","<div class=\"row mainTitleBar gap-20 default-align\">\n\n <div class=\"column flex-auto textTitle\" >\n <h2 *ngIf=\"!pageInfo.hideTitle\" style=\"margin: 0;\">\n <span class=\"textTitle__titleMode\">{{ titleMode | translate }}</span>\n {{ listTitle | translate }}\n <span *ngIf=\"titleCorporateAdmin && isRoot\">({{ titleCorporateAdmin }})</span>\n {{ extraData }}\n </h2>\n <span *ngIf=\"subTitle\" class=\"textTitle__subTitle\">{{ subTitle | translate }}</span>\n <div *ngIf=\"pageInfo.draftSupported\" class=\"chips-container\">\n <mat-chip-listbox #box [attr.aria-label]=\"'BASE_TABLE.documentStatus' | translate\" [multiple]=\"false\" [value]=\"currentIsPending ? 'PENDING' : 'COMPLETED'\" (click)=\"$event.stopPropagation()\" (change)=\"onChipSelectionChange($event, box)\">\n <mat-chip-option [selected]=\"!currentIsPending\" [color]=\"'accent'\" value=\"COMPLETED\" (click)=\"$event.stopPropagation()\">\n <mat-icon *ngIf=\"!currentIsPending\" style=\"font-size: 14px; width: 14px; height: 14px; margin-right: 4px;\">check</mat-icon>\n {{'finished' | translate}}\n </mat-chip-option>\n <mat-chip-option [selected]=\"currentIsPending\" [color]=\"'accent'\" value=\"PENDING\" (click)=\"$event.stopPropagation()\">\n <mat-icon *ngIf=\"currentIsPending\" style=\"font-size: 14px; width: 14px; height: 14px; margin-right: 4px;\">check</mat-icon>\n {{'todo' | translate}}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n\n <div class=\"column end-items gap-20\">\n <button type=\"button\" mat-flat-button color=\"primary\" style=\"width: 100px\" *ngIf=\"!hideBackButton\" (click)=\"goBack()\" id=\"title-bar-back-btn\">\n <mat-icon color=\"second\">{{ backIcon }}</mat-icon>\n <span style=\"font-weight: bold\">{{ 'back' | translate }}</span>\n </button>\n\n <div class=\"row flex-auto gap-20 buttons-wrapper\">\n <ng-container *ngIf=\"buttonsDisplayMode === 'dropdown'\">\n <button\n type=\"button\"\n *ngIf=\"buttons && buttons.length > 0\"\n mat-flat-button\n [matMenuTriggerFor]=\"actionMenu\"\n class=\"title-bar-action-button\"\n [attr.id]=\"'title-bar-action-button'\">\n <div class=\"button-content\">\n <mat-icon class=\"button-icon\">{{ buttons[0].icon }}</mat-icon>\n <span class=\"button-label\">{{ buttons[0].label | translate }}</span>\n <mat-icon class=\"button-arrow\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #actionMenu=\"matMenu\" class=\"title-bar-action-menu\">\n <ng-container *ngFor=\"let btn of buttons\">\n <a\n *ngIf=\"resolveButtonHref(btn) as href\"\n mat-menu-item\n [href]=\"href\"\n (click)=\"onButtonClick(btn, $event)\"\n [attr.id]=\"btn.id || ('title-bar-menu-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveButtonHref(btn)\"\n type=\"button\"\n mat-menu-item\n (click)=\"onButtonClick(btn)\"\n [attr.id]=\"btn.id || ('title-bar-menu-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </ng-container>\n </mat-menu>\n </ng-container>\n\n <ng-container *ngIf=\"buttonsDisplayMode === 'list'\">\n <ng-container *ngFor=\"let btn of buttons\">\n <a\n *ngIf=\"resolveButtonHref(btn) as href\"\n mat-flat-button\n color=\"primary\"\n class=\"title-bar-list-button\"\n [href]=\"href\"\n (click)=\"onButtonClick(btn, $event)\"\n [attr.id]=\"btn.id || ('title-bar-list-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </a>\n <button\n *ngIf=\"!resolveButtonHref(btn)\"\n type=\"button\"\n mat-flat-button\n color=\"primary\"\n class=\"title-bar-list-button\"\n (click)=\"onButtonClick(btn)\"\n [attr.id]=\"btn.id || ('title-bar-list-btn-' + (btn.action || btn.label || btn.key))\">\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgIf, NgForOf } from '@angular/common';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-paginator',\n templateUrl: './paginator.component.html',\n styleUrls: ['./paginator.component.css'],\n standalone: true,\n imports: [MatIconModule, MatButtonModule, NgIf, NgForOf],\n})\nexport class PaginatorComponent implements OnInit, OnChanges {\n @Input() currentPage = 1;\n @Input() totalItems = 0;\n @Input() pageSize = 10;\n @Input() pageSizeOptions: number[] = [5, 10, 25, 50];\n @Input() mobileLoadMoreIncrement = 2;\n @Input() displayedItems = 0;\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() pageSizeChange = new EventEmitter<number>();\n @Output() loadMore = new EventEmitter<number>();\n\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n constructor(\n private directionality: Directionality,\n private readonly liveAnnouncer: LiveAnnouncer,\n private readonly translate: TranslateService,\n ) {}\n\n ngOnInit() {\n this.currentDirection = this.directionality.value;\n this.directionality.change?.subscribe((value) => {\n this.currentDirection = value;\n });\n if (!this.pageSizeOptions.includes(this.pageSize)) {\n Promise.resolve().then(() => {\n this.pageSize = this.pageSizeOptions[1];\n this.pageSizeChange.emit(this.pageSize);\n });\n }\n if (this.displayedItems === 0) {\n this.displayedItems = this.pageSize;\n }\n }\n\n ngOnChanges() {\n if (this.currentPage > this.totalPages) {\n this.currentPage = this.totalPages || 1;\n }\n if (this.displayedItems === 0 || (this.displayedItems === this.pageSize && this.currentPage > 1)) {\n this.displayedItems = Math.min(this.currentPage * this.pageSize, this.totalItems);\n }\n }\n\n get totalPages(): number {\n return Math.ceil(this.totalItems / this.pageSize);\n }\n\n get startIndex(): number {\n return this.totalItems === 0 ? 0 : (this.currentPage - 1) * this.pageSize + 1;\n }\n\n get endIndex(): number {\n return Math.min(this.currentPage * this.pageSize, this.totalItems);\n }\n\n goToPage(page: number) {\n if (page >= 1 && page <= this.totalPages) {\n const previous = this.currentPage;\n this.currentPage = page;\n this.pageChange.emit(this.currentPage);\n if (previous !== this.currentPage) {\n queueMicrotask(() => this.announcePagination());\n }\n }\n }\n\n nextPage() {\n if (this.currentPage < this.totalPages) {\n this.goToPage(this.currentPage + 1);\n }\n }\n\n previousPage() {\n if (this.currentPage > 1) {\n this.goToPage(this.currentPage - 1);\n }\n }\n\n onPageSizeChange(size: number) {\n this.pageSize = size;\n this.currentPage = 1;\n this.pageSizeChange.emit(this.pageSize);\n this.pageChange.emit(this.currentPage);\n queueMicrotask(() => this.announcePagination());\n }\n\n private announcePagination(): void {\n const message = this.translate.instant('BASE_TABLE.paginationStatus', {\n current: this.currentPage,\n total: this.totalPages,\n start: this.startIndex,\n end: this.endIndex,\n items: this.totalItems,\n });\n void this.liveAnnouncer.announce(message, 'polite');\n }\n\n getPageNumbers(): (number | string)[] {\n const TOTAL = this.totalPages;\n const CURRENT = this.currentPage;\n const PAGES: (number | string)[] = [];\n\n if (TOTAL <= 7) {\n for (let i = 1; i <= TOTAL; i++) {\n PAGES.push(i);\n }\n } else {\n PAGES.push(1);\n\n if (CURRENT <= 3) {\n for (let i = 2; i <= 4; i++) {\n PAGES.push(i);\n }\n PAGES.push('...');\n PAGES.push(TOTAL - 1);\n PAGES.push(TOTAL);\n } else if (CURRENT >= TOTAL - 2) {\n PAGES.push(2);\n PAGES.push('...');\n for (let i = TOTAL - 3; i <= TOTAL; i++) {\n PAGES.push(i);\n }\n } else {\n PAGES.push(2);\n PAGES.push('...');\n PAGES.push(CURRENT - 1);\n PAGES.push(CURRENT);\n PAGES.push(CURRENT + 1);\n PAGES.push('...');\n PAGES.push(TOTAL - 1);\n PAGES.push(TOTAL);\n }\n }\n\n return PAGES;\n }\n\n isEllipsis(page: number | string): boolean {\n return page === '...';\n }\n\n isActive(page: number | string): boolean {\n return typeof page === 'number' && page === this.currentPage;\n }\n\n onLoadMore() {\n if (this.canLoadMore) {\n this.loadMore.emit(this.mobileLoadMoreIncrement);\n queueMicrotask(() => this.announcePagination());\n }\n }\n\n get canLoadMore(): boolean {\n return this.displayedItems < this.totalItems;\n }\n\n get currentPageNumber(): number {\n return Math.ceil(this.displayedItems / this.mobileLoadMoreIncrement) || 1;\n }\n\n get totalPageNumbers(): number {\n return Math.ceil(this.totalItems / this.mobileLoadMoreIncrement);\n }\n\n protected readonly Math = Math;\n}\n","<!-- Desktop Pagination -->\n<div class=\"paginator-container paginator-desktop\" [dir]=\"currentDirection\" [class.rtl]=\"currentDirection === 'rtl'\">\n <button\n class=\"paginator-button paginator-nav-button\"\n [class.disabled]=\"currentPage === 1\"\n [disabled]=\"currentPage === 1\"\n (click)=\"previousPage()\"\n type=\"button\">\n <mat-icon class=\"paginator-icon paginator-icon-left\">chevron_left</mat-icon>\n </button>\n\n <ng-container *ngFor=\"let page of getPageNumbers()\">\n <button\n *ngIf=\"!isEllipsis(page)\"\n class=\"paginator-button paginator-page-button\"\n [class.active]=\"isActive(page)\"\n [disabled]=\"isActive(page)\"\n (click)=\"goToPage(+page)\"\n type=\"button\">\n <span class=\"paginator-page-number\">{{ page }}</span>\n </button>\n <div *ngIf=\"isEllipsis(page)\" class=\"paginator-button paginator-ellipsis\">\n <span class=\"paginator-ellipsis-text\">...</span>\n </div>\n </ng-container>\n\n <button\n class=\"paginator-button paginator-nav-button\"\n [class.disabled]=\"currentPage === totalPages\"\n [disabled]=\"currentPage === totalPages\"\n (click)=\"nextPage()\"\n type=\"button\">\n <mat-icon class=\"paginator-icon paginator-icon-right\">chevron_right</mat-icon>\n </button>\n</div>\n\n<!-- Mobile \"Load More\" Pagination -->\n<div class=\"paginator-mobile\">\n <button\n class=\"paginator-load-more-button\"\n [disabled]=\"!canLoadMore\"\n (click)=\"onLoadMore()\"\n type=\"button\">\n <span class=\"paginator-load-more-text\">Load More</span>\n </button>\n <p class=\"paginator-page-indicator\">{{ currentPageNumber }} of {{ totalPageNumbers }}</p>\n</div>","import {FormGroup} from \"@angular/forms\";\nimport {LookupItem} from \"../base-model\";\n\nexport function RequireMatch(control: FormGroup) {\n const selection: any = control.value;\n if (typeof selection === 'string' || (selection instanceof LookupItem && selection.id === -1)) {\n return { incorrect: true };\n }\n return null;\n}\n","import { FormGroup } from '@angular/forms';\n\nexport function MultiEmailValidator(control: FormGroup) {\n if (!control.value) {\n return null;\n }\n const emails = control.value.split(';').map(email => email.trim());\n\n for (let email of emails) {\n if (!email.match(/^([\\w+-.%]+@[\\w-.]+\\.[A-Za-z]{2,7};?)*$/)) {\n return { 'invalidEmail': { value: control.value } };\n }\n }\n return null;\n}\n","import { AbstractControl, ValidationErrors, FormArray, FormGroup } from '@angular/forms';\n\nexport function DateRangeValidator(group: AbstractControl): ValidationErrors | null {\n let fromDateControl: AbstractControl | null = null;\n let toDateControl: AbstractControl | null = null;\n\n if (group.parent instanceof FormGroup && group.parent.parent instanceof FormArray) {\n const formGroup = group.parent;\n fromDateControl = formGroup.get('from');\n toDateControl = formGroup.get('to');\n } else {\n fromDateControl = group.root.get('from');\n toDateControl = group.root.get('to');\n }\n\n if (fromDateControl && toDateControl) {\n const fromDateValue = fromDateControl.value;\n const toDateValue = toDateControl.value;\n\n if (fromDateValue && toDateValue) {\n const fromDate = new Date(fromDateValue);\n const toDate = new Date(toDateValue);\n\n if (fromDate > toDate) {\n return { dateRangeInvalid: 'Invalid Date Range: To date must be after from date' };\n }\n }\n }\n\n return null;\n}\n","export class ColumnDef {\n order: number;\n label: string;\n fieldName: string;\n datatype: string;\n groupLabel: string;\n width: number;\n showSum: boolean=false;\n showCount: boolean=false;\n\n constructor(tableColumn: any, order: number, transLabel :string, lang?:string, groupLabel?:string) {\n this.order = order;\n this.label = transLabel;\n if (tableColumn.reportProperty) {\n this.fieldName = tableColumn.reportProperty;\n } else {\n this.fieldName = tableColumn.property.toString();\n }\n\n if (tableColumn.langDrivenName){\n this.fieldName = this.fieldName + \".\" + (lang === 'en'? \"englishName\": \"arabicName\");\n }\n\n if (tableColumn.reportType) {\n this.datatype = tableColumn.reportType;\n } else {\n this.datatype = tableColumn.type === 'stateType' || tableColumn.type === 'list' ? 'text' : tableColumn.type;\n }\n this.width = tableColumn.reportwidth ? tableColumn.reportwidth : null;\n this.showSum = tableColumn.showSum;\n this.showCount = tableColumn.showCount;\n this.groupLabel = groupLabel;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {BehaviorSubject} from \"rxjs\";\nimport {SnackMessage} from \"../base-model/snack-message.model\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TopPanel {\n\n public topPanelMessage$ = new BehaviorSubject<SnackMessage>({\n message: '',\n translate: false,\n type: 'info',\n translateParams: {}\n });\n\n}\n","import {Inject, Injectable} from \"@angular/core\";\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams} from \"@angular/common/http\";\nimport {Observable, of, Subject} from \"rxjs\";\nimport {catchError, distinctUntilChanged} from \"rxjs/operators\";\nimport {SnackMessage} from \"../base-model/snack-message.model\";\nimport {PageInfo} from \"../base-model/page-info\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {ColumnDef} from \"../base-model/column-def.model\";\nimport {TableColumn} from \"../base-model/table-column.interface\";\nimport {GetItemsList} from \"../base-model/get-items-list\";\nimport {FieldAction} from \"../base-model/field-action\";\nimport {Workflow} from \"../base-model/workflow/workflow.model\";\nimport {ReportRequest} from \"../base-model/report-request.model\";\nimport {FilterRequest} from \"../base-model/filter-request\";\nimport {ResponseEnvelop} from \"../base-model/response-envelop.model\";\nimport {FormGroup} from \"@angular/forms\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport {TopPanel} from \"./top-panel\";\nimport {DoActionRequest} from \"../base-model/do-action-request\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActionConfirmationComponent} from \"../components/action-confirmation/action-confirmation.component\";\n\nconst WORKFLOW_STATES_MAP: Record<number, string> = {\n 1: 'New',\n 2: 'Pending',\n 3: 'Terminated',\n 4: 'Completed',\n 5: 'Updated',\n 6: 'Default'\n};\n\nconst EXCLUDED_REPORT_COLUMNS = ['listAction','button', 'checkbox'];\n@Injectable({\n providedIn: 'root'\n})\nexport class BackendService {\n public topPanelMessage$ = new Subject<SnackMessage>();\n // @ts-ignore\n public parentForm: FormGroup;\n public childForm: FormGroup;\n public fieldAction$ = new Subject<FieldAction>();\n public isEmptyItems: boolean = true;\n\n constructor(private http: HttpClient,\n private topPanel: TopPanel,\n private translateService: TranslateService,\n private route: ActivatedRoute,\n private dialog: MatDialog,\n @Inject('config') private config: any,\n @Inject('secretsManager') private secretsManager: any) {\n\n this.topPanelMessage$.subscribe(msg => {\n this.topPanel.topPanelMessage$.next(msg);\n })\n }\n\n set defaults(value: any | undefined) {\n }\n\n get defaults(): any | undefined {\n return {};\n }\n\n getStatusDescription(element: any, workflow: Workflow) {\n if (element?.stepId) {\n\n let index = workflow?.workflowSteps?.findIndex(s => s.stepId === element.stepId);\n if (index > -1) {\n return this.translateService.getDefaultLang() === 'ar' ?\n workflow?.workflowSteps[index].stepNameAr || workflow?.workflowSteps[index].stepName:\n workflow?.workflowSteps[index].stepName;\n // return this.translateService.instant(workflow?.workflowSteps[index].stepName);\n } else {\n return this.translateService.instant('INVENTORY.inprocessStatus');\n }\n } else {\n if (element.statusId === 4 && element.statusDescription) {\n return element.statusDescription;\n } else if (element.statusId) {\n return this.translateService.instant(WORKFLOW_STATES_MAP[element.statusId]);\n } else {\n return \"unknown\";\n }\n }\n }\n//sss\n getItemsByFilter(reportRequest: any, apiUrl: string): Observable<any> {\n const url = `${this.getApiBasePath()}/api/v1${apiUrl}/list`;\n return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n getItemAuditLog(reportRequest: any, apiUrl: string): Observable<any> {\n const url = `${this.getApiBasePath()}/api/v1${apiUrl}/audit-log`;\n return this.http.post(url, reportRequest, { headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n\n private buildSecuredHeader() {\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: this.config.getAuthToken()\n });\n return headers;\n }\n\n public buildFormSecuredHeader() {\n const headers = new HttpHeaders({\n Authorization: this.config.getAuthToken()\n });\n return headers;\n }\n\n labelKey(column: any, pageInfo: PageInfo) {\n const configuredKey = column.label ? column.label : column.property;\n\n if (configuredKey && configuredKey.trim() !== '' && configuredKey.startsWith(pageInfo.labelsSection)) {\n return configuredKey;\n }\n\n return `${pageInfo.labelsSection}.${configuredKey}`;\n }\n\n\n private buildReportColumn(columns: TableColumn<any>[], pageInfo: PageInfo): ColumnDef[] {\n let columnDef: ColumnDef[] = [];\n\n columns.filter(x => !EXCLUDED_REPORT_COLUMNS.includes(x.type)).forEach((c, index) => {\n let transLabel = this.translateService.instant(this.labelKey(c,pageInfo));\n let transGroup = pageInfo.supportGroupingInExport ?\n c.group.trim() ? this.translateService.instant(c.group) : ' ' : null;\n if (c.type === 'workflowStatus') {\n transLabel = this.translateService.instant('workflowStatus');\n }\n if ((c.reportVisible === true) || (c.visible === true && c.reportVisible !== false)) {\n columnDef.push(new ColumnDef(c, index, transLabel, this.translateService.getDefaultLang(),transGroup));\n }\n });\n return columnDef;\n }\n\n private base64ToArrayBuffer(base64: string) {\n const binaryString = window.atob(base64); // Comment this if not using base64\n const bytes = new Uint8Array(binaryString.length);\n return bytes.map((byte, i) => binaryString.charCodeAt(i));\n }\n\n buildReportRequest(columns: TableColumn<any>[], title: string | string[], filterRequest: FilterRequest, reportType: any, pageInfo: PageInfo, searchStr: string ,orientation='PORTRAIT'): ReportRequest {\n const columnDef = this.buildReportColumn(columns, pageInfo);\n const reportRequest = new ReportRequest({\n dataset: [], filter: \"\",\n columns: columnDef,\n // sessionId: this.topPanel.userSession().sessionId,\n sessionId: this.config.getAuthToken(),\n title: this.translateService.instant(title),\n prefLang: this.translateService.getDefaultLang(),\n reportType: reportType,\n searchStr: searchStr,\n filterRequest: filterRequest,\n orientation: orientation});\n return reportRequest;\n }\n\n getLookupItemsByMultiFilter(listItems: GetItemsList, filterRequest?: FilterRequest): Observable<any> {\n listItems.pageSize = 100;\n filterRequest.pageSize = 100;\n const params = new HttpParams().set('searchStr', listItems.searchStr);\n let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;\n return this.http.post(url, filterRequest, { headers: this.buildSecuredHeader(), params: params}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n getLookupItemsByFilter(listItems: GetItemsList, cascadedId?: any): Observable<any> {\n listItems.pageSize = 500;\n const params = new HttpParams().set('searchStr', listItems.searchStr);\n let url = `${this.getApiBasePath()}/api/v1/${listItems.apiUri}`;\n if (cascadedId) {\n url = url + `/${cascadedId}`\n }\n\n return this.http.post(url, listItems,{ headers: this.buildSecuredHeader()}).pipe(\n distinctUntilChanged(),\n catchError(err => of(err.message || err)));\n }\n\n\n\n downloadReport(reportRequest: ReportRequest, pageApiPath : string, readyPath? : boolean ) {\n const s = readyPath === true ? `/api/v1${pageApiPath}` : `/api/v1${pageApiPath}/extractAndDownloadListReport`;\n return this.http.post<ResponseEnvelop>(this.getApiBasePath() + s, reportRequest, {headers: this.buildSecuredHeader()}).subscribe(\n (resp:ResponseEnvelop) => {\n if (resp.valid) {\n if (resp.body) {\n this.topPanelMessage$.next(\n new SnackMessage(\n 'report.download.start',\n true,\n 'success',\n {\n entity: reportRequest.title,\n format: reportRequest.reportType?.toUpperCase()\n }\n )\n );\n const filename = reportRequest.title + \".\" + reportRequest.reportType;\n const blob = new Blob([this.base64ToArrayBuffer(resp.body)]);\n if (navigator.msSaveBlob) {\n navigator.msSaveBlob(blob, filename);\n } else {\n const link = document.createElement('a');\n // Browsers that support HTML5 download attribute\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n }\n } else {\n this.topPanelMessage$.next(new SnackMessage('report.download.failed', false, 'error')); }\n }\n );\n\n }\n\n private getApiBasePath(){\n return this.config.getBaseApi();\n }\n\n doActionWithAttachments(request: DoActionRequest, param2: any[], pageInfo: PageInfo) {\n const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;\n const formData: FormData = new FormData();\n formData.set('doActionRequest', new Blob([JSON.stringify(request)], {\n type: \"application/json\"\n }));\n\n return this.http.post(url, formData, { headers: this.buildFormSecuredHeader() }).pipe(\n distinctUntilChanged(),\n catchError((error: HttpErrorResponse) => {\n return of(error.error);\n })\n );\n\n }\n doActionWithAttachment(request: DoActionRequest, file: File, pageInfo: PageInfo) {\n const url = `${this.getApiBasePath()}/api/v1${pageInfo.apiUri}/doActionWithAttachments`;\n const formData: FormData = new FormData();\n\n formData.append('files', file);\n formData.set('doActionRequest', new Blob([JSON.stringify(request)], {\n type: \"application/json\"\n }));\n\n return this.http.post<any>(url, formData, {\n headers: this.buildFormSecuredHeader()\n }).pipe(\n distinctUntilChanged(),\n catchError((error: HttpErrorResponse) => {\n // Transform the error into a fake success-like response\n return of(error.error); // This will now be passed to `next` in subscribe()\n })\n );\n }\n\n encrypt(message: any) {\n return this.secretsManager.encryptSecret(message);\n }\n\n decrypt(secret: any) {\n return this.secretsManager.decryptSecret(secret);\n }\n\n public getConfirmation(): Observable<any> {\n const dialogRef = this.dialog.open(ActionConfirmationComponent, {\n data: {acceptActionLabel: 'accept',rejectActionLabel:'return', warningMsg: 'confirmation_message'},\n width: '600px',\n height: 'auto'\n });\n return dialogRef.afterClosed();\n }\n\n}\n\ndeclare global {\n interface Navigator {\n msSaveBlob: (blobOrBase64: Blob | string, filename: string) => void\n }\n}\n","import {Injectable, signal} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\n\n\nexport class ShareDataService {\n trigger = signal<boolean>(true);\n enableTrigger = (() => (() => this.trigger.update((val) => val = !val)))\n}\n","import {Component, ElementRef, EventEmitter, Input, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {ALL_ITEM, LookupItem} from \"../../base-model\";\nimport {MatAutocomplete, MatAutocompleteTrigger, MatOption} from \"@angular/material/autocomplete\";\nimport {Observable, of} from \"rxjs\";\nimport {FieldInfo} from \"../../base-model\";\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BackendService} from \"../../services\";\nimport {TranslateService} from \"@ngx-translate/core\";\nimport {GetItemsList} from \"../../base-model/get-items-list\";\nimport {MatFormField} from \"@angular/material/form-field\";\nimport {MatChip, MatChipListbox} from \"@angular/material/chips\";\nimport {AsyncPipe, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatInput} from \"@angular/material/input\";\nimport {buildItemsList} from \"../../utils/base-utils\";\nimport {FilterRequest} from \"../../base-model\";\nimport {Filter} from \"../../base-model\";\nimport {RequireMatch} from \"../../validators\";\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\n\n\n@Component({\n selector: 'app-multi-auto-complete',\n standalone: true,\n imports: [\n MatFormField,\n MatChip,\n MatIconModule,\n MatChipsModule,\n NgForOf,\n MatIcon,\n ReactiveFormsModule,\n MatAutocompleteTrigger,\n MatInput,\n MatAutocomplete,\n MatOption,\n AsyncPipe,\n NgIf,\n MatChipListbox,\n TranslateModule,\n ],\n templateUrl: './multi-auto-complete.component.html',\n styleUrl: './multi-auto-complete.component.css'\n})\nexport class MultiAutoCompleteComponent {\n// @ts-ignore\n @ViewChild('itemInput') itemInput: ElementRef<HTMLInputElement>;\n @ViewChild('autocompleteTrigger') matACTrigger: MatAutocompleteTrigger;\n\n lookupItems$: Observable<LookupItem[]> | undefined;\n private lookupItems: LookupItem[] = [];\n\n selectedItems: LookupItem[] = [];\n cascadedIdz: number[] = [];\n isRequired: boolean= false;\n private timer: any;\n\n @Input()// @ts-ignore\n field: FieldInfo;\n //\n @Input()// @ts-ignore\n form: FormGroup;\n\n @Input()// @ts-ignore\n defaultValue: any;\n\n @Input()\n pathParam: any;\n\n @Input()\n readonly : boolean=false;\n\n @Input()\n labelsSection?: string;\n\n @Output()\n selectedValue: EventEmitter<LookupItem[]> = new EventEmitter();\n\n question = 'Would you like to add ?\"';\n\n multiControl = new FormControl();\n\n constructor(private backendService: BackendService, private translateService: TranslateService) {\n }\n\n ngOnInit(): void {\n this.multiControl = new FormControl(null);\n this.updateFieldAttributes();\n\n const initialValue = this.form?.controls[this.field?.property]?.value;\n if (initialValue) {\n this.patchLookupValue(initialValue);\n }\n\n this.multiControl.valueChanges.subscribe(v => {\n if (typeof v === 'string') {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.filterLookupItems(v, null);\n }, 700);\n }\n });\n\n this.getLookupData();\n if (this.field.cascadedBy) {\n this.form?.get(this.field.cascadedBy)?.valueChanges.subscribe(v => {\n this.removeChildItemsIfCascadedByRemoved(v);\n });\n }\n }\n\n private updateFieldAttributes() {\n if (this.field.readonly) {\n this.multiControl.disable();\n } else {\n this.multiControl.enable();\n }\n this.syncFormControlState();\n }\n\n private syncFormControlState(): void {\n const control = this.form?.get(this.field?.property);\n if (!control) {\n return;\n }\n\n if (this.field.readonly) {\n control.clearValidators();\n } else if (this.field.required) {\n control.setValidators([Validators.required]);\n } else {\n control.clearValidators();\n }\n\n control.updateValueAndValidity({ emitEvent: false });\n this.updateInputValidators();\n }\n\n private updateInputValidators(): void {\n if (this.field.readonly) {\n this.multiControl.clearValidators();\n this.isRequired = false;\n this.multiControl.updateValueAndValidity({ emitEvent: false });\n return;\n }\n\n const validators = [];\n if (!this.field.acceptNewItem) {\n validators.push(RequireMatch);\n }\n\n const hasSelectedItems = (this.selectedItems?.length ?? 0) > 0;\n if (this.field.required && !hasSelectedItems) {\n validators.push(Validators.required);\n }\n\n this.multiControl.setValidators(validators);\n this.isRequired = this.field.required && !hasSelectedItems;\n this.multiControl.updateValueAndValidity({ emitEvent: false });\n }\n\n private removeChildItemsIfCascadedByRemoved(v) {\n this.cascadedIdz = [];\n v.forEach(a => {\n this.cascadedIdz.push(a.id);\n });\n let toDeleteIdz = [];\n this.selectedItems?.forEach(x => {\n const del = this.cascadedIdz.findIndex(y => y === x[this.field.cascadedBy]?.id);\n if (del < 0) {\n toDeleteIdz.push(x['id']);\n }\n });\n\n if (toDeleteIdz) {\n this.selectedItems = this.selectedItems.filter(s => !toDeleteIdz.includes(s.id));\n this.form.get(this.field.property).patchValue(this.selectedItems, {emitEvent: true});\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n ngOnChanges({defaultValue, field}: SimpleChanges): void {\n this.patchLookupValue(defaultValue?.currentValue);\n if (field?.currentValue) {\n this.field = field.currentValue;\n this.updateFieldAttributes();\n }\n }\n\n private getLookupData() {\n const listItems: GetItemsList = buildItemsList('', this.field.lookupApiPath);\n\n const filterRequest: FilterRequest = new FilterRequest();\n filterRequest.filters = [];\n this.cascadedIdz = [];\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedBy)?.value?.forEach(a => {\n this.cascadedIdz.push(a.id);\n })\n }\n if (this.field.cascadedBy && this.cascadedIdz?.length > 0) {\n filterRequest.filters.push(new Filter({\n key: 'id', fieldName: this.field.cascadedBy, label: '',\n filterType: 'FILED_FILTER', operator: 'IN',\n valueObject: this.cascadedIdz\n }));\n }\n\n filterRequest.columns = ['id','code','englishName','arabicName'];\n if (!this.field.readonly) {\n this.backendService.getLookupItemsByMultiFilter(listItems, filterRequest).subscribe((resp => {\n if (resp.valid) {\n this.lookupItems = this.field.includeAllOption ? [ALL_ITEM].concat(resp.body) : resp.body;\n if (!this.form.get('id')?.value) {\n this.patchLookupValue(this.lookupItems?.find(l => l.defaultValue));\n }\n const selected = this.selectedItems?.length\n ? this.selectedItems\n : this.form?.get(this.field.property)?.value;\n this.patchLookupValue(selected);\n\n }\n\n }));\n }\n else{\n this.patchLookupValue(this.selectedItems.length ? this.selectedItems : this.form?.get(this.field.property)?.value);\n }\n }\n\n\n selected(value: any): void {\n if (value.id !== -1 && this.selectedItems.findIndex(i => i.id == value.id) === -1) {\n this.selectedItems?.push(value);\n this.itemInput.nativeElement.value = '';\n this.form.get(this.field.property)?.setValue(this.selectedItems);\n this.selectedValue.emit(this.selectedItems);\n this.multiControl.setValue(null, { emitEvent: false });\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n displayFn(selected: any): string {\n return selected ? selected.englishName : undefined;\n\n }\n isSelected(item: any): boolean {\n return this.selectedItems?.some((selected: any) => selected?.code == item?.code);\n }\n\n private availableLookupItems(items: LookupItem[]): LookupItem[] {\n return (items ?? []).filter(item => !this.isSelected(item));\n }\n\n private publishAvailableLookupItems(): void {\n this.lookupItems$ = of(this.availableLookupItems(this.lookupItems));\n }\n\n _allowSelection(option: LookupItem): { [className: string]: boolean } {\n return {\n 'prevent-selection': option.id === -1,\n }\n }\n\n itemNameByLag(item: any): string {\n // return item.arabicName;\n return this.translateService.getDefaultLang() === 'en' ? item.englishName : item.arabicName\n }\n\n private readonly _columns = ['id','code','englishName','arabicName'];\n\n filterLookupItems(name: any, trigger: MatAutocompleteTrigger) {\n if (trigger) {\n trigger.openPanel();\n }\n if (name === undefined) {\n name = '';\n }\n\n const listItems: GetItemsList = buildItemsList(name, this.field.lookupApiPath);\n\n const filterRequest: FilterRequest = new FilterRequest();\n filterRequest.filters = this.field.lookupFilterList || [];\n filterRequest.searchStr = name;\n this.cascadedIdz = [];\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedBy)?.value?.forEach(a => {\n this.cascadedIdz.push(a.id);\n })\n }\n if (this.field.cascadedBy && this.cascadedIdz?.length > 0) {\n filterRequest.filters.push(new Filter({\n key: 'id',joinObjectName: this.field.cascadedBy, fieldName: this.field.cascadedBy, label: '',\n filterType: 'FILED_FILTER', operator: 'IN',\n valueObject: this.cascadedIdz\n }));\n }\n\n filterRequest.columns = [...this._columns, ...(this.field.extraLookupsColumns ?? [])];\n\n this.backendService.getLookupItemsByMultiFilter(listItems, filterRequest).subscribe(resp => {\n let items: LookupItem[] = [];\n if (resp.valid) {\n this.lookupItems = resp.body ?? [];\n items = this.availableLookupItems(this.lookupItems);\n if (!items?.length) {\n this.field.acceptNewItem ?\n items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})):\n items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '})) ;\n\n }\n } else {\n this.field.acceptNewItem ?\n items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})):\n items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '})) ;\n }\n this.lookupItems$ = of(items);\n });\n return;\n }\n\n private patchLookupValue(defaultValue: any) {\n if (defaultValue) {\n this.selectedItems = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n this.multiControl.setValue(null, { emitEvent: false });\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n remove(item: LookupItem) {\n const index = this.selectedItems.indexOf(item);\n if (index >= 0) {\n this.selectedItems.splice(index, 1);\n this.form.get(this.field.property).patchValue(this.selectedItems, {emitEvent: true});\n this.syncFormControlState();\n this.publishAvailableLookupItems();\n }\n }\n\n getPlaceholderKey(): string {\n if (!this.field?.placeholder) {\n return '';\n }\n const configuredKey = this.field.placeholder;\n if (!this.labelsSection) {\n return configuredKey;\n }\n return configuredKey.startsWith(this.labelsSection)\n ? configuredKey\n : `${this.labelsSection}.${configuredKey}`;\n }\n\n get showInputPlaceholder(): boolean {\n return !!this.field?.placeholder && (this.selectedItems?.length ?? 0) === 0;\n }\n\n onInputClick(autocompleteTrigger: MatAutocompleteTrigger): void {\n if (this.field?.readonly || this.readonly) {\n return;\n }\n this.openLookupPanel(autocompleteTrigger);\n }\n\n onTriggerClick(event: MouseEvent, autocompleteTrigger: MatAutocompleteTrigger): void {\n event.stopPropagation();\n if (this.field?.readonly || this.readonly) {\n return;\n }\n this.openLookupPanel(autocompleteTrigger);\n }\n\n onKeydown(event: KeyboardEvent, autocompleteTrigger: MatAutocompleteTrigger) {\n if (event.key === 'Enter') {\n this.filterLookupItems('', autocompleteTrigger);\n autocompleteTrigger.openPanel();\n event.preventDefault();\n }\n }\n\n openLookupPanel(autocompleteTrigger: MatAutocompleteTrigger): void {\n this.filterLookupItems('', autocompleteTrigger);\n autocompleteTrigger.openPanel();\n }\n getId() {\n return this.field.property;\n }\n}\n","<ng-container *ngIf=\"field\" class=\"main-multi-auto\">\n <div class=\"mat-field-wrapper\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{ field.property }}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\">\n {{ 'optional' | translate }}\n </span>\n </div>\n\n <div class=\"multi-select-control\">\n <mat-form-field class=\"full-width multi-autocomplete-field\" appearance=\"outline\">\n <mat-chip-listbox #chipList class=\"chip-listbox\" [selectable]=\"true\">\n <mat-chip\n *ngFor=\"let item of selectedItems\"\n class=\"multi-select-chip\"\n [removable]=\"true\"\n (removed)=\"remove(item)\">\n {{ itemNameByLag(item) }}\n <mat-icon *ngIf=\"!field.readonly\" matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n class=\"chip-input app-input\"\n type=\"text\"\n [id]=\"getId()\"\n #itemInput\n [formControl]=\"multiControl\"\n [matAutocomplete]=\"auto\"\n matInput\n [placeholder]=\"showInputPlaceholder ? (getPlaceholderKey() | translate) : ''\"\n [readonly]=\"readonly\"\n [required]=\"isRequired\"\n (click)=\"onInputClick(autocompleteTrigger); $event.stopPropagation()\"\n (keydown)=\"onKeydown($event, autocompleteTrigger)\"\n [disabled]=\"field.readonly\"\n #autocompleteTrigger=\"matAutocompleteTrigger\"\n [attr.aria-labelledby]=\"'label-' + field.property\">\n </mat-chip-listbox>\n\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayFn\"\n (optionSelected)=\"selected($event.option.value)\">\n <ng-container *ngIf=\"!field.readonly\">\n <mat-option\n *ngFor=\"let item of lookupItems$ | async\"\n [value]=\"item\">\n {{ itemNameByLag(item) }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n </mat-form-field>\n\n <button\n type=\"button\"\n class=\"multi-select-arrow-trigger\"\n [disabled]=\"field.readonly || readonly\"\n [attr.aria-label]=\"'BASE_TABLE.openLookupOptions' | translate\"\n [attr.id]=\"'multi-select-trigger-' + field.property\"\n (click)=\"onTriggerClick($event, autocompleteTrigger)\">\n <svg viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n </svg>\n </button>\n </div>\n </div>\n</ng-container>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {FieldInfo, Filter, LookupItem} from \"../../base-model\";\nimport {MatAutocomplete, MatAutocompleteTrigger, MatOption} from \"@angular/material/autocomplete\";\nimport {Observable, of, Subject, takeUntil} from \"rxjs\";\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\nimport {BackendService} from \"../../services\";\nimport {GetItemsList} from \"../../base-model/get-items-list\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {AsyncPipe, NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {buildItemsList} from \"../../utils/base-utils\";\nimport {RequireMatch} from \"../../validators\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'app-auto-complete',\n standalone: true,\n imports: [\n TranslateModule,\n MatFormFieldModule,\n MatAutocompleteTrigger,\n MatInputModule,\n ReactiveFormsModule,\n NgIf,\n MatAutocomplete,\n AsyncPipe,\n MatOption,\n NgClass,\n MatIcon,\n NgForOf,\n MatIconButton,\n MatButton,\n\n ],\n templateUrl: './auto-complete.component.html',\n styleUrl: './auto-complete.component.css'\n})\nexport class AutoCompleteComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('autocompleteTrigger') matACTrigger: MatAutocompleteTrigger;\n\n lookupItems$: Observable<LookupItem[]> | undefined;\n lookupItems: LookupItem[] = [];\n items: LookupItem[] = [];\n\n // @ts-ignore\n // form: FormGroup;\n\n @Input()// @ts-ignore\n field: FieldInfo;\n\n @Input()// @ts-ignore\n form: FormGroup;\n @Input()// @ts-ignore\n defaultValue: any;\n\n @Input()\n readonly:boolean = false;\n\n @Input()\n supportingAttributes: any;\n\n @Output()\n selectedValue: EventEmitter<LookupItem> = new EventEmitter();\n\n @ViewChild(MatAutocompleteTrigger) autocompleteTrigger!: MatAutocompleteTrigger;\n\n question = 'Would you like to add ?\"';\n cascadedId: number = 0;\n isRequired:boolean = false;\n\n private timer: any;\n private lastOpenLookupRefreshAt = 0;\n private readonly openLookupRefreshGuardMs = 150;\n private readonly destroy$ = new Subject<void>();\n myControl = new FormControl();\n\n constructor(private backendService: BackendService,\n protected translateService: TranslateService,\n @Inject('secretsManager') private secretsManager: any) {\n }\n\n ngOnInit(): void {\n this.buildControl();\n this.extractWorkflowGuidedCascading();\n this.getLookupData();\n // this.myControl.valueChanges.subscribe(v => {\n // if (typeof v === 'string') this.filterLookupItems(v, null);\n // });\n\n this.form.get(this.field.property).valueChanges.subscribe(x => {\n if (x?.id === -100) {\n this.myControl.reset()\n }\n })\n if (this.field.cascadedBy) {\n this.form.get(this.field.cascadedByProperty)?.valueChanges.subscribe(v => {\n this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;\n this.lookupItems = [];\n this.myControl.setValue(undefined);\n this.myControl.patchValue(undefined, {emitEvent: true});\n this.form.get(this.field.property)?.setValue(undefined);\n this.form.get(this.field.property)?.patchValue(undefined, {emitEvent: true});\n this.getLookupData();\n });\n }\n\n this.translateService.onLangChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => this.refreshDisplayedValue());\n }\n\n private extractWorkflowGuidedCascading() {\n if (this.supportingAttributes && this.field.workflowCascadingField && this.supportingAttributes[this.field.workflowCascadingField]) {\n this.cascadedId = this.supportingAttributes[this.field.workflowCascadingField];\n }\n }\n\n private buildControl() {\n this.myControl = new FormControl(this.form?.controls[this.field?.property]);\n this.backendService.fieldAction$.subscribe( e => {\n if (e.property === this.field?.property) {\n this.field.readonly = e.fieldInfo.readonly;\n this.updateAttributes();\n }\n });\n this.updateAttributes();\n\n this.myControl.valueChanges.subscribe( v => {\n if (typeof v === 'string') {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.filterLookupItems(v, null); }, 700);\n }\n }\n );\n }\n\n private updateAttributes() {\n this.myControl.enable();\n if (this.field.readonly) {\n this.myControl.disable();\n this.isRequired = false;\n } else if (this.field.required) {\n this.form?.controls[this.field?.property].setValidators([Validators.required]);\n this.myControl.setValidators([Validators.required]);\n this.isRequired = true;\n }\n\n if (!this.field.acceptNewItem) {\n // @ts-ignore\n this.myControl.setValidators(RequireMatch);\n }\n\n this.myControl.setValue(this.form?.get(this.field?.property)?.value);\n }\n\n ngOnChanges({defaultValue}: SimpleChanges): void {\n this.patchLookupValue(defaultValue?.currentValue);\n }\n\n private getLookupData() {\n if (this.field.cascadedBy && !this.cascadedId) {\n } else {\n const listItems = buildItemsList('', this.field.lookupApiPath, this.field.cascadedBy);\n listItems.columns = ['id','code','englishName','arabicName'];\n\n this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe((resp => {\n if (resp.valid) {\n this.lookupItems = resp.body;\n this.lookupItems = [];\n resp.body.forEach((r: LookupItem) => this.lookupItems.push(r));\n if (!this.form?.get('id')?.value) {\n this.patchLookupValue(this.lookupItems?.find(l => l.defaultValue));\n }\n this.patchLookupValue(this.myControl.value);\n }\n\n }));\n }\n }\n\n itemSelected(value: any) {\n if (value && value.id !== -1) {\n if (value.englishName.indexOf(this.question) === 0) {\n value.englishName = value.englishName.substring(this.question.length).split('\"?')[0];\n }\n if (value.arabicName && value.arabicName.indexOf(this.question) === 0) {\n value.arabicName = value.arabicName.substring(this.question.length).split('\"?')[0];\n }\n this.form.get(this.field.property)?.setValue(value);\n // @ts-ignore\n this.selectedValue.emit(this.myControl.value);\n }\n setTimeout(() => {\n this.autocompleteTrigger.closePanel();\n });\n\n }\n\n displayFn(selected: any): string | undefined {\n if (selected?.id < 0) {\n return null;\n }\n\n if (Array.isArray(selected))\n selected = this.defaultValue\n return this.currentLanguage() === 'en'\n ? selected?.englishName\n : selected?.arabicName;\n }\n\n\n _allowSelection(option: LookupItem): { [className: string]: boolean } {\n return {\n 'prevent-selection': option.id === -1,\n };\n }\n\n itemNameByLag(item: any): string {\n return this.currentLanguage() === 'en' ? item.englishName : item.arabicName\n\n }\n\n private currentLanguage(): string {\n return this.translateService.currentLang\n || this.translateService.defaultLang\n || this.translateService.getDefaultLang()\n || 'en';\n }\n\n private refreshDisplayedValue(): void {\n const selectedValue = this.myControl.value;\n if (!selectedValue || typeof selectedValue === 'string') {\n return;\n }\n\n this.myControl.setValue(selectedValue, {emitEvent: false});\n this.lookupItems$ = of(this.items);\n }\n\n filterLookupItems(name: any, trigger: MatAutocompleteTrigger) {\n if (this.myControl.enabled) {\n if (trigger) {\n trigger.openPanel();\n }\n if (name === undefined) {\n name = '';\n }\n\n if (name === '' && !this.myControl.value) {\n this.myControl.setValue(undefined);\n this.myControl.updateValueAndValidity();\n }\n\n const listItems: GetItemsList = buildItemsList(name, this.field.lookupApiPath, this.field.cascadedBy);\n listItems.filters = this.field.lookupFilterList;\n this.addLookupFilterByAnotherProperties(listItems);\n listItems.columns = ['id','code','englishName','arabicName'];\n this.backendService.getLookupItemsByFilter(listItems);\n if (this.field.cascadedBy) {\n this.cascadedId = this.form.get(this.field.cascadedByProperty).value?.id;\n } else {\n this.extractWorkflowGuidedCascading();\n }\n listItems.columns = ['id','code','englishName','arabicName'];\n this.backendService.getLookupItemsByFilter(listItems, this.cascadedId).subscribe(resp => {\n if (resp.valid) {\n this.items = this.buildVisibleItems(resp.body ?? []);\n if (!this.items?.length) {\n this.field.acceptNewItem ?\n this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :\n this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));\n }\n } else {\n if (this.items?.length == 0)\n this.field.acceptNewItem && this.backendService.parentForm.get(this.field.cascadedBy).value != null ?\n this.items?.push(new LookupItem({id: -2, englishName: this.question + name, arabicName: this.question + name})) :\n this.items?.push(new LookupItem({id: -1, englishName: 'No match ...', arabicName: 'غير موجود ... '}));\n }\n this.lookupItems$ = of(this.items);\n });\n return;\n }\n }\n\n private buildVisibleItems(items: LookupItem[]): LookupItem[] {\n const selectedId = this.myControl.value?.id;\n if (selectedId === undefined || selectedId === null) {\n return items;\n }\n\n return items.filter((item: LookupItem) => item.id !== selectedId);\n }\n\n showNoneOption(): boolean {\n const selectedValue = this.myControl.value;\n return this.items.length > 1 &&\n !!this.lookupItems$ &&\n selectedValue &&\n typeof selectedValue !== 'string' &&\n selectedValue.id !== undefined &&\n selectedValue.id !== null;\n }\n\n addLookupFilterByAnotherProperties(listItems: GetItemsList) {\n const properties = this.field.lookupFilterList;\n if (!Array.isArray(properties)) return;\n\n const newFilters: Filter[] = [];\n\n for (const prop of properties) {\n const fieldValue = this.form?.value?.[prop.fieldName];\n const finalValue = typeof fieldValue === 'object' && fieldValue !== null ? fieldValue.code : fieldValue;\n if (!finalValue) continue;\n\n const fieldName =typeof fieldValue === 'object' && fieldValue !== null ? prop.fieldName + \".\" + this.field.flattenBySubAttribute : prop.fieldName;\n const filter = new Filter({\n fieldType: 'FILED_FILTER',\n filterType: undefined,\n operator: prop.operator,\n valueObject: finalValue,\n fieldName: fieldName\n });\n\n newFilters.push(filter);\n }\n\n if (newFilters.length) {\n listItems.filters = [...(listItems.filters || []), ...newFilters];\n }\n listItems.filters = listItems.filters.filter(f => f.valueObject);\n }\n\n private patchLookupValue(defaultValue: any) {\n if (defaultValue) {\n\n // this.form?.get(this.field.property)?.patchValue(defaultValue);\n this.myControl.setValue(defaultValue);\n this.myControl.patchValue(defaultValue, {emitEvent: true});\n }\n }\n get matErrorDescribedBy(): string | null {\n const control = this.form?.get(this.field?.property);\n if (!control || !this.field?.property) {\n return null;\n }\n const visible =\n (control.value || control.value === 0) && control.status === 'INVALID';\n return visible ? `error-${this.field.property}` : null;\n }\n\n getId() {\n return this.field.property;\n }\n\n openLookupPanel(autocompleteTrigger: MatAutocompleteTrigger = this.autocompleteTrigger): void {\n if (!autocompleteTrigger || this.field?.readonly || this.readonly || this.myControl.disabled) {\n return;\n }\n\n const now = Date.now();\n if (now - this.lastOpenLookupRefreshAt < this.openLookupRefreshGuardMs) {\n autocompleteTrigger.openPanel();\n return;\n }\n\n this.lastOpenLookupRefreshAt = now;\n this.filterLookupItems('', autocompleteTrigger);\n }\n\n onKeydown(event: KeyboardEvent, autocompleteTrigger: MatAutocompleteTrigger) {\n if (event.key === 'Enter') {\n this.openLookupPanel(autocompleteTrigger);\n event.preventDefault();\n }\n }\n\n closed() {\n if (!this.myControl.value){\n this.form.get(this.field.property)?.setValue(this.myControl.value);\n this.selectedValue.emit(this.myControl.value);\n } else if (typeof this.myControl.value === 'string') {\n this.myControl.setValue(null);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<ng-container *ngIf=\"field\" class=\"main-auto-complete\">\n <div class=\"mat-field-wrapper\" [formGroup]=\"form\">\n\n <div class=\"label-and-asterisk-container\">\n <span class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n\n <mat-form-field class=\"autocomplete-field\" appearance=\"outline\" (click)=\"openLookupPanel(); $event.stopPropagation()\">\n <input type=\"text\"\n [placeholder]=\"'search_placeholder' | translate\"\n [id]=\"getId()\"\n [formControl]=\"myControl\"\n (keydown)=\"onKeydown($event, autocompleteTrigger)\"\n [matAutocomplete]=\"auto\"\n (focus)=\"openLookupPanel(autocompleteTrigger)\"\n (click)=\"openLookupPanel(autocompleteTrigger); $event.stopPropagation()\"\n matInput\n [required]=\"isRequired\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"matErrorDescribedBy\"\n #autocompleteTrigger=\"matAutocompleteTrigger\"\n [readonly]=\"readonly\"\n >\n\n <button mat-button matSuffix\n color=\"primary\"\n class=\"autocomplete-button\"\n (click)=\"openLookupPanel(autocompleteTrigger); $event.stopPropagation()\"\n [attr.id]=\"'autocomplete-trigger-' + field.property\">\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"itemSelected($event.option.value)\"\n (closed)=\"closed()\">\n <ng-container *ngIf=\"!field.readonly\">\n <mat-option *ngIf=\"showNoneOption()\" [value]=\"null\">{{ \"none\" | translate }}</mat-option>\n <mat-option *ngFor=\"let item of lookupItems$ | async\" [value]=\"item\" [ngClass]=\"_allowSelection(item)\">\n {{ itemNameByLag(item) }}\n </mat-option>\n </ng-container>\n </mat-autocomplete>\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n\n </div>\n</ng-container>\n","import {Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {NgIf} from \"@angular/common\";\nimport {MatTooltip} from \"@angular/material/tooltip\";\n\n@Component({\n selector: 'app-attachment-uploader',\n standalone: true,\n imports: [\n MatIcon,\n TranslateModule,\n MatButton,\n NgIf,\n MatTooltip,\n MatIconButton,\n ],\n templateUrl: './attachment-uploader.component.html',\n styleUrl: './attachment-uploader.component.css'\n})\nexport class AttachmentUploaderComponent {\n @ViewChild('fileUpload') fileUpload!: ElementRef<HTMLInputElement>;\n @Output() fileSelected = new EventEmitter<File | null>();\n @Input() acceptedTypes?: string; // e.g., \".jpg,.png,.pdf\" or \"image/*,application/pdf\"\n @Input() ariaDescribedBy?: string | null;\n\n selectedFile: File | null = null;\n isDragOver = false;\n\n triggerAttachmentUpload(): void {\n this.fileUpload.nativeElement.click();\n }\n\n uploadFileToServer(): void {\n const file = this.fileUpload.nativeElement.files?.[0];\n if (file) {\n this.selectedFile = file;\n this.fileSelected.emit(file);\n }\n }\n\n clearFile(): void {\n this.selectedFile = null;\n this.fileUpload.nativeElement.value = '';\n this.fileSelected.emit(null);\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = true;\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver = false;\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n const file = files[0];\n this.selectedFile = file;\n this.fileSelected.emit(file);\n }\n }\n}","<div class=\"attachment-uploader\"\n [class.drag-over]=\"isDragOver\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\">\n <div class=\"upload-content\">\n <div class=\"upload-icon\">\n <mat-icon>upload_file</mat-icon>\n </div>\n\n <p class=\"main-text\">{{ 'attachmentUploader.dragAndDrop' | translate }}</p>\n\n <p class=\"info-text\">{{ 'attachmentUploader.fileInfo' | translate }}</p>\n\n <button mat-stroked-button\n type=\"button\"\n class=\"browse-button\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (click)=\"triggerAttachmentUpload()\">\n {{ 'attachmentUploader.browseFiles' | translate }}\n </button>\n </div>\n\n <div *ngIf=\"selectedFile\" class=\"selected-file\">\n <div class=\"file-info\">\n <mat-icon class=\"file-icon\">description</mat-icon>\n <span class=\"file-name\">{{ selectedFile.name }}</span>\n </div>\n <button mat-icon-button\n type=\"button\"\n class=\"clear-button\"\n (click)=\"clearFile()\"\n [attr.aria-label]=\"'attachmentUploader.removeFile' | translate\"\n matTooltip=\"{{ 'attachmentUploader.removeFile' | translate }}\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n\n <input #fileUpload\n type=\"file\"\n class=\"hidden-input\"\n [accept]=\"acceptedTypes\"\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\n (change)=\"uploadFileToServer()\" />\n</div>\n","import { Directive, ElementRef, HostListener, Input, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: '[numbersOnly]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DecimalOnlyDirective),\n multi: true\n }\n ]\n})\nexport class DecimalOnlyDirective implements ControlValueAccessor {\n\n @Input() maxDecimals = 15;\n @Input() numbersOnly = false;\n @Input() numbersOnlyWithPlus = false;\n\n private _value: string = '';\n private _displayValue: string = '';\n private tempZeroIndex: number | null = null;\n\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n writeValue(value: any): void {\n this._value = value == null ? '' : String(value);\n\n if (this.tempZeroIndex !== null && this._displayValue.includes('.0')) {\n this.el.nativeElement.value = this._displayValue;\n } else {\n this._displayValue = this._value;\n this.el.nativeElement.value = this._displayValue;\n }\n }\n\n registerOnChange(fn: any): void { this.onChange = fn; }\n registerOnTouched(fn: any): void { this.onTouched = fn; }\n\n setDisabledState?(isDisabled: boolean): void {\n this.el.nativeElement.disabled = isDisabled;\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.numbersOnly) return;\n const input = this.el.nativeElement;\n const cursor = input.selectionStart ?? 0;\n let value = input.value;\n\n if (event.ctrlKey || event.metaKey || event.altKey ||\n ['Backspace','Tab','ArrowLeft','ArrowRight','Delete','Home','End'].includes(event.key)) return;\n\n if (this.numbersOnlyWithPlus) {\n if (event.key === '+') {\n if (cursor !== 0 || value.includes('+')) {\n event.preventDefault();\n }\n return;\n }\n if (event.key >= '0' && event.key <= '9') {\n return;\n }\n event.preventDefault();\n return;\n }\n\n if (event.key === '-') {\n if (cursor !== 0 || value.includes('-')) event.preventDefault();\n return;\n }\n\n if (event.key === '.') {\n if (this.maxDecimals === 0 || value.includes('.')) {\n event.preventDefault();\n return;\n }\n\n event.preventDefault();\n value = value.slice(0, cursor) + '.0' + value.slice(cursor);\n input.value = value;\n this._displayValue = value;\n this.tempZeroIndex = cursor + 1;\n\n setTimeout(() => input.setSelectionRange(cursor + 2, cursor + 2));\n return;\n }\n\n // digits\n if (event.key >= '0' && event.key <= '9') {\n const dotIndex = value.indexOf('.');\n if (dotIndex !== -1 && cursor > dotIndex) {\n const decimalsCount = value.length - dotIndex - 1;\n if (decimalsCount >= this.maxDecimals) { event.preventDefault(); return; }\n }\n\n if (this.tempZeroIndex !== null && cursor === this.tempZeroIndex + 1 && event.key !== '0') {\n event.preventDefault();\n value = value.slice(0, this.tempZeroIndex) + event.key + value.slice(this.tempZeroIndex + 1);\n input.value = value;\n this._displayValue = value;\n this.tempZeroIndex = null;\n this._value = value;\n this.onChange(this._value);\n\n setTimeout(() => input.setSelectionRange(cursor, cursor));\n return;\n }\n\n this.tempZeroIndex = null;\n return;\n }\n\n event.preventDefault();\n }\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n if (!this.numbersOnly) return;\n this._value = event.target.value;\n this._displayValue = this._value;\n this.onChange(this._value);\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n if (!this.numbersOnly) return;\n const pasted = event.clipboardData?.getData('text') ?? '';\n if (this.numbersOnlyWithPlus) {\n const regex = /^\\+?\\d*$/;\n if (!regex.test(pasted)) {\n event.preventDefault();\n }\n return;\n }\n const regex = new RegExp(`^-?\\\\d+(\\\\.\\\\d{0,${this.maxDecimals}})?$`);\n if (!regex.test(pasted)) event.preventDefault();\n }\n\n @HostListener('blur')\n onBlur() {\n this.onTouched();\n this.tempZeroIndex = null;\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[maxDigits]',\n standalone: true\n})\nexport class MaxDigitsDirective {\n @Input() maxDigits!: number;\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n\n if (!this.maxDigits) return;\n\n let value = input.value;\n\n if (value.length > this.maxDigits) {\n input.value = value.slice(0, this.maxDigits);\n input.dispatchEvent(new Event('input'));\n }\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[phoneNumberOnly]',\n standalone: true\n})\nexport class PhoneNumberOnlyDirective {\n @Input() phoneNumberOnly = false;\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.phoneNumberOnly) return;\n\n const key = event.key;\n const input = event.target as HTMLInputElement;\n const cursor = input.selectionStart ?? 0;\n const value = input.value;\n\n // Allow control keys\n if (event.ctrlKey || event.metaKey || event.altKey ||\n ['Backspace', 'Tab', 'ArrowLeft', 'ArrowRight', 'Delete', 'Home', 'End', 'Enter'].includes(key)) {\n return;\n }\n\n // Allow '+' only at the first position\n if (key === '+') {\n if (cursor !== 0 || value.includes('+')) {\n event.preventDefault();\n }\n return;\n }\n\n // Allow only digits\n if (key >= '0' && key <= '9') {\n // Check for max length 15 (if not already handled by maxLength attribute)\n // Note: We should account for the selected text being replaced\n const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);\n if (value.length - selectedText.length >= 15) {\n event.preventDefault();\n }\n return;\n }\n\n // Block everything else\n event.preventDefault();\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n if (!this.phoneNumberOnly) return;\n\n const pastedData = event.clipboardData?.getData('text') ?? '';\n const input = event.target as HTMLInputElement;\n const value = input.value;\n const cursor = input.selectionStart ?? 0;\n const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);\n\n // Construct what the new value would be\n const newValue = value.slice(0, cursor) + pastedData + value.slice(input.selectionEnd ?? cursor);\n\n // Regex: starts with optional +, followed by only digits, max 15 characters total\n const regex = /^\\+?\\d{0,15}$/;\n\n if (!regex.test(newValue)) {\n event.preventDefault();\n }\n }\n}\n","import {\n Component, ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n computed,\n model,\n signal\n} from '@angular/core';\nimport {FormBuilder, FormGroup, ReactiveFormsModule, FormsModule, FormControl} from \"@angular/forms\";\nimport {\n MatChip,\n MatChipGrid,\n MatChipInput,\n MatChipInputEvent,\n MatChipListbox, MatChipOption, MatChipRemove,\n MatChipRow\n} from \"@angular/material/chips\";\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {PageInfo} from \"../../base-model/page-info\";\nimport {COMMA, ENTER, SEMICOLON} from \"@angular/cdk/keycodes\";\nimport {LookupItem} from \"../../base-model/lookupItem\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {\n AsyncPipe,\n CurrencyPipe,\n DatePipe,\n KeyValuePipe,\n NgForOf,\n NgIf, NgClass, NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgTemplateOutlet\n} from \"@angular/common\";\nimport {MatError, MatFormFieldModule, MatLabel} from \"@angular/material/form-field\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle, MatDateRangeInput} from \"@angular/material/datepicker\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {CdkTextareaAutosize} from \"@angular/cdk/text-field\";\nimport {MatRadioButton, MatRadioGroup} from \"@angular/material/radio\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\nimport {MatSlideToggle} from \"@angular/material/slide-toggle\";\nimport {MatOption, MatSelect} from \"@angular/material/select\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatDivider} from \"@angular/material/divider\";\nimport {NgxJsonViewerModule} from \"ngx-json-viewer\";\nimport {NgxMatIntlTelInputComponent} from \"ngx-mat-intl-tel-input\";\nimport {MultiAutoCompleteComponent} from \"../multi-auto-complete/multi-auto-complete.component\";\nimport {AutoCompleteComponent} from \"../auto-complete/auto-complete.component\";\nimport {AttachmentUploaderComponent} from \"../shared/attachment-uploader/attachment-uploader.component\";\nimport {MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger} from \"@angular/material/autocomplete\";\nimport {BehaviorSubject, map} from \"rxjs\";\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\nimport {buildFormFields, extractFieldName} from \"../../utils/base-utils\";\nimport moment, {Moment} from \"moment/moment\";\nimport {MatCell, MatCellDef, MatHeaderCell, MatHeaderCellDef} from \"@angular/material/table\";\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from \"@angular/material/core\";\nimport {MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter} from \"@angular/material-moment-adapter\";\nimport {DecimalOnlyDirective} from \"./NumbersOnlyDirective\";\nimport {MaxDigitsDirective} from \"./MaxDigitsDirective\";\nimport {PhoneNumberOnlyDirective} from \"../../directives/phone-number-only.directive\";\nexport const DD_MM_YYYY_Format = {\n parse: { dateInput: 'DD/MM/YYYY' },\n display: {\n dateInput: 'DD/MM/YYYY',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'DD/MM/YYYY',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n@Component({\n selector: 'app-base-form-canvas',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n NgSwitch,\n FormsModule,\n NgForOf,\n NgTemplateOutlet,\n KeyValuePipe,\n NgIf,\n NgClass,\n MatLabel,\n MatFormFieldModule,\n TranslateModule,\n MatInputModule,\n MatDatepickerInput,\n MatDatepicker,\n MatDatepickerToggle,\n MatError,\n NgSwitchCase,\n MatIcon,\n MatIconButton,\n MatAutocomplete,\n MatAutocompleteTrigger,\n MatChip,\n CdkTextareaAutosize,\n MatRadioGroup,\n MatCheckbox,\n MatRadioButton,\n MatSlideToggle,\n MatSelect,\n MatOption,\n PhoneNumberOnlyDirective,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n MatDivider,\n DatePipe,\n NgxJsonViewerModule,\n CurrencyPipe,\n NgxMatIntlTelInputComponent,\n MatChipGrid,\n MatChipInput,\n MatChipRow,\n MatChipListbox,\n MatChipOption,\n MultiAutoCompleteComponent,\n AutoCompleteComponent,\n MatDateRangeInput,\n AsyncPipe,\n MatChipRemove,\n MatCell,\n MatCellDef,\n MatHeaderCell,\n MatHeaderCellDef,\n NgStyle,\n AttachmentUploaderComponent,\n DecimalOnlyDirective,\n MaxDigitsDirective\n ],\n templateUrl: './base-form-canvas.component.html',\n styleUrl: './base-form-canvas.component.css',\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\n },\n { provide: MAT_DATE_FORMATS, useValue: DD_MM_YYYY_Format },\n { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }\n ]\n\n})\nexport class BaseFormCanvasComponent implements OnInit, OnChanges, OnDestroy {\n public hide: boolean = true;\n dateViewMode: 'month' | 'year' | 'multi-year' = 'month';\n @Input()\n pageInfo!: PageInfo;\n\n\n @Input()\n currency: string;\n\n @Input()// @ts-ignore\n fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n errors: FieldMessage[] = [];\n\n @Input()\n workflowEditableFields: string[]=[];\n @Input()\n isWorkflowEditableManaged: boolean = false;\n\n @Input()\n supportingAttributes: any;\n\n @Input()\n editable: boolean = false;\n\n @Input()\n attachmentsAlwaysEditable?: boolean;\n\n // When true, emit formUpdated on every value change. Default is false to avoid\n // noisy emissions for all consumers. Item-line-editor will enable this explicitly.\n @Input()\n emitOnValueChanges: boolean = false;\n\n @Input()\n filterResetNonce = 0;\n\n @Input()\n item: any = {};\n\n _defaults: any = {};\n\n @Output() attachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Output() actionEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n hyperTextEvent: EventEmitter<boolean> = new EventEmitter();\n\n\n formParam!: FormGroup;\n screenFields = new Map<number, FieldInfo[]>();\n removable = true;\n selectable = true;\n addOnBlur = true;\n\n readonly separatorKeysCodes: number[] = [ENTER, COMMA, SEMICOLON];\n\n readonly minDate = moment([1800, 0, 1]);\n\n public isPending: boolean = false;\n public isNew: boolean = false;\n itemId: number | undefined;\n\n equationOperators : string[] = ['+','-','(' ];\n @Input() equationSuggestedFields: { name: string, id: string }[] = [];\n allEquationFields: BehaviorSubject<string[]>;\n readonly equationValues = signal<string[]>([]);\n currentEquationValue = model<string>('');\n\n readonly equationFilteredFields = computed(() => {\n const currentEquationValue = this.currentEquationValue().toLowerCase();\n return this.allEquationFields.pipe(\n map(fields =>\n currentEquationValue ? fields?.filter(field => field.toLowerCase().includes(currentEquationValue)) : fields?.slice()\n )\n );\n });\n @ViewChild('EquationValueInput') fieldsInput: ElementRef<HTMLInputElement>;\n\n set defaults(value: any | undefined) {\n // this.backendService._defaults = value;\n this._defaults = value;\n this.buildForm();\n // this.myCallback = value;\n }\n\n get defaults(): any | undefined {\n // this.myCallback;\n return this._defaults;\n // return this.backendService._defaults;\n }\n\n constructor(protected translateService: TranslateService,\n protected activatedRoute: ActivatedRoute,\n protected backendService: BackendService,\n private fb: FormBuilder,\n private announcer: LiveAnnouncer) {\n }\n\n ngOnInit(): void {\n if(this.item && this.item.fieldValue){\n this.equationValues.update(value => this.item.fieldValue)\n }\n this.defaults = this.item;\n this.extractLables();\n this.buildForm();\n this.activatedRoute.data.subscribe(data => {\n this.isPending = data['mode'] === 'pending';\n this.isNew = data['mode'] === 'new';\n });\n // this.authService.summaryPanelState$.next(Constants.SUMMARY_PANEL_CLOSED);\n // this.defaults = {};\n // this.invoiceQInit();\n this.allEquationFields = new BehaviorSubject<string[]>([]);\n\n this.updateEquationOptions();\n }\n\n formatTimeToDate(v: any){\n const fromTime: Date = new Date();\n if (v) {\n let split = v.split(\":\");\n fromTime.setHours(split[0], split[1]);\n return new Date(fromTime.getTime());\n }\n return \"\";\n }\n\n patchLookupValue($event: LookupItem, fieldName: string) {\n if ($event?.id !== -1 && this.defaults) {\n // @ts-ignore\n this.defaults[fieldName] = this.formParam.get(fieldName).value;\n }\n }\n getBankName(fieldName: string) {\n //TODO Batool do we need this here ?\n if (this.formParam.get(fieldName).value?.length > 10 && !isNaN(this.formParam.get(fieldName).value) ) {\n return ' / ' + this.translateService.instant('BANK.' + this.formParam.get(fieldName).value?.substr(4, 4));\n } else {\n return '';\n }\n }\n\n patchMultiSelectValue($event: LookupItem[], fieldName: string) {\n if ($event?.length >= 0 && this.defaults) {\n this.defaults[fieldName] = this.formParam.get(fieldName).value;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { item, errors, fields, filterResetNonce } = changes;\n\n errors?.currentValue?.forEach((msg: FieldMessage) => {\n this.formParam.get(msg.fieldName)?.setErrors({serverError: msg.message});\n });\n\n if (item?.currentValue && !item.isFirstChange()){\n this.defaults = item.currentValue;\n }\n\n if (fields?.currentValue && !fields.isFirstChange()){\n this.buildForm();\n }\n\n if (\n filterResetNonce &&\n !filterResetNonce.isFirstChange() &&\n filterResetNonce.currentValue !== filterResetNonce.previousValue\n ) {\n this.resetFilterFormValues();\n }\n }\n\n showField(item: any, field: any) {\n return (item.id || (!item.id && !field.updateOnly)) && field.visible\n }\n\n get isAttachmentFieldEditable(): boolean {\n return this.attachmentsAlwaysEditable ?? this.editable;\n }\n\n workflowEditableField(field: { property: string; }) {\n const x = this.isWorkflowEditableManaged ? this.workflowEditableFields?.findIndex(d => d === field.property) > -1 : true;\n return x;\n }\n\n showMultiSelectValuesAsReadonly(field: FieldInfo) {\n console.log(\".03151251564\")\n const viewProp = this.translateService.getDefaultLang() === 'en' ? 'englishName' : 'arabicName';\n return this.extractFieldName(this.defaults,field.property)?.map((a: { [x: string]: any; }) => a[viewProp]);\n }\n\n splitReadonly(values: any) {\n return !values || values === '' ? []: values.split(';');\n }\n\n\n referenceAttributeTrue(fieldName: string, attribute: any) {\n // return this.authService.referenceAttributeTrue(fieldName, this.pageInfo.processId, attribute);\n }\n\n translateLable(itemElement: any) {\n return this.translateService.instant(itemElement)\n }\n\n buildForm() {\n if (!this.fields || this.fields.length === 0 || !this.defaults) return;\n\n if (!this.formParam) {\n this.formParam = this.fb.group(buildFormFields(this.fields, this.defaults));\n this.patchDisabledFormValidity();\n // Emit initial form reference\n this.formUpdated.next(this.formParam);\n // Emit on every value change so parent components can react live\n if (this.emitOnValueChanges) {\n this.formParam.valueChanges.subscribe(() => {\n this.formUpdated.emit(this.formParam);\n });\n }\n return;\n }\n\n const patchValues: any = {};\n for (const field of this.fields) {\n if (field.readonly) {\n this.formParam.get(field.property)?.disable({ emitEvent: false });\n } else {\n this.formParam.get(field.property)?.enable({ emitEvent: false });\n }\n if (field.type !== 'spacer') {\n let v = extractFieldName(this.defaults, field.property);\n if (field.type === 'multi-state-checkbox' && (v === undefined || v === null)) {\n v = [];\n }\n patchValues[field.property] = v;\n }\n }\n\n this.formParam.patchValue(patchValues, { emitEvent: false });\n this.patchDisabledFormValidity();\n }\n\n\n private patchDisabledFormValidity(): void {\n const form = this.formParam;\n if (!form) {\n return;\n }\n Object.defineProperty(form, 'valid', {\n get: () => form.status === 'DISABLED' || form.status === 'VALID',\n configurable: true\n });\n }\n\n private resetFilterFormValues(): void {\n if (!this.formParam || !this.fields?.length) {\n return;\n }\n const empty: Record<string, unknown> = {};\n for (const field of this.fields) {\n if (field.type !== 'spacer') {\n empty[field.property] = field.type === 'multi-state-checkbox' ? [] : null;\n }\n }\n this.formParam.patchValue(empty, { emitEvent: true });\n }\n\n labelKey(column: any) {\n const configuredKey = column.label ? column.label : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n labelKeyPlaceHolder(column: any) {\n const configuredKey = column.placeholder ? column.placeholder : column.property\n return configuredKey.startsWith(this.pageInfo.labelsSection) ? `${configuredKey}` : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n blockNegativeNumberKeydown(event: KeyboardEvent, field: FieldInfo): void {\n if (field.allowNegative) {\n return;\n }\n if (event.key === '-' || event.code === 'Minus' || event.code === 'NumpadSubtract') {\n event.preventDefault();\n }\n }\n\n openTimePicker(input: HTMLInputElement): void {\n if (!input || input.disabled || input.readOnly) {\n return;\n }\n\n if (typeof input.showPicker === 'function') {\n try {\n input.showPicker();\n return;\n } catch {\n input.focus();\n }\n }\n\n input.focus();\n input.click();\n }\n\n getErrors(prop: string): string {\n const control = this.formParam?.get([prop]);\n if (!control || control.disabled) return '';\n\n if (control.invalid && control.errors) {\n const err = control.errors;\n if (err['matDatepickerMin']) {\n return 'matDatepickerMin';\n }\n if (err['matDatepickerMax']) {\n return 'matDatepickerMax';\n }\n }\n\n const field = this.fields.find(f => f.property === prop);\n\n if (!field?.validationMessages) {\n if (field?.type === 'phone-number' && control.touched && control.dirty && !control.value) {\n const prefix = this.pageInfo.labelsSection + \".\";\n return prefix + 'INVALID_PHONE_NUMBER';\n }\n if (control.value && control.status !== 'VALID' && this.getFirstErrorKey) {\n return this.getFirstErrorKey(prop);\n }\n return '';\n }\n\n if (field?.type === 'phone-number' && control.touched && control.dirty && !control.value) {\n const prefix = this.pageInfo.labelsSection + \".\";\n return prefix + (field.validationMessages?.validatePhoneNumber || 'INVALID_PHONE_NUMBER');\n }\n\n if (control.invalid) {\n const errors = control.errors || {};\n const prefix = this.pageInfo.labelsSection + \".\";\n\n if (errors['required']) return prefix + 'REQUIRED';\n if (errors['min']) return prefix + (field.validationMessages?.min || 'NUMBER_MIN');\n if (errors['max']) return prefix + (field.validationMessages?.max || 'NUMBER_MAX');\n if (errors['maxlength']) return prefix + (field.validationMessages?.maxlength || 'MAX_LENGTH');\n if (errors['decimalMin']) return prefix + (field.validationMessages?.decimalMin || 'DECIMAL_MIN');\n if (errors['decimalMax']) return prefix + (field.validationMessages?.decimalMax || 'DECIMAL_MAX');\n if (errors['pattern']) return prefix + (field.validationMessages?.pattern || 'INVALID_FORMAT');\n if (errors['validatePhoneNumber']) return prefix + (field.validationMessages?.validatePhoneNumber || 'INVALID_PHONE_NUMBER');\n if (errors['invalidMathExpression']) return prefix + 'INVALID_MATH';\n if (errors['dateRangeInvalid']) return prefix + 'dateRangeInvalid';\n if (errors['serverError']) return prefix + errors['serverError'];\n\n return prefix + 'INVALID_VALUE';\n }\n\n return '';\n }\n\n\n getFirstErrorKey(prop: string): string {\n const errors = this.formParam?.get([prop])?.errors;\n\n if (!errors || Object.keys(errors).length === 0) {\n return errors?.['serverError'] || 'INVALID_FORMAT';\n }\n\n return Object.keys(errors)[0];\n }\n\n public getCountryCodeList() {\n return ['af', 'ax', 'al', 'dz', 'as', 'ad', 'ao', 'ai', 'aq', 'ag', 'ar', 'am', 'aw', 'au', 'at', 'az',\n 'bs', 'bh', 'bd', 'bb', 'by', 'be', 'bz', 'bj', 'bm', 'bt', 'bo', 'ba', 'bw', 'bv', 'br', 'io', 'bn',\n 'bg', 'bf', 'bi', 'kh', 'cm', 'ca', 'cv', 'ky', 'cf', 'td', 'cl', 'cn', 'cx', 'cc', 'co', 'km', 'cg',\n 'cd', 'ck', 'cr', 'ci', 'hr', 'cu', 'cy', 'cz', 'dk', 'dj', 'dm', 'do', 'ec', 'eg', 'sv', 'gq', 'er',\n 'ee', 'et', 'fk', 'fo', 'fj', 'fi', 'fr', 'gf', 'pf', 'tf', 'ga', 'gm', 'ge', 'de', 'gh', 'gi', 'gr',\n 'gl', 'gd', 'gp', 'gu', 'gt', 'gg', 'gn', 'gw', 'gy', 'ht', 'hm', 'va', 'hn', 'hk', 'hu', 'is', 'in',\n 'id', 'ir', 'iq', 'ie', 'im', 'it', 'jm', 'jp', 'je', 'jo', 'kz', 'ke', 'ki', 'kr', 'kw', 'kg', 'la',\n 'lv', 'lb', 'ls', 'lr', 'ly', 'li', 'lt', 'lu', 'mo', 'mk', 'mg', 'mw', 'my', 'mv', 'ml', 'mt', 'mh',\n 'mq', 'mr', 'mu', 'yt', 'mx', 'fm', 'md', 'mc', 'mn', 'me', 'ms', 'ma', 'mz', 'mm', 'na', 'nr', 'np',\n 'nl', 'an', 'nc', 'nz', 'ni', 'ne', 'ng', 'nu', 'nf', 'mp', 'no', 'om', 'pk', 'pw', 'ps', 'pa', 'pg',\n 'py', 'pe', 'ph', 'pn', 'pl', 'pt', 'pr', 'qa', 're', 'ro', 'ru', 'rw', 'bl', 'sh', 'kn', 'lc', 'mf',\n 'pm', 'vc', 'ws', 'sm', 'st', 'sa', 'sn', 'rs', 'sc', 'sl', 'sg', 'sk', 'si', 'sb', 'so', 'za', 'gs',\n 'es', 'lk', 'sd', 'sr', 'sj', 'sz', 'se', 'ch', 'sy', 'tw', 'tj', 'tz', 'th', 'tl', 'tg', 'tk', 'to',\n 'tt', 'tn', 'tr', 'tm', 'tc', 'tv', 'ug', 'ua', 'ae', 'gb', 'us', 'um', 'uy', 'uz', 'vu', 've', 'vn',\n 'vg', 'vi', 'wf', 'eh', 'ye', 'zm', 'zw'];\n }\n\n\n friendlyName(fullPath: string , subPath: string , item: string){\n return fullPath.substring(0, fullPath.indexOf(subPath)) + item ;\n }\n\n showValue(defaults, field){\n return this.friendlyName(field.label , field.property , defaults[field.property]);\n }\n\n showError(prop: string) {\n const CONTROL = this.formParam?.get([prop]);\n const field = this.fields.find(f => f.property === prop);\n if (field?.type === 'phone-number') {\n return CONTROL?.touched && CONTROL?.dirty && !CONTROL?.value;\n }\n return (CONTROL?.value || CONTROL?.value === 0) && CONTROL?.status === 'INVALID';\n }\n\n getFieldCurrentLength(prop: string): number {\n const value = this.formParam?.get([prop])?.value;\n return value === undefined || value === null ? 0 : String(value).length;\n }\n\n clearFieldValue(prop: string): void {\n this.formParam?.get([prop])?.setValue('');\n }\n\n ngOnDestroy(): void {\n this.defaults = null;\n }\n\n private extractLables() {\n this.fields.forEach(f => {\n if (f.visible) {\n f.label = this.labelKey(f);\n\n if (!this.screenFields.has(f.row)) {\n this.screenFields.set(f.row, []);\n }\n this.screenFields.get(f.row)!.push(f);\n\n if (f.cascadedBy) {\n this.formParam?.get([f.cascadedBy])?.valueChanges.subscribe(() => {\n this.formParam?.get([f.property])?.patchValue(null);\n })\n }\n }\n });\n\n for (let i = 1; i < this.screenFields.size; i++) {\n this.calcFlexSize(i);\n }\n // console.log(this.screenFields)\n }\n\n private calcFlexSize(i: number){\n // Preserve explicit fieldSize values only. For fields without fieldSize, allow\n // the layout to auto-size via flex (handled in the template/CSS).\n // Intentionally do nothing here so that unspecified fields remain flexible.\n return;\n }\n\n getCurrencyPattern(field: FieldInfo) {\n // const decimalPlaces = this.authService?.myCurrencies?.find(c => c.key === this.formParam.get(field.currency)?.value)?.currencyNumOfDecimalPattern || 3;\n const decimalPlaces = 3;\n return '^\\\\d*(?:[.,]\\\\d{1,' + decimalPlaces + '})?$';\n }\n\n splittedChips(form: FormGroup, fieldName: string):string[] {\n return form.get(fieldName).value === '' ? []: form.get(fieldName).value.trim().split(';');\n }\n\n\n fixArabicNumbers(str: any) {\n // if(typeof str === 'string') {\n // str = str.replace(/([٠١٢٣٤٥٦٧٨٩])|([۰۱۲۳۴۵۶۷۸۹])/g, (m, $1, $2) => m.charCodeAt(0) - ($1 ? 1632 : 1776));\n // }\n // console.log(str);\n }\n\n listShowValue(defaults: any, field: FieldInfo) {\n return defaults[field.property] ? this.showValue(defaults, field) : '';\n }\n\n removeChipsItem(form: FormGroup, fieldName: string, idx: number) {\n const emails = this.splittedChips(form, fieldName);\n if (emails.length >= 1){\n emails.splice(idx,1);\n }\n let cleanedEmails = emails.join(\";\");\n form.get(fieldName).setValue(cleanedEmails);\n }\n\n extractFieldName(element: any, property: string) {\n if (property?.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n }\n\n isReadonlyTextValueEmpty(defaults: any, field: FieldInfo): boolean {\n const value = this.extractFieldName(defaults, field.property);\n if (value === null || value === undefined) {\n return true;\n }\n if (typeof value === 'string') {\n return value.trim() === '';\n }\n return false;\n }\n\n getReadonlyDateFormat(field: FieldInfo): string {\n return field.readonlyDateDisplay === 'datetime' ? 'dd/MM/yyyy HH:mm' : 'dd/MM/yyyy';\n }\n\n onMultiStateMenuInnerKeydown(event: Event, field: FieldInfo): void {\n if (!(event instanceof KeyboardEvent)) {\n return;\n }\n if (!this.isMultiStateMenuActivateKey(event)) {\n return;\n }\n const row = this.findMultiStateRowFromKeyboardEvent(event);\n if (!row) {\n return;\n }\n const code = row.getAttribute('data-multi-state-code');\n if (!code) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const next = !this.isMultiStateSelected(field.property, code);\n this.toggleMultiStateFilter(field.property, code, next);\n }\n\n private isMultiStateMenuActivateKey(event: KeyboardEvent): boolean {\n return (\n event.key === 'Enter' ||\n event.key === ' ' ||\n event.key === 'Spacebar' ||\n event.code === 'Space' ||\n event.code === 'NumpadEnter'\n );\n }\n\n private findMultiStateRowFromKeyboardEvent(event: KeyboardEvent): HTMLElement | null {\n const path =\n typeof event.composedPath === 'function' ? event.composedPath() : [];\n const fromPath = path.find(\n (n): n is HTMLElement =>\n n instanceof HTMLElement && n.classList.contains('multi-state-filter__row'),\n );\n if (fromPath) {\n return fromPath;\n }\n const t = event.target;\n return t instanceof HTMLElement ? t.closest('.multi-state-filter__row') : null;\n }\n\n onMultiStateRowClick(event: MouseEvent, property: string, code: string): void {\n event.stopPropagation();\n const target = event.target as HTMLElement | null;\n if (target?.closest('mat-checkbox')) {\n return;\n }\n const next = !this.isMultiStateSelected(property, code);\n this.toggleMultiStateFilter(property, code, next);\n }\n\n toggleMultiStateFilter(property: string, code: string, checked: boolean): void {\n const ctrl = this.formParam.get(property);\n if (!ctrl) {\n return;\n }\n const raw = ctrl.value;\n const cur: string[] = Array.isArray(raw) ? [...raw] : [];\n if (checked) {\n if (!cur.includes(code)) {\n cur.push(code);\n }\n } else {\n const idx = cur.indexOf(code);\n if (idx >= 0) {\n cur.splice(idx, 1);\n }\n }\n ctrl.setValue(cur);\n }\n\n isMultiStateSelected(property: string, code: string): boolean {\n const raw = this.formParam.get(property)?.value;\n return Array.isArray(raw) && raw.includes(code);\n }\n\n isMultiStateEmpty(property: string): boolean {\n const raw = this.formParam.get(property)?.value;\n return !Array.isArray(raw) || raw.length === 0;\n }\n\n /** Trigger label: empty => caller shows placeholder; else short summary. */\n getMultiStateFilterTriggerLabel(field: FieldInfo): string {\n const raw = this.formParam.get(field.property)?.value;\n const selected = Array.isArray(raw) ? raw : [];\n const section = this.pageInfo?.labelsSection || '';\n if (selected.length === 0) {\n return this.translateService.instant(this.pageInfo.labelsSection+ \".\" + field.placeholder);\n }\n // if (this.areAllMultiStateOptionsSelected(field, selected)) {\n // return this.translateService.instant(this.pageInfo.labelsSection+ \".\" + field.placeholder);\n // }\n if (selected.length <= 2) {\n return selected\n .map(c => this.translateService.instant(section ? `${section}.${c}` : c))\n .join(', ');\n }\n return this.translateService.instant('FILTER-BUILDER.multiStatusSummary', { count: selected.length });\n }\n\n private areAllMultiStateOptionsSelected(field: FieldInfo, selected: string[]): boolean {\n const options = field.listOptions || [];\n return options.length > 0 && options.every((code: string) => selected.includes(code));\n }\n\n statusOptionLabelKey(field: FieldInfo, code: string): string {\n const section = this.pageInfo?.labelsSection;\n return section ? `${section}.${code}` : code;\n }\n\n getMultiStateReadonlySummary(field: FieldInfo, defaults: any): string {\n const raw = this.extractFieldName(defaults, field.property);\n const selected = Array.isArray(raw) ? raw : [];\n const section = this.pageInfo?.labelsSection || '';\n return selected\n .map(c => this.translateService.instant(section ? `${section}.${c}` : c))\n .join(', ');\n }\n\n getMultiValue(field: FieldInfo) {\n return this.formParam.get(field.property)?.value;\n }\n\n private validateEmail(email) {\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n addEmailToChips(event: MatChipInputEvent, form: FormGroup, fieldName: string) {\n\n const input = event.input;\n const value = event.value;\n const items = value.split(';');\n // value.split(' ');\n items.forEach(itm => {\n if (this.validateEmail((itm || '').trim())) {\n const x = this.splittedChips(form, fieldName);\n x.push(itm);\n form.get(fieldName).patchValue(x.join(';'));\n if (input) {\n input.value = '';\n }\n }\n });\n\n }\n\n extractJsonFieldName(defaults: any, property: string) {\n const x= this.extractFieldName(defaults, property);\n if (x?.length > 0)\n return JSON.parse(x);\n else return '{}';\n }\n\n getOptionValue(item: any) {\n const value = typeof item === 'object' ?\n this.translateService.getDefaultLang() === 'en' ? item.englishName : item.arabicName\n : item;\n return value;\n }\n\n getHyperTextEvent() {\n this.hyperTextEvent.emit(true);\n }\n\n add(event: MatChipInputEvent): void {\n const value = (event.value || '').trim();\n if (value) {\n if (this.equationOperators.includes(value) || !this.equationValues().includes(value)) {\n this.equationValues.update(equationValues => [...equationValues, value]);\n }\n }\n\n this.fieldsInput.nativeElement.value = '';\n this.currentEquationValue.set('');\n this.updateEquationOptions();\n\n }\n\n remove(item: string, index: number): void {\n this.equationValues.update(equationValues => {\n if (index < 0) {\n return equationValues;\n }\n\n equationValues.splice(index, 1);\n this.announcer.announce(`Removed ${item}`);\n return [...equationValues];\n });\n this.updateEquationOptions();\n }\n\n selected(event: MatAutocompleteSelectedEvent): void{\n const selectedValue = event.option.viewValue.trim();\n\n if (!this.equationOperators.includes(selectedValue) && !this.equationValues().includes(selectedValue)) {\n this.equationValues.update(equationValues => [...equationValues, selectedValue]);\n } else if (this.equationOperators.includes(selectedValue)) {\n this.equationValues.update(equationValues => [...equationValues, selectedValue]);\n }\n\n this.currentEquationValue.set('');\n event.option.deselect();\n this.fieldsInput.nativeElement.value = '';\n this.updateEquationOptions();\n }\n\n updateEquationOptions(){\n this.reflectEquationValueOnForm();\n\n let updatedFields: string[];\n if (this.equationValues().length === 0) {\n updatedFields = this.getNamesFromSuggestedEquationFields();\n } else {\n let lastElement = this.equationValues()[this.equationValues().length - 1];\n if (this.equationOperators.includes(lastElement)) {\n updatedFields = this.getNamesFromSuggestedEquationFields();\n } else {\n updatedFields = this.equationOperators;\n }\n }\n // console.log('*****', updatedFields);\n this.allEquationFields.next(updatedFields);\n }\n\n getNamesFromSuggestedEquationFields(): string[] {\n return this.equationSuggestedFields?.map(field => field.name);\n }\n\n reflectEquationValueOnForm() {\n if (this.formParam && this.formParam.get('fieldValue')) {\n this.formParam.get('fieldValue').setValue(this.equationValues());\n } else {\n // console.log('Form or fieldValue is not available.');\n }\n }\n\n checkEquation(field: FieldInfo, $event: Event) {\n // console.log('$event', $event);\n // try {\n // evaluate(equation.replace(/[a-zA-Z0-9]+/g, '1')); // Replace variables with dummy values\n // this.formGroups[index].get('xyz').setErrors(null);\n // console.log('valid ', equation)\n // } catch (e) {\n // this.formGroups[index].get('xyz').setErrors({serverError: 'incomplete '});\n // console.log('bad ', equation)\n // }\n }\n\n getView(field): 'month' | 'year' | 'multi-year' {\n return field.pattern || 'month';\n }\n\n setMonthAndYear(normalizedMonthAndYear: Moment, picker: MatDatepicker<Moment>, field) {\n console.log('field.pattern', field.pattern)\n if (field.pattern === 'multi-year') {\n console.log('hi')\n const date = new FormControl(moment());\n const ctrlValue = date.value;\n ctrlValue.year(normalizedMonthAndYear.year());\n ctrlValue.month(1);\n ctrlValue.dayOfYear(1);\n this.formParam.get(field.property).setValue(ctrlValue)\n picker.close();\n }\n }\n\n getAcceptedFileTypes(field: FieldInfo): string | undefined {\n if (!field.supportedTypes) {\n return undefined;\n }\n // Convert \".jpg,.png,.pdf\" format to \"image/jpeg,image/png,application/pdf\" or keep as is\n // For simplicity, we'll pass the supportedTypes as-is and let the browser handle it\n // The browser accepts both formats\n return field.supportedTypes;\n }\n\n onAttachmentFileSelected(file: File | null, field: FieldInfo): void {\n if (file) {\n // Validate file type if supportedTypes is specified\n if (field.supportedTypes) {\n const allowedTypes = field.supportedTypes.split(',').map(t => t.trim().toLowerCase());\n const fileExtension = '.' + file.name.split('.').pop()?.toLowerCase();\n if (!allowedTypes.includes(fileExtension)) {\n // File type not supported - could show error message\n console.warn(`File type ${fileExtension} is not supported. Allowed types: ${field.supportedTypes}`);\n return;\n }\n }\n\n // Update form control if it exists\n if (this.formParam && this.formParam.get(field.property)) {\n this.formParam.get(field.property)?.setValue(file);\n }\n\n // Emit attachment event\n this.attachmentEmitter.emit({\n file: file,\n field: field,\n attachmentType: field.attachmentType\n });\n } else {\n // Clear the form control if file is removed\n if (this.formParam && this.formParam.get(field.property)) {\n this.formParam.get(field.property)?.setValue(null);\n }\n }\n }\n}\n","<div class=\"main-form-canvas\">\n <div class=\"form-wrapper\">\n <ng-container *ngIf=\"defaults\">\n <ng-container *ngIf=\"editable; else readonlyView\" class=\"form-container\">\n <form [formGroup]=\"formParam\" class=\"form-content\">\n <div class=\"form-row\">\n <div class=\"form-column\">\n <ng-container *ngFor=\"let row of screenFields | keyvalue\">\n <div class=\"row-container\">\n <ng-container *ngFor=\"let field of row.value\">\n <div class=\"field-column\" [style.flex]=\"field.fieldSize ? ('0 0 ' + field.fieldSize + '%') : '1 1 0'\">\n <ng-container [ngSwitch]=\"field.type\">\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <input matInput\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n (dateChange)=\"formParam.get(field.property).setValue($event.value)\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n formControlName=\"{{field.property}}\"\n [required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n\n <mat-datepicker-toggle *ngIf=\"!field.readonly\" matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-datepicker #picker\n [startView]=\"getView(field)\"\n (yearSelected)=\"setMonthAndYear($event, picker, field)\"\n panelClass=\"example-month-picker\">\n </mat-datepicker>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'phone-number'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container class=\"custom-ngx-mat-intl-tel-input\" *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <div class=\"phone-input-wrapper\">\n <ngx-mat-intl-tel-input\n formControlName=\"{{ field.property }}\"\n [inputPlaceholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [preferredCountries]=\"['qa']\"\n [enablePlaceholder]=\"true\"\n [enableSearch]=\"true\"\n [onlyCountries]=\"getCountryCodeList()\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n </ngx-mat-intl-tel-input>\n </div>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'iban-text'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'password'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input matInput\n class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n [type]=\"hide && !field.disabled ? 'password' : 'text'\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <!-- <mat-icon matSuffix-->\n <!-- (click)=\"hide = !hide\">-->\n <!-- {{ hide ? 'visibility_off' : 'visibility' }}-->\n <!-- </mat-icon>-->\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <mat-icon *ngIf=\"field.showSearchIcon\" matPrefix>search</mat-icon>\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n (keyup)=\"fixArabicNumbers($event.target)\"\n [attr.aria-required]=\"field.required\"\n [maxDigits]=\"field.maxLength\"\n [phoneNumberOnly]=\"field.phoneNumberOnly\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <span\n *ngIf=\"field.showSearchIcon && !field.readonly && (formParam?.get([field.property])?.value ?? '') !== ''\"\n matSuffix\n class=\"clear-icon-suffix\">\n <button\n mat-icon-button\n type=\"button\"\n class=\"clear-icon-button\"\n [attr.aria-label]=\"'BASE_TABLE.clearField' | translate\"\n (click)=\"clearFieldValue(field.property)\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n </span>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-state-checkbox'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"multi-state-filter\" [formGroup]=\"formParam\">\n <button\n type=\"button\"\n class=\"multi-state-filter__trigger\"\n [matMenuTriggerFor]=\"statusMultiMenu\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"false\"\n [attr.aria-label]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : (field.label | translate)\">\n <span\n class=\"multi-state-filter__trigger-text\"\n [class.multi-state-filter__trigger-text--placeholder]=\"isMultiStateEmpty(field.property)\">\n {{\n getMultiStateFilterTriggerLabel(field)\n || (field.placeholder\n ? (labelKeyPlaceHolder(field) | translate)\n : ('FILTER-BUILDER.selectStatus' | translate))\n }}\n </span>\n <mat-icon class=\"multi-state-filter__chevron\" aria-hidden=\"true\">keyboard_arrow_down</mat-icon>\n </button>\n <mat-menu #statusMultiMenu=\"matMenu\" class=\"multi-state-filter__menu-panel\" [hasBackdrop]=\"true\">\n <div\n class=\"multi-state-filter__menu-inner\"\n (click)=\"$event.stopPropagation()\"\n (keydown)=\"onMultiStateMenuInnerKeydown($event, field)\">\n <div\n *ngFor=\"let code of field.listOptions || []\"\n mat-menu-item\n class=\"multi-state-filter__row\"\n [attr.data-multi-state-code]=\"code\"\n (click)=\"onMultiStateRowClick($event, field.property, code)\">\n <mat-checkbox\n tabindex=\"-1\"\n (click)=\"$event.stopPropagation()\"\n [checked]=\"isMultiStateSelected(field.property, code)\"\n (change)=\"toggleMultiStateFilter(field.property, code, $event.checked)\">\n </mat-checkbox>\n <span\n class=\"multi-state-filter__pill stateType\"\n [ngClass]=\"code\">\n {{ statusOptionLabelKey(field, code) | translate }}\n </span>\n </div>\n </div>\n </mat-menu>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip-list'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n\n <mat-chip-grid [attr.aria-labelledby]=\"'label-' + field.property\"\n formControlName=\"{{ field.property }}\">\n <mat-chip-row\n *ngFor=\"let mail of splittedChips(formParam, field.property); let idx = index\"\n [removable]=\"removable\"\n (removed)=\"removeChipsItem(formParam, field.property, idx)\">\n {{ mail }}\n <mat-icon matChipRemove *ngIf=\"removable\">cancel</mat-icon>\n </mat-chip-row>\n\n <input [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [matChipInputFor]=\"null\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"addEmailToChips($event, formParam, field.property)\">\n </mat-chip-grid>\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'amount'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"amountReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n type=\"number\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'sequence'\">\n <ng-container\n *ngIf=\"referenceAttributeTrue(field.property, 'autoGenerated'); else noSequence\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"true\"\n [disabled]=\"true\"\n [attr.aria-labelledby]=\"'label-' + field.property\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n\n <ng-template #noSequence>\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required\" class=\"required-asterisk\"> * </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n [readonly]=\"false\"\n [disabled]=\"false\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [required]=\"field.required\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-template>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textareaReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <textarea cdkFocusInitial\n formControlName=\"{{ field.property }}\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"3\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [maxDigits]=\"field.maxLength\"\n [attr.maxlength]=\"field.maxLength || null\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"></textarea>\n <mat-hint *ngIf=\"field.maxLength\" align=\"end\">\n {{ getFieldCurrentLength(field.property) }}/{{ field.maxLength }}\n </mat-hint>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n matInput\n type=\"number\"\n [attr.min]=\"field.allowNegative ? null : 0\"\n (keydown)=\"blockNegativeNumberKeydown($event, field)\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [maxDigits]=\"field.maxLength\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.readonly ? false : field.required\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [pattern]=\"field.pattern\">\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input\n matInput\n type=\"text\"\n inputmode=\"numeric\"\n formControlName=\"{{ field.property }}\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [numbersOnly]=\"true\" [maxDecimals]=\"field.maxDecimals\"\n [maxDigits]=\"field.maxLength\"\n [pattern]=\"field.pattern\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.readonly ? false : field.required\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\">\n <mat-error id=\"error-{{ field.property }}\" *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'time'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"timeReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input\n #timeInput\n matInput\n class=\"app-input\"\n formControlName=\"{{ field.property }}\"\n type=\"time\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [required]=\"field.required\">\n <span *ngIf=\"!field.readonly\" matSuffix class=\"mat-datepicker-toggle time-picker-toggle\">\n <button\n type=\"button\"\n mat-icon-button\n class=\"time-picker-toggle-button\"\n [attr.aria-label]=\"field.label! | translate\"\n (click)=\"openTimePicker(timeInput); $event.stopPropagation()\">\n <mat-icon>schedule</mat-icon>\n </button>\n </span>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <mat-checkbox\n appearance=\"outline\"\n style=\"padding-bottom: 14px; padding-top: 14px;\"\n [disabled]=\"field.readonly\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n formControlName=\"{{ field.property }}\">\n {{ field.label! | translate }}\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-checkbox>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'toggle'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"toggleReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-slide-toggle\n [disabled]=\"field.readonly\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n formControlName=\"{{ field.property }}\">\n </mat-slide-toggle>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'color-picker'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center\">\n <h4 style=\"margin-right: 10px\">{{ field.label! | translate }}</h4>\n <input\n ejs-colorpicker\n type=\"color\"\n id=\"colorpicker\"\n formControlName=\"{{ field.property }}\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n />\n </div>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'radio-button'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"radioButtonReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <mat-radio-group\n formControlName=\"{{field.property}}\"\n class=\"app-radio\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <div class=\"field-row\">\n <div class=\"field-label\">\n <span class=\"custom-label\">{{ field.label! | translate }}</span>\n </div>\n <div class=\"field-input\">\n <div class=\"radio-group-custom\">\n <mat-radio-button\n *ngFor=\"let option of field.listOptions\"\n [value]=\"option\"\n [attr.aria-labelledby]=\"option\">\n {{ option | translate }}\n </mat-radio-button>\n </div>\n </div>\n </div>\n\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-radio-group>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"listReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\" class=\"list-field\" style=\"width: 100%\">\n <mat-select\n panelClass=\"base-form-list-panel\"\n formControlName=\"{{field.property}}\"\n [attr.aria-label]=\"field.label! | translate\"\n [attr.aria-required]=\"field.required\"\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\"\n [disabled]=\"field.readonly\"\n [multiple]=\"field.multi || false\"\n [required]=\"field.readonly ? false : field.required\"\n [(value)]=\"field.defaultListOption\">\n <ng-container *ngIf=\"field.translate; else lookup_no_translation\">\n <mat-option\n *ngFor=\"let item of field.listOptions; let i = index\"\n [value]=\"item\">\n {{ friendlyName(field.label, field.property, item) | translate }}\n </mat-option>\n </ng-container>\n <ng-template #lookup_no_translation>\n <mat-option\n *ngFor=\"let item of field.listOptions\"\n [value]=\"item\">\n {{ getOptionValue(item) }}\n </mat-option>\n </ng-template>\n </mat-select>\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'attachment'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <app-attachment-uploader\n [acceptedTypes]=\"getAcceptedFileTypes(field)\"\n [ariaDescribedBy]=\"showError(field.property) ? 'error-' + field.property : null\"\n (fileSelected)=\"onAttachmentFileSelected($event, field)\"\n style=\"margin-top: 5px\">\n </app-attachment-uploader>\n </ng-container>\n <mat-error class=\"iq-error\"\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"lookupReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <app-auto-complete\n [form]=\"formParam\"\n [field]=\"field\"\n [supportingAttributes]=\"supportingAttributes\"\n [defaultValue]=\"this.formParam.get(field.property)?.value\"\n (selectedValue)=\"patchLookupValue($event, field.property)\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </app-auto-complete>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'currency'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"currencyReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <!-- Uncomment and use the currency control when ready -->\n <!-- <app-currency\n [form]=\"formParam\"\n [field]=\"field\"\n [defaultValue]=\"this.formParam.get(field.property)?.value\"\n (selectedValue)=\"patchCurrencyValue($event, field.property)\">\n </app-currency> -->\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-select'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"multiSelectReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <app-multi-auto-complete\n [form]=\"formParam\"\n [field]=\"field\"\n [labelsSection]=\"pageInfo.labelsSection\"\n [defaultValue]=\"getMultiValue(field)\"\n (selectedValue)=\"patchMultiSelectValue($event, field.property)\">\n </app-multi-auto-complete>\n\n </ng-container>\n </ng-container>\n </ng-container>\n\n\n <ng-container *ngSwitchCase=\"'rich-text'\" [formGroup]=\"formParam\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <!-- Uncomment and use the rich text editor when ready -->\n <!-- <ckeditor\n [editor]=\"Editor\"\n [disabled]=\"field.readonly\"\n formControlName=\"{{field.property}}\">\n </ckeditor> -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'divider'\">\n <mat-divider></mat-divider>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <div>\n <mat-label\n (click)=\"getHyperTextEvent()\"\n class=\"hyper-link\">\n {{ field.label! | translate }}\n </mat-label>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'section-title'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <div class=\"hrdivider-mid\">\n <span>{{ field.label | translate }}</span>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'equation-builder'\">\n <ng-container *ngIf=\"showField(defaults, field)\">\n <ng-container *ngIf=\"!workflowEditableField(field)\">\n <ng-container\n [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\">\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"workflowEditableField(field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n <span *ngIf=\"!field.required && !field.hideLabel && !field.readonly\" class=\"optional-text\"> {{ 'optional' | translate }} </span>\n </div>\n <mat-form-field appearance=\"outline\">\n <input class=\"app-input\" dir=\"ltr\"\n formControlName=\"{{ field.property }}\"\n matInput\n [placeholder]=\"field.placeholder ? (labelKeyPlaceHolder(field) | translate) : ''\"\n [readonly]=\"field.readonly\"\n [attr.tabindex]=\"field.readonly ? -1 : null\"\n [required]=\"field.required\"\n [attr.aria-required]=\"field.required\"\n [attr.aria-invalid]=\"showError(field.property)\"\n [attr.aria-labelledby]=\"'label-' + field.property\"\n [attr.aria-describedby]=\"showError(field.property) ? 'error-' + field.property : null\">\n <mat-error\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </mat-form-field>\n\n\n </ng-container>\n </ng-container>\n </ng-container>\n <!-- <ng-container *ngSwitchCase=\"'equation-builder'\" [formGroup]=\"formParam\">-->\n <!-- <ng-container *ngIf=\"showField(defaults, field)\">-->\n <!-- <ng-container *ngIf=\"!workflowEditableField(field)\">-->\n <!-- <ng-container-->\n <!-- [ngTemplateOutlet]=\"dateReadonly\"-->\n <!-- [ngTemplateOutletContext]=\"{ field: field }\">-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n <!-- <ng-container *ngIf=\"workflowEditableField(field)\">-->\n <!-- <div style=\"display: flex; width: 350%\">-->\n <!-- <mat-label>{{ field.label! | translate }}</mat-label>-->\n <!-- <mat-form-field style=\"width: 400%\" appearance=\"outline\">-->\n <!-- <mat-chip-grid #chipGrid>-->\n <!-- <ng-container *ngFor=\"let equationValue of equationValues(); let i = index\">-->\n <!-- <mat-chip-row (removed)=\"remove(equationValue, i)\">-->\n <!-- {{ equationValue }}-->\n <!-- <button-->\n <!-- matChipRemove-->\n <!-- [attr.aria-label]=\"'remove ' + equationValue\">-->\n <!-- <mat-icon>cancel</mat-icon>-->\n <!-- </button>-->\n <!-- </mat-chip-row>-->\n <!-- </ng-container>-->\n <!-- </mat-chip-grid>-->\n <!-- <input-->\n <!-- [(ngModel)]=\"currentEquationValue\"-->\n <!-- [matChipInputFor]=\"chipGrid\"-->\n <!-- [matAutocomplete]=\"auto\"-->\n <!-- [ngModelOptions]=\"{ standalone: true }\"-->\n <!-- [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"-->\n <!-- (matChipInputTokenEnd)=\"add($event)\"-->\n <!-- aria-label=\"Add equation value\" />-->\n <!-- <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">-->\n <!-- <ng-container *ngFor=\"let filteredField of (equationFilteredFields() | async)\">-->\n <!-- <mat-option [value]=\"filteredField\">{{ filteredField }}</mat-option>-->\n <!-- </ng-container>-->\n <!-- </mat-autocomplete>-->\n <!-- </mat-form-field>-->\n <!-- </div>-->\n <!-- <mat-error class=\"iq-error\" *ngIf=\"showError(field.property)\" aria-live=\"assertive\">-->\n <!-- {{ getErrors(field.property) | translate }}-->\n <!-- </mat-error>-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n <!-- </ng-container>-->\n\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n </form>\n </ng-container>\n </ng-container>\n </div>\n\n</div>\n<ng-template #dateReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <ng-container *ngIf=\"isReadonlyTextValueEmpty(defaults, field) && field.emptyReadonlyPlaceholderKey; else dateReadonlyHasValue\">\n <span class=\"readonly-value readonly-value--empty\">{{ field.emptyReadonlyPlaceholderKey | translate }}</span>\n </ng-container>\n <ng-template #dateReadonlyHasValue>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) | date: getReadonlyDateFormat(field) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #timeReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ formatTimeToDate(defaults[field.property]) | date: 'shortTime' }}</span>\n </div>\n</ng-template>\n\n<ng-template #phoneNumberReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #textReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\" *ngIf=\"!field.advancedFilter\"></label>\n <ng-container *ngIf=\"isReadonlyTextValueEmpty(defaults, field) && field.emptyReadonlyPlaceholderKey; else textReadonlyHasValue\">\n <span class=\"readonly-value readonly-value--empty\">{{ field.emptyReadonlyPlaceholderKey | translate }}</span>\n </ng-container>\n <ng-template #textReadonlyHasValue>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #textareaReadonly let-field=\"field\">\n <ng-container *ngIf=\"field.textFormat === 'json'; else normalText\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <div class=\"readonly-value json-viewer\">\n <ngx-json-viewer [json]=\"extractJsonFieldName(defaults, field.property)\" [expanded]=\"true\"></ngx-json-viewer>\n </div>\n </div>\n </ng-container>\n <ng-template #normalText>\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n </ng-template>\n</ng-template>\n\n<ng-template #numberReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #currencyReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #radioButtonReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ translateLable(defaults[field.property]) }}</span>\n </div>\n</ng-template>\n\n<ng-template #richTextReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\" [innerHtml]=\"extractFieldName(defaults, field.property)\"></span>\n </div>\n</ng-template>\n\n<ng-template #checkboxReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n <mat-icon color=\"warn\" *ngIf=\"extractFieldName(defaults, field.property); else showNo\">done</mat-icon>\n <ng-template #showNo>\n <mat-icon color=\"warn\">close</mat-icon>\n </ng-template>\n </span>\n </div>\n</ng-template>\n\n<ng-template #toggleReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n <mat-icon color=\"warn\" *ngIf=\"extractFieldName(defaults, field.property); else showNo\">done</mat-icon>\n <ng-template #showNo>\n <mat-icon color=\"warn\">close</mat-icon>\n </ng-template>\n </span>\n </div>\n</ng-template>\n\n<ng-template #listReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\" *ngIf=\"field.translate; else noTranslate\">\n {{ listShowValue(defaults, field) | translate }}\n </span>\n <ng-template #noTranslate>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #sequenceReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">{{ extractFieldName(defaults, field.property) }}</span>\n </div>\n</ng-template>\n\n<ng-template #lookupReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n {{ extractFieldName(defaults, field.property)?.[translateService.getDefaultLang() === 'en' ? 'englishName' : 'arabicName'] }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #amountReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <span class=\"readonly-value\">\n {{ extractFieldName(defaults, field.property) | currency: currency }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #multiSelectReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></label>\n <mat-chip-grid class=\"readonly-value chipList\">\n <mat-chip *ngFor=\"let filedProp of showMultiSelectValuesAsReadonly(field)\">\n {{ filedProp }}\n </mat-chip>\n </mat-chip-grid>\n </div>\n</ng-template>\n\n<ng-template #chipListReadonly let-field=\"field\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" [innerHTML]=\"field.label | translate\"></label>\n <mat-chip-listbox class=\"readonly-value chipList\">\n <mat-chip-option *ngFor=\"let loc of splitReadonly(extractFieldName(defaults, field.property))\"\n [selectable]=\"true\"\n color=\"warn\"\n [removable]=\"false\">\n {{ loc }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n</ng-template>\n\n\n<ng-template #readonlyView>\n <div class=\"row-wrapper\">\n <div class=\"column-wrapper\">\n <ng-container *ngFor=\"let row of screenFields | keyvalue\">\n <div class=\"row-container\">\n <ng-container *ngFor=\"let field of row.value\">\n <div class=\"field-column readonly-item\" [style.flex]=\"field.fieldSize ? ('0 0 ' + field.fieldSize + '%') : '1 1 0'\">\n\n <ng-container [ngSwitch]=\"field.type\">\n\n <ng-container *ngSwitchCase=\"'attachment'\">\n <ng-container *ngIf=\"isAttachmentFieldEditable && showField(defaults, field)\">\n <div class=\"label-and-asterisk-container\">\n <span *ngIf=\"!field.hideLabel\" class=\"custom-label\" id=\"label-{{field.property}}\">\n {{ field.label! | translate }}\n </span>\n <span *ngIf=\"field.required && !field.hideLabel\" class=\"required-asterisk\"> * </span>\n </div>\n <app-attachment-uploader\n [acceptedTypes]=\"getAcceptedFileTypes(field)\"\n [ariaDescribedBy]=\"showError(field.property) ? 'error-' + field.property : null\"\n (fileSelected)=\"onAttachmentFileSelected($event, field)\"\n style=\"margin-top: 5px\">\n </app-attachment-uploader>\n <mat-error class=\"iq-error\"\n id=\"error-{{ field.property }}\"\n *ngIf=\"showError(field.property)\"\n aria-live=\"assertive\">\n {{ getErrors(field.property) | translate }}\n </mat-error>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"dateReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'time'\">\n <ng-container [ngTemplateOutlet]=\"timeReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'phone-number'\">\n <ng-container [ngTemplateOutlet]=\"phoneNumberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'text'\">\n <ng-container [ngTemplateOutlet]=\"textReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'textarea'\">\n <ng-container [ngTemplateOutlet]=\"textareaReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"numberReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'currency'\">\n <ng-container [ngTemplateOutlet]=\"currencyReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'radio-button'\">\n <ng-container [ngTemplateOutlet]=\"radioButtonReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <ng-container [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'toggle'\">\n <ng-container [ngTemplateOutlet]=\"toggleReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <ng-container [ngTemplateOutlet]=\"checkboxReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\">\n <ng-container [ngTemplateOutlet]=\"lookupReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'amount'\">\n <ng-container [ngTemplateOutlet]=\"amountReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-select'\">\n <ng-container [ngTemplateOutlet]=\"multiSelectReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip-list'\">\n <ng-container [ngTemplateOutlet]=\"chipListReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'sequence'\">\n <ng-container [ngTemplateOutlet]=\"sequenceReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ng-container [ngTemplateOutlet]=\"listReadonly\"\n [ngTemplateOutletContext]=\"{ field: field }\"></ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'multi-state-checkbox'\">\n <div class=\"readonly-item\">\n <label class=\"readonly-label\" *ngIf=\"!field.hideLabel\" [innerHtml]=\"field.label | translate\"></label>\n <span class=\"readonly-value\">{{ getMultiStateReadonlySummary(field, defaults) }}</span>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'iban-text'\">\n <p class=\"label\">\n <span [innerHtml]=\"!field.hideLabel ? (field.label | translate) : ''\"></span>\n <span> : </span>\n <span class=\"value\" [innerHtml]=\"extractFieldName(defaults, field.property)\"></span>\n </p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'section-title'\">\n <div class=\"hrdivider-mid\">\n <span>{{ field.label | translate }}</span>\n </div>\n </ng-container>\n\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FormGroup} from \"@angular/forms\";\nimport {FieldFilter} from \"../../../base-model/field-filter.model\";\nimport {FieldInfo, PageInfo} from \"../../../base-model\";\nimport {BaseFormCanvasComponent} from \"../../base-form-canvas/base-form-canvas.component\";\n\n@Component({\n selector: 'app-field-filter',\n templateUrl: './field-filter.component.html',\n standalone: true,\n imports: [\n BaseFormCanvasComponent\n ],\n styleUrls: ['./field-filter.component.scss']\n})\n\nexport class FieldFilterComponent implements OnInit {\n\n @Input()\n filter: FieldFilter;\n\n @Input()\n pageInfo: PageInfo;\n\n @Input()\n filterFields: FieldInfo[];\n\n filterForm: FormGroup;\n\n @Input()\n item: any;\n\n @Input()\n editable = false;\n\n @Input()\n filterResetNonce = 0;\n\n @Output()\n selectedValue: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n filterFieldInformation: EventEmitter<any> = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit(): void {\n\n }\n\n\n formChanges($event: FormGroup) {\n this.filterForm = $event;\n this.filterForm.valueChanges.subscribe(() => {\n this.syncDateRangeValidity();\n this.filterFieldInformation.emit(this.filterForm.value);\n });\n }\n\n private syncDateRangeValidity(): void {\n const fromControl = this.filterForm.get('from');\n const toControl = this.filterForm.get('to');\n if (!fromControl || !toControl) {\n return;\n }\n fromControl.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n toControl.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n }\n}\n","\n<app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"filterFields\"\n [editable]=\"editable\"\n [filterResetNonce]=\"filterResetNonce\"\n (formUpdated)=\"formChanges($event)\"\n>\n</app-base-form-canvas>\n","import {Component, EventEmitter, HostListener, inject, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {LiveAnnouncer} from '@angular/cdk/a11y';\nimport {CommonModule, formatDate, NgForOf} from '@angular/common';\nimport {FieldInfo, PageInfo, TableColumn} from \"../../../base-model\";\nimport {FieldFilter} from \"../../../base-model/field-filter.model\";\nimport {FieldFilterComponent} from \"../field-filter/field-filter.component\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\n\n@Component({\n selector: 'app-filter-builder',\n templateUrl: './filter-builder.component.html',\n standalone: true,\n imports: [\n CommonModule,\n FieldFilterComponent,\n TranslateModule,\n MatButtonModule,\n MatIcon,\n MatMenu,\n MatMenuItem,\n MatMenuTrigger,\n NgForOf\n ],\n styleUrls: ['./filter-builder.component.scss']\n})\nexport class FilterBuilderComponent implements OnInit, OnDestroy {\n\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly translate = inject(TranslateService);\n\n @Input()\n columns: TableColumn<any>[];\n\n @Input()\n isChecked: boolean;\n @Input()\n filterFields: FieldInfo[];\n @Input()\n pageInfo: PageInfo;\n @Input()\n pendingFilters: FieldFilter[] = [];\n\n @Input()\n showExportButton: boolean = false;\n\n filter: FieldFilter;\n filters: FieldFilter[] = [];\n dateRangeInvalid = false;\n\n private searchTimeout: any;\n\n filterResetNonce = 0;\n\n @Output()\n filterInformation: EventEmitter<{ filters: FieldFilter[], searchStr: string }> = new EventEmitter<{ filters: FieldFilter[], searchStr: string }>();\n\n @Output()\n isEmpty: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n applyFilter: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n sortByClicked: EventEmitter<string> = new EventEmitter<string>();\n\n @Output()\n exportClicked: EventEmitter<string> = new EventEmitter<string>();\n\n constructor() {\n }\n\n isMobile(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= 768;\n }\n\n getSortableColumns(): TableColumn<any>[] {\n if (!this.columns) {\n return [];\n }\n return this.columns.filter(column =>\n column.visible === true && column.enableSorting === true\n );\n }\n\n labelKey(column: TableColumn<any>): string {\n if (!column || !column.property) {\n return '';\n }\n const configuredKey = column.label ? column.label : column.property;\n if (!this.pageInfo || !this.pageInfo.labelsSection) {\n return configuredKey;\n }\n return configuredKey.startsWith(this.pageInfo.labelsSection)\n ? `${configuredKey}`\n : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n onSortByClick(columnProperty: string): void {\n this.sortByClicked.emit(columnProperty);\n }\n\n onExportClick(reportType: string): void {\n this.exportClicked.emit(reportType);\n }\n\n ngOnInit(): void {\n\n\n this.switchToAdvanced();\n if (!this.filter) {\n this.filter = this.createDefaultFieldFilter();\n }\n if (this.filterFields && this.filterFields.length) {\n this.filters = this.filterFields.map(() => this.createDefaultFieldFilter());\n }\n }\n\n ngOnDestroy(): void {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey && !event.ctrlKey && !event.metaKey) {\n const target = event.target as HTMLElement;\n const isInputElement = target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable;\n\n if (isInputElement) {\n event.preventDefault();\n event.stopPropagation();\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n setTimeout(() => {\n this.doSearch();\n this.onApplyFilter();\n }, 0);\n return;\n }\n this.onApplyFilter();\n }\n }\n\n\n doSearch() {\n let searchStr = '';\n const filtersArray = (this.filters || [])\n .filter(f => !!f && !!f.fieldName && this.hasFilterValue(f.valueObject))\n .map(f => {\n const fieldInfo = this.filterFields?.find(field => field.property === f.fieldName);\n if (fieldInfo?.multiLevelSearchEnable && f.valueObject) {\n searchStr = f.valueObject;\n return null;\n }\n return {...f};\n })\n .filter(f => f !== null);\n\n this.filterInformation.emit({ filters: filtersArray, searchStr });\n }\n\n onApplyFilter(): void {\n if (this.dateRangeInvalid) {\n return;\n }\n setTimeout(() => {\n this.doSearch();\n this.applyFilter.emit();\n const msg = this.translate.instant('BASE_TABLE.filterApplied');\n void this.liveAnnouncer.announce(msg, 'polite');\n }, 0);\n }\n\n private scheduleSearch(delayMs: number = 800) {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(() => {\n this.doSearch();\n }, delayMs);\n }\n\n formChanges($event: any, index?: number, fieldInfo?: FieldInfo) {\n const formatIfDate = (type?: string, value?: any) => {\n if (!type || value === undefined || value === null || value === '') return value;\n if ((type || '').toLowerCase().includes('date')) {\n return formatDate(value, 'yyyy-MM-dd', 'en_US');\n }\n return value;\n };\n\n if (index === undefined || !fieldInfo) {\n this.dateRangeInvalid = this.isDateRangeInvalid($event);\n if (!this.filterFields || !this.filterFields.length) {\n this.filters = [];\n this.doSearch();\n return;\n }\n\n this.filters = this.filterFields.map((fi) => {\n const controlName = fi.property;\n let value = $event ? $event[controlName] : undefined;\n if (!this.isFilterValueActive(fi, value)) {\n return this.createDefaultFieldFilter();\n }\n const fieldName = controlName === 'from' || controlName === 'to' ? fi.targetProperty : controlName;\n\n return {\n fieldName: fieldName,\n operator: fi.filterOperator || 'EQUALS',\n filterType: 'FILED_FILTER',\n fieldType: this.typeMap(fi.type) as any,\n valueObject: formatIfDate(fi.type, value) as any\n } as FieldFilter;\n });\n\n const hasTextField = (this.filterFields || []).some(fi => ((fi.type || '').toLowerCase() === 'text'));\n if (hasTextField) {\n this.scheduleSearch();\n } else {\n this.doSearch();\n }\n return;\n }\n\n if (!this.filters) {\n this.filters = [];\n }\n if (this.filters.length < index + 1) {\n this.filters.length = index + 1;\n }\n\n let controlName = fieldInfo.property;\n let value = $event ? $event[controlName] : undefined;\n if ($event && $event.filterField !== undefined && $event.fromValue !== undefined) {\n controlName = $event.filterField || controlName;\n value = $event.fromValue;\n }\n\n if (!this.isFilterValueActive(fieldInfo, value)) {\n this.filters[index] = this.createDefaultFieldFilter();\n } else {\n this.filters[index] = {\n fieldName: controlName,\n operator: fieldInfo.filterOperator || 'EQUALS',\n filterType: 'FILED_FILTER',\n fieldType: this.typeMap(fieldInfo.type) as any,\n valueObject: formatIfDate(fieldInfo.type, value) as any\n } as FieldFilter;\n }\n const isTextField = ((fieldInfo.type || '').toLowerCase() === 'text');\n if (isTextField) {\n this.scheduleSearch();\n } else {\n this.doSearch();\n }\n }\n typeMap(colType?: string): string {\n const t = (colType || '').toLowerCase();\n if (t.includes('number') || t.includes('int') || t === 'long') return 'Long';\n if (t.includes('date') || t.includes('time')) return 'Date';\n if (t.includes('bool')) return 'Boolean';\n return 'String';\n }\n\n isEditable(_index?: number) {\n return true;\n }\n\n\n deleteAll() {\n this.filter = this.createDefaultFieldFilter();\n this.filters = this.filterFields ? this.filterFields.map(() => this.createDefaultFieldFilter()) : [];\n this.isEmpty.emit(true);\n }\n\n onClearFilters(): void {\n if (this.searchTimeout) {\n clearTimeout(this.searchTimeout);\n this.searchTimeout = null;\n }\n this.filterResetNonce++;\n setTimeout(() => this.deleteAll(), 0);\n }\n\n switchToAdvanced() {\n if (this.isChecked) {\n if (!this.filter || Object.keys(this.filter).length === 0) {\n this.filter = this.createDefaultFieldFilter();\n }\n }\n }\n\n\n private createDefaultFieldFilter(): FieldFilter {\n return {\n fieldName: '',\n operator: '',\n filterType: '',\n fieldType: '',\n valueObject: ''\n } as FieldFilter;\n }\n\n private isDateRangeInvalid(value: unknown): boolean {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const record = value as Record<string, unknown>;\n const fromTime = this.toTimestamp(record['from']);\n const toTime = this.toTimestamp(record['to']);\n if (fromTime === null || toTime === null) {\n return false;\n }\n return fromTime > toTime;\n }\n\n private toTimestamp(value: unknown): number | null {\n if (value === undefined || value === null || value === '') {\n return null;\n }\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value.getTime();\n }\n if (typeof value === 'object') {\n const primitive = (value as { valueOf: () => unknown }).valueOf();\n if (typeof primitive === 'number' && Number.isFinite(primitive)) {\n return primitive;\n }\n }\n const parsed = new Date(value as string | number).getTime();\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n private hasFilterValue(value: unknown): boolean {\n if (value === undefined || value === null || value === '') {\n return false;\n }\n return !Array.isArray(value) || value.length > 0;\n }\n\n private isFilterValueActive(fieldInfo: FieldInfo, value: unknown): boolean {\n if (!this.hasFilterValue(value)) {\n return false;\n }\n if ((fieldInfo.type || '') !== 'multi-state-checkbox') {\n return true;\n }\n const selected = Array.isArray(value) ? value : [];\n const options = fieldInfo.listOptions || [];\n return options.length === 0 || !options.every((code: string) => selected.includes(code));\n }\n}\n","<div class=\"main-filter-builder\">\n\n <!-- Desktop View -->\n <div class=\"filterForm desktop-view\">\n <div class=\"filterForm__row\">\n <div class=\"filterForm__col\">\n <app-field-filter\n [editable]=\"isEditable()\"\n [filter]=\"filter\"\n [pageInfo]=\"pageInfo\"\n *ngIf=\"isEditable()\"\n [filterFields]=\"filterFields\"\n [filterResetNonce]=\"filterResetNonce\"\n (filterFieldInformation)=\"formChanges($event)\"\n class=\"filterForm__filed-filter\"\n >\n </app-field-filter>\n </div>\n <div class=\"button-group\">\n <button\n mat-flat-button\n class=\"btn-apply-filter\"\n type=\"button\"\n (click)=\"onClearFilters()\">\n <div class=\"button-text\">\n <mat-icon>clear_all</mat-icon>\n <span>{{ 'FILTER-BUILDER.clearFilters' | translate }}</span>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-apply-filter\"\n type=\"button\"\n [disabled]=\"dateRangeInvalid\"\n (click)=\"onApplyFilter()\">\n <div class=\"button-text\">\n <mat-icon>filter_list</mat-icon>\n <span>{{ 'FILTER-BUILDER.applyFilter' | translate }}</span>\n </div>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Mobile View -->\n <div class=\"mobile-view\">\n <!-- Mobile Row 1: Search Field and Export Button -->\n <div class=\"mobile-search-row\">\n <div class=\"mobile-search-field\">\n <app-field-filter\n [editable]=\"isEditable()\"\n [filter]=\"filter\"\n [pageInfo]=\"pageInfo\"\n *ngIf=\"isEditable()\"\n [filterFields]=\"filterFields\"\n [filterResetNonce]=\"filterResetNonce\"\n (filterFieldInformation)=\"formChanges($event)\"\n class=\"mobile-field-filter\"\n >\n </app-field-filter>\n </div>\n <button\n *ngIf=\"showExportButton\"\n mat-flat-button\n class=\"btn-export-mobile\"\n [matMenuTriggerFor]=\"exportMenu\">\n <div class=\"button-content\">\n <mat-icon>file_export</mat-icon>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"onExportClick('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"onExportClick('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"onExportClick('csv')\">CSV</button>\n </mat-menu>\n </div>\n\n <!-- Mobile Row 2: Filter By and Sort By Buttons -->\n <div class=\"mobile-filter-row\">\n <button\n mat-flat-button\n class=\"btn-filter-by btn-filter-by--icon-only\"\n type=\"button\"\n (click)=\"onClearFilters()\"\n [attr.aria-label]=\"'FILTER-BUILDER.clearFilters' | translate\">\n <div class=\"button-content\">\n <mat-icon>delete_sweep</mat-icon>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-filter-by\"\n type=\"button\"\n [disabled]=\"dateRangeInvalid\"\n (click)=\"onApplyFilter()\">\n <div class=\"button-content\">\n <mat-icon>filter_list</mat-icon>\n <span>{{ 'FILTER-BUILDER.applyFilter' | translate }}</span>\n </div>\n </button>\n <button\n mat-flat-button\n class=\"btn-sort-by\"\n type=\"button\"\n [matMenuTriggerFor]=\"sortMenu\">\n <div class=\"button-content\">\n <mat-icon>unfold_more</mat-icon>\n <span>{{ 'FILTER-BUILDER.sortBy' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n <mat-menu #sortMenu=\"matMenu\">\n <button\n *ngFor=\"let column of getSortableColumns()\"\n mat-menu-item\n (click)=\"onSortByClick(column.property)\">\n {{ labelKey(column) | translate }}\n </button>\n <button\n *ngIf=\"getSortableColumns().length === 0\"\n mat-menu-item\n disabled>\n {{ 'FILTER-BUILDER.noSortableColumns' | translate }}\n </button>\n </mat-menu>\n </div>\n </div>\n\n<!-- <div *ngIf=\"checkIsEmpty()\" class=\"line-top\">-->\n<!-- <mat-divider></mat-divider>-->\n<!-- </div>-->\n\n<!-- <div class=\"line-bottom\">-->\n<!-- <mat-divider></mat-divider>-->\n<!-- </div>-->\n\n<!-- <div class=\"action\">-->\n<!-- <button class=\"btn-none-background-primary action__clear\" mat-button (click)=\"deleteAll()\">-->\n<!-- {{'FILTER-BUILDER.clearAllFilters' | translate}}-->\n<!-- </button>-->\n<!-- <button class=\"btn-background-primary\" mat-button (click)=\"doSearch()\">-->\n<!-- {{'FILTER-BUILDER.search' | translate}}-->\n<!-- </button>-->\n<!-- </div>-->\n</div>\n","import {\n Component,\n effect,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges\n} from \"@angular/core\";\nimport {MatTableDataSource} from \"@angular/material/table\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {MatSortModule, Sort} from \"@angular/material/sort\";\nimport {\n CurrencyPipe,\n DatePipe,\n DecimalPipe,\n NgClass,\n NgForOf,\n NgIf,\n NgStyle,\n NgSwitch,\n NgSwitchCase,\n NgSwitchDefault\n} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton, MatButtonModule, MatIconButton} from \"@angular/material/button\";\nimport {NgxPaginationModule} from \"ngx-pagination\";\nimport {ButtonActionsComponent} from \"../button-actions/button-actions.component\";\nimport {ShareDataService} from \"../../services/trigger-form.service\";\nimport {BaseUtils} from \"../../utils/base-utils\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {\n ButtonActionSettings,\n EMPTY_PAGE_INFO,\n FieldInfo,\n FRONT_END_COLUMN_TYPES,\n PageInfo,\n TABLE_RECORD_ACTION,\n TableColumn\n} from \"../../base-model\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {TablePageUserAction} from \"../../base-model/table-page-user-action.interface\";\nimport {Workflow} from \"../../base-model/workflow/workflow.model\";\nimport {ResponseEnvelop} from \"../../base-model/response-envelop.model\";\nimport {Router} from \"@angular/router\";\nimport {LiveAnnouncer} from \"@angular/cdk/a11y\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {PaginatorComponent} from \"../paginator/paginator.component\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\nimport {FilterBuilderComponent} from \"../advanced-filter/filter-builder/filter-builder.component\";\nimport {FieldFilter} from \"../../base-model/field-filter.model\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {BreakpointObserver, Breakpoints} from \"@angular/cdk/layout\";\n\n@Component({\n selector: 'app-base-table',\n standalone: true,\n templateUrl: './base-table.component.html',\n styleUrls: ['./base-table.component.scss'],\n animations: [],\n imports: [\n NgStyle,\n NgClass,\n TranslateModule,\n MatIcon,\n MatSortModule,\n NgIf,\n NgSwitch,\n MatButtonModule,\n DatePipe,\n CurrencyPipe,\n NgxPaginationModule,\n NgSwitchCase,\n NgSwitchDefault,\n MatIconButton,\n NgForOf,\n MatButton,\n ButtonActionsComponent,\n TitleBarComponent,\n PaginatorComponent,\n DecimalPipe,\n MatCheckbox,\n FilterBuilderComponent,\n MatMenuTrigger,\n MatMenu,\n MatMenuItem,\n\n ]\n})\nexport class BaseTableComponent extends BaseUtils implements OnInit, OnChanges, OnDestroy {\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n collection = {count: 60, data: []};\n config = {\n itemsPerPage: 10,\n currentPage: 1,\n totalItems: this.collection.count\n };\n public maxSize: number = 7;\n public directionLinks: boolean = true;\n public autoHide: boolean = false;\n public responsive: boolean = true;\n public labels: any = {\n previousLabel: '<',\n nextLabel: '>',\n screenReaderPaginationLabel: 'Pagination',\n screenReaderPageLabel: 'page',\n screenReaderCurrentLabel: `You're on page`\n };\n\n @Input()\n filterFields: FieldInfo[];\n @Input() noDataFoundSvgPath: string;\n @Input() noDataFoundTitle = 'noDataFoundTitle';\n @Input() noDataFoundSubtitle = 'noDataFoundSubtitle';\n @Input() noResultSvgPath: string;\n @Input() noResultTitle = 'noResultTitle';\n @Input() noResultSubtitle = 'noResultSubtitle';\n totalElements = 0;\n pagesCount = 0;\n pageIndex = 1;\n pageSize = 10;\n mobileDisplayedItems = 0;\n private selectedStatusFilter: Filter[] = [];\n advancedAppliedFilter: any[] = [];\n pendingFilters: any[] = [];\n searchStr: string = '';\n private filterRequest: FilterRequest = new FilterRequest();\n private timer: any;\n @Input()\n override pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n @Input()\n enablePagination: boolean = true;\n\n @Input()\n mobilePageSize: number = 2;\n\n @Input()\n mobileLoadMoreIncrement: number = 2;\n\n @Input() data?: MatTableDataSource<any>;\n @Input()\n listAction: ButtonActionSettings[] = [];\n\n @Input()\n extraActions: ButtonActionSettings[] = [];\n\n @Input()\n buttonsDisplayMode: 'dropdown' | 'list' = 'dropdown';\n\n @Input()\n columns: TableColumn<any>[];\n\n @Input()\n filters: Filter[] = [];\n\n @Input() //@ts-ignore\n pathParam: number;\n\n @Input()\n extraButton: ButtonActionSettings[] = [];\n\n @Output() buttonClicked = new EventEmitter<ButtonActionSettings>();\n\n @Input() //@ts-ignore\n enforceRefresh: boolean = false;\n\n @Input()\n isPending: boolean = false;\n\n @Input()\n trigger: boolean = false;\n\n @Input()\n reportRequest: ReportRequest = new ReportRequest({});\n\n @Input()\n separateEndpointData: any;\n @Input()\n manageablePages: boolean = false;\n @Input()\n totalPagesCount: number = 0;\n @Input()\n currentPageIndex: number = 0;\n\n @Output()\n pageChange: EventEmitter<any> = new EventEmitter();\n\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n @Output()\n hyperLinkAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n\n @Output()\n extraAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n\n @Output()\n selectedColumn: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n @Output()\n listActionClicked: EventEmitter<{ action: ButtonActionSettings, row: any , isPending: boolean}> = new EventEmitter<{\n action: ButtonActionSettings,\n row: any,\n isPending: boolean\n }>();\n\n @Output()\n pendingViewModeChanged = new EventEmitter<boolean>();\n\n @Output()\n showDialog: EventEmitter<any> = new EventEmitter<any>();\n\n usedWorkflow!: Workflow;\n\n mode:any;\n\n @Input()\n customizedData?: MatTableDataSource<any>;\n dataSource: MatTableDataSource<any>;\n selectedRowIndex = -1;\n noDataFound = false;\n totalRequiredCountItem = 0;\n\n\n @Output()\n clickRoutePage: EventEmitter<any> = new EventEmitter<any>();\n\n constructor(\n private backendService: BackendService,\n public translateService: TranslateService,\n public shareDataService: ShareDataService,\n private breakpointObserver: BreakpointObserver,\n @Inject('securityManager') private securityManager: any,\n private router: Router,\n private readonly liveAnnouncer: LiveAnnouncer,\n ) {\n super();\n this.dataSource = new MatTableDataSource();\n this.columns = [];\n this.filterRequest = new FilterRequest();\n\n\n effect(() => {\n if (this.pageInfo.lazyLoadData !== true || this.enforceRefresh === true) {\n this.loadData();\n }\n });\n\n }\n\n ngOnDestroy(): void {\n }\n\n ngOnInit(): void {\n this.backendService.isEmptyItems = this.dataSource.data.length <= 0;\n if (this.customizedData) {\n this.dataSource = this.customizedData;\n }\n if(this.manageablePages) {\n this.pagesCount = this.totalPagesCount;\n this.pageIndex = this.currentPageIndex;\n }\n\n this.mobileDisplayedItems = this.pageSize;\n\n this.breakpointObserver\n .observe(['(max-width: 768px)'])\n .subscribe(result => {\n if (result.matches) {\n this.pageSize = 2;\n this.loadData();\n }else {\n this.pageSize = 10;\n this.loadData();\n }\n });\n }\n\n onPageChange(event: number) {\n this.pageIndex = event;\n this.getNext(this.pageIndex - 1);\n if (this.manageablePages) {\n this.pageChange.emit(this.pageIndex);\n }\n }\n\n\n extractFieldName(element: any, property: string) {\n if (property?.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n const c = this.columns.find(c => c.property === property);\n if (Array.isArray(element[property]) && c?.arraySubProperty) {\n const fieldValues = element[property].map(f => f[c.arraySubProperty]);\n return fieldValues.join(', ');\n }\n if (c?.type === 'list' && Array.isArray(element[property])) {\n return this.getListItems(element, property).join(' • ');\n }\n return element[property];\n }\n }\n\n getListItems(element: any, property: string): string[] {\n const value = property?.includes('.')\n ? property.split('.').reduce((acc, part) => acc && acc[part], element)\n : element?.[property];\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map(item => (item == null ? '' : String(item)))\n .filter(item => item.length > 0);\n }\n\n get visibleColumns() {\n this.buildGroups()\n return this.columns.filter(column => column.visible).map(column => column.property);\n }\n\n get visibleColumnsArray() {\n return this.visibleColumns;\n }\n\n getColumn(property: string): TableColumn<any> | undefined {\n return this.columns.find(c => c.property === property);\n }\n\n getSortDirection(property: string): 'asc' | 'desc' | '' {\n if (this.reportRequest?.filterRequest?.sortKey) {\n return this.reportRequest.filterRequest.sortDirection === 'ASC' ? 'asc' : 'desc';\n }\n return '';\n }\n\n handleSortClick(property: string): void {\n const COLUMN = this.getColumn(property);\n if (!COLUMN || !COLUMN.enableSorting) {\n return;\n }\n\n const CURRENT_DIRECTION = this.getSortDirection(property);\n let NEW_DIRECTION: 'asc' | 'desc' = 'asc';\n\n if (CURRENT_DIRECTION === 'asc') {\n NEW_DIRECTION = 'desc';\n }\n\n this.onSortAction({\n active: property,\n direction: NEW_DIRECTION\n });\n }\n\n onSortHeaderKeydown(event: KeyboardEvent, columnProp: string): void {\n if (!this.getColumn(columnProp)?.enableSorting) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleSortClick(columnProp);\n }\n }\n\n /** aria-sort on sortable column headers (WCAG table semantics). */\n getColumnAriaSort(columnProp: string): 'ascending' | 'descending' | 'none' | null {\n if (!this.getColumn(columnProp)?.enableSorting) {\n return null;\n }\n const d = this.getSortDirection(columnProp);\n if (d === 'asc') {\n return 'ascending';\n }\n if (d === 'desc') {\n return 'descending';\n }\n return 'none';\n }\n\n sortState: any = {};\n\n getNext(pageIndex: number) {\n this.reportRequest.filterRequest.pageIndex = pageIndex;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.loadData();\n }\n onPageSizeChange(event: number) {\n this.pageSize = event;\n this.pageIndex = 1; // reset to first page on page size change\n this.mobileDisplayedItems = 0;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.getNext(0);\n }\n\n onLoadMore(itemsToLoad: number) {\n const currentDisplayed = this.mobileDisplayedItems || this.dataSource.data.length || this.pageSize;\n this.pageSize = Math.min(currentDisplayed + itemsToLoad, this.totalElements);\n this.mobileDisplayedItems = this.pageSize;\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.reportRequest.filterRequest.pageIndex = 0;\n this.pageIndex = 1;\n this.loadData(true);\n }\n\n private loadData(skipMobileReset: boolean = false) {\n clearTimeout(this.timer);\n\n if (!skipMobileReset) {\n // this.initializeMobilePageSize();\n }\n\n if (!this.reportRequest.filterRequest) {\n this.reportRequest.filterRequest = new FilterRequest(this.pageSize || this.pageInfo.pageSize);\n this.reportRequest.filterRequest.searchStr = this.searchStr;\n this.reportRequest.filterRequest.filters = [\n ...(this.advancedAppliedFilter || []),\n ...(this.filters || []).filter(f =>\n !(this.advancedAppliedFilter || []).some(a => a.field === f.fieldName)\n )\n ];\n }\n\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n if (this.separateEndpointData || !this.pageInfo.apiUri || this.pageInfo.apiUri.length === 0) {\n this.dataSource.data = this.separateEndpointData;\n queueMicrotask(() => this.announceTableResults());\n } else if(this.reportRequest == undefined){\n return;\n } else if(!this.manageablePages) {\n this.timer = setTimeout(() => {\n this.reportRequest.filterRequest.pageSize = this.pageSize;\n this.reportRequest.filterRequest.columns = this.columns?.filter(c => FRONT_END_COLUMN_TYPES.indexOf(c.type) < 0 ).map(c => c.property) || [];\n this.reportRequest.filterRequest.pendingPage = this.isPending;\n this.reportRequest.filterRequest.searchStr = this.searchStr;\n this.reportRequest.filterRequest.filters = [\n ...(this.advancedAppliedFilter || []),\n ...(this.filters || []).filter(f =>\n !(this.advancedAppliedFilter || []).some(a => a.field === f.fieldName)\n )\n ];\n this.backendService.getItemsByFilter(this.reportRequest?.filterRequest, this.pageInfo.apiUri).subscribe(resp => {\n const responseEnvelope = new ResponseEnvelop(resp);\n if (responseEnvelope.valid) {\n this.totalRequiredCountItem = this.reportRequest.filterRequest.pageSize\n this.noDataFound = responseEnvelope.body.length < 1;\n this.dataSource.data = responseEnvelope.body;\n this.backendService.isEmptyItems = this.dataSource.data.length <= 0;\n this.totalElements = responseEnvelope.totalSize || 0;\n this.pagesCount = Math.ceil(this.totalElements / this.pageSize) || 1;\n this.pageIndex = (this.reportRequest.filterRequest.pageIndex || 0) + 1;\n this.config.totalItems = responseEnvelope.totalSize || 0;\n this.config.currentPage = this.pageIndex + 1;\n this.mobileDisplayedItems = this.dataSource.data.length;\n queueMicrotask(() => this.announceTableResults());\n }\n });\n }\n , 300);\n }\n }\n\n private announceTableResults(): void {\n const visible = this.dataSource?.data?.length ?? 0;\n const total = this.totalElements ?? visible;\n const message = this.translateService.instant('BASE_TABLE.resultsAnnouncement', {\n visible,\n total,\n });\n void this.liveAnnouncer.announce(message, 'polite');\n }\n\n getStatusDescription(element: any) {\n return this.backendService.getStatusDescription(element, this.usedWorkflow);\n }\n\n getStateType(element: any) {\n return element.stateType\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"customizedData\"] && !changes[\"customizedData\"].isFirstChange()) {\n this.dataSource.data = changes[\"customizedData\"].currentValue?.data || []; // Update data source with new data\n this.pagesCount=this.totalPagesCount;\n this.pageIndex=this.currentPageIndex;\n queueMicrotask(() => this.announceTableResults());\n }\n if (changes[\"enforceRefresh\"] && !changes[\"enforceRefresh\"].isFirstChange()) {\n this.loadData();\n }\n if (changes[\"isPending\"] && !changes[\"isPending\"].isFirstChange()) {\n this.loadData();\n }\n }\n getCroppedText(elementValue: any, subWidth: number = 20) {\n return elementValue && elementValue.length > subWidth ? elementValue.substring(0, subWidth) + \"...\" : elementValue;\n }\n\n emitEvent(element: any) {\n this.showDialog.emit(element);\n }\n\n extractFormat(column: TableColumn<any>) {\n return column?.format || 'd/M/yyyy, h:mm a';\n }\n\n actionListClicked(listAction: ButtonActionSettings, element: any) {\n this.listActionClicked.emit({action:listAction, row: element, isPending: this.isPending});\n }\n\n hyperLinkClicked(actionName: string, element: any) {\n const action = TABLE_RECORD_ACTION;\n action.actionKey = actionName;\n action.item = element;\n action.pageInfo = this.pageInfo;\n this.hyperLinkAction.emit(action)\n }\n\n\n emitRoutePage(element: any){\n this.clickRoutePage.emit(element);\n }\n\n onSelectItem(row: any) {\n if (this.pageInfo.selfRouting) {\n const mode = this.isPending ? 'pending' : 'view';\n const url = `${this.pageInfo.listRoutePath || this.router.url}/view`;\n\n const encryptedId = this.backendService.encrypt(String(row.id));\n const encryptedMode = this.backendService.encrypt(mode);\n\n const encryptedRow = this.backendService.encrypt(JSON.stringify(row));\n\n this.router.navigate([url], {\n queryParams: { token: encryptedId, mode: encryptedMode },\n state: { raw: encryptedRow },\n });\n return;\n }\n // const action = SELECT_RECORD_ACTION;\n // action.id = row?.id;\n // action.item = row;\n // this.userAction.emit(action)\n }\n\n openNewTab(row) {\n if (!this.pageInfo.embededTableOnly) {\n const mode = this.isPending ? 'pending' : 'view';\n window.open(`${this.pageInfo.listRoutePath}/${mode}` + '/' + row?.id);\n }\n }\n\n onViewModeChangedReceived(isPending: boolean) {\n this.pendingViewModeChanged.emit(isPending);\n this.switchViewMode(isPending);\n }\n\n switchViewMode(isPending: boolean) {\n this.isPending = isPending;\n this.loadData();\n }\n\n onAddNewAction($event: any) {\n const url = `${this.pageInfo.listRoutePath || this.router.url}/view`;\n const encryptedId = this.backendService.encrypt(\"-1\");\n const encryptedMode = this.backendService.encrypt(\"pending\");\n this.router.navigate([`${url}`],\n { queryParams: { token: encryptedId , mode : encryptedMode } });\n\n // const action = SELECT_RECORD_ACTION;\n // action.id = row?.id;\n // action.item = row;\n // this.userAction.emit(action)\n }\n\n showAddNew() {\n return this.pageInfo.hasAddButton ;\n }\n\n onExtraButtionAction($event: any) {\n this.extraAction.emit($event);\n\n }\n\n hasGroups() {\n let b = this.columns.findIndex(p => p.group);\n return b >= 0;\n }\n groupNames: any = []\n groupSpans: Map<string, number> = new Map();\n\n buildGroups(){\n let count = 0;\n this.groupNames = [];\n this.groupSpans.clear();\n if(this.hasGroups() === false){\n return;\n }\n this.columns\n .filter(column => column.visible === true)\n .forEach((column) => {\n if (column.group === \"-\") {\n this.groupNames.push(count.toString());\n this.insertInMap(count);\n count++;\n return;\n } else if (!this.groupNames.includes(column.group)) {\n this.groupNames.push(column.group);\n this.insertInMap(column.group);\n return;\n }\n this.insertInMap(column.group);\n });\n }\n\n insertInMap(key){\n if(this.groupSpans.has(key)){\n this.groupSpans.set(key.toString(), this.groupSpans.get(key) + 1);\n } else {\n this.groupSpans.set(key.toString(), 1);\n }\n }\n\n isHumanMade(str){\n return isNaN(str);\n }\n\n actionButtonClicked(actionKey: string, item: any): void {\n if (actionKey === 'navigate') {\n this.handleNavigateAction(item);\n return;\n }\n\n this.emitTableAction(actionKey, item);\n }\n\n private handleNavigateAction(item: any): void {\n const mode = this.isPending ? 'pending' : 'view';\n const basePath = this.pageInfo.listRoutePath || this.router.url;\n const url = `${basePath}/view`;\n\n const encryptedId = this.backendService.encrypt(item.id.toString());\n const encryptedMode = this.backendService.encrypt(mode);\n\n this.router.navigate([url], {\n queryParams: { token: encryptedId, mode: encryptedMode }\n });\n }\n\n private emitTableAction(actionKey: string, item: any): void {\n const action = TABLE_RECORD_ACTION;\n action.actionKey = actionKey;\n action.item = item;\n action.pageInfo = this.pageInfo;\n this.userAction.emit(action);\n }\n\n extractReport(reportType: any) {\n const myFilters = this.reportRequest.filterRequest;\n const reportRequest = this.backendService.buildReportRequest(this.columns, this.pageInfo.labelsSection + '.list_title',\n myFilters, reportType, this.pageInfo, this.searchStr, 'LANDSCAPE');\n this.backendService.downloadReport(reportRequest, this.pageInfo.apiUri);\n }\n\n getIcon(status: string): string {\n switch (status) {\n case 'pass': return 'check_circle';\n case 'warning': return 'warning';\n case 'error': return 'error';\n default: return 'help';\n }\n }\n\n getIconAriaLabelKey(status: string): string {\n switch (status) {\n case 'pass':\n return 'BASE_TABLE.statusIconPass';\n case 'warning':\n return 'BASE_TABLE.statusIconWarning';\n case 'error':\n return 'BASE_TABLE.statusIconError';\n default:\n return 'BASE_TABLE.statusIconUnknown';\n }\n }\n\n getOnOffFlagAriaLabelKey(value: boolean | null | undefined): string {\n if (value === true) {\n return 'BASE_TABLE.statusFlagActive';\n }\n if (value === false) {\n return 'BASE_TABLE.statusFlagInactive';\n }\n return 'BASE_TABLE.statusFlagPending';\n }\n\n actionCheckedClicked(property: string, element) {\n element[property]= !element[property];\n this.actionButtonClicked(property, element);\n }\n\n\n isDarkHighlight(row: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !row[groupByProp]) {\n return false;\n }\n\n const cellValue = row[groupByProp].toString();\n\n return groupByValues.some(val =>\n cellValue.includes(val) && cellValue.length > val.length\n );\n }\n\n shouldRenderAsHyperLink(element: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !element[groupByProp]) {\n return false;\n }\n\n const value = element[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n\n onSortAction($event: Sort) {\n const col = this.columns.find(c => c.property === $event.active);\n\n this.reportRequest.filterRequest.sortKey =\n $event.active && $event.direction\n ? (col?.sortKey ?? $event.active)\n : 'id';\n\n this.reportRequest.filterRequest.sortDirection = $event.direction === 'asc' ? 'ASC' : 'DESC';\n this.reportRequest.filterRequest.pageIndex = 0;\n this.selectedColumn.emit($event);\n this.loadData();\n }\n\n shouldShowButton(element: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !element[groupByProp]) {\n return true;\n }\n\n const value = element[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n storePendingFilters($event: { filters: FieldFilter[], searchStr: string }): void {\n this.pendingFilters = $event.filters || [];\n this.searchStr = $event.searchStr;\n }\n\n private resetPaginationForFilterChange(): void {\n if (!this.reportRequest.filterRequest) {\n this.reportRequest.filterRequest = new FilterRequest(this.pageSize || this.pageInfo.pageSize);\n }\n this.reportRequest.filterRequest.pageIndex = 0;\n this.pageIndex = 1;\n if (this.manageablePages) {\n this.pageChange.emit(this.pageIndex);\n }\n }\n\n applyPendingFilters(): void {\n this.advancedAppliedFilter = this.pendingFilters || [];\n this.resetPaginationForFilterChange();\n this.loadData();\n }\n\n handleFilterEmpty($event: boolean): void {\n if ($event) {\n this.pendingFilters = [];\n this.advancedAppliedFilter = [];\n this.searchStr = '';\n this.resetPaginationForFilterChange();\n this.loadData();\n }\n }\n\n resetData($event: boolean) {\n if ($event) {\n this.advancedAppliedFilter = [];\n this.pendingFilters = [];\n this.resetPaginationForFilterChange();\n this.loadData();\n // this.paginator.firstPage();\n }\n }\n\n hasFiltersApplied(): boolean {\n return (this.advancedAppliedFilter && this.advancedAppliedFilter.length > 0) ||\n (this.filters && this.filters.length > 0) ||\n (this.pendingFilters && this.pendingFilters.length > 0);\n }\n\n getDisplaySvgPath(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultSvgPath : this.noDataFoundSvgPath;\n }\n\n getDisplayTitle(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultTitle : this.noDataFoundTitle;\n }\n\n getDisplaySubtitle(): string {\n return this.hasFiltersApplied() && this.noResultSvgPath ? this.noResultSubtitle : this.noDataFoundSubtitle;\n }\n\n buttonClickedEvent($event: ButtonActionSettings) {\n\n }\n\n getMobileCardIdColumn(): TableColumn<any> | undefined {\n return this.columns.find(c => c.visible && c.mobileCardId === true);\n }\n\n getMobileCardStatusColumn(): TableColumn<any> | undefined {\n return this.columns.find(c => c.visible && c.mobileCardStatus === true);\n }\n\n getMobileCardColumns(): TableColumn<any>[] {\n const idCol = this.getMobileCardIdColumn();\n const statusCol = this.getMobileCardStatusColumn();\n\n return this.columns.filter(c =>\n c.visible &&\n c.property !== 'actions' &&\n c !== idCol &&\n c !== statusCol\n );\n }\n\n override labelKeyByValue(column: TableColumn<any> | undefined, row: any): string {\n if (!column || !column.property) return '';\n return super.labelKeyByValue(column, row);\n }\n}\n","<div class=\"flex-column baseTable\">\n <div class=\"flex-row flex-100\" >\n <div class=\"flex-column align-start flex-100\" style=\"width: 100%;\">\n <app-title-bar\n [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [subTitle]=\"(pageInfo.hideTitle || pageInfo.hideSubtitle) ? '' : pageInfo.labelsSection+'.subtitle'\"\n [titleMode]=\"''\"\n [pageInfo]=\"pageInfo\"\n [newAction]=\"showAddNew()\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\"\n [draftSupported]=\"pageInfo.draftSupported\"\n [isPending]=\"isPending\"\n [onViewModeChange]=\"switchViewMode.bind(this)\"\n [buttons]=\"extraActions\"\n [buttonsDisplayMode]=\"buttonsDisplayMode\"\n (newActionClicked)=\"onAddNewAction($event)\"\n (extractReport)=\"extractReport($event)\"\n (viewModeChanged)=\"onViewModeChangedReceived($event)\"\n (buttonClicked)=\"buttonClicked.emit($event)\"\n [totalElements]=\"pageInfo.hideTitle ? undefined : totalElements\">\n </app-title-bar>\n </div>\n </div>\n\n <div class=\"filter-row\" *ngIf=\"!pageInfo.hideAdvancedFilter\">\n <app-filter-builder\n *ngIf=\"!pageInfo.hideAdvancedFilter\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n [filterFields]=\"filterFields\"\n [pendingFilters]=\"pendingFilters\"\n [showExportButton]=\"!pageInfo.hideExtractButton\"\n (filterInformation)=\"storePendingFilters($event)\"\n (isEmpty)=\"handleFilterEmpty($event)\"\n (applyFilter)=\"applyPendingFilters()\"\n (sortByClicked)=\"handleSortClick($event)\"\n (exportClicked)=\"extractReport($event)\">\n </app-filter-builder>\n\n <div class=\"button-group\" *ngIf=\"!pageInfo.hideExtractButton\">\n <button *ngIf=\"!pageInfo.hideExtractButton\"\n mat-flat-button\n type=\"button\"\n [matMenuTriggerFor]=\"exportMenu\"\n class=\"btn-export\"\n [attr.aria-label]=\"'export' | translate\"\n [attr.aria-haspopup]=\"true\"\n >\n <div class=\"button-text\">\n <mat-icon>file_export</mat-icon>\n <span>{{ 'export' | translate }}</span>\n <mat-icon class=\"arrow-icon\">keyboard_arrow_down</mat-icon>\n </div>\n </button>\n\n <mat-menu #exportMenu=\"matMenu\">\n <button mat-menu-item (click)=\"extractReport('pdf')\">PDF</button>\n <button mat-menu-item (click)=\"extractReport('xlsx')\">Excel</button>\n <button mat-menu-item (click)=\"extractReport('csv')\">CSV</button>\n </mat-menu>\n\n </div>\n </div>\n\n\n <div class=\"flex-row flex-100 baseTable__detailsColumn\">\n <div class=\"flex-100\">\n <div class=\"flex-row flex-100 mainTable\">\n <div\n class=\"table-container\"\n role=\"table\"\n [attr.aria-label]=\"\n pageInfo.labelsSection && !pageInfo.hideTitle\n ? (pageInfo.labelsSection + '.list_title' | translate)\n : null\n \">\n <div class=\"table-header\" [attr.data-sort]=\"sortState\" role=\"row\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-header-cell\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getColumnAriaSort(columnProp)\"\n [attr.tabindex]=\"getColumn(columnProp)?.enableSorting ? 0 : null\"\n [class.sortable]=\"getColumn(columnProp)?.enableSorting\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\"\n (click)=\"getColumn(columnProp)?.enableSorting && handleSortClick(columnProp)\"\n (keydown)=\"onSortHeaderKeydown($event, columnProp)\">\n <div class=\"table-header-content\">\n <span class=\"table-header-label\">{{ labelKey(getColumn(columnProp)) | translate }}</span>\n <ng-container *ngIf=\"getColumn(columnProp)?.enableSorting\">\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'asc'\"\n class=\"sort-icon sort-asc\">arrow_drop_up</mat-icon>\n <mat-icon *ngIf=\"getSortDirection(columnProp) === 'desc'\"\n class=\"sort-icon sort-desc\">arrow_drop_down</mat-icon>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"table-body\" role=\"rowgroup\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"table-row\"\n role=\"row\"\n [attr.tabindex]=\"-1\"\n [attr.id]=\"'table-row-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'table-row--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'table-row--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n <div *ngFor=\"let columnProp of visibleColumnsArray; let i = index\"\n class=\"table-cell\"\n role=\"cell\"\n [class.first-cell]=\"i === 0\"\n [class.last-cell]=\"i === visibleColumnsArray.length - 1\"\n [class.actions-cell]=\"i === visibleColumnsArray.length - 1 && columnProp === 'actions'\"\n [class.has-width]=\"getColumn(columnProp)?.width\"\n [ngStyle]=\"getColumn(columnProp)?.width ? {'width': getColumn(columnProp)?.width + '%', 'flex-basis': getColumn(columnProp)?.width + '%'} : {}\">\n <ng-container [ngSwitch]=\"getColumn(columnProp)?.type\">\n <ng-container *ngSwitchCase=\"'workflowStatus'\">\n <button mat-button type=\"button\" class=\"wfStatus {{ getStatusDescription(row)}}\" [attr.id]=\"'table-btn-wf-'+columnProp+'-'+(row.id || row.key || '')\" [attr.tabindex]=\"-1\">{{ getStatusDescription(row) }}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'hyper-text'\">\n <span\n *ngIf=\"shouldRenderAsHyperLink(row); else plainHyperText\"\n class=\"mat-mdc-form-field-label hyper-link\"\n [attr.tabindex]=\"-1\"\n (click)=\"hyperLinkClicked(columnProp, row)\">\n {{ extractFieldName(row, columnProp) }}\n </span>\n <ng-template #plainHyperText>\n <span class=\"mat-mdc-form-field-label\">{{ extractFieldName(row, columnProp) }}</span>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'button'\">\n <button *ngIf=\"shouldShowButton(row)\" mat-button type=\"button\" class=\"primary\" (click)=\"$event.stopPropagation(); actionButtonClicked(columnProp, row)\" [attr.id]=\"'table-btn-action-'+columnProp\">\n {{ labelKey(getColumn(columnProp)) + '_title' | translate }}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon [ngClass]=\"{\n 'mainTable__td__icon-green': row[columnProp] === 'pass',\n 'mainTable__td__icon-orange': row[columnProp] === 'warning',\n 'mainTable__td__icon-red': row[columnProp] === 'error'\n }\"\n [attr.aria-label]=\"getIconAriaLabelKey(row[columnProp]) | translate\">\n {{ getIcon(row[columnProp]) }}\n </mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <mat-checkbox class=\"primary\" [tabIndex]=\"-1\" [checked]=\"row[columnProp]\" (click)=\"$event.stopPropagation();actionCheckedClicked(columnProp,row)\"></mat-checkbox>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button type=\"button\" class=\"stateType {{ row[columnProp]}}\" [attr.id]=\"'table-btn-state-'+columnProp\" [attr.tabindex]=\"-1\">{{ labelKeyByValue(getColumn(columnProp), row) | translate}}</button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, columnProp) | date:'dd/MM/yyyy' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'croppedText'\">\n {{ getCroppedText(row[columnProp], row[getColumn(columnProp)?.width]) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'download'\">\n <mat-icon class=\"mainTable__td__icon-blue\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\">system_update_alt</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'onOff'\">\n <mat-icon *ngIf=\"row[columnProp] === null\" class=\"mainTable__td__icon-darkorange\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(null) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === false\" class=\"mainTable__td__icon-red\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(false) | translate\">flag</mat-icon>\n <mat-icon *ngIf=\"row[columnProp] === true\" class=\"mainTable__td__icon-green\"\n [attr.aria-label]=\"getOnOffFlagAriaLabelKey(true) | translate\">flag</mat-icon>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'status'\">\n <span *ngIf=\"row[columnProp] === null || row[columnProp] === false\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'InActive' | translate }}\n </span>\n <span *ngIf=\"row[columnProp] === true\">\n {{ pageInfo.labelsSection + '.' + getColumn(columnProp)?.label + 'Active' | translate }}\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'info'\">\n <button\n mat-icon-button\n type=\"button\"\n [attr.tabindex]=\"-1\"\n [attr.aria-label]=\"'BASE_TABLE.rowDetails' | translate\"\n (click)=\"$event.stopPropagation();emitEvent(row)\"\n [attr.id]=\"'table-btn-info-'+row.id\">\n <mat-icon aria-hidden=\"true\">info</mat-icon>\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <div class=\"mainTable__td__currency\" style=\"display:inline-block;\">{{ row[getColumn(columnProp)?.currency] }}</div>\n <span class=\"mainTable__td__property\" style=\"display:inline-block; margin-left:6px; margin-right:6px;\">\n {{ extractFieldName(row, columnProp) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, columnProp) | date : extractFormat(getColumn(columnProp)) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[getColumn(columnProp)?.currency]}}</sup></small>\n {{ extractFieldName(row, columnProp) | number : (getColumn(columnProp)?.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'listAction'\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"getColumn(columnProp)?.viewType === 'buttonsAction'\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, columnProp)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"getColumn(columnProp)?.translate; else noTranslate\">\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\">\n {{ pageInfo.labelsSection + \".\" + extractFieldName(row, columnProp) | translate }}\n </span>\n </ng-container>\n <ng-template #noTranslate>\n <span\n [attr.tabindex]=\"-1\"\n (click)=\"$event.stopPropagation(); emitRoutePage(row)\"\n [innerText]='extractFieldName(row, columnProp)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card View -->\n <div class=\"mobile-cards-container\">\n <div *ngFor=\"let row of dataSource.data; let rowIndex = index\"\n class=\"mobile-card\"\n [attr.id]=\"'mobile-card-' + (row?.id || row?.key || '')\"\n [ngClass]=\"{\n 'mobile-card--highlight': selectedRowIndex == row.id || (pageInfo.groupByProperty && pageInfo.groupByValue?.includes(row[pageInfo.groupByProperty])),\n 'mobile-card--dark-highlight': isDarkHighlight(row)\n }\"\n (auxclick)=\"openNewTab(row)\"\n (click)=\"$event.stopPropagation(); onSelectItem(row)\">\n\n <!-- Mobile Card Header: ID/Name and Status -->\n <div class=\"mobile-card__header\">\n <div class=\"mobile-card__header-id\">\n <span class=\"mobile-card__id-text\">{{ extractFieldName(row, getMobileCardIdColumn()?.property || 'id') }}</span>\n </div>\n <div class=\"mobile-card__header-status\" *ngIf=\"getMobileCardStatusColumn()\">\n <button mat-button class=\"stateType {{ row[getMobileCardStatusColumn()?.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+getMobileCardStatusColumn()?.property\">\n {{ labelKeyByValue(getMobileCardStatusColumn(), row) | translate}}\n </button>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"mobile-card__divider\"></div>\n\n <!-- Mobile Card Body: Other columns -->\n <div class=\"mobile-card__body\">\n <div *ngFor=\"let column of getMobileCardColumns()\" class=\"mobile-card__row\">\n <div class=\"mobile-card__row-label\">\n <span>{{ labelKey(column) | translate }} :</span>\n </div>\n <div class=\"mobile-card__row-value\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'stateType'\">\n <button mat-button class=\"stateType {{ row[column.property]}}\"\n [attr.id]=\"'mobile-btn-state-'+column.property\">\n {{ labelKeyByValue(column, row) | translate}}\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{ extractFieldName(row, column.property) | date:'dd/MM/yyyy' }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'netAmount'\">\n <span class=\"mobile-card__amount-currency\">{{ row[column.currency] }}</span>\n <span class=\"mobile-card__amount-value\">{{ extractFieldName(row, column.property) | currency:'':'' }}</span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'localDateTime'\">\n {{ extractFieldName(row, column.property) | date : extractFormat(column) }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'bigdecimal'\">\n <small><sup class=\"mainTable__td__currency\">{{row[column.currency]}}</sup></small>\n {{ extractFieldName(row, column.property) | number : (column.digitInfo || '1.3-5') }}\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'list'\">\n <ul class=\"mainTable__td__list\">\n <li *ngFor=\"let item of getListItems(row, column.property)\">{{ item }}</li>\n </ul>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"column.translate; else noTranslate\">\n <span>{{ pageInfo.labelsSection + \".\" + extractFieldName(row, column.property) | translate }}</span>\n </ng-container>\n <ng-template #noTranslate>\n <span [innerText]='extractFieldName(row, column.property)'></span>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Mobile Card Actions -->\n <div class=\"mobile-card__actions\" *ngIf=\"listAction && listAction.length > 0\">\n <app-button-actions\n [row]=\"row\"\n [buttonsAction]=\"true\"\n [listAction]=\"listAction\"\n [actions]=\"listAction\"\n (clickedButton)=\"actionListClicked($event,row)\">\n </app-button-actions>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"noDataFound\" class=\"dataNotFound flex-column\">\n <img *ngIf=\"getDisplaySvgPath()\" [src]=\"getDisplaySvgPath()\" class=\"dataNotFound__icon\" alt=\"No data found\" />\n <span class=\"dataNotFound__title\">{{ getDisplayTitle() | translate}}</span>\n <span class=\"dataNotFound__subtitle\">{{ getDisplaySubtitle() | translate}}</span>\n </div>\n\n\n <div *ngIf=\"(dataSource.data?.length > 0 || customizedData) && !pageInfo.hidePagination\" class=\"main-pagination flex-row\">\n <ng-container *ngIf=\"enablePagination\">\n <div class=\"flex-column flex-100\">\n <app-paginator\n [currentPage]=\"pageIndex\"\n [totalItems]=\"totalElements\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\"\n [mobileLoadMoreIncrement]=\"mobileLoadMoreIncrement\"\n [displayedItems]=\"mobileDisplayedItems || dataSource.data.length\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"\n (loadMore)=\"onLoadMore($event)\">\n </app-paginator>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FieldInfo, Filter, FilterRequest, PageInfo} from \"../../base-model\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services\";\nimport {DatePipe, NgClass, NgForOf, NgIf} from \"@angular/common\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ActivatedRoute} from \"@angular/router\";\nimport {AuditLogEntry} from \"../../base-model/audit-log-entry\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle} from \"@angular/material/expansion\";\n\n@Component({\n selector: 'app-audit-log',\n standalone: true,\n imports: [\n NgForOf,\n MatButtonModule,\n TranslateModule,\n NgIf,\n MatIconModule,\n DatePipe,\n NgClass,\n MatExpansionPanelTitle,\n MatExpansionPanel,\n MatExpansionPanelHeader\n ],\n providers: [DatePipe],\n templateUrl: './audit-log.component.html',\n styleUrls: ['./audit-log.component.scss']\n})\nexport class AuditLogComponent implements OnInit {\n auditLogEntries: AuditLogEntry[] = [];\n\n @Input() pageInfo!: PageInfo;\n @Input() statusName!: string;\n @Input() module: string;\n @Input() identifier: string;\n @Input() fields: FieldInfo[] = [];\n @Input() showHiddenFields: string[] = [];\n @Input() nameField = 'name';\n\n auditRecordId: number | string | null = null;\n currentDirection: 'ltr' | 'rtl' = 'ltr';\n\n constructor(\n public dialog: MatDialog,\n private activatedRoute: ActivatedRoute,\n private directionality: Directionality,\n @Inject('securityManager') private securityManager: any,\n public backendService: BackendService\n ) {}\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n });\n\n this.loadItem();\n }\n\n private resolveStateRecord(): Record<string, unknown> | null {\n const s = history.state as Record<string, unknown> | undefined;\n if (!s) {\n return null;\n }\n const candidate =\n (s['raw'] as Record<string, unknown> | undefined) ??\n (s['entityData'] as Record<string, unknown> | undefined) ??\n (s['userData'] as Record<string, unknown> | undefined) ??\n (s['entity'] as Record<string, unknown> | undefined) ??\n (s['data'] as Record<string, unknown> | undefined);\n return candidate ?? null;\n }\n\n private loadItem() {\n const state = this.resolveStateRecord();\n const id = state?.['id'];\n if (id !== undefined && id !== null && id !== '') {\n const num = Number(id);\n this.auditRecordId = !Number.isNaN(num) && num > 0 ? num : String(id);\n } else {\n this.auditRecordId = null;\n }\n\n if (this.auditRecordId === null) {\n return;\n }\n\n const filterRequest = new FilterRequest();\n filterRequest.filters = [];\n filterRequest.sortDirection = \"DESC\";\n filterRequest.pageSize = 1000;\n filterRequest.filters.push(new Filter({\n key: 0,\n fieldType: 'Long',\n fieldName: 'id',\n valueObject: this.auditRecordId,\n filterType: 'FILED_FILTER',\n operator: 'EQUALS'\n }));\n\n this.backendService.getItemAuditLog(filterRequest, this.pageInfo!.apiUri).subscribe({\n next: (resp) => {\n if (resp?.body?.length > 0) {\n this.auditLogEntries = resp.body.map((entry: AuditLogEntry) => ({\n ...entry\n }));\n }\n },\n });\n }\n\n getSubjectName(entry: AuditLogEntry): string {\n const subject = entry?.subject;\n if (subject == null || !this.nameField) {\n return '';\n }\n const value = this.resolveFieldPath(subject, this.nameField);\n return value != null && value !== '' ? String(value) : '';\n }\n\n private resolveFieldPath(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce<unknown>((current, key) => {\n if (current == null || typeof current !== 'object') {\n return undefined;\n }\n return (current as Record<string, unknown>)[key];\n }, obj);\n }\n}\n","<div *ngIf=\"auditRecordId !== null && this.auditLogEntries.length > 0\">\n\n<mat-expansion-panel class=\"location-card\"\n #panel=\"matExpansionPanel\"\n [expanded]=\"true\"\n [hideToggle]=\"true\"\n (opened)=\" panel.open() \"\n (closed)=\" panel.open()\">\n <mat-expansion-panel-header class=\"card-header\" >\n <mat-panel-title>\n <div class=\"title-container\">\n <h3 class=\"card-title\">\n {{ 'audit-log.title' | translate }}\n </h3>\n </div>\n </mat-panel-title>\n\n </mat-expansion-panel-header>\n <div class=\"panel-body\">\n <hr class=\"divider\"/>\n <div class=\"timeline-container\">\n <div *ngFor=\"let auditLog of auditLogEntries; let i = index\" class=\"timeline-item\">\n <div class=\"timeline-marker\">\n <div class=\"timeline-circle\"></div>\n <div *ngIf=\"i !== auditLogEntries.length - 1\" class=\"timeline-line\"></div>\n </div>\n\n <div class=\"timeline-content\">\n <div class=\"log-main-text\">\n <span class=\"actor-name\">{{ auditLog.createdByDisplayName || auditLog.createdBy || ('system' | translate) }}</span>\n <span class=\"action-text action-highlight\">{{\n 'audit-log.action_' +\n auditLog?.action +\n '_' +\n module\n | translate\n }}</span>\n <ng-container *ngIf=\"getSubjectName(auditLog)\">\n <span class=\"action-text\">{{ 'audit-log.for_' + module | translate }}</span>\n <span class=\"actor-name\">{{ getSubjectName(auditLog) }}</span>\n </ng-container>\n </div>\n <div class=\"log-timestamp\">{{ auditLog.createdOn | date: 'dd MMM, yyyy HH:mm a' }}</div>\n </div>\n </div>\n </div>\n\n\n </div>\n</mat-expansion-panel>\n\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport { FormGroup } from \"@angular/forms\";\nimport { AutoCompleteComponent } from \"../auto-complete/auto-complete.component\";\nimport { MatFormField, MatOption, MatSelect } from \"@angular/material/select\";\nimport { MatLabel } from \"@angular/material/form-field\";\nimport {NgForOf, NgIf, NgSwitch, NgSwitchCase} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {TranslateModule} from \"@ngx-translate/core\";\n\n@Component({\n selector: 'lib-equation-builder',\n standalone: true,\n imports: [\n AutoCompleteComponent,\n MatSelect,\n MatOption,\n MatFormField,\n MatLabel,\n NgSwitch,\n NgForOf,\n NgSwitchCase,\n MatIcon,\n MatIconButton,\n NgIf,\n TranslateModule,\n ],\n templateUrl: './equation-builder.component.html',\n styleUrl: './equation-builder.component.css'\n})\nexport class EquationBuilderComponent implements OnInit {\n @Input() form!: FormGroup;\n @Input() field!: any;\n @Input() isPending!: boolean;\n @Output() valueChanged = new EventEmitter<any>();\n\n operators = [\n { label: '+', value: '+' },\n { label: '-', value: '-' },\n { label: '=', value: '=' }\n ];\n\n items: any[] = [];\n @Input() readOnly!: boolean;\n\n ngOnInit() {\n const fieldValues: any[] = this.form.get('fieldValue')?.value;\n\n if (Array.isArray(fieldValues) && fieldValues.length > 0) {\n this.items = fieldValues.map(val => {\n if (this.operators.some(op => op.value === val)) {\n return { type: 'dropdown', value: val };\n } else {\n return {\n type: 'lookup',\n value: this.getLookupByCode(val)\n };\n }\n });\n } else {\n this.items = [{ type: 'lookup', value: null }];\n }\n\n }\n\n getLookupByCode(code: string): any {\n return { code: code, id: 1, englishName: code, arabicName: code }\n }\n\n onLookupChange(index: number, value: any) {\n this.items[index].value = value;\n\n if (index === this.items.length - 1) {\n this.items.push({ type: 'dropdown', value: null});\n }\n\n this.emitChange();\n }\n\n onDropdownChange(index: number, value: any) {\n this.items[index].value = value;\n\n if (index !== this.items.length - 1) {\n this.emitChange();\n return;\n }\n\n if (value === '=') {\n this.items = this.items.slice(0, index + 1);\n } else if (value != null && value !== '') {\n const lastItem = this.items[this.items.length - 1];\n if (lastItem.type !== 'lookup') {\n this.items.push({ type: 'lookup', value: null });\n }\n }\n\n this.emitChange();\n }\n\n emitChange() {\n const simplifiedItems = this.items.map(item => {\n if (item?.type === 'lookup') {\n return item.value?.code ?? null;\n } else if (item?.type === 'dropdown') {\n return item.value ?? null;\n }\n return null;\n });\n const isValid = simplifiedItems[simplifiedItems.length - 1] === '=';\n\n this.valueChanged.emit({\n value: simplifiedItems.filter(val => val !== '='),\n valid: isValid\n });\n }\n\n onClearAll(): void {\n this.items = [{ type: 'lookup', value: null }];\n this.emitChange();\n }\n\n\n}\n","<div class=\"flex-row gap-10 fill align-start-center\">\n <ng-container *ngFor=\"let item of items; let i = index\">\n <div class=\"flex-row align-start-center gap-5\">\n <ng-container [ngSwitch]=\"item.type\">\n <ng-container *ngSwitchCase=\"'lookup'\">\n <app-auto-complete\n class=\"flex-full\"\n [field]=\"field\"\n [form]=\"form\"\n [defaultValue]=\"item.value\"\n (selectedValue)=\"onLookupChange(i, $event)\">\n </app-auto-complete>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <mat-form-field class=\"flex-none\" appearance=\"outline\" style=\"width: 100px\">\n <mat-label>{{ 'BASE_TABLE.equationOperator' | translate }}</mat-label>\n <mat-select [disabled]=\"readOnly\" [value]=\"item.value\" (selectionChange)=\"onDropdownChange(i, $event.value)\">\n <mat-option *ngFor=\"let opt of operators\" [value]=\"opt.value\">\n {{ opt.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n\n <button\n [disabled]=\"isPending\"\n mat-icon-button\n type=\"button\"\n color=\"warn\"\n (click)=\"onClearAll()\"\n *ngIf=\"items.length > 0\"\n id=\"equation-clear-all-btn\"\n [attr.aria-label]=\"'BASE_TABLE.clearEquation' | translate\">\n <mat-icon aria-hidden=\"true\">delete</mat-icon>\n </button>\n</div>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from \"@angular/core\";\nimport {\n MatCell,\n MatCellDef,\n MatColumnDef,\n MatHeaderCell,\n MatHeaderCellDef,\n MatHeaderRow,\n MatHeaderRowDef,\n MatRow,\n MatRowDef,\n MatTable\n} from \"@angular/material/table\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatSortModule} from \"@angular/material/sort\";\nimport {NgClass, NgForOf, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault} from \"@angular/common\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {NgxPaginationModule} from \"ngx-pagination\";\nimport {Router} from \"@angular/router\";\nimport {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {MatError, MatFormField, MatInput, MatLabel, MatSuffix} from \"@angular/material/input\";\nimport {BackendService} from \"../../services\";\nimport {\n BaseUtils,\n buildFormFields,\n getNegativeWfActionKey,\n getPositiveWfActionKey,\n getWfActionId\n} from \"../../utils/base-utils\";\nimport {\n EMPTY_PAGE_INFO,\n FieldInfo,\n Filter,\n FilterRequest,\n LookupItem,\n PageInfo,\n SELECT_RECORD_ACTION,\n SnackMessage,\n TableColumn\n} from \"../../base-model\";\nimport {DoActionRequest, REJECT, SAVE} from \"../../base-model/do-action-request\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {MatDatepicker, MatDatepickerInput, MatDatepickerToggle} from \"@angular/material/datepicker\";\nimport moment, {Moment} from 'moment';\nimport {AutoCompleteComponent} from \"../auto-complete/auto-complete.component\";\nimport {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MatOption} from \"@angular/material/core\";\nimport {MatChipListbox, MatChipOption} from \"@angular/material/chips\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {PaginatorComponent} from \"../paginator/paginator.component\";\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {AttachmentUploaderComponent} from \"../shared/attachment-uploader/attachment-uploader.component\";\nimport {EquationBuilderComponent} from \"../equation-builder/equation-builder.component\";\nimport {MatSelect} from \"@angular/material/select\";\n\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {MatCheckbox} from \"@angular/material/checkbox\";\n@Component({\n selector: 'app-editable-base-table',\n standalone: true,\n templateUrl: './editable-base-table.component.html',\n styleUrls: ['./editable-base-table.component.scss'],\n animations: [],\n imports: [\n NgClass,\n TranslateModule,\n MatIcon,\n MatSortModule,\n MatColumnDef,\n MatHeaderCellDef,\n NgIf,\n MatTable,\n MatHeaderCell,\n NgSwitch,\n MatButtonModule,\n MatCell,\n MatCellDef,\n NgxPaginationModule,\n MatRow,\n MatRowDef,\n MatHeaderRow,\n NgSwitchCase,\n NgSwitchDefault,\n MatHeaderRowDef,\n NgForOf,\n MatButton,\n ReactiveFormsModule,\n MatInput,\n AutoCompleteComponent,\n MatFormField,\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerToggle,\n MatLabel,\n MatSuffix,\n MatChipListbox,\n MatChipOption,\n TitleBarComponent,\n PaginatorComponent,\n AttachmentUploaderComponent,\n EquationBuilderComponent,\n MatSelect,\n MatOption,\n BaseFormCanvasComponent,\n MatCheckbox,\n ],\n providers: [\n // `MomentDateAdapter` can be automatically provided by importing `MomentDateModule` in your\n // application's root module. We provide it at the component level here, due to limitations of\n // our example generation script.\n // {\n // provide: DateAdapter,\n // useClass: MomentDateAdapter,\n // deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n // },\n\n // { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },\n ],\n})\n\nexport class EditableBaseTableComponent extends BaseUtils implements OnInit, OnChanges {\n\n readonly minDate = moment([1800, 0, 1]);\n\n collection = {count: 60, data: []};\n config = {\n itemsPerPage: 10,\n currentPage: 1,\n totalItems: this.collection.count\n };\n public maxSize: number = 7;\n public directionLinks: boolean = true;\n public autoHide: boolean = false;\n public responsive: boolean = true;\n public labels: any = {\n previousLabel: '<',\n nextLabel: '>',\n screenReaderPaginationLabel: 'Pagination',\n screenReaderPageLabel: 'page',\n screenReaderCurrentLabel: `You're on page`\n };\n\n private timer: any;\n dataElements: any[] = [];\n noDataFound = false;\n isLoaded: boolean = false;\n totalElements = 0;\n pagesCount = 0;\n pageIndex = 1;\n pageSize = 10;\n formParam: FormGroup;\n searchForm: FormGroup;\n\n @Input()\n filterRequest: FilterRequest;\n\n @Input()\n superDataElements: any[];\n\n @Input()\n override pageInfo: PageInfo = EMPTY_PAGE_INFO;\n\n @Input() //@ts-ignore\n enforceRefresh: boolean = false;\n\n @Input()\n isPending: boolean = false;\n\n @Input()\n isBulkItemsSupported: boolean = false;\n\n @Input()// @ts-ignore\n public fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n public searchFormFields: FieldInfo[] = [];\n\n @Input() translationKey: string = 'addNew';\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n saveActionEmitter: EventEmitter<any> = new EventEmitter<any>();\n @Output()\n saveAttachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Input() actionRequestCallback!: (actionRequest: DoActionRequest) => DoActionRequest;\n\n @ViewChild('uploader') uploaderComponent!: AttachmentUploaderComponent;\n\n currentDirection: 'ltr' | 'rtl';\n selectedFileFromUploader: File | null = null;\n private selectedItem: any;\n\n\n constructor(\n private backendService: BackendService,\n private router: Router,\n private fb: FormBuilder,\n public dialog: MatDialog,\n private directionality: Directionality\n ) {\n super();\n }\n\n get dataFormArray(): FormArray {\n return this.formParam.get('dataFormArray') as FormArray;\n }\n\n extractFormat(column: TableColumn<any>) {\n return column?.format || 'd/M/yyyy, h:mm a';\n }\n\n get dataSource() {\n return this.dataFormArray.value;\n }\n\n ngOnInit(): void {\n\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n if(this.superDataElements?.length>0){\n this.dataElements=this.superDataElements;\n this.buildForm();\n this.isLoaded = true;\n }else {\n this.loadData();\n }\n }\n\n private loadData() {\n this.fields.forEach(field => field.readonly = this.isPending);\n\n this.dataElements = [];\n this.totalElements = 0;\n this.pagesCount = 1;\n this.pageIndex = 1;\n this.noDataFound = true;\n this.isLoaded = true;\n\n this.filterRequest.pendingPage = this.isPending;\n\n if (!this.pageInfo.lazyLoadData) {\n this.backendService.getItemsByFilter(this.filterRequest, this.pageInfo.apiUri)\n .subscribe(resp => {\n this.dataElements = resp.body || [];\n this.totalElements = resp.totalSize || 0;\n this.pagesCount = Math.max(Math.ceil(this.totalElements / this.pageSize), 1);\n this.pageIndex = (this.filterRequest.pageIndex || 0) + 1;\n this.noDataFound = this.dataElements.length === 0;\n this.isLoaded = true;\n });\n }\n\n this.buildForm();\n }\n\n private buildForm() {\n this.formParam = this.fb.group({\n dataFormArray: this.fb.array(this.dataElements.map(item => this.fb.group(buildFormFields(this.fields, item)))),\n });\n this.formUpdated.next(this.formParam);\n }\n\n onPageChange(event: number) {\n this.pageIndex = event;\n this.getNext(this.pageIndex - 1);\n }\n getNext(pageIndex: number) {\n this.filterRequest.pageIndex = pageIndex;\n this.filterRequest.pageSize = this.pageSize;\n this.loadData();\n }\n\n onPageSizeChange(event: number) {\n this.pageSize = event;\n this.pageIndex = 1;\n this.filterRequest.pageSize = this.pageSize;\n this.getNext(0);\n }\n\n\n extractFieldName(element: any, property: string) {\n if (property.includes('.')) {\n return property.split('.').reduce((acc, part) => acc && acc[part], element);\n } else {\n return element[property];\n }\n }\n\n get visibleColumns() {\n return this.fields.filter(column => column.visible).map(column => column.property);\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"enforceRefresh\"] && !changes[\"enforceRefresh\"].isFirstChange() && changes[\"enforceRefresh\"].currentValue === true) {\n // this.loadData();\n }\n }\n\n onSelectItem(row: any) {\n if (this.pageInfo.selfRouting) {\n const mode = this.isPending ? 'pending' : 'view';\n const url = `${this.pageInfo.listRoutePath || this.router.url}/${mode}`;\n this.router.navigate([`${url}`, row?.id]);\n }\n const action = SELECT_RECORD_ACTION;\n action.id = row?.id;\n // this.userAction.emit(action)\n this.selectedItem = row;\n }\n\n openNewTab(row) {\n if (!this.pageInfo.embededTableOnly) {\n const mode = this.isPending ? 'pending' : 'view';\n window.open(`${this.pageInfo.listRoutePath}/${mode}` + '/' + row?.id);\n }\n }\n\n\n getField(element, column: FieldInfo) {\n return element.controls[column.property];\n }\n\n fieldButtonEvent(column, element, actionId: number) {\n this.doSaveApproveAction(element, actionId);\n }\n\n patchLookupValue($event: LookupItem, property: string) {\n this.formUpdated.emit(this.selectedItem)\n }\n\n addNewItem() {\n const currentValues = this.formParam?.get('dataFormArray')?.value;\n if (currentValues) {\n this.dataElements = [...currentValues];\n }\n this.dataElements.push({});\n this.buildForm();\n }\n\n\n doSaveApproveAction(element, userActionId) {\n let actionId = getWfActionId(element.value.stateType);\n if (userActionId === REJECT && this.isPending) {\n actionId =3\n }\n let request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = element.value;\n\n if (this.actionRequestCallback) {\n request = this.actionRequestCallback(request);\n if (request.subject.id === \"\") {\n request.subject.id = null;\n request.subject.stateType = \"NEW\";\n }\n }\n\n if (request.subject.id === \"\") {\n request.subject.id = null;\n request.subject.stateType = \"NEW\";\n }\n\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: userActionId === 2 ? 'save' : 'reject', isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n if (resp.valid) {\n this.loadData();\n let message = '';\n if (actionId === 1 ) {\n message = 'saved_successfully' ;\n } else if (actionId ===2 ) {\n message = 'updated_successfully';\n } else if (actionId ===3 ) {\n message = 'successful_reject_message';\n } else if (actionId ===4 ) {\n message = 'approve_successfully';\n }\n this.backendService.topPanelMessage$.next(new SnackMessage(message, true, 'success'));\n }else {\n const x = resp.message?.length >0 ? resp.message[0].errorMessage : 'FAILED_CONTACT_ADMIN';\n this.backendService.topPanelMessage$.next(new SnackMessage(x, true, 'error'));\n }\n this.saveActionEmitter.emit({item:request.subject, resp});\n });\n }\n });\n }\n protected readonly getPositiveWfActionKey = getPositiveWfActionKey;\n protected readonly getNegativeWfActionKey = getNegativeWfActionKey;\n protected readonly SAVE = SAVE;\n protected readonly REJECT = REJECT;\n\n\n setMonthAndYear(normalizedMonthAndYear: Moment, picker: MatDatepicker<Moment>, element, column) {\n const date = new FormControl(moment());\n const ctrlValue = date.value;\n ctrlValue.year(normalizedMonthAndYear.year());\n ctrlValue.month(1);\n ctrlValue.dayOfYear(1);\n element.controls[column.property].setValue(ctrlValue);\n picker.close();\n }\n\n switchViewMode(b: boolean) {\n this.isPending = b;\n this.loadData();\n }\n\n onChipSelectionChange(event: any, listbox?: MatChipListbox): void {\n const value = event.value;\n if (value !== 'COMPLETED' && value !== 'PENDING') {\n setTimeout(() => listbox && (listbox.value = this.isPending ? 'PENDING' : 'COMPLETED'));\n return;\n }\n const isPending = value === 'PENDING';\n if (this.isPending !== isPending) this.switchViewMode(isPending);\n }\n\n addBulkItems() {\n const merged: any[] = [];\n\n this.dataFormArray.controls.forEach((group: AbstractControl) => {\n merged.push(group.value);\n });\n\n let request = new DoActionRequest();\n request.actionId = 1;\n\n request.subject = { invoices: merged };\n\n if (this.actionRequestCallback) {\n request = this.actionRequestCallback(request);\n\n request.subject.invoices = request.subject.invoices.map((item: any) => {\n if (item.id === \"\") {\n item.id = null;\n item.stateType = \"NEW\";\n }\n return item;\n });\n }\n\n request.subject.invoices = request.subject.invoices.map((item: any) => {\n if (item.id === \"\") {\n item.id = null;\n item.stateType = \"NEW\";\n }\n return item;\n });\n\n\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'save' , isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachment(request, this.selectedFileFromUploader, this.pageInfo!).subscribe(resp => {\n if (resp.valid) {\n this.clearBulkItems();\n this.backendService.topPanelMessage$.next(new SnackMessage('saved_successfully', true, 'success'));\n this.loadData();\n }else {\n this.backendService.topPanelMessage$.next(new SnackMessage(this.pageInfo.labelsSection + '.' + resp.message?.[0]?.errorCode, true, 'error'));\n }\n this.saveAttachmentEmitter.emit({item:request.subject, resp});\n });\n }\n }); }\n\n @ViewChild('fileUpload') fileUpload: ElementRef<HTMLInputElement>;\n\n handleFileUpload($event: File) {\n let actionId = getWfActionId('NEW');\n let request = new DoActionRequest();\n request.actionId = actionId;\n\n this.selectedFileFromUploader = $event;\n\n }\n\n shouldDisableBulkAdd() {\n const hasFile = !!this.selectedFileFromUploader;\n return (!this.formParam?.valid || this.dataFormArray.controls.length === 0) && !hasFile;\n }\n handleEquationChange(event: { value: any[], valid: boolean }, element: FormGroup, column: any): void {\n element.value[column.property] = event.value;\n const { value, valid } = event;\n element.get(column.property)?.setValue(value);\n if (!valid) {\n element.get(column.property)?.setErrors({ invalidEquation: true });\n } else {\n element.get(column.property)?.setErrors(null);\n }\n }\n\n clearBulkItems() {\n this.dataElements = [];\n this.selectedFileFromUploader = null;\n this.uploaderComponent.clearFile();\n this.buildForm();\n this.formUpdated.emit(this.formParam);\n }\n\n hasDataToClear(): boolean {\n return (this.dataElements && this.dataElements.length > 0) || !!this.selectedFileFromUploader;\n }\ngetOptionValue(item: any) {\n const value = typeof item === 'object' ?\n item.englishName : item;\n return value;\n }\n\n disabledSaveButton(element) {\n return !element.valid || (!this.isPending && element.value.stateType == 'PENDING');\n }\n\n doSearch() {\n if (this.searchForm.valid) {\n const rawValues = this.searchForm.getRawValue();\n this.filterRequest.pageIndex=0;\n this.filterRequest.filters = [];\n this.searchFormFields.forEach(x => {\n const value = rawValues[x.property];\n if (value !== null && value !== undefined && value !== '') {\n const filter = new Filter({\n key: 0,\n label: x.property,\n fieldName: x.searchAttribute,\n valueObject : x.searchAttribute.includes('.') ? value[x.searchAttribute.split('.').pop()] : value,\n operator: x.searchOperator,\n filterType: 'FILED_FILTER'\n });\n this.filterRequest.filters.push(filter);\n }\n });\n this.loadData();\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_SEARCH_FORM', true, 'error'));\n }\n }\n\n showSearch() {\n return this.searchFormFields?.length > 0;\n }\n\n clearSearch() {\n this.searchForm.get('sectorType').setValue({id:-100, englishName:'aaa', code:'aaa', arabicName:'aaa'});\n this.searchForm.reset();\n this.doSearch();\n }\n\n updateSearchForm($event: FormGroup) {\n this.searchForm = $event\n }\n\n validSearchData() {\n return !this.searchForm.valid || true;\n }\n\n}\n","<div class=\"baseTable flex-column\">\n <div class=\"left-align\">\n <app-attachment-uploader #uploader\n *ngIf=\"isBulkItemsSupported\"\n (fileSelected)=\"handleFileUpload($event)\">\n </app-attachment-uploader>\n </div>\n\n <div class=\"flex-row full-width\">\n <div class=\"flex-half flex-column align-center-start\">\n <app-title-bar [pageTitle]=\"pageInfo.hideTitle ? '' : pageInfo.labelsSection+'.list_title'\"\n [titleMode]=\"''\"\n [newAction]=\"false\"\n [showExtractButton]=\"!pageInfo.hideExtractButton\">\n </app-title-bar>\n <span class=\"font-small\">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>\n </div>\n <div class=\"flex-half flex-column align-start-end\">\n <mat-chip-listbox #box [attr.aria-label]=\"'BASE_TABLE.documentStatus' | translate\" [multiple]=\"false\" [value]=\"isPending ? 'PENDING' : 'COMPLETED'\" (click)=\"$event.stopPropagation()\" (change)=\"onChipSelectionChange($event, box)\" *ngIf=\"pageInfo.draftSupported\">\n <mat-chip-option [selected]=\"!isPending\" [color]=\"'accent'\" value=\"COMPLETED\" (click)=\"$event.stopPropagation()\">\n {{ 'finished' | translate }}\n </mat-chip-option>\n <mat-chip-option [selected]=\"isPending\" [color]=\"'accent'\" value=\"PENDING\" (click)=\"$event.stopPropagation()\">\n {{ 'todo' | translate }}\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"showSearch()\">\n <div class=\"flex-row full-width\">\n <div class=\"flex-80 flex-column align-start-end\">\n <app-base-form-canvas class=\"flex-fill\"\n [pageInfo]=\"pageInfo\"\n [fields]=\"searchFormFields\"\n [editable]=\"true\"\n (formUpdated)=\"updateSearchForm($event)\">\n </app-base-form-canvas>\n </div>\n <div class=\"flex-15 flex-column align-start-end\">\n <div class=\"flex-row align-center-center gap-8 full-width\">\n <button mat-button color=\"primary\" type=\"button\" (click)=\"doSearch()\" id=\"editable-search-btn\">\n <mat-icon>search</mat-icon>\n {{ 'search' | translate }}\n </button>\n <button mat-button color=\"primary\" type=\"button\" (click)=\"clearSearch()\" id=\"editable-clear-search-btn\">\n <mat-icon>clear</mat-icon>\n {{ 'clear' | translate }}\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div class=\"flex-row full-width baseTable__detailsColumn\">\n <div class=\"flex-full\">\n <ng-container *ngIf=\"isLoaded\">\n <div class=\"flex-row mainTable gap-0 align-start-start\">\n <form [formGroup]=\"formParam\" class=\"flex-fill\">\n <table [dataSource]=\"dataFormArray.controls\" class=\"flex-fill\" mat-table matSort>\n <ng-container *ngFor=\"let column of this.fields; let i = index\">\n <ng-container matColumnDef=\"{{column.property}}\">\n <ng-container [ngSwitch]=\"column.type\">\n <ng-container *ngSwitchCase=\"'equation-builder'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\" mat-cell>\n <lib-equation-builder\n [form]=\"element\"\n [field]=\"column\"\n [readOnly]=\"column.readonly\"\n [isPending]=\"isPending\"\n (valueChanged)=\"handleEquationChange($event, element, column)\">\n </lib-equation-builder>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'lookup'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <app-auto-complete\n [form]=\"element\"\n [field]=\"column\"\n [defaultValue]=\"element.get(column.property)?.value\"\n (selectedValue)=\"patchLookupValue($event, column.property)\">\n </app-auto-complete>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'list'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}</th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-label>{{element}}</mat-label>\n <mat-select\n formControlName=\"{{column.property}}\"\n [attr.aria-label]=\"column.label! | translate\"\n [multiple]=\"false\"\n [(value)]=\"element[column.property]\">\n <ng-container>\n <mat-option\n *ngFor=\"let item of column.listOptions\"\n [value]=\"item\">\n {{ getOptionValue(item) }}\n </mat-option>\n </ng-container>\n </mat-select>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'stateType'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ 'action' | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td mainTable__td__text-secondary__td\" mat-cell>\n <div class=\"flex-column\">\n <div class=\"flex-row full-width\">\n <div class=\"flex-third flex-column align-center-center\">\n <button mat-button class=\"btn-none-background-primary\"\n color=\"primary\"\n [disabled]=\"disabledSaveButton(element)\"\n (click)=\"fieldButtonEvent(column,element,SAVE)\"\n [attr.id]=\"'editable-save-' + (element.value?.id || '')\">\n {{ getPositiveWfActionKey(element.value.stateType) | translate }}\n </button>\n </div>\n <div class=\"flex-third flex-column align-center-center\">\n <button *ngIf=\"isPending\" mat-button class=\"btn-none-background-primary\"\n color=\"accent\"\n (click)=\"fieldButtonEvent(column,element,REJECT)\"\n [attr.id]=\"'editable-reject-' + (element.value?.id || '')\">\n {{ getNegativeWfActionKey(element.value.stateType) | translate }}\n </button>\n </div>\n <div class=\"flex-third flex-column align-center-center\"></div>\n </div>\n </div>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <mat-label>{{ labelKey(column) | translate }}</mat-label>\n <input matInput\n [disabled]=\"column.readonly\"\n [readonly]=\"column.readonly\"\n [matDatepicker]=\"picker\"\n [min]=\"minDate\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker startView=\"multi-year\"\n (yearSelected)=\"setMonthAndYear($event, picker, element,column)\"\n panelClass=\"example-month-picker\"></mat-datepicker>\n\n </mat-form-field>\n <!-- <mat-form-field class=\"flex-auto\" appearance=\"outline\" fxFlexFill>-->\n <!-- <input matInput [formControl]=\"getField(element, column)\">-->\n <!-- </mat-form-field>-->\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <!-- Visually hidden label just to trigger the floating label and asterisk -->\n <mat-label>\n </mat-label>\n\n <input matInput\n type=\"number\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'status'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-checkbox\n style=\"padding-bottom: 14px; padding-top: 14px;\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\"\n [style.pointer-events]=\"column.readonly ? 'none' : 'auto'\"\n [style.opacity]=\"column.readonly ? 0.7 : 1\"\n (click)=\"column.readonly ? $event.preventDefault() : null\">\n </mat-checkbox>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'text'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <mat-label>\n {{ labelKey(column) | translate }}\n </mat-label>\n <input matInput\n type=\"text\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n </mat-form-field>\n </td>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>\n {{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <input matInput\n [matDatepicker]=\"xpicker\"\n [min]=\"minDate\"\n [formControl]=\"getField(element, column)\"\n [required]=\"column.required\"\n [readonly]=\"column.readonly\"\n [disabled]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [attr.aria-labelledby]=\"'label-' + column.property\"\n [attr.aria-describedby]=\"'error-' + column.property\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"xpicker\"\n [disabled]=\"column.readonly\">\n </mat-datepicker-toggle>\n <mat-datepicker #xpicker></mat-datepicker>\n </mat-form-field>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th *matHeaderCellDef class=\"mainTable__th\" mat-header-cell>{{ labelKey(column) | translate }}\n </th>\n <td *matCellDef=\"let element\" class=\"mainTable__td\"\n [ngClass]=\"['mainTable__td__text-secondary__td']\"\n mat-cell>\n <mat-form-field class=\"flex-auto fx-flex-fill\" appearance=\"outline\">\n <input matInput\n [readonly]=\"column.readonly\"\n [attr.aria-required]=\"column.required\"\n [formControl]=\"getField(element, column)\">\n </mat-form-field>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <tr *matHeaderRowDef=\"visibleColumns\" mat-header-row></tr>\n <tr (click)=\"onSelectItem(row)\" (auxclick)=\"openNewTab(row)\"\n *matRowDef=\"let row; columns: visibleColumns | paginate:config\"\n [attr.id]=\"'editable-row-' + (row?.value?.id || row?.value?.key || '')\"\n mat-row></tr>\n </table>\n </form>\n </div>\n\n <div *ngIf=\"noDataFound && !pageInfo.lazyLoadData\" class=\"flex-row dataNotFound\">\n <div class=\"flex-column flex-full\">\n <span class=\"dataNotFound__details\">\n <mat-icon class=\"dataNotFound__details__icon\">info</mat-icon>\n <span>{{ 'dataNotFound' | translate }}</span>\n </span>\n </div>\n </div>\n\n <div class=\"flex-row mainTable\" *ngIf=\"!selectedFileFromUploader\">\n <div>\n <button *ngIf=\"!isPending && pageInfo.hasAddButton\" mat-button color=\"primary\" type=\"button\"\n (click)=\"addNewItem()\" id=\"editable-add-item-btn\">\n <mat-icon>add_box</mat-icon>\n {{ translationKey | translate }}\n </button>\n </div>\n </div>\n\n <div class=\"flex-row flex-wrap align-center-center main-pagination\" *ngIf=\"totalElements > 0\">\n <div class=\"flex-column flex-full\">\n <app-paginator [currentPage]=\"pageIndex\" [totalItems]=\"totalElements\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"[5, 10, 25, 50]\" (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\"></app-paginator>\n </div>\n <div class=\"flex-column flex-full countItem hide-gt-xs\">\n <span class=\"countItem__totalElement\">{{ 'totalCountItem' | translate }} : {{ this.totalElements }}</span>\n </div>\n <div class=\"flex-column flex-2\"></div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <div *ngIf=\"isBulkItemsSupported\" class=\"flex-row gap-10 align-start-start mainTable\">\n <div>\n <button mat-flat-button color=\"primary\" type=\"button\" (click)=\"addBulkItems()\" [disabled]=\"shouldDisableBulkAdd()\" id=\"editable-bulk-add-btn\">\n <mat-icon>add_box</mat-icon>\n {{ 'addAll' | translate }}\n </button>\n </div>\n <div>\n <button mat-flat-button color=\"warn\" type=\"button\" [disabled]=\"!hasDataToClear()\" (click)=\"clearBulkItems()\" id=\"editable-bulk-clear-btn\">\n <mat-icon>delete</mat-icon>\n {{ 'clearAll' | translate }}\n </button>\n </div>\n </div>\n</div>\n","import {Component, OnInit} from '@angular/core';\nimport {ActivatedRoute} from \"@angular/router\";\nimport {NgIf} from \"@angular/common\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {ButtonActionSettings, EMPTY_PAGE_INFO, FieldInfo, FilterRequest, PageInfo, TableColumn} from \"../../base-model\";\nimport {Filter} from \"../../base-model\";\nimport {EditableBaseTableComponent} from \"../editable-base-table/editable-base-table.component\";\n\n@Component({\n selector: 'app-shared-list',\n standalone: true,\n imports: [\n BaseTableComponent,\n NgIf,\n EditableBaseTableComponent\n ],\n templateUrl: './shared-list.component.html',\n styleUrls:[ './shared-list.component.css']\n})\nexport class SharedListComponent implements OnInit {\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n columnsDefinition: TableColumn<any>[] = [];\n fields: FieldInfo[] = [];\n filters: Filter[] = [];\n readyToLoad: boolean = false;\n isPending: boolean = false;\n listAction: ButtonActionSettings[] = [];\n editableTable : boolean = false;\n filterRequest: FilterRequest = new FilterRequest();\n constructor(private activatedRoute: ActivatedRoute) { }\n\n ngOnInit(): void {\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.columnsDefinition = data[\"columnsDefinition\"];\n this.filters = data[\"filters\"] || [];\n\n this.isPending = 'pending' === data[\"mode\"];\n this.listAction = data['actions'];\n this.editableTable = data['editableTable'] || false;\n this.fields = data['fields'];\n\n this.filterRequest = new FilterRequest();\n this.filterRequest.columns = this.fields?.filter(c => c.type !== 'button').map(c => c.property) || [];\n this.filterRequest.filters = this.filters;\n\n this.readyToLoad = true;\n\n });\n }\n\n\n}\n","<ng-container *ngIf=\"readyToLoad\">\n @if (editableTable) {\n <app-editable-base-table [filterRequest]=\"filterRequest\" [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [isPending]=\"isPending\"\n ></app-editable-base-table>\n\n } @else {\n\n <app-base-table [filters]=\"filters\" [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [listAction]=\"listAction\"\n [isPending]=\"isPending\"\n ></app-base-table>\n\n }\n</ng-container>\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FieldInfo, Filter, FilterRequest, NEW, PageInfo, SAVE_AND_COMPLETE, SnackMessage} from \"../../base-model\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services\";\nimport {FormGroup} from \"@angular/forms\";\nimport {Location, NgIf} from \"@angular/common\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DoActionRequest, SAVE} from \"../../base-model/do-action-request\";\nimport {ActionCommentComponent} from \"../action-comment/action-comment.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {BaseUtils, getNegativeWfActionKey, getPositiveWfActionKey, getWfActionId} from \"../../utils/base-utils\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {AuditLogComponent} from \"../audit-log-list/audit-log.component\";\nimport {Directionality} from \"@angular/cdk/bidi\";\n\n@Component({\n selector: 'app-base-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatButtonModule,\n TranslateModule,\n NgIf,\n MatIconModule,\n MatButton,\n AuditLogComponent\n ],\n templateUrl: './base-form.component.html',\n styleUrl: './base-form.component.scss'\n})\nexport class BaseFormComponent extends BaseUtils implements OnInit, OnChanges {\n\n @Input()\n override pageInfo!: PageInfo;\n\n @Input()// @ts-ignore\n fields: FieldInfo[] = [];\n\n @Input()// @ts-ignore\n errors: FieldMessage[] = [];\n\n @Input()\n editable: boolean = false;\n\n @Input()\n itemId: number;\n\n @Output()\n actionResultEmitter: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n formUpdated: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n @Output()\n itemLoaded: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n extraAction: EventEmitter<any> = new EventEmitter<any>();\n\n item : any = {};\n isLoaded : boolean = false;\n\n @Output()\n hyperTextEvent: EventEmitter<boolean> = new EventEmitter();\n\n currentDirection: 'ltr' | 'rtl';\n isSaveDisabled: boolean = true;\n isRejectDisabled: boolean = true;\n\n @Input()\n hideBackButton: boolean = true;\n protected readonly SAVE = SAVE;\n private isPending: boolean;\n\n constructor(public dialog: MatDialog,\n private activatedRoute: ActivatedRoute,\n private router:Router,\n private directionality: Directionality,\n private location:Location,\n @Inject('securityManager') private securityManager: any,\n public backendService: BackendService) {\n super();\n }\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n // console.log('editable', this.editable)\n this.securityManager.loadPermissions().subscribe(x => {\n console.log(\"before edit\", this.editable);\n this.loadItem();\n console.log(\"after edit\", this.editable);\n });\n }\n\n ngOnChanges({item, errors, fields}: SimpleChanges): void {\n }\n\n isValid() {\n return this.backendService.parentForm?.valid;\n }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n private loadItem() {\n this.editable = false;\n\n const modeEncrypted = this.activatedRoute.snapshot.queryParams['mode'];\n this.isPending = !!modeEncrypted && this.backendService.decrypt(modeEncrypted) === 'pending';\n\n if (this.activatedRoute.snapshot.queryParams['token'] && this.activatedRoute.snapshot.queryParams['mode']) {\n this.itemId = this.backendService.decrypt(this.activatedRoute.snapshot.queryParams['token']);\n } else {\n // console.log(' ****** ****** ****** ****** error in url ')\n }\n if (this.itemId > 0) {\n const filterRequest = new FilterRequest;\n filterRequest.columns = this.fields.filter(c => c.type !== 'spacer').map(c => c.property);\n filterRequest.pendingPage = this.isPending;\n\n filterRequest.filters = [];\n filterRequest.filters.push(new Filter({\n key: 0,\n fieldType: 'Long',\n fieldName: 'id',\n valueObject: this.itemId,\n filterType: 'FILED_FILTER',\n operator: 'EQUALS'\n }));\n ///audit-log\n this.backendService.getItemAuditLog(filterRequest, this.pageInfo!.apiUri).subscribe(resp => {\n // console.log('resp', resp);\n });\n this.backendService.getItemsByFilter(filterRequest, this.pageInfo!.apiUri).subscribe(resp => {\n if (resp?.valid && resp.body?.length >= 0) {\n this.item = resp.body[0];\n this.editable = (!this.pageInfo.draftSupported || !this.isPending) && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT')\n && (!this.pageInfo.draftSupported ||this.item['stateType'] === 'COMPLETED' );\n this.itemLoaded.emit(this.item);\n this.isLoaded = true;\n }\n });\n } else {\n this.editable = this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT');\n this.item = {};\n this.itemLoaded.emit(this.item);\n this.isLoaded = true;\n }\n\n }\n\n buildDoActionSubject(): any {\n const newVar = this.editable ? Object.assign(this.item, this.backendService.parentForm.value) : this.item;\n if (this.itemId <= 0 && this.editable ) {\n //TODO this is like a hack and must be handled from backend\n newVar['stateType'] = 'NEW';\n }\n this.fields.forEach(field => {\n if (field.flattenBySubAttribute){\n newVar[field.property] = newVar[field.property][field.flattenBySubAttribute]\n }\n })\n if (!this.pageInfo.draftSupported){\n newVar['status'] = true;\n }\n return newVar;\n }\n\n\n doSaveApproveAction() {\n let actionId = getWfActionId(this.item.stateType);\n if (this.itemId <= 0 && this.editable ) {\n actionId = NEW\n }\n if (!this.pageInfo.draftSupported) {\n actionId = SAVE_AND_COMPLETE\n }\n if (this.editable && this.backendService.parentForm.valid !== true) {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_INPUT_FORM', true, 'error'));\n return;\n }\n const request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = this.buildDoActionSubject();\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'save', isTermination: false},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n console.log('step',actionId);\n this.actionResultEmitter.emit({ valid: resp.valid, actionId: actionId });\n if (resp.valid ) {\n let message = 'approve_successfully';\n switch (actionId) {\n case 1:\n message = 'saved_successfully';\n break;\n case 2:\n message = 'updated_successfully';\n break;\n default:\n message = 'approve_successfully';\n }\n this.backendService.topPanelMessage$.next(new SnackMessage(message, true, 'success'));\n if(!this.pageInfo.stayOnPage){\n this.backToParent();\n }\n }\n else{\n request.subject['stateType'] = null;\n if (resp.message[0].errorMessage.toLowerCase().includes('duplic'))\n this.backendService.topPanelMessage$.next(new SnackMessage(this.pageInfo.labelsSection + '.' + resp.message[0].errorCode, true, 'error'));\n }\n });\n }\n });\n }\n\n backToParent() {\n const idIdx = this.router.url.lastIndexOf('/');\n this.router.navigateByUrl(this.router.url.substring(0, idIdx));\n }\n\n\n getTitle() {\n return `${this.pageInfo.labelsSection}.${this.pageInfo.id}` ;\n }\n\n updateForm($event: FormGroup) {\n this.backendService.parentForm = $event;\n this.formUpdated.emit($event);\n }\n\n doCancelRejectAction() {\n if (!this.editable){\n let actionId = 3;\n // console.log('actionId',actionId);\n const request = new DoActionRequest();\n request.actionId = actionId;\n request.subject = this.buildDoActionSubject();\n\n const dialogRef = this.dialog.open(ActionCommentComponent, {\n data: {label: 'reject', acceptActionLabel: 'accept', rejectActionLabel: 'return'},\n width: '600px',\n height: 'auto',\n direction: this.currentDirection\n });\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n request.comment = result.comment;\n this.backendService.doActionWithAttachments(request, [], this.pageInfo!).subscribe(resp => {\n this.actionResultEmitter.emit({ valid: resp.valid, actionId: actionId });\n if (resp.valid) {\n this.backendService.topPanelMessage$.next(new SnackMessage('successful_reject_message', true, 'success'));\n if(!this.pageInfo.stayOnPage){\n this.backToParent();\n }\n }\n });\n }\n });\n }\n else {\n this.location.back()\n }\n }\n\n hasWfPermission() {\n return (this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT')\n || this.securityManager.hasPagePermission(this.pageInfo.id, 'COMPLETE')\n || this.securityManager.hasPagePermission(this.pageInfo.id, 'TERMINATE'))\n }\n\n protected readonly getPositiveWfActionKey = getPositiveWfActionKey;\n protected readonly getNegativeWfActionKey = getNegativeWfActionKey;\n\n hasWfPositivePermission() {\n return (!this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'COMPLETE')) ||\n (this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT'))\n }\n\n hasWfNegativePermission() {\n return (!this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'TERMINATE')) ||\n (this.editable && this.securityManager.hasPagePermission(this.pageInfo.id, 'EDIT'))\n }\n\n doExtraAction() {\n this.extraAction.emit()\n }\n disabledSaveButton(element) {\n return (!this.isPending && element.stateType == 'PENDING') && this.pageInfo.draftSupported ;\n }\n\n}\n","<div class=\"page-container\">\n\n <div class=\"row full-width mt-2vh\">\n <div class=\"column full-width\">\n <app-title-bar\n [pageTitle]=\"getTitle()\"\n [newAction]=\"false\"\n [hideBackButton]=\"hideBackButton\">\n </app-title-bar>\n </div>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editable\"\n [errors]=\"errors\"\n [item]=\"item\"\n (formUpdated)=\"updateForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-49\">\n <div class=\"row row-center-start\">\n <button *ngIf=\"hasWfPositivePermission()\" color=\"primary\" mat-flat-button\n (click)=\"doSaveApproveAction()\"\n [disabled]=\"disabledSaveButton(item)\"\n class=\"action-button\"\n id=\"base-form-positive-btn\">\n {{ getPositiveWfActionKey(item?.stateType) | translate }}\n </button>\n <button *ngIf=\"hasWfNegativePermission()\" color=\"second\" mat-raised-button\n (click)=\"doCancelRejectAction()\"\n [disabled]=\"disabledSaveButton(item)\"\n class=\"action-button\"\n id=\"base-form-negative-btn\">\n {{ getNegativeWfActionKey(item?.stateType) | translate }}\n </button>\n <button *ngIf=\"pageInfo.hideExtractButton === false && itemId > 0 && editable\" color=\"primary\" mat-raised-button\n (click)=\"doExtraAction()\"\n class=\"action-button\"\n id=\"base-form-extra-btn\">\n {{ pageInfo.labelsSection + \".\" + \"EXTRA_BUTTON_NAME\" | translate }}\n </button>\n </div>\n </div>\n <div class=\"column flex-49\"></div>\n </div>\n\n\n <ng-container *ngIf=\"!pageInfo.hideAuditLog\">\n <div class=\"row main-form-canvas mt-4vh pb-5vh\">\n <div class=\"column flex-95\">\n <app-audit-log [pageInfo]=\"pageInfo\" [fields]=\"fields\"></app-audit-log>\n </div>\n </div>\n </ng-container>\n\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatButton} from \"@angular/material/button\";\nimport {ButtonActionSettings, FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseFormComponent} from \"../base-form/base-form.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {NgForOf, NgIf, NgClass} from \"@angular/common\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {FormGroup} from \"@angular/forms\";\nimport {\n MatExpansionPanel,\n MatExpansionPanelHeader,\n MatExpansionPanelDescription,\n MatExpansionPanelTitle\n} from \"@angular/material/expansion\";\nimport {MatMenu, MatMenuTrigger, MatMenuItem} from \"@angular/material/menu\";\n\n@Component({\n selector: 'lib-section-form-canvas',\n standalone: true,\n imports: [\n MatIcon,\n MatButton,\n BaseFormComponent,\n BaseFormCanvasComponent,\n NgIf,\n NgClass,\n TranslateModule,\n MatExpansionPanel,\n MatExpansionPanelTitle,\n MatExpansionPanelDescription,\n MatExpansionPanelHeader,\n NgForOf,\n MatMenu,\n MatMenuTrigger,\n MatMenuItem\n ],\n templateUrl: './section-form-canvas.component.html',\n styleUrl: './section-form-canvas.component.scss'\n})\nexport class SectionFormCanvasComponent{\n @Input() pageInfo: PageInfo;\n @Input() fields: FieldInfo[];\n @Input() itemId: number;\n @Input() editable: boolean;\n @Input() attachmentsAlwaysEditable?: boolean;\n @Input() hideBackButton: boolean;\n @Input() item: any;\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTranslateTitle: boolean;\n @Input() isTranslateSubtitle: boolean = true;\n @Input() key: number;\n @Input() hideToggle: boolean = true;\n @Input() isExpanded: boolean = true;\n @Input() alwaysOpen: boolean = true;\n @Output() attachmentEmitter: EventEmitter<any> = new EventEmitter<any>();\n @Input() expansionHeaderTabIndex: number = -1;\n @Output() actionEdit: EventEmitter<any> = new EventEmitter();\n @Output() formEdit: EventEmitter<FormGroup> = new EventEmitter();\n @Input() buttons: ButtonActionSettings[] = [];\n @Input() itemStatus: string;\n @Output() buttonClicked = new EventEmitter<any>();\n\n formUpdated($event) {\n this.formEdit.emit($event);\n\n }\n\n toggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n onPanelHeaderChildKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n }\n\n onButtonClick(btn: ButtonActionSettings, sectionKey: number): void {\n this.buttonClicked.emit({...btn , sectionKey: sectionKey});\n }\n\n getDownloadButton(): ButtonActionSettings | undefined {\n return this.buttons.find(btn => btn.id === 'download');\n }\n\n getMenuButtons(): ButtonActionSettings[] {\n return this.buttons.filter(btn => btn.id !== 'download');\n }\n\n attachmentHandler($event: any) {\n this.attachmentEmitter.emit($event);\n }\n}\n","<mat-expansion-panel class=\"location-card\"\n #panel=\"matExpansionPanel\"\n [expanded]=\"isExpanded\"\n [hideToggle]=\"hideToggle\"\n (opened)=\"alwaysOpen ? panel.open() : null\"\n (closed)=\"alwaysOpen ? panel.open() : null\">\n <mat-expansion-panel-header\n class=\"card-header\"\n (click)=\"toggleExpand()\"\n [tabIndex]=\"expansionHeaderTabIndex\">\n <mat-panel-title>\n <div class=\"title-container\">\n <h3 class=\"card-title\" *ngIf=\"isTranslateTitle\">\n {{ pageInfo.labelsSection + '.' + title | translate }}\n </h3>\n <h3 class=\"card-title\" *ngIf=\"!isTranslateTitle\">{{ title }}</h3>\n <p class=\"card-subtitle\" *ngIf=\"subtitle\">\n <span *ngIf=\"isTranslateSubtitle\">{{ pageInfo.labelsSection + '.' + subtitle | translate }}</span>\n <span *ngIf=\"!isTranslateSubtitle\">{{ subtitle }}</span>\n </p>\n <button\n mat-button\n *ngIf=\"itemStatus\"\n type=\"button\"\n class=\"stateType\"\n [ngClass]=\"itemStatus\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\">\n {{ pageInfo.labelsSection + '.' + itemStatus | translate }}\n </button>\n </div>\n </mat-panel-title>\n\n <mat-panel-description class=\"panel-description\" *ngIf=\"buttons && buttons.length > 0\">\n <div class=\"row flex-auto buttons-wrapper desktop-buttons\" [class.show-on-mobile]=\"!getDownloadButton()\">\n <button\n mat-flat-button\n *ngFor=\"let btn of buttons\"\n type=\"button\"\n [color]=\"btn.color || 'primary'\"\n (click)=\"onButtonClick(btn , key); $event.stopPropagation()\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-none-background-primary action\"\n [attr.id]=\"btn.id || ('section-btn-' + (btn.action || btn.label || btn.key))\"\n >\n <div class=\"button-text\">\n <mat-icon *ngIf=\"btn.icon\">{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </div>\n </button>\n </div>\n\n <div class=\"mobile-buttons\" *ngIf=\"getDownloadButton()\">\n <button\n mat-flat-button\n type=\"button\"\n color=\"primary\"\n (click)=\"onButtonClick(getDownloadButton()!, key); $event.stopPropagation()\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-download-mobile\"\n [attr.id]=\"getDownloadButton()?.id\"\n [attr.aria-label]=\"'BASE_TABLE.downloadAction' | translate\"\n >\n <mat-icon aria-hidden=\"true\">{{ getDownloadButton()?.icon }}</mat-icon>\n </button>\n <button\n *ngIf=\"getMenuButtons().length > 0\"\n mat-stroked-button\n type=\"button\"\n [matMenuTriggerFor]=\"menu\"\n (keydown)=\"onPanelHeaderChildKeydown($event)\"\n class=\"btn-menu-mobile\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let btn of getMenuButtons()\"\n (click)=\"onButtonClick(btn, key); $event.stopPropagation()\"\n [attr.id]=\"btn.id\"\n >\n <mat-icon>{{ btn.icon }}</mat-icon>\n <span>{{ btn.label | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"panel-body\">\n <hr class=\"divider\"/>\n <ng-content></ng-content>\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editable\"\n [attachmentsAlwaysEditable]=\"attachmentsAlwaysEditable\"\n [item]=\"item\"\n (attachmentEmitter)=\"attachmentHandler($event)\"\n (formUpdated)=\"formUpdated($event)\"\n ></app-base-form-canvas>\n </div>\n</mat-expansion-panel>\n","import {Component, HostListener, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle} from \"@angular/material/dialog\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {MatButton} from \"@angular/material/button\";\nimport {FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {MatDivider} from \"@angular/material/divider\";\n\n@Component({\n selector: 'app-audit-log-details-dialog',\n standalone: true,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormsModule,\n TranslateModule,\n MatButton,\n BaseFormCanvasComponent,\n MatDivider\n ],\n templateUrl: './audit-log-details-dialog.component.html',\n styleUrl: './audit-log-details-dialog.component.css'\n})\nexport class AuditLogDetailsDialogComponent implements OnInit {\n pageInfo: PageInfo;\n fields: FieldInfo[] = [];\n\n actionLabel : string =''\n isTermination : boolean=false;\n comment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n warningMsg = false;\n item: any = {};\n constructor(public dialogRef: MatDialogRef<AuditLogDetailsDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.pageInfo = this.data.pageInfo;\n this.fields = this.data.fields;\n\n this.fields = this.data.fields.map((f: any) => ({ ...f }));\n\n const showHiddenFields: string[] = this.data.showHiddenFields || [];\n this.fields.forEach(field => {\n if (showHiddenFields.includes(field.property)) {\n field.visible = true;\n }\n });\n this.item = this.data.item;\n this.comment = this.data.comment;\n this.warningMsg = this.data.warningMsg || false;\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n\n getTitle() {\n return `${this.pageInfo.labelsSection}.${this.pageInfo.id}`;\n }\n}\n","<mat-dialog-content class=\"mat-typography overflow-hidden\">\n <div style=\"'padding': '10px 30px 10px 0'\">\n <h2 mat-dialog-title>{{ getTitle()| translate }}</h2>\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"false\"\n [item]=\"item\"\n ></app-base-form-canvas>\n\n <p>\n <span class=\"invoice-label\">{{ 'audit-log.reason_dialog' | translate }} :</span>\n <span class=\"invoice-label-text\">{{ comment }}</span>\n </p>\n <mat-divider style=\"width: 97%\"></mat-divider>\n <br>\n <button mat-stroked-button color='accent' style=\"margin: 5px\"\n (click)=\"cancel()\" id=\"acceptActionLabel\">\n {{ 'audit-log.close' | translate }}\n </button>\n <br>\n </div>\n</mat-dialog-content>\n","import {AfterViewInit, Component, ElementRef, HostListener, Inject, OnInit} from '@angular/core';\nimport {\n MAT_DIALOG_DATA, MatDialogActions, MatDialogContent,\n MatDialogRef, MatDialogTitle,\n} from \"@angular/material/dialog\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {FieldInfo, PageInfo, ReportRequest, TableColumn} from \"../../base-model\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatButton, MatIconButton} from \"@angular/material/button\";\nimport {BackendService} from \"../../services\";\nimport {MatIcon} from \"@angular/material/icon\";\n\n@Component({\n selector: 'app-audit-log-details-dialog',\n standalone: true,\n imports: [\n FormsModule,\n TranslateModule,\n BaseTableComponent,\n MatDialogContent,\n MatDialogTitle,\n MatIconButton,\n MatIcon\n ],\n templateUrl: './report-details-dialog.component.html',\n styleUrl: './report-details-dialog.component.css'\n})\nexport class ReportDetailsDialogComponent implements OnInit , AfterViewInit{\n dialogDirection: 'ltr' | 'rtl' = 'ltr';\n\n pageInfo: PageInfo;\n fields: FieldInfo[] = [];\n\n isTermination : boolean=false;\n comment: string = '';\n external: boolean = false;\n signingRequired: boolean = false;\n tokenReference: string = \"\";\n warningMsg = false;\n item: any = {};\n reportRequest: ReportRequest;\n columns: TableColumn<any>[];\n constructor(public dialogRef: MatDialogRef<ReportDetailsDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private translateService: TranslateService,\n public backendService:BackendService,\n private elRef: ElementRef) {\n dialogRef.disableClose = true;\n }\n @HostListener('window:keyup.esc') onKeyUp() {\n this.dialogRef.close();\n }\n ngOnInit(): void {\n this.pageInfo = this.data.pageInfo;\n this.pageInfo.hideTitle = true;\n this.item = this.data.item;\n this.pageInfo.hideExtractButton = false;\n this.columns = this.data.columns;\n this.reportRequest = this.data.request;\n this.warningMsg = this.data.warningMsg || false;\n }\n\n ngAfterViewInit(): void {\n const container = this.elRef.nativeElement.closest('mat-dialog-container');\n if (container && container.getAttribute('dir')) {\n this.dialogDirection = container.getAttribute('dir') as 'ltr' | 'rtl';\n }\n }\n\n cancel() {\n this.reportRequest.filterRequest.filters = [];\n this.backendService.isEmptyItems = false;\n this.dialogRef.close();\n }\n\n @HostListener('document:click', ['$event'])\n onBackdropClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (target.classList.contains('cdk-overlay-backdrop')) {\n this.reportRequest.filterRequest.filters = [];\n this.backendService.isEmptyItems = false;\n this.dialogRef.close();\n }\n }\n\n getTitle() {\n if (this.item?.isec_value_ar) {\n const isecLabel = this.translateService.instant('ISEC');\n return `<strong>${isecLabel} ${this.item.isec_value_ar}</strong>`;\n }\n\n const sectorLabel = this.translateService.instant('SECTOR');\n const periodLabel = this.translateService.instant('FOR_PERIOD');\n const directorateLabel = this.translateService.instant('DIRECTORATE');\n\n const sectorText = this.item.sector ? `${sectorLabel} ${this.item.sector}` : '';\n const periodText = this.item.period ? ` ${periodLabel} ${this.item.period}` : '';\n const yearText = this.item.year ? ` - ${this.item.year}` : '';\n const directorateLine = this.item.directorate ? `<br><strong>${directorateLabel} - ${this.item.directorate}</strong>` : '';\n\n const mainLine = (sectorText || periodText || yearText)\n ? `<strong>${[sectorText, periodText, yearText].filter(Boolean).join('')}</strong>`\n : '';\n\n return `${mainLine}${directorateLine}`;\n }\n\n\n\n}\n","<mat-dialog-content style=\"max-height: 70vh; overflow: auto; position: relative;\">\n <button\n mat-icon-button\n type=\"button\"\n class=\"close-button\"\n (click)=\"cancel()\"\n [attr.dir]=\"dialogDirection\"\n id=\"report-details-close-btn\"\n [attr.aria-label]=\"'BASE_TABLE.closeDialog' | translate\">\n <mat-icon aria-hidden=\"true\">close</mat-icon>\n </button>\n\n <h1 mat-dialog-title [innerHTML]=\"getTitle()\"></h1>\n\n <app-base-table\n [pageInfo]=\"pageInfo\"\n [columns]=\"columns\"\n id=\"junior\"\n [enforceRefresh]=\"true\"\n [reportRequest]=\"reportRequest\">\n </app-base-table>\n</mat-dialog-content>\n\n","import {ChangeDetectionStrategy, Component, EventEmitter, Injector, Input, OnInit, Output} from '@angular/core';\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {EMPTY_PAGE_INFO, PageInfo} from \"../../base-model/page-info\";\nimport {TableColumn} from \"../../base-model/table-column.interface\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FormBuilder, FormGroup} from \"@angular/forms\";\nimport {formatDate, NgForOf, NgIf} from \"@angular/common\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DRILL_DOWN_ACTION, JUNIOR_DOWN_ACTION, SnackMessage, TablePageUserAction} from \"../../base-model\";\nimport {} from \"../audit-log-details-dialog/audit-log-details-dialog.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ReportDetailsDialogComponent} from \"../report-details-dialog/report-details-dialog.component\";\nimport { cloneDeep } from 'lodash';\nimport {MatTooltip} from \"@angular/material/tooltip\";\nimport {Directionality} from \"@angular/cdk/bidi\";\n\n\nconst NON_REPORT_COLUMNS = ['listAction', 'button', 'checkbox'];\n\n@Component({\n selector: 'app-report-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatMenu,\n MatMenuItem,\n NgForOf,\n MatMenuTrigger,\n MatButtonModule,\n TranslateModule,\n BaseTableComponent,\n NgIf,\n MatIconModule,\n MatButton,\n MatTooltip\n ],\n templateUrl: './report-form.component.html',\n styleUrl: './report-form.component.scss'\n})\nexport class ReportFormComponent implements OnInit {\n @Input()\n showDetails : any = [];\n\n @Input()\n showExtractButton: boolean = true;\n\n @Input()\n columns: TableColumn<any>[] =[];\n\n @Input() actionRequestCallback!: (actionRequest: TablePageUserAction) => TablePageUserAction;\n @Input() enrichDrillDownReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichHyperLinkReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichJuniorReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n activeLevel: number = 1;\n\n private filterRequest: FilterRequest;\n x: any;\n isEditable: boolean = true;\n fields: FieldInfo[] = [];\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownPageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownColumns: TableColumn<any>[] = [];\n hideDrillDownButton: false;\n\n juniorPageInfo: PageInfo = EMPTY_PAGE_INFO;\n juniorColumns: TableColumn<any>[] = [];\n\n columnsDefinition: TableColumn<any>[] = [];\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n searchStr: string = '';\n\n errors: FieldMessage[] = [];\n\n reloadData: boolean = false;\n backButtonEnabled: boolean = true;\n\n\n reportRequest: ReportRequest = new ReportRequest({});\n childReportRequest: ReportRequest = new ReportRequest({});\n juniorReportRequest: ReportRequest = new ReportRequest({});\n public reportForm: FormGroup;\n readyToSearch = false;\n private pageSize: any;\n private dialogReportRequest: any;\n currentDirection: 'ltr' | 'rtl';\n\n constructor(private translateService: TranslateService,\n public backendService: BackendService,\n private activatedRoute: ActivatedRoute,\n private injector: Injector,\n private router: Router,\n private route: ActivatedRoute,\n private directionality: Directionality,\n public dialog: MatDialog,\n private fb: FormBuilder) {\n }\n\n disableExportAction : boolean = false;\n\n ngOnInit(): void {\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.pageSize = this.pageInfo.pageSize ?? 10;\n this.filterRequest = new FilterRequest(this.pageSize);\n data['pageInfo'].lazyLoadData = true;\n this.drillDownPageInfo = data['drillDownPageInfo'];\n this.drillDownColumns = data['drillDownColumns']?.filter(c => c.property !== 'selectItem');\n this.hideDrillDownButton = data['hideDrillDownButton'] ?? false;\n this.juniorPageInfo = data['juniorPageInfo'];\n this.juniorColumns = data['juniorColumns'];\n this.columnsDefinition = data['columnsDefinition'].filter(c => (this.drillDownPageInfo && this.drillDownColumns || (!NON_REPORT_COLUMNS.includes(c.type))));\n this.fields = data['fields'];\n if (data['enrichDrillDownReportRequest']) {\n this.enrichDrillDownReportRequest = data['enrichDrillDownReportRequest'](this.injector);\n }\n if (data['enrichJuniorReportRequest']) {\n this.enrichJuniorReportRequest = data['enrichJuniorReportRequest'](this.injector);\n }\n\n if (data['enrichHyperLinkReportRequest']) {\n this.enrichHyperLinkReportRequest = data['enrichHyperLinkReportRequest'](this.injector);\n }\n });\n this.route.queryParamMap.subscribe(params => {\n const isComparisonReport = params.get('comparisonReport') === 'true';\n\n if (isComparisonReport) {\n const comparisonStr = sessionStorage.getItem('comparisonReportPageInfo');\n\n if (comparisonStr) {\n const comparisonData = JSON.parse(comparisonStr);\n\n this.pageInfo.lazyLoadData = comparisonData.lazyLoadData ?? false;\n this.activeLevel = comparisonData.activeLevel ?? 2;\n this.isEditable = false;\n this.backButtonEnabled = false;\n this.drillDownPageInfo = comparisonData.drillDownPageInfo;\n this.drillDownColumns = comparisonData.drillDownColumns;\n this.reportForm = this.fb.group({\n directorate: [[]],\n fromDate: [''],\n toDate: [''],\n sector: [''],\n });\n\n this.reportForm.patchValue(comparisonData.form)\n this.fields = this.fields.filter(c => c.type !== 'checkbox');\n\n const reportRequest = comparisonData.reportRequest;\n\n this.childReportRequest = this.backendService.buildReportRequest(\n this.drillDownColumns,\n `${this.drillDownPageInfo.labelsSection}.${this.drillDownPageInfo.id}`,\n reportRequest,\n '',\n this.drillDownPageInfo,\n 'LANDSCAPE'\n );\n\n }\n }\n });\n }\n\n\n // ngOnChanges({item, errors, fields}: SimpleChanges): void {\n // // errors?.currentValue?.forEach((msg: FieldMessage) => {\n // // this.backendService.parentForm.get(msg.fieldName)?.setErrors({serverError: msg.message});\n // // });\n // // if (fields?.currentValue && !fields.isFirstChange()){\n // // this.buildForm();\n // // }\n // // this.buildForm();\n // }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n\n doAction(type: string) {\n if (this.backendService.parentForm.valid) {\n this.reloadData = !this.reloadData;\n const filterRequest: FilterRequest = new FilterRequest(this.pageSize);\n filterRequest.filters = [];\n let paramsString: string[] = [];\n this.fields.filter(x => x.type !== 'spacer').forEach(f => {\n if (this.getParamValue(f) != null && this.getParamValue(f).toString().trim() !== '')\n {\n if (f.type === 'multi-select' || f.type === 'lookup') {\n // do not filter if this field as cascading for another one and the other one got selected values\n const childFieldIdx = this.fields.findIndex(field => field.cascadedBy === f.property);\n if (childFieldIdx > -1 && this.backendService.parentForm.get(this.fields[childFieldIdx].property)?.value?.length > 0) {\n return;\n }\n const idz: number[] = [];\n const param: string[] = [];\n if (this.backendService.parentForm.get(f.property)?.value && Array.isArray(this.backendService.parentForm.get(f.property)?.value)\n && this.backendService.parentForm.get(f.property)?.value.length > 0) {\n this.backendService.parentForm.get(f.property)?.value.forEach((a: {\n channelId: number;\n englishName: string;\n id: number;\n }) => {\n if (f.flattenBySubAttribute) {\n idz.push(a[f.flattenBySubAttribute]);\n param.push(a[f.flattenBySubAttribute]);\n } else if (this.fields.find(s => s.property === 'terminalId')) {\n idz.push(a.channelId);\n param.push(a.englishName);\n } else {\n idz.push(a.id);\n param.push(a.englishName);\n }\n })\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: idz\n }));\n paramsString.push(this.translateService.instant(f.label) + ' : ' + param.join(','));\n } else if (this.backendService.parentForm.get(f.property)?.value && f.flattenBySubAttribute) {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)[f.flattenBySubAttribute]\n }));\n }\n } else {\n if (this.backendService.parentForm.get(f.property)?.value !== null &&\n this.backendService.parentForm.get(f.property)?.value !== undefined &&\n this.backendService.parentForm.get(f.property)?.value !== \"\") {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)\n }));\n }\n paramsString.push(this.translateService.instant(f.label) + ' : ' + this.getParamValueLabel(f));\n }\n }})\n const reportRequest = this.backendService.buildReportRequest(this.columnsDefinition, this.pageInfo.labelsSection + '.' + this.pageInfo.id,\n filterRequest, type, this.pageInfo, 'LANDSCAPE');\n reportRequest.searchStr = paramsString.join(' , ');\n this.reportRequest = reportRequest;\n // this.activeLevel = 1;\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_REPORT_FORM', true, 'error'));\n }\n }\n\n private getParamValue(f: FieldInfo) {\n if (f.type === 'date' && this.backendService.parentForm.get(f.property)?.value) {\n return formatDate(this.backendService.parentForm.get(f.property)?.value, 'yyyy-MM-dd', 'en_US')\n }else if (f.type === 'checkbox') {\n return !!this.backendService.parentForm.get(f.property)?.value;\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n private getParamValueLabel(f: FieldInfo) {\n if (f.type === 'checkbox') {\n return this.backendService.parentForm.get(f.property)?.value ? this.translateService.instant('yes') : this.translateService.instant('no');\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n getTitle() {\n const pageInfoMap = {\n 1: this.pageInfo,\n 2: this.drillDownPageInfo,\n 3: this.juniorPageInfo\n };\n\n const currentInfo = pageInfoMap[this.activeLevel] || this.pageInfo;\n return `${currentInfo.labelsSection}.${currentInfo.id}`;\n }\n\n updateForm($event: FormGroup) {\n this.reportForm = $event;\n this.backendService.parentForm = $event;\n\n this.setupDependentFieldWatchers();\n\n this.backendService.parentForm.valueChanges.subscribe(x => {\n this.readyToSearch = this.backendService.parentForm.valid;\n }\n\n );\n }\n\n private setupDependentFieldWatchers() {\n this.fields\n .filter(field => field.lookupFilterList && field.lookupFilterList.length > 0)\n .forEach(field => {\n const dependentFields = field.lookupFilterList.map(f => f.fieldName);\n\n dependentFields.forEach(dependentFieldName => {\n const dependentControl = this.reportForm.get(dependentFieldName);\n if (dependentControl) {\n dependentControl.valueChanges.subscribe(() => {\n const targetControl = this.reportForm.get(field.property);\n if (targetControl) {\n targetControl.setValue([]);\n }\n });\n }\n });\n });\n }\n\n isValidForm() {\n return this.readyToSearch ;\n\n }\n\n\n\n emitUserAction($event: TablePageUserAction) {\n $event.pageInfo = this.pageInfo;\n this.doADrillDownAction($event);\n }\n\n emitHyperLinkAction($event: TablePageUserAction) {\n if (!this.shouldProcessEventItem($event.item)) return;\n\n const item = $event.item;\n this.prepareDialogReportRequest(item);\n const reportRequest = this.buildDialogReportRequest();\n reportRequest.filterRequest.pageIndex = 0\n const dialogRef = this.dialog.open(ReportDetailsDialogComponent, {\n data: {\n pageInfo: this.juniorPageInfo,\n request: reportRequest,\n columns: this.juniorColumns,\n item,\n },\n height: '50vw',\n maxWidth: '120vw',\n direction: this.currentDirection,\n disableClose: false,\n });\n\n dialogRef.afterOpened().subscribe(() => this.doHyperLinkAction($event));\n dialogRef.afterClosed().subscribe(() => {});\n }\n\n private prepareDialogReportRequest(item: any): void {\n this.dialogReportRequest = cloneDeep(this.reportRequest);\n this.dialogReportRequest.filterRequest = { filters: [] };\n\n this.addStandardFilters(item);\n this.addOrReplaceFilter('isec1', 'iSec', item['isec_value']);\n this.addFilterType();\n }\n\n private addStandardFilters(item: any): void {\n const standardFilters = [\n { key: 'period', value: item['period'] },\n { key: 'year', value: item['year'] },\n { key: 'sector', value: item['sectorCode'] },\n { key: 'directorate', value: item['directorateCode'] },\n { key: 'subTaxRate', value: item['tax_rate_code'] },\n ];\n\n standardFilters.forEach(({ key, value }) =>\n this.dialogReportRequest.filterRequest.filters.push(\n this.createFilter(key, key, value)\n )\n );\n }\n\n private addFilterType(): void {\n const isTax = this.dialogReportRequest.actionKey?.toLowerCase().includes('tax');\n const filterType = isTax ? 'TAX' : 'VALUE';\n\n this.dialogReportRequest.filterRequest.filters.push(\n this.createFilter('filterType', 'filterType', filterType)\n );\n }\n\n private buildDialogReportRequest(): any {\n return this.backendService.buildReportRequest(\n this.juniorColumns,\n `${this.juniorPageInfo.labelsSection}.${this.juniorPageInfo.id}`,\n { ...this.dialogReportRequest.filterRequest },\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n }\n\n private createFilter(key: string, fieldName: string, value: any): Filter {\n return new Filter({\n key,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value,\n });\n }\n\n private addOrReplaceFilter(id: string, fieldName: string, value: any): void {\n const filter = new Filter({\n id,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value,\n });\n\n const filters = this.dialogReportRequest.filterRequest.filters;\n const existingIndex = filters.findIndex((f: Filter) => f.id === id);\n\n if (existingIndex !== -1) {\n filters.splice(existingIndex, 1, filter);\n } else {\n filters.push(filter);\n }\n }\n\n\n\n emitJuniorAction($event: TablePageUserAction) {\n const juniorAction = JUNIOR_DOWN_ACTION;\n juniorAction.pageInfo = this.drillDownPageInfo;\n this.doJuniorAction($event);\n }\n\n drillDown() {\n const drilldownaction = DRILL_DOWN_ACTION;\n drilldownaction.pageInfo = this.drillDownPageInfo;\n this.doADrillDownAction(drilldownaction);\n }\n\n private doJuniorAction($event: TablePageUserAction) {\n if (this.juniorColumns && this.juniorPageInfo) {\n if (this.enrichJuniorReportRequest) {\n if (this.activeLevel === 2) {\n this.isEditable = false;\n this.disableExportAction = this.juniorPageInfo.hideReportsExtractButton || false;\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.reportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichJuniorReportRequest($event, this.juniorReportRequest);\n }\n }\n this.activeLevel = this.activeLevel +1;\n }\n }\n private doADrillDownAction($event: TablePageUserAction) {\n if (this.drillDownColumns && this.drillDownPageInfo) {\n if (this.enrichDrillDownReportRequest) {\n if (this.activeLevel === 1) {\n this.isEditable = false;\n this.childReportRequest = this.backendService.buildReportRequest(this.drillDownColumns,\n this.drillDownPageInfo.labelsSection + '.' + this.drillDownPageInfo.id,\n this.reportRequest.filterRequest, '', this.drillDownPageInfo, 'LANDSCAPE');\n this.disableExportAction = this.drillDownPageInfo.hideReportsExtractButton || false;\n this.enrichDrillDownReportRequest($event, this.childReportRequest);\n }\n }\n this.activeLevel = this.activeLevel +1;\n }\n }\n\n private doHyperLinkAction($event: TablePageUserAction) {\n if (this.enrichHyperLinkReportRequest) {\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.dialogReportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.disableExportAction = this.juniorPageInfo.hideReportsExtractButton || false;\n this.enrichHyperLinkReportRequest($event, this.juniorReportRequest);\n }\n }\n\n extractReport(reportType: any) {\n if (this.activeLevel === 1) {\n this.reportRequest.reportType = reportType;\n this.backendService.downloadReport(this.reportRequest, this.pageInfo.apiUri );\n }\n else if (this.activeLevel === 2) {\n this.childReportRequest.reportType = reportType;\n this.backendService.downloadReport(this.childReportRequest, this.drillDownPageInfo.apiUri );\n }\n else if (this.activeLevel === 3) {\n this.juniorReportRequest.reportType = reportType;\n this.backendService.downloadReport(this.juniorReportRequest, this.juniorPageInfo.apiUri );\n }\n }\n\n goUp() {\n this.isEditable = true;\n this.activeLevel = this.activeLevel -1;\n this.doAction(this.x);\n this.reloadData = true;\n if (this.activeLevel >1) {\n this.isEditable = false;\n }\n this.disableExportAction = false\n }\n\n drillDownEnabled() {\n return this.drillDownPageInfo && !this.hideDrillDownButton && !this.getIsEmptyList();\n }\n\n drillDownLabel() {\n return `${this.pageInfo.labelsSection}.drillDownLabel` ;\n }\n getIsEmptyList() {\n return this.backendService.isEmptyItems || this.disableExportAction === true;\n }\n clear() {\n const currentUrl = this.router.url;\n this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n this.router.navigate([currentUrl]);\n });\n\n // if (this.reportForm) {\n // this.reportForm.reset();\n //\n // this.fields.forEach(field => {\n // if (field.type === 'lookup' || field.type === 'multi-select') {\n // const control = this.reportForm.get(field.property);\n // if (control) {\n // control.setValue([]);\n // }\n // }\n // });\n // }\n\n }\n\n\n isFormEmpty(): boolean {\n if (!this.reportForm || !this.reportForm.value) {\n return true;\n }\n\n return Object.values(this.reportForm.value).every(value => {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n return Array.isArray(value) && value.length === 0;\n\n\n });\n }\n\n shouldProcessEventItem(item: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !item[groupByProp]) {\n return true;\n }\n\n const value = item[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n}\n","<div class=\"column full-width\">\n\n <div class=\"row align-start-center\" style=\"margin-bottom: 10px;\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n\n <mat-icon\n *ngIf=\"pageInfo?.hasHint\"\n role=\"img\"\n [attr.aria-label]=\"(pageInfo.labelsSection + '.hint') | translate\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"hint-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"this.reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\"\n ></app-base-form-canvas>\n\n <br><br>\n\n <div class=\"column\">\n <div class=\"row gap-10 responsive-row\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\" [disabled]=\"!isValidForm()\" id=\"report-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\" color=\"primary\" id=\"report-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n\n <button mat-flat-button (click)=\"clear()\" [disabled]=\"isFormEmpty() || activeLevel > 1\" id=\"report-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button (click)=\"drillDown()\" id=\"report-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n\n <button *ngIf=\"activeLevel > 1 && backButtonEnabled\" color=\"warn\" mat-flat-button (click)=\"goUp()\" id=\"report-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n\n <div *ngIf=\"activeLevel >= 1\" class=\"main-form-canvas row align-start-start responsive-table\" style=\"margin-top: 3vh;\">\n <div class=\"column full-width\">\n <app-base-table\n *ngIf=\"activeLevel === 1\"\n [pageInfo]=\"pageInfo\"\n [columns]=\"columnsDefinition\"\n [enforceRefresh]=\"reloadData\"\n id=\"parent\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 2\"\n [pageInfo]=\"drillDownPageInfo\"\n [columns]=\"drillDownColumns\"\n id=\"child\"\n [reportRequest]=\"childReportRequest\"\n (userAction)=\"emitJuniorAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n\n <app-base-table\n *ngIf=\"activeLevel === 3\"\n [pageInfo]=\"juniorPageInfo\"\n [columns]=\"juniorColumns\"\n id=\"junior\"\n [reportRequest]=\"juniorReportRequest\">\n </app-base-table>\n </div>\n </div>\n\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'report-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n OnInit,\n Output\n} from '@angular/core';\nimport {FieldInfo} from \"../../base-model/field-info\";\nimport {EMPTY_PAGE_INFO, PageInfo} from \"../../base-model/page-info\";\nimport {TableColumn} from \"../../base-model/table-column.interface\";\nimport {FieldMessage} from \"../../base-model/api-response\";\nimport {TranslateModule, TranslateService} from \"@ngx-translate/core\";\nimport {BackendService} from \"../../services/backend-service\";\nimport {ActivatedRoute, Router} from \"@angular/router\";\nimport {FormBuilder, FormGroup} from \"@angular/forms\";\nimport {formatDate, NgForOf, NgIf} from \"@angular/common\";\nimport {MatMenu, MatMenuItem, MatMenuTrigger} from \"@angular/material/menu\";\nimport {MatButton, MatButtonModule} from \"@angular/material/button\";\nimport {BaseTableComponent} from \"../base-table/base-table.component\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {FilterRequest} from \"../../base-model/filter-request\";\nimport {ReportRequest} from \"../../base-model/report-request.model\";\nimport {Filter} from \"../../base-model/filter.model\";\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {DRILL_DOWN_ACTION, JUNIOR_DOWN_ACTION, SnackMessage, TablePageUserAction} from \"../../base-model\";\nimport {} from \"../audit-log-details-dialog/audit-log-details-dialog.component\";\nimport {MatDialog} from \"@angular/material/dialog\";\nimport {ReportDetailsDialogComponent} from \"../report-details-dialog/report-details-dialog.component\";\nimport { cloneDeep } from 'lodash';\nimport {Directionality} from \"@angular/cdk/bidi\";\nimport {MatTooltip} from \"@angular/material/tooltip\";\n\n\nconst NON_REPORT_COLUMNS = ['listAction', 'button', 'checkbox'];\n\n@Component({\n selector: 'app-report-form',\n standalone: true,\n imports: [\n TitleBarComponent,\n BaseFormCanvasComponent,\n MatMenu,\n MatMenuItem,\n NgForOf,\n MatMenuTrigger,\n MatButtonModule,\n TranslateModule,\n BaseTableComponent,\n NgIf,\n MatIconModule,\n MatButton,\n MatTooltip\n ],\n templateUrl: './activity-report-form.component.html',\n styleUrl: './activity-report-form.component.scss'\n})\nexport class ActivityReportFormComponent implements OnInit{\n @Input()\n showDetails : any = [];\n\n @Input()\n showExtractButton: boolean = true;\n\n @Input()\n columns: TableColumn<any>[] =[];\n private originalColumns: any[] = [];\n\n\n @Input() actionRequestCallback!: (actionRequest: TablePageUserAction) => TablePageUserAction;\n @Input() enrichDrillDownReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichHyperLinkReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n @Input() enrichJuniorReportRequest!: (actionRequest: TablePageUserAction, reportRequest: ReportRequest) => TablePageUserAction;\n\n @Output()\n userAction: EventEmitter<TablePageUserAction> = new EventEmitter<TablePageUserAction>();\n activeLevel: number = 1;\n items = [4, 5,6,7];\n private filterRequest: FilterRequest;\n x: any;\n isEditable: boolean = true;\n fields: FieldInfo[] = [];\n pageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownPageInfo: PageInfo = EMPTY_PAGE_INFO;\n drillDownColumns: TableColumn<any>[] = [];\n hideDrillDownButton: false;\n\n juniorPageInfo: PageInfo = EMPTY_PAGE_INFO;\n juniorColumns: TableColumn<any>[] = [];\n\n columnsDefinition: TableColumn<any>[] = [];\n types: string[] = [\"pdf\", \"csv\", \"xlsx\"]\n searchStr: string = '';\n\n errors: FieldMessage[] = [];\n\n reloadData: boolean = false;\n drillDownRequestStack: any[] = [];\n reportRequest: ReportRequest = new ReportRequest({});\n childReportRequest: ReportRequest = new ReportRequest({});\n juniorReportRequest: ReportRequest = new ReportRequest({});\n public reportForm: FormGroup;\n readyToSearch = false;\n private pageSize: any;\n private dialogReportRequest: any;\n currentDirection: 'ltr' | 'rtl';\n protected isComparisonReport: boolean = false;\n constructor(private translateService: TranslateService,\n public backendService: BackendService,\n private activatedRoute: ActivatedRoute,\n private injector: Injector,\n private router: Router,\n private route: ActivatedRoute,\n public dialog: MatDialog,\n private directionality: Directionality,\n private fb: FormBuilder) {\n }\n\n ngOnInit(): void {\n\n this.currentDirection = this.directionality.value;\n this.directionality.change.subscribe((value) => {\n this.currentDirection = value;\n })\n\n this.activatedRoute.data.subscribe(data => {\n this.pageInfo = data['pageInfo'];\n this.pageSize = this.pageInfo.pageSize ?? 10;\n this.filterRequest= new FilterRequest(this.pageSize);\n data['pageInfo'].lazyLoadData = true;\n this.drillDownPageInfo = data['drillDownPageInfo'];\n this.drillDownColumns = data['drillDownColumns'];\n this.originalColumns = [...this.drillDownColumns];\n this.hideDrillDownButton = data['hideDrillDownButton'] ?? false;\n this.juniorPageInfo = data['juniorPageInfo'];\n this.juniorColumns = data['juniorColumns'];\n this.columnsDefinition = data['columnsDefinition'].filter(c => (this.drillDownPageInfo && this.drillDownColumns || (!NON_REPORT_COLUMNS.includes(c.type))));\n this.fields = data['fields'];\n if (data['enrichDrillDownReportRequest']) {\n this.enrichDrillDownReportRequest = data['enrichDrillDownReportRequest'](this.injector);\n }\n if (data['enrichJuniorReportRequest']) {\n this.enrichJuniorReportRequest = data['enrichJuniorReportRequest'](this.injector);\n }\n\n if (data['enrichHyperLinkReportRequest']) {\n this.enrichHyperLinkReportRequest = data['enrichHyperLinkReportRequest'](this.injector);\n }\n });\n\n this.route.queryParamMap.subscribe(params => {\n this.isComparisonReport = params.get('comparisonReport') === 'true';\n if (!this.isComparisonReport) return;\n\n const comparisonStr = sessionStorage.getItem('comparisonReportPageInfo');\n if (!comparisonStr) return;\n\n const comparisonData = JSON.parse(comparisonStr);\n this.initializeComparisonReport(comparisonData);\n });\n }\n\n private initializeComparisonReport(data: any): void {\n this.pageInfo.lazyLoadData = data.lazyLoadData ?? false;\n this.activeLevel = data.activeLevel ?? 2;\n this.isEditable = false;\n this.drillDownPageInfo = data.drillDownPageInfo;\n this.drillDownColumns = data.drillDownColumns;\n\n const reportRequest = data.reportRequest;\n\n this.reportRequest = this.backendService.buildReportRequest(\n this.drillDownColumns,\n `${this.drillDownPageInfo.labelsSection}.${this.drillDownPageInfo.id}`,\n reportRequest,\n '',\n this.drillDownPageInfo,\n 'LANDSCAPE'\n );\n\n this.setupForm(data.form);\n this.removeCheckboxFields();\n this.setupFilters(data.reportRequest, data.item);\n this.setupJuniorReportRequest();\n }\n\n private setupForm(formData: any): void {\n this.reportForm = this.fb.group({\n directorate: [[]],\n fromDate: [''],\n toDate: [''],\n sector: {},\n });\n\n if (formData) {\n this.reportForm.patchValue(formData);\n }\n }\n\n private removeCheckboxFields(): void {\n this.fields = this.fields.filter(field => field.type !== 'checkbox');\n }\n\n private setupFilters(reportRequest: any, item: any): void {\n this.filterRequest.filters = [];\n\n this.addOrUpdateFilter(reportRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'iSecValue',\n key: 'iSecValue',\n fieldName: 'iSecValue',\n value: item?.isec_value\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'period',\n key: 'period',\n fieldName: 'period',\n value: item?.period\n });\n\n this.addOrUpdateFilter(reportRequest, {\n id: 'year',\n key: 'year',\n fieldName: 'year',\n value: item?.year\n });\n\n this.reportRequest.filterRequest = reportRequest;\n }\n\n private setupJuniorReportRequest(): void {\n this.juniorReportRequest = this.backendService.buildReportRequest(\n this.juniorColumns,\n `${this.juniorPageInfo.labelsSection}.${this.juniorPageInfo.id}`,\n this.reportRequest.filterRequest,\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n\n this.juniorReportRequest.filterRequest.pageSize = 500;\n }\n\n isMatchHeight() {\n return this.pageInfo.pageHeight === 'match';\n }\n\n\n doAction(type: string) {\n if (this.backendService.parentForm.valid) {\n this.reloadData = !this.reloadData;\n const filterRequest: FilterRequest = new FilterRequest(this.pageSize);\n filterRequest.filters = [];\n this.addOrUpdateFilter(filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n let paramsString: string[] = [];\n this.fields.filter(x => x.type !== 'spacer').forEach(f => {\n if (this.getParamValue(f) != null && this.getParamValue(f).toString().trim() !== '')\n {\n if (f.type === 'multi-select' || f.type === 'lookup') {\n // do not filter if this field as cascading for another one and the other one got selected values\n const childFieldIdx = this.fields.findIndex(field => field.cascadedBy === f.property);\n if (childFieldIdx > -1 && this.backendService.parentForm.get(this.fields[childFieldIdx].property)?.value?.length > 0) {\n return;\n }\n const idz: number[] = [];\n const param: string[] = [];\n if (this.backendService.parentForm.get(f.property)?.value && Array.isArray(this.backendService.parentForm.get(f.property)?.value)\n && this.backendService.parentForm.get(f.property)?.value.length > 0) {\n this.backendService.parentForm.get(f.property)?.value.forEach((a: {\n channelId: number;\n englishName: string;\n id: number;\n }) => {\n if (f.flattenBySubAttribute) {\n idz.push(a[f.flattenBySubAttribute]);\n param.push(a[f.flattenBySubAttribute]);\n } else if (this.fields.find(s => s.property === 'terminalId')) {\n idz.push(a.channelId);\n param.push(a.englishName);\n } else {\n idz.push(a.id);\n param.push(a.englishName);\n }\n })\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: idz\n }));\n paramsString.push(this.translateService.instant(f.label) + ' : ' + param.join(','));\n } else if (this.backendService.parentForm.get(f.property)?.value && f.flattenBySubAttribute) {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)[f.flattenBySubAttribute]\n }));\n }\n } else {\n if (this.backendService.parentForm.get(f.property)?.value !== null &&\n this.backendService.parentForm.get(f.property)?.value !== undefined &&\n this.backendService.parentForm.get(f.property)?.value !== \"\") {\n filterRequest.filters?.push(new Filter({\n id: f.property, fieldName: f.property, label: this.translateService.instant(f.label),\n filterType: 'FILED_FILTER', operator: f.filterOperator,\n valueObject: this.getParamValue(f)\n }));\n }\n paramsString.push(this.translateService.instant(f.label) + ' : ' + this.getParamValueLabel(f));\n }\n }})\n const reportRequest = this.backendService.buildReportRequest(this.columnsDefinition, this.pageInfo.labelsSection + '.' + this.pageInfo.id,\n filterRequest, type, this.pageInfo, 'LANDSCAPE');\n reportRequest.searchStr = paramsString.join(' , ');\n this.reportRequest = reportRequest;\n // this.activeLevel = 1;\n } else {\n this.backendService.topPanelMessage$.next(new SnackMessage('INVALID_REPORT_FORM', true, 'error'));\n }\n }\n\n private getParamValue(f: FieldInfo) {\n if (f.type === 'date' && this.backendService.parentForm.get(f.property)?.value) {\n return formatDate(this.backendService.parentForm.get(f.property)?.value, 'yyyy-MM-dd', 'en_US')\n }else if (f.type === 'checkbox') {\n return !!this.backendService.parentForm.get(f.property)?.value;\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n private getParamValueLabel(f: FieldInfo) {\n if (f.type === 'checkbox') {\n return this.backendService.parentForm.get(f.property)?.value ? this.translateService.instant('yes') : this.translateService.instant('no');\n }else {\n return this.backendService.parentForm.get(f.property)?.value;\n }\n }\n\n getTitle() {\n const pageInfoMap = {\n 1: this.pageInfo,\n 2: this.drillDownPageInfo,\n 3: this.juniorPageInfo\n };\n\n const currentInfo = pageInfoMap[this.activeLevel] || this.pageInfo;\n return `${currentInfo.labelsSection}.${currentInfo.id}`;\n }\n\n updateForm($event: FormGroup) {\n this.reportForm = $event;\n this.backendService.parentForm = $event;\n this.backendService.parentForm.valueChanges.subscribe(x => {\n this.readyToSearch = this.backendService.parentForm.valid;\n }\n\n );\n }\n\n isValidForm() {\n return this.readyToSearch ;\n\n }\n\n\n\n emitUserAction($event: TablePageUserAction) {\n $event.pageInfo = this.pageInfo;\n this.doADrillDownAction($event);\n }\n\n emitHyperLinkAction($event: TablePageUserAction) {\n if (this.shouldProcessEventItem($event.item)) {\n this.dialogReportRequest = cloneDeep(this.reportRequest);\n const reportRequest1 = this.backendService.buildReportRequest(\n this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n { ...this.dialogReportRequest.filterRequest },\n '',\n this.juniorPageInfo,\n 'LANDSCAPE'\n );\n reportRequest1.filterRequest.pageIndex = 0\n const dialogRef = this.dialog.open(ReportDetailsDialogComponent, {\n data: {\n pageInfo: this.juniorPageInfo,\n request: reportRequest1,\n columns: this.juniorColumns,\n item :$event.item\n },\n height: '50vw',\n maxWidth: '120vw',\n direction: this.currentDirection,\n disableClose: false,\n });\n\n dialogRef.afterOpened().subscribe(() => {\n this.doHyperLinkAction($event);\n });\n\n dialogRef.afterClosed().subscribe(() => {\n });\n }\n }\n\n\n\n emitJuniorAction($event: TablePageUserAction) {\n console.log('$event call junior', $event);\n const juniorAction = JUNIOR_DOWN_ACTION;\n juniorAction.pageInfo = this.drillDownPageInfo;\n this.doJuniorAction($event);\n }\n\n drillDown() {\n const drilldownaction = DRILL_DOWN_ACTION;\n drilldownaction.pageInfo = this.drillDownPageInfo;\n this.doADrillDownAction(drilldownaction);\n }\n\n private doJuniorAction($event: TablePageUserAction) {\n this.juniorColumns = this.originalColumns\n if (this.juniorColumns && this.juniorPageInfo) {\n if (this.enrichJuniorReportRequest) {\n\n this.isEditable = false;\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.reportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichJuniorReportRequest($event, this.juniorReportRequest);\n }\n this.activeLevel = this.activeLevel +1;\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n }\n }\n private doADrillDownAction($event: TablePageUserAction) {\n\n if (this.drillDownColumns && this.drillDownPageInfo) {\n this.drillDownRequestStack.push(cloneDeep(this.reportRequest));\n if (this.enrichDrillDownReportRequest) {\n this.isEditable = false;\n this.childReportRequest = this.backendService.buildReportRequest(this.drillDownColumns,\n this.drillDownPageInfo.labelsSection + '.' + this.drillDownPageInfo.id,\n this.reportRequest.filterRequest, '', this.drillDownPageInfo, 'LANDSCAPE');\n this.enrichDrillDownReportRequest($event, this.childReportRequest);\n\n }\n this.childReportRequest.filterRequest.pageSize = 500\n this.activeLevel = this.activeLevel +1;\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n if (this.isComparisonReport){\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n id: 'iSecValue',\n key: 'iSecValue',\n fieldName: 'iSecValue',\n value: $event.item.isec_value\n });\n\n }\n if (this.activeLevel === 4) {\n this.drillDownColumns = this.drillDownColumns.filter(item => item.type !== 'button');\n }\n this.reloadData = true\n }\n }\n\n private addOrUpdateFilter(\n filterRequest: FilterRequest,\n options: {\n id?: string;\n key: string;\n fieldName: string;\n value: any;\n }\n ): void {\n const { id, key, fieldName, value } = options;\n\n const existingFilterIndex = filterRequest.filters.findIndex((filter: Filter) =>\n id ? filter.id === id : filter.key === key\n );\n\n const newFilter = new Filter({\n ...(id && { id }),\n key,\n fieldName,\n label: '',\n filterType: 'FILED_FILTER',\n operator: 'EQUALS',\n valueObject: value\n });\n\n if (existingFilterIndex !== -1) {\n filterRequest.filters[existingFilterIndex] = newFilter;\n } else {\n filterRequest.filters.push(newFilter);\n }\n }\n\n private doHyperLinkAction($event: TablePageUserAction) {\n if (this.enrichHyperLinkReportRequest) {\n this.juniorReportRequest = this.backendService.buildReportRequest(this.juniorColumns,\n this.juniorPageInfo.labelsSection + '.' + this.juniorPageInfo.id,\n this.dialogReportRequest.filterRequest, '', this.juniorPageInfo, 'LANDSCAPE');\n this.enrichHyperLinkReportRequest($event, this.juniorReportRequest);\n }\n }\n\n extractReport(reportType: any) {\n this.reportRequest.reportType = reportType;\n this.backendService.downloadReport(this.reportRequest, this.drillDownPageInfo.apiUri );\n\n }\n\n goUp() {\n Object.keys(this.reportForm.controls).forEach(controlName => {\n const control = this.reportForm.get(controlName);\n control?.clearValidators();\n control?.updateValueAndValidity();\n });\n this.isEditable = true;\n this.activeLevel = this.activeLevel - 1;\n if (this.activeLevel > 1 ) {\n this.isEditable = false;\n }\n this.doAction(this.x);\n this.reportRequest = this.drillDownRequestStack.pop();\n this.addOrUpdateFilter(this.reportRequest.filterRequest, {\n key: 'iSecLevel',\n fieldName: 'iSecLevel',\n value: this.activeLevel\n });\n this.reloadData = true;\n if (this.activeLevel !== 4) {\n this.drillDownColumns = [...this.originalColumns];\n }\n }\n\n\n drillDownEnabled() {\n return this.drillDownPageInfo && !this.hideDrillDownButton && !this.getIsEmptyList();\n }\n\n drillDownLabel() {\n return `${this.pageInfo.labelsSection}.drillDownLabel` ;\n }\n getIsEmptyList() {\n return this.backendService.isEmptyItems;\n }\n clear() {\n const currentUrl = this.router.url;\n this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n this.router.navigate([currentUrl]);\n });\n }\n\n\n isFormEmpty(): boolean {\n if (!this.reportForm || !this.reportForm.value) {\n return true;\n }\n\n return Object.values(this.reportForm.value).every(value => {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n return Array.isArray(value) && value.length === 0;\n\n });\n }\n\n shouldProcessEventItem(item: any): boolean {\n const groupByProp = this.pageInfo?.groupByProperty;\n const groupByValues = this.pageInfo?.groupByValue;\n\n if (!groupByProp || !groupByValues || !item[groupByProp]) {\n return true;\n }\n\n const value = item[groupByProp].toString();\n\n return !groupByValues.some(v => value.includes(v) && value.length >= v.length);\n }\n\n}\n","<div class=\"page-container\">\n\n <div class=\"row row-center-start mb-10px full-width\">\n <app-title-bar [pageTitle]=\"getTitle()\" [newAction]=\"false\"></app-title-bar>\n <mat-icon *ngIf=\"pageInfo?.hasHint\"\n [matTooltip]=\"pageInfo.labelsSection + '.hint' | translate\"\n matTooltipPosition=\"right\"\n color=\"primary\"\n class=\"help-icon\"\n matTooltipClass=\"custom-tooltip\">\n help_outline\n </mat-icon>\n </div>\n\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"isEditable\"\n [errors]=\"errors\"\n [item]=\"reportForm?.value || {}\"\n (formUpdated)=\"updateForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-49\">\n <div class=\"row row-center-start\">\n <button *ngIf=\"activeLevel === 1\" color=\"primary\" mat-flat-button (click)=\"doAction(x)\"\n [disabled]=\"!isValidForm()\" class=\"action-button\" id=\"activity-generate-btn\">\n {{ 'REPORTS.generate' | translate }}\n </button>\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" [disabled]=\"getIsEmptyList()\"\n color=\"primary\" class=\"btn-none-background-primary action-button\" id=\"activity-extract-trigger\">\n {{ 'extract' | translate }}\n <mat-icon class=\"expand_more actionButton__expand\">expand_more</mat-icon>\n </button>\n <button mat-flat-button (click)=\"clear()\"\n [disabled]=\"isFormEmpty() || activeLevel > 1\"\n class=\"action-button\" id=\"activity-clear-btn\">\n {{ 'REPORTS.clear' | translate }}\n </button>\n <button *ngIf=\"activeLevel === 1 && drillDownEnabled()\" color=\"warn\" mat-flat-button\n (click)=\"drillDown()\" class=\"action-button\" id=\"activity-drilldown-btn\">\n {{ drillDownLabel() | translate }}\n </button>\n <button *ngIf=\"activeLevel > 1 && !(isComparisonReport && activeLevel == 2)\" color=\"warn\"\n mat-flat-button (click)=\"goUp()\" class=\"action-button\" id=\"activity-up-btn\">\n {{ 'REPORTS.up' | translate }}\n </button>\n </div>\n </div>\n <div class=\"column flex-49\"></div>\n </div>\n\n <!-- Base tables -->\n <ng-container *ngIf=\"activeLevel === 1\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"pageInfo\" [columns]=\"columnsDefinition\" [enforceRefresh]=\"reloadData\"\n id=\"parent\" [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 2\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\" id=\"child\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 3\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\" id=\"junior\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"activeLevel === 4\">\n <div class=\"row main-form-canvas mt-3vh\">\n <div class=\"column flex-100\">\n <app-base-table [pageInfo]=\"drillDownPageInfo\" [columns]=\"drillDownColumns\"\n [reportRequest]=\"reportRequest\"\n (userAction)=\"emitUserAction($event)\"\n (hyperLinkAction)=\"emitHyperLinkAction($event)\">\n </app-base-table>\n </div>\n </div>\n </ng-container>\n\n</div>\n\n<!-- Menu -->\n<mat-menu #menu=\"matMenu\">\n <button type=\"button\" mat-menu-item *ngFor=\"let type of types\" (click)=\"extractReport(type)\" [attr.id]=\"'activity-extract-item-' + type\">\n {{ type }}\n </button>\n</mat-menu>\n","export class LineItem {\n itemType?: string | null;\n itemLine: string | null;\n description: string | null;\n unitPrice: number | null;\n discount: number | null;\n totalAmount: number | null;\n quantity: number | null;\n\n constructor(\n itemType: string | null,\n itemLine: string | null,\n description: string | null,\n unitPrice: number | null,\n quantity: number | null,\n discount: number | null,\n totalAmount: number | null\n ) {\n this.itemType = itemType;\n this.itemLine = itemLine;\n this.description = description;\n this.unitPrice = unitPrice;\n this.quantity = quantity;\n this.discount = discount;\n this.totalAmount = totalAmount;\n }\n}\n","export class ItemsTotal {\n subtotal: number;\n discount: number;\n grandTotal: number;\n\n\n constructor(subtotal: number, discount: number, grandTotal: number) {\n this.subtotal = subtotal;\n this.discount = discount;\n this.grandTotal = grandTotal;\n }\n}\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from \"@angular/material/dialog\";\nimport {FormGroup, ReactiveFormsModule} from \"@angular/forms\";\nimport {NgClass, NgIf} from \"@angular/common\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {MatSelectModule} from \"@angular/material/select\";\nimport {MatInputModule} from \"@angular/material/input\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport { BaseFormCanvasComponent } from '../base-form-canvas/base-form-canvas.component';\nimport {TitleBarComponent} from \"../title-bar/title-bar.component\";\nimport {FieldInfo, PageInfo} from \"../../base-model\";\nimport {BaseUtils} from \"../../utils/base-utils\";\nimport {MatButton} from \"@angular/material/button\";\n\n@Component({\n selector: 'lib-base-input-dialog',\n standalone: true,\n imports: [\n NgIf,\n NgClass,\n MatIconModule,\n ReactiveFormsModule,\n MatSelectModule,\n MatInputModule,\n BaseFormCanvasComponent,\n TranslateModule,\n NgIf,\n TranslateModule,\n TitleBarComponent,\n MatButton\n ],\n templateUrl: './base-input-dialog.component.html',\n styleUrl: './base-input-dialog.component.css'\n})\nexport class BaseInputDialogComponent extends BaseUtils implements OnInit {\n fieldsInfo: FieldInfo[];\n default: any;\n isLoaded: boolean = false;\n formGroup: FormGroup;\n\n constructor(public dialogRef: MatDialogRef<BaseInputDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any) {\n super()\n }\n\n ngOnInit(): void {\n console.log('data' ,this.data);\n this.fieldsInfo = this.data.fieldsInfo;\n this.pageInfo = this.data.pageInfo;\n this.default = this.data.element;\n this.isLoaded = true;\n }\n captureForm($event: FormGroup) {\n this.formGroup = $event;\n }\n\n saveDisabled() {\n return !this.formGroup?.valid;\n }\n\n getTitle() {\n return this.pageInfo.labelsSection + '.pop_up_title';\n }\n\n doSave(save: string) {\n if (this.formGroup.valid) {\n let id = this.default?.id;\n this.default = this.formGroup.value;\n this.default.id = id;\n this.dialogRef.close(this.default);\n }\n }\n\n doCancel(cancel: string) {\n this.dialogRef.close(null);\n }\n}\n","<div class=\"container\">\n <div class=\"title-row\">\n <div class=\"full-column\">\n <app-title-bar [pageTitle]=\"getTitle()\"></app-title-bar>\n </div>\n </div>\n\n <ng-container *ngIf=\"isLoaded\">\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fieldsInfo\"\n [editable]=\"true\"\n [item]=\"default\"\n (formUpdated)=\"captureForm($event)\">\n </app-base-form-canvas>\n\n <div class=\"button-row\">\n <div class=\"half-column\"></div>\n <div class=\"half-column right-align\">\n <div class=\"button-group\">\n <ng-container>\n <button\n mat-stroked-button\n class=\"btn-none-background-primary\"\n type=\"button\"\n (click)=\"doCancel('cancel')\"\n id=\"base-input-cancel-btn\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container>\n <button\n [ngClass]=\"saveDisabled() ? 'btn-none-background-primary' : 'btn-background-primary'\"\n [disabled]=\"saveDisabled()\"\n mat-stroked-button\n type=\"button\"\n (click)=\"doSave('save')\"\n id=\"base-input-save-btn\">\n Save\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {MatFormField, MatLabel} from \"@angular/material/form-field\";\nimport {MatOption, MatSelect} from \"@angular/material/select\";\nimport {FormsModule} from \"@angular/forms\";\nimport {MatIcon} from \"@angular/material/icon\";\nimport {MatInput} from \"@angular/material/input\";\nimport {MatIconButton} from \"@angular/material/button\";\nimport {NgForOf} from \"@angular/common\";\nimport {TableColumn} from \"../../base-model\";\nimport {TranslateModule} from \"@ngx-translate/core\";\ntype SearchType = 'exact' | 'like';\ntype SortType = 'ASC' | 'DESC';\n@Component({\n selector: 'ag-search-bar',\n templateUrl: './search-bar.component.html',\n standalone: true,\n imports: [\n MatFormField,\n MatLabel,\n MatSelect,\n MatOption,\n FormsModule,\n MatIcon,\n MatInput,\n MatIconButton,\n NgForOf,\n TranslateModule\n ],\n styleUrls: ['./search-bar.component.scss']\n})\nexport class SearchBarComponent implements OnInit {\n @Input() columns: TableColumn<any>[];\n @Input() defaultSortKey: string = '';\n\n searchValue: string = '';\n searchType: SearchType = 'like';\n selectedSortKey: string = '';\n selectedSortType: SortType = 'ASC';\n @Output() searchTriggered = new EventEmitter<{\n searchValue: string;\n searchType: SearchType;\n sortKey: string;\n sortType: string;\n }>();\n\n onSearch() {\n this.selectedSortKey ||= this.defaultSortKey || this.columns[0]?.property;\n\n this.searchTriggered.emit({\n searchValue: this.searchValue,\n searchType: this.searchType,\n sortKey: this.selectedSortKey,\n sortType: this.selectedSortType\n });\n }\n\n labelKey(column: { label?: string; property: string }): string {\n return column.label || column.property;\n }\n\n ngOnInit(): void {\n }\n\n getColumns() {\n return this.columns.filter(\n (column) => ['text', 'date', 'localDateTime'].includes(column.type)\n );\n }\n}\n","<div class=\"mainSearchBar\">\n <div class=\"search row align-start-center gap-16\">\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-50\">\n <mat-label>{{ 'BASE_TABLE.searchQuery' | translate }}</mat-label>\n <input\n matInput\n class=\"search__input\"\n (keydown.enter)=\"onSearch()\"\n [(ngModel)]=\"searchValue\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-15\">\n <mat-label>{{ 'BASE_TABLE.searchMatchType' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"searchType\">\n <mat-option value=\"exact\">Exact</mat-option>\n <mat-option value=\"like\">Like</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-15\">\n <mat-label>{{ 'BASE_TABLE.sortByColumn' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"selectedSortKey\">\n <mat-option *ngFor=\"let col of getColumns()\" [value]=\"col.property\">\n {{ labelKey(col) | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"search__field flex-10\">\n <mat-label>{{ 'BASE_TABLE.sortDirection' | translate }}</mat-label>\n <mat-select class=\"search__toggle\" [(ngModel)]=\"selectedSortType\">\n <mat-option value=\"ASC\">ASC</mat-option>\n <mat-option value=\"DESC\">DESC</mat-option>\n </mat-select>\n </mat-form-field>\n\n <div class=\"search__button row align-center-center\">\n <button\n type=\"button\"\n class=\"icon-design\"\n mat-icon-button\n (click)=\"onSearch()\"\n [attr.aria-label]=\"'BASE_TABLE.runSearch' | translate\">\n <mat-icon class=\"icon-search\" color=\"primary\" aria-hidden=\"true\">search</mat-icon>\n </button>\n </div>\n\n </div>\n</div>\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {MatButton, MatIconButton} from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport {NgIf, NgStyle} from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-snackbar-static',\n standalone: true,\n imports: [MatIcon, NgIf, TranslateModule, MatIconButton, MatButton, NgStyle],\n templateUrl: './snackbar-static.component.html',\n styleUrls: ['./snackbar-static.component.scss']\n})\nexport class SnackbarStaticComponent {\n @Input() messageKey = '';\n @Input() titleKey = '';\n @Input() params: Record<string, any> = {};\n @Input() paramsTitle: Record<string, any> = {};\n @Input() type: 'error' | 'success' | 'warning' | 'info' | 'help'\n @Output() actionBtn: EventEmitter<void> = new EventEmitter();\n @Input() width: string = 'auto';\n @Input() textBtn: string;\n submit() {\n this.actionBtn.emit()\n }\n}\n","<div class=\"snackbar snackbar-{{type}}\" [ngStyle]=\"{'width': width == 'auto' ? 'auto' : width}\">\n <div class=\"sub-snackbar\">\n <mat-icon *ngIf=\"type === 'error'\">error</mat-icon>\n <mat-icon *ngIf=\"type === 'success'\">check_box</mat-icon>\n <mat-icon *ngIf=\"type === 'warning'\">warning</mat-icon>\n <mat-icon *ngIf=\"type === 'info'\">info</mat-icon>\n <mat-icon *ngIf=\"type === 'help'\">help</mat-icon>\n\n <div class=\"text-content\">\n <div class=\"title\">{{ titleKey | translate : paramsTitle }}</div>\n <div class=\"subtitle\">{{ messageKey | translate: params }}</div>\n </div>\n\n </div>\n <div class=\"action\" *ngIf=\"textBtn\">\n <button mat-stroked-button class=\"btn-none-background-primary action-btn\" (click)=\"submit()\" id=\"snackbar-action-btn\">\n {{ textBtn | translate}}\n </button>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, inject, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { Subject, takeUntil, startWith } from 'rxjs';\n\n@Component({\n selector: 'lib-action-button',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n TranslateModule\n ],\n templateUrl: './action-button.component.html',\n styleUrl: './action-button.component.scss'\n})\nexport class ActionButtonComponent implements OnInit, OnDestroy {\n private readonly translateService = inject(TranslateService);\n private readonly destroy$ = new Subject<void>();\n\n @Input() buttonText: string = '';\n @Input() buttonTextKey?: string;\n @Input() buttonGradient: string = 'linear-gradient(90deg, #E4C9D0 0%, #8A1538 100%)';\n @Input() id?: string;\n @Output() buttonClick = new EventEmitter<void>();\n\n get isArabic(): boolean {\n const currentLang = this.translateService.currentLang\n || this.translateService.defaultLang\n || this.translateService.getBrowserLang()\n || 'en';\n return currentLang === 'ar';\n }\n\n ngOnInit(): void {\n this.translateService.onLangChange\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onButtonClick(): void {\n this.buttonClick.emit();\n }\n}\n","<button\n class=\"action-button\"\n (click)=\"onButtonClick()\"\n [style.background]=\"buttonGradient\"\n [attr.id]=\"id || (buttonTextKey ? ('action-button-' + buttonTextKey) : 'action-button')\"\n type=\"button\">\n <span class=\"button-texts\">\n <span *ngIf=\"buttonTextKey\">{{ buttonTextKey | translate }}</span>\n <span *ngIf=\"!buttonTextKey\">{{ buttonText }}</span>\n </span>\n <mat-icon class=\"arrow-icon\" [class.arrow-rtl]=\"isArabic\">arrow_forward</mat-icon>\n</button>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ActionButtonComponent } from '../action-button/action-button.component';\n\nexport interface FeatureItem {\n text?: string;\n textKey?: string;\n}\n\n@Component({\n selector: 'lib-action-card',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n TranslateModule,\n ActionButtonComponent\n ],\n templateUrl: './action-card.component.html',\n styleUrl: './action-card.component.scss'\n})\nexport class ActionCardComponent {\n\n @Input() icon: string = '';\n @Input() iconSvg?: string;\n @Input() title: string = '';\n @Input() description: string = '';\n @Input() buttonText: string = '';\n @Input() buttonTextKey?: string;\n @Input() titleKey?: string;\n @Input() descriptionKey?: string;\n @Input() iconColor: string = '#8A1538';\n @Input() borderColor: string = '#d1d1d1';\n @Input() borderLeftColor?: string;\n @Input() borderRightColor?: string;\n @Input() borderBottomColor?: string;\n @Input() topBorderColor?: string;\n @Input() topBorderGradient?: string;\n @Input() buttonGradient: string = 'linear-gradient(90deg, #E4C9D0 0%, #8A1538 100%)';\n @Input() decorativeIconColor: string = 'rgba(209, 203, 216, 1)';\n @Input() featureCheckIconColor?: string;\n @Input() variant: 'default' | 'extended' = 'default';\n @Input() iconSize: number = 40;\n @Input() features?: FeatureItem[];\n @Input() featuresHeading?: string;\n @Input() featuresHeadingKey?: string;\n @Input() showDivider: boolean = false;\n @Input() topBorderHeight: number = 12;\n @Output() buttonClick = new EventEmitter<void>();\n\n onButtonClick(): void {\n this.buttonClick.emit();\n }\n}","<div class=\"action-card\" \n [class.extended-variant]=\"variant === 'extended'\"\n [style.--top-border-gradient]=\"topBorderGradient || buttonGradient\" \n [style.--top-border-height]=\"topBorderHeight + 'px'\"\n [style.border-right-color]=\"borderRightColor || borderColor\" \n [style.border-bottom-color]=\"borderBottomColor || borderColor\" \n [style.border-left-color]=\"borderLeftColor || borderColor\">\n <div class=\"card-content\" [class.extended-content]=\"variant === 'extended'\">\n <div class=\"main-content\" [class.extended-main]=\"variant === 'extended'\">\n <div class=\"header-section\" [class.extended-header]=\"variant === 'extended'\">\n <div class=\"header-top-wrapper\" *ngIf=\"variant === 'default'\">\n <div class=\"icon-wrapper\" \n [style.color]=\"iconColor\"\n [style.width.px]=\"iconSize\"\n [style.height.px]=\"iconSize\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"icon-svg\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.font-size.px]=\"iconSize\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">{{ icon }}</mat-icon>\n </div>\n <div class=\"header-top\">\n <h2 class=\"card-title\">\n <span *ngIf=\"titleKey\">{{ titleKey | translate }}</span>\n <span *ngIf=\"!titleKey\">{{ title }}</span>\n </h2>\n </div>\n </div>\n <div class=\"icon-wrapper\" \n *ngIf=\"variant === 'extended'\"\n [style.color]=\"iconColor\"\n [style.width.px]=\"iconSize\"\n [style.height.px]=\"iconSize\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"icon-svg\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.font-size.px]=\"iconSize\" [style.width.px]=\"iconSize\" [style.height.px]=\"iconSize\">{{ icon }}</mat-icon>\n </div>\n <div class=\"title-description-wrapper\" *ngIf=\"variant === 'extended'\">\n <h2 class=\"card-title\">\n <span *ngIf=\"titleKey\">{{ titleKey | translate }}</span>\n <span *ngIf=\"!titleKey\">{{ title }}</span>\n </h2>\n <p class=\"card-description\">\n <span *ngIf=\"descriptionKey\">{{ descriptionKey | translate }}</span>\n <span *ngIf=\"!descriptionKey\">{{ description }}</span>\n </p>\n </div>\n <p class=\"card-description\" *ngIf=\"variant === 'default'\">\n <span *ngIf=\"descriptionKey\">{{ descriptionKey | translate }}</span>\n <span *ngIf=\"!descriptionKey\">{{ description }}</span>\n </p>\n </div>\n <lib-action-button\n [buttonText]=\"buttonText\"\n [buttonTextKey]=\"buttonTextKey\"\n [buttonGradient]=\"buttonGradient\"\n (buttonClick)=\"onButtonClick()\">\n </lib-action-button>\n <div class=\"features-divider\" *ngIf=\"showDivider && features && features.length > 0\"></div>\n \n <div class=\"features-section\" *ngIf=\"features && features.length > 0\">\n <h3 class=\"features-heading\" *ngIf=\"featuresHeading || featuresHeadingKey\">\n <span *ngIf=\"featuresHeadingKey\">{{ featuresHeadingKey | translate }}</span>\n <span *ngIf=\"!featuresHeadingKey\">{{ featuresHeading }}</span>\n </h3>\n <div class=\"feature-item\" *ngFor=\"let feature of features\">\n <mat-icon class=\"feature-check-icon\" [style.color]=\"featureCheckIconColor || iconColor\">check_circle</mat-icon>\n <span class=\"feature-text\">\n <span *ngIf=\"feature.textKey\">{{ feature.textKey | translate }}</span>\n <span *ngIf=\"!feature.textKey\">{{ feature.text }}</span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"decorative-icon-wrapper\" *ngIf=\"variant === 'default' && (icon || iconSvg)\">\n <div class=\"decorative-icon\">\n <img *ngIf=\"iconSvg\" [src]=\"iconSvg\" alt=\"\" class=\"decorative-icon-svg\" [style.filter]=\"'opacity(0.3)'\" />\n <mat-icon *ngIf=\"!iconSvg && icon\" [style.color]=\"decorativeIconColor\">{{ icon }}</mat-icon>\n </div>\n </div>\n </div>\n</div>","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {AbstractControl, FormsModule} from \"@angular/forms\";\nimport {CommonModule} from \"@angular/common\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {MatIconModule} from \"@angular/material/icon\";\nimport {BaseFormCanvasComponent} from \"../base-form-canvas/base-form-canvas.component\";\nimport {FieldInfo, EMPTY_PAGE_INFO, PageInfo} from \"../../base-model\";\nimport {FormGroup} from \"@angular/forms\";\nimport {TranslateModule} from \"@ngx-translate/core\";\nimport {LineItem} from \"../../base-model/line-item.model\";\nimport {ItemsTotal} from \"../../base-model/items-total.model\";\n@Component({\n selector: 'app-item-line-editor',\n templateUrl: './item-line-editor.component.html',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n BaseFormCanvasComponent,\n TranslateModule\n ],\n styleUrls: ['./item-line-editor.component.scss']\n})\n\n\nexport class ItemLineEditorComponent implements OnChanges, OnInit {\n @Input() noDataFoundIcon: string;\n @Input() noDataFoundTitle: string;\n @Input() noDataFoundSubtitle: string;\n\n @Input() pageInfo: PageInfo;\n @Input() columnHeaderWidths: string[];\n @Input() title: string;\n @Input() subtitle: string;\n @Input() allowAdd: boolean = true;\n @Input() allowDelete: boolean = true;\n @Input() editable: boolean = true;\n @Input() currency: string;\n @Input() fields: FieldInfo[] = [];\n\n private baseFieldsSnapshot: FieldInfo[] | undefined;\n\n\n @Input() items: LineItem[] = [this.blankItem()];\n\n @Output() itemsChange = new EventEmitter<LineItem[]>();\n @Output() itemSaved = new EventEmitter<{ index: number, item: any }>();\n @Output() itemDeleted = new EventEmitter<{ index: number }>();\n @Output() totalsChange = new EventEmitter<ItemsTotal>();\n @Output() editStateChange = new EventEmitter<{ index: number, editing: boolean }>();\n formRefs: (FormGroup | undefined)[] = [];\n\n editing: boolean[] = [true];\n noDataFound: boolean = false\n\n isMobile(): boolean {\n return typeof window !== 'undefined' && window.innerWidth <= 768;\n }\n\n ngOnInit(): void {\n if (this.fields && this.fields.length > 0) {\n this.applyMobileFieldModifications();\n }\n }\n\n private applyMobileFieldModifications(): void {\n if (this.isMobile() && this.fields) {\n this.fields = this.fields.map(field => {\n const fieldCopy = { ...field };\n \n if (['itemCode', 'description', 'unitPrice', 'quantity', 'discount'].includes(field.property)) {\n fieldCopy.hideLabel = false;\n }\n\n if (['description'].includes(field.property)) {\n fieldCopy.row = 2;\n }\n \n if (['unitPrice', 'quantity', 'discount'].includes(field.property)) {\n fieldCopy.row = 3;\n }\n \n if (field.property === 'totalAmount') {\n fieldCopy.visible = false;\n }\n \n return fieldCopy;\n });\n }\n }\n \n get headerFields(): FieldInfo[] {\n return (this.fields || []).filter(f => f.visible && f.row === 1 && f.type !== 'spacer');\n }\n\n get hasInvalidEditingForm(): boolean {\n if (!this.formRefs || !this.editing) return false;\n for (let i = 0; i < this.formRefs.length; i++) {\n const frm = this.formRefs[i];\n if (this.editing[i] && frm && frm.invalid) {\n return true;\n }\n }\n return false;\n }\n\n get canAddNew(): boolean {\n return !this.hasInvalidEditingForm;\n }\n\n canSave(index: number): boolean {\n const frm = this.formRefs?.[index];\n if (!this.editing?.[index]) return true;\n return !!frm && frm.valid;\n }\n\n labelOf(field: FieldInfo): string {\n const configuredKey = field.label ? field.label : field.property;\n return configuredKey.startsWith(this.pageInfo.labelsSection)\n ? configuredKey\n : `${this.pageInfo.labelsSection}.${configuredKey}`;\n }\n\n private blankItem() {\n return { itemLine: '', description: '', unitPrice: 0, quantity: 1, discount: 0, totalAmount: 0 };\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['items'] && changes['items'].currentValue) {\n const len = (this.items || []).length;\n this.noDataFound = len <= 0;\n if (changes['items'].firstChange) {\n this.formRefs = new Array(len).fill(undefined);\n this.editing = len > 0 ? new Array(len).fill(false) : [true];\n } else {\n const oldLen = this.editing?.length || 0;\n\n\n if (!this.formRefs) this.formRefs = [];\n if (this.formRefs.length > len) {\n this.formRefs = this.formRefs.slice(0, len);\n } else {\n while (this.formRefs.length < len) this.formRefs.push(undefined);\n }\n\n\n if (!this.editing) this.editing = [];\n if (this.editing.length > len) {\n this.editing = this.editing.slice(0, len);\n } else {\n for (let i = this.editing.length; i < len; i++) {\n this.editing[i] = true;\n }\n }\n\n\n if (oldLen === 0 && len > 0 && this.editing[0] === undefined) {\n this.editing[0] = true;\n }\n }\n this.emitTotals();\n }\n if (changes['fields'] && changes['fields'].currentValue) {\n this.baseFieldsSnapshot = (this.fields || []).map(f => ({...f}));\n this.applyMobileFieldModifications();\n }\n }\n\n onFormUpdated(form: FormGroup, index: number) {\n const discountCtrl = form.get('discount');\n\n if (discountCtrl) {\n\n const existing = discountCtrl.validator ? [discountCtrl.validator] : [];\n discountCtrl.setValidators([\n ...existing,\n this.discountValidator(index)\n ]);\n\n discountCtrl.updateValueAndValidity({ emitEvent: false });\n }\n\n this.formRefs[index] = form;\n try {\n const emittedItems = this.items.map((it, i) => {\n if (i !== index) return it;\n const v = this.getCurrentValues(i) || it || {};\n const up = Number(v?.unitPrice || 0);\n const q = Number(v?.quantity || 0);\n const disc = Number(v?.discount || 0);\n const total = Math.max(0, up * q - disc);\n return { ...it, ...v, total };\n });\n this.itemsChange.emit(emittedItems);\n } catch (_e) {\n\n }\n this.emitTotals();\n }\n\n addNewItem() {\n this.items.push(this.blankItem());\n this.formRefs.push(undefined);\n this.editing.push(true);\n\n this.restoreFieldsFromSnapshot();\n this.itemsChange.emit([...this.items]);\n this.editStateChange.emit({ index: this.items.length - 1, editing: true });\n this.emitTotals();\n }\n\n saveRow(index: number) {\n\n const frm = this.formRefs?.[index];\n if (this.editing[index] && frm && frm.invalid) {\n\n Object.values(frm.controls).forEach(c => c.markAsTouched());\n return;\n }\n const v = this.getCurrentValues(index);\n if (!v) return;\n this.items[index] = { ...v, total: this.calcLineTotal(index) };\n\n this.editing[index] = false;\n\n this.itemsChange.emit([...this.items]);\n this.itemSaved.emit({ index, item: this.items[index] });\n this.editStateChange.emit({ index, editing: false });\n this.emitTotals();\n }\n\n deleteItem(index: number) {\n if (index < 0 || index >= this.items.length) return;\n this.items.splice(index, 1);\n this.formRefs.splice(index, 1);\n this.editing.splice(index, 1);\n\n this.itemsChange.emit([...this.items]);\n this.itemDeleted.emit({ index });\n this.emitTotals();\n }\n\n clearAll() {\n this.items = [this.blankItem()];\n this.formRefs = [undefined];\n this.editing = [true];\n this.itemsChange.emit([...this.items]);\n this.emitTotals();\n }\n\n getCurrentValues(index: number) {\n const isEditing = this.editing[index];\n const frm = this.formRefs[index];\n\n const base = this.items[index] || {};\n const src = (isEditing && frm) ? { ...base, ...frm.value } : { ...base };\n if (!src) return null;\n const val: any = { ...src };\n val.unitPrice = val.unitPrice === null || val.unitPrice === '' ? null : Number(val.unitPrice);\n val.quantity = val.quantity === null || val.quantity === '' ? null : Number(val.quantity);\n val.discount = val.discount === null || val.discount === '' ? null : Number(val.discount);\n return val;\n }\n\n calcLineTotal(index: number): number {\n const val = this.getCurrentValues(index);\n if (!val) return Number(this.items[index]?.totalAmount || 0);\n return Math.max(0, (val.unitPrice || 0) * (val.quantity || 0) - (val.discount || 0));\n }\n\n get subtotal(): number {\n return this.items.reduce((s, _it, i) => {\n const v = this.getCurrentValues(i);\n const up = Number(v?.unitPrice || 0);\n const q = Number(v?.quantity || 0);\n return s + (up * q);\n }, 0);\n }\n\n get discountTotal(): number {\n return this.items.reduce((s, _it, i) => {\n const v = this.getCurrentValues(i);\n return s + Number(v?.discount || 0);\n }, 0);\n }\n\n get grandTotal(): number {\n return this.items.reduce((s, _it, i) => s + this.calcLineTotal(i), 0);\n }\n\n trackByIndex(index: number, _item: any) {\n return index;\n }\n\n editRow(index: number) {\n this.editing[index] = true;\n this.restoreFieldsFromSnapshot();\n this.editStateChange.emit({ index, editing: true });\n }\n\n private emitTotals() {\n this.totalsChange.emit({\n subtotal: this.subtotal,\n discount: this.discountTotal,\n grandTotal: this.grandTotal\n });\n }\n\n private restoreFieldsFromSnapshot() {\n if (this.baseFieldsSnapshot && this.baseFieldsSnapshot.length) {\n this.fields = this.baseFieldsSnapshot.map(f => ({...f}));\n this.applyMobileFieldModifications();\n }\n }\n\n get gridTemplate() {\n return this.columnHeaderWidths.join(' ');\n }\n\n private discountValidator(index: number) {\n return (control: AbstractControl) => {\n const val = this.getCurrentValues(index);\n if (!val) return null;\n\n const totalBeforeDiscount = (val.unitPrice ?? 0) * (val.quantity ?? 0);\n const discount = val.discount ?? null;\n\n if (discount != null && discount > totalBeforeDiscount) {\n return { discountTooHigh: true };\n }\n\n return null;\n };\n }\n\n}\n","<div class=\"item-line-editor\">\n <div class=\"header-section\">\n <div class=\"header-content\">\n <div class=\"header-text\">\n <h3 class=\"title\">{{ title | translate }}</h3>\n <p class=\"subtitle\">{{ subtitle | translate }}</p>\n </div>\n </div>\n <div class=\"header-divider\"></div>\n </div>\n\n <div class=\"table-section\">\n @if (!noDataFound) {\n <div class=\"table-container\">\n <div class=\"table-header\" [ngStyle]=\"{ 'grid-template-columns': gridTemplate }\">\n <ng-container *ngFor=\"let f of headerFields; let idx = index\">\n <div class=\"header-cell\" [class.description-cell]=\"f.property === 'description'\">\n <span class=\"header-cell-text\">\n {{ labelOf(f) | translate }}\n <span *ngIf=\"f.required\" class=\"required-asterisk\">*</span>\n </span>\n </div>\n </ng-container>\n </div>\n\n <div class=\"table-body\">\n <div class=\"table-row-container\" *ngFor=\"let it of items; let i = index; trackBy: trackByIndex\">\n <div class=\"table-row\">\n <div class=\"row-inputs\" [attr.data-grid-columns]=\"gridTemplate\" [ngStyle]=\"{ '--grid-columns': gridTemplate }\">\n <app-base-form-canvas\n [pageInfo]=\"pageInfo\"\n [fields]=\"fields\"\n [editable]=\"editing[i]\"\n [emitOnValueChanges]=\"true\"\n [item]=\"it\"\n [currency]=\"currency\"\n (formUpdated)=\"onFormUpdated($event, i)\">\n </app-base-form-canvas>\n </div>\n </div>\n\n <div class=\"row-actions\">\n <button *ngIf=\"editing[i]\" mat-stroked-button class=\"save-btn\" (click)=\"saveRow(i)\"\n [disabled]=\"!canSave(i)\">\n <div class=\"button-text\">\n <mat-icon>check</mat-icon>\n <span>{{ 'item-line.save' | translate }}</span>\n </div>\n </button>\n\n <button *ngIf=\"!editing[i] && editable\" mat-stroked-button class=\"edit-btn\"\n (click)=\"editRow(i)\">\n <div class=\"button-text\">\n <mat-icon>edit</mat-icon>\n <span>{{ 'item-line.edit' | translate }}</span>\n </div>\n </button>\n\n <button *ngIf=\"allowDelete && editable\" mat-stroked-button class=\"delete-btn\"\n (click)=\"deleteItem(i)\" type=\"button\">\n <div class=\"button-text\">\n <mat-icon>delete</mat-icon>\n <span>{{ 'item-line.delete' | translate }}</span>\n </div>\n </button>\n </div>\n\n <div class=\"row-divider\"></div>\n </div>\n </div>\n </div>\n }\n\n @if (noDataFound) {\n <div class=\"dataNotFound\">\n <mat-icon class=\"dataNotFound__icon\">{{ noDataFoundIcon }}</mat-icon>\n <span class=\"dataNotFound__title\">{{ noDataFoundTitle | translate }}</span>\n <span class=\"dataNotFound__subtitle\">{{ noDataFoundSubtitle | translate }}</span>\n </div>\n }\n\n <div class=\"add-item\" *ngIf=\"allowAdd && editable\">\n <button mat-stroked-button class=\"add-item-btn\" (click)=\"addNewItem()\"\n [disabled]=\"!canAddNew\">\n <div class=\"button-text\">\n <mat-icon>add_circle_outline</mat-icon>\n <span>{{ 'item-line.addNewItem' | translate }}</span>\n </div>\n </button>\n </div>\n </div>\n\n <!-- Totals Box -->\n @if (!noDataFound) {\n <div class=\"totals-box\">\n <div class=\"total-row\">\n <span class=\"label\">{{ 'item-line.discount' | translate }}</span>\n <span class=\"value red\">{{ discountTotal | currency:currency }}</span>\n </div>\n\n <div class=\"total-row\">\n <span class=\"label\">{{ 'item-line.amount' | translate }}</span>\n <span class=\"value\">{{ subtotal | currency:currency }}</span>\n </div>\n\n <div class=\"totals-divider\"></div>\n\n <div class=\"total-row grand\">\n <span class=\"label\">{{ 'item-line.grandTotal' | translate }}</span>\n <span class=\"value green\">{{ grandTotal | currency:currency }}</span>\n </div>\n </div>\n }\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PermissionConfig, PermissionMatrixItem, PermissionChangeEvent } from '../../base-model';\n\n@Component({\n selector: 'lib-permission-matrix',\n standalone: true,\n imports: [\n CommonModule,\n MatIconModule,\n MatCheckboxModule,\n TranslateModule\n ],\n templateUrl: './permission-matrix.component.html',\n styleUrl: './permission-matrix.component.scss'\n})\nexport class PermissionMatrixComponent {\n\n @Input() items: PermissionMatrixItem[] = [];\n @Input() permissions: PermissionConfig[] = [\n { key: 'view', labelKey: 'GROUPS.view' },\n { key: 'edit', labelKey: 'GROUPS.edit' },\n { key: 'completeAndTerminate', labelKey: 'GROUPS.completeAndTerminate', combinedKeys: ['completePermission', 'terminatePermission'] }\n ];\n @Input() titleKey: string = 'GROUPS.groupMatrix';\n @Input() selectAllLabelKey: string = 'GROUPS.selectAll';\n @Input() expandAllLabelKey: string = 'GROUPS.expandAll';\n @Input() collapseAllLabelKey: string = 'GROUPS.collapseAll';\n @Input() readonly: boolean = false;\n @Input() hideSelectAll: boolean = false;\n @Input() autoLockView: boolean = false;\n @Output() itemsChange = new EventEmitter<PermissionMatrixItem[]>();\n @Output() permissionChange = new EventEmitter<PermissionChangeEvent>();\n\n areAllExpanded(): boolean {\n return this.items.length > 0 && this.items.every(item => item.expanded);\n }\n\n expandAllGroups(): void {\n const expand = !this.areAllExpanded();\n this.items.forEach(item => item.expanded = expand);\n this.emitItemsChange();\n }\n\n toggleGroup(item: PermissionMatrixItem): void {\n item.expanded = !item.expanded;\n this.emitItemsChange();\n }\n\n isAllPermissionsSelected(item: PermissionMatrixItem): boolean {\n return this.permissions.every(perm => {\n if (perm.combinedKeys) {\n return perm.combinedKeys.every(key => item.permissions[key]);\n }\n return item.permissions[perm.key];\n });\n }\n\n toggleSelectAll(item: PermissionMatrixItem): void {\n if (this.readonly) return;\n\n const allSelected = this.isAllPermissionsSelected(item);\n const newValue = !allSelected;\n\n this.permissions.forEach(perm => {\n if (this.autoLockView && !newValue && perm.key === 'view') {\n return;\n }\n if (perm.combinedKeys) {\n perm.combinedKeys.forEach(key => {\n item.permissions[key] = newValue;\n });\n } else {\n item.permissions[perm.key] = newValue;\n }\n });\n\n if (this.autoLockView) {\n this.syncViewPermission(item);\n }\n\n this.emitItemsChange();\n }\n\n isPermissionSelected(item: PermissionMatrixItem, permission: PermissionConfig): boolean {\n if (permission.combinedKeys) {\n return permission.combinedKeys.every(key => item.permissions[key]);\n }\n return item.permissions[permission.key];\n }\n\n isPermissionDisabled(item: PermissionMatrixItem, permission: PermissionConfig): boolean {\n return this.readonly;\n }\n\n togglePermission(item: PermissionMatrixItem, permission: PermissionConfig): void {\n if (this.isPermissionDisabled(item, permission)) {\n return;\n }\n\n const currentValue = this.isPermissionSelected(item, permission);\n const newValue = !currentValue;\n\n if (this.autoLockView && permission.key === 'view' && !newValue) {\n this.clearAllPermissions(item);\n this.permissionChange.emit({\n item,\n permissionKey: permission.key,\n newValue: false\n });\n this.emitItemsChange();\n return;\n }\n\n if (permission.combinedKeys) {\n permission.combinedKeys.forEach(key => {\n item.permissions[key] = newValue;\n });\n } else {\n item.permissions[permission.key] = newValue;\n }\n\n if (this.autoLockView) {\n this.syncViewPermission(item);\n }\n\n this.permissionChange.emit({\n item,\n permissionKey: permission.key,\n newValue\n });\n\n this.emitItemsChange();\n }\n\n private hasNonViewPermission(item: PermissionMatrixItem): boolean {\n return this.permissions.some(perm => {\n if (perm.key === 'view') {\n return false;\n }\n if (perm.combinedKeys) {\n return perm.combinedKeys.some(key => item.permissions[key]);\n }\n return !!item.permissions[perm.key];\n });\n }\n\n private clearAllPermissions(item: PermissionMatrixItem): void {\n this.permissions.forEach(perm => {\n if (perm.combinedKeys) {\n perm.combinedKeys.forEach(key => {\n item.permissions[key] = false;\n });\n } else {\n item.permissions[perm.key] = false;\n }\n });\n }\n\n /** Auto-select view when any non-view permission is selected; never auto-clear view. */\n private syncViewPermission(item: PermissionMatrixItem): void {\n const viewKey = this.permissions.find(p => p.key === 'view' && !p.combinedKeys)?.key;\n if (!viewKey || !this.hasNonViewPermission(item)) {\n return;\n }\n item.permissions[viewKey] = true;\n }\n\n private emitItemsChange(): void {\n if (this.autoLockView) {\n this.items.forEach(item => this.syncViewPermission(item));\n }\n this.itemsChange.emit([...this.items]);\n }\n\n trackByItem(index: number, item: PermissionMatrixItem): string | number {\n return item.id ?? index;\n }\n\n trackByPermission(index: number, permission: PermissionConfig): string {\n return permission.key;\n }\n}\n","<div class=\"permission-matrix-card\">\n <div class=\"matrix-header\">\n <h3 class=\"matrix-title\">{{ titleKey | translate }}</h3>\n <button\n class=\"expand-all-btn\"\n type=\"button\"\n (click)=\"expandAllGroups()\"\n [attr.aria-label]=\"(areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate\">\n <mat-icon class=\"expand-icon\" [class.rotated]=\"areAllExpanded()\">unfold_more</mat-icon>\n <span>{{ (areAllExpanded() ? collapseAllLabelKey : expandAllLabelKey) | translate }}</span>\n </button>\n </div>\n\n <div class=\"matrix-divider\"></div>\n\n <div class=\"matrix-accordion-list\">\n <div\n *ngFor=\"let item of items; trackBy: trackByItem\"\n class=\"matrix-accordion-item\"\n [class.expanded]=\"item.expanded\">\n\n <!-- Accordion Header -->\n <div\n class=\"accordion-header\"\n (click)=\"toggleGroup(item)\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"item.expanded\"\n (keydown.enter)=\"toggleGroup(item)\"\n (keydown.space)=\"toggleGroup(item); $event.preventDefault()\">\n <div class=\"accordion-content\">\n <h4 class=\"accordion-title\">{{ item.title }}</h4>\n <p *ngIf=\"item.description\" class=\"accordion-description\">{{ item.description }}</p>\n </div>\n <mat-icon class=\"accordion-icon\" [class.rotated]=\"item.expanded\">keyboard_arrow_down</mat-icon>\n </div>\n\n <!-- Accordion Body -->\n <ng-container *ngIf=\"item.expanded\">\n <div class=\"accordion-divider\"></div>\n <div class=\"accordion-body\">\n <!-- Permission Header Row -->\n <div class=\"permission-header-row\">\n <span class=\"permission-group-label\">{{ item.title }}</span>\n <div *ngIf=\"!hideSelectAll\" class=\"permission-separator\"></div>\n <div\n *ngIf=\"!hideSelectAll\"\n class=\"select-all-container\"\n (click)=\"$event.stopPropagation()\">\n <span class=\"select-all-label\">{{ selectAllLabelKey | translate }}</span>\n <mat-checkbox\n [checked]=\"isAllPermissionsSelected(item)\"\n [disabled]=\"readonly\"\n (change)=\"toggleSelectAll(item)\"\n color=\"primary\"\n class=\"select-all-checkbox\">\n </mat-checkbox>\n </div>\n </div>\n\n <!-- Permissions Row -->\n <div class=\"permissions-row\" (click)=\"$event.stopPropagation()\">\n <div\n *ngFor=\"let permission of permissions; trackBy: trackByPermission\"\n class=\"permission-item\">\n <mat-checkbox\n [checked]=\"isPermissionSelected(item, permission)\"\n [disabled]=\"isPermissionDisabled(item, permission)\"\n (change)=\"togglePermission(item, permission)\"\n color=\"primary\">\n </mat-checkbox>\n <span class=\"permission-label\">{{ permission.labelKey | translate }}</span>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</div>","/*\n * Public API Surface of invoiceq-lib\n */\n\nexport * from './lib/components/action-confirmation/action-confirmation.component'\nexport * from './lib/components/base-table/base-table.component'\nexport * from './lib/components/audit-log-list/audit-log.component'\nexport * from './lib/components/editable-base-table/editable-base-table.component'\nexport * from './lib/components/title-bar/title-bar.component'\nexport * from './lib/components/shared-list/shared-list.component'\nexport * from './lib/components/base-form-canvas/base-form-canvas.component'\nexport * from './lib/components/section-form-canvas/section-form-canvas.component'\nexport * from './lib/components/base-form/base-form.component'\nexport * from './lib/components/audit-log-details-dialog/audit-log-details-dialog.component'\nexport * from './lib/components/report-form/report-form.component'\nexport * from './lib/components/activity-report-form/activity-report-form.component'\nexport * from './lib/components/report-details-dialog/report-details-dialog.component'\nexport * from './lib/base-model';\nexport * from './lib/base-model/line-item.model';\nexport * from './lib/base-model/items-total.model';\nexport * from './lib/services';\nexport * from './lib/validators';\nexport * from './lib/components/base-input-dialog/base-input-dialog.component'\nexport * from './lib/components/search-bar/search-bar.component'\nexport * from './lib/components/snackbar-static/snackbar-static.component'\nexport * from './lib/components/shared/action-card/action-card.component'\nexport * from './lib/components/shared/action-button/action-button.component'\nexport * from './lib/components/action-comment/action-comment.component'\nexport * from './lib/components/item-line-editor/item-line-editor.component'\nexport * from './lib/components/permission-matrix/permission-matrix.component'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2","i4","i2.TopPanel","i5","i1.BackendService","MatOption","i3.BackendService","i8","i6","i4.BackendService","MatFormField","moment","i7","i9","MatLabel","i5.BackendService","NON_REPORT_COLUMNS","i2.BackendService"],"mappings":"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,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AACpG,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAA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"}