@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-models.mjs","sources":["../../projects/lib/models/constants/constants.ts","../../projects/lib/models/models/resource.ts","../../projects/lib/models/platform-mesh-portal-ui-lib-models.ts"],"sourcesContent":["export const ALL_NAMESPACE = '-all-';\nexport const kcpRootOrgsPath = 'root:orgs';\n","import { PlatformMeshFieldDefinition, UIDefinition } from './ui-definition';\nimport { GenericResource } from '@openmfp/ngx';\nimport { Condition, ObjectMeta } from 'kubernetes-types/meta/v1';\n\nexport interface ResourceStatus {\n conditions: Condition[];\n}\n\nexport interface ResourceSpec extends Record<string, any> {\n type: string;\n description?: string;\n displayName?: string;\n}\n\nexport interface ResourceMeta extends ObjectMeta {\n name: string;\n}\n\nexport interface Resource extends GenericResource {\n metadata: ResourceMeta;\n spec?: ResourceSpec;\n status?: ResourceStatus;\n __typename?: string;\n data?: Record<string, any>;\n ready?: boolean;\n isAvailable?: boolean;\n accessibleName?: string;\n}\n\nexport interface ResourceDefinition {\n apiGroup?: string;\n version: string;\n entityCollection: string;\n entity: string;\n name?: string;\n scope?: KubernetesScope;\n namespace?: string;\n readyCondition?: PlatformMeshFieldDefinition;\n ui?: UIDefinition;\n}\n\nexport const ResourceOperationTypeMap = {\n ADDED: 'ADDED',\n MODIFIED: 'MODIFIED',\n DELETED: 'DELETED',\n} as const;\n\nexport type ResourceOperationType =\n (typeof ResourceOperationTypeMap)[keyof typeof ResourceOperationTypeMap];\n\nexport interface ResourceSubscriptionResult {\n type: ResourceOperationType;\n object: Resource;\n}\n\nexport interface ResourcePagination {\n limit: number | undefined;\n continue: string | undefined;\n}\n\nexport interface ResourceListResult {\n resourceVersion: string;\n items: Resource[];\n continue: string | undefined;\n remainingItemCount?: number;\n}\n\nexport type KubernetesScope = 'Cluster' | 'Namespaced';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,aAAa,GAAG;AACtB,MAAM,eAAe,GAAG;;
|
|
1
|
+
{"version":3,"file":"platform-mesh-portal-ui-lib-models.mjs","sources":["../../projects/lib/models/constants/constants.ts","../../projects/lib/models/models/resource.ts","../../projects/lib/models/platform-mesh-portal-ui-lib-models.ts"],"sourcesContent":["export const ALL_NAMESPACE = '-all-';\nexport const kcpRootOrgsPath = 'root:orgs';\n","import { PlatformMeshFieldDefinition, UIDefinition } from './ui-definition';\nimport { GenericResource } from '@openmfp/ngx';\nimport { Condition, ObjectMeta } from 'kubernetes-types/meta/v1';\n\nexport interface ResourceStatus {\n conditions: Condition[];\n}\n\nexport interface ResourceSpec extends Record<string, any> {\n type: string;\n description?: string;\n displayName?: string;\n}\n\nexport interface ResourceMeta extends ObjectMeta {\n name: string;\n}\n\nexport interface Resource extends GenericResource {\n metadata: ResourceMeta;\n spec?: ResourceSpec;\n status?: ResourceStatus;\n __typename?: string;\n data?: Record<string, any>;\n ready?: boolean;\n isAvailable?: boolean;\n accessibleName?: string;\n}\n\nexport interface PermissionsDefinition {\n group: string;\n resource: string;\n entityActions: string[];\n resourceActions: string[];\n entityContextKey: string;\n}\n\nexport interface ResourceDefinition {\n apiGroup?: string;\n version: string;\n entityCollection: string;\n entity: string;\n name?: string;\n scope?: KubernetesScope;\n namespace?: string;\n readyCondition?: PlatformMeshFieldDefinition;\n ui?: UIDefinition;\n permissionsDefinition?: PermissionsDefinition;\n}\n\nexport const ResourceOperationTypeMap = {\n ADDED: 'ADDED',\n MODIFIED: 'MODIFIED',\n DELETED: 'DELETED',\n} as const;\n\nexport type ResourceOperationType =\n (typeof ResourceOperationTypeMap)[keyof typeof ResourceOperationTypeMap];\n\nexport interface ResourceSubscriptionResult {\n type: ResourceOperationType;\n object: Resource;\n}\n\nexport interface ResourcePagination {\n limit: number | undefined;\n continue: string | undefined;\n}\n\nexport interface ResourceListResult {\n resourceVersion: string;\n items: Resource[];\n continue: string | undefined;\n remainingItemCount?: number;\n}\n\nexport type KubernetesScope = 'Cluster' | 'Namespaced';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAO,MAAM,aAAa,GAAG;AACtB,MAAM,eAAe,GAAG;;ACiDxB,MAAM,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;;;ACrDpB;;AAEG;;;;"}
|
|
@@ -5,8 +5,8 @@ import '@ui5/webcomponents/dist/Breadcrumbs.js';
|
|
|
5
5
|
import '@ui5/webcomponents/dist/BreadcrumbsItem.js';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { ALL_NAMESPACE, kcpRootOrgsPath } from '@platform-mesh/portal-ui-lib/models';
|
|
8
|
-
import { ResourceService, GatewayService, AccountInfoService, OrganizationReadyService, ErrorHandlerService } from '@platform-mesh/portal-ui-lib/services';
|
|
9
|
-
import { isNamespacedResource, generateGraphQLFields, mergeListWithSubscriptionResult } from '@platform-mesh/portal-ui-lib/utils';
|
|
8
|
+
import { ResourceService, GatewayService, AccountInfoService, InstancePermissionsService, OrganizationReadyService, ErrorHandlerService } from '@platform-mesh/portal-ui-lib/services';
|
|
9
|
+
import { isNamespacedResource, generateGraphQLFields, mergeListWithSubscriptionResult, permissionKey } from '@platform-mesh/portal-ui-lib/utils';
|
|
10
10
|
import '@ui5/webcomponents/dist/ComboBox.js';
|
|
11
11
|
import { Subject, defer, of, firstValueFrom } from 'rxjs';
|
|
12
12
|
import { shareReplay, retry, takeUntil, switchMap, startWith, scan, tap, catchError } from 'rxjs/operators';
|
|
@@ -79,10 +79,10 @@ class CustomGlobalNodesServiceImpl {
|
|
|
79
79
|
},
|
|
80
80
|
];
|
|
81
81
|
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
83
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomGlobalNodesServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
83
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomGlobalNodesServiceImpl, providedIn: 'root' }); }
|
|
84
84
|
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomGlobalNodesServiceImpl, decorators: [{
|
|
86
86
|
type: Injectable,
|
|
87
87
|
args: [{ providedIn: 'root' }]
|
|
88
88
|
}] });
|
|
@@ -256,10 +256,10 @@ class NamespaceSelectionRendererService {
|
|
|
256
256
|
}
|
|
257
257
|
this.luigiCoreService.routing().addSearchParams({ namespace: value });
|
|
258
258
|
}
|
|
259
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
260
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
259
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NamespaceSelectionRendererService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
260
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NamespaceSelectionRendererService, providedIn: 'root' }); }
|
|
261
261
|
}
|
|
262
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NamespaceSelectionRendererService, decorators: [{
|
|
263
263
|
type: Injectable,
|
|
264
264
|
args: [{ providedIn: 'root' }]
|
|
265
265
|
}] });
|
|
@@ -282,10 +282,10 @@ class HeaderBarConfigServiceImpl {
|
|
|
282
282
|
],
|
|
283
283
|
};
|
|
284
284
|
}
|
|
285
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
286
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
285
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HeaderBarConfigServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
286
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HeaderBarConfigServiceImpl, providedIn: 'root' }); }
|
|
287
287
|
}
|
|
288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: HeaderBarConfigServiceImpl, decorators: [{
|
|
289
289
|
type: Injectable,
|
|
290
290
|
args: [{
|
|
291
291
|
providedIn: 'root',
|
|
@@ -307,10 +307,10 @@ class LuigiExtendedGlobalContextConfigServiceImpl {
|
|
|
307
307
|
entityName: idpName,
|
|
308
308
|
};
|
|
309
309
|
}
|
|
310
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
311
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
310
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LuigiExtendedGlobalContextConfigServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
311
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LuigiExtendedGlobalContextConfigServiceImpl, providedIn: 'root' }); }
|
|
312
312
|
}
|
|
313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
313
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: LuigiExtendedGlobalContextConfigServiceImpl, decorators: [{
|
|
314
314
|
type: Injectable,
|
|
315
315
|
args: [{ providedIn: 'root' }]
|
|
316
316
|
}] });
|
|
@@ -328,10 +328,10 @@ class NavigationRedirectStrategyServiceImpl {
|
|
|
328
328
|
clearRedirectUrl() {
|
|
329
329
|
localStorage.removeItem(LocalStorageKeys.LAST_NAVIGATION_URL);
|
|
330
330
|
}
|
|
331
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
332
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
331
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NavigationRedirectStrategyServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
332
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NavigationRedirectStrategyServiceImpl, providedIn: 'root' }); }
|
|
333
333
|
}
|
|
334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NavigationRedirectStrategyServiceImpl, decorators: [{
|
|
335
335
|
type: Injectable,
|
|
336
336
|
args: [{ providedIn: 'root' }]
|
|
337
337
|
}] });
|
|
@@ -928,10 +928,10 @@ class PersistentPanelComponent {
|
|
|
928
928
|
isMobileViewport() {
|
|
929
929
|
return window.innerWidth <= 600;
|
|
930
930
|
}
|
|
931
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
932
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
931
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PersistentPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
932
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.20", type: PersistentPanelComponent, isStandalone: true, selector: "pm-persistent-panel", viewQueries: [{ propertyName: "panelFrame", first: true, predicate: ["panelFrame"], descendants: true }, { propertyName: "reopenButton", first: true, predicate: ["reopenButton"], descendants: true }], ngImport: i0, template: "<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", styles: [":host{font-family:var(--sapFontFamily, \"72\", Arial, sans-serif)}.persistent-panel{position:fixed;top:var(--luigi__shellbar--height, 3.25rem);right:0;bottom:0;z-index:1000;display:none;box-sizing:border-box;min-width:0;max-width:none;min-height:0;max-height:none;width:var(--pm-panel-width, min(34rem, 100vw));background:var(--sapGroup_ContentBackground, #fff);border-radius:var(--sapElement_BorderCornerRadius, .75rem) 0 0 var(--sapElement_BorderCornerRadius, .75rem);box-shadow:var(--sapContent_Shadow3, 0 0 0 .0625rem rgba(34, 53, 72, .48), 0 1.25rem 5rem rgba(34, 53, 72, .3))}:host-context(.lui-breadcrumb) .persistent-panel{top:calc(var(--luigi__shellbar--height, 3.25rem) + var(--luigi__breadcrumb--height, 2.75rem))}.persistent-panel.open{display:grid;grid-template-rows:auto minmax(0,1fr)}.persistent-panel-resizer{position:absolute;top:0;bottom:0;left:-.375rem;z-index:1;width:.75rem;cursor:col-resize;touch-action:none}.persistent-panel-resizer:after{position:absolute;top:50%;left:50%;width:.125rem;height:3rem;background:var(--sapContent_FocusColor, #0064d9);border-radius:.125rem;content:\"\";opacity:0;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .12s ease-in-out}.persistent-panel-resizer:hover:after,.persistent-panel-resizer:focus-visible:after,.persistent-panel.resizing .persistent-panel-resizer:after{opacity:1}.persistent-panel-resizer:focus-visible{outline:0}.persistent-panel-resizer:focus-visible:after{outline:var(--sapContent_FocusWidth, .125rem) solid var(--sapContent_FocusColor, #0032a5);outline-offset:.125rem}.persistent-panel.maximized .persistent-panel-resizer{display:none}.persistent-panel-header{min-width:0;border-radius:var(--sapElement_BorderCornerRadius, .75rem) 0 0}.persistent-panel-title-area,.persistent-panel-title-element{min-width:0}.persistent-panel-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.persistent-panel-body{display:flex;min-width:0;min-height:0;flex-direction:column;padding:0;overflow:hidden}.persistent-panel-error{flex:none;margin:0;padding:.5rem 1rem;color:var(--sapNegativeTextColor, #aa0808);background:var(--sapErrorBackground, #ffeaf4);font-size:var(--sapFontSmallSize, .75rem)}.persistent-panel-frame{min-height:0;flex:1;width:100%;border:0;border-bottom-left-radius:var(--sapElement_BorderCornerRadius, .75rem)}.persistent-panel.resizing,.persistent-panel.resizing .persistent-panel-resizer{cursor:col-resize}.persistent-panel.resizing .persistent-panel-frame{pointer-events:none;-webkit-user-select:none;user-select:none}.persistent-panel-reopen{position:fixed;right:1rem;bottom:1rem;z-index:1000;overflow:hidden;max-width:calc(100vw - 2rem);text-overflow:ellipsis;white-space:nowrap}@media(max-width:600px){.persistent-panel,.persistent-panel.maximized{left:0;width:100vw;border-radius:0;box-shadow:none}.persistent-panel-resizer{display:none}.persistent-panel-header,.persistent-panel-body,.persistent-panel-frame{border-radius:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
933
933
|
}
|
|
934
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
934
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PersistentPanelComponent, decorators: [{
|
|
935
935
|
type: Component,
|
|
936
936
|
args: [{ selector: 'pm-persistent-panel', imports: [CommonModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{font-family:var(--sapFontFamily, \"72\", Arial, sans-serif)}.persistent-panel{position:fixed;top:var(--luigi__shellbar--height, 3.25rem);right:0;bottom:0;z-index:1000;display:none;box-sizing:border-box;min-width:0;max-width:none;min-height:0;max-height:none;width:var(--pm-panel-width, min(34rem, 100vw));background:var(--sapGroup_ContentBackground, #fff);border-radius:var(--sapElement_BorderCornerRadius, .75rem) 0 0 var(--sapElement_BorderCornerRadius, .75rem);box-shadow:var(--sapContent_Shadow3, 0 0 0 .0625rem rgba(34, 53, 72, .48), 0 1.25rem 5rem rgba(34, 53, 72, .3))}:host-context(.lui-breadcrumb) .persistent-panel{top:calc(var(--luigi__shellbar--height, 3.25rem) + var(--luigi__breadcrumb--height, 2.75rem))}.persistent-panel.open{display:grid;grid-template-rows:auto minmax(0,1fr)}.persistent-panel-resizer{position:absolute;top:0;bottom:0;left:-.375rem;z-index:1;width:.75rem;cursor:col-resize;touch-action:none}.persistent-panel-resizer:after{position:absolute;top:50%;left:50%;width:.125rem;height:3rem;background:var(--sapContent_FocusColor, #0064d9);border-radius:.125rem;content:\"\";opacity:0;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .12s ease-in-out}.persistent-panel-resizer:hover:after,.persistent-panel-resizer:focus-visible:after,.persistent-panel.resizing .persistent-panel-resizer:after{opacity:1}.persistent-panel-resizer:focus-visible{outline:0}.persistent-panel-resizer:focus-visible:after{outline:var(--sapContent_FocusWidth, .125rem) solid var(--sapContent_FocusColor, #0032a5);outline-offset:.125rem}.persistent-panel.maximized .persistent-panel-resizer{display:none}.persistent-panel-header{min-width:0;border-radius:var(--sapElement_BorderCornerRadius, .75rem) 0 0}.persistent-panel-title-area,.persistent-panel-title-element{min-width:0}.persistent-panel-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.persistent-panel-body{display:flex;min-width:0;min-height:0;flex-direction:column;padding:0;overflow:hidden}.persistent-panel-error{flex:none;margin:0;padding:.5rem 1rem;color:var(--sapNegativeTextColor, #aa0808);background:var(--sapErrorBackground, #ffeaf4);font-size:var(--sapFontSmallSize, .75rem)}.persistent-panel-frame{min-height:0;flex:1;width:100%;border:0;border-bottom-left-radius:var(--sapElement_BorderCornerRadius, .75rem)}.persistent-panel.resizing,.persistent-panel.resizing .persistent-panel-resizer{cursor:col-resize}.persistent-panel.resizing .persistent-panel-frame{pointer-events:none;-webkit-user-select:none;user-select:none}.persistent-panel-reopen{position:fixed;right:1rem;bottom:1rem;z-index:1000;overflow:hidden;max-width:calc(100vw - 2rem);text-overflow:ellipsis;white-space:nowrap}@media(max-width:600px){.persistent-panel,.persistent-panel.maximized{left:0;width:100vw;border-radius:0;box-shadow:none}.persistent-panel-resizer{display:none}.persistent-panel-header,.persistent-panel-body,.persistent-panel-frame{border-radius:0}}\n"] }]
|
|
937
937
|
}], ctorParameters: () => [], propDecorators: { panelFrame: [{
|
|
@@ -1008,10 +1008,10 @@ class PersistentPanelService {
|
|
|
1008
1008
|
ngOnDestroy() {
|
|
1009
1009
|
this.destroy();
|
|
1010
1010
|
}
|
|
1011
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1012
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1011
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PersistentPanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1012
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PersistentPanelService, providedIn: 'root' }); }
|
|
1013
1013
|
}
|
|
1014
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1014
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: PersistentPanelService, decorators: [{
|
|
1015
1015
|
type: Injectable,
|
|
1016
1016
|
args: [{ providedIn: 'root' }]
|
|
1017
1017
|
}] });
|
|
@@ -1070,10 +1070,10 @@ class CrdGatewayKcpPatchResolver {
|
|
|
1070
1070
|
}
|
|
1071
1071
|
return { kcpPath, accountPath };
|
|
1072
1072
|
}
|
|
1073
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1074
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1073
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CrdGatewayKcpPatchResolver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1074
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CrdGatewayKcpPatchResolver, providedIn: 'root' }); }
|
|
1075
1075
|
}
|
|
1076
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1076
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CrdGatewayKcpPatchResolver, decorators: [{
|
|
1077
1077
|
type: Injectable,
|
|
1078
1078
|
args: [{ providedIn: 'root' }]
|
|
1079
1079
|
}] });
|
|
@@ -1110,10 +1110,10 @@ class NodeChangeHookConfigServiceImpl {
|
|
|
1110
1110
|
nextNode.context.portalPermissions = portalPermissions;
|
|
1111
1111
|
}
|
|
1112
1112
|
}
|
|
1113
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1114
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeChangeHookConfigServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1114
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeChangeHookConfigServiceImpl, providedIn: 'root' }); }
|
|
1115
1115
|
}
|
|
1116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeChangeHookConfigServiceImpl, decorators: [{
|
|
1117
1117
|
type: Injectable,
|
|
1118
1118
|
args: [{ providedIn: 'root' }]
|
|
1119
1119
|
}] });
|
|
@@ -1122,8 +1122,10 @@ class NodeContextProcessingServiceImpl {
|
|
|
1122
1122
|
constructor() {
|
|
1123
1123
|
this.crdGatewayKcpPatchResolver = inject(CrdGatewayKcpPatchResolver);
|
|
1124
1124
|
this.accountInfoService = inject(AccountInfoService);
|
|
1125
|
+
this.instancePermissionsService = inject(InstancePermissionsService);
|
|
1125
1126
|
this.organizationReadyService = inject(OrganizationReadyService);
|
|
1126
1127
|
this.errorHandlerService = inject(ErrorHandlerService);
|
|
1128
|
+
this.luigiCoreService = inject(LuigiCoreService);
|
|
1127
1129
|
}
|
|
1128
1130
|
async processNodeContext(dynamicEntityId, entityNode, ctx) {
|
|
1129
1131
|
const kind = entityNode.defineEntity?.type;
|
|
@@ -1137,6 +1139,7 @@ class NodeContextProcessingServiceImpl {
|
|
|
1137
1139
|
// update the node context of sa node to contain the entity for future context calculations
|
|
1138
1140
|
this.addFieldsToContext(entityNode.context, entityId, kcpPath, accountPath, kind);
|
|
1139
1141
|
this.accamulatePortalPermissions(ctx);
|
|
1142
|
+
this.getEntityPermissions(ctx);
|
|
1140
1143
|
try {
|
|
1141
1144
|
const accountInfo = await firstValueFrom(this.accountInfoService.read({
|
|
1142
1145
|
portalContext: {
|
|
@@ -1172,6 +1175,32 @@ class NodeContextProcessingServiceImpl {
|
|
|
1172
1175
|
ctx.entityId = `${accountOriginClusterId}/${entityId}`;
|
|
1173
1176
|
ctx.kcpCA = btoa(accountInfo.spec.clusterInfo.ca);
|
|
1174
1177
|
}
|
|
1178
|
+
getEntityPermissions(ctx) {
|
|
1179
|
+
const resourceDefinition = ctx.resourceDefinition;
|
|
1180
|
+
if (!resourceDefinition || !resourceDefinition?.permissionsDefinition) {
|
|
1181
|
+
return;
|
|
1182
|
+
}
|
|
1183
|
+
const name = ctx[resourceDefinition.permissionsDefinition.entityContextKey];
|
|
1184
|
+
if (!name) {
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
const namespace = this.luigiCoreService
|
|
1188
|
+
.routing()
|
|
1189
|
+
.getSearchParams().namespace;
|
|
1190
|
+
return this.instancePermissionsService
|
|
1191
|
+
.checkInstance(ctx, resourceDefinition.permissionsDefinition, {
|
|
1192
|
+
name,
|
|
1193
|
+
namespace,
|
|
1194
|
+
})
|
|
1195
|
+
.subscribe((result) => {
|
|
1196
|
+
const portalPermissions = ctx.portalPermissions ?? {};
|
|
1197
|
+
result.forEach((permission) => {
|
|
1198
|
+
portalPermissions[`${permissionKey(permission)}`] =
|
|
1199
|
+
permission.actions;
|
|
1200
|
+
});
|
|
1201
|
+
ctx.portalPermissions = portalPermissions;
|
|
1202
|
+
});
|
|
1203
|
+
}
|
|
1175
1204
|
accamulatePortalPermissions(ctx) {
|
|
1176
1205
|
const portalPermissions = ctx.portalPermissions ?? {};
|
|
1177
1206
|
ctx.nodesPermissions?.forEach((permission) => {
|
|
@@ -1179,10 +1208,10 @@ class NodeContextProcessingServiceImpl {
|
|
|
1179
1208
|
});
|
|
1180
1209
|
ctx.portalPermissions = portalPermissions;
|
|
1181
1210
|
}
|
|
1182
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1183
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1211
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeContextProcessingServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1212
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeContextProcessingServiceImpl, providedIn: 'root' }); }
|
|
1184
1213
|
}
|
|
1185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: NodeContextProcessingServiceImpl, decorators: [{
|
|
1186
1215
|
type: Injectable,
|
|
1187
1216
|
args: [{
|
|
1188
1217
|
providedIn: 'root',
|
|
@@ -1218,10 +1247,10 @@ class CustomRoutingConfigServiceImpl {
|
|
|
1218
1247
|
keepURL,
|
|
1219
1248
|
};
|
|
1220
1249
|
}
|
|
1221
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1222
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1250
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomRoutingConfigServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1251
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomRoutingConfigServiceImpl }); }
|
|
1223
1252
|
}
|
|
1224
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1253
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: CustomRoutingConfigServiceImpl, decorators: [{
|
|
1225
1254
|
type: Injectable
|
|
1226
1255
|
}], ctorParameters: () => [] });
|
|
1227
1256
|
|
|
@@ -1241,10 +1270,10 @@ class UserProfileConfigServiceImpl {
|
|
|
1241
1270
|
],
|
|
1242
1271
|
};
|
|
1243
1272
|
}
|
|
1244
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1245
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1273
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UserProfileConfigServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1274
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UserProfileConfigServiceImpl, providedIn: 'root' }); }
|
|
1246
1275
|
}
|
|
1247
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1276
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: UserProfileConfigServiceImpl, decorators: [{
|
|
1248
1277
|
type: Injectable,
|
|
1249
1278
|
args: [{ providedIn: 'root' }]
|
|
1250
1279
|
}] });
|
|
@@ -1262,10 +1291,10 @@ class OpenPersistentPanelListener {
|
|
|
1262
1291
|
const target = mergePersistentPanelTargets(this.persistentPanelService.currentTarget(), persistentPanelTarget(this.luigiCoreService.getGlobalContext(), microFrontendNode?.context));
|
|
1263
1292
|
this.persistentPanelService.open(config, target);
|
|
1264
1293
|
}
|
|
1265
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1266
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
1294
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OpenPersistentPanelListener, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1295
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OpenPersistentPanelListener, providedIn: 'root' }); }
|
|
1267
1296
|
}
|
|
1268
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.20", ngImport: i0, type: OpenPersistentPanelListener, decorators: [{
|
|
1269
1298
|
type: Injectable,
|
|
1270
1299
|
args: [{ providedIn: 'root' }]
|
|
1271
1300
|
}] });
|