@alauda-fe/common
Version:
Alauda frontend team common codes.
119 lines • 16 kB
JavaScript
import { DialogRef, DIALOG_DATA, DialogModule, FormModule, ButtonModule, InputModule, } from '@alauda/ui';
import { AsyncPipe } from '@angular/common';
import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { snakeCase } from 'lodash-es';
import { BehaviorSubject, finalize } from 'rxjs';
import { K8sApiService } from '../../api/k8s-api.service';
import { K8S_UTIL_PIPES_MODULE, DESCRIPTION, K8sUtilService, } from '../../core/public-api';
import { TRANSLATE_MODULE } from '../../translate/public-api';
import * as i0 from "@angular/core";
import * as i1 from "@alauda/ui";
import * as i2 from "../../api/k8s-api.service";
import * as i3 from "../../core/public-api";
import * as i4 from "@angular/forms";
import * as i5 from "../../translate/translate.pipe";
import * as i6 from "../../core/pipes/k8s-util.pipe";
export class UpdateDescriptionDialogComponent {
constructor(dialogRef, k8sApi, k8sUtil, data) {
this.dialogRef = dialogRef;
this.k8sApi = k8sApi;
this.k8sUtil = k8sUtil;
this.data = data;
this.description = this.k8sUtil.getDescription(this.data.resource);
this.confirming$$ = new BehaviorSubject(false);
}
confirm() {
this.confirming$$.next(true);
this.k8sApi
.patchResource({
...(this.data.definition
? {
definition: this.data.definition,
}
: {
type: this.data.type ||
snakeCase(this.data.resource.kind).toUpperCase(),
}),
cluster: this.data.cluster,
resource: this.data.resource,
part: {
metadata: {
annotations: {
[this.k8sUtil.normalizeType(DESCRIPTION)]: this.description,
},
},
},
})
.pipe(finalize(() => this.confirming$$.next(false)))
.subscribe(resource => this.dialogRef.close(resource));
}
static { this.ɵfac = function UpdateDescriptionDialogComponent_Factory(t) { return new (t || UpdateDescriptionDialogComponent)(i0.ɵɵdirectiveInject(i1.DialogRef), i0.ɵɵdirectiveInject(i2.K8sApiService), i0.ɵɵdirectiveInject(i3.K8sUtilService), i0.ɵɵdirectiveInject(DIALOG_DATA)); }; }
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UpdateDescriptionDialogComponent, selectors: [["ng-component"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 24, vars: 25, consts: [["auiFormItemLabel", ""], [1, "last-form-item-no-margin"], ["aui-input", "", "name", "description", 3, "ngModelChange", "ngModel"], ["aui-button", "primary", 3, "click", "loading", "disabled"], ["aui-button", "", "auiDialogClose", ""]], template: function UpdateDescriptionDialogComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "aui-dialog-header");
i0.ɵɵtext(1);
i0.ɵɵpipe(2, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "aui-dialog-content")(4, "aui-form-item")(5, "label", 0);
i0.ɵɵtext(6);
i0.ɵɵpipe(7, "translate");
i0.ɵɵelementEnd();
i0.ɵɵtext(8);
i0.ɵɵpipe(9, "aclName");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(10, "aui-form-item", 1)(11, "label", 0);
i0.ɵɵtext(12);
i0.ɵɵpipe(13, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(14, "textarea", 2);
i0.ɵɵtwoWayListener("ngModelChange", function UpdateDescriptionDialogComponent_Template_textarea_ngModelChange_14_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.description, $event) || (ctx.description = $event); return $event; });
i0.ɵɵelementEnd()()();
i0.ɵɵelementStart(15, "aui-dialog-footer")(16, "button", 3);
i0.ɵɵpipe(17, "async");
i0.ɵɵpipe(18, "async");
i0.ɵɵlistener("click", function UpdateDescriptionDialogComponent_Template_button_click_16_listener() { return ctx.confirm(); });
i0.ɵɵtext(19);
i0.ɵɵpipe(20, "translate");
i0.ɵɵelementEnd();
i0.ɵɵelementStart(21, "button", 4);
i0.ɵɵtext(22);
i0.ɵɵpipe(23, "translate");
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵadvance();
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 9, "update_description"), "\n");
i0.ɵɵadvance(5);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 11, "name"), " ");
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 13, ctx.data.resource), " ");
i0.ɵɵadvance(4);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 15, "description"), " ");
i0.ɵɵadvance(2);
i0.ɵɵtwoWayProperty("ngModel", ctx.description);
i0.ɵɵadvance(2);
i0.ɵɵproperty("loading", i0.ɵɵpipeBind1(17, 17, ctx.confirming$$))("disabled", i0.ɵɵpipeBind1(18, 19, ctx.confirming$$));
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 21, "update"), " ");
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 23, "cancel"), " ");
} }, dependencies: [AsyncPipe,
ButtonModule, i1.ButtonComponent, DialogModule, i1.DialogHeaderComponent, i1.DialogContentComponent, i1.DialogFooterComponent, i1.DialogCloseDirective, InputModule, i1.InputComponent, FormModule, i1.FormItemComponent, i1.FormItemLabelDirective, FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgModel, i5.TranslatePipe, i6.K8sNamePipe], encapsulation: 2, changeDetection: 0 }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UpdateDescriptionDialogComponent, [{
type: Component,
args: [{ standalone: true, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
AsyncPipe,
ButtonModule,
DialogModule,
InputModule,
FormModule,
FormsModule,
TRANSLATE_MODULE,
K8S_UTIL_PIPES_MODULE,
], template: "<aui-dialog-header>\n {{ 'update_description' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-form-item>\n <label auiFormItemLabel>\n {{ 'name' | translate }}\n </label>\n {{ data.resource | aclName }}\n </aui-form-item>\n <aui-form-item class=\"last-form-item-no-margin\">\n <label auiFormItemLabel>\n {{ 'description' | translate }}\n </label>\n <textarea\n aui-input\n name=\"description\"\n [(ngModel)]=\"description\"\n ></textarea>\n </aui-form-item>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n [loading]=\"confirming$$ | async\"\n [disabled]=\"confirming$$ | async\"\n (click)=\"confirm()\"\n >\n {{ 'update' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n" }]
}], () => [{ type: i1.DialogRef }, { type: i2.K8sApiService }, { type: i3.K8sUtilService }, { type: undefined, decorators: [{
type: Inject,
args: [DIALOG_DATA]
}] }], null); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UpdateDescriptionDialogComponent, { className: "UpdateDescriptionDialogComponent" }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2s4cy1zaGFyZWQvdXBkYXRlLWRlc2NyaXB0aW9uLWRpYWxvZy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvazhzLXNoYXJlZC91cGRhdGUtZGVzY3JpcHRpb24tZGlhbG9nL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFMUQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsY0FBYyxHQUdmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBa0I5RCxNQUFNLE9BQU8sZ0NBQWdDO0lBSzNDLFlBQ21CLFNBQW9CLEVBQ3BCLE1BQW1DLEVBQ25DLE9BQXVCLEVBRWpDLElBUU47UUFaZ0IsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUE2QjtRQUNuQyxZQUFPLEdBQVAsT0FB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OlsiaW1wb3J0IHtcbiAgRGlhbG9nUmVmLFxuICBESUFMT0dfREFUQSxcbiAgRGlhbG9nTW9kdWxlLFxuICBGb3JtTW9kdWxlLFxuICBCdXR0b25Nb2R1bGUsXG4gIElucHV0TW9kdWxlLFxufSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgc25ha2VDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndHMtZXNzZW50aWFscy9kaXN0L2RlZXAtcGFydGlhbCc7XG5cbmltcG9ydCB7IEs4c0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcGkvazhzLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEs4c1Jlc291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2FwaS90eXBlcyc7XG5pbXBvcnQge1xuICBLOFNfVVRJTF9QSVBFU19NT0RVTEUsXG4gIERFU0NSSVBUSU9OLFxuICBLOHNVdGlsU2VydmljZSxcbiAgS3ViZXJuZXRlc1Jlc291cmNlLFxuICBSZXNvdXJjZVR5cGUsXG59IGZyb20gJy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBUUkFOU0xBVEVfTU9EVUxFIH0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUUkFOU0xBVEVfTU9EVUxFLFxuICAgIEs4U19VVElMX1BJUEVTX01PRFVMRSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVXBkYXRlRGVzY3JpcHRpb25EaWFsb2dDb21wb25lbnQ8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT4ge1xuICBkZXNjcmlwdGlvbiA9IHRoaXMuazhzVXRpbC5nZXREZXNjcmlwdGlvbih0aGlzLmRhdGEucmVzb3VyY2UpO1xuXG4gIGNvbmZpcm1pbmckJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nUmVmOiBEaWFsb2dSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNBcGk6IEs4c0FwaVNlcnZpY2U8UmVzb3VyY2VUeXBlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGs4c1V0aWw6IEs4c1V0aWxTZXJ2aWNlLFxuICAgIEBJbmplY3QoRElBTE9HX0RBVEEpXG4gICAgcHVibGljIGRhdGE6IHtcbiAgICAgIGRlZmluaXRpb24/OiBLOHNSZXNvdXJjZURlZmluaXRpb247XG4gICAgICAvKipcbiAgICAgICAqIEBkZXByZWNhdGVkIHVzZSBgZGVmaW5pdGlvbmAgaW5zdGVhZFxuICAgICAgICovXG4gICAgICB0eXBlPzogUmVzb3VyY2VUeXBlO1xuICAgICAgY2x1c3Rlcj86IHN0cmluZztcbiAgICAgIHJlc291cmNlOiBUO1xuICAgIH0sXG4gICkge31cblxuICBjb25maXJtKCkge1xuICAgIHRoaXMuY29uZmlybWluZyQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5rOHNBcGlcbiAgICAgIC5wYXRjaFJlc291cmNlPFQ+KHtcbiAgICAgICAgLi4uKHRoaXMuZGF0YS5kZWZpbml0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb246IHRoaXMuZGF0YS5kZWZpbml0aW9uLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICB0eXBlOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS50eXBlIHx8XG4gICAgICAgICAgICAgICAgKHNuYWtlQ2FzZShcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5yZXNvdXJjZS5raW5kLFxuICAgICAgICAgICAgICAgICkudG9VcHBlckNhc2UoKSBhcyBSZXNvdXJjZVR5cGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIGNsdXN0ZXI6IHRoaXMuZGF0YS5jbHVzdGVyLFxuICAgICAgICByZXNvdXJjZTogdGhpcy5kYXRhLnJlc291cmNlLFxuICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICAgIFt0aGlzLms4c1V0aWwubm9ybWFsaXplVHlwZShERVNDUklQVElPTildOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIERlZXBQYXJ0aWFsPFQ+LFxuICAgICAgfSlcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuY29uZmlybWluZyQkLm5leHQoZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzb3VyY2UgPT4gdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzb3VyY2UpKTtcbiAgfVxufVxuIiwiPGF1aS1kaWFsb2ctaGVhZGVyPlxuICB7eyAndXBkYXRlX2Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuPC9hdWktZGlhbG9nLWhlYWRlcj5cbjxhdWktZGlhbG9nLWNvbnRlbnQ+XG4gIDxhdWktZm9ybS1pdGVtPlxuICAgIDxsYWJlbCBhdWlGb3JtSXRlbUxhYmVsPlxuICAgICAge3sgJ25hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9sYWJlbD5cbiAgICB7eyBkYXRhLnJlc291cmNlIHwgYWNsTmFtZSB9fVxuICA8L2F1aS1mb3JtLWl0ZW0+XG4gIDxhdWktZm9ybS1pdGVtIGNsYXNzPVwibGFzdC1mb3JtLWl0ZW0tbm8tbWFyZ2luXCI+XG4gICAgPGxhYmVsIGF1aUZvcm1JdGVtTGFiZWw+XG4gICAgICB7eyAnZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgPC9sYWJlbD5cbiAgICA8dGV4dGFyZWFcbiAgICAgIGF1aS1pbnB1dFxuICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgIFsobmdNb2RlbCldPVwiZGVzY3JpcHRpb25cIlxuICAgID48L3RleHRhcmVhPlxuICA8L2F1aS1mb3JtLWl0ZW0+XG48L2F1aS1kaWFsb2ctY29udGVudD5cbjxhdWktZGlhbG9nLWZvb3Rlcj5cbiAgPGJ1dHRvblxuICAgIGF1aS1idXR0b249XCJwcmltYXJ5XCJcbiAgICBbbG9hZGluZ109XCJjb25maXJtaW5nJCQgfCBhc3luY1wiXG4gICAgW2Rpc2FibGVkXT1cImNvbmZpcm1pbmckJCB8IGFzeW5jXCJcbiAgICAoY2xpY2spPVwiY29uZmlybSgpXCJcbiAgPlxuICAgIHt7ICd1cGRhdGUnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvblxuICAgIGF1aURpYWxvZ0Nsb3NlXG4gID5cbiAgICB7eyAnY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYXVpLWRpYWxvZy1mb290ZXI+XG4iXX0=