ngx-techlify-core 22.3.0 → 22.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{ngx-techlify-core-base-model-oCILHkdE.mjs → ngx-techlify-core-base-model-DfODc3ll.mjs} +2 -2
- package/fesm2022/{ngx-techlify-core-base-model-oCILHkdE.mjs.map → ngx-techlify-core-base-model-DfODc3ll.mjs.map} +1 -1
- package/fesm2022/{ngx-techlify-core-shared.module-DROe5GRx.mjs → ngx-techlify-core-shared.module-C0uAKgWi.mjs} +108 -4
- package/fesm2022/ngx-techlify-core-shared.module-C0uAKgWi.mjs.map +1 -0
- package/fesm2022/{ngx-techlify-core-user-config.service-DW5EgXhL.mjs → ngx-techlify-core-user-config.service-BTZUoFIT.mjs} +2 -2
- package/fesm2022/{ngx-techlify-core-user-config.service-DW5EgXhL.mjs.map → ngx-techlify-core-user-config.service-BTZUoFIT.mjs.map} +1 -1
- package/fesm2022/{ngx-techlify-core-user-sessions.module-BRmDpYG3.mjs → ngx-techlify-core-user-sessions.module-gmNNGpCf.mjs} +4 -4
- package/fesm2022/{ngx-techlify-core-user-sessions.module-BRmDpYG3.mjs.map → ngx-techlify-core-user-sessions.module-gmNNGpCf.mjs.map} +1 -1
- package/fesm2022/ngx-techlify-core.mjs +46 -11
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-techlify-core.d.ts +33 -0
- package/fesm2022/ngx-techlify-core-shared.module-DROe5GRx.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-techlify-core-shared.module-C0uAKgWi.mjs","names":["i1","i2","i3.ActionPopup","i1","i1","i1","i2","i3","i4","i1.TechlifyConfig","i1.AlertService","i2.TechlifyConfig","log","catchError","i1.ConfigService","i2.ErrorHandlerService","i3.AlertService","log","i1.ConfigService","i1.HttpCacheService","i1.ConfigService","i1.ConfigService","i1.CredentialsService","i1","i1.AlertService","i2","i3","i1","i2","i3","i1","i1","i1.CustomIconRegistryService","i1","i2.CustomIconComponent","i1","i2","i1","i2.CredentialsService","i1.HttpService","i2.StorageService","switchMap","map","catchError","i1.CredentialsService","i2.HttpService","i3.CurrentUserService","i1","finalize","i1","i2.AlertService","i2.ErrorHandlerService","i3.TechlifyIconComponent","debounceTime","distinctUntilChanged","i2","i6","i7","i9.TechlifyIconComponent","i1","i2","i3.TechlifyIconComponent","i1","i2","i3.TechlifyIconComponent","i1","debounceTime","distinctUntilChanged","startWith","switchMap","finalize","i3.HttpService","i4","i5","i7","i8","i9","i11"],"sources":["../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.model.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.html","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.component.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/success-snack.html","../../../projects/ngx-techlify-core/src/lib/core/snack/error-snack.html","../../../projects/ngx-techlify-core/src/lib/core/alert.service.ts","../../../projects/ngx-techlify-core/src/lib/core/form-validator.service.ts","../../../projects/ngx-techlify-core/src/lib/core/environment.service.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.html","../../../projects/ngx-techlify-core/src/lib/core/logger.service.ts","../../../projects/ngx-techlify-core/src/lib/core/techlify-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/config.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http-cache.service.ts","../../../projects/ngx-techlify-core/src/lib/core/cache.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/api-prefix.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/credentials.service.ts","../../../projects/ngx-techlify-core/src/lib/core/token.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/header.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http.service.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.html","../../../projects/ngx-techlify-core/src/lib/form-configuration/form-configuration-for-form/form-configuration-for-form.component.ts","../../../projects/ngx-techlify-core/src/lib/form-configuration/form-configuration-for-form/form-configuration-for-form.component.html","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.component.html","../../../projects/ngx-techlify-core/src/lib/material.module.ts","../../../projects/ngx-techlify-core/src/lib/custom-icon/custom-icons.registry.ts","../../../projects/ngx-techlify-core/src/lib/custom-icon/custom-icon-registry.service.ts","../../../projects/ngx-techlify-core/src/lib/custom-icon/custom-icon.component.ts","../../../projects/ngx-techlify-core/src/lib/custom-icon/custom-icon.component.html","../../../projects/ngx-techlify-core/src/lib/techlify-icon/techlify-icon.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-icon/techlify-icon.component.html","../../../projects/ngx-techlify-core/src/lib/custom-icon/custom-icon.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-icon/techlify-icon.module.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.module.ts","../../../projects/ngx-techlify-core/src/lib/core/app-update.service.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.guard.ts","../../../projects/ngx-techlify-core/src/lib/user/user.model.ts","../../../projects/ngx-techlify-core/src/lib/core/storage.service.ts","../../../projects/ngx-techlify-core/src/lib/user/current-user.service.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.service.ts","../../../projects/ngx-techlify-core/src/lib/core/route-reusable-strategy.ts","../../../projects/ngx-techlify-core/src/lib/core/filter.service.ts","../../../projects/ngx-techlify-core/src/lib/delete-button/techlify-delete-button.component.ts","../../../projects/ngx-techlify-core/src/lib/delete-button/techlify-delete-button.component.html","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.html","../../../projects/ngx-techlify-core/src/lib/form-button/techlify-form-button.component.ts","../../../projects/ngx-techlify-core/src/lib/form-button/techlify-form-button.component.html","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.module.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.module.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.html","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel.module.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.module.ts","../../../projects/ngx-techlify-core/src/lib/read-more/read-more.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.html","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/form-configuration/form-configuration-for-form/form-configuration-for-form.module.ts","../../../projects/ngx-techlify-core/src/lib/shared.module.ts"],"sourcesContent":["export class ActionPopup {\n name: string;\n title: string;\n message: string;\n}","import { Component, OnInit, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ActionPopup } from './action-popup.model';\n\n@Component({\n selector: 'app-action-popup',\n templateUrl: './action-popup.component.html',\n styleUrls: ['./action-popup.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ActionPopupComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<ActionPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: ActionPopup,\n ) { }\n\n ngOnInit() {\n }\n\n /**Method to close dialog box */\n closeDialog() {\n this.dialogRef.close();\n }\n\n /**Method to close dialog box with the data given from parent component\n */\n confirm() {\n this.dialogRef.close(this.data);\n }\n\n}\n","<div>\n <h5 mat-dialog-title class='text-center'>{{data.title}}</h5>\n <div mat-dialog-content>\n <p [innerHTML]=\"data.message\"></p>\n </div>\n <div mat-dialog-actions class='d-flex justify-content-end'>\n <button mat-button (click)=\"closeDialog()\">Cancel</button>\n <button mat-raised-button color=\"primary\" (click)=\"confirm()\">Proceed</button>\n </div>\n</div>","import { Component, Inject, ChangeDetectionStrategy } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'success-snack.html',\n styleUrls: ['./snack.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class SuccessSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'error-snack.html',\n styleUrls: ['./snack.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class ErrorSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n","<div class=\"row-container\">\n <span class=\"icon-column\">\n <mat-icon class=\"success\"> check_circle_outline</mat-icon>\n </span>\n <span class=\"text-column\">\n {{ data }}\n </span>\n</div>","<div class=\"row-container\">\n <span class=\"icon-column\">\n <mat-icon class=\"error\"> cancel</mat-icon>\n </span>\n <span class=\"text-column\">\n {{ data }}\n </span>\n</div>","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ErrorSnackComponent, SuccessSnackComponent } from './snack/snack.component';\r\n\r\n/**\r\n * Service used to manage alerts in the entire system frontend\r\n * \r\n * @author Gokula Prasanna\r\n * @since 20210131\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(public snackBar: MatSnackBar) { }\r\n\r\n addAlert(message: string, alertType: string, duration = 3) {\r\n if (alertType == \"success\") {\r\n this.snackBar.openFromComponent(SuccessSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n else {\r\n this.snackBar.openFromComponent(ErrorSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormValidatorService {\n\n constructor() { }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string, formGroup: UntypedFormGroup | any, firstAttempt?: boolean) {\n return (!formGroup.get(field).valid && formGroup.get(field).touched) ||\n (!formGroup.get(field).valid && formGroup.get(field).untouched && firstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string, formGroup: UntypedFormGroup | any, errorMessages: any, errorField?: string) {\n const error = Object.keys(formGroup.get(field)?.errors ?? {});\n return (error.length > 0) ? (errorMessages[errorField || field][error[0]] ? errorMessages[errorField || field][error[0]] : '') : '';\n }\n\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EnvironmentService {\n\n private environment: any = {};\n\n init(environment: any) {\n this.environment = environment;\n }\n\n get() {\n return this.environment;\n }\n\n}\n","import { Component, OnInit, Input, EventEmitter, Output, ChangeDetectionStrategy } from '@angular/core';\nimport { ViewerConfig } from './viewer-config.model';\n\n@Component({\n selector: 'app-document-viewer',\n templateUrl: './document-viewer.component.html',\n styleUrls: ['./document-viewer.component.css'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class DocumentViewerComponent implements OnInit {\n\n\n @Input() config!: ViewerConfig;\n\n @Input() file!: any;\n\n @Input() fileUrl!: any;\n\n @Input() disableEdit: boolean;\n\n @Output() remove = new EventEmitter();\n viewerType: any;\n\n constructor() { }\n\n ngOnInit(): void {\n this.initData();\n }\n\n removeFile() {\n this.remove.emit();\n }\n\n initData() {\n if (this.file) {\n var ext = this.getFileExtension(this.file);\n if (ext === 'ppt' || ext === 'pptx' || ext === 'doc' || ext === 'docx' || ext === 'xls' || ext === 'xlsx') {\n this.viewerType = \"office\";\n }\n else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {\n this.viewerType = \"image\";\n }\n else if (ext === 'pdf') {\n this.viewerType = \"pdf\";\n }\n else {\n this.viewerType = null;\n }\n }\n }\n\n get fileName() {\n if (this.file) {\n let nameArray = this.file.split('/');\n if (nameArray.length === 2) {\n return nameArray[1];\n }\n return nameArray[0];\n }\n return '';\n }\n\n getFileExtension(file: any) {\n return file.split('.').pop();\n }\n\n}\n","<mat-card *ngIf=\"viewerType === 'image'\">\n <img [ngStyle]=\"config.imageStyle\" mat-card-image [src]=\"fileUrl\" style=\"object-fit: contain;\" />\n <mat-card-actions>\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit && !config.hideRemove\">\n Remove\n </button>\n </mat-card-actions>\n</mat-card>\n\n<div class=\"mat-elevation-z1 p-4\" *ngIf=\"viewerType !== 'image'\">\n <a [href]=\"fileUrl\" target=\"_blank\">{{fileName}}</a>\n <ngx-doc-viewer [ngStyle]=\"config.viewerStyle\" *ngIf=\"viewerType !== null\" [url]=\"fileUrl\" [viewer]=\"viewerType\">\n </ngx-doc-viewer>\n <div class=\"mt-2\" *ngIf=\"!config.hideRemove\">\n <button type=\"button\" mat-raised-button (click)=\"removeFile()\" *ngIf=\"!disableEdit\">\n Remove\n </button>\n </div>\n</div>","/**\n * Simple logger system with the possibility of registering custom outputs.\n *\n * 4 different log levels are provided, with corresponding methods:\n * - debug : for debug information\n * - info : for informative status of the application (success, ...)\n * - warning : for non-critical errors that do not prevent normal application behavior\n * - error : for critical errors that prevent normal application behavior\n *\n * Example usage:\n * ```\n * import { Logger } from 'app/core/logger.service';\n *\n * const log = new Logger('myFile');\n * ...\n * log.debug('something happened');\n * ```\n *\n * To disable debug and info logs in production, add this snippet to your root component:\n * ```\n * export class AppComponent implements OnInit {\n * ngOnInit() {\n * if (environment.production) {\n * Logger.enableProductionMode();\n * }\n * ...\n * }\n * }\n *\n * If you want to process logs through other outputs than console, you can add LogOutput functions to Logger.outputs.\n */\n\n/**\n * The possible log levels.\n * LogLevel.Off is never emitted and only used with Logger.level property to disable logs.\n */\nexport enum LogLevel {\n Off = 0,\n Error,\n Warning,\n Info,\n Debug\n}\n\n/**\n * Log output handler function.\n */\nexport type LogOutput = (source: string | undefined, level: LogLevel, ...objects: any[]) => void;\n\nexport class Logger {\n\n /**\n * Current logging level.\n * Set it to LogLevel.Off to disable logs completely.\n */\n static level = LogLevel.Debug;\n\n /**\n * Additional log outputs.\n */\n static outputs: LogOutput[] = [];\n\n /**\n * Enables production mode.\n * Sets logging level to LogLevel.Warning.\n */\n static enableProductionMode() {\n Logger.level = LogLevel.Warning;\n }\n\n constructor(private source?: string) { }\n\n /**\n * Logs messages or objects with the debug level.\n * Works the same as console.log().\n */\n debug(...objects: any[]) {\n this.log(console.log, LogLevel.Debug, objects);\n }\n\n /**\n * Logs messages or objects with the info level.\n * Works the same as console.log().\n */\n info(...objects: any[]) {\n this.log(console.info, LogLevel.Info, objects);\n }\n\n /**\n * Logs messages or objects with the warning level.\n * Works the same as console.log().\n */\n warn(...objects: any[]) {\n this.log(console.warn, LogLevel.Warning, objects);\n }\n\n /**\n * Logs messages or objects with the error level.\n * Works the same as console.log().\n */\n error(...objects: any[]) {\n this.log(console.error, LogLevel.Error, objects);\n }\n\n private log(func: (...args: any[]) => void, level: LogLevel, objects: any[]) {\n if (level <= Logger.level) {\n const log = this.source ? ['[' + this.source + ']'].concat(objects) : objects;\n func.apply(console, log);\n Logger.outputs.forEach(output => output.apply(output, [this.source, level, ...objects]));\n }\n }\n\n}\n","/**\n * Class that stores the configuration data\n *\n * @author Joshua Kissoon\n * @since 20180724\n */\nexport class TechlifyConfig {\n projectKey: string = '';\n environment: string = '';\n authClientSecret: string = '';\n authGrantType: string = '';\n apiUrl: string = '';\n rawConfigs: any;\n storage: Storage;\n isLogoutWhileApiGetsFailed: boolean = false;\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any) {\n this.projectKey = data.projectKey;\n this.environment = data.environment;\n this.authClientSecret = data.authClientSecret;\n this.authGrantType = data.authGrantType;\n this.apiUrl = data.apiUrl;\n this.storage = data?.storage;\n this.rawConfigs = data;\n this.isLogoutWhileApiGetsFailed = data?.isLogoutWhileApiGetsFailed;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { TechlifyConfig } from \"./techlify-config.model\";\n\n/**\n * Service that provides settings for all other services\n *\n * @author Joshua Kissoon\n * @since 20170709\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n\n public static BASE_CREDENTIALS = \"credentials\";\n\n private config: TechlifyConfig;\n\n constructor(config: TechlifyConfig) {\n this.config = config;\n }\n\n getConfigsRaw() {\n return this.config.rawConfigs;\n }\n\n getProjectKey() {\n return this.config.projectKey;\n }\n\n getApiUrl() {\n return this.config.apiUrl;\n }\n\n getAuthClientSecret() {\n return this.config.authClientSecret;\n }\n\n getStorage() {\n return this.config.storage ? this.config.storage : localStorage;\n }\n\n getAuthGrantType() {\n return this.config.authGrantType;\n }\n\n getCredentialsKey() {\n return this.config.projectKey + \"_\" + ConfigService.BASE_CREDENTIALS;\n }\n\n}\n","import { TechlifyConfig } from './techlify-config.model';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { AlertService } from \"./alert.service\";\r\n\r\n\r\n/**\r\n * Service used to handle errors from the request\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20171202\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerService {\r\n\r\n constructor(private alerter: AlertService,\r\n private config: TechlifyConfig,\r\n ) {\r\n }\r\n\r\n handleError(errorResponse: any, msg: string = '') {\r\n // 1 - Create empty array to store errors\r\n const errors = [];\r\n\r\n // 2 - check if the error object is present in the response\r\n if (errorResponse?.error) {\r\n\r\n // 3 - Check for Laravel form validation error messages object\r\n if (errorResponse?.error?.errors) {\r\n\r\n // 4 - For each error property (which is a form field)\r\n for (const property in errorResponse.error.errors) {\r\n\r\n if (errorResponse.error.errors?.hasOwnProperty(property)) {\r\n\r\n // 5 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse?.error?.errors[property];\r\n\r\n // 6 - Push all errors in the array to the errors array\r\n propertyErrors.forEach(error => errors.push(error));\r\n }\r\n\r\n }\r\n }\r\n\r\n if (errors.length === 0) {\r\n // 7 - Push the main error message to the array of errors if there is no validation error\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n }\r\n }\r\n var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\r\n\r\n if (errorResponse.status == 401) {\r\n //Unauthenticated from server.\r\n this.clearStorage();\r\n }\r\n\r\n if (errorResponse.status == 403 && this.config.isLogoutWhileApiGetsFailed && !this.isAuthURL(errorResponse?.url)) {\r\n //Unauthorised from server.\r\n this.clearStorage();\r\n }\r\n }\r\n\r\n //We can't use authservice here, because of circular dependency with http service -> error-handler service\r\n clearStorage() {\r\n sessionStorage.clear();\r\n localStorage.clear();\r\n location.reload();\r\n }\r\n\r\n isAuthURL(urlStr: string) {\r\n const url = new URL(urlStr);\r\n return url.pathname == '/public/oauth/token';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Logger } from './logger.service';\nimport { ConfigService } from './config.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { AlertService } from './alert.service';\n\nconst log = new Logger('ErrorHandlerInterceptor');\n\n/**\n * Adds a default error handler to all requests.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService,\n private errorHandler: ErrorHandlerService,\n private alertService: AlertService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(catchError(error => this.handleError(error)));\n }\n\n // Customize the default error handler here if needed\n private handleError(error: HttpErrorResponse): Observable<HttpEvent<any>> {\n if (this.checkNoNetworkConnection(error)) {\n this.alertService.addAlert('Internet connection not available, try later', 'warning');\n return throwError(error);\n }\n try {\n this.errorHandler.handleError(error, 'Unexpected Server Error, try later or contact service team');\n } catch (e) {\n console.log(\"Unable to handle server error\", e);\n }\n return throwError(error);\n }\n\n /**\n * Helper function to check if an error is likely due to a network connection issue.\n *\n * @param error The error object to check.\n * @returns `true` if it's likely a network error, `false` otherwise.\n */\n checkNoNetworkConnection(error: any): boolean {\n return (\n error instanceof HttpErrorResponse\n && !error.headers.keys().length\n && !error.ok\n && !error.status\n && !error.error.loaded\n && !error.error.total\n )\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { ConfigService } from './config.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('HttpCacheService');\n\n\nexport interface HttpCacheEntry {\n lastUpdated: Date;\n data: HttpResponse<any>;\n}\n\n/**\n * Provides a cache facility for HTTP requests with configurable persistence policy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpCacheService {\n\n private cachedData: { [key: string]: HttpCacheEntry; } = {};\n private storage: Storage | any | null;\n private cachePersistenceKey: String | any;\n\n constructor(private configService: ConfigService) {\n this.storage = this.configService.getStorage();\n this.cachePersistenceKey = this.configService.getProjectKey() + '_HTTP_CACHE';\n this.loadCacheData();\n }\n\n /**\n * Sets the cache data for the specified request.\n * @param {!string} url The request URL.\n * @param {ResponseOptions} data The received data.\n * @param {Date=} lastUpdated The cache last update, current date is used if not specified.\n */\n setCacheData(url: string, data: HttpResponse<any>, lastUpdated?: Date) {\n this.cachedData[url] = {\n lastUpdated: lastUpdated || new Date(),\n data: data\n };\n log.debug(`Cache set for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Gets the cached data for the specified request.\n * @param {!string} url The request URL.\n * @return {?ResponseOptions} The cached data or null if no cached data exists for this request.\n */\n getCacheData(url: string): HttpResponse<any> | null {\n const cacheEntry = this.cachedData[url];\n\n if (cacheEntry) {\n log.debug(`Cache hit for key: \"${url}\"`);\n return cacheEntry.data;\n }\n\n return null;\n }\n\n /**\n * Gets the cached entry for the specified request.\n * @param {!string} url The request URL.\n * @return {?HttpCacheEntry} The cache entry or null if no cache entry exists for this request.\n */\n getHttpCacheEntry(url: string): HttpCacheEntry | null {\n return this.cachedData[url] || null;\n }\n\n /**\n * Clears the cached entry (if exists) for the specified request.\n * @param {!string} url The request URL.\n */\n clearCache(url: string): void {\n delete this.cachedData[url];\n log.debug(`Cache cleared for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Cleans cache entries older than the specified date.\n * @param {date=} expirationDate The cache expiration date. If no date is specified, all cache is cleared.\n */\n cleanCache(expirationDate?: Date) {\n if (expirationDate) {\n Object(this.cachedData).keys.forEach((key: string) => {\n if (expirationDate >= this.cachedData[key]?.lastUpdated) {\n delete this.cachedData[key];\n }\n });\n } else {\n this.cachedData = {};\n }\n this.saveCacheData();\n }\n\n /**\n * Sets the cache persistence policy.\n * Note that changing the cache persistence will also clear the cache from its previous storage.\n * @param {'local'|'session'=} persistence How the cache should be persisted, it can be either local or session\n * storage, or if no value is provided it will be only in-memory (default).\n */\n setPersistence(persistence?: 'local' | 'session') {\n this.cleanCache();\n this.storage = persistence === 'local' ? localStorage : persistence === 'session' ? sessionStorage : null;\n this.loadCacheData();\n }\n\n private saveCacheData() {\n if (this.storage) {\n this.storage[this.cachePersistenceKey] = JSON.stringify(this.cachedData);\n }\n }\n\n private loadCacheData() {\n const data = this.storage ? this.storage[this.cachePersistenceKey] : null;\n this.cachedData = data ? JSON.parse(data) : {};\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { HttpCacheService } from './http-cache.service';\nimport { Observable, Subscriber } from 'rxjs';\n\n/**\n * Caches HTTP requests.\n * Use ExtendedHttpClient fluent API to configure caching for each request.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheInterceptor implements HttpInterceptor {\n\n private forceUpdate = false;\n\n constructor(private httpCacheService: HttpCacheService) { }\n\n /**\n * Configures interceptor options\n * @param {{update: boolean}} options If update option is enabled, forces request to be made and updates cache entry.\n * @return {CacheInterceptor} The configured instance.\n */\n configure(options?: { update?: boolean } | null): CacheInterceptor {\n const instance = new CacheInterceptor(this.httpCacheService);\n if (options && options.update) {\n instance.forceUpdate = true;\n }\n return instance;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.method !== 'GET') {\n return next.handle(request);\n }\n\n return new Observable((subscriber: Subscriber<HttpEvent<any>>) => {\n const cachedData = this.forceUpdate ? null : this.httpCacheService.getCacheData(request.urlWithParams);\n if (cachedData !== null) {\n // Create new response to avoid side-effects\n subscriber.next(new HttpResponse(cachedData as Object));\n subscriber.complete();\n } else {\n next.handle(request)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.httpCacheService.setCacheData(request.urlWithParams, event);\n }\n subscriber.next(event);\n },\n error => subscriber.error(error),\n () => subscriber.complete()\n );\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiPrefixInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!/^(http|https):/i.test(request.url)) {\n request = request.clone({ url: this.configService.getApiUrl() + request.url });\n }\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from './config.service';\n\nexport interface Credentials {\n // Customize received credentials here\n user: any;\n token: any;\n}\n\n/**\n * Provides storage for authentication credentials.\n * The Credentials interface should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CredentialsService {\n\n private _credentials: Credentials | null = null;\n\n constructor(private configService: ConfigService) {\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n get isAuthenticated(): boolean {\n const token = this.credentials?.token?.access_token;\n const expiration = this.credentials?.token?.expires_in;\n\n if (!token || !expiration) {\n return false;\n }\n \n return Date.now() <= parseInt(expiration);\n }\n\n /**\n * Gets the user credentials.\n * @return The user credentials or null if the user is not authenticated.\n */\n get credentials(): Credentials | null {\n if (!this._credentials) {\n this._credentials = JSON.parse(sessionStorage.getItem(this.configService.getCredentialsKey()) || localStorage.getItem(this.configService.getCredentialsKey()));\n }\n return this._credentials;\n }\n\n /**\n * Sets the user credentials.\n * The credentials may be persisted across sessions by setting the `remember` parameter to true.\n * Otherwise, the credentials are only persisted for the current session.\n * @param credentials The user credentials.\n * @param remember True to remember credentials across sessions.\n */\n setCredentials(credentials?: Credentials, remember?: boolean) {\n this._credentials = credentials || null;\n\n if (credentials) {\n (remember ? localStorage : sessionStorage).setItem(this.configService.getCredentialsKey(), JSON.stringify(credentials));\n } else {\n sessionStorage.clear();\n localStorage.clear();\n this._credentials = null;\n }\n }\n\n getAccessToken(): string | null {\n const expiration = this.credentials?.token?.expires_in || '';\n const token = this.credentials?.token?.access_token || '';\n\n if (!token || !expiration) {\n return null;\n }\n\n if (Date.now() > parseInt(expiration)) {\n this.setCredentials();\n return null;\n }\n\n return token;\n }\n\n getExpiration(): string {\n return this.credentials?.token?.expires_in || '';\n }\n\n getRefreshToken(): string {\n return this.credentials?.token?.refresh_token || '';\n }\n\n refresh(): CredentialsService {\n this._credentials = null;\n return this;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { CredentialsService } from './credentials.service';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenInterceptor implements HttpInterceptor {\n\n constructor(private credentials: CredentialsService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${this.credentials.getAccessToken() || ''}`\n }\n });\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HeaderInterceptor implements HttpInterceptor {\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n 'Content-Type': request.headers.get('Content-Type') || 'application/json',\n }\n });\n return next.handle(request);\n }\n}\n","import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { TokenInterceptor } from './token.interceptor';\nimport { HeaderInterceptor } from './header.interceptor';\n\n\n// Augment HttpClient with the added configuration methods from HttpService, to allow in-place replacement of\n// HttpClient with HttpService using dependency injection\nexport interface HttpCustomClient {\n\n /**\n * Enables caching for this request.\n * @param {boolean} forceUpdate Forces request to be made and updates cache entry.\n * @return {HttpCustomClient} The new instance.\n */\n cache(forceUpdate?: boolean): HttpCustomClient;\n\n /**\n * Skips default error handler for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipErrorHandler(): HttpCustomClient;\n\n /**\n * Skips default API Prefix for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipApiPrefix(): HttpCustomClient;\n\n\n /**\n * Skips default Token Interceptor for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipToken(): HttpCustomClient;\n\n /**\n* Skips default Header Interceptor for this request.\n* @return {HttpCustomClient} The new instance.\n*/\n skipHeader(): HttpCustomClient;\n\n}\n\n\n// From @angular/common/http/src/interceptor: allows to chain interceptors\nclass HttpInterceptorHandler implements HttpHandler {\n\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) { }\n\n handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\n return this.interceptor.intercept(request, this.next);\n }\n\n}\n\n/**\n * Allows to override default dynamic interceptors that can be disabled with the HttpService extension.\n * Except for very specific needs, you should better configure these interceptors directly in the constructor below\n * for better readability.\n *\n * For static interceptors that should always be enabled (like ApiPrefixInterceptor), use the standard\n * HTTP_INTERCEPTORS token.\n */\nexport const HTTP_DYNAMIC_INTERCEPTORS = new InjectionToken<HttpInterceptor>('HTTP_DYNAMIC_INTERCEPTORS');\n\n/**\n * Extends HttpClient with per request configuration using dynamic interceptors.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService extends HttpClient implements HttpCustomClient {\n\n constructor(private httpHandler: HttpHandler,\n private injector: Injector,\n @Optional() @Inject(HTTP_DYNAMIC_INTERCEPTORS) private interceptors: HttpInterceptor[] = []) {\n super(httpHandler);\n\n if (!this.interceptors) {\n // Configure default interceptors that can be disabled here\n this.interceptors = [this.injector.get(ApiPrefixInterceptor), this.injector.get(HeaderInterceptor), this.injector.get(TokenInterceptor), this.injector.get(ErrorHandlerInterceptor)];\n }\n }\n\n cache(forceUpdate?: boolean): HttpService {\n const cacheInterceptor = this.injector.get(CacheInterceptor).configure({ update: forceUpdate });\n return this.addInterceptor(cacheInterceptor);\n }\n\n skipErrorHandler(): HttpService {\n return this.removeInterceptor(ErrorHandlerInterceptor);\n }\n\n skipApiPrefix(): HttpService {\n return this.removeInterceptor(ApiPrefixInterceptor);\n }\n\n skipToken(): HttpService {\n return this.removeInterceptor(TokenInterceptor);\n }\n\n skipHeader(): HttpService {\n return this.removeInterceptor(HeaderInterceptor);\n }\n\n // Override the original method to wire interceptors when triggering the request.\n request(method?: any, url?: any, options?: any): any {\n const handler = this.interceptors.reduceRight(\n (next, interceptor) => new HttpInterceptorHandler(next, interceptor),\n this.httpHandler\n );\n return new HttpClient(handler).request(method, url, options);\n }\n\n private removeInterceptor(interceptorType: Function): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.filter(i => !(i instanceof interceptorType))\n );\n }\n\n private addInterceptor(interceptor: HttpInterceptor): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.concat([interceptor])\n );\n }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectionStrategy } from \"@angular/core\";\nimport { AlertService } from \"../core/alert.service\";\nimport { FileDropperConfig } from './file-dropper.model';\n\n\n@Component({\n selector: \"app-file-dropper\",\n templateUrl: \"./file-dropper.component.html\",\n styleUrls: [\"./file-dropper.component.scss\"],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class FileDropperComponent implements OnInit {\n @Input() fileArray: any[] = [];\n\n @Input() config: FileDropperConfig;\n\n @Output() fileChanged: any = new EventEmitter();\n\n border = \"1px dashed #989898\";\n\n @Input() styles: any;\n\n isSingleMode: boolean;\n\n constructor(private alertService: AlertService) { }\n\n /**Life cycle hook method */\n ngOnInit() {\n this.isSingleMode = !Boolean(this.config.multiple);\n }\n\n /**Method for dragging event */\n dragEnter(event: any) {\n event.target.style.background = this.config.dragColor || \"#c0c0c0\";\n\n event.target.style.border = \"1px dashed black\";\n\n event.preventDefault();\n }\n\n /**Method for drag over event */\n dragOver(event: any) {\n event.preventDefault();\n }\n\n /**Method for drag leave event */\n dragLeave(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n\n event.preventDefault();\n }\n\n /**Method for drop event */\n dropEvent(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n const droppedFiles: FileList = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n const fileArray = Array.from(droppedFiles);\n this.addFiles(fileArray);\n }\n event.preventDefault();\n }\n\n /**Method to list files selected */\n onFileChange(event: any) {\n if (event.target.files && event.target.files.length) {\n const fileArray = Array.from(event.target.files);\n this.addFiles(fileArray);\n const fileInput = document.getElementById(\n this.config.fileId\n ) as HTMLInputElement;\n fileInput.value = \"\";\n }\n }\n\n /**Method to add files in the array */\n addFiles(fileArray: any) {\n if (!this.isSingleMode) {\n fileArray.forEach((file: any) => {\n this.fileArray = this.fileArray.filter(\n (item: any) => item.name !== file.name\n );\n if (this.fileSizeAllowed(file)) {\n this.fileArray.push(file);\n }\n });\n\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n } else {\n // Single Mode\n if (this.fileArray.length === 0) {\n if (this.fileSizeAllowed(fileArray[0])) {\n this.fileArray.push(fileArray[0]);\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n }\n }\n }\n //Reset the file array\n this.fileArray = [];\n }\n\n /**Method to sort the files in asc */\n sortFiles(a: any, b: any) {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n }\n\n /**Method tp validate the file size */\n fileSizeAllowed(file: any): boolean {\n if (!Boolean(this.config.maxSize)) {\n return true;\n } else if (file.size / (1024 * 1024) < this.config.maxSize) {\n return true;\n } else {\n this.alertService.addAlert(\n `The size of the file exceeds the limit ${this.config.maxSize} MB, kindly upload a file with size ${this.config.maxSize} MB or below`,\n \"warn\"\n );\n return false;\n }\n }\n\n /**Method invokes when the drop box is clicked to upload the file */\n clickEvent(event: any) {\n if (!(this.isSingleMode && this.fileArray.length > 0)) {\n document.getElementById(this.config.fileId).click();\n }\n event.preventDefault();\n }\n}\n","<div\n id=\"{{ config.containerId }}\"\n [ngStyle]=\"config.styles\"\n class=\"file-border\"\n (dragleave)=\"dragLeave($event)\"\n (dragenter)=\"dragEnter($event)\"\n (dragover)=\"dragOver($event)\"\n (click)=\"clickEvent($event)\"\n (drop)=\"dropEvent($event)\"\n [ngClass]=\"{ 'disable-div': isSingleMode && fileArray.length > 0 }\"\n>\n <div class=\"w-100 h-100 d-flex flex-column justify-content-center align-items-center\">\n <div>\n <span>Drag and drop file</span>\n </div>\n\n <div class=\"mt-2\">\n <span>or</span>\n </div>\n\n <div class=\"mt-2\">\n <button mat-raised-button color=\"primary\" type=\"button\">Browse</button>\n </div>\n\n <div class=\"mt-4\">\n <span>Supported files</span> <span *ngIf=\"config.acceptFileText\" class=\"mr-2\">: {{ config.acceptFileText }}</span>\n </div>\n </div>\n</div>\n<input\n type=\"file\"\n id=\"{{ config.fileId }}\"\n [accept]=\"config.acceptFile\"\n (change)=\"onFileChange($event)\"\n [multiple]=\"config.multiple === true\"\n style=\"display:none\"\n/>\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-form-configuration-for-form',\n templateUrl: './form-configuration-for-form.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class FormConfigurationForFormComponent {\n\n @Input() formCode: string;\n\n constructor(\n private router: Router,\n ) {\n }\n\n openForm() {\n this.router.navigate(['/form-configuration-field-form', this.formCode]);\n }\n}\n","<mat-icon role='button' matTooltip=\"Form Configuration\" (click)=\"openForm()\">settings</mat-icon>","import { Component, OnInit, Input, ChangeDetectionStrategy } from \"@angular/core\";\n\n@Component({\n selector: \"app-read-more\",\n templateUrl: \"./read-more.component.html\",\n styleUrls: [\"./read-more.component.scss\"],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ReadMoreComponent implements OnInit {\n @Input() text: string;\n @Input() maxLength: number = 100;\n currentText: string;\n hideToggle: boolean = true;\n\n isCollapsed: boolean = true;\n\n constructor() {}\n\n ngOnInit() {\n this.determineView();\n }\n\n toggleView() {\n this.isCollapsed = !this.isCollapsed;\n this.determineView();\n }\n\n determineView() {\n if (!this.text || this.text.length <= this.maxLength) {\n this.currentText = this.text;\n this.isCollapsed = false;\n this.hideToggle = true;\n return;\n }\n this.hideToggle = false;\n if (this.isCollapsed == true) {\n this.currentText = this.text.substring(0, this.maxLength) + \"...\";\n } else if (this.isCollapsed == false) {\n this.currentText = this.text;\n }\n }\n}\n","<div [innerHTML]=\"currentText\"></div>\n<a href=\"javascript:;\" *ngIf=\"!hideToggle\" class=\"primary-color hoverable\" (click)=\"toggleView()\">Read\n {{ isCollapsed ? \"more\" : \"less\" }}</a>","import { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\n/*\n * This module imports and re-exports all Angular Material modules for convenience,\n * so only 1 module import is needed in your feature modules.\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\n *\n * To optimize your production builds, you should only import the components used in your app.\n */\n\nimport { NgModule } from \"@angular/core\";\nimport {\n MatLineModule,\n MatNativeDateModule,\n MatOptionModule,\n MatPseudoCheckboxModule,\n MatRippleModule\n} from \"@angular/material/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatListModule } from '@angular/material/list'\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTabsModule } from '@angular/material/tabs';\n\n\n@NgModule({\n exports: [\n MatAutocompleteModule,\n MatButtonModule,\n MatCheckboxModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatLineModule,\n MatMenuModule,\n MatNativeDateModule,\n MatOptionModule,\n MatProgressSpinnerModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatCardModule,\n MatDividerModule,\n MatChipsModule,\n MatDatepickerModule,\n MatListModule,\n MatTooltipModule,\n MatButtonToggleModule,\n MatSidenavModule,\n MatProgressBarModule,\n MatSlideToggleModule,\n MatTabsModule\n ]\n})\nexport class MaterialModule { }\n","/**\n * Registry file to maintain the custom icons SVGs\n */\n\nexport const CUSTOM_ICONS: Record<string, string> = {\n 'batch-add': `\n<svg width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_8645_35194)\">\n <path d=\"M22.498 15.243H17.6766V20.0645H16.0695V15.243H11.248V13.6359H16.0695V8.81445H17.6766V13.6359H22.498V15.243Z\"\n fill=\"black\" stroke=\"black\" stroke-width=\"0.75\" stroke-linejoin=\"round\"/>\n <path d=\"M13.748 11.493H8.92662V16.3145H7.31948V11.493H2.49805V9.88588H7.31948V5.06445H8.92662V9.88588H13.748V11.493Z\"\n fill=\"black\" stroke=\"black\" stroke-width=\"0.75\" stroke-linejoin=\"round\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_8645_35194\">\n <rect width=\"24\" height=\"24\" fill=\"white\" transform=\"translate(0.498047 0.0644531)\"/>\n </clipPath>\n </defs>\n</svg>\n `,\n 'unapprove': `\n<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"scale(0.025)\">\n <path\n d=\"M873-88 609-352 495-238 269-464l56-58 170 170 56-56-414-414 56-58 736 736-56 56ZM269-238 43-464l56-56 170 170 56 56-56 56Zm452-226-56-56 196-196 58 54-198 198ZM607-578l-56-56 86-86 56 56-86 86Z\"\n fill=\"currentColor\"\n transform=\"translate(0,960)\"\n />\n </g>\n</svg>`,\n 'gra': `\n<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<rect width=\"30\" height=\"30\" fill=\"url(#pattern0_1076_92)\"/>\n<defs>\n<pattern id=\"pattern0_1076_92\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n<use xlink:href=\"#image0_1076_92\" transform=\"scale(0.00666667)\"/>\n</pattern>\n<image id=\"image0_1076_92\" width=\"150\" height=\"150\" preserveAspectRatio=\"none\" xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAmsUlEQVR4Ae19CZwdVZX3ubW+tZfX+76ks0CAgEFREBMlgqCOAwgoKDo4OuICMgrjfI6azx1+GoRR+SEGRVxQQVSYQSFoQAgKZiYkBJJOd7rT+769tepV1Z1za3mv3utOSDoJauf+4eUtVXWr6t5zz/I/51YDcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcCwO5Ci3c3DkIPm/XHYZiO7HYEdHhxqLxUrYl/b29lLfbgpwvCxEOLFhnbVy5WlyqPTzSkD+i5CoObe6rELOEnqxpul91bWV19SVhVaYRA4g1Gg0+sF4PP4EONrL02CsDylwFECAExPefStJXf94MhO/qbyk5M1jSSP0v729NdXRyFCFILRN9g09pYFyVVdX19ay8vCXS8qCdeyg5cuWPVxfX386vlZB4eQ8UftzHk4kjcU0jKddaPnaxlNLLlzVGnl6MqqWRAajCnx9ZnbuG7WVsXdWloWb++eSv62vrBRKFOEpIRh8EzUNxchYHUQUt1XVVv8jJcaUGoycMjkx8XRzc/MG1GiJZDKZAI4TCoL7gosbG9fVNJWfwr5HNr3959U3rftIXbTs4uV1dSex7aWlpeXt5eWlvuMATWAle69uql7Wfkr7tS0tLXWrTu4YrKqqqm1vabnytNWrXkLBemPROU90N2PJwx5gVFNkx7K223rKSui5rbVplB5beAK3nHfnqV+8/CJ3X9V3HFmoHQ/19RWrzlx3zptPXr36zo6OZT9DgWxnv0cikSo0kWe7u0nAseTABMPWOFuaa0/ev6J14pkY0K1Vcva5CpWe2li9L7fnQ2v/0PbFiz7qfjscYbD3Wb9+vf1+5ooVH4vV1zexz+0N9Y+uaGv7ZENDwxvhBMZSVdeeE027W1tvVsXkT4anRkIpNWJRQRWjJGnUQaDy+cpyYW4mvhV+OnzPzLtbnyg/p35nZkvfHnAExzpE+/a23t5e9i4OTU7+OR2Pz7Uta/uMIinTlmk2J1Lx2be97e0vvPjii8ynO+Eix6UoWOyerI2oTTYHAtsGZ3uumDJNSxQiVABTEIgBcRISzjZmrL0k+voXysu/BbOzGYXIDyXXlzxZWl75I2378CQcOSEqqYr6F0kQ0qJEM/FE5kFqGL+sqaqC0bGx5+EEI1iXmmAxTUU3wkbhvcLjXWOT+0/RpKghEiICsQi1NxMQCAGNGlBuWOKzIZXEp+e2mHsnR4V1jZdlWktvgFd1fx22wpGCYlSoY9SI0WKYRAOhW+bi0z/CUycqq6pQqU3qcAIJ11LiXbxBo1cv/+Heobn+1tlAmQHElNgmxw5RZzdqQlyIkNdZCbrSoO8Btx/CXdommO2rgNnzL4cjN11sf2Fqamquu7u7UxfMbcGK0h17u7p+Qwj5EDL5UTiBzOFSEix2L9aLHa33DU3v79CksCGbmitUzngyyaP2fw5xLghAmrJmbXl5eSPbnhnUnodYDKrN6T5YHCz3Osa1lPazqBKdaG1tXYeabHJmZiaC9EQEThAsFcFikmL+sH3F64XkyBVppcQkhEpAhJxQFe/M/k2i2LUYIOgB2eaw6L7RQFiu+MHY7c9tg8XnBG2Hfnh4+MD27dtnK2Kld8Wi0QqkI64cHx9PgC9aXcpYSoIF64TkfUPZDIqSJQIVcyKVs5GQFyoBsmChCMgKhYyWKmO/hvTMaFJMvr/u3970BvzKfKLF+qCmeypzbHxq/fMvvviNeHzq0ZNWddyDWisMJ4BJXAqCxQbQ+n1d3SUj8YkGQ4pYosX0lJXb6B9FmvuOqgo/CJbJxMDeeW79ynLomoXhWOoJ8SevZn4WExABFud026fq7+8falnZ8qUQCW/ULfpUKBR6H3DB+vtBeVD5XAo0pmKEYk1VDE/YMDgElEEws0KS/V4N9CTm2EMiZZmd2Z8Fb7/gVnBMm8dFHSnsS0Eaos9olTeGA+EtBw4c+Db4UkxLFUvh5uiHMHcXg7k1FMK0WDt5IFBY64LcA1D8kkCLV10VCLLfxpqz70NFhhtEAXTDSo+PfQJ+/drnWz9xOjOVTHuJcOTaS5At+SeRlBpGoYota23augIBhyZg/+5xPAVrnglZiy7NypUro6xwDsPvEsyphYqOIbAIs3Nh0LpgfGIaBSlAmAlcqAHHBDpbLKapWEiIojI1rMAXbx37rr0hUas7e1toJyUBnTATnpo7rbepbEq6+bw3Q953OhLtRXfv3p3oG57NlleHXg+q9MfOzs5uOLz7PBa811+FOzseJ7VJSvZau3atjGmPM0RiXh5QlLMtwzpZkqUgG1pKmc4ghmGaI0QgO9K6/itZDvx2ZGRk3NfOYc3q7oaK+7uM+KUCKhrBFG1NVHxzjlCZ+C+GgkyvEQuCkIK/jDXQpz48Rn60Kfu4EoANcPNrd0E8eQoS6ai7qGTvSLKYrcbrqV31SOu9E5f0bt2aOZLr8/Ztb2rsFyKBTem59M7BwcHHD+M4JsBmR0NDY4YQWwET951iB3qfbaTxJGGBWhbrW+q9MkNDQxNeO/AK4lgKlhdGm8jdBLR0+pMBRbxBy+oVYFr2YAqoJSx7UAnrGEc9CY5iEPFdlBVTlOTHk2ntU6Ojo7v8bR7qxLs6arpG4qllArpKlDIlmOetnH81h72iARSmDFShYzWclGE8pUIFysYXSsLG5q4RqTQDV8aa4adwz7n90DmN3JaKkoiSypwxpgqpJkBHbTwwQC7JfPbxLYd7fQw1NRCW5cZ6XddD+GpDJ/5RHPQUHLo/aU1Dw9tUAg9R0zCILcfEnSS0IDAhjFphfcv6Fa8II16iKgrGvkJVX1/fDLzCAcOxEizPpFpNTU3vkqi1OZ1JhvBmmfIgjqP8sqfCfkGxsywBBQxKZOWRkEnfud3pfBlf2YUO+kcoK7ulShzsk+IhispFsAJec2DgOfFawBAIlNEkxFJheHBWhcfVAFSenoD6Uwxob8rC+C4ZpLUp68YbQZjZB/VVl62ehE/VTEPnQAiksIWzQXB6Ck9g6ARiQSJFK5+o2Db01tF7dybBp6UPcm+2DLSc1PGR+PRUWgFlN2rmZ+HQWs9us6muZtTM6lWYhyruLLtZ4k1S4ihiR7CcfVEWIRyK/nL/wOCl8AprrWMhWPYFb9y4UfjB5s2PZDPJ800UEEEQ7RRH4a5OZzgdUXxqP8sEVtYyBVUJaEFRPrezv/85cCoOjOKT39ZetfyC5Exnv6CiBGfRDMr47vhZlKookbPQglmdX02UwuYIhZPer8F1H4/Dq9odafVgZcBKzIBQWgcDkgRNgXed3pq5QO2BPUkKsowXbTlhpHOpqMkMEVpiemSUXpn4jz8+4O8LOAhOWrP6s3Et+UcrZZ06NzX1eCKRePEgu9oCt6y5+ePpdPx2xxwTuy/zfUfBVf6wEFNn/0pY1l0ULUFeiaa3E15BHK3z7pkB4d4f3L1PzyTOR8tvoMlj82eBtl3Bwc2EdZBF521jwC5D11mwjKyupE3t2ZVtbf8AjlDNq5UapnKbLVAoRIKlg4g6kmLO2bJkaIZpyE4F4D2TVfDgxSb84qUJ+PGtcXh1PV40GgeDveLOO3PXg0EwsklonJuFezL37eit6glcDqEQNmiiIImeSmCnxS+SBT0TUiKQvJ/cfv62jqvOKoFDR47kpeTuWwJUrUzS2f9GoXoJDtH/HbYdtr5EwY5GhJx5d4U7L1RF/Zu/RvZRzOoadhq9293hFSs6OBrBykXu7a0NPan4XDs6Ue7g+4O7nPDYd2yxMWInRp+K2UnTNJxN1G9JHO+L/WtkDSuZiv/65Pbm82AB4ZqY06pFIoFIJtHkhXFk0cSZKahPz8L/H62BjywLwccfHYQtP5+C1lJsYArPknEawUtgusB+F/BdRMtpJsEMhuDqsSF4y/gXnvgFnCvdi1tER0u59+UWSYAQEGDaNOnoyOu6zg1NBb/ylksgHzkW9y1dHl55ZVyYuaBZavta/Zp6FmUuZAZtbZVtrP1iJpUoIY5/V9iXOa3lvWj+RQoDa6awTEM7p766+hzftR13HI1g2R2wsm35I+l4qllgQkXtkKtoN/s+DHTQCdNk4ZLSp7Mm3ahnjX+lkvjV0tLYDhwh9O/tezaoj4lCwUPpwv9Ni8YTqS0tlZVslYwBvs65SpJaJ/HUFehjLzMSoMYr4baxGFwWqoPyW6Zh+/MTcDEmaDKTeBCSCYSJveC8qM9yeKcVVRC1caDlVfDQz++EUnjTtvdBY2wYHXcWbuaLJOwDbPMo4uhZ0DdB0nTwAfjhpb+Byy4jzsbCSWAQWqdr+q+lNuXJMlJWBQuDsrp7bPaTbtQnFAuLo5gKtT09qGtOhKxhQjASvDt/9PHHYk9iT5P29sZL03NoCghhakic35x9t8gomFI4GN43ZabePDM8c6C4sRa2kEEUtmDOrl4kjtZzahBy7VmGYQix8rKuPd0HloPP6f3TSe2bxwaHrtmLSuV5EoDRFTq8/uo4XHsVsvEsQMw67Lp9ddhyFtPAouRemuBj4f1Xje46joUQrIId2OwZlR9cs2LiFGkvjOmWzW8dbBQp9oOUEaG+eQrG6Jnw2Ud7wOcbosC0ocs3EzgtIJuzpjhxYGK4qAXbR2usrdlsGvo1OBOdagnb7uW6PZ828F35wr5X7hgLwyJBVJS3Dw6OPgxHRpUsCosVLDtiaWtumEinkjFm1vw3aDdM7BoopqmkSLTk8e6evg3+YyHfK97shuV11TtmdH2NzGYky/cJXhht2eqLCYisKB8ZHBm7w7uQ01sqrxrOhtaBYPx5w9umhE98IBOOoA5BUyZopmCxscE+pZZuqXW10HrSWmg2NOiQwrDcmLObYBWAxA6w3Dbti9PRskZAyhL4f5EIfBXu3HALDA3eCGbAWtB/zI2xaIKZEKE5BuJA4F/ML//hu+4eQaRhKPJ6Gd9RfmffloC2troWPWP0UsOwGBdTEPEB5ITHPSf+TFGlCya128r5VjmnPq/ZKFXU4PiBgaF6t4G/OcGy7ywWi/1TSCR3mygChHhzvwCMOiCBUGB/T9/wMigSoiLYwrYeO6e/o/15K50pkWQxjqpOtrB5WZR1NJWyYRqBaGm098WXus91j2OrajT2oXX96WW9cTEJ0SiFeLzwYqpnBUg3EggO0PVnNZpbN241PvVeCH/um/D5YARuzEyBhZRPTlg8GUGtZSnlILzwF2g743XQB3ddOAl9vWVAZWp7ZMVm3x5RO57RQdUUaOp4Et7/X+u8ze1rln8tlY4PjHSOfAvmR5D29/aWpsdSifgG5hs5AlysU12agU0INMGKIk+l44lqIomuyvL2nafNkDvF+FANfaR/cPAOOM5aa9GCtaylYS+awRVUEnwhr/+mkLYW0a0W1RX7BwbYipiXuxG/JvPv65uiue/MvBTwWu0PvXPj/lD689CZtUDO6pjvI6wc2UkK4jEmK3k3WU0y+y0FPcF74bYt1/7Pn+CaU8+AzVbCN9PzFsfK6CCEKqAPBa8FvnbqG0AveQK0pGv6F4BFkTySJLGi8gfmh3/3T5BfSGG1tLRcGQ4GvpiStJ29L/ReXNyntbW1q2VivoDpCNsEHoySYYLCtDgRpWfVYOQCLTU77dyoP2SE4uZtg6gEQmnUWiz36UZNxweLcd6ZtmrEa1+BY0fBp6YLKAPG04nik4cpVFC03f+5+ObZ92KyVNj/9vs3xu6KN0MUzeSckYWhMRW6RxXYPyNDz5QMfbMiDCUEDCMJTM6EITjxYbjxzBvG/xcetiWIet6I8zKdKxBkEcUxDc3JBHwFPr3rSWS4tgIr9iKWNe+qWGmEoksQKXuySKhoY2NjUDcy7XOJ5E2zY7OfL7p+u+MiqvxjPWvfWo6z8p/A+epoH9tFsMjX0bTOEFV6mpES1IusC/yrXPDO3AqqaZlQW1PTRshP4OOCRTUcDgTWplIp51pd9hfmEc+sgM78z9yX+VhIWy52BtkzfOq+JwfgPTs+1vGd4ap6UvlBOKXsAEQYa8EsDgqCTXKyfIeCuT8cwCly8u5OiLPhF6PYQClYYhnqNGROqWGLiSUxzaThESr8e/9eaIAvH3gHLI9YkKWk6G6oTZqW1k7B9LlvhLzZtzsmUCZfGYhE9wQCAw9Pj03vhDynZO+3vK7uDelMZo2E/hLrT1Lg8bk7klz0RxRJwazq+P3sS0grvZE6y3Jp7mJ8FIWj4WyFxrxhdF+zN3V02E/S+ZvSWHh99GTn3W+l8rOD3YMoIOedSDzrblzoBsSiAxfz8sMbRNLV1ZUd+tzvvwdXPd0ae4G+Dprq9kBIwSluOPswq4FsvNhqbvvXWwHz3/CqZx6CFde8FUo++tH62EwK3qpUwqyB6U0LU5lI5oOO/FdNGzwNXV1zsI18FUKsRkLwaS30n+VKgKrMeti40QIfwdSyqv3SNFHN5NhkJyk57Wb2iCQodNohKdDNSNqxI0Svy8g8c2YbO8YForgLm9z2ha6xrmeCwcheN/2ay8Pm/DHii0xw8LSMJmUzoW+5OxwX0nRRUWFFeel3gop8rTWv+sm9eWBZECUlqKH6/fv3zx6snY625vcgj3AbhjXTqEzsxmxhdbqHqXa3ZN2e1JTZ1oAiKCkjc2ZPz9goHN692S0oX1h3kx6N3wyjaORQLaCBQ26n5AFpRPqf5EuGboWsGDRZkpqYvFO7p6t740YQPvNp+CVqrXdoCZsi1cUAKMkkXBurgTvh2+viMDQXtuWDMEc7iwnq0s3w/qf/GfIUg+0C1NfXV5ZWlW6aHJt5cGx4+EF3uydYGF03X67r6Z8hwW8z99QVyULf1fnM9C1SHgZqvyqcQHGvjcbG2KVZjdwvOcGzMN95Bz9NYQVkWdDS2abBqakBOA5YlGDFSkvvDAXkD1kL8jls9R4BWVXmqKjWFIXXBWhtarghlYxvwnyWczFuXE2LPvvbVmQZowLa0N8/MQSHB3aPdqimfmbddVpw7jZIs1IL9NNME/PBXvDlBlSxMlDL6H/BE9Yntbuf3jvUBWurWuAxIwPl2VmgwRqwHvxPiF7+/BsvguWT90NGQHrBINBSnYRfq1XwyCM6+DR048mtZyWmZ0YYf1e/vObdidH0c3Nzc13uZqecprl+NJ1OVzMz7Wkax3L5fVbbt7IjbUkNfqd/cOijkPdd7fe2Rmwnk6p2+rOYQM3TQHb7GPJK4ciW/v5BlgE45gnqRZlCNSCNWYeo1WTKBxMdgfTERMmh2kGWRmM+GkstiqLgqGz0AhgvVvzZrrVi604JOdIQmV2cnc/UvvzE7dBUPmCTYkjrOJwC9qmFL0OwrRmMT1nai1Nv1U4ne+DWc56ov3D5NMpyTE/BF1CoiDYN4kXXwG/gnj88AKGSYfTyBYgEBDGh/wsKlQb5yWqz7loqeSAWjd1a3tT0LlIe7XWFyitNthoba65Hf7UauSiL+Oi9wojQMW1IF4AYUCGZznzV3WD57pFVc9ziHucODyngv5xNbvuSZGaz2oa26uo1cBxSPYsSrEAg0mvYWtvvXwHk8n3MhTGyCmajWw7VDnXdfydVSB0NtYAW9LSXl8pgfAwcOZyG9ckdOfPKEsser2j/xmRBFpCFBRhLWDA+8wb4VLQbPr3usdJ/OOsbD/8IytUy6FTDsOGxH0M77DIuhhAKaUm00/zUUz+FQg1i1DTWf0BIC5X7O/df0lhact1s/8iMey22QLBIURXlr4jM6h90LFyTxvoACQhFN7ZMOeZLKN4JJ/MdsqqmsJO8AfEJk3+s7M8iwQhUCKs/dDcc0whxUY0l5+aeU1W1yCWn+bQDq9fA3F8kGn7Xoc6DQbOKqt2eXsy9MFng5gjQAmrZ6SvUYFTJSllYLAQrWjg3LcjzPt7EsF+oIpEI7WdqYmIDvFucvfiF130JZW5lcgZuWn857IDv/+nP0Nh8AEbIe/Od4Ly3rWhYMzowdE91XdXvV61adf70zOx5ieFcRYP9fIlAQP98Ip4MMYLdu0d/NJf/zWF1mGuoyeTGoh1yHcQKB0Ui3oH96CY+nOML2/UdIEpWOpk8rbGu7i1wjLXWohqyo5psaiyVSJdYxFOzhaqbKZ9wMJQ0BKkK/SwNFogM29raLgMz+008lJUjM/5OxxyZlM1mX+X5Xf6UBjuHLIkmydLG3vHxEbcZzz94OT+BdFzYoXRd2DoE4+OxfFBA4PCibiZgLFoPWeIe85LN3/lzV8nPgVzyvbV7Yfv2LOTLZYyGhoaKSCRwmmlY38Xk+TlZJXvGVP/UY15DbD/UVuXEzI4bhm6zAPNr1KgvRchCQQvUUOgPvX2DbzrUVbKxyaaTU7qeCTklXHkn3t+ftrAxGhL55GA43N/dP9gMx5CNXzTz3lhTeZeVNf4ZWCrBLoCZ1xQrBxUUJbDpwODwJ2F+od6ChXvLmpu/mUzFr3fyjw78nSGJBGkYaOqfcJz3YDDYWF9fdV53d989B2vTg3zda9+XXW39AJPJTn/rurfFSdEQCocoE2AcmIU2HqNK5CrUykRpfKp59mu7psEnncuWtV1dEgy/YzA1/GNIiF3RqvBZ3bt77oL8oNkToLW16Z50In61KIi+3GNhH/rvm/lXVFZ+VDKX+O9SWa5FrWSyR+I0YrP7cGvYbl8g6Cb2ZMPSV8AwVued+GJOzA0RiL1Wzk5Qq0Hl/b19I/fAMRKuRas+DKGbFMHq0zSd6d2iDLwDFsJgxwmh0vBFnZ0HHoH5CWjv3fZNV7Y0fmA2k/key2oRt2KyGLIimYJOG3rGcnRDGIU8oSjSa/b3j7BK04NpLhJtaIjF33lqewWZXD0t0DOtk2NrIZ45GSytBCaQ8FXwMAuFjKWDqEuL5YlKtNnIH0Xxh8roftgfuR4enfydq62gurq6hkVtpVH1W51dfZevXrHi+9NTia8NTQzt9V2Tfc+s70Sa7UPz7z9BAfzVCs7VEx2nFPL6ojPqKBUYHyN3SyCCu2UtL+KzWBEbOJURRCjWWAXtO+3ibVk0ElVm1XBlze7duw34KwqWE942N9ynpVJXUIE4ua0izoWBZT5lSRAkJXB1T9/gvb6NfuHCmd56k5acu9kwUc0VmAbfbvi/LMtoCi2/KVQbKmKjSjgYTetmrbvKZyHhWngmvrcmLNP6juzZ2ntQPK6ARKoJ5pLMo6Guv8gcFAPEtASVNQnxQPK95je2/8p/HygoK0kJoUIa3o5Kr6+kMrg+kzT6SiMVm7Zv3+7Pybklx/W/TSZTFyAtR93VNjlBWrhsG2D+XIRD7AMvs9+8YyzTMIVIael/dPcc+DIcA611NM4a8xMCxDTGrWwmjJ4gi0Vy0YivacuJ+AD5UnWHbpj/Zhjw/NjYWCISiYSjIfUcNaB+JZPKrGKThxB/Vdv8qBOz+ZapmTlTiAjUVpb34zkqg6FQCpVOS6ez5OmQZhEWEG6GhsvWnz54jvZZUMSLYWyGQEY0QdVEaGh9dv1Q5hxWGQHu4g6WM61pq1lj6EYVTWfrMAd0xnQ69TkpbcnXXn/97jvuuCM4OjqaBtevYufp6KhdnU3SF3QzyzLkgt+/K+SuigVjIUEp6p9DopgwLVQCOP9pKBjUk7pZgdecgsNzPA+KoypNHhgYSEsB6WxZUsFeYeOEU+C/AXCy9Iz5MzOp9OmCaf5OFehAS03VUEU4OIg29JeZVGqV4AiVW9hVyIsVnRYNVSGXxWIHCWd/OpkK6QIZbGlpaQNHqA6VrqBF7/a1Dv5i6w74xDOXVj8wU6cGa74LyxQRWlt3wod+e1b8oVw5jtTymraPsbA/OZW6Yt+ufT80wHyNJYnbVSCh0enpF+6+63t9QUX5DuSFyu5rdIJ+nNGYASM+v8p5FWqqvIB5FEwuyezP/zFhpM7DmSi1CrdDfv95LHzBuW2BpslUUlUE4RvuAUeV6jkajcVga4WOtqbztXTmd0gx2LcJuToigAVnleuPMVEUyOHIttsxlKWKJMvSrQKNVV9ZPogNxRjFxZaPScEg6+QNg4OjbFFobmkaHD5yvmDpJWe2BxL66OijO5PNZyy/bnZSe3i2r29/VXvNvwtJuE+nejRSVnpecmLu/kAgMJlMJtXKipLOxFS8MhIOT3QPDrLCOtsctrY2rtfT2h9Qsx3E//HmZV7bo48uhDC6ZubAYtkcz5G1n3piiw4r9LOPcsyq44w7kQiIWiYVYP4WLfJZ80y825wjtJaqBgT0mqvcha6LxtGSYnYZcVdP/6NKOHSOJMnoCNpC5fNvfJbN/xM7ubfIcr7WpeDOQG/9XG4Dkx61iCB1VnKyWWevdjIzmiWY1hbMRbLqTQvy0djhTiRv6guzv/zLfiZU7Ed9eGY4JmBUib8bc/rOWF31ryraKnqroxXfQu3VTwXjgrJocCo5G68UMLLJWnqsrKysATxG0rK+b5nM13eDHSDzatfzVp8CK8cOhcKPXf2BD5UkNL02pRm1CS3LXjUpw6xN6EZdUjdq45pehy/2XpvMmrX4W02WCFW4TyUKygQTtFy3gidQxFct4ZhGpkVZ1UpAke52L2jR8nG0GsuDrbnYA/VjkeDW2dnZlcRO0Qgv40HO22zrcBPTJIGAoqE/xnpYzS95ooDJU5MWOu+BOqaxCIn5k7Y2QY9xQCAYGMbY4Z3dB4a2Fd3zkfoQpP2k9k/MTs8+FYqE6lPT052YFRpkj4ZsaqqsF0F5IJPOvFawy2fs/LmA2hWQcDkNXYZddXXVl4Kh30+IF60t1Af5z7bmYSVtsrBmYGBsJywSy5orrosn6W2MpgFfcnp+cJQD84kFURVXDAyM74MiH/RwcaxofFtzjeNg7+3pWyUr4WvQkR7Dkc0XEM07pPB3J1VjsmXhVjiq/pQooTL07dOO00VtsEFDjlKUkFsobi1vPVy/A0cQ97XQRNdpmezTzU01zzaUla2BQqfjSCaWOK1N3z05Mvlcf1f/rycnEy9JkhRsqq/+vkClQfQTX4s5T9NVA+z5udREmj+TYeuDkG9TpG+7sY3jazk37d28j/h3fCDToEIwJO1yhWqxCoBoVvCuUFBJsr71xyqC22GkyBSztCwbC1VQf+q1AYvAsdJY/vZcMoVFjbUXGoZ5rQzkbGSGYgZT72wemqysltimkO2MznjWFEiPRMm9aUrudCkDgk74Kva8Rsw5YvqDWOjzog0y5K6+Praq14v4AvXV5QMoRxXF3KYvdEf3xBJkUQISkPdYVNiUyei/GRt72dKbeWDPpUgmZ98YjZbeYKaSb8IsAZN1TGDZtIErH5Tlp0QlGHrmwMDQ2U0NNZtwtG4gkH++Qm6Q/Y409fmj7PEAIbiou3vkEVik1vCOW97S8iVNT3/GqdKmrhdMXIEmef6RgvvMMGd+GIJ42eDgyP2wCBxrwfK36wkYphlAzWQam/WZmVOjIXmZEQwphm5ZaU0bwVm/F7mpvYODg5NFxwIc2uH2OhsFK4aCRSo8f6FwszNejuZDvgbNI2tUkTAIEIRd6Bc+iuZtG5rYfWh/R0OhkK6qs5ZhxEg6ncad0hXxeKqtrKTs1SgUG7C1swxdC5msrIvl+Fz7yyo6nGlCDU2zpGhJaChaXrli586dKUzxnCaKJnOZ7DWRToWGxgos0CnM2veIbJ9gf9ZsjlZQ1Sj09PQwcvVoOSVbQyI1dAqlmQzSrHhaO+uN5yaW81QahfieYoPKjJHegQBGDjo68XtgEThegrXQeQ5nxi1mZto+FnZMDObXLxXsmF+r6ARRrGicCYiiKva+rCyYjS4rSWa1oyzPg4KIxJmF2Z+sU8Jj08Dek5iJz7hQ51GCpgDRavjCnj0TG90THfSBJoeJxWqrY3X8ogT7lfojQod7Y4vrAAK02AVd0DF15cn9YlNJosSKSS1bJrNWli0PcasO3X9c4RQlp6toLnXlNUNzFs0uVpElU1FGboH8vXhC5U9nHQmORiiOxfGL0pavlMY6nrBNIb5XOF8XCBN8yVyAfHVmQahfIHT+dgoiNR/P5DO5/jwpU4QZsk9QGPMkZJBTe0bLGrcNDw/7HwJyXBeL/i1gqQiWbQopnf9on4OWoxAnjcFyjxiK28WjZAEmwjZvAmF5BWJkDcmi9hOF3Kf9LXAe6qzhJo4XDAbaVVkNQEQJ/Hxvb98VsHjN9XeFJSRYQsy3nBwWFqy8R2T/LwhmQFRWo788qSjZBd0C5twiH2UkEsxDt14vKfLtRibZCLmHoOS1X16e3XPnfDonI1ASLXl8b88B9qiBY1b39LeKJSNYeCsxv3nypyz8dd8FXI6kGLPxZF08Hj+i9EV7a9Ojybm5N4uS6D60wzut39Q61wH5NI2JgQDj4LwHcyxpHNM6578SmJ0iBRyQ98lzfwjx+VS+7aiNVFU9kj9tYrMW+3v7LwxFIlPswYXU87l8QutPlXiRI7AVZITllYQr4ATAUhAsSoT5/D7JMcv2Lr7ffO4NOWJfx6tUQBpbuJPV6PvTTf56deJbJOIUoNu0KTgM+NLHUhAsyFM1dP7v/lRPbl/IFfgsArZvlDWz/WzJWu5M887jCyDdHexlbAWrp5culoQpdOI5P2G/gIDl4MvuH4WPSQz7WUaFv+WlyPfd72eBvaAbTgAsCVNox/U+Xiqf2/VFgVA46AsQV0cGAeaVonjnXrgUyC3MEwjXWH8/cNK/3sJWT3EUVkp68LyxHFe+OA0ie2LpOep5LTWvZr0gfWktXpj/jrA0TKG38jeXXvEx47To3T3kaCFoubPO868K+TSHz/K+sseVe03AEsaSuDlRFMOsvogliVkpjv0sCPYnVNhn+5kPYP9mv7vb2WeRlZsubrk+Wy5UxtrOsipX0/RsYE6I2DpA+2Ua9jt7khsrFxJFuLSystL7+9BL1t96pZLQxxPZtJa93qA0gMy4l/B1B4zRTExwWEGL5T7ex8vuUVHSLUVWlGlYBKbj8YdUsIKVePxcKKJIYAREImMSm4pExH4VBEWggmSy66JUsojFnttNDMtqr66OfnpiYuIzwPE3CyZAR6t1F9PGsZiQi/2b0xwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHByHgf8Dfj/UA2srSJsAAAAASUVORK5CYII=\"/>\n</defs>\n</svg>\n`\n};\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { CUSTOM_ICONS } from './custom-icons.registry';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomIconRegistryService {\n private icons = new Map<string, SafeHtml>();\n\n constructor(private sanitizer: DomSanitizer) {\n Object.entries(CUSTOM_ICONS).forEach(([name, svg]) => {\n this.icons.set(name, this.sanitizer.bypassSecurityTrustHtml(svg));\n });\n }\n\n getIcon(name: string): SafeHtml | undefined {\n return this.icons.get(name);\n }\n}","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CustomIconRegistryService } from './custom-icon-registry.service';\n\n@Component({\n selector: 'app-custom-icon',\n templateUrl: './custom-icon.component.html',\n styleUrl: './custom-icon.component.scss',\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\n/**\n * Custom font-awesome icon implementation.\n * Supports all font awesome sizing classes.\n */\nexport class CustomIconComponent {\n\n @Input() name!: string;\n svgIcon: any;\n\n constructor(private registry: CustomIconRegistryService) { }\n\n ngOnChanges() {\n this.svgIcon = this.registry.getIcon(this.name);\n }\n}\n","<span class=\"fa\" [innerHTML]=\"svgIcon\"></span>","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'app-techlify-icon',\n templateUrl: './techlify-icon.component.html',\n styleUrls: ['./techlify-icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class TechlifyIconComponent {\n @Input() name: string = '';\n @Input() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\n\n get iconClass(): string[] {\n const baseClass = this.iconMap[this.name] || 'fa fa-question-circle';\n const sizeClass = this.sizeMap[this.size] || '';\n return [baseClass, sizeClass];\n }\n\n //Custom icon list\n customIconList: string[] = [\n 'batch-add',\n 'unapprove',\n 'gra'\n ];\n\n //Method to check custom icons\n isCustomIcon(name: string): boolean {\n return this.customIconList.includes(name);\n }\n\n // Map logical names to CSS classes\n private iconMap: Record<string, string> = {\n add: 'fas fa-plus',\n view: 'fas fa-eye',\n edit: 'fas fa-pen',\n delete: 'fas fa-trash',\n import: 'fas fa-file-import',\n export: 'fas fa-file-excel',\n print: 'fas fa-print',\n pdf: 'fas fa-file-pdf',\n history: 'fas fa-clock',\n copy: 'fas fa-copy',\n activate: 'fas fa-check-circle',\n deactivate: 'fas fa-stop-circle',\n email: 'far fa-envelope',\n approve: 'fas fa-check',\n reject: 'fas fa-times',\n calendar: 'fas fa-calendar',\n table: 'fas fa-table',\n multi_calendar: 'fas fa-calendar-alt',\n link: 'fas fa-link',\n link_external: 'fas fa-arrow-up fa-rotate-by rotate-45-deg',\n reset: 'fas fa-redo',\n phone: 'fas fa-phone',\n location: 'fas fa-map-marker-alt',\n unlink: 'fas fa-unlink',\n disable_user: 'fas fa-user-slash',\n swap: 'fas fa-retweet',\n apps: 'fas fa-th',\n user: 'fas fa-user-circle',\n search: 'fas fa-search',\n close: 'fas fa-times'\n };\n\n // Map size input to CSS classes\n private sizeMap: Record<string, string> = {\n xs: 'fa-xs',\n sm: 'fa-sm',\n md: 'fa-md',\n lg: 'fa-lg',\n xl: 'fa-2x'\n };\n}","<!-- Custom icon -->\n<ng-container *ngIf=\"isCustomIcon(name); else faIcon\">\n <app-custom-icon [name]=\"name\"></app-custom-icon>\n</ng-container>\n\n<!-- Font Awesome -->\n<ng-template #faIcon>\n <i [ngClass]=\"iconClass\"></i>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CustomIconComponent } from './custom-icon.component';\n\n\n\n@NgModule({\n declarations: [CustomIconComponent],\n imports: [\n CommonModule,\n ],\n exports: [CustomIconComponent]\n})\nexport class CustomIconModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyIconComponent } from './techlify-icon.component';\nimport { CustomIconModule } from '../custom-icon/custom-icon.module';\n\n@NgModule({\n imports: [\n CommonModule,\n CustomIconModule\n ],\n declarations: [TechlifyIconComponent],\n exports: [TechlifyIconComponent]\n})\nexport class TechlifyIconModule { }\n","import { NgModule } from '@angular/core';\nimport { SuccessSnackComponent, ErrorSnackComponent } from './snack.component';\nimport { CommonModule } from '@angular/common';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n SuccessSnackComponent,\n ErrorSnackComponent\n ],\n imports: [\n CommonModule,\n MatSnackBarModule,\n MatIconModule\n ],\n exports: [\n SuccessSnackComponent,\n ErrorSnackComponent,\n ]\n})\nexport class SnackModule { }\n","import { Injectable } from '@angular/core';\nimport { SwUpdate } from '@angular/service-worker';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n/**\n * Watches for new app deployments via the Angular service worker and prompts\n * the user to reload. Checks are event-driven only (VERSION_READY push, tab\n * becoming visible again) - a periodic polling interval was reviewed and\n * rejected, so don't reintroduce one.\n *\n * Consuming apps must register the service worker themselves\n * (ServiceWorkerModule.register('ngsw-worker.js', ...)) and call init() once,\n * e.g. from AppComponent.ngOnInit().\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AppUpdateService {\n\n constructor(\n private swUpdate: SwUpdate,\n private snackBar: MatSnackBar\n ) { }\n\n init() {\n if (!this.swUpdate.isEnabled) {\n return;\n }\n\n this.promptOnVersionReady();\n this.reloadOnUnrecoverableState();\n this.checkForUpdatesWhenTabBecomesVisible();\n }\n\n private promptOnVersionReady() {\n this.swUpdate.versionUpdates.subscribe(event => {\n if (event.type === 'VERSION_READY') {\n this.promptReload();\n }\n });\n }\n\n private reloadOnUnrecoverableState() {\n this.swUpdate.unrecoverable.subscribe(() => {\n alert('An error occurred loading the latest version of the app. It will now reload to recover.');\n document.location.reload();\n });\n }\n\n private checkForUpdatesWhenTabBecomesVisible() {\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n this.swUpdate.checkForUpdate();\n }\n });\n }\n\n private promptReload() {\n const snackBarRef = this.snackBar.open('A new version of the app is available.', 'Reload', {\n horizontalPosition: 'right',\n verticalPosition: 'top',\n });\n snackBarRef.onAction().subscribe(() => document.location.reload());\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { CredentialsService } from './credentials.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('AuthenticationGuard');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationGuard {\n\n constructor(private router: Router,\n private credentialsService: CredentialsService) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n isUserAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (this.credentialsService.isAuthenticated) {\n return true;\n }\n\n log.debug('Not authenticated, redirecting and adding redirect url...');\n this.router.navigate(['/login'], { queryParams: { redirect: state.url }, replaceUrl: true });\n return false;\n }\n\n}\n","/**\n * Class representation of a user\n *\n * @author Joshua Kissoon\n * @since 20170709\n */\nexport class User {\n id: number;\n name: string;\n email: string;\n password: string;\n status_id: string;\n user_type_id: number;\n is_temporary_password: boolean;\n client_id: number;\n roles: any[];\n permissions: any[];\n type: any;\n selected: boolean;\n client: any;\n temporarily_invited: boolean;\n short_name: string;\n avatar_color: string;\n signature: string;\n signature_url: string;\n user_client: any;\n clients: any[];\n\n constructor() {\n this.id = 0;\n this.client = {};\n this.roles = [];\n }\n\n loadFromMap(data: any) {\n this.id = data.id;\n this.email = data.email;\n this.name = data.name;\n this.status_id = data.status_id;\n this.user_type_id = data.user_type_id;\n this.client_id = data.client_id;\n this.is_temporary_password = data.is_temporary_password;\n this.roles = (data.roles == null) ? [] : data.roles;\n this.permissions = (data.permissions == null) ? [] : data.permissions;\n this.type = (data.type == null) ? [] : data.type;\n this.client = data.client;\n this.signature = data.signature;\n this.signature_url = data.signature_url;\n this.user_client = data?.user_client;\n this.clients = data?.clients;\n }\n}\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Service used to manage Local Storage\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20190623\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n private storageSub = new Subject<any>();\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n watch(): Observable<any> {\r\n return this.storageSub.asObservable();\r\n }\r\n\r\n setItem(key: string, data: any) {\r\n localStorage.setItem(key, data);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n\r\n getItem(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n removeItem(key: string) {\r\n const data = this.getItem(key);\r\n localStorage.removeItem(key);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable, of, map, BehaviorSubject } from 'rxjs';\n\nimport { User } from './user.model';\nimport { StorageService } from '../core/storage.service';\nimport { HttpService } from '../core/http.service';\n\n/**\n * Service that manages information about the current user\n *\n * @author Joshua Kissoon\n * @since 20170817\n */\n@Injectable({ providedIn: 'root' })\nexport class CurrentUserService {\n private user: User;\n private data: any;\n\n /**Deprecated stop using for new projects */\n private userSub = new Subject<User>();\n // Track the auth status of the user.\n private isLoggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n constructor(private http: HttpService, private storage: StorageService) { }\n\n /**\n * Get the login status of the user.\n */\n getAuthStatus(): Observable<boolean> {\n return this.isLoggedIn.asObservable();\n }\n\n /**\n * Update the login status of the user.\n *\n * @param val The next value of the isLoggedIn.\n */\n updateAuthStatus(val: boolean): void {\n this.isLoggedIn.next(val);\n }\n\n /**\n * Returns an user if present, otherwise a empty user\n * @returns {User} user\n */\n getUser(): any {\n if (this.user) {\n return this.user;\n }\n this.user = new User();\n const userFromStorage = JSON.parse(this.storage.getItem('currentUser'));\n if (userFromStorage) {\n this.user.loadFromMap(userFromStorage);\n }\n return this.user;\n }\n\n /**\n * @deprecated Don't use for new projects, use getUserObservable() instead\n * @returns {Observable<User>} Observable of user once changed.\n */\n watch(): Observable<any> {\n return this.userSub.asObservable();\n }\n\n /**\n * Loads the current logged in user\n * @deprecated use getUserObservable() instead\n * @param reload whether to fetch new data from server\n * @returns {Promise<User>} promise of user\n */\n getCurrentUser(reload = false): any {\n let promise;\n if (undefined !== this.data && !reload) {\n promise = new Promise((resolve, reject) => {\n resolve(this.data);\n });\n\n return promise;\n }\n promise = this.http.get('api/user/current').toPromise();\n\n promise.then(\n res => {\n this.user = new User();\n this.data = res;\n this.user.loadFromMap(res.user);\n this.storage.setItem('currentUser', JSON.stringify(res.user));\n this.userSub.next(this.user);\n }\n );\n\n return promise;\n }\n\n /**\n * Used to update the current user data\n * @param {any} userData data that needs to be updated to current user\n */\n updateCurrentUser(userData: any): any {\n this.user = new User();\n this.data = userData;\n this.user.loadFromMap(userData);\n this.storage.setItem('currentUser', JSON.stringify(userData));\n this.userSub.next(this.user);\n }\n\n /**\n * @param {number} id Id of role\n * @returns {boolean} true if role is present\n */\n hasRole(id: number): boolean {\n if (this.user.roles == null) {\n return false;\n }\n return (this.user.roles || []).some(role => role.id == id);\n }\n\n /**\n * @param {number} id Id of permission\n * @returns {boolean} true if permission is present\n */\n hasPermission(slug: string): boolean {\n if (!this.user) {\n return false;\n }\n if (this.user.user_type_id == 1) {\n return true;\n }\n else {\n if (this.user.permissions == null) {\n return false;\n }\n return (this.user.permissions || []).some(permission => permission.slug == slug);\n }\n }\n\n /**\n * Returns the observable of user\n * @param {boolean} reload - whether to reload the entire user again\n * @returns {Observable<User>} Observable of user.\n */\n getUserObservable(reload: boolean = false): Observable<User> {\n if (this.user && !reload) {\n return of(this.user);\n }\n return this.http.get('api/user/current')\n .pipe(\n map((res: any) => {\n this.user = new User();\n this.data = res;\n this.user.loadFromMap(res.user);\n this.storage.setItem('currentUser', JSON.stringify(res.user));\n return this.user;\n })\n );\n }\n\n /**\n * @returns {any} Returns the raw user data\n */\n getUserData(): any {\n return this.data;\n }\n}\n","\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport {catchError, map, switchMap} from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials.service';\nimport { HttpService } from './http.service';\nimport { CurrentUserService } from '../user/current-user.service';\n\n/**\n * Provides a base for authentication workflow.\n * The login/logout methods should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n\n constructor(\n private credentialsService: CredentialsService,\n private http: HttpService,\n private currentUserService: CurrentUserService\n ) { }\n\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n login(context: any): Observable<Credentials> {\n const data = {} as Credentials;\n return this.http\n .skipToken()\n .post('oauth/token', context)\n .pipe(\n switchMap((tokenInfo: any) => {\n tokenInfo.expires_in = Date.now() + (tokenInfo.expires_in * 1000);\n data.token = tokenInfo;\n data.user = {};\n this.credentialsService.setCredentials(data, context.remember);\n // Update the auth status of the user.\n this.currentUserService.updateAuthStatus(true);\n return this.http.get('api/user/current')\n .pipe(\n map((res: any) => {\n data.user = res?.user;\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n }),\n );\n }),\n );\n }\n\n /**\n * Logs out the user and clear credentials.\n * @return True if the user was logged out successfully.\n */\n logout(): Observable<boolean> {\n return this.http.post('api/user/logout', {}).pipe(\n map(() => {\n // On successful logout, update auth status and clear credentials\n this.currentUserService.updateAuthStatus(false);\n this.credentialsService.setCredentials();\n return true;\n }),\n catchError(() => {\n // On error, return false\n return of(false);\n })\n );\n }\n}\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { Injectable } from '@angular/core';\n\n/**\n * A route strategy allowing for explicit route reuse.\n * Used as a workaround for https://github.com/angular/angular/issues/18374\n * To reuse a given route, add `data: { reuse: true }` to the route definition.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteReusableStrategy extends RouteReuseStrategy {\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle | null): void { }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n return null;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // Reuse the route if the RouteConfig is the same, or if both routes use the\n // same component, because the latter can have different RouteConfigs.\n return future.routeConfig === curr.routeConfig ||\n Boolean(future.routeConfig?.component &&\n future.routeConfig?.component === curr.routeConfig?.component);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n/**\n * @deprecated by release 18.20\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class FilterService {\n\n filters: any;\n\n constructor(private router: Router) { }\n\n applyFilterToRoute(url, filter) {\n this.router.navigate([filter],\n {\n relativeTo: url,\n replaceUrl: true\n }\n )\n }\n\n getFiltersFromRoute(url, filterFormGroup) {\n url.params.subscribe(\n params => {\n for (var filter in params) {\n if (params[filter]) {\n\n for (let [key, value] of Object.entries(filterFormGroup)) {\n if (key === filter) {\n filterFormGroup[key] = params[filter];\n }\n }\n\n }\n\n }\n }\n );\n return filterFormGroup;\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, OnInit, output, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { finalize } from 'rxjs/operators';\nimport { MaterialModule } from '../material.module';\nimport { TechlifyIconModule } from '../techlify-icon/techlify-icon.module';\nimport { ActionPopupComponent } from '../action-popup';\nimport { TechlifyService } from '../base-model';\nimport { AlertService, ErrorHandlerService } from '../core';\n\ninterface DeleteButtonData {\n title: string;\n type: string;\n}\n\n@Component({\n selector: 'app-techlify-delete-button',\n templateUrl: './techlify-delete-button.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n MaterialModule,\n TechlifyIconModule\n ]\n})\n\nexport class TechlifyDeleteButtonComponent {\n\n data = input<DeleteButtonData>({\n title: 'Delete Record',\n type: ''\n });\n model = input.required<any>();\n message = input<string>();\n service = input.required<TechlifyService>();\n\n deleted = output<boolean>();\n //Emits true while the delete request is in progress, so the parent can show its own progress indicator\n loading = output<boolean>();\n\n constructor(\n private dialog: MatDialog,\n protected alertService: AlertService,\n protected errorHandler: ErrorHandlerService\n ) { }\n\n open() {\n let message = this.message();\n const data = this.data();\n\n if (!message && data?.title) {\n message = `Deleting this ${data.type || 'model'} <strong>${data.title}</strong> cannot be undone. <br> Are you sure you want to continue?`;\n } else if (!message) {\n message = 'Are you sure you want to delete this model?';\n }\n\n this.dialog.open(ActionPopupComponent, {\n data: {\n title: 'Delete',\n message: message,\n }\n }).afterClosed().subscribe((result) => {\n if (!result) {\n return;\n }\n\n if (!this.service()) {\n console.error('Service not provided');\n return;\n }\n\n this.loading.emit(true);\n this.service().delete(this.model())\n .pipe(finalize(() => this.loading.emit(false)))\n .subscribe({\n next: (response: any) => {\n this.alertService.addAlert('Successfully Deleted', 'success');\n this.deleted.emit(response.item);\n },\n error: (error) => {\n this.errorHandler.handleError(error);\n }\n });\n\n })\n }\n\n}\n","<app-techlify-icon role='button' name='delete' (click)=\"open()\"></app-techlify-icon>","export class Timeline {\n public static CUSTOM: number = 1;\n public static TODAY: number = 2;\n public static YESTERDAY: number = 3;\n public static THIS_WEEK: number = 4;\n public static LAST_WEEK: number = 5;\n public static THIS_MONTH: number = 6;\n public static LAST_MONTH: number = 7;\n public static THIS_QUARTER: number = 8;\n public static LAST_QUARTER: number = 9;\n public static THIS_YEAR: number = 10;\n public static LAST_YEAR: number = 11;\n public static ALL: number = 12;\n public static TOMMOROW: number = 13;\n public static NEXT_WEEK: number = 14;\n public static NEXT_MONTH: number = 15;\n}\n","import moment from 'moment';\nimport { Timeline } from './timeline.model';\n\n\nexport interface TimelineValue {\n date_from: Date;\n date_to: Date;\n show_custom_field: boolean;\n}\nexport function calculateTimeline(value: number, dateFrom?: string, dateTo?: string): any {\n const date = new Date();\n const data: any = {\n date_from: date,\n date_to: date,\n show_custom_field: false\n };\n switch (value) {\n case Timeline.CUSTOM: { // Custom\n data.show_custom_field = true;\n data.date_from = dateFrom ? moment(dateFrom).toISOString() : '';\n data.date_to = dateTo ? moment(dateTo).toISOString() : '';\n break;\n }\n case Timeline.TODAY: { // Today\n const now = moment();\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.YESTERDAY: { // Yesterday\n const now = moment().subtract(1, 'day');\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.THIS_WEEK: { // This Week\n const now = moment();\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.LAST_WEEK: { // Last Week\n const now = moment().subtract(1, 'week');\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.THIS_MONTH: { // This Month\n const now = moment();\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n case Timeline.LAST_MONTH: { // Last Month\n const now = moment().subtract(1, 'month');\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n case Timeline.THIS_QUARTER: { // This Quarter\n const now = moment();\n data.date_from = now.startOf('quarter').toISOString();\n data.date_to = now.endOf('quarter').toISOString();\n break;\n }\n case Timeline.LAST_QUARTER: { // Last Quarter\n const now = moment().subtract(1, 'quarter');\n data.date_from = now.startOf('quarter').toISOString();\n data.date_to = now.endOf('quarter').toISOString();\n break;\n }\n case Timeline.THIS_YEAR: { // This Year\n const now = moment();\n data.date_from = now.startOf('year').toISOString();\n data.date_to = now.endOf('year').toISOString();\n break;\n }\n case Timeline.LAST_YEAR: { // Last Year\n const now = moment().subtract(1, 'year');\n data.date_from = now.startOf('year').toISOString();\n data.date_to = now.endOf('year').toISOString();\n break;\n }\n case Timeline.TOMMOROW: {\n const now = moment().add(1, 'day');\n data.date_from = now.startOf('day').toISOString();\n data.date_to = now.endOf('day').toISOString();\n break;\n }\n case Timeline.NEXT_WEEK: {\n const now = moment().add(1, 'week');\n data.date_from = now.startOf('isoWeek').toISOString();\n data.date_to = now.endOf('isoWeek').toISOString();\n break;\n }\n case Timeline.NEXT_MONTH: {\n const now = moment().add(1, 'month');\n data.date_from = now.startOf('month').toISOString();\n data.date_to = now.endOf('month').toISOString();\n break;\n }\n default: { // All\n data.date_from = '';\n data.date_to = '';\n break;\n }\n }\n return data;\n}\n","/* tslint:disable:radix */\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, EventEmitter, Input, OnInit, Optional, Output, Self, ViewChild, ChangeDetectionStrategy } from '@angular/core';\nimport {\n ControlValueAccessor,\n UntypedFormBuilder,\n UntypedFormGroup,\n NgControl,\n Validators\n} from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { calculateTimeline } from './calculate-timeline';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { Timeline } from './timeline.model';\nimport { MatDatepicker } from '@angular/material/datepicker';\nimport { DatePipe } from '@angular/common';\n\n@UntilDestroy()\n@Component({\n selector: 'app-timeline-filter',\n templateUrl: './timeline-filter.component.html',\n styleUrls: ['./timeline-filter.component.scss'],\n providers: [\n DatePipe,\n {\n provide: MatFormFieldControl,\n useExisting: TimelineFilterComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class TimelineFilterComponent implements OnInit, ControlValueAccessor {\n isInitialised: boolean = false;\n isCustomDatePatching: boolean;\n @Input() set defaultValue(value: any) {\n this.value = value;\n }\n\n get empty() {\n const { value: { select_value } } = this.selectorForm;\n return !select_value;\n }\n\n get shouldLabelFloat() { return this.focused || !this.empty; }\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm?.get('select_value')?.setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled\n ? this.selectorForm.disable({ emitEvent: false })\n : this.selectorForm.enable({ emitEvent: false });\n this.stateChanges.next();\n }\n\n @Input()\n get value(): any {\n if (this.selectorForm.valid) {\n return this.selectorForm.value.select_value;\n }\n return '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: parseInt(data) || '' }, { emitEvent: false });\n this.stateChanges.next();\n //If the selection is custom, validate if date is selected\n if (this.value == Timeline.CUSTOM) {\n if (this.isInitialised) {\n //If initialised already, open the calendar\n this.openCalendar();\n } else {\n //Apply default ranges from form if exist\n this.applyRange((this.getFieldValue(this.dateFrom) ?? null), (this.getFieldValue(this.dateTo) ?? null));\n }\n } else {\n this.changeTimeline(parseInt(data) || '');\n }\n this.isInitialised = true;\n }\n static nextId = 0;\n\n @ViewChild('picker') picker: MatDatepicker<any>;\n @Input() timelines: any[] = [\n { value: Timeline.CUSTOM, viewValue: 'Custom' },\n { value: Timeline.TODAY, viewValue: 'Today' },\n { value: Timeline.YESTERDAY, viewValue: 'Yesterday' },\n { value: Timeline.TOMMOROW, viewValue: 'Tomorrow' },\n { value: Timeline.THIS_WEEK, viewValue: 'This Week' },\n { value: Timeline.LAST_WEEK, viewValue: 'Last Week' },\n { value: Timeline.NEXT_WEEK, viewValue: 'Next Week' },\n { value: Timeline.THIS_MONTH, viewValue: 'This Month' },\n { value: Timeline.LAST_MONTH, viewValue: 'Last Month' },\n { value: Timeline.NEXT_MONTH, viewValue: 'Next Month' },\n { value: Timeline.THIS_QUARTER, viewValue: 'This Quarter' },\n { value: Timeline.LAST_QUARTER, viewValue: 'Last Quarter' },\n { value: Timeline.THIS_YEAR, viewValue: 'This Year' },\n { value: Timeline.LAST_YEAR, viewValue: 'Last Year' },\n { value: Timeline.ALL, viewValue: 'All dates' },\n ];\n @Input() dateFrom = 'date_from';\n @Input() dateTo = 'date_to';\n @Input() appearance: any = 'fill';\n @Input() showClearButton = false;\n @Input() form: UntypedFormGroup;\n @Input() labelText = 'Select Timeline';\n @Output() selectionChange = new EventEmitter();\n\n selectorForm: UntypedFormGroup;\n stateChanges = new Subject<void>();\n controlType = 'timeline-filter';\n id = `timeline-filter-${TimelineFilterComponent.nextId++}`;\n describedBy = '';\n focused = false;\n private _required = false;\n private _disabled = false;\n onChange: any = () => { };\n onTouched: any = () => { };\n\n //Custom range\n selectedRangeLabel = '';\n\n get timelineValue() {\n return this.selectorForm.get('select_value');\n }\n\n get isCustomSelected() {\n return this.value == Timeline.CUSTOM;\n }\n\n get customDateFrom() {\n return this.selectorForm.get('custom_date_from');\n }\n\n get customDateTo() {\n return this.selectorForm.get('custom_date_to');\n }\n\n constructor(\n formBuilder: UntypedFormBuilder,\n @Optional() @Self() public ngControl: NgControl,\n private datePipe: DatePipe,\n ) {\n this.selectorForm = formBuilder.group({\n select_value: [''],\n custom_date_from: [''],\n custom_date_to: [''],\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n this.timelineValue.valueChanges.\n pipe(\n debounceTime(100),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => this.value = value);\n\n //Listen only to custom date to, since it is range selector it always safe to listen date to\n this.customDateTo.valueChanges.pipe(\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(val => {\n if (val && !this.isCustomDatePatching) {\n this.applyRange();\n }\n });\n }\n\n resetFieldValue(field: string) {\n this.form?.get(field)?.setValue('');\n }\n\n getFieldValue(field: string) {\n return this.form?.get(field)?.value;\n }\n\n setFieldValue(field: string, value: any, emitEvent: boolean = true) {\n this.form?.get(field)?.setValue(value, { emitEvent: emitEvent });\n }\n\n /**\n * @param emitEvent Whether to notify the bound form/CVA of the change (default true, a genuine\n * selection). Pass false for a silent, display-only recompute - see writeValue.\n */\n changeTimeline(value: any, emitEvent: boolean = true): void {\n value = parseInt(value);\n this.selectedRangeLabel = '';\n const timeline = calculateTimeline(value, this.dateFrom, this.dateTo);\n if (timeline) {\n this.setCustomDates('', '');\n this.setFieldValue(this.dateFrom, this.datePipe.transform(timeline.date_from, 'yyyy-MM-dd'), emitEvent);\n this.setFieldValue(this.dateTo, this.datePipe.transform(timeline.date_to, 'yyyy-MM-dd'), emitEvent);\n }\n if (emitEvent) {\n this.onChange(this.value);\n this.selectionChange.emit(timeline);\n }\n }\n\n openCalendar() {\n this.picker.open();\n }\n\n /**\n * @param emitEvent Whether to notify the change (default true, a genuine\n * selection). Pass false for a silent recompute\n */\n applyRange(defaultFrom?: any, defaultTo?: any, emitEvent: boolean = true): void {\n const from = defaultFrom ?? this.selectorForm.get('custom_date_from')?.value;\n const to = defaultTo ?? this.selectorForm.get('custom_date_to')?.value;\n if (from && to) {\n this.selectedRangeLabel = `<b>${this.datePipe.transform(from, 'yyyy-MM-dd')}</b>:<b>${this.datePipe.transform(to, 'yyyy-MM-dd')}</b`;\n this.setFieldValue(this.dateFrom, this.datePipe.transform(from, 'yyyy-MM-dd'), emitEvent);\n this.setFieldValue(this.dateTo, this.datePipe.transform(to, 'yyyy-MM-dd'), emitEvent);\n if (emitEvent) {\n this.onChange(this.value);\n this.selectionChange.emit(this.value);\n }\n this.setCustomDates(from, to);\n }\n }\n\n setCustomDates(from: any, to: any) {\n // update form fields silently\n this.isCustomDatePatching = true;\n this.selectorForm.get('custom_date_from')?.setValue(from, { emitEvent: false });\n this.selectorForm.get('custom_date_to')?.setValue(to, { emitEvent: false });\n this.isCustomDatePatching = false;\n }\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n /**\n * Computes the change cycle only when there is a change in selection\n */\n writeValue(data: any): void {\n this.selectorForm.patchValue({ select_value: parseInt(data) || '' }, { emitEvent: false });\n this.stateChanges.next();\n if (this.isCustomSelected) {\n this.applyRange((this.getFieldValue(this.dateFrom) ?? null), (this.getFieldValue(this.dateTo) ?? null), false);\n } else {\n const value = parseInt(data) || '';\n const timeline = calculateTimeline(value || 0);\n const computedFrom = this.datePipe.transform(timeline.date_from, 'yyyy-MM-dd');\n const computedTo = this.datePipe.transform(timeline.date_to, 'yyyy-MM-dd');\n const hasDrifted = (computedFrom ?? '') !== (this.getFieldValue(this.dateFrom) ?? '')\n || (computedTo ?? '') !== (this.getFieldValue(this.dateTo) ?? '');\n this.changeTimeline(value, hasDrifted);\n }\n this.isInitialised = true;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n }\n\n}\n","<ng-container [formGroup]=\"selectorForm\">\n <mat-form-field [appearance]=\"appearance\" class=\"fl-sm\">\n <mat-label>{{labelText}}</mat-label>\n <mat-select formControlName=\"select_value\">\n <mat-option *ngFor=\"let timeline of timelines\" [value]=\"timeline.value\">\n {{timeline.viewValue}}\n </mat-option>\n </mat-select>\n <button *ngIf=\"showClearButton && timelineValue.value\" matSuffix mat-icon-button\n (click)=\"timelineValue.setValue('')\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-hint *ngIf=\"isCustomSelected && selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable d-flex\">\n <span [innerHTML]=\"selectedRangeLabel\" style=\"font-size: 10px;\"></span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-hint *ngIf=\"isCustomSelected && !selectedRangeLabel\" (click)=\"openCalendar()\" class=\"clickable d-flex\">\n <span style=\"font-size: 10px;\">Select Range</span>\n <app-techlify-icon name=\"edit\" class=\"clickable\" size=\"xs\" style=\"margin-left:2px\"></app-techlify-icon>\n </mat-hint>\n <mat-date-range-input class=\"offscreen-range-input\" [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"custom_date_from\" placeholder=\"From date\" readonly />\n <input matEndDate formControlName=\"custom_date_to\" placeholder=\"To date\" readonly />\n </mat-date-range-input>\n <mat-date-range-picker #picker></mat-date-range-picker>\n </mat-form-field>\n</ng-container>","import { CommonModule } from '@angular/common';\nimport { Component, input, output, Type, ChangeDetectionStrategy } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MaterialModule } from '../material.module';\nimport { TechlifyIconModule } from '../techlify-icon/techlify-icon.module';\n\n@Component({\n selector: 'app-techlify-form-button',\n templateUrl: './techlify-form-button.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n MaterialModule,\n TechlifyIconModule\n ]\n})\nexport class TechlifyFormButtonComponent {\n\n component = input.required<Type<any>>();\n model = input<any>();\n data = input<Record<string, any>>({});\n width = input<string>('700px');\n tooltip = input<string>('');\n\n /** Optional dialog component for adding multiple records at once; shows a \"multi add\" icon when set (create mode only) */\n multiAddComponent = input<Type<any>>();\n /** Dialog data for the multi add dialog; falls back to `data` when not provided */\n multiAddData = input<any>();\n multiAddWidth = input<string>('1000px');\n multiAddTooltip = input<string>('Multi Add');\n\n saved = output<any>();\n\n constructor(private matDialog: MatDialog) { }\n\n open() {\n const ref = this.matDialog.open(this.component(), {\n width: this.width(),\n data: { model: this.model(), ...this.data() }\n });\n\n ref.afterClosed().subscribe((result) => {\n if (result) {\n this.saved.emit(result);\n }\n });\n }\n\n openMultiAdd() {\n const ref = this.matDialog.open(this.multiAddComponent(), {\n width: this.multiAddWidth(),\n data: this.multiAddData() ?? this.data()\n });\n\n ref.afterClosed().subscribe((result) => {\n if (result) {\n this.saved.emit(result);\n }\n });\n }\n}\n","<app-techlify-icon role=\"button\" [name]=\"model() ? 'edit' : 'add'\" [matTooltip]=\"tooltip()\" (click)=\"open()\"></app-techlify-icon>\n@if (multiAddComponent() && !model()) {\n <app-techlify-icon role=\"button\" name=\"batch-add\" [matTooltip]=\"multiAddTooltip()\" class=\"ms-1\"\n (click)=\"openMultiAdd()\"></app-techlify-icon>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActionPopupComponent } from './action-popup.component';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule\n ],\n declarations: [\n ActionPopupComponent\n ],\n exports: [\n ActionPopupComponent\n ]\n})\nexport class ActionPopupModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DocumentViewerComponent } from './document-viewer.component';\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n NgxDocViewerModule,\n MaterialModule\n ],\n declarations: [\n DocumentViewerComponent\n ],\n exports: [\n DocumentViewerComponent\n ]\n})\nexport class DocumentViewerModule { }\n","import { Component, OnInit, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\nimport * as XLSX from 'xlsx';\n\n@Component({\n selector: 'app-export-excel-button',\n templateUrl: './export-excel-button.component.html',\n styleUrls: ['./export-excel-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class ExportExcelButtonComponent implements OnInit {\n @Input() isCSV: boolean = false;\n @Input() iconName: string = 'export';\n @Input() fileName: string = 'Export_Data';\n @Input() data: any[] = [];\n @Input() tableId: string;\n @Input() isParseNumeric: boolean = false;\n @Output() isExportingToExcel: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n isWorking: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n exportToExcel() {\n this.isWorking = true;\n this.isExportingToExcel.emit(true);\n setTimeout(() => {\n //If there is JSON data, then export it from data\n if (this.data?.length > 0) {\n this.convertJSONToExcel();\n } else if (this.tableId) {\n // If there is valid table id, try exporting from HTML table\n this.convertTableToExcel();\n }\n this.isExportingToExcel.emit(false);\n this.isWorking = false;\n }, 1000);\n\n\n }\n\n //Generate Excel with JSON data.\n convertJSONToExcel() {\n const ws = XLSX.utils.json_to_sheet(this.data);\n /* generate workbook and add the worksheet */\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\n if (this.isCSV) {\n XLSX.writeFile(wb, `${this.fileName}.csv`, { bookType: 'csv' });\n } else {\n XLSX.writeFile(wb, `${this.fileName}.xlsx`);\n }\n }\n\n //Fetches the data from table ID and gererate EXCEL.\n convertTableToExcel() {\n let element = document.getElementById(this.tableId);\n let ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(element, { raw: true });\n //Check if parse numeric is enabled and not a CSV file to apply the numeric parse\n if (this.isParseNumeric && !this.isCSV) {\n this.parseNumeric(ws);\n }\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\n if (this.isCSV) {\n XLSX.writeFile(wb, `${this.fileName}.csv`, { bookType: 'csv' });\n } else {\n XLSX.writeFile(wb, `${this.fileName}.xlsx`);\n }\n }\n\n //Try to parse the numeric values\n parseNumeric(ws: XLSX.WorkSheet) {\n // Convert numeric-looking strings to numbers\n Object.keys(ws).forEach(key => {\n //If value starts with '!', then it is metadata, so skip it\n if (key.startsWith('!')) {\n return;\n }\n const cell = ws[key];\n //If value is empty, then skip it\n if (!cell) {\n return;\n };\n //If cell value is a string\n if (cell.t === 's') {\n //Try converting the cell value to integer\n const value = Number(cell.v);\n if (!isNaN(value)) {\n //If value is valid number, then add meta data about the type\n cell.v = value;\n cell.t = 'n';\n }\n }\n });\n }\n\n}\n","<app-techlify-icon class=\"clickable d-print-none\" *ngIf=\"!isWorking\" [name]=\"iconName\" (click)=\"exportToExcel()\"\n matTooltip=\"Excel Export\">\n</app-techlify-icon>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExportExcelButtonComponent } from './export-excel-button/export-excel-button.component';\nimport { MaterialModule } from '../material.module';\nimport { TechlifyIconModule } from '../techlify-icon/techlify-icon.module';\n\n\n\n@NgModule({\n declarations: [ExportExcelButtonComponent],\n imports: [\n CommonModule,\n MaterialModule,\n TechlifyIconModule\n ],\n exports: [ExportExcelButtonComponent]\n})\nexport class ExportExcelModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileDropperComponent } from './file-dropper.component';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n MaterialModule\n ],\n declarations: [\n FileDropperComponent\n ],\n exports: [FileDropperComponent]\n})\nexport class FileDropperModule { }\n","import { MaterialModule } from '../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReadMoreComponent } from './read-more.component';\n\n@NgModule({\n declarations: [ReadMoreComponent],\n imports: [\n CommonModule,\n MaterialModule,\n ],\n exports: [\n ReadMoreComponent\n ]\n})\nexport class ReadMoreModule { }","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TimelineFilterRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TimelineFilterRoutingModule } from './timeline-filter-routing.module';\nimport { TimelineFilterComponent } from './timeline-filter.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatNativeDateModule } from \"@angular/material/core\";\nimport { TechlifyIconModule } from '../techlify-icon/techlify-icon.module';\n\n@NgModule({\n declarations: [TimelineFilterComponent],\n imports: [\n CommonModule,\n TimelineFilterRoutingModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatDatepickerModule,\n MatNativeDateModule,\n TechlifyIconModule\n ],\n exports: [TimelineFilterComponent]\n})\nexport class TimelineFilterModule { }\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n Output,\n EventEmitter,\n TemplateRef,\n ViewChild,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject, of, from, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, startWith, switchMap, finalize } from 'rxjs/operators';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { HttpService } from '../core/http.service';\n\n@Component({\n selector: 'app-searchable-selector',\n templateUrl: './searchable-selector.component.html',\n styleUrls: ['./searchable-selector.component.scss'],\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: SearchableSelectorComponent\n }\n ],\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false\n})\nexport class SearchableSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n @ViewChild('searchInput') searchInput: ElementRef;\n\n @Input() valueField: string = 'id';\n @Input() titleField: string = 'title';\n @Input() subtitleField: string;\n @Input() apiUrl!: string;\n @Input() multiple: boolean = false;\n @Input() selectedValue: any;\n @Output() selectedValueChange = new EventEmitter();\n @Input() enableSearch: boolean = true;\n @Input() add: boolean = false;\n @Input() addConfig: any;\n @Input() edit: boolean = false;\n @Input() editConfig: any;\n @Input() sort: boolean = true;\n @Input() sortBy: string;\n @Input() searchField: string;\n @Input() itemComponent: ComponentType<unknown> | TemplateRef<unknown>;\n @Input() items: any[] = [];\n @Input() apiDataProperty: string = 'data';\n @Input() cache: boolean = false;\n @Input() perPage: number = 50;\n @Input() inDataSearch: boolean = false;\n @Input() panelWidth: string = '';\n @Output() selectionChange = new EventEmitter();\n @Output() itemsChange = new EventEmitter();\n @Input() focusSearchOnOpen = false;\n @Output() isItemsEmpty = new EventEmitter<boolean>();\n\n /**\n * If this is set to true, if there is a pre-selected entity, \n * the entity that is populated will be emitted when it is set\n */\n @Input() isEmitInitialEvent: boolean = false;\n\n isLoading: boolean = false;\n onChange: any = () => { };\n onTouched: any = () => { };\n static nextId = 0;\n selectorForm: UntypedFormGroup;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'searchable-selctor';\n id = `searchable-selctor-${SearchableSelectorComponent.nextId++}`;\n describedBy = '';\n filters: any;\n cachedItems: any[] = [];\n private subscriptions: Subscription = new Subscription();\n\n get empty() {\n const { value: { select_value } } = this.selectorForm;\n return !select_value;\n }\n\n get shouldLabelFloat() { return this.focused || !this.empty; }\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm.get('select_value').setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled\n ? this.selectorForm.disable({ emitEvent: false })\n : this.selectorForm.enable({ emitEvent: false });\n this.stateChanges.next();\n }\n private _disabled = false;\n\n @Input()\n get value(): any {\n return this.selectorForm.get('select_value')?.value || '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: data || '' });\n this.stateChanges.next();\n }\n\n constructor(\n formBuilder: UntypedFormBuilder,\n private _focusMonitor: FocusMonitor,\n private http: HttpService,\n private _elementRef: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.selectorForm = formBuilder.group({\n select_value: [null],\n search: ''\n });\n\n this.subscriptions.add(\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n })\n );\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n openedChange(opened: boolean) {\n if (this.dataItems.length === 0 && this.selectorForm.get('search').value) {\n this.selectorForm.get('search').setValue('');\n }\n\n if (opened && this.enableSearch && this.focusSearchOnOpen) {\n // Focus the search input field\n setTimeout(() => this.searchInput.nativeElement.focus(), 0);\n }\n }\n\n get dataItems(): any[] {\n let items: any[] = [];\n if (this.multiple && this.selectedValue && (this.selectedValue.length > 0))\n items = [...this.selectedValue, ...this.items];\n else if ((!this.multiple) && this.selectedValue)\n items = [this.selectedValue, ...this.items];\n else\n items = this.items;\n items = items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\n //Emit the items to any child component\n this.itemsChange.emit(items);\n return items;\n }\n\n ngOnInit() {\n this.subscriptions.add(\n this.selectorForm.get('search').valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n ).subscribe(value => {\n if (this.enableSearch)\n this.search(value);\n })\n );\n\n this.filters = {\n per_page: this.perPage,\n search: '',\n page: 1,\n lastPage: 1\n }\n if (this.sort) {\n this.filters.sort_by = this.sortBy || `${this.titleField}|asc`;\n }\n\n //Fetch Items only if it is not present, can be used in places where we load many entries.\n if (this.items.length === 0) {\n this.fetchItemList();\n }\n }\n\n fetchItemList() {\n this.isLoading = true;\n let request = this.http.get(this.apiUrl, { params: this.filters })\n if (this.cache) {\n request = this.http.cache().get(this.apiUrl, { params: this.filters })\n }\n this.subscriptions.add(\n of().pipe(\n startWith(true),\n switchMap((_) => from(request)),\n finalize(() => this.isLoading = false),\n ).subscribe((result: any) => {\n this.items = this.items.concat(result[this.apiDataProperty]);\n if (this.items.length == 0 && (!this.filters?.search)) {\n //If there is no items and search is empty, then we emit items empty event.\n this.isItemsEmpty.emit(true);\n }\n if (this.cache) {\n this.cachedItems = this.items;\n }\n this.filters.page = result?.current_page || 1;\n this.filters.lastPage = result?.last_page || 1;\n\n /**\n * If we are required to emit the selected entity when it is initially set, \n * let's go ahead and emit it.\n **/\n if (this.isEmitInitialEvent && this.value) {\n this._handleInput();\n //Once the initial event is emitted, reset back to avoid continuous events\n this.isEmitInitialEvent = false;\n }\n })\n );\n }\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(data: any): void {\n this.value = data;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getPropertyValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n _handleInput(): void {\n //Trigger on change only when initial event is false, to avoid double loading\n if (!this.isEmitInitialEvent) {\n this.onChange(this.value);\n }\n if (this.multiple)\n this.selectedValue = (this.value as [] || []).map(x => this.dataItems.find(y => y[this.valueField] === x));\n else\n this.selectedValue = this.dataItems.find(x => x[this.valueField] === this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(this.value);\n }\n\n get errorState(): boolean {\n return (this.ngControl && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty));\n }\n\n static ngAcceptInputType_disabled: boolean | string | null | undefined;\n static ngAcceptInputType_required: boolean | string | null | undefined;\n\n onScroll() {\n if (!this.isLoading && this.filters.lastPage > this.filters.page) {\n this.filters.page += 1;\n this.fetchItemList();\n }\n }\n\n reloadData() {\n this.items = [];\n this.filters.page = 1;\n this.filters.lastPage = 1;\n this.fetchItemList();\n }\n\n search(event: any) {\n if (this.searchField) {\n this.filters[this.searchField] = event;\n } else {\n this.filters.search = event;\n }\n // we need search field to search in data\n if (this.inDataSearch && this.searchField) {\n this.filterItems(event);\n } else {\n this.reloadData();\n }\n }\n\n filterItems(event: string) {\n if (event) {\n this.items = this.cachedItems.filter((value: any) => {\n return (value[this.searchField] as string).toLowerCase().search(event.toLowerCase()) != -1\n })\n } else {\n this.items = this.cachedItems;\n }\n }\n\n addItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {},\n ...this.addConfig\n });\n\n dialogRef.afterClosed().subscribe((model: any) => {\n if (model) {\n this.items.push(model);\n this.selectorForm.get('select_value').setValue(model[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n editItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n item: this.selectedValue\n },\n ...this.editConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items = this.items.filter(x => x[this.valueField] !== this.selectedValue[this.valueField]);\n this.items.push(result.item);\n this.selectedValue = null;\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n this.subscriptions.unsubscribe();\n }\n}\n","<ng-container [formGroup]=\"selectorForm\">\n <div class=\"searchable-selector-container\">\n <!-- Selector and Suffix Icons -->\n <mat-select formControlName=\"select_value\" [multiple]=\"multiple\" [required]=\"required\"\n (selectionChange)=\"this.isEmitInitialEvent = false;_handleInput()\" (openedChange)=\"openedChange($event)\"\n [panelWidth]=\"panelWidth\">\n <!-- Search Field -->\n <mat-form-field *ngIf=\"enableSearch\" class=\"p-1 w-100\">\n <input matInput formControlName=\"search\" placeholder=\"Search...\" (keydown)=\"$event.stopPropagation();\"\n autocomplete=\"off\" #searchInput>\n </mat-form-field>\n\n <!-- Options with Scrollable Container -->\n <div class=\"searchable-selector-scrollable-container\" cdkScrollable (scrollend)=\"onScroll()\">\n <mat-option *ngFor=\"let item of dataItems\" [value]=\"getPropertyValue(item, valueField)\">\n <span>{{ getPropertyValue(item, titleField) }}</span>\n <span *ngIf=\"subtitleField\" class=\"text-secondary\" style=\"font-size: 14px;\">\n - {{ getPropertyValue(item, subtitleField) }}\n </span>\n </mat-option>\n <mat-progress-bar *ngIf=\"isLoading\" color=\"primary\" mode=\"indeterminate\"></mat-progress-bar>\n </div>\n </mat-select>\n\n <!-- Add and Edit Buttons -->\n <mat-icon class=\"cursor-pointer\" *ngIf=\"add\" (click)=\"addItem($event)\">\n add\n </mat-icon>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"edit && selectedValue\" (click)=\"editItem($event)\">\n edit\n </mat-icon>\n </div>\n</ng-container>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SearchableSelectorComponent } from './searchable-selector.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { MatProgressBar } from '@angular/material/progress-bar';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialModule,\n MatProgressBar,\n ],\n declarations: [\n SearchableSelectorComponent,\n ],\n exports: [\n SearchableSelectorComponent,\n ]\n})\nexport class SearchableSelectorModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MaterialModule } from '../../material.module';\nimport { FormConfigurationForFormComponent } from './form-configuration-for-form.component';\n\n@NgModule({\n declarations: [FormConfigurationForFormComponent],\n imports: [\n CommonModule,\n RouterModule,\n MaterialModule\n ],\n exports: [FormConfigurationForFormComponent]\n})\nexport class FormConfigurationForFormModule { }\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { InfiniteScrollDirective } from \"ngx-infinite-scroll\";\nimport { NgxPermissionsModule } from \"ngx-permissions\";\nimport { MaterialModule } from \"./material.module\";\nimport { ActionPopupModule } from './action-popup/action-popup.module';\nimport { TechlifyDeleteButtonComponent } from './delete-button/techlify-delete-button.component';\nimport { DocumentViewerModule } from './document-viewer/document-viewer.module';\nimport { ExportExcelModule } from './export-excel/export-excel.module';\nimport { FileDropperModule } from './file-dropper/file-dropper.module';\nimport { TechlifyFormButtonComponent } from './form-button/techlify-form-button.component';\nimport { ReadMoreModule } from './read-more/read-more.module';\nimport { TechlifyIconModule } from './techlify-icon/techlify-icon.module';\nimport { TimelineFilterModule } from './timeline-filter/timeline-filter.module';\nimport { SearchableSelectorModule } from './searchable-selector/searchable-selector.module';\nimport { FormConfigurationForFormModule } from './form-configuration/form-configuration-for-form/form-configuration-for-form.module';\n\n@NgModule({\n imports: [\n InfiniteScrollDirective,\n TechlifyDeleteButtonComponent,\n TechlifyFormButtonComponent,\n ],\n exports: [\n ActionPopupModule,\n CommonModule,\n DocumentViewerModule,\n ExportExcelModule,\n FileDropperModule,\n FormConfigurationForFormModule,\n FormsModule,\n InfiniteScrollDirective,\n MaterialModule,\n NgxPermissionsModule,\n ReactiveFormsModule,\n ReadMoreModule,\n SearchableSelectorModule,\n TechlifyDeleteButtonComponent,\n TimelineFilterModule,\n TechlifyFormButtonComponent,\n TechlifyIconModule,\n ]\n})\nexport class SharedModule { }"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { L as CredentialsService, b as CurrentUserService } from "./ngx-techlify-core-shared.module-
|
|
1
|
+
import { L as CredentialsService, b as CurrentUserService } from "./ngx-techlify-core-shared.module-C0uAKgWi.mjs";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import { Injectable } from "@angular/core";
|
|
4
4
|
var UserConfig = class {
|
|
@@ -130,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
130
130
|
});
|
|
131
131
|
export { UserListPageConfig as i, MultiUserConfig as n, UserConfig as r, UserConfigService as t };
|
|
132
132
|
|
|
133
|
-
//# sourceMappingURL=ngx-techlify-core-user-config.service-
|
|
133
|
+
//# sourceMappingURL=ngx-techlify-core-user-config.service-BTZUoFIT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-techlify-core-user-config.service-
|
|
1
|
+
{"version":3,"file":"ngx-techlify-core-user-config.service-BTZUoFIT.mjs","names":["i1.UserConfig","i2.CurrentUserService","i3.CredentialsService"],"sources":["../../../projects/ngx-techlify-core/src/lib/user-config/user-config.model.ts","../../../projects/ngx-techlify-core/src/lib/user-config/user-config.service.ts"],"sourcesContent":["export class UserConfig {\n rawData: any;\n\n constructor(data: any) {\n this.rawData = data;\n }\n}\n\nexport class MultiUserConfig {\n appName?: String;\n appUrl?: String;\n appLogoUrl?: String;\n showSignup?: boolean;\n showSocialLogin?: boolean;\n socialLoginRedirectUrl?: string;\n showForgotPassword?: boolean;\n allowAppAdminLogin?: boolean;\n allowAllUsersToLogin?: boolean;\n loginWithoutSubscription?: boolean;\n scrollContainer?: string;\n userConfig?: UserListPageConfig;\n permissionConfig?: {\n disableUsers: boolean,\n disableRoles: boolean,\n };\n roleConfig?: {\n disableUsers: boolean,\n disablePermissions: boolean,\n showModuleSelectorOnForm: boolean,\n disableAddRole: boolean\n };\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any) {\n this.scrollContainer = data.scrollContainer || null;\n this.allowAppAdminLogin = data.allowAppAdminLogin || false;\n this.loginWithoutSubscription = data.loginWithoutSubscription || false;\n this.appName = data.appName || 'Techlify';\n this.appLogoUrl = data.appLogoUrl || 'assets/images/techlify-logo-xs.png';\n this.appUrl = data.appUrl || 'https://techlify.com/';\n this.showSignup = data.showSignup || false;\n this.showSocialLogin = data.showSocialLogin || false;\n this.socialLoginRedirectUrl = data.socialLoginRedirectUrl || '';\n this.showForgotPassword = data.showForgotPassword || true;\n this.allowAllUsersToLogin = data.allowAllUsersToLogin || false;\n this.userConfig = new UserListPageConfig(data.userConfig || {});\n this.roleConfig = data.roleConfig || {};\n this.permissionConfig = data.permissionConfig || {};\n }\n}\n\nexport class UserListPageConfig {\n showExploreUser: boolean;\n showResetPasswordForClient: boolean;\n showRoles: boolean;\n showFormRoles: boolean;\n showPermissions: boolean;\n showAddUser: boolean;\n showUserTypes: boolean;\n showPhone: boolean;\n userTypes?: any;\n showImportButton: boolean;\n showSignature: boolean;\n showConfigurations: boolean;\n configurationPageRoute?: any;\n showEnableDisableButton: boolean;\n showRestrictors?: boolean;\n showDefaultMargin?: boolean;\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any): void {\n this.showExploreUser = data.hasOwnProperty('showExploreUser') ? data.showExploreUser : true;\n this.showResetPasswordForClient = data.hasOwnProperty('showResetPasswordForClient') ? data.showResetPasswordForClient : false;\n this.showRoles = data.hasOwnProperty('showRoles') ? data.showRoles : true;\n this.showFormRoles = data.hasOwnProperty('showFormRoles') ? data.showFormRoles : true;\n this.showPermissions = data.hasOwnProperty('showPermissions') ? data.showPermissions : true;\n this.showAddUser = data.hasOwnProperty('showAddUser') ? data.showAddUser : true;\n this.showUserTypes = data.hasOwnProperty('showUserTypes') ? data.showUserTypes : true;\n this.showPhone = data.hasOwnProperty('showPhone') ? data.showPhone : false;\n this.userTypes = data.userTypes;\n this.showImportButton = data.hasOwnProperty('data.showImportButton') ? data.showImportButton : false;\n this.showSignature = data.hasOwnProperty('showSignature') ? data.showSignature : false;\n this.showConfigurations = data.hasOwnProperty('showConfigurations') ? data.showConfigurations : false;\n this.configurationPageRoute = data.hasOwnProperty('configurationPageRoute') ? data.configurationPageRoute : '';\n this.showEnableDisableButton = data.hasOwnProperty('showEnableDisableButton') ? data.showEnableDisableButton : true;\n this.showRestrictors = data.hasOwnProperty('showRestrictors') ? data.showRestrictors : false;\n this.showDefaultMargin = data?.showDefaultMargin || false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CredentialsService } from '../core/credentials.service';\nimport { CurrentUserService } from '../user/current-user.service';\nimport { UserConfig, UserListPageConfig, MultiUserConfig } from './user-config.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserConfigService {\n\n private rawData: any;\n private defaultConfig: any = {\n appName: 'eBusiness',\n appLogoUrl: 'assets/images/techlify-logo-xs.png',\n appUrl: 'https://techlify.com/',\n showSignup: true,\n showSocialLogin: true,\n socialLoginRedirectUrl: 'http://localhost/bis-api/public/user/social-signup/redirect/',\n showForgotPassword: true,\n allowAllUsersToLogin: true,\n userConfig: new UserListPageConfig({\n showExploreUser: true,\n showRoles: true,\n showPermissions: true,\n showAddUser: true,\n showPhone: false,\n showUserTypes: true,\n userTypes: [\n { title: 'Admin', value: 2 },\n { title: 'Normal User', value: 3 },\n ]\n }),\n };\n\n constructor(\n userConfig: UserConfig,\n private currentUserService: CurrentUserService,\n private crentialsService: CredentialsService\n ) {\n this.rawData = userConfig.rawData;\n }\n\n getConfig() {\n let config: MultiUserConfig;\n if (this.crentialsService.isAuthenticated && this.rawData.hasOwnProperty(this.currentUserService.getUser().user_type_id)) {\n config = new MultiUserConfig(this.rawData[this.currentUserService.getUser().user_type_id]);\n }\n else {\n // Fallback - it's a common config\n if (this.rawData.hasOwnProperty('fallback')) {\n config = new MultiUserConfig(this.rawData.fallback);\n }\n // It's an old config which doesn't affect existing projects use.\n else if (this.rawData.hasOwnProperty('appName')) {\n config = new MultiUserConfig(this.rawData);\n }\n // Default config\n else {\n config = new MultiUserConfig(this.defaultConfig);\n }\n }\n return config;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { F as HttpService, L as CredentialsService, N as FileDropperComponent, O as TechlifyIconComponent, X as AlertService, Y as FormValidatorService, b as CurrentUserService, i as SearchableSelectorComponent, l as ExportExcelButtonComponent, p as TimelineFilterComponent, q as DocumentViewerComponent, t as SharedModule } from "./ngx-techlify-core-shared.module-
|
|
2
|
-
import { c as TechlifyFormComponent, i as TechlifyListComponent, l as TechlifyService } from "./ngx-techlify-core-base-model-
|
|
3
|
-
import { t as UserConfigService } from "./ngx-techlify-core-user-config.service-
|
|
1
|
+
import { F as HttpService, L as CredentialsService, N as FileDropperComponent, O as TechlifyIconComponent, X as AlertService, Y as FormValidatorService, b as CurrentUserService, i as SearchableSelectorComponent, l as ExportExcelButtonComponent, p as TimelineFilterComponent, q as DocumentViewerComponent, t as SharedModule } from "./ngx-techlify-core-shared.module-C0uAKgWi.mjs";
|
|
2
|
+
import { c as TechlifyFormComponent, i as TechlifyListComponent, l as TechlifyService } from "./ngx-techlify-core-base-model-DfODc3ll.mjs";
|
|
3
|
+
import { t as UserConfigService } from "./ngx-techlify-core-user-config.service-BTZUoFIT.mjs";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Injectable, Input, NgModule, Output } from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/material/dialog";
|
|
@@ -2132,4 +2132,4 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
2132
2132
|
});
|
|
2133
2133
|
export { UserClientsListComponent as a, UserFormComponent as c, LoginHistoryForUserComponent as d, AuditLogListComponent as f, UserSessionsComponent as i, UserService as l, AuditLogService as m, UserClientsListModule as n, UserClientEnableDisableButtonComponent as o, AuditLogListFilterComponent as p, UserClientEnableDisableButtonModule as r, UserTenantService as s, UserSessionsModule as t, UserTypeEnum as u };
|
|
2134
2134
|
|
|
2135
|
-
//# sourceMappingURL=ngx-techlify-core-user-sessions.module-
|
|
2135
|
+
//# sourceMappingURL=ngx-techlify-core-user-sessions.module-gmNNGpCf.mjs.map
|