@nettyapps/ntybase 21.0.25 → 21.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nettyapps-ntybase.mjs","sources":["../../../projects/ntybase/src/lib/ntybase.ts","../../../projects/ntybase/src/lib/auth/services/credentials-service.ts","../../../projects/ntybase/src/lib/auth/services/url-helper-service.ts","../../../projects/ntybase/src/lib/auth/interceptors/authentication-interceptor.ts","../../../projects/ntybase/src/lib/auth/guards/can-deactivate-guard.ts","../../../projects/ntybase/src/lib/ntybase-module.ts","../../../projects/ntybase/src/lib/ag-grid/models/netty-helper.ts","../../../projects/ntybase/src/lib/ag-grid/models/current-user-preference.ts","../../../projects/ntybase/src/lib/alert/components/confirm-dialog/confirm-dialog.ts","../../../projects/ntybase/src/lib/alert/components/confirm-dialog/confirm-dialog.html","../../../projects/ntybase/src/lib/alert/services/alert-service.ts","../../../projects/ntybase/src/lib/common/services/common-service.ts","../../../projects/ntybase/src/lib/ag-grid/services/netty-ag-grid-service.ts","../../../projects/ntybase/src/lib/system/models/security-dto.ts","../../../projects/ntybase/src/lib/system/services/sysfunction-proxy.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer.html","../../../projects/ntybase/src/lib/netty-apps-bases/netty-apps-base/netty-apps-base.ts","../../../projects/ntybase/src/lib/netty-apps-bases/netty-apps-base/netty-apps-base.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-base/ag-grid-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-base/ag-grid-base.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base.html","../../../projects/ntybase/src/lib/ag-grid/components/excel-import-base/excel-import-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/excel-import-base/excel-import-base.html","../../../projects/ntybase/src/lib/ag-grid/components/range-date-time-filter/range-date-time-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-date-time-filter/range-date-time-filter.html","../../../projects/ntybase/src/lib/ag-grid/components/range-number-filter/range-number-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-number-filter/range-number-filter.html","../../../projects/ntybase/src/lib/ag-grid/components/range-string-filter/range-string-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-string-filter/range-string-filter.html","../../../projects/ntybase/src/lib/auth/guards/authentication-guard.ts","../../../projects/ntybase/src/lib/auth/interceptors/nty-authentication-functional.interceptor.ts","../../../projects/ntybase/src/lib/auth/models/login-dto.ts","../../../projects/ntybase/src/lib/auth/models/mfa-code-dto.ts","../../../projects/ntybase/src/lib/auth/services/authentication-service.ts","../../../projects/ntybase/src/lib/auth/base-components/auth-base/auth-base.ts","../../../projects/ntybase/src/lib/auth/base-components/auth-base/auth-base.html","../../../projects/ntybase/src/lib/auth/login/login.ts","../../../projects/ntybase/src/lib/auth/login/login.html","../../../projects/ntybase/src/lib/auth/mfa-login/mfa-login.ts","../../../projects/ntybase/src/lib/auth/mfa-login/mfa-login.html","../../../projects/ntybase/src/lib/auth/services/password-proxy.ts","../../../projects/ntybase/src/lib/auth/models/forgot-password-dto.ts","../../../projects/ntybase/src/lib/auth/models/new-password-dto.ts","../../../projects/ntybase/src/lib/auth/forgot-password/forgot-password.ts","../../../projects/ntybase/src/lib/auth/forgot-password/forgot-password.html","../../../projects/ntybase/src/lib/common/services/image-service.ts","../../../projects/ntybase/src/lib/netty-base-app/netty-base-app.ts","../../../projects/ntybase/src/lib/netty-base-app/netty-base-app.html","../../../projects/ntybase/src/lib/dashboard-wizard/services/environment-info-service.ts","../../../projects/ntybase/src/lib/dashboard-wizard/environment-info/environment-info.ts","../../../projects/ntybase/src/lib/dashboard-wizard/environment-info/environment-info.html","../../../projects/ntybase/src/lib/loading/services/nty-loading-service.ts","../../../projects/ntybase/src/lib/loading/interceptors/nty-loading.interceptor.ts","../../../projects/ntybase/src/lib/menu/services/netty-menu-service.ts","../../../projects/ntybase/src/public-api.ts","../../../projects/ntybase/src/nettyapps-ntybase.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ntybase',\n standalone: false,\n template: `\n <p>\n ntybase works!\n </p>\n `,\n styles: ``\n})\nexport class Ntybase {\n\n}\n","import { Injectable } from '@angular/core';\n\nexport interface Credentials {\n username: string;\n token: string;\n role: string;\n authenticationMethod: string;\n sid: string;\n}\n\nconst credentialsKey = 'credentials';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CredentialsService {\n private _credentials: Credentials | null = null;\n\n constructor() {\n const savedCredentials =\n sessionStorage.getItem(credentialsKey) ||\n localStorage.getItem(credentialsKey);\n if (savedCredentials) {\n this._credentials = JSON.parse(savedCredentials);\n }\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n isAuthenticated(): boolean {\n return !!this.credentials;\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 return this._credentials;\n }\n\n get token(): string | null {\n return this._credentials?.token ?? null;\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 const storage = remember ? localStorage : sessionStorage;\n storage.setItem(credentialsKey, JSON.stringify(credentials));\n } else {\n sessionStorage.removeItem(credentialsKey);\n localStorage.removeItem(credentialsKey);\n }\n }\n /** Get Credentials\n *\n * @returns\n */\n getCredentials(): Credentials {\n let _credentialsString = sessionStorage.getItem(credentialsKey);\n if (_credentialsString == null || _credentialsString == '') {\n _credentialsString = localStorage.getItem(credentialsKey);\n }\n return JSON.parse(_credentialsString ?? '');\n }\n /** Get the token if available otherwise return empty string\n *\n * @returns\n */\n public getToken(): string {\n try {\n let _credentials: Credentials = this.getCredentials();\n return _credentials.token;\n } catch (error) {\n return '';\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UrlHelperService {\n private router = inject(Router);\n public cleanUrl(url: string): string {\n let result = url\n .replace('/mfalogin?redirect=', '')\n .replace('/mfalogin?redirect=', '')\n .replace('/mfalogin?redirect=', '')\n .replace('/login?redirect=', '')\n .replace('/login?redirect=', '')\n .replace('/login?redirect=', '')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%22', 'g'), '\"')\n .replace(new RegExp('%3F', 'g'), '?')\n .replace(new RegExp('%3D', 'g'), '=')\n .replace(new RegExp('%2F', 'g'), '/')\n .replace(new RegExp('%26', 'g'), '&')\n .replace(new RegExp('/mfalogin?redirect=', 'g'), '')\n .replace(new RegExp('/login?redirect=', 'g'), '');\n console.log('url:', url);\n console.log('result:', result);\n // return url;\n return result;\n }\n public navigate(url: string): Promise<Boolean> {\n let urlParts: string[] = url.split('?');\n if (urlParts.length == 1) {\n return this.router.navigate(urlParts, { replaceUrl: true });\n }\n let parameters: string[] = urlParts[1].split('&');\n return this.router.navigate([urlParts[0]], {\n queryParams: {\n parameters: parameters[0]?.replace('parameters=', '') ?? '',\n type: parameters[1]?.replace('type=', '') ?? '',\n },\n replaceUrl: true,\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpErrorResponse,\n HttpResponse,\n} from '@angular/common/http';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { CredentialsService } from '../services/credentials-service';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { UrlHelperService } from '../services/url-helper-service';\n\n@Injectable()\nexport class AuthenticationInterceptor implements HttpInterceptor {\n private router = inject(Router);\n private credentialsService = inject(CredentialsService);\n private environmentProxy = inject(EnvironmentProxy);\n private urlHelperService = inject(UrlHelperService);\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (req.headers.get('No-Auth') == 'True') return next.handle(req.clone());\n let token: string | null = this.credentialsService.token;\n if (token != null) {\n let appName = this.environmentProxy.getApplicationName();\n const clonedreq = req.clone({\n headers: req.headers.set('Authorization', 'Bearer ' + token),\n // .set(\"NettyAppName\",appName)\n });\n return next.handle(clonedreq).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n this.router.navigate(['/login'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n this.router.navigate(['/forbidden'], {\n state: { attemptedUrl: this.router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n this.router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n } else {\n return next.handle(req.clone()).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n this.router.navigate(['/login'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n this.router.navigate(['/forbidden'], {\n state: { attemptedUrl: this.router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n this.router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { CanDeactivate } from '@angular/router';\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => boolean | Promise<boolean> | Observable<boolean>;\n}\n\nexport class CanDeactivateGuard\n implements CanDeactivate<CanComponentDeactivate>\n{\n canDeactivate(component: CanComponentDeactivate) {\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Ntybase } from './ntybase';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { AuthenticationInterceptor } from './auth/interceptors/authentication-interceptor';\nimport { CanDeactivateGuard } from './auth/guards/can-deactivate-guard';\nimport { DatePipe } from '@angular/common';\n\n@NgModule({\n declarations: [Ntybase],\n imports: [],\n exports: [Ntybase],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthenticationInterceptor,\n multi: true,\n },\n [CanDeactivateGuard],\n DatePipe,\n ],\n})\nexport class NtybaseModule {}\n","import { DatePipe } from '@angular/common';\n\nexport class NettyHelper {\n /**\n * Returns null if fields are equal otherwise return second field\n * @param firstField\n * @param secondField\n * @returns\n */\n static difference(\n firstField: any | null,\n secondField: any | null\n ): any | null {\n if (firstField != secondField) {\n return secondField;\n }\n return null;\n }\n /**\n * Returns null if fields are equal otherwise return second field\n * @param firstField\n * @param secondField\n * @param format\n * @returns\n */\n static dateDifference(\n firstField: Date | null,\n secondField: Date | null,\n format: string\n ): Date | null {\n let culture = localStorage.getItem('languageApiCode') ?? 'tr-TR';\n let datePipe = new DatePipe(culture);\n if (\n datePipe.transform(firstField, format) !=\n datePipe.transform(secondField, format)\n ) {\n return secondField;\n }\n return null;\n }\n}\n","import { NettyHelper } from './netty-helper';\n\nexport class CurrentUserPreference {\n coid: any | null = null;\n nettyUserPreferenceGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = null;\n nettyUserFullName: string | null = null;\n nettyPreferenceType: string | null = null;\n nettyPreferenceData: string | null = null;\n\n init(): void {\n this.coid = null;\n this.nettyUserPreferenceGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.nettyUserFullName = '';\n this.nettyPreferenceType = '';\n this.nettyPreferenceData = '';\n }\n\n initParameter(parameters: CurrentUserPreference): void {\n if (parameters == null || parameters == undefined) {\n this.init();\n return;\n }\n this.coid = parameters.coid;\n this.nettyUserPreferenceGUID = parameters.nettyUserPreferenceGUID;\n this.nettyUserGUID = parameters.nettyUserGUID;\n this.nettyUserName = parameters.nettyUserName;\n this.nettyUserFullName = parameters.nettyUserFullName;\n this.nettyPreferenceType = parameters.nettyPreferenceType;\n this.nettyPreferenceData = parameters.nettyPreferenceData;\n }\n\n compare(record: CurrentUserPreference): CurrentUserPreference {\n let newRecord: CurrentUserPreference = new CurrentUserPreference();\n newRecord.init();\n newRecord.coid = record.coid;\n newRecord.nettyUserPreferenceGUID = record.nettyUserPreferenceGUID;\n newRecord.nettyUserGUID = NettyHelper.difference(\n this.nettyUserGUID,\n record.nettyUserGUID\n );\n newRecord.nettyPreferenceType = NettyHelper.difference(\n this.nettyPreferenceType,\n record.nettyPreferenceType\n );\n newRecord.nettyPreferenceData = NettyHelper.difference(\n this.nettyPreferenceData,\n record.nettyPreferenceData\n );\n return newRecord;\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogModule,\n MatDialogRef,\n} from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-confirm-dialog',\n imports: [\n MatDialogModule,\n MatSnackBarModule,\n MatIconModule,\n MatDividerModule,\n TranslateModule,\n ],\n templateUrl: './confirm-dialog.html',\n styleUrl: './confirm-dialog.scss',\n})\nexport class ConfirmDialog {\n constructor(\n public dialogRef: MatDialogRef<ConfirmDialog>,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n}\n","<div class=\"dialog-container\">\n <h2 mat-dialog-title class=\"dialog-title\">\n <mat-icon color=\"warn\" class=\"warning-icon\">warning</mat-icon>\n <span>{{data.title}}</span>\n </h2>\n\n <mat-divider class=\"divider\"></mat-divider>\n\n <mat-dialog-content class=\"dialog-content\">\n <p class=\"message\">{{data.message}}</p>\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\" class=\"dialog-actions\">\n <button mat-stroked-button [mat-dialog-close]=\"false\" class=\"btn-cancel\">\n {{'@btnCancel' | translate}}\n </button>\n <button\n mat-flat-button\n color=\"warn\"\n [mat-dialog-close]=\"true\"\n class=\"btn-ok\"\n >\n {{'@btnOK' | translate}}\n </button>\n </mat-dialog-actions>\n</div>\n","// alert.service.ts\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmDialog } from '../../alert/components/confirm-dialog/confirm-dialog'; // You'll need to create this\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlertService {\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private translate: TranslateService\n ) {}\n\n // For simple notifications\n showAlert(message: string, action?: string, duration: number = 3000) {\n const actionText = action ? action : '@btnOK';\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant(actionText),\n { duration }\n );\n }\n\n showWarning(message: string, action?: string, duration: number = 3000) {\n const actionText = action ? action : '@btnOK';\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant(actionText),\n { duration }\n );\n }\n\n // For confirmation dialogs\n showConfirm(message: string): Promise<boolean> {\n return new Promise((resolve) => {\n const dialogRef = this.dialog.open(ConfirmDialog, {\n width: 'auto',\n height: 'auto',\n data: {\n message: this.translate.instant(message),\n title: this.translate.instant('@confirmation'),\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n resolve(!!result);\n });\n });\n }\n\n // For success notifications\n showSuccess(message: string, duration: number = 3000) {\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant('@btnOK'),\n {\n duration,\n panelClass: ['success-snackbar'],\n horizontalPosition: 'right',\n verticalPosition: 'bottom',\n }\n );\n }\n\n // For error notifications\n showError(error: any, duration: number = 5000) {\n let errorMessage: string;\n\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (error.message) {\n errorMessage = error.message;\n } else if (error.error && typeof error.error === 'string') {\n errorMessage = error.error;\n } else {\n errorMessage = JSON.stringify(error);\n }\n\n this.snackBar.open(\n this.translate.instant(errorMessage),\n this.translate.instant('@btnOK'),\n {\n duration,\n panelClass: ['error-snackbar'],\n horizontalPosition: 'right',\n verticalPosition: 'bottom',\n }\n );\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DatePipe, DecimalPipe, Location } from '@angular/common';\nimport { Buffer } from 'buffer';\nimport { AlertService } from '../../alert/services/alert-service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonService {\n // Services\n private router = inject(Router);\n private location = inject(Location);\n private datePipe = inject(DatePipe);\n private decimalPipe = inject(DecimalPipe);\n private alertService = inject(AlertService);\n private translate = inject(TranslateService);\n protected dialog = inject(MatDialog);\n\n // Right sidenav\n rightSidenavOpen = signal(false);\n toggleRightSidenav(open: boolean) {\n this.rightSidenavOpen.set(open);\n }\n\n /**\n * Normalizes Turkish text for search and comparison operations by converting\n * Turkish special characters to their English equivalents and lowercasing.\n *\n */\n public normalizeTurkish(text: string): string {\n return text\n .toLocaleLowerCase('tr-TR')\n .replace(/[ıİ]/g, 'i')\n .replace(/[ğĞ]/g, 'g')\n .replace(/[üÜ]/g, 'u')\n .replace(/[şŞ]/g, 's')\n .replace(/[öÖ]/g, 'o')\n .replace(/[çÇ]/g, 'c');\n }\n\n /**\n * Gets the clean URL path without fragments or query params\n */\n public getCleanUrlPath(): string {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments || [];\n\n if (segments.length >= 2) {\n return segments\n .slice(0, 2)\n .map((s) => s.path)\n .join('/');\n }\n return '/';\n }\n\n /**\n * Clears the right sidenav outlet and resets the UI state.\n * Removes the right sidenav route while keeping the main content and query parameters.\n * Also collapses the sidenav and closes any open dialogs.\n */\n public clearOutlet(): void {\n const currentUrl = this.router.parseUrl(this.router.url);\n const primaryOutlet = currentUrl.root.children['primary'];\n const rightSidenavOutlet = currentUrl.root.children['rightSidenav'];\n\n if (\n rightSidenavOutlet ||\n currentUrl.queryParams['parameters'] ||\n currentUrl.queryParams['type']\n ) {\n this.router.navigate(\n [\n {\n outlets: {\n rightSidenav: null,\n primary: primaryOutlet ? primaryOutlet.toString() : null,\n },\n },\n ],\n {\n queryParams: {},\n queryParamsHandling: '',\n replaceUrl: true,\n }\n );\n }\n\n this.toggleRightSidenav(false);\n this.dialog.closeAll();\n }\n\n ngOnDestroy(): void {\n this.clearOutlet();\n }\n\n /** Merge columns with the given seperator\n *\n * @param columns string array to merge\n * @param seperator seperator for the array. space if null\n * @returns merged string\n */\n mergeColumns(columns: string[], seperator: string = ' '): string {\n console.log('mergeColumns', columns);\n\n let result: string = '';\n columns.forEach((column) => {\n if (!(column == undefined || column == null)) {\n if (result.length > 0) {\n result += seperator;\n }\n result += column.trim();\n }\n });\n return result.trim();\n }\n\n /** Go back to the last page or close the tab\n *\n */\n goBack() {\n if (!document.referrer) {\n this.location.back();\n } else {\n window.close();\n }\n }\n\n // General Functions\n //--------------------------------------\n /** Delay for the given duration\n *\n * @param ms wait duration in ms\n * @returns promise that waits for the duration\n */\n delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Base64 Functions\n //--------------------------------------\n /** Convert string to base64\n *\n * @param stringForConversion\n * @returns\n */\n convertToBase64(stringForConversion: string): string {\n return Buffer.from(stringForConversion).toString('base64');\n // return Base64.encode(stringForConversion);\n }\n\n /** Convert base64 string to normal string\n *\n * @param base64data\n * @returns\n */\n convertFromBase64(base64data: string): string {\n //ascii\n return Buffer.from(base64data, 'base64').toString();\n // return Base64.decode(base64data);\n }\n\n // Formatters\n //----------------------------------------\n /** Compare dates. Designed for grid date filter\n *\n * @param filterValue user provided filtering date\n * @param cellValue cell value to compare\n * @returns -1 if cell date is smaller(earlier), 0 if dates are equal and 1 if cell date is bigger(later)\n */\n dateComparator(filterValue: Date, cellValue: Date): number {\n try {\n let filterDate: string =\n this.datePipe.transform(filterValue, 'yyyyMMdd') ?? '';\n let cellDate: string =\n this.datePipe.transform(cellValue, 'yyyyMMdd') ?? '';\n if (cellDate < filterDate) {\n return -1;\n } else if (cellDate > filterDate) {\n return 1;\n } else {\n return 0;\n }\n } catch (error) {\n return -1;\n }\n }\n\n /** Format the given number into correct display\n *\n * @param numberValue number to format\n * @param min minimum decimal digits\n * @param max max decimal digits\n * @returns formatted number\n */\n numberFormatter(\n numberValue: number,\n min: number = 2,\n max: number = 2\n ): string {\n if (max < min) {\n max = min;\n }\n let format = '1.' + min + '-' + max;\n return this.decimalPipe.transform(numberValue, format) ?? '';\n }\n /** Format date into 'dd-MM-yyyy' format for grids\n *\n * @param dateValue\n * @returns\n */\n dateFormatter(dateValue: Date): string {\n return this.datePipe.transform(dateValue, 'dd-MM-yyyy') ?? '';\n }\n /**\n * Format date into 'dd-MM-yyyy HH:mm:ss' format for grids\n * @param dateValue\n * @param seconds if true, format includes seconds\n * @returns\n */\n dateTimeFormatter(dateValue: Date, seconds: boolean = true): string {\n if (seconds) {\n return this.datePipe.transform(dateValue, 'dd/MM/yyyy HH:mm:ss') ?? '';\n }\n return this.datePipe.transform(dateValue, 'dd/MM/yyyy HH:mm') ?? '';\n }\n /**\n * Format time into 'HH:mm' or 'HH:mm:ss' format for grids\n * @param dateValue\n * @param seconds if true, format includes seconds\n * @returns\n */\n timeFormatter(dateValue: Date, seconds: boolean = false): string {\n if (seconds) {\n return this.datePipe.transform(dateValue, 'HH:mm:ss') ?? '';\n }\n return this.datePipe.transform(dateValue, 'HH:mm') ?? '';\n }\n\n /** Reactive Signal state for tracking grid updates */\n private _updates = signal<{\n type: string;\n action: 'add' | 'update';\n data: any;\n } | null>(null);\n\n /** Read-only Signal for external components to observe updates */\n public updates = this._updates.asReadonly();\n\n /** Broadcasts grid data changes to subscribers */\n notifyUpdate(type: string, action: 'add' | 'update', data: any) {\n this._updates.set({ type, action, data });\n }\n\n // Security Functions\n //--------------------------------------\n /** User is not allowed to access the page\n *\n */\n translateService = inject(TranslateService);\n async userNotAllowedToRead(title: string = '', message: string = '') {\n if (title == '') {\n title = this.translateService.instant('@AccessLimitation');\n }\n if (message == '') {\n message = this.translateService.instant('@userCannotAccessThisScreen');\n }\n await this.alertService.showAlert(title, message);\n this.goBack();\n }\n async userNotAllowedToAdd(title: string = '', message: string = '') {\n if (title == '') {\n title = this.translateService.instant('@AccessLimitation');\n }\n if (message == '') {\n message = this.translateService.instant('@userCannotAddNewRecord');\n }\n await this.alertService.showAlert(title, message);\n this.goBack();\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { CurrentUserPreference } from '../models/current-user-preference';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { CommonService } from '../../common/services/common-service';\nimport { Mutex } from 'async-mutex';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { AlertService } from '../../alert/services/alert-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NettyAgGridService {\n private userPreferenceLock: Mutex;\n private http = inject(HttpClient);\n private nettyAlertService = inject(AlertService);\n private environmentProxy = inject(EnvironmentProxy);\n private commonService = inject(CommonService);\n\n constructor() {\n this.userPreferenceLock = new Mutex();\n }\n // Restapi functions\n //--------------------------------------\n /**\n * Select user preference\n * @param admuserpreference\n * @returns\n */\n selectForUserAdmUserPreference(\n admuserpreference: CurrentUserPreference\n ): Observable<any> {\n let sysFunctionsURL = this.environmentProxy.getAdminLink('SelectForUser');\n return this.http.post(sysFunctionsURL, admuserpreference);\n }\n /**\n * Insert or update user preference\n * @param admuserpreference\n * @returns\n */\n insertOrUpdateAdmUserPreference(\n admuserpreference: CurrentUserPreference\n ): Observable<any> {\n let sysFunctionsURL = this.environmentProxy.getAdminLink('InsertOrUpdate');\n return this.http.post(sysFunctionsURL, admuserpreference);\n }\n\n // AG Grid Preference Management\n //--------------------------------------\n /** Preference Save and Upload\n *\n * @param preferenceType component name or other uniqe identifier\n * @param gridApi api for agGrid column management\n * @returns nothing\n */\n async saveGridUserPreference(\n preferenceType: string,\n gridApi: any,\n defaultColDef: string\n ): Promise<void> {\n if (!gridApi) return;\n if (this.userPreferenceLock.isLocked()) return;\n var releaseLock = await this.userPreferenceLock.acquire();\n let columnState = gridApi?.getColumnState();\n let jsonstring = JSON.stringify(columnState);\n if (jsonstring == defaultColDef) {\n releaseLock();\n return;\n }\n let columnStateSaved = sessionStorage.getItem(preferenceType);\n //If the column order identical then return\n if (columnStateSaved && columnStateSaved == jsonstring) {\n releaseLock();\n return;\n }\n try {\n sessionStorage.setItem(preferenceType, jsonstring);\n await this.commonService.delay(100);\n let admuserpreference: CurrentUserPreference =\n new CurrentUserPreference();\n admuserpreference.nettyPreferenceType = preferenceType;\n if (jsonstring != undefined) {\n admuserpreference.nettyPreferenceData =\n this.commonService.convertToBase64(jsonstring);\n await lastValueFrom(\n this.insertOrUpdateAdmUserPreference(admuserpreference)\n );\n }\n } catch (error: any) {\n console.log(error);\n this.nettyAlertService.showAlert('Error', error.Message);\n } finally {\n releaseLock();\n }\n }\n /** Get the user preference and update grid columns\n *\n * @param preferenceType component name or other uniqe identifier\n * @param gridApi\n * @returns\n */\n async loadGridUserPreference(\n preferenceType: string,\n gridApi: any\n ): Promise<void> {\n if (!gridApi) return;\n let columnState: string = sessionStorage.getItem(preferenceType) ?? '';\n if (columnState.length > 0) {\n if (this.userPreferenceLock.isLocked()) return;\n var releaseLock = await this.userPreferenceLock.acquire();\n try {\n gridApi.applyColumnState({ state: JSON.parse(columnState) });\n } catch {}\n this.commonService.delay(100).then(() => releaseLock());\n return;\n }\n this.copyGridUserPereferenceToLocal(preferenceType).then(() => {\n try {\n let jsonstring: string =\n sessionStorage.getItem(preferenceType)?.trim() ?? '';\n if (jsonstring.length > 0) {\n gridApi.applyColumnState(JSON.parse(jsonstring));\n }\n } catch (error) {}\n });\n }\n /** Download user preference and save to local\n *\n * @param preferenceType component name or other uniqe identifier\n * @returns\n */\n async copyGridUserPereferenceToLocal(preferenceType: string): Promise<void> {\n var relaseLock = await this.userPreferenceLock.acquire();\n let columnState = sessionStorage.getItem(preferenceType);\n if (columnState) {\n relaseLock();\n return;\n }\n try {\n let admuserpreference: CurrentUserPreference =\n new CurrentUserPreference();\n admuserpreference.nettyPreferenceType = preferenceType;\n let data: CurrentUserPreference = <CurrentUserPreference>(\n await lastValueFrom(\n this.selectForUserAdmUserPreference(admuserpreference)\n )\n );\n if (\n data != undefined &&\n data != null &&\n (data?.nettyPreferenceType?.length ?? 0) > 0\n ) {\n let jsonstring = this.commonService.convertFromBase64(\n data.nettyPreferenceType ?? ''\n );\n sessionStorage.setItem(preferenceType, jsonstring);\n relaseLock();\n } else {\n relaseLock();\n }\n } catch (error) {\n relaseLock();\n }\n }\n /** Expand all Fit to screen all columns of the grid\n *\n * @param gridApi api of the aggrid to manage\n * @param gridApi columns api of the grid to manage\n * @param gridExpanded initial status of the grid\n * @returns current status of the grid\n */\n expandCollapseGrid(gridApi: any, gridExpanded: boolean = false): boolean {\n let _gridExpanded: boolean = gridExpanded;\n try {\n if (gridExpanded) {\n gridExpanded = false;\n gridApi.sizeColumnsToFit();\n } else {\n gridExpanded = true;\n var allColumnIds: any[] = [];\n gridApi.getColumns().forEach((column: any) => {\n allColumnIds.push(column.colId);\n });\n gridApi.autoSizeColumns(allColumnIds);\n }\n } catch (error) {\n console.log(error);\n return _gridExpanded;\n }\n return gridExpanded;\n }\n /** Set the QuickFilter of the grid and save the entry in session storage\n *\n * @param searchValueName Component identifier\n * @param searchValue Value to search\n * @param gridApi api for the current aggrid\n */\n setGridQuickSearch(\n searchValueName: string,\n searchValue: string,\n gridApi: any\n ) {\n if (gridApi) {\n gridApi.setQuickFilter(searchValue);\n }\n sessionStorage.setItem(searchValueName, searchValue);\n }\n /** Reapply the last search value from the session storage\n *\n * @param searchValueName Component identifier\n * @param gridApi api for the current aggrid\n * @returns\n */\n reapplyGridQuickSearch(searchValueName: string, gridApi: any): string {\n if (!gridApi) return '';\n // Reapply the last filter\n let searchValue: string = sessionStorage.getItem(searchValueName) ?? '';\n if (searchValue.length > 0) {\n gridApi.setQuickFilter(searchValue);\n }\n return searchValue;\n }\n /** Get Grid Column Default parameters for the given component\n *\n * @param componentName Name of the component we are initializing\n * @returns\n */\n getGridColumnDefault(componentName: string = ''): any {\n return {\n flex: 1,\n filter: true,\n resizable: true,\n sortable: true,\n };\n }\n /** Return excel style for ag-grid\n *\n * @returns\n */\n getExcelStyles(): any {\n return [\n { id: 'text-format', dataType: 'string' },\n {\n id: 'numberType',\n dataType: 'number',\n numberFormat: { format: '#,##0.00' },\n alignment: { horizontal: 'right', vertical: 'Center' },\n },\n {\n id: 'date-format',\n dataType: 'dateTime',\n numberFormat: { format: 'dd/mm/yyyy;@' },\n },\n {\n id: 'dateTime-format',\n dataType: 'dateTime',\n numberFormat: { format: 'dd/mm/yyyy hh:MM:ss;@' },\n },\n ];\n }\n}\n","export class SecurityDto {\n coid: any = null;\n userGUID: any = null;\n application: string = '';\n formCode: string = '';\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { catchError, map, Observable, throwError } from 'rxjs';\nimport { NettySecurity } from '../models/netty-security';\nimport { SecurityDto } from '../models/security-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SysfunctionProxy {\n constructor(\n private http: HttpClient,\n private environmentProxy: EnvironmentProxy\n ) {}\n\n /** Get the authentication list for the given form\n *\n * @param formCode\n * @returns\n */\n getAuthentication(formCode: string): Observable<Array<NettySecurity>> {\n let sysFunctionsURL =\n this.environmentProxy.getAdminLink('getAuthentication');\n let securityDto: SecurityDto = new SecurityDto();\n securityDto.formCode = formCode;\n securityDto.application = this.environmentProxy.getApplicationName();\n let call$ = this.http.post(sysFunctionsURL, securityDto);\n return call$.pipe(\n map((result: any) => <Array<NettySecurity>>result),\n catchError((error) => {\n let errorMessage = error.message; //.error.title;\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n}\n","\nimport { Component } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'ntybase-button-renderer',\n imports: [MatIconModule, MatTooltipModule, MatMenuModule],\n templateUrl: './button-renderer.html',\n styleUrl: './button-renderer.scss',\n})\nexport class ButtonRenderer implements ICellRendererAngularComp {\n protected params: any = null;\n protected label: string = '';\n protected type: string = '';\n protected toggleValue: boolean | null = null;\n protected editValid: boolean = false;\n protected historyValid: boolean = false;\n protected lineValid: boolean = false;\n protected popupSelectValid: boolean = false;\n protected popupEditValid: boolean = false;\n protected toggleValid: boolean = false;\n protected toggle_icon: string = '';\n protected none: boolean = false;\n protected addValid: boolean = false;\n protected deleteValid: boolean = false;\n\n agInit(params: any): void {\n this.params = params;\n this.type = this.params.type || null;\n this.label = this.params.label || null;\n this.toggleValue = this.params.value || null;\n switch (this.toggleValue) {\n case true:\n this.toggle_icon = 'select_check_box';\n break;\n case false:\n this.toggle_icon = 'check_box_outline_blank';\n break;\n default:\n this.toggle_icon = '';\n break;\n }\n\n this.resetValids();\n switch (this.type.toLowerCase().trim()) {\n case 'edit':\n this.editValid = true;\n break;\n case 'log':\n this.historyValid = true;\n break;\n case 'line':\n this.lineValid = true;\n break;\n case 'popupselect':\n this.popupSelectValid = true;\n break;\n case 'toggle':\n this.toggleValid = true;\n break;\n case 'none':\n this.none = true;\n break;\n case 'add':\n this.addValid = true;\n break;\n case 'delete':\n this.deleteValid = true;\n break;\n default:\n this.popupEditValid = true;\n break;\n }\n }\n /** Refresh the display\n *\n * @param params\n * @returns\n */\n refresh(params: any): boolean {\n return false;\n }\n resetValids() {\n this.editValid = false;\n this.historyValid = false;\n this.lineValid = false;\n this.popupSelectValid = false;\n this.popupEditValid = false;\n this.toggleValid = false;\n }\n\n onClick(event: any) {\n if (this.params.onClick instanceof Function) {\n // put anything into params u want pass into parents component\n const params = {\n event: event,\n rowData: this.params.node.data,\n type: this.type,\n // ...something\n };\n this.params.onClick(params);\n }\n }\n}\n","@if (editValid || popupEditValid) {\n<mat-icon\n class=\"cursor center edit\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"4000\"\n >edit</mat-icon\n>\n} @if (historyValid) {\n<mat-icon\n class=\"cursor center-log\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >log</mat-icon\n>\n} @if (historyValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >history</mat-icon\n>\n} @if (lineValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >menu_open</mat-icon\n>\n} @if (popupSelectValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >content_copy</mat-icon\n>\n} @if (toggleValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >{{toggleValue ? 'check_box' : 'check_box_outline_blank'}}</mat-icon\n>\n} @if (none) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n [matTooltipShowDelay]=\"3000\"\n >menu_open</mat-icon\n>\n} @if (addValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >playlist_add</mat-icon\n>\n} @if (deleteValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >delete_outline</mat-icon\n>\n}\n","\nimport { Component } from '@angular/core';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\n\n@Component({\n selector: 'ntybase-checkbox-renderer',\n imports: [],\n templateUrl: './checkbox-renderer.html',\n styleUrl: './checkbox-renderer.scss',\n})\nexport class CheckboxRenderer implements ICellRendererAngularComp {\n protected params: any = null;\n protected label: string = '';\n protected type: string = '';\n protected supportClick: boolean = false;\n protected checked: any = null;\n\n agInit(params: any): void {\n this.onProcess(params);\n }\n\n refresh(params?: any): boolean {\n if (params != null) {\n this.onProcess(params);\n }\n return true;\n }\n\n onProcess(params: any) {\n this.params = params;\n this.checked = this.params.value ?? false;\n this.type = this.params.type || null;\n this.label = this.params.label || null;\n if (this.type != null) {\n if (this.type.toLowerCase().trim() == 'click') {\n this.supportClick = true;\n }\n }\n }\n\n onClick(event: any) {\n this.checked = !this.checked;\n if (this.params.onClick instanceof Function) {\n // put anything into params u want pass into parents component\n const params = {\n event: event,\n rowData: this.params.node.data,\n type: this.type,\n checked: this.checked,\n // ...something\n };\n this.params.onClick(params);\n }\n }\n}\n","@if (supportClick) {\n<input\n id=\"checkbox\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onClick($event)\"\n/>\n} @if (!supportClick) {\n<input id=\"checkbox\" type=\"checkbox\" [checked]=\"params.value\" disabled />\n}\n\n<label for=\"checkbox\">{{label}}</label>\n","import { Component, inject, OnDestroy } from \"@angular/core\";\nimport { Buffer } from \"buffer\";\nimport { Subject } from \"rxjs\";\nimport { AlertService } from \"../../alert/services/alert-service\";\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-netty-apps-base',\n imports: [],\n templateUrl: './netty-apps-base.html',\n styleUrl: './netty-apps-base.scss',\n})\nexport abstract class NettyAppsBase implements OnDestroy {\n // ---------------------------------\n // --- SERVICES ---\n // ---------------------------------\n protected alertService = inject(AlertService);\n protected translateService = inject(TranslateService);\n // ---------------------------------\n // --- DOWNLOAD METHODS ---\n // ---------------------------------\n /**\n * Download the given base64Encoded data as file\n *\n * @param base64Data: base64 encoded data\n * @param fileName: filename to download\n */\n protected downloadFile(base64Data: string | null, fileName: string | null) {\n if (base64Data == null) {\n return;\n }\n if (fileName == null) {\n return;\n }\n // Check if header is present\n if (!base64Data.startsWith('data:')) {\n console.error(\n 'Provided data is not in base64 format (missing header)'\n );\n return;\n }\n\n const contentType = base64Data.split(';')[0].split(':')[1];\n const byteCharacters = atob(base64Data.split(',')[1]);\n const byteArrays = [];\n for (let i = 0; i < byteCharacters.length; i++) {\n const byteArray = byteCharacters.charCodeAt(i);\n byteArrays.push(byteArray);\n }\n const byteArray = new Uint8Array(byteArrays);\n const blob = new Blob([byteArray], { type: contentType });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n }\n\n /** Download the given base64Endoced data as text file\n *\n * @param base64EncodedFileData\n * @param fileName\n */\n protected downloadTextFile(base64EncodedFileData: string | null, fileName: string | null) {\n // Check if the data has a prefix like \"data:application/pdf;base64,\"\n if (base64EncodedFileData == null) { return; }\n if (fileName == null) { return; }\n let _data: string = base64EncodedFileData;\n const prefix = 'data:';\n if (_data.startsWith(prefix)) {\n // Remove the prefix\n _data = _data.slice(_data.indexOf(',') + 1);\n }\n // Convert the base64 data to a Uint8Array\n const textData = Buffer.from(_data ?? '', 'base64').toString();\n this.downloadTextFileNotEncoded(textData, fileName);\n }\n\n /** Save the given text as a text file\n *\n * @param fileData\n * @param fileName\n */\n protected downloadTextFileNotEncoded(fileData: string | null, fileName: string | null) {\n if (fileData == null) { return; }\n if (fileName == null) { return; }\n // Create a Blob from the Text\n const blob = new Blob([fileData], { type: 'text/plain' });\n // Create a download link\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.style.display = 'none';\n a.href = url;\n a.download = fileName ?? 'filename';\n // Trigger the download\n a.click();\n // Clean up\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n /**\n * Download file where the data is provided as blob\n * @param data - Array Buffer data\n * @param type - type of the document.\n */\n protected downloadBlobFile(data: any, type: string, fileName: string) {\n let blob = new Blob([data], { type: type });\n let downloadLink = document.createElement('a');\n downloadLink.href = window.URL.createObjectURL(blob);\n downloadLink.setAttribute('download', fileName);\n document.body.appendChild(downloadLink);\n downloadLink.click();\n downloadLink.parentNode?.removeChild(downloadLink);\n }\n\n // ---------------------------------\n // --- INTERFACE IMPLEMENTATIONS ---\n // ---------------------------------\n protected onDestroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n //Called once, before the instance is destroyed.\n //Add 'implements OnDestroy' to the class.\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n}","","import { Component, computed, inject, input, signal, effect, output, OnInit } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NettyAgGridService } from '../../services/netty-ag-grid-service';\nimport {\n AllCommunityModule, ModuleRegistry, themeQuartz, Theme, GridApi, GridOptions,\n GridReadyEvent, RowSelectionOptions, StatusPanelDef, ClientSideRowModelModule,\n HighlightChangesModule, RefreshCellsParams\n} from 'ag-grid-community';\nimport {\n StatusBarModule, CellSelectionModule, ClipboardModule, ColumnMenuModule,\n ContextMenuModule, ExcelExportModule, RowSelectionModule\n} from 'ag-grid-enterprise';\nimport { CommonService } from '../../../common/services/common-service';\nimport { ActivatedRoute, Router, NavigationExtras } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NettySecurity } from '../../../system/models/netty-security';\nimport { lastValueFrom, map, throwError } from 'rxjs';\nimport { SysfunctionProxy } from '../../../system/services/sysfunction-proxy';\nimport { ButtonRenderer } from '../ag-grid-renderers/button-renderer/button-renderer';\nimport { CheckboxRenderer } from '../ag-grid-renderers/checkbox-renderer/checkbox-renderer';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NettyAppsBase } from '../../../netty-apps-bases/netty-apps-base/netty-apps-base';\n\nModuleRegistry.registerModules([\n AllCommunityModule,\n StatusBarModule,\n ClientSideRowModelModule,\n ClipboardModule,\n ExcelExportModule,\n ColumnMenuModule,\n ContextMenuModule,\n CellSelectionModule,\n HighlightChangesModule,\n RowSelectionModule,\n]);\n\n// AgGrid Dark Mode Row Style\nconst myTheme = themeQuartz.withParams(\n {\n backgroundColor: 'black',\n browserColorScheme: 'dark',\n },\n 'dark'\n);\n\nconst FILTER_MODE_KEY = 'nettyapps_filter_mode';\n\n@Component({\n selector: 'ntybase-ag-grid-base',\n imports: [],\n templateUrl: './ag-grid-base.html',\n styleUrl: './ag-grid-base.scss',\n})\nexport abstract class NettyAgGridBase<T extends { [key: string]: any }>\n extends NettyAppsBase implements OnInit {\n // Input signals\n readOnly = input<boolean>(false);\n popupFilterValid = input<boolean>(false);\n popupValid = input<boolean>(false);\n // params = input<any>('');\n // parameters = input<string>('');\n isEmbedded = input<boolean>(false);\n // Parameters pass when the component is embeded into an other\n public componantParameterGUID = input<any>('');\n public componantParameterType = input<string>('');\n\n // Events\n /*\n Selected records event\n @param records: Array of selected records\n */\n public onElementSelect = output<T[]>();\n // AG Grid Filter\n protected customFilters = signal<boolean>(this.getStoredFilterMode());\n\n // Filter section\n protected isFilterValid = signal<boolean>(true);\n protected isFilterExpanded = signal<boolean>(true);\n // Authentication\n protected authenticationList: Array<NettySecurity> = [];\n\n // User access writes\n protected accessRightsProcessed = signal<boolean>(false);\n public allowAdd = signal<boolean>(false);\n public allowEdit = signal<boolean>(false);\n public allowDelete = signal<boolean>(false);\n public allowLog = signal<boolean>(false);\n public allowRead = signal<boolean>(true);\n\n // Button action management variables\n public menuValid = signal<boolean>(true);\n public deleteValid = signal<boolean>(false);\n public selectionValid = signal<boolean>(false);\n public refreshButtonValid = signal<boolean>(false);\n\n // Parameters for embeded components\n selectedElement = output<any>();\n\n // AG-Grid theme setting (dark mode)\n theme: Theme = myTheme;\n\n // Grid references\n protected gridApi!: GridApi;\n protected userGridApi!: GridApi;\n public excelStyles: any = null;\n\n // Column definitions\n public columnDefs = signal<any>(null);\n public userColumnDefs = signal<any>(null);\n public groupMembersColumnDefs = signal<any>(null);\n\n // Framework components\n public frameworkComponents: any = null;\n\n // Selection management\n selectedRows = signal<T[]>([]);\n isSingleRowSelected = computed(() => this.selectedRows().length === 1);\n isMultipleRowSelected = computed(() => this.selectedRows().length > 0);\n\n // Component identifiers\n protected gridExpanded = signal<boolean>(false);\n protected componentName = signal<string>('Invalid');\n protected searchValueName = signal<string>('Invalid_searchValue');\n protected preferenceType = signal<string>('Invalid_columnState');\n public searchValue = signal<string>('');\n\n // Open component management\n protected openInPopup = signal<boolean>(false);\n\n // Services\n protected nettyAgGridService = inject(NettyAgGridService);\n protected commonService = inject(CommonService);\n protected router = inject(Router);\n protected routerActive = inject(ActivatedRoute);\n protected dialog = inject(MatDialog);\n protected sysFunctionProxy = inject(SysfunctionProxy);\n protected environment = inject(EnvironmentProxy);\n\n // Parse query parameters\n protected queryParameterGUID = toSignal(\n this.routerActive.queryParamMap.pipe(\n map((params) => params.get('parameters')),\n map((value) => this.parseOrReturnValue(value))\n ),\n {\n initialValue: null, // set initial value to null\n }\n );\n protected queryParameterType = toSignal(\n this.routerActive.queryParamMap.pipe(\n map((params) => params.get('type')),\n map((value) => this.parseOrReturnValue(value))\n ),\n {\n initialValue: null, // set initial value to null\n }\n );\n\n // Query Parameters can be provide as parameters\n protected parameterGUID: any = signal<any>('');\n protected parameterType: any = signal<string>('');\n\n initAgGrid_extension() {\n if (this.allowEdit() == false && (this.popupValid() ?? false) == false) {\n this.columnDefs().pop();\n this.columnDefs().shift();\n this.columnDefs().unshift({\n headerName: '',\n headerCheckboxSelection: true,\n sortable: true,\n resizable: true,\n filter: true,\n minWidth: 60,\n maxWidth: 60,\n suppressSizeToFit: true,\n colId: 'editColumn',\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n //onClick: this.onBtnClick.bind(this),\n label: '1',\n type: 'edit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n }\n if (this.popupValid() == true) {\n this.columnDefs().pop();\n this.columnDefs().shift();\n if (this.popupFilterValid() == true) {\n if (this.allowEdit()) {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@Update'),\n type: 'popupEdit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n } else {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellStyle: { 'padding-top': '5px' },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n }\n } else {\n if (this.allowEdit() == false) {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@Update'),\n type: 'popupEdit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'singleRow',\n checkboxes: false,\n });\n }\n if (!this.readOnly()) {\n this.columnDefs().unshift({\n headerName: this.translateService.instant('@select'),\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 80,\n maxWidth: 80,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellStyle: { 'margin-top': '8px' },\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@select'),\n type: 'popupSelect',\n },\n });\n\n this.gridApi.setGridOption('rowSelection', {\n mode: 'singleRow',\n checkboxes: false,\n });\n }\n }\n }\n }\n\n // Grid configuration options\n public gridOptions: GridOptions<T> = {\n rowSelection: {\n mode: 'multiRow',\n checkboxes: true,\n headerCheckbox: true,\n selectAll: 'filtered',\n hideDisabledCheckboxes: true,\n suppressRowClickSelection: false,\n enableCellChangeFlash: true,\n } as RowSelectionOptions<T>,\n };\n\n // Statusbar\n public statusBar: { statusPanels: StatusPanelDef[] } = {\n statusPanels: [\n {\n statusPanel: 'agTotalRowCountComponent',\n align: 'left',\n key: 'rowCount',\n },\n { statusPanel: 'agFilteredRowCountComponent' },\n { statusPanel: 'agSelectedRowCountComponent' },\n { statusPanel: 'agAggregationComponent' },\n ],\n };\n\n /**\n * Filter mode change\n */\n toggleFilterMode() {\n const newMode = !this.customFilters();\n this.customFilters.set(newMode);\n localStorage.setItem(FILTER_MODE_KEY, JSON.stringify(newMode));\n this.initAgGrid();\n if (this.gridApi) {\n this.gridApi.refreshHeader();\n\n this.gridApi.setFilterModel(null);\n\n const message = this.customFilters()\n ? '@customFilterModeEnabled'\n : '@defaultFilterModeEnabled';\n this.alertService.showAlert(this.translateService.instant(message));\n }\n }\n private getStoredFilterMode(): boolean {\n try {\n const stored = localStorage.getItem(FILTER_MODE_KEY);\n return stored !== null ? JSON.parse(stored) : true;\n } catch {\n return true;\n }\n }\n\n /**\n * Component initialization lifecycle hook\n */\n public async ngOnInit() {\n await this.setAccessRights();\n\n const savedSearchValue = sessionStorage.getItem(this.searchValueName());\n if (savedSearchValue) {\n this.searchValue.set(savedSearchValue);\n this.loadData(savedSearchValue);\n } else {\n this.loadData();\n }\n\n // Load user grid preferences\n await this.nettyAgGridService.copyGridUserPereferenceToLocal(\n this.preferenceType()\n );\n }\n\n private parseOrReturnValue(value: string | null): any {\n if (value) {\n try {\n return JSON.parse(value); // parse json\n } catch (e) {\n return value; // not a json retun value\n }\n }\n return null;\n }\n\n /**\n * Handle input changes for route parameters\n */\n // public ngOnChanges(changes: SimpleChanges): void {\n // if (changes['parameters']) {\n // const parameters = changes['parameters'].currentValue;\n // if (parameters) {\n // this.params =\n // typeof parameters === 'string' ? JSON.parse(parameters) : parameters;\n // } else {\n // this.commonService.clearOutlet();\n // }\n // }\n // }\n\n // Common grid ready handler\n protected onGridReady(params: GridReadyEvent): void {\n this.gridApi = params.api;\n\n this.setAgGridTranslations();\n\n this.gridApi.addEventListener('selectionChanged', () => {\n // Null-safe approach\n const selectedNodes = this.gridApi?.getSelectedNodes?.() || [];\n this.selectedRows.set(\n selectedNodes.map((node: { data: any }) => node.data)\n );\n });\n\n if (this.searchValue()) {\n this.gridApi.setGridOption('quickFilterText', this.searchValue());\n }\n }\n\n onFirstDataRendered(params: any) {\n //TODO: Fix this\n try {\n this.nettyAgGridService.loadGridUserPreference(\n this.preferenceType(),\n this.gridApi\n );\n this.expandCollapse();\n } catch (error) {\n console.log('OnFirstDataRendered error:', error);\n }\n }\n\n // Save the user parameters\n saveGrid(params: any) {\n const gridState = {\n columnState: this.gridApi.getColumnState(),\n };\n this.nettyAgGridService.saveGridUserPreference(\n this.preferenceType(),\n this.gridApi,\n JSON.stringify(gridState)\n );\n }\n\n // Grid utilities\n expandCollapse() {\n this.gridExpanded.set(\n this.nettyAgGridService.expandCollapseGrid(\n this.gridApi,\n this.gridExpanded()\n )\n );\n }\n\n quickSearch(searchStr: string = '') {\n this.searchValue.set(searchStr);\n if (this.gridApi) {\n this.gridApi.setGridOption('quickFilterText', this.searchValue());\n }\n sessionStorage.setItem(this.searchValueName(), this.searchValue());\n }\n\n /**\n * Handle back button click\n */\n backClicked() {\n this.commonService.goBack();\n }\n\n public gotoURL(\n routePrefix: string[],\n rightSidenav: string[] = [],\n parameters: string,\n type?: string,\n dialogComponent: any = null,\n isNewTab: boolean = false,\n isPopup: boolean = this.isEmbedded()\n ) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n const navigationExtras: NavigationExtras = {\n queryParams: {\n parameters: JSON.stringify(parameters),\n ...(type && { type }),\n isNewTab: isNewTab || undefined,\n },\n queryParamsHandling: 'merge',\n };\n\n if (isNewTab) {\n const fullUrl = this.router\n .createUrlTree(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n )\n .toString();\n window.open(fullUrl, '_blank');\n\n return;\n }\n\n if (isPopup && dialogComponent) {\n this.dialog\n .open(dialogComponent, {\n data: {\n parameters: parameters,\n mode: type || 'edit',\n embedded: true,\n },\n maxWidth: '100vw',\n disableClose: true,\n hasBackdrop: false,\n })\n .afterClosed()\n .subscribe((result) => {\n if (result === 'saved') {\n this.updateRowInGrid;\n }\n });\n return;\n }\n // Log control\n if (rightSidenav.length == 0 || rightSidenav[0] === 'log') {\n this.router.navigate(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n );\n return;\n }\n\n // In all other cases, open the side menu\n this.router\n .navigate(\n [\n {\n outlets: {\n primary: routePrefix,\n rightSidenav: [...routePrefix, ...rightSidenav],\n },\n },\n ],\n navigationExtras\n )\n .then(() => {\n // Ensure sidenav is opened after navigation\n this.commonService.toggleRightSidenav(true);\n });\n }\n\n popupGotoURL(urlSegments: string[]) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n this.router.navigate([\n {\n outlets: {\n primary: [baseHref, ...urlSegments],\n rightSidenav: null,\n },\n },\n ]);\n }\n\n toggleOpenMode() {\n const newMode = !this.openInPopup();\n this.openInPopup.set(newMode);\n\n localStorage.setItem('openInPopup', JSON.stringify(newMode));\n\n const message = newMode ? '@openInPopup' : '@openInSidenav';\n this.alertService.showSuccess(message);\n }\n\n /**\n * Listens for update events from CommonService and refreshes the grid accordingly.\n * - For 'add' or 'update' actions: Updates the relevant row\n * - For 'delete' action: Removes the row\n * - Performs no action if:\n * - Grid API is not ready, or\n * - The update type doesn't match\n */\n constructor() {\n super();\n this.frameworkComponents = {\n buttonRenderer: ButtonRenderer,\n checkboxRenderer: CheckboxRenderer,\n };\n\n const savedMode = localStorage.getItem('openInPopup');\n if (savedMode !== null) {\n this.openInPopup.set(JSON.parse(savedMode) === true);\n }\n\n this.translateService.onLangChange.subscribe(() => {\n this.setAgGridTranslations();\n });\n\n effect(() => {\n if (this.hasValidValue(this.componantParameterGUID())) {\n this.parameterGUID.set(this.componantParameterGUID());\n } else if (this.hasValidValue(this.queryParameterGUID())) {\n this.parameterGUID.set(this.queryParameterGUID());\n }\n if (this.hasValidValue(this.componantParameterType())) {\n this.parameterType.set(this.componantParameterType());\n } else if (this.hasValidValue(this.queryParameterType())) {\n this.parameterType.set(this.queryParameterType());\n }\n if (this.hasValidValue(this.parameterGUID)) {\n this.setFilter();\n this.loadData();\n } else {\n // Clear right side nav if parameterGUID is not provided\n this.commonService.clearOutlet();\n }\n });\n\n effect(() => {\n const update = this.commonService.updates();\n if (!update || !this.gridApi) return;\n\n if (update.type === this.getEntityType?.()) {\n switch (update.action) {\n case 'add':\n case 'update':\n this.updateRowInGrid(update.data);\n break;\n }\n }\n });\n\n effect(() => {\n this.onElementSelect.emit(this.selectedRows());\n });\n\n // Manage filter expanded state\n effect(() => {\n if (this.isEmbedded()) {\n this.isFilterExpanded.set(false);\n } else {\n this.isFilterExpanded.set(this.isFilterValid());\n }\n });\n }\n protected onReverseIsFilterValid() {\n if (this.isEmbedded()) {\n this.isFilterExpanded.set(false);\n } else {\n this.isFilterValid.update((a) => !a);\n }\n }\n /**\n * Validates if the given value is equal to null,undefined or ''\n * @param value\n * @returns true if has a valid value\n */\n protected hasValidValue(value: any) {\n if (value == null || value == undefined) {\n return false;\n }\n if (value == '') {\n return false;\n }\n return true;\n }\n\n private setAgGridTranslations() {\n if (this.gridApi) {\n (this.gridApi as any).setGridOption('localeText', {\n // Status panel translate\n totalRows: this.translateService.instant('AG_GRID.TOTAL_ROWS'),\n filteredRows: this.translateService.instant('AG_GRID.FILTERED_ROWS'),\n selectedRows: this.translateService.instant('AG_GRID.SELECTED_ROWS'),\n noRowsToShow: this.translateService.instant('AG_GRID.NO_ROWS_TO_SHOW'),\n loadingOoo: this.translateService.instant('AG_GRID.LOADING'),\n\n // Context menu translations\n copy: this.translateService.instant('AG_GRID.COPY'),\n copyWithHeaders: this.translateService.instant(\n 'AG_GRID.COPY_WITH_HEADERS'\n ),\n copyWithGroupHeaders: this.translateService.instant(\n 'AG_GRID.COPY_WITH_GROUP_HEADERS'\n ),\n paste: this.translateService.instant('AG_GRID.PASTE'),\n export: this.translateService.instant('AG_GRID.EXPORT'),\n csvExport: this.translateService.instant('AG_GRID.CSV_EXPORT'),\n excelExport: this.translateService.instant('AG_GRID.EXCEL_EXPORT'),\n pinColumn: this.translateService.instant('AG_GRID.PIN_COLUMN'),\n pinLeft: this.translateService.instant('AG_GRID.PIN_LEFT'),\n pinRight: this.translateService.instant('AG_GRID.PIN_RIGHT'),\n noPin: this.translateService.instant('AG_GRID.NO_PIN'),\n sortAscending: this.translateService.instant('AG_GRID.SORT_ASCENDING'),\n sortDescending: this.translateService.instant(\n 'AG_GRID.SORT_DESCENDING'\n ),\n autosizeThisColumn: this.translateService.instant(\n 'AG_GRID.AUTOSIZE_THIS_COLUMN'\n ),\n autosizeAllColumns: this.translateService.instant(\n 'AG_GRID.AUTOSIZE_ALL_COLUMNS'\n ),\n resetColumns: this.translateService.instant('AG_GRID.RESET_COLUMNS'),\n expandAll: this.translateService.instant('AG_GRID.EXPAND_ALL'),\n collapseAll: this.translateService.instant('AG_GRID.COLLAPSE_ALL'),\n exportToExcel: this.translateService.instant('AG_GRID.EXPORT_TO_EXCEL'),\n sheetName: this.translateService.instant('AG_GRID.SHEET_NAME'),\n exportAsExcelTable: this.translateService.instant(\n 'AG_GRID.EXPORT_AS_EXCEL_TABLE'\n ),\n rangeSelectTo: this.translateService.instant('AG_GRID.RANGE_SELECT_TO'),\n rangeSelectFrom: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_FROM'\n ),\n rangeSelectCopy: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_COPY'\n ),\n rangeSelectChart: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_CHART'\n ),\n pasteAll: this.translateService.instant('AG_GRID.CLIPBOARD_PASTE'),\n pasteWithoutHeader: this.translateService.instant(\n 'AG_GRID.CLIPBOARD_PASTE_WITHOUT_HEADER'\n ),\n copyAll: this.translateService.instant('AG_GRID.CLIPBOARD_COPY'),\n cut: this.translateService.instant('AG_GRID.CLIPBOARD_CUT'),\n\n // Pagination translations\n page: this.translateService.instant('AG_GRID.PAGE'),\n more: this.translateService.instant('AG_GRID.MORE'),\n to: this.translateService.instant('AG_GRID.TO'),\n of: this.translateService.instant('AG_GRID.OF'),\n next: this.translateService.instant('AG_GRID.NEXT'),\n last: this.translateService.instant('AG_GRID.LAST'),\n first: this.translateService.instant('AG_GRID.FIRST'),\n previous: this.translateService.instant('AG_GRID.PREVIOUS'),\n pageSizeSelectorLabel: this.translateService.instant(\n 'AG_GRID.PAGE_SIZE_SELECTOR_LABEL'\n ),\n\n // Set Filter\n selectAll: this.translateService.instant('AG_GRID.SELECT_ALL'),\n selectAllSearchResults: this.translateService.instant(\n 'AG_GRID.SELECT_ALL_SEARCH_RESULTS'\n ),\n searchOoo: this.translateService.instant('AG_GRID.SEARCH_OOO'),\n blanks: this.translateService.instant('AG_GRID.BLANKS'),\n noMatches: this.translateService.instant('AG_GRID.NO_MATCHES'),\n\n // Number Filter & Text Filter\n filterOoo: this.translateService.instant('AG_GRID.FILTER_OOO'),\n equals: this.translateService.instant('AG_GRID.EQUALS'),\n notEqual: this.translateService.instant('AG_GRID.NOT_EQUAL'),\n blank: this.translateService.instant('AG_GRID.BLANK'),\n notBlank: this.translateService.instant('AG_GRID.NOT_BLANK'),\n empty: this.translateService.instant('AG_GRID.EMPTY'),\n\n // Number Filter\n lessThan: this.translateService.instant('AG_GRID.LESS_THAN'),\n greaterThan: this.translateService.instant('AG_GRID.GREATER_THAN'),\n lessThanOrEqual: this.translateService.instant(\n 'AG_GRID.LESS_THAN_OR_EQUAL'\n ),\n greaterThanOrEqual: this.translateService.instant(\n 'AG_GRID.GREATER_THAN_OR_EQUAL'\n ),\n inRange: this.translateService.instant('AG_GRID.IN_RANGE'),\n inRangeStart: this.translateService.instant('AG_GRID.IN_RANGE_START'),\n inRangeEnd: this.translateService.instant('AG_GRID.IN_RANGE_END'),\n\n // Text Filter\n contains: this.translateService.instant('AG_GRID.CONTAINS'),\n notContains: this.translateService.instant('AG_GRID.NOT_CONTAINS'),\n startsWith: this.translateService.instant('AG_GRID.STARTS_WITH'),\n endsWith: this.translateService.instant('AG_GRID.ENDS_WITH'),\n\n // Date Filter\n dateFormatOoo: this.translateService.instant('AG_GRID.DATE_FORMAT_OOO'),\n\n // Filter Conditions\n andCondition: this.translateService.instant('AG_GRID.AND_CONDITION'),\n orCondition: this.translateService.instant('AG_GRID.OR_CONDITION'),\n\n // Filter Buttons\n applyFilter: this.translateService.instant('AG_GRID.APPLY_FILTER'),\n resetFilter: this.translateService.instant('AG_GRID.RESET_FILTER'),\n clearFilter: this.translateService.instant('AG_GRID.CLEAR_FILTER'),\n cancelFilter: this.translateService.instant('AG_GRID.CANCEL_FILTER'),\n\n // Filter Titles\n textFilter: this.translateService.instant('AG_GRID.TEXT_FILTER'),\n numberFilter: this.translateService.instant('AG_GRID.NUMBER_FILTER'),\n dateFilter: this.translateService.instant('AG_GRID.DATE_FILTER'),\n setFilter: this.translateService.instant('AG_GRID.SET_FILTER'),\n });\n }\n }\n\n /**\n * Update a single row in the grid\n * @param rowData The updated row data\n * @param idField The field name that serves as unique identifier (default: 'id')\n */\n protected updateRowInGrid(rowData: T, idField: string = 'id') {\n const rowNode = this.gridApi.getRowNode(rowData[idField]);\n if (rowNode) {\n rowNode.setData(rowData);\n const params: RefreshCellsParams = {\n rowNodes: [rowNode],\n force: true,\n suppressFlash: false,\n };\n this.gridApi.refreshCells(params);\n } else {\n this.loadData(); // Reload all data if row not found\n }\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.gridApi) return;\n\n const selectedNodes = this.gridApi.getSelectedNodes();\n if (selectedNodes.length === 0) {\n await this.alertService.showAlert('@pleaseSelectRowToDelete');\n return;\n }\n\n const confirmed = await this.alertService.showConfirm(\n '@confirmDeleteSelectedRecords'\n );\n if (confirmed) {\n const selectedRows = selectedNodes.map((node: { data: T }) => node.data);\n this.deleteRows?.(selectedRows);\n }\n }\n\n public async refreshData(): Promise<void> {\n try {\n this.loadData();\n await this.alertService.showAlert('@dataRefreshedSuccessfully');\n } catch (err) {\n this.alertService.showError(err as string);\n }\n }\n\n async setAccessRights(): Promise<boolean> {\n this.authenticationList = <Array<NettySecurity>>await lastValueFrom(\n this.sysFunctionProxy.getAuthentication(this.componentName())\n ).catch((e) => {\n return throwError(() => new Error(e));\n });\n try {\n this.allowRead.set(\n this.authenticationList.find((f) => f.action == 'read')?.allow ?? false\n );\n if (this.allowRead() == false) {\n this.commonService.userNotAllowedToRead();\n return false;\n }\n if (this.allowRead() == true && !this.readOnly()) {\n this.allowAdd.set(\n this.authenticationList.find((f) => f.action == 'add')?.allow ?? false\n );\n this.allowEdit.set(\n this.authenticationList.find((f) => f.action == 'edit')?.allow ??\n false\n );\n this.allowDelete.set(\n this.authenticationList.find((f) => f.action == 'delete')?.allow ??\n false\n );\n this.allowLog.set(\n this.authenticationList.find((f) => f.action == 'logAccess')?.allow ??\n false\n );\n } else {\n this.allowAdd.set(false);\n this.allowEdit.set(false);\n this.allowDelete.set(false);\n this.allowLog.set(false);\n }\n } catch (error) {\n this.allowAdd.set(false);\n this.allowEdit.set(false);\n this.allowDelete.set(false);\n this.allowLog.set(false);\n return false;\n }\n this.accessRightsProcessed.set(true);\n return true;\n }\n\n protected onFilterTextBoxVisibilityChange(isOpen: boolean): void {\n this.menuValid.set(!isOpen);\n }\n\n protected abstract loadData(filter?: string): void;\n protected abstract initAgGrid(): void;\n protected onBtnClick?(e: T): void;\n protected deleteRows?(rows: T[]): void;\n protected getEntityType?(): string;\n protected selectedData?(): void;\n protected setFilter(): void { } //override this to set a filter\n protected popupClose() {\n this.selectedElement.emit(null);\n }\n}\n","<p>ag-grid-base works!</p>\n","import {\n Component,\n signal,\n input,\n model,\n inject,\n ViewChild,\n SimpleChanges,\n DoCheck,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { CommonService } from '../../../common/services/common-service';\nimport { NgForm } from '@angular/forms';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NettyAppsBase } from '../../../netty-apps-bases/netty-apps-base/netty-apps-base';\n\nexport type UserViewMode = 'fullscreen' | 'sidenav' | 'dialog';\n\n@Component({\n selector: 'ntybase-ag-grid-save-base',\n imports: [],\n templateUrl: './ag-grid-save-base.html',\n styleUrl: './ag-grid-save-base.scss',\n})\nexport abstract class NettyAgGridSaveBase<T> extends NettyAppsBase implements DoCheck {\n // Services\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected commonService = inject(CommonService);\n protected environment = inject(EnvironmentProxy);\n protected dialog = inject(MatDialog);\n\n viewMode = signal<UserViewMode>('sidenav');\n\n // Input signals\n parameters = input<string>('');\n embedded = input<boolean>(false);\n isEmbedded = input<boolean>(false);\n\n currentItem = signal<T>({} as T);\n initialItem: T = {} as T;\n\n // Form tracking\n formChanged = false;\n @ViewChild('saveForm') saveForm!: NgForm;\n\n // Dialog related properties\n protected dialogRef = inject(MatDialogRef<any>, { optional: true });\n protected dialogData = inject(MAT_DIALOG_DATA, { optional: true });\n\n // Controls whether the panel should automatically close after saving user data\n closeAfterSave = model<boolean>(true);\n setCloseAfterSave(value: boolean): void {\n this.closeAfterSave.set(value);\n }\n\n // Controls the visibility of additional editable fields (e.g., password, extra settings)\n // When true, certain input fields become visible for editing\n updateValid = signal<boolean>(false);\n setUpdateValid(value: boolean): void {\n this.updateValid.set(value);\n }\n\n /**\n * Determine view mode based on current route\n */\n protected determineViewMode(): void {\n if (this.embedded() || this.dialogData?.embedded) {\n this.viewMode.set('dialog');\n } else if (this.router.url.includes('(rightSidenav:')) {\n this.viewMode.set('sidenav');\n } else {\n this.viewMode.set('fullscreen');\n }\n }\n\n ngOnInit(): void {\n this.loadDetailData();\n }\n\n /**\n * Set data to the form while preserving any unsaved changes\n * @param item - Data object of type T to populate the form\n */\n protected initializeFormData(item: T): void {\n // Merge incoming data with current form state to preserve unsaved changes\n const currentItem = this.currentItem();\n const updatedItem = { ...currentItem, ...item };\n\n // Create a new instance using the factory method\n const newItem = this.createItemInstance(updatedItem);\n this.currentItem.set(newItem);\n\n // Update initial item reference for change detection\n this.initialItem = this.createItemInstance(updatedItem);\n\n // Reset form changed flag\n this.formChanged = false;\n }\n\n /**\n * @param data - Data to populate the new instance\n */\n protected createItemInstance(data: Partial<T>): T {\n // Default implementation - child classes can override this\n return { ...data } as T;\n }\n\n /**\n * Check for form changes\n */\n ngDoCheck() {\n this.formChanged = !this.isEqual(this.currentItem(), this.initialItem);\n }\n\n protected isEqual(item1: T, item2: T): boolean {\n return JSON.stringify(item1) === JSON.stringify(item2);\n }\n\n /**\n * Check if can deactivate component\n */\n async canDeactivate(): Promise<boolean> {\n if (this.formChanged) {\n const confirmed = await this.alertService.showConfirm(\n '@unsavedChangesConfirm'\n );\n\n if (!confirmed) {\n return false;\n }\n\n return true;\n }\n return true;\n }\n\n protected getGuidFromParameters(): string {\n if (this.viewMode() === 'dialog' && this.dialogData) {\n return this.dialogData.parameters || '';\n }\n\n if (this.parameters) {\n try {\n return JSON.parse(this.parameters());\n } catch (e) {\n return this.parameters();\n }\n }\n\n return '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['parameters']) {\n this.loadDetailData();\n }\n }\n\n /**\n * Close sidenav or navigate back\n */\n async closeSidenav(): Promise<void> {\n const canDeactivate = await this.canDeactivate();\n\n if (canDeactivate) {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('saved');\n } else if (this.viewMode() === 'sidenav') {\n this.formChanged = false;\n this.commonService.clearOutlet();\n } else {\n const cleanPath = this.commonService.getCleanUrlPath();\n this.router.navigate([cleanPath]);\n }\n }\n }\n\n /**\n * Back button clicked\n */\n async backClicked(): Promise<void> {\n const canDeactivate = await this.canDeactivate();\n\n if (canDeactivate) {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('back');\n } else {\n this.commonService.goBack();\n }\n }\n }\n\n protected abstract loadDetailData(): void;\n\n protected validateSaveRecord(recordGUID: any): boolean {\n if (this.saveForm && this.saveForm.invalid) {\n Object.keys(this.saveForm.controls).forEach((key) => {\n const control = this.saveForm.controls[key];\n control.markAsTouched();\n control.markAsDirty();\n });\n\n this.alertService.showError('@pleaseFillRequiredFields');\n return false;\n }\n\n // First check if there are any visual form changes\n if (!this.formChanged && recordGUID) {\n this.alertService.showAlert('@noChangesDetected');\n if (this.closeAfterSave()) {\n this.closeSidenav();\n }\n return false;\n }\n return true;\n }\n\n public gotoURL(\n routePrefix: string[],\n rightSidenav: string[] = [],\n parameters: string,\n type?: string,\n dialogComponent: any = null,\n isNewTab: boolean = false,\n isPopup: boolean = this.isEmbedded()\n ) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n const navigationExtras: NavigationExtras = {\n queryParams: {\n parameters: JSON.stringify(parameters),\n ...(type && { type }),\n isNewTab: isNewTab || undefined,\n },\n queryParamsHandling: 'merge',\n };\n\n if (isNewTab) {\n const fullUrl = this.router\n .createUrlTree(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n )\n .toString();\n window.open(fullUrl, '_blank');\n\n return;\n }\n\n if (isPopup && dialogComponent) {\n this.dialog\n .open(dialogComponent, {\n data: {\n parameters: parameters,\n mode: type || 'edit',\n embedded: true,\n },\n maxWidth: '100vw',\n disableClose: true,\n })\n .afterClosed()\n .subscribe((result) => {\n if (result === 'saved') {\n //this.updateRowInGrid;\n }\n });\n return;\n }\n // Log control\n if (rightSidenav.length == 0 || rightSidenav[0] === 'log') {\n this.router.navigate(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n );\n return;\n }\n\n // In all other cases, open the side menu\n this.router\n .navigate(\n [\n {\n outlets: {\n primary: routePrefix,\n rightSidenav: [...routePrefix, ...rightSidenav],\n },\n },\n ],\n navigationExtras\n )\n .then(() => {\n // Ensure sidenav is opened after navigation\n this.commonService.toggleRightSidenav(true);\n });\n }\n\n popupGotoURL(urlSegments: string[]) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n this.router.navigate([\n {\n outlets: {\n primary: [baseHref, ...urlSegments],\n rightSidenav: null,\n },\n },\n ]);\n }\n}\n","<p>ag-grid-save-base works!</p>\n","import { Component } from '@angular/core';\n// Excel Import\nimport * as XLSX from 'xlsx';\nimport { NettyAgGridBase } from '../ag-grid-base/ag-grid-base';\ntype AOA = string[][];\n\n@Component({\n selector: 'ntybase-excel-import-base',\n imports: [],\n templateUrl: './excel-import-base.html',\n styleUrl: './excel-import-base.scss',\n})\nexport abstract class ExcelImportBase extends NettyAgGridBase<any> {\n protected dataList: AOA = [];\n protected wopts: XLSX.WritingOptions = { bookType: 'xlsx', type: 'array' };\n protected fileName = 'PayrollJournalTrans.xlsx';\n protected isDataValidated = false;\n /*******************************\n *** EXCEL UPLOAD FUNCTIONS ***\n *******************************/\n onFileChange(evt: any) {\n /* wire up file reader */\n const target: DataTransfer = <DataTransfer>evt.target;\n if (target.files.length !== 1) {\n throw new Error('Cannot use multiple files');\n }\n const reader: FileReader = new FileReader();\n reader.onload = (e: any) => {\n /* read workbook */\n const bstr: string = e.target.result;\n const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\n\n /* grab first sheet */\n const wsname: string = wb.SheetNames[0];\n const ws: XLSX.WorkSheet = wb.Sheets[wsname];\n\n /* save data */\n this.dataList = <AOA>XLSX.utils.sheet_to_json(ws, { header: 1 });\n console.log('dataList:', this.dataList);\n };\n reader.readAsBinaryString(target.files[0]);\n }\n}\n","<p>excel-import-base works!</p>\n","import { Component, inject } from '@angular/core';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-date-time-filter',\n imports: [TranslateModule],\n templateUrl: './range-date-time-filter.html',\n styleUrl: './range-date-time-filter.scss',\n})\nexport class RangeDateTimeFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type: 'date' | 'range' | 'special';\n date?: Date;\n start?: Date;\n end?: Date;\n special?: 'today' | 'yesterday' | 'thisWeek' | 'thisMonth';\n }> = [];\n\n // Dil servisini inject edin\n private i18nService = inject(I18nService);\n protected translateService = inject(TranslateService);\n\n // Türkçe ve İngilizce özel anahtar kelimeler\n private specialKeywords: { [key: string]: string } = {\n today: 'today',\n bugün: 'today',\n yesterday: 'yesterday',\n dün: 'yesterday',\n thisweek: 'thisWeek',\n 'bu hafta': 'thisWeek',\n thismonth: 'thisMonth',\n 'bu ay': 'thisMonth',\n };\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n // Virgülle ayrılmış parçaları al ve temizle\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // Aralık kontrolü (.. içeriyor mu) - ÖNCE aralık kontrolü yap\n if (part.includes('..')) {\n const rangeParts = part.split('..');\n if (rangeParts.length === 2) {\n const startStr = rangeParts[0].trim();\n const endStr = rangeParts[1].trim();\n\n const startDate = this.parseDateForRange(startStr, false);\n const endDate = this.parseDateForRange(endStr, true);\n\n if (startDate && endDate) {\n // Tarihleri doğru sırala (küçükten büyüğe)\n const sortedStart = startDate < endDate ? startDate : endDate;\n const sortedEnd = startDate < endDate ? endDate : startDate;\n\n this.conditions.push({\n type: 'range',\n start: sortedStart,\n end: sortedEnd,\n });\n }\n }\n } else {\n // Özel anahtar kelime kontrolü (Türkçe ve İngilizce)\n const normalizedPart = part.toLowerCase();\n if (this.specialKeywords[normalizedPart]) {\n this.conditions.push({\n type: 'special',\n special: this.specialKeywords[normalizedPart] as any,\n });\n continue;\n }\n\n // Tek tarih kontrolü\n const date = this.parseDate(part);\n if (date) {\n this.conditions.push({\n type: 'date',\n date: date,\n });\n }\n }\n }\n }\n\n private parseDateForRange(\n dateString: string,\n isEndDate: boolean\n ): Date | null {\n if (!dateString) return null;\n\n // Özel anahtar kelimeler için tarih dönüşümü\n const normalizedString = dateString.toLowerCase();\n if (this.specialKeywords[normalizedString]) {\n const specialType = this.specialKeywords[normalizedString];\n const range = this.getSpecialDateRange(specialType);\n return isEndDate ? range.end : range.start;\n }\n\n return this.parseDate(dateString);\n }\n\n // Mevcut dili kontrol eden yardımcı metod\n private isTurkish(): boolean {\n const currentLang = this.i18nService.language.toLowerCase();\n return (\n currentLang === 'tr' ||\n currentLang === 'türkçe' ||\n currentLang === 'tr-tr'\n );\n }\n\n private parseDate(dateString: string): Date | null {\n if (!dateString) return null;\n\n // Mevcut dile göre formatları belirle\n const isTurkish = this.isTurkish();\n\n // Tarih formatları - ÖNCE saat içeren formatlar\n const formats = [\n // ISO format: YYYY-AA-GG SS:DD (her dilde aynı)\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2}) (\\d{1,2}):(\\d{2})$/,\n\n // Dile göre formatlar\n ...(isTurkish\n ? [\n // Türkçe format: GG.AA.YYYY SS:DD (., /, - ile)\n /^(\\d{1,2})[\\.\\/-](\\d{1,2})[\\.\\/-](\\d{4}) (\\d{1,2}):(\\d{2})$/,\n // Türkçe format: GG.AA.YYYY (., /, - ile)\n /^(\\d{1,2})[\\.\\/-](\\d{1,2})[\\.\\/-](\\d{4})$/,\n ]\n : [\n // İngilizce/USA format: AA/GG/YYYY SS:DD (/, ., - ile)\n /^(\\d{1,2})[\\/\\.-](\\d{1,2})[\\/\\.-](\\d{4}) (\\d{1,2}):(\\d{2})$/,\n // İngilizce/USA format: AA/GG/YYYY (/, ., - ile)\n /^(\\d{1,2})[\\/\\.-](\\d{1,2})[\\/\\.-](\\d{4})$/,\n ]),\n\n // Sadece tarih formatları (saat yok)\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/, // YYYY-AA-GG (ISO)\n ];\n\n for (const format of formats) {\n const match = dateString.match(format);\n if (match) {\n let year: number,\n month: number,\n day: number,\n hours: number = 0,\n minutes: number = 0;\n\n if (format === formats[0]) {\n // ISO: YYYY-AA-GG SS:DD\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n day = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (isTurkish && format === formats[1]) {\n // Türkçe: GG.AA.YYYY SS:DD\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (!isTurkish && format === formats[1]) {\n // İngilizce: AA/GG/YYYY SS:DD\n month = parseInt(match[1], 10) - 1;\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (isTurkish && format === formats[2]) {\n // Türkçe: GG.AA.YYYY\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n } else if (!isTurkish && format === formats[2]) {\n // İngilizce: AA/GG/YYYY\n month = parseInt(match[1], 10) - 1;\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === formats[3]) {\n // ISO: YYYY-AA-GG\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n day = parseInt(match[3], 10);\n } else {\n continue;\n }\n\n // Tarih geçerlilik kontrolü\n const date = new Date(year, month, day, hours, minutes);\n if (\n date.getFullYear() === year &&\n date.getMonth() === month &&\n date.getDate() === day &&\n date.getHours() === hours &&\n date.getMinutes() === minutes\n ) {\n return date;\n }\n }\n }\n\n return null;\n }\n\n private getSpecialDateRange(special: string): { start: Date; end: Date } {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n switch (special) {\n case 'today':\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n return { start: today, end: tomorrow };\n\n case 'yesterday':\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const yesterdayEnd = new Date(yesterday);\n yesterdayEnd.setDate(yesterdayEnd.getDate() + 1);\n return { start: yesterday, end: yesterdayEnd };\n\n case 'thisWeek':\n const startOfWeek = new Date(today);\n startOfWeek.setDate(today.getDate() - today.getDay());\n const endOfWeek = new Date(startOfWeek);\n endOfWeek.setDate(startOfWeek.getDate() + 7);\n return { start: startOfWeek, end: endOfWeek };\n\n case 'thisMonth':\n const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n return { start: startOfMonth, end: endOfMonth };\n\n default:\n return { start: today, end: today };\n }\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field;\n if (!field) return true;\n\n const cellValue = params.data ? params.data[field] : null;\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri null/undefined ise filtrele\n if (!cellValue) {\n return false;\n }\n\n // Hücre değerini Date'e dönüştür\n let cellDate: Date;\n if (cellValue instanceof Date) {\n cellDate = cellValue;\n } else if (typeof cellValue === 'string') {\n // String ise Date'e parse et\n cellDate = new Date(cellValue);\n if (isNaN(cellDate.getTime())) {\n return false; // Geçersiz tarih\n }\n } else {\n return false; // Desteklenmeyen tip\n }\n\n const cellTime = cellDate.getTime();\n\n // Koşullardan herhangi birini sağlıyor mu kontrol et\n return this.conditions.some((condition) => {\n switch (condition.type) {\n case 'date':\n if (!condition.date) return false;\n const conditionTime = condition.date.getTime();\n const nextDay = new Date(condition.date);\n nextDay.setDate(nextDay.getDate() + 1);\n return cellTime >= conditionTime && cellTime < nextDay.getTime();\n\n case 'range':\n if (!condition.start || !condition.end) return false;\n const startTime = condition.start.getTime();\n const endTime = condition.end.getTime();\n return cellTime >= startTime && cellTime < endTime;\n\n case 'special':\n if (!condition.special) return false;\n const range = this.getSpecialDateRange(condition.special);\n return (\n cellTime >= range.start.getTime() && cellTime < range.end.getTime()\n );\n\n default:\n return false;\n }\n });\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.parseFilterText(); // Modelden set ederken koşulları tekrar parse et\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@dateTimeFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@dateTimeFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\">\n {{ '@formats' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@range' | translate }}:\n <code>start..end</code>\n <span class=\"custom-filter__example\">(today..yesterday)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@singleDate' | translate }}:\n <code>YYYY-MM-DD</code>\n <span class=\"custom-filter__example\">(2024-05-15)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@dateTime' | translate }}:\n <code>YYYY-MM-DD HH:MM</code>\n <span class=\"custom-filter__example\">(2024-05-15 14:30)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>date1,date2,start..end</code>\n </div>\n\n <strong class=\"custom-filter__subtitle\">\n {{ '@specialKeywords' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@turkish' | translate }}:\n <span class=\"custom-filter__keywords\">\n <code class=\"custom-filter__keyword\">bugün</code>\n <code class=\"custom-filter__keyword\">dün</code>\n <code class=\"custom-filter__keyword\">bu hafta</code>\n <code class=\"custom-filter__keyword\">bu ay</code>\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@english' | translate }}:\n <span class=\"custom-filter__keywords\">\n <code class=\"custom-filter__keyword\">today</code>\n <code class=\"custom-filter__keyword\">yesterday</code>\n <code class=\"custom-filter__keyword\">thisWeek</code>\n <code class=\"custom-filter__keyword\">thisMonth</code>\n </span>\n </div>\n\n <div class=\"custom-filter__note\">{{ '@filterExample' | translate }}</div>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-number-filter',\n imports: [TranslateModule],\n templateUrl: './range-number-filter.html',\n styleUrl: './range-number-filter.scss',\n})\nexport class RangeNumberFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type: 'range' | 'value' | 'exclude';\n min?: number;\n max?: number;\n value?: number;\n }> = [];\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // Hariç tutma kontrolü (! ile başlıyor mu)\n if (part.startsWith('!')) {\n const excludePart = part.substring(1).trim();\n\n // Hariç tutma için aralık kontrolü\n if (excludePart.includes('..')) {\n const rangeParts = excludePart.split('..');\n\n if (rangeParts.length === 2) {\n const minStr = rangeParts[0].trim();\n const maxStr = rangeParts[1].trim();\n\n // !..10 formatı (max hariç)\n if (minStr === '' && maxStr !== '') {\n const max = Number(maxStr);\n if (!isNaN(max)) {\n this.conditions.push({\n type: 'exclude',\n min: -Infinity,\n max: max,\n });\n }\n }\n // !10.. formatı (min hariç)\n else if (minStr !== '' && maxStr === '') {\n const min = Number(minStr);\n if (!isNaN(min)) {\n this.conditions.push({\n type: 'exclude',\n min: min,\n max: Infinity,\n });\n }\n }\n // !min..max formatı (aralık hariç)\n else if (minStr !== '' && maxStr !== '') {\n const min = Number(minStr);\n const max = Number(maxStr);\n if (!isNaN(min) && !isNaN(max)) {\n this.conditions.push({\n type: 'exclude',\n min: Math.min(min, max),\n max: Math.max(min, max),\n });\n }\n }\n }\n } else {\n // Tek değer hariç tutma\n const value = Number(excludePart);\n if (!isNaN(value)) {\n this.conditions.push({\n type: 'exclude',\n value: value,\n });\n }\n }\n }\n // Aralık kontrolü (.. içeriyor mu)\n else if (part.includes('..')) {\n const rangeParts = part.split('..');\n\n if (rangeParts.length === 2) {\n const minStr = rangeParts[0].trim();\n const maxStr = rangeParts[1].trim();\n\n // ..10 formatı (max belirtilmiş)\n if (minStr === '' && maxStr !== '') {\n const max = Number(maxStr);\n if (!isNaN(max)) {\n this.conditions.push({\n type: 'range',\n min: -Infinity,\n max: max,\n });\n }\n }\n // 10.. formatı (min belirtilmiş)\n else if (minStr !== '' && maxStr === '') {\n const min = Number(minStr);\n if (!isNaN(min)) {\n this.conditions.push({\n type: 'range',\n min: min,\n max: Infinity,\n });\n }\n }\n // min..max formatı\n else if (minStr !== '' && maxStr !== '') {\n const min = Number(minStr);\n const max = Number(maxStr);\n if (!isNaN(min) && !isNaN(max)) {\n this.conditions.push({\n type: 'range',\n min: Math.min(min, max),\n max: Math.max(min, max),\n });\n }\n }\n }\n } else {\n // Tek değer kontrolü\n const value = Number(part);\n if (!isNaN(value)) {\n this.conditions.push({\n type: 'value',\n value: value,\n });\n }\n }\n }\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const cellValue = this.params.getValue(params.node);\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri null/undefined ise veya sayı değilse filtrele\n if (cellValue == null || typeof cellValue !== 'number') {\n return false;\n }\n\n // VİRGÜL OR MANTIĞI: Koşullardan herhangi biri sağlanıyorsa true döndür\n const passesAnyCondition = this.conditions.some((condition) => {\n if (\n condition.type === 'range' &&\n condition.min !== undefined &&\n condition.max !== undefined\n ) {\n // Aralık koşulu: değer aralık içinde olmalı\n return cellValue >= condition.min && cellValue <= condition.max;\n } else if (condition.type === 'value' && condition.value !== undefined) {\n // Değer koşulu: değer eşit olmalı\n return cellValue === condition.value;\n } else if (condition.type === 'exclude') {\n if (condition.value !== undefined) {\n // Tek değer hariç tutma: değer eşit olmamalı\n return cellValue !== condition.value;\n } else if (condition.min !== undefined && condition.max !== undefined) {\n // Aralık hariç tutma: değer aralık dışında olmalı\n return !(cellValue >= condition.min && cellValue <= condition.max);\n }\n }\n return false;\n });\n\n return passesAnyCondition;\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.conditions = model.conditions || [];\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@numberFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@numberFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\"\n >{{ '@formats' | translate }}:</strong\n >\n\n <div class=\"custom-filter__format\">\n {{ '@closedRange' | translate }}:\n <code>min..max</code>\n <span class=\"custom-filter__example\">(0..5)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@equalOrGreater' | translate }}:\n <code>min..</code>\n <span class=\"custom-filter__example\">(5..)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@equalOrLess' | translate }}:\n <code>..max</code>\n <span class=\"custom-filter__example\">(..10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@singleValue' | translate }}:\n <code>number</code>\n <span class=\"custom-filter__example\">(10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@exclusion' | translate }}:\n <code>!number</code>\n <span class=\"custom-filter__example\">(!5)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@rangeExclusion' | translate }}:\n <code>!min..max</code>\n <span class=\"custom-filter__example\">(!5..10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>value1,value2,range</code>\n </div>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-string-filter',\n imports: [TranslateModule],\n templateUrl: './range-string-filter.html',\n styleUrl: './range-string-filter.scss',\n})\nexport class RangeStringFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type:\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'range'\n | 'singleChar'\n | 'not'\n | 'regex'\n | 'exact';\n value?: string;\n start?: string;\n end?: string;\n condition?: any;\n pattern?: string;\n }> = [];\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // \"!\" ile başlayan olumsuz koşul kontrolü\n if (part.startsWith('!')) {\n const positiveCondition = part.slice(1);\n const positiveParsed = this.parseSingleCondition(positiveCondition);\n if (positiveParsed) {\n this.conditions.push({\n type: 'not',\n condition: positiveParsed,\n });\n }\n continue;\n }\n\n const parsedCondition = this.parseSingleCondition(part);\n if (parsedCondition) {\n this.conditions.push(parsedCondition);\n }\n }\n }\n\n private parseSingleCondition(condition: string): any {\n // Regex kontrolü ($$ ile başlıyorsa)\n if (condition.startsWith('$$')) {\n const regexPattern = condition.slice(2);\n if (regexPattern) {\n return {\n type: 'regex',\n pattern: regexPattern,\n };\n }\n }\n\n // Aralık kontrolü (.. içeriyor mu) - ama $$.. şeklinde değilse\n if (condition.includes('..') && !condition.startsWith('$$')) {\n const rangeParts = condition.split('..');\n if (rangeParts.length === 2) {\n const start = rangeParts[0].trim();\n const end = rangeParts[1].trim();\n if (start && end) {\n return {\n type: 'range',\n start: start.toLowerCase(),\n end: end.toLowerCase(),\n };\n }\n }\n }\n // Tek karakter kontrolü (? ile)\n else if (condition.includes('?') && !condition.startsWith('$$')) {\n // Eğer sadece normal karakterler varsa (özel karakter yoksa) exact match\n const hasSpecialChars =\n condition.includes('*') ||\n condition.includes('?') ||\n condition.includes('..');\n\n if (!hasSpecialChars) {\n return {\n type: 'exact',\n value: condition.toLowerCase(),\n };\n }\n\n // ? karakteri içeriyorsa singleChar kontrolü\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'singleChar',\n value: value,\n };\n }\n }\n // Başlangıç kontrolü (* sonunda)\n else if (\n condition.endsWith('*') &&\n !condition.startsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(0, -1).toLowerCase();\n if (value) {\n return {\n type: 'startsWith',\n value: value,\n };\n }\n }\n // Bitiş kontrolü (* başında)\n else if (\n condition.startsWith('*') &&\n !condition.endsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(1).toLowerCase();\n if (value) {\n return {\n type: 'endsWith',\n value: value,\n };\n }\n }\n // İçeren kontrolü (* ile başlayıp * ile bitiyorsa)\n else if (\n condition.startsWith('*') &&\n condition.endsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(1, -1).toLowerCase();\n if (value) {\n return {\n type: 'contains',\n value: value,\n };\n }\n }\n // Normal exact match (hiçbir özel karakter yoksa)\n else if (\n !condition.startsWith('$$') &&\n !condition.includes('*') &&\n !condition.includes('?') &&\n !condition.includes('..')\n ) {\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'exact',\n value: value,\n };\n }\n }\n // Normal içeren kontrolü (varsayılan) - regex değilse\n else if (!condition.startsWith('$$')) {\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'contains',\n value: value,\n };\n }\n }\n\n return null;\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field;\n if (!field) return true;\n\n const cellValue = params.data\n ? String(params.data[field] || '').toLowerCase()\n : '';\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri boşsa filtrele\n if (!cellValue) {\n return false;\n }\n\n // VİRGÜL OR MANTIĞI: Koşullardan herhangi biri sağlanıyorsa true döndür\n return this.conditions.some((condition) => {\n const conditionResult = this.checkSingleCondition(cellValue, condition);\n return condition.type === 'not' ? !conditionResult : conditionResult;\n });\n }\n\n private checkSingleCondition(cellValue: string, condition: any): boolean {\n switch (condition.type) {\n case 'contains':\n return condition.value ? cellValue.includes(condition.value) : false;\n\n case 'startsWith':\n return condition.value ? cellValue.startsWith(condition.value) : false;\n\n case 'endsWith':\n return condition.value ? cellValue.endsWith(condition.value) : false;\n\n case 'exact':\n return condition.value ? cellValue === condition.value : false;\n\n case 'range':\n if (condition.start && condition.end) {\n return cellValue >= condition.start && cellValue <= condition.end;\n }\n return false;\n\n case 'singleChar':\n if (condition.value) {\n // ? karakterini herhangi bir karakter olarak değerlendir\n const pattern = condition.value;\n if (cellValue.length !== pattern.length) {\n return false;\n }\n\n // Her karakteri tek tek kontrol et\n for (let i = 0; i < pattern.length; i++) {\n const patternChar = pattern[i];\n const cellChar = cellValue[i];\n\n // Eğer pattern'de ? değilse ve karakterler eşleşmiyorsa false\n if (patternChar !== '?' && patternChar !== cellChar) {\n return false;\n }\n }\n return true;\n }\n return false;\n\n case 'regex':\n if (condition.pattern) {\n try {\n const regex = new RegExp(condition.pattern, 'i'); // case-insensitive\n return regex.test(cellValue);\n } catch (e) {\n // Geçersiz regex patterni durumunda false döndür\n console.warn('Geçersiz regex patterni:', condition.pattern);\n return false;\n }\n }\n return false;\n\n case 'not':\n return this.checkSingleCondition(cellValue, condition.condition);\n\n default:\n return false;\n }\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.conditions = model.conditions || [];\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@stringFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@stringFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\">\n {{ '@formats' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@exactMatch' | translate }}:\n <code>text</code>\n <span class=\"custom-filter__example\">(ahmet)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@startsWith' | translate }}:\n <code>text*</code>\n <span class=\"custom-filter__example\">(ahmet*)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@endsWith' | translate }}:\n <code>*text</code>\n <span class=\"custom-filter__example\">(*metin)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@contains' | translate }}:\n <code>*text*</code>\n <span class=\"custom-filter__example\">(*ahmet*)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@range' | translate }}:\n <code>start..end</code>\n <span class=\"custom-filter__example\">(ali..veli)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n <span class=\"custom-filter__description\">\n {{ '@singleCharacter' | translate }}:\n </span>\n <code>?em</code>\n <span class=\"custom-filter__example\">\n (?em = 3 characters, 2nd and 3rd letters \"em\")\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n <span class=\"custom-filter__description\">\n {{ '@multipleCharacters' | translate }}:\n </span>\n <code>???in</code>\n <span class=\"custom-filter__example\">\n (5 characters, last 2 letters \"in\")\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@not' | translate }}:\n <code>!condition</code>\n <span class=\"custom-filter__example\">(!*ahmet*, !?hmet)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@regex' | translate }}:\n <code>$$pattern</code>\n <span class=\"custom-filter__example\">($$^[A-Z].*, $$a.*b)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>value1,value2,*end,$$pattern</code>\n </div>\n </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n Router,\n CanActivate,\n} from '@angular/router';\nimport { CredentialsService } from '../services/credentials-service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthenticationGuard implements CanActivate {\n private router = inject(Router);\n private credentialsService = inject(CredentialsService);\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n if (this.credentialsService.isAuthenticated()) {\n return true;\n }\n if (state.url.includes('login')) {\n this.router.navigate([state.url], { replaceUrl: false });\n } else {\n this.router.navigate(['/login'], {\n queryParams: { redirect: state.url },\n replaceUrl: true,\n });\n }\n return false;\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { of, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CredentialsService } from '../services/credentials-service';\nimport { UrlHelperService } from '../services/url-helper-service';\n\n/**\n * Nty Authentication Interceptor. This interceptor is used to intercept HTTP requests and add authentication headers.\n * It's coded as functional interceptor for better performance.\n * @param req \n * @param next \n * @returns \n */\nexport const ntyAuthenticationInterceptor: HttpInterceptorFn = (req, next) => {\n const router = inject(Router);\n const credentialsService = inject(CredentialsService);\n const environmentProxy = inject(EnvironmentProxy);\n const urlHelperService = inject(UrlHelperService);\n\n if (req.headers.get('No-Auth') == 'True') return next(req.clone());\n\n let token: string | null = credentialsService.token;\n\n if (token != null) {\n let appName = environmentProxy.getApplicationName();\n const clonedreq = req.clone({\n headers: req.headers.set('Authorization', 'Bearer ' + token)\n // .set(\"NettyAppName\",appName)\n });\n return next(clonedreq).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n router.navigate(['/login'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n router.navigate(['/forbidden'], {\n state: { attemptedUrl: router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n } else {\n return next(req.clone()).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n router.navigate(['/login'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n router.navigate(['/forbidden'], {\n state: { attemptedUrl: router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n }\n};\n","export class LoginDto {\n userName: string = '';\n password: string = '';\n application: string = '';\n\n public constructor(\n _userName?: string,\n _password?: string,\n _application?: string\n ) {\n this.userName = _userName ?? '';\n this.password = _password ?? '';\n this.application = _application ?? '';\n }\n}\n","export class MFACodeDto {\n sid: any = '';\n mfacode: string = '';\n\n public constructor(_sid: any, _mfacode: string) {\n this.sid = _sid;\n this.mfacode = _mfacode;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, map, take } from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials-service';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { LoginContext } from '../models/login-context';\nimport { MFACodeContext } from '../models/mfa-code-context';\nimport { LoginDto } from '../models/login-dto';\nimport { Buffer } from 'buffer';\nimport { MFACodeDto } from '../models/mfa-code-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthenticationService {\n private credentialsService = inject(CredentialsService);\n private environmentProxy = inject(EnvironmentProxy);\n private http = inject(HttpClient);\n\n static counter: number = 0;\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n\n login(context: LoginContext): Observable<Credentials> {\n // Prepare Connection URL\n let loginUrl = this.environmentProxy.getAdminLink('Login');\n\n let loginDto = new LoginDto(\n context.username,\n context.password,\n this.environmentProxy.getApplicationName()\n );\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let loginCall$ = this.http.post(loginUrl, loginDto, {\n headers: reqHeader,\n });\n\n // Return an observable for the connection which has pipes to\n // process the incoming data before passing it to the caller\n // This process maps the incoming data into Credentials format\n // and saves the credentials into localstorage\n return loginCall$.pipe(\n map((record) => {\n let token: string = record.toString();\n let decodedToken: any = this.decodeToken(token);\n let data: Credentials = {\n username: context.username,\n token: token,\n role: this.getClaim(\n decodedToken,\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role'\n ),\n authenticationMethod: this.getClaim(\n decodedToken,\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod'\n ),\n sid: this.getClaim(\n decodedToken,\n 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid'\n ),\n };\n // Parse JWT\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n switch (error.status) {\n case '404':\n if (AuthenticationService.counter == 0) {\n AuthenticationService.counter++;\n return this.login(context);\n }\n break;\n case '415':\n case '500':\n errorMessage =\n error.status + ' ' + (error.error?.detail ?? error.message ?? '');\n break;\n default:\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n break;\n }\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n\n /** Parse the claim sections of the given JWT token\n *\n * @param token Token to parse\n * @returns\n */\n public decodeToken(token: string): any {\n let parts = token.split('.');\n let decodedTokenStr = Buffer.from(parts[1], 'base64').toString();\n let decodedToken = JSON.parse(decodedTokenStr);\n // console.log('decoded Token:', decodedToken);\n return decodedToken;\n }\n /** Get the claim data from the given token claim json\n *\n * @param decodedToken\n * @param claimKey\n * @returns\n */\n public getClaim(decodedToken: any, claimKey: string): any {\n try {\n return decodedToken ? decodedToken[claimKey] : null;\n } catch (error) {\n return null;\n }\n }\n\n mfaLogin(context: MFACodeContext): Observable<boolean> {\n // Prepare Connection URL\n let mfaCodeUrl = this.environmentProxy.getAdminLink('ValidateMFACode');\n let credentials = this.credentialsService.getCredentials();\n let mfaCodeDto = new MFACodeDto(credentials.sid, context.mfaCode);\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let mfaCodeCall$ = this.http.post(mfaCodeUrl, mfaCodeDto, {\n headers: reqHeader,\n });\n return mfaCodeCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n resendMFACode(context: MFACodeContext): Observable<string> {\n // Prepare Connection URL\n let mfaCodeUrl = this.environmentProxy.getAdminLink('ResendMFACode');\n let credentials = this.credentialsService.getCredentials();\n let mfaCodeDto = new MFACodeDto(credentials.sid, context.mfaCode);\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let resendMFACodeCall$ = this.http.post(mfaCodeUrl, mfaCodeDto, {\n headers: reqHeader,\n });\n console.log('mfaCodeUrl', mfaCodeUrl);\n return resendMFACodeCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\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 // Customize credentials invalidation here\n this.credentialsService.setCredentials();\n //localStorage.clear();\n return of(true);\n }\n\n /** Send a pasword reset e-mail\n *\n * @param context\n * @returns\n */\n forgotPassword(context: LoginContext): Observable<string> {\n // Prepare Connection URL\n let loginUrl = this.environmentProxy.getAdminLink('ForgotPassword');\n let loginDto = new LoginDto(\n context.username,\n '',\n this.environmentProxy.getApplicationName()\n );\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let loginCall$ = this.http.post(loginUrl, loginDto, { headers: reqHeader });\n // Return an observable for the connection which has pipes to\n // process the incoming data before passing it to the caller\n // This process maps the incoming data into Credentials format\n // and saves the credentials into localstorage\n return loginCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n\n public getAdminLink(path: string = ''): string {\n return this.environmentProxy.getAdminLink(path);\n }\n}\n","import { Component, inject, model, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { Subject } from 'rxjs';\nimport { AlertService } from '../../../alert/services/alert-service';\nimport { UrlHelperService } from '../../services/url-helper-service';\n\n@Component({\n selector: 'ntybase-auth-base',\n imports: [],\n templateUrl: './auth-base.html',\n styleUrl: './auth-base.scss',\n})\nexport abstract class AuthBase implements OnDestroy {\n // Inject dependencies\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected environmentProxy = inject(EnvironmentProxy);\n protected i18nService = inject(I18nService);\n protected alertService = inject(AlertService);\n protected urlHelperService = inject(UrlHelperService);\n\n protected onDestroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n //Called once, before the instance is destroyed.\n //Add 'implements OnDestroy' to the class.\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n // Language\n icon = model(false);\n\n get currentLanguage(): string {\n return this.i18nService.language;\n }\n\n get languages(): string[] {\n return this.i18nService.supportedLanguages;\n }\n\n setLanguage(language: string) {\n this.i18nService.language = language;\n window.location.reload();\n }\n\n getCurrentLanguageIcon(): string {\n switch (this.i18nService.language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n\n getLanguageIcon(language: string): string {\n switch (language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n}\n","<p>auth-base works!</p>\n","import { Component, inject, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { finalize } from 'rxjs';\nimport { LoginContext } from '../../auth/models/login-context';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-login',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n TranslateModule,\n ],\n templateUrl: './login.html',\n styleUrl: './login.scss',\n})\nexport class Login extends AuthBase {\n // Inject dependencies\n private authService = inject(AuthenticationService);\n private formBuilder = inject(FormBuilder);\n\n loginForm: FormGroup = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required],\n remember: [false],\n });\n\n version = signal<string | null>(null);\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n\n credentials: LoginContext = {\n username: '',\n password: '',\n remember: false,\n };\n\n ngOnInit() {\n this.icon.set(true);\n this.authService.getAdminLink('Login');\n this.timeout(500).then(() => this.authService.getAdminLink('Login'));\n this.loadRememberedUsername();\n this.checkVersion();\n }\n\n timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private checkVersion(): void {\n // Version değerini al\n let version = localStorage.getItem('version');\n\n // Eğer version yoksa veya '?.?' ise, authService'den yüklemesini bekle\n if (!version || version === '?.?') {\n // 1 saniye sonra tekrar kontrol et\n setTimeout(() => {\n version = localStorage.getItem('version');\n if (version && version !== '?.?') {\n this.version.set(version);\n } else {\n // Hala yoksa null olarak bırak (gizle)\n this.version.set(null);\n }\n }, 300);\n } else {\n // Version varsa direkt göster\n this.version.set(version);\n }\n }\n\n private handleRememberMe(): void {\n const formValues = this.loginForm.value;\n\n try {\n if (formValues.remember) {\n localStorage.setItem('remembered_username', formValues.username);\n localStorage.setItem('remember_me', 'true');\n } else {\n localStorage.removeItem('remembered_username');\n localStorage.removeItem('remember_me');\n }\n } catch (error) {\n console.error('Error handling remember me:', error);\n }\n }\n\n private loadRememberedUsername(): void {\n try {\n const rememberedUsername = localStorage.getItem('remembered_username');\n const rememberMe = localStorage.getItem('remember_me') === 'true';\n\n if (rememberedUsername && rememberMe) {\n this.loginForm.patchValue({\n username: rememberedUsername,\n remember: true,\n });\n }\n } catch (error) {\n console.error('Error loading remembered username:', error);\n }\n }\n\n login(): void {\n this.isLoading.set(true);\n\n // Get the form values\n const formValues = this.loginForm.value;\n\n this.handleRememberMe();\n\n this.authService\n .login(formValues) // Use the form values directly\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n })\n )\n .subscribe({\n next: (credentials) => {\n try {\n let redirectUrl: string = '/mfalogin';\n\n if (credentials.authenticationMethod === 'NONE') {\n redirectUrl = this.route.snapshot.queryParams['redirect'] || '/';\n redirectUrl = this.urlHelperService.cleanUrl(redirectUrl);\n }\n\n this.urlHelperService\n .navigate(redirectUrl)\n .catch(() => this.router.navigate(['/'], { replaceUrl: true }));\n } catch (error) {\n this.router.navigate(['/'], { replaceUrl: true });\n }\n },\n error: (error: Error) => {\n const errorMessage = error.message || '@loginFailed';\n this.error.set(errorMessage); // Set the error signal\n this.alertService.showError(errorMessage);\n },\n });\n }\n\n onForgotPassword() {\n this.isLoading.set(true);\n const forgotPassword$ = this.authService.forgotPassword(\n this.loginForm.value\n );\n\n forgotPassword$\n .pipe(\n finalize(() => {\n this.loginForm.markAsPristine();\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (message: string) => {\n this.alertService.showSuccess(message);\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form (ngSubmit)=\"login()\" [formGroup]=\"loginForm\" novalidate>\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"username\">{{'@username' | translate}}</label>\n <input\n type=\"text\"\n id=\"username\"\n formControlName=\"username\"\n [placeholder]=\"'@username' | translate\"\n required\n />\n @if (loginForm.controls['username'].invalid &&\n loginForm.controls['username'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'username is required' | translate }}\n </mat-error>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"password\">{{'@password' | translate}}</label>\n <input\n type=\"password\"\n id=\"password\"\n formControlName=\"password\"\n [placeholder]=\"'@password' | translate\"\n required\n />\n @if (loginForm.controls['password'].invalid &&\n loginForm.controls['password'].touched) {\n <div class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </div>\n }\n </div>\n\n <div class=\"form-group remember\">\n <input type=\"checkbox\" id=\"remember\" formControlName=\"remember\" />\n <label for=\"remember\">{{ '@rememberMe' | translate }}</label>\n <a class=\"forgot-password\" (click)=\"onForgotPassword()\"\n >{{ '@forgotPassword' | translate }}</a\n >\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"loginForm.invalid || isLoading()\"\n >\n {{ '@login' | translate }}\n </button>\n </form>\n } @else {\n <div class=\"loading-spinner\">\n <span>{{ '@loggingIn' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n @if(version() && version() !== '?.?'){\n <div class=\"version\">{{ version() }}</div>\n }\n </div>\n </div>\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { finalize } from 'rxjs';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-mfa-login',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n TranslateModule\n],\n templateUrl: './mfa-login.html',\n styleUrl: './mfa-login.scss',\n})\nexport class MfaLogin extends AuthBase {\n // Inject dependencies\n private authService = inject(AuthenticationService);\n private formBuilder = inject(FormBuilder);\n\n // Component state\n version: string | null = this.environmentProxy.version();\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n resendable = signal(false);\n startFrom = signal(120);\n remainingTime = signal(0);\n private countdownInterval: any;\n\n loginForm: FormGroup = this.formBuilder.group({\n mfaCode: ['', Validators.required],\n });\n\n ngOnInit() {\n this.icon.set(true);\n this.startCountdown(this.startFrom());\n }\n\n startCountdown(seconds: number) {\n clearInterval(this.countdownInterval);\n this.remainingTime.set(seconds);\n this.resendable.set(false);\n\n this.countdownInterval = setInterval(() => {\n this.remainingTime.update((t) => {\n const newTime = t - 1;\n if (newTime <= 0) {\n clearInterval(this.countdownInterval);\n this.resendable.set(true);\n return 0;\n }\n return newTime;\n });\n }, 1000);\n }\n\n getFormattedTime(): string {\n const mins = Math.floor(this.remainingTime() / 60);\n const secs = this.remainingTime() % 60;\n return `${mins}:${secs < 10 ? '0' + secs : secs}`;\n }\n\n login(): void {\n if (this.resendable()) {\n this.error.set('MFACode expired. Please request a new one.');\n return;\n }\n this.isLoading.set(true);\n this.authService\n .mfaLogin(this.loginForm.value)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n })\n )\n .subscribe({\n next: (credentials) => {\n if (credentials) {\n try {\n let redirectUrl: string =\n this.route.snapshot.queryParams['redirect'] || '/';\n redirectUrl = this.urlHelperService.cleanUrl(redirectUrl);\n this.urlHelperService\n .navigate(redirectUrl)\n .catch(() => this.router.navigate(['/'], { replaceUrl: true }));\n } catch (error) {\n this.router.navigate(['/'], { replaceUrl: true });\n }\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n\n onResendMFACode(): void {\n this.startFrom.set(121);\n this.authService\n .resendMFACode(this.loginForm.value)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n this.startCountdown(120);\n })\n )\n .subscribe({\n next: (message: string) => {\n this.startFrom.set(120);\n if (message.length > 0) {\n this.alertService.showAlert('', message);\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n\n override ngOnDestroy() {\n clearInterval(this.countdownInterval);\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form (ngSubmit)=\"login()\" [formGroup]=\"loginForm\" novalidate>\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"mfaCode\">{{'mfaCode' | translate}}</label>\n <input\n type=\"text\"\n id=\"mfaCode\"\n formControlName=\"mfaCode\"\n [placeholder]=\"'mfaCode' | translate\"\n required\n />\n @if (loginForm.controls['mfaCode'].invalid &&\n loginForm.controls['mfaCode'].touched) {\n <div class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'mfaCode is required' | translate }}\n </div>\n }\n\n <!-- Time -->\n @if (!resendable()) {\n <div class=\"time-remaining\">\n {{ '@tokenCount' | translate }}: {{ getFormattedTime() }}\n </div>\n }\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"loginForm.invalid || isLoading() || !resendable()\"\n >\n {{ '@login' | translate }}\n </button>\n\n @if (resendable()) {\n <div class=\"resend-container\">\n <span (click)=\"onResendMFACode()\" class=\"resend-link\">\n {{ 'resend MFACode' | translate }}\n </span>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading-spinner\">\n <span>{{ '@loggingIn' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, catchError, map, take, throwError } from 'rxjs';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NewPasswordDto } from '../models/new-password-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PasswordProxy {\n protected noAuthReqHeader: HttpHeaders;\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n constructor() {\n this.noAuthReqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n }\n /** Get forgot password record with the given recordGUID, if its still valid.\n *\n * @param recordGUID\n * @returns\n */\n getForgotPasswordRecord(recordGUID: any): Observable<any> {\n let functionUrl = this.environmentProxy.getAdminLink(\n 'GetForgotPasswordRecord'\n );\n return this.http.get(functionUrl + '/' + recordGUID, {\n headers: this.noAuthReqHeader,\n });\n }\n /** Send reset password request for password change\n *\n * @param newPasswordDto\n * @returns\n */\n resetPassword(newPasswordDto: NewPasswordDto): Observable<boolean> {\n let resetPasswordUrl = this.environmentProxy.getAdminLink('UpdatePassword');\n let resertPasswordCall$ = this.http.post(resetPasswordUrl, newPasswordDto, {\n headers: this.noAuthReqHeader,\n });\n return resertPasswordCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n}\n","export class ForgotPasswordDto {\n nettyPasswordChangeGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = null;\n nettyUserFullName: string | null = null;\n nettyValidUntil: Date | null = null;\n nettyEMailParametersGUID: any | null = null;\n nettyIsUsed: boolean | null = null;\n nettyUsedDate: Date | null = null;\n\n init(): void {\n this.nettyPasswordChangeGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.nettyUserFullName = '';\n this.nettyValidUntil = null;\n this.nettyEMailParametersGUID = null;\n this.nettyIsUsed = true;\n this.nettyUsedDate = null;\n }\n}\n","export class NewPasswordDto {\n nettyPasswordChangeGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = '';\n password: string | null = '';\n passwordCheck: string | null = '';\n\n init(): void {\n this.nettyPasswordChangeGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.password = '';\n this.passwordCheck = '';\n }\n constructor() {}\n static create(\n _nettyUserGUID: any,\n _nettyPasswordChangeGUID: any,\n _password: string,\n _passwordCheck: string\n ): NewPasswordDto {\n let obj: NewPasswordDto = new NewPasswordDto();\n obj.nettyUserGUID = _nettyUserGUID;\n obj.nettyPasswordChangeGUID = _nettyPasswordChangeGUID;\n obj.password = _password;\n obj.passwordCheck = _passwordCheck;\n return obj;\n }\n}\n","import { Component, inject, OnInit, signal } from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n FormBuilder,\n Validators,\n} from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { finalize, takeUntil } from 'rxjs';\nimport { PasswordProxy } from '../services/password-proxy';\nimport { ForgotPasswordDto } from '../models/forgot-password-dto';\nimport { NewPasswordDto } from '../models/new-password-dto';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-forgot-password',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n TranslateModule\n],\n templateUrl: './forgot-password.html',\n styleUrl: './forgot-password.scss',\n})\nexport class ForgotPassword extends AuthBase implements OnInit {\n // Inject dependencies\n private formBuilder = inject(FormBuilder);\n private passwordService = inject(PasswordProxy);\n\n version: string | null = this.environmentProxy.version();\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n updatePasswordForm: FormGroup;\n\n //URL parameters\n protected urlOption: string | null = null;\n protected forgotPasswordRecord: ForgotPasswordDto = new ForgotPasswordDto();\n\n constructor() {\n super();\n this.updatePasswordForm = this.formBuilder.group({\n username: [{ value: '', disabled: true }, Validators.required],\n newPassword: ['', Validators.required],\n newPasswordCheck: ['', Validators.required],\n });\n }\n\n ngOnInit() {\n this.route.paramMap.pipe(takeUntil(this.onDestroy$)).subscribe((params) => {\n this.urlOption = params.get('requestguid');\n this.getData();\n });\n }\n\n getData() {\n this.isLoading.set(true);\n this.passwordService\n .getForgotPasswordRecord(this.urlOption)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (data: ForgotPasswordDto) => {\n this.isLoading.set(false);\n this.updatePasswordForm.get('username')?.setValue(data.nettyUserName);\n this.forgotPasswordRecord = data;\n },\n error: (error: Error) => {\n this.alertService.showError(error.message);\n },\n });\n }\n\n updatePassword() {\n let newPasswordDto: NewPasswordDto = NewPasswordDto.create(\n this.forgotPasswordRecord.nettyUserGUID,\n this.forgotPasswordRecord.nettyPasswordChangeGUID,\n this.updatePasswordForm.get('newPassword')?.value,\n this.updatePasswordForm.get('newPasswordCheck')?.value\n );\n\n this.isLoading.set(true);\n this.passwordService\n .resetPassword(newPasswordDto)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (result: boolean) => {\n if (result) {\n this.alertService.showSuccess('@PasswordChangeSuccess');\n this.router.navigate(['/login']);\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form\n (ngSubmit)=\"updatePassword()\"\n [formGroup]=\"updatePasswordForm\"\n novalidate\n >\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"username\">{{'@username' | translate}}</label>\n <input\n type=\"text\"\n id=\"username\"\n [placeholder]=\"'@username' | translate\"\n formControlName=\"username\"\n required\n />\n </div>\n\n <div class=\"form-group\">\n <label for=\"newPassword\">{{'@password' | translate}}</label>\n <input\n type=\"password\"\n id=\"newPassword\"\n [placeholder]=\"'@password' | translate\"\n formControlName=\"newPassword\"\n required\n />\n @if (updatePasswordForm.controls['newPassword'].invalid &&\n updatePasswordForm.controls['newPassword'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </mat-error>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"newPasswordCheck\">{{'@passwordCheck' | translate}}</label>\n <input\n type=\"password\"\n id=\"newPasswordCheck\"\n [placeholder]=\"'@passwordCheck' | translate\"\n formControlName=\"newPasswordCheck\"\n required\n />\n @if (updatePasswordForm.controls['newPasswordCheck'].invalid &&\n updatePasswordForm.controls['newPasswordCheck'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </mat-error>\n }\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"updatePasswordForm.invalid\"\n >\n {{ '@setPassword' | translate }}\n </button>\n </form>\n } @else {\n <!-- Burada eski #loading template'inin içeriği direkt olarak kullanılıyor -->\n <div class=\"loading-spinner\">\n <span>{{ '@updatingPassword' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n</div>\n","// text-image.service.ts\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\n/**\n * Manage Image operations\n */\nexport class NettyImageService {\n /**\n * Returns an image that contains the given text. Usage\n * .html\n * <img [src]=\"imageUrl\" *ngIf=\"imageUrl\" [alt]=\"text\" class=\"generated-image\">\n * .ts\n * this.imageUrl = NettyImageService.generateTextImage(\"TEST\");\n *\n * @param text : Text to draw in image\n * @param width : Image width\n * @param height : Image height\n * @param backgroundColor : Default white\n * @param textColor : Default dark gray\n * @param shadowColor : Default transparent black\n * @returns a data URL contains the png image\n */\n generateTextImage(\n text: string,\n width: number = 200,\n height: number = 200,\n backgroundColor: string = '#f0f8ff',\n textColor: string = '#333333',\n shadowColor: string = 'rgba(0, 0, 0, 0.3)'\n ): string {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) return '';\n\n canvas.width = width;\n canvas.height = height;\n\n // Arkaplan\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n\n // Metin\n ctx.fillStyle = textColor;\n const fontSize = Math.min(width, height) * 0.4;\n ctx.font = `bold ${fontSize}px Arial`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n // Metin gölgesi\n ctx.shadowColor = shadowColor;\n ctx.shadowBlur = 4;\n ctx.shadowOffsetX = 2;\n ctx.shadowOffsetY = 2;\n ctx.fillText(text, width / 2, height / 2);\n return canvas.toDataURL('image/png');\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { I18nService } from '@nettyapps/ntyi18n';\n\n@Component({\n selector: 'ntybase-netty-base-app',\n imports: [],\n templateUrl: './netty-base-app.html',\n styleUrl: './netty-base-app.scss',\n})\nexport class NettyBaseApp {\n protected i18nService = inject(I18nService);\n\n protected async loadBaseTranslations(): Promise<void> {\n try {\n const enUSBase = await import('../translations/en-USbase.json');\n const trTRBase = await import('../translations/tr-TRbase.json');\n\n this.i18nService.addTranslations('English', enUSBase.default);\n this.i18nService.addTranslations('Türkçe', trTRBase.default);\n } catch (error) {\n console.error('Error loading base translations in component:', error);\n throw error;\n }\n }\n}\n","","import { Injectable, InjectionToken, Inject, Optional } from '@angular/core';\n\nexport interface EnvironmentConfig {\n production: boolean;\n version: string;\n defaultLanguage: string;\n supportedLanguages: string[];\n nettyUrls: {\n apiUrl: string;\n adminUrl: string;\n baseHref: string;\n application: string;\n };\n}\n\nexport const ENVIRONMENT_CONFIG = new InjectionToken<EnvironmentConfig>(\n 'ENVIRONMENT_CONFIG'\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EnvironmentInfoService {\n constructor(\n @Optional() @Inject(ENVIRONMENT_CONFIG) private config: EnvironmentConfig\n ) {}\n\n getEnvironmentInfo(): EnvironmentConfig | null {\n return this.config;\n }\n\n getApiUrl(): string {\n return this.config?.nettyUrls?.apiUrl || '';\n }\n\n getAdminUrl(): string {\n return this.config?.nettyUrls?.adminUrl || '';\n }\n\n isProduction(): boolean {\n return this.config?.production || false;\n }\n\n getVersion(): string {\n return this.config?.version || 'Unknown';\n }\n\n getSupportedLanguages(): string[] {\n return this.config?.supportedLanguages || [];\n }\n\n getDefaultLanguage(): string {\n return this.config?.defaultLanguage || '';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport {\n EnvironmentConfig,\n EnvironmentInfoService,\n} from '../services/environment-info-service';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-environment-info',\n imports: [TranslateModule],\n templateUrl: './environment-info.html',\n styleUrl: './environment-info.scss',\n})\nexport class EnvironmentInfo {\n @Input() showNettyInfo: boolean = true;\n\n environmentConfig: EnvironmentConfig | null = null;\n\n get hasConfig(): boolean {\n return this.environmentConfig !== null;\n }\n\n get version(): string {\n return this.environmentService.getVersion();\n }\n\n get isProduction(): boolean {\n return this.environmentService.isProduction();\n }\n\n get defaultLanguage(): string {\n return this.environmentService.getDefaultLanguage();\n }\n\n get supportedLanguages(): string[] {\n return this.environmentService.getSupportedLanguages();\n }\n\n get apiUrl(): string {\n return this.environmentService.getApiUrl();\n }\n\n get adminUrl(): string {\n return this.environmentService.getAdminUrl();\n }\n\n get baseHref(): string {\n return this.environmentConfig?.nettyUrls?.baseHref || '';\n }\n\n get application(): string {\n return this.environmentConfig?.nettyUrls?.application || '';\n }\n\n constructor(private environmentService: EnvironmentInfoService) {}\n\n ngOnInit(): void {\n this.environmentConfig = this.environmentService.getEnvironmentInfo();\n\n if (!this.hasConfig) {\n console.warn(\n \"Environment konfigürasyonu bulunamadı. ENVIRONMENT_CONFIG token'ı sağlandı mı?\"\n );\n }\n }\n}\n","<div class=\"environment-info\" [class.production]=\"isProduction\">\n <div class=\"info-card\">\n <div class=\"card-header\">\n <h3>{{ 'ENVIRONMENT_INFO.applicationInfo' | translate }}</h3>\n <span class=\"env-badge\" [class.prod]=\"isProduction\">\n {{ isProduction ? ('ENVIRONMENT_INFO.prod' | translate) :\n ('ENVIRONMENT_INFO.dev' | translate) }}\n </span>\n </div>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">{{ 'ENVIRONMENT_INFO.version' | translate }}</span>\n <span class=\"value\">{{ version }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.defaultLanguage' | translate }}</span\n >\n <span class=\"value\">{{ defaultLanguage }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.supportedLanguages' | translate }}</span\n >\n <span class=\"value\">{{ supportedLanguages.join(', ') }}</span>\n </div>\n </div>\n\n @if (showNettyInfo) {\n <div class=\"netty-info\">\n <h4>{{ 'ENVIRONMENT_INFO.nettyConnections' | translate }}</h4>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">{{ 'ENVIRONMENT_INFO.apiUrl' | translate }}</span>\n <span class=\"value\">{{ apiUrl }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.adminUrl' | translate }}</span\n >\n <span class=\"value\">{{ adminUrl }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.baseHref' | translate }}</span\n >\n <span class=\"value\">{{ baseHref }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.application' | translate }}</span\n >\n <span class=\"value\">{{ application }}</span>\n </div>\n </div>\n </div>\n } @if (!hasConfig) {\n <div class=\"no-config\">{{ 'ENVIRONMENT_INFO.noConfig' | translate }}</div>\n }\n </div>\n</div>\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NtyLoadingService {\n private requestCount = 0;\n isLoading: WritableSignal<boolean> = signal(false);\n\n show(): void {\n this.requestCount++;\n if (this.requestCount > 0) {\n this.isLoading.set(true);\n }\n }\n\n hide(): void {\n this.requestCount--;\n if (this.requestCount <= 0) {\n this.requestCount = 0;\n this.isLoading.set(false);\n }\n }\n}\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport { NtyLoadingService } from '../services/nty-loading-service';\n\nexport const NtyLoadingInterceptor: HttpInterceptorFn = (req, next) => {\n const loadingService = inject(NtyLoadingService);\n\n // Optional: Skip specific URLs if needed (e.g. background polling)\n // if (req.url.includes('/silent-api')) return next(req);\n\n loadingService.show();\n\n return next(req).pipe(\n finalize(() => {\n loadingService.hide();\n })\n );\n};\n","import { HttpClient } from '@angular/common/http';\nimport { effect, inject, Injectable, signal } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { I18nService } from '@nettyapps/ntyi18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NettyMenuService {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n private i18nService = inject(I18nService);\n readonly menuName = signal<string>('');\n readonly menu = signal<any>(null);\n\n constructor() {\n effect(() => {\n const currentMenuName = this.menuName();\n const currentLang = this.i18nService.currentLang();\n if (!currentMenuName.trim()) {\n return;\n }\n let functionUrl: string = this.environmentProxy.getAdminLink('/GetMenu');\n if (currentMenuName.trim().length > 0) {\n functionUrl += '/' + currentMenuName.trim();\n }\n\n this.http.get(functionUrl).subscribe({\n next: (data) => this.menu.set(data),\n error: (err) => {\n console.error('Failed to fetch menu:', err);\n this.menu.set(null);\n },\n });\n });\n }\n\n setMenuName(name: string): void {\n if (name && name.trim()) {\n this.menuName.set(name.trim());\n }\n }\n}\n","/*\n * Public API Surface of ntybase\n */\n\nexport * from './lib/ntybase';\nexport * from './lib/ntybase-module';\n\n// Ag Grid\nexport * from './lib/ag-grid/components/ag-grid-base/ag-grid-base';\nexport * from './lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base';\nexport * from './lib/ag-grid/components/excel-import-base/excel-import-base';\nexport * from './lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer';\nexport * from './lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer';\nexport * from './lib/ag-grid/services/netty-ag-grid-service';\nexport * from './lib/ag-grid/models/current-user-preference';\nexport * from './lib/ag-grid/models/netty-helper';\nexport * from './lib/ag-grid/components/range-date-time-filter/range-date-time-filter';\nexport * from './lib/ag-grid/components/range-number-filter/range-number-filter';\nexport * from './lib/ag-grid/components/range-string-filter/range-string-filter';\n\n// Alert\nexport * from './lib/alert/components/confirm-dialog/confirm-dialog';\nexport * from './lib/alert/services/alert-service';\n\n// Auth\nexport * from './lib/auth/guards/authentication-guard';\nexport * from './lib/auth/guards/can-deactivate-guard';\nexport * from './lib/auth/interceptors/authentication-interceptor';\nexport * from './lib/auth/interceptors/nty-authentication-functional.interceptor';\nexport * from './lib/auth/models/login-context';\nexport * from './lib/auth/models/login-dto';\nexport * from './lib/auth/models/mfa-code-context';\nexport * from './lib/auth/models/mfa-code-dto';\nexport * from './lib/auth/services/authentication-service';\nexport * from './lib/auth/services/credentials-service';\nexport * from './lib/auth/services/url-helper-service';\nexport * from './lib/auth/login/login';\nexport * from './lib/auth/mfa-login/mfa-login';\nexport * from './lib/auth/forgot-password/forgot-password';\n\n// Common\nexport * from './lib/common/services/common-service';\nexport * from './lib/common/services/image-service';\nexport * from './lib/netty-base-app/netty-base-app';\nexport * from './lib/dashboard-wizard/environment-info/environment-info';\nexport * from './lib/dashboard-wizard/services/environment-info-service';\nexport * from './lib/netty-apps-bases/netty-apps-base/netty-apps-base';\n\n// Loading\nexport * from './lib/loading/interceptors/nty-loading.interceptor';\n\n// Menu\nexport * from './lib/menu/services/netty-menu-service';\nexport * from './lib/netty-base-app/netty-base-app';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","catchError","map","take","i1.EnvironmentInfoService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nettyapps-ntybase.mjs","sources":["../../../projects/ntybase/src/lib/ntybase.ts","../../../projects/ntybase/src/lib/auth/services/credentials-service.ts","../../../projects/ntybase/src/lib/auth/services/url-helper-service.ts","../../../projects/ntybase/src/lib/auth/interceptors/authentication-interceptor.ts","../../../projects/ntybase/src/lib/auth/guards/can-deactivate-guard.ts","../../../projects/ntybase/src/lib/ntybase-module.ts","../../../projects/ntybase/src/lib/ag-grid/models/netty-helper.ts","../../../projects/ntybase/src/lib/ag-grid/models/current-user-preference.ts","../../../projects/ntybase/src/lib/alert/components/confirm-dialog/confirm-dialog.ts","../../../projects/ntybase/src/lib/alert/components/confirm-dialog/confirm-dialog.html","../../../projects/ntybase/src/lib/alert/services/alert-service.ts","../../../projects/ntybase/src/lib/common/services/common-service.ts","../../../projects/ntybase/src/lib/ag-grid/services/netty-ag-grid-service.ts","../../../projects/ntybase/src/lib/system/models/security-dto.ts","../../../projects/ntybase/src/lib/system/services/sysfunction-proxy.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer.html","../../../projects/ntybase/src/lib/netty-apps-bases/netty-apps-base/netty-apps-base.ts","../../../projects/ntybase/src/lib/netty-apps-bases/netty-apps-base/netty-apps-base.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-base/ag-grid-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-base/ag-grid-base.html","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base.html","../../../projects/ntybase/src/lib/ag-grid/components/excel-import-base/excel-import-base.ts","../../../projects/ntybase/src/lib/ag-grid/components/excel-import-base/excel-import-base.html","../../../projects/ntybase/src/lib/ag-grid/components/range-date-time-filter/range-date-time-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-date-time-filter/range-date-time-filter.html","../../../projects/ntybase/src/lib/ag-grid/components/range-number-filter/range-number-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-number-filter/range-number-filter.html","../../../projects/ntybase/src/lib/ag-grid/components/range-string-filter/range-string-filter.ts","../../../projects/ntybase/src/lib/ag-grid/components/range-string-filter/range-string-filter.html","../../../projects/ntybase/src/lib/auth/guards/authentication-guard.ts","../../../projects/ntybase/src/lib/auth/interceptors/nty-authentication-functional.interceptor.ts","../../../projects/ntybase/src/lib/auth/models/login-dto.ts","../../../projects/ntybase/src/lib/auth/models/mfa-code-dto.ts","../../../projects/ntybase/src/lib/auth/services/authentication-service.ts","../../../projects/ntybase/src/lib/auth/base-components/auth-base/auth-base.ts","../../../projects/ntybase/src/lib/auth/base-components/auth-base/auth-base.html","../../../projects/ntybase/src/lib/auth/login/login.ts","../../../projects/ntybase/src/lib/auth/login/login.html","../../../projects/ntybase/src/lib/auth/mfa-login/mfa-login.ts","../../../projects/ntybase/src/lib/auth/mfa-login/mfa-login.html","../../../projects/ntybase/src/lib/auth/services/password-proxy.ts","../../../projects/ntybase/src/lib/auth/models/forgot-password-dto.ts","../../../projects/ntybase/src/lib/auth/models/new-password-dto.ts","../../../projects/ntybase/src/lib/auth/forgot-password/forgot-password.ts","../../../projects/ntybase/src/lib/auth/forgot-password/forgot-password.html","../../../projects/ntybase/src/lib/common/services/image-service.ts","../../../projects/ntybase/src/lib/netty-base-app/netty-base-app.ts","../../../projects/ntybase/src/lib/netty-base-app/netty-base-app.html","../../../projects/ntybase/src/lib/dashboard-wizard/services/environment-info-service.ts","../../../projects/ntybase/src/lib/dashboard-wizard/environment-info/environment-info.ts","../../../projects/ntybase/src/lib/dashboard-wizard/environment-info/environment-info.html","../../../projects/ntybase/src/lib/netty-apps-bases/app-config-functions/function-environment-config-factory.ts","../../../projects/ntybase/src/lib/netty-apps-bases/app-config-functions/function-initialize-environment-app.ts","../../../projects/ntybase/src/lib/netty-apps-bases/app-config-functions/nty-environment-service.ts","../../../projects/ntybase/src/lib/loading/services/nty-loading-service.ts","../../../projects/ntybase/src/lib/loading/interceptors/nty-loading.interceptor.ts","../../../projects/ntybase/src/lib/menu/services/netty-menu-service.ts","../../../projects/ntybase/src/public-api.ts","../../../projects/ntybase/src/nettyapps-ntybase.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-ntybase',\n standalone: false,\n template: `\n <p>\n ntybase works!\n </p>\n `,\n styles: ``\n})\nexport class Ntybase {\n\n}\n","import { Injectable } from '@angular/core';\n\nexport interface Credentials {\n username: string;\n token: string;\n role: string;\n authenticationMethod: string;\n sid: string;\n}\n\nconst credentialsKey = 'credentials';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CredentialsService {\n private _credentials: Credentials | null = null;\n\n constructor() {\n const savedCredentials =\n sessionStorage.getItem(credentialsKey) ||\n localStorage.getItem(credentialsKey);\n if (savedCredentials) {\n this._credentials = JSON.parse(savedCredentials);\n }\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n isAuthenticated(): boolean {\n return !!this.credentials;\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 return this._credentials;\n }\n\n get token(): string | null {\n return this._credentials?.token ?? null;\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 const storage = remember ? localStorage : sessionStorage;\n storage.setItem(credentialsKey, JSON.stringify(credentials));\n } else {\n sessionStorage.removeItem(credentialsKey);\n localStorage.removeItem(credentialsKey);\n }\n }\n /** Get Credentials\n *\n * @returns\n */\n getCredentials(): Credentials {\n let _credentialsString = sessionStorage.getItem(credentialsKey);\n if (_credentialsString == null || _credentialsString == '') {\n _credentialsString = localStorage.getItem(credentialsKey);\n }\n return JSON.parse(_credentialsString ?? '');\n }\n /** Get the token if available otherwise return empty string\n *\n * @returns\n */\n public getToken(): string {\n try {\n let _credentials: Credentials = this.getCredentials();\n return _credentials.token;\n } catch (error) {\n return '';\n }\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UrlHelperService {\n private router = inject(Router);\n public cleanUrl(url: string): string {\n let result = url\n .replace('/mfalogin?redirect=', '')\n .replace('/mfalogin?redirect=', '')\n .replace('/mfalogin?redirect=', '')\n .replace('/login?redirect=', '')\n .replace('/login?redirect=', '')\n .replace('/login?redirect=', '')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%25', 'g'), '%')\n .replace(new RegExp('%22', 'g'), '\"')\n .replace(new RegExp('%3F', 'g'), '?')\n .replace(new RegExp('%3D', 'g'), '=')\n .replace(new RegExp('%2F', 'g'), '/')\n .replace(new RegExp('%26', 'g'), '&')\n .replace(new RegExp('/mfalogin?redirect=', 'g'), '')\n .replace(new RegExp('/login?redirect=', 'g'), '');\n console.log('url:', url);\n console.log('result:', result);\n // return url;\n return result;\n }\n public navigate(url: string): Promise<Boolean> {\n let urlParts: string[] = url.split('?');\n if (urlParts.length == 1) {\n return this.router.navigate(urlParts, { replaceUrl: true });\n }\n let parameters: string[] = urlParts[1].split('&');\n return this.router.navigate([urlParts[0]], {\n queryParams: {\n parameters: parameters[0]?.replace('parameters=', '') ?? '',\n type: parameters[1]?.replace('type=', '') ?? '',\n },\n replaceUrl: true,\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n HttpErrorResponse,\n HttpResponse,\n} from '@angular/common/http';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\nimport { CredentialsService } from '../services/credentials-service';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { UrlHelperService } from '../services/url-helper-service';\n\n@Injectable()\nexport class AuthenticationInterceptor implements HttpInterceptor {\n private router = inject(Router);\n private credentialsService = inject(CredentialsService);\n private environmentProxy = inject(EnvironmentProxy);\n private urlHelperService = inject(UrlHelperService);\n\n intercept(\n req: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (req.headers.get('No-Auth') == 'True') return next.handle(req.clone());\n let token: string | null = this.credentialsService.token;\n if (token != null) {\n let appName = this.environmentProxy.getApplicationName();\n const clonedreq = req.clone({\n headers: req.headers.set('Authorization', 'Bearer ' + token),\n // .set(\"NettyAppName\",appName)\n });\n return next.handle(clonedreq).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n this.router.navigate(['/login'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n this.router.navigate(['/forbidden'], {\n state: { attemptedUrl: this.router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n this.router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n } else {\n return next.handle(req.clone()).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n this.router.navigate(['/login'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n this.router.navigate(['/forbidden'], {\n state: { attemptedUrl: this.router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n this.router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: this.urlHelperService.cleanUrl(this.router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n }\n }\n}\n","import { Observable } from 'rxjs';\nimport { CanDeactivate } from '@angular/router';\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => boolean | Promise<boolean> | Observable<boolean>;\n}\n\nexport class CanDeactivateGuard\n implements CanDeactivate<CanComponentDeactivate>\n{\n canDeactivate(component: CanComponentDeactivate) {\n return component.canDeactivate ? component.canDeactivate() : true;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Ntybase } from './ntybase';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { AuthenticationInterceptor } from './auth/interceptors/authentication-interceptor';\nimport { CanDeactivateGuard } from './auth/guards/can-deactivate-guard';\nimport { DatePipe } from '@angular/common';\n\n@NgModule({\n declarations: [Ntybase],\n imports: [],\n exports: [Ntybase],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthenticationInterceptor,\n multi: true,\n },\n [CanDeactivateGuard],\n DatePipe,\n ],\n})\nexport class NtybaseModule {}\n","import { DatePipe } from '@angular/common';\n\nexport class NettyHelper {\n /**\n * Returns null if fields are equal otherwise return second field\n * @param firstField\n * @param secondField\n * @returns\n */\n static difference(\n firstField: any | null,\n secondField: any | null\n ): any | null {\n if (firstField != secondField) {\n return secondField;\n }\n return null;\n }\n /**\n * Returns null if fields are equal otherwise return second field\n * @param firstField\n * @param secondField\n * @param format\n * @returns\n */\n static dateDifference(\n firstField: Date | null,\n secondField: Date | null,\n format: string\n ): Date | null {\n let culture = localStorage.getItem('languageApiCode') ?? 'tr-TR';\n let datePipe = new DatePipe(culture);\n if (\n datePipe.transform(firstField, format) !=\n datePipe.transform(secondField, format)\n ) {\n return secondField;\n }\n return null;\n }\n}\n","import { NettyHelper } from './netty-helper';\n\nexport class CurrentUserPreference {\n coid: any | null = null;\n nettyUserPreferenceGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = null;\n nettyUserFullName: string | null = null;\n nettyPreferenceType: string | null = null;\n nettyPreferenceData: string | null = null;\n\n init(): void {\n this.coid = null;\n this.nettyUserPreferenceGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.nettyUserFullName = '';\n this.nettyPreferenceType = '';\n this.nettyPreferenceData = '';\n }\n\n initParameter(parameters: CurrentUserPreference): void {\n if (parameters == null || parameters == undefined) {\n this.init();\n return;\n }\n this.coid = parameters.coid;\n this.nettyUserPreferenceGUID = parameters.nettyUserPreferenceGUID;\n this.nettyUserGUID = parameters.nettyUserGUID;\n this.nettyUserName = parameters.nettyUserName;\n this.nettyUserFullName = parameters.nettyUserFullName;\n this.nettyPreferenceType = parameters.nettyPreferenceType;\n this.nettyPreferenceData = parameters.nettyPreferenceData;\n }\n\n compare(record: CurrentUserPreference): CurrentUserPreference {\n let newRecord: CurrentUserPreference = new CurrentUserPreference();\n newRecord.init();\n newRecord.coid = record.coid;\n newRecord.nettyUserPreferenceGUID = record.nettyUserPreferenceGUID;\n newRecord.nettyUserGUID = NettyHelper.difference(\n this.nettyUserGUID,\n record.nettyUserGUID\n );\n newRecord.nettyPreferenceType = NettyHelper.difference(\n this.nettyPreferenceType,\n record.nettyPreferenceType\n );\n newRecord.nettyPreferenceData = NettyHelper.difference(\n this.nettyPreferenceData,\n record.nettyPreferenceData\n );\n return newRecord;\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport {\n MAT_DIALOG_DATA,\n MatDialogModule,\n MatDialogRef,\n} from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-confirm-dialog',\n imports: [\n MatDialogModule,\n MatSnackBarModule,\n MatIconModule,\n MatDividerModule,\n TranslateModule,\n ],\n templateUrl: './confirm-dialog.html',\n styleUrl: './confirm-dialog.scss',\n})\nexport class ConfirmDialog {\n constructor(\n public dialogRef: MatDialogRef<ConfirmDialog>,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {}\n}\n","<div class=\"dialog-container\">\n <h2 mat-dialog-title class=\"dialog-title\">\n <mat-icon color=\"warn\" class=\"warning-icon\">warning</mat-icon>\n <span>{{data.title}}</span>\n </h2>\n\n <mat-divider class=\"divider\"></mat-divider>\n\n <mat-dialog-content class=\"dialog-content\">\n <p class=\"message\">{{data.message}}</p>\n </mat-dialog-content>\n\n <mat-dialog-actions align=\"end\" class=\"dialog-actions\">\n <button mat-stroked-button [mat-dialog-close]=\"false\" class=\"btn-cancel\">\n {{'@btnCancel' | translate}}\n </button>\n <button\n mat-flat-button\n color=\"warn\"\n [mat-dialog-close]=\"true\"\n class=\"btn-ok\"\n >\n {{'@btnOK' | translate}}\n </button>\n </mat-dialog-actions>\n</div>\n","// alert.service.ts\nimport { Injectable } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmDialog } from '../../alert/components/confirm-dialog/confirm-dialog'; // You'll need to create this\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AlertService {\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private translate: TranslateService\n ) {}\n\n // For simple notifications\n showAlert(message: string, action?: string, duration: number = 3000) {\n const actionText = action ? action : '@btnOK';\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant(actionText),\n { duration }\n );\n }\n\n showWarning(message: string, action?: string, duration: number = 3000) {\n const actionText = action ? action : '@btnOK';\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant(actionText),\n { duration }\n );\n }\n\n // For confirmation dialogs\n showConfirm(message: string): Promise<boolean> {\n return new Promise((resolve) => {\n const dialogRef = this.dialog.open(ConfirmDialog, {\n width: 'auto',\n height: 'auto',\n data: {\n message: this.translate.instant(message),\n title: this.translate.instant('@confirmation'),\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n resolve(!!result);\n });\n });\n }\n\n // For success notifications\n showSuccess(message: string, duration: number = 3000) {\n this.snackBar.open(\n this.translate.instant(message),\n this.translate.instant('@btnOK'),\n {\n duration,\n panelClass: ['success-snackbar'],\n horizontalPosition: 'right',\n verticalPosition: 'bottom',\n }\n );\n }\n\n // For error notifications\n showError(error: any, duration: number = 5000) {\n let errorMessage: string;\n\n if (typeof error === 'string') {\n errorMessage = error;\n } else if (error.message) {\n errorMessage = error.message;\n } else if (error.error && typeof error.error === 'string') {\n errorMessage = error.error;\n } else {\n errorMessage = JSON.stringify(error);\n }\n\n this.snackBar.open(\n this.translate.instant(errorMessage),\n this.translate.instant('@btnOK'),\n {\n duration,\n panelClass: ['error-snackbar'],\n horizontalPosition: 'right',\n verticalPosition: 'bottom',\n }\n );\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DatePipe, DecimalPipe, Location } from '@angular/common';\nimport { Buffer } from 'buffer';\nimport { AlertService } from '../../alert/services/alert-service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CommonService {\n // Services\n private router = inject(Router);\n private location = inject(Location);\n private datePipe = inject(DatePipe);\n private decimalPipe = inject(DecimalPipe);\n private alertService = inject(AlertService);\n private translate = inject(TranslateService);\n protected dialog = inject(MatDialog);\n\n // Right sidenav\n rightSidenavOpen = signal(false);\n toggleRightSidenav(open: boolean) {\n this.rightSidenavOpen.set(open);\n }\n\n /**\n * Normalizes Turkish text for search and comparison operations by converting\n * Turkish special characters to their English equivalents and lowercasing.\n *\n */\n public normalizeTurkish(text: string): string {\n return text\n .toLocaleLowerCase('tr-TR')\n .replace(/[ıİ]/g, 'i')\n .replace(/[ğĞ]/g, 'g')\n .replace(/[üÜ]/g, 'u')\n .replace(/[şŞ]/g, 's')\n .replace(/[öÖ]/g, 'o')\n .replace(/[çÇ]/g, 'c');\n }\n\n /**\n * Gets the clean URL path without fragments or query params\n */\n public getCleanUrlPath(): string {\n const tree = this.router.parseUrl(this.router.url);\n const segments = tree.root.children['primary']?.segments || [];\n\n if (segments.length >= 2) {\n return segments\n .slice(0, 2)\n .map((s) => s.path)\n .join('/');\n }\n return '/';\n }\n\n /**\n * Clears the right sidenav outlet and resets the UI state.\n * Removes the right sidenav route while keeping the main content and query parameters.\n * Also collapses the sidenav and closes any open dialogs.\n */\n public clearOutlet(): void {\n const currentUrl = this.router.parseUrl(this.router.url);\n const primaryOutlet = currentUrl.root.children['primary'];\n const rightSidenavOutlet = currentUrl.root.children['rightSidenav'];\n\n if (\n rightSidenavOutlet ||\n currentUrl.queryParams['parameters'] ||\n currentUrl.queryParams['type']\n ) {\n this.router.navigate(\n [\n {\n outlets: {\n rightSidenav: null,\n primary: primaryOutlet ? primaryOutlet.toString() : null,\n },\n },\n ],\n {\n queryParams: {},\n queryParamsHandling: '',\n replaceUrl: true,\n }\n );\n }\n\n this.toggleRightSidenav(false);\n this.dialog.closeAll();\n }\n\n ngOnDestroy(): void {\n this.clearOutlet();\n }\n\n /** Merge columns with the given seperator\n *\n * @param columns string array to merge\n * @param seperator seperator for the array. space if null\n * @returns merged string\n */\n mergeColumns(columns: string[], seperator: string = ' '): string {\n console.log('mergeColumns', columns);\n\n let result: string = '';\n columns.forEach((column) => {\n if (!(column == undefined || column == null)) {\n if (result.length > 0) {\n result += seperator;\n }\n result += column.trim();\n }\n });\n return result.trim();\n }\n\n /** Go back to the last page or close the tab\n *\n */\n goBack() {\n if (!document.referrer) {\n this.location.back();\n } else {\n window.close();\n }\n }\n\n // General Functions\n //--------------------------------------\n /** Delay for the given duration\n *\n * @param ms wait duration in ms\n * @returns promise that waits for the duration\n */\n delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Base64 Functions\n //--------------------------------------\n /** Convert string to base64\n *\n * @param stringForConversion\n * @returns\n */\n convertToBase64(stringForConversion: string): string {\n return Buffer.from(stringForConversion).toString('base64');\n // return Base64.encode(stringForConversion);\n }\n\n /** Convert base64 string to normal string\n *\n * @param base64data\n * @returns\n */\n convertFromBase64(base64data: string): string {\n //ascii\n return Buffer.from(base64data, 'base64').toString();\n // return Base64.decode(base64data);\n }\n\n // Formatters\n //----------------------------------------\n /** Compare dates. Designed for grid date filter\n *\n * @param filterValue user provided filtering date\n * @param cellValue cell value to compare\n * @returns -1 if cell date is smaller(earlier), 0 if dates are equal and 1 if cell date is bigger(later)\n */\n dateComparator(filterValue: Date, cellValue: Date): number {\n try {\n let filterDate: string =\n this.datePipe.transform(filterValue, 'yyyyMMdd') ?? '';\n let cellDate: string =\n this.datePipe.transform(cellValue, 'yyyyMMdd') ?? '';\n if (cellDate < filterDate) {\n return -1;\n } else if (cellDate > filterDate) {\n return 1;\n } else {\n return 0;\n }\n } catch (error) {\n return -1;\n }\n }\n\n /** Format the given number into correct display\n *\n * @param numberValue number to format\n * @param min minimum decimal digits\n * @param max max decimal digits\n * @returns formatted number\n */\n numberFormatter(\n numberValue: number,\n min: number = 2,\n max: number = 2\n ): string {\n if (max < min) {\n max = min;\n }\n let format = '1.' + min + '-' + max;\n return this.decimalPipe.transform(numberValue, format) ?? '';\n }\n /** Format date into 'dd-MM-yyyy' format for grids\n *\n * @param dateValue\n * @returns\n */\n dateFormatter(dateValue: Date): string {\n return this.datePipe.transform(dateValue, 'dd-MM-yyyy') ?? '';\n }\n /**\n * Format date into 'dd-MM-yyyy HH:mm:ss' format for grids\n * @param dateValue\n * @param seconds if true, format includes seconds\n * @returns\n */\n dateTimeFormatter(dateValue: Date, seconds: boolean = true): string {\n if (seconds) {\n return this.datePipe.transform(dateValue, 'dd/MM/yyyy HH:mm:ss') ?? '';\n }\n return this.datePipe.transform(dateValue, 'dd/MM/yyyy HH:mm') ?? '';\n }\n /**\n * Format time into 'HH:mm' or 'HH:mm:ss' format for grids\n * @param dateValue\n * @param seconds if true, format includes seconds\n * @returns\n */\n timeFormatter(dateValue: Date, seconds: boolean = false): string {\n if (seconds) {\n return this.datePipe.transform(dateValue, 'HH:mm:ss') ?? '';\n }\n return this.datePipe.transform(dateValue, 'HH:mm') ?? '';\n }\n\n /** Reactive Signal state for tracking grid updates */\n private _updates = signal<{\n type: string;\n action: 'add' | 'update';\n data: any;\n } | null>(null);\n\n /** Read-only Signal for external components to observe updates */\n public updates = this._updates.asReadonly();\n\n /** Broadcasts grid data changes to subscribers */\n notifyUpdate(type: string, action: 'add' | 'update', data: any) {\n this._updates.set({ type, action, data });\n }\n\n // Security Functions\n //--------------------------------------\n /** User is not allowed to access the page\n *\n */\n translateService = inject(TranslateService);\n async userNotAllowedToRead(title: string = '', message: string = '') {\n if (title == '') {\n title = this.translateService.instant('@AccessLimitation');\n }\n if (message == '') {\n message = this.translateService.instant('@userCannotAccessThisScreen');\n }\n await this.alertService.showAlert(title, message);\n this.goBack();\n }\n async userNotAllowedToAdd(title: string = '', message: string = '') {\n if (title == '') {\n title = this.translateService.instant('@AccessLimitation');\n }\n if (message == '') {\n message = this.translateService.instant('@userCannotAddNewRecord');\n }\n await this.alertService.showAlert(title, message);\n this.goBack();\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { CurrentUserPreference } from '../models/current-user-preference';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { CommonService } from '../../common/services/common-service';\nimport { Mutex } from 'async-mutex';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { AlertService } from '../../alert/services/alert-service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NettyAgGridService {\n private userPreferenceLock: Mutex;\n private http = inject(HttpClient);\n private nettyAlertService = inject(AlertService);\n private environmentProxy = inject(EnvironmentProxy);\n private commonService = inject(CommonService);\n\n constructor() {\n this.userPreferenceLock = new Mutex();\n }\n // Restapi functions\n //--------------------------------------\n /**\n * Select user preference\n * @param admuserpreference\n * @returns\n */\n selectForUserAdmUserPreference(\n admuserpreference: CurrentUserPreference\n ): Observable<any> {\n let sysFunctionsURL = this.environmentProxy.getAdminLink('SelectForUser');\n return this.http.post(sysFunctionsURL, admuserpreference);\n }\n /**\n * Insert or update user preference\n * @param admuserpreference\n * @returns\n */\n insertOrUpdateAdmUserPreference(\n admuserpreference: CurrentUserPreference\n ): Observable<any> {\n let sysFunctionsURL = this.environmentProxy.getAdminLink('InsertOrUpdate');\n return this.http.post(sysFunctionsURL, admuserpreference);\n }\n\n // AG Grid Preference Management\n //--------------------------------------\n /** Preference Save and Upload\n *\n * @param preferenceType component name or other uniqe identifier\n * @param gridApi api for agGrid column management\n * @returns nothing\n */\n async saveGridUserPreference(\n preferenceType: string,\n gridApi: any,\n defaultColDef: string\n ): Promise<void> {\n if (!gridApi) return;\n if (this.userPreferenceLock.isLocked()) return;\n var releaseLock = await this.userPreferenceLock.acquire();\n let columnState = gridApi?.getColumnState();\n let jsonstring = JSON.stringify(columnState);\n if (jsonstring == defaultColDef) {\n releaseLock();\n return;\n }\n let columnStateSaved = sessionStorage.getItem(preferenceType);\n //If the column order identical then return\n if (columnStateSaved && columnStateSaved == jsonstring) {\n releaseLock();\n return;\n }\n try {\n sessionStorage.setItem(preferenceType, jsonstring);\n await this.commonService.delay(100);\n let admuserpreference: CurrentUserPreference =\n new CurrentUserPreference();\n admuserpreference.nettyPreferenceType = preferenceType;\n if (jsonstring != undefined) {\n admuserpreference.nettyPreferenceData =\n this.commonService.convertToBase64(jsonstring);\n await lastValueFrom(\n this.insertOrUpdateAdmUserPreference(admuserpreference)\n );\n }\n } catch (error: any) {\n console.log(error);\n this.nettyAlertService.showAlert('Error', error.Message);\n } finally {\n releaseLock();\n }\n }\n /** Get the user preference and update grid columns\n *\n * @param preferenceType component name or other uniqe identifier\n * @param gridApi\n * @returns\n */\n async loadGridUserPreference(\n preferenceType: string,\n gridApi: any\n ): Promise<void> {\n if (!gridApi) return;\n let columnState: string = sessionStorage.getItem(preferenceType) ?? '';\n if (columnState.length > 0) {\n if (this.userPreferenceLock.isLocked()) return;\n var releaseLock = await this.userPreferenceLock.acquire();\n try {\n gridApi.applyColumnState({ state: JSON.parse(columnState) });\n } catch {}\n this.commonService.delay(100).then(() => releaseLock());\n return;\n }\n this.copyGridUserPereferenceToLocal(preferenceType).then(() => {\n try {\n let jsonstring: string =\n sessionStorage.getItem(preferenceType)?.trim() ?? '';\n if (jsonstring.length > 0) {\n gridApi.applyColumnState(JSON.parse(jsonstring));\n }\n } catch (error) {}\n });\n }\n /** Download user preference and save to local\n *\n * @param preferenceType component name or other uniqe identifier\n * @returns\n */\n async copyGridUserPereferenceToLocal(preferenceType: string): Promise<void> {\n var relaseLock = await this.userPreferenceLock.acquire();\n let columnState = sessionStorage.getItem(preferenceType);\n if (columnState) {\n relaseLock();\n return;\n }\n try {\n let admuserpreference: CurrentUserPreference =\n new CurrentUserPreference();\n admuserpreference.nettyPreferenceType = preferenceType;\n let data: CurrentUserPreference = <CurrentUserPreference>(\n await lastValueFrom(\n this.selectForUserAdmUserPreference(admuserpreference)\n )\n );\n if (\n data != undefined &&\n data != null &&\n (data?.nettyPreferenceType?.length ?? 0) > 0\n ) {\n let jsonstring = this.commonService.convertFromBase64(\n data.nettyPreferenceType ?? ''\n );\n sessionStorage.setItem(preferenceType, jsonstring);\n relaseLock();\n } else {\n relaseLock();\n }\n } catch (error) {\n relaseLock();\n }\n }\n /** Expand all Fit to screen all columns of the grid\n *\n * @param gridApi api of the aggrid to manage\n * @param gridApi columns api of the grid to manage\n * @param gridExpanded initial status of the grid\n * @returns current status of the grid\n */\n expandCollapseGrid(gridApi: any, gridExpanded: boolean = false): boolean {\n let _gridExpanded: boolean = gridExpanded;\n try {\n if (gridExpanded) {\n gridExpanded = false;\n gridApi.sizeColumnsToFit();\n } else {\n gridExpanded = true;\n var allColumnIds: any[] = [];\n gridApi.getColumns().forEach((column: any) => {\n allColumnIds.push(column.colId);\n });\n gridApi.autoSizeColumns(allColumnIds);\n }\n } catch (error) {\n console.log(error);\n return _gridExpanded;\n }\n return gridExpanded;\n }\n /** Set the QuickFilter of the grid and save the entry in session storage\n *\n * @param searchValueName Component identifier\n * @param searchValue Value to search\n * @param gridApi api for the current aggrid\n */\n setGridQuickSearch(\n searchValueName: string,\n searchValue: string,\n gridApi: any\n ) {\n if (gridApi) {\n gridApi.setQuickFilter(searchValue);\n }\n sessionStorage.setItem(searchValueName, searchValue);\n }\n /** Reapply the last search value from the session storage\n *\n * @param searchValueName Component identifier\n * @param gridApi api for the current aggrid\n * @returns\n */\n reapplyGridQuickSearch(searchValueName: string, gridApi: any): string {\n if (!gridApi) return '';\n // Reapply the last filter\n let searchValue: string = sessionStorage.getItem(searchValueName) ?? '';\n if (searchValue.length > 0) {\n gridApi.setQuickFilter(searchValue);\n }\n return searchValue;\n }\n /** Get Grid Column Default parameters for the given component\n *\n * @param componentName Name of the component we are initializing\n * @returns\n */\n getGridColumnDefault(componentName: string = ''): any {\n return {\n flex: 1,\n filter: true,\n resizable: true,\n sortable: true,\n };\n }\n /** Return excel style for ag-grid\n *\n * @returns\n */\n getExcelStyles(): any {\n return [\n { id: 'text-format', dataType: 'string' },\n {\n id: 'numberType',\n dataType: 'number',\n numberFormat: { format: '#,##0.00' },\n alignment: { horizontal: 'right', vertical: 'Center' },\n },\n {\n id: 'date-format',\n dataType: 'dateTime',\n numberFormat: { format: 'dd/mm/yyyy;@' },\n },\n {\n id: 'dateTime-format',\n dataType: 'dateTime',\n numberFormat: { format: 'dd/mm/yyyy hh:MM:ss;@' },\n },\n ];\n }\n}\n","export class SecurityDto {\n coid: any = null;\n userGUID: any = null;\n application: string = '';\n formCode: string = '';\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { catchError, map, Observable, throwError } from 'rxjs';\nimport { NettySecurity } from '../models/netty-security';\nimport { SecurityDto } from '../models/security-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SysfunctionProxy {\n constructor(\n private http: HttpClient,\n private environmentProxy: EnvironmentProxy\n ) {}\n\n /** Get the authentication list for the given form\n *\n * @param formCode\n * @returns\n */\n getAuthentication(formCode: string): Observable<Array<NettySecurity>> {\n let sysFunctionsURL =\n this.environmentProxy.getAdminLink('getAuthentication');\n let securityDto: SecurityDto = new SecurityDto();\n securityDto.formCode = formCode;\n securityDto.application = this.environmentProxy.getApplicationName();\n let call$ = this.http.post(sysFunctionsURL, securityDto);\n return call$.pipe(\n map((result: any) => <Array<NettySecurity>>result),\n catchError((error) => {\n let errorMessage = error.message; //.error.title;\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n}\n","\nimport { Component } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@Component({\n selector: 'ntybase-button-renderer',\n imports: [MatIconModule, MatTooltipModule, MatMenuModule],\n templateUrl: './button-renderer.html',\n styleUrl: './button-renderer.scss',\n})\nexport class ButtonRenderer implements ICellRendererAngularComp {\n protected params: any = null;\n protected label: string = '';\n protected type: string = '';\n protected toggleValue: boolean | null = null;\n protected editValid: boolean = false;\n protected historyValid: boolean = false;\n protected lineValid: boolean = false;\n protected popupSelectValid: boolean = false;\n protected popupEditValid: boolean = false;\n protected toggleValid: boolean = false;\n protected toggle_icon: string = '';\n protected none: boolean = false;\n protected addValid: boolean = false;\n protected deleteValid: boolean = false;\n\n agInit(params: any): void {\n this.params = params;\n this.type = this.params.type || null;\n this.label = this.params.label || null;\n this.toggleValue = this.params.value || null;\n switch (this.toggleValue) {\n case true:\n this.toggle_icon = 'select_check_box';\n break;\n case false:\n this.toggle_icon = 'check_box_outline_blank';\n break;\n default:\n this.toggle_icon = '';\n break;\n }\n\n this.resetValids();\n switch (this.type.toLowerCase().trim()) {\n case 'edit':\n this.editValid = true;\n break;\n case 'log':\n this.historyValid = true;\n break;\n case 'line':\n this.lineValid = true;\n break;\n case 'popupselect':\n this.popupSelectValid = true;\n break;\n case 'toggle':\n this.toggleValid = true;\n break;\n case 'none':\n this.none = true;\n break;\n case 'add':\n this.addValid = true;\n break;\n case 'delete':\n this.deleteValid = true;\n break;\n default:\n this.popupEditValid = true;\n break;\n }\n }\n /** Refresh the display\n *\n * @param params\n * @returns\n */\n refresh(params: any): boolean {\n return false;\n }\n resetValids() {\n this.editValid = false;\n this.historyValid = false;\n this.lineValid = false;\n this.popupSelectValid = false;\n this.popupEditValid = false;\n this.toggleValid = false;\n }\n\n onClick(event: any) {\n if (this.params.onClick instanceof Function) {\n // put anything into params u want pass into parents component\n const params = {\n event: event,\n rowData: this.params.node.data,\n type: this.type,\n // ...something\n };\n this.params.onClick(params);\n }\n }\n}\n","@if (editValid || popupEditValid) {\n<mat-icon\n class=\"cursor center edit\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"4000\"\n >edit</mat-icon\n>\n} @if (historyValid) {\n<mat-icon\n class=\"cursor center-log\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >log</mat-icon\n>\n} @if (historyValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >history</mat-icon\n>\n} @if (lineValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >menu_open</mat-icon\n>\n} @if (popupSelectValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >content_copy</mat-icon\n>\n} @if (toggleValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >{{toggleValue ? 'check_box' : 'check_box_outline_blank'}}</mat-icon\n>\n} @if (none) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n [matTooltipShowDelay]=\"3000\"\n >menu_open</mat-icon\n>\n} @if (addValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >playlist_add</mat-icon\n>\n} @if (deleteValid) {\n<mat-icon\n class=\"cursor center\"\n matTooltip=\"{{label}}\"\n (click)=\"onClick($event)\"\n [matTooltipShowDelay]=\"3000\"\n >delete_outline</mat-icon\n>\n}\n","\nimport { Component } from '@angular/core';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\n\n@Component({\n selector: 'ntybase-checkbox-renderer',\n imports: [],\n templateUrl: './checkbox-renderer.html',\n styleUrl: './checkbox-renderer.scss',\n})\nexport class CheckboxRenderer implements ICellRendererAngularComp {\n protected params: any = null;\n protected label: string = '';\n protected type: string = '';\n protected supportClick: boolean = false;\n protected checked: any = null;\n\n agInit(params: any): void {\n this.onProcess(params);\n }\n\n refresh(params?: any): boolean {\n if (params != null) {\n this.onProcess(params);\n }\n return true;\n }\n\n onProcess(params: any) {\n this.params = params;\n this.checked = this.params.value ?? false;\n this.type = this.params.type || null;\n this.label = this.params.label || null;\n if (this.type != null) {\n if (this.type.toLowerCase().trim() == 'click') {\n this.supportClick = true;\n }\n }\n }\n\n onClick(event: any) {\n this.checked = !this.checked;\n if (this.params.onClick instanceof Function) {\n // put anything into params u want pass into parents component\n const params = {\n event: event,\n rowData: this.params.node.data,\n type: this.type,\n checked: this.checked,\n // ...something\n };\n this.params.onClick(params);\n }\n }\n}\n","@if (supportClick) {\n<input\n id=\"checkbox\"\n type=\"checkbox\"\n [checked]=\"checked\"\n (click)=\"onClick($event)\"\n/>\n} @if (!supportClick) {\n<input id=\"checkbox\" type=\"checkbox\" [checked]=\"params.value\" disabled />\n}\n\n<label for=\"checkbox\">{{label}}</label>\n","import { Component, inject, OnDestroy } from \"@angular/core\";\nimport { Buffer } from \"buffer\";\nimport { Subject } from \"rxjs\";\nimport { AlertService } from \"../../alert/services/alert-service\";\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-netty-apps-base',\n imports: [],\n templateUrl: './netty-apps-base.html',\n styleUrl: './netty-apps-base.scss',\n})\nexport abstract class NettyAppsBase implements OnDestroy {\n // ---------------------------------\n // --- SERVICES ---\n // ---------------------------------\n protected alertService = inject(AlertService);\n protected translateService = inject(TranslateService);\n // ---------------------------------\n // --- DOWNLOAD METHODS ---\n // ---------------------------------\n /**\n * Download the given base64Encoded data as file\n *\n * @param base64Data: base64 encoded data\n * @param fileName: filename to download\n */\n protected downloadFile(base64Data: string | null, fileName: string | null) {\n if (base64Data == null) {\n return;\n }\n if (fileName == null) {\n return;\n }\n // Check if header is present\n if (!base64Data.startsWith('data:')) {\n console.error(\n 'Provided data is not in base64 format (missing header)'\n );\n return;\n }\n\n const contentType = base64Data.split(';')[0].split(':')[1];\n const byteCharacters = atob(base64Data.split(',')[1]);\n const byteArrays = [];\n for (let i = 0; i < byteCharacters.length; i++) {\n const byteArray = byteCharacters.charCodeAt(i);\n byteArrays.push(byteArray);\n }\n const byteArray = new Uint8Array(byteArrays);\n const blob = new Blob([byteArray], { type: contentType });\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n }\n\n /** Download the given base64Endoced data as text file\n *\n * @param base64EncodedFileData\n * @param fileName\n */\n protected downloadTextFile(base64EncodedFileData: string | null, fileName: string | null) {\n // Check if the data has a prefix like \"data:application/pdf;base64,\"\n if (base64EncodedFileData == null) { return; }\n if (fileName == null) { return; }\n let _data: string = base64EncodedFileData;\n const prefix = 'data:';\n if (_data.startsWith(prefix)) {\n // Remove the prefix\n _data = _data.slice(_data.indexOf(',') + 1);\n }\n // Convert the base64 data to a Uint8Array\n const textData = Buffer.from(_data ?? '', 'base64').toString();\n this.downloadTextFileNotEncoded(textData, fileName);\n }\n\n /** Save the given text as a text file\n *\n * @param fileData\n * @param fileName\n */\n protected downloadTextFileNotEncoded(fileData: string | null, fileName: string | null) {\n if (fileData == null) { return; }\n if (fileName == null) { return; }\n // Create a Blob from the Text\n const blob = new Blob([fileData], { type: 'text/plain' });\n // Create a download link\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.style.display = 'none';\n a.href = url;\n a.download = fileName ?? 'filename';\n // Trigger the download\n a.click();\n // Clean up\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n\n /**\n * Download file where the data is provided as blob\n * @param data - Array Buffer data\n * @param type - type of the document.\n */\n protected downloadBlobFile(data: any, type: string, fileName: string) {\n let blob = new Blob([data], { type: type });\n let downloadLink = document.createElement('a');\n downloadLink.href = window.URL.createObjectURL(blob);\n downloadLink.setAttribute('download', fileName);\n document.body.appendChild(downloadLink);\n downloadLink.click();\n downloadLink.parentNode?.removeChild(downloadLink);\n }\n\n // ---------------------------------\n // --- INTERFACE IMPLEMENTATIONS ---\n // ---------------------------------\n protected onDestroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n //Called once, before the instance is destroyed.\n //Add 'implements OnDestroy' to the class.\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n}","","import { Component, computed, inject, input, signal, effect, output, OnInit } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NettyAgGridService } from '../../services/netty-ag-grid-service';\nimport {\n AllCommunityModule, ModuleRegistry, themeQuartz, Theme, GridApi, GridOptions,\n GridReadyEvent, RowSelectionOptions, StatusPanelDef, ClientSideRowModelModule,\n HighlightChangesModule, RefreshCellsParams\n} from 'ag-grid-community';\nimport {\n StatusBarModule, CellSelectionModule, ClipboardModule, ColumnMenuModule,\n ContextMenuModule, ExcelExportModule, RowSelectionModule\n} from 'ag-grid-enterprise';\nimport { CommonService } from '../../../common/services/common-service';\nimport { ActivatedRoute, Router, NavigationExtras } from '@angular/router';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NettySecurity } from '../../../system/models/netty-security';\nimport { lastValueFrom, map, throwError } from 'rxjs';\nimport { SysfunctionProxy } from '../../../system/services/sysfunction-proxy';\nimport { ButtonRenderer } from '../ag-grid-renderers/button-renderer/button-renderer';\nimport { CheckboxRenderer } from '../ag-grid-renderers/checkbox-renderer/checkbox-renderer';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NettyAppsBase } from '../../../netty-apps-bases/netty-apps-base/netty-apps-base';\n\nModuleRegistry.registerModules([\n AllCommunityModule,\n StatusBarModule,\n ClientSideRowModelModule,\n ClipboardModule,\n ExcelExportModule,\n ColumnMenuModule,\n ContextMenuModule,\n CellSelectionModule,\n HighlightChangesModule,\n RowSelectionModule,\n]);\n\n// AgGrid Dark Mode Row Style\nconst myTheme = themeQuartz.withParams(\n {\n backgroundColor: 'black',\n browserColorScheme: 'dark',\n },\n 'dark'\n);\n\nconst FILTER_MODE_KEY = 'nettyapps_filter_mode';\n\n@Component({\n selector: 'ntybase-ag-grid-base',\n imports: [],\n templateUrl: './ag-grid-base.html',\n styleUrl: './ag-grid-base.scss',\n})\nexport abstract class NettyAgGridBase<T extends { [key: string]: any }>\n extends NettyAppsBase implements OnInit {\n // Input signals\n readOnly = input<boolean>(false);\n popupFilterValid = input<boolean>(false);\n popupValid = input<boolean>(false);\n // params = input<any>('');\n // parameters = input<string>('');\n isEmbedded = input<boolean>(false);\n // Parameters pass when the component is embeded into an other\n public componantParameterGUID = input<any>('');\n public componantParameterType = input<string>('');\n\n // Events\n /*\n Selected records event\n @param records: Array of selected records\n */\n public onElementSelect = output<T[]>();\n // AG Grid Filter\n protected customFilters = signal<boolean>(this.getStoredFilterMode());\n\n // Filter section\n protected isFilterValid = signal<boolean>(true);\n protected isFilterExpanded = signal<boolean>(true);\n // Authentication\n protected authenticationList: Array<NettySecurity> = [];\n\n // User access writes\n protected accessRightsProcessed = signal<boolean>(false);\n public allowAdd = signal<boolean>(false);\n public allowEdit = signal<boolean>(false);\n public allowDelete = signal<boolean>(false);\n public allowLog = signal<boolean>(false);\n public allowRead = signal<boolean>(true);\n\n // Button action management variables\n public menuValid = signal<boolean>(true);\n public deleteValid = signal<boolean>(false);\n public selectionValid = signal<boolean>(false);\n public refreshButtonValid = signal<boolean>(false);\n\n // Parameters for embeded components\n selectedElement = output<any>();\n\n // AG-Grid theme setting (dark mode)\n theme: Theme = myTheme;\n\n // Grid references\n protected gridApi!: GridApi;\n protected userGridApi!: GridApi;\n public excelStyles: any = null;\n\n // Column definitions\n public columnDefs = signal<any>(null);\n public userColumnDefs = signal<any>(null);\n public groupMembersColumnDefs = signal<any>(null);\n protected gridColumnsVisible = signal<boolean>(true);\n\n // Framework components\n public frameworkComponents: any = null;\n\n // Selection management\n selectedRows = signal<T[]>([]);\n isSingleRowSelected = computed(() => this.selectedRows().length === 1);\n isMultipleRowSelected = computed(() => this.selectedRows().length > 0);\n\n // Component identifiers\n protected gridExpanded = signal<boolean>(false);\n protected componentName = signal<string>('Invalid');\n protected searchValueName = signal<string>('Invalid_searchValue');\n protected preferenceType = signal<string>('Invalid_columnState');\n public searchValue = signal<string>('');\n\n // Open component management\n protected openInPopup = signal<boolean>(false);\n\n // Services\n protected nettyAgGridService = inject(NettyAgGridService);\n protected commonService = inject(CommonService);\n protected router = inject(Router);\n protected routerActive = inject(ActivatedRoute);\n protected dialog = inject(MatDialog);\n protected sysFunctionProxy = inject(SysfunctionProxy);\n protected environment = inject(EnvironmentProxy);\n\n // Parse query parameters\n protected queryParameterGUID = toSignal(\n this.routerActive.queryParamMap.pipe(\n map((params) => params.get('parameters')),\n map((value) => this.parseOrReturnValue(value))\n ),\n {\n initialValue: null, // set initial value to null\n }\n );\n protected queryParameterType = toSignal(\n this.routerActive.queryParamMap.pipe(\n map((params) => params.get('type')),\n map((value) => this.parseOrReturnValue(value))\n ),\n {\n initialValue: null, // set initial value to null\n }\n );\n\n // Query Parameters can be provide as parameters\n protected parameterGUID: any = signal<any>('');\n protected parameterType: any = signal<string>('');\n\n initAgGrid_extension() {\n if (this.allowEdit() == false && (this.popupValid() ?? false) == false) {\n this.columnDefs().pop();\n this.columnDefs().shift();\n this.columnDefs().unshift({\n headerName: '',\n headerCheckboxSelection: true,\n sortable: true,\n resizable: true,\n filter: true,\n minWidth: 60,\n maxWidth: 60,\n suppressSizeToFit: true,\n colId: 'editColumn',\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n //onClick: this.onBtnClick.bind(this),\n label: '1',\n type: 'edit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n }\n if (this.popupValid() == true) {\n this.columnDefs().pop();\n this.columnDefs().shift();\n if (this.popupFilterValid() == true) {\n if (this.allowEdit()) {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@Update'),\n type: 'popupEdit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n } else {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellStyle: { 'padding-top': '5px' },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'multiRow',\n checkboxes: true,\n });\n }\n } else {\n if (this.allowEdit() == false) {\n this.columnDefs().unshift({\n headerName: '',\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 50,\n maxWidth: 50,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@Update'),\n type: 'popupEdit',\n },\n });\n this.gridApi.setGridOption('rowSelection', {\n mode: 'singleRow',\n checkboxes: false,\n });\n }\n if (!this.readOnly()) {\n this.columnDefs().unshift({\n headerName: this.translateService.instant('@select'),\n sortable: false,\n resizable: false,\n filter: false,\n minWidth: 80,\n maxWidth: 80,\n suppressSizeToFit: true,\n cellRenderer: 'buttonRenderer',\n cellStyle: { 'margin-top': '8px' },\n cellRendererParams: {\n onClick: this.onBtnClick?.bind(this),\n label: this.translateService.instant('@select'),\n type: 'popupSelect',\n },\n });\n\n this.gridApi.setGridOption('rowSelection', {\n mode: 'singleRow',\n checkboxes: false,\n });\n }\n }\n }\n }\n\n // Grid configuration options\n public gridOptions: GridOptions<T> = {\n rowSelection: {\n mode: 'multiRow',\n checkboxes: true,\n headerCheckbox: true,\n selectAll: 'filtered',\n hideDisabledCheckboxes: true,\n suppressRowClickSelection: false,\n enableCellChangeFlash: true,\n } as RowSelectionOptions<T>,\n };\n\n // Statusbar\n public statusBar: { statusPanels: StatusPanelDef[] } = {\n statusPanels: [\n {\n statusPanel: 'agTotalRowCountComponent',\n align: 'left',\n key: 'rowCount',\n },\n { statusPanel: 'agFilteredRowCountComponent' },\n { statusPanel: 'agSelectedRowCountComponent' },\n { statusPanel: 'agAggregationComponent' },\n ],\n };\n\n /**\n * Filter mode change\n */\n toggleFilterMode() {\n const newMode = !this.customFilters();\n this.customFilters.set(newMode);\n localStorage.setItem(FILTER_MODE_KEY, JSON.stringify(newMode));\n this.initAgGrid();\n if (this.gridApi) {\n this.gridApi.refreshHeader();\n\n this.gridApi.setFilterModel(null);\n\n const message = this.customFilters()\n ? '@customFilterModeEnabled'\n : '@defaultFilterModeEnabled';\n this.alertService.showAlert(this.translateService.instant(message));\n }\n }\n private getStoredFilterMode(): boolean {\n try {\n const stored = localStorage.getItem(FILTER_MODE_KEY);\n return stored !== null ? JSON.parse(stored) : true;\n } catch {\n return true;\n }\n }\n\n /**\n * Component initialization lifecycle hook\n */\n public async ngOnInit() {\n await this.setAccessRights();\n\n const savedSearchValue = sessionStorage.getItem(this.searchValueName());\n if (savedSearchValue) {\n this.searchValue.set(savedSearchValue);\n this.loadData(savedSearchValue);\n } else {\n this.loadData();\n }\n\n // Load user grid preferences\n await this.nettyAgGridService.copyGridUserPereferenceToLocal(\n this.preferenceType()\n );\n }\n\n private parseOrReturnValue(value: string | null): any {\n if (value) {\n try {\n return JSON.parse(value); // parse json\n } catch (e) {\n return value; // not a json retun value\n }\n }\n return null;\n }\n\n /**\n * Handle input changes for route parameters\n */\n // public ngOnChanges(changes: SimpleChanges): void {\n // if (changes['parameters']) {\n // const parameters = changes['parameters'].currentValue;\n // if (parameters) {\n // this.params =\n // typeof parameters === 'string' ? JSON.parse(parameters) : parameters;\n // } else {\n // this.commonService.clearOutlet();\n // }\n // }\n // }\n\n // Common grid ready handler\n protected onGridReady(params: GridReadyEvent): void {\n this.gridApi = params.api;\n\n this.setAgGridTranslations();\n\n this.gridApi.addEventListener('selectionChanged', () => {\n // Null-safe approach\n const selectedNodes = this.gridApi?.getSelectedNodes?.() || [];\n this.selectedRows.set(\n selectedNodes.map((node: { data: any }) => node.data)\n );\n });\n\n if (this.searchValue()) {\n this.gridApi.setGridOption('quickFilterText', this.searchValue());\n }\n }\n\n onFirstDataRendered(params: any) {\n //TODO: Fix this\n try {\n this.nettyAgGridService.loadGridUserPreference(\n this.preferenceType(),\n this.gridApi\n );\n this.expandCollapse();\n } catch (error) {\n console.log('OnFirstDataRendered error:', error);\n }\n }\n\n // Save the user parameters\n saveGrid(params: any) {\n const gridState = {\n columnState: this.gridApi.getColumnState(),\n };\n this.nettyAgGridService.saveGridUserPreference(\n this.preferenceType(),\n this.gridApi,\n JSON.stringify(gridState)\n );\n }\n\n // Grid utilities\n expandCollapse() {\n this.gridExpanded.set(\n this.nettyAgGridService.expandCollapseGrid(\n this.gridApi,\n this.gridExpanded()\n )\n );\n }\n\n quickSearch(searchStr: string = '') {\n this.searchValue.set(searchStr);\n if (this.gridApi) {\n this.gridApi.setGridOption('quickFilterText', this.searchValue());\n }\n sessionStorage.setItem(this.searchValueName(), this.searchValue());\n }\n\n /**\n * Handle back button click\n */\n backClicked() {\n this.commonService.goBack();\n }\n\n public gotoURL(\n routePrefix: string[],\n rightSidenav: string[] = [],\n parameters: string,\n type?: string,\n dialogComponent: any = null,\n isNewTab: boolean = false,\n isPopup: boolean = this.isEmbedded()\n ) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n const navigationExtras: NavigationExtras = {\n queryParams: {\n parameters: JSON.stringify(parameters),\n ...(type && { type }),\n isNewTab: isNewTab || undefined,\n },\n queryParamsHandling: 'merge',\n };\n\n if (isNewTab) {\n const fullUrl = this.router\n .createUrlTree(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n )\n .toString();\n window.open(fullUrl, '_blank');\n\n return;\n }\n\n if (isPopup && dialogComponent) {\n this.dialog\n .open(dialogComponent, {\n data: {\n parameters: parameters,\n mode: type || 'edit',\n embedded: true,\n },\n maxWidth: '100vw',\n disableClose: true,\n hasBackdrop: false,\n })\n .afterClosed()\n .subscribe((result) => {\n if (result === 'saved') {\n this.updateRowInGrid;\n }\n });\n return;\n }\n // Log control\n if (rightSidenav.length == 0 || rightSidenav[0] === 'log') {\n this.router.navigate(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n );\n return;\n }\n\n // In all other cases, open the side menu\n this.router\n .navigate(\n [\n {\n outlets: {\n primary: routePrefix,\n rightSidenav: [...routePrefix, ...rightSidenav],\n },\n },\n ],\n navigationExtras\n )\n .then(() => {\n // Ensure sidenav is opened after navigation\n this.commonService.toggleRightSidenav(true);\n });\n }\n\n popupGotoURL(urlSegments: string[]) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n this.router.navigate([\n {\n outlets: {\n primary: [baseHref, ...urlSegments],\n rightSidenav: null,\n },\n },\n ]);\n }\n\n toggleOpenMode() {\n const newMode = !this.openInPopup();\n this.openInPopup.set(newMode);\n\n localStorage.setItem('openInPopup', JSON.stringify(newMode));\n\n const message = newMode ? '@openInPopup' : '@openInSidenav';\n this.alertService.showSuccess(message);\n }\n\n /**\n * Listens for update events from CommonService and refreshes the grid accordingly.\n * - For 'add' or 'update' actions: Updates the relevant row\n * - For 'delete' action: Removes the row\n * - Performs no action if:\n * - Grid API is not ready, or\n * - The update type doesn't match\n */\n constructor() {\n super();\n this.frameworkComponents = {\n buttonRenderer: ButtonRenderer,\n checkboxRenderer: CheckboxRenderer,\n };\n\n const savedMode = localStorage.getItem('openInPopup');\n if (savedMode !== null) {\n this.openInPopup.set(JSON.parse(savedMode) === true);\n }\n\n this.translateService.onLangChange.subscribe(() => {\n this.setAgGridTranslations();\n });\n\n effect(() => {\n if (this.hasValidValue(this.componantParameterGUID())) {\n this.parameterGUID.set(this.componantParameterGUID());\n } else if (this.hasValidValue(this.queryParameterGUID())) {\n this.parameterGUID.set(this.queryParameterGUID());\n }\n if (this.hasValidValue(this.componantParameterType())) {\n this.parameterType.set(this.componantParameterType());\n } else if (this.hasValidValue(this.queryParameterType())) {\n this.parameterType.set(this.queryParameterType());\n }\n if (this.hasValidValue(this.parameterGUID)) {\n this.setFilter();\n this.loadData();\n } else {\n // Clear right side nav if parameterGUID is not provided\n this.commonService.clearOutlet();\n }\n });\n\n effect(() => {\n const update = this.commonService.updates();\n if (!update || !this.gridApi) return;\n\n if (update.type === this.getEntityType?.()) {\n switch (update.action) {\n case 'add':\n case 'update':\n this.updateRowInGrid(update.data);\n break;\n }\n }\n });\n\n effect(() => {\n this.onElementSelect.emit(this.selectedRows());\n });\n\n // Manage filter expanded state\n effect(() => {\n if (this.isEmbedded()) {\n this.isFilterExpanded.set(false);\n } else {\n this.isFilterExpanded.set(this.isFilterValid());\n }\n this.showHideEmbeddedColumnsAsync();\n });\n }\n protected onReverseIsFilterValid() {\n if (this.isEmbedded()) {\n this.isFilterExpanded.set(false);\n } else {\n this.isFilterValid.update((a) => !a);\n }\n }\n /**\n * Validates if the given value is equal to null,undefined or ''\n * @param value\n * @returns true if has a valid value\n */\n protected hasValidValue(value: any) {\n if (value == null || value == undefined) {\n return false;\n }\n if (value == '') {\n return false;\n }\n return true;\n }\n\n private setAgGridTranslations() {\n if (this.gridApi) {\n (this.gridApi as any).setGridOption('localeText', {\n // Status panel translate\n totalRows: this.translateService.instant('AG_GRID.TOTAL_ROWS'),\n filteredRows: this.translateService.instant('AG_GRID.FILTERED_ROWS'),\n selectedRows: this.translateService.instant('AG_GRID.SELECTED_ROWS'),\n noRowsToShow: this.translateService.instant('AG_GRID.NO_ROWS_TO_SHOW'),\n loadingOoo: this.translateService.instant('AG_GRID.LOADING'),\n\n // Context menu translations\n copy: this.translateService.instant('AG_GRID.COPY'),\n copyWithHeaders: this.translateService.instant(\n 'AG_GRID.COPY_WITH_HEADERS'\n ),\n copyWithGroupHeaders: this.translateService.instant(\n 'AG_GRID.COPY_WITH_GROUP_HEADERS'\n ),\n paste: this.translateService.instant('AG_GRID.PASTE'),\n export: this.translateService.instant('AG_GRID.EXPORT'),\n csvExport: this.translateService.instant('AG_GRID.CSV_EXPORT'),\n excelExport: this.translateService.instant('AG_GRID.EXCEL_EXPORT'),\n pinColumn: this.translateService.instant('AG_GRID.PIN_COLUMN'),\n pinLeft: this.translateService.instant('AG_GRID.PIN_LEFT'),\n pinRight: this.translateService.instant('AG_GRID.PIN_RIGHT'),\n noPin: this.translateService.instant('AG_GRID.NO_PIN'),\n sortAscending: this.translateService.instant('AG_GRID.SORT_ASCENDING'),\n sortDescending: this.translateService.instant(\n 'AG_GRID.SORT_DESCENDING'\n ),\n autosizeThisColumn: this.translateService.instant(\n 'AG_GRID.AUTOSIZE_THIS_COLUMN'\n ),\n autosizeAllColumns: this.translateService.instant(\n 'AG_GRID.AUTOSIZE_ALL_COLUMNS'\n ),\n resetColumns: this.translateService.instant('AG_GRID.RESET_COLUMNS'),\n expandAll: this.translateService.instant('AG_GRID.EXPAND_ALL'),\n collapseAll: this.translateService.instant('AG_GRID.COLLAPSE_ALL'),\n exportToExcel: this.translateService.instant('AG_GRID.EXPORT_TO_EXCEL'),\n sheetName: this.translateService.instant('AG_GRID.SHEET_NAME'),\n exportAsExcelTable: this.translateService.instant(\n 'AG_GRID.EXPORT_AS_EXCEL_TABLE'\n ),\n rangeSelectTo: this.translateService.instant('AG_GRID.RANGE_SELECT_TO'),\n rangeSelectFrom: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_FROM'\n ),\n rangeSelectCopy: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_COPY'\n ),\n rangeSelectChart: this.translateService.instant(\n 'AG_GRID.RANGE_SELECT_CHART'\n ),\n pasteAll: this.translateService.instant('AG_GRID.CLIPBOARD_PASTE'),\n pasteWithoutHeader: this.translateService.instant(\n 'AG_GRID.CLIPBOARD_PASTE_WITHOUT_HEADER'\n ),\n copyAll: this.translateService.instant('AG_GRID.CLIPBOARD_COPY'),\n cut: this.translateService.instant('AG_GRID.CLIPBOARD_CUT'),\n\n // Pagination translations\n page: this.translateService.instant('AG_GRID.PAGE'),\n more: this.translateService.instant('AG_GRID.MORE'),\n to: this.translateService.instant('AG_GRID.TO'),\n of: this.translateService.instant('AG_GRID.OF'),\n next: this.translateService.instant('AG_GRID.NEXT'),\n last: this.translateService.instant('AG_GRID.LAST'),\n first: this.translateService.instant('AG_GRID.FIRST'),\n previous: this.translateService.instant('AG_GRID.PREVIOUS'),\n pageSizeSelectorLabel: this.translateService.instant(\n 'AG_GRID.PAGE_SIZE_SELECTOR_LABEL'\n ),\n\n // Set Filter\n selectAll: this.translateService.instant('AG_GRID.SELECT_ALL'),\n selectAllSearchResults: this.translateService.instant(\n 'AG_GRID.SELECT_ALL_SEARCH_RESULTS'\n ),\n searchOoo: this.translateService.instant('AG_GRID.SEARCH_OOO'),\n blanks: this.translateService.instant('AG_GRID.BLANKS'),\n noMatches: this.translateService.instant('AG_GRID.NO_MATCHES'),\n\n // Number Filter & Text Filter\n filterOoo: this.translateService.instant('AG_GRID.FILTER_OOO'),\n equals: this.translateService.instant('AG_GRID.EQUALS'),\n notEqual: this.translateService.instant('AG_GRID.NOT_EQUAL'),\n blank: this.translateService.instant('AG_GRID.BLANK'),\n notBlank: this.translateService.instant('AG_GRID.NOT_BLANK'),\n empty: this.translateService.instant('AG_GRID.EMPTY'),\n\n // Number Filter\n lessThan: this.translateService.instant('AG_GRID.LESS_THAN'),\n greaterThan: this.translateService.instant('AG_GRID.GREATER_THAN'),\n lessThanOrEqual: this.translateService.instant(\n 'AG_GRID.LESS_THAN_OR_EQUAL'\n ),\n greaterThanOrEqual: this.translateService.instant(\n 'AG_GRID.GREATER_THAN_OR_EQUAL'\n ),\n inRange: this.translateService.instant('AG_GRID.IN_RANGE'),\n inRangeStart: this.translateService.instant('AG_GRID.IN_RANGE_START'),\n inRangeEnd: this.translateService.instant('AG_GRID.IN_RANGE_END'),\n\n // Text Filter\n contains: this.translateService.instant('AG_GRID.CONTAINS'),\n notContains: this.translateService.instant('AG_GRID.NOT_CONTAINS'),\n startsWith: this.translateService.instant('AG_GRID.STARTS_WITH'),\n endsWith: this.translateService.instant('AG_GRID.ENDS_WITH'),\n\n // Date Filter\n dateFormatOoo: this.translateService.instant('AG_GRID.DATE_FORMAT_OOO'),\n\n // Filter Conditions\n andCondition: this.translateService.instant('AG_GRID.AND_CONDITION'),\n orCondition: this.translateService.instant('AG_GRID.OR_CONDITION'),\n\n // Filter Buttons\n applyFilter: this.translateService.instant('AG_GRID.APPLY_FILTER'),\n resetFilter: this.translateService.instant('AG_GRID.RESET_FILTER'),\n clearFilter: this.translateService.instant('AG_GRID.CLEAR_FILTER'),\n cancelFilter: this.translateService.instant('AG_GRID.CANCEL_FILTER'),\n\n // Filter Titles\n textFilter: this.translateService.instant('AG_GRID.TEXT_FILTER'),\n numberFilter: this.translateService.instant('AG_GRID.NUMBER_FILTER'),\n dateFilter: this.translateService.instant('AG_GRID.DATE_FILTER'),\n setFilter: this.translateService.instant('AG_GRID.SET_FILTER'),\n });\n }\n }\n\n /**\n * Update a single row in the grid\n * @param rowData The updated row data\n * @param idField The field name that serves as unique identifier (default: 'id')\n */\n protected updateRowInGrid(rowData: T, idField: string = 'id') {\n const rowNode = this.gridApi.getRowNode(rowData[idField]);\n if (rowNode) {\n rowNode.setData(rowData);\n const params: RefreshCellsParams = {\n rowNodes: [rowNode],\n force: true,\n suppressFlash: false,\n };\n this.gridApi.refreshCells(params);\n } else {\n this.loadData(); // Reload all data if row not found\n }\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.gridApi) return;\n\n const selectedNodes = this.gridApi.getSelectedNodes();\n if (selectedNodes.length === 0) {\n await this.alertService.showAlert('@pleaseSelectRowToDelete');\n return;\n }\n\n const confirmed = await this.alertService.showConfirm(\n '@confirmDeleteSelectedRecords'\n );\n if (confirmed) {\n const selectedRows = selectedNodes.map((node: { data: T }) => node.data);\n this.deleteRows?.(selectedRows);\n }\n }\n\n public async refreshData(): Promise<void> {\n try {\n this.loadData();\n await this.alertService.showAlert('@dataRefreshedSuccessfully');\n } catch (err) {\n this.alertService.showError(err as string);\n }\n }\n\n async setAccessRights(): Promise<boolean> {\n this.authenticationList = <Array<NettySecurity>>await lastValueFrom(\n this.sysFunctionProxy.getAuthentication(this.componentName())\n ).catch((e) => {\n return throwError(() => new Error(e));\n });\n try {\n this.allowRead.set(\n this.authenticationList.find((f) => f.action == 'read')?.allow ?? false\n );\n if (this.allowRead() == false) {\n this.commonService.userNotAllowedToRead();\n return false;\n }\n if (this.allowRead() == true && !this.readOnly()) {\n this.allowAdd.set(\n this.authenticationList.find((f) => f.action == 'add')?.allow ?? false\n );\n this.allowEdit.set(\n this.authenticationList.find((f) => f.action == 'edit')?.allow ??\n false\n );\n this.allowDelete.set(\n this.authenticationList.find((f) => f.action == 'delete')?.allow ??\n false\n );\n this.allowLog.set(\n this.authenticationList.find((f) => f.action == 'logAccess')?.allow ??\n false\n );\n } else {\n this.allowAdd.set(false);\n this.allowEdit.set(false);\n this.allowDelete.set(false);\n this.allowLog.set(false);\n }\n } catch (error) {\n this.allowAdd.set(false);\n this.allowEdit.set(false);\n this.allowDelete.set(false);\n this.allowLog.set(false);\n return false;\n }\n this.accessRightsProcessed.set(true);\n return true;\n }\n\n protected onFilterTextBoxVisibilityChange(isOpen: boolean): void {\n this.menuValid.set(!isOpen);\n }\n\n protected abstract loadData(filter?: string): void;\n protected abstract initAgGrid(): void;\n protected onBtnClick?(e: T): void;\n protected deleteRows?(rows: T[]): void;\n protected getEntityType?(): string;\n protected selectedData?(): void;\n protected setFilter(): void { } //override this to set a filter\n protected popupClose() {\n this.selectedElement.emit(null);\n }\n\n // ---------------------------------------------\n // --- Functions to Show / Hide Grid Columns ---\n // ---------------------------------------------\n onShowHideColumns() {\n this.gridColumnsVisible.update(a => !a);\n this.showHideColumnsAsync();\n }\n showHideColumnsAsync() {\n setTimeout(() => this.showHideColumns(), 400);\n }\n\n showHideColumns() {\n var fields = this.columnDefs()\n .filter((columnDef: any) => columnDef.ntyHide === 'x')\n .map((columnDef: any) => columnDef.field);\n this.gridApi.setColumnsVisible(fields, this.gridColumnsVisible());\n }\n showHideEmbeddedColumnsAsync() {\n setTimeout(() => this.showHideEmbeddedColumns(), 100);\n }\n showHideEmbeddedColumns() {\n if (this.columnDefs == undefined || this.columnDefs == null) { return; }\n var fields = this.columnDefs()\n .filter((columnDef: any) => columnDef.ntyEmbeddedHide == 'x')\n .map((columnDef: any) => columnDef.field);\n this.gridApi.setColumnsVisible(fields, !this.isEmbedded);\n }\n}\n","<p>ag-grid-base works!</p>\n","import {\n Component,\n signal,\n input,\n model,\n inject,\n ViewChild,\n SimpleChanges,\n DoCheck,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { CommonService } from '../../../common/services/common-service';\nimport { NgForm } from '@angular/forms';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NettyAppsBase } from '../../../netty-apps-bases/netty-apps-base/netty-apps-base';\n\nexport type UserViewMode = 'fullscreen' | 'sidenav' | 'dialog';\n\n@Component({\n selector: 'ntybase-ag-grid-save-base',\n imports: [],\n templateUrl: './ag-grid-save-base.html',\n styleUrl: './ag-grid-save-base.scss',\n})\nexport abstract class NettyAgGridSaveBase<T> extends NettyAppsBase implements DoCheck {\n // Services\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected commonService = inject(CommonService);\n protected environment = inject(EnvironmentProxy);\n protected dialog = inject(MatDialog);\n\n viewMode = signal<UserViewMode>('sidenav');\n\n // Input signals\n parameters = input<string>('');\n embedded = input<boolean>(false);\n isEmbedded = input<boolean>(false);\n\n currentItem = signal<T>({} as T);\n initialItem: T = {} as T;\n\n // Form tracking\n formChanged = false;\n @ViewChild('saveForm') saveForm!: NgForm;\n\n // Dialog related properties\n protected dialogRef = inject(MatDialogRef<any>, { optional: true });\n protected dialogData = inject(MAT_DIALOG_DATA, { optional: true });\n\n // Controls whether the panel should automatically close after saving user data\n closeAfterSave = model<boolean>(true);\n setCloseAfterSave(value: boolean): void {\n this.closeAfterSave.set(value);\n }\n\n // Controls the visibility of additional editable fields (e.g., password, extra settings)\n // When true, certain input fields become visible for editing\n updateValid = signal<boolean>(false);\n setUpdateValid(value: boolean): void {\n this.updateValid.set(value);\n }\n\n /**\n * Determine view mode based on current route\n */\n protected determineViewMode(): void {\n if (this.embedded() || this.dialogData?.embedded) {\n this.viewMode.set('dialog');\n } else if (this.router.url.includes('(rightSidenav:')) {\n this.viewMode.set('sidenav');\n } else {\n this.viewMode.set('fullscreen');\n }\n }\n\n ngOnInit(): void {\n this.loadDetailData();\n }\n\n /**\n * Set data to the form while preserving any unsaved changes\n * @param item - Data object of type T to populate the form\n */\n protected initializeFormData(item: T): void {\n // Merge incoming data with current form state to preserve unsaved changes\n const currentItem = this.currentItem();\n const updatedItem = { ...currentItem, ...item };\n\n // Create a new instance using the factory method\n const newItem = this.createItemInstance(updatedItem);\n this.currentItem.set(newItem);\n\n // Update initial item reference for change detection\n this.initialItem = this.createItemInstance(updatedItem);\n\n // Reset form changed flag\n this.formChanged = false;\n }\n\n /**\n * @param data - Data to populate the new instance\n */\n protected createItemInstance(data: Partial<T>): T {\n // Default implementation - child classes can override this\n return { ...data } as T;\n }\n\n /**\n * Check for form changes\n */\n ngDoCheck() {\n this.formChanged = !this.isEqual(this.currentItem(), this.initialItem);\n }\n\n protected isEqual(item1: T, item2: T): boolean {\n return JSON.stringify(item1) === JSON.stringify(item2);\n }\n\n /**\n * Check if can deactivate component\n */\n async canDeactivate(): Promise<boolean> {\n if (this.formChanged) {\n const confirmed = await this.alertService.showConfirm(\n '@unsavedChangesConfirm'\n );\n\n if (!confirmed) {\n return false;\n }\n\n return true;\n }\n return true;\n }\n\n protected getGuidFromParameters(): string {\n if (this.viewMode() === 'dialog' && this.dialogData) {\n return this.dialogData.parameters || '';\n }\n\n if (this.parameters) {\n try {\n return JSON.parse(this.parameters());\n } catch (e) {\n return this.parameters();\n }\n }\n\n return '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['parameters']) {\n this.loadDetailData();\n }\n }\n\n /**\n * Close sidenav or navigate back\n */\n async closeSidenav(): Promise<void> {\n const canDeactivate = await this.canDeactivate();\n\n if (canDeactivate) {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('saved');\n } else if (this.viewMode() === 'sidenav') {\n this.formChanged = false;\n this.commonService.clearOutlet();\n } else {\n const cleanPath = this.commonService.getCleanUrlPath();\n this.router.navigate([cleanPath]);\n }\n }\n }\n\n /**\n * Back button clicked\n */\n async backClicked(): Promise<void> {\n const canDeactivate = await this.canDeactivate();\n\n if (canDeactivate) {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('back');\n } else {\n this.commonService.goBack();\n }\n }\n }\n\n protected abstract loadDetailData(): void;\n\n protected validateSaveRecord(recordGUID: any): boolean {\n if (this.saveForm && this.saveForm.invalid) {\n Object.keys(this.saveForm.controls).forEach((key) => {\n const control = this.saveForm.controls[key];\n control.markAsTouched();\n control.markAsDirty();\n });\n\n this.alertService.showError('@pleaseFillRequiredFields');\n return false;\n }\n\n // First check if there are any visual form changes\n if (!this.formChanged && recordGUID) {\n this.alertService.showAlert('@noChangesDetected');\n if (this.closeAfterSave()) {\n this.closeSidenav();\n }\n return false;\n }\n return true;\n }\n\n public gotoURL(\n routePrefix: string[],\n rightSidenav: string[] = [],\n parameters: string,\n type?: string,\n dialogComponent: any = null,\n isNewTab: boolean = false,\n isPopup: boolean = this.isEmbedded()\n ) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n const navigationExtras: NavigationExtras = {\n queryParams: {\n parameters: JSON.stringify(parameters),\n ...(type && { type }),\n isNewTab: isNewTab || undefined,\n },\n queryParamsHandling: 'merge',\n };\n\n if (isNewTab) {\n const fullUrl = this.router\n .createUrlTree(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n )\n .toString();\n window.open(fullUrl, '_blank');\n\n return;\n }\n\n if (isPopup && dialogComponent) {\n this.dialog\n .open(dialogComponent, {\n data: {\n parameters: parameters,\n mode: type || 'edit',\n embedded: true,\n },\n maxWidth: '100vw',\n disableClose: true,\n })\n .afterClosed()\n .subscribe((result) => {\n if (result === 'saved') {\n //this.updateRowInGrid;\n }\n });\n return;\n }\n // Log control\n if (rightSidenav.length == 0 || rightSidenav[0] === 'log') {\n this.router.navigate(\n [baseHref, ...routePrefix, ...rightSidenav],\n navigationExtras\n );\n return;\n }\n\n // In all other cases, open the side menu\n this.router\n .navigate(\n [\n {\n outlets: {\n primary: routePrefix,\n rightSidenav: [...routePrefix, ...rightSidenav],\n },\n },\n ],\n navigationExtras\n )\n .then(() => {\n // Ensure sidenav is opened after navigation\n this.commonService.toggleRightSidenav(true);\n });\n }\n\n popupGotoURL(urlSegments: string[]) {\n const baseHref = this.environment.getBaseHref().endsWith('/')\n ? this.environment.getBaseHref().slice(0, -1) // Sondaki / işaretini kaldır\n : this.environment.getBaseHref();\n this.router.navigate([\n {\n outlets: {\n primary: [baseHref, ...urlSegments],\n rightSidenav: null,\n },\n },\n ]);\n }\n}\n","<p>ag-grid-save-base works!</p>\n","import { Component } from '@angular/core';\n// Excel Import\nimport * as XLSX from 'xlsx';\nimport { NettyAgGridBase } from '../ag-grid-base/ag-grid-base';\ntype AOA = string[][];\n\n@Component({\n selector: 'ntybase-excel-import-base',\n imports: [],\n templateUrl: './excel-import-base.html',\n styleUrl: './excel-import-base.scss',\n})\nexport abstract class ExcelImportBase extends NettyAgGridBase<any> {\n protected dataList: AOA = [];\n protected wopts: XLSX.WritingOptions = { bookType: 'xlsx', type: 'array' };\n protected fileName = 'PayrollJournalTrans.xlsx';\n protected isDataValidated = false;\n /*******************************\n *** EXCEL UPLOAD FUNCTIONS ***\n *******************************/\n onFileChange(evt: any) {\n /* wire up file reader */\n const target: DataTransfer = <DataTransfer>evt.target;\n if (target.files.length !== 1) {\n throw new Error('Cannot use multiple files');\n }\n const reader: FileReader = new FileReader();\n reader.onload = (e: any) => {\n /* read workbook */\n const bstr: string = e.target.result;\n const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });\n\n /* grab first sheet */\n const wsname: string = wb.SheetNames[0];\n const ws: XLSX.WorkSheet = wb.Sheets[wsname];\n\n /* save data */\n this.dataList = <AOA>XLSX.utils.sheet_to_json(ws, { header: 1 });\n console.log('dataList:', this.dataList);\n };\n reader.readAsBinaryString(target.files[0]);\n }\n}\n","<p>excel-import-base works!</p>\n","import { Component, inject } from '@angular/core';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-date-time-filter',\n imports: [TranslateModule],\n templateUrl: './range-date-time-filter.html',\n styleUrl: './range-date-time-filter.scss',\n})\nexport class RangeDateTimeFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type: 'date' | 'range' | 'special';\n date?: Date;\n start?: Date;\n end?: Date;\n special?: 'today' | 'yesterday' | 'thisWeek' | 'thisMonth';\n }> = [];\n\n // Dil servisini inject edin\n private i18nService = inject(I18nService);\n protected translateService = inject(TranslateService);\n\n // Türkçe ve İngilizce özel anahtar kelimeler\n private specialKeywords: { [key: string]: string } = {\n today: 'today',\n bugün: 'today',\n yesterday: 'yesterday',\n dün: 'yesterday',\n thisweek: 'thisWeek',\n 'bu hafta': 'thisWeek',\n thismonth: 'thisMonth',\n 'bu ay': 'thisMonth',\n };\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n // Virgülle ayrılmış parçaları al ve temizle\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // Aralık kontrolü (.. içeriyor mu) - ÖNCE aralık kontrolü yap\n if (part.includes('..')) {\n const rangeParts = part.split('..');\n if (rangeParts.length === 2) {\n const startStr = rangeParts[0].trim();\n const endStr = rangeParts[1].trim();\n\n const startDate = this.parseDateForRange(startStr, false);\n const endDate = this.parseDateForRange(endStr, true);\n\n if (startDate && endDate) {\n // Tarihleri doğru sırala (küçükten büyüğe)\n const sortedStart = startDate < endDate ? startDate : endDate;\n const sortedEnd = startDate < endDate ? endDate : startDate;\n\n this.conditions.push({\n type: 'range',\n start: sortedStart,\n end: sortedEnd,\n });\n }\n }\n } else {\n // Özel anahtar kelime kontrolü (Türkçe ve İngilizce)\n const normalizedPart = part.toLowerCase();\n if (this.specialKeywords[normalizedPart]) {\n this.conditions.push({\n type: 'special',\n special: this.specialKeywords[normalizedPart] as any,\n });\n continue;\n }\n\n // Tek tarih kontrolü\n const date = this.parseDate(part);\n if (date) {\n this.conditions.push({\n type: 'date',\n date: date,\n });\n }\n }\n }\n }\n\n private parseDateForRange(\n dateString: string,\n isEndDate: boolean\n ): Date | null {\n if (!dateString) return null;\n\n // Özel anahtar kelimeler için tarih dönüşümü\n const normalizedString = dateString.toLowerCase();\n if (this.specialKeywords[normalizedString]) {\n const specialType = this.specialKeywords[normalizedString];\n const range = this.getSpecialDateRange(specialType);\n return isEndDate ? range.end : range.start;\n }\n\n return this.parseDate(dateString);\n }\n\n // Mevcut dili kontrol eden yardımcı metod\n private isTurkish(): boolean {\n const currentLang = this.i18nService.language.toLowerCase();\n return (\n currentLang === 'tr' ||\n currentLang === 'türkçe' ||\n currentLang === 'tr-tr'\n );\n }\n\n private parseDate(dateString: string): Date | null {\n if (!dateString) return null;\n\n // Mevcut dile göre formatları belirle\n const isTurkish = this.isTurkish();\n\n // Tarih formatları - ÖNCE saat içeren formatlar\n const formats = [\n // ISO format: YYYY-AA-GG SS:DD (her dilde aynı)\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2}) (\\d{1,2}):(\\d{2})$/,\n\n // Dile göre formatlar\n ...(isTurkish\n ? [\n // Türkçe format: GG.AA.YYYY SS:DD (., /, - ile)\n /^(\\d{1,2})[\\.\\/-](\\d{1,2})[\\.\\/-](\\d{4}) (\\d{1,2}):(\\d{2})$/,\n // Türkçe format: GG.AA.YYYY (., /, - ile)\n /^(\\d{1,2})[\\.\\/-](\\d{1,2})[\\.\\/-](\\d{4})$/,\n ]\n : [\n // İngilizce/USA format: AA/GG/YYYY SS:DD (/, ., - ile)\n /^(\\d{1,2})[\\/\\.-](\\d{1,2})[\\/\\.-](\\d{4}) (\\d{1,2}):(\\d{2})$/,\n // İngilizce/USA format: AA/GG/YYYY (/, ., - ile)\n /^(\\d{1,2})[\\/\\.-](\\d{1,2})[\\/\\.-](\\d{4})$/,\n ]),\n\n // Sadece tarih formatları (saat yok)\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/, // YYYY-AA-GG (ISO)\n ];\n\n for (const format of formats) {\n const match = dateString.match(format);\n if (match) {\n let year: number,\n month: number,\n day: number,\n hours: number = 0,\n minutes: number = 0;\n\n if (format === formats[0]) {\n // ISO: YYYY-AA-GG SS:DD\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n day = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (isTurkish && format === formats[1]) {\n // Türkçe: GG.AA.YYYY SS:DD\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (!isTurkish && format === formats[1]) {\n // İngilizce: AA/GG/YYYY SS:DD\n month = parseInt(match[1], 10) - 1;\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n hours = parseInt(match[4], 10);\n minutes = parseInt(match[5], 10);\n } else if (isTurkish && format === formats[2]) {\n // Türkçe: GG.AA.YYYY\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n } else if (!isTurkish && format === formats[2]) {\n // İngilizce: AA/GG/YYYY\n month = parseInt(match[1], 10) - 1;\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === formats[3]) {\n // ISO: YYYY-AA-GG\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n day = parseInt(match[3], 10);\n } else {\n continue;\n }\n\n // Tarih geçerlilik kontrolü\n const date = new Date(year, month, day, hours, minutes);\n if (\n date.getFullYear() === year &&\n date.getMonth() === month &&\n date.getDate() === day &&\n date.getHours() === hours &&\n date.getMinutes() === minutes\n ) {\n return date;\n }\n }\n }\n\n return null;\n }\n\n private getSpecialDateRange(special: string): { start: Date; end: Date } {\n const now = new Date();\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\n switch (special) {\n case 'today':\n const tomorrow = new Date(today);\n tomorrow.setDate(tomorrow.getDate() + 1);\n return { start: today, end: tomorrow };\n\n case 'yesterday':\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n const yesterdayEnd = new Date(yesterday);\n yesterdayEnd.setDate(yesterdayEnd.getDate() + 1);\n return { start: yesterday, end: yesterdayEnd };\n\n case 'thisWeek':\n const startOfWeek = new Date(today);\n startOfWeek.setDate(today.getDate() - today.getDay());\n const endOfWeek = new Date(startOfWeek);\n endOfWeek.setDate(startOfWeek.getDate() + 7);\n return { start: startOfWeek, end: endOfWeek };\n\n case 'thisMonth':\n const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);\n const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n return { start: startOfMonth, end: endOfMonth };\n\n default:\n return { start: today, end: today };\n }\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field;\n if (!field) return true;\n\n const cellValue = params.data ? params.data[field] : null;\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri null/undefined ise filtrele\n if (!cellValue) {\n return false;\n }\n\n // Hücre değerini Date'e dönüştür\n let cellDate: Date;\n if (cellValue instanceof Date) {\n cellDate = cellValue;\n } else if (typeof cellValue === 'string') {\n // String ise Date'e parse et\n cellDate = new Date(cellValue);\n if (isNaN(cellDate.getTime())) {\n return false; // Geçersiz tarih\n }\n } else {\n return false; // Desteklenmeyen tip\n }\n\n const cellTime = cellDate.getTime();\n\n // Koşullardan herhangi birini sağlıyor mu kontrol et\n return this.conditions.some((condition) => {\n switch (condition.type) {\n case 'date':\n if (!condition.date) return false;\n const conditionTime = condition.date.getTime();\n const nextDay = new Date(condition.date);\n nextDay.setDate(nextDay.getDate() + 1);\n return cellTime >= conditionTime && cellTime < nextDay.getTime();\n\n case 'range':\n if (!condition.start || !condition.end) return false;\n const startTime = condition.start.getTime();\n const endTime = condition.end.getTime();\n return cellTime >= startTime && cellTime < endTime;\n\n case 'special':\n if (!condition.special) return false;\n const range = this.getSpecialDateRange(condition.special);\n return (\n cellTime >= range.start.getTime() && cellTime < range.end.getTime()\n );\n\n default:\n return false;\n }\n });\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.parseFilterText(); // Modelden set ederken koşulları tekrar parse et\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@dateTimeFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@dateTimeFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\">\n {{ '@formats' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@range' | translate }}:\n <code>start..end</code>\n <span class=\"custom-filter__example\">(today..yesterday)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@singleDate' | translate }}:\n <code>YYYY-MM-DD</code>\n <span class=\"custom-filter__example\">(2024-05-15)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@dateTime' | translate }}:\n <code>YYYY-MM-DD HH:MM</code>\n <span class=\"custom-filter__example\">(2024-05-15 14:30)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>date1,date2,start..end</code>\n </div>\n\n <strong class=\"custom-filter__subtitle\">\n {{ '@specialKeywords' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@turkish' | translate }}:\n <span class=\"custom-filter__keywords\">\n <code class=\"custom-filter__keyword\">bugün</code>\n <code class=\"custom-filter__keyword\">dün</code>\n <code class=\"custom-filter__keyword\">bu hafta</code>\n <code class=\"custom-filter__keyword\">bu ay</code>\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@english' | translate }}:\n <span class=\"custom-filter__keywords\">\n <code class=\"custom-filter__keyword\">today</code>\n <code class=\"custom-filter__keyword\">yesterday</code>\n <code class=\"custom-filter__keyword\">thisWeek</code>\n <code class=\"custom-filter__keyword\">thisMonth</code>\n </span>\n </div>\n\n <div class=\"custom-filter__note\">{{ '@filterExample' | translate }}</div>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-number-filter',\n imports: [TranslateModule],\n templateUrl: './range-number-filter.html',\n styleUrl: './range-number-filter.scss',\n})\nexport class RangeNumberFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type: 'range' | 'value' | 'exclude';\n min?: number;\n max?: number;\n value?: number;\n }> = [];\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // Hariç tutma kontrolü (! ile başlıyor mu)\n if (part.startsWith('!')) {\n const excludePart = part.substring(1).trim();\n\n // Hariç tutma için aralık kontrolü\n if (excludePart.includes('..')) {\n const rangeParts = excludePart.split('..');\n\n if (rangeParts.length === 2) {\n const minStr = rangeParts[0].trim();\n const maxStr = rangeParts[1].trim();\n\n // !..10 formatı (max hariç)\n if (minStr === '' && maxStr !== '') {\n const max = Number(maxStr);\n if (!isNaN(max)) {\n this.conditions.push({\n type: 'exclude',\n min: -Infinity,\n max: max,\n });\n }\n }\n // !10.. formatı (min hariç)\n else if (minStr !== '' && maxStr === '') {\n const min = Number(minStr);\n if (!isNaN(min)) {\n this.conditions.push({\n type: 'exclude',\n min: min,\n max: Infinity,\n });\n }\n }\n // !min..max formatı (aralık hariç)\n else if (minStr !== '' && maxStr !== '') {\n const min = Number(minStr);\n const max = Number(maxStr);\n if (!isNaN(min) && !isNaN(max)) {\n this.conditions.push({\n type: 'exclude',\n min: Math.min(min, max),\n max: Math.max(min, max),\n });\n }\n }\n }\n } else {\n // Tek değer hariç tutma\n const value = Number(excludePart);\n if (!isNaN(value)) {\n this.conditions.push({\n type: 'exclude',\n value: value,\n });\n }\n }\n }\n // Aralık kontrolü (.. içeriyor mu)\n else if (part.includes('..')) {\n const rangeParts = part.split('..');\n\n if (rangeParts.length === 2) {\n const minStr = rangeParts[0].trim();\n const maxStr = rangeParts[1].trim();\n\n // ..10 formatı (max belirtilmiş)\n if (minStr === '' && maxStr !== '') {\n const max = Number(maxStr);\n if (!isNaN(max)) {\n this.conditions.push({\n type: 'range',\n min: -Infinity,\n max: max,\n });\n }\n }\n // 10.. formatı (min belirtilmiş)\n else if (minStr !== '' && maxStr === '') {\n const min = Number(minStr);\n if (!isNaN(min)) {\n this.conditions.push({\n type: 'range',\n min: min,\n max: Infinity,\n });\n }\n }\n // min..max formatı\n else if (minStr !== '' && maxStr !== '') {\n const min = Number(minStr);\n const max = Number(maxStr);\n if (!isNaN(min) && !isNaN(max)) {\n this.conditions.push({\n type: 'range',\n min: Math.min(min, max),\n max: Math.max(min, max),\n });\n }\n }\n }\n } else {\n // Tek değer kontrolü\n const value = Number(part);\n if (!isNaN(value)) {\n this.conditions.push({\n type: 'value',\n value: value,\n });\n }\n }\n }\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const cellValue = this.params.getValue(params.node);\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri null/undefined ise veya sayı değilse filtrele\n if (cellValue == null || typeof cellValue !== 'number') {\n return false;\n }\n\n // VİRGÜL OR MANTIĞI: Koşullardan herhangi biri sağlanıyorsa true döndür\n const passesAnyCondition = this.conditions.some((condition) => {\n if (\n condition.type === 'range' &&\n condition.min !== undefined &&\n condition.max !== undefined\n ) {\n // Aralık koşulu: değer aralık içinde olmalı\n return cellValue >= condition.min && cellValue <= condition.max;\n } else if (condition.type === 'value' && condition.value !== undefined) {\n // Değer koşulu: değer eşit olmalı\n return cellValue === condition.value;\n } else if (condition.type === 'exclude') {\n if (condition.value !== undefined) {\n // Tek değer hariç tutma: değer eşit olmamalı\n return cellValue !== condition.value;\n } else if (condition.min !== undefined && condition.max !== undefined) {\n // Aralık hariç tutma: değer aralık dışında olmalı\n return !(cellValue >= condition.min && cellValue <= condition.max);\n }\n }\n return false;\n });\n\n return passesAnyCondition;\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.conditions = model.conditions || [];\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@numberFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@numberFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\"\n >{{ '@formats' | translate }}:</strong\n >\n\n <div class=\"custom-filter__format\">\n {{ '@closedRange' | translate }}:\n <code>min..max</code>\n <span class=\"custom-filter__example\">(0..5)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@equalOrGreater' | translate }}:\n <code>min..</code>\n <span class=\"custom-filter__example\">(5..)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@equalOrLess' | translate }}:\n <code>..max</code>\n <span class=\"custom-filter__example\">(..10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@singleValue' | translate }}:\n <code>number</code>\n <span class=\"custom-filter__example\">(10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@exclusion' | translate }}:\n <code>!number</code>\n <span class=\"custom-filter__example\">(!5)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@rangeExclusion' | translate }}:\n <code>!min..max</code>\n <span class=\"custom-filter__example\">(!5..10)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>value1,value2,range</code>\n </div>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { IFilterAngularComp } from 'ag-grid-angular';\nimport { IDoesFilterPassParams, IFilterParams } from 'ag-grid-community';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@Component({\n selector: 'ntybase-range-string-filter',\n imports: [TranslateModule],\n templateUrl: './range-string-filter.html',\n styleUrl: './range-string-filter.scss',\n})\nexport class RangeStringFilter implements IFilterAngularComp {\n private params!: IFilterParams;\n public filterText: string = '';\n private conditions: Array<{\n type:\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'range'\n | 'singleChar'\n | 'not'\n | 'regex'\n | 'exact';\n value?: string;\n start?: string;\n end?: string;\n condition?: any;\n pattern?: string;\n }> = [];\n\n agInit(params: IFilterParams): void {\n this.params = params;\n }\n\n onFilterTextChanged(event: any): void {\n this.filterText = event.target.value;\n this.parseFilterText();\n this.params.filterChangedCallback();\n }\n\n private parseFilterText(): void {\n this.conditions = [];\n\n if (!this.filterText.trim()) {\n return;\n }\n\n const parts = this.filterText\n .split(',')\n .map((part) => part.trim())\n .filter((part) => part !== '');\n\n for (const part of parts) {\n // \"!\" ile başlayan olumsuz koşul kontrolü\n if (part.startsWith('!')) {\n const positiveCondition = part.slice(1);\n const positiveParsed = this.parseSingleCondition(positiveCondition);\n if (positiveParsed) {\n this.conditions.push({\n type: 'not',\n condition: positiveParsed,\n });\n }\n continue;\n }\n\n const parsedCondition = this.parseSingleCondition(part);\n if (parsedCondition) {\n this.conditions.push(parsedCondition);\n }\n }\n }\n\n private parseSingleCondition(condition: string): any {\n // Regex kontrolü ($$ ile başlıyorsa)\n if (condition.startsWith('$$')) {\n const regexPattern = condition.slice(2);\n if (regexPattern) {\n return {\n type: 'regex',\n pattern: regexPattern,\n };\n }\n }\n\n // Aralık kontrolü (.. içeriyor mu) - ama $$.. şeklinde değilse\n if (condition.includes('..') && !condition.startsWith('$$')) {\n const rangeParts = condition.split('..');\n if (rangeParts.length === 2) {\n const start = rangeParts[0].trim();\n const end = rangeParts[1].trim();\n if (start && end) {\n return {\n type: 'range',\n start: start.toLowerCase(),\n end: end.toLowerCase(),\n };\n }\n }\n }\n // Tek karakter kontrolü (? ile)\n else if (condition.includes('?') && !condition.startsWith('$$')) {\n // Eğer sadece normal karakterler varsa (özel karakter yoksa) exact match\n const hasSpecialChars =\n condition.includes('*') ||\n condition.includes('?') ||\n condition.includes('..');\n\n if (!hasSpecialChars) {\n return {\n type: 'exact',\n value: condition.toLowerCase(),\n };\n }\n\n // ? karakteri içeriyorsa singleChar kontrolü\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'singleChar',\n value: value,\n };\n }\n }\n // Başlangıç kontrolü (* sonunda)\n else if (\n condition.endsWith('*') &&\n !condition.startsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(0, -1).toLowerCase();\n if (value) {\n return {\n type: 'startsWith',\n value: value,\n };\n }\n }\n // Bitiş kontrolü (* başında)\n else if (\n condition.startsWith('*') &&\n !condition.endsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(1).toLowerCase();\n if (value) {\n return {\n type: 'endsWith',\n value: value,\n };\n }\n }\n // İçeren kontrolü (* ile başlayıp * ile bitiyorsa)\n else if (\n condition.startsWith('*') &&\n condition.endsWith('*') &&\n !condition.startsWith('$$')\n ) {\n const value = condition.slice(1, -1).toLowerCase();\n if (value) {\n return {\n type: 'contains',\n value: value,\n };\n }\n }\n // Normal exact match (hiçbir özel karakter yoksa)\n else if (\n !condition.startsWith('$$') &&\n !condition.includes('*') &&\n !condition.includes('?') &&\n !condition.includes('..')\n ) {\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'exact',\n value: value,\n };\n }\n }\n // Normal içeren kontrolü (varsayılan) - regex değilse\n else if (!condition.startsWith('$$')) {\n const value = condition.toLowerCase();\n if (value) {\n return {\n type: 'contains',\n value: value,\n };\n }\n }\n\n return null;\n }\n\n doesFilterPass(params: IDoesFilterPassParams): boolean {\n const field = this.params.colDef.field;\n if (!field) return true;\n\n const cellValue = params.data\n ? String(params.data[field] || '').toLowerCase()\n : '';\n\n // Eğer filtre yoksa tüm satırları göster\n if (this.conditions.length === 0) {\n return true;\n }\n\n // Hücre değeri boşsa filtrele\n if (!cellValue) {\n return false;\n }\n\n // VİRGÜL OR MANTIĞI: Koşullardan herhangi biri sağlanıyorsa true döndür\n return this.conditions.some((condition) => {\n const conditionResult = this.checkSingleCondition(cellValue, condition);\n return condition.type === 'not' ? !conditionResult : conditionResult;\n });\n }\n\n private checkSingleCondition(cellValue: string, condition: any): boolean {\n switch (condition.type) {\n case 'contains':\n return condition.value ? cellValue.includes(condition.value) : false;\n\n case 'startsWith':\n return condition.value ? cellValue.startsWith(condition.value) : false;\n\n case 'endsWith':\n return condition.value ? cellValue.endsWith(condition.value) : false;\n\n case 'exact':\n return condition.value ? cellValue === condition.value : false;\n\n case 'range':\n if (condition.start && condition.end) {\n return cellValue >= condition.start && cellValue <= condition.end;\n }\n return false;\n\n case 'singleChar':\n if (condition.value) {\n // ? karakterini herhangi bir karakter olarak değerlendir\n const pattern = condition.value;\n if (cellValue.length !== pattern.length) {\n return false;\n }\n\n // Her karakteri tek tek kontrol et\n for (let i = 0; i < pattern.length; i++) {\n const patternChar = pattern[i];\n const cellChar = cellValue[i];\n\n // Eğer pattern'de ? değilse ve karakterler eşleşmiyorsa false\n if (patternChar !== '?' && patternChar !== cellChar) {\n return false;\n }\n }\n return true;\n }\n return false;\n\n case 'regex':\n if (condition.pattern) {\n try {\n const regex = new RegExp(condition.pattern, 'i'); // case-insensitive\n return regex.test(cellValue);\n } catch (e) {\n // Geçersiz regex patterni durumunda false döndür\n console.warn('Geçersiz regex patterni:', condition.pattern);\n return false;\n }\n }\n return false;\n\n case 'not':\n return this.checkSingleCondition(cellValue, condition.condition);\n\n default:\n return false;\n }\n }\n\n isFilterActive(): boolean {\n return this.conditions.length > 0;\n }\n\n getModel(): any {\n if (this.isFilterActive()) {\n return {\n filterType: 'custom',\n filterText: this.filterText,\n conditions: this.conditions,\n };\n }\n return null;\n }\n\n setModel(model: any): void {\n if (model && model.filterText) {\n this.filterText = model.filterText;\n this.conditions = model.conditions || [];\n } else {\n this.filterText = '';\n this.conditions = [];\n }\n }\n}\n","<div class=\"custom-filter\">\n <div class=\"custom-filter__header\">\n <label class=\"custom-filter__title\">\n {{ '@stringFilter' | translate }}\n </label>\n <input\n type=\"text\"\n class=\"custom-filter__input\"\n [placeholder]=\"'@stringFilterPlaceholder' | translate\"\n [value]=\"filterText\"\n (input)=\"onFilterTextChanged($event)\"\n />\n </div>\n\n <div class=\"custom-filter__help\">\n <strong class=\"custom-filter__help-title\">\n {{ '@formats' | translate }}:\n </strong>\n\n <div class=\"custom-filter__format\">\n {{ '@exactMatch' | translate }}:\n <code>text</code>\n <span class=\"custom-filter__example\">(ahmet)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@startsWith' | translate }}:\n <code>text*</code>\n <span class=\"custom-filter__example\">(ahmet*)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@endsWith' | translate }}:\n <code>*text</code>\n <span class=\"custom-filter__example\">(*metin)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@contains' | translate }}:\n <code>*text*</code>\n <span class=\"custom-filter__example\">(*ahmet*)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@range' | translate }}:\n <code>start..end</code>\n <span class=\"custom-filter__example\">(ali..veli)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n <span class=\"custom-filter__description\">\n {{ '@singleCharacter' | translate }}:\n </span>\n <code>?em</code>\n <span class=\"custom-filter__example\">\n (?em = 3 characters, 2nd and 3rd letters \"em\")\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n <span class=\"custom-filter__description\">\n {{ '@multipleCharacters' | translate }}:\n </span>\n <code>???in</code>\n <span class=\"custom-filter__example\">\n (5 characters, last 2 letters \"in\")\n </span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@not' | translate }}:\n <code>!condition</code>\n <span class=\"custom-filter__example\">(!*ahmet*, !?hmet)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@regex' | translate }}:\n <code>$$pattern</code>\n <span class=\"custom-filter__example\">($$^[A-Z].*, $$a.*b)</span>\n </div>\n\n <div class=\"custom-filter__format\">\n {{ '@multiple' | translate }}:\n <code>value1,value2,*end,$$pattern</code>\n </div>\n </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport {\n ActivatedRouteSnapshot,\n RouterStateSnapshot,\n Router,\n CanActivate,\n} from '@angular/router';\nimport { CredentialsService } from '../services/credentials-service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthenticationGuard implements CanActivate {\n private router = inject(Router);\n private credentialsService = inject(CredentialsService);\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): boolean {\n if (this.credentialsService.isAuthenticated()) {\n return true;\n }\n if (state.url.includes('login')) {\n this.router.navigate([state.url], { replaceUrl: false });\n } else {\n this.router.navigate(['/login'], {\n queryParams: { redirect: state.url },\n replaceUrl: true,\n });\n }\n return false;\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn, HttpResponse } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { of, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { CredentialsService } from '../services/credentials-service';\nimport { UrlHelperService } from '../services/url-helper-service';\n\n/**\n * Nty Authentication Interceptor. This interceptor is used to intercept HTTP requests and add authentication headers.\n * It's coded as functional interceptor for better performance.\n * @param req \n * @param next \n * @returns \n */\nexport const ntyAuthenticationInterceptor: HttpInterceptorFn = (req, next) => {\n const router = inject(Router);\n const credentialsService = inject(CredentialsService);\n const environmentProxy = inject(EnvironmentProxy);\n const urlHelperService = inject(UrlHelperService);\n\n if (req.headers.get('No-Auth') == 'True') return next(req.clone());\n\n let token: string | null = credentialsService.token;\n\n if (token != null) {\n let appName = environmentProxy.getApplicationName();\n const clonedreq = req.clone({\n headers: req.headers.set('Authorization', 'Bearer ' + token)\n // .set(\"NettyAppName\",appName)\n });\n return next(clonedreq).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n router.navigate(['/login'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n router.navigate(['/forbidden'], {\n state: { attemptedUrl: router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n } else {\n return next(req.clone()).pipe(\n catchError((error: any) => {\n if (error instanceof HttpErrorResponse && error.status === 401) {\n // Handle 401 error, e.g., navigate to the login page\n router.navigate(['/login'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 403) {\n router.navigate(['/forbidden'], {\n state: { attemptedUrl: router.url }, // Orijinal URL'i state olarak geçme\n });\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n if (error instanceof HttpErrorResponse && error.status === 428) {\n // Handle 428 error, e.g., navigate to the login page\n router.navigate(['/mfalogin'], {\n queryParams: {\n redirect: urlHelperService.cleanUrl(router.url),\n },\n replaceUrl: true,\n });\n // Return an observable with a successful response\n return of(\n new HttpResponse({ status: 200, body: { message: 'Success' } })\n );\n }\n // For other errors, re-throw the error to propagate it further\n return throwError(() => error);\n })\n );\n }\n};\n","export class LoginDto {\n userName: string = '';\n password: string = '';\n application: string = '';\n\n public constructor(\n _userName?: string,\n _password?: string,\n _application?: string\n ) {\n this.userName = _userName ?? '';\n this.password = _password ?? '';\n this.application = _application ?? '';\n }\n}\n","export class MFACodeDto {\n sid: any = '';\n mfacode: string = '';\n\n public constructor(_sid: any, _mfacode: string) {\n this.sid = _sid;\n this.mfacode = _mfacode;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, map, take } from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials-service';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { LoginContext } from '../models/login-context';\nimport { MFACodeContext } from '../models/mfa-code-context';\nimport { LoginDto } from '../models/login-dto';\nimport { Buffer } from 'buffer';\nimport { MFACodeDto } from '../models/mfa-code-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthenticationService {\n private credentialsService = inject(CredentialsService);\n private environmentProxy = inject(EnvironmentProxy);\n private http = inject(HttpClient);\n\n static counter: number = 0;\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n\n login(context: LoginContext): Observable<Credentials> {\n // Prepare Connection URL\n let loginUrl = this.environmentProxy.getAdminLink('Login');\n\n let loginDto = new LoginDto(\n context.username,\n context.password,\n this.environmentProxy.getApplicationName()\n );\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let loginCall$ = this.http.post(loginUrl, loginDto, {\n headers: reqHeader,\n });\n\n // Return an observable for the connection which has pipes to\n // process the incoming data before passing it to the caller\n // This process maps the incoming data into Credentials format\n // and saves the credentials into localstorage\n return loginCall$.pipe(\n map((record) => {\n let token: string = record.toString();\n let decodedToken: any = this.decodeToken(token);\n let data: Credentials = {\n username: context.username,\n token: token,\n role: this.getClaim(\n decodedToken,\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role'\n ),\n authenticationMethod: this.getClaim(\n decodedToken,\n 'http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod'\n ),\n sid: this.getClaim(\n decodedToken,\n 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid'\n ),\n };\n // Parse JWT\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n switch (error.status) {\n case '404':\n if (AuthenticationService.counter == 0) {\n AuthenticationService.counter++;\n return this.login(context);\n }\n break;\n case '415':\n case '500':\n errorMessage =\n error.status + ' ' + (error.error?.detail ?? error.message ?? '');\n break;\n default:\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n break;\n }\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n\n /** Parse the claim sections of the given JWT token\n *\n * @param token Token to parse\n * @returns\n */\n public decodeToken(token: string): any {\n let parts = token.split('.');\n let decodedTokenStr = Buffer.from(parts[1], 'base64').toString();\n let decodedToken = JSON.parse(decodedTokenStr);\n // console.log('decoded Token:', decodedToken);\n return decodedToken;\n }\n /** Get the claim data from the given token claim json\n *\n * @param decodedToken\n * @param claimKey\n * @returns\n */\n public getClaim(decodedToken: any, claimKey: string): any {\n try {\n return decodedToken ? decodedToken[claimKey] : null;\n } catch (error) {\n return null;\n }\n }\n\n mfaLogin(context: MFACodeContext): Observable<boolean> {\n // Prepare Connection URL\n let mfaCodeUrl = this.environmentProxy.getAdminLink('ValidateMFACode');\n let credentials = this.credentialsService.getCredentials();\n let mfaCodeDto = new MFACodeDto(credentials.sid, context.mfaCode);\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let mfaCodeCall$ = this.http.post(mfaCodeUrl, mfaCodeDto, {\n headers: reqHeader,\n });\n return mfaCodeCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n resendMFACode(context: MFACodeContext): Observable<string> {\n // Prepare Connection URL\n let mfaCodeUrl = this.environmentProxy.getAdminLink('ResendMFACode');\n let credentials = this.credentialsService.getCredentials();\n let mfaCodeDto = new MFACodeDto(credentials.sid, context.mfaCode);\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let resendMFACodeCall$ = this.http.post(mfaCodeUrl, mfaCodeDto, {\n headers: reqHeader,\n });\n console.log('mfaCodeUrl', mfaCodeUrl);\n return resendMFACodeCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\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 // Customize credentials invalidation here\n this.credentialsService.setCredentials();\n //localStorage.clear();\n return of(true);\n }\n\n /** Send a pasword reset e-mail\n *\n * @param context\n * @returns\n */\n forgotPassword(context: LoginContext): Observable<string> {\n // Prepare Connection URL\n let loginUrl = this.environmentProxy.getAdminLink('ForgotPassword');\n let loginDto = new LoginDto(\n context.username,\n '',\n this.environmentProxy.getApplicationName()\n );\n let reqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n let loginCall$ = this.http.post(loginUrl, loginDto, { headers: reqHeader });\n // Return an observable for the connection which has pipes to\n // process the incoming data before passing it to the caller\n // This process maps the incoming data into Credentials format\n // and saves the credentials into localstorage\n return loginCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n\n public getAdminLink(path: string = ''): string {\n return this.environmentProxy.getAdminLink(path);\n }\n}\n","import { Component, inject, model, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { Subject } from 'rxjs';\nimport { AlertService } from '../../../alert/services/alert-service';\nimport { UrlHelperService } from '../../services/url-helper-service';\n\n@Component({\n selector: 'ntybase-auth-base',\n imports: [],\n templateUrl: './auth-base.html',\n styleUrl: './auth-base.scss',\n})\nexport abstract class AuthBase implements OnDestroy {\n // Inject dependencies\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected environmentProxy = inject(EnvironmentProxy);\n protected i18nService = inject(I18nService);\n protected alertService = inject(AlertService);\n protected urlHelperService = inject(UrlHelperService);\n\n protected onDestroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n //Called once, before the instance is destroyed.\n //Add 'implements OnDestroy' to the class.\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n // Language\n icon = model(false);\n\n get currentLanguage(): string {\n return this.i18nService.language;\n }\n\n get languages(): string[] {\n return this.i18nService.supportedLanguages;\n }\n\n setLanguage(language: string) {\n this.i18nService.language = language;\n window.location.reload();\n }\n\n getCurrentLanguageIcon(): string {\n switch (this.i18nService.language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n\n getLanguageIcon(language: string): string {\n switch (language) {\n case 'Türkçe':\n return 'fi fi-tr';\n case 'English':\n return 'fi fi-us';\n default:\n return 'fi fi-tr';\n }\n }\n}\n","<p>auth-base works!</p>\n","import { Component, inject, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { finalize } from 'rxjs';\nimport { LoginContext } from '../../auth/models/login-context';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-login',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n TranslateModule,\n ],\n templateUrl: './login.html',\n styleUrl: './login.scss',\n})\nexport class Login extends AuthBase {\n // Inject dependencies\n private authService = inject(AuthenticationService);\n private formBuilder = inject(FormBuilder);\n\n loginForm: FormGroup = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required],\n remember: [false],\n });\n\n version = signal<string | null>(null);\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n\n credentials: LoginContext = {\n username: '',\n password: '',\n remember: false,\n };\n\n ngOnInit() {\n this.icon.set(true);\n this.authService.getAdminLink('Login');\n this.timeout(500).then(() => this.authService.getAdminLink('Login'));\n this.loadRememberedUsername();\n this.checkVersion();\n }\n\n timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private checkVersion(): void {\n // Version değerini al\n let version = localStorage.getItem('version');\n\n // Eğer version yoksa veya '?.?' ise, authService'den yüklemesini bekle\n if (!version || version === '?.?') {\n // 1 saniye sonra tekrar kontrol et\n setTimeout(() => {\n version = localStorage.getItem('version');\n if (version && version !== '?.?') {\n this.version.set(version);\n } else {\n // Hala yoksa null olarak bırak (gizle)\n this.version.set(null);\n }\n }, 300);\n } else {\n // Version varsa direkt göster\n this.version.set(version);\n }\n }\n\n private handleRememberMe(): void {\n const formValues = this.loginForm.value;\n\n try {\n if (formValues.remember) {\n localStorage.setItem('remembered_username', formValues.username);\n localStorage.setItem('remember_me', 'true');\n } else {\n localStorage.removeItem('remembered_username');\n localStorage.removeItem('remember_me');\n }\n } catch (error) {\n console.error('Error handling remember me:', error);\n }\n }\n\n private loadRememberedUsername(): void {\n try {\n const rememberedUsername = localStorage.getItem('remembered_username');\n const rememberMe = localStorage.getItem('remember_me') === 'true';\n\n if (rememberedUsername && rememberMe) {\n this.loginForm.patchValue({\n username: rememberedUsername,\n remember: true,\n });\n }\n } catch (error) {\n console.error('Error loading remembered username:', error);\n }\n }\n\n login(): void {\n this.isLoading.set(true);\n\n // Get the form values\n const formValues = this.loginForm.value;\n\n this.handleRememberMe();\n\n this.authService\n .login(formValues) // Use the form values directly\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n })\n )\n .subscribe({\n next: (credentials) => {\n try {\n let redirectUrl: string = '/mfalogin';\n\n if (credentials.authenticationMethod === 'NONE') {\n redirectUrl = this.route.snapshot.queryParams['redirect'] || '/';\n redirectUrl = this.urlHelperService.cleanUrl(redirectUrl);\n }\n\n this.urlHelperService\n .navigate(redirectUrl)\n .catch(() => this.router.navigate(['/'], { replaceUrl: true }));\n } catch (error) {\n this.router.navigate(['/'], { replaceUrl: true });\n }\n },\n error: (error: Error) => {\n const errorMessage = error.message || '@loginFailed';\n this.error.set(errorMessage); // Set the error signal\n this.alertService.showError(errorMessage);\n },\n });\n }\n\n onForgotPassword() {\n this.isLoading.set(true);\n const forgotPassword$ = this.authService.forgotPassword(\n this.loginForm.value\n );\n\n forgotPassword$\n .pipe(\n finalize(() => {\n this.loginForm.markAsPristine();\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (message: string) => {\n this.alertService.showSuccess(message);\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form (ngSubmit)=\"login()\" [formGroup]=\"loginForm\" novalidate>\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"username\">{{'@username' | translate}}</label>\n <input\n type=\"text\"\n id=\"username\"\n formControlName=\"username\"\n [placeholder]=\"'@username' | translate\"\n required\n />\n @if (loginForm.controls['username'].invalid &&\n loginForm.controls['username'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'username is required' | translate }}\n </mat-error>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"password\">{{'@password' | translate}}</label>\n <input\n type=\"password\"\n id=\"password\"\n formControlName=\"password\"\n [placeholder]=\"'@password' | translate\"\n required\n />\n @if (loginForm.controls['password'].invalid &&\n loginForm.controls['password'].touched) {\n <div class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </div>\n }\n </div>\n\n <div class=\"form-group remember\">\n <input type=\"checkbox\" id=\"remember\" formControlName=\"remember\" />\n <label for=\"remember\">{{ '@rememberMe' | translate }}</label>\n <a class=\"forgot-password\" (click)=\"onForgotPassword()\"\n >{{ '@forgotPassword' | translate }}</a\n >\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"loginForm.invalid || isLoading()\"\n >\n {{ '@login' | translate }}\n </button>\n </form>\n } @else {\n <div class=\"loading-spinner\">\n <span>{{ '@loggingIn' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n @if(version() && version() !== '?.?'){\n <div class=\"version\">{{ version() }}</div>\n }\n </div>\n </div>\n</div>\n","import { Component, inject, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { finalize } from 'rxjs';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-mfa-login',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n TranslateModule\n],\n templateUrl: './mfa-login.html',\n styleUrl: './mfa-login.scss',\n})\nexport class MfaLogin extends AuthBase {\n // Inject dependencies\n private authService = inject(AuthenticationService);\n private formBuilder = inject(FormBuilder);\n\n // Component state\n version: string | null = this.environmentProxy.version();\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n resendable = signal(false);\n startFrom = signal(120);\n remainingTime = signal(0);\n private countdownInterval: any;\n\n loginForm: FormGroup = this.formBuilder.group({\n mfaCode: ['', Validators.required],\n });\n\n ngOnInit() {\n this.icon.set(true);\n this.startCountdown(this.startFrom());\n }\n\n startCountdown(seconds: number) {\n clearInterval(this.countdownInterval);\n this.remainingTime.set(seconds);\n this.resendable.set(false);\n\n this.countdownInterval = setInterval(() => {\n this.remainingTime.update((t) => {\n const newTime = t - 1;\n if (newTime <= 0) {\n clearInterval(this.countdownInterval);\n this.resendable.set(true);\n return 0;\n }\n return newTime;\n });\n }, 1000);\n }\n\n getFormattedTime(): string {\n const mins = Math.floor(this.remainingTime() / 60);\n const secs = this.remainingTime() % 60;\n return `${mins}:${secs < 10 ? '0' + secs : secs}`;\n }\n\n login(): void {\n if (this.resendable()) {\n this.error.set('MFACode expired. Please request a new one.');\n return;\n }\n this.isLoading.set(true);\n this.authService\n .mfaLogin(this.loginForm.value)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n })\n )\n .subscribe({\n next: (credentials) => {\n if (credentials) {\n try {\n let redirectUrl: string =\n this.route.snapshot.queryParams['redirect'] || '/';\n redirectUrl = this.urlHelperService.cleanUrl(redirectUrl);\n this.urlHelperService\n .navigate(redirectUrl)\n .catch(() => this.router.navigate(['/'], { replaceUrl: true }));\n } catch (error) {\n this.router.navigate(['/'], { replaceUrl: true });\n }\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n\n onResendMFACode(): void {\n this.startFrom.set(121);\n this.authService\n .resendMFACode(this.loginForm.value)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n this.loginForm.markAsPristine();\n this.startCountdown(120);\n })\n )\n .subscribe({\n next: (message: string) => {\n this.startFrom.set(120);\n if (message.length > 0) {\n this.alertService.showAlert('', message);\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n\n override ngOnDestroy() {\n clearInterval(this.countdownInterval);\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form (ngSubmit)=\"login()\" [formGroup]=\"loginForm\" novalidate>\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"mfaCode\">{{'mfaCode' | translate}}</label>\n <input\n type=\"text\"\n id=\"mfaCode\"\n formControlName=\"mfaCode\"\n [placeholder]=\"'mfaCode' | translate\"\n required\n />\n @if (loginForm.controls['mfaCode'].invalid &&\n loginForm.controls['mfaCode'].touched) {\n <div class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'mfaCode is required' | translate }}\n </div>\n }\n\n <!-- Time -->\n @if (!resendable()) {\n <div class=\"time-remaining\">\n {{ '@tokenCount' | translate }}: {{ getFormattedTime() }}\n </div>\n }\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"loginForm.invalid || isLoading() || !resendable()\"\n >\n {{ '@login' | translate }}\n </button>\n\n @if (resendable()) {\n <div class=\"resend-container\">\n <span (click)=\"onResendMFACode()\" class=\"resend-link\">\n {{ 'resend MFACode' | translate }}\n </span>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading-spinner\">\n <span>{{ '@loggingIn' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n</div>\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, catchError, map, take, throwError } from 'rxjs';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NewPasswordDto } from '../models/new-password-dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PasswordProxy {\n protected noAuthReqHeader: HttpHeaders;\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n constructor() {\n this.noAuthReqHeader = new HttpHeaders({\n 'Content-Type': 'application/json',\n 'No-Auth': 'True',\n });\n }\n /** Get forgot password record with the given recordGUID, if its still valid.\n *\n * @param recordGUID\n * @returns\n */\n getForgotPasswordRecord(recordGUID: any): Observable<any> {\n let functionUrl = this.environmentProxy.getAdminLink(\n 'GetForgotPasswordRecord'\n );\n return this.http.get(functionUrl + '/' + recordGUID, {\n headers: this.noAuthReqHeader,\n });\n }\n /** Send reset password request for password change\n *\n * @param newPasswordDto\n * @returns\n */\n resetPassword(newPasswordDto: NewPasswordDto): Observable<boolean> {\n let resetPasswordUrl = this.environmentProxy.getAdminLink('UpdatePassword');\n let resertPasswordCall$ = this.http.post(resetPasswordUrl, newPasswordDto, {\n headers: this.noAuthReqHeader,\n });\n return resertPasswordCall$.pipe(\n map((message: any) => {\n return message;\n }),\n take(1),\n catchError((error) => {\n let errorMessage: string = '';\n errorMessage =\n error.status +\n ' ' +\n (error?.error?.title ?? error?.message ?? error ?? 'Error.');\n return throwError(() => new Error(errorMessage ?? ''));\n })\n );\n }\n}\n","export class ForgotPasswordDto {\n nettyPasswordChangeGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = null;\n nettyUserFullName: string | null = null;\n nettyValidUntil: Date | null = null;\n nettyEMailParametersGUID: any | null = null;\n nettyIsUsed: boolean | null = null;\n nettyUsedDate: Date | null = null;\n\n init(): void {\n this.nettyPasswordChangeGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.nettyUserFullName = '';\n this.nettyValidUntil = null;\n this.nettyEMailParametersGUID = null;\n this.nettyIsUsed = true;\n this.nettyUsedDate = null;\n }\n}\n","export class NewPasswordDto {\n nettyPasswordChangeGUID: any | null = null;\n nettyUserGUID: any | null = null;\n nettyUserName: string | null = '';\n password: string | null = '';\n passwordCheck: string | null = '';\n\n init(): void {\n this.nettyPasswordChangeGUID = null;\n this.nettyUserGUID = null;\n this.nettyUserName = '';\n this.password = '';\n this.passwordCheck = '';\n }\n constructor() {}\n static create(\n _nettyUserGUID: any,\n _nettyPasswordChangeGUID: any,\n _password: string,\n _passwordCheck: string\n ): NewPasswordDto {\n let obj: NewPasswordDto = new NewPasswordDto();\n obj.nettyUserGUID = _nettyUserGUID;\n obj.nettyPasswordChangeGUID = _nettyPasswordChangeGUID;\n obj.password = _password;\n obj.passwordCheck = _passwordCheck;\n return obj;\n }\n}\n","import { Component, inject, OnInit, signal } from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n FormBuilder,\n Validators,\n} from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { finalize, takeUntil } from 'rxjs';\nimport { PasswordProxy } from '../services/password-proxy';\nimport { ForgotPasswordDto } from '../models/forgot-password-dto';\nimport { NewPasswordDto } from '../models/new-password-dto';\nimport { AuthBase } from '../base-components/auth-base/auth-base';\n\n@Component({\n selector: 'ntybase-forgot-password',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n MatMenuModule,\n MatIconModule,\n MatInputModule,\n MatFormFieldModule,\n TranslateModule\n],\n templateUrl: './forgot-password.html',\n styleUrl: './forgot-password.scss',\n})\nexport class ForgotPassword extends AuthBase implements OnInit {\n // Inject dependencies\n private formBuilder = inject(FormBuilder);\n private passwordService = inject(PasswordProxy);\n\n version: string | null = this.environmentProxy.version();\n isLoading = signal(false);\n error = signal<string | undefined>(undefined);\n updatePasswordForm: FormGroup;\n\n //URL parameters\n protected urlOption: string | null = null;\n protected forgotPasswordRecord: ForgotPasswordDto = new ForgotPasswordDto();\n\n constructor() {\n super();\n this.updatePasswordForm = this.formBuilder.group({\n username: [{ value: '', disabled: true }, Validators.required],\n newPassword: ['', Validators.required],\n newPasswordCheck: ['', Validators.required],\n });\n }\n\n ngOnInit() {\n this.route.paramMap.pipe(takeUntil(this.onDestroy$)).subscribe((params) => {\n this.urlOption = params.get('requestguid');\n this.getData();\n });\n }\n\n getData() {\n this.isLoading.set(true);\n this.passwordService\n .getForgotPasswordRecord(this.urlOption)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (data: ForgotPasswordDto) => {\n this.isLoading.set(false);\n this.updatePasswordForm.get('username')?.setValue(data.nettyUserName);\n this.forgotPasswordRecord = data;\n },\n error: (error: Error) => {\n this.alertService.showError(error.message);\n },\n });\n }\n\n updatePassword() {\n let newPasswordDto: NewPasswordDto = NewPasswordDto.create(\n this.forgotPasswordRecord.nettyUserGUID,\n this.forgotPasswordRecord.nettyPasswordChangeGUID,\n this.updatePasswordForm.get('newPassword')?.value,\n this.updatePasswordForm.get('newPasswordCheck')?.value\n );\n\n this.isLoading.set(true);\n this.passwordService\n .resetPassword(newPasswordDto)\n .pipe(\n finalize(() => {\n this.isLoading.set(false);\n })\n )\n .subscribe({\n next: (result: boolean) => {\n if (result) {\n this.alertService.showSuccess('@PasswordChangeSuccess');\n this.router.navigate(['/login']);\n }\n },\n error: (error: Error) => {\n this.error.set(error.message);\n },\n });\n }\n}\n","<div class=\"login-page-container\">\n <div class=\"login-image-container\"></div>\n\n <div class=\"login-container glass-effect\">\n <!-- Language Button -->\n <div class=\"language-toggle\">\n @if (icon()) {\n <button mat-icon-button [matMenuTriggerFor]=\"languageMenu\">\n <span class=\"{{ getCurrentLanguageIcon() }}\"></span>\n </button>\n } @else {\n <button\n mat-raised-button\n color=\"primary\"\n [matMenuTriggerFor]=\"languageMenu\"\n >\n {{ currentLanguage }}\n </button>\n }\n </div>\n\n <h2>{{'app_name' | translate }}</h2>\n\n <!-- Language Menu -->\n <mat-menu #languageMenu=\"matMenu\">\n @for (language of languages; track language) {\n <button mat-menu-item (click)=\"setLanguage(language)\">\n <span class=\"{{ getLanguageIcon(language) }}\"></span>\n {{ language }}\n </button>\n }\n </mat-menu>\n\n @if (!isLoading()) {\n <form\n (ngSubmit)=\"updatePassword()\"\n [formGroup]=\"updatePasswordForm\"\n novalidate\n >\n @if (error()) {\n <div class=\"error-message\">\n <span class=\"error-icon\">!</span>\n {{ error() }}\n </div>\n }\n\n <div class=\"form-group\">\n <label for=\"username\">{{'@username' | translate}}</label>\n <input\n type=\"text\"\n id=\"username\"\n [placeholder]=\"'@username' | translate\"\n formControlName=\"username\"\n required\n />\n </div>\n\n <div class=\"form-group\">\n <label for=\"newPassword\">{{'@password' | translate}}</label>\n <input\n type=\"password\"\n id=\"newPassword\"\n [placeholder]=\"'@password' | translate\"\n formControlName=\"newPassword\"\n required\n />\n @if (updatePasswordForm.controls['newPassword'].invalid &&\n updatePasswordForm.controls['newPassword'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </mat-error>\n }\n </div>\n\n <div class=\"form-group\">\n <label for=\"newPasswordCheck\">{{'@passwordCheck' | translate}}</label>\n <input\n type=\"password\"\n id=\"newPasswordCheck\"\n [placeholder]=\"'@passwordCheck' | translate\"\n formControlName=\"newPasswordCheck\"\n required\n />\n @if (updatePasswordForm.controls['newPasswordCheck'].invalid &&\n updatePasswordForm.controls['newPasswordCheck'].touched) {\n <mat-error class=\"validation-error\">\n <span class=\"error-icon\">!</span>\n {{ 'password is required' | translate }}\n </mat-error>\n }\n </div>\n\n <button\n type=\"submit\"\n class=\"login-button\"\n [disabled]=\"updatePasswordForm.invalid\"\n >\n {{ '@setPassword' | translate }}\n </button>\n </form>\n } @else {\n <!-- Burada eski #loading template'inin içeriği direkt olarak kullanılıyor -->\n <div class=\"loading-spinner\">\n <span>{{ '@updatingPassword' | translate }}</span>\n </div>\n }\n\n <div class=\"footer\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n</div>\n","// text-image.service.ts\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\n/**\n * Manage Image operations\n */\nexport class NettyImageService {\n /**\n * Returns an image that contains the given text. Usage\n * .html\n * <img [src]=\"imageUrl\" *ngIf=\"imageUrl\" [alt]=\"text\" class=\"generated-image\">\n * .ts\n * this.imageUrl = NettyImageService.generateTextImage(\"TEST\");\n *\n * @param text : Text to draw in image\n * @param width : Image width\n * @param height : Image height\n * @param backgroundColor : Default white\n * @param textColor : Default dark gray\n * @param shadowColor : Default transparent black\n * @returns a data URL contains the png image\n */\n generateTextImage(\n text: string,\n width: number = 200,\n height: number = 200,\n backgroundColor: string = '#f0f8ff',\n textColor: string = '#333333',\n shadowColor: string = 'rgba(0, 0, 0, 0.3)'\n ): string {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) return '';\n\n canvas.width = width;\n canvas.height = height;\n\n // Arkaplan\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n\n // Metin\n ctx.fillStyle = textColor;\n const fontSize = Math.min(width, height) * 0.4;\n ctx.font = `bold ${fontSize}px Arial`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n // Metin gölgesi\n ctx.shadowColor = shadowColor;\n ctx.shadowBlur = 4;\n ctx.shadowOffsetX = 2;\n ctx.shadowOffsetY = 2;\n ctx.fillText(text, width / 2, height / 2);\n return canvas.toDataURL('image/png');\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { I18nService } from '@nettyapps/ntyi18n';\n\n@Component({\n selector: 'ntybase-netty-base-app',\n imports: [],\n templateUrl: './netty-base-app.html',\n styleUrl: './netty-base-app.scss',\n})\nexport class NettyBaseApp {\n protected i18nService = inject(I18nService);\n\n protected async loadBaseTranslations(): Promise<void> {\n try {\n const enUSBase = await import('../translations/en-USbase.json');\n const trTRBase = await import('../translations/tr-TRbase.json');\n\n this.i18nService.addTranslations('English', enUSBase.default);\n this.i18nService.addTranslations('Türkçe', trTRBase.default);\n } catch (error) {\n console.error('Error loading base translations in component:', error);\n throw error;\n }\n }\n}\n","","import { Injectable, InjectionToken, Inject, Optional } from '@angular/core';\nimport { EnvironmentConfig } from '../interfaces/environment-config';\n\nexport const ENVIRONMENT_CONFIG = new InjectionToken<EnvironmentConfig>(\n 'ENVIRONMENT_CONFIG'\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EnvironmentInfoService {\n constructor(\n @Optional() @Inject(ENVIRONMENT_CONFIG) private config: EnvironmentConfig\n ) { }\n\n getEnvironmentInfo(): EnvironmentConfig | null {\n return this.config;\n }\n\n getApiUrl(): string {\n return this.config?.nettyUrls?.apiUrl || '';\n }\n\n getAdminUrl(): string {\n return this.config?.nettyUrls?.adminUrl || '';\n }\n\n isProduction(): boolean {\n return this.config?.production || false;\n }\n\n getVersion(): string {\n return this.config?.version || 'Unknown';\n }\n\n getSupportedLanguages(): string[] {\n return this.config?.supportedLanguages || [];\n }\n\n getDefaultLanguage(): string {\n return this.config?.defaultLanguage || '';\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EnvironmentInfoService } from '../services/environment-info-service';\nimport { EnvironmentConfig } from '../interfaces/environment-config';\n\n@Component({\n selector: 'ntybase-environment-info',\n imports: [TranslateModule],\n templateUrl: './environment-info.html',\n styleUrl: './environment-info.scss',\n})\nexport class EnvironmentInfo {\n @Input() showNettyInfo: boolean = true;\n\n environmentConfig: EnvironmentConfig | null = null;\n\n get hasConfig(): boolean {\n return this.environmentConfig !== null;\n }\n\n get version(): string {\n return this.environmentService.getVersion();\n }\n\n get isProduction(): boolean {\n return this.environmentService.isProduction();\n }\n\n get defaultLanguage(): string {\n return this.environmentService.getDefaultLanguage();\n }\n\n get supportedLanguages(): string[] {\n return this.environmentService.getSupportedLanguages();\n }\n\n get apiUrl(): string {\n return this.environmentService.getApiUrl();\n }\n\n get adminUrl(): string {\n return this.environmentService.getAdminUrl();\n }\n\n get baseHref(): string {\n return this.environmentConfig?.nettyUrls?.baseHref || '';\n }\n\n get application(): string {\n return this.environmentConfig?.nettyUrls?.application || '';\n }\n\n constructor(private environmentService: EnvironmentInfoService) { }\n\n ngOnInit(): void {\n this.environmentConfig = this.environmentService.getEnvironmentInfo();\n\n if (!this.hasConfig) {\n console.warn(\n \"Environment konfigürasyonu bulunamadı. ENVIRONMENT_CONFIG token'ı sağlandı mı?\"\n );\n }\n }\n}\n","<div class=\"environment-info\" [class.production]=\"isProduction\">\n <div class=\"info-card\">\n <div class=\"card-header\">\n <h3>{{ 'ENVIRONMENT_INFO.applicationInfo' | translate }}</h3>\n <span class=\"env-badge\" [class.prod]=\"isProduction\">\n {{ isProduction ? ('ENVIRONMENT_INFO.prod' | translate) :\n ('ENVIRONMENT_INFO.dev' | translate) }}\n </span>\n </div>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">{{ 'ENVIRONMENT_INFO.version' | translate }}</span>\n <span class=\"value\">{{ version }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.defaultLanguage' | translate }}</span\n >\n <span class=\"value\">{{ defaultLanguage }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.supportedLanguages' | translate }}</span\n >\n <span class=\"value\">{{ supportedLanguages.join(', ') }}</span>\n </div>\n </div>\n\n @if (showNettyInfo) {\n <div class=\"netty-info\">\n <h4>{{ 'ENVIRONMENT_INFO.nettyConnections' | translate }}</h4>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">{{ 'ENVIRONMENT_INFO.apiUrl' | translate }}</span>\n <span class=\"value\">{{ apiUrl }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.adminUrl' | translate }}</span\n >\n <span class=\"value\">{{ adminUrl }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.baseHref' | translate }}</span\n >\n <span class=\"value\">{{ baseHref }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\"\n >{{ 'ENVIRONMENT_INFO.application' | translate }}</span\n >\n <span class=\"value\">{{ application }}</span>\n </div>\n </div>\n </div>\n } @if (!hasConfig) {\n <div class=\"no-config\">{{ 'ENVIRONMENT_INFO.noConfig' | translate }}</div>\n }\n </div>\n</div>\n","// Library: @nettyapps/ntybase\n\nimport { EnvironmentConfig } from \"../../dashboard-wizard/interfaces/environment-config\";\nimport { NtyEnvironmentService } from \"./nty-environment-service\";\n\nexport function ntyEnvironmentConfigFactory(envService: NtyEnvironmentService): EnvironmentConfig {\n // SSR Kontrolü (Node.js tarafında window yoktur)\n if (typeof window !== 'undefined') {\n const cachedConfig = (window as any).__env?.fullConfig;\n if (cachedConfig) {\n return cachedConfig;\n }\n }\n\n // Bulamazsa servisten al (servis de token'dan aldığı default'u döndürecek)\n return envService.getEnvironment();\n}","import { EnvironmentConfig } from '../../dashboard-wizard/interfaces/environment-config';\n// Basit bir interface tanımlayarak bağımlılığı kırarız\nexport interface IEnvironmentLoader {\n loadEnvironment(): Promise<EnvironmentConfig>;\n}\nexport function ntyInitializeEnvironment(envLoader: IEnvironmentLoader) {\n return (): Promise<EnvironmentConfig> => {\n return envLoader.loadEnvironment().then((config) => {\n // Global erişim için (window) ataması\n if (typeof window !== 'undefined') {\n (window as any).__env = (window as any).__env || {};\n (window as any).__env.fullConfig = config;\n }\n return config;\n });\n };\n}","import { InjectionToken, Injectable, Inject } from '@angular/core';\n// 1. Bir Token Tanımlayın\nexport const NETTY_APP_ENVIRONMENT = new InjectionToken<any>('NETTY_APP_ENVIRONMENT');\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NtyEnvironmentService {\n // 2. Token'ı Inject Edin\n constructor(@Inject(NETTY_APP_ENVIRONMENT) private defaultEnv: any) { }\n async loadEnvironment(): Promise<any> {\n if (!(window as any).__env?.nettyUrls) {\n await this.loadEnvScript();\n if (!(window as any).__env?.nettyUrls) {\n throw new Error('env.js not found!');\n }\n }\n return { ...this.defaultEnv, nettyUrls: (window as any).__env.nettyUrls };\n }\n\n private loadEnvScript(): Promise<void> {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = 'assets/env.js';\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('Failed to load env.js'));\n document.head.appendChild(script);\n });\n }\n\n getEnvironment(): any {\n return { ...this.defaultEnv, nettyUrls: (window as any).__env.nettyUrls };\n }\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NtyLoadingService {\n private requestCount = 0;\n isLoading: WritableSignal<boolean> = signal(false);\n\n show(): void {\n this.requestCount++;\n if (this.requestCount > 0) {\n this.isLoading.set(true);\n }\n }\n\n hide(): void {\n this.requestCount--;\n if (this.requestCount <= 0) {\n this.requestCount = 0;\n this.isLoading.set(false);\n }\n }\n}\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { NtyLoadingService } from '../services/nty-loading-service';\n\nexport const NtyLoadingInterceptor: HttpInterceptorFn = (req, next) => {\n const loadingService = inject(NtyLoadingService);\n\n // Optional: Skip specific URLs if needed (e.g. background polling)\n // if (req.url.includes('/silent-api')) return next(req);\n\n loadingService.show();\n\n return next(req).pipe(\n tap(() => loadingService.hide()), // Handle success\n catchError((error: any) => {\n loadingService.hide(); // Handle error\n return throwError(() => error);\n })\n );\n};\n","import { HttpClient } from '@angular/common/http';\nimport { effect, inject, Injectable, signal } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { I18nService } from '@nettyapps/ntyi18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NettyMenuService {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n private i18nService = inject(I18nService);\n readonly menuName = signal<string>('');\n readonly menu = signal<any>(null);\n\n constructor() {\n effect(() => {\n const currentMenuName = this.menuName();\n const currentLang = this.i18nService.currentLang();\n if (!currentMenuName.trim()) {\n return;\n }\n let functionUrl: string = this.environmentProxy.getAdminLink('/GetMenu');\n if (currentMenuName.trim().length > 0) {\n functionUrl += '/' + currentMenuName.trim();\n }\n\n this.http.get(functionUrl).subscribe({\n next: (data) => this.menu.set(data),\n error: (err) => {\n console.error('Failed to fetch menu:', err);\n this.menu.set(null);\n },\n });\n });\n }\n\n setMenuName(name: string): void {\n if (name && name.trim()) {\n this.menuName.set(name.trim());\n }\n }\n}\n","/*\n * Public API Surface of ntybase\n */\n\nexport * from './lib/ntybase';\nexport * from './lib/ntybase-module';\n\n// Ag Grid\nexport * from './lib/ag-grid/components/ag-grid-base/ag-grid-base';\nexport * from './lib/ag-grid/components/ag-grid-save-base/ag-grid-save-base';\nexport * from './lib/ag-grid/components/excel-import-base/excel-import-base';\nexport * from './lib/ag-grid/components/ag-grid-renderers/button-renderer/button-renderer';\nexport * from './lib/ag-grid/components/ag-grid-renderers/checkbox-renderer/checkbox-renderer';\nexport * from './lib/ag-grid/services/netty-ag-grid-service';\nexport * from './lib/ag-grid/models/current-user-preference';\nexport * from './lib/ag-grid/models/netty-helper';\nexport * from './lib/ag-grid/components/range-date-time-filter/range-date-time-filter';\nexport * from './lib/ag-grid/components/range-number-filter/range-number-filter';\nexport * from './lib/ag-grid/components/range-string-filter/range-string-filter';\n\n// Alert\nexport * from './lib/alert/components/confirm-dialog/confirm-dialog';\nexport * from './lib/alert/services/alert-service';\n\n// Auth\nexport * from './lib/auth/guards/authentication-guard';\nexport * from './lib/auth/guards/can-deactivate-guard';\nexport * from './lib/auth/interceptors/authentication-interceptor';\nexport * from './lib/auth/interceptors/nty-authentication-functional.interceptor';\nexport * from './lib/auth/models/login-context';\nexport * from './lib/auth/models/login-dto';\nexport * from './lib/auth/models/mfa-code-context';\nexport * from './lib/auth/models/mfa-code-dto';\nexport * from './lib/auth/services/authentication-service';\nexport * from './lib/auth/services/credentials-service';\nexport * from './lib/auth/services/url-helper-service';\nexport * from './lib/auth/login/login';\nexport * from './lib/auth/mfa-login/mfa-login';\nexport * from './lib/auth/forgot-password/forgot-password';\n\n// Common\nexport * from './lib/common/services/common-service';\nexport * from './lib/common/services/image-service';\nexport * from './lib/netty-base-app/netty-base-app';\nexport * from './lib/dashboard-wizard/environment-info/environment-info';\nexport * from './lib/dashboard-wizard/services/environment-info-service';\nexport * from './lib/netty-apps-bases/netty-apps-base/netty-apps-base';\n\n// App Config Functions\nexport * from './lib/netty-apps-bases/app-config-functions/function-environment-config-factory';\nexport * from './lib/netty-apps-bases/app-config-functions/function-initialize-environment-app';\nexport * from './lib/netty-apps-bases/app-config-functions/nty-environment-service';\n\n// Loading\nexport * from './lib/loading/interceptors/nty-loading.interceptor';\n\n// Menu\nexport * from './lib/menu/services/netty-menu-service';\nexport * from './lib/netty-base-app/netty-base-app';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","catchError","map","take","i1.EnvironmentInfoService"],"mappings":"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"}
|