@platform-mesh/portal-ui-lib 0.52.0 → 0.52.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.
- package/assets/platform-mesh-portal-ui-wc.js +41 -40
- package/fesm2022/platform-mesh-portal-ui-lib-models.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs +70 -41
- package/fesm2022/platform-mesh-portal-ui-lib-portal-options.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs +70 -25
- package/fesm2022/platform-mesh-portal-ui-lib-services.mjs.map +1 -1
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs +15 -1
- package/fesm2022/platform-mesh-portal-ui-lib-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/types/platform-mesh-portal-ui-lib-models.d.ts +48 -31
- package/types/platform-mesh-portal-ui-lib-portal-options.d.ts +4 -5
- package/types/platform-mesh-portal-ui-lib-services.d.ts +42 -4
- package/types/platform-mesh-portal-ui-lib-utils.d.ts +16 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-mesh-portal-ui-lib-portal-options.mjs","sources":["../../projects/lib/portal-options/services/custom-global-nodes.service.ts","../../projects/lib/portal-options/services/header-bar-renderers/breadcrumb-renderer.ts","../../projects/lib/portal-options/services/header-bar-renderers/namespace-selection-renderer.service.ts","../../projects/lib/portal-options/services/header-bar-config.service.ts","../../projects/lib/portal-options/services/luigi-extended-global-context-config.service.ts","../../projects/lib/portal-options/services/navigation-redirect-strategy.service.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.types.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.html","../../projects/lib/portal-options/persistent-panel/persistent-panel.service.ts","../../projects/lib/portal-options/utils/account-hierarchy.util.ts","../../projects/lib/portal-options/services/crd-gateway-kcp-patch-resolver.service.ts","../../projects/lib/portal-options/services/node-change-hook-config.service.ts","../../projects/lib/portal-options/services/node-context-processing.service.ts","../../projects/lib/portal-options/services/router-config.service.ts","../../projects/lib/portal-options/services/user-profile-config.service.ts","../../projects/lib/portal-options/persistent-panel/open-persistent-panel.listener.ts","../../projects/lib/portal-options/platform-mesh-portal-ui-lib-portal-options.ts"],"sourcesContent":["import { PortalNodeContext } from '../models/luigi-context';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport { Injectable, inject } from '@angular/core';\nimport {\n CustomGlobalNodesService,\n EntityType,\n I18nService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomGlobalNodesServiceImpl implements CustomGlobalNodesService {\n private i18nService = inject(I18nService);\n\n async getCustomGlobalNodes(): Promise<PortalLuigiNode[]> {\n return [\n {\n pathSegment: 'error',\n order: 1000,\n hideFromNav: true,\n showBreadcrumbs: false,\n context: {} as PortalNodeContext,\n children: [\n {\n pathSegment: ':id',\n entityType: EntityType.ENTITY_ERROR,\n hideFromNav: true,\n hideSideNav: true,\n viewUrl: '/assets/platform-mesh-portal-ui-wc.js#error-component',\n context: {\n id: ':id',\n translationTable: this.i18nService.translationTable,\n } as any as NodeContext,\n webcomponent: {\n selfRegistered: true,\n },\n },\n ],\n },\n {\n pathSegment: 'users',\n showBreadcrumbs: false,\n hideSideNav: true,\n hideFromNav: true,\n context: {} as PortalNodeContext,\n entityType: 'global',\n children: [\n {\n pathSegment: ':userId',\n hideSideNav: true,\n hideFromNav: true,\n defineEntity: {\n id: 'user',\n },\n context: {\n userId: ':userId',\n } as PortalNodeContext,\n children: [\n {\n pathSegment: 'overview',\n context: {} as PortalNodeContext,\n hideSideNav: true,\n hideFromNav: true,\n defineEntity: {\n id: 'overview',\n },\n compound: {\n children: [],\n },\n },\n ],\n },\n ],\n },\n ];\n }\n}\n","import '@ui5/webcomponents/dist/Breadcrumbs.js';\nimport '@ui5/webcomponents/dist/BreadcrumbsItem.js';\n\nexport const breadcrumbRenderer = (\n containerElement: HTMLElement,\n nodeItems: any[],\n clickHandler: (item: any) => void,\n): HTMLElement => {\n containerElement.style.width = '100%';\n\n const ui5breadcrumbs = document.createElement('ui5-breadcrumbs');\n ui5breadcrumbs.setAttribute('separators', 'Slash');\n containerElement.appendChild(ui5breadcrumbs);\n\n nodeItems.forEach((item) => {\n if (item.node?.hideFromBreadcrumb) {\n return;\n }\n\n const itemCmp = document.createElement('ui5-breadcrumbs-item');\n itemCmp.textContent = item.label ?? '';\n (itemCmp as any)._item = item;\n ui5breadcrumbs.appendChild(itemCmp);\n });\n\n ui5breadcrumbs.addEventListener('item-click', (event: any) => {\n if (\n !(\n event.detail.ctrlKey ||\n event.detail.altKey ||\n event.detail.shiftKey ||\n event.detail.metaKey\n )\n ) {\n event.preventDefault();\n clickHandler(event.detail.item._item);\n }\n });\n\n return ui5breadcrumbs;\n};\n","import { DestroyRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AuthService,\n LuigiCoreService,\n LuigiNode,\n PortalConfig,\n} from '@openmfp/portal-ui-lib';\nimport {\n ALL_NAMESPACE,\n PlatformMeshFieldDefinition,\n Resource,\n ResourceDefinition,\n ResourceListResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n ResourceNodeContext,\n ResourceService,\n} from '@platform-mesh/portal-ui-lib/services';\nimport {\n generateGraphQLFields,\n isNamespacedResource,\n mergeListWithSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport '@ui5/webcomponents/dist/ComboBox.js';\nimport { Observable, Subject, defer, of } from 'rxjs';\nimport {\n catchError,\n retry,\n scan,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nconst defaultColumns: PlatformMeshFieldDefinition[] = [\n {\n label: 'Name',\n property: 'metadata.name',\n },\n];\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceSelectionRendererService {\n private namespaceResourcesCache?: {\n key: string;\n value$: Observable<Resource[]>;\n stop$: Subject<void>;\n };\n\n private resourceService = inject(ResourceService);\n private authService = inject(AuthService);\n private luigiCoreService = inject(LuigiCoreService);\n private destroyRef = inject(DestroyRef);\n\n public create(portalConfig: PortalConfig) {\n return (\n containerElement: HTMLElement,\n nodeItems: any[],\n _clickHandler: any,\n ) => {\n containerElement.style.paddingBottom = '0.5rem';\n\n const lastNode = nodeItems.at(-1)?.node as LuigiNode | undefined;\n const namespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n const kcpPath = lastNode?.context?.kcpPath;\n\n if (lastNode?.context && !isNamespacedResource(lastNode.context)) {\n return containerElement;\n }\n\n const ui5combobox = this.createCombobox(containerElement);\n\n this.addComboboxItems(portalConfig, ui5combobox, namespace, kcpPath);\n\n ui5combobox.addEventListener('change', (event: any) => {\n const value = (event?.target as any)?.value.trim() ?? '';\n this.changeNamespace(value);\n });\n\n return ui5combobox as HTMLElement;\n };\n }\n\n private createCombobox(containerElement: HTMLElement) {\n const ui5combobox = document.createElement('ui5-combobox');\n ui5combobox.setAttribute('placeholder', 'Namespaces');\n ui5combobox.setAttribute('data-testid', 'namespace-selection-combobox');\n containerElement.appendChild(ui5combobox);\n\n return ui5combobox;\n }\n\n private addComboboxItems(\n portalConfig: PortalConfig,\n ui5combobox: HTMLElement,\n namespace: string | null,\n kcpPath?: string,\n ) {\n this.getNamespaceResourcesCached(portalConfig, kcpPath).subscribe(\n (resources) => {\n this.syncComboboxItems(ui5combobox, resources);\n this.setSelectedValue(ui5combobox, resources, namespace);\n },\n );\n }\n\n private getNamespaceResourcesCached(\n portalConfig: PortalConfig,\n kcpPath?: string,\n ): Observable<Resource[]> {\n const cacheKey = this.getNamespaceResourcesCacheKey(kcpPath);\n if (this.namespaceResourcesCache?.key === cacheKey) {\n return this.namespaceResourcesCache.value$;\n }\n\n if (this.namespaceResourcesCache) {\n this.namespaceResourcesCache.stop$.next();\n this.namespaceResourcesCache.stop$.complete();\n this.namespaceResourcesCache = undefined;\n }\n\n const stop$ = new Subject<void>();\n const value$ = this.getNamespaceResources(\n portalConfig,\n kcpPath,\n stop$,\n ).pipe(shareReplay(1), takeUntilDestroyed(this.destroyRef));\n this.namespaceResourcesCache = {\n key: cacheKey,\n value$,\n stop$,\n };\n\n return value$;\n }\n\n private getNamespaceResourcesCacheKey(kcpPath?: string): string {\n return kcpPath ?? '';\n }\n\n private syncComboboxItems(ui5combobox: HTMLElement, resources: Resource[]) {\n ui5combobox.replaceChildren();\n\n resources.forEach((resource) => {\n const name = resource.metadata?.name;\n if (!name) {\n return;\n }\n const resourceOption = document.createElement('ui5-cb-item');\n resourceOption.setAttribute('text', name);\n resourceOption.setAttribute(\n 'data-testid',\n `namespace-selection-combobox-item-${name}`,\n );\n ui5combobox.appendChild(resourceOption);\n });\n\n const allOption = document.createElement('ui5-cb-item');\n allOption.setAttribute('text', ALL_NAMESPACE);\n allOption.setAttribute(\n 'data-testid',\n 'namespace-selection-combobox-item-all',\n );\n ui5combobox.appendChild(allOption);\n }\n\n private setSelectedValue(\n ui5combobox: HTMLElement,\n resources: Resource[],\n namespace: string | null,\n ) {\n const currentNamespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (currentNamespace) {\n ui5combobox.setAttribute('value', currentNamespace);\n return;\n }\n\n if (\n namespace &&\n resources.find((resource) => resource.metadata?.name === namespace)\n ) {\n ui5combobox.setAttribute('value', namespace);\n } else {\n ui5combobox.setAttribute('value', ALL_NAMESPACE);\n this.changeNamespace(ALL_NAMESPACE);\n }\n }\n\n private getNamespaceResources(\n portalConfig: PortalConfig,\n kcpPath: string | undefined,\n stop$: Subject<void>,\n ): Observable<Resource[]> {\n const operation = 'v1_namespaces';\n const fields = generateGraphQLFields(defaultColumns);\n const context = {\n portalContext: {\n crdGatewayApiUrl: portalConfig.portalContext['crdGatewayApiUrl'],\n },\n resourceDefinition: {\n version: 'v1',\n entityCollection: 'Namespaces',\n entity: 'Namespace',\n scope: 'Cluster',\n } as ResourceDefinition,\n kcpPath,\n token: this.authService.getToken(),\n } as ResourceNodeContext;\n\n return defer(() =>\n this.resourceService.list(operation, fields, context),\n ).pipe(\n retry(3),\n takeUntil(stop$),\n switchMap((result: ResourceListResult) =>\n this.resourceService\n .resourceChangeSubscription(\n operation,\n fields,\n context,\n result.resourceVersion,\n false,\n )\n .pipe(\n startWith(undefined),\n scan(\n (resources, subscriptionResult) =>\n mergeListWithSubscriptionResult(resources, subscriptionResult, {\n getItemKey: (resource) => resource.metadata?.name,\n mapSubscriptionObjectToItem: (object) => object,\n }),\n result.items,\n ),\n tap((result) => {\n const namespaces = result.map((e) => e.metadata?.name);\n this.luigiCoreService.setInGlobalContext({ namespaces });\n }),\n takeUntil(stop$),\n ),\n ),\n catchError((error) => {\n console.error(`Failed to read entities from ${operation}`, error);\n return of([]);\n }),\n );\n }\n\n private changeNamespace(value: string): void {\n if (!value) {\n return;\n }\n\n const oldValue = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (oldValue === value) {\n return;\n }\n\n this.luigiCoreService.routing().addSearchParams({ namespace: value });\n }\n}\n","import { breadcrumbRenderer } from './header-bar-renderers/breadcrumb-renderer';\nimport { NamespaceSelectionRendererService } from './header-bar-renderers/namespace-selection-renderer.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ConfigService,\n HeaderBarConfig,\n HeaderBarConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HeaderBarConfigServiceImpl implements HeaderBarConfigService {\n private configService = inject(ConfigService);\n private namespaceSelectionRendererService = inject(\n NamespaceSelectionRendererService,\n );\n\n public async getConfig(): Promise<HeaderBarConfig> {\n const portalConfig = await this.configService.getPortalConfig();\n\n return {\n pendingItemLabel: '...',\n omitRoot: false,\n clearBeforeRender: true,\n autoHide: true,\n leftRenderers: [breadcrumbRenderer],\n rightRenderers: [\n this.namespaceSelectionRendererService.create(portalConfig),\n ],\n };\n }\n}\n","import { kcpRootOrgsPath } from '../models/constants';\nimport { Injectable, inject } from '@angular/core';\nimport {\n EnvConfigService,\n LuigiExtendedGlobalContextConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class LuigiExtendedGlobalContextConfigServiceImpl implements LuigiExtendedGlobalContextConfigService {\n private envConfigService = inject(EnvConfigService);\n\n async createLuigiExtendedGlobalContext(): Promise<Record<string, any>> {\n const idpName = (await this.envConfigService.getEnvConfig()).idpName;\n\n if (idpName === 'welcome') {\n return {};\n }\n\n return {\n organization: idpName,\n kcpPath: `${kcpRootOrgsPath}:${idpName}`,\n entityName: idpName,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n LocalStorageKeys,\n NavigationRedirectStrategy,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationRedirectStrategyServiceImpl implements NavigationRedirectStrategy {\n getRedirectUrl(): string {\n return localStorage.getItem(LocalStorageKeys.LAST_NAVIGATION_URL) || '';\n }\n\n saveRedirectUrl(url: string): void {\n if (url.startsWith('/error')) {\n return;\n }\n\n localStorage.setItem(LocalStorageKeys.LAST_NAVIGATION_URL, url);\n }\n\n clearRedirectUrl(): void {\n localStorage.removeItem(LocalStorageKeys.LAST_NAVIGATION_URL);\n }\n}\n","import type { NodeContext } from '@openmfp/portal-ui-lib';\n\nexport const OPEN_PERSISTENT_PANEL_MESSAGE = 'portal.open-provider-panel';\n\nexport const PROVIDER_PANEL_MESSAGE = {\n close: 'portal.provider-panel.close',\n closeFailed: 'portal.provider-panel.close-failed',\n closed: 'portal.provider-panel.closed',\n context: 'portal.provider-panel.context',\n ready: 'portal.provider-panel.ready',\n requestClose: 'portal.provider-panel.request-close',\n} as const;\n\nexport interface PersistentPanelConfig {\n id: string;\n title: string;\n url: string;\n origin: string;\n}\n\nexport interface PersistentPanelTarget {\n organization?: string;\n organizationId?: string;\n account?: string;\n accountPath?: string;\n workspacePath?: string;\n namespace?: string;\n resource?: {\n group?: string;\n version?: string;\n kind?: string;\n name?: string;\n };\n}\n\nexport interface RegisteredProviderNode {\n viewUrl?: string;\n context?: Partial<NodeContext> & {\n persistentPanel?: unknown;\n };\n}\n\nexport function mergePersistentPanelTargets(\n current: PersistentPanelTarget,\n update: PersistentPanelTarget,\n): PersistentPanelTarget {\n const organizationChanged =\n current.organization !== undefined &&\n update.organization !== undefined &&\n current.organization !== update.organization;\n const accountChanged =\n current.account !== undefined &&\n update.account !== undefined &&\n current.account !== update.account;\n\n if (organizationChanged || accountChanged) {\n return structuredClone(update);\n }\n\n // Provider nodes normally contain only panel capability metadata. Keep the\n // target tracked by navigation and overlay any bounded scope that the\n // requesting node does carry.\n return structuredClone({ ...current, ...update });\n}\n\ninterface OpenPanelMessage extends Record<string, unknown> {\n id: string;\n}\n\nconst panelIdPattern = /^[a-z0-9](?:[a-z0-9.-]{0,62}[a-z0-9])?$/;\nconst workspaceSegmentPattern = /^[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$/;\n\nexport function parsePersistentPanelConfig(\n message: OpenPanelMessage,\n providerNode: RegisteredProviderNode | undefined,\n portalOrigin: string,\n): PersistentPanelConfig {\n if (message.id !== OPEN_PERSISTENT_PANEL_MESSAGE) {\n throw new Error('Persistent panel request is invalid');\n }\n\n const capability = recordValue(providerNode?.context?.persistentPanel);\n const id = boundedString(capability['id'], 64);\n const title = boundedString(capability['title'], 80);\n if (!id || !panelIdPattern.test(id)) {\n throw new Error('Registered persistent panel id is invalid');\n }\n if (!title) {\n throw new Error('Registered persistent panel title is invalid');\n }\n\n const registeredViewUrl = boundedString(providerNode?.viewUrl, 2048);\n if (!registeredViewUrl) {\n throw new Error('Registered provider UI URL is missing');\n }\n\n const portalURL = new URL(portalOrigin);\n const url = new URL(registeredViewUrl, portalURL);\n if (\n url.origin === portalURL.origin ||\n !allowedPanelURL(url, portalURL) ||\n url.username ||\n url.password\n ) {\n throw new Error('Registered provider UI URL is invalid');\n }\n\n return { id, title, url: url.toString(), origin: url.origin };\n}\n\nfunction allowedPanelURL(url: URL, portalURL: URL): boolean {\n if (url.protocol === 'https:') {\n return true;\n }\n return (\n portalURL.protocol === 'http:' &&\n url.protocol === 'http:' &&\n ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname)\n );\n}\n\nexport function persistentPanelTarget(\n globalContext: Record<string, unknown>,\n nodeContext?: NodeContext | Record<string, unknown>,\n): PersistentPanelTarget {\n const context = { ...globalContext, ...(nodeContext ?? {}) };\n const entityContext = recordValue(context['entityContext']);\n const accountContext = recordValue(entityContext['account']);\n const resourceDefinition = recordValue(context['resourceDefinition']);\n\n const organization = boundedString(context['organization'], 253);\n const organizationId = boundedString(context['organizationId'], 512);\n const rawAccountPath = boundedString(context['accountPath'], 1024);\n const account =\n boundedString(accountContext['id'], 253) ||\n boundedString(context['accountId'], 253) ||\n boundedString(context['core_platform-mesh_io_accountId'], 253) ||\n accountFromPath(rawAccountPath, organization) ||\n accountFromEntity(context);\n\n // Organization-only scope is valid, but descendants without an account are\n // not. Organization context can carry a kcpPath, so fail closed before\n // projecting workspace fields.\n if (!account) {\n return compact({ organization, organizationId });\n }\n\n const accountPath = validatedAccountPath(\n rawAccountPath,\n organization,\n account,\n );\n\n const workspacePath =\n validatedWorkspacePath(context['workspacePath'], organization, account) ||\n validatedWorkspacePath(context['kcpPath'], organization, account) ||\n validatedWorkspacePath(rawAccountPath, organization, account) ||\n canonicalAccountPath(organization, account);\n const namespace =\n boundedString(context['namespaceId'], 253) ||\n boundedString(resourceDefinition['namespace'], 253);\n const resource = compact({\n group:\n boundedString(resourceDefinition['group'], 253) ||\n boundedString(resourceDefinition['apiGroup'], 253),\n version: boundedString(resourceDefinition['version'], 63),\n kind:\n boundedString(resourceDefinition['kind'], 253) ||\n boundedString(context['entityKind'], 253),\n name: boundedString(context['entityName'], 253),\n });\n\n return compact({\n organization,\n organizationId,\n account,\n accountPath,\n workspacePath,\n namespace,\n resource: Object.keys(resource).length > 0 ? resource : undefined,\n });\n}\n\nfunction accountFromPath(\n accountPath: string | undefined,\n organization: string | undefined,\n): string | undefined {\n if (!accountPath) {\n return undefined;\n }\n if (workspaceSegmentPattern.test(accountPath)) {\n return accountPath;\n }\n const segments = accountPath.split(':');\n if (\n segments.length < 4 ||\n segments[0] !== 'root' ||\n segments[1] !== 'orgs' ||\n segments.some((segment) => !workspaceSegmentPattern.test(segment)) ||\n (organization !== undefined && segments[2] !== organization)\n ) {\n return undefined;\n }\n return boundedString(segments.at(-1), 253);\n}\n\nfunction accountFromEntity(\n context: Record<string, unknown>,\n): string | undefined {\n if (boundedString(context['entityKind'], 253) !== 'Account') {\n return undefined;\n }\n return boundedString(context['entityName'], 253);\n}\n\nfunction canonicalWorkspacePath(\n accountPath: string | undefined,\n): string | undefined {\n if (!accountPath?.startsWith('root:')) {\n return undefined;\n }\n const segments = accountPath.split(':');\n if (\n segments.length < 3 ||\n segments.some((segment) => !workspaceSegmentPattern.test(segment))\n ) {\n return undefined;\n }\n return accountPath;\n}\n\nfunction validatedWorkspacePath(\n value: unknown,\n organization: string | undefined,\n account: string | undefined,\n): string | undefined {\n if (!organization || !account) {\n return undefined;\n }\n const path = canonicalWorkspacePath(boundedString(value, 1024));\n const segments = path?.split(':');\n if (\n !segments ||\n segments.length < 4 ||\n segments[0] !== 'root' ||\n segments[1] !== 'orgs' ||\n segments[2] !== organization ||\n segments.at(-1) !== account\n ) {\n return undefined;\n }\n return path;\n}\n\nfunction validatedAccountPath(\n value: string | undefined,\n organization: string | undefined,\n account: string,\n): string | undefined {\n if (!value) {\n return undefined;\n }\n if (workspaceSegmentPattern.test(value)) {\n return value === account ? value : undefined;\n }\n return validatedWorkspacePath(value, organization, account);\n}\n\nfunction canonicalAccountPath(\n organization: string | undefined,\n account: string | undefined,\n): string | undefined {\n if (\n !organization ||\n !account ||\n !workspaceSegmentPattern.test(organization) ||\n !workspaceSegmentPattern.test(account)\n ) {\n return undefined;\n }\n return `root:orgs:${organization}:${account}`;\n}\n\nfunction compact<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, item]) => item !== undefined),\n ) as T;\n}\n\nfunction boundedString(value: unknown, maxLength: number): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed || trimmed.length > maxLength || trimmed.includes('\\u0000')) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n","import {\n PROVIDER_PANEL_MESSAGE,\n PersistentPanelConfig,\n PersistentPanelTarget,\n} from './persistent-panel.types';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\ntype PanelState = 'hidden' | 'expanded' | 'maximized';\n\nconst PORTAL_MAIN_AREA_SELECTOR = '.iframeContainer';\nconst PORTAL_LAYOUT_SELECTORS = [\n PORTAL_MAIN_AREA_SELECTOR,\n '.spinnerContainer.appSpinner',\n '#splitViewContainer',\n '#splitViewDragger',\n '#splitViewDraggerBackdrop',\n '#tabsContainer',\n].join(',');\n\ninterface InlineStyleValue {\n value: string;\n priority: string;\n}\n\n@Component({\n selector: 'pm-persistent-panel',\n imports: [CommonModule],\n standalone: true,\n templateUrl: './persistent-panel.html',\n styleUrl: './persistent-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PersistentPanelComponent implements OnDestroy {\n @ViewChild('panelFrame') panelFrame?: ElementRef<HTMLIFrameElement>;\n @ViewChild('reopenButton') reopenButton?: ElementRef<HTMLButtonElement>;\n\n private readonly dimensions = panelDimensions();\n private readonly preferredPanelWidth = signal(this.dimensions.defaultWidth);\n\n readonly state = signal<PanelState>('hidden');\n readonly title = signal('');\n readonly source = signal<SafeResourceUrl | null>(null);\n readonly closing = signal(false);\n readonly closeError = signal('');\n readonly resizing = signal(false);\n readonly maxPanelWidth = signal(this.availablePanelWidth());\n readonly minPanelWidth = computed(() =>\n Math.min(this.dimensions.minimumWidth, this.maxPanelWidth()),\n );\n readonly panelWidth = computed(() =>\n Math.max(\n this.minPanelWidth(),\n Math.min(\n this.state() === 'maximized'\n ? this.maxPanelWidth()\n : this.preferredPanelWidth(),\n this.maxPanelWidth(),\n ),\n ),\n );\n\n private readonly sanitizer = inject(DomSanitizer);\n private config: PersistentPanelConfig | null = null;\n private target: PersistentPanelTarget = {};\n private sequence = 0;\n private closeSequence = 0;\n private closeTimeout: number | null = null;\n private closeRequestIdSent: number | null = null;\n private destroyed = false;\n private ready = false;\n private returnFocusElement: HTMLElement | null = null;\n private resizePointerId: number | null = null;\n private observingPortalLayout = false;\n private observedMainArea: HTMLElement | null = null;\n private readonly portalLayoutStyles = new Map<\n HTMLElement,\n InlineStyleValue\n >();\n private readonly portalLayoutObserver = new MutationObserver(() => {\n if (this.state() === 'hidden') {\n return;\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n });\n private readonly mainAreaResizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n if (this.state() === 'hidden') {\n return;\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n });\n\n constructor() {\n window.addEventListener('message', this.onMessage);\n window.addEventListener('resize', this.onWindowResize);\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n window.removeEventListener('message', this.onMessage);\n window.removeEventListener('resize', this.onWindowResize);\n this.clearCloseTimeout();\n this.resizePointerId = null;\n this.resizing.set(false);\n this.portalLayoutObserver.disconnect();\n this.mainAreaResizeObserver?.disconnect();\n this.restorePortalLayout();\n }\n\n open(config: PersistentPanelConfig, target: PersistentPanelTarget): void {\n if (this.closing()) {\n this.closeSequence += 1;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('');\n const sourceChanged = this.config?.url !== config.url;\n if (!this.source()) {\n this.returnFocusElement =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n }\n if (sourceChanged) {\n this.ready = false;\n }\n this.config = config;\n this.target = structuredClone(target);\n this.title.set(config.title);\n if (sourceChanged || !this.source()) {\n this.source.set(\n this.sanitizer.bypassSecurityTrustResourceUrl(config.url),\n );\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.publishTarget();\n this.focusPanel();\n });\n }\n\n updateTarget(target: PersistentPanelTarget): void {\n this.target = structuredClone(target);\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n this.publishTarget();\n }\n\n collapse(): void {\n this.state.set('hidden');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.reopenButton?.nativeElement.focus();\n });\n }\n\n expand(): void {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.focusPanel();\n });\n }\n\n toggleSize(): void {\n this.state.update((state) =>\n state === 'maximized' ? 'expanded' : 'maximized',\n );\n this.syncPortalLayout();\n }\n\n beginResize(event: PointerEvent): void {\n if (\n this.state() !== 'expanded' ||\n event.button !== 0 ||\n event.isPrimary === false\n ) {\n return;\n }\n this.resizePointerId = event.pointerId;\n this.resizing.set(true);\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n event.preventDefault();\n }\n\n resize(event: PointerEvent): void {\n if (event.pointerId !== this.resizePointerId) {\n return;\n }\n this.setPanelWidth(window.innerWidth - event.clientX);\n event.preventDefault();\n }\n\n finishResize(event: PointerEvent): void {\n if (event.pointerId !== this.resizePointerId) {\n return;\n }\n const handle = event.currentTarget as HTMLElement;\n if (handle.hasPointerCapture(event.pointerId)) {\n handle.releasePointerCapture(event.pointerId);\n }\n this.resizePointerId = null;\n this.resizing.set(false);\n event.preventDefault();\n }\n\n resizeWithKeyboard(event: KeyboardEvent): void {\n let width: number;\n switch (event.key) {\n case 'ArrowLeft':\n width = this.panelWidth() + this.dimensions.keyboardStep;\n break;\n case 'ArrowRight':\n width = this.panelWidth() - this.dimensions.keyboardStep;\n break;\n case 'Home':\n width = this.minPanelWidth();\n break;\n case 'End':\n width = this.maxPanelWidth();\n break;\n default:\n return;\n }\n this.setPanelWidth(width);\n event.preventDefault();\n }\n\n close(): void {\n if (!this.source() || this.closing()) {\n return;\n }\n this.closeSequence += 1;\n const requestId = this.closeSequence;\n this.closeRequestIdSent = null;\n this.closing.set(true);\n this.closeError.set('');\n this.state.set('hidden');\n this.syncPortalLayout();\n this.focusReturnTarget();\n this.requestCloseIfReady(requestId);\n this.closeTimeout = window.setTimeout(() => {\n this.failClose(requestId);\n }, 30_000);\n }\n\n private failClose(requestId: number): void {\n if (!this.closing() || requestId !== this.closeSequence) {\n return;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('Provider cleanup is incomplete. Try closing again.');\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.focusPanel();\n });\n }\n\n private finishClose(requestId: number): void {\n if (\n !this.closing() ||\n requestId !== this.closeSequence ||\n this.closeRequestIdSent !== requestId\n ) {\n return;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('');\n this.config = null;\n this.ready = false;\n this.source.set(null);\n this.title.set('');\n this.state.set('hidden');\n this.syncPortalLayout();\n this.focusReturnTarget();\n this.returnFocusElement = null;\n }\n\n private clearCloseTimeout(): void {\n if (this.closeTimeout !== null) {\n window.clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n\n frameLoaded(): void {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n this.publishTarget();\n }\n\n private publishTarget(): void {\n if (!this.config) {\n return;\n }\n this.sequence += 1;\n this.post({\n type: PROVIDER_PANEL_MESSAGE.context,\n panelId: this.config.id,\n sequence: this.sequence,\n target: this.target,\n });\n }\n\n private requestCloseIfReady(requestId: number): void {\n if (\n !this.ready ||\n !this.closing() ||\n requestId !== this.closeSequence ||\n this.closeRequestIdSent === requestId\n ) {\n return;\n }\n this.closeRequestIdSent = requestId;\n this.post({ type: PROVIDER_PANEL_MESSAGE.close, requestId });\n }\n\n private focusPanel(): void {\n this.panelFrame?.nativeElement.focus?.();\n }\n\n private focusReturnTarget(): void {\n if (this.returnFocusElement?.isConnected) {\n this.returnFocusElement.focus();\n }\n }\n\n private post(message: Record<string, unknown>): void {\n if (!this.config) {\n return;\n }\n this.panelFrame?.nativeElement.contentWindow?.postMessage(\n message,\n this.config.origin,\n );\n }\n\n private setPanelWidth(width: number): void {\n this.preferredPanelWidth.set(\n Math.min(Math.max(width, this.minPanelWidth()), this.maxPanelWidth()),\n );\n this.syncPortalLayout();\n }\n\n private availablePanelWidth(): number {\n if (this.isMobileViewport()) {\n return Math.max(1, window.innerWidth);\n }\n return Math.max(1, Math.floor(this.availableMainAreaWidth() / 2));\n }\n\n private availableMainAreaWidth(): number {\n const mainArea = document.querySelector<HTMLElement>(\n PORTAL_MAIN_AREA_SELECTOR,\n );\n if (mainArea) {\n return Math.max(\n 1,\n window.innerWidth - mainArea.getBoundingClientRect().left,\n );\n }\n return Math.max(1, window.innerWidth);\n }\n\n private syncPortalLayout(): void {\n if (this.state() === 'hidden' || this.isMobileViewport()) {\n this.stopObservingPortalLayout();\n this.restorePortalLayout();\n return;\n }\n\n this.observePortalLayout();\n const offset = `${this.panelWidth()}px`;\n document\n .querySelectorAll<HTMLElement>(PORTAL_LAYOUT_SELECTORS)\n .forEach((element) => {\n if (!this.portalLayoutStyles.has(element)) {\n this.portalLayoutStyles.set(element, {\n value: element.style.getPropertyValue('right'),\n priority: element.style.getPropertyPriority('right'),\n });\n }\n element.style.setProperty('right', offset);\n });\n }\n\n private restorePortalLayout(): void {\n this.portalLayoutStyles.forEach(({ value, priority }, element) => {\n if (value) {\n element.style.setProperty('right', value, priority);\n } else {\n element.style.removeProperty('right');\n }\n });\n this.portalLayoutStyles.clear();\n }\n\n private observePortalLayout(): void {\n this.observeMainAreaResize();\n if (this.observingPortalLayout) {\n return;\n }\n this.portalLayoutObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n this.observingPortalLayout = true;\n }\n\n private stopObservingPortalLayout(): void {\n this.portalLayoutObserver.disconnect();\n this.mainAreaResizeObserver?.disconnect();\n this.observedMainArea = null;\n this.observingPortalLayout = false;\n }\n\n private observeMainAreaResize(): void {\n const mainArea = document.querySelector<HTMLElement>(\n PORTAL_MAIN_AREA_SELECTOR,\n );\n if (!this.mainAreaResizeObserver || mainArea === this.observedMainArea) {\n return;\n }\n this.mainAreaResizeObserver.disconnect();\n this.observedMainArea = mainArea;\n if (mainArea) {\n this.mainAreaResizeObserver.observe(mainArea);\n }\n }\n\n private isMobileViewport(): boolean {\n return window.innerWidth <= 600;\n }\n\n private readonly onWindowResize = (): void => {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n };\n\n private readonly onMessage = (event: MessageEvent<unknown>): void => {\n const frame = this.panelFrame?.nativeElement;\n if (\n !frame ||\n event.source !== frame.contentWindow ||\n event.origin !== this.config?.origin ||\n !isRecord(event.data)\n ) {\n return;\n }\n if (event.data['type'] === PROVIDER_PANEL_MESSAGE.ready) {\n this.ready = true;\n if (this.closing()) {\n this.requestCloseIfReady(this.closeSequence);\n } else {\n this.publishTarget();\n }\n }\n if (event.data['type'] === PROVIDER_PANEL_MESSAGE.requestClose) {\n this.close();\n }\n if (\n event.data['type'] === PROVIDER_PANEL_MESSAGE.closeFailed &&\n typeof event.data['requestId'] === 'number' &&\n event.data['requestId'] === this.closeRequestIdSent\n ) {\n this.failClose(event.data['requestId']);\n }\n if (\n event.data['type'] === PROVIDER_PANEL_MESSAGE.closed &&\n typeof event.data['requestId'] === 'number'\n ) {\n this.finishClose(event.data['requestId']);\n }\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction panelDimensions() {\n const rootFontSize = Number.parseFloat(\n window.getComputedStyle(document.documentElement).fontSize,\n );\n const rem =\n Number.isFinite(rootFontSize) && rootFontSize > 0 ? rootFontSize : 16;\n return {\n defaultWidth: 34 * rem,\n minimumWidth: 20 * rem,\n keyboardStep: 2 * rem,\n };\n}\n","<section\n class=\"persistent-panel fd-dialog__content\"\n role=\"complementary\"\n aria-labelledby=\"persistent-panel-title\"\n [attr.aria-hidden]=\"state() === 'hidden'\"\n [class.maximized]=\"state() === 'maximized'\"\n [class.open]=\"state() !== 'hidden'\"\n [class.resizing]=\"resizing()\"\n [style.--pm-panel-width]=\"panelWidth() + 'px'\"\n>\n <div\n class=\"persistent-panel-resizer\"\n role=\"separator\"\n aria-label=\"Resize provider panel\"\n aria-orientation=\"vertical\"\n aria-controls=\"persistent-panel-content\"\n [attr.aria-valuemin]=\"minPanelWidth()\"\n [attr.aria-valuemax]=\"maxPanelWidth()\"\n [attr.aria-valuenow]=\"panelWidth()\"\n tabindex=\"0\"\n (pointerdown)=\"beginResize($event)\"\n (pointermove)=\"resize($event)\"\n (pointerup)=\"finishResize($event)\"\n (pointercancel)=\"finishResize($event)\"\n (lostpointercapture)=\"finishResize($event)\"\n (keydown)=\"resizeWithKeyboard($event)\"\n ></div>\n <header\n class=\"persistent-panel-header fd-dialog__header fd-bar fd-bar--header\"\n >\n <div class=\"fd-bar__left persistent-panel-title-area\">\n <div class=\"fd-bar__element persistent-panel-title-element\">\n <h2\n id=\"persistent-panel-title\"\n class=\"fd-title fd-title--h5 persistent-panel-title\"\n >\n {{ title() }}\n </h2>\n </div>\n </div>\n <div class=\"fd-bar__right persistent-panel-actions\">\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Toggle panel size\"\n [attr.aria-pressed]=\"state() === 'maximized'\"\n title=\"Toggle panel size\"\n type=\"button\"\n (click)=\"toggleSize()\"\n >\n <i\n class=\"sap-icon\"\n [class.sap-icon--exitfullscreen]=\"state() === 'maximized'\"\n [class.sap-icon--full-screen]=\"state() !== 'maximized'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Collapse panel\"\n title=\"Collapse panel\"\n type=\"button\"\n (click)=\"collapse()\"\n >\n <i class=\"sap-icon sap-icon--collapse\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Close panel\"\n title=\"Close panel\"\n type=\"button\"\n (click)=\"close()\"\n >\n <i class=\"sap-icon sap-icon--decline\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </header>\n <div class=\"persistent-panel-body fd-dialog__body\">\n @if (closeError()) {\n <p class=\"persistent-panel-error\" role=\"alert\">{{ closeError() }}</p>\n } @if (source()) {\n <iframe\n #panelFrame\n id=\"persistent-panel-content\"\n class=\"persistent-panel-frame\"\n referrerpolicy=\"no-referrer\"\n sandbox=\"allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts\"\n [src]=\"source()\"\n [title]=\"title()\"\n (load)=\"frameLoaded()\"\n ></iframe>\n }\n </div>\n</section>\n\n@if (state() === 'hidden' && source() && !closing()) {\n<button\n #reopenButton\n class=\"persistent-panel-reopen fd-button fd-button--emphasized fd-button--compact\"\n [attr.aria-label]=\"'Open ' + title()\"\n type=\"button\"\n (click)=\"expand()\"\n>\n {{ title() }}\n</button>\n}\n","import { PersistentPanelComponent } from './persistent-panel';\nimport {\n PersistentPanelConfig,\n PersistentPanelTarget,\n persistentPanelTarget,\n} from './persistent-panel.types';\nimport {\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n Injectable,\n OnDestroy,\n createComponent,\n inject,\n} from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class PersistentPanelService implements OnDestroy {\n private readonly appRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private panelRef: ComponentRef<PersistentPanelComponent> | null = null;\n private target: PersistentPanelTarget = {};\n private targetUpdateSequence = 0;\n\n open(config: PersistentPanelConfig, target: PersistentPanelTarget): void {\n this.target = target;\n if (!this.panelRef) {\n this.panelRef = createComponent(PersistentPanelComponent, {\n environmentInjector: this.environmentInjector,\n });\n this.appRef.attachView(this.panelRef.hostView);\n document.body.appendChild(\n this.panelRef.location.nativeElement as HTMLElement,\n );\n }\n this.panelRef.instance.open(config, target);\n // createComponent() is outside a template tree, so it has no initial\n // render until change detection is run explicitly. Subsequent signal\n // updates are scheduled normally once the view has been initialized.\n this.panelRef.changeDetectorRef.detectChanges();\n }\n\n beginTargetUpdate(): (context: Record<string, unknown>) => void {\n const targetUpdateSequence = ++this.targetUpdateSequence;\n return (context) => {\n if (targetUpdateSequence !== this.targetUpdateSequence) {\n return;\n }\n this.updateTarget(context);\n };\n }\n\n private updateTarget(context: Record<string, unknown>): void {\n const target = persistentPanelTarget({}, context);\n this.target = target;\n this.panelRef?.instance.updateTarget(target);\n }\n\n currentTarget(): PersistentPanelTarget {\n return structuredClone(this.target);\n }\n\n destroy(): void {\n this.targetUpdateSequence += 1;\n if (this.panelRef) {\n const host = this.panelRef.location.nativeElement as HTMLElement;\n this.appRef.detachView(this.panelRef.hostView);\n this.panelRef.destroy();\n host.remove();\n this.panelRef = null;\n }\n this.target = {};\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n}\n","import { PortalLuigiNode } from '../models/luigi-node';\n\nexport function collectAccountNamesFromNodeHierarchy(\n node: PortalLuigiNode | undefined,\n): string[] {\n const accountNames: string[] = [];\n let currentNode: PortalLuigiNode | undefined = node;\n\n while (currentNode) {\n const entityName = currentNode.context?.entityName;\n const entityKind = currentNode.context?.entityKind;\n if (entityName && entityKind?.toLowerCase() === 'account') {\n accountNames.unshift(entityName);\n }\n currentNode = currentNode.parent;\n }\n\n return accountNames;\n}\n\nexport function getInitialAccountId(\n entityId?: string,\n kind?: string,\n): string | undefined {\n return kind?.toLowerCase() === 'account' && entityId ? entityId : undefined;\n}\n\nexport function calculateAccountHierarchy(\n entityNode: PortalLuigiNode,\n entityId?: string,\n kind?: string,\n): string[] {\n const initialAccountId = getInitialAccountId(entityId, kind);\n // when we are on a dynamic node and the id any kind has changed we need to reset the context data\n if (entityNode.defineEntity?.contextKey && initialAccountId) {\n entityNode.context.entityName = undefined;\n entityNode.context.entityKind = undefined;\n }\n\n const accountNames = collectAccountNamesFromNodeHierarchy(entityNode);\n\n if (initialAccountId) {\n accountNames.push(initialAccountId);\n }\n return accountNames;\n}\n","import { kcpRootOrgsPath } from '../models/constants';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport {\n calculateAccountHierarchy,\n getInitialAccountId,\n} from '../utils/account-hierarchy.util';\nimport { Injectable, inject } from '@angular/core';\nimport { EnvConfigService } from '@openmfp/portal-ui-lib';\nimport { GatewayService } from '@platform-mesh/portal-ui-lib/services';\n\nexport interface KcpData {\n kcpPath: string;\n accountPath: string | undefined;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CrdGatewayKcpPatchResolver {\n private gatewayService = inject(GatewayService);\n private envConfigService = inject(EnvConfigService);\n\n public async resolveCrdGatewayKcpPath(\n nextNode: PortalLuigiNode,\n entityId?: string,\n kind?: string,\n ): Promise<KcpData> {\n if (nextNode.context?.kcpPath && !getInitialAccountId(entityId, kind)) {\n this.gatewayService.updateCrdGatewayUrlWithEntityPath(\n nextNode.context.kcpPath,\n );\n return {\n kcpPath: nextNode.context.kcpPath,\n accountPath: nextNode.context.accountPath,\n };\n }\n\n const accountNames = calculateAccountHierarchy(nextNode, entityId, kind);\n\n const accountPath =\n accountNames.length > 0 ? `${accountNames.join(':')}` : '';\n\n const org = (await this.envConfigService.getEnvConfig()).idpName;\n const kcpPath = `${kcpRootOrgsPath}:${org}${accountPath ? ':' + accountPath : ''}`;\n this.gatewayService.updateCrdGatewayUrlWithEntityPath(kcpPath);\n\n if (nextNode.context) {\n nextNode.context.kcpPath = kcpPath;\n nextNode.context.accountPath = accountPath;\n }\n return { kcpPath, accountPath };\n }\n}\n","import { PortalLuigiNode } from '../models/luigi-node';\nimport { PersistentPanelService } from '../persistent-panel/persistent-panel.service';\nimport { CrdGatewayKcpPatchResolver } from './crd-gateway-kcp-patch-resolver.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n LuigiCoreService,\n NodeChangeHookConfigService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class NodeChangeHookConfigServiceImpl implements NodeChangeHookConfigService {\n private luigiCoreService = inject(LuigiCoreService);\n private crdGatewayKcpPatchResolver = inject(CrdGatewayKcpPatchResolver);\n private persistentPanelService = inject(PersistentPanelService);\n\n async nodeChangeHook(\n prevNode: PortalLuigiNode,\n nextNode: PortalLuigiNode,\n currentContext: NodeContext,\n ) {\n const updatePersistentPanelTarget =\n this.persistentPanelService.beginTargetUpdate();\n\n if (\n nextNode.initialRoute &&\n nextNode.virtualTree &&\n !(nextNode as any)._virtualTree\n ) {\n this.luigiCoreService.navigation().navigate(nextNode.initialRoute);\n }\n\n this.accumulatePortalPermissions(prevNode, nextNode, currentContext);\n await this.crdGatewayKcpPatchResolver.resolveCrdGatewayKcpPath(nextNode);\n updatePersistentPanelTarget({\n ...currentContext,\n ...(nextNode.context ?? {}),\n });\n }\n\n private accumulatePortalPermissions(\n prevNode: PortalLuigiNode,\n nextNode: PortalLuigiNode,\n currentContext: NodeContext,\n ) {\n const portalPermissions =\n prevNode?.context?.portalPermissions ??\n currentContext?.portalPermissions ??\n {};\n\n nextNode.context?.nodesPermissions?.forEach((permission) => {\n portalPermissions[permission.resource] = permission.actions;\n });\n\n currentContext.portalPermissions = portalPermissions;\n\n if (nextNode.context) {\n nextNode.context.portalPermissions = portalPermissions;\n }\n }\n}\n","import { PortalNodeContext } from '../models/luigi-context';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport { CrdGatewayKcpPatchResolver } from './crd-gateway-kcp-patch-resolver.service';\nimport { Injectable, inject } from '@angular/core';\nimport { NodeContextProcessingService } from '@openmfp/portal-ui-lib';\nimport { AccountInfo } from '@platform-mesh/portal-ui-lib/models';\nimport {\n AccountInfoService,\n ErrorHandlerService,\n OrganizationReadyService,\n} from '@platform-mesh/portal-ui-lib/services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeContextProcessingServiceImpl implements NodeContextProcessingService {\n private crdGatewayKcpPatchResolver = inject(CrdGatewayKcpPatchResolver);\n private accountInfoService = inject(AccountInfoService);\n private organizationReadyService = inject(OrganizationReadyService);\n private errorHandlerService = inject(ErrorHandlerService);\n\n public async processNodeContext(\n dynamicEntityId: string,\n entityNode: PortalLuigiNode,\n ctx: PortalNodeContext,\n ) {\n const kind = entityNode.defineEntity?.type;\n const entityId =\n dynamicEntityId || entityNode.context.resourceDefinition?.name;\n\n if (!entityId) {\n return;\n }\n\n const { kcpPath, accountPath } =\n await this.crdGatewayKcpPatchResolver.resolveCrdGatewayKcpPath(\n entityNode,\n entityId,\n kind,\n );\n\n // update the current already calculated by Luigi context for a node\n this.addFieldsToContext(ctx, entityId, kcpPath, accountPath, kind);\n\n // update the node context of sa node to contain the entity for future context calculations\n this.addFieldsToContext(\n entityNode.context,\n entityId,\n kcpPath,\n accountPath,\n kind,\n );\n\n this.accamulatePortalPermissions(ctx);\n try {\n const accountInfo = await firstValueFrom(\n this.accountInfoService.read({\n portalContext: {\n crdGatewayApiUrl: ctx.portalContext.crdGatewayApiUrl,\n },\n token: ctx.token,\n accountId: entityId,\n }),\n );\n\n // update the current already calculated by Luigi context for a node\n this.addFieldsToContextFromAccountInfo(ctx, entityId, accountInfo);\n\n // update the node context of sa node to contain the entity for future context calculations\n this.addFieldsToContextFromAccountInfo(\n entityNode.context,\n entityId,\n accountInfo,\n );\n\n // we were able to ready the account info so on this kcpPath we can query for the organization ready state\n this.organizationReadyService.checkOrganizationReady();\n } catch (e) {\n if (!this.errorHandlerService.isUnauthorizedAccess(e)) {\n console.error('Failed to read account info', e);\n }\n }\n }\n\n private addFieldsToContext(\n ctx: PortalNodeContext,\n entityId: string | undefined,\n kcpPath: string,\n accountPath: string | undefined,\n kind: string | undefined,\n ) {\n ctx.kcpPath = kcpPath;\n ctx.entityName = entityId;\n ctx.entityKind = kind;\n ctx.accountPath = accountPath;\n }\n\n private addFieldsToContextFromAccountInfo(\n ctx: PortalNodeContext,\n entityId: string,\n accountInfo: AccountInfo,\n ) {\n const accountOriginClusterId = accountInfo.spec.account.originClusterId;\n const organizationOriginClusterId =\n accountInfo.spec.organization.originClusterId;\n const organization = accountInfo.spec.organization.name;\n\n ctx.organizationId = `${organizationOriginClusterId}/${organization}`;\n ctx.entityId = `${accountOriginClusterId}/${entityId}`;\n ctx.kcpCA = btoa(accountInfo.spec.clusterInfo.ca);\n }\n\n private accamulatePortalPermissions(ctx: PortalNodeContext) {\n const portalPermissions = ctx.portalPermissions ?? {};\n\n ctx.nodesPermissions?.forEach((permission) => {\n portalPermissions[permission.resource] = permission.actions;\n });\n\n ctx.portalPermissions = portalPermissions;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n ClientEnvironment,\n EnvConfigService,\n RoutingConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable()\nexport class CustomRoutingConfigServiceImpl implements RoutingConfigService {\n private envConfigService = inject(EnvConfigService);\n private envConfig: ClientEnvironment | null = null;\n\n constructor() {\n this.getEnvConfig();\n }\n\n async getEnvConfig(): Promise<void> {\n this.envConfig = await this.envConfigService.getEnvConfig();\n }\n\n getRoutingConfig(): any {\n return {\n preserveQueryParams: true,\n pageNotFoundHandler: () => {\n if (!this.envConfig?.baseDomain) {\n return this.redirectTo('error/404');\n }\n\n if (window.location.hostname === this.envConfig.baseDomain) {\n return this.redirectTo('welcome');\n }\n\n return this.redirectTo('error/404');\n },\n };\n }\n\n public redirectTo(path: string, keepURL = true): any {\n return {\n redirectTo: path,\n keepURL,\n };\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AuthService,\n UserProfile,\n UserProfileConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class UserProfileConfigServiceImpl implements UserProfileConfigService {\n private authService = inject(AuthService);\n async getProfile(): Promise<UserProfile> {\n const { email } = this.authService.getUserInfo();\n\n return {\n items: [\n {\n label: 'PROFILE_PROFILE',\n icon: 'customer',\n link: `/users/${email}/overview`,\n },\n ],\n };\n }\n}\n","import { PersistentPanelService } from './persistent-panel.service';\nimport {\n OPEN_PERSISTENT_PANEL_MESSAGE,\n mergePersistentPanelTargets,\n parsePersistentPanelConfig,\n persistentPanelTarget,\n} from './persistent-panel.types';\nimport { Injectable, inject } from '@angular/core';\nimport {\n CustomMessageListener,\n LuigiCoreService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class OpenPersistentPanelListener implements CustomMessageListener {\n private readonly luigiCoreService = inject(LuigiCoreService);\n private readonly persistentPanelService = inject(PersistentPanelService);\n\n messageId(): string {\n return OPEN_PERSISTENT_PANEL_MESSAGE;\n }\n\n onCustomMessageReceived(\n customMessage: Record<string, unknown>,\n _microFrontend: unknown,\n microFrontendNode: { context?: NodeContext; viewUrl?: string } | undefined,\n ): void {\n const config = parsePersistentPanelConfig(\n customMessage as { id: string },\n microFrontendNode,\n new URL(document.baseURI).origin,\n );\n const target = mergePersistentPanelTargets(\n this.persistentPanelService.currentTarget(),\n persistentPanelTarget(\n this.luigiCoreService.getGlobalContext(),\n microFrontendNode?.context,\n ),\n );\n this.persistentPanelService.open(config, target);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isRecord"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform-mesh-portal-ui-lib-portal-options.mjs","sources":["../../projects/lib/portal-options/services/custom-global-nodes.service.ts","../../projects/lib/portal-options/services/header-bar-renderers/breadcrumb-renderer.ts","../../projects/lib/portal-options/services/header-bar-renderers/namespace-selection-renderer.service.ts","../../projects/lib/portal-options/services/header-bar-config.service.ts","../../projects/lib/portal-options/services/luigi-extended-global-context-config.service.ts","../../projects/lib/portal-options/services/navigation-redirect-strategy.service.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.types.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.ts","../../projects/lib/portal-options/persistent-panel/persistent-panel.html","../../projects/lib/portal-options/persistent-panel/persistent-panel.service.ts","../../projects/lib/portal-options/utils/account-hierarchy.util.ts","../../projects/lib/portal-options/services/crd-gateway-kcp-patch-resolver.service.ts","../../projects/lib/portal-options/services/node-change-hook-config.service.ts","../../projects/lib/portal-options/services/node-context-processing.service.ts","../../projects/lib/portal-options/services/router-config.service.ts","../../projects/lib/portal-options/services/user-profile-config.service.ts","../../projects/lib/portal-options/persistent-panel/open-persistent-panel.listener.ts","../../projects/lib/portal-options/platform-mesh-portal-ui-lib-portal-options.ts"],"sourcesContent":["import { PortalNodeContext } from '../models/luigi-context';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport { Injectable, inject } from '@angular/core';\nimport {\n CustomGlobalNodesService,\n EntityType,\n I18nService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomGlobalNodesServiceImpl implements CustomGlobalNodesService {\n private i18nService = inject(I18nService);\n\n async getCustomGlobalNodes(): Promise<PortalLuigiNode[]> {\n return [\n {\n pathSegment: 'error',\n order: 1000,\n hideFromNav: true,\n showBreadcrumbs: false,\n context: {} as PortalNodeContext,\n children: [\n {\n pathSegment: ':id',\n entityType: EntityType.ENTITY_ERROR,\n hideFromNav: true,\n hideSideNav: true,\n viewUrl: '/assets/platform-mesh-portal-ui-wc.js#error-component',\n context: {\n id: ':id',\n translationTable: this.i18nService.translationTable,\n } as any as NodeContext,\n webcomponent: {\n selfRegistered: true,\n },\n },\n ],\n },\n {\n pathSegment: 'users',\n showBreadcrumbs: false,\n hideSideNav: true,\n hideFromNav: true,\n context: {} as PortalNodeContext,\n entityType: 'global',\n children: [\n {\n pathSegment: ':userId',\n hideSideNav: true,\n hideFromNav: true,\n defineEntity: {\n id: 'user',\n },\n context: {\n userId: ':userId',\n } as PortalNodeContext,\n children: [\n {\n pathSegment: 'overview',\n context: {} as PortalNodeContext,\n hideSideNav: true,\n hideFromNav: true,\n defineEntity: {\n id: 'overview',\n },\n compound: {\n children: [],\n },\n },\n ],\n },\n ],\n },\n ];\n }\n}\n","import '@ui5/webcomponents/dist/Breadcrumbs.js';\nimport '@ui5/webcomponents/dist/BreadcrumbsItem.js';\n\nexport const breadcrumbRenderer = (\n containerElement: HTMLElement,\n nodeItems: any[],\n clickHandler: (item: any) => void,\n): HTMLElement => {\n containerElement.style.width = '100%';\n\n const ui5breadcrumbs = document.createElement('ui5-breadcrumbs');\n ui5breadcrumbs.setAttribute('separators', 'Slash');\n containerElement.appendChild(ui5breadcrumbs);\n\n nodeItems.forEach((item) => {\n if (item.node?.hideFromBreadcrumb) {\n return;\n }\n\n const itemCmp = document.createElement('ui5-breadcrumbs-item');\n itemCmp.textContent = item.label ?? '';\n (itemCmp as any)._item = item;\n ui5breadcrumbs.appendChild(itemCmp);\n });\n\n ui5breadcrumbs.addEventListener('item-click', (event: any) => {\n if (\n !(\n event.detail.ctrlKey ||\n event.detail.altKey ||\n event.detail.shiftKey ||\n event.detail.metaKey\n )\n ) {\n event.preventDefault();\n clickHandler(event.detail.item._item);\n }\n });\n\n return ui5breadcrumbs;\n};\n","import { DestroyRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AuthService,\n LuigiCoreService,\n LuigiNode,\n PortalConfig,\n} from '@openmfp/portal-ui-lib';\nimport {\n ALL_NAMESPACE,\n PlatformMeshFieldDefinition,\n Resource,\n ResourceDefinition,\n ResourceListResult,\n} from '@platform-mesh/portal-ui-lib/models';\nimport {\n ResourceNodeContext,\n ResourceService,\n} from '@platform-mesh/portal-ui-lib/services';\nimport {\n generateGraphQLFields,\n isNamespacedResource,\n mergeListWithSubscriptionResult,\n} from '@platform-mesh/portal-ui-lib/utils';\nimport '@ui5/webcomponents/dist/ComboBox.js';\nimport { Observable, Subject, defer, of } from 'rxjs';\nimport {\n catchError,\n retry,\n scan,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nconst defaultColumns: PlatformMeshFieldDefinition[] = [\n {\n label: 'Name',\n property: 'metadata.name',\n },\n];\n\n@Injectable({ providedIn: 'root' })\nexport class NamespaceSelectionRendererService {\n private namespaceResourcesCache?: {\n key: string;\n value$: Observable<Resource[]>;\n stop$: Subject<void>;\n };\n\n private resourceService = inject(ResourceService);\n private authService = inject(AuthService);\n private luigiCoreService = inject(LuigiCoreService);\n private destroyRef = inject(DestroyRef);\n\n public create(portalConfig: PortalConfig) {\n return (\n containerElement: HTMLElement,\n nodeItems: any[],\n _clickHandler: any,\n ) => {\n containerElement.style.paddingBottom = '0.5rem';\n\n const lastNode = nodeItems.at(-1)?.node as LuigiNode | undefined;\n const namespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n const kcpPath = lastNode?.context?.kcpPath;\n\n if (lastNode?.context && !isNamespacedResource(lastNode.context)) {\n return containerElement;\n }\n\n const ui5combobox = this.createCombobox(containerElement);\n\n this.addComboboxItems(portalConfig, ui5combobox, namespace, kcpPath);\n\n ui5combobox.addEventListener('change', (event: any) => {\n const value = (event?.target as any)?.value.trim() ?? '';\n this.changeNamespace(value);\n });\n\n return ui5combobox as HTMLElement;\n };\n }\n\n private createCombobox(containerElement: HTMLElement) {\n const ui5combobox = document.createElement('ui5-combobox');\n ui5combobox.setAttribute('placeholder', 'Namespaces');\n ui5combobox.setAttribute('data-testid', 'namespace-selection-combobox');\n containerElement.appendChild(ui5combobox);\n\n return ui5combobox;\n }\n\n private addComboboxItems(\n portalConfig: PortalConfig,\n ui5combobox: HTMLElement,\n namespace: string | null,\n kcpPath?: string,\n ) {\n this.getNamespaceResourcesCached(portalConfig, kcpPath).subscribe(\n (resources) => {\n this.syncComboboxItems(ui5combobox, resources);\n this.setSelectedValue(ui5combobox, resources, namespace);\n },\n );\n }\n\n private getNamespaceResourcesCached(\n portalConfig: PortalConfig,\n kcpPath?: string,\n ): Observable<Resource[]> {\n const cacheKey = this.getNamespaceResourcesCacheKey(kcpPath);\n if (this.namespaceResourcesCache?.key === cacheKey) {\n return this.namespaceResourcesCache.value$;\n }\n\n if (this.namespaceResourcesCache) {\n this.namespaceResourcesCache.stop$.next();\n this.namespaceResourcesCache.stop$.complete();\n this.namespaceResourcesCache = undefined;\n }\n\n const stop$ = new Subject<void>();\n const value$ = this.getNamespaceResources(\n portalConfig,\n kcpPath,\n stop$,\n ).pipe(shareReplay(1), takeUntilDestroyed(this.destroyRef));\n this.namespaceResourcesCache = {\n key: cacheKey,\n value$,\n stop$,\n };\n\n return value$;\n }\n\n private getNamespaceResourcesCacheKey(kcpPath?: string): string {\n return kcpPath ?? '';\n }\n\n private syncComboboxItems(ui5combobox: HTMLElement, resources: Resource[]) {\n ui5combobox.replaceChildren();\n\n resources.forEach((resource) => {\n const name = resource.metadata?.name;\n if (!name) {\n return;\n }\n const resourceOption = document.createElement('ui5-cb-item');\n resourceOption.setAttribute('text', name);\n resourceOption.setAttribute(\n 'data-testid',\n `namespace-selection-combobox-item-${name}`,\n );\n ui5combobox.appendChild(resourceOption);\n });\n\n const allOption = document.createElement('ui5-cb-item');\n allOption.setAttribute('text', ALL_NAMESPACE);\n allOption.setAttribute(\n 'data-testid',\n 'namespace-selection-combobox-item-all',\n );\n ui5combobox.appendChild(allOption);\n }\n\n private setSelectedValue(\n ui5combobox: HTMLElement,\n resources: Resource[],\n namespace: string | null,\n ) {\n const currentNamespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (currentNamespace) {\n ui5combobox.setAttribute('value', currentNamespace);\n return;\n }\n\n if (\n namespace &&\n resources.find((resource) => resource.metadata?.name === namespace)\n ) {\n ui5combobox.setAttribute('value', namespace);\n } else {\n ui5combobox.setAttribute('value', ALL_NAMESPACE);\n this.changeNamespace(ALL_NAMESPACE);\n }\n }\n\n private getNamespaceResources(\n portalConfig: PortalConfig,\n kcpPath: string | undefined,\n stop$: Subject<void>,\n ): Observable<Resource[]> {\n const operation = 'v1_namespaces';\n const fields = generateGraphQLFields(defaultColumns);\n const context = {\n portalContext: {\n crdGatewayApiUrl: portalConfig.portalContext['crdGatewayApiUrl'],\n },\n resourceDefinition: {\n version: 'v1',\n entityCollection: 'Namespaces',\n entity: 'Namespace',\n scope: 'Cluster',\n } as ResourceDefinition,\n kcpPath,\n token: this.authService.getToken(),\n } as ResourceNodeContext;\n\n return defer(() =>\n this.resourceService.list(operation, fields, context),\n ).pipe(\n retry(3),\n takeUntil(stop$),\n switchMap((result: ResourceListResult) =>\n this.resourceService\n .resourceChangeSubscription(\n operation,\n fields,\n context,\n result.resourceVersion,\n false,\n )\n .pipe(\n startWith(undefined),\n scan(\n (resources, subscriptionResult) =>\n mergeListWithSubscriptionResult(resources, subscriptionResult, {\n getItemKey: (resource) => resource.metadata?.name,\n mapSubscriptionObjectToItem: (object) => object,\n }),\n result.items,\n ),\n tap((result) => {\n const namespaces = result.map((e) => e.metadata?.name);\n this.luigiCoreService.setInGlobalContext({ namespaces });\n }),\n takeUntil(stop$),\n ),\n ),\n catchError((error) => {\n console.error(`Failed to read entities from ${operation}`, error);\n return of([]);\n }),\n );\n }\n\n private changeNamespace(value: string): void {\n if (!value) {\n return;\n }\n\n const oldValue = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n if (oldValue === value) {\n return;\n }\n\n this.luigiCoreService.routing().addSearchParams({ namespace: value });\n }\n}\n","import { breadcrumbRenderer } from './header-bar-renderers/breadcrumb-renderer';\nimport { NamespaceSelectionRendererService } from './header-bar-renderers/namespace-selection-renderer.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n ConfigService,\n HeaderBarConfig,\n HeaderBarConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HeaderBarConfigServiceImpl implements HeaderBarConfigService {\n private configService = inject(ConfigService);\n private namespaceSelectionRendererService = inject(\n NamespaceSelectionRendererService,\n );\n\n public async getConfig(): Promise<HeaderBarConfig> {\n const portalConfig = await this.configService.getPortalConfig();\n\n return {\n pendingItemLabel: '...',\n omitRoot: false,\n clearBeforeRender: true,\n autoHide: true,\n leftRenderers: [breadcrumbRenderer],\n rightRenderers: [\n this.namespaceSelectionRendererService.create(portalConfig),\n ],\n };\n }\n}\n","import { kcpRootOrgsPath } from '../models/constants';\nimport { Injectable, inject } from '@angular/core';\nimport {\n EnvConfigService,\n LuigiExtendedGlobalContextConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class LuigiExtendedGlobalContextConfigServiceImpl implements LuigiExtendedGlobalContextConfigService {\n private envConfigService = inject(EnvConfigService);\n\n async createLuigiExtendedGlobalContext(): Promise<Record<string, any>> {\n const idpName = (await this.envConfigService.getEnvConfig()).idpName;\n\n if (idpName === 'welcome') {\n return {};\n }\n\n return {\n organization: idpName,\n kcpPath: `${kcpRootOrgsPath}:${idpName}`,\n entityName: idpName,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n LocalStorageKeys,\n NavigationRedirectStrategy,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationRedirectStrategyServiceImpl implements NavigationRedirectStrategy {\n getRedirectUrl(): string {\n return localStorage.getItem(LocalStorageKeys.LAST_NAVIGATION_URL) || '';\n }\n\n saveRedirectUrl(url: string): void {\n if (url.startsWith('/error')) {\n return;\n }\n\n localStorage.setItem(LocalStorageKeys.LAST_NAVIGATION_URL, url);\n }\n\n clearRedirectUrl(): void {\n localStorage.removeItem(LocalStorageKeys.LAST_NAVIGATION_URL);\n }\n}\n","import type { NodeContext } from '@openmfp/portal-ui-lib';\n\nexport const OPEN_PERSISTENT_PANEL_MESSAGE = 'portal.open-provider-panel';\n\nexport const PROVIDER_PANEL_MESSAGE = {\n close: 'portal.provider-panel.close',\n closeFailed: 'portal.provider-panel.close-failed',\n closed: 'portal.provider-panel.closed',\n context: 'portal.provider-panel.context',\n ready: 'portal.provider-panel.ready',\n requestClose: 'portal.provider-panel.request-close',\n} as const;\n\nexport interface PersistentPanelConfig {\n id: string;\n title: string;\n url: string;\n origin: string;\n}\n\nexport interface PersistentPanelTarget {\n organization?: string;\n organizationId?: string;\n account?: string;\n accountPath?: string;\n workspacePath?: string;\n namespace?: string;\n resource?: {\n group?: string;\n version?: string;\n kind?: string;\n name?: string;\n };\n}\n\nexport interface RegisteredProviderNode {\n viewUrl?: string;\n context?: Partial<NodeContext> & {\n persistentPanel?: unknown;\n };\n}\n\nexport function mergePersistentPanelTargets(\n current: PersistentPanelTarget,\n update: PersistentPanelTarget,\n): PersistentPanelTarget {\n const organizationChanged =\n current.organization !== undefined &&\n update.organization !== undefined &&\n current.organization !== update.organization;\n const accountChanged =\n current.account !== undefined &&\n update.account !== undefined &&\n current.account !== update.account;\n\n if (organizationChanged || accountChanged) {\n return structuredClone(update);\n }\n\n // Provider nodes normally contain only panel capability metadata. Keep the\n // target tracked by navigation and overlay any bounded scope that the\n // requesting node does carry.\n return structuredClone({ ...current, ...update });\n}\n\ninterface OpenPanelMessage extends Record<string, unknown> {\n id: string;\n}\n\nconst panelIdPattern = /^[a-z0-9](?:[a-z0-9.-]{0,62}[a-z0-9])?$/;\nconst workspaceSegmentPattern = /^[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$/;\n\nexport function parsePersistentPanelConfig(\n message: OpenPanelMessage,\n providerNode: RegisteredProviderNode | undefined,\n portalOrigin: string,\n): PersistentPanelConfig {\n if (message.id !== OPEN_PERSISTENT_PANEL_MESSAGE) {\n throw new Error('Persistent panel request is invalid');\n }\n\n const capability = recordValue(providerNode?.context?.persistentPanel);\n const id = boundedString(capability['id'], 64);\n const title = boundedString(capability['title'], 80);\n if (!id || !panelIdPattern.test(id)) {\n throw new Error('Registered persistent panel id is invalid');\n }\n if (!title) {\n throw new Error('Registered persistent panel title is invalid');\n }\n\n const registeredViewUrl = boundedString(providerNode?.viewUrl, 2048);\n if (!registeredViewUrl) {\n throw new Error('Registered provider UI URL is missing');\n }\n\n const portalURL = new URL(portalOrigin);\n const url = new URL(registeredViewUrl, portalURL);\n if (\n url.origin === portalURL.origin ||\n !allowedPanelURL(url, portalURL) ||\n url.username ||\n url.password\n ) {\n throw new Error('Registered provider UI URL is invalid');\n }\n\n return { id, title, url: url.toString(), origin: url.origin };\n}\n\nfunction allowedPanelURL(url: URL, portalURL: URL): boolean {\n if (url.protocol === 'https:') {\n return true;\n }\n return (\n portalURL.protocol === 'http:' &&\n url.protocol === 'http:' &&\n ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname)\n );\n}\n\nexport function persistentPanelTarget(\n globalContext: Record<string, unknown>,\n nodeContext?: NodeContext | Record<string, unknown>,\n): PersistentPanelTarget {\n const context = { ...globalContext, ...(nodeContext ?? {}) };\n const entityContext = recordValue(context['entityContext']);\n const accountContext = recordValue(entityContext['account']);\n const resourceDefinition = recordValue(context['resourceDefinition']);\n\n const organization = boundedString(context['organization'], 253);\n const organizationId = boundedString(context['organizationId'], 512);\n const rawAccountPath = boundedString(context['accountPath'], 1024);\n const account =\n boundedString(accountContext['id'], 253) ||\n boundedString(context['accountId'], 253) ||\n boundedString(context['core_platform-mesh_io_accountId'], 253) ||\n accountFromPath(rawAccountPath, organization) ||\n accountFromEntity(context);\n\n // Organization-only scope is valid, but descendants without an account are\n // not. Organization context can carry a kcpPath, so fail closed before\n // projecting workspace fields.\n if (!account) {\n return compact({ organization, organizationId });\n }\n\n const accountPath = validatedAccountPath(\n rawAccountPath,\n organization,\n account,\n );\n\n const workspacePath =\n validatedWorkspacePath(context['workspacePath'], organization, account) ||\n validatedWorkspacePath(context['kcpPath'], organization, account) ||\n validatedWorkspacePath(rawAccountPath, organization, account) ||\n canonicalAccountPath(organization, account);\n const namespace =\n boundedString(context['namespaceId'], 253) ||\n boundedString(resourceDefinition['namespace'], 253);\n const resource = compact({\n group:\n boundedString(resourceDefinition['group'], 253) ||\n boundedString(resourceDefinition['apiGroup'], 253),\n version: boundedString(resourceDefinition['version'], 63),\n kind:\n boundedString(resourceDefinition['kind'], 253) ||\n boundedString(context['entityKind'], 253),\n name: boundedString(context['entityName'], 253),\n });\n\n return compact({\n organization,\n organizationId,\n account,\n accountPath,\n workspacePath,\n namespace,\n resource: Object.keys(resource).length > 0 ? resource : undefined,\n });\n}\n\nfunction accountFromPath(\n accountPath: string | undefined,\n organization: string | undefined,\n): string | undefined {\n if (!accountPath) {\n return undefined;\n }\n if (workspaceSegmentPattern.test(accountPath)) {\n return accountPath;\n }\n const segments = accountPath.split(':');\n if (\n segments.length < 4 ||\n segments[0] !== 'root' ||\n segments[1] !== 'orgs' ||\n segments.some((segment) => !workspaceSegmentPattern.test(segment)) ||\n (organization !== undefined && segments[2] !== organization)\n ) {\n return undefined;\n }\n return boundedString(segments.at(-1), 253);\n}\n\nfunction accountFromEntity(\n context: Record<string, unknown>,\n): string | undefined {\n if (boundedString(context['entityKind'], 253) !== 'Account') {\n return undefined;\n }\n return boundedString(context['entityName'], 253);\n}\n\nfunction canonicalWorkspacePath(\n accountPath: string | undefined,\n): string | undefined {\n if (!accountPath?.startsWith('root:')) {\n return undefined;\n }\n const segments = accountPath.split(':');\n if (\n segments.length < 3 ||\n segments.some((segment) => !workspaceSegmentPattern.test(segment))\n ) {\n return undefined;\n }\n return accountPath;\n}\n\nfunction validatedWorkspacePath(\n value: unknown,\n organization: string | undefined,\n account: string | undefined,\n): string | undefined {\n if (!organization || !account) {\n return undefined;\n }\n const path = canonicalWorkspacePath(boundedString(value, 1024));\n const segments = path?.split(':');\n if (\n !segments ||\n segments.length < 4 ||\n segments[0] !== 'root' ||\n segments[1] !== 'orgs' ||\n segments[2] !== organization ||\n segments.at(-1) !== account\n ) {\n return undefined;\n }\n return path;\n}\n\nfunction validatedAccountPath(\n value: string | undefined,\n organization: string | undefined,\n account: string,\n): string | undefined {\n if (!value) {\n return undefined;\n }\n if (workspaceSegmentPattern.test(value)) {\n return value === account ? value : undefined;\n }\n return validatedWorkspacePath(value, organization, account);\n}\n\nfunction canonicalAccountPath(\n organization: string | undefined,\n account: string | undefined,\n): string | undefined {\n if (\n !organization ||\n !account ||\n !workspaceSegmentPattern.test(organization) ||\n !workspaceSegmentPattern.test(account)\n ) {\n return undefined;\n }\n return `root:orgs:${organization}:${account}`;\n}\n\nfunction compact<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, item]) => item !== undefined),\n ) as T;\n}\n\nfunction boundedString(value: unknown, maxLength: number): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n if (!trimmed || trimmed.length > maxLength || trimmed.includes('\\u0000')) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n","import {\n PROVIDER_PANEL_MESSAGE,\n PersistentPanelConfig,\n PersistentPanelTarget,\n} from './persistent-panel.types';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n ViewChild,\n computed,\n inject,\n signal,\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\ntype PanelState = 'hidden' | 'expanded' | 'maximized';\n\nconst PORTAL_MAIN_AREA_SELECTOR = '.iframeContainer';\nconst PORTAL_LAYOUT_SELECTORS = [\n PORTAL_MAIN_AREA_SELECTOR,\n '.spinnerContainer.appSpinner',\n '#splitViewContainer',\n '#splitViewDragger',\n '#splitViewDraggerBackdrop',\n '#tabsContainer',\n].join(',');\n\ninterface InlineStyleValue {\n value: string;\n priority: string;\n}\n\n@Component({\n selector: 'pm-persistent-panel',\n imports: [CommonModule],\n standalone: true,\n templateUrl: './persistent-panel.html',\n styleUrl: './persistent-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PersistentPanelComponent implements OnDestroy {\n @ViewChild('panelFrame') panelFrame?: ElementRef<HTMLIFrameElement>;\n @ViewChild('reopenButton') reopenButton?: ElementRef<HTMLButtonElement>;\n\n private readonly dimensions = panelDimensions();\n private readonly preferredPanelWidth = signal(this.dimensions.defaultWidth);\n\n readonly state = signal<PanelState>('hidden');\n readonly title = signal('');\n readonly source = signal<SafeResourceUrl | null>(null);\n readonly closing = signal(false);\n readonly closeError = signal('');\n readonly resizing = signal(false);\n readonly maxPanelWidth = signal(this.availablePanelWidth());\n readonly minPanelWidth = computed(() =>\n Math.min(this.dimensions.minimumWidth, this.maxPanelWidth()),\n );\n readonly panelWidth = computed(() =>\n Math.max(\n this.minPanelWidth(),\n Math.min(\n this.state() === 'maximized'\n ? this.maxPanelWidth()\n : this.preferredPanelWidth(),\n this.maxPanelWidth(),\n ),\n ),\n );\n\n private readonly sanitizer = inject(DomSanitizer);\n private config: PersistentPanelConfig | null = null;\n private target: PersistentPanelTarget = {};\n private sequence = 0;\n private closeSequence = 0;\n private closeTimeout: number | null = null;\n private closeRequestIdSent: number | null = null;\n private destroyed = false;\n private ready = false;\n private returnFocusElement: HTMLElement | null = null;\n private resizePointerId: number | null = null;\n private observingPortalLayout = false;\n private observedMainArea: HTMLElement | null = null;\n private readonly portalLayoutStyles = new Map<\n HTMLElement,\n InlineStyleValue\n >();\n private readonly portalLayoutObserver = new MutationObserver(() => {\n if (this.state() === 'hidden') {\n return;\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n });\n private readonly mainAreaResizeObserver =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n if (this.state() === 'hidden') {\n return;\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n });\n\n constructor() {\n window.addEventListener('message', this.onMessage);\n window.addEventListener('resize', this.onWindowResize);\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n window.removeEventListener('message', this.onMessage);\n window.removeEventListener('resize', this.onWindowResize);\n this.clearCloseTimeout();\n this.resizePointerId = null;\n this.resizing.set(false);\n this.portalLayoutObserver.disconnect();\n this.mainAreaResizeObserver?.disconnect();\n this.restorePortalLayout();\n }\n\n open(config: PersistentPanelConfig, target: PersistentPanelTarget): void {\n if (this.closing()) {\n this.closeSequence += 1;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('');\n const sourceChanged = this.config?.url !== config.url;\n if (!this.source()) {\n this.returnFocusElement =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n }\n if (sourceChanged) {\n this.ready = false;\n }\n this.config = config;\n this.target = structuredClone(target);\n this.title.set(config.title);\n if (sourceChanged || !this.source()) {\n this.source.set(\n this.sanitizer.bypassSecurityTrustResourceUrl(config.url),\n );\n }\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.publishTarget();\n this.focusPanel();\n });\n }\n\n updateTarget(target: PersistentPanelTarget): void {\n this.target = structuredClone(target);\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n this.publishTarget();\n }\n\n collapse(): void {\n this.state.set('hidden');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.reopenButton?.nativeElement.focus();\n });\n }\n\n expand(): void {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.focusPanel();\n });\n }\n\n toggleSize(): void {\n this.state.update((state) =>\n state === 'maximized' ? 'expanded' : 'maximized',\n );\n this.syncPortalLayout();\n }\n\n beginResize(event: PointerEvent): void {\n if (\n this.state() !== 'expanded' ||\n event.button !== 0 ||\n event.isPrimary === false\n ) {\n return;\n }\n this.resizePointerId = event.pointerId;\n this.resizing.set(true);\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\n event.preventDefault();\n }\n\n resize(event: PointerEvent): void {\n if (event.pointerId !== this.resizePointerId) {\n return;\n }\n this.setPanelWidth(window.innerWidth - event.clientX);\n event.preventDefault();\n }\n\n finishResize(event: PointerEvent): void {\n if (event.pointerId !== this.resizePointerId) {\n return;\n }\n const handle = event.currentTarget as HTMLElement;\n if (handle.hasPointerCapture(event.pointerId)) {\n handle.releasePointerCapture(event.pointerId);\n }\n this.resizePointerId = null;\n this.resizing.set(false);\n event.preventDefault();\n }\n\n resizeWithKeyboard(event: KeyboardEvent): void {\n let width: number;\n switch (event.key) {\n case 'ArrowLeft':\n width = this.panelWidth() + this.dimensions.keyboardStep;\n break;\n case 'ArrowRight':\n width = this.panelWidth() - this.dimensions.keyboardStep;\n break;\n case 'Home':\n width = this.minPanelWidth();\n break;\n case 'End':\n width = this.maxPanelWidth();\n break;\n default:\n return;\n }\n this.setPanelWidth(width);\n event.preventDefault();\n }\n\n close(): void {\n if (!this.source() || this.closing()) {\n return;\n }\n this.closeSequence += 1;\n const requestId = this.closeSequence;\n this.closeRequestIdSent = null;\n this.closing.set(true);\n this.closeError.set('');\n this.state.set('hidden');\n this.syncPortalLayout();\n this.focusReturnTarget();\n this.requestCloseIfReady(requestId);\n this.closeTimeout = window.setTimeout(() => {\n this.failClose(requestId);\n }, 30_000);\n }\n\n private failClose(requestId: number): void {\n if (!this.closing() || requestId !== this.closeSequence) {\n return;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('Provider cleanup is incomplete. Try closing again.');\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.state.set('expanded');\n this.syncPortalLayout();\n queueMicrotask(() => {\n if (this.destroyed) {\n return;\n }\n this.focusPanel();\n });\n }\n\n private finishClose(requestId: number): void {\n if (\n !this.closing() ||\n requestId !== this.closeSequence ||\n this.closeRequestIdSent !== requestId\n ) {\n return;\n }\n this.clearCloseTimeout();\n this.closeRequestIdSent = null;\n this.closing.set(false);\n this.closeError.set('');\n this.config = null;\n this.ready = false;\n this.source.set(null);\n this.title.set('');\n this.state.set('hidden');\n this.syncPortalLayout();\n this.focusReturnTarget();\n this.returnFocusElement = null;\n }\n\n private clearCloseTimeout(): void {\n if (this.closeTimeout !== null) {\n window.clearTimeout(this.closeTimeout);\n this.closeTimeout = null;\n }\n }\n\n frameLoaded(): void {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n this.publishTarget();\n }\n\n private publishTarget(): void {\n if (!this.config) {\n return;\n }\n this.sequence += 1;\n this.post({\n type: PROVIDER_PANEL_MESSAGE.context,\n panelId: this.config.id,\n sequence: this.sequence,\n target: this.target,\n });\n }\n\n private requestCloseIfReady(requestId: number): void {\n if (\n !this.ready ||\n !this.closing() ||\n requestId !== this.closeSequence ||\n this.closeRequestIdSent === requestId\n ) {\n return;\n }\n this.closeRequestIdSent = requestId;\n this.post({ type: PROVIDER_PANEL_MESSAGE.close, requestId });\n }\n\n private focusPanel(): void {\n this.panelFrame?.nativeElement.focus?.();\n }\n\n private focusReturnTarget(): void {\n if (this.returnFocusElement?.isConnected) {\n this.returnFocusElement.focus();\n }\n }\n\n private post(message: Record<string, unknown>): void {\n if (!this.config) {\n return;\n }\n this.panelFrame?.nativeElement.contentWindow?.postMessage(\n message,\n this.config.origin,\n );\n }\n\n private setPanelWidth(width: number): void {\n this.preferredPanelWidth.set(\n Math.min(Math.max(width, this.minPanelWidth()), this.maxPanelWidth()),\n );\n this.syncPortalLayout();\n }\n\n private availablePanelWidth(): number {\n if (this.isMobileViewport()) {\n return Math.max(1, window.innerWidth);\n }\n return Math.max(1, Math.floor(this.availableMainAreaWidth() / 2));\n }\n\n private availableMainAreaWidth(): number {\n const mainArea = document.querySelector<HTMLElement>(\n PORTAL_MAIN_AREA_SELECTOR,\n );\n if (mainArea) {\n return Math.max(\n 1,\n window.innerWidth - mainArea.getBoundingClientRect().left,\n );\n }\n return Math.max(1, window.innerWidth);\n }\n\n private syncPortalLayout(): void {\n if (this.state() === 'hidden' || this.isMobileViewport()) {\n this.stopObservingPortalLayout();\n this.restorePortalLayout();\n return;\n }\n\n this.observePortalLayout();\n const offset = `${this.panelWidth()}px`;\n document\n .querySelectorAll<HTMLElement>(PORTAL_LAYOUT_SELECTORS)\n .forEach((element) => {\n if (!this.portalLayoutStyles.has(element)) {\n this.portalLayoutStyles.set(element, {\n value: element.style.getPropertyValue('right'),\n priority: element.style.getPropertyPriority('right'),\n });\n }\n element.style.setProperty('right', offset);\n });\n }\n\n private restorePortalLayout(): void {\n this.portalLayoutStyles.forEach(({ value, priority }, element) => {\n if (value) {\n element.style.setProperty('right', value, priority);\n } else {\n element.style.removeProperty('right');\n }\n });\n this.portalLayoutStyles.clear();\n }\n\n private observePortalLayout(): void {\n this.observeMainAreaResize();\n if (this.observingPortalLayout) {\n return;\n }\n this.portalLayoutObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n this.observingPortalLayout = true;\n }\n\n private stopObservingPortalLayout(): void {\n this.portalLayoutObserver.disconnect();\n this.mainAreaResizeObserver?.disconnect();\n this.observedMainArea = null;\n this.observingPortalLayout = false;\n }\n\n private observeMainAreaResize(): void {\n const mainArea = document.querySelector<HTMLElement>(\n PORTAL_MAIN_AREA_SELECTOR,\n );\n if (!this.mainAreaResizeObserver || mainArea === this.observedMainArea) {\n return;\n }\n this.mainAreaResizeObserver.disconnect();\n this.observedMainArea = mainArea;\n if (mainArea) {\n this.mainAreaResizeObserver.observe(mainArea);\n }\n }\n\n private isMobileViewport(): boolean {\n return window.innerWidth <= 600;\n }\n\n private readonly onWindowResize = (): void => {\n this.maxPanelWidth.set(this.availablePanelWidth());\n this.syncPortalLayout();\n };\n\n private readonly onMessage = (event: MessageEvent<unknown>): void => {\n const frame = this.panelFrame?.nativeElement;\n if (\n !frame ||\n event.source !== frame.contentWindow ||\n event.origin !== this.config?.origin ||\n !isRecord(event.data)\n ) {\n return;\n }\n if (event.data['type'] === PROVIDER_PANEL_MESSAGE.ready) {\n this.ready = true;\n if (this.closing()) {\n this.requestCloseIfReady(this.closeSequence);\n } else {\n this.publishTarget();\n }\n }\n if (event.data['type'] === PROVIDER_PANEL_MESSAGE.requestClose) {\n this.close();\n }\n if (\n event.data['type'] === PROVIDER_PANEL_MESSAGE.closeFailed &&\n typeof event.data['requestId'] === 'number' &&\n event.data['requestId'] === this.closeRequestIdSent\n ) {\n this.failClose(event.data['requestId']);\n }\n if (\n event.data['type'] === PROVIDER_PANEL_MESSAGE.closed &&\n typeof event.data['requestId'] === 'number'\n ) {\n this.finishClose(event.data['requestId']);\n }\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction panelDimensions() {\n const rootFontSize = Number.parseFloat(\n window.getComputedStyle(document.documentElement).fontSize,\n );\n const rem =\n Number.isFinite(rootFontSize) && rootFontSize > 0 ? rootFontSize : 16;\n return {\n defaultWidth: 34 * rem,\n minimumWidth: 20 * rem,\n keyboardStep: 2 * rem,\n };\n}\n","<section\n class=\"persistent-panel fd-dialog__content\"\n role=\"complementary\"\n aria-labelledby=\"persistent-panel-title\"\n [attr.aria-hidden]=\"state() === 'hidden'\"\n [class.maximized]=\"state() === 'maximized'\"\n [class.open]=\"state() !== 'hidden'\"\n [class.resizing]=\"resizing()\"\n [style.--pm-panel-width]=\"panelWidth() + 'px'\"\n>\n <div\n class=\"persistent-panel-resizer\"\n role=\"separator\"\n aria-label=\"Resize provider panel\"\n aria-orientation=\"vertical\"\n aria-controls=\"persistent-panel-content\"\n [attr.aria-valuemin]=\"minPanelWidth()\"\n [attr.aria-valuemax]=\"maxPanelWidth()\"\n [attr.aria-valuenow]=\"panelWidth()\"\n tabindex=\"0\"\n (pointerdown)=\"beginResize($event)\"\n (pointermove)=\"resize($event)\"\n (pointerup)=\"finishResize($event)\"\n (pointercancel)=\"finishResize($event)\"\n (lostpointercapture)=\"finishResize($event)\"\n (keydown)=\"resizeWithKeyboard($event)\"\n ></div>\n <header\n class=\"persistent-panel-header fd-dialog__header fd-bar fd-bar--header\"\n >\n <div class=\"fd-bar__left persistent-panel-title-area\">\n <div class=\"fd-bar__element persistent-panel-title-element\">\n <h2\n id=\"persistent-panel-title\"\n class=\"fd-title fd-title--h5 persistent-panel-title\"\n >\n {{ title() }}\n </h2>\n </div>\n </div>\n <div class=\"fd-bar__right persistent-panel-actions\">\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Toggle panel size\"\n [attr.aria-pressed]=\"state() === 'maximized'\"\n title=\"Toggle panel size\"\n type=\"button\"\n (click)=\"toggleSize()\"\n >\n <i\n class=\"sap-icon\"\n [class.sap-icon--exitfullscreen]=\"state() === 'maximized'\"\n [class.sap-icon--full-screen]=\"state() !== 'maximized'\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </div>\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Collapse panel\"\n title=\"Collapse panel\"\n type=\"button\"\n (click)=\"collapse()\"\n >\n <i class=\"sap-icon sap-icon--collapse\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div class=\"fd-bar__element\">\n <button\n class=\"fd-button fd-button--transparent fd-button--compact\"\n aria-label=\"Close panel\"\n title=\"Close panel\"\n type=\"button\"\n (click)=\"close()\"\n >\n <i class=\"sap-icon sap-icon--decline\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </header>\n <div class=\"persistent-panel-body fd-dialog__body\">\n @if (closeError()) {\n <p class=\"persistent-panel-error\" role=\"alert\">{{ closeError() }}</p>\n } @if (source()) {\n <iframe\n #panelFrame\n id=\"persistent-panel-content\"\n class=\"persistent-panel-frame\"\n referrerpolicy=\"no-referrer\"\n sandbox=\"allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts\"\n [src]=\"source()\"\n [title]=\"title()\"\n (load)=\"frameLoaded()\"\n ></iframe>\n }\n </div>\n</section>\n\n@if (state() === 'hidden' && source() && !closing()) {\n<button\n #reopenButton\n class=\"persistent-panel-reopen fd-button fd-button--emphasized fd-button--compact\"\n [attr.aria-label]=\"'Open ' + title()\"\n type=\"button\"\n (click)=\"expand()\"\n>\n {{ title() }}\n</button>\n}\n","import { PersistentPanelComponent } from './persistent-panel';\nimport {\n PersistentPanelConfig,\n PersistentPanelTarget,\n persistentPanelTarget,\n} from './persistent-panel.types';\nimport {\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n Injectable,\n OnDestroy,\n createComponent,\n inject,\n} from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class PersistentPanelService implements OnDestroy {\n private readonly appRef = inject(ApplicationRef);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private panelRef: ComponentRef<PersistentPanelComponent> | null = null;\n private target: PersistentPanelTarget = {};\n private targetUpdateSequence = 0;\n\n open(config: PersistentPanelConfig, target: PersistentPanelTarget): void {\n this.target = target;\n if (!this.panelRef) {\n this.panelRef = createComponent(PersistentPanelComponent, {\n environmentInjector: this.environmentInjector,\n });\n this.appRef.attachView(this.panelRef.hostView);\n document.body.appendChild(\n this.panelRef.location.nativeElement as HTMLElement,\n );\n }\n this.panelRef.instance.open(config, target);\n // createComponent() is outside a template tree, so it has no initial\n // render until change detection is run explicitly. Subsequent signal\n // updates are scheduled normally once the view has been initialized.\n this.panelRef.changeDetectorRef.detectChanges();\n }\n\n beginTargetUpdate(): (context: Record<string, unknown>) => void {\n const targetUpdateSequence = ++this.targetUpdateSequence;\n return (context) => {\n if (targetUpdateSequence !== this.targetUpdateSequence) {\n return;\n }\n this.updateTarget(context);\n };\n }\n\n private updateTarget(context: Record<string, unknown>): void {\n const target = persistentPanelTarget({}, context);\n this.target = target;\n this.panelRef?.instance.updateTarget(target);\n }\n\n currentTarget(): PersistentPanelTarget {\n return structuredClone(this.target);\n }\n\n destroy(): void {\n this.targetUpdateSequence += 1;\n if (this.panelRef) {\n const host = this.panelRef.location.nativeElement as HTMLElement;\n this.appRef.detachView(this.panelRef.hostView);\n this.panelRef.destroy();\n host.remove();\n this.panelRef = null;\n }\n this.target = {};\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n}\n","import { PortalLuigiNode } from '../models/luigi-node';\n\nexport function collectAccountNamesFromNodeHierarchy(\n node: PortalLuigiNode | undefined,\n): string[] {\n const accountNames: string[] = [];\n let currentNode: PortalLuigiNode | undefined = node;\n\n while (currentNode) {\n const entityName = currentNode.context?.entityName;\n const entityKind = currentNode.context?.entityKind;\n if (entityName && entityKind?.toLowerCase() === 'account') {\n accountNames.unshift(entityName);\n }\n currentNode = currentNode.parent;\n }\n\n return accountNames;\n}\n\nexport function getInitialAccountId(\n entityId?: string,\n kind?: string,\n): string | undefined {\n return kind?.toLowerCase() === 'account' && entityId ? entityId : undefined;\n}\n\nexport function calculateAccountHierarchy(\n entityNode: PortalLuigiNode,\n entityId?: string,\n kind?: string,\n): string[] {\n const initialAccountId = getInitialAccountId(entityId, kind);\n // when we are on a dynamic node and the id any kind has changed we need to reset the context data\n if (entityNode.defineEntity?.contextKey && initialAccountId) {\n entityNode.context.entityName = undefined;\n entityNode.context.entityKind = undefined;\n }\n\n const accountNames = collectAccountNamesFromNodeHierarchy(entityNode);\n\n if (initialAccountId) {\n accountNames.push(initialAccountId);\n }\n return accountNames;\n}\n","import { kcpRootOrgsPath } from '../models/constants';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport {\n calculateAccountHierarchy,\n getInitialAccountId,\n} from '../utils/account-hierarchy.util';\nimport { Injectable, inject } from '@angular/core';\nimport { EnvConfigService } from '@openmfp/portal-ui-lib';\nimport { GatewayService } from '@platform-mesh/portal-ui-lib/services';\n\nexport interface KcpData {\n kcpPath: string;\n accountPath: string | undefined;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class CrdGatewayKcpPatchResolver {\n private gatewayService = inject(GatewayService);\n private envConfigService = inject(EnvConfigService);\n\n public async resolveCrdGatewayKcpPath(\n nextNode: PortalLuigiNode,\n entityId?: string,\n kind?: string,\n ): Promise<KcpData> {\n if (nextNode.context?.kcpPath && !getInitialAccountId(entityId, kind)) {\n this.gatewayService.updateCrdGatewayUrlWithEntityPath(\n nextNode.context.kcpPath,\n );\n return {\n kcpPath: nextNode.context.kcpPath,\n accountPath: nextNode.context.accountPath,\n };\n }\n\n const accountNames = calculateAccountHierarchy(nextNode, entityId, kind);\n\n const accountPath =\n accountNames.length > 0 ? `${accountNames.join(':')}` : '';\n\n const org = (await this.envConfigService.getEnvConfig()).idpName;\n const kcpPath = `${kcpRootOrgsPath}:${org}${accountPath ? ':' + accountPath : ''}`;\n this.gatewayService.updateCrdGatewayUrlWithEntityPath(kcpPath);\n\n if (nextNode.context) {\n nextNode.context.kcpPath = kcpPath;\n nextNode.context.accountPath = accountPath;\n }\n return { kcpPath, accountPath };\n }\n}\n","import { PortalLuigiNode } from '../models/luigi-node';\nimport { PersistentPanelService } from '../persistent-panel/persistent-panel.service';\nimport { CrdGatewayKcpPatchResolver } from './crd-gateway-kcp-patch-resolver.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n LuigiCoreService,\n NodeChangeHookConfigService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class NodeChangeHookConfigServiceImpl implements NodeChangeHookConfigService {\n private luigiCoreService = inject(LuigiCoreService);\n private crdGatewayKcpPatchResolver = inject(CrdGatewayKcpPatchResolver);\n private persistentPanelService = inject(PersistentPanelService);\n\n async nodeChangeHook(\n prevNode: PortalLuigiNode,\n nextNode: PortalLuigiNode,\n currentContext: NodeContext,\n ) {\n const updatePersistentPanelTarget =\n this.persistentPanelService.beginTargetUpdate();\n\n if (\n nextNode.initialRoute &&\n nextNode.virtualTree &&\n !(nextNode as any)._virtualTree\n ) {\n this.luigiCoreService.navigation().navigate(nextNode.initialRoute);\n }\n\n this.accumulatePortalPermissions(prevNode, nextNode, currentContext);\n await this.crdGatewayKcpPatchResolver.resolveCrdGatewayKcpPath(nextNode);\n updatePersistentPanelTarget({\n ...currentContext,\n ...(nextNode.context ?? {}),\n });\n }\n\n private accumulatePortalPermissions(\n prevNode: PortalLuigiNode,\n nextNode: PortalLuigiNode,\n currentContext: NodeContext,\n ) {\n const portalPermissions =\n prevNode?.context?.portalPermissions ??\n currentContext?.portalPermissions ??\n {};\n\n nextNode.context?.nodesPermissions?.forEach((permission) => {\n portalPermissions[permission.resource] = permission.actions;\n });\n\n currentContext.portalPermissions = portalPermissions;\n\n if (nextNode.context) {\n nextNode.context.portalPermissions = portalPermissions;\n }\n }\n}\n","import { PortalNodeContext } from '../models/luigi-context';\nimport { PortalLuigiNode } from '../models/luigi-node';\nimport { CrdGatewayKcpPatchResolver } from './crd-gateway-kcp-patch-resolver.service';\nimport { Injectable, inject } from '@angular/core';\nimport {\n LuigiCoreService,\n NodeContextProcessingService,\n} from '@openmfp/portal-ui-lib';\nimport { AccountInfo } from '@platform-mesh/portal-ui-lib/models';\nimport {\n AccountInfoService,\n ErrorHandlerService,\n InstancePermissionsService,\n OrganizationReadyService,\n} from '@platform-mesh/portal-ui-lib/services';\nimport { permissionKey } from '@platform-mesh/portal-ui-lib/utils';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NodeContextProcessingServiceImpl implements NodeContextProcessingService {\n private crdGatewayKcpPatchResolver = inject(CrdGatewayKcpPatchResolver);\n private accountInfoService = inject(AccountInfoService);\n private instancePermissionsService = inject(InstancePermissionsService);\n private organizationReadyService = inject(OrganizationReadyService);\n private errorHandlerService = inject(ErrorHandlerService);\n private luigiCoreService = inject(LuigiCoreService);\n\n public async processNodeContext(\n dynamicEntityId: string,\n entityNode: PortalLuigiNode,\n ctx: PortalNodeContext,\n ) {\n const kind = entityNode.defineEntity?.type;\n const entityId =\n dynamicEntityId || entityNode.context.resourceDefinition?.name;\n\n if (!entityId) {\n return;\n }\n\n const { kcpPath, accountPath } =\n await this.crdGatewayKcpPatchResolver.resolveCrdGatewayKcpPath(\n entityNode,\n entityId,\n kind,\n );\n\n // update the current already calculated by Luigi context for a node\n this.addFieldsToContext(ctx, entityId, kcpPath, accountPath, kind);\n\n // update the node context of sa node to contain the entity for future context calculations\n this.addFieldsToContext(\n entityNode.context,\n entityId,\n kcpPath,\n accountPath,\n kind,\n );\n\n this.accamulatePortalPermissions(ctx);\n this.getEntityPermissions(ctx);\n try {\n const accountInfo = await firstValueFrom(\n this.accountInfoService.read({\n portalContext: {\n crdGatewayApiUrl: ctx.portalContext.crdGatewayApiUrl,\n },\n token: ctx.token,\n accountId: entityId,\n }),\n );\n\n // update the current already calculated by Luigi context for a node\n this.addFieldsToContextFromAccountInfo(ctx, entityId, accountInfo);\n\n // update the node context of sa node to contain the entity for future context calculations\n this.addFieldsToContextFromAccountInfo(\n entityNode.context,\n entityId,\n accountInfo,\n );\n\n // we were able to ready the account info so on this kcpPath we can query for the organization ready state\n this.organizationReadyService.checkOrganizationReady();\n } catch (e) {\n if (!this.errorHandlerService.isUnauthorizedAccess(e)) {\n console.error('Failed to read account info', e);\n }\n }\n }\n\n private addFieldsToContext(\n ctx: PortalNodeContext,\n entityId: string | undefined,\n kcpPath: string,\n accountPath: string | undefined,\n kind: string | undefined,\n ) {\n ctx.kcpPath = kcpPath;\n ctx.entityName = entityId;\n ctx.entityKind = kind;\n ctx.accountPath = accountPath;\n }\n\n private addFieldsToContextFromAccountInfo(\n ctx: PortalNodeContext,\n entityId: string,\n accountInfo: AccountInfo,\n ) {\n const accountOriginClusterId = accountInfo.spec.account.originClusterId;\n const organizationOriginClusterId =\n accountInfo.spec.organization.originClusterId;\n const organization = accountInfo.spec.organization.name;\n\n ctx.organizationId = `${organizationOriginClusterId}/${organization}`;\n ctx.entityId = `${accountOriginClusterId}/${entityId}`;\n ctx.kcpCA = btoa(accountInfo.spec.clusterInfo.ca);\n }\n\n private getEntityPermissions(ctx: PortalNodeContext) {\n const resourceDefinition = ctx.resourceDefinition;\n\n if (!resourceDefinition || !resourceDefinition?.permissionsDefinition) {\n return;\n }\n\n const name = ctx[resourceDefinition.permissionsDefinition.entityContextKey];\n\n if (!name) {\n return;\n }\n\n const namespace = this.luigiCoreService\n .routing()\n .getSearchParams().namespace;\n\n return this.instancePermissionsService\n .checkInstance(ctx, resourceDefinition.permissionsDefinition!, {\n name,\n namespace,\n })\n .subscribe((result) => {\n const portalPermissions = ctx.portalPermissions ?? {};\n\n result.forEach((permission) => {\n portalPermissions[`${permissionKey(permission)}`] =\n permission.actions;\n });\n\n ctx.portalPermissions = portalPermissions;\n });\n }\n\n private accamulatePortalPermissions(ctx: PortalNodeContext) {\n const portalPermissions = ctx.portalPermissions ?? {};\n\n ctx.nodesPermissions?.forEach((permission) => {\n portalPermissions[permission.resource] = permission.actions;\n });\n\n ctx.portalPermissions = portalPermissions;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n ClientEnvironment,\n EnvConfigService,\n RoutingConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable()\nexport class CustomRoutingConfigServiceImpl implements RoutingConfigService {\n private envConfigService = inject(EnvConfigService);\n private envConfig: ClientEnvironment | null = null;\n\n constructor() {\n this.getEnvConfig();\n }\n\n async getEnvConfig(): Promise<void> {\n this.envConfig = await this.envConfigService.getEnvConfig();\n }\n\n getRoutingConfig(): any {\n return {\n preserveQueryParams: true,\n pageNotFoundHandler: () => {\n if (!this.envConfig?.baseDomain) {\n return this.redirectTo('error/404');\n }\n\n if (window.location.hostname === this.envConfig.baseDomain) {\n return this.redirectTo('welcome');\n }\n\n return this.redirectTo('error/404');\n },\n };\n }\n\n public redirectTo(path: string, keepURL = true): any {\n return {\n redirectTo: path,\n keepURL,\n };\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AuthService,\n UserProfile,\n UserProfileConfigService,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class UserProfileConfigServiceImpl implements UserProfileConfigService {\n private authService = inject(AuthService);\n async getProfile(): Promise<UserProfile> {\n const { email } = this.authService.getUserInfo();\n\n return {\n items: [\n {\n label: 'PROFILE_PROFILE',\n icon: 'customer',\n link: `/users/${email}/overview`,\n },\n ],\n };\n }\n}\n","import { PersistentPanelService } from './persistent-panel.service';\nimport {\n OPEN_PERSISTENT_PANEL_MESSAGE,\n mergePersistentPanelTargets,\n parsePersistentPanelConfig,\n persistentPanelTarget,\n} from './persistent-panel.types';\nimport { Injectable, inject } from '@angular/core';\nimport {\n CustomMessageListener,\n LuigiCoreService,\n NodeContext,\n} from '@openmfp/portal-ui-lib';\n\n@Injectable({ providedIn: 'root' })\nexport class OpenPersistentPanelListener implements CustomMessageListener {\n private readonly luigiCoreService = inject(LuigiCoreService);\n private readonly persistentPanelService = inject(PersistentPanelService);\n\n messageId(): string {\n return OPEN_PERSISTENT_PANEL_MESSAGE;\n }\n\n onCustomMessageReceived(\n customMessage: Record<string, unknown>,\n _microFrontend: unknown,\n microFrontendNode: { context?: NodeContext; viewUrl?: string } | undefined,\n ): void {\n const config = parsePersistentPanelConfig(\n customMessage as { id: string },\n microFrontendNode,\n new URL(document.baseURI).origin,\n );\n const target = mergePersistentPanelTargets(\n this.persistentPanelService.currentTarget(),\n persistentPanelTarget(\n this.luigiCoreService.getGlobalContext(),\n microFrontendNode?.context,\n ),\n );\n this.persistentPanelService.open(config, target);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["isRecord"],"mappings":"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"}
|