@alauda-fe/storage 0.0.1

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.
Files changed (44) hide show
  1. package/esm2022/alauda-fe-storage.mjs +5 -0
  2. package/esm2022/index.mjs +23 -0
  3. package/esm2022/lib/components/pvc-delete-dialog/component.mjs +292 -0
  4. package/esm2022/lib/components/pvc-expand-capacity-dialog/component.mjs +193 -0
  5. package/esm2022/lib/components/pvc-form/component.mjs +674 -0
  6. package/esm2022/lib/components/rebuild-volume-dialog/component.mjs +251 -0
  7. package/esm2022/lib/components/source-link/component.mjs +81 -0
  8. package/esm2022/lib/components/spec-form/component.mjs +464 -0
  9. package/esm2022/lib/components/storage-feature-tags/component.mjs +146 -0
  10. package/esm2022/lib/components/storageclass-select/component.mjs +179 -0
  11. package/esm2022/lib/pipes/actual-capacity.pipe.mjs +17 -0
  12. package/esm2022/lib/services/common-util.service.mjs +163 -0
  13. package/esm2022/lib/services/pvc-util.service.mjs +416 -0
  14. package/esm2022/lib/types/commons.mjs +75 -0
  15. package/esm2022/lib/types/internal.mjs +7 -0
  16. package/esm2022/lib/types/k8s.mjs +2 -0
  17. package/esm2022/lib/types/resource-definition.mjs +13 -0
  18. package/esm2022/lib/types/resource-exports.mjs +8 -0
  19. package/esm2022/lib/types/resource-internals.mjs +2 -0
  20. package/esm2022/lib/utils/constants.mjs +202 -0
  21. package/esm2022/lib/utils/resource-exports.mjs +65 -0
  22. package/esm2022/lib/utils/util.mjs +132 -0
  23. package/index.d.ts +17 -0
  24. package/lib/components/pvc-delete-dialog/component.d.ts +33 -0
  25. package/lib/components/pvc-expand-capacity-dialog/component.d.ts +36 -0
  26. package/lib/components/pvc-form/component.d.ts +106 -0
  27. package/lib/components/rebuild-volume-dialog/component.d.ts +28 -0
  28. package/lib/components/source-link/component.d.ts +17 -0
  29. package/lib/components/spec-form/component.d.ts +71 -0
  30. package/lib/components/storage-feature-tags/component.d.ts +25 -0
  31. package/lib/components/storageclass-select/component.d.ts +26 -0
  32. package/lib/pipes/actual-capacity.pipe.d.ts +8 -0
  33. package/lib/services/common-util.service.d.ts +48 -0
  34. package/lib/services/pvc-util.service.d.ts +130 -0
  35. package/lib/types/commons.d.ts +85 -0
  36. package/lib/types/internal.d.ts +4 -0
  37. package/lib/types/k8s.d.ts +105 -0
  38. package/lib/types/resource-definition.d.ts +18 -0
  39. package/lib/types/resource-exports.d.ts +16 -0
  40. package/lib/types/resource-internals.d.ts +20 -0
  41. package/lib/utils/constants.d.ts +37 -0
  42. package/lib/utils/resource-exports.d.ts +12 -0
  43. package/lib/utils/util.d.ts +19 -0
  44. package/package.json +38 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhdWRhLWZlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2FsYXVkYS1mZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,23 @@
1
+ // components
2
+ export { DeletePvcDialogComponent } from './lib/components/pvc-delete-dialog/component';
3
+ export { PvcExpandCapacityDialogComponent } from './lib/components/pvc-expand-capacity-dialog/component';
4
+ export { PersistentVolumeClaimFormComponent } from './lib/components/pvc-form/component';
5
+ export { RebuildVolumeDialogComponent } from './lib/components/rebuild-volume-dialog/component';
6
+ export { ResourceSpecFormComponent } from './lib/components/spec-form/component';
7
+ export { StorageFeatureTagsComponent } from './lib/components/storage-feature-tags/component';
8
+ export { StorageClassSelectComponent } from './lib/components/storageclass-select/component';
9
+ // utils
10
+ export * from './lib/utils/constants';
11
+ export * from './lib/utils/resource-exports';
12
+ export * from './lib/utils/util';
13
+ // types
14
+ export * from './lib/types/commons';
15
+ export * from './lib/types/k8s';
16
+ export * from './lib/types/resource-definition';
17
+ export * from './lib/types/resource-exports';
18
+ // pipes
19
+ export * from './lib/pipes/actual-capacity.pipe';
20
+ // services
21
+ export { StorageCommonUtilService, } from './lib/services/common-util.service';
22
+ export * from './lib/services/pvc-util.service';
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDYixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixRQUFRO0FBQ1IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsUUFBUTtBQUNSLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsOEJBQThCLENBQUM7QUFFN0MsUUFBUTtBQUNSLGNBQWMsa0NBQWtDLENBQUM7QUFFakQsV0FBVztBQUNYLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY29tcG9uZW50c1xuZXhwb3J0IHsgRGVsZXRlUHZjRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9wdmMtZGVsZXRlLWRpYWxvZy9jb21wb25lbnQnO1xuZXhwb3J0IHsgUHZjRXhwYW5kQ2FwYWNpdHlEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3B2Yy1leHBhbmQtY2FwYWNpdHktZGlhbG9nL2NvbXBvbmVudCc7XG5leHBvcnQgeyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9wdmMtZm9ybS9jb21wb25lbnQnO1xuZXhwb3J0IHsgUmVidWlsZFZvbHVtZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVidWlsZC12b2x1bWUtZGlhbG9nL2NvbXBvbmVudCc7XG5leHBvcnQgeyBSZXNvdXJjZVNwZWNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9zcGVjLWZvcm0vY29tcG9uZW50JztcbmV4cG9ydCB7IFN0b3JhZ2VGZWF0dXJlVGFnc0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3RvcmFnZS1mZWF0dXJlLXRhZ3MvY29tcG9uZW50JztcbmV4cG9ydCB7IFN0b3JhZ2VDbGFzc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3RvcmFnZWNsYXNzLXNlbGVjdC9jb21wb25lbnQnO1xuLy8gdXRpbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9yZXNvdXJjZS1leHBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3V0aWwnO1xuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL2NvbW1vbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvazhzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL3Jlc291cmNlLWRlZmluaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvcmVzb3VyY2UtZXhwb3J0cyc7XG5cbi8vIHBpcGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9hY3R1YWwtY2FwYWNpdHkucGlwZSc7XG5cbi8vIHNlcnZpY2VzXG5leHBvcnQge1xuICBTdG9yYWdlQ29tbW9uVXRpbFNlcnZpY2UsXG4gIFN0b3JhZ2VTZWxlY3RPcHRpb24sXG59IGZyb20gJy4vbGliL3NlcnZpY2VzL2NvbW1vbi11dGlsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcHZjLXV0aWwuc2VydmljZSc7XG4iXX0=
@@ -0,0 +1,292 @@
1
+ import { ButtonModule, DIALOG_DATA, DialogModule, DialogRef, IconModule, InputModule, MessageService, TableModule, TooltipModule, } from '@alauda/ui';
2
+ import { E2eAttributeBindingDirective, EffectDirectiveModule, FieldNotAvailablePipe, K8S_UTIL_PIPES_MODULE, K8sApiService, K8sUtilService, PurePipe, RESOURCE_TYPES, TRANSLATE_MODULE, TranslateService, matchLabelsToString, publishRef, skipError, } from '@alauda-fe/common';
3
+ import { AsyncPipe, NgIf } from '@angular/common';
4
+ import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
5
+ import { FormsModule } from '@angular/forms';
6
+ import { BehaviorSubject, finalize, forkJoin, map, of, switchMap } from 'rxjs';
7
+ import { PVCUtilService } from '../../services/pvc-util.service';
8
+ import { STORAGE_RESOURCE_TYPES } from '../../types/resource-definition';
9
+ import { SourceLinkComponent } from '../source-link/component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@alauda-fe/common";
12
+ import * as i2 from "../../services/pvc-util.service";
13
+ import * as i3 from "@alauda/ui";
14
+ import * as i4 from "@angular/forms";
15
+ const _c0 = a0 => ({ name: a0 });
16
+ const _c1 = (a0, a1) => ({ name: a0, length: a1 });
17
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_8_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelementStart(0, "aui-table-header-cell", 18);
19
+ i0.ɵɵtext(1);
20
+ i0.ɵɵpipe(2, "translate");
21
+ i0.ɵɵelementEnd();
22
+ } if (rf & 2) {
23
+ i0.ɵɵadvance();
24
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "resource_name"), " ");
25
+ } }
26
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_9_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelementStart(0, "aui-table-cell")(1, "span", 19);
28
+ i0.ɵɵpipe(2, "aclName");
29
+ i0.ɵɵtext(3);
30
+ i0.ɵɵpipe(4, "aclName");
31
+ i0.ɵɵelementEnd()();
32
+ } if (rf & 2) {
33
+ const item_r1 = ctx.$implicit;
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵproperty("auiTooltip", i0.ɵɵpipeBind1(2, 2, item_r1));
36
+ i0.ɵɵadvance(2);
37
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 4, item_r1), " ");
38
+ } }
39
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_11_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "aui-table-header-cell");
41
+ i0.ɵɵtext(1);
42
+ i0.ɵɵpipe(2, "translate");
43
+ i0.ɵɵelementEnd();
44
+ } if (rf & 2) {
45
+ i0.ɵɵadvance();
46
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "type"), " ");
47
+ } }
48
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_12_Template(rf, ctx) { if (rf & 1) {
49
+ i0.ɵɵelementStart(0, "aui-table-cell");
50
+ i0.ɵɵtext(1);
51
+ i0.ɵɵpipe(2, "translate");
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const item_r2 = ctx.$implicit;
55
+ i0.ɵɵadvance();
56
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, item_r2.kind === "VolumeSnapshot" ? "storage.snapshot" : "pod"), " ");
57
+ } }
58
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_14_Template(rf, ctx) { if (rf & 1) {
59
+ i0.ɵɵelementStart(0, "aui-table-header-cell");
60
+ i0.ɵɵtext(1);
61
+ i0.ɵɵpipe(2, "translate");
62
+ i0.ɵɵelementEnd();
63
+ } if (rf & 2) {
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "source"), " ");
66
+ } }
67
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_acl_source_link_1_Template(rf, ctx) { if (rf & 1) {
68
+ i0.ɵɵelement(0, "acl-source-link", 21);
69
+ i0.ɵɵpipe(1, "pure");
70
+ i0.ɵɵpipe(2, "async");
71
+ } if (rf & 2) {
72
+ const item_r3 = i0.ɵɵnextContext().$implicit;
73
+ const ctx_r3 = i0.ɵɵnextContext(3);
74
+ i0.ɵɵproperty("sourceLink", i0.ɵɵpipeBind1(2, 6, i0.ɵɵpipeBind4(1, 1, item_r3, ctx_r3.pvcUtil.getSource$, ctx_r3.modalData.cluster, ctx_r3.modalData.namespace)));
75
+ } }
76
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_ng_template_2_Template(rf, ctx) { if (rf & 1) {
77
+ i0.ɵɵtext(0);
78
+ i0.ɵɵpipe(1, "aclFieldNotAvailable");
79
+ } if (rf & 2) {
80
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(1, 1, null), " ");
81
+ } }
82
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementStart(0, "aui-table-cell");
84
+ i0.ɵɵtemplate(1, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_acl_source_link_1_Template, 3, 8, "acl-source-link", 20)(2, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_ng_template_2_Template, 2, 3, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ const item_r3 = ctx.$implicit;
88
+ const empty_r5 = i0.ɵɵreference(3);
89
+ i0.ɵɵadvance();
90
+ i0.ɵɵproperty("ngIf", item_r3.kind !== "VolumeSnapshot")("ngIfElse", empty_r5);
91
+ } }
92
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_row_16_Template(rf, ctx) { if (rf & 1) {
93
+ i0.ɵɵelement(0, "aui-table-header-row");
94
+ } }
95
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_row_17_Template(rf, ctx) { if (rf & 1) {
96
+ i0.ɵɵelement(0, "aui-table-row");
97
+ } }
98
+ function DeletePvcDialogComponent_ng_container_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelementContainerStart(0);
100
+ i0.ɵɵelementStart(1, "p", 7);
101
+ i0.ɵɵtext(2);
102
+ i0.ɵɵpipe(3, "aclName");
103
+ i0.ɵɵpipe(4, "translate");
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵelementStart(5, "div", 8)(6, "aui-table", 9);
106
+ i0.ɵɵelementContainerStart(7, 10);
107
+ i0.ɵɵtemplate(8, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_8_Template, 3, 3, "aui-table-header-cell", 11)(9, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_9_Template, 5, 6, "aui-table-cell", 12);
108
+ i0.ɵɵelementContainerEnd();
109
+ i0.ɵɵelementContainerStart(10, 13);
110
+ i0.ɵɵtemplate(11, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_11_Template, 3, 3, "aui-table-header-cell", 14)(12, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_12_Template, 3, 3, "aui-table-cell", 12);
111
+ i0.ɵɵelementContainerEnd();
112
+ i0.ɵɵelementContainerStart(13, 15);
113
+ i0.ɵɵtemplate(14, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_cell_14_Template, 3, 3, "aui-table-header-cell", 14)(15, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_cell_15_Template, 4, 2, "aui-table-cell", 12);
114
+ i0.ɵɵelementContainerEnd();
115
+ i0.ɵɵtemplate(16, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_header_row_16_Template, 1, 0, "aui-table-header-row", 16)(17, DeletePvcDialogComponent_ng_container_6_ng_container_1_aui_table_row_17_Template, 1, 0, "aui-table-row", 17);
116
+ i0.ɵɵelementEnd()();
117
+ i0.ɵɵelementContainerEnd();
118
+ } if (rf & 2) {
119
+ const list_r6 = i0.ɵɵnextContext().declare;
120
+ const ctx_r3 = i0.ɵɵnextContext();
121
+ i0.ɵɵadvance(2);
122
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 7, "storage.pvc_can_delete_content", i0.ɵɵpureFunction2(10, _c1, i0.ɵɵpipeBind1(3, 5, ctx_r3.modalData.pvc), list_r6.length)), " ");
123
+ i0.ɵɵadvance(4);
124
+ i0.ɵɵproperty("dataSource", list_r6);
125
+ i0.ɵɵadvance(10);
126
+ i0.ɵɵproperty("auiTableHeaderRowDef", ctx_r3.COLUMNS)("auiTableHeaderRowDefSticky", true);
127
+ i0.ɵɵadvance();
128
+ i0.ɵɵproperty("auiTableRowDefColumns", ctx_r3.COLUMNS);
129
+ } }
130
+ function DeletePvcDialogComponent_ng_container_6_Template(rf, ctx) { if (rf & 1) {
131
+ i0.ɵɵelementContainerStart(0);
132
+ i0.ɵɵtemplate(1, DeletePvcDialogComponent_ng_container_6_ng_container_1_Template, 18, 13, "ng-container", 6);
133
+ i0.ɵɵelementContainerEnd();
134
+ } if (rf & 2) {
135
+ const list_r6 = ctx.declare;
136
+ i0.ɵɵnextContext();
137
+ const deleteTemplate_r7 = i0.ɵɵreference(9);
138
+ i0.ɵɵadvance();
139
+ i0.ɵɵproperty("ngIf", list_r6 == null ? null : list_r6.length)("ngIfElse", deleteTemplate_r7);
140
+ } }
141
+ function DeletePvcDialogComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
142
+ const _r8 = i0.ɵɵgetCurrentView();
143
+ i0.ɵɵelementStart(0, "p", 22);
144
+ i0.ɵɵtext(1);
145
+ i0.ɵɵpipe(2, "aclName");
146
+ i0.ɵɵpipe(3, "translate");
147
+ i0.ɵɵelementEnd();
148
+ i0.ɵɵelementStart(4, "div", 23);
149
+ i0.ɵɵtext(5);
150
+ i0.ɵɵpipe(6, "translate");
151
+ i0.ɵɵelementStart(7, "span", 24);
152
+ i0.ɵɵtext(8);
153
+ i0.ɵɵpipe(9, "aclName");
154
+ i0.ɵɵelementEnd();
155
+ i0.ɵɵtext(10);
156
+ i0.ɵɵpipe(11, "translate");
157
+ i0.ɵɵelementEnd();
158
+ i0.ɵɵelementStart(12, "input", 25);
159
+ i0.ɵɵtwoWayListener("ngModelChange", function DeletePvcDialogComponent_ng_template_8_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r3 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r3.inputValue, $event) || (ctx_r3.inputValue = $event); return i0.ɵɵresetView($event); });
160
+ i0.ɵɵelementEnd();
161
+ } if (rf & 2) {
162
+ const ctx_r3 = i0.ɵɵnextContext();
163
+ i0.ɵɵadvance();
164
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 7, "storage.delete_pvc_content", i0.ɵɵpureFunction1(16, _c0, i0.ɵɵpipeBind1(2, 5, ctx_r3.modalData.pvc))), " ");
165
+ i0.ɵɵadvance(4);
166
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 10, "please_enter_extra"), " ");
167
+ i0.ɵɵadvance(3);
168
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 12, ctx_r3.modalData.pvc), " ");
169
+ i0.ɵɵadvance(2);
170
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 14, "extra_determine_delete"), " ");
171
+ i0.ɵɵadvance(2);
172
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r3.inputValue);
173
+ } }
174
+ function DeletePvcDialogComponent_button_12_Template(rf, ctx) { if (rf & 1) {
175
+ const _r9 = i0.ɵɵgetCurrentView();
176
+ i0.ɵɵelementStart(0, "button", 26);
177
+ i0.ɵɵpipe(1, "async");
178
+ i0.ɵɵpipe(2, "aclName");
179
+ i0.ɵɵlistener("click", function DeletePvcDialogComponent_button_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.confirm()); });
180
+ i0.ɵɵtext(3);
181
+ i0.ɵɵpipe(4, "translate");
182
+ i0.ɵɵelementEnd();
183
+ } if (rf & 2) {
184
+ const ctx_r3 = i0.ɵɵnextContext();
185
+ i0.ɵɵproperty("loading", i0.ɵɵpipeBind1(1, 3, ctx_r3.submitting$$))("disabled", ctx_r3.inputValue !== i0.ɵɵpipeBind1(2, 5, ctx_r3.modalData.pvc));
186
+ i0.ɵɵadvance(3);
187
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 7, "delete"), " ");
188
+ } }
189
+ const COLUMNS = ['name', 'type', 'source'];
190
+ export class DeletePvcDialogComponent {
191
+ constructor(modalData, k8sApi, k8sUtil, pvcUtil, dialogRef, message, translate) {
192
+ this.modalData = modalData;
193
+ this.k8sApi = k8sApi;
194
+ this.k8sUtil = k8sUtil;
195
+ this.pvcUtil = pvcUtil;
196
+ this.dialogRef = dialogRef;
197
+ this.message = message;
198
+ this.translate = translate;
199
+ this.COLUMNS = COLUMNS;
200
+ this.inputValue = '';
201
+ this.submitting$$ = new BehaviorSubject(false);
202
+ this.pods$ = of(this.modalData).pipe(switchMap(({ cluster, namespace, pvc }) => this.pvcUtil.getRelatedPods(cluster, namespace, pvc.metadata.name)), publishRef());
203
+ this.snapshots$ = of(this.modalData).pipe(switchMap(({ cluster, namespace, pvc }) => this.k8sApi.getResourceList({
204
+ type: STORAGE_RESOURCE_TYPES.VOLUME_SNAPSHOT,
205
+ cluster,
206
+ namespace,
207
+ queryParams: {
208
+ limit: '0',
209
+ labelSelector: matchLabelsToString({
210
+ [this.k8sUtil.normalizeType('sourcepvc', 'snapshot')]: this.k8sUtil.getName(pvc),
211
+ }),
212
+ },
213
+ })), map(res => res.items), skipError([]), publishRef());
214
+ this.list$ = forkJoin([this.pods$, this.snapshots$]).pipe(map(([pods, snapshots]) => [...(pods ?? []), ...snapshots]));
215
+ }
216
+ confirm() {
217
+ this.submitting$$.next(true);
218
+ this.k8sApi
219
+ .deleteResource({
220
+ type: RESOURCE_TYPES.PERSISTENT_VOLUME_CLAIM,
221
+ cluster: this.modalData.cluster,
222
+ resource: this.modalData.pvc,
223
+ })
224
+ .pipe(finalize(() => this.submitting$$.next(false)))
225
+ .subscribe(() => {
226
+ this.message.success(this.translate.get('pvc_delete_success'));
227
+ this.dialogRef.close(true);
228
+ });
229
+ }
230
+ static { this.ɵfac = function DeletePvcDialogComponent_Factory(t) { return new (t || DeletePvcDialogComponent)(i0.ɵɵdirectiveInject(DIALOG_DATA), i0.ɵɵdirectiveInject(i1.K8sApiService), i0.ɵɵdirectiveInject(i1.K8sUtilService), i0.ɵɵdirectiveInject(i2.PVCUtilService), i0.ɵɵdirectiveInject(i3.DialogRef), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i1.TranslateService)); }; }
231
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DeletePvcDialogComponent, selectors: [["ng-component"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 17, vars: 17, consts: [["deleteTemplate", ""], ["empty", ""], ["icon", "exclamation_triangle_s", "background", "triangle", "size", "22", 1, "header-icon"], [4, "declare"], ["aui-button", "danger", 3, "loading", "disabled", "click", 4, "ngIf"], ["aui-button", "", "auiDialogClose", ""], [4, "ngIf", "ngIfElse"], [1, "tw-mb-16"], ["auiTableScrollWrapper", "400px"], ["auiTableScrollable", "", 3, "dataSource"], ["auiTableColumnDef", "name"], ["sticky", "", 4, "auiTableHeaderCellDef"], [4, "auiTableCellDef"], ["auiTableColumnDef", "type"], [4, "auiTableHeaderCellDef"], ["auiTableColumnDef", "source"], [4, "auiTableHeaderRowDef", "auiTableHeaderRowDefSticky"], [4, "auiTableRowDef", "auiTableRowDefColumns"], ["sticky", ""], [3, "auiTooltip"], [3, "sourceLink", 4, "ngIf", "ngIfElse"], [3, "sourceLink"], [1, "tw-mt-0", "tw-mb-12", "tw-text-main-text"], [1, "tw-mb-4", "tw-text-main-text"], [1, "tw-text-red"], ["aui-input", "", "trim", "", 3, "ngModelChange", "ngModel"], ["aui-button", "danger", 3, "click", "loading", "disabled"]], template: function DeletePvcDialogComponent_Template(rf, ctx) { if (rf & 1) {
232
+ i0.ɵɵelementStart(0, "aui-dialog-header");
233
+ i0.ɵɵelement(1, "aui-icon", 2);
234
+ i0.ɵɵtext(2);
235
+ i0.ɵɵpipe(3, "aclName");
236
+ i0.ɵɵpipe(4, "translate");
237
+ i0.ɵɵelementEnd();
238
+ i0.ɵɵelementStart(5, "aui-dialog-content");
239
+ i0.ɵɵtemplate(6, DeletePvcDialogComponent_ng_container_6_Template, 2, 2, "ng-container", 3);
240
+ i0.ɵɵpipe(7, "async");
241
+ i0.ɵɵtemplate(8, DeletePvcDialogComponent_ng_template_8_Template, 13, 18, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
242
+ i0.ɵɵelementEnd();
243
+ i0.ɵɵelementStart(10, "aui-dialog-footer")(11, "div");
244
+ i0.ɵɵtemplate(12, DeletePvcDialogComponent_button_12_Template, 5, 9, "button", 4);
245
+ i0.ɵɵpipe(13, "async");
246
+ i0.ɵɵelementStart(14, "button", 5);
247
+ i0.ɵɵtext(15);
248
+ i0.ɵɵpipe(16, "translate");
249
+ i0.ɵɵelementEnd()()();
250
+ } if (rf & 2) {
251
+ let tmp_3_0;
252
+ i0.ɵɵadvance(2);
253
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(4, 6, "storage.delete_pvc_title", i0.ɵɵpureFunction1(15, _c0, i0.ɵɵpipeBind1(3, 4, ctx.modalData.pvc))), "\n");
254
+ i0.ɵɵadvance(4);
255
+ i0.ɵɵproperty("declare", i0.ɵɵpipeBind1(7, 9, ctx.list$));
256
+ i0.ɵɵadvance(6);
257
+ i0.ɵɵproperty("ngIf", !((tmp_3_0 = i0.ɵɵpipeBind1(13, 11, ctx.list$)) == null ? null : tmp_3_0.length));
258
+ i0.ɵɵadvance(3);
259
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 13, "cancel"), " ");
260
+ } }, dependencies: [AsyncPipe,
261
+ TableModule, i3.TableComponent, i3.TableRowComponent, i3.TableHeaderRowComponent, i3.TableCellDirective, i3.TableCellDefDirective, i3.TableHeaderCellDirective, i3.TableRowDefDirective, i3.TableHeaderRowDefDirective, i3.TableHeaderCellDefDirective, i3.TableColumnDefDirective, i3.TableScrollWrapperDirective, i3.TableScrollableDirective, NgIf,
262
+ PurePipe,
263
+ DialogModule, i3.DialogHeaderComponent, i3.DialogContentComponent, i3.DialogFooterComponent, i3.DialogCloseDirective, IconModule, i3.IconComponent, TooltipModule, i3.TooltipDirective, InputModule, i3.InputComponent, FieldNotAvailablePipe, i1.K8sNamePipe, i1.TranslatePipe, SourceLinkComponent,
264
+ FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgModel, ButtonModule, i3.ButtonComponent, E2eAttributeBindingDirective,
265
+ EffectDirectiveModule, i1.TrimDirective], encapsulation: 2, changeDetection: 0 }); }
266
+ }
267
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DeletePvcDialogComponent, [{
268
+ type: Component,
269
+ args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
270
+ AsyncPipe,
271
+ TableModule,
272
+ NgIf,
273
+ PurePipe,
274
+ DialogModule,
275
+ IconModule,
276
+ TooltipModule,
277
+ InputModule,
278
+ FieldNotAvailablePipe,
279
+ K8S_UTIL_PIPES_MODULE,
280
+ TRANSLATE_MODULE,
281
+ SourceLinkComponent,
282
+ FormsModule,
283
+ ButtonModule,
284
+ E2eAttributeBindingDirective,
285
+ EffectDirectiveModule,
286
+ ], template: "<aui-dialog-header>\n <aui-icon\n class=\"header-icon\"\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n size=\"22\"\n ></aui-icon>\n {{\n 'storage.delete_pvc_title' | translate: { name: modalData.pvc | aclName }\n }}\n</aui-dialog-header>\n\n<aui-dialog-content>\n <ng-container *declare=\"list$ | async as list\">\n <ng-container *ngIf=\"list?.length; else deleteTemplate\">\n <p class=\"tw-mb-16\">\n {{\n 'storage.pvc_can_delete_content'\n | translate: { name: modalData.pvc | aclName, length: list.length }\n }}\n </p>\n <div auiTableScrollWrapper=\"400px\">\n <aui-table\n auiTableScrollable\n [dataSource]=\"list\"\n >\n <ng-container auiTableColumnDef=\"name\">\n <aui-table-header-cell\n sticky\n *auiTableHeaderCellDef\n >\n {{ 'resource_name' | translate }}\n </aui-table-header-cell>\n <aui-table-cell *auiTableCellDef=\"let item\">\n <span [auiTooltip]=\"item | aclName\">\n {{ item | aclName }}\n </span>\n </aui-table-cell>\n </ng-container>\n <ng-container auiTableColumnDef=\"type\">\n <aui-table-header-cell *auiTableHeaderCellDef>\n {{ 'type' | translate }}\n </aui-table-header-cell>\n <aui-table-cell *auiTableCellDef=\"let item\">\n {{\n (item.kind === 'VolumeSnapshot' ? 'storage.snapshot' : 'pod')\n | translate\n }}\n </aui-table-cell>\n </ng-container>\n <ng-container auiTableColumnDef=\"source\">\n <aui-table-header-cell *auiTableHeaderCellDef>\n {{ 'source' | translate }}\n </aui-table-header-cell>\n <aui-table-cell *auiTableCellDef=\"let item\">\n <acl-source-link\n *ngIf=\"item.kind !== 'VolumeSnapshot'; else empty\"\n [sourceLink]=\"\n item\n | pure\n : pvcUtil.getSource$\n : modalData.cluster\n : modalData.namespace\n | async\n \"\n ></acl-source-link>\n <ng-template #empty>\n {{ null | aclFieldNotAvailable }}\n </ng-template>\n </aui-table-cell>\n </ng-container>\n <aui-table-header-row\n *auiTableHeaderRowDef=\"COLUMNS; sticky: true\"\n ></aui-table-header-row>\n <aui-table-row\n *auiTableRowDef=\"let row; columns: COLUMNS\"\n ></aui-table-row>\n </aui-table>\n </div>\n </ng-container>\n </ng-container>\n <ng-template #deleteTemplate>\n <p class=\"tw-mt-0 tw-mb-12 tw-text-main-text\">\n {{\n 'storage.delete_pvc_content'\n | translate: { name: modalData.pvc | aclName }\n }}\n </p>\n <div class=\"tw-mb-4 tw-text-main-text\">\n {{ 'please_enter_extra' | translate }}\n <span class=\"tw-text-red\">\n {{ modalData.pvc | aclName }}\n </span>\n {{ 'extra_determine_delete' | translate }}\n </div>\n <input\n aui-input\n [(ngModel)]=\"inputValue\"\n trim\n />\n </ng-template>\n</aui-dialog-content>\n\n<aui-dialog-footer>\n <div>\n <button\n *ngIf=\"!(list$ | async)?.length\"\n aui-button=\"danger\"\n [loading]=\"submitting$$ | async\"\n [disabled]=\"inputValue !== (modalData.pvc | aclName)\"\n (click)=\"confirm()\"\n >\n {{ 'delete' | translate }}\n </button>\n <button\n aui-button\n auiDialogClose\n >\n {{ 'cancel' | translate }}\n </button>\n </div>\n</aui-dialog-footer>\n" }]
287
+ }], () => [{ type: undefined, decorators: [{
288
+ type: Inject,
289
+ args: [DIALOG_DATA]
290
+ }] }, { type: i1.K8sApiService }, { type: i1.K8sUtilService }, { type: i2.PVCUtilService }, { type: i3.DialogRef }, { type: i3.MessageService }, { type: i1.TranslateService }], null); })();
291
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DeletePvcDialogComponent, { className: "DeletePvcDialogComponent", filePath: "lib/components/pvc-delete-dialog/component.ts", lineNumber: 64 }); })();
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yYWdlL3NyYy9saWIvY29tcG9uZW50cy9wdmMtZGVsZXRlLWRpYWxvZy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2xpYi9jb21wb25lbnRzL3B2Yy1kZWxldGUtZGlhbG9nL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGNBQWMsRUFDZCxXQUFXLEVBQ1gsYUFBYSxHQUNkLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsYUFBYSxFQUNiLGNBQWMsRUFHZCxRQUFRLEVBQ1IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixTQUFTLEdBQ1YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlDQUFp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d0pBR0Y7WUFHaUIsZUFBdUI7WUFBdkIseURBQXVCO1lBNkZqQyxlQUE4QjtZQUE5Qix1R0FBOEI7WUFZL0IsZUFDRjtZQURFLGlFQUNGOzRCRDFFQSxTQUFTO1lBQ1QsV0FBVyxzVUFDWCxJQUFJO1lBQ0osUUFBUTtZQUNSLFlBQVksMEdBQ1osVUFBVSxvQkFDVixhQUFhLHVCQUNiLFdBQVcscUJBQ1gscUJBQXFCLG9DQUdyQixtQkFBbUI7WUFDbkIsV0FBVywyREFDWCxZQUFZLHNCQUNaLDRCQUE0QjtZQUM1QixxQkFBcUI7O2lGQUdaLHdCQUF3QjtjQXZCcEMsU0FBUzs2QkFDSSxJQUFJLG1CQUVDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7b0JBQ1AsU0FBUztvQkFDVCxXQUFXO29CQUNYLElBQUk7b0JBQ0osUUFBUTtvQkFDUixZQUFZO29CQUNaLFVBQVU7b0JBQ1YsYUFBYTtvQkFDYixXQUFXO29CQUNYLHFCQUFxQjtvQkFDckIscUJBQXFCO29CQUNyQixnQkFBZ0I7b0JBQ2hCLG1CQUFtQjtvQkFDbkIsV0FBVztvQkFDWCxZQUFZO29CQUNaLDRCQUE0QjtvQkFDNUIscUJBQXFCO2lCQUN0Qjs7c0JBMkNFLE1BQU07dUJBQUMsV0FBVzs7a0ZBekNWLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgRElBTE9HX0RBVEEsXG4gIERpYWxvZ01vZHVsZSxcbiAgRGlhbG9nUmVmLFxuICBJY29uTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgTWVzc2FnZVNlcnZpY2UsXG4gIFRhYmxlTW9kdWxlLFxuICBUb29sdGlwTW9kdWxlLFxufSBmcm9tICdAYWxhdWRhL3VpJztcbmltcG9ydCB7XG4gIEUyZUF0dHJpYnV0ZUJpbmRpbmdEaXJlY3RpdmUsXG4gIEVmZmVjdERpcmVjdGl2ZU1vZHVsZSxcbiAgRmllbGROb3RBdmFpbGFibGVQaXBlLFxuICBLOFNfVVRJTF9QSVBFU19NT0RVTEUsXG4gIEs4c0FwaVNlcnZpY2UsXG4gIEs4c1V0aWxTZXJ2aWNlLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSxcbiAgUHVyZVBpcGUsXG4gIFJFU09VUkNFX1RZUEVTLFxuICBUUkFOU0xBVEVfTU9EVUxFLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBtYXRjaExhYmVsc1RvU3RyaW5nLFxuICBwdWJsaXNoUmVmLFxuICBza2lwRXJyb3IsXG59IGZyb20gJ0BhbGF1ZGEtZmUvY29tbW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaW5hbGl6ZSwgZm9ya0pvaW4sIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBQVkNVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3B2Yy11dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVm9sdW1lU25hcHNob3QgfSBmcm9tICcuLi8uLi90eXBlcy9rOHMnO1xuaW1wb3J0IHsgU1RPUkFHRV9SRVNPVVJDRV9UWVBFUyB9IGZyb20gJy4uLy4uL3R5cGVzL3Jlc291cmNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgU291cmNlTGlua0NvbXBvbmVudCB9IGZyb20gJy4uL3NvdXJjZS1saW5rL2NvbXBvbmVudCc7XG5cbmNvbnN0IENPTFVNTlMgPSBbJ25hbWUnLCAndHlwZScsICdzb3VyY2UnXTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgUHVyZVBpcGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBGaWVsZE5vdEF2YWlsYWJsZVBpcGUsXG4gICAgSzhTX1VUSUxfUElQRVNfTU9EVUxFLFxuICAgIFRSQU5TTEFURV9NT0RVTEUsXG4gICAgU291cmNlTGlua0NvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgRTJlQXR0cmlidXRlQmluZGluZ0RpcmVjdGl2ZSxcbiAgICBFZmZlY3REaXJlY3RpdmVNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERlbGV0ZVB2Y0RpYWxvZ0NvbXBvbmVudCB7XG4gIENPTFVNTlMgPSBDT0xVTU5TO1xuICBpbnB1dFZhbHVlID0gJyc7XG5cbiAgc3VibWl0dGluZyQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcG9kcyQgPSBvZih0aGlzLm1vZGFsRGF0YSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKHsgY2x1c3RlciwgbmFtZXNwYWNlLCBwdmMgfSkgPT5cbiAgICAgIHRoaXMucHZjVXRpbC5nZXRSZWxhdGVkUG9kcyhjbHVzdGVyLCBuYW1lc3BhY2UsIHB2Yy5tZXRhZGF0YS5uYW1lKSxcbiAgICApLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBzbmFwc2hvdHMkID0gb2YodGhpcy5tb2RhbERhdGEpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh7IGNsdXN0ZXIsIG5hbWVzcGFjZSwgcHZjIH0pID0+XG4gICAgICB0aGlzLms4c0FwaS5nZXRSZXNvdXJjZUxpc3Q8Vm9sdW1lU25hcHNob3Q+KHtcbiAgICAgICAgdHlwZTogU1RPUkFHRV9SRVNPVVJDRV9UWVBFUy5WT0xVTUVfU05BUFNIT1QsXG4gICAgICAgIGNsdXN0ZXIsXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICBsaW1pdDogJzAnLFxuICAgICAgICAgIGxhYmVsU2VsZWN0b3I6IG1hdGNoTGFiZWxzVG9TdHJpbmcoe1xuICAgICAgICAgICAgW3RoaXMuazhzVXRpbC5ub3JtYWxpemVUeXBlKCdzb3VyY2VwdmMnLCAnc25hcHNob3QnKV06XG4gICAgICAgICAgICAgIHRoaXMuazhzVXRpbC5nZXROYW1lKHB2YyksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzLml0ZW1zKSxcbiAgICBza2lwRXJyb3IoW10gYXMgVm9sdW1lU25hcHNob3RbXSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIGxpc3QkID0gZm9ya0pvaW4oW3RoaXMucG9kcyQsIHRoaXMuc25hcHNob3RzJF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtwb2RzLCBzbmFwc2hvdHNdKSA9PlxuICAgICAgICBbLi4uKHBvZHMgPz8gW10pLCAuLi5zbmFwc2hvdHNdIGFzIEt1YmVybmV0ZXNSZXNvdXJjZVtdLFxuICAgICksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChESUFMT0dfREFUQSlcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxEYXRhOiB7XG4gICAgICBjbHVzdGVyOiBzdHJpbmc7XG4gICAgICBuYW1lc3BhY2U6IHN0cmluZztcbiAgICAgIHB2YzogUGVyc2lzdGVudFZvbHVtZUNsYWltO1xuICAgIH0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNBcGk6IEs4c0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrOHNVdGlsOiBLOHNVdGlsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHZjVXRpbDogUFZDVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dSZWY6IERpYWxvZ1JlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgY29uZmlybSgpIHtcbiAgICB0aGlzLnN1Ym1pdHRpbmckJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5rOHNBcGlcbiAgICAgIC5kZWxldGVSZXNvdXJjZTxQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0+KHtcbiAgICAgICAgdHlwZTogUkVTT1VSQ0VfVFlQRVMuUEVSU0lTVEVOVF9WT0xVTUVfQ0xBSU0sXG4gICAgICAgIGNsdXN0ZXI6IHRoaXMubW9kYWxEYXRhLmNsdXN0ZXIsXG4gICAgICAgIHJlc291cmNlOiB0aGlzLm1vZGFsRGF0YS5wdmMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5zdWJtaXR0aW5nJCQubmV4dChmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZS5zdWNjZXNzKHRoaXMudHJhbnNsYXRlLmdldCgncHZjX2RlbGV0ZV9zdWNjZXNzJykpO1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8YXVpLWRpYWxvZy1oZWFkZXI+XG4gIDxhdWktaWNvblxuICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxuICAgIGljb249XCJleGNsYW1hdGlvbl90cmlhbmdsZV9zXCJcbiAgICBiYWNrZ3JvdW5kPVwidHJpYW5nbGVcIlxuICAgIHNpemU9XCIyMlwiXG4gID48L2F1aS1pY29uPlxuICB7e1xuICAgICdzdG9yYWdlLmRlbGV0ZV9wdmNfdGl0bGUnIHwgdHJhbnNsYXRlOiB7IG5hbWU6IG1vZGFsRGF0YS5wdmMgfCBhY2xOYW1lIH1cbiAgfX1cbjwvYXVpLWRpYWxvZy1oZWFkZXI+XG5cbjxhdWktZGlhbG9nLWNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXIgKmRlY2xhcmU9XCJsaXN0JCB8IGFzeW5jIGFzIGxpc3RcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdD8ubGVuZ3RoOyBlbHNlIGRlbGV0ZVRlbXBsYXRlXCI+XG4gICAgICA8cCBjbGFzcz1cInR3LW1iLTE2XCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgJ3N0b3JhZ2UucHZjX2Nhbl9kZWxldGVfY29udGVudCdcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IG5hbWU6IG1vZGFsRGF0YS5wdmMgfCBhY2xOYW1lLCBsZW5ndGg6IGxpc3QubGVuZ3RoIH1cbiAgICAgICAgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgYXVpVGFibGVTY3JvbGxXcmFwcGVyPVwiNDAwcHhcIj5cbiAgICAgICAgPGF1aS10YWJsZVxuICAgICAgICAgIGF1aVRhYmxlU2Nyb2xsYWJsZVxuICAgICAgICAgIFtkYXRhU291cmNlXT1cImxpc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBhdWlUYWJsZUNvbHVtbkRlZj1cIm5hbWVcIj5cbiAgICAgICAgICAgIDxhdWktdGFibGUtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICAgc3RpY2t5XG4gICAgICAgICAgICAgICphdWlUYWJsZUhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ3Jlc291cmNlX25hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2F1aS10YWJsZS1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDxhdWktdGFibGUtY2VsbCAqYXVpVGFibGVDZWxsRGVmPVwibGV0IGl0ZW1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gW2F1aVRvb2x0aXBdPVwiaXRlbSB8IGFjbE5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtIHwgYWNsTmFtZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2F1aS10YWJsZS1jZWxsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgYXVpVGFibGVDb2x1bW5EZWY9XCJ0eXBlXCI+XG4gICAgICAgICAgICA8YXVpLXRhYmxlLWhlYWRlci1jZWxsICphdWlUYWJsZUhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIHt7ICd0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktdGFibGUtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8YXVpLXRhYmxlLWNlbGwgKmF1aVRhYmxlQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKGl0ZW0ua2luZCA9PT0gJ1ZvbHVtZVNuYXBzaG90JyA/ICdzdG9yYWdlLnNuYXBzaG90JyA6ICdwb2QnKVxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvYXVpLXRhYmxlLWNlbGw+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBhdWlUYWJsZUNvbHVtbkRlZj1cInNvdXJjZVwiPlxuICAgICAgICAgICAgPGF1aS10YWJsZS1oZWFkZXItY2VsbCAqYXVpVGFibGVIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICB7eyAnc291cmNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktdGFibGUtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8YXVpLXRhYmxlLWNlbGwgKmF1aVRhYmxlQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgIDxhY2wtc291cmNlLWxpbmtcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ua2luZCAhPT0gJ1ZvbHVtZVNuYXBzaG90JzsgZWxzZSBlbXB0eVwiXG4gICAgICAgICAgICAgICAgW3NvdXJjZUxpbmtdPVwiXG4gICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgIHwgcHVyZVxuICAgICAgICAgICAgICAgICAgICAgIDogcHZjVXRpbC5nZXRTb3VyY2UkXG4gICAgICAgICAgICAgICAgICAgICAgOiBtb2RhbERhdGEuY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICAgIDogbW9kYWxEYXRhLm5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvYWNsLXNvdXJjZS1saW5rPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICAgICAgICAgIHt7IG51bGwgfCBhY2xGaWVsZE5vdEF2YWlsYWJsZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9hdWktdGFibGUtY2VsbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YXVpLXRhYmxlLWhlYWRlci1yb3dcbiAgICAgICAgICAgICphdWlUYWJsZUhlYWRlclJvd0RlZj1cIkNPTFVNTlM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgICAgPjwvYXVpLXRhYmxlLWhlYWRlci1yb3c+XG4gICAgICAgICAgPGF1aS10YWJsZS1yb3dcbiAgICAgICAgICAgICphdWlUYWJsZVJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IENPTFVNTlNcIlxuICAgICAgICAgID48L2F1aS10YWJsZS1yb3c+XG4gICAgICAgIDwvYXVpLXRhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2RlbGV0ZVRlbXBsYXRlPlxuICAgIDxwIGNsYXNzPVwidHctbXQtMCB0dy1tYi0xMiB0dy10ZXh0LW1haW4tdGV4dFwiPlxuICAgICAge3tcbiAgICAgICAgJ3N0b3JhZ2UuZGVsZXRlX3B2Y19jb250ZW50J1xuICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IG5hbWU6IG1vZGFsRGF0YS5wdmMgfCBhY2xOYW1lIH1cbiAgICAgIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJ0dy1tYi00IHR3LXRleHQtbWFpbi10ZXh0XCI+XG4gICAgICB7eyAncGxlYXNlX2VudGVyX2V4dHJhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPHNwYW4gY2xhc3M9XCJ0dy10ZXh0LXJlZFwiPlxuICAgICAgICB7eyBtb2RhbERhdGEucHZjIHwgYWNsTmFtZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAge3sgJ2V4dHJhX2RldGVybWluZV9kZWxldGUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGlucHV0XG4gICAgICBhdWktaW5wdXRcbiAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB0cmltXG4gICAgLz5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYXVpLWRpYWxvZy1jb250ZW50PlxuXG48YXVpLWRpYWxvZy1mb290ZXI+XG4gIDxkaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCIhKGxpc3QkIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgYXVpLWJ1dHRvbj1cImRhbmdlclwiXG4gICAgICBbbG9hZGluZ109XCJzdWJtaXR0aW5nJCQgfCBhc3luY1wiXG4gICAgICBbZGlzYWJsZWRdPVwiaW5wdXRWYWx1ZSAhPT0gKG1vZGFsRGF0YS5wdmMgfCBhY2xOYW1lKVwiXG4gICAgICAoY2xpY2spPVwiY29uZmlybSgpXCJcbiAgICA+XG4gICAgICB7eyAnZGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGF1aS1idXR0b25cbiAgICAgIGF1aURpYWxvZ0Nsb3NlXG4gICAgPlxuICAgICAge3sgJ2NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2F1aS1kaWFsb2ctZm9vdGVyPlxuIl19
@@ -0,0 +1,193 @@
1
+ import { ButtonModule, DIALOG_DATA, DialogModule, DialogRef, FormModule, InlineAlertModule, InputModule, MessageService, } from '@alauda/ui';
2
+ import { K8sApiService, publishRef, TranslateService, toUnitGi, POSITIVE_INT_PATTERN, RESOURCE_TYPES, TRANSLATE_MODULE, PurePipe, K8S_UTIL_PIPES_MODULE, ERRORS_MAPPER_MODULE, } from '@alauda-fe/common';
3
+ import { AsyncPipe, NgIf } from '@angular/common';
4
+ import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
5
+ import { FormsModule } from '@angular/forms';
6
+ import { Subject, finalize, startWith } from 'rxjs';
7
+ import { ActualCapacityPipe } from '../../pipes/actual-capacity.pipe';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@alauda-fe/common";
10
+ import * as i2 from "@alauda/ui";
11
+ import * as i3 from "@angular/forms";
12
+ const _c0 = a0 => ({ capacity: a0 });
13
+ const _c1 = (a0, a1) => ({ pattern: a0, min: a1 });
14
+ function PvcExpandCapacityDialogComponent_aui_inline_alert_4_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "aui-inline-alert", 12);
16
+ i0.ɵɵtext(1);
17
+ i0.ɵɵpipe(2, "translate");
18
+ i0.ɵɵelementEnd();
19
+ } if (rf & 2) {
20
+ i0.ɵɵadvance();
21
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, "storage.pvc_expand_capacity_help"));
22
+ } }
23
+ export class PvcExpandCapacityDialogComponent {
24
+ constructor(dialogData = {
25
+ resource: null,
26
+ cluster: '',
27
+ namespace: '',
28
+ isVM: false,
29
+ }, k8sApi, dialogRef, message, translate) {
30
+ this.dialogData = dialogData;
31
+ this.k8sApi = k8sApi;
32
+ this.dialogRef = dialogRef;
33
+ this.message = message;
34
+ this.translate = translate;
35
+ this.POSITIVE_INT_PATTERN = POSITIVE_INT_PATTERN;
36
+ this.submitting$$ = new Subject();
37
+ this.submitting$ = this.submitting$$.pipe(startWith(false), publishRef());
38
+ this.toUnitGi = toUnitGi;
39
+ }
40
+ submit(ngForm) {
41
+ ngForm.onSubmit(null);
42
+ if (ngForm.invalid) {
43
+ return;
44
+ }
45
+ this.submitting$$.next(true);
46
+ this.k8sApi
47
+ .patchResource({
48
+ type: RESOURCE_TYPES.PERSISTENT_VOLUME_CLAIM,
49
+ resource: this.dialogData.resource,
50
+ cluster: this.dialogData.cluster,
51
+ namespace: this.dialogData.namespace,
52
+ part: {
53
+ spec: {
54
+ resources: {
55
+ requests: {
56
+ storage: this.newCapacity + 'Gi',
57
+ },
58
+ },
59
+ },
60
+ },
61
+ })
62
+ .pipe(finalize(() => {
63
+ this.submitting$$.next(false);
64
+ }))
65
+ .subscribe({
66
+ next: () => {
67
+ this.dialogRef.close(true);
68
+ this.message.success(this.translate.get('expand_capacity_succeeded'));
69
+ },
70
+ error: () => {
71
+ this.message.error(this.translate.get('expand_capacity_failed'));
72
+ },
73
+ });
74
+ }
75
+ getNumber(capacity) {
76
+ return +capacity.replace('Gi', '') + 1;
77
+ }
78
+ getVolumeTypeTranslateKey(isVM) {
79
+ return isVM ? 'storage.virtual_disk_name' : 'storage.pvc_short';
80
+ }
81
+ static { this.ɵfac = function PvcExpandCapacityDialogComponent_Factory(t) { return new (t || PvcExpandCapacityDialogComponent)(i0.ɵɵdirectiveInject(DIALOG_DATA), i0.ɵɵdirectiveInject(i1.K8sApiService), i0.ɵɵdirectiveInject(i2.DialogRef), i0.ɵɵdirectiveInject(i2.MessageService), i0.ɵɵdirectiveInject(i1.TranslateService)); }; }
82
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PvcExpandCapacityDialogComponent, selectors: [["ng-component"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 46, vars: 66, consts: [["ngForm", "ngForm"], ["capacity", "ngModel"], ["type", "warning", 4, "ngIf"], ["auiForm", "", "ngForm", ""], ["auiFormItemLabel", ""], ["width", "small"], ["auiFormItemControl", "", "required", ""], ["auiInputAddonAfter", ""], ["aui-input", "", "type", "text", "required", "", "name", "capacity", 1, "tw-flex-1", 3, "ngModelChange", "min", "pattern", "ngModel"], ["auiFormItemError", "", 3, "errors", "errorsMapper"], ["aui-button", "primary", 3, "click", "disabled", "loading"], ["aui-button", "", 3, "auiDialogClose", "disabled"], ["type", "warning"]], template: function PvcExpandCapacityDialogComponent_Template(rf, ctx) { if (rf & 1) {
83
+ const _r1 = i0.ɵɵgetCurrentView();
84
+ i0.ɵɵelementStart(0, "aui-dialog-header");
85
+ i0.ɵɵtext(1);
86
+ i0.ɵɵpipe(2, "translate");
87
+ i0.ɵɵelementEnd();
88
+ i0.ɵɵelementStart(3, "aui-dialog-content");
89
+ i0.ɵɵtemplate(4, PvcExpandCapacityDialogComponent_aui_inline_alert_4_Template, 3, 3, "aui-inline-alert", 2);
90
+ i0.ɵɵelementStart(5, "form", 3, 0)(7, "aui-form-item")(8, "label", 4);
91
+ i0.ɵɵtext(9);
92
+ i0.ɵɵpipe(10, "pure");
93
+ i0.ɵɵpipe(11, "translate");
94
+ i0.ɵɵelementEnd();
95
+ i0.ɵɵtext(12);
96
+ i0.ɵɵpipe(13, "aclName");
97
+ i0.ɵɵelementEnd();
98
+ i0.ɵɵelementStart(14, "aui-form-item")(15, "label", 4);
99
+ i0.ɵɵtext(16);
100
+ i0.ɵɵpipe(17, "translate");
101
+ i0.ɵɵelementEnd();
102
+ i0.ɵɵtext(18);
103
+ i0.ɵɵpipe(19, "rcActualCapacity");
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵelementStart(20, "aui-form-item", 5)(21, "label", 4);
106
+ i0.ɵɵtext(22);
107
+ i0.ɵɵpipe(23, "translate");
108
+ i0.ɵɵelementEnd();
109
+ i0.ɵɵelementStart(24, "aui-input-group", 6)(25, "span", 7);
110
+ i0.ɵɵtext(26);
111
+ i0.ɵɵelementEnd();
112
+ i0.ɵɵelementStart(27, "input", 8, 1);
113
+ i0.ɵɵpipe(29, "pure");
114
+ i0.ɵɵpipe(30, "pure");
115
+ i0.ɵɵtwoWayListener("ngModelChange", function PvcExpandCapacityDialogComponent_Template_input_ngModelChange_27_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.newCapacity, $event) || (ctx.newCapacity = $event); return i0.ɵɵresetView($event); });
116
+ i0.ɵɵelementEnd()();
117
+ i0.ɵɵelement(31, "acl-errors-mapper", 9);
118
+ i0.ɵɵpipe(32, "translate");
119
+ i0.ɵɵpipe(33, "pure");
120
+ i0.ɵɵpipe(34, "pure");
121
+ i0.ɵɵpipe(35, "translate");
122
+ i0.ɵɵelementEnd()()();
123
+ i0.ɵɵelementStart(36, "aui-dialog-footer")(37, "button", 10);
124
+ i0.ɵɵpipe(38, "async");
125
+ i0.ɵɵpipe(39, "async");
126
+ i0.ɵɵlistener("click", function PvcExpandCapacityDialogComponent_Template_button_click_37_listener() { i0.ɵɵrestoreView(_r1); const ngForm_r2 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.submit(ngForm_r2)); });
127
+ i0.ɵɵtext(40);
128
+ i0.ɵɵpipe(41, "translate");
129
+ i0.ɵɵelementEnd();
130
+ i0.ɵɵelementStart(42, "button", 11);
131
+ i0.ɵɵpipe(43, "async");
132
+ i0.ɵɵtext(44);
133
+ i0.ɵɵpipe(45, "translate");
134
+ i0.ɵɵelementEnd()();
135
+ } if (rf & 2) {
136
+ const capacity_r3 = i0.ɵɵreference(28);
137
+ i0.ɵɵadvance();
138
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 19, "expansion"), "\n");
139
+ i0.ɵɵadvance(3);
140
+ i0.ɵɵproperty("ngIf", !ctx.dialogData.isVM);
141
+ i0.ɵɵadvance(5);
142
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(11, 24, i0.ɵɵpipeBind2(10, 21, ctx.dialogData.isVM, ctx.getVolumeTypeTranslateKey)));
143
+ i0.ɵɵadvance(3);
144
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 26, ctx.dialogData.resource), " ");
145
+ i0.ɵɵadvance(4);
146
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(17, 28, "storage.current_capacity"));
147
+ i0.ɵɵadvance(2);
148
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(19, 30, ctx.dialogData.resource), " ");
149
+ i0.ɵɵadvance(4);
150
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(23, 32, "storage.new_capacity"));
151
+ i0.ɵɵadvance(4);
152
+ i0.ɵɵtextInterpolate("Gi");
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵproperty("min", i0.ɵɵpipeBind2(30, 37, i0.ɵɵpipeBind2(29, 34, ctx.dialogData.resource.spec.resources.requests.storage, ctx.toUnitGi), ctx.getNumber))("pattern", ctx.POSITIVE_INT_PATTERN.pattern);
155
+ i0.ɵɵtwoWayProperty("ngModel", ctx.newCapacity);
156
+ i0.ɵɵadvance(4);
157
+ i0.ɵɵproperty("errors", capacity_r3.errors)("errorsMapper", i0.ɵɵpureFunction2(63, _c1, i0.ɵɵpipeBind1(32, 40, ctx.POSITIVE_INT_PATTERN.tip), i0.ɵɵpipeBind2(35, 48, "storage.pvc_new_capacity_small_than_current_error", i0.ɵɵpureFunction1(61, _c0, i0.ɵɵpipeBind2(34, 45, i0.ɵɵpipeBind2(33, 42, ctx.dialogData.resource.spec.resources.requests.storage, ctx.toUnitGi), ctx.getNumber))) + "Gi"));
158
+ i0.ɵɵadvance(6);
159
+ i0.ɵɵproperty("disabled", i0.ɵɵpipeBind1(38, 51, ctx.submitting$))("loading", i0.ɵɵpipeBind1(39, 53, ctx.submitting$));
160
+ i0.ɵɵadvance(3);
161
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(41, 55, "storage.expansion"), " ");
162
+ i0.ɵɵadvance(2);
163
+ i0.ɵɵproperty("auiDialogClose", false)("disabled", i0.ɵɵpipeBind1(43, 57, ctx.submitting$));
164
+ i0.ɵɵadvance(2);
165
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(45, 59, "cancel"), " ");
166
+ } }, dependencies: [NgIf,
167
+ AsyncPipe,
168
+ DialogModule, i2.DialogHeaderComponent, i2.DialogContentComponent, i2.DialogFooterComponent, i2.DialogCloseDirective, FormModule, i2.FormDirective, i2.FormItemComponent, i2.FormItemErrorDirective, i2.FormItemLabelDirective, i2.FormItemControlDirective, FormsModule, i3.ɵNgNoValidate, i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgControlStatusGroup, i3.RequiredValidator, i3.PatternValidator, i3.NgModel, i3.NgForm, InputModule, i2.InputComponent, i2.InputGroupComponent, i2.InputAddonAfterDirective, ButtonModule, i2.ButtonComponent, InlineAlertModule, i2.InlineAlertComponent, ActualCapacityPipe,
169
+ PurePipe, i1.ErrorsMapperComponent, i1.K8sNamePipe, i1.TranslatePipe], encapsulation: 2, changeDetection: 0 }); }
170
+ }
171
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PvcExpandCapacityDialogComponent, [{
172
+ type: Component,
173
+ args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
174
+ NgIf,
175
+ AsyncPipe,
176
+ DialogModule,
177
+ FormModule,
178
+ FormsModule,
179
+ InputModule,
180
+ ButtonModule,
181
+ InlineAlertModule,
182
+ ActualCapacityPipe,
183
+ PurePipe,
184
+ ERRORS_MAPPER_MODULE,
185
+ K8S_UTIL_PIPES_MODULE,
186
+ TRANSLATE_MODULE,
187
+ ], template: "<aui-dialog-header>\n {{ 'expansion' | translate }}\n</aui-dialog-header>\n<aui-dialog-content>\n <aui-inline-alert\n type=\"warning\"\n *ngIf=\"!dialogData.isVM\"\n >{{ 'storage.pvc_expand_capacity_help' | translate }}</aui-inline-alert\n >\n <form\n auiForm\n ngForm\n #ngForm=\"ngForm\"\n >\n <aui-form-item>\n <label auiFormItemLabel>{{\n dialogData.isVM | pure: getVolumeTypeTranslateKey | translate\n }}</label>\n {{ dialogData.resource | aclName }}\n </aui-form-item>\n <aui-form-item>\n <label auiFormItemLabel>{{\n 'storage.current_capacity' | translate\n }}</label>\n {{ dialogData.resource | rcActualCapacity }}\n </aui-form-item>\n <aui-form-item width=\"small\">\n <label auiFormItemLabel>{{ 'storage.new_capacity' | translate }}</label>\n <aui-input-group\n auiFormItemControl\n required\n >\n <span auiInputAddonAfter>{{ 'Gi' }}</span>\n <input\n aui-input\n type=\"text\"\n required\n [min]=\"\n dialogData.resource.spec.resources.requests.storage\n | pure: toUnitGi\n | pure: getNumber\n \"\n [pattern]=\"POSITIVE_INT_PATTERN.pattern\"\n class=\"tw-flex-1\"\n name=\"capacity\"\n [(ngModel)]=\"newCapacity\"\n #capacity=\"ngModel\"\n />\n </aui-input-group>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"capacity.errors\"\n [errorsMapper]=\"{\n pattern: POSITIVE_INT_PATTERN.tip | translate,\n min:\n ('storage.pvc_new_capacity_small_than_current_error'\n | translate\n : {\n capacity:\n dialogData.resource.spec.resources.requests.storage\n | pure: toUnitGi\n | pure: getNumber,\n }) + 'Gi',\n }\"\n ></acl-errors-mapper>\n </aui-form-item>\n </form>\n</aui-dialog-content>\n<aui-dialog-footer>\n <button\n aui-button=\"primary\"\n (click)=\"submit(ngForm)\"\n [disabled]=\"submitting$ | async\"\n [loading]=\"submitting$ | async\"\n >\n {{ 'storage.expansion' | translate }}\n </button>\n <button\n aui-button\n [auiDialogClose]=\"false\"\n [disabled]=\"submitting$ | async\"\n >\n {{ 'cancel' | translate }}\n </button>\n</aui-dialog-footer>\n" }]
188
+ }], () => [{ type: undefined, decorators: [{
189
+ type: Inject,
190
+ args: [DIALOG_DATA]
191
+ }] }, { type: i1.K8sApiService }, { type: i2.DialogRef }, { type: i2.MessageService }, { type: i1.TranslateService }], null); })();
192
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PvcExpandCapacityDialogComponent, { className: "PvcExpandCapacityDialogComponent", filePath: "lib/components/pvc-expand-capacity-dialog/component.ts", lineNumber: 51 }); })();
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9zdG9yYWdlL3NyYy9saWIvY29tcG9uZW50cy9wdmMtZXhwYW5kLWNhcGFjaXR5LWRpYWxvZy9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL3N0b3JhZ2Uvc3JjL2xpYi9jb21wb25lbnRzL3B2Yy1leHBhbmQtY2FwYWNpdHktZGlhbG9nL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxjQUFjLEdBQ2YsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBRVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7SUN4QnBFLDRDQUdHO0lBQUEsWUFBb0Q7O0lBQUEsaUJBQ3REOztJQURFLGNBQW9EO0lBQXBELDhFQUFvRDs7QUQyQ3pELE1BQU0sT0FBTyxnQ0FB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QjVDLFNBQVM7NkJBQ0ksSUFBSSxtQkFFQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO29CQUNQLElBQUk7b0JBQ0osU0FBUztvQkFDVCxZQUFZO29CQUNaLFVBQVU7b0JBQ1YsV0FBVztvQkFDWCxXQUFXO29CQUNYLFlBQVk7b0JBQ1osaUJBQWlCO29CQUNqQixrQkFBa0I7b0JBQ2xCLFFBQVE7b0JBQ1Isb0JBQW9CO29CQUNwQixxQkFBcUI7b0JBQ3JCLGdCQUFnQjtpQkFDakI7O3NCQVVFLE1BQU07dUJBQUMsV0FBVzs7a0ZBUlYsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnV0dG9uTW9kdWxlLFxuICBESUFMT0dfREFUQSxcbiAgRGlhbG9nTW9kdWxlLFxuICBEaWFsb2dSZWYsXG4gIEZvcm1Nb2R1bGUsXG4gIElubGluZUFsZXJ0TW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgTWVzc2FnZVNlcnZpY2UsXG59IGZyb20gJ0BhbGF1ZGEvdWknO1xuaW1wb3J0IHtcbiAgSzhzQXBpU2VydmljZSxcbiAgcHVibGlzaFJlZixcbiAgUGVyc2lzdGVudFZvbHVtZUNsYWltLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICB0b1VuaXRHaSxcbiAgUE9TSVRJVkVfSU5UX1BBVFRFUk4sXG4gIFJFU09VUkNFX1RZUEVTLFxuICBUUkFOU0xBVEVfTU9EVUxFLFxuICBQdXJlUGlwZSxcbiAgSzhTX1VUSUxfUElQRVNfTU9EVUxFLFxuICBFUlJPUlNfTUFQUEVSX01PRFVMRSxcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIGZpbmFsaXplLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWN0dWFsQ2FwYWNpdHlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvYWN0dWFsLWNhcGFjaXR5LnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlbXBsYXRlLmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIE5nSWYsXG4gICAgQXN5bmNQaXBlLFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBGb3JtTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJbmxpbmVBbGVydE1vZHVsZSxcbiAgICBBY3R1YWxDYXBhY2l0eVBpcGUsXG4gICAgUHVyZVBpcGUsXG4gICAgRVJST1JTX01BUFBFUl9NT0RVTEUsXG4gICAgSzhTX1VUSUxfUElQRVNfTU9EVUxFLFxuICAgIFRSQU5TTEFURV9NT0RVTEUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFB2Y0V4cGFuZENhcGFjaXR5RGlhbG9nQ29tcG9uZW50IHtcbiAgbmV3Q2FwYWNpdHk6IHN0cmluZztcbiAgUE9TSVRJVkVfSU5UX1BBVFRFUk4gPSBQT1NJVElWRV9JTlRfUEFUVEVSTjtcbiAgc3VibWl0dGluZyQkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgc3VibWl0dGluZyQgPSB0aGlzLnN1Ym1pdHRpbmckJC5waXBlKHN0YXJ0V2l0aChmYWxzZSksIHB1Ymxpc2hSZWYoKSk7XG4gIHRvVW5pdEdpID0gdG9Vbml0R2k7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChESUFMT0dfREFUQSlcbiAgICBwdWJsaWMgZGlhbG9nRGF0YToge1xuICAgICAgcmVzb3VyY2U6IFBlcnNpc3RlbnRWb2x1bWVDbGFpbTtcbiAgICAgIGNsdXN0ZXI6IHN0cmluZztcbiAgICAgIG5hbWVzcGFjZTogc3RyaW5nO1xuICAgICAgaXNWTT86IGJvb2xlYW47XG4gICAgfSA9IHtcbiAgICAgIHJlc291cmNlOiBudWxsLFxuICAgICAgY2x1c3RlcjogJycsXG4gICAgICBuYW1lc3BhY2U6ICcnLFxuICAgICAgaXNWTTogZmFsc2UsXG4gICAgfSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGs4c0FwaTogSzhzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogRGlhbG9nUmVmPFB2Y0V4cGFuZENhcGFjaXR5RGlhbG9nQ29tcG9uZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgc3VibWl0KG5nRm9ybTogTmdGb3JtKSB7XG4gICAgbmdGb3JtLm9uU3VibWl0KG51bGwpO1xuICAgIGlmIChuZ0Zvcm0uaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN1Ym1pdHRpbmckJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuazhzQXBpXG4gICAgICAucGF0Y2hSZXNvdXJjZSh7XG4gICAgICAgIHR5cGU6IFJFU09VUkNFX1RZUEVTLlBFUlNJU1RFTlRfVk9MVU1FX0NMQUlNLFxuICAgICAgICByZXNvdXJjZTogdGhpcy5kaWFsb2dEYXRhLnJlc291cmNlLFxuICAgICAgICBjbHVzdGVyOiB0aGlzLmRpYWxvZ0RhdGEuY2x1c3RlcixcbiAgICAgICAgbmFtZXNwYWNlOiB0aGlzLmRpYWxvZ0RhdGEubmFtZXNwYWNlLFxuICAgICAgICBwYXJ0OiB7XG4gICAgICAgICAgc3BlYzoge1xuICAgICAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgIHJlcXVlc3RzOiB7XG4gICAgICAgICAgICAgICAgc3RvcmFnZTogdGhpcy5uZXdDYXBhY2l0eSArICdHaScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRpbmckJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZS5zdWNjZXNzKHRoaXMudHJhbnNsYXRlLmdldCgnZXhwYW5kX2NhcGFjaXR5X3N1Y2NlZWRlZCcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuZXJyb3IodGhpcy50cmFuc2xhdGUuZ2V0KCdleHBhbmRfY2FwYWNpdHlfZmFpbGVkJykpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBnZXROdW1iZXIoY2FwYWNpdHk6IHN0cmluZykge1xuICAgIHJldHVybiArY2FwYWNpdHkucmVwbGFjZSgnR2knLCAnJykgKyAxO1xuICB9XG5cbiAgZ2V0Vm9sdW1lVHlwZVRyYW5zbGF0ZUtleShpc1ZNOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGlzVk0gPyAnc3RvcmFnZS52aXJ0dWFsX2Rpc2tfbmFtZScgOiAnc3RvcmFnZS5wdmNfc2hvcnQnO1xuICB9XG59XG4iLCI8YXVpLWRpYWxvZy1oZWFkZXI+XG4gIHt7ICdleHBhbnNpb24nIHwgdHJhbnNsYXRlIH19XG48L2F1aS1kaWFsb2ctaGVhZGVyPlxuPGF1aS1kaWFsb2ctY29udGVudD5cbiAgPGF1aS1pbmxpbmUtYWxlcnRcbiAgICB0eXBlPVwid2FybmluZ1wiXG4gICAgKm5nSWY9XCIhZGlhbG9nRGF0YS5pc1ZNXCJcbiAgICA+e3sgJ3N0b3JhZ2UucHZjX2V4cGFuZF9jYXBhY2l0eV9oZWxwJyB8IHRyYW5zbGF0ZSB9fTwvYXVpLWlubGluZS1hbGVydFxuICA+XG4gIDxmb3JtXG4gICAgYXVpRm9ybVxuICAgIG5nRm9ybVxuICAgICNuZ0Zvcm09XCJuZ0Zvcm1cIlxuICA+XG4gICAgPGF1aS1mb3JtLWl0ZW0+XG4gICAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD57e1xuICAgICAgICBkaWFsb2dEYXRhLmlzVk0gfCBwdXJlOiBnZXRWb2x1bWVUeXBlVHJhbnNsYXRlS2V5IHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbGFiZWw+XG4gICAgICB7eyBkaWFsb2dEYXRhLnJlc291cmNlIHwgYWNsTmFtZSB9fVxuICAgIDwvYXVpLWZvcm0taXRlbT5cbiAgICA8YXVpLWZvcm0taXRlbT5cbiAgICAgIDxsYWJlbCBhdWlGb3JtSXRlbUxhYmVsPnt7XG4gICAgICAgICdzdG9yYWdlLmN1cnJlbnRfY2FwYWNpdHknIHwgdHJhbnNsYXRlXG4gICAgICB9fTwvbGFiZWw+XG4gICAgICB7eyBkaWFsb2dEYXRhLnJlc291cmNlIHwgcmNBY3R1YWxDYXBhY2l0eSB9fVxuICAgIDwvYXVpLWZvcm0taXRlbT5cbiAgICA8YXVpLWZvcm0taXRlbSB3aWR0aD1cInNtYWxsXCI+XG4gICAgICA8bGFiZWwgYXVpRm9ybUl0ZW1MYWJlbD57eyAnc3RvcmFnZS5uZXdfY2FwYWNpdHknIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgIDxhdWktaW5wdXQtZ3JvdXBcbiAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGF1aUlucHV0QWRkb25BZnRlcj57eyAnR2knIH19PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICBbbWluXT1cIlxuICAgICAgICAgICAgZGlhbG9nRGF0YS5yZXNvdXJjZS5zcGVjLnJlc291cmNlcy5yZXF1ZXN0cy5zdG9yYWdlXG4gICAgICAgICAgICAgIHwgcHVyZTogdG9Vbml0R2lcbiAgICAgICAgICAgICAgfCBwdXJlOiBnZXROdW1iZXJcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtwYXR0ZXJuXT1cIlBPU0lUSVZFX0lOVF9QQVRURVJOLnBhdHRlcm5cIlxuICAgICAgICAgIGNsYXNzPVwidHctZmxleC0xXCJcbiAgICAgICAgICBuYW1lPVwiY2FwYWNpdHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3Q2FwYWNpdHlcIlxuICAgICAgICAgICNjYXBhY2l0eT1cIm5nTW9kZWxcIlxuICAgICAgICAvPlxuICAgICAgPC9hdWktaW5wdXQtZ3JvdXA+XG4gICAgICA8YWNsLWVycm9ycy1tYXBwZXJcbiAgICAgICAgYXVpRm9ybUl0ZW1FcnJvclxuICAgICAgICBbZXJyb3JzXT1cImNhcGFjaXR5LmVycm9yc1wiXG4gICAgICAgIFtlcnJvcnNNYXBwZXJdPVwie1xuICAgICAgICAgIHBhdHRlcm46IFBPU0lUSVZFX0lOVF9QQVRURVJOLnRpcCB8IHRyYW5zbGF0ZSxcbiAgICAgICAgICBtaW46XG4gICAgICAgICAgICAoJ3N0b3JhZ2UucHZjX25ld19jYXBhY2l0eV9zbWFsbF90aGFuX2N1cnJlbnRfZXJyb3InXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGNhcGFjaXR5OlxuICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0RhdGEucmVzb3VyY2Uuc3BlYy5yZXNvdXJjZXMucmVxdWVzdHMuc3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAgIHwgcHVyZTogdG9Vbml0R2lcbiAgICAgICAgICAgICAgICAgICAgICB8IHB1cmU6IGdldE51bWJlcixcbiAgICAgICAgICAgICAgICAgIH0pICsgJ0dpJyxcbiAgICAgICAgfVwiXG4gICAgICA+PC9hY2wtZXJyb3JzLW1hcHBlcj5cbiAgICA8L2F1aS1mb3JtLWl0ZW0+XG4gIDwvZm9ybT5cbjwvYXVpLWRpYWxvZy1jb250ZW50PlxuPGF1aS1kaWFsb2ctZm9vdGVyPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvbj1cInByaW1hcnlcIlxuICAgIChjbGljayk9XCJzdWJtaXQobmdGb3JtKVwiXG4gICAgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmckIHwgYXN5bmNcIlxuICAgIFtsb2FkaW5nXT1cInN1Ym1pdHRpbmckIHwgYXN5bmNcIlxuICA+XG4gICAge3sgJ3N0b3JhZ2UuZXhwYW5zaW9uJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgIGF1aS1idXR0b25cbiAgICBbYXVpRGlhbG9nQ2xvc2VdPVwiZmFsc2VcIlxuICAgIFtkaXNhYmxlZF09XCJzdWJtaXR0aW5nJCB8IGFzeW5jXCJcbiAgPlxuICAgIHt7ICdjYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9hdWktZGlhbG9nLWZvb3Rlcj5cbiJdfQ==