@nettyapps/ntybase 0.1.19 → 0.1.21

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/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/auth/guards/authentication-guard.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/components/http-error403/http-error403.ts","../../../projects/ntybase/src/lib/components/http-error403/http-error403.html","../../../projects/ntybase/src/lib/components/http-error404/http-error404.ts","../../../projects/ntybase/src/lib/components/http-error404/http-error404.html","../../../projects/ntybase/src/lib/menu/services/netty-menu-service.ts","../../../projects/ntybase/src/lib/common/services/image-service.ts","../../../projects/ntybase/src/lib/components/left-sidenav/left-sidenav.ts","../../../projects/ntybase/src/lib/components/left-sidenav/left-sidenav.html","../../../projects/ntybase/src/lib/themes/services/theme.ts","../../../projects/ntybase/src/lib/themes/services/color-palette.ts","../../../projects/ntybase/src/lib/components/toolbar/toolbar.ts","../../../projects/ntybase/src/lib/components/toolbar/toolbar.html","../../../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/auto-complete/models/guid.ts","../../../projects/ntybase/src/lib/auto-complete/services/auto-complete-proxy.ts","../../../projects/ntybase/src/lib/auto-complete/models/auto-complete-filter.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-lookup/auto-complete-lookup.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.html","../../../projects/ntybase/src/lib/auto-complete/auto-complete.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete.html","../../../projects/ntybase/src/lib/auto-complete/models/filter.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","import { CommonModule } from '@angular/common';\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, CommonModule, 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","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\n\n@Component({\n selector: 'ntybase-checkbox-renderer',\n imports: [CommonModule],\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 {\n Component,\n computed,\n inject,\n input,\n signal,\n effect,\n output,\n OnInit,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NettyAgGridService } from '../../services/netty-ag-grid-service';\nimport {\n AllCommunityModule,\n ModuleRegistry,\n themeQuartz,\n Theme,\n GridApi,\n GridOptions,\n GridReadyEvent,\n RowSelectionOptions,\n StatusPanelDef,\n ClientSideRowModelModule,\n HighlightChangesModule,\n RefreshCellsParams,\n} from 'ag-grid-community';\nimport {\n StatusBarModule,\n CellSelectionModule,\n ClipboardModule,\n ColumnMenuModule,\n ContextMenuModule,\n ExcelExportModule,\n RowSelectionModule,\n} from 'ag-grid-enterprise';\nimport { CommonService } from '../../../common/services/common-service';\nimport { ActivatedRoute, Router, NavigationExtras } from '@angular/router';\nimport { AlertService } from '../../../alert/services/alert-service';\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';\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\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 implements OnInit\n{\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 // 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 // Services\n protected nettyAgGridService = inject(NettyAgGridService);\n protected translateService = inject(TranslateService);\n protected commonService = inject(CommonService);\n protected router = inject(Router);\n protected routerActive = inject(ActivatedRoute);\n protected alertService = inject(AlertService);\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 * 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 })\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 /**\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 this.frameworkComponents = {\n buttonRenderer: ButtonRenderer,\n checkboxRenderer: CheckboxRenderer,\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 // Clear right side nav if parameterGUID is not provided\n if (this.hasValidValue(this.parameterGUID)) {\n this.setFilter();\n } else {\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 /**\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}\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, Router } from '@angular/router';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { CommonService } from '../../../common/services/common-service';\nimport { AlertService } from '../../../alert/services/alert-service';\nimport { NgForm } from '@angular/forms';\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> implements DoCheck {\n // Services\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected commonService = inject(CommonService);\n protected alertService = inject(AlertService);\n\n viewMode = signal<UserViewMode>('sidenav');\n\n // Input signals\n parameters = input<string>('');\n embedded = 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 /**\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 return await this.alertService.showConfirm('@unsavedChangesConfirm');\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 closeSidenav(): void {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('saved');\n } else if (this.viewMode() === 'sidenav') {\n this.commonService.clearOutlet();\n } else {\n const cleanPath = this.commonService.getCleanUrlPath();\n this.router.navigate([cleanPath]);\n }\n }\n\n backClicked() {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('back');\n } else {\n this.commonService.goBack();\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","<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 { 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","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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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 loginForm: FormGroup = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required],\n remember: [false],\n });\n\n version: string | null = this.environmentProxy.version();\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 }\n timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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.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 <span class=\"version\">v{{version}}</span>\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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '../../common/services/common-service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error403',\n imports: [],\n templateUrl: './http-error403.html',\n styleUrl: './http-error403.scss',\n})\nexport class HttpError403 implements OnDestroy {\n attemptedUrl: string = '';\n\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n // Router'dan state'i al\n const navigation = this.router.currentNavigation();\n this.attemptedUrl = navigation?.extras.state?.['attemptedUrl'] || '';\n\n // Eğer state'ten gelmediyse, mevcut URL'i temizleyerek kullan\n if (!this.attemptedUrl) {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>403 - Erişim Engellendi</h1>\n\n <p>\n <strong>Üzgünüz, {{ attemptedUrl }}</strong> sayfasına erişim izniniz\n bulunmamaktadır.\n </p>\n\n <p class=\"error-detail\">\n Bu sayfayı görüntülemek için gerekli yetkilere sahip değilsiniz. Eğer bu\n bir hata olduğunu düşünüyorsanız, lütfen sistem yöneticinizle iletişime\n geçin.\n </p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '../../common/services/common-service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error404',\n imports: [],\n templateUrl: './http-error404.html',\n styleUrl: './http-error404.scss',\n})\nexport class HttpError404 {\n attemptedUrl: string = '';\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>404</h1>\n <h3>Sayfa Bulunamadı</h3>\n <p><strong>{{ attemptedUrl }}</strong> adresi bulunamadı.</p>\n <p>Bu içerik taşınmış veya silinmiş olabilir.</p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\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\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 this.menuName.set(name);\n }\n}\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 {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router, RouterLink, RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { NettyUISearchInput } from '@nettyapps/ntyui';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { NettyMenuService } from '../../menu/services/netty-menu-service';\nimport { CommonService } from '../../common/services/common-service';\nimport { CredentialsService } from '../../auth/services/credentials-service';\nimport { NettyImageService } from '../../common/services/image-service';\n\n@Component({\n selector: 'ntybase-left-sidenav',\n imports: [\n CommonModule,\n MatIconModule,\n MatListModule,\n MatMenuModule,\n MatMenuTrigger,\n RouterLink,\n RouterModule,\n NettyUISearchInput,\n TranslateModule,\n ],\n templateUrl: './left-sidenav.html',\n styleUrl: './left-sidenav.scss',\n})\nexport class LeftSidenav implements OnInit, AfterViewInit {\n private authService = inject(AuthenticationService);\n private router = inject(Router);\n private menuService = inject(NettyMenuService);\n private commonService = inject(CommonService);\n private environmentProxy = inject(EnvironmentProxy);\n private credentialsService = inject(CredentialsService);\n private imageService = inject(NettyImageService);\n private elementRef = inject(ElementRef);\n\n username = signal<string>('');\n profileImage = signal<string>('');\n\n version: string | null = this.environmentProxy.version();\n\n isMinimized = input<boolean>(false);\n toggleMinimize = output<void>();\n\n onToggleMinimize() {\n this.toggleMinimize.emit();\n }\n\n logout() {\n this.authService.logout().subscribe({\n next: (success) => {\n if (success) {\n const cleanUrl = this.commonService.getCleanUrlPath();\n this.router.navigateByUrl(cleanUrl, { replaceUrl: true }).then(() => {\n this.router.navigate(['/login']);\n });\n }\n },\n error: (err) => {\n console.error('Logout failed:', err);\n },\n });\n }\n\n // Menu Search\n menuItems = signal<any[]>([]);\n searchTerm = signal<string>('');\n originalMenuItems = signal<any[]>([]);\n\n constructor() {\n effect(() => {\n const fetchedMenu = this.menuService.menu();\n if (fetchedMenu) {\n const processedItems = this.processMenuItems(fetchedMenu);\n this.originalMenuItems.set(processedItems);\n } else {\n this.originalMenuItems.set([]);\n }\n });\n\n this.loadUserInfo();\n }\n\n ngOnInit(): void {\n this.menuService.setMenuName(this.environmentProxy.getApplicationName());\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadUserInfo();\n }, 0);\n }\n\n loadUserInfo(): void {\n const credentials = this.credentialsService.getCredentials();\n if (credentials && credentials.username) {\n this.username.set(credentials.username);\n\n this.generateProfileImage(credentials.username);\n }\n }\n\n generateProfileImage(username: string): void {\n const initials = this.getInitials(username);\n\n const primaryColor = this.getCssVariableValue('--mat-sys-primary');\n\n const imageUrl = this.imageService.generateTextImage(\n initials,\n 40,\n 40,\n primaryColor || '#4ECDC4',\n '#FFFFFF',\n 'rgba(0, 0, 0, 0.2)'\n );\n\n this.profileImage.set(imageUrl);\n }\n\n private getCssVariableValue(variableName: string): string | null {\n if (typeof window === 'undefined') return null;\n\n const element = this.elementRef.nativeElement;\n return (\n getComputedStyle(element).getPropertyValue(variableName).trim() || null\n );\n }\n\n private getInitials(username: string): string {\n if (!username) return 'U';\n\n const names = username.trim().split(' ');\n if (names.length === 1) {\n return names[0].charAt(0).toUpperCase();\n } else {\n return (\n names[0].charAt(0) + names[names.length - 1].charAt(0)\n ).toUpperCase();\n }\n }\n\n processMenuItems(apiResponse: any): any[] {\n if (!apiResponse || !Array.isArray(apiResponse)) {\n return [];\n }\n return apiResponse.map((item: any) => ({\n name: item.label || item.name,\n icon: item.icon || '',\n link: item.route || item.link || '#',\n expanded: false,\n children: item.children ? this.processMenuItems(item.children) : [],\n }));\n }\n\n filteredMenuItems = computed(() => {\n const term = this.searchTerm().toLowerCase();\n if (!term) return this.originalMenuItems();\n\n return this.filterMenuItems(this.originalMenuItems(), term);\n });\n\n private filterMenuItems(items: any[], term: string): any[] {\n const normalizedTerm = this.commonService.normalizeTurkish(term);\n\n return items\n .map((item) => {\n const filteredChildren = item.children\n ? this.filterMenuItems(item.children, term)\n : [];\n\n const normalizedName = this.commonService.normalizeTurkish(item.name);\n const matches =\n normalizedName.includes(normalizedTerm) ||\n filteredChildren.length > 0;\n\n return matches\n ? {\n ...item,\n children: filteredChildren,\n expanded: matches || filteredChildren.length > 0,\n }\n : null;\n })\n .filter((item) => item !== null);\n }\n\n toggleSubMenu(item: any): void {\n item.expanded = !item.expanded;\n }\n\n onSearch(term: string) {\n this.searchTerm.set(term);\n }\n}\n","<div class=\"sidenav-content-wrapper\">\n <!-- Minimize Icon -->\n <button mat-icon-button (click)=\"onToggleMinimize()\" class=\"minimize-button\">\n <mat-icon class=\"minimize-icon\">\n {{ isMinimized() ? \"chevron_right\" : \"chevron_left\" }}\n </mat-icon>\n </button>\n\n <!-- Profile -->\n <div class=\"profile-section\">\n <button mat-button [matMenuTriggerFor]=\"profileMenu\" class=\"profile-button\">\n <img [src]=\"profileImage()\" [alt]=\"username()\" class=\"profile-image\" />\n @if(!isMinimized()){\n <div class=\"profile-info\">\n <p class=\"profile-name\">{{ username() }}</p>\n </div>\n }\n </button>\n\n <mat-menu #profileMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>account_circle</mat-icon>\n <span>{{ '@profile' | translate }}</span>\n </button>\n <button mat-menu-item mat-button disabled>\n <mat-icon>swap_horiz</mat-icon>\n <span>{{ '@changeCompany' | translate }}</span>\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <!-- Search Input -->\n @if (!isMinimized()){\n <ntyui-search-input\n class=\"search-input\"\n [label]=\"'@search' | translate\"\n [placeholder]=\"'@placeholderSearch' | translate\"\n [appearance]=\"'outline'\"\n (search)=\"onSearch($event)\"\n >\n </ntyui-search-input>\n }\n\n <!-- Menu -->\n @if (!isMinimized()) {\n <mat-nav-list>\n <div class=\"sidebar\">\n <ul>\n <!-- Recursive menu render -->\n @let items = filteredMenuItems(); @let level = 0;\n <ng-container\n [ngTemplateOutlet]=\"menuItemsTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: items, level: level }\"\n ></ng-container>\n </ul>\n </div>\n </mat-nav-list>\n }\n\n <!-- Footer -->\n <div class=\"sidenav-footer\">\n <button mat-button [matMenuTriggerFor]=\"footerMenu\" class=\"footer-button\">\n @if (!isMinimized()) {\n <div class=\"footer-text\">\n <div class=\"company-name\">\n <p>&copy; 2025 AXIS</p>\n </div>\n </div>\n }\n </button>\n <div class=\"version\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n\n <mat-menu #footerMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>swap_horiz</mat-icon>\n {{ '@changeCompany' | translate }}\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<!-- Recursive Menu Template -->\n<ng-template #menuItemsTemplate let-items let-level=\"level\">\n @for (item of items; track item.name) {\n <li [class]=\"'menu-level-' + level\">\n <!-- Leaf node (no children) -->\n @if (!item.children || item.children.length === 0) {\n <a\n [routerLink]=\"item.link\"\n routerLinkActive=\"active\"\n [class]=\"'menu-link level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n </a>\n }\n\n <!-- Parent node with children -->\n @if (item.children && item.children.length > 0) {\n <a\n (click)=\"toggleSubMenu(item)\"\n [class.expanded]=\"item.expanded\"\n [class]=\"'menu-link has-children level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n <mat-icon [class.rotated]=\"item.expanded\" class=\"expand-icon\">\n {{ item.expanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </a>\n }\n\n <!-- Recursive submenu -->\n @if (item.children && item.children.length > 0 && item.expanded) {\n <ul [class]=\"'submenu level-' + (level + 1)\">\n <ng-container\n *ngTemplateOutlet=\"menuItemsTemplate; context: { $implicit: item.children, level: level + 1 }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","import { computed, effect, Injectable, signal } from '@angular/core';\n\nexport interface AppTheme {\n name: 'light' | 'dark';\n icon: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Theme {\n private readonly THEME_STORAGE_KEY = 'app-theme';\n\n private appTheme = signal<'light' | 'dark'>('light');\n private themes: AppTheme[] = [\n { name: 'light', icon: 'light_mode' },\n { name: 'dark', icon: 'dark_mode' },\n ];\n\n selectedTheme = computed(() =>\n this.themes.find((theme) => theme.name === this.appTheme())\n );\n\n constructor() {\n const savedTheme = this.getSavedTheme();\n if (savedTheme) {\n this.appTheme.set(savedTheme);\n }\n\n effect(() => {\n const appTheme = this.appTheme();\n document.body.style.setProperty('color-scheme', appTheme);\n document.body.setAttribute('data-ag-theme-mode', appTheme);\n });\n }\n\n getThemes() {\n return this.themes;\n }\n\n setTheme(theme: 'light' | 'dark') {\n this.appTheme.set(theme);\n this.saveTheme(theme);\n }\n\n private getSavedTheme(): 'light' | 'dark' | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n const saved = localStorage.getItem(this.THEME_STORAGE_KEY);\n return saved === 'light' || saved === 'dark' ? saved : null;\n }\n return null;\n }\n\n private saveTheme(theme: 'light' | 'dark'): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, theme);\n }\n }\n}\n","import { effect, Injectable, signal } from '@angular/core';\n\nexport interface ColorTheme {\n id: string;\n primary: string;\n secondary?: string;\n displayName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ColorPalette {\n private readonly THEME_STORAGE_KEY = 'selected-theme';\n\n private themes: ColorTheme[] = [];\n currentTheme = signal<ColorTheme | null>(null);\n\n setThemes(customThemes: ColorTheme[]): void {\n this.themes = customThemes;\n\n const savedThemeId = this.getSavedTheme();\n const themeToSet = savedThemeId\n ? this.themes.find((t) => t.id === savedThemeId)\n : this.themes[0];\n\n if (themeToSet) {\n this.currentTheme.set(themeToSet);\n } else if (this.themes.length > 0) {\n this.currentTheme.set(this.themes[0]);\n }\n }\n\n getThemes(): ColorTheme[] {\n return this.themes;\n }\n\n setTheme(themeId: string): void {\n const theme = this.themes.find((t) => t.id === themeId);\n if (theme) {\n this.currentTheme.set(theme);\n this.saveTheme(themeId);\n }\n }\n\n private getSavedTheme(): string | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n return localStorage.getItem(this.THEME_STORAGE_KEY);\n }\n return null;\n }\n\n private saveTheme(themeId: string): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, themeId);\n }\n }\n\n updateThemeClass = effect(() => {\n const theme = this.currentTheme();\n if (theme) {\n document.body.classList.remove(\n ...this.themes.map((t) => `${t.id}-theme`)\n );\n document.body.classList.add(`${theme.id}-theme`);\n }\n });\n}\n","import { Component, inject, model, output } from '@angular/core';\nimport { CommonModule, TitleCasePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { Theme } from '../../themes/services/theme';\nimport { ColorPalette } from '../../themes/services/color-palette';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'ntybase-toolbar',\n imports: [\n MatIconModule,\n MatMenuModule,\n MatToolbarModule,\n CommonModule,\n TitleCasePipe,\n TranslateModule,\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n})\nexport class Toolbar {\n protected themeService = inject(Theme);\n protected colorPaletteService = inject(ColorPalette);\n private i18nService = inject(I18nService);\n private router = inject(Router);\n toggleSidenav = output<void>();\n\n onToggleSidenav() {\n this.toggleSidenav.emit();\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\n setTimeout(() => {\n window.location.reload();\n }, 100);\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","<mat-toolbar class=\"sidenav-header\">\n <div class=\"left-section\">\n <button mat-icon-button (click)=\"onToggleSidenav()\" class=\"menu-button\">\n <mat-icon>menu</mat-icon>\n </button>\n <span>{{'app_name' | translate }}</span>\n\n <!-- Language Selection -->\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 <!-- 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 </div>\n\n <div class=\"spacer\"></div>\n\n <div class=\"flex-stretch\"></div>\n <button\n mat-icon-button\n [mat-menu-trigger-for]=\"themeMenu\"\n class=\"theme-button\"\n >\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\n </button>\n <mat-menu #themeMenu=\"matMenu\">\n @for (theme of themeService.getThemes(); track theme.name) {\n <button\n [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\"\n mat-menu-item\n (click)=\"themeService.setTheme(theme.name)\"\n >\n <mat-icon>{{ theme.icon }}</mat-icon>\n <span>{{ theme.name | titlecase }}</span>\n </button>\n }\n </mat-menu>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"customThemeMenu\"\n class=\"custom-theme-button\"\n >\n <mat-icon>format_color_fill</mat-icon>\n </button>\n <mat-menu #customThemeMenu=\"matMenu\">\n @for (customTheme of colorPaletteService.getThemes(); track customTheme.id)\n {\n <button\n mat-menu-item\n (click)=\"colorPaletteService.setTheme(customTheme.id)\"\n >\n <div class=\"theme-menu-item\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"customTheme.primary\"\n ></div>\n <span>{{ customTheme.displayName }}</span>\n </div>\n </button>\n }\n </mat-menu>\n</mat-toolbar>\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 { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ntybase-environment-info',\n imports: [CommonModule],\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 <h3>Uygulama Bilgileri</h3>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">Versiyon:</span>\n <span class=\"value\">{{ version }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Ortam:</span>\n <span class=\"value\" [class.prod]=\"isProduction\">\n {{ isProduction ? 'Production' : 'Development' }}\n </span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Varsayılan Dil:</span>\n <span class=\"value\">{{ defaultLanguage }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Desteklenen Diller:</span>\n <span class=\"value\">{{ supportedLanguages.join(', ') }}</span>\n </div>\n </div>\n\n @if (showNettyInfo){\n <div class=\"netty-info\">\n <h4>Netty Bağlantıları</h4>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">API URL:</span>\n <span class=\"value\">{{ apiUrl }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Admin URL:</span>\n <span class=\"value\">{{ adminUrl }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Base Href:</span>\n <span class=\"value\">{{ baseHref }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Uygulama:</span>\n <span class=\"value\">{{ application }}</span>\n </div>\n </div>\n </div>\n } @if (!hasConfig) {\n <div class=\"no-config\">\n <p>Environment konfigürasyonu bulunamadı</p>\n </div>\n }\n </div>\n</div>\n","export class Guid {\n private value: string = this.empty;\n constructor(value?: string) {\n if (value) {\n if (Guid.isValid(value)) {\n this.value = value;\n }\n }\n }\n\n public static newGuid(): Guid {\n return new Guid(\n 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n );\n }\n /**\n * return all zeros '00000000-0000-0000-0000-000000000000'\n */\n public static get empty(): string {\n return '00000000-0000-0000-0000-000000000000';\n }\n public get empty(): string {\n return Guid.empty;\n }\n public static isValid(str: string): boolean {\n const validRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return validRegex.test(str);\n }\n public toString() {\n return this.value;\n }\n\n public toJSON(): string {\n return this.value;\n }\n /**\n * True is guid is empty or not valid\n * @param str\n * @returns\n */\n public static isNullOrEmpty(str: string): boolean {\n if (str == null || str == undefined) {\n return true;\n }\n if (!Guid.isValid(str)) {\n return true;\n }\n if (str == Guid.empty) {\n return true;\n }\n return false;\n }\n /**\n * True if the guid is valid and not all zeros (empty)\n * @param str\n * @returns\n */\n public static isValidAndNotEmpty(str: string): boolean {\n return !Guid.isNullOrEmpty(str);\n }\n /**\n * Return empty guid if the given guid is not valid\n * @param guid\n * @returns\n */\n public static emptyWhenNull(guid: any): any {\n if (Guid.isValidAndNotEmpty(guid)) {\n return guid;\n }\n return Guid.empty;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NtyAutoCompleteFilter } from '../models/auto-complete-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AutoCompleteProxy {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n getAutocompleteDataFilter(\n searchTable: string,\n searchData: NtyAutoCompleteFilter\n ) {\n let functionUrl = this.environmentProxy.getServerLink(\n searchTable + '/AutoCompleteFilter'\n );\n return this.http.post(functionUrl, searchData);\n }\n}\n","import { NtyAutoCompleteFilterFields } from './auto-complete-filter-fields';\n\nexport class NtyAutoCompleteFilter {\n coid: any = null;\n searchString: string | null = null;\n fields: NtyAutoCompleteFilterFields[] | null = null;\n}\n","import {\n Component,\n input,\n output,\n ViewChild,\n ViewContainerRef,\n inject,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport { NettyAgGridBase } from '../../ag-grid/components/ag-grid-base/ag-grid-base';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * This component can load and display any container which is provided dynamically during run time\n * The only requirement is the component that will be displayed should extend AgGridBaseComponent\n */\n@Component({\n selector: 'ntybase-auto-complete-lookup',\n imports: [],\n template: ` <ng-template #container></ng-template> `,\n})\nexport class AutoCompleteLookup implements OnChanges {\n data = inject(MAT_DIALOG_DATA);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n component = input<any>();\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Output\n selectedElement = output<any>();\n\n ngOnInit() {\n this.initializeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isComponentConfigChanged(changes)) {\n this.initializeComponent();\n }\n }\n\n private isComponentConfigChanged(changes: SimpleChanges): boolean {\n return (\n !!changes['component'] ||\n !!changes['filterField'] ||\n !!changes['filterFieldValue'] ||\n !!changes['filterFieldNumeric'] ||\n !!changes['filterFieldEquality']\n );\n }\n\n private initializeComponent() {\n // Dialog data'sı varsa onu kullan, yoksa input'ları kullan\n const config = this.data || this.getInputConfig();\n this.loadComponent(config);\n }\n\n private getInputConfig() {\n return {\n component: this.component(),\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldNumeric: this.filterFieldNumeric(),\n filterFieldEquality: this.filterFieldEquality(),\n };\n }\n\n loadComponent(config: any) {\n if (!config?.component) return;\n\n this.container.clear();\n const componentRef = this.container.createComponent<NettyAgGridBase<any>>(\n config.component\n );\n\n // Input'ları doğru şekilde set et - fonksiyon çağrısı YOK\n componentRef.setInput('popupValid', true);\n\n if (config.filterField !== undefined) {\n componentRef.setInput('filterField', config.filterField);\n }\n\n if (config.filterFieldValue !== undefined) {\n componentRef.setInput('filterFieldValue', config.filterFieldValue);\n }\n\n if (config.filterFieldEquality !== undefined) {\n componentRef.setInput('filterFieldEquality', config.filterFieldEquality);\n }\n\n if (config.filterFieldNumeric !== undefined) {\n componentRef.setInput('filterFieldNumeric', config.filterFieldNumeric);\n }\n\n // Handle output\n const sub = componentRef.instance.selectedElement.subscribe((data: any) => {\n this.selectedElement.emit(data);\n });\n\n // Cleanup\n componentRef.onDestroy(() => sub.unsubscribe());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnInit,\n Input,\n ViewEncapsulation,\n inject,\n output,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { AlertService } from '../../alert/services/alert-service';\n\n@Component({\n selector: 'ntybase-auto-complete-popup-menu',\n imports: [CommonModule, ReactiveFormsModule, MatIconModule, TranslateModule],\n templateUrl: './auto-complete-popup-menu.html',\n styleUrl: './auto-complete-popup-menu.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AutoCompletePopupMenu implements OnInit {\n @Input() field: string = '';\n @Input() recordGuid: any;\n @Input() fieldDisabled: boolean = false;\n @Input() componentPath: string = '';\n @Input() inputValue: string = '';\n Result = output<string>();\n\n private clipboard = inject(Clipboard);\n private alertService = inject(AlertService);\n\n ngOnInit() {}\n\n gotoNew() {\n if (!this.componentPath) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, '', 'new');\n this.Result.emit('New');\n }\n\n gotoMain() {\n if (!this.componentPath || !this.recordGuid) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, this.recordGuid, 'edit');\n this.Result.emit('Main');\n }\n\n gotoLookup() {\n if (!this.fieldDisabled) {\n this.Result.emit('Lookup');\n }\n }\n\n gotoNewTab(target: string[], params: any, type: string) {\n if (!target || target.length === 0) return;\n\n // Construct the URL directly in the format you want\n let url = `/${target.join('/')}`;\n\n // Add query parameters\n const queryParams = [];\n if (params) {\n queryParams.push(\n `parameters=${encodeURIComponent(JSON.stringify(params))}`\n );\n }\n if (type) {\n queryParams.push(`type=${type}`);\n }\n queryParams.push('isNewTab=true');\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n // Open in new tab\n window.open(url, '_blank');\n }\n\n copyToClipboard() {\n if (this.inputValue) {\n this.clipboard.copy(this.inputValue);\n this.alertService.showAlert('@copiedToClipboard');\n this.Result.emit('Copy');\n }\n }\n}\n","<div class=\"dialogbase\">\n <div class=\"menu\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"copyToClipboard()\" class=\"align-line\"\n ><mat-icon>content_copy</mat-icon>{{'@copy'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoMain()\" class=\"align-line\"\n ><mat-icon>edit</mat-icon>{{'@popupGotoRecordDefinition'|\n translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoNew()\" class=\"align-line\"\n ><mat-icon>add</mat-icon>{{'@popupNewRecord'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n [ngClass]=\"{'menu-item':!fieldDisabled , 'menu-item-disabled':fieldDisabled }\"\n >\n <span (click)=\"gotoLookup()\" class=\"align-line\"\n ><mat-icon>search</mat-icon>{{'@popupSelectFromList'|translate}}</span\n >\n </li>\n </ul>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n signal,\n ViewChild,\n ChangeDetectionStrategy,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport {\n FormsModule,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { Guid } from '../auto-complete/models/guid';\nimport { AutoCompleteProxy } from './services/auto-complete-proxy';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { NtyAutoCompleteFilter } from './models/auto-complete-filter';\nimport { NtyAutoCompleteFilterFields } from './models/auto-complete-filter-fields';\nimport { AutoCompleteLookup } from './auto-complete-lookup/auto-complete-lookup';\nimport { AutoCompletePopupMenu } from './auto-complete-popup-menu/auto-complete-popup-menu';\nimport { AlertService } from '../alert/services/alert-service';\n\nexport class SelectionItem {\n name: string | null = null;\n value: any = null;\n\n constructor(_value: any = null, _name: string | null = null) {\n this.name = _name;\n this.value = _value;\n }\n}\n\n@Component({\n selector: 'ntybase-auto-complete',\n imports: [\n MatFormFieldModule,\n CommonModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatIconModule,\n ReactiveFormsModule,\n ],\n templateUrl: './auto-complete.html',\n styleUrl: './auto-complete.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoComplete),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutoComplete extends UiBase {\n // Input parameters\n tableName = input<string>('');\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n debounceTime = input<number>(500);\n\n // Inject dependencies\n private alertService = inject(AlertService);\n private autoCompleteService = inject(AutoCompleteProxy);\n private dialog = inject(MatDialog);\n\n @ViewChild(MatAutocompleteTrigger)\n autoCompleteTrigger!: MatAutocompleteTrigger;\n @ViewChild('autoCompleteInput') inputField!: ElementRef;\n\n control = new FormControl();\n matcher = new ErrorStateMatcher();\n\n // Signal parameters\n searchText = signal('');\n selectedOption = signal<SelectionItem | null>(null);\n loadedOptions = signal<SelectionItem[]>([]);\n\n private searchSignal = signal<string>('');\n private debounceTimeout: any;\n\n constructor() {\n super();\n // Sync form control with selected option\n effect(() => {\n const option = this.selectedOption();\n if (option) {\n this.searchText.set(option.name || '');\n } else if (this.control.value && !this.selectedOption()) {\n const found = this.loadedOptions().find(\n (opt) => opt.value === this.control.value\n );\n if (found) {\n this.selectedOption.set(found);\n this.searchText.set(found.name || '');\n }\n }\n });\n\n // Then watch the debounced signal:\n effect((onCleanup) => {\n const searchValue = this.searchSignal();\n\n clearTimeout(this.debounceTimeout);\n\n this.debounceTimeout = setTimeout(() => {\n if (this.shouldTriggerSearch(searchValue)) {\n this.loadAutoCompleteData(searchValue);\n } else {\n this.loadedOptions.set([]);\n }\n }, this.debounceTime());\n\n onCleanup(() => {\n clearTimeout(this.debounceTimeout);\n });\n });\n\n effect(() => {\n this.onChange(this.value());\n });\n\n effect(() => {\n this.updateValidators();\n });\n }\n\n private shouldTriggerSearch(searchValue: string): boolean {\n return searchValue.length >= this.searchAfter();\n }\n\n filteredData = computed(() => {\n return this.loadedOptions();\n });\n\n onInputChanged(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchText.set(value);\n this.onTouched();\n\n // Clear selection if text doesn't match\n if (this.selectedOption() && this.selectedOption()?.name !== value) {\n this.selectedOption.set(null);\n }\n\n if (value.length === 0) {\n this.clearInput();\n return;\n }\n this.searchSignal.set(value);\n this.autoCompleteTrigger.closePanel();\n }\n\n private loadAutoCompleteData(searchValue: string) {\n this.loadedOptions.set([]);\n\n const filter = new NtyAutoCompleteFilter();\n\n filter.searchString =\n searchValue.trim() === '' && searchValue.length >= this.searchAfter()\n ? ''\n : searchValue;\n\n filter.fields = [];\n\n if (this.filterField() && this.filterField()!.trim().length > 0) {\n const fields: NtyAutoCompleteFilterFields = {\n equalitySign: this.filterFieldEquality(),\n fieldName: this.filterField()!,\n fieldValue: this.filterFieldValue(),\n numeric: this.filterFieldNumeric(),\n };\n filter.fields?.push(fields);\n }\n\n this.autoCompleteService\n .getAutocompleteDataFilter(this.tableName(), filter)\n .subscribe({\n next: (data: any) => {\n if (data && Array.isArray(data)) {\n const options = data.map((item: any) => ({\n name: item.text,\n value: item.guidValue,\n }));\n this.loadedOptions.set(options);\n\n if (options.length === 1) {\n this.selectedOption.set(options[0]);\n this.control.setValue(options[0].value);\n this.searchText.set(options[0].name || '');\n } else if (options.length > 1) {\n this.autoCompleteTrigger.openPanel();\n }\n }\n },\n error: (err: any) => {\n this.alertService.showAlert(err.message);\n },\n });\n }\n\n override clearInput() {\n this.selectedOption.set(new SelectionItem(Guid.empty, ''));\n this.control.reset();\n this.searchText.set('');\n this.loadedOptions.set([]);\n this.inputField.nativeElement.value = '';\n }\n\n onPaste(event: ClipboardEvent) {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const pastedText = clipboardData.getData('text');\n this.searchText.set(pastedText);\n this.searchSignal.set(pastedText);\n }\n\n displayFn(item: any): string {\n return this.searchText();\n }\n\n optionSelected(event: MatAutocompleteSelectedEvent) {\n const selectedValue = event.option.value;\n const selected = this.loadedOptions().find(\n (opt) => opt.value === selectedValue\n );\n\n if (selected) {\n this.selectedOption.set(selected);\n this.control.setValue(selected.value);\n this.searchText.set(selected.name || '');\n }\n }\n\n override writeValue(value: any): void {\n this.value.set(value);\n if (!value) return;\n\n if (this.fieldCode()) {\n this.selectedOption.set({ value, name: this.fieldCode() });\n }\n }\n\n onLookup() {\n if (!this.lookupComponent()) return;\n\n const dialogRef = this.dialog.open(AutoCompleteLookup, {\n height: 'auto',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'auto',\n data: {\n component: this.lookupComponent(),\n ...(this.filterField() && {\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldEquality: this.filterFieldEquality(),\n filterFieldNumeric: this.filterFieldNumeric(),\n }),\n },\n });\n\n dialogRef.componentInstance.selectedElement.subscribe((data: any) => {\n if (data) {\n const selection = new SelectionItem(data.value, data.text);\n this.selectedOption.set(selection);\n this.control.setValue(selection.value);\n this.searchText.set(selection.name || '');\n }\n dialogRef.close();\n });\n }\n\n /** Popup screen to goto main table\n *\n * @param event\n * @returns\n */\n rightClick(event: any) {\n event.stopPropagation();\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = {\n top: event.clientY + 'px',\n left: event.clientX + 'px',\n };\n dialogConfig.height = 'auto';\n dialogConfig.width = 'auto';\n dialogConfig.panelClass = 'foo';\n const dialogRef = this.dialog.open(AutoCompletePopupMenu, dialogConfig);\n dialogRef.componentInstance.field = this.tableName();\n dialogRef.componentInstance.recordGuid = this.value();\n dialogRef.componentInstance.fieldDisabled = this.disabled();\n dialogRef.componentInstance.componentPath = this.lookupComponentPath();\n dialogRef.componentInstance.inputValue = this.searchText();\n dialogRef.componentInstance.Result.subscribe((result: string) => {\n switch (result) {\n case 'Lookup':\n dialogRef.close();\n this.onLookup();\n break;\n default:\n dialogRef.close();\n break;\n }\n });\n return false;\n }\n\n // Validation\n override getErrorMessage() {\n if (this.control.hasError('required') && this.errorMessages()['required']) {\n return this.errorMessages()['required'];\n }\n return '';\n }\n\n override updateValidators() {\n const validators = [];\n\n if (this.required()) {\n validators.push(Validators.required);\n }\n\n this.control.setValidators(validators);\n this.control.updateValueAndValidity();\n }\n}\n","<mat-form-field\n class=\"ui-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n @if (label()) {\n <mat-label>{{ label() }}</mat-label>\n }\n\n <input\n type=\"text\"\n #autoCompleteInput\n matInput\n [(ngModel)]=\"value\"\n [matAutocomplete]=\"auto\"\n (input)=\"onInputChanged($event)\"\n (paste)=\"onPaste($event)\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"control\"\n (contextmenu)=\"rightClick($event)\"\n />\n\n @if (value() && !disabled()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n }\n\n <button\n mat-icon-button\n matSuffix\n aria-label=\"Search\"\n (click)=\"onLookup()\"\n class=\"search-btn\"\n >\n <mat-icon>search</mat-icon>\n </button>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"optionSelected($event)\"\n >\n @for (option of filteredData(); track option.value) {\n <mat-option [value]=\"option.value\"> {{ option.name }} </mat-option>\n }\n </mat-autocomplete>\n\n <mat-error>{{ getErrorMessage() }}</mat-error>\n</mat-form-field>\n","export class NettyFilter {\n value: any;\n text: any;\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';\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/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';\n\n// Components\nexport * from './lib/components/http-error403/http-error403';\nexport * from './lib/components/http-error404/http-error404';\nexport * from './lib/components/left-sidenav/left-sidenav';\nexport * from './lib/components/toolbar/toolbar';\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';\n\n// Auto Complete\nexport * from './lib/auto-complete/auto-complete';\nexport * from './lib/auto-complete/models/guid';\nexport * from './lib/auto-complete/models/filter';\n\n// Menu\nexport * from './lib/menu/services/netty-menu-service';\n\n// Theme\nexport * from './lib/themes/services/color-palette';\nexport * from './lib/themes/services/theme';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","catchError","map","take","i6","i5","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/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/auth/guards/authentication-guard.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/components/http-error403/http-error403.ts","../../../projects/ntybase/src/lib/components/http-error403/http-error403.html","../../../projects/ntybase/src/lib/components/http-error404/http-error404.ts","../../../projects/ntybase/src/lib/components/http-error404/http-error404.html","../../../projects/ntybase/src/lib/menu/services/netty-menu-service.ts","../../../projects/ntybase/src/lib/common/services/image-service.ts","../../../projects/ntybase/src/lib/components/left-sidenav/left-sidenav.ts","../../../projects/ntybase/src/lib/components/left-sidenav/left-sidenav.html","../../../projects/ntybase/src/lib/themes/services/theme.ts","../../../projects/ntybase/src/lib/themes/services/color-palette.ts","../../../projects/ntybase/src/lib/components/toolbar/toolbar.ts","../../../projects/ntybase/src/lib/components/toolbar/toolbar.html","../../../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/auto-complete/models/guid.ts","../../../projects/ntybase/src/lib/auto-complete/services/auto-complete-proxy.ts","../../../projects/ntybase/src/lib/auto-complete/models/auto-complete-filter.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-lookup/auto-complete-lookup.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete-popup-menu/auto-complete-popup-menu.html","../../../projects/ntybase/src/lib/auto-complete/auto-complete.ts","../../../projects/ntybase/src/lib/auto-complete/auto-complete.html","../../../projects/ntybase/src/lib/auto-complete/models/filter.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","import { CommonModule } from '@angular/common';\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, CommonModule, 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","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\n\n@Component({\n selector: 'ntybase-checkbox-renderer',\n imports: [CommonModule],\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 {\n Component,\n computed,\n inject,\n input,\n signal,\n effect,\n output,\n OnInit,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NettyAgGridService } from '../../services/netty-ag-grid-service';\nimport {\n AllCommunityModule,\n ModuleRegistry,\n themeQuartz,\n Theme,\n GridApi,\n GridOptions,\n GridReadyEvent,\n RowSelectionOptions,\n StatusPanelDef,\n ClientSideRowModelModule,\n HighlightChangesModule,\n RefreshCellsParams,\n} from 'ag-grid-community';\nimport {\n StatusBarModule,\n CellSelectionModule,\n ClipboardModule,\n ColumnMenuModule,\n ContextMenuModule,\n ExcelExportModule,\n RowSelectionModule,\n} from 'ag-grid-enterprise';\nimport { CommonService } from '../../../common/services/common-service';\nimport { ActivatedRoute, Router, NavigationExtras } from '@angular/router';\nimport { AlertService } from '../../../alert/services/alert-service';\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';\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\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 implements OnInit\n{\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 // 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 // Services\n protected nettyAgGridService = inject(NettyAgGridService);\n protected translateService = inject(TranslateService);\n protected commonService = inject(CommonService);\n protected router = inject(Router);\n protected routerActive = inject(ActivatedRoute);\n protected alertService = inject(AlertService);\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 * 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 })\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 /**\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 this.frameworkComponents = {\n buttonRenderer: ButtonRenderer,\n checkboxRenderer: CheckboxRenderer,\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 // Clear right side nav if parameterGUID is not provided\n if (this.hasValidValue(this.parameterGUID)) {\n this.setFilter();\n } else {\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 /**\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() { this.selectedElement.emit(null); }\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, Router } from '@angular/router';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { CommonService } from '../../../common/services/common-service';\nimport { AlertService } from '../../../alert/services/alert-service';\nimport { NgForm } from '@angular/forms';\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> implements DoCheck {\n // Services\n protected router = inject(Router);\n protected route = inject(ActivatedRoute);\n protected commonService = inject(CommonService);\n protected alertService = inject(AlertService);\n\n viewMode = signal<UserViewMode>('sidenav');\n\n // Input signals\n parameters = input<string>('');\n embedded = 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 /**\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 return await this.alertService.showConfirm('@unsavedChangesConfirm');\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 closeSidenav(): void {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('saved');\n } else if (this.viewMode() === 'sidenav') {\n this.commonService.clearOutlet();\n } else {\n const cleanPath = this.commonService.getCleanUrlPath();\n this.router.navigate([cleanPath]);\n }\n }\n\n backClicked() {\n if (this.viewMode() === 'dialog' && this.dialogRef) {\n this.dialogRef.close('back');\n } else {\n this.commonService.goBack();\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","<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 { 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","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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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 loginForm: FormGroup = this.formBuilder.group({\n username: ['', Validators.required],\n password: ['', Validators.required],\n remember: [false],\n });\n\n version: string | null = this.environmentProxy.version();\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 }\n timeout(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\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.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 <span class=\"version\">v{{version}}</span>\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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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';\nimport { CommonModule } from '@angular/common';\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 CommonModule,\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","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '../../common/services/common-service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error403',\n imports: [],\n templateUrl: './http-error403.html',\n styleUrl: './http-error403.scss',\n})\nexport class HttpError403 implements OnDestroy {\n attemptedUrl: string = '';\n\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n // Router'dan state'i al\n const navigation = this.router.currentNavigation();\n this.attemptedUrl = navigation?.extras.state?.['attemptedUrl'] || '';\n\n // Eğer state'ten gelmediyse, mevcut URL'i temizleyerek kullan\n if (!this.attemptedUrl) {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>403 - Erişim Engellendi</h1>\n\n <p>\n <strong>Üzgünüz, {{ attemptedUrl }}</strong> sayfasına erişim izniniz\n bulunmamaktadır.\n </p>\n\n <p class=\"error-detail\">\n Bu sayfayı görüntülemek için gerekli yetkilere sahip değilsiniz. Eğer bu\n bir hata olduğunu düşünüyorsanız, lütfen sistem yöneticinizle iletişime\n geçin.\n </p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\n","import { Location } from '@angular/common';\nimport { Component, inject, OnDestroy } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { CommonService } from '../../common/services/common-service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'ntybase-http-error404',\n imports: [],\n templateUrl: './http-error404.html',\n styleUrl: './http-error404.scss',\n})\nexport class HttpError404 {\n attemptedUrl: string = '';\n private routeSubscription: Subscription;\n\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private location = inject(Location);\n private commonService = inject(CommonService);\n\n constructor() {\n this.routeSubscription = this.router.events.subscribe(() => {\n this.updateAttemptedUrl();\n });\n }\n\n ngOnInit() {\n // 1. URL'deki secondary outlet'leri temizle (örneğin: \"(rightSidenav:...)\")\n this.cleanUrlFromFragments();\n\n // 2. Hata mesajı için attemptedUrl'i güncelle\n this.updateAttemptedUrl();\n\n // 3. Right sidenav'ı kapat\n this.commonService.toggleRightSidenav(false);\n }\n\n ngOnDestroy() {\n if (this.routeSubscription) {\n this.routeSubscription.unsubscribe();\n }\n }\n\n /**\n * URL'deki fragment ve outlet'leri temizler.\n * Örnek: \"/sys/NettyUserGroup(rightSidenav:...)\" → \"/sys/NettyUserGroup\"\n */\n private cleanUrlFromFragments() {\n const currentUrl = this.router.url;\n const cleanUrl = currentUrl.split('(')[0]; // \"(\" sonrasını sil\n\n if (currentUrl !== cleanUrl) {\n // URL'yi temizlenmiş haliyle değiştir (tarayıcı geçmişine eklemeden)\n this.router.navigateByUrl(cleanUrl, {\n replaceUrl: true,\n skipLocationChange: false,\n });\n }\n }\n\n /**\n * Temizlenmiş URL yolunu döndürür (queryParams ve fragment olmadan).\n */\n private getCleanUrlPath(): string {\n return this.router.url.split('?')[0].split('(')[0];\n }\n\n /**\n * attemptedUrl'i güncel router URL'ine göre günceller\n */\n private updateAttemptedUrl() {\n this.attemptedUrl = this.getCleanUrlPath();\n }\n\n goHome() {\n this.router.navigate(['/'], { replaceUrl: true });\n this.commonService.toggleRightSidenav(false);\n }\n\n goBack() {\n this.location.back();\n }\n}\n","<div class=\"error-container\">\n <div class=\"error-page\">\n <h1>404</h1>\n <h3>Sayfa Bulunamadı</h3>\n <p><strong>{{ attemptedUrl }}</strong> adresi bulunamadı.</p>\n <p>Bu içerik taşınmış veya silinmiş olabilir.</p>\n <button mat-raised-button (click)=\"goHome()\" color=\"primary\" routerLink=\"/\">\n Ana Sayfaya Dön\n </button>\n <button mat-raised-button (click)=\"goBack()\" color=\"primary\" routerLink=\"/\">\n Geri Dön\n </button>\n </div>\n</div>\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\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 this.menuName.set(name);\n }\n}\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 {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { Router, RouterLink, RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { NettyUISearchInput } from '@nettyapps/ntyui';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { AuthenticationService } from '../../auth/services/authentication-service';\nimport { NettyMenuService } from '../../menu/services/netty-menu-service';\nimport { CommonService } from '../../common/services/common-service';\nimport { CredentialsService } from '../../auth/services/credentials-service';\nimport { NettyImageService } from '../../common/services/image-service';\n\n@Component({\n selector: 'ntybase-left-sidenav',\n imports: [\n CommonModule,\n MatIconModule,\n MatListModule,\n MatMenuModule,\n MatMenuTrigger,\n RouterLink,\n RouterModule,\n NettyUISearchInput,\n TranslateModule,\n ],\n templateUrl: './left-sidenav.html',\n styleUrl: './left-sidenav.scss',\n})\nexport class LeftSidenav implements OnInit, AfterViewInit {\n private authService = inject(AuthenticationService);\n private router = inject(Router);\n private menuService = inject(NettyMenuService);\n private commonService = inject(CommonService);\n private environmentProxy = inject(EnvironmentProxy);\n private credentialsService = inject(CredentialsService);\n private imageService = inject(NettyImageService);\n private elementRef = inject(ElementRef);\n\n username = signal<string>('');\n profileImage = signal<string>('');\n\n version: string | null = this.environmentProxy.version();\n\n isMinimized = input<boolean>(false);\n toggleMinimize = output<void>();\n\n onToggleMinimize() {\n this.toggleMinimize.emit();\n }\n\n logout() {\n this.authService.logout().subscribe({\n next: (success) => {\n if (success) {\n const cleanUrl = this.commonService.getCleanUrlPath();\n this.router.navigateByUrl(cleanUrl, { replaceUrl: true }).then(() => {\n this.router.navigate(['/login']);\n });\n }\n },\n error: (err) => {\n console.error('Logout failed:', err);\n },\n });\n }\n\n // Menu Search\n menuItems = signal<any[]>([]);\n searchTerm = signal<string>('');\n originalMenuItems = signal<any[]>([]);\n\n constructor() {\n effect(() => {\n const fetchedMenu = this.menuService.menu();\n if (fetchedMenu) {\n const processedItems = this.processMenuItems(fetchedMenu);\n this.originalMenuItems.set(processedItems);\n } else {\n this.originalMenuItems.set([]);\n }\n });\n\n this.loadUserInfo();\n }\n\n ngOnInit(): void {\n this.menuService.setMenuName(this.environmentProxy.getApplicationName());\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadUserInfo();\n }, 0);\n }\n\n loadUserInfo(): void {\n const credentials = this.credentialsService.getCredentials();\n if (credentials && credentials.username) {\n this.username.set(credentials.username);\n\n this.generateProfileImage(credentials.username);\n }\n }\n\n generateProfileImage(username: string): void {\n const initials = this.getInitials(username);\n\n const primaryColor = this.getCssVariableValue('--mat-sys-primary');\n\n const imageUrl = this.imageService.generateTextImage(\n initials,\n 40,\n 40,\n primaryColor || '#4ECDC4',\n '#FFFFFF',\n 'rgba(0, 0, 0, 0.2)'\n );\n\n this.profileImage.set(imageUrl);\n }\n\n private getCssVariableValue(variableName: string): string | null {\n if (typeof window === 'undefined') return null;\n\n const element = this.elementRef.nativeElement;\n return (\n getComputedStyle(element).getPropertyValue(variableName).trim() || null\n );\n }\n\n private getInitials(username: string): string {\n if (!username) return 'U';\n\n const names = username.trim().split(' ');\n if (names.length === 1) {\n return names[0].charAt(0).toUpperCase();\n } else {\n return (\n names[0].charAt(0) + names[names.length - 1].charAt(0)\n ).toUpperCase();\n }\n }\n\n processMenuItems(apiResponse: any): any[] {\n if (!apiResponse || !Array.isArray(apiResponse)) {\n return [];\n }\n return apiResponse.map((item: any) => ({\n name: item.label || item.name,\n icon: item.icon || '',\n link: item.route || item.link || '#',\n expanded: false,\n children: item.children ? this.processMenuItems(item.children) : [],\n }));\n }\n\n filteredMenuItems = computed(() => {\n const term = this.searchTerm().toLowerCase();\n if (!term) return this.originalMenuItems();\n\n return this.filterMenuItems(this.originalMenuItems(), term);\n });\n\n private filterMenuItems(items: any[], term: string): any[] {\n const normalizedTerm = this.commonService.normalizeTurkish(term);\n\n return items\n .map((item) => {\n const filteredChildren = item.children\n ? this.filterMenuItems(item.children, term)\n : [];\n\n const normalizedName = this.commonService.normalizeTurkish(item.name);\n const matches =\n normalizedName.includes(normalizedTerm) ||\n filteredChildren.length > 0;\n\n return matches\n ? {\n ...item,\n children: filteredChildren,\n expanded: matches || filteredChildren.length > 0,\n }\n : null;\n })\n .filter((item) => item !== null);\n }\n\n toggleSubMenu(item: any): void {\n item.expanded = !item.expanded;\n }\n\n onSearch(term: string) {\n this.searchTerm.set(term);\n }\n}\n","<div class=\"sidenav-content-wrapper\">\n <!-- Minimize Icon -->\n <button mat-icon-button (click)=\"onToggleMinimize()\" class=\"minimize-button\">\n <mat-icon class=\"minimize-icon\">\n {{ isMinimized() ? \"chevron_right\" : \"chevron_left\" }}\n </mat-icon>\n </button>\n\n <!-- Profile -->\n <div class=\"profile-section\">\n <button mat-button [matMenuTriggerFor]=\"profileMenu\" class=\"profile-button\">\n <img [src]=\"profileImage()\" [alt]=\"username()\" class=\"profile-image\" />\n @if(!isMinimized()){\n <div class=\"profile-info\">\n <p class=\"profile-name\">{{ username() }}</p>\n </div>\n }\n </button>\n\n <mat-menu #profileMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>account_circle</mat-icon>\n <span>{{ '@profile' | translate }}</span>\n </button>\n <button mat-menu-item mat-button disabled>\n <mat-icon>swap_horiz</mat-icon>\n <span>{{ '@changeCompany' | translate }}</span>\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <!-- Search Input -->\n @if (!isMinimized()){\n <ntyui-search-input\n class=\"search-input\"\n [label]=\"'@search' | translate\"\n [placeholder]=\"'@placeholderSearch' | translate\"\n [appearance]=\"'outline'\"\n (search)=\"onSearch($event)\"\n >\n </ntyui-search-input>\n }\n\n <!-- Menu -->\n @if (!isMinimized()) {\n <mat-nav-list>\n <div class=\"sidebar\">\n <ul>\n <!-- Recursive menu render -->\n @let items = filteredMenuItems(); @let level = 0;\n <ng-container\n [ngTemplateOutlet]=\"menuItemsTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: items, level: level }\"\n ></ng-container>\n </ul>\n </div>\n </mat-nav-list>\n }\n\n <!-- Footer -->\n <div class=\"sidenav-footer\">\n <button mat-button [matMenuTriggerFor]=\"footerMenu\" class=\"footer-button\">\n @if (!isMinimized()) {\n <div class=\"footer-text\">\n <div class=\"company-name\">\n <p>&copy; 2025 AXIS</p>\n </div>\n </div>\n }\n </button>\n <div class=\"version\">\n <span class=\"version\">v{{version}}</span>\n </div>\n </div>\n\n <mat-menu #footerMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item disabled>\n <mat-icon>swap_horiz</mat-icon>\n {{ '@changeCompany' | translate }}\n </button>\n <button mat-menu-item mat-button (click)=\"logout()\">\n <mat-icon>logout</mat-icon>\n <span>{{ '@logout' | translate }}</span>\n </button>\n </mat-menu>\n</div>\n\n<!-- Recursive Menu Template -->\n<ng-template #menuItemsTemplate let-items let-level=\"level\">\n @for (item of items; track item.name) {\n <li [class]=\"'menu-level-' + level\">\n <!-- Leaf node (no children) -->\n @if (!item.children || item.children.length === 0) {\n <a\n [routerLink]=\"item.link\"\n routerLinkActive=\"active\"\n [class]=\"'menu-link level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n </a>\n }\n\n <!-- Parent node with children -->\n @if (item.children && item.children.length > 0) {\n <a\n (click)=\"toggleSubMenu(item)\"\n [class.expanded]=\"item.expanded\"\n [class]=\"'menu-link has-children level-' + level\"\n >\n <mat-icon>{{ item.icon }}</mat-icon>\n <span>{{ item.name }}</span>\n <mat-icon [class.rotated]=\"item.expanded\" class=\"expand-icon\">\n {{ item.expanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </a>\n }\n\n <!-- Recursive submenu -->\n @if (item.children && item.children.length > 0 && item.expanded) {\n <ul [class]=\"'submenu level-' + (level + 1)\">\n <ng-container\n *ngTemplateOutlet=\"menuItemsTemplate; context: { $implicit: item.children, level: level + 1 }\"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n","import { computed, effect, Injectable, signal } from '@angular/core';\n\nexport interface AppTheme {\n name: 'light' | 'dark';\n icon: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Theme {\n private readonly THEME_STORAGE_KEY = 'app-theme';\n\n private appTheme = signal<'light' | 'dark'>('light');\n private themes: AppTheme[] = [\n { name: 'light', icon: 'light_mode' },\n { name: 'dark', icon: 'dark_mode' },\n ];\n\n selectedTheme = computed(() =>\n this.themes.find((theme) => theme.name === this.appTheme())\n );\n\n constructor() {\n const savedTheme = this.getSavedTheme();\n if (savedTheme) {\n this.appTheme.set(savedTheme);\n }\n\n effect(() => {\n const appTheme = this.appTheme();\n document.body.style.setProperty('color-scheme', appTheme);\n document.body.setAttribute('data-ag-theme-mode', appTheme);\n });\n }\n\n getThemes() {\n return this.themes;\n }\n\n setTheme(theme: 'light' | 'dark') {\n this.appTheme.set(theme);\n this.saveTheme(theme);\n }\n\n private getSavedTheme(): 'light' | 'dark' | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n const saved = localStorage.getItem(this.THEME_STORAGE_KEY);\n return saved === 'light' || saved === 'dark' ? saved : null;\n }\n return null;\n }\n\n private saveTheme(theme: 'light' | 'dark'): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, theme);\n }\n }\n}\n","import { effect, Injectable, signal } from '@angular/core';\n\nexport interface ColorTheme {\n id: string;\n primary: string;\n secondary?: string;\n displayName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ColorPalette {\n private readonly THEME_STORAGE_KEY = 'selected-theme';\n\n private themes: ColorTheme[] = [];\n currentTheme = signal<ColorTheme | null>(null);\n\n setThemes(customThemes: ColorTheme[]): void {\n this.themes = customThemes;\n\n const savedThemeId = this.getSavedTheme();\n const themeToSet = savedThemeId\n ? this.themes.find((t) => t.id === savedThemeId)\n : this.themes[0];\n\n if (themeToSet) {\n this.currentTheme.set(themeToSet);\n } else if (this.themes.length > 0) {\n this.currentTheme.set(this.themes[0]);\n }\n }\n\n getThemes(): ColorTheme[] {\n return this.themes;\n }\n\n setTheme(themeId: string): void {\n const theme = this.themes.find((t) => t.id === themeId);\n if (theme) {\n this.currentTheme.set(theme);\n this.saveTheme(themeId);\n }\n }\n\n private getSavedTheme(): string | null {\n if (typeof window !== 'undefined' && window.localStorage) {\n return localStorage.getItem(this.THEME_STORAGE_KEY);\n }\n return null;\n }\n\n private saveTheme(themeId: string): void {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(this.THEME_STORAGE_KEY, themeId);\n }\n }\n\n updateThemeClass = effect(() => {\n const theme = this.currentTheme();\n if (theme) {\n document.body.classList.remove(\n ...this.themes.map((t) => `${t.id}-theme`)\n );\n document.body.classList.add(`${theme.id}-theme`);\n }\n });\n}\n","import { Component, inject, model, output } from '@angular/core';\nimport { CommonModule, TitleCasePipe } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { Theme } from '../../themes/services/theme';\nimport { ColorPalette } from '../../themes/services/color-palette';\nimport { I18nService } from '@nettyapps/ntyi18n';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'ntybase-toolbar',\n imports: [\n MatIconModule,\n MatMenuModule,\n MatToolbarModule,\n CommonModule,\n TitleCasePipe,\n TranslateModule,\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n})\nexport class Toolbar {\n protected themeService = inject(Theme);\n protected colorPaletteService = inject(ColorPalette);\n private i18nService = inject(I18nService);\n private router = inject(Router);\n toggleSidenav = output<void>();\n\n onToggleSidenav() {\n this.toggleSidenav.emit();\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\n setTimeout(() => {\n window.location.reload();\n }, 100);\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","<mat-toolbar class=\"sidenav-header\">\n <div class=\"left-section\">\n <button mat-icon-button (click)=\"onToggleSidenav()\" class=\"menu-button\">\n <mat-icon>menu</mat-icon>\n </button>\n <span>{{'app_name' | translate }}</span>\n\n <!-- Language Selection -->\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 <!-- 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 </div>\n\n <div class=\"spacer\"></div>\n\n <div class=\"flex-stretch\"></div>\n <button\n mat-icon-button\n [mat-menu-trigger-for]=\"themeMenu\"\n class=\"theme-button\"\n >\n <mat-icon>{{ themeService.selectedTheme()?.icon }}</mat-icon>\n </button>\n <mat-menu #themeMenu=\"matMenu\">\n @for (theme of themeService.getThemes(); track theme.name) {\n <button\n [class.selected-theme]=\"themeService.selectedTheme()?.name === theme.name\"\n mat-menu-item\n (click)=\"themeService.setTheme(theme.name)\"\n >\n <mat-icon>{{ theme.icon }}</mat-icon>\n <span>{{ theme.name | titlecase }}</span>\n </button>\n }\n </mat-menu>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"customThemeMenu\"\n class=\"custom-theme-button\"\n >\n <mat-icon>format_color_fill</mat-icon>\n </button>\n <mat-menu #customThemeMenu=\"matMenu\">\n @for (customTheme of colorPaletteService.getThemes(); track customTheme.id)\n {\n <button\n mat-menu-item\n (click)=\"colorPaletteService.setTheme(customTheme.id)\"\n >\n <div class=\"theme-menu-item\">\n <div\n class=\"color-preview\"\n [style.background-color]=\"customTheme.primary\"\n ></div>\n <span>{{ customTheme.displayName }}</span>\n </div>\n </button>\n }\n </mat-menu>\n</mat-toolbar>\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 { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ntybase-environment-info',\n imports: [CommonModule],\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 <h3>Uygulama Bilgileri</h3>\n\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">Versiyon:</span>\n <span class=\"value\">{{ version }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Ortam:</span>\n <span class=\"value\" [class.prod]=\"isProduction\">\n {{ isProduction ? 'Production' : 'Development' }}\n </span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Varsayılan Dil:</span>\n <span class=\"value\">{{ defaultLanguage }}</span>\n </div>\n\n <div class=\"info-item\">\n <span class=\"label\">Desteklenen Diller:</span>\n <span class=\"value\">{{ supportedLanguages.join(', ') }}</span>\n </div>\n </div>\n\n @if (showNettyInfo){\n <div class=\"netty-info\">\n <h4>Netty Bağlantıları</h4>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"label\">API URL:</span>\n <span class=\"value\">{{ apiUrl }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Admin URL:</span>\n <span class=\"value\">{{ adminUrl }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Base Href:</span>\n <span class=\"value\">{{ baseHref }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"label\">Uygulama:</span>\n <span class=\"value\">{{ application }}</span>\n </div>\n </div>\n </div>\n } @if (!hasConfig) {\n <div class=\"no-config\">\n <p>Environment konfigürasyonu bulunamadı</p>\n </div>\n }\n </div>\n</div>\n","export class Guid {\n private value: string = this.empty;\n constructor(value?: string) {\n if (value) {\n if (Guid.isValid(value)) {\n this.value = value;\n }\n }\n }\n\n public static newGuid(): Guid {\n return new Guid(\n 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n );\n }\n /**\n * return all zeros '00000000-0000-0000-0000-000000000000'\n */\n public static get empty(): string {\n return '00000000-0000-0000-0000-000000000000';\n }\n public get empty(): string {\n return Guid.empty;\n }\n public static isValid(str: string): boolean {\n const validRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return validRegex.test(str);\n }\n public toString() {\n return this.value;\n }\n\n public toJSON(): string {\n return this.value;\n }\n /**\n * True is guid is empty or not valid\n * @param str\n * @returns\n */\n public static isNullOrEmpty(str: string): boolean {\n if (str == null || str == undefined) {\n return true;\n }\n if (!Guid.isValid(str)) {\n return true;\n }\n if (str == Guid.empty) {\n return true;\n }\n return false;\n }\n /**\n * True if the guid is valid and not all zeros (empty)\n * @param str\n * @returns\n */\n public static isValidAndNotEmpty(str: string): boolean {\n return !Guid.isNullOrEmpty(str);\n }\n /**\n * Return empty guid if the given guid is not valid\n * @param guid\n * @returns\n */\n public static emptyWhenNull(guid: any): any {\n if (Guid.isValidAndNotEmpty(guid)) {\n return guid;\n }\n return Guid.empty;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { EnvironmentProxy } from '@nettyapps/ntycontract';\nimport { NtyAutoCompleteFilter } from '../models/auto-complete-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AutoCompleteProxy {\n private http = inject(HttpClient);\n private environmentProxy = inject(EnvironmentProxy);\n\n getAutocompleteDataFilter(\n searchTable: string,\n searchData: NtyAutoCompleteFilter\n ) {\n let functionUrl = this.environmentProxy.getServerLink(\n searchTable + '/AutoCompleteFilter'\n );\n return this.http.post(functionUrl, searchData);\n }\n}\n","import { NtyAutoCompleteFilterFields } from './auto-complete-filter-fields';\n\nexport class NtyAutoCompleteFilter {\n coid: any = null;\n searchString: string | null = null;\n fields: NtyAutoCompleteFilterFields[] | null = null;\n}\n","import {\n Component,\n input,\n output,\n ViewChild,\n ViewContainerRef,\n inject,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\nimport { NettyAgGridBase } from '../../ag-grid/components/ag-grid-base/ag-grid-base';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n/**\n * This component can load and display any container which is provided dynamically during run time\n * The only requirement is the component that will be displayed should extend AgGridBaseComponent\n */\n@Component({\n selector: 'ntybase-auto-complete-lookup',\n imports: [],\n template: ` <ng-template #container></ng-template> `,\n})\nexport class AutoCompleteLookup implements OnChanges {\n data = inject(MAT_DIALOG_DATA);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n container!: ViewContainerRef;\n\n component = input<any>();\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n\n // Output\n selectedElement = output<any>();\n\n ngOnInit() {\n this.initializeComponent();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isComponentConfigChanged(changes)) {\n this.initializeComponent();\n }\n }\n\n private isComponentConfigChanged(changes: SimpleChanges): boolean {\n return (\n !!changes['component'] ||\n !!changes['filterField'] ||\n !!changes['filterFieldValue'] ||\n !!changes['filterFieldNumeric'] ||\n !!changes['filterFieldEquality']\n );\n }\n\n private initializeComponent() {\n // Dialog data'sı varsa onu kullan, yoksa input'ları kullan\n const config = this.data || this.getInputConfig();\n this.loadComponent(config);\n }\n\n private getInputConfig() {\n return {\n component: this.component(),\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldNumeric: this.filterFieldNumeric(),\n filterFieldEquality: this.filterFieldEquality(),\n };\n }\n\n loadComponent(config: any) {\n if (!config?.component) return;\n\n this.container.clear();\n const componentRef = this.container.createComponent<NettyAgGridBase<any>>(\n config.component\n );\n\n // Input'ları doğru şekilde set et - fonksiyon çağrısı YOK\n componentRef.setInput('popupValid', true);\n\n if (config.filterField !== undefined) {\n componentRef.setInput('filterField', config.filterField);\n }\n\n if (config.filterFieldValue !== undefined) {\n componentRef.setInput('filterFieldValue', config.filterFieldValue);\n }\n\n if (config.filterFieldEquality !== undefined) {\n componentRef.setInput('filterFieldEquality', config.filterFieldEquality);\n }\n\n if (config.filterFieldNumeric !== undefined) {\n componentRef.setInput('filterFieldNumeric', config.filterFieldNumeric);\n }\n\n // Handle output\n const sub = componentRef.instance.selectedElement.subscribe((data: any) => {\n this.selectedElement.emit(data);\n });\n\n // Cleanup\n componentRef.onDestroy(() => sub.unsubscribe());\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n OnInit,\n Input,\n ViewEncapsulation,\n inject,\n output,\n} from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { AlertService } from '../../alert/services/alert-service';\n\n@Component({\n selector: 'ntybase-auto-complete-popup-menu',\n imports: [CommonModule, ReactiveFormsModule, MatIconModule, TranslateModule],\n templateUrl: './auto-complete-popup-menu.html',\n styleUrl: './auto-complete-popup-menu.scss',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AutoCompletePopupMenu implements OnInit {\n @Input() field: string = '';\n @Input() recordGuid: any;\n @Input() fieldDisabled: boolean = false;\n @Input() componentPath: string = '';\n @Input() inputValue: string = '';\n Result = output<string>();\n\n private clipboard = inject(Clipboard);\n private alertService = inject(AlertService);\n\n ngOnInit() {}\n\n gotoNew() {\n if (!this.componentPath) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, '', 'new');\n this.Result.emit('New');\n }\n\n gotoMain() {\n if (!this.componentPath || !this.recordGuid) return;\n\n // Split the component path into segments\n const pathSegments = this.componentPath.split('/').filter((p) => p);\n this.gotoNewTab(pathSegments, this.recordGuid, 'edit');\n this.Result.emit('Main');\n }\n\n gotoLookup() {\n if (!this.fieldDisabled) {\n this.Result.emit('Lookup');\n }\n }\n\n gotoNewTab(target: string[], params: any, type: string) {\n if (!target || target.length === 0) return;\n\n // Construct the URL directly in the format you want\n let url = `/${target.join('/')}`;\n\n // Add query parameters\n const queryParams = [];\n if (params) {\n queryParams.push(\n `parameters=${encodeURIComponent(JSON.stringify(params))}`\n );\n }\n if (type) {\n queryParams.push(`type=${type}`);\n }\n queryParams.push('isNewTab=true');\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n // Open in new tab\n window.open(url, '_blank');\n }\n\n copyToClipboard() {\n if (this.inputValue) {\n this.clipboard.copy(this.inputValue);\n this.alertService.showAlert('@copiedToClipboard');\n this.Result.emit('Copy');\n }\n }\n}\n","<div class=\"dialogbase\">\n <div class=\"menu\">\n <ul class=\"list-group\">\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"copyToClipboard()\" class=\"align-line\"\n ><mat-icon>content_copy</mat-icon>{{'@copy'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoMain()\" class=\"align-line\"\n ><mat-icon>edit</mat-icon>{{'@popupGotoRecordDefinition'|\n translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center menu-item\"\n >\n <span (click)=\"gotoNew()\" class=\"align-line\"\n ><mat-icon>add</mat-icon>{{'@popupNewRecord'| translate}}</span\n >\n </li>\n <li\n class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\n [ngClass]=\"{'menu-item':!fieldDisabled , 'menu-item-disabled':fieldDisabled }\"\n >\n <span (click)=\"gotoLookup()\" class=\"align-line\"\n ><mat-icon>search</mat-icon>{{'@popupSelectFromList'|translate}}</span\n >\n </li>\n </ul>\n </div>\n</div>\n","import {\n Component,\n computed,\n effect,\n ElementRef,\n input,\n signal,\n ViewChild,\n ChangeDetectionStrategy,\n forwardRef,\n inject,\n Inject\n} from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CommonModule } from '@angular/common';\nimport {\n MatAutocompleteModule,\n MatAutocompleteSelectedEvent,\n MatAutocompleteTrigger,\n} from '@angular/material/autocomplete';\nimport {\n FormsModule,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { UiBase } from '@nettyapps/ntyui';\nimport { Guid } from '../auto-complete/models/guid';\nimport { AutoCompleteProxy } from './services/auto-complete-proxy';\nimport { MatDialog, MatDialogConfig, MatDialogRef,MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { NtyAutoCompleteFilter } from './models/auto-complete-filter';\nimport { NtyAutoCompleteFilterFields } from './models/auto-complete-filter-fields';\nimport { AutoCompleteLookup } from './auto-complete-lookup/auto-complete-lookup';\nimport { AutoCompletePopupMenu } from './auto-complete-popup-menu/auto-complete-popup-menu';\nimport { AlertService } from '../alert/services/alert-service';\n\nexport class SelectionItem {\n name: string | null = null;\n value: any = null;\n\n constructor(_value: any = null, _name: string | null = null) {\n this.name = _name;\n this.value = _value;\n }\n}\n\n@Component({\n selector: 'ntybase-auto-complete',\n imports: [\n MatFormFieldModule,\n CommonModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatIconModule,\n ReactiveFormsModule,\n MatDialogModule\n ],\n templateUrl: './auto-complete.html',\n styleUrl: './auto-complete.scss',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoComplete),\n multi: true,\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AutoComplete extends UiBase {\n // Input parameters\n tableName = input<string>('');\n searchAfter = input<number>(3);\n fieldCode = input<string | null>(null);\n fieldName = input<string | null>(null);\n lookupComponent = input<any>(null);\n lookupComponentPath = input<any>(null);\n filterField = input<string | null>(null);\n filterFieldValue = input<any>(null);\n filterFieldNumeric = input<boolean>(false);\n filterFieldEquality = input<string>('=');\n debounceTime = input<number>(500);\n\n // Inject dependencies\n private alertService = inject(AlertService);\n private autoCompleteService = inject(AutoCompleteProxy);\n private dialog = inject(MatDialog);\n\n @ViewChild(MatAutocompleteTrigger)\n autoCompleteTrigger!: MatAutocompleteTrigger;\n @ViewChild('autoCompleteInput') inputField!: ElementRef;\n\n control = new FormControl();\n matcher = new ErrorStateMatcher();\n\n // Signal parameters\n searchText = signal('');\n selectedOption = signal<SelectionItem | null>(null);\n loadedOptions = signal<SelectionItem[]>([]);\n\n private searchSignal = signal<string>('');\n private debounceTimeout: any;\n\n constructor() {\n super();\n // Sync form control with selected option\n effect(() => {\n const option = this.selectedOption();\n if (option) {\n this.searchText.set(option.name || '');\n } else if (this.control.value && !this.selectedOption()) {\n const found = this.loadedOptions().find(\n (opt) => opt.value === this.control.value\n );\n if (found) {\n this.selectedOption.set(found);\n this.searchText.set(found.name || '');\n }\n }\n });\n\n // Then watch the debounced signal:\n effect((onCleanup) => {\n const searchValue = this.searchSignal();\n\n clearTimeout(this.debounceTimeout);\n\n this.debounceTimeout = setTimeout(() => {\n if (this.shouldTriggerSearch(searchValue)) {\n this.loadAutoCompleteData(searchValue);\n } else {\n this.loadedOptions.set([]);\n }\n }, this.debounceTime());\n\n onCleanup(() => {\n clearTimeout(this.debounceTimeout);\n });\n });\n\n effect(() => {\n this.onChange(this.value());\n });\n\n effect(() => {\n this.updateValidators();\n });\n }\n\n private shouldTriggerSearch(searchValue: string): boolean {\n return searchValue.length >= this.searchAfter();\n }\n\n filteredData = computed(() => {\n return this.loadedOptions();\n });\n\n onInputChanged(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.searchText.set(value);\n this.onTouched();\n\n // Clear selection if text doesn't match\n if (this.selectedOption() && this.selectedOption()?.name !== value) {\n this.selectedOption.set(null);\n }\n\n if (value.length === 0) {\n this.clearInput();\n return;\n }\n this.searchSignal.set(value);\n this.autoCompleteTrigger.closePanel();\n }\n\n private loadAutoCompleteData(searchValue: string) {\n this.loadedOptions.set([]);\n\n const filter = new NtyAutoCompleteFilter();\n\n filter.searchString =\n searchValue.trim() === '' && searchValue.length >= this.searchAfter()\n ? ''\n : searchValue;\n\n filter.fields = [];\n\n if (this.filterField() && this.filterField()!.trim().length > 0) {\n const fields: NtyAutoCompleteFilterFields = {\n equalitySign: this.filterFieldEquality(),\n fieldName: this.filterField()!,\n fieldValue: this.filterFieldValue(),\n numeric: this.filterFieldNumeric(),\n };\n filter.fields?.push(fields);\n }\n\n this.autoCompleteService\n .getAutocompleteDataFilter(this.tableName(), filter)\n .subscribe({\n next: (data: any) => {\n if (data && Array.isArray(data)) {\n const options = data.map((item: any) => ({\n name: item.text,\n value: item.guidValue,\n }));\n this.loadedOptions.set(options);\n\n if (options.length === 1) {\n this.selectedOption.set(options[0]);\n this.control.setValue(options[0].value);\n this.searchText.set(options[0].name || '');\n } else if (options.length > 1) {\n this.autoCompleteTrigger.openPanel();\n }\n }\n },\n error: (err: any) => {\n this.alertService.showAlert(err.message);\n },\n });\n }\n\n override clearInput() {\n this.selectedOption.set(new SelectionItem(Guid.empty, ''));\n this.control.reset();\n this.searchText.set('');\n this.loadedOptions.set([]);\n this.inputField.nativeElement.value = '';\n }\n\n onPaste(event: ClipboardEvent) {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const pastedText = clipboardData.getData('text');\n this.searchText.set(pastedText);\n this.searchSignal.set(pastedText);\n }\n\n displayFn(item: any): string {\n return this.searchText();\n }\n\n optionSelected(event: MatAutocompleteSelectedEvent) {\n const selectedValue = event.option.value;\n const selected = this.loadedOptions().find(\n (opt) => opt.value === selectedValue\n );\n\n if (selected) {\n this.selectedOption.set(selected);\n this.control.setValue(selected.value);\n this.searchText.set(selected.name || '');\n }\n }\n\n override writeValue(value: any): void {\n this.value.set(value);\n if (!value) return;\n\n if (this.fieldCode()) {\n this.selectedOption.set({ value, name: this.fieldCode() });\n }\n }\n\n onLookup() {\n if (!this.lookupComponent()) return;\n\n const dialogRef = this.dialog.open(AutoCompleteLookup, {\n height: 'auto',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 'auto',\n data: {\n component: this.lookupComponent(),\n ...(this.filterField() && {\n filterField: this.filterField(),\n filterFieldValue: this.filterFieldValue(),\n filterFieldEquality: this.filterFieldEquality(),\n filterFieldNumeric: this.filterFieldNumeric(),\n }),\n },\n });\n\n dialogRef.componentInstance.selectedElement.subscribe((data: any) => {\n if (data) {\n const selection = new SelectionItem(data.value, data.text);\n this.selectedOption.set(selection);\n this.control.setValue(selection.value);\n this.searchText.set(selection.name || '');\n }\n dialogRef.close();\n });\n }\n\n /** Popup screen to goto main table\n *\n * @param event\n * @returns\n */\n rightClick(event: any) {\n event.stopPropagation();\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = {\n top: event.clientY + 'px',\n left: event.clientX + 'px',\n };\n dialogConfig.height = 'auto';\n dialogConfig.width = 'auto';\n dialogConfig.panelClass = 'foo';\n const dialogRef = this.dialog.open(AutoCompletePopupMenu, dialogConfig);\n dialogRef.componentInstance.field = this.tableName();\n dialogRef.componentInstance.recordGuid = this.value();\n dialogRef.componentInstance.fieldDisabled = this.disabled();\n dialogRef.componentInstance.componentPath = this.lookupComponentPath();\n dialogRef.componentInstance.inputValue = this.searchText();\n dialogRef.componentInstance.Result.subscribe((result: string) => {\n switch (result) {\n case 'Lookup':\n dialogRef.close();\n this.onLookup();\n break;\n default:\n dialogRef.close();\n break;\n }\n });\n return false;\n }\n\n // Validation\n override getErrorMessage() {\n if (this.control.hasError('required') && this.errorMessages()['required']) {\n return this.errorMessages()['required'];\n }\n return '';\n }\n\n override updateValidators() {\n const validators = [];\n\n if (this.required()) {\n validators.push(Validators.required);\n }\n\n this.control.setValidators(validators);\n this.control.updateValueAndValidity();\n }\n}\n","<mat-form-field\n class=\"ui-full-width\"\n [appearance]=\"appearance()\"\n [class.required-field]=\"required()\"\n [class.required-with-value]=\"required() && value()\"\n>\n @if (label()) {\n <mat-label>{{ label() }}</mat-label>\n }\n\n <input\n type=\"text\"\n #autoCompleteInput\n matInput\n [(ngModel)]=\"value\"\n [matAutocomplete]=\"auto\"\n (input)=\"onInputChanged($event)\"\n (paste)=\"onPaste($event)\"\n [errorStateMatcher]=\"matcher\"\n [formControl]=\"control\"\n (contextmenu)=\"rightClick($event)\"\n />\n\n @if (value() && !disabled()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"clearInput()\"\n aria-label=\"Clear\"\n class=\"clear-btn number-clear-btn\"\n >\n <mat-icon>cancel</mat-icon>\n </button>\n }\n\n <button\n mat-icon-button\n matSuffix\n aria-label=\"Search\"\n (click)=\"onLookup()\"\n class=\"search-btn\"\n >\n <mat-icon>search</mat-icon>\n </button>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [displayWith]=\"displayFn.bind(this)\"\n (optionSelected)=\"optionSelected($event)\"\n >\n @for (option of filteredData(); track option.value) {\n <mat-option [value]=\"option.value\"> {{ option.name }} </mat-option>\n }\n </mat-autocomplete>\n\n <mat-error>{{ getErrorMessage() }}</mat-error>\n</mat-form-field>\n","export class NettyFilter {\n value: any;\n text: any;\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';\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/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';\n\n// Components\nexport * from './lib/components/http-error403/http-error403';\nexport * from './lib/components/http-error404/http-error404';\nexport * from './lib/components/left-sidenav/left-sidenav';\nexport * from './lib/components/toolbar/toolbar';\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';\n\n// Auto Complete\nexport * from './lib/auto-complete/auto-complete';\nexport * from './lib/auto-complete/models/guid';\nexport * from './lib/auto-complete/models/filter';\n\n// Menu\nexport * from './lib/menu/services/netty-menu-service';\n\n// Theme\nexport * from './lib/themes/services/color-palette';\nexport * from './lib/themes/services/theme';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i1","i2","i3","catchError","map","take","i6","i5","i1.EnvironmentInfoService"],"mappings":"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"}