UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

76 lines 14.8 kB
import { HttpClient } from '@angular/common/http'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core'; import { of, Subject, catchError, startWith, switchMap, takeUntil, map, } from 'rxjs'; import { API_GATEWAY, K8sUtilService, publishRef, } from '../../../../core/public-api'; import { ResourceListBase } from '../../base-list'; import { ResourceSelectContextService } from '../../context.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; import * as i2 from "../../context.service"; import * as i3 from "../../../../core/public-api"; import * as i4 from "../../internals/data-grid/component"; export class ClusterListComponent extends ResourceListBase { constructor(http, contextService, cdr, k8sUtil) { super(cdr, k8sUtil, contextService); this.http = http; this.type = 'cluster'; this.clusters = []; this.clusters$ = this.reload$$.pipe(startWith(null), switchMap(() => this.http.get(`${API_GATEWAY}/auth/v1/clusters`)), map(list => list.items), catchError(() => of([])), takeUntil(this.destroy$$), publishRef()); this.loadClusterInfo$$ = new Subject(); } ngOnInit() { this.clusters = this.contextService.cachedClusters; this.setSelected(); this.clusters$.subscribe(clusters => { this.clusters = this.mapResource(clusters); this.setSelected(); this.loading = false; this.forceLoading = false; this.loadClusterInfo$$.next(clusters); this.cdr.markForCheck(); }); } setSelected() { this.selectedCluster = this.clusters.find(c => c.name === this.value); } ngOnDestroy() { this.destroy$$.next(); this.destroy$$.complete(); } mapResource(list) { return list.map(item => ({ name: this.k8sUtil.getName(item), displayName: this.k8sUtil.getDisplayName(item), status: this.getClusterStatus(item), timestamp: item.metadata.creationTimestamp, __origin: item, })); } getClusterStatus(cluster) { if (cluster?.status) { const clusterStatus = cluster.status.conditions.find(condition => condition.type === 'ComponentNotHealthy'); if (clusterStatus) { return clusterStatus.status.toLowerCase() === 'true' ? 'abnormal' : 'normal'; } } return 'abnormal'; } static { this.ɵfac = function ClusterListComponent_Factory(t) { return new (t || ClusterListComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.ResourceSelectContextService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.K8sUtilService)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClusterListComponent, selectors: [["acl-cluster-list"]], inputs: { value: "value" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 7, consts: [[3, "selectItem", "reload", "data", "fields", "context", "popupLite", "selectedUid", "type", "loading"]], template: function ClusterListComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "acl-resource-data-grid", 0); i0.ɵɵlistener("selectItem", function ClusterListComponent_Template_acl_resource_data_grid_selectItem_0_listener($event) { return ctx.onSelect($event); })("reload", function ClusterListComponent_Template_acl_resource_data_grid_reload_0_listener() { return ctx.reload(); }); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("data", ctx.clusters)("fields", ctx.fields)("context", ctx.context)("popupLite", ctx.popupLite)("selectedUid", ctx.selectedCluster == null ? null : ctx.selectedCluster.__origin.metadata.uid)("type", ctx.type)("loading", ctx.forceLoading || !(ctx.clusters == null ? null : ctx.clusters.length) && ctx.loading); } }, dependencies: [i4.ResourceDataGridComponent], styles: ["[_nghost-%COMP%]{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter[_ngcontent-%COMP%]{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter[_ngcontent-%COMP%] aui-form-item[_ngcontent-%COMP%] .aui-form-item{margin-bottom:0}.filter__project[_ngcontent-%COMP%]{margin-right:50px;padding-bottom:8px}.filter__project[_ngcontent-%COMP%] aui-select[_ngcontent-%COMP%]{width:240px}.filter__cluster[_ngcontent-%COMP%]{flex:1}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%]{margin-bottom:8px;display:inline-flex}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag{border:none}.cluster-tags[_ngcontent-%COMP%] aui-check-tag[_ngcontent-%COMP%] .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClusterListComponent, [{ type: Component, args: [{ selector: 'acl-cluster-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<acl-resource-data-grid\n [data]=\"clusters\"\n [fields]=\"fields\"\n [context]=\"context\"\n [popupLite]=\"popupLite\"\n (selectItem)=\"onSelect($event)\"\n [selectedUid]=\"selectedCluster?.__origin.metadata.uid\"\n [type]=\"type\"\n [loading]=\"forceLoading || (!clusters?.length && loading)\"\n (reload)=\"reload()\"\n></acl-resource-data-grid>\n", styles: [":host{height:100%;display:flex;flex-direction:column;padding-top:20px}.filter{display:flex;border-bottom:1px solid rgb(var(--aui-color-n-8));padding-bottom:8px}.filter aui-form-item ::ng-deep .aui-form-item{margin-bottom:0}.filter__project{margin-right:50px;padding-bottom:8px}.filter__project aui-select{width:240px}.filter__cluster{flex:1}.cluster-tags aui-check-tag{margin-bottom:8px;display:inline-flex}.cluster-tags aui-check-tag::ng-deep .aui-tag{border:none}.cluster-tags aui-check-tag::ng-deep .aui-tag--info{background-color:rgb(var(--aui-color-n-8))}\n"] }] }], () => [{ type: i1.HttpClient }, { type: i2.ResourceSelectContextService }, { type: i0.ChangeDetectorRef }, { type: i3.K8sUtilService }], { value: [{ type: Input }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClusterListComponent, { className: "ClusterListComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2J1c2luZXNzL3Jlc291cmNlLXNlbGVjdC9leHBvcnRzL2NsdXN0ZXItbGlzdC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYnVzaW5lc3MvcmVzb3VyY2Utc2VsZWN0L2V4cG9ydHMvY2x1c3Rlci1saXN0L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLEVBQUUsRUFDRixPQUFPLEVBQ1AsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFHTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFTckUsTUFBTSxPQUFPLG9CQUNYLFNBQVEsZ0JBQWdCO0lBMkJ4QixZQUNtQixJQUFnQixFQUNqQyxjQUE0QyxFQUM1QyxHQUFzQixFQUN0QixPQUF1QjtRQUV2QixLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUxuQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBdEJuQyxTQUFJLEdBQUcsU0FBa0IsQ0FBQztRQUkxQixhQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUVqQyxjQUFTLEdB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R0FJckIsWUFBUSxJQUFDO1lBQ3BCLGlCQUF5Qjs7WUFGeEIsQUFEQSxBQURBLEFBRkEsQUFEQSxBQURBLEFBREEsbUNBQWlCLHNCQUNBLHdCQUNFLDRCQUNJLCtGQUUrQixrQkFDekMsb0dBQzZDOzs7aUZENEIvQyxvQkFBb0I7Y0FOaEMsU0FBUzsyQkFDRSxrQkFBa0IsbUJBR1gsdUJBQXVCLENBQUMsTUFBTTttSkFPL0MsS0FBSztrQkFESixLQUFLOztrRkFKSyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBvZixcbiAgU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgbWFwLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgQ2x1c3RlcixcbiAgS3ViZXJuZXRlc1Jlc291cmNlTGlzdCxcbiAgQVBJX0dBVEVXQVksXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBwdWJsaXNoUmVmLFxufSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgUmVzb3VyY2VMaXN0QmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtbGlzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVNlbGVjdENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENsdXN0ZXJEYXRhSXRlbSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWNsdXN0ZXItbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2x1c3Rlckxpc3RDb21wb25lbnRcbiAgZXh0ZW5kcyBSZXNvdXJjZUxpc3RCYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgdmFsdWU6IHN0cmluZztcblxuICB0eXBlID0gJ2NsdXN0ZXInIGFzIGNvbnN0O1xuXG4gIHNlbGVjdGVkQ2x1c3RlcjogQ2x1c3RlckRhdGFJdGVtO1xuXG4gIGNsdXN0ZXJzOiBDbHVzdGVyRGF0YUl0ZW1bXSA9IFtdO1xuXG4gIGNsdXN0ZXJzJCA9IHRoaXMucmVsb2FkJCQucGlwZShcbiAgICBzdGFydFdpdGgobnVsbCBhcyB2b2lkKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuaHR0cC5nZXQ8S3ViZXJuZXRlc1Jlc291cmNlTGlzdDxDbHVzdGVyPj4oXG4gICAgICAgIGAke0FQSV9HQVRFV0FZfS9hdXRoL3YxL2NsdXN0ZXJzYCxcbiAgICAgICksXG4gICAgKSxcbiAgICBtYXAobGlzdCA9PiBsaXN0Lml0ZW1zKSxcbiAgICBjYXRjaEVycm9yKCgpID0+IG9mKFtdIGFzIENsdXN0ZXJbXSkpLFxuICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGxvYWRDbHVzdGVySW5mbyQkID0gbmV3IFN1YmplY3Q8Q2x1c3RlcltdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBjb250ZXh0U2VydmljZTogUmVzb3VyY2VTZWxlY3RDb250ZXh0U2VydmljZSxcbiAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGs4c1V0aWw6IEs4c1V0aWxTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihjZHIsIGs4c1V0aWwsIGNvbnRleHRTZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2x1c3RlcnMgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNhY2hlZENsdXN0ZXJzO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcbiAgICB0aGlzLmNsdXN0ZXJzJC5zdWJzY3JpYmUoY2x1c3RlcnMgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVycyA9IHRoaXMubWFwUmVzb3VyY2UoY2x1c3RlcnMpO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcmNlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkQ2x1c3RlckluZm8kJC5uZXh0KGNsdXN0ZXJzKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2x1c3RlciA9IHRoaXMuY2x1c3RlcnMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy52YWx1ZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG1hcFJlc291cmNlKGxpc3Q6IENsdXN0ZXJbXSk6IENsdXN0ZXJEYXRhSXRlbVtdIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoaXRlbSA9PiAoe1xuICAgICAgbmFtZTogdGhpcy5rOHNVdGlsLmdldE5hbWUoaXRlbSksXG4gICAgICBkaXNwbGF5TmFtZTogdGhpcy5rOHNVdGlsLmdldERpc3BsYXlOYW1lKGl0ZW0pLFxuICAgICAgc3RhdHVzOiB0aGlzLmdldENsdXN0ZXJTdGF0dXMoaXRlbSksXG4gICAgICB0aW1lc3RhbXA6IGl0ZW0ubWV0YWRhdGEuY3JlYXRpb25UaW1lc3RhbXAsXG4gICAgICBfX29yaWdpbjogaXRlbSxcbiAgICB9KSk7XG4gIH1cblxuICBnZXRDbHVzdGVyU3RhdHVzKGNsdXN0ZXI/OiBDbHVzdGVyKSB7XG4gICAgaWYgKGNsdXN0ZXI/LnN0YXR1cykge1xuICAgICAgY29uc3QgY2x1c3RlclN0YXR1cyA9IGNsdXN0ZXIuc3RhdHVzLmNvbmRpdGlvbnMuZmluZChcbiAgICAgICAgY29uZGl0aW9uID0+IGNvbmRpdGlvbi50eXBlID09PSAnQ29tcG9uZW50Tm90SGVhbHRoeScsXG4gICAgICApO1xuICAgICAgaWYgKGNsdXN0ZXJTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJTdGF0dXMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgICAgICAgID8gJ2Fibm9ybWFsJ1xuICAgICAgICAgIDogJ25vcm1hbCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnYWJub3JtYWwnO1xuICB9XG59XG4iLCI8YWNsLXJlc291cmNlLWRhdGEtZ3JpZFxuICBbZGF0YV09XCJjbHVzdGVyc1wiXG4gIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gIFtwb3B1cExpdGVdPVwicG9wdXBMaXRlXCJcbiAgKHNlbGVjdEl0ZW0pPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gIFtzZWxlY3RlZFVpZF09XCJzZWxlY3RlZENsdXN0ZXI/Ll9fb3JpZ2luLm1ldGFkYXRhLnVpZFwiXG4gIFt0eXBlXT1cInR5cGVcIlxuICBbbG9hZGluZ109XCJmb3JjZUxvYWRpbmcgfHwgKCFjbHVzdGVycz8ubGVuZ3RoICYmIGxvYWRpbmcpXCJcbiAgKHJlbG9hZCk9XCJyZWxvYWQoKVwiXG4+PC9hY2wtcmVzb3VyY2UtZGF0YS1ncmlkPlxuIl19