@servicemind.tis/tis-smart-table-viewer 2.2.0 → 2.3.2

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":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n extraDataSubject = new BehaviorSubject<any>(null);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.extraDataSubject.complete();\n this.loadingSubject.complete();\n\n // if(this.apiSubs) {\n // this.apiSubs.unsubscribe();\n // }\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private token = '';\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n\n if(this.token) {\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body);\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-error-dialog']);\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"gap: 10px; justify-content: start; width: 100%; align-items: center; display: flex; padding: 8px 16px;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions style=\"border-top: 1px solid rgba(0, 0, 0, 0.12); justify-content: end;\">\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.css',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n this.dialogRef.addPanelClass(['tis-create-columns-template']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title style=\"padding: 16px 24px; background-color: #e0e0e0; display: flex; justify-content: space-between; width: 100%; align-items: center;\">\n {{t?.createColumnsTemplate?.title}}\n <mat-icon (click)=\"onClose()\" style=\"cursor: pointer;\">clear</mat-icon>\n </h1>\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.templateName}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t?.createColumnsTemplate?.enterTemplateName}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"width-100 example-div\">\n <div class=\"example-item flex flex-row items-center\">\n <mat-icon cdkDragHandle style=\"cursor: pointer; color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <div style=\"display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromLeft}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromRight}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-cancel-button\" mat-dialog-close [disabled]=\"loading\">{{t?.createColumnsTemplate?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-submit-button\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t?.createColumnsTemplate?.update : t?.createColumnsTemplate?.save}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default'\n };\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns,\n columnCustomizationUrlConfig: this.columnCustomizationUrlConfig\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: this.t?.deleteColumnsTemplate?.title,\n message: this.t?.deleteColumnsTemplate?.message,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: this.t?.deleteColumnsTemplate?.yes,\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: this.t?.deleteColumnsTemplate?.no,\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.changeDisplayColumns();\n }\n }, err => this.helper.showHttpErrorMsg(err));\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n\n onMouseOverOut(event: Event, color: string) {\n const target = event.target as HTMLElement;\n target.style.color = color;\n }\n \n onMouseOut(event: Event) {\n const target = event.target as HTMLElement;\n target.style.color = `color: var(--tis-primary, var(--mat-sys-primary, #3838a2)) !important;`;\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-columns-btn\" style=\"background-color: var(--tis-light, #f5f5f5); color: black;\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span style=\"display: flex; flex-direction: row;\">\n {{selectedTemplate?.name}}\n <mat-icon style=\"width: 15px; height: 15px; font-size: 20px; line-height: 16px;\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-columns-btn-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span style=\"padding-right: 4rem;\">{{template.name}}</span>\n <mat-icon style=\"position: absolute; right: 0;\" class=\"delete-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-delete-icon, #bb333b)`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon style=\"position: absolute; right: 2rem;\" class=\"edit-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-edit-icon, var(--mat-sys-primary, #3838a2))`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider class=\"tis-mat-divider\" style=\"margin: 0px;\"></mat-divider>\n <button mat-menu-item class=\"tis-create-columns-template-button\" style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\" (click)=\"createNewTemplateDialog()\"><mat-icon style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\">add</mat-icon> {{t?.tisColumnsBtnComponent?.createNewView}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { DateTime } from \"luxon\";\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() disableBorderedView = false;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n };\n\n @Output() onDataLoaded = new EventEmitter<boolean>();\n @Output() onSetExtraData = new EventEmitter<any>();\n @Output() onSetTotal = new EventEmitter<number>();\n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n displayAfterFilterRemoved = false;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRowIds!: (number | string)[];\n @Input() selectedRowKey: string = 'id';\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n @Output() allRowsSelectedChange = new EventEmitter<boolean>(false);\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n \n @Input() isExpansion: boolean = false;\n @Input() isExpandedRow: boolean = false;\n @Input() expandedTemplate: any;\n isAllExpanded: boolean = false;\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n this.selection.changed.subscribe(change => {\n change.added.forEach(item => this.selectedIds.add(item['id']));\n change.removed.forEach(item => this.selectedIds.delete(item['id']));\n });\n\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => {\n console.log(\"== result ==\", result);\n return result.matches;\n }),\n shareReplay()\n );\n\n this.isHandset$.subscribe(r => {\n console.log('IS HANDSET:', r);\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this.route.queryParams.subscribe(qp => {\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n\n if (this.keepFilterInUrl) {\n for (const key in qp) {\n if (qp.hasOwnProperty(key) && qp[key] && qp[key] != '' && qp[key] != 'null' && qp[key] != 'undefined') {\n\n let fixedKeyMatched = false;\n\n if (key.toLowerCase() === 'pageIndex'.toLowerCase()) {\n this.pageIndex = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'pageSize'.toLowerCase()) {\n this.pageSize = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortBy'.toLowerCase()) {\n this.sortFromQueryParams.sortBy = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortOrder'.toLowerCase()) {\n this.sortFromQueryParams.sortOrder = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'search'.toLowerCase()) {\n this.search = qp[key];\n this.searchCtrl.patchValue(this.search);\n fixedKeyMatched = true;\n }\n\n\n if (key.toLowerCase().includes('date') && qp[key].length == 13) { // To Check if it is a date\n // this.filterFromQueryParams[key] = moment(Number(qp[key]));\n this.filterFromQueryParams[key] = DateTime.fromMillis(Number(qp[key]));\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n if ((qp[key]).includes(',')) {\n this.filterFromQueryParams[key] = (qp[key]).split(',');\n } else {\n this.filterFromQueryParams[key] = qp[key];\n }\n }\n\n // Transform Data, before patching in filter Form\n let mapping = this.columnsCodeMapping.find(ccm => ccm.filterFormKey == key);\n if (mapping?.transformQueryParamFn) {\n this.filterFromQueryParams[key] = mapping.transformQueryParamFn(this.filterFromQueryParams[key]);\n }\n\n }\n }\n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (this.sortFromQueryParams && this.sortFromQueryParams.sortBy && this.sortFromQueryParams.sortOrder) {\n this.sortObj = this.sortFromQueryParams;\n console.log('[table-list-view-wrapper]: Emitting Sort Obj from QP to parent component:', this.sortFromQueryParams);\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n\n\n let filterHasNonEmptyValue = Object.values(this.filterFromQueryParams).some(value => value !== null && value !== undefined && value !== '');\n if (filterHasNonEmptyValue) {\n this.filterApplied = true;\n }\n\n this.getList();\n\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n console.log(`[table-list-view-wrapper]: changes['defaultDisplayedColumns']:`, changes['defaultDisplayedColumns']);\n this.handleDisplayedColumns();\n }\n\n if (changes['columnsCodeMapping']) {\n console.log(`[table-list-view-wrapper]: changes['columnsCodeMapping']:`, changes['columnsCodeMapping']);\n\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns();\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n console.log(`[table-list-view-wrapper]: Datasource changes['loadDataApiBaseUrl'].currentValue:`, changes['loadDataApiBaseUrl'].currentValue);\n\n\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n this.dataSource = new ApiDataSource(this.apiService);\n console.log('[table-list-view-wrapper]: Datasource Initialized:', this.dataSource);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n console.log('[table-list-view-wrapper]: dataSource loading:', loading);\n if (!loading) {\n if(this._paginator){\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n this.checkAllRowsSelected();\n this.onDataLoaded.emit(true);\n this.onSetExtraData.emit(this.dataSource.extraDataSubject.value);\n // if (this.selectedRowIds && this.selectedRowIds.length) {\n // setTimeout(() => {\n // this.setSelectedRows();\n // }, 200);\n // }\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n console.log('[table-list-view-wrapper]: dataSource total:', total);\n if (total !== null) {\n this.initialLoading = false;\n this.onSetTotal.emit(total);\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = Object.values(val).some(value => value !== null && value !== undefined && value !== '');\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['selectedRowIds']) {\n this.selectedRowIds = changes['selectedRowIds'].currentValue;\n if (this.selectedRowIds && this.selectedRowIds.length) {\n this.setSelectedRows();\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n\n // this.dataSource.disconnect({} as CollectionViewer); // stops API calls\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n\n const columnsSet = new Set<string>(this.columnsCodeMapping.map(ccm => ccm.name));\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => columnsSet.has(c));\n\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c?.columnDef || c.name);\n }\n\n if (this.enableRowsSelection) {\n this.displayedColumns = ['Select', ...this.displayedColumns];\n }\n\n if (this.enableDragNDrop) {\n this.displayedColumns = ['drag', ...this.displayedColumns];\n }\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n let pathname = window.location.pathname;\n // console.log(\"=== app-table-list-view-wrapper :: pathname ===\", pathname);\n this.homeUrl = `/${pathname.split('/')[1]}`;\n }\n\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return null;\n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj && obj[path] ? obj[path] : null;\n }\n // Otherwise, traverse the nested properties\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n\n data.forEach(item => {\n\n if (item.formControlType == 'input') {\n // Do Nothing...\n }\n if (item.formControlType == 'checkbox') {\n // Do Nothing...\n }\n if (item.formControlType == 'date') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy');\n }\n if (item.formControlType == 'date-time') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy HH:mm');\n }\n\n const key = `${item.formControlName}-${item.formControlType}`;\n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n const isSingleValue = item.isSingleValue ?? ['input', 'radio', 'date', 'date-time', 'toggle'].includes(item.formControlType);\n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => x.value === item.value && x.valueKey === item.valueKey);\n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes(values);\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes([values]);\n }\n\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => sfv.formControlName != currentFormControlName);\n\n this.selectedFilterGroupedValues.forEach(gv => {\n if (gv.formControlName = currentFormControlName) {\n gv.arrValues.forEach(v => {\n this.selectedFilterValues.push(v);\n })\n }\n })\n\n this.displayAfterFilterRemoved = true;\n\n // this.filterFromQueryParams\n this.getFinalSelectedFilterValuesToDisplay();\n\n\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = [];\n this.selectedFilterValues.forEach(sf => {\n if (Object.keys(this.filterFromQueryParams).includes(sf.formControlName)) {\n this.finalSelectedFilterValuesToDisplay.push(sf);\n }\n });\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => !(sfv.formControlName == f.formControlName && sfv.valueKey == f.valueKey));\n\n this.displayAfterFilterRemoved = true;\n \n setTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n setTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n setTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n this.isAllExpanded = false;\n const filterFormData = this.filterFormGroup?.value;\n\n let qs: any = new URLSearchParams();\n let filter: any = { ...filterFormData };\n\n if (filterFormData) {\n this.filterHasNonEmptyValue = Object.values(filterFormData).some(value => value !== null && value !== undefined && value !== '');\n } else {\n this.filterHasNonEmptyValue = false;\n }\n\n for (const key in filter) {\n if (typeof filter[key] === 'object' && (filter[key] instanceof Date || DateTime.isDateTime(filter[key]))) {\n if (filter[key] instanceof Date) {\n filter[key] = DateTime.fromJSDate(filter[key]).toMillis();\n }\n else if (DateTime.isDateTime(filter[key])) {\n filter[key] = filter[key].toMillis();\n }\n }\n }\n\n // Append All Filters from filter form\n Object.keys(filter).forEach(key => {\n if (filter[key] != null && filter[key] != '' && filter[key] != 'null' && filter[key] != 'undefined') {\n if (filter[key] === '*') {\n filter[key] = '';\n }\n qs.append(key, filter[key]);\n }\n });\n\n\n // Append sorting conditions...\n if (this.sortFromQueryParams) {\n Object.keys(this.sortFromQueryParams).forEach(key => {\n if (this.sortFromQueryParams[key] != null && this.sortFromQueryParams[key] != '' && this.sortFromQueryParams[key] != 'null' && this.sortFromQueryParams[key] != 'undefined') {\n qs.append(key, this.sortFromQueryParams[key]);\n }\n });\n }\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n qs.append(\"pageIndex\", this.pageIndex);\n qs.append(\"pageSize\", this.pageSize);\n\n if (this.search != '') {\n qs.append('search', this.search);\n }\n\n\n qs = qs.toString();\n let genUrl = this.router.url.split('?')[0] + '?' + qs;\n let currentUrl = window.location.pathname + window.location.search;\n\n if (currentUrl != genUrl) {\n if (this.keepFilterInUrl) {\n this.location.go(genUrl);\n this.filterFromQueryParams = this.getQueryParams(window.location.href);\n }\n } else {}\n\n this.dataSource.load(this.loadDataApiBaseUrl, this.pageIndex, this.pageSize, this.search, filter, this.sortObj);\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onChangeDisplayColumns(columns: string[]) {\n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns();\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n if (url) {\n this.router.navigateByUrl(url);\n }\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n this.allRowsSelectedChange.emit(this.isAllRowsSelected);\n }\n\n\n toggleAllRows(): void {\n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n this.selection.select(row);\n });\n }\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n return this.selectedIds.has(row['id']);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string]; // Cast as string because we know it's not an array here\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value); // Cast as string[] to use array methods\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n getRowBackground(row: any): string | null {\n return this.rowsConfig.backgroundApplyFunction\n ? this.rowsConfig.backgroundApplyFunction(row)\n : null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n if (config?.btnClick) {\n config.btnClick();\n } else if (config?.btnUrl) {\n this.goToUrl(config.btnUrl);\n }\n }\n\n handleSecondButtonClick(config: any) {\n if (config?.secondBtnClick) {\n config.secondBtnClick();\n } else if (config?.secondBtnUrl) {\n this.goToUrl(config.secondBtnUrl);\n }\n }\n\n setSelectedRows(){\n this.selection.clear();\n this.dataSource.apiSubject.value.forEach(row => {\n if(this.selectedRowIds.indexOf(row[this.selectedRowKey]) != -1){\n this.selection.select(row);\n }\n });\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n public resetSelectedRows(){\n this.isAllRowsSelected = false;\n this.selection.clear();\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n /** Toggles the expanded state of an element. */\n public toggleExpand(element: any) {\n if(this.isExpansion){\n if(!element?.expanded){\n element.expanded = true;\n }\n else{\n element.expanded = false;\n }\n }\n }\n\n public expandAllRow(){\n if(this.isExpansion){\n this.isAllExpanded = !this.isAllExpanded;\n this.dataSource.apiSubject.value.forEach(row => {\n row.expanded = this.isAllExpanded;\n });\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t?.home}}</a></li>\n @for(breadcrumb of breadcrumbs; track breadcrumb) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection || displayAfterFilterRemoved) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track v) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" [class.tis-table-bordered]=\"disableBorderedView == false\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\" multiTemplateDataRows>\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px;\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey))?.toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px; cursor: pointer;\" (click)=\"expandAllRow()\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\" [style.border-bottom-width]=\"element.expanded ? '1px' : '0px'\" style=\"padding: 0px !important;\">\n <div class=\"tis-element-detail-wrapper\" [class.tis-element-detail-wrapper-expanded]=\"element.expanded\">\n <ng-container *ngIf=\"expandedTemplate as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colData: element }\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"tis-detail-row\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSortModule } from '@angular/material/sort';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule,\n MatSortModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableViewerComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i16","i17.ScrollingDirective","i18.TisColumnsBtnComponent","i19.TisDatePipe","i20.TisDateTimePipe","i21.TisDateTimeWithSecondsPipe"],"mappings":"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"}
1
+ {"version":3,"file":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/timeout-manager.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/date-time.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/query-params.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/filter-display.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/validation.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/collection.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/url.helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of, Subject, takeUntil } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n extraDataSubject = new BehaviorSubject<any>(null);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.extraDataSubject.complete();\n this.loadingSubject.complete();\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n\n loadWithCancellation(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object, cancelSubject?: Subject<void>) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n \n let apiCall$ = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n );\n\n // Add cancellation capability if provided\n if (cancelSubject) {\n apiCall$ = apiCall$.pipe(takeUntil(cancelSubject));\n }\n\n this.apiSubs = apiCall$.subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n this.extraDataSubject.next(r?.extraData);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n private token = '';\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n\n if(this.token) {\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`, body);\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","/**\n * TimeoutManager - A utility class for managing timeouts to prevent memory leaks\n * \n * This class provides a centralized way to create, track, and clean up setTimeout calls.\n * It automatically handles cleanup when component is destroyed to prevent memory leaks.\n * \n * @example\n * ```typescript\n * export class MyComponent implements OnDestroy {\n * private timeoutManager = new TimeoutManager();\n * \n * someMethod() {\n * this.timeoutManager.createTimeout(() => {\n * console.log('Delayed execution');\n * }, 1000);\n * }\n * \n * ngOnDestroy() {\n * this.timeoutManager.clearAll(); // Clean up all pending timeouts\n * }\n * }\n * ```\n */\nexport class TimeoutManager {\n private activeTimeouts: Set<ReturnType<typeof setTimeout>> = new Set();\n\n /**\n * Creates a tracked timeout that will be automatically cleaned up\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @returns The timeout ID (same as setTimeout return value)\n */\n createTimeout(callback: () => void, delay: number): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n // Auto-remove from tracking when timeout executes naturally\n this.activeTimeouts.delete(timeoutId);\n callback();\n }, delay);\n\n // Add to tracking set\n this.activeTimeouts.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Manually clear a specific timeout\n * @param timeoutId - The timeout ID returned from createTimeout\n */\n clearTimeout(timeoutId: ReturnType<typeof setTimeout>): void {\n if (this.activeTimeouts.has(timeoutId)) {\n clearTimeout(timeoutId);\n this.activeTimeouts.delete(timeoutId);\n }\n }\n\n /**\n * Clear all pending timeouts\n * This should be called in ngOnDestroy to prevent memory leaks\n */\n clearAll(): void {\n this.activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n this.activeTimeouts.clear();\n }\n\n /**\n * Get the number of active (pending) timeouts\n * Useful for debugging and testing\n */\n get activeCount(): number {\n return this.activeTimeouts.size;\n }\n\n /**\n * Check if a specific timeout is still active\n * @param timeoutId - The timeout ID to check\n */\n isActive(timeoutId: ReturnType<typeof setTimeout>): boolean {\n return this.activeTimeouts.has(timeoutId);\n }\n}\n\n/**\n * Static helper functions for one-off timeout usage\n * Use the TimeoutManager class for more comprehensive timeout management\n */\nexport class TimeoutHelper {\n /**\n * Create a single tracked timeout with external cleanup responsibility\n * @param callback - Function to execute after delay\n * @param delay - Delay in milliseconds\n * @param trackingSet - Set to track the timeout for cleanup\n * @returns The timeout ID\n */\n static createTrackedTimeout(\n callback: () => void, \n delay: number,\n trackingSet: Set<ReturnType<typeof setTimeout>>\n ): ReturnType<typeof setTimeout> {\n const timeoutId = setTimeout(() => {\n trackingSet.delete(timeoutId);\n callback();\n }, delay);\n \n trackingSet.add(timeoutId);\n return timeoutId;\n }\n\n /**\n * Clear all timeouts in a tracking set\n * @param trackingSet - Set containing timeout IDs to clear\n */\n static clearAllTimeouts(trackingSet: Set<ReturnType<typeof setTimeout>>): void {\n trackingSet.forEach(timeoutId => clearTimeout(timeoutId));\n trackingSet.clear();\n }\n}\n","import { DateTime } from 'luxon';\n\n/**\n * Centralized date/time utility helper for consistent date handling across the library.\n * Provides common date formatting and conversion functions to avoid code duplication.\n */\nexport class DateTimeHelper {\n \n /**\n * Formats a date value for display based on form control type\n * @param value - The date value (Date, DateTime, string, number)\n * @param formControlType - The type of form control ('date', 'date-time', etc.)\n * @returns Formatted date string\n */\n static formatForDisplay(value: any, formControlType: string): string {\n if (!value) return '';\n \n const dateTime = this.toDateTime(value);\n if (!dateTime?.isValid) return '';\n \n switch (formControlType) {\n case 'date':\n return dateTime.toFormat('dd-MM-yyyy');\n case 'date-time':\n return dateTime.toFormat('dd-MM-yyyy HH:mm');\n case 'date-time-with-seconds':\n return dateTime.toFormat('dd-MM-yyyy HH:mm:ss');\n default:\n return dateTime.toFormat('dd-MM-yyyy');\n }\n }\n \n /**\n * Converts various date formats to DateTime object\n * @param value - Date value in various formats\n * @returns DateTime object or null if invalid\n */\n static toDateTime(value: any): DateTime | null {\n if (!value) return null;\n \n if (DateTime.isDateTime(value)) {\n return value;\n }\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value);\n }\n \n if (typeof value === 'string' && value !== '') {\n // Try parsing as milliseconds first (if numeric string)\n const numValue = Number(value);\n if (!isNaN(numValue) && numValue > 0) {\n return DateTime.fromMillis(numValue);\n }\n // Try parsing as ISO string\n return DateTime.fromISO(value);\n }\n \n if (typeof value === 'number') {\n return DateTime.fromMillis(value);\n }\n \n return null;\n }\n \n /**\n * Converts date/DateTime objects to milliseconds for API calls\n * @param value - Date value\n * @returns Milliseconds or original value if not a date\n */\n static toMilliseconds(value: any): any {\n if (!value) return value;\n \n if (value instanceof Date) {\n return DateTime.fromJSDate(value).toMillis();\n }\n \n if (DateTime.isDateTime(value)) {\n return value.toMillis();\n }\n \n return value;\n }\n \n /**\n * Checks if a query parameter key represents a date field\n * @param key - Query parameter key\n * @param value - Query parameter value\n * @returns True if it's a date field\n */\n static isDateQueryParam(key: string, value: string): boolean {\n return key.toLowerCase().includes('date') && value.length === 13;\n }\n \n /**\n * Parses date from query parameters\n * @param value - Query parameter value (milliseconds as string)\n * @returns DateTime object\n */\n static parseFromQueryParam(value: string): DateTime {\n return DateTime.fromMillis(Number(value));\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\n\n/**\n * Centralized query parameter utility helper for consistent URL parameter handling.\n * Provides common functions for parsing, validating, and transforming query parameters.\n */\nexport class QueryParamsHelper {\n \n /**\n * Parses query parameters from URL and handles type conversions\n * @param url - Full URL string\n * @returns Parsed query parameters object\n */\n static parseQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string];\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value);\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n \n /**\n * Checks if a query parameter value is valid (not empty, null, or undefined)\n * @param value - Query parameter value\n * @returns True if valid\n */\n static isValidParam(value: any): boolean {\n return value && value !== '' && value !== 'null' && value !== 'undefined';\n }\n \n /**\n * Processes a query parameter value and handles arrays\n * @param value - Raw query parameter value\n * @returns Processed value (string or array)\n */\n static processParamValue(value: string): string | string[] {\n if (value.includes(',')) {\n return value.split(',');\n }\n return value;\n }\n \n /**\n * Processes query parameters for filter form with type conversions\n * @param queryParams - Raw query parameters\n * @param columnsCodeMapping - Column mapping for transformations\n * @returns Processed filter and sort objects\n */\n static processForFilters(\n queryParams: any, \n columnsCodeMapping: any[]\n ): { filterParams: any; sortParams: any; pageIndex: number; pageSize: number; search: string } {\n const filterParams: any = {};\n const sortParams: any = {};\n let pageIndex = 0;\n let pageSize = 10;\n let search = '';\n\n for (const key in queryParams) {\n if (!this.isValidParam(queryParams[key])) continue;\n\n let fixedKeyMatched = false;\n const value = queryParams[key];\n\n // Handle fixed parameters\n if (key.toLowerCase() === 'pageindex') {\n pageIndex = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'pagesize') {\n pageSize = Number(value);\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortby') {\n sortParams.sortBy = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'sortorder') {\n sortParams.sortOrder = value;\n fixedKeyMatched = true;\n } else if (key.toLowerCase() === 'search') {\n search = value;\n fixedKeyMatched = true;\n } else if (DateTimeHelper.isDateQueryParam(key, value)) {\n // Handle date parameters\n filterParams[key] = DateTimeHelper.parseFromQueryParam(value);\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n filterParams[key] = this.processParamValue(value);\n \n // Apply transformation if mapping exists\n const mapping = columnsCodeMapping.find(ccm => ccm.filterFormKey === key);\n if (mapping?.transformQueryParamFn) {\n filterParams[key] = mapping.transformQueryParamFn(filterParams[key]);\n }\n }\n }\n\n return { filterParams, sortParams, pageIndex, pageSize, search };\n }\n \n /**\n * Builds query string from filter data with proper encoding\n * @param filterData - Filter form data\n * @param sortParams - Sort parameters\n * @param pageIndex - Current page index\n * @param pageSize - Current page size \n * @param search - Search term\n * @returns URLSearchParams object\n */\n static buildQueryString(\n filterData: any, \n sortParams: any, \n pageIndex: number, \n pageSize: number, \n search: string\n ): URLSearchParams {\n const qs = new URLSearchParams();\n \n // Process filter data\n if (filterData) {\n const processedFilter = { ...filterData };\n \n // Convert date objects to milliseconds\n for (const key in processedFilter) {\n processedFilter[key] = DateTimeHelper.toMilliseconds(processedFilter[key]);\n }\n \n // Append filter parameters\n Object.keys(processedFilter).forEach(key => {\n const value = processedFilter[key];\n if (this.isValidParam(value)) {\n if (value === '*') {\n qs.append(key, '');\n } else {\n qs.append(key, value);\n }\n }\n });\n }\n \n // Append sort parameters\n if (sortParams) {\n Object.keys(sortParams).forEach(key => {\n if (this.isValidParam(sortParams[key])) {\n qs.append(key, sortParams[key]);\n }\n });\n }\n \n // Append pagination and search\n qs.append('pageIndex', pageIndex.toString());\n qs.append('pageSize', pageSize.toString());\n \n if (search !== '') {\n qs.append('search', search);\n }\n \n return qs;\n }\n}\n","import { DateTimeHelper } from './date-time.helper';\nimport type { \n SelectedFilterDisplayValueType, \n SelectedFiltersGroupedValuesType,\n SelectedFilterDisplayValuesType \n} from '../interfaces';\n\n/**\n * Centralized filter display utility helper for managing filter value formatting and grouping.\n * Handles the complex logic of grouping and displaying filter values in a consistent manner.\n */\nexport class FilterDisplayHelper {\n \n /**\n * Formats filter values based on form control type for display\n * @param items - Array of filter display values\n * @returns Processed array with formatted display values\n */\n static formatFilterValuesForDisplay(items: SelectedFilterDisplayValueType[]): SelectedFilterDisplayValueType[] {\n return items.map(item => {\n const processedItem = { ...item };\n \n // Handle different form control types\n switch (item.formControlType) {\n case 'input':\n case 'checkbox':\n // No special formatting needed\n break;\n case 'date':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date');\n break;\n case 'date-time':\n processedItem.valueKey = DateTimeHelper.formatForDisplay(item.value, 'date-time');\n break;\n default:\n // Keep original valueKey if no special handling needed\n break;\n }\n \n return processedItem;\n });\n }\n \n /**\n * Groups filter values by form control attributes\n * @param data - Array of filter display values\n * @returns Grouped filter values\n */\n static groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n \n // First format the data for display\n const formattedData = this.formatFilterValuesForDisplay(data);\n\n formattedData.forEach(item => {\n const key = `${item.formControlName}-${item.formControlType}`;\n \n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n \n const isSingleValue = this.isSingleValueFormControl(item.formControlType, item.isSingleValue);\n \n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => \n x.value === item.value && x.valueKey === item.valueKey\n );\n \n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n \n /**\n * Determines if a form control should only have single values\n * @param formControlType - Type of form control\n * @param explicitSingleValue - Explicit single value flag\n * @returns True if single value control\n */\n static isSingleValueFormControl(formControlType: string, explicitSingleValue?: boolean): boolean {\n if (explicitSingleValue !== undefined) {\n return explicitSingleValue;\n }\n \n return ['input', 'radio', 'date', 'date-time', 'toggle'].includes(formControlType);\n }\n \n /**\n * Updates selected filter values by replacing values for a specific form control\n * @param currentValues - Current selected filter values\n * @param newValues - New values to add/update\n * @param formControlName - Name of the form control being updated\n * @returns Updated filter values and grouped values\n */\n static updateSelectedFilterValues(\n currentValues: SelectedFilterDisplayValuesType,\n newValues: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType,\n formControlName?: string\n ): { \n selectedFilterValues: SelectedFilterDisplayValuesType;\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[];\n } {\n let targetFormControlName: string;\n let newValuesArray: SelectedFilterDisplayValueType[];\n \n if (Array.isArray(newValues)) {\n newValuesArray = newValues;\n targetFormControlName = formControlName || newValues[0]?.formControlName;\n } else {\n newValuesArray = [newValues];\n targetFormControlName = formControlName || newValues?.formControlName;\n }\n \n // Remove existing values for this form control\n const filteredValues = currentValues.filter(\n sfv => sfv.formControlName !== targetFormControlName\n );\n \n // Group the new values\n const newGroupedValues = this.groupByFormControlAttributes(newValuesArray);\n \n // Add new values for the target form control\n newGroupedValues.forEach(gv => {\n if (gv.formControlName === targetFormControlName) {\n gv.arrValues.forEach(v => {\n filteredValues.push(v);\n });\n }\n });\n \n // Return updated values and all grouped values\n const allGroupedValues = this.groupByFormControlAttributes(filteredValues);\n \n return {\n selectedFilterValues: filteredValues,\n selectedFilterGroupedValues: allGroupedValues\n };\n }\n \n /**\n * Filters selected values to only show those present in query parameters\n * @param selectedValues - All selected filter values\n * @param queryParams - Current query parameters\n * @returns Filtered values for display\n */\n static getValuesForDisplay(\n selectedValues: SelectedFilterDisplayValuesType,\n queryParams: any\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sf => queryParams.hasOwnProperty(sf.formControlName));\n }\n \n /**\n * Removes a specific filter value from the collection\n * @param selectedValues - Current selected filter values\n * @param filterToRemove - Filter value to remove\n * @returns Updated filter values\n */\n static removeFilterValue(\n selectedValues: SelectedFilterDisplayValuesType,\n filterToRemove: SelectedFilterDisplayValueType\n ): SelectedFilterDisplayValuesType {\n return selectedValues.filter(sfv => \n !(sfv.formControlName === filterToRemove.formControlName && \n sfv.valueKey === filterToRemove.valueKey)\n );\n }\n}\n","/**\n * Centralized validation utility helper for common validation tasks.\n * Provides reusable validation functions to avoid code duplication.\n */\nexport class ValidationHelper {\n \n /**\n * Checks if a value is not null, undefined, or empty string\n * @param value - Value to check\n * @returns True if value has content\n */\n static hasValue(value: any): boolean {\n return value !== null && value !== undefined && value !== '';\n }\n \n /**\n * Checks if any values in an object are non-empty\n * @param obj - Object to check\n * @returns True if any value is non-empty\n */\n static hasNonEmptyValue(obj: any): boolean {\n if (!obj) return false;\n return Object.values(obj).some(value => this.hasValue(value));\n }\n \n /**\n * Checks if a form has any non-empty values\n * @param formData - Form data object\n * @returns True if form has any data\n */\n static hasFormData(formData: any): boolean {\n if (!formData) return false;\n return this.hasNonEmptyValue(formData);\n }\n \n /**\n * Validates if an array has items\n * @param array - Array to check\n * @returns True if array exists and has items\n */\n static hasItems(array: any[]): boolean {\n return Array.isArray(array) && array.length > 0;\n }\n \n /**\n * Checks if a URL is valid\n * @param url - URL string to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Validates if a string is a valid number\n * @param value - Value to check\n * @returns True if value is a valid number\n */\n static isValidNumber(value: any): boolean {\n return !isNaN(Number(value)) && isFinite(Number(value));\n }\n \n /**\n * Checks if an object has a specific property with a valid value\n * @param obj - Object to check\n * @param property - Property name\n * @returns True if property exists and has a value\n */\n static hasProperty(obj: any, property: string): boolean {\n return obj && obj.hasOwnProperty(property) && this.hasValue(obj[property]);\n }\n \n /**\n * Validates if a selection model row has the required key\n * @param row - Row object\n * @param keyName - Key property name\n * @returns True if row has the key property with a value\n */\n static hasRowKey(row: any, keyName: string): boolean {\n return row && this.hasProperty(row, keyName);\n }\n \n /**\n * Checks if a filter value should be processed (not null, empty, or invalid)\n * @param value - Filter value\n * @returns True if filter value is valid for processing\n */\n static isValidFilterValue(value: any): boolean {\n if (!this.hasValue(value)) return false;\n \n // Check for common invalid filter values\n const invalidValues = ['null', 'undefined', '*'];\n if (typeof value === 'string' && invalidValues.includes(value)) {\n return value === '*'; // Special case: '*' is valid but gets converted to empty string\n }\n \n return true;\n }\n \n /**\n * Validates pagination parameters\n * @param pageIndex - Page index\n * @param pageSize - Page size\n * @returns Object with validation results\n */\n static validatePagination(pageIndex: any, pageSize: any): { \n isValid: boolean; \n pageIndex: number; \n pageSize: number; \n } {\n const validPageIndex = this.isValidNumber(pageIndex) ? Number(pageIndex) : 0;\n const validPageSize = this.isValidNumber(pageSize) ? Number(pageSize) : 10;\n \n return {\n isValid: validPageIndex >= 0 && validPageSize > 0,\n pageIndex: Math.max(0, validPageIndex),\n pageSize: Math.max(1, validPageSize)\n };\n }\n}\n","/**\n * Centralized collection management utility helper for common array and object operations.\n * Provides reusable functions for managing collections, selections, and data structures.\n */\nexport class CollectionHelper {\n \n /**\n * Safely clears an array if it exists\n * @param array - Array to clear\n */\n static clearArray(array: any[]): void {\n if (Array.isArray(array)) {\n array.length = 0;\n }\n }\n \n /**\n * Safely clears a Set if it exists\n * @param set - Set to clear\n */\n static clearSet(set: Set<any>): void {\n if (set instanceof Set) {\n set.clear();\n }\n }\n \n /**\n * Safely clears a Map if it exists\n * @param map - Map to clear\n */\n static clearMap(map: Map<any, any>): void {\n if (map instanceof Map) {\n map.clear();\n }\n }\n \n /**\n * Gets a consistent identifier for a row based on available keys\n * @param row - Row object\n * @param primaryKey - Primary key property name (default: 'id')\n * @param fallbackKey - Fallback key property name\n * @returns Row identifier or JSON string as last resort\n */\n static getRowIdentifier(row: any, primaryKey: string = 'id', fallbackKey?: string): string | number {\n if (!row) return '';\n \n // Try primary key first\n if (row[primaryKey] !== undefined && row[primaryKey] !== null) {\n return row[primaryKey];\n }\n \n // Try fallback key if provided\n if (fallbackKey && row[fallbackKey] !== undefined && row[fallbackKey] !== null) {\n return row[fallbackKey];\n }\n \n // Last resort: stringify the object (not recommended for large objects)\n return JSON.stringify(row);\n }\n \n /**\n * Creates a hash from an array of objects for cache validation\n * @param items - Array of items to hash\n * @param keyExtractor - Function to extract key from each item\n * @returns Hash string\n */\n static createArrayHash<T>(items: T[], keyExtractor: (item: T) => string): string {\n if (!Array.isArray(items)) return '';\n return JSON.stringify(items.map(keyExtractor));\n }\n \n /**\n * Safely filters an array with predicate function\n * @param array - Array to filter\n * @param predicate - Filter predicate function\n * @returns Filtered array or empty array if input is invalid\n */\n static safeFilter<T>(array: T[], predicate: (item: T) => boolean): T[] {\n if (!Array.isArray(array)) return [];\n return array.filter(predicate);\n }\n \n /**\n * Safely maps an array with transform function\n * @param array - Array to map\n * @param transform - Transform function\n * @returns Mapped array or empty array if input is invalid\n */\n static safeMap<T, U>(array: T[], transform: (item: T) => U): U[] {\n if (!Array.isArray(array)) return [];\n return array.map(transform);\n }\n \n /**\n * Safely finds an item in array\n * @param array - Array to search\n * @param predicate - Find predicate function\n * @returns Found item or undefined\n */\n static safeFind<T>(array: T[], predicate: (item: T) => boolean): T | undefined {\n if (!Array.isArray(array)) return undefined;\n return array.find(predicate);\n }\n \n /**\n * Creates a Map from an array for O(1) lookups\n * @param array - Array to convert\n * @param keyExtractor - Function to extract key from each item\n * @returns Map with keys and items\n */\n static createLookupMap<T>(array: T[], keyExtractor: (item: T) => string): Map<string, T> {\n const map = new Map<string, T>();\n if (!Array.isArray(array)) return map;\n \n array.forEach(item => {\n const key = keyExtractor(item);\n map.set(key, item);\n });\n \n return map;\n }\n \n /**\n * Checks if two arrays have the same items (order doesn't matter)\n * @param array1 - First array\n * @param array2 - Second array\n * @param keyExtractor - Function to extract comparison key\n * @returns True if arrays contain same items\n */\n static arraysEqual<T>(\n array1: T[], \n array2: T[], \n keyExtractor?: (item: T) => any\n ): boolean {\n if (!Array.isArray(array1) || !Array.isArray(array2)) return false;\n if (array1.length !== array2.length) return false;\n \n if (keyExtractor) {\n const keys1 = array1.map(keyExtractor).sort();\n const keys2 = array2.map(keyExtractor).sort();\n return JSON.stringify(keys1) === JSON.stringify(keys2);\n } else {\n return JSON.stringify([...array1].sort()) === JSON.stringify([...array2].sort());\n }\n }\n \n /**\n * Safely removes items from a Set based on a predicate\n * @param set - Set to modify\n * @param predicate - Function to determine if item should be removed\n */\n static removeFromSet<T>(set: Set<T>, predicate: (item: T) => boolean): void {\n if (!(set instanceof Set)) return;\n \n const itemsToRemove: T[] = [];\n set.forEach(item => {\n if (predicate(item)) {\n itemsToRemove.push(item);\n }\n });\n \n itemsToRemove.forEach(item => set.delete(item));\n }\n \n /**\n * Safely clones an array to prevent mutation issues\n * @param array - Array to clone\n * @returns Cloned array or empty array if input is invalid\n */\n static cloneArray<T>(array: T[]): T[] {\n if (!Array.isArray(array)) return [];\n return [...array];\n }\n \n /**\n * Performs safe property access with default value\n * @param obj - Object to access\n * @param path - Property path (e.g., 'user.profile.name')\n * @param defaultValue - Default value if property doesn't exist\n * @returns Property value or default\n */\n static getNestedProperty(obj: any, path: string, defaultValue: any = null): any {\n if (!obj || !path) return defaultValue;\n \n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj[path] !== undefined ? obj[path] : defaultValue;\n }\n \n // Otherwise, traverse the nested properties\n try {\n return path.split('.').reduce((acc, part) => {\n return acc && acc[part] !== undefined ? acc[part] : defaultValue;\n }, obj);\n } catch {\n return defaultValue;\n }\n }\n}\n","import { Location } from '@angular/common';\nimport { Router } from '@angular/router';\n\n/**\n * Centralized URL and navigation utility helper.\n * Provides common functions for URL manipulation and navigation.\n */\nexport class UrlHelper {\n \n /**\n * Extracts the home URL from current window location\n * @returns Home URL path\n */\n static getHomeUrl(): string {\n const pathname = window.location.pathname;\n return `/${pathname.split('/')[1]}`;\n }\n \n /**\n * Safely navigates to a URL if it's valid\n * @param router - Angular Router instance\n * @param url - URL to navigate to\n * @returns Promise<boolean> - Navigation result\n */\n static safeNavigate(router: Router, url: string): Promise<boolean> | null {\n if (!url || typeof url !== 'string') {\n return null;\n }\n \n try {\n return router.navigateByUrl(url);\n } catch (error) {\n console.warn('Navigation error:', error);\n return null;\n }\n }\n \n /**\n * Updates the browser URL without navigation using Location service\n * @param location - Angular Location service\n * @param baseUrl - Base URL path\n * @param queryString - Query string parameters\n */\n static updateUrl(location: Location, baseUrl: string, queryString: string): void {\n const newUrl = `${baseUrl}?${queryString}`;\n const currentUrl = window.location.pathname + window.location.search;\n \n if (currentUrl !== newUrl) {\n location.go(newUrl);\n }\n }\n \n /**\n * Builds a complete URL with query parameters\n * @param baseUrl - Base URL path\n * @param queryParams - URLSearchParams object\n * @returns Complete URL string\n */\n static buildUrl(baseUrl: string, queryParams: URLSearchParams): string {\n const queryString = queryParams.toString();\n return queryString ? `${baseUrl}?${queryString}` : baseUrl;\n }\n \n /**\n * Gets the base URL without query parameters\n * @param router - Angular Router instance\n * @returns Base URL string\n */\n static getBaseUrl(router: Router): string {\n return router.url.split('?')[0];\n }\n \n /**\n * Checks if current URL differs from generated URL\n * @param generatedUrl - Generated URL to compare\n * @returns True if URLs are different\n */\n static hasUrlChanged(generatedUrl: string): boolean {\n const currentUrl = window.location.pathname + window.location.search;\n return currentUrl !== generatedUrl;\n }\n \n /**\n * Extracts query parameters from a URL string\n * @param url - Full URL string\n * @returns URLSearchParams object\n */\n static extractQueryParams(url: string): URLSearchParams | null {\n try {\n const urlObj = new URL(url);\n return new URLSearchParams(urlObj.search);\n } catch (error) {\n console.warn('Invalid URL for query param extraction:', url);\n return null;\n }\n }\n \n /**\n * Handles button click actions (URL navigation or callback execution)\n * @param router - Angular Router instance\n * @param config - Button configuration object\n * @param primaryUrlKey - Primary URL property name (default: 'btnUrl')\n * @param primaryClickKey - Primary click handler property name (default: 'btnClick')\n */\n static handleButtonClick(\n router: Router, \n config: any, \n primaryUrlKey: string = 'btnUrl',\n primaryClickKey: string = 'btnClick'\n ): void {\n if (!config) return;\n \n // Try callback first\n if (config[primaryClickKey] && typeof config[primaryClickKey] === 'function') {\n try {\n config[primaryClickKey]();\n } catch (error) {\n console.warn('Error executing button callback:', error);\n }\n } \n // Fallback to URL navigation\n else if (config[primaryUrlKey]) {\n this.safeNavigate(router, config[primaryUrlKey]);\n }\n }\n \n /**\n * Handles secondary button click actions\n * @param router - Angular Router instance\n * @param config - Button configuration object\n */\n static handleSecondaryButtonClick(router: Router, config: any): void {\n this.handleButtonClick(router, config, 'secondBtnUrl', 'secondBtnClick');\n }\n \n /**\n * Validates if a URL string is properly formatted\n * @param url - URL to validate\n * @returns True if URL is valid\n */\n static isValidUrl(url: string): boolean {\n if (!url || typeof url !== 'string') return false;\n \n try {\n // Allow relative URLs starting with '/'\n if (url.startsWith('/')) return true;\n \n // Validate absolute URLs\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n \n /**\n * Safely encodes URL parameters\n * @param value - Value to encode\n * @returns Encoded string\n */\n static encodeParam(value: any): string {\n if (value === null || value === undefined) return '';\n return encodeURIComponent(String(value));\n }\n}\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n private token = '';\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.put(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n if(this.token) {\n return this.http.get(`${url}?listComponent=${listComponent}`, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n if(this.token) {\n return this.http.post(`${url}`, body, {\n headers: {\n 'Authorization': `Bearer ${this.token}`\n }\n });\n }\n\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-error-dialog']);\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"gap: 10px; justify-content: start; width: 100%; align-items: center; display: flex; padding: 8px 16px;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions style=\"border-top: 1px solid rgba(0, 0, 0, 0.12); justify-content: end;\">\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.css',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n this.dialogRef.addPanelClass(['tis-create-columns-template']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title style=\"padding: 16px 24px; background-color: #e0e0e0; display: flex; justify-content: space-between; width: 100%; align-items: center;\">\n {{t?.createColumnsTemplate?.title}}\n <mat-icon (click)=\"onClose()\" style=\"cursor: pointer;\">clear</mat-icon>\n </h1>\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.templateName}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t?.createColumnsTemplate?.enterTemplateName}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"width-100 example-div\">\n <div class=\"example-item flex flex-row items-center\">\n <mat-icon cdkDragHandle style=\"cursor: pointer; color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <div style=\"display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromLeft}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromRight}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-cancel-button\" mat-dialog-close [disabled]=\"loading\">{{t?.createColumnsTemplate?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-submit-button\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t?.createColumnsTemplate?.update : t?.createColumnsTemplate?.save}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n @Input() selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n @Output() selectedTemplateChange = new EventEmitter();\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns,\n columnCustomizationUrlConfig: this.columnCustomizationUrlConfig\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n this.selectedTemplateChange.emit(this.selectedTemplate);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: this.t?.deleteColumnsTemplate?.title,\n message: this.t?.deleteColumnsTemplate?.message,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: this.t?.deleteColumnsTemplate?.yes,\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: this.t?.deleteColumnsTemplate?.no,\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.changeDisplayColumns();\n }\n }, err => this.helper.showHttpErrorMsg(err));\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n this.selectedTemplateChange.emit(this.selectedTemplate);\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n\n onMouseOverOut(event: Event, color: string) {\n const target = event.target as HTMLElement;\n target.style.color = color;\n }\n \n onMouseOut(event: Event) {\n const target = event.target as HTMLElement;\n target.style.color = `color: var(--tis-primary, var(--mat-sys-primary, #3838a2)) !important;`;\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-columns-btn\" style=\"background-color: var(--tis-light, #f5f5f5); color: black;\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span style=\"display: flex; flex-direction: row;\">\n {{selectedTemplate?.name}}\n <mat-icon style=\"width: 15px; height: 15px; font-size: 20px; line-height: 16px;\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-columns-btn-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span style=\"padding-right: 4rem;\">{{template.name}}</span>\n <mat-icon style=\"position: absolute; right: 0;\" class=\"delete-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-delete-icon, #bb333b)`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon style=\"position: absolute; right: 2rem;\" class=\"edit-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-edit-icon, var(--mat-sys-primary, #3838a2))`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider class=\"tis-mat-divider\" style=\"margin: 0px;\"></mat-divider>\n <button mat-menu-item class=\"tis-create-columns-template-button\" style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\" (click)=\"createNewTemplateDialog()\"><mat-icon style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\">add</mat-icon> {{t?.tisColumnsBtnComponent?.createNewView}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (value === null || value === undefined) {\n return '';\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild, OnDestroy } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { CollectionViewer, SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { TimeoutManager } from '../../helpers/timeout-manager.helper';\nimport { QueryParamsHelper } from '../../helpers/query-params.helper';\nimport { FilterDisplayHelper } from '../../helpers/filter-display.helper';\nimport { ValidationHelper } from '../../helpers/validation.helper';\nimport { CollectionHelper } from '../../helpers/collection.helper';\nimport { UrlHelper } from '../../helpers/url.helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent implements OnDestroy {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() disableBorderedView = false;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n };\n\n @Output() onDataLoaded = new EventEmitter<boolean>();\n @Output() onSetExtraData = new EventEmitter<any>();\n @Output() onSetTotal = new EventEmitter<number>();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n displayAfterFilterRemoved = false;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n // Additional subscriptions that need cleanup\n private _selectionSubscription!: Subscription;\n private _handsetSubscription!: Subscription;\n private _queryParamsSubscription!: Subscription;\n\n // Memory-efficient caching\n private _columnMappingCache: Map<string, SmartTableWrapperColumnsConfig> = new Map();\n private _displayedColumnsCache: string[] = [];\n private _lastColumnsCodeMappingHash: string = '';\n\n // Race condition prevention\n private _currentRequestSubject = new Subject<void>();\n \n // Timeout management for proper cleanup - prevent memory leaks\n private timeoutManager = new TimeoutManager();\n \n // Computed row backgrounds for optimal performance\n private computedRowBackgrounds = new Map<string, string | null>();\n \n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRowIds!: (number | string)[];\n @Input() selectedRowKey: string = 'id';\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n @Output() allRowsSelectedChange = new EventEmitter<boolean>(false);\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n \n @Input() isExpansion: boolean = false;\n @Input() isExpandedRow: boolean = false;\n @Input() expandedTemplate: any;\n isAllExpanded: boolean = false;\n \n // Expansion state management - avoid direct mutation\n private expandedRowIds: Set<string | number> = new Set();\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n // Store subscription reference for proper cleanup\n this._selectionSubscription = this.selection.changed.subscribe(change => {\n change.added.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.add(item[this.selectedRowKey]);\n }\n });\n change.removed.forEach(item => {\n if (item && item[this.selectedRowKey] !== undefined) {\n this.selectedIds.delete(item[this.selectedRowKey]);\n }\n });\n });\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => result.matches),\n shareReplay()\n );\n\n this._handsetSubscription = this.isHandset$.subscribe(r => {\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this._queryParamsSubscription = this.route.queryParams.subscribe(qp => {\n // Initialize objects\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n \n if (this.keepFilterInUrl) {\n const { filterParams, sortParams, pageIndex, pageSize, search } = \n QueryParamsHelper.processForFilters(qp, this.columnsCodeMapping);\n \n this.filterFromQueryParams = filterParams;\n this.sortFromQueryParams = sortParams;\n this.pageIndex = pageIndex;\n this.pageSize = pageSize;\n this.search = search;\n this.searchCtrl.patchValue(this.search);\n \n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortBy') && \n ValidationHelper.hasProperty(this.sortFromQueryParams, 'sortOrder')) {\n this.sortObj = this.sortFromQueryParams;\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n this.filterApplied = ValidationHelper.hasNonEmptyValue(this.filterFromQueryParams);\n this.getList();\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n // console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n this.handleDisplayedColumns('defaultDisplayedColumns');\n }\n\n if (changes['columnsCodeMapping']) {\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns('columnsCodeMapping');\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n this.dataSource = new ApiDataSource(this.apiService);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n if (!loading) {\n if(this._paginator){\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n // Clear background cache when new data arrives\n this.clearRowBackgroundCache();\n // Pre-compute all row backgrounds for optimal performance\n this.computeAllRowBackgrounds();\n \n this.checkAllRowsSelected();\n this.onDataLoaded.emit(true);\n this.onSetExtraData.emit(this.dataSource.extraDataSubject.value);\n // if (this.selectedRowIds && this.selectedRowIds.length) {\n // setTimeout(() => {\n // this.setSelectedRows();\n // }, 200);\n // }\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n if (total !== null) {\n this.initialLoading = false;\n this.onSetTotal.emit(total);\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = ValidationHelper.hasNonEmptyValue(val);\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['selectedRowIds']) {\n this.selectedRowIds = changes['selectedRowIds'].currentValue;\n if (this.selectedRowIds && this.selectedRowIds.length) {\n this.setSelectedRows();\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n // Complete the destroy subject first to trigger takeUntil operators\n this._onDestroy.next();\n this._onDestroy.complete();\n\n // Clean up all subscriptions\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n \n // Clean up additional subscriptions\n this._selectionSubscription?.unsubscribe();\n this._handsetSubscription?.unsubscribe();\n this._queryParamsSubscription?.unsubscribe();\n\n // Clean up selection model and data structures using CollectionHelper\n this.selection.clear();\n CollectionHelper.clearSet(this.selectedIds);\n CollectionHelper.clearSet(this.expandedRowIds);\n \n // Clear arrays to free memory using CollectionHelper\n CollectionHelper.clearArray(this.selectedFilterValues);\n CollectionHelper.clearArray(this.finalSelectedFilterValuesToDisplay);\n CollectionHelper.clearArray(this.selectedFilterGroupedValues);\n CollectionHelper.clearArray(this.displayedColumns);\n \n // Clear caches to free memory\n CollectionHelper.clearMap(this._columnMappingCache);\n CollectionHelper.clearArray(this._displayedColumnsCache);\n this._lastColumnsCodeMappingHash = '';\n CollectionHelper.clearMap(this.computedRowBackgrounds);\n \n // Complete race condition prevention subject\n this._currentRequestSubject.next();\n this._currentRequestSubject.complete();\n \n // Clear all pending timeouts to prevent memory leaks\n this.timeoutManager.clearAll();\n \n // Disconnect data source to stop API calls and complete observables\n if (this.dataSource) {\n this.dataSource.disconnect({} as CollectionViewer);\n }\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns(msg: String = '') {\n\n if(this.selectedTemplate?.id > 0 && this.defaultDisplayedColumns && this.defaultDisplayedColumns.length){\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n }\n else{\n // Create a hash of current columns to check if cache is valid\n const columnsHash = JSON.stringify(this.columnsCodeMapping.map(c => c.name));\n // Use cache if columns haven't changed\n if (this._lastColumnsCodeMappingHash === columnsHash && this._displayedColumnsCache.length > 0) {\n this.displayedColumns = [...this._displayedColumnsCache];\n } else {\n // Update cache\n this.updateColumnMappingCache();\n this._lastColumnsCodeMappingHash = columnsHash;\n \n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => this._columnMappingCache.has(c));\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c?.columnDef || c.name);\n }\n \n // Cache the result before adding selection/drag columns\n this._displayedColumnsCache = [...this.displayedColumns];\n }\n }\n\n // Add selection and drag columns (these are dynamic and shouldn't be cached)\n const finalColumns = [...this.displayedColumns];\n \n if (this.enableRowsSelection) {\n finalColumns.unshift('Select');\n }\n\n if (this.enableDragNDrop) {\n finalColumns.unshift('drag');\n }\n \n console.log(`=== handleDisplayedColumns :: ${msg} :: finalColumns ===`, finalColumns);\n \n this.displayedColumns = finalColumns;\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n private updateColumnMappingCache(): void {\n this._columnMappingCache.clear();\n this.columnsCodeMapping.forEach(column => {\n this._columnMappingCache.set(column.name, column);\n });\n }\n\n // TrackBy functions for optimal rendering performance\n trackByBreadcrumb(index: number, breadcrumb: { url: string, name: string }): string {\n return breadcrumb.url + breadcrumb.name || index.toString();\n }\n\n trackByFilterValue(index: number, filterValue: SelectedFilterDisplayValueType): string {\n return `${filterValue.formControlName}_${filterValue.valueKey}_${filterValue.value}`;\n }\n\n trackByAutoColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTemplateColumn(index: number, column: SmartTableWrapperColumnsConfig): string {\n return column.name + (column.serverKeyCode || '');\n }\n\n trackByTableRow(index: number, row: any): any {\n return row.id || row[this.selectedRowKey] || index;\n }\n\n // Helper method to get consistent row identifier for expansion tracking\n private getRowIdentifier(row: any): string | number {\n return CollectionHelper.getRowIdentifier(row, 'id', this.selectedRowKey);\n }\n\n // Helper method to check if a row is expanded (non-mutating)\n public isRowExpanded(row: any): boolean {\n if (!this.isExpansion) return false;\n const rowId = this.getRowIdentifier(row);\n return this.expandedRowIds.has(rowId);\n }\n\n // Clear background cache when data changes to ensure fresh calculations\n private clearRowBackgroundCache(): void {\n this.computedRowBackgrounds.clear();\n }\n\n // Compute all row backgrounds when data changes (runs once per data load)\n private computeAllRowBackgrounds(): void {\n if (!this.dataSource?.apiSubject.value || !this.rowsConfig.backgroundApplyFunction) {\n return;\n }\n \n this.computedRowBackgrounds.clear();\n this.dataSource.apiSubject.value.forEach((row:any) => {\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n try {\n const background = this.rowsConfig.backgroundApplyFunction!(row);\n this.computedRowBackgrounds.set(rowId, background);\n } catch (error) {\n console.warn('Error computing row background:', error);\n this.computedRowBackgrounds.set(rowId, null);\n }\n }); \n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n this.homeUrl = UrlHelper.getHomeUrl();\n }\n\n\n getNestedValue(obj: any, path: string): any {\n return CollectionHelper.getNestedProperty(obj, path);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n return FilterDisplayHelper.groupByFormControlAttributes(data);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n }\n\n const result = FilterDisplayHelper.updateSelectedFilterValues(\n this.selectedFilterValues, \n values, \n currentFormControlName\n );\n \n this.selectedFilterValues = result.selectedFilterValues;\n this.selectedFilterGroupedValues = result.selectedFilterGroupedValues;\n this.displayAfterFilterRemoved = true;\n this.getFinalSelectedFilterValuesToDisplay();\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = FilterDisplayHelper.getValuesForDisplay(\n this.selectedFilterValues, \n this.filterFromQueryParams\n );\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n \n this.selectedFilterValues = FilterDisplayHelper.removeFilterValue(this.selectedFilterValues, f);\n this.displayAfterFilterRemoved = true;\n \n this.timeoutManager.createTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n // Clear computed backgrounds before loading filtered data\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n // Clear computed backgrounds before reset\n this.clearRowBackgroundCache();\n this.timeoutManager.createTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n // Cancel any previous request to prevent race conditions\n this._currentRequestSubject.next();\n \n this.isAllExpanded = false;\n // Clear expansion state when loading new data to avoid stale expansion state\n CollectionHelper.clearSet(this.expandedRowIds);\n \n const filterFormData = this.filterFormGroup?.value;\n this.filterHasNonEmptyValue = ValidationHelper.hasFormData(filterFormData);\n\n // Build query string using helper\n const qs = QueryParamsHelper.buildQueryString(\n filterFormData,\n this.sortFromQueryParams,\n this.resetFlag ? 0 : this.pageIndex,\n this.pageSize,\n this.search\n );\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n // Update URL if needed\n const baseUrl = UrlHelper.getBaseUrl(this.router);\n const genUrl = UrlHelper.buildUrl(baseUrl, qs);\n \n if (this.keepFilterInUrl && UrlHelper.hasUrlChanged(genUrl)) {\n UrlHelper.updateUrl(this.location, baseUrl, qs.toString());\n this.filterFromQueryParams = QueryParamsHelper.parseQueryParams(window.location.href);\n }\n\n // Load data with race condition protection\n this.dataSource.loadWithCancellation(\n this.loadDataApiBaseUrl, \n this.pageIndex, \n this.pageSize, \n this.search, \n filterFormData, // Pass original form data - datasource will handle conversions\n this.sortObj,\n this._currentRequestSubject\n );\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n // Clear computed backgrounds before loading new page data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n // Clear computed backgrounds before loading new page size data\n this.clearRowBackgroundCache();\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onSetSelectedTemplate(data: any) {\n console.log(\"=== onSetSelectedTemplate ===\", data);\n // this.selectedTemplate = data;\n }\n\n onChangeDisplayColumns(columns: string[]) {\n console.log(\"=== onChangeDisplayColumns ===\", columns);\n \n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns('onChangeDisplayColumns');\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n UrlHelper.safeNavigate(this.router, url);\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n this.allRowsSelectedChange.emit(this.isAllRowsSelected);\n }\n\n\n toggleAllRows(): void {\n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n this.selection.select(row);\n });\n }\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n return ValidationHelper.hasRowKey(row, this.selectedRowKey) && \n this.selectedIds.has(row[this.selectedRowKey]);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n return QueryParamsHelper.parseQueryParams(url);\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n // Optimized getRowBackground - simple O(1) lookup\n getRowBackground(row: any): string | null {\n // Early return if no background function is provided\n if (!this.rowsConfig.backgroundApplyFunction) {\n return null;\n }\n\n const rowId = row?.id || row?.[this.selectedRowKey] || JSON.stringify(row);\n \n // If not computed yet, compute on-demand (fallback)\n if (!this.computedRowBackgrounds.has(rowId)) {\n try {\n const background = this.rowsConfig.backgroundApplyFunction(row);\n this.computedRowBackgrounds.set(rowId, background);\n return background;\n } catch (error) {\n console.warn('Error computing row background:', error);\n return null;\n }\n }\n \n return this.computedRowBackgrounds.get(rowId) || null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n UrlHelper.handleButtonClick(this.router, config);\n }\n\n handleSecondButtonClick(config: any) {\n UrlHelper.handleSecondaryButtonClick(this.router, config);\n }\n\n setSelectedRows(){\n this.selection.clear();\n this.dataSource.apiSubject.value.forEach(row => {\n if(this.selectedRowIds.indexOf(row[this.selectedRowKey]) != -1){\n this.selection.select(row);\n }\n });\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n public resetSelectedRows(){\n this.isAllRowsSelected = false;\n this.selection.clear();\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n }\n\n /** Toggles the expanded state of an element. */\n public toggleExpand(element: any) {\n if (!this.isExpansion || !element) {\n return;\n }\n \n const rowId = this.getRowIdentifier(element);\n \n if (this.expandedRowIds.has(rowId)) {\n this.expandedRowIds.delete(rowId);\n } else {\n this.expandedRowIds.add(rowId);\n }\n }\n\n public expandAllRow(){\n if (!this.isExpansion || !this.dataSource?.apiSubject?.value) {\n return;\n }\n \n this.isAllExpanded = !this.isAllExpanded;\n \n if (this.isAllExpanded) {\n // Add all row IDs to expanded set\n this.dataSource.apiSubject.value.forEach(row => {\n const rowId = this.getRowIdentifier(row);\n this.expandedRowIds.add(rowId);\n });\n } else {\n // Clear all expanded rows\n this.expandedRowIds.clear();\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t?.home}}</a></li>\n @for(breadcrumb of breadcrumbs; track trackByBreadcrumb($index, breadcrumb)) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection || displayAfterFilterRemoved) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [(selectedTemplate)]=\"selectedTemplate\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (selectedTemplateChange)=\"onSetSelectedTemplate($event)\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track trackByFilterValue($index, v)) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" [class.tis-table-bordered]=\"disableBorderedView == false\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\" multiTemplateDataRows>\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track trackByAutoColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px;\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ column.valueKey ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey))?.toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track trackByTemplateColumn($index, column); let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column?.columnDef || column.name\" [sticky]=\"isStickyStart(column?.columnDef || column.name)\" [stickyEnd]=\"isStickyEnd(column?.columnDef || column.name)\">\n @if(column.type == 'expand') {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n <div style=\"display: flex; align-items: center; gap: 5px; cursor: pointer;\" (click)=\"expandAllRow()\">\n <span>{{ column?.columnName ? column?.columnName : t[column.name] }}</span>\n <mat-icon *ngIf=\"!isAllExpanded\">expand_more</mat-icon>\n <mat-icon *ngIf=\"isAllExpanded\">expand_less</mat-icon>\n </div>\n </th>\n }\n @else if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ column?.columnName ? column?.columnName : t[column.name] }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\" [style.border-bottom-width]=\"element.expanded ? '1px' : '0px'\" style=\"padding: 0px !important;\">\n <div class=\"tis-element-detail-wrapper\" [class.tis-element-detail-wrapper-expanded]=\"element.expanded\">\n <ng-container *ngIf=\"expandedTemplate as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colData: element }\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" [class.tis-curser-pointer]=\"isExpandedRow\" (click)=\"(isExpansion && isExpandedRow) ? toggleExpand(row) : null\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"tis-detail-row\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"130\" height=\"126.89\" viewBox=\"0 0 647.63626 632.17383\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" role=\"img\" artist=\"Katerina Limpitsouni\" source=\"https://undraw.co/\">\n <path d=\"M687.3279,276.08691H512.81813a15.01828,15.01828,0,0,0-15,15v387.85l-2,.61005-42.81006,13.11a8.00676,8.00676,0,0,1-9.98974-5.31L315.678,271.39691a8.00313,8.00313,0,0,1,5.31006-9.99l65.97022-20.2,191.25-58.54,65.96972-20.2a7.98927,7.98927,0,0,1,9.99024,5.3l32.5498,106.32Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#f2f2f2\"/>\n <path d=\"M725.408,274.08691l-39.23-128.14a16.99368,16.99368,0,0,0-21.23-11.28l-92.75,28.39L380.95827,221.60693l-92.75,28.4a17.0152,17.0152,0,0,0-11.28028,21.23l134.08008,437.93a17.02661,17.02661,0,0,0,16.26026,12.03,16.78926,16.78926,0,0,0,4.96972-.75l63.58008-19.46,2-.62v-2.09l-2,.61-64.16992,19.65a15.01489,15.01489,0,0,1-18.73-9.95l-134.06983-437.94a14.97935,14.97935,0,0,1,9.94971-18.73l92.75-28.4,191.24024-58.54,92.75-28.4a15.15551,15.15551,0,0,1,4.40966-.66,15.01461,15.01461,0,0,1,14.32032,10.61l39.0498,127.56.62012,2h2.08008Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M398.86279,261.73389a9.0157,9.0157,0,0,1-8.61133-6.3667l-12.88037-42.07178a8.99884,8.99884,0,0,1,5.9712-11.24023l175.939-53.86377a9.00867,9.00867,0,0,1,11.24072,5.9707l12.88037,42.07227a9.01029,9.01029,0,0,1-5.9707,11.24072L401.49219,261.33887A8.976,8.976,0,0,1,398.86279,261.73389Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"190.15351\" cy=\"24.95465\" r=\"12.66462\" fill=\"#fff\"/>\n <path d=\"M878.81836,716.08691h-338a8.50981,8.50981,0,0,1-8.5-8.5v-405a8.50951,8.50951,0,0,1,8.5-8.5h338a8.50982,8.50982,0,0,1,8.5,8.5v405A8.51013,8.51013,0,0,1,878.81836,716.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#e6e6e6\"/>\n <path d=\"M723.31813,274.08691h-210.5a17.02411,17.02411,0,0,0-17,17v407.8l2-.61v-407.19a15.01828,15.01828,0,0,1,15-15H723.93825Zm183.5,0h-394a17.02411,17.02411,0,0,0-17,17v458a17.0241,17.0241,0,0,0,17,17h394a17.0241,17.0241,0,0,0,17-17v-458A17.02411,17.02411,0,0,0,906.81813,274.08691Zm15,475a15.01828,15.01828,0,0,1-15,15h-394a15.01828,15.01828,0,0,1-15-15v-458a15.01828,15.01828,0,0,1,15-15h394a15.01828,15.01828,0,0,1,15,15Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"#3f3d56\"/>\n <path d=\"M801.81836,318.08691h-184a9.01015,9.01015,0,0,1-9-9v-44a9.01016,9.01016,0,0,1,9-9h184a9.01016,9.01016,0,0,1,9,9v44A9.01015,9.01015,0,0,1,801.81836,318.08691Z\" transform=\"translate(-276.18187 -133.91309)\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"20\" fill=\"var(--tis-primary, var(--mat-sys-primary, #3838a2))\"/>\n <circle cx=\"433.63626\" cy=\"105.17383\" r=\"12.18187\" fill=\"#fff\"/>\n </svg>\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSortModule } from '@angular/material/sort';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule,\n MatSortModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i16","i17.ScrollingDirective","i18.TisColumnsBtnComponent","i19.TisDatePipe","i20.TisDateTimePipe","i21.TisDateTimeWithSecondsPipe"],"mappings":"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"}