oip-common 0.0.14 → 0.0.16

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":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/base-data.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/components/base-module.component.ts","../../../projects/oip-common/src/services/security-data.service.ts","../../../projects/oip-common/src/components/security.component.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/components/app-configurator.component.ts","../../../projects/oip-common/src/components/logo.component.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/top-bar.component.ts","../../../projects/oip-common/src/components/footer.component.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/api/Menu.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar.component.ts","../../../projects/oip-common/src/components/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator.component.ts","../../../projects/oip-common/src/components/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/profile.component.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/components/config.component.ts","../../../projects/oip-common/src/components/db-migration.component.ts","../../../projects/oip-common/src/api/Module.ts","../../../projects/oip-common/src/components/app-modules.component.ts","../../../projects/oip-common/src/services/auth.service.ts","../../../projects/oip-common/src/services/security-storage.service.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/modules/secure.pipe.ts","../../../projects/oip-common/src/modules/http-loader.factory.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { TopBarDto } from '../dtos/top-bar.dto';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TopBarService {\r\n topBarItems: TopBarDto[] = [];\r\n\r\n private _activeId: string | undefined;\r\n\r\n get availableTopBarItems(): TopBarDto[] {\r\n return this.topBarItems;\r\n }\r\n\r\n get activeTopBarItem(): TopBarDto | undefined {\r\n if (this._activeId === undefined) {\r\n return undefined;\r\n }\r\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\r\n }\r\n\r\n get activeId(): string | undefined {\r\n return this._activeId;\r\n }\r\n\r\n set activeId(value: string | undefined) {\r\n this._activeId = value;\r\n if (this.activeTopBarItem?.click) this.activeTopBarItem.click();\r\n }\r\n\r\n constructor() {}\r\n\r\n // Set tob bar items\r\n setTopBarItems(items: TopBarDto[]) {\r\n this.topBarItems = items;\r\n }\r\n\r\n checkId(id: string): boolean {\r\n if (this.activeTopBarItem === undefined && id === 'content') return true;\r\n if (this.activeTopBarItem === undefined) return false;\r\n return this.activeTopBarItem.id == id;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MsgService {\r\n protected readonly messageService: MessageService = inject(MessageService);\r\n private readonly translate = inject(TranslateService);\r\n private readonly lifetime: number = 2000;\r\n\r\n add(msg: ToastMessageOptions) {\r\n this.messageService.add(msg);\r\n }\r\n\r\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n if (detail instanceof HttpErrorResponse) {\r\n summary = `Error: ${detail.status} ${detail.statusText}`;\r\n detail = `${detail.name} \\r\\n ${detail.message}`;\r\n }\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: summary,\r\n detail: detail.toString(),\r\n life: life\r\n });\r\n }\r\n\r\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'contrast',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'secondary',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { lastValueFrom, Observable } from 'rxjs';\r\n\r\n/**\r\n * BaseDataService provides a unified interface for sending HTTP requests\r\n * using Angular's HttpClient. It supports standard HTTP methods and automatic\r\n * credential handling.\r\n */\r\n@Injectable()\r\nexport class BaseDataService {\r\n private readonly http = inject(HttpClient);\r\n\r\n /**\r\n * Gets the base URL of the application from the HTML <base> tag.\r\n */\r\n get baseUrl(): string {\r\n return document.getElementsByTagName('base')[0].href;\r\n }\r\n\r\n /**\r\n * Sends an HTTP request with the specified method and data.\r\n *\r\n * @template TResponse - Expected response type.\r\n * @param url - The target URL for the HTTP request.\r\n * @param method - The HTTP method to use (GET, PUT, POST, DELETE). Default is 'GET'.\r\n * @param data - An object containing request parameters or payload.\r\n * @returns A promise that resolves to the response of type TResponse.\r\n */\r\n sendRequest<TResponse>(\r\n url: string,\r\n method: 'GET' | 'PUT' | 'POST' | 'DELETE' = 'GET',\r\n data: any = {}\r\n ): Promise<TResponse> {\r\n const httpOptions = { withCredentials: true };\r\n let result: Observable<TResponse>;\r\n\r\n switch (method) {\r\n case 'GET':\r\n result = this.http.get<TResponse>(url, { params: data });\r\n break;\r\n case 'PUT':\r\n result = this.http.put<TResponse>(url, data, httpOptions);\r\n break;\r\n case 'POST':\r\n result = this.http.post<TResponse>(url, data, httpOptions);\r\n break;\r\n case 'DELETE':\r\n result = this.http.request<TResponse>('DELETE', url, {\r\n body: data,\r\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\r\n withCredentials: true\r\n });\r\n break;\r\n }\r\n\r\n return lastValueFrom(result);\r\n }\r\n\r\n /**\r\n * Sends a GET request and retrieves a response as a Blob.\r\n *\r\n * @param url - The target URL for the GET request.\r\n * @returns A promise that resolves to a Object response.\r\n */\r\n getBlob(url: string): Promise<object> {\r\n const httpOptions = {\r\n responseType: 'blob' as 'json',\r\n withCredentials: true\r\n };\r\n const result = this.http.get(url, httpOptions);\r\n return lastValueFrom(result);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n/**\r\n * Service to manage the application title.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppTitleService {\r\n private readonly title = inject(Title);\r\n private titleSubject = new BehaviorSubject<string>('');\r\n public title$ = this.titleSubject.asObservable();\r\n\r\n /**\r\n * Set the title of the current HTML document.\r\n * @param newTitle\r\n */\r\n setTitle(newTitle: string): void {\r\n this.title.setTitle(newTitle);\r\n this.titleSubject.next(newTitle);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, effect, inject, OnDestroy, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { TopBarDto } from '../dtos/top-bar.dto';\r\nimport { TopBarService } from '../services/top-bar.service';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { BaseDataService } from '../services/base-data.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { AppTitleService } from '../services/app-title.service';\r\n\r\ninterface BaseComponentLocalization {\r\n security: string;\r\n settings: string;\r\n content: string;\r\n}\r\n\r\n@Component({ standalone: true, template: '' })\r\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\r\n /**\r\n * Provides access to topbar related functionality, such as managing visibility and content.\r\n * @type {TopBarService}\r\n */\r\n public readonly topBarService: TopBarService = inject(TopBarService);\r\n\r\n /**\r\n * Provides access to information about the current route.\r\n * This includes route parameters, data, and the route's path.\r\n */\r\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\r\n\r\n /**\r\n * Provides access to messaging services.\r\n */\r\n public readonly msgService = inject(MsgService);\r\n\r\n /**\r\n * Provides access to base data service functionality.\r\n * @deprecated The method should not be used\r\n */\r\n public readonly baseDataService: BaseDataService = inject(BaseDataService);\r\n\r\n /**\r\n * Provides access to translation functionality.\r\n */\r\n public readonly translateService = inject(TranslateService);\r\n\r\n /**\r\n * Provides access to the application's title service.\r\n */\r\n public readonly appTitleService = inject(AppTitleService);\r\n\r\n /**\r\n * Reference to the ChangeDetector. Used to trigger change detection manually.\r\n */\r\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * Represents a subscription to an observable.\r\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\r\n * @type {Subscription}\r\n */\r\n private subscriptions: Subscription[] = [];\r\n /**\r\n * Configuration object for backend storage\r\n * @type {TBackendStoreSettings}\r\n */\r\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\r\n\r\n /**\r\n * Configuration object for local storage.\r\n * @type {TLocalStoreSettings}\r\n */\r\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\r\n\r\n /**\r\n * A signal representing the local application settings. Changes to this signal\r\n * propagate updates to the underlying local store settings.\r\n * @type {WritableSignal<TLocalStoreSettings>}\r\n */\r\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\r\n\r\n /**\r\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\r\n * @type {Subject<TLocalStoreSettings>}\r\n */\r\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\r\n\r\n /**\r\n * The title of the component. Get from Title in ngOnInit\r\n * @type {string}\r\n */\r\n public title: string;\r\n\r\n /**\r\n * Updates local settings and persists them to local storage.\r\n * @return {void}\r\n */\r\n private onConfigUpdate(): void {\r\n if (Object.keys(this.localSettings()).length > 0) {\r\n this._localSettings = { ...this.localSettings() };\r\n this.localSettingsUpdate.next(this._localSettings);\r\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\r\n }\r\n }\r\n\r\n private getLocalStorageSettings() {\r\n try {\r\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\r\n if (localStorageSettingsString != null) {\r\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\r\n }\r\n } catch (error) {\r\n this.msgService.error(error, 'Error parsing layoutConfig:');\r\n this.localSettings.set({} as TLocalStoreSettings);\r\n }\r\n }\r\n\r\n /**\r\n * A unique numerical identifier for the module.\r\n * @type {number}\r\n */\r\n id: number | undefined = undefined;\r\n\r\n /**\r\n * The name of the controller currently handling the request.\r\n * @type {string}\r\n */\r\n controller: string;\r\n\r\n /**\r\n * Checks if the content ID is present.\r\n * @returns {boolean} True if the content ID is present, false otherwise.\r\n */\r\n get isContent(): boolean {\r\n return this.topBarService.checkId('content');\r\n }\r\n\r\n /**\r\n * Checks if the settings ID is present.\r\n * @returns {boolean} True if the settings ID is present, false otherwise.\r\n */\r\n get isSettings(): boolean {\r\n return this.topBarService.checkId('settings');\r\n }\r\n\r\n /**\r\n * Checks if the security ID is present.\r\n * @returns {boolean} True if the security ID is present, false otherwise.\r\n */\r\n get isSecurity(): boolean {\r\n return this.topBarService.checkId('security');\r\n }\r\n\r\n /**\r\n * Defines the top bar items.\r\n */\r\n public topBarItems: TopBarDto[] = [\r\n { id: 'content', icon: 'pi-box', caption: '' },\r\n { id: 'settings', icon: 'pi-cog', caption: '' },\r\n { id: 'security', icon: 'pi-lock', caption: '' }\r\n ];\r\n\r\n /**\r\n * Initializes the component and subscribes to local settings updates.\r\n */\r\n constructor() {\r\n effect(() => {\r\n const config = this.localSettings();\r\n if (config) {\r\n this.onConfigUpdate();\r\n }\r\n });\r\n this.subscriptions.push(\r\n this.route.url.subscribe((url) => {\r\n this.controller = url[0].path;\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.route.paramMap.subscribe((params) => {\r\n this.id = +params.get('id');\r\n this.getLocalStorageSettings();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when a component is destroyed.\r\n * Unsubscribes from all subscriptions to prevent memory leaks,\r\n * resets the top bar items to an empty array, and sets the active ID\r\n * to the ID of the first top bar item (if available).\r\n */\r\n ngOnDestroy() {\r\n this.topBarService.setTopBarItems([]);\r\n this.topBarService.activeId = this.topBarItems[0].id;\r\n this.subscriptions.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n /**\r\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\r\n * sets the top bar items via the top bar service, sets the active ID,\r\n * subscribes to route parameters to get the ID, and retrieves settings.\r\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\r\n */\r\n async ngOnInit(): Promise<void> {\r\n this.subscriptions.push(\r\n this.translateService.get('baseComponent').subscribe((value: BaseComponentLocalization) => {\r\n this.topBarItems[0].caption = value.content;\r\n this.topBarItems[1].caption = value.settings;\r\n this.topBarItems[2].caption = value.security;\r\n })\r\n );\r\n\r\n this.topBarService.setTopBarItems(this.topBarItems);\r\n this.topBarService.activeId = this.topBarItems[0].id;\r\n\r\n await this.getSettings();\r\n\r\n this.subscriptions.push(\r\n this.appTitleService.title$.subscribe((title) => {\r\n this.title = title;\r\n this.changeDetectorRef.detectChanges();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves module instance settings.\r\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\r\n */\r\n async getSettings(): Promise<void> {\r\n try {\r\n this.settings = await this.baseDataService.sendRequest<TBackendStoreSettings>(\r\n `${this.baseDataService.baseUrl}api/${this.controller}/get-module-instance-settings?id=${this.id}`\r\n );\r\n } catch (error) {\r\n this.msgService.error(error);\r\n }\r\n }\r\n\r\n /**\r\n * Saves the provided settings to the backend.\r\n * @param {TLocalStoreSettings} settings - The settings object to save.\r\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\r\n */\r\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\r\n await this.baseDataService\r\n .sendRequest(`api/${this.controller}/put-module-instance-settings`, 'PUT', {\r\n id: this.id,\r\n settings: settings\r\n })\r\n .then(() => {\r\n this.msgService.success(this.translateService.instant('baseComponent.success'));\r\n })\r\n .catch((error) => {\r\n this.msgService.error(error);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseDataService } from './base-data.service';\r\nimport { SecurityDto } from '../dtos/security.dto';\r\nimport { PutSecurityDto } from '../dtos/put-security.dto';\r\n\r\n@Injectable()\r\nexport class SecurityDataService extends BaseDataService {\r\n getSecurity(controller: string, id: number) {\r\n return this.sendRequest<SecurityDto[]>(this.baseUrl + `api/${controller}/get-security?id=${id}`);\r\n }\r\n\r\n saveSecurity(controller: string, request: PutSecurityDto) {\r\n return this.sendRequest<any>(this.baseUrl + `api/${controller}/put-security`, 'PUT', request);\r\n }\r\n\r\n getRealmRoles() {\r\n return this.sendRequest<string[]>(this.baseUrl + `api/security/get-realm-roles`);\r\n }\r\n}\r\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MsgService } from './../services/msg.service';\r\nimport { SecurityDataService } from './../services/security-data.service';\r\nimport { PutSecurityDto } from './../dtos/put-security.dto';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'security',\r\n template: `\r\n <div class=\"flex flex-col md:flex-row gap-8\">\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">\r\n {{ 'securityComponent.security' | translate }}\r\n </div>\r\n @for (item of securityData; track item.name) {\r\n <div class=\"flex flex-col gap-2\">\r\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\r\n {{ item.name }}\r\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\r\n </label>\r\n <p-multiSelect\r\n id=\"oip-security-multiselect-{{ item.name }}\"\r\n placeholder=\"Select roles\"\r\n [maxSelectedLabels]=\"10\"\r\n [options]=\"roles\"\r\n [(ngModel)]=\"item.roles\" />\r\n </div>\r\n }\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <p-button\r\n icon=\"pi pi-save\"\r\n id=\"oip-security-save-button\"\r\n label=\"{{ 'securityComponent.save' | translate }}\"\r\n (click)=\"saveClick()\"\r\n (keydown)=\"saveKeyDown($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\r\n standalone: true\r\n})\r\nexport class SecurityComponent implements OnInit, OnDestroy {\r\n private readonly msgService = inject(MsgService);\r\n private readonly dataService = inject(SecurityDataService);\r\n private readonly translateService = inject(TranslateService);\r\n securityData: any[];\r\n @Input() id: number;\r\n @Input() controller: string;\r\n roles: string[] = [];\r\n\r\n ngOnDestroy(): void {\r\n // on destroy\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.id) {\r\n this.msgService.error('Module id not passed!');\r\n }\r\n if (!this.controller) {\r\n this.msgService.error('Controller not passed!');\r\n }\r\n this.dataService.getSecurity(this.controller, this.id).then(\r\n (result) => {\r\n this.securityData = result;\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n\r\n this.dataService.getRealmRoles().then(\r\n (result) => {\r\n this.roles = result;\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n }\r\n\r\n saveClick() {\r\n const request: PutSecurityDto = {\r\n id: this.id,\r\n securities: this.securityData\r\n };\r\n this.dataService.saveSecurity(this.controller, request).then(\r\n (result) => {\r\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n }\r\n\r\n saveKeyDown($event: KeyboardEvent) {\r\n if ($event.key === 'Enter' || $event.key === 'Space') {\r\n this.saveKeyDown(null);\r\n }\r\n }\r\n}\r\n","/**\r\n * Convert Date to string in format 2022-02-22\r\n * @param date\r\n */\r\nexport function dateToString(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\n/**\r\n * Convert string in format 2022-02-22 to Date\r\n * @param date\r\n */\r\nexport function stringToDate(date: string): Date {\r\n const dateParts = date.split('-');\r\n const day = parseInt(dateParts[2], 10);\r\n const month = parseInt(dateParts[1], 10) - 1;\r\n const year = parseInt(dateParts[0], 10);\r\n\r\n return new Date(year, month, day);\r\n}\r\n\r\n/**\r\n * Add days to date\r\n * @param date\r\n * @param days\r\n */\r\nexport function addDays(date: Date, days: number): Date {\r\n const clonedDate = structuredClone(date);\r\n clonedDate.setDate(clonedDate.getDate() + days);\r\n return clonedDate;\r\n}\r\n\r\n/**\r\n * Get today's date\r\n * @param date\r\n */\r\nexport function getTodayDate(): Date {\r\n const date = new Date();\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\n/* Convert dateformat from DatePipe to PrimeNG*/\r\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\r\n switch (dateformat) {\r\n case 'dd.MM.yyyy':\r\n return 'dd.mm.yy';\r\n case 'dd.MM.yy':\r\n return 'dd.mm.y';\r\n case 'yyyy-MM-dd':\r\n return 'yy-mm-dd';\r\n case 'dd.MMM.yyyy':\r\n return 'dd.M.yy';\r\n default:\r\n console.error(`Failed to convert format: ${dateformat}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert all properties of an object with string dates to Date objects\r\n * @param obj\r\n */\r\nexport function restoreDates(obj: any) {\r\n if (obj === null || typeof obj !== 'object') return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => restoreDates(item));\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n const value = obj[key];\r\n\r\n if (typeof value === 'string' && isIsoDate(value)) {\r\n result[key] = new Date(value);\r\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\r\n result[key] = restoreDates(value);\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Check if a string is a date in ISO format\r\n * @param str\r\n */\r\nexport function isIsoDate(str: string) {\r\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\r\n}\r\n","import { Injectable, effect, signal, computed } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\r\n\r\nexport interface AppConfig {\r\n preset?: string;\r\n primary?: string;\r\n surface?: string | null;\r\n darkTheme?: boolean;\r\n menuMode?: string;\r\n language?: string;\r\n dateFormat: string;\r\n timeFormat: string;\r\n dateTimeFormat: string;\r\n timeZone: string;\r\n}\r\n\r\ninterface LayoutState {\r\n staticMenuDesktopInactive?: boolean;\r\n overlayMenuActive?: boolean;\r\n configSidebarVisible?: boolean;\r\n staticMenuMobileActive?: boolean;\r\n menuHoverActive?: boolean;\r\n}\r\n\r\ninterface MenuChangeEvent {\r\n key: string;\r\n routeEvent?: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LayoutService {\r\n _config: AppConfig = this.getAppConfigFromStorage();\r\n\r\n _state: LayoutState = {\r\n staticMenuDesktopInactive: false,\r\n overlayMenuActive: false,\r\n configSidebarVisible: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n };\r\n\r\n layoutConfig = signal<AppConfig>(this._config);\r\n\r\n layoutState = signal<LayoutState>(this._state);\r\n\r\n private readonly configUpdate = new Subject<AppConfig>();\r\n\r\n private readonly overlayOpen = new Subject<any>();\r\n\r\n private readonly menuSource = new Subject<MenuChangeEvent>();\r\n\r\n private readonly resetSource = new Subject();\r\n\r\n menuSource$ = this.menuSource.asObservable();\r\n\r\n resetSource$ = this.resetSource.asObservable();\r\n\r\n configUpdate$ = this.configUpdate.asObservable();\r\n\r\n overlayOpen$ = this.overlayOpen.asObservable();\r\n\r\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\r\n\r\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\r\n\r\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\r\n\r\n getPrimary = computed(() => this.layoutConfig().primary);\r\n\r\n getSurface = computed(() => this.layoutConfig().surface);\r\n\r\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\r\n\r\n language = computed(() => this.layoutConfig().language);\r\n\r\n dateFormat = computed(() => this.layoutConfig().dateFormat);\r\n\r\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\r\n\r\n timeFormat = computed(() => this.layoutConfig().timeFormat);\r\n\r\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\r\n\r\n monthFormat = computed(() => {\r\n const reDay = /d+/i;\r\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\r\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\r\n const ngDate = ngDateFormat.replace(reDay, '');\r\n const dateGroups = ngDate.match(reDelimiter);\r\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\r\n return dateGroups[1] !== undefined\r\n ? ngDate.replace(dateGroups[0], '')\r\n : ngDate.startsWith(dateGroups[0])\r\n ? ngDate.substring(1)\r\n : ngDate.substring(0, ngDate.length - 1);\r\n }\r\n return ngDateFormat;\r\n });\r\n\r\n timeZone = computed(() => this.layoutConfig().timeZone);\r\n\r\n transitionComplete = signal<boolean>(false);\r\n\r\n private initialized = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const config = this.layoutConfig();\r\n if (config) {\r\n this.onConfigUpdate();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const config = this.layoutConfig();\r\n\r\n if (!this.initialized || !config) {\r\n this.initialized = true;\r\n return;\r\n }\r\n\r\n this.handleDarkModeTransition(config);\r\n });\r\n }\r\n\r\n /**\r\n * Get application settings from browser storage\r\n * @returns AppConfig\r\n */\r\n private getAppConfigFromStorage(): AppConfig {\r\n const appConfigUiString = localStorage.getItem('layoutConfig');\r\n if (appConfigUiString != null) {\r\n const config = JSON.parse(appConfigUiString) as AppConfig;\r\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n return config;\r\n }\r\n return {\r\n preset: 'Aura',\r\n primary: 'emerald',\r\n surface: null,\r\n darkTheme: false,\r\n menuMode: 'static',\r\n language: 'ru',\r\n dateFormat: 'yyyy-MM-dd',\r\n timeFormat: 'HH:mm:ss',\r\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\r\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n };\r\n }\r\n\r\n private handleDarkModeTransition(config: AppConfig): void {\r\n if ((document as any).startViewTransition) {\r\n this.startViewTransition(config);\r\n } else {\r\n this.toggleDarkMode(config);\r\n this.onTransitionEnd();\r\n }\r\n }\r\n\r\n private startViewTransition(config: AppConfig): void {\r\n const transition = (document as any).startViewTransition(() => {\r\n this.toggleDarkMode(config);\r\n });\r\n\r\n transition.ready\r\n .then(() => {\r\n this.onTransitionEnd();\r\n })\r\n .catch(() => {});\r\n }\r\n\r\n toggleDarkMode(config?: AppConfig): void {\r\n const _config = config || this.layoutConfig();\r\n if (_config.darkTheme) {\r\n document.documentElement.classList.add('app-dark');\r\n } else {\r\n document.documentElement.classList.remove('app-dark');\r\n }\r\n }\r\n\r\n private onTransitionEnd() {\r\n this.transitionComplete.set(true);\r\n setTimeout(() => {\r\n this.transitionComplete.set(false);\r\n });\r\n }\r\n\r\n onMenuToggle() {\r\n if (this.isOverlay()) {\r\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\r\n\r\n if (this.layoutState().overlayMenuActive) {\r\n this.overlayOpen.next(null);\r\n }\r\n }\r\n\r\n if (this.isDesktop()) {\r\n this.layoutState.update((prev) => ({\r\n ...prev,\r\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\r\n }));\r\n } else {\r\n this.layoutState.update((prev) => ({\r\n ...prev,\r\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\r\n }));\r\n\r\n if (this.layoutState().staticMenuMobileActive) {\r\n this.overlayOpen.next(null);\r\n }\r\n }\r\n }\r\n\r\n isDesktop() {\r\n return window.innerWidth > 991;\r\n }\r\n\r\n isMobile() {\r\n return !this.isDesktop();\r\n }\r\n\r\n onConfigUpdate() {\r\n this._config = { ...this.layoutConfig() };\r\n this.configUpdate.next(this.layoutConfig());\r\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\r\n }\r\n\r\n onMenuStateChange(event: MenuChangeEvent) {\r\n this.menuSource.next(event);\r\n }\r\n\r\n reset() {\r\n this.resetSource.next(true);\r\n }\r\n}\r\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\r\nimport Aura from '@primeng/themes/aura';\r\nimport Lara from '@primeng/themes/lara';\r\nimport Nora from '@primeng/themes/nora';\r\nimport { PrimeNG } from 'primeng/config';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { LayoutService } from '../services/app.layout.service';\r\n\r\nconst presets = {\r\n Aura,\r\n Lara,\r\n Nora\r\n} as const;\r\n\r\ndeclare type KeyOfType<T> = keyof T extends infer U ? U : never;\r\n\r\ndeclare type SurfacesType = {\r\n name?: string;\r\n palette?: {\r\n 0?: string;\r\n 50?: string;\r\n 100?: string;\r\n 200?: string;\r\n 300?: string;\r\n 400?: string;\r\n 500?: string;\r\n 600?: string;\r\n 700?: string;\r\n 800?: string;\r\n 900?: string;\r\n 950?: string;\r\n };\r\n};\r\n\r\n@Component({\r\n selector: 'app-configurator',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SelectButtonModule],\r\n template: `\r\n <div class=\"flex flex-col gap-4\">\r\n <div>\r\n <span class=\"text-sm text-muted-color font-semibold\">Primary</span>\r\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\r\n @for (primaryColor of primaryColors(); track primaryColor.name) {\r\n <button\r\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\r\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\r\n type=\"button\"\r\n [ngClass]=\"{\r\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\r\n }\"\r\n [style]=\"{\r\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\r\n }\"\r\n [title]=\"primaryColor.name\"\r\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-sm text-muted-color font-semibold\">Surface</span>\r\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\r\n @for (surface of surfaces; track surface.name) {\r\n <button\r\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\r\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\r\n type=\"button\"\r\n [ngClass]=\"{\r\n 'outline-primary': selectedSurfaceColor()\r\n ? selectedSurfaceColor() === surface.name\r\n : layoutService.layoutConfig().darkTheme\r\n ? surface.name === 'zinc'\r\n : surface.name === 'slate'\r\n }\"\r\n [style]=\"{\r\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\r\n }\"\r\n [title]=\"surface.name\"\r\n (click)=\"updateColors($event, 'surface', surface)\"></button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-2\">\r\n <span class=\"text-sm text-muted-color font-semibold\">Presets</span>\r\n <p-selectButton\r\n id=\"oip-app-configurator-preset-select-button\"\r\n size=\"small\"\r\n [allowEmpty]=\"false\"\r\n [ngModel]=\"selectedPreset()\"\r\n [options]=\"presets\"\r\n (ngModelChange)=\"onPresetChange($event)\" />\r\n </div>\r\n @if (showMenuModeButton()) {\r\n <div class=\"flex flex-col gap-2\">\r\n <span class=\"text-sm text-muted-color font-semibold\">Menu Mode</span>\r\n <p-selectButton\r\n id=\"oip-app-configurator-menu-mode-select-button\"\r\n size=\"small\"\r\n [allowEmpty]=\"false\"\r\n [ngModel]=\"menuMode()\"\r\n [options]=\"menuModeOptions\"\r\n (ngModelChange)=\"onMenuModeChange($event)\" />\r\n </div>\r\n }\r\n </div>\r\n `,\r\n host: {\r\n class:\r\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\r\n }\r\n})\r\nexport class AppConfiguratorComponent implements OnInit {\r\n router = inject(Router);\r\n\r\n config: PrimeNG = inject(PrimeNG);\r\n\r\n layoutService: LayoutService = inject(LayoutService);\r\n\r\n platformId = inject(PLATFORM_ID);\r\n\r\n primeng = inject(PrimeNG);\r\n\r\n presets = Object.keys(presets);\r\n\r\n showMenuModeButton = signal(!this.router.url.includes('auth'));\r\n\r\n menuModeOptions = [\r\n { label: 'Static', value: 'static' },\r\n { label: 'Overlay', value: 'overlay' }\r\n ];\r\n\r\n ngOnInit() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.onPresetChange(this.layoutService.layoutConfig().preset);\r\n }\r\n }\r\n\r\n surfaces: SurfacesType[] = [\r\n {\r\n name: 'slate',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f8fafc',\r\n 100: '#f1f5f9',\r\n 200: '#e2e8f0',\r\n 300: '#cbd5e1',\r\n 400: '#94a3b8',\r\n 500: '#64748b',\r\n 600: '#475569',\r\n 700: '#334155',\r\n 800: '#1e293b',\r\n 900: '#0f172a',\r\n 950: '#020617'\r\n }\r\n },\r\n {\r\n name: 'gray',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f9fafb',\r\n 100: '#f3f4f6',\r\n 200: '#e5e7eb',\r\n 300: '#d1d5db',\r\n 400: '#9ca3af',\r\n 500: '#6b7280',\r\n 600: '#4b5563',\r\n 700: '#374151',\r\n 800: '#1f2937',\r\n 900: '#111827',\r\n 950: '#030712'\r\n }\r\n },\r\n {\r\n name: 'zinc',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafafa',\r\n 100: '#f4f4f5',\r\n 200: '#e4e4e7',\r\n 300: '#d4d4d8',\r\n 400: '#a1a1aa',\r\n 500: '#71717a',\r\n 600: '#52525b',\r\n 700: '#3f3f46',\r\n 800: '#27272a',\r\n 900: '#18181b',\r\n 950: '#09090b'\r\n }\r\n },\r\n {\r\n name: 'neutral',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafafa',\r\n 100: '#f5f5f5',\r\n 200: '#e5e5e5',\r\n 300: '#d4d4d4',\r\n 400: '#a3a3a3',\r\n 500: '#737373',\r\n 600: '#525252',\r\n 700: '#404040',\r\n 800: '#262626',\r\n 900: '#171717',\r\n 950: '#0a0a0a'\r\n }\r\n },\r\n {\r\n name: 'stone',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafaf9',\r\n 100: '#f5f5f4',\r\n 200: '#e7e5e4',\r\n 300: '#d6d3d1',\r\n 400: '#a8a29e',\r\n 500: '#78716c',\r\n 600: '#57534e',\r\n 700: '#44403c',\r\n 800: '#292524',\r\n 900: '#1c1917',\r\n 950: '#0c0a09'\r\n }\r\n },\r\n {\r\n name: 'soho',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#ececec',\r\n 100: '#dedfdf',\r\n 200: '#c4c4c6',\r\n 300: '#adaeb0',\r\n 400: '#97979b',\r\n 500: '#7f8084',\r\n 600: '#6a6b70',\r\n 700: '#55565b',\r\n 800: '#3f4046',\r\n 900: '#2c2c34',\r\n 950: '#16161d'\r\n }\r\n },\r\n {\r\n name: 'viva',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f3f3f3',\r\n 100: '#e7e7e8',\r\n 200: '#cfd0d0',\r\n 300: '#b7b8b9',\r\n 400: '#9fa1a1',\r\n 500: '#87898a',\r\n 600: '#6e7173',\r\n 700: '#565a5b',\r\n 800: '#3e4244',\r\n 900: '#262b2c',\r\n 950: '#0e1315'\r\n }\r\n },\r\n {\r\n name: 'ocean',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fbfcfc',\r\n 100: '#F7F9F8',\r\n 200: '#EFF3F2',\r\n 300: '#DADEDD',\r\n 400: '#B1B7B6',\r\n 500: '#828787',\r\n 600: '#5F7274',\r\n 700: '#415B61',\r\n 800: '#29444E',\r\n 900: '#183240',\r\n 950: '#0c1920'\r\n }\r\n }\r\n ];\r\n\r\n selectedPrimaryColor = computed(() => {\r\n return this.layoutService.layoutConfig().primary;\r\n });\r\n\r\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\r\n\r\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\r\n\r\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\r\n\r\n primaryColors = computed<SurfacesType[]>(() => {\r\n const presetPalette = presets[this.layoutService.layoutConfig().preset as KeyOfType<typeof presets>].primitive;\r\n const colors = [\r\n 'emerald',\r\n 'green',\r\n 'lime',\r\n 'orange',\r\n 'amber',\r\n 'yellow',\r\n 'teal',\r\n 'cyan',\r\n 'sky',\r\n 'blue',\r\n 'indigo',\r\n 'violet',\r\n 'purple',\r\n 'fuchsia',\r\n 'pink',\r\n 'rose'\r\n ];\r\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\r\n\r\n colors.forEach((color) => {\r\n palettes.push({\r\n name: color,\r\n palette: presetPalette?.[color as KeyOfType<typeof presetPalette>] as SurfacesType['palette']\r\n });\r\n });\r\n\r\n return palettes;\r\n });\r\n\r\n getPresetExt() {\r\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\r\n const preset = this.layoutService.layoutConfig().preset;\r\n\r\n if (color.name === 'noir') {\r\n return {\r\n semantic: {\r\n primary: {\r\n 50: '{surface.50}',\r\n 100: '{surface.100}',\r\n 200: '{surface.200}',\r\n 300: '{surface.300}',\r\n 400: '{surface.400}',\r\n 500: '{surface.500}',\r\n 600: '{surface.600}',\r\n 700: '{surface.700}',\r\n 800: '{surface.800}',\r\n 900: '{surface.900}',\r\n 950: '{surface.950}'\r\n },\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.950}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.800}',\r\n activeColor: '{primary.700}'\r\n },\r\n highlight: {\r\n background: '{primary.950}',\r\n focusBackground: '{primary.700}',\r\n color: '#ffffff',\r\n focusColor: '#ffffff'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.50}',\r\n contrastColor: '{primary.950}',\r\n hoverColor: '{primary.200}',\r\n activeColor: '{primary.300}'\r\n },\r\n highlight: {\r\n background: '{primary.50}',\r\n focusBackground: '{primary.300}',\r\n color: '{primary.950}',\r\n focusColor: '{primary.950}'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n } else if (preset === 'Nora') {\r\n return {\r\n semantic: {\r\n primary: color.palette,\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.600}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.700}',\r\n activeColor: '{primary.800}'\r\n },\r\n highlight: {\r\n background: '{primary.600}',\r\n focusBackground: '{primary.700}',\r\n color: '#ffffff',\r\n focusColor: '#ffffff'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.500}',\r\n contrastColor: '{surface.900}',\r\n hoverColor: '{primary.400}',\r\n activeColor: '{primary.300}'\r\n },\r\n highlight: {\r\n background: '{primary.500}',\r\n focusBackground: '{primary.400}',\r\n color: '{surface.900}',\r\n focusColor: '{surface.900}'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n } else {\r\n return {\r\n semantic: {\r\n primary: color.palette,\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.500}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.600}',\r\n activeColor: '{primary.700}'\r\n },\r\n highlight: {\r\n background: '{primary.50}',\r\n focusBackground: '{primary.100}',\r\n color: '{primary.700}',\r\n focusColor: '{primary.800}'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.400}',\r\n contrastColor: '{surface.900}',\r\n hoverColor: '{primary.300}',\r\n activeColor: '{primary.200}'\r\n },\r\n highlight: {\r\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\r\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\r\n color: 'rgba(255,255,255,.87)',\r\n focusColor: 'rgba(255,255,255,.87)'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\r\n if (type === 'primary') {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n primary: color.name\r\n }));\r\n } else if (type === 'surface') {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n surface: color.name\r\n }));\r\n }\r\n this.applyTheme(type, color);\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n applyTheme(type: string, color: SurfacesType) {\r\n if (type === 'primary') {\r\n updatePreset(this.getPresetExt());\r\n } else if (type === 'surface') {\r\n updateSurfacePalette(color.palette);\r\n }\r\n }\r\n\r\n onPresetChange(event: string) {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n preset: event\r\n }));\r\n const preset = presets[event as KeyOfType<typeof presets>];\r\n const surfacePalette = this.surfaces.find((s) => s.name === this.selectedSurfaceColor())?.palette;\r\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\r\n }\r\n\r\n onMenuModeChange(event: string) {\r\n this.layoutService.layoutConfig.update((prev) => ({\r\n ...prev,\r\n menuMode: event\r\n }));\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'logo',\n standalone: true,\n template: `\n <svg\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.height]=\"height + 'px'\"\n [attr.width]=\"width + 'px'\">\n <path\n class=\"primary-logo-color\"\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"primary-logo-color\"\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"primary-logo-color\"\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"secondary-logo-color\"\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n </svg>\n `,\n styles: [`\n .primary-logo-color {\n fill: var(--primary-color);\n }\n\n .secondary-logo-color {\n fill: var(--p-primary-600);\n }\n `]\n})\nexport class LogoComponent {\n @Input() width: number;\n @Input() height: number;\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport {\r\n LoginResponse,\r\n LogoutAuthOptions,\r\n OidcSecurityService,\r\n PublicEventsService,\r\n EventTypes, AuthOptions\r\n} from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n\r\nexport abstract class SecurityService {\r\n abstract auth(): void;\r\n\r\n abstract logout(): void;\r\n\r\n abstract isAuthenticated(): Observable<boolean>;\r\n\r\n abstract getAccessToken(): Observable<string>\r\n\r\n abstract isTokenExpired(): Observable<boolean>;\r\n\r\n abstract getCurrentUser(): any;\r\n\r\n abstract forceRefreshSession(): Observable<LoginResponse>;\r\n\r\n abstract isAdmin(): boolean\r\n\r\n abstract authorize(configId?: string, authOptions?: AuthOptions): void;\r\n}\r\n\r\n\r\n/**\r\n * SecurityService extends OidcSecurityService to manage authentication,\r\n * token handling, and user role access in an Angular application.\r\n *\r\n * It provides helper methods for checking authentication, managing tokens,\r\n * determining user roles, and performing logout and refresh operations.\r\n */\r\n@Injectable()\r\nexport class KeycloakSecurityService extends OidcSecurityService implements OnDestroy, SecurityService {\r\n /**\r\n * Handles angular OIDC events.\r\n */\r\n private readonly publicEventsService = inject(PublicEventsService);\r\n\r\n /**\r\n * Stores the latest login response from checkAuth().\r\n */\r\n private loginResponse = new BehaviorSubject<LoginResponse>(null);\r\n\r\n /**\r\n * Stores the decoded access token payload.\r\n */\r\n private payload = new BehaviorSubject<any>(null);\r\n\r\n /**\r\n * Stores user-specific data from the login response.\r\n */\r\n userData: any;\r\n\r\n /**\r\n * Initializes service and subscribes to authentication events.\r\n * When a 'NewAuthenticationResult' event is received, the `auth` method is called.\r\n */\r\n constructor() {\r\n super();\r\n this.publicEventsService\r\n .registerForEvents()\r\n .pipe(filter((event) => event.type === EventTypes.NewAuthenticationResult))\r\n .subscribe(() => {\r\n this.auth();\r\n });\r\n }\r\n\r\n getCurrentUser() {\r\n return this.userData;\r\n }\r\n\r\n /**\r\n * Returns the ID token for the sign-in.\r\n * @returns A string with the id token.\r\n */\r\n override getAccessToken(): Observable<string> {\r\n return this.loginResponse.pipe(map((data) => data?.accessToken));\r\n }\r\n\r\n /**\r\n * Indicates whether the current user has the 'admin' role.\r\n *\r\n * @returns {boolean} True if the user is an admin, false otherwise.\r\n */\r\n isAdmin(): boolean {\r\n return this.payload.getValue()?.realm_access?.roles?.includes('admin');\r\n }\r\n\r\n /**\r\n * Initiates authentication check and updates login response, user data,\r\n * and decoded token payload if authenticated.\r\n */\r\n auth() {\r\n super.checkAuth().subscribe((_response: LoginResponse) => {\r\n this.loginResponse.next(_response);\r\n this.userData = _response.userData;\r\n this.getPayloadFromAccessToken().subscribe((_token) => {\r\n this.payload.next(_token);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Performs logout and clears the local token payload.\r\n *\r\n * @param {string} [configId] Optional configuration ID for logout.\r\n * @param {LogoutAuthOptions} [logoutAuthOptions] Optional logout options.\r\n */\r\n logout(configId?: string, logoutAuthOptions?: LogoutAuthOptions) {\r\n this.logoff(configId, logoutAuthOptions).subscribe((x) => this.payload.next(x));\r\n }\r\n\r\n /**\r\n * Completes the BehaviorSubjects when the service is destroyed to avoid memory leaks.\r\n */\r\n ngOnDestroy(): void {\r\n this.loginResponse.complete();\r\n this.payload.complete();\r\n }\r\n\r\n /**\r\n * Checks whether the current access token is expired based on the 'exp' claim.\r\n *\r\n * @returns {Observable<boolean>} Observable that emits true if the token is expired.\r\n */\r\n isTokenExpired(): Observable<boolean> {\r\n return this.getPayloadFromAccessToken().pipe(\r\n map((payload) => {\r\n return payload.exp < Math.floor(Date.now() / 1000);\r\n })\r\n );\r\n }\r\n}\r\n\r\n\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { SecurityService } from './security.service';\r\nimport { BaseDataService } from './base-data.service';\r\n\r\n/**\r\n * UserService is responsible for retrieving and handling user-related data,\r\n * including the user's photo and short label for avatar display.\r\n */\r\n@Injectable()\r\nexport class UserService {\r\n private readonly securityService = inject(SecurityService);\r\n private readonly baseDataService = inject(BaseDataService);\r\n\r\n constructor() {\r\n this.getUserPhoto();\r\n }\r\n\r\n /**\r\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\r\n */\r\n photo: any = null;\r\n\r\n /**\r\n * Indicates whether the user photo has finished loading.\r\n */\r\n photoLoaded: boolean = false;\r\n\r\n /**\r\n * Returns a short label composed of the user's initials.\r\n * Typically used for avatar display when a photo is unavailable.\r\n */\r\n get shortLabel(): string {\r\n const data = this.securityService.getCurrentUser();\r\n return (data) ? data.given_name[0] + data.family_name[0] : \"\";\r\n }\r\n\r\n get userName(): string {\r\n const data = this.securityService.getCurrentUser();\r\n return `${data.given_name} ${data.family_name}`;\r\n }\r\n\r\n /**\r\n * Initiates an HTTP request to fetch the user's photo based on their email,\r\n * and updates the `photo` and `photoLoaded` properties accordingly.\r\n */\r\n getUserPhoto(): void {\r\n const url = `${this.baseDataService.baseUrl}api/user-profile/get-user-photo?email=${this.securityService.getCurrentUser().email}`;\r\n this.baseDataService.getBlob(url).then(\r\n (data) => {\r\n this.createImageFromBlob(data as Blob);\r\n this.photoLoaded = true;\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\r\n *\r\n * @param image - The image Blob to be converted.\r\n */\r\n private createImageFromBlob(image: Blob): void {\r\n const reader = new FileReader();\r\n reader.addEventListener(\r\n 'load',\r\n () => {\r\n this.photo = reader.result;\r\n },\r\n false\r\n );\r\n if (image) {\r\n reader.readAsDataURL(image);\r\n }\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../services/app.layout.service';\nimport { AppConfiguratorComponent } from './app-configurator.component';\nimport { LogoComponent } from './logo.component';\nimport { SecurityService } from '../services/security.service';\nimport { TopBarService } from '../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../services/user.service';\nimport { ButtonModule } from 'primeng/button';\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n LogoComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule\n ],\n template: `\n <div class=\"layout-topbar\">\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <logo [height]=\"36\" [width]=\"36\"></logo>\n <span>OIP</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs class=\"layout-topbar-tabs ml-2\" [(value)]=\"topBarService.activeId\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"securityService.logout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>Logout</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">Profile</span>\n </button>\n </div>\n </div>\n </div>\n </div>`,\n styles: [`\n\n `]\n})\nexport class AppTopbar {\n items!: MenuItem[];\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n\n constructor(public layoutService: LayoutService) {\n }\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n this.securityService.logout();\n }\n }\n}\n","import { Component } from '@angular/core';\r\nimport { LogoComponent } from './logo.component';\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n template: `\r\n <div class=\"layout-footer\">\r\n <logo class=\"mr-2\" height=\"18\" width=\"18\"></logo>\r\n <span class=\"font-medium\">OIP</span>\r\n </div>\r\n `,\r\n standalone: true,\r\n imports: [LogoComponent]\r\n})\r\nexport class FooterComponent {\r\n constructor() {}\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { LayoutService, } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({providedIn: \"root\"})\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n public baseUrl: string = \"\";\n private securityData: SecurityDataType | null = null;\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] = (\n securityData,\n ) => ({\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n Authorization: `Bearer ${securityData}`,\n },\n });\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n constructor() {\n this.securityService.getAccessToken().subscribe((token) => {\n this.securityData = token;\n });\n }\n\n public setSecurityData = (data: SecurityDataType | null) => {\n this.securityData = data;\n };\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData()),\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(this.securityData))) ||\n {};\n const requestParams = this.mergeRequestParams(params, secureParams);\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? {\"Content-Type\": type}\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response.clone() as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const data = !responseFormat\n ? r\n : await response[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) throw data;\n return data.data;\n });\n };\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n EditModuleInstanceDto,\n IntKeyValueDto,\n MenuDeleteModuleInstanceParams,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class Menu<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves the menu available to the current authenticated user.\n *\n * @tags Menu\n * @name menuGet\n * @request GET:/api/menu/get\n * @secure\n */\n menuGet = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Retrieves the admin-specific menu.\n *\n * @tags Menu\n * @name menuGetAdminMenu\n * @request GET:/api/menu/get-admin-menu\n * @secure\n */\n menuGetAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Retrieves all available modules in the system.\n *\n * @tags Menu\n * @name menuGetModules\n * @request GET:/api/menu/get-modules\n * @secure\n */\n menuGetModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Adds a new module instance to the system.\n *\n * @tags Menu\n * @name menuAddModuleInstance\n * @request POST:/api/menu/add-module-instance\n * @secure\n */\n menuAddModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Edits an existing module instance.\n *\n * @tags Menu\n * @name menuEditModuleInstance\n * @request POST:/api/menu/edit-module-instance\n * @secure\n */\n menuEditModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Deletes a module instance by its identifier.\n *\n * @tags Menu\n * @name menuDeleteModuleInstance\n * @request DELETE:/api/menu/delete-module-instance\n * @secure\n */\n menuDeleteModuleInstance = (\n query: MenuDeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { BaseDataService } from './base-data.service';\r\nimport { MenuChangeEvent } from '../events/menu-change.event';\r\nimport { EditModuleInstanceDto } from '../dtos/edit-module-instance.dto';\r\nimport { Menu } from '../api/Menu';\r\nimport { AppTitleService } from './app-title.service';\r\nimport { AddModuleInstanceDto, ModuleInstanceDto } from '../api/data-contracts';\r\n\r\n@Injectable()\r\nexport class MenuService extends BaseDataService {\r\n private readonly menuSource = new Subject<MenuChangeEvent>();\r\n private readonly resetSource = new Subject();\r\n private readonly titleService = inject(AppTitleService);\r\n private readonly menuDataService = inject(Menu);\r\n menuSource$ = this.menuSource.asObservable();\r\n resetSource$ = this.resetSource.asObservable();\r\n contextMenuItem: any;\r\n\r\n public menu: ModuleInstanceDto[] = [];\r\n public adminMode: boolean = false;\r\n\r\n async loadMenu() {\r\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\r\n }\r\n\r\n /**\r\n * Handles changes in the menu state.\r\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\r\n * @return {void}\r\n */\r\n onMenuStateChange(event: MenuChangeEvent): void {\r\n this.menuSource.next(event);\r\n this.titleService.setTitle(event.item.label);\r\n }\r\n\r\n reset() {\r\n this.resetSource.next(true);\r\n }\r\n\r\n getMenu() {\r\n return this.menuDataService.menuGet();\r\n }\r\n\r\n getAdminMenu() {\r\n return this.menuDataService.menuGetAdminMenu();\r\n }\r\n\r\n getModules() {\r\n return this.menuDataService.menuGetModules();\r\n }\r\n\r\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\r\n return this.menuDataService.menuAddModuleInstance(addModuleInstance as AddModuleInstanceDto);\r\n }\r\n\r\n deleteItem(moduleInstanceId: number) {\r\n return this.sendRequest(this.baseUrl + 'api/menu/delete-module-instance?id=' + moduleInstanceId, 'DELETE');\r\n }\r\n\r\n editModuleInstance(item: EditModuleInstanceDto) {\r\n return this.sendRequest(this.baseUrl + 'api/menu/edit-module-instance', 'POST', item);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { LayoutService } from '../../services/app.layout.service';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { NgIf, NgClass, NgFor } from '@angular/common';\r\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\r\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { MsgService } from '../../services/msg.service';\r\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\r\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { Menu } from '../../api/Menu';\r\nimport { MenuDeleteModuleInstanceParams } from '../../api/data-contracts';\r\n\r\ninterface MenuItemComponentTranslation {\r\n delete: string;\r\n edit: string;\r\n new: string;\r\n deleteItemConfirmHeader: string;\r\n deleteItemConfirmMessage: string;\r\n deleteItemSuccessMessage: string;\r\n deleteItemConfirmRejectButtonPropsLabel: string;\r\n deleteItemConfirmAcceptButtonPropsLabel: string;\r\n}\r\n\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: '[app-menuitem]',\r\n template: `\r\n <ng-container>\r\n <p-confirm-dialog />\r\n <div\r\n *ngIf=\"root && item.visible !== false\"\r\n class=\"layout-menuitem-root-text\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n {{ item.label }}\r\n </div>\r\n <a\r\n *ngIf=\"(!item.routerLink || item.items) && item.visible !== false\"\r\n pRipple\r\n tabindex=\"0\"\r\n [attr.href]=\"item.url\"\r\n [attr.target]=\"item.target\"\r\n [ngClass]=\"item.class\"\r\n (click)=\"itemClick($event)\">\r\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\r\n <i *ngIf=\"item.items\" class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\r\n </a>\r\n <a\r\n *ngIf=\"item.routerLink && !item.items && item.visible !== false\"\r\n pRipple\r\n routerLinkActive=\"active-route\"\r\n tabindex=\"0\"\r\n [attr.target]=\"item.target\"\r\n [fragment]=\"item.fragment\"\r\n [ngClass]=\"item.class\"\r\n [preserveFragment]=\"item.preserveFragment\"\r\n [queryParams]=\"item.queryParams\"\r\n [queryParamsHandling]=\"item.queryParamsHandling\"\r\n [replaceUrl]=\"item.replaceUrl\"\r\n [routerLink]=\"item.routerLink\"\r\n [routerLinkActiveOptions]=\"\r\n item.routerLinkActiveOptions || {\r\n paths: 'exact',\r\n queryParams: 'ignored',\r\n matrixParams: 'ignored',\r\n fragment: 'ignored'\r\n }\r\n \"\r\n [skipLocationChange]=\"item.skipLocationChange\"\r\n [state]=\"item.state\"\r\n (click)=\"itemClick($event)\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\r\n <i *ngIf=\"item.items\" class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\r\n </a>\r\n\r\n <ul\r\n *ngIf=\"item.items && item.visible !== false\"\r\n [@children]=\"submenuAnimation\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n <ng-template let-child let-i=\"index\" ngFor [ngForOf]=\"item.items\">\r\n <li\r\n app-menuitem\r\n [class]=\"child.badgeClass\"\r\n [contextMenu]=\"contextMenu\"\r\n [index]=\"i\"\r\n [item]=\"child\"\r\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\r\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\r\n [parentKey]=\"key\"></li>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n `,\r\n animations: [\r\n trigger('children', [\r\n state(\r\n 'collapsed',\r\n style({\r\n height: '0'\r\n })\r\n ),\r\n state(\r\n 'expanded',\r\n style({\r\n height: '*'\r\n })\r\n ),\r\n transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\r\n ])\r\n ],\r\n imports: [NgIf, RippleModule, NgClass, RouterLinkActive, RouterLink, NgFor, ContextMenuModule, ConfirmDialog],\r\n providers: [ConfirmationService]\r\n})\r\nexport class MenuItemComponent implements OnInit, OnDestroy {\r\n private readonly layoutService = inject(LayoutService);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly msgService = inject(MsgService);\r\n private readonly menuDataService = inject(Menu);\r\n\r\n @Input() item: ContextMenuItemDto;\r\n @Input() index!: number;\r\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\r\n @Input() parentKey!: string;\r\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\r\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\r\n @Input() contextMenu: ContextMenu;\r\n\r\n private active = false;\r\n private subscriptions: Subscription[] = [];\r\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\r\n\r\n protected key: string = '';\r\n\r\n constructor(\r\n private readonly cd: ChangeDetectorRef,\r\n public router: Router,\r\n private readonly menuService: MenuService\r\n ) {\r\n this.subscriptions.push(\r\n this.menuService.menuSource$.subscribe((value) => {\r\n Promise.resolve(null).then(() => {\r\n if (value.routeEvent) {\r\n this.active = value.key === this.key || value.key.startsWith(this.key + '-');\r\n } else if (value.key !== this.key && !value.key.startsWith(this.key + '-')) {\r\n this.active = false;\r\n }\r\n });\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.menuService.resetSource$.subscribe(() => {\r\n this.active = false;\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\r\n if (this.item.routerLink) {\r\n this.updateActiveStateFromRoute();\r\n }\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\r\n this.localization = value;\r\n })\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\r\n\r\n if (this.item.routerLink) {\r\n this.updateActiveStateFromRoute();\r\n }\r\n }\r\n\r\n updateActiveStateFromRoute() {\r\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\r\n paths: 'exact',\r\n queryParams: 'ignored',\r\n matrixParams: 'ignored',\r\n fragment: 'ignored'\r\n });\r\n\r\n if (activeRoute) {\r\n this.menuService.onMenuStateChange({\r\n key: this.key,\r\n item: this.item,\r\n routeEvent: true\r\n });\r\n }\r\n }\r\n\r\n itemClick(event: Event) {\r\n // avoid processing disabled items\r\n if (this.item.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n // execute command\r\n if (this.item.command) {\r\n this.item.command({ originalEvent: event, item: this.item });\r\n }\r\n\r\n // toggle active state\r\n if (this.item.items) {\r\n this.active = !this.active;\r\n }\r\n\r\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\r\n }\r\n\r\n get submenuAnimation() {\r\n return this.root || this.active ? 'expanded' : 'collapsed';\r\n }\r\n\r\n @HostBinding('class.active-menuitem')\r\n get activeClass() {\r\n return this.active && !this.root;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.map((s) => s.unsubscribe());\r\n }\r\n\r\n private newClick(e: MenuItemCommandEvent) {\r\n this.menuItemCreateDialogComponent.showDialog();\r\n }\r\n\r\n onContextMenu($event: MouseEvent, item: any) {\r\n this.menuService.contextMenuItem = item;\r\n this.contextMenu.model = [\r\n {\r\n label: this.localization.new,\r\n icon: PrimeIcons.PLUS,\r\n command: (event) => this.newClick(event)\r\n },\r\n {\r\n label: this.localization.edit,\r\n icon: PrimeIcons.FILE_EDIT,\r\n command: (event) => this.editClick(event)\r\n },\r\n { separator: true },\r\n {\r\n label: this.localization.delete,\r\n icon: PrimeIcons.TRASH,\r\n command: (event) => this.deleteItem(event)\r\n }\r\n ];\r\n this.contextMenu.show($event);\r\n }\r\n\r\n private deleteItem(event: MenuItemCommandEvent) {\r\n this.confirmationService.confirm({\r\n header: this.localization.deleteItemConfirmHeader,\r\n message: this.localization.deleteItemConfirmMessage,\r\n icon: PrimeIcons.TRASH,\r\n rejectButtonProps: {\r\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\r\n severity: 'secondary',\r\n outlined: true\r\n },\r\n acceptButtonProps: {\r\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\r\n severity: 'danger'\r\n },\r\n accept: async () => {\r\n await this.menuDataService.menuDeleteModuleInstance({\r\n id: this.menuService.contextMenuItem?.moduleInstanceId\r\n } as MenuDeleteModuleInstanceParams);\r\n this.msgService.success(this.localization.deleteItemSuccessMessage);\r\n await this.menuService.loadMenu();\r\n }\r\n });\r\n }\r\n\r\n private editClick(event: MenuItemCommandEvent) {\r\n this.menuItemEditDialogComponent.showDialog();\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\r\nimport { Menu } from '../../api/Menu';\r\nimport { MenuService } from '../../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'menu-item-create-dialog',\r\n standalone: true,\r\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\r\n template: `\r\n <p-dialog\r\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '40rem' }\"\r\n [(visible)]=\"visible\">\r\n @if (menuService.contextMenuItem) {\r\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\r\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\r\n </label>\r\n <input\r\n autocomplete=\"off\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-create-dialog-parent-input\"\r\n pInputText\r\n readonly\r\n [ngModel]=\"menuService.contextMenuItem?.label\" />\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\r\n {{ 'menuItemCreateDialogComponent.label' | translate }}\r\n </label>\r\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\r\n {{ 'menuItemCreateDialogComponent.module' | translate }}\r\n </label>\r\n <p-select\r\n appendTo=\"body\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-create-module\"\r\n optionLabel=\"value\"\r\n optionValue=\"key\"\r\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\r\n [options]=\"modules\"\r\n [(ngModel)]=\"selectModule\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\r\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\r\n </label>\r\n <i class=\"{{ selectIcon }}\"></i>\r\n <input class=\"flex-auto\" id=\"oip-menu-item-create-dialog-icon\" pInputText [(ngModel)]=\"selectIcon\" />\r\n </div>\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button\r\n id=\"oip-menu-item-create-cancel\"\r\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\r\n severity=\"secondary\"\r\n (click)=\"changeVisible()\"\r\n (keydown)=\"changeVisible()\" />\r\n <p-button\r\n id=\"oip-menu-item-create-save\"\r\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\r\n (click)=\"save()\"\r\n (keydown)=\"save()\" />\r\n </div>\r\n </p-dialog>\r\n `\r\n})\r\nexport class MenuItemCreateDialogComponent implements OnInit {\r\n menuService = inject(MenuService);\r\n protected readonly menu = inject(Menu);\r\n @Input() visible!: boolean;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n modules: IntKeyValueDto[] = [];\r\n selectModule: any;\r\n label: string;\r\n selectIcon: string = 'pi pi-box';\r\n\r\n async ngOnInit() {\r\n this.modules = await this.menu.menuGetModules();\r\n }\r\n\r\n changeVisible() {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async save() {\r\n const item: AddModuleInstanceDto = {\r\n moduleId: this.selectModule,\r\n label: this.label,\r\n icon: this.selectIcon,\r\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\r\n };\r\n await this.menuService.addModuleInstance(item);\r\n await this.menuService.loadMenu();\r\n this.hide();\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n showDialog() {\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { SecurityDataService } from '../../services/security-data.service';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { EditModuleInstanceDto } from '../../dtos/edit-module-instance.dto';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n imports: [ButtonModule, DialogModule, InputTextModule, FormsModule, TranslatePipe, MultiSelectModule],\r\n selector: 'menu-item-edit-dialog',\r\n standalone: true,\r\n template: `\r\n <p-dialog\r\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '40rem' }\"\r\n [(visible)]=\"visible\">\r\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\r\n {{ 'menuItemEditDialogComponent.label' | translate }}\r\n </label>\r\n <input\r\n autocomplete=\"off\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-edit-dialog-menu-input\"\r\n pInputText\r\n [(ngModel)]=\"item.label\" />\r\n </div>\r\n\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\r\n {{ 'menuItemEditDialogComponent.icon' | translate }}\r\n </label>\r\n <i class=\"{{ item.icon }}\"></i>\r\n <input class=\"flex-auto\" id=\"oip-menu-item-edit-dialog-icon\" pInputText [(ngModel)]=\"item.icon\" />\r\n </div>\r\n\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"security\">\r\n {{ 'menuItemEditDialogComponent.security' | translate }}\r\n </label>\r\n <p-multiSelect\r\n appendTo=\"body\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\r\n placeholder=\"Select roles\"\r\n [maxSelectedLabels]=\"10\"\r\n [options]=\"roles\"\r\n [(ngModel)]=\"item.viewRoles\" />\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button\r\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\r\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\r\n severity=\"secondary\"\r\n (click)=\"changeVisible()\"\r\n (keydown)=\"changeVisible()\" />\r\n <p-button\r\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\r\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\r\n (click)=\"save()\"\r\n (keydown)=\"save()\" />\r\n </div>\r\n </p-dialog>\r\n `\r\n})\r\nexport class MenuItemEditDialogComponent {\r\n private readonly menuService = inject(MenuService);\r\n private readonly securityDataService = inject(SecurityDataService);\r\n\r\n @Input() visible!: boolean;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n modules: any[] = [];\r\n roles: string[] = [];\r\n item: EditModuleInstanceDto = {\r\n icon: '',\r\n label: '',\r\n viewRoles: [''],\r\n moduleId: 0,\r\n moduleInstanceId: 0,\r\n parentId: 0\r\n };\r\n\r\n changeVisible() {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async save() {\r\n await this.menuService.editModuleInstance(this.item);\r\n await this.menuService.loadMenu();\r\n this.hide();\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async showDialog() {\r\n this.item = {\r\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\r\n moduleId: this.menuService.contextMenuItem?.moduleId,\r\n parentId: this.menuService.contextMenuItem?.parentId,\r\n label: this.menuService.contextMenuItem?.label,\r\n icon: this.menuService.contextMenuItem?.icon,\r\n viewRoles: this.menuService.contextMenuItem?.securities\r\n };\r\n\r\n this.roles = await this.securityDataService.getRealmRoles();\r\n this.menuService.getModules().then((data) => {\r\n this.modules = data;\r\n });\r\n\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n}\r\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SecurityService } from '../../services/security.service';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MenuItemComponent } from './menu-item.component';\r\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\r\nimport { Menu } from '../../api/Menu';\r\n\r\n@Component({\r\n imports: [\r\n MenuItemComponent,\r\n ButtonModule,\r\n ContextMenuModule,\r\n DialogModule,\r\n InputTextModule,\r\n MenuItemCreateDialogComponent,\r\n FormsModule,\r\n MenuItemEditDialogComponent\r\n ],\r\n providers: [Menu],\r\n selector: 'app-menu',\r\n standalone: true,\r\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\r\n <ul class=\"layout-menu\">\r\n @for (item of menuService.menu; track item; let i = $index) {\r\n <ng-container>\r\n @if (item.separator) {\r\n <li class=\"menu-separator\"></li>\r\n } @else {\r\n <li\r\n app-menuitem\r\n [contextMenu]=\"contextMenu\"\r\n [index]=\"i\"\r\n [item]=\"item\"\r\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\r\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\r\n [root]=\"true\"></li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </div>\r\n <p-contextMenu [target]=\"empty\" />\r\n @if (securityService.isAdmin) {\r\n <menu-item-create-dialog />\r\n <menu-item-edit-dialog />\r\n }`\r\n})\r\nexport class MenuComponent implements OnInit {\r\n readonly menuService = inject(MenuService);\r\n readonly securityService = inject(SecurityService);\r\n readonly translateService = inject(TranslateService);\r\n\r\n @ViewChild(MenuItemCreateDialogComponent)\r\n menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\r\n @ViewChild(MenuItemEditDialogComponent)\r\n menuItemEditDialogComponent: MenuItemEditDialogComponent;\r\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\r\n\r\n ngOnInit() {\r\n this.menuService.loadMenu().then();\r\n }\r\n\r\n private newClick(e: MenuItemCommandEvent) {\r\n this.menuItemCreateDialogComponent.showDialog();\r\n }\r\n\r\n onContextMenu($event: MouseEvent) {\r\n this.menuService.contextMenuItem = null;\r\n this.contextMenu.model = [\r\n {\r\n label: this.translateService.instant('menuComponent.new'),\r\n icon: PrimeIcons.PLUS,\r\n command: (event) => this.newClick(event)\r\n }\r\n ];\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MenuComponent } from './menu/menu.component';\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n template: ` <app-menu></app-menu>`,\r\n standalone: true,\r\n imports: [MenuComponent]\r\n})\r\nexport class SidebarComponent {\r\n constructor() {}\r\n}\r\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AppTopbar } from './top-bar.component';\r\nimport { FooterComponent } from './footer.component';\r\nimport { LayoutService } from './../services/app.layout.service';\r\nimport { SidebarComponent } from './sidebar.component';\r\nimport { Menu } from '../api/Menu';\r\nimport { MenuService } from '../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'app-layout',\r\n standalone: true,\r\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\r\n template: `\r\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <app-topbar></app-topbar>\r\n <app-sidebar></app-sidebar>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <app-footer></app-footer>\r\n </div>\r\n <div class=\"layout-mask animate-fadein\"></div>\r\n </div>\r\n `,\r\n providers: [MenuService, Menu]\r\n})\r\nexport class AppLayoutComponent implements OnDestroy {\r\n protected layoutService = inject(LayoutService);\r\n protected router = inject(Router);\r\n protected renderer = inject(Renderer2);\r\n overlayMenuOpenSubscription: Subscription;\r\n\r\n menuOutsideClickListener: () => void;\r\n\r\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\r\n\r\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\r\n\r\n constructor() {\r\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\r\n if (!this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\r\n if (this.isOutsideClicked(event)) {\r\n this.hideMenu();\r\n }\r\n });\r\n }\r\n\r\n if (this.layoutService.layoutState().staticMenuMobileActive) {\r\n this.blockBodyScroll();\r\n }\r\n });\r\n\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\r\n this.hideMenu();\r\n });\r\n }\r\n\r\n isOutsideClicked(event: MouseEvent) {\r\n const sidebarEl = document.querySelector('.layout-sidebar');\r\n const topbarEl = document.querySelector('.layout-menu-button');\r\n const eventTarget = event.target as Node;\r\n\r\n return !(\r\n sidebarEl?.isSameNode(eventTarget) ||\r\n sidebarEl?.contains(eventTarget) ||\r\n topbarEl?.isSameNode(eventTarget) ||\r\n topbarEl?.contains(eventTarget)\r\n );\r\n }\r\n\r\n hideMenu() {\r\n this.layoutService.layoutState.update((prev) => ({\r\n ...prev,\r\n overlayMenuActive: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n }));\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n this.menuOutsideClickListener = null;\r\n }\r\n this.unblockBodyScroll();\r\n }\r\n\r\n blockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.add('blocked-scroll');\r\n } else {\r\n document.body.className += ' blocked-scroll';\r\n }\r\n }\r\n\r\n unblockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.remove('blocked-scroll');\r\n } else {\r\n document.body.className = document.body.className.replace(\r\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\r\n ' '\r\n );\r\n }\r\n }\r\n\r\n get containerClass() {\r\n return {\r\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\r\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-static-inactive':\r\n this.layoutService.layoutState().staticMenuDesktopInactive &&\r\n this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\r\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\r\n };\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.overlayMenuOpenSubscription) {\r\n this.overlayMenuOpenSubscription.unsubscribe();\r\n }\r\n\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n }\r\n }\r\n}\r\n","import { Component, computed, inject } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { StyleClassModule } from 'primeng/styleclass';\r\nimport { AppConfiguratorComponent } from './app-configurator.component';\r\nimport { LayoutService } from '../services/app.layout.service';\r\n\r\n@Component({\r\n selector: 'app-floating-configurator',\r\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\r\n template: `\r\n <div class=\"fixed flex gap-4 top-8 right-8\">\r\n <p-button\r\n id=\"oip-app-floating-configurator-dark-theme-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\r\n [rounded]=\"true\"\r\n (onClick)=\"toggleDarkMode()\" />\r\n <div class=\"relative\">\r\n <p-button\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n icon=\"pi pi-palette\"\r\n id=\"oip-app-floating-configurator-next-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n type=\"button\"\r\n [hideOnOutsideClick]=\"true\"\r\n [rounded]=\"true\" />\r\n <app-configurator />\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class AppFloatingConfiguratorComponent {\r\n LayoutService = inject(LayoutService);\r\n\r\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\r\n\r\n toggleDarkMode() {\r\n this.LayoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n darkTheme: !state.darkTheme\r\n }));\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { LogoComponent } from './logo.component';\r\nimport { Button } from 'primeng/button';\r\nimport { AppFloatingConfiguratorComponent } from './app-floating-configurator.component';\r\n\r\n@Component({\r\n selector: 'app-notfound',\r\n template: ` <app-floating-configurator />\r\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\r\n <div\r\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\r\n style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo height=\"96\" width=\"96\"></logo>\r\n </div>\r\n <span class=\"text-primary font-bold text-3xl\">404</span>\r\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">Not Found</h1>\r\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">Requested resource is not available.</div>\r\n <p-button id=\"oip-app-notfound-go-to-home-button\" label=\"Go to home\" routerLink=\"/\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>`,\r\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent],\r\n standalone: true\r\n})\r\nexport class NotfoundComponent {}\r\n","import { Component, inject } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { LogoComponent } from '../../logo.component';\r\nimport { SecurityService } from '../../../services/security.service';\r\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n template: `\r\n <app-floating-configurator />\r\n <div\r\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\r\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo [height]=\"96\" [width]=\"96\" />\r\n </div>\r\n <div class=\"text-center mb-8\">\r\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\r\n {{ 'unauthorized.welcomeToOip' | translate }}\r\n </div>\r\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\r\n </div>\r\n <div>\r\n <p-button\r\n id=\"oip-unauthorized-error-sign-in-button\"\r\n label=\"{{ 'unauthorized.signIn' | translate }}\"\r\n styleClass=\"w-full\"\r\n (click)=\"securityService.authorize()\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [\r\n ButtonModule,\r\n RippleModule,\r\n LogoComponent,\r\n AppFloatingConfiguratorComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe\r\n ]\r\n})\r\nexport class UnauthorizedComponent {\r\n protected readonly securityService = inject(SecurityService);\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-error',\r\n template: `<div\r\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\r\n <div class=\"flex flex-column align-items-center justify-content-center\">\r\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\r\n <div\r\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div\r\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\r\n style=\"border-radius:53px\">\r\n <div class=\"grid flex flex-column align-items-center\">\r\n <div\r\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\r\n style=\"height:3.2rem; width:3.2rem;\">\r\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\r\n </div>\r\n <h1 class=\"text-900 font-bold text-5xl mb-2\">Error Occured</h1>\r\n <span class=\"text-600 mb-5\">Requested resource is not available.</span>\r\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\r\n <button\r\n class=\"p-button-text\"\r\n icon=\"pi pi-arrow-left\"\r\n id=\"oip-app-error-go-to-dashboard-button\"\r\n label=\"Go to Dashboard\"\r\n pButton\r\n pRipple\r\n [routerLink]=\"['/']\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`,\r\n standalone: true,\r\n imports: [ButtonModule, RippleModule, RouterLink]\r\n})\r\nexport class ErrorComponent {}\r\n","import { Component, inject } from '@angular/core';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { ImageModule } from 'primeng/image';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { UserService } from '../services/user.service';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'user-profile',\r\n standalone: true,\r\n imports: [FileUploadModule, ImageModule, ImageModule, FileUploadModule, ImageModule, AvatarModule, TranslatePipe],\r\n template: `\r\n <p-avatar\r\n class=\"mr-2\"\r\n id=\"oip-user-profile-photo-avatar\"\r\n shape=\"circle\"\r\n size=\"xlarge\"\r\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\r\n <div class=\"mt-2\">\r\n <p-fileupload\r\n accept=\"image/*\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\r\n id=\"oip-user-profile-file-upload\"\r\n maxFileSize=\"1000000\"\r\n mode=\"basic\"\r\n name=\"files\"\r\n url=\"/api/user-profile/post-user-photo\"\r\n withCredentials=\"true\"\r\n [auto]=\"true\"\r\n (onUpload)=\"onBasicUploadAuto($event)\" />\r\n </div>\r\n `\r\n})\r\nexport class ProfileComponent {\r\n readonly userService = inject(UserService);\r\n readonly msgService = inject(MsgService);\r\n readonly translateService = inject(TranslateService);\r\n\r\n onBasicUploadAuto($event) {\r\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n/**\r\n * Service for managing translation loading in the application\r\n */\r\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\r\nexport class L10nService {\r\n private loadedTranslations: Set<string> = new Set();\r\n private httpClient = inject(HttpClient);\r\n private translateService = inject(TranslateService);\r\n\r\n /**\r\n * Loads translations for a specific component\r\n * @param component - Name of the component to load translations for\r\n */\r\n async loadComponentTranslations(component: string): Promise<void> {\r\n const lang = this.translateService.currentLang;\r\n await this.loadTranslations(component, lang);\r\n }\r\n\r\n /**\r\n * Gets the translated value of a key (or an array of keys)\r\n * @returns the translated key, or an object of translated keys\r\n */\r\n public async get(key: string) {\r\n await this.loadComponentTranslations(key);\r\n return this.translateService.get(key);\r\n }\r\n\r\n /**\r\n * Internal method to load translations from JSON files\r\n * @param component - Component or translation namespace\r\n * @param lang - Language code to load translations for\r\n */\r\n private async loadTranslations(component: string, lang: string): Promise<void> {\r\n // Create unique key for this component-language combination\r\n const key = `${component}.${lang}`;\r\n\r\n // Skip if translations are already loaded\r\n if (this.loadedTranslations.has(key)) {\r\n return;\r\n }\r\n\r\n try {\r\n // Load translation file from assets\r\n const translations = await lastValueFrom(this.httpClient.get(`./assets/i18n/${component}.${lang}.json`));\r\n\r\n // Get existing translations for the language\r\n const current = this.translateService.translations[lang] || {};\r\n\r\n // Merge new translations with existing ones\r\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\r\n\r\n // Mark these translations as loaded\r\n this.loadedTranslations.add(key);\r\n } catch (e) {\r\n console.warn(`No translations found for ${component}.${lang}.json`);\r\n console.error(e);\r\n }\r\n }\r\n\r\n /**\r\n * Changes the lang currently used\r\n */\r\n use(selectedLanguage: string) {\r\n this.translateService.use(selectedLanguage);\r\n }\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { ProfileComponent } from './profile.component';\r\nimport { Fluid } from 'primeng/fluid';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Select } from 'primeng/select';\r\nimport { TableModule } from 'primeng/table';\r\nimport { LayoutService } from '../services/app.layout.service';\r\nimport { UserService } from '../services/user.service';\r\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { RouterLink } from '@angular/router';\r\nimport { SecurityService } from '../services/security.service';\r\nimport { MenuService } from '../services/app.menu.service';\r\nimport { Button } from 'primeng/button';\r\nimport { L10nService } from '../services/l10n.service';\r\nimport { SelectItem } from 'primeng/api';\r\n\r\ninterface L10n {\r\n menu: string;\r\n all: string;\r\n profile: string;\r\n photo: string;\r\n usePhoto256x256Pixel: string;\r\n selectLanguage: string;\r\n moduleManagement: string;\r\n localization: string;\r\n goTo: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-config',\r\n template: `\r\n <p-fluid>\r\n <div class=\"flex flex-col md:flex-row gap-4\">\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ l10n.profile }}</div>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n {{ userService.userName }}\r\n </div>\r\n <label>\r\n {{ l10n.photo }}\r\n <span\r\n class=\"pi pi-question-circle\"\r\n pTooltip=\"{{ l10n.usePhoto256x256Pixel }}\"\r\n tooltipPosition=\"right\"></span>\r\n </label>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <user-profile></user-profile>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ l10n.localization }}</div>\r\n <label> {{ l10n.selectLanguage }} </label>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n id=\"oip-app-config-language-select\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [options]=\"languages\"\r\n [(ngModel)]=\"selectedLanguage\"\r\n (onChange)=\"changeLanguage()\" />\r\n </div>\r\n </div>\r\n </div>\r\n @if (securityService.isAdmin()) {\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ l10n.menu }}</div>\r\n <div class=\"flex items-center gap-2\">\r\n <label for=\"oip-app-config-admin-mode\">{{ l10n.all }}</label>\r\n <p-toggle-switch\r\n id=\"oip-app-config-admin-mode\"\r\n [(ngModel)]=\"menuService.adminMode\"\r\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n <label for=\"oip-app-config-admin-mode\">{{ l10n.moduleManagement }}</label>\r\n <p-button icon=\"pi pi-cog\" label=\"{{ l10n.goTo }}\" routerLink=\"/modules\" />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </p-fluid>\r\n `,\r\n imports: [ProfileComponent, Fluid, Tooltip, FormsModule, Select, TableModule, ToggleSwitchModule, RouterLink, Button]\r\n})\r\nexport class ConfigComponent implements OnInit {\r\n private readonly layoutService = inject(LayoutService);\r\n private readonly l10nService = inject(L10nService);\r\n protected readonly userService = inject(UserService);\r\n protected readonly securityService = inject(SecurityService);\r\n protected readonly menuService = inject(MenuService);\r\n protected l10n = {} as L10n;\r\n\r\n selectedLanguage: string;\r\n languages: SelectItem<string>[] = [\r\n { value: 'en', label: 'English' },\r\n { value: 'ru', label: 'Русский' }\r\n ];\r\n\r\n constructor() {\r\n this.selectedLanguage = this.layoutService.language();\r\n }\r\n\r\n async ngOnInit() {\r\n (await this.l10nService.get('config')).subscribe((l10n) => {\r\n this.l10n = l10n;\r\n });\r\n }\r\n\r\n /**\r\n * Changes the application's language.\r\n * @return {void}\r\n */\r\n changeLanguage(): void {\r\n this.layoutService.layoutConfig.update((config) => ({\r\n ...config,\r\n language: this.selectedLanguage\r\n }));\r\n this.l10nService.use(this.selectedLanguage);\r\n }\r\n\r\n async onSwitchChange(): Promise<void> {\r\n await this.menuService.loadMenu();\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { ConfirmationService, SharedModule } from 'primeng/api';\r\nimport { TableModule } from 'primeng/table';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { NgIf } from '@angular/common';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { BaseModuleComponent } from './base-module.component';\r\nimport { NoSettingsDto } from '../dtos/no-settings.dto';\r\nimport { SecurityComponent } from './security.component';\r\n\r\nexport interface MigrationDto {\r\n name: string;\r\n applied: boolean;\r\n pending: boolean;\r\n exist: boolean;\r\n}\r\n\r\nexport interface ApplyMigrationRequest {\r\n name: string;\r\n}\r\n\r\n@Component({\r\n imports: [\r\n TableModule,\r\n SharedModule,\r\n TagModule,\r\n InputTextModule,\r\n TextareaModule,\r\n ButtonModule,\r\n FormsModule,\r\n ConfirmDialog,\r\n NgIf,\r\n SecurityComponent,\r\n Tooltip\r\n ],\r\n selector: 'db-migration',\r\n template: `\r\n <div *ngIf=\"isContent\" class=\"card\" style=\"height: 100%\">\r\n <p-confirmDialog />\r\n <div>\r\n <h5>Migration manager</h5>\r\n <div class=\"flex flex-row gap-2\">\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n pTooltip=\"Refresh\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n (click)=\"refreshAction()\" />\r\n <p-button\r\n icon=\"pi pi-filter-slash\"\r\n pTooltip=\"Clean filter\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n (click)=\"dt.clear()\" />\r\n </div>\r\n <div>\r\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\r\n <ng-template let-columns pTemplate=\"header\">\r\n <tr>\r\n <th pSortableColumn=\"name\" scope=\"col\">\r\n Migration name\r\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\" />\r\n </th>\r\n <th scope=\"col\">Applied</th>\r\n <th scope=\"col\">Exist</th>\r\n <th>Pending</th>\r\n <th scope=\"col\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\r\n <tr [pEditableRow]=\"rowData\">\r\n <td>\r\n {{ rowData.name }}\r\n </td>\r\n <td>\r\n <p-button\r\n *ngIf=\"rowData.applied\"\r\n icon=\"pi pi-check\"\r\n severity=\"success\"\r\n [rounded]=\"true\"\r\n [text]=\"true\">\r\n </p-button>\r\n </td>\r\n <td>\r\n @if (rowData.exist) {\r\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\" />\r\n }\r\n </td>\r\n <td>\r\n @if (rowData.pending) {\r\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\r\n }\r\n </td>\r\n <td>\r\n <p-button\r\n icon=\"pi pi-bolt\"\r\n pCancelEditableRow\r\n pTooltip=\"Apply migration\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"left\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"applyMigration(rowData)\">\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n </div>\r\n @if (isSecurity) {\r\n <security [controller]=\"controller\" [id]=\"id\" />\r\n }\r\n `,\r\n providers: [ConfirmationService]\r\n})\r\nexport class DbMigrationComponent\r\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\r\n implements OnInit, OnDestroy\r\n{\r\n data: MigrationDto[];\r\n\r\n async ngOnInit() {\r\n await super.ngOnInit();\r\n await this.refreshAction();\r\n }\r\n\r\n async refreshAction() {\r\n this.getData()\r\n .then((response) => {\r\n this.data = response;\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n this.msgService.error('Error refreshing database');\r\n });\r\n }\r\n\r\n async getData() {\r\n return this.baseDataService.sendRequest<MigrationDto[]>(`api/${this.controller}/get-migrations`, 'GET');\r\n }\r\n\r\n async applyMigration(rowData: MigrationDto) {\r\n const request = { name: rowData.name } as ApplyMigrationRequest;\r\n return this.baseDataService.sendRequest(`api/${this.controller}/apply-migration`, 'POST', request);\r\n }\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class Module<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves all modules stored in the system.\n *\n * @tags Module\n * @name moduleGetAll\n * @request GET:/api/module/get-all\n * @secure\n */\n moduleGetAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Inserts a new module into the system.\n *\n * @tags Module\n * @name moduleInsert\n * @request POST:/api/module/insert\n * @secure\n */\n moduleInsert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Deletes a module by its identifier.\n *\n * @tags Module\n * @name moduleDelete\n * @request DELETE:/api/module/delete\n * @secure\n */\n moduleDelete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Returns all registered modules and indicates whether each one is currently loaded into the application.\n *\n * @tags Module\n * @name moduleGetModulesWithLoadStatus\n * @request GET:/api/module/get-modules-with-load-status\n * @secure\n */\n moduleGetModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TableModule } from 'primeng/table';\r\nimport { BaseDataService } from '../services/base-data.service';\r\nimport { Tag } from 'primeng/tag';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { L10nService } from '../services/l10n.service';\r\nimport { Module } from '../api/Module';\r\nimport { ModuleDto } from '../api/data-contracts';\r\nimport { AppTitleService } from '../services/app-title.service';\r\n\r\ninterface L10n {\r\n confirm: {\r\n header: string;\r\n message: string;\r\n cancel: string;\r\n delete: string;\r\n };\r\n title: string;\r\n messages: {\r\n deleteSuccess: string;\r\n };\r\n table: {\r\n deleteTooltip: string;\r\n currentlyLoaded: string;\r\n yes: string;\r\n no: string;\r\n name: string;\r\n moduleId: string;\r\n };\r\n refreshTooltip: string;\r\n}\r\n\r\n@Component({\r\n imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog],\r\n providers: [ConfirmationService, Module],\r\n selector: 'app-modules',\r\n template: `\r\n <p-confirmDialog></p-confirmDialog>\r\n <div class=\"flex flex-col md:flex-row gap-4\">\r\n <div class=\"card w-full\">\r\n <div class=\"font-semibold text-xl mb-4\">\r\n {{ l10n.title }}\r\n </div>\r\n <div class=\"mb-4\">\r\n <p-toolbar>\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n rounded=\"true\"\r\n severity=\"secondary\"\r\n text=\"true\"\r\n tooltipPosition=\"bottom\"\r\n [pTooltip]=\"l10n.refreshTooltip\"\r\n (onClick)=\"refreshAction()\"></p-button>\r\n </p-toolbar>\r\n </div>\r\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{ l10n.table.moduleId }}</th>\r\n <th>{{ l10n.table.name }}</th>\r\n <th>{{ l10n.table.currentlyLoaded }}</th>\r\n <th style=\"width: 4rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template let-module pTemplate=\"body\">\r\n <tr>\r\n <td>{{ module.moduleId }}</td>\r\n <td>{{ module.name }}</td>\r\n <td>\r\n <p-tag\r\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\r\n [value]=\"module.currentlyLoaded ? l10n.table.yes : l10n.table.no\"></p-tag>\r\n </td>\r\n <td>\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n rounded=\"true\"\r\n severity=\"danger\"\r\n text=\"true\"\r\n tooltipPosition=\"bottom\"\r\n [pTooltip]=\"l10n.table.deleteTooltip\"\r\n (onClick)=\"deleteModule(module)\"></p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class AppModulesComponent implements OnInit {\r\n protected dataService = inject(BaseDataService);\r\n protected modules: ModuleDto[] = [];\r\n protected msgService = inject(MsgService);\r\n protected confirmationService = inject(ConfirmationService);\r\n protected l10nService = inject(L10nService);\r\n protected l10n: L10n = {} as L10n;\r\n protected titleService = inject(AppTitleService);\r\n private moduleService = inject(Module);\r\n\r\n async ngOnInit() {\r\n (await this.l10nService.get('app-modules')).subscribe((l) => {\r\n this.l10n = l;\r\n });\r\n this.titleService.setTitle(this.l10n.title);\r\n await this.refreshAction();\r\n }\r\n\r\n async refreshAction() {\r\n this.modules = await this.moduleService.moduleGetModulesWithLoadStatus();\r\n }\r\n\r\n deleteModule(module: ModuleDto) {\r\n this.confirmationService.confirm({\r\n header: this.l10n.confirm.header,\r\n message: this.l10n.confirm.message,\r\n icon: 'pi pi-trash',\r\n rejectButtonProps: {\r\n label: this.l10n.confirm.cancel,\r\n severity: 'secondary',\r\n outlined: true\r\n },\r\n acceptButtonProps: {\r\n label: this.l10n.confirm.delete,\r\n severity: 'danger'\r\n },\r\n accept: async () => {\r\n this.dataService\r\n .sendRequest(`api/module/delete`, 'DELETE', {\r\n moduleId: module.moduleId\r\n })\r\n .then(() => this.refreshAction())\r\n .catch((error) => console.error(error));\r\n this.msgService.success(this.l10n.messages.deleteSuccess);\r\n }\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Router, UrlTree } from '@angular/router';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Observable, combineLatest, of } from 'rxjs';\r\nimport { SecurityService } from './security.service';\r\n\r\n/**\r\n * A route guard that ensures the user is authenticated and has a valid access token.\r\n * If the access token is expired, it attempts to refresh the session.\r\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\r\n */\r\n@Injectable()\r\nexport class AuthGuardService {\r\n private readonly oidcSecurityService = inject(SecurityService);\r\n private readonly router = inject(Router);\r\n\r\n /**\r\n * Checks whether the route can be activated.\r\n * - Returns `true` if the user is authenticated and the token is valid.\r\n * - Attempts to refresh the token if expired.\r\n * - Redirects to `/unauthorized` if not authenticated or refresh fails.\r\n *\r\n * @returns {Observable<boolean | UrlTree>} A stream resolving to true (allow), or UrlTree (redirect).\r\n */\r\n canActivate(): Observable<boolean | UrlTree> {\r\n return combineLatest([this.oidcSecurityService.isAuthenticated(), this.oidcSecurityService.isTokenExpired()]).pipe(\r\n switchMap(([authenticated, tokenExpired]) => {\r\n if (!authenticated) {\r\n return of(this.router.parseUrl('/unauthorized'));\r\n }\r\n if (!tokenExpired) {\r\n return of(true);\r\n }\r\n\r\n // Token is expired; attempt to refresh\r\n return this.tryRefreshToken();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Attempts to refresh the session using the refresh token.\r\n * If successful, allows route activation; otherwise, redirects to `/unauthorized`.\r\n *\r\n * @returns {boolean | UrlTree} A stream resolving to true or redirect UrlTree.\r\n */\r\n tryRefreshToken(): Observable<boolean | UrlTree> {\r\n return this.oidcSecurityService.forceRefreshSession().pipe(\r\n map((refreshSuccess) => {\r\n return refreshSuccess ? true : this.router.parseUrl('/unauthorized');\r\n }),\r\n catchError((err) => {\r\n console.warn(err);\r\n return of(this.router.parseUrl('/unauthorized'));\r\n })\r\n );\r\n }\r\n}\r\n","import { AbstractSecurityStorage } from 'angular-auth-oidc-client';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class SecurityStorageService implements AbstractSecurityStorage {\r\n read(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n write(key: string, value: any): void {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n remove(key: string): void {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n clear(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { HttpInterceptorFn } from '@angular/common/http';\r\nimport { LayoutService } from '../services/app.layout.service';\r\n\r\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\r\n const layoutService = inject(LayoutService);\r\n const lang = layoutService.language() ? layoutService.language() : 'en';\r\n const httpHeaders = req.headers.set('Accept-language', lang);\r\n const authReq = req.clone({\r\n headers: httpHeaders\r\n });\r\n return next(authReq);\r\n};\r\n","import { inject, Pipe, PipeTransform } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { map, Observable } from 'rxjs';\r\n\r\n@Pipe({\r\n standalone: true,\r\n name: 'secure'\r\n})\r\nexport class SecurePipe implements PipeTransform {\r\n private readonly http = inject(HttpClient);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(url: any): Observable<SafeUrl> {\r\n return this.http\r\n .get(url, { responseType: 'blob' })\r\n .pipe(map((val) => this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { map, Observable } from 'rxjs';\r\nimport { OpenIdConfiguration, StsConfigHttpLoader } from 'angular-auth-oidc-client';\r\nimport { GetKeycloakClientSettingsResponse } from '../api/data-contracts';\r\n\r\n/**\r\n * Load keycloak settings from backend and save to sessionStorage\r\n * @param httpClient\r\n * @returns StsConfigHttpLoader\r\n */\r\nexport const httpLoaderAuthFactory = (httpClient: HttpClient) => {\r\n const KEYCLOAK_SETTINGS_KEY = 'keycloak-client-settings';\r\n const settingsStings = sessionStorage.getItem(KEYCLOAK_SETTINGS_KEY);\r\n if (settingsStings) {\r\n const config$ = new Observable<GetKeycloakClientSettingsResponse>((subscribe) => {\r\n subscribe.next(JSON.parse(settingsStings));\r\n });\r\n return new StsConfigHttpLoader(config$);\r\n } else {\r\n const config$ = httpClient.get<GetKeycloakClientSettingsResponse>(`api/security/get-keycloak-client-settings`).pipe(\r\n map((config: GetKeycloakClientSettingsResponse) => {\r\n const authConfig: OpenIdConfiguration = {\r\n authority: config.authority,\r\n redirectUrl: window.location.origin,\r\n postLogoutRedirectUri: window.location.origin,\r\n clientId: config.clientId,\r\n scope: config.scope,\r\n responseType: config.responseType,\r\n useRefreshToken: config.useRefreshToken,\r\n silentRenew: config.silentRenew,\r\n logLevel: config.logLevel,\r\n secureRoutes: config.secureRoutes\r\n };\r\n sessionStorage.setItem(KEYCLOAK_SETTINGS_KEY, JSON.stringify(authConfig));\r\n return authConfig;\r\n })\r\n );\r\n return new StsConfigHttpLoader(config$);\r\n }\r\n};\r\n","// Components\r\nexport { BaseModuleComponent } from './components/base-module.component';\r\nexport { SecurityComponent } from './components/security.component';\r\nexport { AppTopbar } from './components/top-bar.component';\r\nexport { FooterComponent } from './components/footer.component';\r\nexport { MenuComponent } from './components/menu/menu.component';\r\nexport { AppLayoutComponent } from './components/app.layout.component';\r\nexport { SidebarComponent } from './components/sidebar.component';\r\nexport { LogoComponent } from './components/logo.component';\r\nexport { NotfoundComponent } from './components/notfound.component';\r\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\r\nexport { ErrorComponent } from './components/auth/error/error.component';\r\nexport { ProfileComponent } from './components/profile.component';\r\nexport { ConfigComponent } from './components/config.component';\r\nexport { DbMigrationComponent } from './components/db-migration.component';\r\nexport { AppModulesComponent } from './components/app-modules.component';\r\nexport { AppConfiguratorComponent } from './components/app-configurator.component'\r\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator.component';\r\n\r\n// Dtos\r\nexport { TopBarDto } from './dtos/top-bar.dto';\r\nexport { SecurityDto } from './dtos/security.dto';\r\nexport { PutSecurityDto } from './dtos/put-security.dto';\r\nexport { NoSettingsDto } from './dtos/no-settings.dto';\r\n\r\n// Services\r\nexport { BaseDataService } from './services/base-data.service';\r\nexport { TopBarService } from './services/top-bar.service';\r\nexport { SecurityService, KeycloakSecurityService } from './services/security.service';\r\nexport { SecurityDataService } from './services/security-data.service';\r\nexport { MsgService } from './services/msg.service';\r\nexport { AuthGuardService } from './services/auth.service';\r\nexport { AppConfig, LayoutService } from './services/app.layout.service';\r\nexport { MenuService } from './services/app.menu.service';\r\nexport { UserService} from './services/user.service';\r\nexport { SecurityStorageService } from './services/security-storage.service';\r\n\r\n// Events\r\nexport { MenuChangeEvent } from './events/menu-change.event';\r\n\r\n// other\r\nexport { langIntercept } from './intercepts/i18n-intercept.service';\r\nexport { SecurePipe } from './modules/secure.pipe';\r\nexport { httpLoaderAuthFactory } from './modules/http-loader.factory';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HttpClient","i3","i1","i2","i1.LayoutService","i6","i2.MenuService","i4","i5","filter","map"],"mappings":"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"}
1
+ {"version":3,"file":"oip-common.mjs","sources":["../../../projects/oip-common/src/services/top-bar.service.ts","../../../projects/oip-common/src/services/msg.service.ts","../../../projects/oip-common/src/services/base-data.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/components/base-module.component.ts","../../../projects/oip-common/src/services/security-data.service.ts","../../../projects/oip-common/src/components/security.component.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.service.ts","../../../projects/oip-common/src/components/app-configurator.component.ts","../../../projects/oip-common/src/components/logo.component.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/top-bar.component.ts","../../../projects/oip-common/src/components/footer.component.ts","../../../projects/oip-common/src/api/http-client.ts","../../../projects/oip-common/src/api/Menu.ts","../../../projects/oip-common/src/services/app.menu.service.ts","../../../projects/oip-common/src/components/menu/menu-item.component.ts","../../../projects/oip-common/src/components/menu/menu-item-create-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu-item-edit-dialog.component.ts","../../../projects/oip-common/src/components/menu/menu.component.ts","../../../projects/oip-common/src/components/sidebar.component.ts","../../../projects/oip-common/src/components/app.layout.component.ts","../../../projects/oip-common/src/components/app-floating-configurator.component.ts","../../../projects/oip-common/src/services/l10n.service.ts","../../../projects/oip-common/src/components/notfound.component.ts","../../../projects/oip-common/src/components/auth/unauthorized/unauthorized.component.ts","../../../projects/oip-common/src/components/auth/error/error.component.ts","../../../projects/oip-common/src/components/profile.component.ts","../../../projects/oip-common/src/components/config.component.ts","../../../projects/oip-common/src/components/db-migration.component.ts","../../../projects/oip-common/src/api/Module.ts","../../../projects/oip-common/src/components/app-modules.component.ts","../../../projects/oip-common/src/services/auth.service.ts","../../../projects/oip-common/src/services/security-storage.service.ts","../../../projects/oip-common/src/intercepts/i18n-intercept.service.ts","../../../projects/oip-common/src/modules/secure.pipe.ts","../../../projects/oip-common/src/modules/http-loader.factory.ts","../../../projects/oip-common/src/public-api.ts","../../../projects/oip-common/src/oip-common.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { TopBarDto } from '../dtos/top-bar.dto';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TopBarService {\r\n topBarItems: TopBarDto[] = [];\r\n\r\n private _activeId: string | undefined;\r\n\r\n get availableTopBarItems(): TopBarDto[] {\r\n return this.topBarItems;\r\n }\r\n\r\n get activeTopBarItem(): TopBarDto | undefined {\r\n if (this._activeId === undefined) {\r\n return undefined;\r\n }\r\n return this.topBarItems.find((topBarItem: TopBarDto) => topBarItem.id === this._activeId);\r\n }\r\n\r\n get activeId(): string | undefined {\r\n return this._activeId;\r\n }\r\n\r\n set activeId(value: string | undefined) {\r\n this._activeId = value;\r\n if (this.activeTopBarItem?.click) this.activeTopBarItem.click();\r\n }\r\n\r\n constructor() {}\r\n\r\n // Set tob bar items\r\n setTopBarItems(items: TopBarDto[]) {\r\n this.topBarItems = items;\r\n }\r\n\r\n checkId(id: string): boolean {\r\n if (this.activeTopBarItem === undefined && id === 'content') return true;\r\n if (this.activeTopBarItem === undefined) return false;\r\n return this.activeTopBarItem.id == id;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { MessageService } from 'primeng/api';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { ToastMessageOptions } from 'primeng/api';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MsgService {\r\n protected readonly messageService: MessageService = inject(MessageService);\r\n private readonly translate = inject(TranslateService);\r\n private readonly lifetime: number = 2000;\r\n\r\n add(msg: ToastMessageOptions) {\r\n this.messageService.add(msg);\r\n }\r\n\r\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'success',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'info',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'warn',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n if (detail instanceof HttpErrorResponse) {\r\n summary = `Error: ${detail.status} ${detail.statusText}`;\r\n detail = `${detail.name} \\r\\n ${detail.message}`;\r\n }\r\n this.messageService.add({\r\n severity: 'error',\r\n summary: summary,\r\n detail: detail.toString(),\r\n life: life\r\n });\r\n }\r\n\r\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'contrast',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n\r\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\r\n this.messageService.add({\r\n severity: 'secondary',\r\n summary: summary,\r\n detail: detail,\r\n life: life\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { lastValueFrom, Observable } from 'rxjs';\r\n\r\n/**\r\n * BaseDataService provides a unified interface for sending HTTP requests\r\n * using Angular's HttpClient. It supports standard HTTP methods and automatic\r\n * credential handling.\r\n */\r\n@Injectable()\r\nexport class BaseDataService {\r\n private readonly http = inject(HttpClient);\r\n\r\n /**\r\n * Gets the base URL of the application from the HTML <base> tag.\r\n */\r\n get baseUrl(): string {\r\n return document.getElementsByTagName('base')[0].href;\r\n }\r\n\r\n /**\r\n * Sends an HTTP request with the specified method and data.\r\n *\r\n * @template TResponse - Expected response type.\r\n * @param url - The target URL for the HTTP request.\r\n * @param method - The HTTP method to use (GET, PUT, POST, DELETE). Default is 'GET'.\r\n * @param data - An object containing request parameters or payload.\r\n * @returns A promise that resolves to the response of type TResponse.\r\n */\r\n sendRequest<TResponse>(\r\n url: string,\r\n method: 'GET' | 'PUT' | 'POST' | 'DELETE' = 'GET',\r\n data: any = {}\r\n ): Promise<TResponse> {\r\n const httpOptions = { withCredentials: true };\r\n let result: Observable<TResponse>;\r\n\r\n switch (method) {\r\n case 'GET':\r\n result = this.http.get<TResponse>(url, { params: data });\r\n break;\r\n case 'PUT':\r\n result = this.http.put<TResponse>(url, data, httpOptions);\r\n break;\r\n case 'POST':\r\n result = this.http.post<TResponse>(url, data, httpOptions);\r\n break;\r\n case 'DELETE':\r\n result = this.http.request<TResponse>('DELETE', url, {\r\n body: data,\r\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\r\n withCredentials: true\r\n });\r\n break;\r\n }\r\n\r\n return lastValueFrom(result);\r\n }\r\n\r\n /**\r\n * Sends a GET request and retrieves a response as a Blob.\r\n *\r\n * @param url - The target URL for the GET request.\r\n * @returns A promise that resolves to a Object response.\r\n */\r\n getBlob(url: string): Promise<object> {\r\n const httpOptions = {\r\n responseType: 'blob' as 'json',\r\n withCredentials: true\r\n };\r\n const result = this.http.get(url, httpOptions);\r\n return lastValueFrom(result);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\n/**\r\n * Service to manage the application title.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AppTitleService {\r\n private readonly title = inject(Title);\r\n private titleSubject = new BehaviorSubject<string>('');\r\n public title$ = this.titleSubject.asObservable();\r\n\r\n /**\r\n * Set the title of the current HTML document.\r\n * @param newTitle\r\n */\r\n setTitle(newTitle: string): void {\r\n this.title.setTitle(newTitle);\r\n this.titleSubject.next(newTitle);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, effect, inject, OnDestroy, OnInit, signal, WritableSignal } from '@angular/core';\r\nimport { TopBarDto } from '../dtos/top-bar.dto';\r\nimport { TopBarService } from '../services/top-bar.service';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { BaseDataService } from '../services/base-data.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { AppTitleService } from '../services/app-title.service';\r\n\r\ninterface BaseComponentLocalization {\r\n security: string;\r\n settings: string;\r\n content: string;\r\n}\r\n\r\n@Component({ standalone: true, template: '' })\r\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\r\n /**\r\n * Provides access to topbar related functionality, such as managing visibility and content.\r\n * @type {TopBarService}\r\n */\r\n public readonly topBarService: TopBarService = inject(TopBarService);\r\n\r\n /**\r\n * Provides access to information about the current route.\r\n * This includes route parameters, data, and the route's path.\r\n */\r\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\r\n\r\n /**\r\n * Provides access to messaging services.\r\n */\r\n public readonly msgService = inject(MsgService);\r\n\r\n /**\r\n * Provides access to base data service functionality.\r\n * @deprecated The method should not be used\r\n */\r\n public readonly baseDataService: BaseDataService = inject(BaseDataService);\r\n\r\n /**\r\n * Provides access to translation functionality.\r\n */\r\n public readonly translateService = inject(TranslateService);\r\n\r\n /**\r\n * Provides access to the application's title service.\r\n */\r\n public readonly appTitleService = inject(AppTitleService);\r\n\r\n /**\r\n * Reference to the ChangeDetector. Used to trigger change detection manually.\r\n */\r\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * Represents a subscription to an observable.\r\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\r\n * @type {Subscription}\r\n */\r\n private subscriptions: Subscription[] = [];\r\n /**\r\n * Configuration object for backend storage\r\n * @type {TBackendStoreSettings}\r\n */\r\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\r\n\r\n /**\r\n * Configuration object for local storage.\r\n * @type {TLocalStoreSettings}\r\n */\r\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\r\n\r\n /**\r\n * A signal representing the local application settings. Changes to this signal\r\n * propagate updates to the underlying local store settings.\r\n * @type {WritableSignal<TLocalStoreSettings>}\r\n */\r\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\r\n\r\n /**\r\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\r\n * @type {Subject<TLocalStoreSettings>}\r\n */\r\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\r\n\r\n /**\r\n * The title of the component. Get from Title in ngOnInit\r\n * @type {string}\r\n */\r\n public title: string;\r\n\r\n /**\r\n * Updates local settings and persists them to local storage.\r\n * @return {void}\r\n */\r\n private onConfigUpdate(): void {\r\n if (Object.keys(this.localSettings()).length > 0) {\r\n this._localSettings = { ...this.localSettings() };\r\n this.localSettingsUpdate.next(this._localSettings);\r\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\r\n }\r\n }\r\n\r\n private getLocalStorageSettings() {\r\n try {\r\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\r\n if (localStorageSettingsString != null) {\r\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\r\n }\r\n } catch (error) {\r\n this.msgService.error(error, 'Error parsing layoutConfig:');\r\n this.localSettings.set({} as TLocalStoreSettings);\r\n }\r\n }\r\n\r\n /**\r\n * A unique numerical identifier for the module.\r\n * @type {number}\r\n */\r\n id: number | undefined = undefined;\r\n\r\n /**\r\n * The name of the controller currently handling the request.\r\n * @type {string}\r\n */\r\n controller: string;\r\n\r\n /**\r\n * Checks if the content ID is present.\r\n * @returns {boolean} True if the content ID is present, false otherwise.\r\n */\r\n get isContent(): boolean {\r\n return this.topBarService.checkId('content');\r\n }\r\n\r\n /**\r\n * Checks if the settings ID is present.\r\n * @returns {boolean} True if the settings ID is present, false otherwise.\r\n */\r\n get isSettings(): boolean {\r\n return this.topBarService.checkId('settings');\r\n }\r\n\r\n /**\r\n * Checks if the security ID is present.\r\n * @returns {boolean} True if the security ID is present, false otherwise.\r\n */\r\n get isSecurity(): boolean {\r\n return this.topBarService.checkId('security');\r\n }\r\n\r\n /**\r\n * Defines the top bar items.\r\n */\r\n public topBarItems: TopBarDto[] = [\r\n { id: 'content', icon: 'pi-box', caption: '' },\r\n { id: 'settings', icon: 'pi-cog', caption: '' },\r\n { id: 'security', icon: 'pi-lock', caption: '' }\r\n ];\r\n\r\n /**\r\n * Initializes the component and subscribes to local settings updates.\r\n */\r\n constructor() {\r\n effect(() => {\r\n const config = this.localSettings();\r\n if (config) {\r\n this.onConfigUpdate();\r\n }\r\n });\r\n this.subscriptions.push(\r\n this.route.url.subscribe((url) => {\r\n this.controller = url[0].path;\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.route.paramMap.subscribe((params) => {\r\n this.id = +params.get('id');\r\n this.getLocalStorageSettings();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Lifecycle hook that is called when a component is destroyed.\r\n * Unsubscribes from all subscriptions to prevent memory leaks,\r\n * resets the top bar items to an empty array, and sets the active ID\r\n * to the ID of the first top bar item (if available).\r\n */\r\n ngOnDestroy() {\r\n this.topBarService.setTopBarItems([]);\r\n this.topBarService.activeId = this.topBarItems[0].id;\r\n this.subscriptions.forEach((s) => s.unsubscribe());\r\n }\r\n\r\n /**\r\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\r\n * sets the top bar items via the top bar service, sets the active ID,\r\n * subscribes to route parameters to get the ID, and retrieves settings.\r\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\r\n */\r\n async ngOnInit(): Promise<void> {\r\n this.subscriptions.push(\r\n this.translateService.get('baseComponent').subscribe((value: BaseComponentLocalization) => {\r\n this.topBarItems[0].caption = value.content;\r\n this.topBarItems[1].caption = value.settings;\r\n this.topBarItems[2].caption = value.security;\r\n })\r\n );\r\n\r\n this.topBarService.setTopBarItems(this.topBarItems);\r\n this.topBarService.activeId = this.topBarItems[0].id;\r\n\r\n await this.getSettings();\r\n\r\n this.subscriptions.push(\r\n this.appTitleService.title$.subscribe((title) => {\r\n this.title = title;\r\n this.changeDetectorRef.detectChanges();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves module instance settings.\r\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\r\n */\r\n async getSettings(): Promise<void> {\r\n try {\r\n this.settings = await this.baseDataService.sendRequest<TBackendStoreSettings>(\r\n `${this.baseDataService.baseUrl}api/${this.controller}/get-module-instance-settings?id=${this.id}`\r\n );\r\n } catch (error) {\r\n this.msgService.error(error);\r\n }\r\n }\r\n\r\n /**\r\n * Saves the provided settings to the backend.\r\n * @param {TLocalStoreSettings} settings - The settings object to save.\r\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\r\n */\r\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\r\n await this.baseDataService\r\n .sendRequest(`api/${this.controller}/put-module-instance-settings`, 'PUT', {\r\n id: this.id,\r\n settings: settings\r\n })\r\n .then(() => {\r\n this.msgService.success(this.translateService.instant('baseComponent.success'));\r\n })\r\n .catch((error) => {\r\n this.msgService.error(error);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BaseDataService } from './base-data.service';\r\nimport { SecurityDto } from '../dtos/security.dto';\r\nimport { PutSecurityDto } from '../dtos/put-security.dto';\r\n\r\n@Injectable()\r\nexport class SecurityDataService extends BaseDataService {\r\n getSecurity(controller: string, id: number) {\r\n return this.sendRequest<SecurityDto[]>(this.baseUrl + `api/${controller}/get-security?id=${id}`);\r\n }\r\n\r\n saveSecurity(controller: string, request: PutSecurityDto) {\r\n return this.sendRequest<any>(this.baseUrl + `api/${controller}/put-security`, 'PUT', request);\r\n }\r\n\r\n getRealmRoles() {\r\n return this.sendRequest<string[]>(this.baseUrl + `api/security/get-realm-roles`);\r\n }\r\n}\r\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MsgService } from './../services/msg.service';\r\nimport { SecurityDataService } from './../services/security-data.service';\r\nimport { PutSecurityDto } from './../dtos/put-security.dto';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'security',\r\n template: `\r\n <div class=\"flex flex-col md:flex-row gap-8\">\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">\r\n {{ 'securityComponent.security' | translate }}\r\n </div>\r\n @for (item of securityData; track item.name) {\r\n <div class=\"flex flex-col gap-2\">\r\n <label htmlFor=\"oip-security-multiselect-{{ item.name }}\">\r\n {{ item.name }}\r\n <span class=\"pi pi-question-circle\" pTooltip=\"{{ item.description }}\" tooltipPosition=\"right\"></span>\r\n </label>\r\n <p-multiSelect\r\n id=\"oip-security-multiselect-{{ item.name }}\"\r\n placeholder=\"Select roles\"\r\n [maxSelectedLabels]=\"10\"\r\n [options]=\"roles\"\r\n [(ngModel)]=\"item.roles\" />\r\n </div>\r\n }\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <p-button\r\n icon=\"pi pi-save\"\r\n id=\"oip-security-save-button\"\r\n label=\"{{ 'securityComponent.save' | translate }}\"\r\n (click)=\"saveClick()\"\r\n (keydown)=\"saveKeyDown($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],\r\n standalone: true\r\n})\r\nexport class SecurityComponent implements OnInit, OnDestroy {\r\n private readonly msgService = inject(MsgService);\r\n private readonly dataService = inject(SecurityDataService);\r\n private readonly translateService = inject(TranslateService);\r\n securityData: any[];\r\n @Input() id: number;\r\n @Input() controller: string;\r\n roles: string[] = [];\r\n\r\n ngOnDestroy(): void {\r\n // on destroy\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.id) {\r\n this.msgService.error('Module id not passed!');\r\n }\r\n if (!this.controller) {\r\n this.msgService.error('Controller not passed!');\r\n }\r\n this.dataService.getSecurity(this.controller, this.id).then(\r\n (result) => {\r\n this.securityData = result;\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n\r\n this.dataService.getRealmRoles().then(\r\n (result) => {\r\n this.roles = result;\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n }\r\n\r\n saveClick() {\r\n const request: PutSecurityDto = {\r\n id: this.id,\r\n securities: this.securityData\r\n };\r\n this.dataService.saveSecurity(this.controller, request).then(\r\n (result) => {\r\n this.msgService.success(this.translateService.instant('securityComponent.savedSecurity'));\r\n },\r\n (error) => this.msgService.error(error)\r\n );\r\n }\r\n\r\n saveKeyDown($event: KeyboardEvent) {\r\n if ($event.key === 'Enter' || $event.key === 'Space') {\r\n this.saveKeyDown(null);\r\n }\r\n }\r\n}\r\n","/**\r\n * Convert Date to string in format 2022-02-22\r\n * @param date\r\n */\r\nexport function dateToString(date: Date): string {\r\n const year = date.getFullYear();\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const day = date.getDate().toString().padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n}\r\n\r\n/**\r\n * Convert string in format 2022-02-22 to Date\r\n * @param date\r\n */\r\nexport function stringToDate(date: string): Date {\r\n const dateParts = date.split('-');\r\n const day = parseInt(dateParts[2], 10);\r\n const month = parseInt(dateParts[1], 10) - 1;\r\n const year = parseInt(dateParts[0], 10);\r\n\r\n return new Date(year, month, day);\r\n}\r\n\r\n/**\r\n * Add days to date\r\n * @param date\r\n * @param days\r\n */\r\nexport function addDays(date: Date, days: number): Date {\r\n const clonedDate = structuredClone(date);\r\n clonedDate.setDate(clonedDate.getDate() + days);\r\n return clonedDate;\r\n}\r\n\r\n/**\r\n * Get today's date\r\n * @param date\r\n */\r\nexport function getTodayDate(): Date {\r\n const date = new Date();\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\n/* Convert dateformat from DatePipe to PrimeNG*/\r\nexport function convertToPrimeNgDateFormat(dateformat: string): string {\r\n switch (dateformat) {\r\n case 'dd.MM.yyyy':\r\n return 'dd.mm.yy';\r\n case 'dd.MM.yy':\r\n return 'dd.mm.y';\r\n case 'yyyy-MM-dd':\r\n return 'yy-mm-dd';\r\n case 'dd.MMM.yyyy':\r\n return 'dd.M.yy';\r\n default:\r\n console.error(`Failed to convert format: ${dateformat}`);\r\n }\r\n}\r\n\r\n/**\r\n * Convert all properties of an object with string dates to Date objects\r\n * @param obj\r\n */\r\nexport function restoreDates(obj: any) {\r\n if (obj === null || typeof obj !== 'object') return obj;\r\n\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => restoreDates(item));\r\n }\r\n\r\n const result = {};\r\n for (const key in obj) {\r\n const value = obj[key];\r\n\r\n if (typeof value === 'string' && isIsoDate(value)) {\r\n result[key] = new Date(value);\r\n } else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {\r\n result[key] = restoreDates(value);\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Check if a string is a date in ISO format\r\n * @param str\r\n */\r\nexport function isIsoDate(str: string) {\r\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/.test(str);\r\n}\r\n","import { Injectable, effect, signal, computed } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { convertToPrimeNgDateFormat } from '../helpers/date.helper';\r\n\r\nexport interface AppConfig {\r\n preset?: string;\r\n primary?: string;\r\n surface?: string | null;\r\n darkTheme?: boolean;\r\n menuMode?: string;\r\n language?: string;\r\n dateFormat: string;\r\n timeFormat: string;\r\n dateTimeFormat: string;\r\n timeZone: string;\r\n}\r\n\r\ninterface LayoutState {\r\n staticMenuDesktopInactive?: boolean;\r\n overlayMenuActive?: boolean;\r\n configSidebarVisible?: boolean;\r\n staticMenuMobileActive?: boolean;\r\n menuHoverActive?: boolean;\r\n}\r\n\r\ninterface MenuChangeEvent {\r\n key: string;\r\n routeEvent?: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LayoutService {\r\n _config: AppConfig = this.getAppConfigFromStorage();\r\n\r\n _state: LayoutState = {\r\n staticMenuDesktopInactive: false,\r\n overlayMenuActive: false,\r\n configSidebarVisible: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n };\r\n\r\n layoutConfig = signal<AppConfig>(this._config);\r\n\r\n layoutState = signal<LayoutState>(this._state);\r\n\r\n private readonly configUpdate = new Subject<AppConfig>();\r\n\r\n private readonly overlayOpen = new Subject<any>();\r\n\r\n private readonly menuSource = new Subject<MenuChangeEvent>();\r\n\r\n private readonly resetSource = new Subject();\r\n\r\n menuSource$ = this.menuSource.asObservable();\r\n\r\n resetSource$ = this.resetSource.asObservable();\r\n\r\n configUpdate$ = this.configUpdate.asObservable();\r\n\r\n overlayOpen$ = this.overlayOpen.asObservable();\r\n\r\n theme = computed(() => (this.layoutConfig()?.darkTheme ? 'light' : 'dark'));\r\n\r\n isSidebarActive = computed(() => this.layoutState().overlayMenuActive || this.layoutState().staticMenuMobileActive);\r\n\r\n isDarkTheme = computed(() => this.layoutConfig().darkTheme);\r\n\r\n getPrimary = computed(() => this.layoutConfig().primary);\r\n\r\n getSurface = computed(() => this.layoutConfig().surface);\r\n\r\n isOverlay = computed(() => this.layoutConfig().menuMode === 'overlay');\r\n\r\n language = computed(() => this.layoutConfig().language);\r\n\r\n dateFormat = computed(() => this.layoutConfig().dateFormat);\r\n\r\n primeNgDateFormat = computed(() => convertToPrimeNgDateFormat(this.layoutConfig().dateFormat));\r\n\r\n timeFormat = computed(() => this.layoutConfig().timeFormat);\r\n\r\n dateTimeFormat = computed(() => `${this.layoutConfig().dateFormat} ${this.layoutConfig().timeFormat}`);\r\n\r\n monthFormat = computed(() => {\r\n const reDay = /d+/i;\r\n const reDelimiter = /^[^\\w]|[^\\w]$|([^\\w])\\1+/;\r\n const ngDateFormat = convertToPrimeNgDateFormat(this.layoutConfig().dateFormat);\r\n const ngDate = ngDateFormat.replace(reDay, '');\r\n const dateGroups = ngDate.match(reDelimiter);\r\n if (Array.isArray(dateGroups) && dateGroups.length > 1) {\r\n return dateGroups[1] !== undefined\r\n ? ngDate.replace(dateGroups[0], '')\r\n : ngDate.startsWith(dateGroups[0])\r\n ? ngDate.substring(1)\r\n : ngDate.substring(0, ngDate.length - 1);\r\n }\r\n return ngDateFormat;\r\n });\r\n\r\n timeZone = computed(() => this.layoutConfig().timeZone);\r\n\r\n transitionComplete = signal<boolean>(false);\r\n\r\n private initialized = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const config = this.layoutConfig();\r\n if (config) {\r\n this.onConfigUpdate();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const config = this.layoutConfig();\r\n\r\n if (!this.initialized || !config) {\r\n this.initialized = true;\r\n return;\r\n }\r\n\r\n this.handleDarkModeTransition(config);\r\n });\r\n }\r\n\r\n /**\r\n * Get application settings from browser storage\r\n * @returns AppConfig\r\n */\r\n private getAppConfigFromStorage(): AppConfig {\r\n const appConfigUiString = localStorage.getItem('layoutConfig');\r\n if (appConfigUiString != null) {\r\n const config = JSON.parse(appConfigUiString) as AppConfig;\r\n config.timeZone ??= Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n return config;\r\n }\r\n return {\r\n preset: 'Aura',\r\n primary: 'emerald',\r\n surface: null,\r\n darkTheme: false,\r\n menuMode: 'static',\r\n language: 'ru',\r\n dateFormat: 'yyyy-MM-dd',\r\n timeFormat: 'HH:mm:ss',\r\n dateTimeFormat: 'yyyy-MM-dd HH:mm:ss',\r\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone\r\n };\r\n }\r\n\r\n private handleDarkModeTransition(config: AppConfig): void {\r\n if ((document as any).startViewTransition) {\r\n this.startViewTransition(config);\r\n } else {\r\n this.toggleDarkMode(config);\r\n this.onTransitionEnd();\r\n }\r\n }\r\n\r\n private startViewTransition(config: AppConfig): void {\r\n const transition = (document as any).startViewTransition(() => {\r\n this.toggleDarkMode(config);\r\n });\r\n\r\n transition.ready\r\n .then(() => {\r\n this.onTransitionEnd();\r\n })\r\n .catch(() => {});\r\n }\r\n\r\n toggleDarkMode(config?: AppConfig): void {\r\n const _config = config || this.layoutConfig();\r\n if (_config.darkTheme) {\r\n document.documentElement.classList.add('app-dark');\r\n } else {\r\n document.documentElement.classList.remove('app-dark');\r\n }\r\n }\r\n\r\n private onTransitionEnd() {\r\n this.transitionComplete.set(true);\r\n setTimeout(() => {\r\n this.transitionComplete.set(false);\r\n });\r\n }\r\n\r\n onMenuToggle() {\r\n if (this.isOverlay()) {\r\n this.layoutState.update((prev) => ({ ...prev, overlayMenuActive: !this.layoutState().overlayMenuActive }));\r\n\r\n if (this.layoutState().overlayMenuActive) {\r\n this.overlayOpen.next(null);\r\n }\r\n }\r\n\r\n if (this.isDesktop()) {\r\n this.layoutState.update((prev) => ({\r\n ...prev,\r\n staticMenuDesktopInactive: !this.layoutState().staticMenuDesktopInactive\r\n }));\r\n } else {\r\n this.layoutState.update((prev) => ({\r\n ...prev,\r\n staticMenuMobileActive: !this.layoutState().staticMenuMobileActive\r\n }));\r\n\r\n if (this.layoutState().staticMenuMobileActive) {\r\n this.overlayOpen.next(null);\r\n }\r\n }\r\n }\r\n\r\n isDesktop() {\r\n return window.innerWidth > 991;\r\n }\r\n\r\n isMobile() {\r\n return !this.isDesktop();\r\n }\r\n\r\n onConfigUpdate() {\r\n this._config = { ...this.layoutConfig() };\r\n this.configUpdate.next(this.layoutConfig());\r\n localStorage.setItem('layoutConfig', JSON.stringify(this.layoutConfig()));\r\n }\r\n\r\n onMenuStateChange(event: MenuChangeEvent) {\r\n this.menuSource.next(event);\r\n }\r\n\r\n reset() {\r\n this.resetSource.next(true);\r\n }\r\n}\r\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\r\nimport { Component, computed, inject, PLATFORM_ID, signal, OnInit } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { $t, updatePreset, updateSurfacePalette } from '@primeng/themes';\r\nimport Aura from '@primeng/themes/aura';\r\nimport Lara from '@primeng/themes/lara';\r\nimport Nora from '@primeng/themes/nora';\r\nimport { PrimeNG } from 'primeng/config';\r\nimport { SelectButtonModule } from 'primeng/selectbutton';\r\nimport { LayoutService } from '../services/app.layout.service';\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\n\r\nconst presets = {\r\n Aura,\r\n Lara,\r\n Nora\r\n} as const;\r\n\r\ndeclare type KeyOfType<T> = keyof T extends infer U ? U : never;\r\n\r\ndeclare type SurfacesType = {\r\n name?: string;\r\n palette?: {\r\n 0?: string;\r\n 50?: string;\r\n 100?: string;\r\n 200?: string;\r\n 300?: string;\r\n 400?: string;\r\n 500?: string;\r\n 600?: string;\r\n 700?: string;\r\n 800?: string;\r\n 900?: string;\r\n 950?: string;\r\n };\r\n};\r\n\r\n@Component({\r\n selector: 'app-configurator',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],\r\n template: `\r\n <div class=\"flex flex-col gap-4\">\r\n <div>\r\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.primary' | translate }}</span>\r\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\r\n @for (primaryColor of primaryColors(); track primaryColor.name) {\r\n <button\r\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\r\n id=\"oip-app-configurator-primary-color-{{ primaryColor.name }}\"\r\n type=\"button\"\r\n [ngClass]=\"{\r\n 'outline-primary': primaryColor.name === selectedPrimaryColor()\r\n }\"\r\n [style]=\"{\r\n 'background-color': primaryColor?.name === 'noir' ? 'var(--text-color)' : primaryColor?.palette?.['500']\r\n }\"\r\n [title]=\"primaryColor.name\"\r\n (click)=\"updateColors($event, 'primary', primaryColor)\"></button>\r\n }\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.surface' | translate }}</span>\r\n <div class=\"pt-2 flex gap-2 flex-wrap justify-start\">\r\n @for (surface of surfaces; track surface.name) {\r\n <button\r\n class=\"border-none w-5 h-5 rounded-full p-0 cursor-pointer outline-none outline-offset-1\"\r\n id=\"oip-app-configurator-surface-color-{{ surface.name }}\"\r\n type=\"button\"\r\n [ngClass]=\"{\r\n 'outline-primary': selectedSurfaceColor()\r\n ? selectedSurfaceColor() === surface.name\r\n : layoutService.layoutConfig().darkTheme\r\n ? surface.name === 'zinc'\r\n : surface.name === 'slate'\r\n }\"\r\n [style]=\"{\r\n 'background-color': surface?.name === 'noir' ? 'var(--text-color)' : surface?.palette?.['500']\r\n }\"\r\n [title]=\"surface.name\"\r\n (click)=\"updateColors($event, 'surface', surface)\"></button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-2\">\r\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.presets' | translate }}</span>\r\n <p-selectButton\r\n id=\"oip-app-configurator-preset-select-button\"\r\n size=\"small\"\r\n [allowEmpty]=\"false\"\r\n [ngModel]=\"selectedPreset()\"\r\n [options]=\"presets\"\r\n (ngModelChange)=\"onPresetChange($event)\" />\r\n </div>\r\n @if (showMenuModeButton()) {\r\n <div class=\"flex flex-col gap-2\">\r\n <span class=\"text-sm text-muted-color font-semibold\">{{ 'app-configurator.menuMode' | translate }}</span>\r\n <p-selectButton\r\n id=\"oip-app-configurator-menu-mode-select-button\"\r\n size=\"small\"\r\n [allowEmpty]=\"false\"\r\n [ngModel]=\"menuMode()\"\r\n [options]=\"menuModeOptions\"\r\n (ngModelChange)=\"onMenuModeChange($event)\" />\r\n </div>\r\n }\r\n </div>\r\n `,\r\n host: {\r\n class:\r\n 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'\r\n }\r\n})\r\nexport class AppConfiguratorComponent implements OnInit {\r\n router = inject(Router);\r\n\r\n config: PrimeNG = inject(PrimeNG);\r\n\r\n layoutService: LayoutService = inject(LayoutService);\r\n\r\n platformId = inject(PLATFORM_ID);\r\n\r\n primeng = inject(PrimeNG);\r\n\r\n presets = Object.keys(presets);\r\n\r\n showMenuModeButton = signal(!this.router.url.includes('auth'));\r\n\r\n menuModeOptions = [\r\n { label: 'Static', value: 'static' },\r\n { label: 'Overlay', value: 'overlay' }\r\n ];\r\n\r\n ngOnInit() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.onPresetChange(this.layoutService.layoutConfig().preset);\r\n }\r\n }\r\n\r\n surfaces: SurfacesType[] = [\r\n {\r\n name: 'slate',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f8fafc',\r\n 100: '#f1f5f9',\r\n 200: '#e2e8f0',\r\n 300: '#cbd5e1',\r\n 400: '#94a3b8',\r\n 500: '#64748b',\r\n 600: '#475569',\r\n 700: '#334155',\r\n 800: '#1e293b',\r\n 900: '#0f172a',\r\n 950: '#020617'\r\n }\r\n },\r\n {\r\n name: 'gray',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f9fafb',\r\n 100: '#f3f4f6',\r\n 200: '#e5e7eb',\r\n 300: '#d1d5db',\r\n 400: '#9ca3af',\r\n 500: '#6b7280',\r\n 600: '#4b5563',\r\n 700: '#374151',\r\n 800: '#1f2937',\r\n 900: '#111827',\r\n 950: '#030712'\r\n }\r\n },\r\n {\r\n name: 'zinc',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafafa',\r\n 100: '#f4f4f5',\r\n 200: '#e4e4e7',\r\n 300: '#d4d4d8',\r\n 400: '#a1a1aa',\r\n 500: '#71717a',\r\n 600: '#52525b',\r\n 700: '#3f3f46',\r\n 800: '#27272a',\r\n 900: '#18181b',\r\n 950: '#09090b'\r\n }\r\n },\r\n {\r\n name: 'neutral',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafafa',\r\n 100: '#f5f5f5',\r\n 200: '#e5e5e5',\r\n 300: '#d4d4d4',\r\n 400: '#a3a3a3',\r\n 500: '#737373',\r\n 600: '#525252',\r\n 700: '#404040',\r\n 800: '#262626',\r\n 900: '#171717',\r\n 950: '#0a0a0a'\r\n }\r\n },\r\n {\r\n name: 'stone',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fafaf9',\r\n 100: '#f5f5f4',\r\n 200: '#e7e5e4',\r\n 300: '#d6d3d1',\r\n 400: '#a8a29e',\r\n 500: '#78716c',\r\n 600: '#57534e',\r\n 700: '#44403c',\r\n 800: '#292524',\r\n 900: '#1c1917',\r\n 950: '#0c0a09'\r\n }\r\n },\r\n {\r\n name: 'soho',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#ececec',\r\n 100: '#dedfdf',\r\n 200: '#c4c4c6',\r\n 300: '#adaeb0',\r\n 400: '#97979b',\r\n 500: '#7f8084',\r\n 600: '#6a6b70',\r\n 700: '#55565b',\r\n 800: '#3f4046',\r\n 900: '#2c2c34',\r\n 950: '#16161d'\r\n }\r\n },\r\n {\r\n name: 'viva',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#f3f3f3',\r\n 100: '#e7e7e8',\r\n 200: '#cfd0d0',\r\n 300: '#b7b8b9',\r\n 400: '#9fa1a1',\r\n 500: '#87898a',\r\n 600: '#6e7173',\r\n 700: '#565a5b',\r\n 800: '#3e4244',\r\n 900: '#262b2c',\r\n 950: '#0e1315'\r\n }\r\n },\r\n {\r\n name: 'ocean',\r\n palette: {\r\n 0: '#ffffff',\r\n 50: '#fbfcfc',\r\n 100: '#F7F9F8',\r\n 200: '#EFF3F2',\r\n 300: '#DADEDD',\r\n 400: '#B1B7B6',\r\n 500: '#828787',\r\n 600: '#5F7274',\r\n 700: '#415B61',\r\n 800: '#29444E',\r\n 900: '#183240',\r\n 950: '#0c1920'\r\n }\r\n }\r\n ];\r\n\r\n selectedPrimaryColor = computed(() => {\r\n return this.layoutService.layoutConfig().primary;\r\n });\r\n\r\n selectedSurfaceColor = computed(() => this.layoutService.layoutConfig().surface);\r\n\r\n selectedPreset = computed(() => this.layoutService.layoutConfig().preset);\r\n\r\n menuMode = computed(() => this.layoutService.layoutConfig().menuMode);\r\n\r\n primaryColors = computed<SurfacesType[]>(() => {\r\n const presetPalette = presets[this.layoutService.layoutConfig().preset as KeyOfType<typeof presets>].primitive;\r\n const colors = [\r\n 'emerald',\r\n 'green',\r\n 'lime',\r\n 'orange',\r\n 'amber',\r\n 'yellow',\r\n 'teal',\r\n 'cyan',\r\n 'sky',\r\n 'blue',\r\n 'indigo',\r\n 'violet',\r\n 'purple',\r\n 'fuchsia',\r\n 'pink',\r\n 'rose'\r\n ];\r\n const palettes: SurfacesType[] = [{ name: 'noir', palette: {} }];\r\n\r\n colors.forEach((color) => {\r\n palettes.push({\r\n name: color,\r\n palette: presetPalette?.[color as KeyOfType<typeof presetPalette>] as SurfacesType['palette']\r\n });\r\n });\r\n\r\n return palettes;\r\n });\r\n\r\n getPresetExt() {\r\n const color: SurfacesType = this.primaryColors().find((c) => c.name === this.selectedPrimaryColor()) || {};\r\n const preset = this.layoutService.layoutConfig().preset;\r\n\r\n if (color.name === 'noir') {\r\n return {\r\n semantic: {\r\n primary: {\r\n 50: '{surface.50}',\r\n 100: '{surface.100}',\r\n 200: '{surface.200}',\r\n 300: '{surface.300}',\r\n 400: '{surface.400}',\r\n 500: '{surface.500}',\r\n 600: '{surface.600}',\r\n 700: '{surface.700}',\r\n 800: '{surface.800}',\r\n 900: '{surface.900}',\r\n 950: '{surface.950}'\r\n },\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.950}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.800}',\r\n activeColor: '{primary.700}'\r\n },\r\n highlight: {\r\n background: '{primary.950}',\r\n focusBackground: '{primary.700}',\r\n color: '#ffffff',\r\n focusColor: '#ffffff'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.50}',\r\n contrastColor: '{primary.950}',\r\n hoverColor: '{primary.200}',\r\n activeColor: '{primary.300}'\r\n },\r\n highlight: {\r\n background: '{primary.50}',\r\n focusBackground: '{primary.300}',\r\n color: '{primary.950}',\r\n focusColor: '{primary.950}'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n } else if (preset === 'Nora') {\r\n return {\r\n semantic: {\r\n primary: color.palette,\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.600}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.700}',\r\n activeColor: '{primary.800}'\r\n },\r\n highlight: {\r\n background: '{primary.600}',\r\n focusBackground: '{primary.700}',\r\n color: '#ffffff',\r\n focusColor: '#ffffff'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.500}',\r\n contrastColor: '{surface.900}',\r\n hoverColor: '{primary.400}',\r\n activeColor: '{primary.300}'\r\n },\r\n highlight: {\r\n background: '{primary.500}',\r\n focusBackground: '{primary.400}',\r\n color: '{surface.900}',\r\n focusColor: '{surface.900}'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n } else {\r\n return {\r\n semantic: {\r\n primary: color.palette,\r\n colorScheme: {\r\n light: {\r\n primary: {\r\n color: '{primary.500}',\r\n contrastColor: '#ffffff',\r\n hoverColor: '{primary.600}',\r\n activeColor: '{primary.700}'\r\n },\r\n highlight: {\r\n background: '{primary.50}',\r\n focusBackground: '{primary.100}',\r\n color: '{primary.700}',\r\n focusColor: '{primary.800}'\r\n }\r\n },\r\n dark: {\r\n primary: {\r\n color: '{primary.400}',\r\n contrastColor: '{surface.900}',\r\n hoverColor: '{primary.300}',\r\n activeColor: '{primary.200}'\r\n },\r\n highlight: {\r\n background: 'color-mix(in srgb, {primary.400}, transparent 84%)',\r\n focusBackground: 'color-mix(in srgb, {primary.400}, transparent 76%)',\r\n color: 'rgba(255,255,255,.87)',\r\n focusColor: 'rgba(255,255,255,.87)'\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n updateColors(event: MouseEvent, type: string, color: SurfacesType) {\r\n if (type === 'primary') {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n primary: color.name\r\n }));\r\n } else if (type === 'surface') {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n surface: color.name\r\n }));\r\n }\r\n this.applyTheme(type, color);\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n applyTheme(type: string, color: SurfacesType) {\r\n if (type === 'primary') {\r\n updatePreset(this.getPresetExt());\r\n } else if (type === 'surface') {\r\n updateSurfacePalette(color.palette);\r\n }\r\n }\r\n\r\n onPresetChange(event: string) {\r\n this.layoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n preset: event\r\n }));\r\n const preset = presets[event as KeyOfType<typeof presets>];\r\n const surfacePalette = this.surfaces.find((s) => s.name === this.selectedSurfaceColor())?.palette;\r\n $t().preset(preset).preset(this.getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });\r\n }\r\n\r\n onMenuModeChange(event: string) {\r\n this.layoutService.layoutConfig.update((prev) => ({\r\n ...prev,\r\n menuMode: event\r\n }));\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'logo',\n standalone: true,\n template: `\n <svg\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.height]=\"height + 'px'\"\n [attr.width]=\"width + 'px'\">\n <path\n class=\"primary-logo-color\"\n d=\"M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"primary-logo-color\"\n d=\"M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"primary-logo-color\"\n d=\"M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n <path\n class=\"secondary-logo-color\"\n d=\"M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z\"\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\"/>\n </svg>\n `,\n styles: [`\n .primary-logo-color {\n fill: var(--primary-color);\n }\n\n .secondary-logo-color {\n fill: var(--p-primary-600);\n }\n `]\n})\nexport class LogoComponent {\n @Input() width: number;\n @Input() height: number;\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport {\r\n LoginResponse,\r\n LogoutAuthOptions,\r\n OidcSecurityService,\r\n PublicEventsService,\r\n EventTypes, AuthOptions\r\n} from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n\r\nexport abstract class SecurityService {\r\n abstract auth(): void;\r\n\r\n abstract logout(): void;\r\n\r\n abstract isAuthenticated(): Observable<boolean>;\r\n\r\n abstract getAccessToken(): Observable<string>\r\n\r\n abstract isTokenExpired(): Observable<boolean>;\r\n\r\n abstract getCurrentUser(): any;\r\n\r\n abstract forceRefreshSession(): Observable<LoginResponse>;\r\n\r\n abstract isAdmin(): boolean\r\n\r\n abstract authorize(configId?: string, authOptions?: AuthOptions): void;\r\n}\r\n\r\n\r\n/**\r\n * SecurityService extends OidcSecurityService to manage authentication,\r\n * token handling, and user role access in an Angular application.\r\n *\r\n * It provides helper methods for checking authentication, managing tokens,\r\n * determining user roles, and performing logout and refresh operations.\r\n */\r\n@Injectable()\r\nexport class KeycloakSecurityService extends OidcSecurityService implements OnDestroy, SecurityService {\r\n /**\r\n * Handles angular OIDC events.\r\n */\r\n private readonly publicEventsService = inject(PublicEventsService);\r\n\r\n /**\r\n * Stores the latest login response from checkAuth().\r\n */\r\n private loginResponse = new BehaviorSubject<LoginResponse>(null);\r\n\r\n /**\r\n * Stores the decoded access token payload.\r\n */\r\n private payload = new BehaviorSubject<any>(null);\r\n\r\n /**\r\n * Stores user-specific data from the login response.\r\n */\r\n userData: any;\r\n\r\n /**\r\n * Initializes service and subscribes to authentication events.\r\n * When a 'NewAuthenticationResult' event is received, the `auth` method is called.\r\n */\r\n constructor() {\r\n super();\r\n this.publicEventsService\r\n .registerForEvents()\r\n .pipe(filter((event) => event.type === EventTypes.NewAuthenticationResult))\r\n .subscribe(() => {\r\n this.auth();\r\n });\r\n }\r\n\r\n getCurrentUser() {\r\n return this.userData;\r\n }\r\n\r\n /**\r\n * Returns the ID token for the sign-in.\r\n * @returns A string with the id token.\r\n */\r\n override getAccessToken(): Observable<string> {\r\n return this.loginResponse.pipe(map((data) => data?.accessToken));\r\n }\r\n\r\n /**\r\n * Indicates whether the current user has the 'admin' role.\r\n *\r\n * @returns {boolean} True if the user is an admin, false otherwise.\r\n */\r\n isAdmin(): boolean {\r\n return this.payload.getValue()?.realm_access?.roles?.includes('admin');\r\n }\r\n\r\n /**\r\n * Initiates authentication check and updates login response, user data,\r\n * and decoded token payload if authenticated.\r\n */\r\n auth() {\r\n super.checkAuth().subscribe((_response: LoginResponse) => {\r\n this.loginResponse.next(_response);\r\n this.userData = _response.userData;\r\n this.getPayloadFromAccessToken().subscribe((_token) => {\r\n this.payload.next(_token);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Performs logout and clears the local token payload.\r\n *\r\n * @param {string} [configId] Optional configuration ID for logout.\r\n * @param {LogoutAuthOptions} [logoutAuthOptions] Optional logout options.\r\n */\r\n logout(configId?: string, logoutAuthOptions?: LogoutAuthOptions) {\r\n this.logoff(configId, logoutAuthOptions).subscribe((x) => this.payload.next(x));\r\n }\r\n\r\n /**\r\n * Completes the BehaviorSubjects when the service is destroyed to avoid memory leaks.\r\n */\r\n ngOnDestroy(): void {\r\n this.loginResponse.complete();\r\n this.payload.complete();\r\n }\r\n\r\n /**\r\n * Checks whether the current access token is expired based on the 'exp' claim.\r\n *\r\n * @returns {Observable<boolean>} Observable that emits true if the token is expired.\r\n */\r\n isTokenExpired(): Observable<boolean> {\r\n return this.getPayloadFromAccessToken().pipe(\r\n map((payload) => {\r\n return payload.exp < Math.floor(Date.now() / 1000);\r\n })\r\n );\r\n }\r\n}\r\n\r\n\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { SecurityService } from './security.service';\r\nimport { BaseDataService } from './base-data.service';\r\n\r\n/**\r\n * UserService is responsible for retrieving and handling user-related data,\r\n * including the user's photo and short label for avatar display.\r\n */\r\n@Injectable()\r\nexport class UserService {\r\n private readonly securityService = inject(SecurityService);\r\n private readonly baseDataService = inject(BaseDataService);\r\n\r\n constructor() {\r\n this.getUserPhoto();\r\n }\r\n\r\n /**\r\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\r\n */\r\n photo: any = null;\r\n\r\n /**\r\n * Indicates whether the user photo has finished loading.\r\n */\r\n photoLoaded: boolean = false;\r\n\r\n /**\r\n * Returns a short label composed of the user's initials.\r\n * Typically used for avatar display when a photo is unavailable.\r\n */\r\n get shortLabel(): string {\r\n const data = this.securityService.getCurrentUser();\r\n return (data) ? data.given_name[0] + data.family_name[0] : \"\";\r\n }\r\n\r\n get userName(): string {\r\n const data = this.securityService.getCurrentUser();\r\n return `${data.given_name} ${data.family_name}`;\r\n }\r\n\r\n /**\r\n * Initiates an HTTP request to fetch the user's photo based on their email,\r\n * and updates the `photo` and `photoLoaded` properties accordingly.\r\n */\r\n getUserPhoto(): void {\r\n const url = `${this.baseDataService.baseUrl}api/user-profile/get-user-photo?email=${this.securityService.getCurrentUser().email}`;\r\n this.baseDataService.getBlob(url).then(\r\n (data) => {\r\n this.createImageFromBlob(data as Blob);\r\n this.photoLoaded = true;\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\r\n *\r\n * @param image - The image Blob to be converted.\r\n */\r\n private createImageFromBlob(image: Blob): void {\r\n const reader = new FileReader();\r\n reader.addEventListener(\r\n 'load',\r\n () => {\r\n this.photo = reader.result;\r\n },\r\n false\r\n );\r\n if (image) {\r\n reader.readAsDataURL(image);\r\n }\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { StyleClassModule } from 'primeng/styleclass';\nimport { LayoutService } from '../services/app.layout.service';\nimport { AppConfiguratorComponent } from './app-configurator.component';\nimport { LogoComponent } from './logo.component';\nimport { SecurityService } from '../services/security.service';\nimport { TopBarService } from '../services/top-bar.service';\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\nimport { AvatarModule } from 'primeng/avatar';\nimport { UserService } from '../services/user.service';\nimport { ButtonModule } from 'primeng/button';\nimport { TranslatePipe } from \"@ngx-translate/core\";\n\n@Component({\n selector: 'app-topbar',\n standalone: true,\n imports: [\n RouterModule,\n CommonModule,\n StyleClassModule,\n AppConfiguratorComponent,\n LogoComponent,\n Tabs,\n TabList,\n Tab,\n AvatarModule,\n ButtonModule,\n TranslatePipe\n ],\n template: `\n <div class=\"layout-topbar\">\n <div class=\"layout-topbar-logo-container\">\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\n <i class=\"pi pi-bars\"></i>\n </button>\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\n <logo [height]=\"36\" [width]=\"36\"></logo>\n <span>{{ 'app-info.title' | translate }}</span>\n </a>\n </div>\n\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\n <p-tabs class=\"layout-topbar-tabs ml-2\" [(value)]=\"topBarService.activeId\">\n <p-tablist>\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\n <i class=\"pi {{ tab.icon }}\"></i>\n <span class=\"ml-2\">{{ tab.caption }}</span>\n </p-tab>\n }\n </p-tablist>\n </p-tabs>\n }\n <div class=\"layout-topbar-actions\">\n <div class=\"layout-config-menu\">\n <p-button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-theme-button\"\n severity=\"secondary\"\n type=\"button\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"toggleDarkMode()\">\n <i\n class=\"pi\"\n [ngClass]=\"{\n 'pi-moon': layoutService.isDarkTheme(),\n 'pi-sun': !layoutService.isDarkTheme()\n }\"></i>\n </p-button>\n <div class=\"relative\">\n <p-button\n class=\"layout-topbar-action layout-topbar-action-highlight\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-palette-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\"\n [rounded]=\"true\">\n <i class=\"pi pi-palette\"></i>\n </p-button>\n <app-configurator/>\n </div>\n </div>\n\n <button\n class=\"layout-topbar-menu-button layout-topbar-action\"\n enterActiveClass=\"animate-scalein\"\n enterFromClass=\"hidden\"\n id=\"oip-app-topbar-menu-expand-button\"\n leaveActiveClass=\"animate-fadeout\"\n leaveToClass=\"hidden\"\n pStyleClass=\"@next\"\n [hideOnOutsideClick]=\"true\">\n <i class=\"pi pi-ellipsis-v\"></i>\n </button>\n\n <div class=\"layout-topbar-menu hidden lg:block\">\n <div class=\"layout-topbar-menu-content\">\n <button\n class=\"layout-topbar-action\"\n id=\"oip-app-topbar-logout-button\"\n type=\"button\"\n (click)=\"securityService.logout()\"\n (keydown)=\"logoutKeyDown($event)\">\n <i class=\"pi pi-sign-out\"></i>\n <span>{{ 'topbar.logout' | translate }}</span>\n </button>\n <button class=\"layout-topbar-action\" routerLink=\"config\">\n <p-avatar\n class=\"p-link flex align-items-center\"\n id=\"oip-app-topbar-user-avatar\"\n shape=\"circle\"\n size=\"normal\"\n [image]=\"userService.photoLoaded ? userService.photo : null\"\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\n </p-avatar>\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>`\n})\nexport class AppTopbar {\n items!: MenuItem[];\n securityService = inject(SecurityService);\n topBarService = inject(TopBarService);\n userService = inject(UserService);\n layoutService = inject(LayoutService);\n\n toggleDarkMode() {\n this.layoutService.layoutConfig.update((state) => ({\n ...state,\n darkTheme: !state.darkTheme\n }));\n }\n\n logoutKeyDown($event: KeyboardEvent) {\n if ($event.key === 'Enter') {\n this.securityService.logout();\n }\n }\n}\n","import { Component } from '@angular/core';\r\nimport { LogoComponent } from './logo.component';\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n template: `\r\n <div class=\"layout-footer\">\r\n <div class=\"flex justify-center flex-1\">\r\n <logo class=\"mr-2 -my-0.5\" [height]=\"18\" [width]=\"18\"></logo>\r\n <span class=\"font-medium\">{{ 'app-info.footer' | translate }}</span>\r\n </div>\r\n <p class=\"mr-auto\">{{ 'app-info.version' | translate }}</p>\r\n </div>\r\n `,\r\n standalone: true,\r\n imports: [LogoComponent, TranslatePipe]\r\n})\r\nexport class FooterComponent {\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { LayoutService, } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, \"body\" | \"bodyUsed\">;\n\nexport interface FullRequestParams extends Omit<RequestInit, \"body\"> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit<\n FullRequestParams,\n \"body\" | \"method\" | \"query\" | \"path\"\n>;\n\nexport interface ApiConfig<SecurityDataType = unknown> {\n baseUrl?: string;\n baseApiParams?: Omit<RequestParams, \"baseUrl\" | \"cancelToken\" | \"signal\">;\n securityWorker?: (\n securityData: SecurityDataType | null,\n ) => Promise<RequestParams | void> | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse<D extends unknown, E extends unknown = unknown>\n extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\n@Injectable({providedIn: \"root\"})\nexport class HttpClient<SecurityDataType = unknown> {\n protected securityService = inject(SecurityService);\n protected layoutService = inject(LayoutService);\n public baseUrl: string = \"\";\n private securityData: SecurityDataType | null = null;\n private securityWorker?: ApiConfig<SecurityDataType>[\"securityWorker\"] = (\n securityData,\n ) => ({\n headers: {\n \"Accept-language\": this.layoutService.language()\n ? this.layoutService.language()\n : \"en\",\n \"X-Timezone\": this.layoutService.timeZone(),\n Authorization: `Bearer ${securityData}`,\n },\n });\n private abortControllers = new Map<CancelToken, AbortController>();\n private customFetch = (...fetchParams: Parameters<typeof fetch>) =>\n fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n constructor() {\n this.securityService.getAccessToken().subscribe((token) => {\n this.securityData = token;\n });\n }\n\n public setSecurityData = (data: SecurityDataType | null) => {\n this.securityData = data;\n };\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter(\n (key) => \"undefined\" !== typeof query[key],\n );\n return keys\n .map((key) =>\n Array.isArray(query[key])\n ? this.addArrayQueryParam(query, key)\n : this.addQueryParam(query, key),\n )\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record<ContentType, (input: any) => any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\")\n ? JSON.stringify(input)\n : input,\n [ContentType.Text]: (input: any) =>\n input !== null && typeof input !== \"string\"\n ? JSON.stringify(input)\n : input,\n [ContentType.FormData]: (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData()),\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (\n cancelToken: CancelToken,\n ): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async <T = any, E = any>({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise<T> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(this.securityData))) ||\n {};\n const requestParams = this.mergeRequestParams(params, secureParams);\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n let responseFormat = format || requestParams.format;\n\n return this.customFetch(\n `${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`,\n {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData\n ? {\"Content-Type\": type}\n : {}),\n },\n signal:\n (cancelToken\n ? this.createAbortSignal(cancelToken)\n : requestParams.signal) || null,\n body:\n typeof body === \"undefined\" || body === null\n ? null\n : payloadFormatter(body),\n },\n ).then(async (response) => {\n const r = response.clone() as HttpResponse<T, E>;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n if (typeof E !== undefined && responseFormat === undefined)\n responseFormat = \"json\";\n\n const data = !responseFormat\n ? r\n : await response[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) throw data;\n return data.data;\n });\n };\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n EditModuleInstanceDto,\n IntKeyValueDto,\n MenuDeleteModuleInstanceParams,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class Menu<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves the menu available to the current authenticated user.\n *\n * @tags Menu\n * @name menuGet\n * @request GET:/api/menu/get\n * @secure\n */\n menuGet = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Retrieves the admin-specific menu.\n *\n * @tags Menu\n * @name menuGetAdminMenu\n * @request GET:/api/menu/get-admin-menu\n * @secure\n */\n menuGetAdminMenu = (params: RequestParams = {}) =>\n this.request<ModuleInstanceDto[], any>({\n path: `/api/menu/get-admin-menu`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Retrieves all available modules in the system.\n *\n * @tags Menu\n * @name menuGetModules\n * @request GET:/api/menu/get-modules\n * @secure\n */\n menuGetModules = (params: RequestParams = {}) =>\n this.request<IntKeyValueDto[], any>({\n path: `/api/menu/get-modules`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Adds a new module instance to the system.\n *\n * @tags Menu\n * @name menuAddModuleInstance\n * @request POST:/api/menu/add-module-instance\n * @secure\n */\n menuAddModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/add-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Edits an existing module instance.\n *\n * @tags Menu\n * @name menuEditModuleInstance\n * @request POST:/api/menu/edit-module-instance\n * @secure\n */\n menuEditModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/edit-module-instance`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Deletes a module instance by its identifier.\n *\n * @tags Menu\n * @name menuDeleteModuleInstance\n * @request DELETE:/api/menu/delete-module-instance\n * @secure\n */\n menuDeleteModuleInstance = (\n query: MenuDeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, any>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { BaseDataService } from './base-data.service';\r\nimport { MenuChangeEvent } from '../events/menu-change.event';\r\nimport { EditModuleInstanceDto } from '../dtos/edit-module-instance.dto';\r\nimport { Menu } from '../api/Menu';\r\nimport { AppTitleService } from './app-title.service';\r\nimport { AddModuleInstanceDto, ModuleInstanceDto } from '../api/data-contracts';\r\n\r\n@Injectable()\r\nexport class MenuService extends BaseDataService {\r\n private readonly menuSource = new Subject<MenuChangeEvent>();\r\n private readonly resetSource = new Subject();\r\n private readonly titleService = inject(AppTitleService);\r\n private readonly menuDataService = inject(Menu);\r\n menuSource$ = this.menuSource.asObservable();\r\n resetSource$ = this.resetSource.asObservable();\r\n contextMenuItem: any;\r\n\r\n public menu: ModuleInstanceDto[] = [];\r\n public adminMode: boolean = false;\r\n\r\n async loadMenu() {\r\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\r\n }\r\n\r\n /**\r\n * Handles changes in the menu state.\r\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\r\n * @return {void}\r\n */\r\n onMenuStateChange(event: MenuChangeEvent): void {\r\n this.menuSource.next(event);\r\n this.titleService.setTitle(event.item.label);\r\n }\r\n\r\n reset() {\r\n this.resetSource.next(true);\r\n }\r\n\r\n getMenu() {\r\n return this.menuDataService.menuGet();\r\n }\r\n\r\n getAdminMenu() {\r\n return this.menuDataService.menuGetAdminMenu();\r\n }\r\n\r\n getModules() {\r\n return this.menuDataService.menuGetModules();\r\n }\r\n\r\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\r\n return this.menuDataService.menuAddModuleInstance(addModuleInstance as AddModuleInstanceDto);\r\n }\r\n\r\n deleteItem(moduleInstanceId: number) {\r\n return this.sendRequest(this.baseUrl + 'api/menu/delete-module-instance?id=' + moduleInstanceId, 'DELETE');\r\n }\r\n\r\n editModuleInstance(item: EditModuleInstanceDto) {\r\n return this.sendRequest(this.baseUrl + 'api/menu/edit-module-instance', 'POST', item);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { LayoutService } from '../../services/app.layout.service';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { NgIf, NgClass, NgFor } from '@angular/common';\r\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\r\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { MsgService } from '../../services/msg.service';\r\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\r\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { Menu } from '../../api/Menu';\r\nimport { MenuDeleteModuleInstanceParams } from '../../api/data-contracts';\r\n\r\ninterface MenuItemComponentTranslation {\r\n delete: string;\r\n edit: string;\r\n new: string;\r\n deleteItemConfirmHeader: string;\r\n deleteItemConfirmMessage: string;\r\n deleteItemSuccessMessage: string;\r\n deleteItemConfirmRejectButtonPropsLabel: string;\r\n deleteItemConfirmAcceptButtonPropsLabel: string;\r\n}\r\n\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: '[app-menuitem]',\r\n template: `\r\n <ng-container>\r\n <p-confirm-dialog/>\r\n <div\r\n *ngIf=\"root && item.visible !== false\"\r\n class=\"layout-menuitem-root-text\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n {{ item.label }}\r\n </div>\r\n <a\r\n *ngIf=\"(!item.routerLink || item.items) && item.visible !== false\"\r\n pRipple\r\n tabindex=\"0\"\r\n [attr.href]=\"item.url\"\r\n [attr.target]=\"item.target\"\r\n [ngClass]=\"item.class\"\r\n (click)=\"itemClick($event)\">\r\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\r\n <i *ngIf=\"item.items\" class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\r\n </a>\r\n <a\r\n *ngIf=\"item.routerLink && !item.items && item.visible !== false\"\r\n pRipple\r\n routerLinkActive=\"active-route\"\r\n tabindex=\"0\"\r\n [attr.target]=\"item.target\"\r\n [fragment]=\"item.fragment\"\r\n [ngClass]=\"item.class\"\r\n [preserveFragment]=\"item.preserveFragment\"\r\n [queryParams]=\"item.queryParams\"\r\n [queryParamsHandling]=\"item.queryParamsHandling\"\r\n [replaceUrl]=\"item.replaceUrl\"\r\n [routerLink]=\"item.routerLink\"\r\n [routerLinkActiveOptions]=\"\r\n item.routerLinkActiveOptions || {\r\n paths: 'exact',\r\n queryParams: 'ignored',\r\n matrixParams: 'ignored',\r\n fragment: 'ignored'\r\n }\r\n \"\r\n [skipLocationChange]=\"item.skipLocationChange\"\r\n [state]=\"item.state\"\r\n (click)=\"itemClick($event)\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\r\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\r\n <i *ngIf=\"item.items\" class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\r\n </a>\r\n\r\n <ul\r\n *ngIf=\"item.items && item.visible !== false\"\r\n [@children]=\"submenuAnimation\"\r\n (contextmenu)=\"onContextMenu($event, item)\">\r\n <ng-template let-child let-i=\"index\" ngFor [ngForOf]=\"item.items\">\r\n <li\r\n app-menuitem\r\n [class]=\"child.badgeClass\"\r\n [contextMenu]=\"contextMenu\"\r\n [index]=\"i\"\r\n [item]=\"child\"\r\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\r\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\r\n [parentKey]=\"key\"></li>\r\n </ng-template>\r\n </ul>\r\n </ng-container>\r\n `,\r\n animations: [\r\n trigger('children', [\r\n state(\r\n 'collapsed',\r\n style({\r\n height: '0'\r\n })\r\n ),\r\n state(\r\n 'expanded',\r\n style({\r\n height: '*'\r\n })\r\n ),\r\n transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\r\n ])\r\n ],\r\n imports: [NgIf, RippleModule, NgClass, RouterLinkActive, RouterLink, NgFor, ContextMenuModule, ConfirmDialog],\r\n providers: [ConfirmationService]\r\n})\r\nexport class MenuItemComponent implements OnInit, OnDestroy {\r\n private readonly layoutService = inject(LayoutService);\r\n private readonly translateService = inject(TranslateService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly msgService = inject(MsgService);\r\n private readonly menuDataService = inject(Menu);\r\n\r\n @Input() item: ContextMenuItemDto;\r\n @Input() index!: number;\r\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\r\n @Input() parentKey!: string;\r\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\r\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\r\n @Input() contextMenu: ContextMenu;\r\n\r\n private active = false;\r\n private subscriptions: Subscription[] = [];\r\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\r\n\r\n protected key: string = '';\r\n\r\n constructor(\r\n private readonly cd: ChangeDetectorRef,\r\n public router: Router,\r\n private readonly menuService: MenuService\r\n ) {\r\n this.subscriptions.push(\r\n this.menuService.menuSource$.subscribe((value) => {\r\n Promise.resolve(null).then(() => {\r\n if (value.routeEvent) {\r\n this.active = value.key === this.key || value.key.startsWith(this.key + '-');\r\n } else if (value.key !== this.key && !value.key.startsWith(this.key + '-')) {\r\n this.active = false;\r\n }\r\n });\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.menuService.resetSource$.subscribe(() => {\r\n this.active = false;\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\r\n if (this.item.routerLink) {\r\n this.updateActiveStateFromRoute();\r\n }\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\r\n this.localization = value;\r\n })\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\r\n\r\n if (this.item.routerLink) {\r\n this.updateActiveStateFromRoute();\r\n }\r\n }\r\n\r\n updateActiveStateFromRoute() {\r\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\r\n paths: 'exact',\r\n queryParams: 'ignored',\r\n matrixParams: 'ignored',\r\n fragment: 'ignored'\r\n });\r\n\r\n if (activeRoute) {\r\n this.menuService.onMenuStateChange({\r\n key: this.key,\r\n item: this.item,\r\n routeEvent: true\r\n });\r\n }\r\n }\r\n\r\n itemClick(event: Event) {\r\n // avoid processing disabled items\r\n if (this.item.disabled) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n // execute command\r\n if (this.item.command) {\r\n this.item.command({ originalEvent: event, item: this.item });\r\n }\r\n\r\n // toggle active state\r\n if (this.item.items) {\r\n this.active = !this.active;\r\n }\r\n\r\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\r\n }\r\n\r\n get submenuAnimation() {\r\n return this.root || this.active ? 'expanded' : 'collapsed';\r\n }\r\n\r\n @HostBinding('class.active-menuitem')\r\n get activeClass() {\r\n return this.active && !this.root;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.map((s) => s.unsubscribe());\r\n }\r\n\r\n private newClick(e: MenuItemCommandEvent) {\r\n this.menuItemCreateDialogComponent.showDialog();\r\n }\r\n\r\n onContextMenu($event: MouseEvent, item: any) {\r\n this.menuService.contextMenuItem = item;\r\n this.contextMenu.model = [\r\n {\r\n label: this.localization.new,\r\n icon: PrimeIcons.PLUS,\r\n command: (event) => this.newClick(event)\r\n },\r\n {\r\n label: this.localization.edit,\r\n icon: PrimeIcons.FILE_EDIT,\r\n command: (event) => this.editClick(event)\r\n },\r\n { separator: true },\r\n {\r\n label: this.localization.delete,\r\n icon: PrimeIcons.TRASH,\r\n command: (event) => this.deleteItem(event)\r\n }\r\n ];\r\n this.contextMenu.show($event);\r\n }\r\n\r\n private deleteItem(event: MenuItemCommandEvent) {\r\n this.confirmationService.confirm({\r\n header: this.localization.deleteItemConfirmHeader,\r\n message: this.localization.deleteItemConfirmMessage,\r\n icon: PrimeIcons.TRASH,\r\n rejectButtonProps: {\r\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\r\n severity: 'secondary',\r\n outlined: true\r\n },\r\n acceptButtonProps: {\r\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\r\n severity: 'danger'\r\n },\r\n accept: async () => {\r\n await this.menuDataService.menuDeleteModuleInstance({\r\n id: this.menuService.contextMenuItem?.moduleInstanceId\r\n } as MenuDeleteModuleInstanceParams);\r\n this.msgService.success(this.localization.deleteItemSuccessMessage);\r\n await this.menuService.loadMenu();\r\n }\r\n });\r\n }\r\n\r\n private editClick(event: MenuItemCommandEvent) {\r\n this.menuItemEditDialogComponent.showDialog().then();\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { SelectModule } from 'primeng/select';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\r\nimport { Menu } from '../../api/Menu';\r\nimport { MenuService } from '../../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'menu-item-create-dialog',\r\n standalone: true,\r\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\r\n template: `\r\n <p-dialog\r\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '40rem' }\"\r\n [(visible)]=\"visible\">\r\n @if (menuService.contextMenuItem) {\r\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\r\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\r\n </label>\r\n <input\r\n autocomplete=\"off\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-create-dialog-parent-input\"\r\n pInputText\r\n readonly\r\n [ngModel]=\"menuService.contextMenuItem?.label\" />\r\n </div>\r\n }\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\r\n {{ 'menuItemCreateDialogComponent.label' | translate }}\r\n </label>\r\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\r\n {{ 'menuItemCreateDialogComponent.module' | translate }}\r\n </label>\r\n <p-select\r\n appendTo=\"body\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-create-module\"\r\n optionLabel=\"value\"\r\n optionValue=\"key\"\r\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\r\n [options]=\"modules\"\r\n [(ngModel)]=\"selectModule\" />\r\n </div>\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\r\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\r\n </label>\r\n <i class=\"{{ selectIcon }}\"></i>\r\n <input class=\"flex-auto\" id=\"oip-menu-item-create-dialog-icon\" pInputText [(ngModel)]=\"selectIcon\" />\r\n </div>\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button\r\n id=\"oip-menu-item-create-cancel\"\r\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\r\n severity=\"secondary\"\r\n (click)=\"changeVisible()\"\r\n (keydown)=\"changeVisible()\" />\r\n <p-button\r\n id=\"oip-menu-item-create-save\"\r\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\r\n (click)=\"save()\"\r\n (keydown)=\"save()\" />\r\n </div>\r\n </p-dialog>\r\n `\r\n})\r\nexport class MenuItemCreateDialogComponent implements OnInit {\r\n menuService = inject(MenuService);\r\n protected readonly menu = inject(Menu);\r\n @Input() visible!: boolean;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n modules: IntKeyValueDto[] = [];\r\n selectModule: any;\r\n label: string;\r\n selectIcon: string = 'pi pi-box';\r\n\r\n async ngOnInit() {\r\n this.modules = await this.menu.menuGetModules();\r\n }\r\n\r\n changeVisible() {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async save() {\r\n const item: AddModuleInstanceDto = {\r\n moduleId: this.selectModule,\r\n label: this.label,\r\n icon: this.selectIcon,\r\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\r\n };\r\n await this.menuService.addModuleInstance(item);\r\n await this.menuService.loadMenu();\r\n this.hide();\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n showDialog() {\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n}\r\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { SecurityDataService } from '../../services/security-data.service';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { EditModuleInstanceDto } from '../../dtos/edit-module-instance.dto';\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\n@Component({\r\n imports: [ButtonModule, DialogModule, InputTextModule, FormsModule, TranslatePipe, MultiSelectModule],\r\n selector: 'menu-item-edit-dialog',\r\n standalone: true,\r\n template: `\r\n <p-dialog\r\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\r\n [modal]=\"true\"\r\n [style]=\"{ width: '40rem' }\"\r\n [(visible)]=\"visible\">\r\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\r\n {{ 'menuItemEditDialogComponent.label' | translate }}\r\n </label>\r\n <input\r\n autocomplete=\"off\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-edit-dialog-menu-input\"\r\n pInputText\r\n [(ngModel)]=\"item.label\" />\r\n </div>\r\n\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\r\n {{ 'menuItemEditDialogComponent.icon' | translate }}\r\n </label>\r\n <i class=\"{{ item.icon }}\"></i>\r\n <input class=\"flex-auto\" id=\"oip-menu-item-edit-dialog-icon\" pInputText [(ngModel)]=\"item.icon\" />\r\n </div>\r\n\r\n <div class=\"flex items-center gap-4 mb-4\">\r\n <label class=\"font-semibold w-1/3\" for=\"security\">\r\n {{ 'menuItemEditDialogComponent.security' | translate }}\r\n </label>\r\n <p-multiSelect\r\n appendTo=\"body\"\r\n class=\"flex-auto\"\r\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\r\n placeholder=\"Select roles\"\r\n [maxSelectedLabels]=\"10\"\r\n [options]=\"roles\"\r\n [(ngModel)]=\"item.viewRoles\" />\r\n </div>\r\n\r\n <div class=\"flex justify-end gap-2\">\r\n <p-button\r\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\r\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\r\n severity=\"secondary\"\r\n (click)=\"changeVisible()\"\r\n (keydown)=\"changeVisible()\" />\r\n <p-button\r\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\r\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\r\n (click)=\"save()\"\r\n (keydown)=\"save()\" />\r\n </div>\r\n </p-dialog>\r\n `\r\n})\r\nexport class MenuItemEditDialogComponent {\r\n private readonly menuService = inject(MenuService);\r\n private readonly securityDataService = inject(SecurityDataService);\r\n\r\n @Input() visible!: boolean;\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n\r\n modules: any[] = [];\r\n roles: string[] = [];\r\n item: EditModuleInstanceDto = {\r\n icon: '',\r\n label: '',\r\n viewRoles: [''],\r\n moduleId: 0,\r\n moduleInstanceId: 0,\r\n parentId: 0\r\n };\r\n\r\n changeVisible() {\r\n this.visible = !this.visible;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async save() {\r\n await this.menuService.editModuleInstance(this.item);\r\n await this.menuService.loadMenu();\r\n this.hide();\r\n }\r\n\r\n hide() {\r\n this.visible = false;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n\r\n async showDialog() {\r\n this.item = {\r\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\r\n moduleId: this.menuService.contextMenuItem?.moduleId,\r\n parentId: this.menuService.contextMenuItem?.parentId,\r\n label: this.menuService.contextMenuItem?.label,\r\n icon: this.menuService.contextMenuItem?.icon,\r\n viewRoles: this.menuService.contextMenuItem?.securities\r\n };\r\n\r\n this.roles = await this.securityDataService.getRealmRoles();\r\n this.menuService.getModules().then((data) => {\r\n this.modules = data;\r\n });\r\n\r\n this.visible = true;\r\n this.visibleChange.emit(this.visible);\r\n }\r\n}\r\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MenuService } from '../../services/app.menu.service';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { SecurityService } from '../../services/security.service';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { DialogModule } from 'primeng/dialog';\r\nimport { ContextMenuService, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MenuItemComponent } from './menu-item.component';\r\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\r\nimport { Menu } from '../../api/Menu';\r\nimport { L10nService } from \"../../services/l10n.service\";\r\n\r\n@Component({\r\n imports: [\r\n MenuItemComponent,\r\n ButtonModule,\r\n ContextMenuModule,\r\n DialogModule,\r\n InputTextModule,\r\n MenuItemCreateDialogComponent,\r\n FormsModule,\r\n MenuItemEditDialogComponent\r\n ],\r\n providers: [Menu],\r\n selector: 'app-menu',\r\n standalone: true,\r\n template: `\r\n <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\r\n <ul class=\"layout-menu\">\r\n @for (item of menuService.menu; track item; let i = $index) {\r\n <ng-container>\r\n @if (item.separator) {\r\n <li class=\"menu-separator\"></li>\r\n } @else {\r\n <li\r\n app-menuitem\r\n [contextMenu]=\"contextMenu\"\r\n [index]=\"i\"\r\n [item]=\"item\"\r\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\r\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\r\n [root]=\"true\"></li>\r\n }\r\n </ng-container>\r\n }\r\n </ul>\r\n </div>\r\n <p-contextMenu [target]=\"empty\"/>\r\n @if (securityService.isAdmin) {\r\n <menu-item-create-dialog/>\r\n <menu-item-edit-dialog/>\r\n }`\r\n})\r\nexport class MenuComponent implements OnInit {\r\n readonly menuService = inject(MenuService);\r\n readonly securityService = inject(SecurityService);\r\n readonly translateService = inject(TranslateService);\r\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\r\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\r\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\r\n\r\n ngOnInit() {\r\n this.menuService.loadMenu().then();\r\n\r\n }\r\n\r\n private newClick(e: MenuItemCommandEvent) {\r\n this.menuItemCreateDialogComponent.showDialog();\r\n }\r\n\r\n onContextMenu($event: MouseEvent) {\r\n this.menuService.contextMenuItem = null;\r\n this.contextMenu.model = [\r\n {\r\n label: this.translateService.instant('menuComponent.new'),\r\n icon: PrimeIcons.PLUS,\r\n command: (event) => this.newClick(event)\r\n }\r\n ];\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MenuComponent } from './menu/menu.component';\r\n\r\n@Component({\r\n selector: 'app-sidebar',\r\n template: ` <app-menu></app-menu>`,\r\n standalone: true,\r\n imports: [MenuComponent]\r\n})\r\nexport class SidebarComponent {\r\n constructor() {}\r\n}\r\n","import { Component, Renderer2, ViewChild, OnDestroy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { AppTopbar } from './top-bar.component';\r\nimport { FooterComponent } from './footer.component';\r\nimport { LayoutService } from './../services/app.layout.service';\r\nimport { SidebarComponent } from './sidebar.component';\r\nimport { Menu } from '../api/Menu';\r\nimport { MenuService } from '../services/app.menu.service';\r\n\r\n@Component({\r\n selector: 'app-layout',\r\n standalone: true,\r\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\r\n template: `\r\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\r\n <app-topbar></app-topbar>\r\n <app-sidebar></app-sidebar>\r\n <div class=\"layout-main-container\">\r\n <div class=\"layout-main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <app-footer></app-footer>\r\n </div>\r\n <div class=\"layout-mask animate-fadein\"></div>\r\n </div>\r\n `,\r\n providers: [MenuService, Menu]\r\n})\r\nexport class AppLayoutComponent implements OnDestroy {\r\n protected layoutService = inject(LayoutService);\r\n protected router = inject(Router);\r\n protected renderer = inject(Renderer2);\r\n overlayMenuOpenSubscription: Subscription;\r\n\r\n menuOutsideClickListener: () => void;\r\n\r\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\r\n\r\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\r\n\r\n constructor() {\r\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\r\n if (!this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\r\n if (this.isOutsideClicked(event)) {\r\n this.hideMenu();\r\n }\r\n });\r\n }\r\n\r\n if (this.layoutService.layoutState().staticMenuMobileActive) {\r\n this.blockBodyScroll();\r\n }\r\n });\r\n\r\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\r\n this.hideMenu();\r\n });\r\n }\r\n\r\n isOutsideClicked(event: MouseEvent) {\r\n const sidebarEl = document.querySelector('.layout-sidebar');\r\n const topbarEl = document.querySelector('.layout-menu-button');\r\n const eventTarget = event.target as Node;\r\n\r\n return !(\r\n sidebarEl?.isSameNode(eventTarget) ||\r\n sidebarEl?.contains(eventTarget) ||\r\n topbarEl?.isSameNode(eventTarget) ||\r\n topbarEl?.contains(eventTarget)\r\n );\r\n }\r\n\r\n hideMenu() {\r\n this.layoutService.layoutState.update((prev) => ({\r\n ...prev,\r\n overlayMenuActive: false,\r\n staticMenuMobileActive: false,\r\n menuHoverActive: false\r\n }));\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n this.menuOutsideClickListener = null;\r\n }\r\n this.unblockBodyScroll();\r\n }\r\n\r\n blockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.add('blocked-scroll');\r\n } else {\r\n document.body.className += ' blocked-scroll';\r\n }\r\n }\r\n\r\n unblockBodyScroll(): void {\r\n if (document.body.classList) {\r\n document.body.classList.remove('blocked-scroll');\r\n } else {\r\n document.body.className = document.body.className.replace(\r\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\r\n ' '\r\n );\r\n }\r\n }\r\n\r\n get containerClass() {\r\n return {\r\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\r\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-static-inactive':\r\n this.layoutService.layoutState().staticMenuDesktopInactive &&\r\n this.layoutService.layoutConfig().menuMode === 'static',\r\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\r\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\r\n };\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.overlayMenuOpenSubscription) {\r\n this.overlayMenuOpenSubscription.unsubscribe();\r\n }\r\n\r\n if (this.menuOutsideClickListener) {\r\n this.menuOutsideClickListener();\r\n }\r\n }\r\n}\r\n","import { Component, computed, inject } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { StyleClassModule } from 'primeng/styleclass';\r\nimport { AppConfiguratorComponent } from './app-configurator.component';\r\nimport { LayoutService } from '../services/app.layout.service';\r\n\r\n@Component({\r\n selector: 'app-floating-configurator',\r\n imports: [ButtonModule, StyleClassModule, AppConfiguratorComponent],\r\n template: `\r\n <div class=\"fixed flex gap-4 top-8 right-8\">\r\n <p-button\r\n id=\"oip-app-floating-configurator-dark-theme-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [icon]=\"isDarkTheme() ? 'pi pi-moon' : 'pi pi-sun'\"\r\n [rounded]=\"true\"\r\n (onClick)=\"toggleDarkMode()\" />\r\n <div class=\"relative\">\r\n <p-button\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n icon=\"pi pi-palette\"\r\n id=\"oip-app-floating-configurator-next-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n type=\"button\"\r\n [hideOnOutsideClick]=\"true\"\r\n [rounded]=\"true\" />\r\n <app-configurator />\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class AppFloatingConfiguratorComponent {\r\n LayoutService = inject(LayoutService);\r\n\r\n isDarkTheme = computed(() => this.LayoutService.layoutConfig().darkTheme);\r\n\r\n toggleDarkMode() {\r\n this.LayoutService.layoutConfig.update((state) => ({\r\n ...state,\r\n darkTheme: !state.darkTheme\r\n }));\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\r\nimport { LayoutService } from \"./app.layout.service\";\r\nimport { PrimeNG } from \"primeng/config\";\r\n\r\n/**\r\n * Service for managing translation loading in the application\r\n */\r\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\r\nexport class L10nService {\r\n private loadedTranslations: Set<string> = new Set();\r\n private httpClient = inject(HttpClient);\r\n private translateService = inject(TranslateService);\r\n private readonly primeNg = inject(PrimeNG);\r\n private readonly layoutService = inject(LayoutService);\r\n\r\n /**\r\n * Loads translations for a specific component\r\n * @param component - Name of the component to load translations for\r\n */\r\n public loadComponentTranslations(component: string) {\r\n const lang = this.translateService.currentLang;\r\n this.loadTranslations(component, lang);\r\n }\r\n\r\n /**\r\n * Gets the translated value of a key (or an array of keys)\r\n * @returns the translated key, or an object of translated keys\r\n */\r\n public get(key: string) {\r\n this.loadComponentTranslations(key.split('.')[0]);\r\n return this.translateService.get(key);\r\n }\r\n\r\n /**\r\n * Internal method to load translations from JSON files\r\n * @param component - Component or translation namespace\r\n * @param lang - Language code to load translations for\r\n */\r\n private loadTranslations(component: string, lang: string) {\r\n // Create unique key for this component-language combination\r\n const key = `${component}.${lang}`;\r\n\r\n // Skip if translations are already loaded\r\n if (this.loadedTranslations.has(key)) {\r\n return;\r\n }\r\n\r\n try {\r\n // Load translation file from assets\r\n this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).subscribe(\r\n (translations) => {\r\n // Get existing translations for the language\r\n const current = this.translateService.translations[lang] || {};\r\n\r\n // Merge new translations with existing ones\r\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\r\n\r\n // Mark these translations as loaded\r\n this.loadedTranslations.add(key);\r\n }\r\n );\r\n\r\n\r\n } catch (e) {\r\n console.warn(`No translations found for ${component}.${lang}.json`);\r\n console.error(e);\r\n }\r\n }\r\n\r\n /**\r\n * Changes the lang currently used\r\n */\r\n use(selectedLanguage: string, key: string = null) {\r\n if (key) {\r\n this.get(key);\r\n }\r\n this.translateService.use(selectedLanguage)\r\n }\r\n\r\n init(langs: string[]) {\r\n this.translateService.addLangs(langs);\r\n const lang = /en|ru/.exec(this.layoutService.language()) ? this.layoutService.language() : 'en';\r\n this.translateService.setDefaultLang(lang);\r\n this.translateService.use(lang);\r\n this.loadComponentTranslations('app-info');\r\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\r\n }\r\n\r\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\r\n return this.translateService.instant(key, interpolateParams);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { LogoComponent } from './logo.component';\r\nimport { Button } from 'primeng/button';\r\nimport { AppFloatingConfiguratorComponent } from './app-floating-configurator.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { L10nService } from \"../services/l10n.service\";\r\n\r\n@Component({\r\n selector: 'app-notfound',\r\n template: `\r\n <app-floating-configurator/>\r\n <div class=\"flex items-center justify-center min-h-screen overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, color-mix(in srgb, var(--primary-color), transparent 60%) 10%, var(--surface-ground) 30%)\">\r\n <div\r\n class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center\"\r\n style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo [height]=\"96\" [width]=\"96\"></logo>\r\n </div>\r\n <span class=\"text-primary font-bold text-3xl\">{{ 'notfound.errorCode' | translate }}</span>\r\n <h1 class=\"text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2\">{{ 'notfound.title' | translate }}</h1>\r\n <div class=\"text-surface-600 dark:text-surface-200 mb-8\">{{ 'notfound.description' | translate }}</div>\r\n <p-button id=\"oip-app-notfound-go-to-home-button\" [label]=\"'notfound.button' | translate\" routerLink=\"/\"/>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`,\r\n imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],\r\n standalone: true\r\n})\r\nexport class NotfoundComponent {\r\n\r\n constructor(l10nService: L10nService) {\r\n l10nService.get('notfound');\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { LogoComponent } from '../../logo.component';\r\nimport { SecurityService } from '../../../services/security.service';\r\nimport { AppFloatingConfiguratorComponent } from '../../app-floating-configurator.component';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n template: `\r\n <app-floating-configurator />\r\n <div\r\n class=\"bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <div\r\n style=\"border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)\">\r\n <div class=\"w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20\" style=\"border-radius: 53px\">\r\n <div class=\"flex flex-col items-center justify-center\">\r\n <logo [height]=\"96\" [width]=\"96\" />\r\n </div>\r\n <div class=\"text-center mb-8\">\r\n <div class=\"text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4\">\r\n {{ 'unauthorized.welcomeToOip' | translate }}\r\n </div>\r\n <span class=\"text-muted-color font-medium\">{{ 'unauthorized.signInToContinue' | translate }}</span>\r\n </div>\r\n <div>\r\n <p-button\r\n id=\"oip-unauthorized-error-sign-in-button\"\r\n label=\"{{ 'unauthorized.signIn' | translate }}\"\r\n styleClass=\"w-full\"\r\n (click)=\"securityService.authorize()\"></p-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n imports: [\r\n ButtonModule,\r\n RippleModule,\r\n LogoComponent,\r\n AppFloatingConfiguratorComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe\r\n ]\r\n})\r\nexport class UnauthorizedComponent {\r\n protected readonly securityService = inject(SecurityService);\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { RippleModule } from 'primeng/ripple';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-error',\r\n template: `<div\r\n class=\"surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden\">\r\n <div class=\"flex flex-column align-items-center justify-content-center\">\r\n <img alt=\"Sakai logo\" class=\"mb-5 w-6rem flex-shrink-0\" src=\"assets/demo/images/error/logo-error.svg\" />\r\n <div\r\n style=\"border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);\">\r\n <div\r\n class=\"w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center\"\r\n style=\"border-radius:53px\">\r\n <div class=\"grid flex flex-column align-items-center\">\r\n <div\r\n class=\"flex justify-content-center align-items-center bg-pink-500 border-circle\"\r\n style=\"height:3.2rem; width:3.2rem;\">\r\n <i class=\"pi pi-fw pi-exclamation-circle text-2xl text-white\"></i>\r\n </div>\r\n <h1 class=\"text-900 font-bold text-5xl mb-2\">Error Occured</h1>\r\n <span class=\"text-600 mb-5\">Requested resource is not available.</span>\r\n <img alt=\"Error\" class=\"mb-5\" src=\"assets/demo/images/error/asset-error.svg\" width=\"80%\" />\r\n <button\r\n class=\"p-button-text\"\r\n icon=\"pi pi-arrow-left\"\r\n id=\"oip-app-error-go-to-dashboard-button\"\r\n label=\"Go to Dashboard\"\r\n pButton\r\n pRipple\r\n [routerLink]=\"['/']\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`,\r\n standalone: true,\r\n imports: [ButtonModule, RippleModule, RouterLink]\r\n})\r\nexport class ErrorComponent {}\r\n","import { Component, inject } from '@angular/core';\r\nimport { FileUploadModule } from 'primeng/fileupload';\r\nimport { ImageModule } from 'primeng/image';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { UserService } from '../services/user.service';\r\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 'user-profile',\r\n standalone: true,\r\n imports: [FileUploadModule, ImageModule, ImageModule, FileUploadModule, ImageModule, AvatarModule, TranslatePipe],\r\n template: `\r\n <p-avatar\r\n class=\"mr-2\"\r\n id=\"oip-user-profile-photo-avatar\"\r\n shape=\"circle\"\r\n size=\"xlarge\"\r\n [image]=\"userService.photoLoaded ? userService.photo : null\" />\r\n <div class=\"mt-2\">\r\n <p-fileupload\r\n accept=\"image/*\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel=\"{{ 'profileComponent.changePhoto' | translate }}\"\r\n id=\"oip-user-profile-file-upload\"\r\n maxFileSize=\"1000000\"\r\n mode=\"basic\"\r\n name=\"files\"\r\n url=\"/api/user-profile/post-user-photo\"\r\n withCredentials=\"true\"\r\n [auto]=\"true\"\r\n (onUpload)=\"onBasicUploadAuto($event)\" />\r\n </div>\r\n `\r\n})\r\nexport class ProfileComponent {\r\n readonly userService = inject(UserService);\r\n readonly msgService = inject(MsgService);\r\n readonly translateService = inject(TranslateService);\r\n\r\n onBasicUploadAuto($event) {\r\n this.msgService.success(this.translateService.instant('profileComponent.successfullyUploaded'));\r\n }\r\n}\r\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { ProfileComponent } from './profile.component';\r\nimport { Fluid } from 'primeng/fluid';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Select } from 'primeng/select';\r\nimport { TableModule } from 'primeng/table';\r\nimport { LayoutService } from '../services/app.layout.service';\r\nimport { UserService } from '../services/user.service';\r\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { RouterLink } from '@angular/router';\r\nimport { SecurityService } from '../services/security.service';\r\nimport { MenuService } from '../services/app.menu.service';\r\nimport { Button } from 'primeng/button';\r\nimport { L10nService } from '../services/l10n.service';\r\nimport { SelectItem } from 'primeng/api';\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\n\r\ninterface L10n {\r\n menu: string;\r\n all: string;\r\n profile: string;\r\n photo: string;\r\n usePhoto256x256Pixel: string;\r\n selectLanguage: string;\r\n moduleManagement: string;\r\n localization: string;\r\n goTo: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-config',\r\n template: `\r\n <p-fluid>\r\n <div class=\"flex flex-col md:flex-row gap-4\">\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ 'config.profile' | translate }}</div>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n {{ userService.userName }}\r\n </div>\r\n <label>\r\n {{ 'config.photo' | translate }}\r\n <span\r\n class=\"pi pi-question-circle\"\r\n pTooltip=\"{{ 'config.usePhoto256x256Pixel' | translate }}\"\r\n tooltipPosition=\"right\"></span>\r\n </label>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <user-profile></user-profile>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ 'config.localization' | translate }}</div>\r\n <label> {{ 'config.selectLanguage' | translate }} </label>\r\n <div class=\"flex justify-content-end flex-wrap\">\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n id=\"oip-app-config-language-select\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [options]=\"languages\"\r\n [(ngModel)]=\"selectedLanguage\"\r\n (onChange)=\"changeLanguage()\"/>\r\n </div>\r\n </div>\r\n </div>\r\n @if (securityService.isAdmin()) {\r\n <div class=\"md:w-1/2\">\r\n <div class=\"card flex flex-col gap-4\">\r\n <div class=\"font-semibold text-xl\">{{ 'config.menu' | translate }}</div>\r\n <div class=\"flex items-center gap-2\">\r\n <label for=\"oip-app-config-admin-mode\">{{ 'config.all' | translate }}</label>\r\n <p-toggle-switch\r\n id=\"oip-app-config-admin-mode\"\r\n [(ngModel)]=\"menuService.adminMode\"\r\n (onChange)=\"onSwitchChange()\"></p-toggle-switch>\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n <label for=\"oip-app-config-admin-mode\">{{ 'config.moduleManagement' | translate }}</label>\r\n <p-button icon=\"pi pi-cog\" label=\"{{ 'config.goTo' | translate }}\" routerLink=\"/modules\"/>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </p-fluid>\r\n `,\r\n imports: [ProfileComponent, Fluid, Tooltip, FormsModule, Select, TableModule, ToggleSwitchModule, RouterLink, Button, TranslatePipe]\r\n})\r\nexport class ConfigComponent implements OnInit {\r\n private readonly layoutService = inject(LayoutService);\r\n private readonly l10nService = inject(L10nService);\r\n protected readonly userService = inject(UserService);\r\n protected readonly securityService = inject(SecurityService);\r\n protected readonly menuService = inject(MenuService);\r\n protected l10n = {} as L10n;\r\n\r\n selectedLanguage: string;\r\n languages: SelectItem<string>[] = [\r\n { value: 'en', label: 'English' },\r\n { value: 'ru', label: 'Русский' }\r\n ];\r\n\r\n constructor() {\r\n this.l10nService.loadComponentTranslations('config');\r\n this.selectedLanguage = this.layoutService.language();\r\n }\r\n\r\n async ngOnInit() {\r\n\r\n }\r\n\r\n /**\r\n * Changes the application's language.\r\n * @return {void}\r\n */\r\n changeLanguage(): void {\r\n this.layoutService.layoutConfig.update((config) => ({\r\n ...config,\r\n language: this.selectedLanguage\r\n }));\r\n this.l10nService.use(this.selectedLanguage, 'config');\r\n }\r\n\r\n async onSwitchChange(): Promise<void> {\r\n await this.menuService.loadMenu();\r\n }\r\n}\r\n","import { Component, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { ConfirmationService, SharedModule } from 'primeng/api';\r\nimport { TableModule } from 'primeng/table';\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { NgIf } from '@angular/common';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { BaseModuleComponent } from './base-module.component';\r\nimport { NoSettingsDto } from '../dtos/no-settings.dto';\r\nimport { SecurityComponent } from './security.component';\r\nimport { L10nService } from \"../services/l10n.service\";\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\n\r\nexport interface MigrationDto {\r\n name: string;\r\n applied: boolean;\r\n pending: boolean;\r\n exist: boolean;\r\n}\r\n\r\nexport interface ApplyMigrationRequest {\r\n name: string;\r\n}\r\n\r\n@Component({\r\n imports: [\r\n TableModule,\r\n SharedModule,\r\n TagModule,\r\n InputTextModule,\r\n TextareaModule,\r\n ButtonModule,\r\n FormsModule,\r\n ConfirmDialog,\r\n SecurityComponent,\r\n Tooltip,\r\n TranslatePipe\r\n ],\r\n selector: 'db-migration',\r\n template: `\r\n @if (isContent) {\r\n <div class=\"card\" style=\"height: 100%\">\r\n <p-confirmDialog/>\r\n <div>\r\n <h5>{{ 'db-migration.migrationManager' | translate }}</h5>\r\n <div class=\"flex flex-row gap-2\">\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n (click)=\"refreshAction()\"/>\r\n <p-button\r\n icon=\"pi pi-filter-slash\"\r\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n (click)=\"dt.clear()\"/>\r\n </div>\r\n <div>\r\n <p-table #dt dataKey=\"name\" editMode=\"row\" size=\"small\" [scrollable]=\"true\" [value]=\"data\">\r\n <ng-template let-columns pTemplate=\"header\">\r\n <tr>\r\n <th pSortableColumn=\"name\" scope=\"col\">\r\n {{ 'db-migration.columns.name' | translate }}\r\n <p-columnFilter display=\"menu\" field=\"name\" type=\"text\"/>\r\n </th>\r\n <th scope=\"col\">{{ 'db-migration.columns.applied' | translate }}</th>\r\n <th scope=\"col\">{{ 'db-migration.columns.exist' | translate }}</th>\r\n <th scope=\"col\">{{ 'db-migration.columns.pending' | translate }}</th>\r\n <th scope=\"col\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #body let-columns=\"columns\" let-editing=\"editing\" let-ri=\"rowIndex\" let-rowData>\r\n <tr [pEditableRow]=\"rowData\">\r\n <td>\r\n {{ rowData.name }}\r\n </td>\r\n <td>\r\n @if (rowData.applied) {\r\n <p-button\r\n icon=\"pi pi-check\"\r\n severity=\"success\"\r\n [rounded]=\"true\"\r\n [text]=\"true\">\r\n </p-button>\r\n }\r\n </td>\r\n <td>\r\n @if (rowData.exist) {\r\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"/>\r\n }\r\n </td>\r\n <td>\r\n @if (rowData.pending) {\r\n <p-button icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"></p-button>\r\n }\r\n </td>\r\n <td>\r\n <p-button\r\n icon=\"pi pi-bolt\"\r\n pCancelEditableRow\r\n pTooltip=\"{{'db-migration.actions.applyMigration' | translate}}\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"left\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"applyMigration(rowData)\">\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n </div>\r\n } @else if (isSecurity) {\r\n <security [controller]=\"controller\" [id]=\"id\"/>\r\n }\r\n `,\r\n providers: [ConfirmationService]\r\n})\r\nexport class DbMigrationComponent\r\n extends BaseModuleComponent<NoSettingsDto, NoSettingsDto>\r\n implements OnInit, OnDestroy {\r\n data: MigrationDto[];\r\n l10nService = inject(L10nService);\r\n\r\n constructor() {\r\n super();\r\n this.l10nService.loadComponentTranslations('db-migration');\r\n }\r\n\r\n async ngOnInit() {\r\n await super.ngOnInit();\r\n await this.refreshAction();\r\n }\r\n\r\n async refreshAction() {\r\n this.getData()\r\n .then((response) => {\r\n this.data = response;\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));\r\n });\r\n }\r\n\r\n async getData() {\r\n return this.baseDataService.sendRequest<MigrationDto[]>(`api/${this.controller}/get-migrations`, 'GET');\r\n }\r\n\r\n async applyMigration(rowData: MigrationDto) {\r\n const request = { name: rowData.name } as ApplyMigrationRequest;\r\n return this.baseDataService.sendRequest(`api/${this.controller}/apply-migration`, 'POST', request);\r\n }\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\nimport { Injectable } from \"@angular/core\";\nimport {\n ApiExceptionResponse,\n ExistModuleDto,\n ModuleDeleteRequest,\n ModuleDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class Module<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves all modules stored in the system.\n *\n * @tags Module\n * @name moduleGetAll\n * @request GET:/api/module/get-all\n * @secure\n */\n moduleGetAll = (params: RequestParams = {}) =>\n this.request<ModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-all`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Inserts a new module into the system.\n *\n * @tags Module\n * @name moduleInsert\n * @request POST:/api/module/insert\n * @secure\n */\n moduleInsert = (data: ModuleDto, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/insert`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Deletes a module by its identifier.\n *\n * @tags Module\n * @name moduleDelete\n * @request DELETE:/api/module/delete\n * @secure\n */\n moduleDelete = (data: ModuleDeleteRequest, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/module/delete`,\n method: \"DELETE\",\n body: data,\n secure: true,\n type: ContentType.Json,\n ...params,\n });\n /**\n * @description Returns all registered modules and indicates whether each one is currently loaded into the application.\n *\n * @tags Module\n * @name moduleGetModulesWithLoadStatus\n * @request GET:/api/module/get-modules-with-load-status\n * @secure\n */\n moduleGetModulesWithLoadStatus = (params: RequestParams = {}) =>\n this.request<ExistModuleDto[], ApiExceptionResponse>({\n path: `/api/module/get-modules-with-load-status`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","import { Component, inject, OnInit } from '@angular/core';\r\nimport { Tooltip } from 'primeng/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TableModule } from 'primeng/table';\r\nimport { BaseDataService } from '../services/base-data.service';\r\nimport { Tag } from 'primeng/tag';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ToolbarModule } from 'primeng/toolbar';\r\nimport { MsgService } from '../services/msg.service';\r\nimport { ConfirmationService } from 'primeng/api';\r\nimport { ConfirmDialog } from 'primeng/confirmdialog';\r\nimport { L10nService } from '../services/l10n.service';\r\nimport { Module } from '../api/Module';\r\nimport { ModuleDto } from '../api/data-contracts';\r\nimport { AppTitleService } from '../services/app-title.service';\r\nimport { TranslatePipe } from \"@ngx-translate/core\";\r\n\r\ninterface L10n {\r\n confirm: {\r\n header: string;\r\n message: string;\r\n cancel: string;\r\n delete: string;\r\n };\r\n title: string;\r\n messages: {\r\n deleteSuccess: string;\r\n };\r\n table: {\r\n deleteTooltip: string;\r\n currentlyLoaded: string;\r\n yes: string;\r\n no: string;\r\n name: string;\r\n moduleId: string;\r\n };\r\n refreshTooltip: string;\r\n}\r\n\r\n@Component({\r\n imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog, TranslatePipe],\r\n providers: [ConfirmationService, Module],\r\n selector: 'app-modules',\r\n template: `\r\n <p-confirmDialog></p-confirmDialog>\r\n <div class=\"flex flex-col md:flex-row gap-4\">\r\n <div class=\"card w-full\">\r\n <div class=\"font-semibold text-xl mb-4\">\r\n {{ l10n.title }}\r\n </div>\r\n <div class=\"mb-4\">\r\n <p-toolbar>\r\n <p-button\r\n icon=\"pi pi-refresh\"\r\n rounded=\"true\"\r\n severity=\"secondary\"\r\n text=\"true\"\r\n tooltipPosition=\"bottom\"\r\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\r\n (onClick)=\"refreshAction()\"></p-button>\r\n </p-toolbar>\r\n </div>\r\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\r\n <th>{{ 'app-modules.table.name' | translate }}</th>\r\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\r\n <th style=\"width: 4rem\"></th>\r\n </tr>\r\n </ng-template>\r\n <ng-template let-module pTemplate=\"body\">\r\n <tr>\r\n <td>{{ module.moduleId }}</td>\r\n <td>{{ module.name }}</td>\r\n <td>\r\n <p-tag\r\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\r\n [value]=\"(module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\"></p-tag>\r\n </td>\r\n <td>\r\n <p-button\r\n icon=\"pi pi-trash\"\r\n rounded=\"true\"\r\n severity=\"danger\"\r\n text=\"true\"\r\n tooltipPosition=\"bottom\"\r\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\r\n (onClick)=\"deleteModule(module)\"></p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class AppModulesComponent implements OnInit {\r\n protected dataService = inject(BaseDataService);\r\n protected modules: ModuleDto[] = [];\r\n protected msgService = inject(MsgService);\r\n protected confirmationService = inject(ConfirmationService);\r\n protected l10nService = inject(L10nService);\r\n protected l10n: L10n = {} as L10n;\r\n protected titleService = inject(AppTitleService);\r\n private moduleService = inject(Module);\r\n\r\n async ngOnInit() {\r\n this.l10nService.get('app-modules').subscribe((l10n) => {\r\n this.l10n = l10n;\r\n });\r\n this.titleService.setTitle(this.l10n.title);\r\n await this.refreshAction();\r\n }\r\n\r\n async refreshAction() {\r\n this.modules = await this.moduleService.moduleGetModulesWithLoadStatus();\r\n }\r\n\r\n deleteModule(module: ModuleDto) {\r\n this.confirmationService.confirm({\r\n header: this.l10n.confirm.header,\r\n message: this.l10n.confirm.message,\r\n icon: 'pi pi-trash',\r\n rejectButtonProps: {\r\n label: this.l10n.confirm.cancel,\r\n severity: 'secondary',\r\n outlined: true\r\n },\r\n acceptButtonProps: {\r\n label: this.l10n.confirm.delete,\r\n severity: 'danger'\r\n },\r\n accept: async () => {\r\n this.dataService\r\n .sendRequest(`api/module/delete`, 'DELETE', {\r\n moduleId: module.moduleId\r\n })\r\n .then(() => this.refreshAction())\r\n .catch((error) => console.error(error));\r\n\r\n this.msgService.success(this.l10n.messages.deleteSuccess);\r\n }\r\n });\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Router, UrlTree } from '@angular/router';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { Observable, combineLatest, of } from 'rxjs';\r\nimport { SecurityService } from './security.service';\r\n\r\n/**\r\n * A route guard that ensures the user is authenticated and has a valid access token.\r\n * If the access token is expired, it attempts to refresh the session.\r\n * If authentication fails or refresh is unsuccessful, redirects to the unauthorized page.\r\n */\r\n@Injectable()\r\nexport class AuthGuardService {\r\n private readonly oidcSecurityService = inject(SecurityService);\r\n private readonly router = inject(Router);\r\n\r\n /**\r\n * Checks whether the route can be activated.\r\n * - Returns `true` if the user is authenticated and the token is valid.\r\n * - Attempts to refresh the token if expired.\r\n * - Redirects to `/unauthorized` if not authenticated or refresh fails.\r\n *\r\n * @returns {Observable<boolean | UrlTree>} A stream resolving to true (allow), or UrlTree (redirect).\r\n */\r\n canActivate(): Observable<boolean | UrlTree> {\r\n return combineLatest([this.oidcSecurityService.isAuthenticated(), this.oidcSecurityService.isTokenExpired()]).pipe(\r\n switchMap(([authenticated, tokenExpired]) => {\r\n if (!authenticated) {\r\n return of(this.router.parseUrl('/unauthorized'));\r\n }\r\n if (!tokenExpired) {\r\n return of(true);\r\n }\r\n\r\n // Token is expired; attempt to refresh\r\n return this.tryRefreshToken();\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Attempts to refresh the session using the refresh token.\r\n * If successful, allows route activation; otherwise, redirects to `/unauthorized`.\r\n *\r\n * @returns {boolean | UrlTree} A stream resolving to true or redirect UrlTree.\r\n */\r\n tryRefreshToken(): Observable<boolean | UrlTree> {\r\n return this.oidcSecurityService.forceRefreshSession().pipe(\r\n map((refreshSuccess) => {\r\n return refreshSuccess ? true : this.router.parseUrl('/unauthorized');\r\n }),\r\n catchError((err) => {\r\n console.warn(err);\r\n return of(this.router.parseUrl('/unauthorized'));\r\n })\r\n );\r\n }\r\n}\r\n","import { AbstractSecurityStorage } from 'angular-auth-oidc-client';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class SecurityStorageService implements AbstractSecurityStorage {\r\n read(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n write(key: string, value: any): void {\r\n localStorage.setItem(key, value);\r\n }\r\n\r\n remove(key: string): void {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n clear(): void {\r\n localStorage.clear();\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { HttpInterceptorFn } from '@angular/common/http';\r\nimport { LayoutService } from '../services/app.layout.service';\r\n\r\nexport const langIntercept: HttpInterceptorFn = (req, next) => {\r\n const layoutService = inject(LayoutService);\r\n const lang = layoutService.language() ? layoutService.language() : 'en';\r\n const httpHeaders = req.headers.set('Accept-language', lang);\r\n const authReq = req.clone({\r\n headers: httpHeaders\r\n });\r\n return next(authReq);\r\n};\r\n","import { inject, Pipe, PipeTransform } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { map, Observable } from 'rxjs';\r\n\r\n@Pipe({\r\n standalone: true,\r\n name: 'secure'\r\n})\r\nexport class SecurePipe implements PipeTransform {\r\n private readonly http = inject(HttpClient);\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(url: any): Observable<SafeUrl> {\r\n return this.http\r\n .get(url, { responseType: 'blob' })\r\n .pipe(map((val) => this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(val))));\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { map, Observable } from 'rxjs';\r\nimport { OpenIdConfiguration, StsConfigHttpLoader } from 'angular-auth-oidc-client';\r\nimport { GetKeycloakClientSettingsResponse } from '../api/data-contracts';\r\n\r\n/**\r\n * Load keycloak settings from backend and save to sessionStorage\r\n * @param httpClient\r\n * @returns StsConfigHttpLoader\r\n */\r\nexport const httpLoaderAuthFactory = (httpClient: HttpClient) => {\r\n const KEYCLOAK_SETTINGS_KEY = 'keycloak-client-settings';\r\n const settingsStings = sessionStorage.getItem(KEYCLOAK_SETTINGS_KEY);\r\n if (settingsStings) {\r\n const config$ = new Observable<GetKeycloakClientSettingsResponse>((subscribe) => {\r\n subscribe.next(JSON.parse(settingsStings));\r\n });\r\n return new StsConfigHttpLoader(config$);\r\n } else {\r\n const config$ = httpClient.get<GetKeycloakClientSettingsResponse>(`api/security/get-keycloak-client-settings`).pipe(\r\n map((config: GetKeycloakClientSettingsResponse) => {\r\n const authConfig: OpenIdConfiguration = {\r\n authority: config.authority,\r\n redirectUrl: window.location.origin,\r\n postLogoutRedirectUri: window.location.origin,\r\n clientId: config.clientId,\r\n scope: config.scope,\r\n responseType: config.responseType,\r\n useRefreshToken: config.useRefreshToken,\r\n silentRenew: config.silentRenew,\r\n logLevel: config.logLevel,\r\n secureRoutes: config.secureRoutes\r\n };\r\n sessionStorage.setItem(KEYCLOAK_SETTINGS_KEY, JSON.stringify(authConfig));\r\n return authConfig;\r\n })\r\n );\r\n return new StsConfigHttpLoader(config$);\r\n }\r\n};\r\n","// Components\r\nexport { BaseModuleComponent } from './components/base-module.component';\r\nexport { SecurityComponent } from './components/security.component';\r\nexport { AppTopbar } from './components/top-bar.component';\r\nexport { FooterComponent } from './components/footer.component';\r\nexport { MenuComponent } from './components/menu/menu.component';\r\nexport { AppLayoutComponent } from './components/app.layout.component';\r\nexport { SidebarComponent } from './components/sidebar.component';\r\nexport { LogoComponent } from './components/logo.component';\r\nexport { NotfoundComponent } from './components/notfound.component';\r\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\r\nexport { ErrorComponent } from './components/auth/error/error.component';\r\nexport { ProfileComponent } from './components/profile.component';\r\nexport { ConfigComponent } from './components/config.component';\r\nexport { DbMigrationComponent } from './components/db-migration.component';\r\nexport { AppModulesComponent } from './components/app-modules.component';\r\nexport { AppConfiguratorComponent } from './components/app-configurator.component'\r\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator.component';\r\n\r\n// DTOs\r\nexport { TopBarDto } from './dtos/top-bar.dto';\r\nexport { SecurityDto } from './dtos/security.dto';\r\nexport { PutSecurityDto } from './dtos/put-security.dto';\r\nexport { NoSettingsDto } from './dtos/no-settings.dto';\r\n\r\n// Services\r\nexport { BaseDataService } from './services/base-data.service';\r\nexport { TopBarService } from './services/top-bar.service';\r\nexport { SecurityService, KeycloakSecurityService } from './services/security.service';\r\nexport { SecurityDataService } from './services/security-data.service';\r\nexport { MsgService } from './services/msg.service';\r\nexport { AuthGuardService } from './services/auth.service';\r\nexport { AppConfig, LayoutService } from './services/app.layout.service';\r\nexport { MenuService } from './services/app.menu.service';\r\nexport { UserService} from './services/user.service';\r\nexport { SecurityStorageService } from './services/security-storage.service';\r\n\r\n// Events\r\nexport { MenuChangeEvent } from './events/menu-change.event';\r\n\r\n// other\r\nexport { langIntercept } from './intercepts/i18n-intercept.service';\r\nexport { SecurePipe } from './modules/secure.pipe';\r\nexport { httpLoaderAuthFactory } from './modules/http-loader.factory';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HttpClient","i3","i1","i2","i2.MenuService","i4","i5","filter","i1.L10nService","map"],"mappings":"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"}