oip-common 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"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/frontend-config.ts","../../../projects/oip-common/src/services/base-data.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.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/components/app-configurator.component.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo.component.ts","../../../projects/oip-common/src/services/logo.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.api.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.api.ts","../../../projects/oip-common/src/components/app-modules.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/security-storage.service.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/services/table-filter.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';\nimport { MessageService } from 'primeng/api';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ToastMessageOptions } from 'primeng/api';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({ providedIn: 'root' })\nexport class MsgService {\n protected readonly messageService: MessageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n private readonly lifetime: number = 2000;\n\n add(msg: ToastMessageOptions) {\n this.messageService.add(msg);\n }\n\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'success',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'info',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'warn',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n if (detail instanceof HttpErrorResponse) {\n summary = `Error: ${detail.status} ${detail.statusText}`;\n detail = `${detail.name} \\r\\n ${detail.message}`;\n }\n this.messageService.add({\n severity: 'error',\n summary: summary,\n detail: detail.toString(),\n life: life\n });\n }\n\n extractErrorMessage(error: unknown, fallback: string): string {\n if (\n typeof error === 'object' &&\n error &&\n 'error' in error &&\n typeof error.error === 'object' &&\n error.error &&\n 'message' in error.error &&\n typeof error.error.message === 'string'\n ) {\n return error.error.message;\n }\n\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n\n return fallback;\n }\n\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\n this.error(this.extractErrorMessage(error, fallback), summary, life);\n }\n\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'contrast',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'secondary',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type OipFrontendAppMode = 'standalone' | 'distributed';\n\nexport interface OipFrontendConfig {\n appMode: OipFrontendAppMode;\n apiBaseUrl?: string;\n notificationHubUrl?: string;\n}\n\nexport const DEFAULT_OIP_FRONTEND_CONFIG: OipFrontendConfig = {\n appMode: 'standalone',\n apiBaseUrl: '',\n notificationHubUrl: ''\n};\n\nexport const OIP_FRONTEND_CONFIG = new InjectionToken<OipFrontendConfig>(\n 'OIP_FRONTEND_CONFIG',\n {\n factory: () => DEFAULT_OIP_FRONTEND_CONFIG\n }\n);\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { OIP_FRONTEND_CONFIG } from './frontend-config';\n\n/**\n * BaseDataService provides a unified interface for sending HTTP requests\n * using Angular's HttpClient. It supports standard HTTP methods and automatic\n * credential handling.\n */\n@Injectable()\nexport class BaseDataService {\n private readonly http = inject(HttpClient);\n private readonly frontendConfig = inject(OIP_FRONTEND_CONFIG);\n\n /**\n * Gets the base URL of the application from the HTML <base> tag.\n */\n get baseUrl(): string {\n return this.normalizeBaseUrl(\n this.frontendConfig.apiBaseUrl || document.getElementsByTagName('base')[0].href\n );\n }\n\n /**\n * Builds a fully-qualified application URL based on frontend mode.\n */\n buildUrl(path: string): string {\n const normalizedPath = path.startsWith('/') ? path.substring(1) : path;\n return `${this.baseUrl}${normalizedPath}`;\n }\n\n /**\n * Sends an HTTP request with the specified method and data.\n *\n * @template TResponse - Expected response type.\n * @param url - The target URL for the HTTP request.\n * @param method - The HTTP method to use (GET, PUT, POST, DELETE). Default is 'GET'.\n * @param data - An object containing request parameters or payload.\n * @returns A promise that resolves to the response of type TResponse.\n */\n sendRequest<TResponse>(\n url: string,\n method: 'GET' | 'PUT' | 'POST' | 'DELETE' = 'GET',\n data: any = {}\n ): Promise<TResponse> {\n const httpOptions = { withCredentials: true };\n let result: Observable<TResponse>;\n\n switch (method) {\n case 'GET':\n result = this.http.get<TResponse>(url, { params: data });\n break;\n case 'PUT':\n result = this.http.put<TResponse>(url, data, httpOptions);\n break;\n case 'POST':\n result = this.http.post<TResponse>(url, data, httpOptions);\n break;\n case 'DELETE':\n result = this.http.request<TResponse>('DELETE', url, {\n body: data,\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n withCredentials: true\n });\n break;\n }\n\n return lastValueFrom(result);\n }\n\n /**\n * Sends a GET request and retrieves a response as a Blob.\n *\n * @param url - The target URL for the GET request.\n * @returns A promise that resolves to a Object response.\n */\n getBlob(url: string): Promise<object> {\n const httpOptions = {\n responseType: 'blob' as 'json',\n withCredentials: true\n };\n const result = this.http.get(url, httpOptions);\n return lastValueFrom(result);\n }\n\n private normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\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","/**\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 { ChangeDetectorRef, Component, effect, inject, OnDestroy, OnInit, signal, WritableSignal } from '@angular/core';\nimport { TopBarDto } from '../dtos/top-bar.dto';\nimport { TopBarService } from '../services/top-bar.service';\nimport { MsgService } from '../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDataService } from '../services/base-data.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { AppTitleService } from '../services/app-title.service';\nimport { LayoutService } from '../services/app.layout.service';\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({ standalone: true, template: '' })\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private isInitialized = false;\n private moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to base data service functionality.\n * @deprecated The method should not be used\n */\n public readonly baseDataService: BaseDataService = inject(BaseDataService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = { ...this.localSettings() };\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n { id: 'content', icon: 'pi-box', caption: '' },\n { id: 'settings', icon: 'pi-cog', caption: '' },\n { id: 'security', icon: 'pi-lock', caption: '' }\n ];\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * resets the top bar items to an empty array, and sets the active ID\n * to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.subscriptions.push(\n this.translateService.get('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems[0].caption = value.content;\n this.topBarItems[1].caption = value.settings;\n this.topBarItems[2].caption = value.security;\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n this.settings = await this.baseDataService.sendRequest<TBackendStoreSettings>(\n `${this.baseDataService.baseUrl}api/${this.controller}/get-module-instance-settings?id=${this.id}`\n );\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n await this.baseDataService\n .sendRequest(`api/${this.controller}/put-module-instance-settings`, 'PUT', {\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {}\n\n private async reloadModuleInstance(): Promise<void> {\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(async () => {\n await this.getSettings();\n await this.onModuleInstanceChange();\n });\n\n await this.moduleInstanceReloadPromise;\n }\n}\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","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 { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport {\r\n LoginResponse,\r\n LogoutAuthOptions,\r\n OidcSecurityService,\r\n PublicEventsService,\r\n EventTypes,\r\n AuthOptions\r\n} from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\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 * 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","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { BaseDataService } from './base-data.service';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly baseDataService = inject(BaseDataService);\n\n constructor() {\n this.getUserPhoto();\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n return data ? data.given_name[0].toUpperCase() + data.family_name[0].toUpperCase() : '';\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return `${data.given_name} ${data.family_name}`;\n }\n\n /**\n * Initiates an HTTP request to fetch the user's photo based on their email,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const url = this.baseDataService.buildUrl(\n `api/user-profile/get-user-photo?email=${this.securityService.getCurrentUser().email}`\n );\n this.baseDataService.getBlob(url).then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n console.log(error);\n }\n );\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'logo',\r\n standalone: true,\r\n template: `\r\n <svg\r\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n [attr.height]=\"height + 'px'\"\r\n [attr.width]=\"width + 'px'\">\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"secondary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n .primary-logo-color {\r\n fill: var(--primary-color);\r\n }\r\n\r\n .secondary-logo-color {\r\n fill: var(--p-primary-600);\r\n }\r\n `\r\n ]\r\n})\r\nexport class LogoComponent {\r\n @Input() width: number;\r\n @Input() height: number;\r\n}\r\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\r\nimport { LogoComponent } from '../components/logo.component';\r\nimport { Provider } from '@angular/core';\r\n\r\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\r\n\r\nexport function provideLogoComponent(component: Type<any>): Provider {\r\n return {\r\n provide: LOGO_COMPONENT_TOKEN,\r\n useValue: component\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LogoService {\r\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\r\n\r\n getLogoComponent(): Type<any> {\r\n return this.customLogoComponent || LogoComponent;\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StyleClassModule } from 'primeng/styleclass';\r\nimport { LayoutService } from '../services/app.layout.service';\r\nimport { AppConfiguratorComponent } from './app-configurator.component';\r\nimport { SecurityService } from '../services/security.service';\r\nimport { TopBarService } from '../services/top-bar.service';\r\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { UserService } from '../services/user.service';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { LogoService } from '../services/logo.service';\r\n\r\n@Component({\r\n selector: 'app-topbar',\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n CommonModule,\r\n StyleClassModule,\r\n AppConfiguratorComponent,\r\n Tabs,\r\n TabList,\r\n Tab,\r\n AvatarModule,\r\n ButtonModule,\r\n TranslatePipe\r\n ],\r\n template: ` <div class=\"layout-topbar\">\r\n <div class=\"layout-topbar-logo-container\">\r\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\r\n <i class=\"pi pi-bars\"></i>\r\n </button>\r\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\r\n <ng-container\r\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\r\n <span>{{ 'app-info.title' | translate }}</span>\r\n </a>\r\n </div>\r\n\r\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\r\n <p-tabs class=\"layout-topbar-tabs ml-2\" [(value)]=\"topBarService.activeId\">\r\n <p-tablist>\r\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\r\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\r\n <i class=\"pi {{ tab.icon }}\"></i>\r\n <span class=\"ml-2\">{{ tab.caption }}</span>\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n }\r\n <div class=\"layout-topbar-actions\">\r\n <div class=\"layout-config-menu\">\r\n <p-button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-theme-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"toggleDarkMode()\">\r\n <i\r\n class=\"pi\"\r\n [ngClass]=\"{\r\n 'pi-moon': layoutService.isDarkTheme(),\r\n 'pi-sun': !layoutService.isDarkTheme()\r\n }\"></i>\r\n </p-button>\r\n <div class=\"relative\">\r\n <p-button\r\n class=\"layout-topbar-action layout-topbar-action-highlight\"\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n id=\"oip-app-topbar-palette-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n [hideOnOutsideClick]=\"true\"\r\n [rounded]=\"true\">\r\n <i class=\"pi pi-palette\"></i>\r\n </p-button>\r\n <app-configurator />\r\n </div>\r\n </div>\r\n\r\n <button\r\n class=\"layout-topbar-menu-button layout-topbar-action\"\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n id=\"oip-app-topbar-menu-expand-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n [hideOnOutsideClick]=\"true\">\r\n <i class=\"pi pi-ellipsis-v\"></i>\r\n </button>\r\n\r\n <div class=\"layout-topbar-menu hidden lg:block\">\r\n <div class=\"layout-topbar-menu-content\">\r\n <button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-logout-button\"\r\n type=\"button\"\r\n (click)=\"securityService.logout()\"\r\n (keydown)=\"logoutKeyDown($event)\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>{{ 'topbar.logout' | translate }}</span>\r\n </button>\r\n <button class=\"layout-topbar-action\" routerLink=\"config\">\r\n <p-avatar\r\n class=\"p-link flex align-items-center\"\r\n id=\"oip-app-topbar-user-avatar\"\r\n shape=\"circle\"\r\n size=\"normal\"\r\n [image]=\"userService.photoLoaded ? userService.photo : null\"\r\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\r\n </p-avatar>\r\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`\r\n})\r\nexport class AppTopbar {\r\n items!: MenuItem[];\r\n securityService = inject(SecurityService);\r\n topBarService = inject(TopBarService);\r\n userService = inject(UserService);\r\n layoutService = inject(LayoutService);\r\n logoService = inject(LogoService);\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 logoutKeyDown($event: KeyboardEvent) {\r\n if ($event.key === 'Enter') {\r\n this.securityService.logout();\r\n }\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { LogoComponent } from './logo.component';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { LogoService } from '../services/logo.service';\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 <div class=\"mr-2 -my-0.5\">\r\n <ng-container\r\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\r\n </div>\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: [TranslatePipe, NgComponentOutlet]\r\n})\r\nexport class FooterComponent {\r\n protected logoService = inject(LogoService);\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\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 JsonApi = \"application/vnd.api+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\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 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.JsonApi]: (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 if (input instanceof FormData) {\n return input;\n }\n\n return 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 },\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 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 responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[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\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n IntKeyValueDto,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\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 get\n * @summary Retrieves the menu available to the current authenticated user.\n * @request GET:/api/menu/get\n * @secure\n * @response `200` `(ModuleInstanceDto)[]` OK\n */\n get = (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 getAdminMenu\n * @summary Retrieves the admin-specific menu.\n * @request GET:/api/menu/get-admin-menu\n * @secure\n * @response `200` `(ModuleInstanceDto)[]` OK\n */\n getAdminMenu = (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 getModules\n * @summary Retrieves all available modules in the system.\n * @request GET:/api/menu/get-modules\n * @secure\n * @response `200` `(IntKeyValueDto)[]` OK\n */\n getModules = (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 addModuleInstance\n * @summary Adds a new module instance to the system.\n * @request POST:/api/menu/add-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\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 editModuleInstance\n * @summary Edits an existing module instance.\n * @request POST:/api/menu/edit-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\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 deleteModuleInstance\n * @summary Deletes a module instance by its identifier.\n * @request DELETE:/api/menu/delete-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n /**\n * @description Swaps the order positions of two modules in the menu structure.\n *\n * @tags Menu\n * @name changeOrder\n * @summary Swaps the order positions of two modules in the menu structure.\n * @request POST:/api/menu/change-order\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseDataService } from './base-data.service';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService extends BaseDataService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n public adminMode: boolean = false;\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n this.titleService.setTitle(event.item.label);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams } from '../../api/data-contracts';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul [@children]=\"submenuAnimation\" (contextmenu)=\"onContextMenu($event, item)\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n animations: [\n trigger('children', [\n state(\n 'collapsed',\n style({\n height: '0'\n })\n ),\n state(\n 'expanded',\n style({\n height: '*'\n })\n ),\n transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n ])\n ],\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent) {\n this.active = value.key === this.key || value.key.startsWith(this.key + '-');\n } else if (value.key !== this.key && !value.key.startsWith(this.key + '-')) {\n this.active = false;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get submenuAnimation() {\n return this.root || this.active ? 'expanded' : 'collapsed';\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return currentIndex > 0;\n }\n\n getItems(currentItem: any) {\n return !currentItem.parentId\n ? this.menuService.menu\n : this.menuService.menu.find((m) => m.moduleInstanceId == currentItem.parentId).items;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return currentIndex < items.length - 1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n readonly\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <i class=\"{{ selectIcon }}\"></i>\n <input class=\"flex-auto\" id=\"oip-menu-item-create-dialog-icon\" pInputText [(ngModel)]=\"selectIcon\" />\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n (click)=\"changeVisible()\"\n (keydown)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n (click)=\"save()\"\n (keydown)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { SecurityDataService } from '../../services/security-data.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <i class=\"{{ item.icon }}\"></i>\n <input class=\"flex-auto\" id=\"oip-menu-item-edit-dialog-icon\" pInputText [(ngModel)]=\"item.icon\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n (click)=\"changeVisible()\"\n (keydown)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n (click)=\"save()\"\n (keydown)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityDataService = inject(SecurityDataService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n modules: any[] = [];\n roles: string[] = [];\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n this.roles = await this.securityDataService.getRealmRoles();\n this.menuService.getModules().then((data) => {\n this.modules = data;\n });\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { ContextMenuService, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\nimport { L10nService } from '../../services/l10n.service';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n <p-contextMenu [target]=\"empty\" />\n @if (securityService.isAdmin) {\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent) {\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n }\n}\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';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppTopbar } from './top-bar.component';\nimport { FooterComponent } from './footer.component';\nimport { LayoutService } from './../services/app.layout.service';\nimport { SidebarComponent } from './sidebar.component';\nimport { MenuApi } from '../api/menu.api';\nimport { MenuService } from '../services/app.menu.service';\n\n@Component({\n selector: 'app-layout',\n standalone: true,\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\n template: `\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <app-topbar></app-topbar>\n <app-sidebar></app-sidebar>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n <app-footer></app-footer>\n </div>\n <div class=\"layout-mask animate-fadein\"></div>\n </div>\n `,\n providers: [MenuService, MenuApi]\n})\nexport class AppLayoutComponent implements OnDestroy {\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n protected renderer = inject(Renderer2);\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: () => void;\n\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\n\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\n\n constructor() {\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hideMenu();\n }\n });\n }\n\n if (this.layoutService.layoutState().staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\n this.hideMenu();\n });\n }\n\n isOutsideClicked(event: MouseEvent) {\n const sidebarEl = document.querySelector('.layout-sidebar');\n const topbarEl = document.querySelector('.layout-menu-button');\n const eventTarget = event.target as Node;\n\n return !(\n sidebarEl?.isSameNode(eventTarget) ||\n sidebarEl?.contains(eventTarget) ||\n topbarEl?.isSameNode(eventTarget) ||\n topbarEl?.contains(eventTarget)\n );\n }\n\n hideMenu() {\n this.layoutService.layoutState.update((prev) => ({\n ...prev,\n overlayMenuActive: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n }));\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\n ' '\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.layoutState().staticMenuDesktopInactive &&\n this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n }\n}\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';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string) {\n const lang = this.translateService.currentLang;\n this.loadTranslations(component, lang);\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to load translations from JSON files\n * @param component - Component or translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string) {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return;\n }\n\n try {\n this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).subscribe((translations) => {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n this.loadedTranslations.add(key);\n });\n } catch (e) {\n console.error(`No translations found for ${component}.${lang}.json`);\n console.error(e);\n }\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\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: ` <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\">\r\n {{ 'notfound.title' | translate }}\r\n </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\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\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 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 } from '@angular/core';\r\nimport { ProfileComponent } from './profile.component';\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 { 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 <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 optionLabel=\"name\"\r\n optionValue=\"code\"\r\n qa-id=\"oip-app-config-language-select\"\r\n [options]=\"l10nService.availableLanguages\"\r\n [(ngModel)]=\"selectedLanguage\"\r\n (onChange)=\"changeLanguage()\">\r\n <ng-template #selectedItem let-selectedOption>\r\n <div class=\"flex items-center gap-2\">\r\n <span [class]=\"selectedOption.icon\"></span>\r\n <div>{{ selectedOption.name }}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #item let-languages>\r\n <div class=\"flex items-center gap-2\">\r\n <span [class]=\"languages.icon\"></span>\r\n <div>{{ languages.name }}</div>\r\n </div>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n <div class=\"flex flex-col gap-5\">\r\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-date-format-select\"\r\n [options]=\"dateFormats\"\r\n [placeholder]=\"'config.dateFormat' | translate\"\r\n [(ngModel)]=\"selectedDateFormat\"\r\n (onChange)=\"changeDateFormat()\" />\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-time-format-select\"\r\n [options]=\"timeFormats\"\r\n [placeholder]=\"'config.timeFormat' | translate\"\r\n [(ngModel)]=\"selectedTimeFormat\"\r\n (onChange)=\"changeTimeFormat()\" />\r\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-timezone-select\"\r\n [filter]=\"true\"\r\n [options]=\"allTimeZones\"\r\n [placeholder]=\"'config.timeZone' | translate\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"34\"\r\n [(ngModel)]=\"selectedTimeZone\"\r\n (onChange)=\"changeTimeZone()\" />\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 `,\r\n imports: [\r\n ProfileComponent,\r\n Tooltip,\r\n FormsModule,\r\n Select,\r\n TableModule,\r\n TranslatePipe,\r\n ToggleSwitchModule,\r\n Button,\r\n RouterLink\r\n ]\r\n})\r\nexport class ConfigComponent {\r\n private readonly layoutService = inject(LayoutService);\r\n protected 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 protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\r\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\r\n // @ts-ignore\r\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\r\n\r\n protected selectedLanguage: any;\r\n protected selectedDateFormat: string;\r\n protected selectedTimeFormat: string;\r\n protected selectedTimeZone: string;\r\n\r\n constructor() {\r\n this.l10nService.loadComponentTranslations('config');\r\n this.selectedLanguage = this.layoutService.language();\r\n this.selectedDateFormat = this.layoutService.dateFormat();\r\n this.selectedTimeFormat = this.layoutService.timeFormat();\r\n this.selectedTimeZone = this.layoutService.timeZone();\r\n }\r\n\r\n changeLanguage() {\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 changeDateFormat() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\r\n }\r\n\r\n changeTimeFormat() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\r\n }\r\n\r\n changeTimeZone() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\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 { 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 severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\r\n (click)=\"refreshAction()\" />\r\n <p-button\r\n icon=\"pi pi-filter-slash\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\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 icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"> </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{\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\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 ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves all modules stored in the system.\n *\n * @tags Module\n * @name getAll\n * @summary Retrieves all modules stored in the system.\n * @request GET:/api/module/get-all\n * @secure\n * @response `200` `(ModuleDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n getAll = (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 insert\n * @summary Inserts a new module into the system.\n * @request POST:/api/module/insert\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n insert = (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 delete\n * @summary Deletes a module by its identifier.\n * @request DELETE:/api/module/delete\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n delete = (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 getModulesWithLoadStatus\n * @summary Returns all registered modules and indicates whether each one is currently loaded into the application.\n * @request GET:/api/module/get-modules-with-load-status\n * @secure\n * @response `200` `(ExistModuleDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n getModulesWithLoadStatus = (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';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { BaseDataService } from '../services/base-data.service';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { L10nService } from '../services/l10n.service';\nimport { ModuleApi } from '../api/module.api';\nimport { ModuleDto } from '../api/data-contracts';\nimport { AppTitleService } from '../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\n\ninterface L10n {\n confirm: {\n header: string;\n message: string;\n cancel: string;\n delete: string;\n };\n title: string;\n messages: {\n deleteSuccess: string;\n };\n table: {\n deleteTooltip: string;\n currentlyLoaded: string;\n yes: string;\n no: string;\n name: string;\n moduleId: string;\n };\n refreshTooltip: string;\n}\n\n@Component({\n imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService, ModuleApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ l10n.title }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected dataService = inject(BaseDataService);\n protected modules: ModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected l10n: L10n = {} as L10n;\n protected titleService = inject(AppTitleService);\n private moduleService = inject(ModuleApi);\n\n async ngOnInit() {\n this.l10nService.get('app-modules').subscribe((l10n) => {\n this.l10n = l10n;\n });\n this.titleService.setTitle(this.l10n.title);\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n deleteModule(module: ModuleDto) {\n this.confirmationService.confirm({\n header: this.l10n.confirm.header,\n message: this.l10n.confirm.message,\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.l10n.confirm.cancel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.l10n.confirm.delete,\n severity: 'danger'\n },\n accept: async () => {\n this.dataService\n .sendRequest(`api/module/delete`, 'DELETE', {\n moduleId: module.moduleId\n })\n .then(() => this.refreshAction())\n .catch((error) => console.error(error));\n\n this.msgService.success(this.l10n.messages.deleteSuccess);\n }\n });\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Gets comments by object type and object identifier.\n *\n * @tags Discussion\n * @name getByObject\n * @summary Gets comments by object type and object identifier.\n * @request GET:/api/discussion/get-by-object\n * @secure\n * @response `200` `(CommentDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Gets a comment by identifier.\n *\n * @tags Discussion\n * @name getById\n * @summary Gets a comment by identifier.\n * @request GET:/api/discussion/get-by-id\n * @secure\n * @response `200` `CommentDto` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Creates a new comment\n *\n * @tags Discussion\n * @name create\n * @summary Creates a new comment\n * @request POST:/api/discussion/create\n * @secure\n * @response `200` `CommentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Updates an existing comment.\n *\n * @tags Discussion\n * @name update\n * @summary Updates an existing comment.\n * @request PUT:/api/discussion/update/{id}\n * @secure\n * @response `200` `CommentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Soft deletes a comment.\n *\n * @tags Discussion\n * @name delete\n * @summary Soft deletes a comment.\n * @request DELETE:/api/discussion/delete/{id}\n * @secure\n * @response `204` `void` No Content\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n /**\n * @description Gets edit history for a comment.\n *\n * @tags Discussion\n * @name getHistory\n * @summary Gets edit history for a comment.\n * @request GET:/api/discussion/get-history/{id}\n * @secure\n * @response `200` `(CommentHistoryDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Uploads an attachment for a comment.\n *\n * @tags Discussion\n * @name uploadAttachment\n * @summary Uploads an attachment for a comment.\n * @request POST:/api/discussion/upload-attachment\n * @secure\n * @response `200` `AttachmentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n /**\n * @description Deletes an attachment.\n *\n * @tags Discussion\n * @name deleteAttachment\n * @summary Deletes an attachment.\n * @request DELETE:/api/discussion/delete-attachment/{id}\n * @secure\n * @response `204` `void` No Content\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n /**\n * @description Downloads attachment content.\n *\n * @tags Discussion\n * @name getAttachmentContent\n * @summary Downloads attachment content.\n * @request GET:/api/discussion/get-attachment-content/{id}\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n /**\n * @description Adds or toggles a reaction for a comment.\n *\n * @tags Discussion\n * @name addReaction\n * @summary Adds or toggles a reaction for a comment.\n * @request POST:/api/discussion/add-reaction\n * @secure\n * @response `200` `(CommentReactionDto)[]` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Removes a reaction from a comment.\n *\n * @tags Discussion\n * @name removeReaction\n * @summary Removes a reaction from a comment.\n * @request DELETE:/api/discussion/remove-reaction\n * @secure\n * @response `200` `(CommentReactionDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Searches users that can be mentioned in a comment.\n *\n * @tags Discussion\n * @name searchMentionUsers\n * @summary Searches users that can be mentioned in a comment.\n * @request GET:/api/discussion/search-mention-users\n * @secure\n * @response `200` `(MentionUserDto)[]` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\n if (!input || input.trim().length === 0) {\n return '';\n }\n\n const words = input.trim().split(/\\s+/);\n\n if (words.length === 1) {\n return words[0].charAt(0).toUpperCase();\n }\n\n const firstInitial = words[0].charAt(0).toUpperCase();\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\n\n return firstInitial + lastInitial;\n}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../api/discussion-data-contracts';\nimport { DiscussionApi } from '../api/discussion.api';\nimport { MsgService } from \"../services/msg.service\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { getInitialsFromString } from \"../helpers/avatar.helper\";\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog/>\n\n <section class=\"flex flex-col gap-4\">\n\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n pTextarea\n class=\"min-h-28 w-full\"\n [autoResize]=\"true\"\n rows=\"5\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n ></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"\n ></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n type=\"button\"\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n (click)=\"insertMention(candidate)\"\n >\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag [value]=\"formatBytes(file.size)\" severity=\"contrast\"/>\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\"\n />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n [label]=\"\n previewMode\n ? ('discussionComponent.edit' | translate)\n : ('discussionComponent.preview' | translate)\n \"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\"\n />\n\n <label class=\"file-trigger\">\n <p-button\n [label]=\"'discussionComponent.attachFiles' | translate\"\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [text]=\"true\"\n />\n <input type=\"file\" multiple (change)=\"onFilesSelected($event)\"/>\n </label>\n <p-button\n [label]=\"'discussionComponent.send' | translate\"\n icon=\"pi pi-send\"\n [loading]=\"submitting\"\n [disabled]=\"submitting || !newComment.trim()\"\n (onClick)=\"createComment()\"\n />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\"/>\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar\n [label]=\"getInitialsFromString(comment.authorDisplayName)\"\n shape=\"circle\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span\n class=\"text-sm text-surface-500\">{{ comment.createdAt | date: layoutService.dateTimeFormat() }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag [value]=\"'discussionComponent.edited' | translate\" icon=\"pi pi-pencil\" severity=\"warn\"/>\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\"\n />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\"\n />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\"\n />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n pTextarea\n class=\"min-h-24 w-full\"\n [autoResize]=\"true\"\n rows=\"4\"\n [(ngModel)]=\"editContent\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n ></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n [label]=\"'discussionComponent.addAttachment' | translate\"\n icon=\"pi pi-paperclip\"\n [text]=\"true\"\n severity=\"secondary\"\n />\n <input type=\"file\" multiple (change)=\"onInlineFilesSelected(comment, $event)\"/>\n </label>\n </div>\n\n <p-button\n [label]=\"'discussionComponent.save' | translate\"\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n (onClick)=\"saveEdit(comment)\"\n />\n <p-button\n [label]=\"'discussionComponent.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\"\n />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n type=\"button\"\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n (click)=\"downloadAttachment(attachment)\"\n >\n {{ attachment.fileName }}\n </button>\n <p-tag [value]=\"formatBytes(attachment.fileSize)\" severity=\"contrast\"/>\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\"\n />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n severity=\"secondary\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\"\n />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\"\n />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n type=\"button\"\n class=\"emoji-option\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\"\n >\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [toggleable]=\"true\" [collapsed]=\"false\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\"/>\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (item of historyByComment[comment.commentId]?.items ?? []; track item.commentEditHistoryId) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag [value]=\"'discussionComponent.before' | translate\" severity=\"secondary\"/>\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"\n ></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag [value]=\"'discussionComponent.after' | translate\" severity=\"success\"/>\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"\n ></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({required: true}) objectTypeId = 1;\n @Input({required: true}) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.loadComments'));\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.createComment'));\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update(\n {id: comment.commentId},\n {content: this.editContent.trim()}\n );\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.updateComment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = {...current, opened: false};\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({id: comment.commentId});\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.loadEditHistory'));\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.uploadAttachment'));\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', { fileName: attachment.fileName }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({id: comment.commentId});\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.deleteComment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({id: attachment.attachmentId});\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? {...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId)}\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.deleteAttachment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n {id: attachment.attachmentId},\n {format: 'blob'}\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.downloadAttachment'));\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({commentId: comment.commentId, emojiCode: reaction.emojiCode})\n : await this.discussionApi.addReaction({commentId: comment.commentId, emojiCode: reaction.emojiCode});\n this.applyReactions(comment.commentId, reactions.map((item) => this.normalizeReaction(item)));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.updateReaction'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({commentId: comment.commentId, emojiCode});\n this.applyReactions(comment.commentId, reactions.map((item) => this.normalizeReaction(item)));\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.addReaction'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({term: token});\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? {...item, reactions} : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\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 * as signalR from '@microsoft/signalr';\nimport { SecurityService } from './security.service';\nimport { inject, Injectable } from '@angular/core';\nimport { MsgService } from './msg.service';\nimport { OIP_FRONTEND_CONFIG } from './frontend-config';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private connection: signalR.HubConnection;\n private securityService = inject(SecurityService);\n private msgService = inject(MsgService);\n private frontendConfig = inject(OIP_FRONTEND_CONFIG);\n private securityData: string;\n\n constructor() {\n this.securityService.getAccessToken().subscribe((token) => {\n this.securityData = token;\n if (token) {\n this.connection.stop().then(() => {\n this.connection.start().then();\n });\n }\n });\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(this.resolveHubUrl(), {\n accessTokenFactory: () => this.securityData,\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets\n })\n .configureLogging(signalR.LogLevel.Error)\n .build();\n\n this.connection.on('ReceiveNotification', (notification) => {\n const opt = {\n severity: notification.severity,\n summary: notification.subject,\n detail: notification.message,\n life: 0\n };\n this.msgService.add(opt);\n });\n }\n\n private resolveHubUrl(): string {\n if (this.frontendConfig.notificationHubUrl) {\n return this.frontendConfig.notificationHubUrl;\n }\n\n if (this.frontendConfig.apiBaseUrl) {\n return `${this.frontendConfig.apiBaseUrl.replace(/\\/$/, '')}/hubs/notification`;\n }\n\n return '/hubs/notification';\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FilterMetadata } from 'primeng/api';\r\nimport { Table } from 'primeng/table';\r\n\r\n/**\r\n * Prime-ng table filter service\r\n */\r\n@Injectable()\r\nexport class TableFilterService {\r\n public filterState: { [field: string]: boolean } = {};\r\n private filtersState = new BehaviorSubject<boolean>(false);\r\n public filtersState$ = this.filtersState.asObservable();\r\n\r\n /**\r\n * Updates filter state\r\n * @param filters\r\n */\r\n public updateFiltersState(filters: any) {\r\n const hasFilters = Object.values(filters).some((filterArray: any) => {\r\n if (Array.isArray(filterArray)) {\r\n return filterArray.some((filter) => !!filter.value);\r\n }\r\n return false;\r\n });\r\n this.filtersState.next(hasFilters);\r\n }\r\n\r\n /**\r\n * Checks if a filter is active\r\n * @param {FilterMetadata | FilterMetadata[]} filter\r\n * @return {boolean}\r\n */\r\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\r\n if (!filter) return false;\r\n\r\n if (Array.isArray(filter)) {\r\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\r\n } else {\r\n return !!filter.value && filter.matchMode !== 'unspecified';\r\n }\r\n }\r\n\r\n /**\r\n * Checks the state of table filters\r\n * @param {Table} table\r\n * @param {FilterMetadata | FilterMetadata[]} filters\r\n */\r\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\r\n if (table && filters) {\r\n Object.keys(filters).forEach((field) => {\r\n const filter = filters[field];\r\n this.filterState[field] = this.isFilterActive(filter);\r\n });\r\n }\r\n this.updateFiltersState(filters);\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\nexport { BaseModuleComponent } from './components/base-module.component';\nexport { SecurityComponent } from './components/security.component';\nexport { AppTopbar } from './components/top-bar.component';\nexport { FooterComponent } from './components/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout.component';\nexport { SidebarComponent } from './components/sidebar.component';\nexport { LogoComponent } from './components/logo.component';\nexport { NotfoundComponent } from './components/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { ProfileComponent } from './components/profile.component';\nexport { ConfigComponent } from './components/config.component';\nexport { DbMigrationComponent } from './components/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules.component';\nexport { AppConfiguratorComponent } from './components/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { BaseDataService } from './services/base-data.service';\nexport { TopBarService } from './services/top-bar.service';\nexport { SecurityService, KeycloakSecurityService } from './services/security.service';\nexport { SecurityDataService } from './services/security-data.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { SecurityStorageService } from './services/security-storage.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { NotificationService } from './services/notification.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport {\n DEFAULT_OIP_FRONTEND_CONFIG,\n OIP_FRONTEND_CONFIG,\n OipFrontendConfig,\n OipFrontendAppMode\n} from './services/frontend-config';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { SecurePipe } from './modules/secure.pipe';\nexport { httpLoaderAuthFactory } from './modules/http-loader.factory';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HttpClient","i3","i1","i2","i4","i2.MenuService","i5","filter","i1.L10nService","i10","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/frontend-config.ts","../../../projects/oip-common/src/services/base-data.service.ts","../../../projects/oip-common/src/services/app-title.service.ts","../../../projects/oip-common/src/helpers/date.helper.ts","../../../projects/oip-common/src/services/app.layout.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/components/app-configurator.component.ts","../../../projects/oip-common/src/services/security.service.ts","../../../projects/oip-common/src/services/user.service.ts","../../../projects/oip-common/src/components/logo.component.ts","../../../projects/oip-common/src/services/logo.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.api.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.api.ts","../../../projects/oip-common/src/components/app-modules.component.ts","../../../projects/oip-common/src/api/discussion.api.ts","../../../projects/oip-common/src/helpers/avatar.helper.ts","../../../projects/oip-common/src/components/discussion.component.ts","../../../projects/oip-common/src/services/auth-guard.service.ts","../../../projects/oip-common/src/services/security-storage.service.ts","../../../projects/oip-common/src/services/notification.service.ts","../../../projects/oip-common/src/services/table-filter.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';\nimport { MessageService } from 'primeng/api';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { ToastMessageOptions } from 'primeng/api';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({ providedIn: 'root' })\nexport class MsgService {\n protected readonly messageService: MessageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n private readonly lifetime: number = 2000;\n\n add(msg: ToastMessageOptions) {\n this.messageService.add(msg);\n }\n\n success(detail: any, summary: any = this.translate.instant('msgService.success'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'success',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n info(detail: any, summary: any = this.translate.instant('msgService.info'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'info',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n warn(detail: any, summary: any = this.translate.instant('msgService.warn'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'warn',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n error(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n if (detail instanceof HttpErrorResponse) {\n summary = `Error: ${detail.status} ${detail.statusText}`;\n detail = `${detail.name} \\r\\n ${detail.message}`;\n }\n this.messageService.add({\n severity: 'error',\n summary: summary,\n detail: detail.toString(),\n life: life\n });\n }\n\n extractErrorMessage(error: unknown, fallback: string): string {\n if (\n typeof error === 'object' &&\n error &&\n 'error' in error &&\n typeof error.error === 'object' &&\n error.error &&\n 'message' in error.error &&\n typeof error.error.message === 'string'\n ) {\n return error.error.message;\n }\n\n if (typeof error === 'object' && error && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n\n return fallback;\n }\n\n errorFromException(error: unknown, fallback: string, summary: string = fallback, life: number = this.lifetime) {\n this.error(this.extractErrorMessage(error, fallback), summary, life);\n }\n\n contrast(detail: any, summary: any = this.translate.instant('msgService.error'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'contrast',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n\n secondary(detail: any, summary: any = this.translate.instant('msgService.secondary'), life: number = this.lifetime) {\n this.messageService.add({\n severity: 'secondary',\n summary: summary,\n detail: detail,\n life: life\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type OipFrontendAppMode = 'standalone' | 'distributed';\n\nexport interface OipFrontendConfig {\n appMode: OipFrontendAppMode;\n apiBaseUrl?: string;\n notificationHubUrl?: string;\n}\n\nexport const DEFAULT_OIP_FRONTEND_CONFIG: OipFrontendConfig = {\n appMode: 'standalone',\n apiBaseUrl: '',\n notificationHubUrl: ''\n};\n\nexport const OIP_FRONTEND_CONFIG = new InjectionToken<OipFrontendConfig>(\n 'OIP_FRONTEND_CONFIG',\n {\n factory: () => DEFAULT_OIP_FRONTEND_CONFIG\n }\n);\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { OIP_FRONTEND_CONFIG } from './frontend-config';\n\n/**\n * BaseDataService provides a unified interface for sending HTTP requests\n * using Angular's HttpClient. It supports standard HTTP methods and automatic\n * credential handling.\n */\n@Injectable()\nexport class BaseDataService {\n private readonly http = inject(HttpClient);\n private readonly frontendConfig = inject(OIP_FRONTEND_CONFIG);\n\n /**\n * Gets the base URL of the application from the HTML <base> tag.\n */\n get baseUrl(): string {\n return this.normalizeBaseUrl(\n this.frontendConfig.apiBaseUrl || document.getElementsByTagName('base')[0].href\n );\n }\n\n /**\n * Builds a fully-qualified application URL based on frontend mode.\n */\n buildUrl(path: string): string {\n const normalizedPath = path.startsWith('/') ? path.substring(1) : path;\n return `${this.baseUrl}${normalizedPath}`;\n }\n\n /**\n * Sends an HTTP request with the specified method and data.\n *\n * @template TResponse - Expected response type.\n * @param url - The target URL for the HTTP request.\n * @param method - The HTTP method to use (GET, PUT, POST, DELETE). Default is 'GET'.\n * @param data - An object containing request parameters or payload.\n * @returns A promise that resolves to the response of type TResponse.\n */\n sendRequest<TResponse>(\n url: string,\n method: 'GET' | 'PUT' | 'POST' | 'DELETE' = 'GET',\n data: any = {}\n ): Promise<TResponse> {\n const httpOptions = { withCredentials: true };\n let result: Observable<TResponse>;\n\n switch (method) {\n case 'GET':\n result = this.http.get<TResponse>(url, { params: data });\n break;\n case 'PUT':\n result = this.http.put<TResponse>(url, data, httpOptions);\n break;\n case 'POST':\n result = this.http.post<TResponse>(url, data, httpOptions);\n break;\n case 'DELETE':\n result = this.http.request<TResponse>('DELETE', url, {\n body: data,\n headers: new HttpHeaders({ 'Content-Type': 'application/json' }),\n withCredentials: true\n });\n break;\n }\n\n return lastValueFrom(result);\n }\n\n /**\n * Sends a GET request and retrieves a response as a Blob.\n *\n * @param url - The target URL for the GET request.\n * @returns A promise that resolves to a Object response.\n */\n getBlob(url: string): Promise<object> {\n const httpOptions = {\n responseType: 'blob' as 'json',\n withCredentials: true\n };\n const result = this.http.get(url, httpOptions);\n return lastValueFrom(result);\n }\n\n private normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;\n }\n}\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","/**\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 { ChangeDetectorRef, Component, effect, inject, OnDestroy, OnInit, signal, WritableSignal } from '@angular/core';\nimport { TopBarDto } from '../dtos/top-bar.dto';\nimport { TopBarService } from '../services/top-bar.service';\nimport { MsgService } from '../services/msg.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseDataService } from '../services/base-data.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { AppTitleService } from '../services/app-title.service';\nimport { LayoutService } from '../services/app.layout.service';\n\ninterface BaseComponentLocalization {\n security: string;\n settings: string;\n content: string;\n}\n\n@Component({ standalone: true, template: '' })\nexport abstract class BaseModuleComponent<TBackendStoreSettings, TLocalStoreSettings> implements OnInit, OnDestroy {\n private isInitialized = false;\n private moduleInstanceReloadPromise: Promise<void> = Promise.resolve();\n\n /**\n * Provide access to app settings\n */\n public readonly layoutService = inject(LayoutService);\n /**\n * Provides access to topbar related functionality, such as managing visibility and content.\n * @type {TopBarService}\n */\n public readonly topBarService: TopBarService = inject(TopBarService);\n\n /**\n * Provides access to information about the current route.\n * This includes route parameters, data, and the route's path.\n */\n public readonly route: ActivatedRoute = inject(ActivatedRoute);\n\n /**\n * Provides access to messaging services.\n */\n public readonly msgService = inject(MsgService);\n\n /**\n * Provides access to base data service functionality.\n * @deprecated The method should not be used\n */\n public readonly baseDataService: BaseDataService = inject(BaseDataService);\n\n /**\n * Provides access to translation functionality.\n */\n public readonly translateService = inject(TranslateService);\n\n /**\n * Provides access to the application's title service.\n */\n public readonly appTitleService = inject(AppTitleService);\n\n /**\n * Reference to the ChangeDetector. Used to trigger change detection manually.\n */\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /**\n * Represents a subscription to an observable.\n * Manages the lifecycle of receiving data from the observable and allows unsubscribing to stop receiving data.\n * @type {Subscription}\n */\n public subscriptions: Subscription[] = [];\n /**\n * Configuration object for backend storage\n * @type {TBackendStoreSettings}\n */\n public settings: TBackendStoreSettings = {} as TBackendStoreSettings;\n\n /**\n * Configuration object for local storage.\n * @type {TLocalStoreSettings}\n */\n public _localSettings: TLocalStoreSettings = {} as TLocalStoreSettings;\n\n /**\n * A signal representing the local application settings. Changes to this signal\n * propagate updates to the underlying local store settings.\n * @type {WritableSignal<TLocalStoreSettings>}\n */\n public localSettings: WritableSignal<TLocalStoreSettings> = signal<TLocalStoreSettings>(this._localSettings);\n\n /**\n * A Subject emitting updates to local store settings. Observables can subscribe to this Subject to react to changes in local settings.\n * @type {Subject<TLocalStoreSettings>}\n */\n public localSettingsUpdate: Subject<TLocalStoreSettings> = new Subject<TLocalStoreSettings>();\n\n /**\n * The title of the component. Get from Title in ngOnInit\n * @type {string}\n */\n public title: string;\n\n /**\n * Updates local settings and persists them to local storage.\n * @return {void}\n */\n private onConfigUpdate(): void {\n if (Object.keys(this.localSettings()).length > 0) {\n this._localSettings = { ...this.localSettings() };\n this.localSettingsUpdate.next(this._localSettings);\n localStorage.setItem(`Instance_${this.id}`, JSON.stringify(this._localSettings));\n }\n }\n\n private getLocalStorageSettings() {\n try {\n const localStorageSettingsString = localStorage.getItem(`Instance_${this.id}`);\n if (localStorageSettingsString != null) {\n this.localSettings.set(JSON.parse(localStorageSettingsString) as TLocalStoreSettings);\n } else {\n this.localSettings.set({} as TLocalStoreSettings);\n }\n } catch (error) {\n this.msgService.error(error, 'Error parsing layoutConfig:');\n this.localSettings.set({} as TLocalStoreSettings);\n }\n }\n\n /**\n * A unique numerical identifier for the module.\n * @type {number}\n */\n id: number | undefined = undefined;\n\n /**\n * The name of the controller currently handling the request.\n * @type {string}\n */\n controller: string;\n\n /**\n * Checks if the content ID is present.\n * @returns {boolean} True if the content ID is present, false otherwise.\n */\n get isContent(): boolean {\n return this.topBarService.checkId('content');\n }\n\n /**\n * Checks if the settings ID is present.\n * @returns {boolean} True if the settings ID is present, false otherwise.\n */\n get isSettings(): boolean {\n return this.topBarService.checkId('settings');\n }\n\n /**\n * Checks if the security ID is present.\n * @returns {boolean} True if the security ID is present, false otherwise.\n */\n get isSecurity(): boolean {\n return this.topBarService.checkId('security');\n }\n\n /**\n * Defines the top bar items.\n */\n public topBarItems: TopBarDto[] = [\n { id: 'content', icon: 'pi-box', caption: '' },\n { id: 'settings', icon: 'pi-cog', caption: '' },\n { id: 'security', icon: 'pi-lock', caption: '' }\n ];\n\n /**\n * Initializes the component and subscribes to local settings updates.\n */\n constructor() {\n effect(() => {\n const config = this.localSettings();\n if (config) {\n this.onConfigUpdate();\n }\n });\n this.subscriptions.push(\n this.route.url.subscribe((url) => {\n this.controller = url[0].path;\n })\n );\n this.subscriptions.push(\n this.route.paramMap.subscribe((params) => {\n const routeId = params.get('id');\n const nextId = routeId != null ? +routeId : undefined;\n const idChanged = this.id !== nextId;\n\n this.id = nextId;\n this.getLocalStorageSettings();\n\n if (this.isInitialized && idChanged) {\n void this.reloadModuleInstance();\n }\n })\n );\n }\n\n /**\n * Lifecycle hook that is called when a component is destroyed.\n * Unsubscribes from all subscriptions to prevent memory leaks,\n * resets the top bar items to an empty array, and sets the active ID\n * to the ID of the first top bar item (if available).\n */\n ngOnDestroy() {\n this.topBarService.setTopBarItems([]);\n this.topBarService.activeId = this.topBarItems[0].id;\n this.subscriptions.forEach((s) => s.unsubscribe());\n }\n\n /**\n * Initializes the component. Subscribes to translation service to set captions for top bar items,\n * sets the top bar items via the top bar service, sets the active ID,\n * subscribes to route parameters to get the ID, and retrieves settings.\n * @return {Promise<void>} A promise that resolves when the initialization is complete.\n */\n async ngOnInit(): Promise<void> {\n this.subscriptions.push(\n this.translateService.get('baseComponent').subscribe((value: BaseComponentLocalization) => {\n this.topBarItems[0].caption = value.content;\n this.topBarItems[1].caption = value.settings;\n this.topBarItems[2].caption = value.security;\n })\n );\n\n this.topBarService.setTopBarItems(this.topBarItems);\n this.topBarService.activeId = this.topBarItems[0].id;\n\n this.isInitialized = true;\n await this.reloadModuleInstance();\n\n this.subscriptions.push(\n this.appTitleService.title$.subscribe((title) => {\n this.title = title;\n this.changeDetectorRef.detectChanges();\n })\n );\n }\n\n /**\n * Retrieves module instance settings.\n * @return {Promise<void>} A promise that resolves when settings are retrieved.\n */\n async getSettings(): Promise<void> {\n try {\n this.settings = await this.baseDataService.sendRequest<TBackendStoreSettings>(\n `${this.baseDataService.baseUrl}api/${this.controller}/get-module-instance-settings?id=${this.id}`\n );\n } catch (error) {\n this.msgService.error(error);\n }\n }\n\n /**\n * Saves the provided settings to the backend.\n * @param {TLocalStoreSettings} settings - The settings object to save.\n * @return {Promise<void>} A promise that resolves when the settings are saved. Reject if an error occurs.\n */\n async saveSettings(settings: TBackendStoreSettings): Promise<void> {\n await this.baseDataService\n .sendRequest(`api/${this.controller}/put-module-instance-settings`, 'PUT', {\n id: this.id,\n settings: settings\n })\n .then(() => {\n this.msgService.success(this.translateService.instant('baseComponent.success'));\n })\n .catch((error) => {\n this.msgService.error(error);\n });\n }\n\n /**\n * Called whenever the module instance changes, including the first load.\n * Derived components can override this to refresh module-specific data.\n */\n protected async onModuleInstanceChange(): Promise<void> {}\n\n private async reloadModuleInstance(): Promise<void> {\n this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(async () => {\n await this.getSettings();\n await this.onModuleInstanceChange();\n });\n\n await this.moduleInstanceReloadPromise;\n }\n}\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","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 { Injectable, OnDestroy, inject } from '@angular/core';\r\nimport {\r\n LoginResponse,\r\n LogoutAuthOptions,\r\n OidcSecurityService,\r\n PublicEventsService,\r\n EventTypes,\r\n AuthOptions\r\n} from 'angular-auth-oidc-client';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\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 * 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","import { inject, Injectable } from '@angular/core';\nimport { SecurityService } from './security.service';\nimport { BaseDataService } from './base-data.service';\n\n/**\n * UserService is responsible for retrieving and handling user-related data,\n * including the user's photo and short label for avatar display.\n */\n@Injectable()\nexport class UserService {\n private readonly securityService = inject(SecurityService);\n private readonly baseDataService = inject(BaseDataService);\n\n constructor() {\n this.getUserPhoto();\n }\n\n /**\n * Stores the user's photo as a data URL or binary blob, depending on how it's processed.\n */\n photo: any = null;\n\n /**\n * Indicates whether the user photo has finished loading.\n */\n photoLoaded: boolean = false;\n\n /**\n * Returns a short label composed of the user's initials.\n * Typically used for avatar display when a photo is unavailable.\n */\n get shortLabel(): string {\n const data = this.securityService.getCurrentUser();\n const givenNameInitial = data?.given_name?.trim()?.[0];\n const familyNameInitial = data?.family_name?.trim()?.[0];\n\n return `${givenNameInitial ?? ''}${familyNameInitial ?? ''}`.toUpperCase();\n }\n\n get userName(): string {\n const data = this.securityService.getCurrentUser();\n return [data?.given_name, data?.family_name].filter(Boolean).join(' ');\n }\n\n /**\n * Initiates an HTTP request to fetch the user's photo based on their email,\n * and updates the `photo` and `photoLoaded` properties accordingly.\n */\n getUserPhoto(): void {\n const email = this.securityService.getCurrentUser()?.email;\n\n if (!email) {\n this.photoLoaded = true;\n return;\n }\n\n const url = this.baseDataService.buildUrl(\n `api/user-profile/get-user-photo?email=${email}`\n );\n this.baseDataService.getBlob(url).then(\n (data) => {\n this.createImageFromBlob(data as Blob);\n this.photoLoaded = true;\n },\n (error) => {\n console.log(error);\n this.photoLoaded = false;\n }\n );\n }\n\n /**\n * Converts a Blob image into a Base64 data URL and stores it in the `photo` property.\n *\n * @param image - The image Blob to be converted.\n */\n private createImageFromBlob(image: Blob): void {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n () => {\n this.photo = reader.result;\n },\n false\n );\n if (image) {\n reader.readAsDataURL(image);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'logo',\r\n standalone: true,\r\n template: `\r\n <svg\r\n viewBox=\"0.8516 1.7159 60.0074 64.7142\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n [attr.height]=\"height + 'px'\"\r\n [attr.width]=\"width + 'px'\">\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"primary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n <path\r\n class=\"secondary-logo-color\"\r\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\"\r\n transform=\"matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)\" />\r\n </svg>\r\n `,\r\n styles: [\r\n `\r\n .primary-logo-color {\r\n fill: var(--primary-color);\r\n }\r\n\r\n .secondary-logo-color {\r\n fill: var(--p-primary-600);\r\n }\r\n `\r\n ]\r\n})\r\nexport class LogoComponent {\r\n @Input() width: number;\r\n @Input() height: number;\r\n}\r\n","import { Injectable, Type, InjectionToken, inject } from '@angular/core';\r\nimport { LogoComponent } from '../components/logo.component';\r\nimport { Provider } from '@angular/core';\r\n\r\nexport const LOGO_COMPONENT_TOKEN = new InjectionToken<Type<any>>('LOGO_COMPONENT_TOKEN');\r\n\r\nexport function provideLogoComponent(component: Type<any>): Provider {\r\n return {\r\n provide: LOGO_COMPONENT_TOKEN,\r\n useValue: component\r\n };\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LogoService {\r\n private customLogoComponent = inject(LOGO_COMPONENT_TOKEN, { optional: true });\r\n\r\n getLogoComponent(): Type<any> {\r\n return this.customLogoComponent || LogoComponent;\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StyleClassModule } from 'primeng/styleclass';\r\nimport { LayoutService } from '../services/app.layout.service';\r\nimport { AppConfiguratorComponent } from './app-configurator.component';\r\nimport { SecurityService } from '../services/security.service';\r\nimport { TopBarService } from '../services/top-bar.service';\r\nimport { Tab, TabList, Tabs } from 'primeng/tabs';\r\nimport { AvatarModule } from 'primeng/avatar';\r\nimport { UserService } from '../services/user.service';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { LogoService } from '../services/logo.service';\r\n\r\n@Component({\r\n selector: 'app-topbar',\r\n standalone: true,\r\n imports: [\r\n RouterModule,\r\n CommonModule,\r\n StyleClassModule,\r\n AppConfiguratorComponent,\r\n Tabs,\r\n TabList,\r\n Tab,\r\n AvatarModule,\r\n ButtonModule,\r\n TranslatePipe\r\n ],\r\n template: ` <div class=\"layout-topbar\">\r\n <div class=\"layout-topbar-logo-container\">\r\n <button class=\"layout-menu-button layout-topbar-action\" (click)=\"layoutService.onMenuToggle()\">\r\n <i class=\"pi pi-bars\"></i>\r\n </button>\r\n <a class=\"layout-topbar-logo\" id=\"oip-app-topbar-logo-link\" routerLink=\"\">\r\n <ng-container\r\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 36, height: 36 }\"></ng-container>\r\n <span>{{ 'app-info.title' | translate }}</span>\r\n </a>\r\n </div>\r\n\r\n @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {\r\n <p-tabs class=\"layout-topbar-tabs ml-2\" [(value)]=\"topBarService.activeId\">\r\n <p-tablist>\r\n @for (tab of topBarService.availableTopBarItems; track tab.id) {\r\n <p-tab id=\"oip-app-topbar-tab-{{ tab.id }}\" [value]=\"tab.id\">\r\n <i class=\"pi {{ tab.icon }}\"></i>\r\n <span class=\"ml-2\">{{ tab.caption }}</span>\r\n </p-tab>\r\n }\r\n </p-tablist>\r\n </p-tabs>\r\n }\r\n <div class=\"layout-topbar-actions\">\r\n <div class=\"layout-config-menu\">\r\n <p-button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-theme-button\"\r\n severity=\"secondary\"\r\n type=\"button\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"toggleDarkMode()\">\r\n <i\r\n class=\"pi\"\r\n [ngClass]=\"{\r\n 'pi-moon': layoutService.isDarkTheme(),\r\n 'pi-sun': !layoutService.isDarkTheme()\r\n }\"></i>\r\n </p-button>\r\n <div class=\"relative\">\r\n <p-button\r\n class=\"layout-topbar-action layout-topbar-action-highlight\"\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n id=\"oip-app-topbar-palette-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n [hideOnOutsideClick]=\"true\"\r\n [rounded]=\"true\">\r\n <i class=\"pi pi-palette\"></i>\r\n </p-button>\r\n <app-configurator />\r\n </div>\r\n </div>\r\n\r\n <button\r\n class=\"layout-topbar-menu-button layout-topbar-action\"\r\n enterActiveClass=\"animate-scalein\"\r\n enterFromClass=\"hidden\"\r\n id=\"oip-app-topbar-menu-expand-button\"\r\n leaveActiveClass=\"animate-fadeout\"\r\n leaveToClass=\"hidden\"\r\n pStyleClass=\"@next\"\r\n [hideOnOutsideClick]=\"true\">\r\n <i class=\"pi pi-ellipsis-v\"></i>\r\n </button>\r\n\r\n <div class=\"layout-topbar-menu hidden lg:block\">\r\n <div class=\"layout-topbar-menu-content\">\r\n <button\r\n class=\"layout-topbar-action\"\r\n id=\"oip-app-topbar-logout-button\"\r\n type=\"button\"\r\n (click)=\"securityService.logout()\"\r\n (keydown)=\"logoutKeyDown($event)\">\r\n <i class=\"pi pi-sign-out\"></i>\r\n <span>{{ 'topbar.logout' | translate }}</span>\r\n </button>\r\n <button class=\"layout-topbar-action\" routerLink=\"config\">\r\n <p-avatar\r\n class=\"p-link flex align-items-center\"\r\n id=\"oip-app-topbar-user-avatar\"\r\n shape=\"circle\"\r\n size=\"normal\"\r\n [image]=\"userService.photoLoaded ? userService.photo : null\"\r\n >{{ !userService.photoLoaded ? userService.shortLabel : null }}\r\n </p-avatar>\r\n <span class=\"ml-2\">{{ 'topbar.profile' | translate }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>`\r\n})\r\nexport class AppTopbar {\r\n items!: MenuItem[];\r\n securityService = inject(SecurityService);\r\n topBarService = inject(TopBarService);\r\n userService = inject(UserService);\r\n layoutService = inject(LayoutService);\r\n logoService = inject(LogoService);\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 logoutKeyDown($event: KeyboardEvent) {\r\n if ($event.key === 'Enter') {\r\n this.securityService.logout();\r\n }\r\n }\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { LogoComponent } from './logo.component';\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { LogoService } from '../services/logo.service';\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 <div class=\"mr-2 -my-0.5\">\r\n <ng-container\r\n *ngComponentOutlet=\"logoService.getLogoComponent(); inputs: { width: 18, height: 18 }\"></ng-container>\r\n </div>\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: [TranslatePipe, NgComponentOutlet]\r\n})\r\nexport class FooterComponent {\r\n protected logoService = inject(LogoService);\r\n}\r\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { inject, Injectable } from \"@angular/core\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { SecurityService } from \"../services/security.service\";\n\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 JsonApi = \"application/vnd.api+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\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 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.JsonApi]: (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 if (input instanceof FormData) {\n return input;\n }\n\n return 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 },\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 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 responseToParse = responseFormat ? response.clone() : response;\n const data = !responseFormat\n ? r\n : await responseToParse[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\nimport { Injectable } from \"@angular/core\";\nimport {\n AddModuleInstanceDto,\n ApiExceptionResponse,\n ChangeOrderParams,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n IntKeyValueDto,\n ModuleInstanceDto,\n} from \"./data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class MenuApi<\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 get\n * @summary Retrieves the menu available to the current authenticated user.\n * @request GET:/api/menu/get\n * @secure\n * @response `200` `(ModuleInstanceDto)[]` OK\n */\n get = (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 getAdminMenu\n * @summary Retrieves the admin-specific menu.\n * @request GET:/api/menu/get-admin-menu\n * @secure\n * @response `200` `(ModuleInstanceDto)[]` OK\n */\n getAdminMenu = (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 getModules\n * @summary Retrieves all available modules in the system.\n * @request GET:/api/menu/get-modules\n * @secure\n * @response `200` `(IntKeyValueDto)[]` OK\n */\n getModules = (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 addModuleInstance\n * @summary Adds a new module instance to the system.\n * @request POST:/api/menu/add-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n addModuleInstance = (\n data: AddModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\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 editModuleInstance\n * @summary Edits an existing module instance.\n * @request POST:/api/menu/edit-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n editModuleInstance = (\n data: EditModuleInstanceDto,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\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 deleteModuleInstance\n * @summary Deletes a module instance by its identifier.\n * @request DELETE:/api/menu/delete-module-instance\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n deleteModuleInstance = (\n query: DeleteModuleInstanceParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/delete-module-instance`,\n method: \"DELETE\",\n query: query,\n secure: true,\n ...params,\n });\n /**\n * @description Swaps the order positions of two modules in the menu structure.\n *\n * @tags Menu\n * @name changeOrder\n * @summary Swaps the order positions of two modules in the menu structure.\n * @request POST:/api/menu/change-order\n * @secure\n * @response `200` `void` OK\n * @response `500` `ApiExceptionResponse` Internal Server Error\n */\n changeOrder = (query: ChangeOrderParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/menu/change-order`,\n method: \"POST\",\n query: query,\n secure: true,\n ...params,\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { BaseDataService } from './base-data.service';\nimport { MenuChangeEvent } from '../events/menu-change.event';\nimport { MenuApi } from '../api/menu.api';\nimport { AppTitleService } from './app-title.service';\nimport {\n AddModuleInstanceDto,\n DeleteModuleInstanceParams,\n EditModuleInstanceDto,\n ModuleInstanceDto\n} from '../api/data-contracts';\n\n@Injectable()\nexport class MenuService extends BaseDataService {\n private readonly menuSource = new Subject<MenuChangeEvent>();\n private readonly resetSource = new Subject();\n private readonly titleService = inject(AppTitleService);\n private readonly menuDataService = inject(MenuApi);\n menuSource$ = this.menuSource.asObservable();\n resetSource$ = this.resetSource.asObservable();\n contextMenuItem: any;\n\n public menu: ModuleInstanceDto[] = [];\n public adminMode: boolean = false;\n\n async loadMenu() {\n this.menu = this.adminMode ? await this.getAdminMenu() : await this.getMenu();\n }\n\n /**\n * Handles changes in the menu state.\n * @param {MenuChangeEvent} event - The event containing information about the menu state change.\n * @return {void}\n */\n onMenuStateChange(event: MenuChangeEvent): void {\n this.menuSource.next(event);\n this.titleService.setTitle(event.item.label);\n }\n\n reset() {\n this.resetSource.next(true);\n }\n\n getMenu() {\n return this.menuDataService.get();\n }\n\n getAdminMenu() {\n return this.menuDataService.getAdminMenu();\n }\n\n getModules() {\n return this.menuDataService.getModules();\n }\n\n addModuleInstance(addModuleInstance: AddModuleInstanceDto) {\n return this.menuDataService.addModuleInstance(addModuleInstance as AddModuleInstanceDto);\n }\n\n deleteItem(moduleInstanceId: number) {\n return this.menuDataService.deleteModuleInstance({ id: moduleInstanceId } as DeleteModuleInstanceParams);\n }\n\n editModuleInstance(item: EditModuleInstanceDto) {\n return this.menuDataService.editModuleInstance(item);\n }\n}\n","import { ChangeDetectorRef, Component, HostBinding, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { LayoutService } from '../../services/app.layout.service';\nimport { MenuService } from '../../services/app.menu.service';\nimport { RippleModule } from 'primeng/ripple';\nimport { NgClass } from '@angular/common';\nimport { ConfirmationService, ContextMenuService, MenuItem, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { MsgService } from '../../services/msg.service';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { ContextMenuItemDto } from '../../dtos/context-menu-item.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { MenuApi } from '../../api/menu.api';\nimport { ChangeOrderParams, DeleteModuleInstanceParams } from '../../api/data-contracts';\n\ninterface MenuItemComponentTranslation {\n delete: string;\n edit: string;\n new: string;\n deleteItemConfirmHeader: string;\n deleteItemConfirmMessage: string;\n deleteItemSuccessMessage: string;\n deleteItemConfirmRejectButtonPropsLabel: string;\n deleteItemConfirmAcceptButtonPropsLabel: string;\n moveUp: string;\n moveDown: string\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[app-menuitem]',\n template: `\n <ng-container>\n <p-confirm-dialog />\n @if (root && item.visible !== false) {\n <div class=\"layout-menuitem-root-text\" (contextmenu)=\"onContextMenu($event, item)\">\n {{ item.label }}\n </div>\n }\n @if ((!item.routerLink || item.items) && item.visible !== false) {\n <a\n pRipple\n tabindex=\"0\"\n [attr.href]=\"item.url\"\n [attr.target]=\"item.target\"\n [ngClass]=\"item.class\"\n (click)=\"itemClick($event)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n @if (item.routerLink && !item.items && item.visible !== false) {\n <a\n pRipple\n routerLinkActive=\"active-route\"\n tabindex=\"0\"\n [attr.target]=\"item.target\"\n [fragment]=\"item.fragment\"\n [ngClass]=\"item.class\"\n [preserveFragment]=\"item.preserveFragment\"\n [queryParams]=\"item.queryParams\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [replaceUrl]=\"item.replaceUrl\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActiveOptions]=\"\n item.routerLinkActiveOptions || {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n }\n \"\n [skipLocationChange]=\"item.skipLocationChange\"\n [state]=\"item.state\"\n (click)=\"itemClick($event)\"\n (contextmenu)=\"onContextMenu($event, item)\">\n <i class=\"layout-menuitem-icon\" [ngClass]=\"item.icon\"></i>\n <span class=\"layout-menuitem-text\">{{ item.label }}</span>\n @if (item.items) {\n <i class=\"pi pi-fw pi-angle-down layout-submenu-toggler\"></i>\n }\n </a>\n }\n\n @if (item.items && item.visible !== false) {\n <ul [@children]=\"submenuAnimation\" (contextmenu)=\"onContextMenu($event, item)\">\n @for (child of item.items; track child; let i = $index) {\n <li\n app-menuitem\n [class]=\"child.badgeClass\"\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"child\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [parentKey]=\"key\"></li>\n }\n </ul>\n }\n </ng-container>\n `,\n animations: [\n trigger('children', [\n state(\n 'collapsed',\n style({\n height: '0'\n })\n ),\n state(\n 'expanded',\n style({\n height: '*'\n })\n ),\n transition('collapsed <=> expanded', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n ])\n ],\n imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],\n providers: [ConfirmationService]\n})\nexport class MenuItemComponent implements OnInit, OnDestroy {\n private readonly layoutService = inject(LayoutService);\n private readonly translateService = inject(TranslateService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly msgService = inject(MsgService);\n private readonly menuDataService = inject(MenuApi);\n\n @Input() item: ContextMenuItemDto;\n @Input() index!: number;\n @Input() @HostBinding('class.layout-root-menuitem') root!: boolean;\n @Input() parentKey!: string;\n @Input() menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @Input() menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @Input() contextMenu: ContextMenu;\n\n private active = false;\n private subscriptions: Subscription[] = [];\n private localization: MenuItemComponentTranslation = {} as MenuItemComponentTranslation;\n\n protected key: string = '';\n\n constructor(\n private readonly cd: ChangeDetectorRef,\n public router: Router,\n private readonly menuService: MenuService\n ) {\n this.subscriptions.push(\n this.menuService.menuSource$.subscribe((value) => {\n Promise.resolve(null).then(() => {\n if (value.routeEvent) {\n this.active = value.key === this.key || value.key.startsWith(this.key + '-');\n } else if (value.key !== this.key && !value.key.startsWith(this.key + '-')) {\n this.active = false;\n }\n });\n })\n );\n\n this.subscriptions.push(\n this.menuService.resetSource$.subscribe(() => {\n this.active = false;\n })\n );\n\n this.subscriptions.push(\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n })\n );\n\n this.subscriptions.push(\n this.translateService.get('menuItemComponent').subscribe((value: MenuItemComponentTranslation) => {\n this.localization = value;\n })\n );\n }\n\n ngOnInit() {\n this.key = this.parentKey ? this.parentKey + '-' + this.index : String(this.index);\n if (this.item.routerLink) {\n this.updateActiveStateFromRoute();\n }\n }\n\n updateActiveStateFromRoute() {\n const activeRoute = this.router.isActive(this.item.routerLink[0], {\n paths: 'exact',\n queryParams: 'ignored',\n matrixParams: 'ignored',\n fragment: 'ignored'\n });\n\n if (activeRoute) {\n this.menuService.onMenuStateChange({\n key: this.key,\n item: this.item,\n routeEvent: true\n });\n }\n }\n\n itemClick(event: Event) {\n // avoid processing disabled items\n if (this.item.disabled) {\n event.preventDefault();\n return;\n }\n\n // execute command\n if (this.item.command) {\n this.item.command({ originalEvent: event, item: this.item });\n }\n\n // toggle active state\n if (this.item.items) {\n this.active = !this.active;\n }\n\n this.menuService.onMenuStateChange({ key: this.key, item: this.item });\n }\n\n get submenuAnimation() {\n return this.root || this.active ? 'expanded' : 'collapsed';\n }\n\n @HostBinding('class.active-menuitem')\n get activeClass() {\n return this.active && !this.root;\n }\n\n ngOnDestroy() {\n this.subscriptions.map((s) => s.unsubscribe());\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent, item: any) {\n this.menuService.contextMenuItem = item;\n this.contextMenu.model = [\n {\n label: this.localization.new,\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n },\n {\n label: this.localization.edit,\n icon: PrimeIcons.FILE_EDIT,\n command: (event) => this.editClick(event)\n },\n { separator: true },\n {\n label: this.localization.delete,\n icon: PrimeIcons.TRASH,\n command: (event) => this.deleteItem(event)\n },\n { separator: true, visible: this.hasVisibleNext(item) || this.hasVisiblePrev(item) },\n {\n label: this.localization.moveUp,\n icon: PrimeIcons.ANGLE_UP,\n command: (event) => {\n this.moveUp(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisiblePrev(item)\n },\n {\n label: this.localization.moveDown,\n icon: PrimeIcons.ANGLE_DOWN,\n command: (event) => {\n this.moveDown(item);\n $event.stopPropagation();\n $event.preventDefault();\n },\n visible: this.hasVisibleNext(item)\n }\n ];\n this.contextMenu.show($event);\n }\n\n private deleteItem(event: MenuItemCommandEvent) {\n this.confirmationService.confirm({\n header: this.localization.deleteItemConfirmHeader,\n message: this.localization.deleteItemConfirmMessage,\n icon: PrimeIcons.TRASH,\n rejectButtonProps: {\n label: this.localization.deleteItemConfirmRejectButtonPropsLabel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.localization.deleteItemConfirmAcceptButtonPropsLabel,\n severity: 'danger'\n },\n accept: async () => {\n await this.menuDataService.deleteModuleInstance({\n id: this.menuService.contextMenuItem?.moduleInstanceId\n } as DeleteModuleInstanceParams);\n this.msgService.success(this.localization.deleteItemSuccessMessage);\n await this.menuService.loadMenu();\n }\n });\n }\n\n private editClick(event: MenuItemCommandEvent) {\n this.menuItemEditDialogComponent.showDialog().then();\n }\n\n moveUp(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex > 0) {\n const prevVisibleItem = this.findPrevVisibleItem(items, currentIndex);\n if (prevVisibleItem !== null) {\n this.swapItems(items[currentIndex], items[prevVisibleItem]);\n }\n }\n }\n\n moveDown(currentItem: any) {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId === currentItem.moduleInstanceId);\n\n if (currentIndex < items.length - 1) {\n const nextVisibleIndex = this.findNextVisibleIndex(items, currentIndex);\n if (nextVisibleIndex !== -1) {\n this.swapItems(items[currentIndex], items[nextVisibleIndex]);\n }\n }\n }\n\n private findPrevVisibleItem(items: any[], currentIndex: number): number {\n for (let i = currentIndex - 1; i >= 0; i--) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private findNextVisibleIndex(items: any[], currentIndex: number): number {\n for (let i = currentIndex + 1; i < items.length; i++) {\n if (items[i].visible !== false) {\n return i;\n }\n }\n return -1;\n }\n\n private swapItems(firstModule: any, secondModule: any) {\n const items = this.getItems(firstModule);\n\n const firstIndex = items.findIndex((item) => item.moduleInstanceId === firstModule.moduleInstanceId);\n const secondIndex = items.findIndex((item) => item.moduleInstanceId === secondModule.moduleInstanceId);\n\n [items[firstIndex], items[secondIndex]] = [items[secondIndex], items[firstIndex]];\n\n this.menuDataService\n .changeOrder({\n firstModuleId: firstModule.moduleInstanceId,\n secondModuleId: secondModule.moduleInstanceId\n } as ChangeOrderParams)\n .then();\n }\n\n hasVisiblePrev(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return currentIndex > 0;\n }\n\n getItems(currentItem: any) {\n return !currentItem.parentId\n ? this.menuService.menu\n : this.menuService.menu.find((m) => m.moduleInstanceId == currentItem.parentId).items;\n }\n\n hasVisibleNext(currentItem: any): boolean {\n const items = this.getItems(currentItem);\n const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);\n return currentIndex < items.length - 1;\n }\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { AddModuleInstanceDto, IntKeyValueDto } from '../../api/data-contracts';\nimport { MenuApi } from '../../api/menu.api';\nimport { MenuService } from '../../services/app.menu.service';\n\n@Component({\n selector: 'menu-item-create-dialog',\n standalone: true,\n imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe],\n template: `\n <p-dialog\n header=\"{{ 'menuItemCreateDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\">\n @if (menuService.contextMenuItem) {\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-parent-input\">\n {{ 'menuItemCreateDialogComponent.parentLabel' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-dialog-parent-input\"\n pInputText\n readonly\n [ngModel]=\"menuService.contextMenuItem?.label\" />\n </div>\n }\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-label\">\n {{ 'menuItemCreateDialogComponent.label' | translate }}\n </label>\n <input autocomplete=\"off\" class=\"flex-auto\" id=\"oip-menu-item-create-label\" pInputText [(ngModel)]=\"label\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-module\">\n {{ 'menuItemCreateDialogComponent.module' | translate }}\n </label>\n <p-select\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-create-module\"\n optionLabel=\"value\"\n optionValue=\"key\"\n placeholder=\"{{ 'menuItemCreateDialogComponent.selectModule' | translate }}\"\n [options]=\"modules\"\n [(ngModel)]=\"selectModule\" />\n </div>\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-create-dialog-icon\">\n {{ 'menuItemCreateDialogComponent.icon' | translate }}\n </label>\n <i class=\"{{ selectIcon }}\"></i>\n <input class=\"flex-auto\" id=\"oip-menu-item-create-dialog-icon\" pInputText [(ngModel)]=\"selectIcon\" />\n </div>\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-create-cancel\"\n label=\"{{ 'menuItemCreateDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n (click)=\"changeVisible()\"\n (keydown)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-create-save\"\n label=\"{{ 'menuItemCreateDialogComponent.save' | translate }}\"\n (click)=\"save()\"\n (keydown)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemCreateDialogComponent implements OnInit {\n protected readonly menuService = inject(MenuService);\n protected readonly menu = inject(MenuApi);\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n modules: IntKeyValueDto[] = [];\n selectModule: any;\n label: string;\n selectIcon: string = 'pi pi-box';\n\n async ngOnInit() {\n this.modules = await this.menu.getModules();\n }\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n const item: AddModuleInstanceDto = {\n moduleId: this.selectModule,\n label: this.label,\n icon: this.selectIcon,\n parentId: this.menuService.contextMenuItem?.moduleInstanceId\n };\n await this.menuService.addModuleInstance(item);\n await this.menuService.loadMenu();\n this.hide();\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n showDialog() {\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuService } from '../../services/app.menu.service';\nimport { SecurityDataService } from '../../services/security-data.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { EditModuleInstanceDto } from '../../api/data-contracts';\n\n@Component({\n imports: [ButtonModule, DialogModule, InputTextModule, FormsModule, TranslatePipe, MultiSelectModule],\n selector: 'menu-item-edit-dialog',\n standalone: true,\n template: `\n <p-dialog\n header=\"{{ 'menuItemEditDialogComponent.header' | translate }}\"\n [modal]=\"true\"\n [style]=\"{ width: '40rem' }\"\n [(visible)]=\"visible\">\n <div class=\"flex items-center gap-4 mb-4 mt-1\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-menu-input\">\n {{ 'menuItemEditDialogComponent.label' | translate }}\n </label>\n <input\n autocomplete=\"off\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-menu-input\"\n pInputText\n [(ngModel)]=\"item.label\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"oip-menu-item-edit-dialog-icon\">\n {{ 'menuItemEditDialogComponent.icon' | translate }}\n </label>\n <i class=\"{{ item.icon }}\"></i>\n <input class=\"flex-auto\" id=\"oip-menu-item-edit-dialog-icon\" pInputText [(ngModel)]=\"item.icon\" />\n </div>\n\n <div class=\"flex items-center gap-4 mb-4\">\n <label class=\"font-semibold w-1/3\" for=\"security\">\n {{ 'menuItemEditDialogComponent.security' | translate }}\n </label>\n <p-multiSelect\n appendTo=\"body\"\n class=\"flex-auto\"\n id=\"oip-menu-item-edit-dialog-roles-multi-select\"\n placeholder=\"Select roles\"\n [maxSelectedLabels]=\"10\"\n [options]=\"roles\"\n [(ngModel)]=\"item.viewRoles\" />\n </div>\n\n <div class=\"flex justify-end gap-2\">\n <p-button\n id=\"oip-menu-item-edit-dialog-cancel-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.cancel' | translate }}\"\n severity=\"secondary\"\n (click)=\"changeVisible()\"\n (keydown)=\"changeVisible()\" />\n <p-button\n id=\"oip-menu-item-edit-dialog-save-edit-button\"\n label=\"{{ 'menuItemEditDialogComponent.save' | translate }}\"\n (click)=\"save()\"\n (keydown)=\"save()\" />\n </div>\n </p-dialog>\n `\n})\nexport class MenuItemEditDialogComponent {\n private readonly menuService = inject(MenuService);\n private readonly securityDataService = inject(SecurityDataService);\n\n @Input() visible!: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n modules: any[] = [];\n roles: string[] = [];\n item: EditModuleInstanceDto = {\n icon: '',\n label: '',\n viewRoles: [''],\n moduleId: 0,\n moduleInstanceId: 0,\n parentId: 0\n };\n\n changeVisible() {\n this.visible = !this.visible;\n this.visibleChange.emit(this.visible);\n }\n\n async save() {\n await this.menuService.editModuleInstance(this.item);\n await this.menuService.loadMenu();\n this.hide();\n }\n\n hide() {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n async showDialog() {\n this.item = {\n moduleInstanceId: this.menuService.contextMenuItem?.moduleInstanceId,\n moduleId: this.menuService.contextMenuItem?.moduleId,\n parentId: this.menuService.contextMenuItem?.parentId,\n label: this.menuService.contextMenuItem?.label,\n icon: this.menuService.contextMenuItem?.icon,\n viewRoles: this.menuService.contextMenuItem?.securities\n };\n\n this.roles = await this.securityDataService.getRealmRoles();\n this.menuService.getModules().then((data) => {\n this.modules = data;\n });\n\n this.visible = true;\n this.visibleChange.emit(this.visible);\n }\n}\n","import { Component, inject, OnInit, ViewChild } from '@angular/core';\nimport { MenuService } from '../../services/app.menu.service';\nimport { ButtonModule } from 'primeng/button';\nimport { SecurityService } from '../../services/security.service';\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\nimport { DialogModule } from 'primeng/dialog';\nimport { ContextMenuService, MenuItemCommandEvent, PrimeIcons } from 'primeng/api';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { FormsModule } from '@angular/forms';\nimport { MenuItemComponent } from './menu-item.component';\nimport { MenuItemCreateDialogComponent } from './menu-item-create-dialog.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MenuItemEditDialogComponent } from './menu-item-edit-dialog.component';\nimport { MenuApi } from '../../api/menu.api';\nimport { L10nService } from '../../services/l10n.service';\n\n@Component({\n imports: [\n MenuItemComponent,\n ButtonModule,\n ContextMenuModule,\n DialogModule,\n InputTextModule,\n MenuItemCreateDialogComponent,\n FormsModule,\n MenuItemEditDialogComponent\n ],\n providers: [MenuApi],\n selector: 'app-menu',\n standalone: true,\n template: ` <div #empty class=\"layout-sidebar\" (contextmenu)=\"onContextMenu($event)\">\n <ul class=\"layout-menu\">\n @for (item of menuService.menu; track item; let i = $index) {\n <ng-container>\n @if (item.separator) {\n <li class=\"menu-separator\"></li>\n } @else {\n <li\n app-menuitem\n [contextMenu]=\"contextMenu\"\n [index]=\"i\"\n [item]=\"item\"\n [menuItemCreateDialogComponent]=\"menuItemCreateDialogComponent\"\n [menuItemEditDialogComponent]=\"menuItemEditDialogComponent\"\n [root]=\"true\"></li>\n }\n </ng-container>\n }\n </ul>\n </div>\n <p-contextMenu [target]=\"empty\" />\n @if (securityService.isAdmin) {\n <menu-item-create-dialog />\n <menu-item-edit-dialog />\n }`\n})\nexport class MenuComponent implements OnInit {\n readonly menuService = inject(MenuService);\n readonly securityService = inject(SecurityService);\n readonly translateService = inject(TranslateService);\n @ViewChild(MenuItemCreateDialogComponent) menuItemCreateDialogComponent: MenuItemCreateDialogComponent;\n @ViewChild(MenuItemEditDialogComponent) menuItemEditDialogComponent: MenuItemEditDialogComponent;\n @ViewChild(ContextMenu) contextMenu: ContextMenu;\n\n ngOnInit() {\n this.menuService.loadMenu().then();\n }\n\n private newClick(e: MenuItemCommandEvent) {\n this.menuItemCreateDialogComponent.showDialog();\n }\n\n onContextMenu($event: MouseEvent) {\n this.menuService.contextMenuItem = null;\n this.contextMenu.model = [\n {\n label: this.translateService.instant('menuComponent.new'),\n icon: PrimeIcons.PLUS,\n command: (event) => this.newClick(event)\n }\n ];\n }\n}\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';\nimport { CommonModule } from '@angular/common';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { AppTopbar } from './top-bar.component';\nimport { FooterComponent } from './footer.component';\nimport { LayoutService } from './../services/app.layout.service';\nimport { SidebarComponent } from './sidebar.component';\nimport { MenuApi } from '../api/menu.api';\nimport { MenuService } from '../services/app.menu.service';\n\n@Component({\n selector: 'app-layout',\n standalone: true,\n imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],\n template: `\n <div class=\"layout-wrapper\" [ngClass]=\"containerClass\">\n <app-topbar></app-topbar>\n <app-sidebar></app-sidebar>\n <div class=\"layout-main-container\">\n <div class=\"layout-main\">\n <router-outlet></router-outlet>\n </div>\n <app-footer></app-footer>\n </div>\n <div class=\"layout-mask animate-fadein\"></div>\n </div>\n `,\n providers: [MenuService, MenuApi]\n})\nexport class AppLayoutComponent implements OnDestroy {\n protected layoutService = inject(LayoutService);\n protected router = inject(Router);\n protected renderer = inject(Renderer2);\n overlayMenuOpenSubscription: Subscription;\n\n menuOutsideClickListener: () => void;\n\n @ViewChild(SidebarComponent) appSidebar!: SidebarComponent;\n\n @ViewChild(AppTopbar) appTopBar!: AppTopbar;\n\n constructor() {\n this.overlayMenuOpenSubscription = this.layoutService.overlayOpen$.subscribe(() => {\n if (!this.menuOutsideClickListener) {\n this.menuOutsideClickListener = this.renderer.listen('document', 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hideMenu();\n }\n });\n }\n\n if (this.layoutService.layoutState().staticMenuMobileActive) {\n this.blockBodyScroll();\n }\n });\n\n this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => {\n this.hideMenu();\n });\n }\n\n isOutsideClicked(event: MouseEvent) {\n const sidebarEl = document.querySelector('.layout-sidebar');\n const topbarEl = document.querySelector('.layout-menu-button');\n const eventTarget = event.target as Node;\n\n return !(\n sidebarEl?.isSameNode(eventTarget) ||\n sidebarEl?.contains(eventTarget) ||\n topbarEl?.isSameNode(eventTarget) ||\n topbarEl?.contains(eventTarget)\n );\n }\n\n hideMenu() {\n this.layoutService.layoutState.update((prev) => ({\n ...prev,\n overlayMenuActive: false,\n staticMenuMobileActive: false,\n menuHoverActive: false\n }));\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n this.menuOutsideClickListener = null;\n }\n this.unblockBodyScroll();\n }\n\n blockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.add('blocked-scroll');\n } else {\n document.body.className += ' blocked-scroll';\n }\n }\n\n unblockBodyScroll(): void {\n if (document.body.classList) {\n document.body.classList.remove('blocked-scroll');\n } else {\n document.body.className = document.body.className.replace(\n new RegExp('(^|\\\\b)' + 'blocked-scroll'.split(' ').join('|') + '(\\\\b|$)', 'gi'),\n ' '\n );\n }\n }\n\n get containerClass() {\n return {\n 'layout-overlay': this.layoutService.layoutConfig().menuMode === 'overlay',\n 'layout-static': this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-static-inactive':\n this.layoutService.layoutState().staticMenuDesktopInactive &&\n this.layoutService.layoutConfig().menuMode === 'static',\n 'layout-overlay-active': this.layoutService.layoutState().overlayMenuActive,\n 'layout-mobile-active': this.layoutService.layoutState().staticMenuMobileActive\n };\n }\n\n ngOnDestroy() {\n if (this.overlayMenuOpenSubscription) {\n this.overlayMenuOpenSubscription.unsubscribe();\n }\n\n if (this.menuOutsideClickListener) {\n this.menuOutsideClickListener();\n }\n }\n}\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';\nimport { HttpClient } from '@angular/common/http';\nimport { InterpolationParameters, TranslateService, Translation, TranslationObject } from '@ngx-translate/core';\nimport { LayoutService } from './app.layout.service';\nimport { PrimeNG } from 'primeng/config';\n\nexport interface LanguageDto {\n code: string;\n name: string;\n icon: string;\n}\n\n/**\n * Service for managing translation loading in the application\n */\n@Injectable({ providedIn: 'root' }) // Provided at root level for singleton usage\nexport class L10nService {\n private loadedTranslations: Set<string> = new Set();\n private httpClient = inject(HttpClient);\n private translateService = inject(TranslateService);\n private readonly primeNg = inject(PrimeNG);\n private readonly layoutService = inject(LayoutService);\n public availableLanguages: LanguageDto[];\n\n /**\n * Loads translations for a specific component\n * @param component - Name of the component to load translations for\n */\n public loadComponentTranslations(component: string) {\n const lang = this.translateService.currentLang;\n this.loadTranslations(component, lang);\n }\n\n /**\n * Gets the translated value of a key (or an array of keys)\n * @returns the translated key, or an object of translated keys\n */\n public get(key: string) {\n this.loadComponentTranslations(key.split('.')[0]);\n return this.translateService.get(key);\n }\n\n /**\n * Internal method to load translations from JSON files\n * @param component - Component or translation namespace\n * @param lang - Language code to load translations for\n */\n private loadTranslations(component: string, lang: string) {\n const key = `${component}.${lang}`;\n if (this.loadedTranslations.has(key)) {\n return;\n }\n\n try {\n this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).subscribe((translations) => {\n const current = this.translateService.translations[lang] || {};\n this.translateService.setTranslation(lang, { ...current, ...translations }, true);\n this.loadedTranslations.add(key);\n });\n } catch (e) {\n console.error(`No translations found for ${component}.${lang}.json`);\n console.error(e);\n }\n }\n\n /**\n * Changes the lang currently used\n */\n use(selectedLanguage: string, key: string = null) {\n if (key) {\n this.get(key);\n }\n this.translateService.use(selectedLanguage);\n }\n\n init(languages: LanguageDto[]) {\n this.availableLanguages = languages;\n this.translateService.addLangs(languages.map((x) => x.code));\n const lang = this.layoutService.language() ? this.layoutService.language() : 'en';\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang).subscribe(() => {\n this.loadComponentTranslations('app-info');\n this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));\n });\n }\n\n instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation | TranslationObject {\n return this.translateService.instant(key, interpolateParams);\n }\n}\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: ` <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\">\r\n {{ 'notfound.title' | translate }}\r\n </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\" routerLink=\"/\" [label]=\"'notfound.button' | translate\" />\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 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 } from '@angular/core';\r\nimport { ProfileComponent } from './profile.component';\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 { 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 <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 optionLabel=\"name\"\r\n optionValue=\"code\"\r\n qa-id=\"oip-app-config-language-select\"\r\n [options]=\"l10nService.availableLanguages\"\r\n [(ngModel)]=\"selectedLanguage\"\r\n (onChange)=\"changeLanguage()\">\r\n <ng-template #selectedItem let-selectedOption>\r\n <div class=\"flex items-center gap-2\">\r\n <span [class]=\"selectedOption.icon\"></span>\r\n <div>{{ selectedOption.name }}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #item let-languages>\r\n <div class=\"flex items-center gap-2\">\r\n <span [class]=\"languages.icon\"></span>\r\n <div>{{ languages.name }}</div>\r\n </div>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n <div class=\"flex flex-col gap-5\">\r\n <div class=\"mt-5\">{{ 'config.dateTimeFormat' | translate }}</div>\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-date-format-select\"\r\n [options]=\"dateFormats\"\r\n [placeholder]=\"'config.dateFormat' | translate\"\r\n [(ngModel)]=\"selectedDateFormat\"\r\n (onChange)=\"changeDateFormat()\" />\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-time-format-select\"\r\n [options]=\"timeFormats\"\r\n [placeholder]=\"'config.timeFormat' | translate\"\r\n [(ngModel)]=\"selectedTimeFormat\"\r\n (onChange)=\"changeTimeFormat()\" />\r\n <div class=\"mt-5\">{{ 'config.timeZone' | translate }}</div>\r\n <p-select\r\n class=\"w-full md:w-56\"\r\n qa-id=\"oip-app-config-timezone-select\"\r\n [filter]=\"true\"\r\n [options]=\"allTimeZones\"\r\n [placeholder]=\"'config.timeZone' | translate\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"34\"\r\n [(ngModel)]=\"selectedTimeZone\"\r\n (onChange)=\"changeTimeZone()\" />\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 `,\r\n imports: [\r\n ProfileComponent,\r\n Tooltip,\r\n FormsModule,\r\n Select,\r\n TableModule,\r\n TranslatePipe,\r\n ToggleSwitchModule,\r\n Button,\r\n RouterLink\r\n ]\r\n})\r\nexport class ConfigComponent {\r\n private readonly layoutService = inject(LayoutService);\r\n protected 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 protected readonly dateFormats: string[] = ['dd.MM.yyyy', 'dd.MM.yy', 'yyyy-MM-dd', 'dd.MMM.yyyy'];\r\n protected readonly timeFormats: string[] = ['HH:mm:ss', 'HH:mm'];\r\n // @ts-ignore\r\n protected readonly allTimeZones: any[] = Intl.supportedValuesOf('timeZone');\r\n\r\n protected selectedLanguage: any;\r\n protected selectedDateFormat: string;\r\n protected selectedTimeFormat: string;\r\n protected selectedTimeZone: string;\r\n\r\n constructor() {\r\n this.l10nService.loadComponentTranslations('config');\r\n this.selectedLanguage = this.layoutService.language();\r\n this.selectedDateFormat = this.layoutService.dateFormat();\r\n this.selectedTimeFormat = this.layoutService.timeFormat();\r\n this.selectedTimeZone = this.layoutService.timeZone();\r\n }\r\n\r\n changeLanguage() {\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 changeDateFormat() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, dateFormat: this.selectedDateFormat }));\r\n }\r\n\r\n changeTimeFormat() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeFormat: this.selectedTimeFormat }));\r\n }\r\n\r\n changeTimeZone() {\r\n this.layoutService.layoutConfig.update((config) => ({ ...config, timeZone: this.selectedTimeZone }));\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 { 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 severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n [pTooltip]=\"'db-migration.actions.refresh' | translate\"\r\n (click)=\"refreshAction()\" />\r\n <p-button\r\n icon=\"pi pi-filter-slash\"\r\n severity=\"secondary\"\r\n tooltipPosition=\"bottom\"\r\n [outlined]=\"true\"\r\n [pTooltip]=\"'db-migration.actions.cleanFilter' | translate\"\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 icon=\"pi pi-check\" severity=\"success\" [rounded]=\"true\" [text]=\"true\"> </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{\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\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 ModuleApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Retrieves all modules stored in the system.\n *\n * @tags Module\n * @name getAll\n * @summary Retrieves all modules stored in the system.\n * @request GET:/api/module/get-all\n * @secure\n * @response `200` `(ModuleDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n getAll = (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 insert\n * @summary Inserts a new module into the system.\n * @request POST:/api/module/insert\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n insert = (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 delete\n * @summary Deletes a module by its identifier.\n * @request DELETE:/api/module/delete\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n delete = (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 getModulesWithLoadStatus\n * @summary Returns all registered modules and indicates whether each one is currently loaded into the application.\n * @request GET:/api/module/get-modules-with-load-status\n * @secure\n * @response `200` `(ExistModuleDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n */\n getModulesWithLoadStatus = (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';\nimport { Tooltip } from 'primeng/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { TableModule } from 'primeng/table';\nimport { BaseDataService } from '../services/base-data.service';\nimport { Tag } from 'primeng/tag';\nimport { ButtonModule } from 'primeng/button';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { MsgService } from '../services/msg.service';\nimport { ConfirmationService } from 'primeng/api';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { L10nService } from '../services/l10n.service';\nimport { ModuleApi } from '../api/module.api';\nimport { ModuleDto } from '../api/data-contracts';\nimport { AppTitleService } from '../services/app-title.service';\nimport { TranslatePipe } from '@ngx-translate/core';\n\ninterface L10n {\n confirm: {\n header: string;\n message: string;\n cancel: string;\n delete: string;\n };\n title: string;\n messages: {\n deleteSuccess: string;\n };\n table: {\n deleteTooltip: string;\n currentlyLoaded: string;\n yes: string;\n no: string;\n name: string;\n moduleId: string;\n };\n refreshTooltip: string;\n}\n\n@Component({\n imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog, TranslatePipe],\n providers: [ConfirmationService, ModuleApi],\n selector: 'app-modules',\n template: `\n <p-confirmDialog></p-confirmDialog>\n <div class=\"flex flex-col md:flex-row gap-4\">\n <div class=\"card w-full\">\n <div class=\"font-semibold text-xl mb-4\">\n {{ l10n.title }}\n </div>\n <div class=\"mb-4\">\n <p-toolbar>\n <p-button\n icon=\"pi pi-refresh\"\n rounded=\"true\"\n severity=\"secondary\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.refreshTooltip' | translate\"\n (onClick)=\"refreshAction()\"></p-button>\n </p-toolbar>\n </div>\n <p-table class=\"mt-4\" [paginator]=\"true\" [rows]=\"100\" [value]=\"modules\">\n <ng-template pTemplate=\"header\">\n <tr>\n <th>{{ 'app-modules.table.moduleId' | translate }}</th>\n <th>{{ 'app-modules.table.name' | translate }}</th>\n <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>\n <th style=\"width: 4rem\"></th>\n </tr>\n </ng-template>\n <ng-template let-module pTemplate=\"body\">\n <tr>\n <td>{{ module.moduleId }}</td>\n <td>{{ module.name }}</td>\n <td>\n <p-tag\n [severity]=\"module.currentlyLoaded ? 'success' : 'danger'\"\n [value]=\"\n (module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate\n \"></p-tag>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n rounded=\"true\"\n severity=\"danger\"\n text=\"true\"\n tooltipPosition=\"bottom\"\n [pTooltip]=\"'app-modules.table.deleteTooltip' | translate\"\n (onClick)=\"deleteModule(module)\"></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n `\n})\nexport class AppModulesComponent implements OnInit {\n protected dataService = inject(BaseDataService);\n protected modules: ModuleDto[] = [];\n protected msgService = inject(MsgService);\n protected confirmationService = inject(ConfirmationService);\n protected l10nService = inject(L10nService);\n protected l10n: L10n = {} as L10n;\n protected titleService = inject(AppTitleService);\n private moduleService = inject(ModuleApi);\n\n async ngOnInit() {\n this.l10nService.get('app-modules').subscribe((l10n) => {\n this.l10n = l10n;\n });\n this.titleService.setTitle(this.l10n.title);\n await this.refreshAction();\n }\n\n async refreshAction() {\n this.modules = await this.moduleService.getModulesWithLoadStatus();\n }\n\n deleteModule(module: ModuleDto) {\n this.confirmationService.confirm({\n header: this.l10n.confirm.header,\n message: this.l10n.confirm.message,\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.l10n.confirm.cancel,\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.l10n.confirm.delete,\n severity: 'danger'\n },\n accept: async () => {\n this.dataService\n .sendRequest(`api/module/delete`, 'DELETE', {\n moduleId: module.moduleId\n })\n .then(() => this.refreshAction())\n .catch((error) => console.error(error));\n\n this.msgService.success(this.l10n.messages.deleteSuccess);\n }\n });\n }\n}\n","/* eslint-disable */\n/* tslint:disable */\n// @ts-nocheck\n\nimport { Injectable } from \"@angular/core\";\nimport {\n AddReactionRequest,\n ApiExceptionResponse,\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n CreateCommentRequest,\n DeleteAttachmentParams,\n DeleteParams,\n GetAttachmentContentParams,\n GetByIdParams,\n GetByObjectParams,\n GetHistoryParams,\n MentionUserDto,\n RemoveReactionParams,\n SearchMentionUsersParams,\n UpdateCommentRequest,\n UpdateParams,\n UploadAttachmentPayload,\n} from \"./discussion-data-contracts\";\nimport { ContentType, HttpClient, RequestParams } from \"./http-client\";\n\n@Injectable()\nexport class DiscussionApi<\n SecurityDataType = unknown,\n> extends HttpClient<SecurityDataType> {\n /**\n * @description Gets comments by object type and object identifier.\n *\n * @tags Discussion\n * @name getByObject\n * @summary Gets comments by object type and object identifier.\n * @request GET:/api/discussion/get-by-object\n * @secure\n * @response `200` `(CommentDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n getByObject = (query: GetByObjectParams, params: RequestParams = {}) =>\n this.request<CommentDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-by-object`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Gets a comment by identifier.\n *\n * @tags Discussion\n * @name getById\n * @summary Gets a comment by identifier.\n * @request GET:/api/discussion/get-by-id\n * @secure\n * @response `200` `CommentDto` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getById = (query: GetByIdParams, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/get-by-id`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Creates a new comment\n *\n * @tags Discussion\n * @name create\n * @summary Creates a new comment\n * @request POST:/api/discussion/create\n * @secure\n * @response `200` `CommentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n create = (data: CreateCommentRequest, params: RequestParams = {}) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/create`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Updates an existing comment.\n *\n * @tags Discussion\n * @name update\n * @summary Updates an existing comment.\n * @request PUT:/api/discussion/update/{id}\n * @secure\n * @response `200` `CommentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n update = (\n { id, ...query }: UpdateParams,\n data: UpdateCommentRequest,\n params: RequestParams = {},\n ) =>\n this.request<CommentDto, ApiExceptionResponse>({\n path: `/api/discussion/update/${id}`,\n method: \"PUT\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Soft deletes a comment.\n *\n * @tags Discussion\n * @name delete\n * @summary Soft deletes a comment.\n * @request DELETE:/api/discussion/delete/{id}\n * @secure\n * @response `204` `void` No Content\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n delete = ({ id, ...query }: DeleteParams, params: RequestParams = {}) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n /**\n * @description Gets edit history for a comment.\n *\n * @tags Discussion\n * @name getHistory\n * @summary Gets edit history for a comment.\n * @request GET:/api/discussion/get-history/{id}\n * @secure\n * @response `200` `(CommentHistoryDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getHistory = (\n { id, ...query }: GetHistoryParams,\n params: RequestParams = {},\n ) =>\n this.request<CommentHistoryDto[], ApiExceptionResponse>({\n path: `/api/discussion/get-history/${id}`,\n method: \"GET\",\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Uploads an attachment for a comment.\n *\n * @tags Discussion\n * @name uploadAttachment\n * @summary Uploads an attachment for a comment.\n * @request POST:/api/discussion/upload-attachment\n * @secure\n * @response `200` `AttachmentDto` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n uploadAttachment = (\n data: UploadAttachmentPayload,\n params: RequestParams = {},\n ) =>\n this.request<AttachmentDto, ApiExceptionResponse>({\n path: `/api/discussion/upload-attachment`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.FormData,\n format: \"json\",\n ...params,\n });\n /**\n * @description Deletes an attachment.\n *\n * @tags Discussion\n * @name deleteAttachment\n * @summary Deletes an attachment.\n * @request DELETE:/api/discussion/delete-attachment/{id}\n * @secure\n * @response `204` `void` No Content\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `403` `ApiExceptionResponse` Forbidden\n * @response `404` `ApiExceptionResponse` Not Found\n */\n deleteAttachment = (\n { id, ...query }: DeleteAttachmentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/delete-attachment/${id}`,\n method: \"DELETE\",\n secure: true,\n ...params,\n });\n /**\n * @description Downloads attachment content.\n *\n * @tags Discussion\n * @name getAttachmentContent\n * @summary Downloads attachment content.\n * @request GET:/api/discussion/get-attachment-content/{id}\n * @secure\n * @response `200` `void` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n getAttachmentContent = (\n { id, ...query }: GetAttachmentContentParams,\n params: RequestParams = {},\n ) =>\n this.request<void, ApiExceptionResponse>({\n path: `/api/discussion/get-attachment-content/${id}`,\n method: \"GET\",\n secure: true,\n ...params,\n });\n /**\n * @description Adds or toggles a reaction for a comment.\n *\n * @tags Discussion\n * @name addReaction\n * @summary Adds or toggles a reaction for a comment.\n * @request POST:/api/discussion/add-reaction\n * @secure\n * @response `200` `(CommentReactionDto)[]` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n addReaction = (data: AddReactionRequest, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/add-reaction`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n });\n /**\n * @description Removes a reaction from a comment.\n *\n * @tags Discussion\n * @name removeReaction\n * @summary Removes a reaction from a comment.\n * @request DELETE:/api/discussion/remove-reaction\n * @secure\n * @response `200` `(CommentReactionDto)[]` OK\n * @response `401` `ApiExceptionResponse` Unauthorized\n * @response `404` `ApiExceptionResponse` Not Found\n */\n removeReaction = (query: RemoveReactionParams, params: RequestParams = {}) =>\n this.request<CommentReactionDto[], ApiExceptionResponse>({\n path: `/api/discussion/remove-reaction`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n /**\n * @description Searches users that can be mentioned in a comment.\n *\n * @tags Discussion\n * @name searchMentionUsers\n * @summary Searches users that can be mentioned in a comment.\n * @request GET:/api/discussion/search-mention-users\n * @secure\n * @response `200` `(MentionUserDto)[]` OK\n * @response `400` `ApiExceptionResponse` Bad Request\n * @response `401` `ApiExceptionResponse` Unauthorized\n */\n searchMentionUsers = (\n query: SearchMentionUsersParams,\n params: RequestParams = {},\n ) =>\n this.request<MentionUserDto[], ApiExceptionResponse>({\n path: `/api/discussion/search-mention-users`,\n method: \"GET\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n });\n}\n","export function getInitialsFromString(input: string): string {\n if (!input || input.trim().length === 0) {\n return '';\n }\n\n const words = input.trim().split(/\\s+/);\n\n if (words.length === 1) {\n return words[0].charAt(0).toUpperCase();\n }\n\n const firstInitial = words[0].charAt(0).toUpperCase();\n const lastInitial = words[words.length - 1].charAt(0).toUpperCase();\n\n return firstInitial + lastInitial;\n}\n","import { CommonModule, DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n inject,\n OnInit\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ConfirmationService } from 'primeng/api';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { CardModule } from 'primeng/card';\nimport { ConfirmDialog } from 'primeng/confirmdialog';\nimport { DividerModule } from 'primeng/divider';\nimport { PanelModule } from 'primeng/panel';\nimport { PopoverModule } from 'primeng/popover';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TagModule } from 'primeng/tag';\nimport { Textarea } from 'primeng/textarea';\nimport {\n AttachmentDto,\n CommentDto,\n CommentHistoryDto,\n CommentReactionDto,\n MentionUserDto\n} from '../api/discussion-data-contracts';\nimport { DiscussionApi } from '../api/discussion.api';\nimport { MsgService } from \"../services/msg.service\";\nimport { LayoutService } from \"../services/app.layout.service\";\nimport { getInitialsFromString } from \"../helpers/avatar.helper\";\n\ntype HistoryState = {\n loading: boolean;\n opened: boolean;\n items: DiscussionHistoryItem[];\n};\n\ntype DiscussionAttachment = Required<AttachmentDto>;\ntype DiscussionReaction = Required<CommentReactionDto>;\ntype DiscussionMentionUser = Required<MentionUserDto>;\ntype DiscussionComment = Omit<CommentDto, 'attachments' | 'reactions' | 'mentions'> & {\n commentId: number;\n content: string;\n authorDisplayName: string;\n authorEmail: string;\n isEdited: boolean;\n historyCount: number;\n canEdit: boolean;\n canDelete: boolean;\n attachments: DiscussionAttachment[];\n reactions: DiscussionReaction[];\n};\ntype DiscussionHistoryItem = Required<CommentHistoryDto>;\n\n@Component({\n selector: 'discussion',\n standalone: true,\n providers: [ConfirmationService, DiscussionApi],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n ButtonModule,\n CardModule,\n ConfirmDialog,\n DividerModule,\n PanelModule,\n PopoverModule,\n ProgressSpinnerModule,\n TagModule,\n Textarea,\n DatePipe,\n TranslatePipe\n ],\n template: `\n <p-confirmDialog/>\n\n <section class=\"flex flex-col gap-4\">\n\n <p-card class=\"block\">\n <div class=\"flex flex-col gap-4\">\n @if (!previewMode) {\n <textarea\n pTextarea\n class=\"min-h-28 w-full\"\n [autoResize]=\"true\"\n rows=\"5\"\n [(ngModel)]=\"newComment\"\n (ngModelChange)=\"onComposerInput()\"\n [placeholder]=\"'discussionComponent.writeCommentPlaceholder' | translate\"\n ></textarea>\n } @else {\n <div\n class=\"markdown-preview min-h-28 rounded-2xl border border-surface-200 bg-surface-50 px-4 py-3 leading-7 dark:border-surface-700 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(newComment)\"\n ></div>\n }\n\n @if (mentionSuggestions.length > 0) {\n <p-panel class=\"block\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-at\"></i>\n <span>{{ 'discussionComponent.mentionSuggestions' | translate }}</span>\n </div>\n </ng-template>\n\n <div class=\"flex flex-col gap-3\">\n @for (candidate of mentionSuggestions; track candidate.userId) {\n <button\n type=\"button\"\n class=\"flex w-full items-center justify-between gap-4 rounded-xl border border-transparent px-3 py-3 text-left transition hover:border-primary-200 hover:bg-primary-50 dark:hover:border-primary-800 dark:hover:bg-primary-950/30\"\n (click)=\"insertMention(candidate)\"\n >\n <div class=\"min-w-0\">\n <strong>{{ candidate.displayName }}</strong>\n <small class=\"mt-1 block text-surface-500\">{{ candidate.email }}</small>\n </div>\n <i class=\"pi pi-arrow-up-left shrink-0 text-surface-400\"></i>\n </button>\n }\n </div>\n </p-panel>\n }\n\n @if (pendingFiles.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (file of pendingFiles; track file.name + file.size) {\n <div\n class=\"flex flex-col gap-3 rounded-2xl border border-surface-200 px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-surface-700\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <span class=\"break-all\">{{ file.name }}</span>\n <p-tag [value]=\"formatBytes(file.size)\" severity=\"contrast\"/>\n </div>\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"removePendingFile(file)\"\n />\n </div>\n }\n </div>\n }\n\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <p-button\n [label]=\"\n previewMode\n ? ('discussionComponent.edit' | translate)\n : ('discussionComponent.preview' | translate)\n \"\n [icon]=\"previewMode ? 'pi pi-pencil' : 'pi pi-eye'\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"previewMode = !previewMode\"\n />\n\n <label class=\"file-trigger\">\n <p-button\n [label]=\"'discussionComponent.attachFiles' | translate\"\n icon=\"pi pi-paperclip\"\n severity=\"secondary\"\n [text]=\"true\"\n />\n <input type=\"file\" multiple (change)=\"onFilesSelected($event)\"/>\n </label>\n <p-button\n [label]=\"'discussionComponent.send' | translate\"\n icon=\"pi pi-send\"\n [loading]=\"submitting\"\n [disabled]=\"submitting || !newComment.trim()\"\n (onClick)=\"createComment()\"\n />\n </div>\n </div>\n </p-card>\n\n @if (loading) {\n <div\n class=\"flex min-h-20 flex-col items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <p-progressSpinner strokeWidth=\"4\"/>\n <span>{{ 'discussionComponent.loadingComments' | translate }}</span>\n </div>\n } @else if (comments.length === 0) {\n <div\n class=\"flex min-h-20 items-center justify-center gap-3 rounded-2xl border border-surface-200 px-4 py-5 text-surface-500 dark:border-surface-700\">\n <i class=\"pi pi-inbox\"></i>\n <span>{{ 'discussionComponent.noCommentsYet' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (comment of comments; track comment.commentId) {\n <p-card class=\"block\">\n <ng-template pTemplate=\"content\">\n <div class=\"grid gap-4 md:grid-cols-[3.2rem_minmax(0,1fr)]\">\n <div>\n <p-avatar\n [label]=\"getInitialsFromString(comment.authorDisplayName)\"\n shape=\"circle\"\n />\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row gap-3 justify-between\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <strong>{{ comment.authorDisplayName }}</strong>\n <span\n class=\"text-sm text-surface-500\">{{ comment.createdAt | date: layoutService.dateTimeFormat() }}</span>\n </div>\n\n <div class=\"flex flex-wrap items-center justify-end gap-2\">\n <div class=\"flex flex-wrap items-center\">\n @if (comment.isEdited) {\n <p-tag [value]=\"'discussionComponent.edited' | translate\" icon=\"pi pi-pencil\" severity=\"warn\"/>\n }\n </div>\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-pencil\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"startEdit(comment)\"\n />\n }\n @if (comment.historyCount > 0) {\n <p-button\n icon=\"pi pi-history\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"toggleHistory(comment)\"\n />\n }\n @if (comment.canDelete) {\n <p-button\n icon=\"pi pi-trash\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteComment(comment)\"\n />\n }\n </div>\n </div>\n @if (editingCommentId === comment.commentId) {\n <div class=\"flex flex-col gap-4\">\n <textarea\n pTextarea\n class=\"min-h-24 w-full\"\n [autoResize]=\"true\"\n rows=\"4\"\n [(ngModel)]=\"editContent\"\n [placeholder]=\"'discussionComponent.editCommentPlaceholder' | translate\"\n ></textarea>\n <div class=\"flex flex-col gap-2 sm:flex-row sm:justify-end\">\n <div>\n <label class=\"file-trigger\">\n <p-button\n [label]=\"'discussionComponent.addAttachment' | translate\"\n icon=\"pi pi-paperclip\"\n [text]=\"true\"\n severity=\"secondary\"\n />\n <input type=\"file\" multiple (change)=\"onInlineFilesSelected(comment, $event)\"/>\n </label>\n </div>\n\n <p-button\n [label]=\"'discussionComponent.save' | translate\"\n icon=\"pi pi-check\"\n [disabled]=\"!editContent.trim()\"\n (onClick)=\"saveEdit(comment)\"\n />\n <p-button\n [label]=\"'discussionComponent.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"cancelEdit()\"\n />\n </div>\n </div>\n } @else {\n <div class=\"markdown-preview\" [innerHTML]=\"renderMarkdown(comment.content)\"></div>\n }\n\n @if (comment.attachments.length > 0) {\n <div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-col gap-3\">\n @for (attachment of comment.attachments; track attachment.attachmentId) {\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-end\">\n <div class=\"inline-flex items-center gap-2\">\n <i class=\"pi pi-file\"></i>\n <button\n type=\"button\"\n class=\"break-all bg-transparent p-0 text-left font-semibold text-primary-600 transition hover:text-primary-500\"\n (click)=\"downloadAttachment(attachment)\"\n >\n {{ attachment.fileName }}\n </button>\n <p-tag [value]=\"formatBytes(attachment.fileSize)\" severity=\"contrast\"/>\n </div>\n\n @if (comment.canEdit) {\n <p-button\n icon=\"pi pi-times\"\n severity=\"danger\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"deleteAttachment(comment, attachment)\"\n />\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"flex flex-wrap items-center gap-2\">\n @for (reaction of getReactions(comment); track reaction.emojiCode) {\n <p-button\n [label]=\"reaction.emojiCode + ' ' + reaction.count\"\n severity=\"secondary\"\n [outlined]=\"false\"\n (onClick)=\"toggleReaction(comment, reaction)\"\n />\n }\n\n @if (!hasUserReaction(comment)) {\n <p-button\n icon=\"pi pi-face-smile\"\n severity=\"secondary\"\n [rounded]=\"true\"\n [text]=\"true\"\n (onClick)=\"reactionPopover.toggle($event)\"\n />\n <p-popover #reactionPopover>\n <div class=\"emoji-popover\">\n @for (emoji of emojiPalette; track emoji) {\n <button\n type=\"button\"\n class=\"emoji-option\"\n (click)=\"reactWithEmoji(comment, emoji, reactionPopover)\"\n >\n {{ emoji }}\n </button>\n }\n </div>\n </p-popover>\n }\n </div>\n\n @if (historyByComment[comment.commentId]?.opened) {\n <p-panel class=\"block\" [toggleable]=\"true\" [collapsed]=\"false\">\n <ng-template pTemplate=\"header\">\n <div class=\"inline-flex items-center gap-2 text-sm font-medium\">\n <i class=\"pi pi-history\"></i>\n <span>{{ 'discussionComponent.editHistory' | translate }}</span>\n </div>\n </ng-template>\n\n @if (historyByComment[comment.commentId]?.loading) {\n <div class=\"flex items-center gap-3 text-surface-500\">\n <p-progressSpinner strokeWidth=\"4\"/>\n <span>{{ 'discussionComponent.loadingHistory' | translate }}</span>\n </div>\n } @else {\n <div class=\"flex flex-col gap-4\">\n @for (item of historyByComment[comment.commentId]?.items ?? []; track item.commentEditHistoryId) {\n <div class=\"rounded-2xl border border-surface-200 px-4 py-4 dark:border-surface-700\">\n <div class=\"mb-3 inline-flex items-center gap-2 text-sm font-semibold\">\n <i class=\"pi pi-clock\"></i>\n <span>{{ item.editedByDisplayName }} · {{ item.editedAt | date: 'short' }}</span>\n </div>\n <div class=\"grid gap-4 lg:grid-cols-2\">\n <div class=\"flex flex-col gap-2\">\n <p-tag [value]=\"'discussionComponent.before' | translate\" severity=\"secondary\"/>\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.oldContent)\"\n ></div>\n </div>\n <div class=\"flex flex-col gap-2\">\n <p-tag [value]=\"'discussionComponent.after' | translate\" severity=\"success\"/>\n <div\n class=\"history-markdown rounded-2xl bg-surface-50 px-4 py-3 leading-7 dark:bg-surface-900/40\"\n [innerHTML]=\"renderMarkdown(item.newContent)\"\n ></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n </p-panel>\n }\n </div>\n </div>\n </ng-template>\n </p-card>\n }\n </div>\n }\n </section>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n\n .file-trigger {\n position: relative;\n display: inline-flex;\n }\n\n .file-trigger input {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n }\n\n .markdown-preview,\n .history-markdown {\n word-break: break-word;\n }\n\n .markdown-preview :is(h1, h2, h3),\n .history-markdown :is(h1, h2, h3) {\n margin: 0 0 0.75rem;\n font-weight: 600;\n }\n\n .markdown-preview a,\n .history-markdown a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 0.18em;\n }\n\n .emoji-popover {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n max-width: 16rem;\n }\n\n .emoji-option {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n font-size: 1.25rem;\n cursor: pointer;\n }\n `\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DiscussionComponent implements OnChanges, OnDestroy, OnInit {\n private readonly msgService = inject(MsgService);\n private readonly discussionApi = inject(DiscussionApi);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translateService = inject(TranslateService);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly confirmationService = inject(ConfirmationService);\n protected readonly layoutService = inject(LayoutService);\n\n @Input({required: true}) objectTypeId = 1;\n @Input({required: true}) objectId = 1;\n\n comments: DiscussionComment[] = [];\n loading = false;\n submitting = false;\n previewMode = false;\n newComment = '';\n editContent = '';\n editingCommentId: number | null = null;\n pendingFiles: File[] = [];\n mentionSuggestions: DiscussionMentionUser[] = [];\n historyByComment: Record<number, HistoryState> = {};\n emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];\n private mentionSearchTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {\n this.loadComments().then();\n }\n }\n\n async ngOnInit() {\n await this.loadComments();\n }\n\n ngOnDestroy(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n }\n\n async loadComments(): Promise<void> {\n if (!this.objectTypeId || !this.objectId) {\n return;\n }\n\n this.loading = true;\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getByObject({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n skip: 0,\n take: 50\n });\n this.comments = items.map((item) => this.normalizeComment(item));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.loadComments'));\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n async createComment(): Promise<void> {\n const content = this.newComment.trim();\n if (!content) {\n return;\n }\n\n this.submitting = true;\n this.cdr.markForCheck();\n\n try {\n const created = await this.discussionApi.create({\n objectTypeId: this.objectTypeId,\n objectId: this.objectId,\n content\n });\n\n if (this.pendingFiles.length > 0) {\n for (const file of this.pendingFiles) {\n await this.discussionApi.uploadAttachment({\n CommentId: created.commentId as number,\n File: file\n });\n }\n }\n\n this.newComment = '';\n this.pendingFiles = [];\n this.previewMode = false;\n this.mentionSuggestions = [];\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.createComment'));\n } finally {\n this.submitting = false;\n this.cdr.markForCheck();\n }\n }\n\n startEdit(comment: DiscussionComment): void {\n this.editingCommentId = comment.commentId;\n this.editContent = comment.content;\n }\n\n cancelEdit(): void {\n this.editingCommentId = null;\n this.editContent = '';\n }\n\n async saveEdit(comment: DiscussionComment): Promise<void> {\n try {\n const updated = await this.discussionApi.update(\n {id: comment.commentId},\n {content: this.editContent.trim()}\n );\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId ? this.normalizeComment(updated) : item\n );\n this.cancelEdit();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.updateComment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n deleteComment(comment: DiscussionComment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteComment'),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteComment(comment);\n }\n });\n }\n\n async toggleHistory(comment: DiscussionComment): Promise<void> {\n const current = this.historyByComment[comment.commentId];\n if (current?.opened) {\n this.historyByComment[comment.commentId] = {...current, opened: false};\n return;\n }\n\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: true,\n items: current?.items ?? []\n };\n this.cdr.markForCheck();\n\n try {\n const items = await this.discussionApi.getHistory({id: comment.commentId});\n this.historyByComment[comment.commentId] = {\n opened: true,\n loading: false,\n items: items.map((item) => this.normalizeHistoryItem(item))\n };\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.loadEditHistory'));\n this.historyByComment[comment.commentId] = {\n opened: false,\n loading: false,\n items: []\n };\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onFilesSelected(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.pendingFiles = [...this.pendingFiles, ...Array.from(input.files ?? [])];\n input.value = '';\n }\n\n removePendingFile(file: File): void {\n this.pendingFiles = this.pendingFiles.filter((item) => item !== file);\n }\n\n async onInlineFilesSelected(comment: DiscussionComment, event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n input.value = '';\n\n try {\n for (const file of files) {\n await this.discussionApi.uploadAttachment({\n CommentId: comment.commentId,\n File: file\n });\n }\n await this.loadComments();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.uploadAttachment'));\n this.cdr.markForCheck();\n }\n }\n\n deleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): void {\n this.confirmationService.confirm({\n header: this.translateService.instant('discussionComponent.warning'),\n message: this.translateService.instant('discussionComponent.confirmDeleteFile', { fileName: attachment.fileName }),\n icon: 'pi pi-trash',\n rejectButtonProps: {\n label: this.translateService.instant('discussionComponent.cancel'),\n severity: 'secondary',\n outlined: true\n },\n acceptButtonProps: {\n label: this.translateService.instant('discussionComponent.delete'),\n severity: 'danger'\n },\n accept: async () => {\n await this.performDeleteAttachment(comment, attachment);\n }\n });\n }\n\n private async performDeleteComment(comment: DiscussionComment): Promise<void> {\n try {\n await this.discussionApi.delete({id: comment.commentId});\n this.comments = this.comments.filter((item) => item.commentId !== comment.commentId);\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.deleteComment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async performDeleteAttachment(comment: DiscussionComment, attachment: DiscussionAttachment): Promise<void> {\n try {\n await this.discussionApi.deleteAttachment({id: attachment.attachmentId});\n this.comments = this.comments.map((item) =>\n item.commentId === comment.commentId\n ? {...item, attachments: item.attachments.filter((entry) => entry.attachmentId !== attachment.attachmentId)}\n : item\n );\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.deleteAttachment'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async downloadAttachment(attachment: DiscussionAttachment): Promise<void> {\n try {\n const blob = (await this.discussionApi.getAttachmentContent(\n {id: attachment.attachmentId},\n {format: 'blob'}\n )) as unknown as Blob;\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = attachment.fileName;\n link.click();\n URL.revokeObjectURL(url);\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.downloadAttachment'));\n this.cdr.markForCheck();\n }\n }\n\n async toggleReaction(comment: DiscussionComment, reaction: DiscussionReaction): Promise<void> {\n try {\n const reactions = reaction.reactedByCurrentUser\n ? await this.discussionApi.removeReaction({commentId: comment.commentId, emojiCode: reaction.emojiCode})\n : await this.discussionApi.addReaction({commentId: comment.commentId, emojiCode: reaction.emojiCode});\n this.applyReactions(comment.commentId, reactions.map((item) => this.normalizeReaction(item)));\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.updateReaction'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n async reactWithEmoji(comment: DiscussionComment, emojiCode: string, popover?: { hide: () => void }): Promise<void> {\n try {\n const reactions = await this.discussionApi.addReaction({commentId: comment.commentId, emojiCode});\n this.applyReactions(comment.commentId, reactions.map((item) => this.normalizeReaction(item)));\n popover?.hide();\n } catch (error) {\n this.msgService.errorFromException(error, this.translateService.instant('discussionComponent.errors.addReaction'));\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n onComposerInput(): void {\n if (this.mentionSearchTimer) {\n clearTimeout(this.mentionSearchTimer);\n }\n\n const token = this.extractMentionQuery(this.newComment);\n if (!token || token.length < 2) {\n this.mentionSuggestions = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.mentionSearchTimer = setTimeout(async () => {\n try {\n const users = await this.discussionApi.searchMentionUsers({term: token});\n this.mentionSuggestions = users.map((item) => this.normalizeMentionUser(item));\n } catch {\n this.mentionSuggestions = [];\n } finally {\n this.cdr.markForCheck();\n }\n }, 250);\n }\n\n insertMention(candidate: DiscussionMentionUser): void {\n const query = this.extractMentionQuery(this.newComment);\n if (!query) {\n return;\n }\n\n this.newComment = this.newComment.replace(/@[\\w.+\\-@]*$/, `@${candidate.email} `);\n this.mentionSuggestions = [];\n }\n\n renderMarkdown(markdown: string): string {\n const escaped = markdown.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n const html = escaped\n .replace(/^### (.*)$/gm, '<h3>$1</h3>')\n .replace(/^## (.*)$/gm, '<h2>$1</h2>')\n .replace(/^# (.*)$/gm, '<h1>$1</h1>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/`(.+?)`/g, '<code>$1</code>')\n .replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^\\s]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener\">$1</a>')\n .replace(/(^|\\s)@([A-Za-z0-9._+\\-@]+)/g, '$1<span class=\"mention-token\">@$2</span>')\n .replace(/\\n/g, '<br>');\n\n return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';\n }\n\n formatBytes(value: number): string {\n if (value < 1024) {\n return `${value} ${this.translateService.instant('discussionComponent.units.bytes')}`;\n }\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(1)} ${this.translateService.instant('discussionComponent.units.kilobytes')}`;\n }\n return `${(value / (1024 * 1024)).toFixed(1)} ${this.translateService.instant('discussionComponent.units.megabytes')}`;\n }\n\n hasUserReaction(comment: DiscussionComment): boolean {\n return comment.reactions.some((reaction) => reaction.reactedByCurrentUser);\n }\n\n getReactions(comment: DiscussionComment): DiscussionReaction[] {\n return comment.reactions;\n }\n\n private applyReactions(commentId: number, reactions: DiscussionReaction[]): void {\n this.comments = this.comments.map((item) => (item.commentId === commentId ? {...item, reactions} : item));\n }\n\n private normalizeComment(comment: CommentDto): DiscussionComment {\n return {\n ...comment,\n commentId: comment.commentId ?? 0,\n content: comment.content ?? '',\n authorDisplayName: comment.authorDisplayName ?? '',\n authorEmail: comment.authorEmail ?? '',\n isEdited: comment.isEdited ?? false,\n historyCount: comment.historyCount ?? 0,\n canEdit: comment.canEdit ?? false,\n canDelete: comment.canDelete ?? false,\n attachments: (comment.attachments ?? []).map((item) => this.normalizeAttachment(item)),\n reactions: (comment.reactions ?? []).map((item) => this.normalizeReaction(item))\n };\n }\n\n private normalizeAttachment(attachment: AttachmentDto): DiscussionAttachment {\n return {\n attachmentId: attachment.attachmentId ?? 0,\n fileName: attachment.fileName ?? '',\n fileType: attachment.fileType ?? '',\n fileSize: attachment.fileSize ?? 0,\n uploadedAt: attachment.uploadedAt ?? new Date(0),\n storageFileId: attachment.storageFileId ?? '',\n downloadUrl: attachment.downloadUrl ?? ''\n };\n }\n\n private normalizeReaction(reaction: CommentReactionDto): DiscussionReaction {\n return {\n emojiCode: reaction.emojiCode ?? '',\n count: reaction.count ?? 0,\n reactedByCurrentUser: reaction.reactedByCurrentUser ?? false\n };\n }\n\n private normalizeMentionUser(user: MentionUserDto): DiscussionMentionUser {\n return {\n userId: user.userId ?? 0,\n displayName: user.displayName ?? '',\n email: user.email ?? ''\n };\n }\n\n private normalizeHistoryItem(item: CommentHistoryDto): DiscussionHistoryItem {\n return {\n commentEditHistoryId: item.commentEditHistoryId ?? 0,\n oldContent: item.oldContent ?? '',\n newContent: item.newContent ?? '',\n editedByUserId: item.editedByUserId ?? 0,\n editedByDisplayName: item.editedByDisplayName ?? '',\n editedAt: item.editedAt ?? new Date(0)\n };\n }\n\n private extractMentionQuery(value: string): string | null {\n const match = value.match(/@([A-Za-z0-9._+\\-@]*)$/);\n return match?.[1] ?? null;\n }\n\n protected readonly getInitialsFromString = getInitialsFromString;\n}\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 * as signalR from '@microsoft/signalr';\nimport { SecurityService } from './security.service';\nimport { inject, Injectable } from '@angular/core';\nimport { MsgService } from './msg.service';\nimport { OIP_FRONTEND_CONFIG } from './frontend-config';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService {\n private connection: signalR.HubConnection;\n private securityService = inject(SecurityService);\n private msgService = inject(MsgService);\n private frontendConfig = inject(OIP_FRONTEND_CONFIG);\n private securityData: string;\n\n constructor() {\n this.securityService.getAccessToken().subscribe((token) => {\n this.securityData = token;\n if (token) {\n this.connection.stop().then(() => {\n this.connection.start().then();\n });\n }\n });\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(this.resolveHubUrl(), {\n accessTokenFactory: () => this.securityData,\n skipNegotiation: true,\n transport: signalR.HttpTransportType.WebSockets\n })\n .configureLogging(signalR.LogLevel.Error)\n .build();\n\n this.connection.on('ReceiveNotification', (notification) => {\n const opt = {\n severity: notification.severity,\n summary: notification.subject,\n detail: notification.message,\n life: 0\n };\n this.msgService.add(opt);\n });\n }\n\n private resolveHubUrl(): string {\n if (this.frontendConfig.notificationHubUrl) {\n return this.frontendConfig.notificationHubUrl;\n }\n\n if (this.frontendConfig.apiBaseUrl) {\n return `${this.frontendConfig.apiBaseUrl.replace(/\\/$/, '')}/hubs/notification`;\n }\n\n return '/hubs/notification';\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FilterMetadata } from 'primeng/api';\r\nimport { Table } from 'primeng/table';\r\n\r\n/**\r\n * Prime-ng table filter service\r\n */\r\n@Injectable()\r\nexport class TableFilterService {\r\n public filterState: { [field: string]: boolean } = {};\r\n private filtersState = new BehaviorSubject<boolean>(false);\r\n public filtersState$ = this.filtersState.asObservable();\r\n\r\n /**\r\n * Updates filter state\r\n * @param filters\r\n */\r\n public updateFiltersState(filters: any) {\r\n const hasFilters = Object.values(filters).some((filterArray: any) => {\r\n if (Array.isArray(filterArray)) {\r\n return filterArray.some((filter) => !!filter.value);\r\n }\r\n return false;\r\n });\r\n this.filtersState.next(hasFilters);\r\n }\r\n\r\n /**\r\n * Checks if a filter is active\r\n * @param {FilterMetadata | FilterMetadata[]} filter\r\n * @return {boolean}\r\n */\r\n public isFilterActive(filter: FilterMetadata | FilterMetadata[]): boolean {\r\n if (!filter) return false;\r\n\r\n if (Array.isArray(filter)) {\r\n return filter.some((f) => !!f.value && f.matchMode !== 'unspecified');\r\n } else {\r\n return !!filter.value && filter.matchMode !== 'unspecified';\r\n }\r\n }\r\n\r\n /**\r\n * Checks the state of table filters\r\n * @param {Table} table\r\n * @param {FilterMetadata | FilterMetadata[]} filters\r\n */\r\n public updateFilterFieldStates(table: Table, filters: FilterMetadata | FilterMetadata[]) {\r\n if (table && filters) {\r\n Object.keys(filters).forEach((field) => {\r\n const filter = filters[field];\r\n this.filterState[field] = this.isFilterActive(filter);\r\n });\r\n }\r\n this.updateFiltersState(filters);\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\nexport { BaseModuleComponent } from './components/base-module.component';\nexport { SecurityComponent } from './components/security.component';\nexport { AppTopbar } from './components/top-bar.component';\nexport { FooterComponent } from './components/footer.component';\nexport { MenuComponent } from './components/menu/menu.component';\nexport { AppLayoutComponent } from './components/app.layout.component';\nexport { SidebarComponent } from './components/sidebar.component';\nexport { LogoComponent } from './components/logo.component';\nexport { NotfoundComponent } from './components/notfound.component';\nexport { UnauthorizedComponent } from './components/auth/unauthorized/unauthorized.component';\nexport { ErrorComponent } from './components/auth/error/error.component';\nexport { ProfileComponent } from './components/profile.component';\nexport { ConfigComponent } from './components/config.component';\nexport { DbMigrationComponent } from './components/db-migration.component';\nexport { AppModulesComponent } from './components/app-modules.component';\nexport { AppConfiguratorComponent } from './components/app-configurator.component';\nexport { AppFloatingConfiguratorComponent } from './components/app-floating-configurator.component';\nexport { DiscussionComponent } from './components/discussion.component';\n\n// DTOs\nexport { TopBarDto } from './dtos/top-bar.dto';\nexport { SecurityDto } from './dtos/security.dto';\nexport { PutSecurityDto } from './dtos/put-security.dto';\nexport { NoSettingsDto } from './dtos/no-settings.dto';\n\n// Services\nexport { BaseDataService } from './services/base-data.service';\nexport { TopBarService } from './services/top-bar.service';\nexport { SecurityService, KeycloakSecurityService } from './services/security.service';\nexport { SecurityDataService } from './services/security-data.service';\nexport { MsgService } from './services/msg.service';\nexport { AuthGuardService } from './services/auth-guard.service';\nexport { AppConfig, LayoutService } from './services/app.layout.service';\nexport { MenuService } from './services/app.menu.service';\nexport { UserService } from './services/user.service';\nexport { SecurityStorageService } from './services/security-storage.service';\nexport { L10nService, LanguageDto } from './services/l10n.service';\nexport { provideLogoComponent, LogoService, LOGO_COMPONENT_TOKEN } from './services/logo.service';\nexport { NotificationService } from './services/notification.service';\nexport { TableFilterService } from './services/table-filter.service';\nexport {\n DEFAULT_OIP_FRONTEND_CONFIG,\n OIP_FRONTEND_CONFIG,\n OipFrontendConfig,\n OipFrontendAppMode\n} from './services/frontend-config';\n\n// Events\nexport { MenuChangeEvent } from './events/menu-change.event';\n\n// other\nexport { langIntercept } from './intercepts/i18n-intercept.service';\nexport { SecurePipe } from './modules/secure.pipe';\nexport { httpLoaderAuthFactory } from './modules/http-loader.factory';\nexport { ContentType, HttpClient, RequestParams } from './api/http-client';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["HttpClient","i3","i1","i2","i4","i2.MenuService","i5","filter","i1.L10nService","i10","map"],"mappings":"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"}