dashboard-shell-shell 3.0.5-test.12 → 3.0.5-test.13
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/icons/iconfont.css +4 -1
- package/assets/images/pl/dark/logo.png +0 -0
- package/assets/styles/global/_tooltip.scss +5 -1
- package/assets/translations/zh-hans.yaml +1 -1
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +22 -19
- package/components/Drawer/ResourceDetailDrawer/index.vue +2 -2
- package/components/GlobalRoleBindings.vue +1 -58
- package/components/Resource/Detail/TitleBar/index.vue +26 -23
- package/components/ResourceDetail/Masthead/index.vue +1 -1
- package/components/ResourceDetail/Masthead/latest.vue +1 -1
- package/components/ResourceDetail/Masthead/legacy.vue +4 -4
- package/components/SortableTable/index.vue +1 -1
- package/components/auth/Principal.vue +7 -3
- package/components/auth/RoleDetailEdit.vue +1 -1
- package/components/form/ArrayList.vue +1 -1
- package/components/form/KeyValue.vue +15 -2
- package/components/form/Labels.vue +1 -1
- package/components/form/MatchExpressions.vue +2 -2
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/ResourceQuota/NamespaceRow.vue +1 -1
- package/components/form/ResourceQuota/Project.vue +1 -1
- package/components/form/ResourceQuota/ProjectRow.vue +1 -1
- package/components/nav/NamespaceFilter.vue +14 -19
- package/components/nav/TopLevelMenu.vue +98 -125
- package/config/router/navigation-guards/index.js +52 -3
- package/initialize/app-extended.js +7 -1
- package/package.json +1 -1
- package/pages/account/index.vue +89 -65
- package/pages/home.vue +3 -4
- package/rancher-components/Banner/Banner.vue +4 -1
- package/utils/errorTranslate.json +82 -2
|
Binary file
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
.v-popper__popper.v-popper--theme-dropdown {
|
|
150
|
-
border-radius:
|
|
150
|
+
border-radius: 0px;
|
|
151
151
|
z-index: z-index('tooltip');
|
|
152
152
|
border: 1px solid #d9d9d9 !important;
|
|
153
153
|
|
|
@@ -157,6 +157,10 @@
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
+
.v-popper__popper .v-popper__arrow-container {
|
|
161
|
+
display: none;
|
|
162
|
+
}
|
|
163
|
+
|
|
160
164
|
|
|
161
165
|
.v-popper {
|
|
162
166
|
display: inline;
|
|
@@ -6482,7 +6482,7 @@ typeDescription:
|
|
|
6482
6482
|
kubevirt.io.virtualmachine: 云虚拟机是一种安全可靠、弹性可伸缩的云计算服务器,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。
|
|
6483
6483
|
harvesterhci.io.volume: 虚拟磁盘具有高性能和低时延的特点,支持随机读写,可以像使用物理硬盘一样,在虚拟机上进行格式化并建立文件系统来使用块存储。
|
|
6484
6484
|
harvesterhci.io.volumesnapshot: 虚拟磁盘快照功能通过捕获虚拟磁盘在特定时间点的状态,生成增量副本,支持快速回滚磁盘状态,为测试验证、容灾恢复提供高效解决方案
|
|
6485
|
-
harvesterhci.io.virtualmachinebackup:
|
|
6485
|
+
harvesterhci.io.virtualmachinebackup: 虚拟机备份恢复功能通过创建包含磁盘数据、配置信息的完整副本,支持跨环境恢复及长期数据保护,为系统故障或灾难提供可靠容灾方案。
|
|
6486
6486
|
harvesterhci.io.schedulevmbackup: 虚拟机备份策略功能通过创建定时任务,对虚拟机进行完整备份或增量快照,为用户提供自动化的数据备份和容灾方案。
|
|
6487
6487
|
harvesterhci.io.vmsnapshot: 虚拟机快照功能通过捕获特定时间点的系统状态,支持快速恢复虚拟机状态,为数据备份与系统调试提供灵活解决方案。
|
|
6488
6488
|
harvesterhci.io.keypair: SSH密钥对是一种安全便捷的登录认证方式,您可以实现免密码远程登录,并在无需人工干预的情况下进行安全的自动化操作,实现服务器配置和应用程序部署的自动化。
|
|
@@ -16,25 +16,19 @@ const store = useStore();
|
|
|
16
16
|
const i18n = useI18n(store);
|
|
17
17
|
</script>
|
|
18
18
|
<template>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
:initial-value="props.resource"
|
|
33
|
-
:use-tabbed-hash="false /* Have to disable hashing on child components or it modifies the url and closes the drawer */"
|
|
34
|
-
as="config"
|
|
35
|
-
/>
|
|
36
|
-
</div>
|
|
37
|
-
</Tab>
|
|
19
|
+
<div class="container">
|
|
20
|
+
<component
|
|
21
|
+
:is="props.component"
|
|
22
|
+
:value="props.resource"
|
|
23
|
+
:liveValue="props.resource"
|
|
24
|
+
:resourceType="props.resourceType"
|
|
25
|
+
:mode="_VIEW"
|
|
26
|
+
:real-mode="_VIEW"
|
|
27
|
+
:initial-value="props.resource"
|
|
28
|
+
:use-tabbed-hash="false /* Have to disable hashing on child components or it modifies the url and closes the drawer */"
|
|
29
|
+
as="config"
|
|
30
|
+
/>
|
|
31
|
+
</div>
|
|
38
32
|
</template>
|
|
39
33
|
|
|
40
34
|
<style lang="scss" scoped>
|
|
@@ -45,6 +39,15 @@ const i18n = useI18n(store);
|
|
|
45
39
|
max-width: 100%;
|
|
46
40
|
width: 100%;
|
|
47
41
|
position: relative;
|
|
42
|
+
// Handle the loading indicator
|
|
43
|
+
:deep() .overlay-content-mode {
|
|
44
|
+
left: 0;
|
|
45
|
+
top: 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:deep() .cru-resource-footer {
|
|
49
|
+
display: none;
|
|
50
|
+
}
|
|
48
51
|
}
|
|
49
52
|
.config-tab {
|
|
50
53
|
|
|
@@ -333,7 +333,7 @@ export default {
|
|
|
333
333
|
|
|
334
334
|
<div v-else>
|
|
335
335
|
<form v-if="selectedRoles">
|
|
336
|
-
<template
|
|
336
|
+
<template>
|
|
337
337
|
<div
|
|
338
338
|
v-for="(sortedRole, roleType) in sortedRoles"
|
|
339
339
|
:key="roleType"
|
|
@@ -389,63 +389,6 @@ export default {
|
|
|
389
389
|
</Card>
|
|
390
390
|
</div>
|
|
391
391
|
</template>
|
|
392
|
-
|
|
393
|
-
<template v-else>
|
|
394
|
-
<div
|
|
395
|
-
v-for="(sortedRole, roleType) in { global: sortedRoles['global'] }"
|
|
396
|
-
:key="roleType"
|
|
397
|
-
class="role-group mb-10"
|
|
398
|
-
>
|
|
399
|
-
<Card
|
|
400
|
-
v-if="Object.keys(sortedRole).length"
|
|
401
|
-
:show-highlight-border="false"
|
|
402
|
-
:show-actions="false"
|
|
403
|
-
>
|
|
404
|
-
<template v-slot:title>
|
|
405
|
-
<div class="type-title">
|
|
406
|
-
<h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
|
|
407
|
-
<div class="type-description">
|
|
408
|
-
{{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
</template>
|
|
412
|
-
<template v-slot:body>
|
|
413
|
-
<div
|
|
414
|
-
class="checkbox-section"
|
|
415
|
-
:class="'checkbox-section--' + roleType"
|
|
416
|
-
>
|
|
417
|
-
<div
|
|
418
|
-
v-for="(role, i) in sortedRoles[roleType]"
|
|
419
|
-
:key="i"
|
|
420
|
-
class="checkbox mb-10 mr-10"
|
|
421
|
-
>
|
|
422
|
-
<Checkbox
|
|
423
|
-
v-model:value="selectedRoles"
|
|
424
|
-
:value-when-true="role.id"
|
|
425
|
-
:disabled="!!assignOnlyRoles[role.id]"
|
|
426
|
-
:label="role.nameDisplay"
|
|
427
|
-
:description="role.descriptionDisplay"
|
|
428
|
-
:mode="mode"
|
|
429
|
-
:data-testId="'grb-checkbox-' + role.id"
|
|
430
|
-
@update:value="checkboxChanged"
|
|
431
|
-
>
|
|
432
|
-
<template #label>
|
|
433
|
-
<div class="checkbox-label-slot">
|
|
434
|
-
<span class="checkbox-label">{{ role.nameDisplay }}</span>
|
|
435
|
-
<i
|
|
436
|
-
v-if="!!assignOnlyRoles[role.id]"
|
|
437
|
-
v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
|
|
438
|
-
class="checkbox-info icon icon-info icon-lg"
|
|
439
|
-
/>
|
|
440
|
-
</div>
|
|
441
|
-
</template>
|
|
442
|
-
</Checkbox>
|
|
443
|
-
</div>
|
|
444
|
-
</div>
|
|
445
|
-
</template>
|
|
446
|
-
</Card>
|
|
447
|
-
</div>
|
|
448
|
-
</template>
|
|
449
392
|
</form>
|
|
450
393
|
</div>
|
|
451
394
|
</template>
|
|
@@ -38,7 +38,6 @@ export interface TitleBarProps {
|
|
|
38
38
|
showViewOptions?: boolean;
|
|
39
39
|
|
|
40
40
|
onShowConfiguration?: (returnFocusSelector: string) => void;
|
|
41
|
-
value?: any;
|
|
42
41
|
parentRouteOverride?: string;
|
|
43
42
|
}
|
|
44
43
|
|
|
@@ -47,9 +46,10 @@ const showConfigurationIcon = require(`@shell/assets/images/icons/document.svg`)
|
|
|
47
46
|
|
|
48
47
|
<script setup lang="ts">
|
|
49
48
|
const {
|
|
50
|
-
parentRouteOverride,
|
|
49
|
+
parentRouteOverride, resource, resourceTypeLabel, resourceTo, resourceName, description, badge, showViewOptions, onShowConfiguration,
|
|
51
50
|
} = defineProps<TitleBarProps>();
|
|
52
51
|
|
|
52
|
+
|
|
53
53
|
const store = useStore();
|
|
54
54
|
const i18n = useI18n(store);
|
|
55
55
|
const router = useRouter();
|
|
@@ -61,8 +61,6 @@ const showConfigurationReturnFocusSelector = computed(() => `[data-testid="${ sh
|
|
|
61
61
|
|
|
62
62
|
const configTabProps = useDefaultConfigTabProps(resource);
|
|
63
63
|
|
|
64
|
-
console.log(configTabProps, ' configTabProps---------------------------------1');
|
|
65
|
-
|
|
66
64
|
|
|
67
65
|
const currentView = ref(router?.currentRoute?.value?.query?.as || _CONFIG);
|
|
68
66
|
const viewOptions = computed(() => {
|
|
@@ -84,39 +82,32 @@ const viewOptions = computed(() => {
|
|
|
84
82
|
|
|
85
83
|
const Svg = require('~shell/assets/images/API.svg')
|
|
86
84
|
|
|
87
|
-
const parent = computed(() =>{
|
|
88
|
-
|
|
85
|
+
const parent = computed(() => {
|
|
86
|
+
|
|
89
87
|
const product = store.getters['currentProduct'].name;
|
|
90
88
|
|
|
91
89
|
const defaultLocation = {
|
|
92
|
-
name:
|
|
90
|
+
name: 'c-cluster-product-resource',
|
|
93
91
|
params: {
|
|
94
|
-
resource
|
|
92
|
+
resource,
|
|
95
93
|
product,
|
|
96
94
|
}
|
|
97
95
|
};
|
|
98
96
|
|
|
99
|
-
const location =
|
|
97
|
+
const location = resource?.parentLocationOverride || defaultLocation;
|
|
100
98
|
|
|
101
99
|
if (parentRouteOverride) {
|
|
102
100
|
location.name = parentRouteOverride;
|
|
103
101
|
}
|
|
104
102
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
return out;
|
|
110
|
-
})
|
|
103
|
+
return { location };
|
|
104
|
+
});
|
|
111
105
|
|
|
112
106
|
const menuIcon = computed(() => {
|
|
113
107
|
const product = store.getters['productId'];
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return store.getters['type-map/groupsForVirTypes'](product, resources);
|
|
118
|
-
})
|
|
119
|
-
|
|
108
|
+
const resources = parent.value.location?.params?.resource || '';
|
|
109
|
+
return store.getters['type-map/groupsForVirTypes'](product, resources) || 'default menuIcon';
|
|
110
|
+
});
|
|
120
111
|
|
|
121
112
|
watch(
|
|
122
113
|
() => currentView.value,
|
|
@@ -131,7 +122,7 @@ watch(
|
|
|
131
122
|
<breadcrumb :resource="resource"/>
|
|
132
123
|
<Top>
|
|
133
124
|
<Title class="title">
|
|
134
|
-
<span
|
|
125
|
+
<span class="detailIcon-span">
|
|
135
126
|
<img
|
|
136
127
|
v-if="parentRouteOverride === 'account' && resource=== 'token'"
|
|
137
128
|
:src="Svg"
|
|
@@ -189,7 +180,7 @@ watch(
|
|
|
189
180
|
:options="viewOptions"
|
|
190
181
|
/>
|
|
191
182
|
<RcButton
|
|
192
|
-
v-if="onShowConfiguration"
|
|
183
|
+
v-if="onShowConfiguration && configTabProps"
|
|
193
184
|
:data-testid="showConfigurationDataTestId"
|
|
194
185
|
class="show-configuration"
|
|
195
186
|
:primary="true"
|
|
@@ -222,6 +213,7 @@ watch(
|
|
|
222
213
|
</template>
|
|
223
214
|
|
|
224
215
|
<style lang="scss" scoped>
|
|
216
|
+
|
|
225
217
|
.detailIcon-span{
|
|
226
218
|
width: 24px;
|
|
227
219
|
height: 24px;
|
|
@@ -230,6 +222,17 @@ watch(
|
|
|
230
222
|
background: var(--primary);
|
|
231
223
|
margin-right: 10px;
|
|
232
224
|
}
|
|
225
|
+
.detailIcon{
|
|
226
|
+
position: absolute;
|
|
227
|
+
color: #fff;
|
|
228
|
+
font-size: 38px;
|
|
229
|
+
left: 4px;
|
|
230
|
+
top: -2px;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.detailIcon-span-title{
|
|
234
|
+
font-weight: bold;
|
|
235
|
+
}
|
|
233
236
|
.resourceTypeLabelCls {
|
|
234
237
|
font-weight: 700;
|
|
235
238
|
}
|
|
@@ -254,7 +254,7 @@ export default {
|
|
|
254
254
|
},
|
|
255
255
|
|
|
256
256
|
parent() {
|
|
257
|
-
|
|
257
|
+
let displayName = this.value?.parentNameOverride || this.$store.getters['type-map/labelFor'](this.schema);
|
|
258
258
|
const product = this.$store.getters['currentProduct'].name;
|
|
259
259
|
|
|
260
260
|
const defaultLocation = {
|
|
@@ -443,7 +443,7 @@ export default {
|
|
|
443
443
|
|
|
444
444
|
const resources = this.location?.params?.resource || ''
|
|
445
445
|
|
|
446
|
-
return this.$store.getters['type-map/groupsForVirTypes'](product, resources);
|
|
446
|
+
return this.$store.getters['type-map/groupsForVirTypes'](product, resources) || 'default menuIcon';
|
|
447
447
|
},
|
|
448
448
|
|
|
449
449
|
location() {
|
|
@@ -506,7 +506,7 @@ export default {
|
|
|
506
506
|
<span>/</span>
|
|
507
507
|
</span>
|
|
508
508
|
<span class="excram-last-name">
|
|
509
|
-
{{ (realMode === 'view'? '查看': realMode === 'edit' ? '编辑':'创建') + parent
|
|
509
|
+
{{ (realMode === 'view'? '查看': realMode === 'edit' ? '编辑':'创建') + parent?.displayName }}
|
|
510
510
|
</span>
|
|
511
511
|
</div>
|
|
512
512
|
<header>
|
|
@@ -530,7 +530,7 @@ export default {
|
|
|
530
530
|
:class="'icon-'+ menuIcon + ' detailIcon'"
|
|
531
531
|
/>
|
|
532
532
|
</span>
|
|
533
|
-
<span class="detailIcon-span-title">{{ realMode=== 'create'? '创建': '' }}{{ parent
|
|
533
|
+
<span class="detailIcon-span-title">{{ realMode=== 'create'? '创建': '' }}{{ parent?.displayName }}{{ realMode=== 'create'? '': '名称:' }}</span>
|
|
534
534
|
<span v-if="realMode !== 'create'">
|
|
535
535
|
<span v-if="value.detailPageHeaderActionOverride && value.detailPageHeaderActionOverride(realMode)">{{ value.detailPageHeaderActionOverride(realMode) }}</span>
|
|
536
536
|
<t
|
|
@@ -20,7 +20,11 @@ export default {
|
|
|
20
20
|
isShowPass: {
|
|
21
21
|
type: Boolean,
|
|
22
22
|
default: false,
|
|
23
|
-
}
|
|
23
|
+
},
|
|
24
|
+
userLogoSize: {
|
|
25
|
+
type: Number,
|
|
26
|
+
default: 20,
|
|
27
|
+
},
|
|
24
28
|
},
|
|
25
29
|
|
|
26
30
|
async fetch() {
|
|
@@ -90,8 +94,9 @@ export default {
|
|
|
90
94
|
</template>
|
|
91
95
|
|
|
92
96
|
<template v-else-if="principal">
|
|
93
|
-
<div class="avatar">
|
|
97
|
+
<div :style="userLogoSize === 79 ? { width: '287px' } : {}" class="avatar">
|
|
94
98
|
<img
|
|
99
|
+
:style="{ width: userLogoSize + 'px', height: userLogoSize + 'px' }"
|
|
95
100
|
src="@shell/assets/images/user.png"
|
|
96
101
|
:class="{'round': principal.roundAvatar}"
|
|
97
102
|
:alt="t('principal.alt.avatar')"
|
|
@@ -209,7 +214,6 @@ export default {
|
|
|
209
214
|
.avatar {
|
|
210
215
|
/* grid-area: avatar;
|
|
211
216
|
text-align: center; */
|
|
212
|
-
width: 287px;
|
|
213
217
|
display: flex;
|
|
214
218
|
justify-content: center;
|
|
215
219
|
align-items: center;
|
|
@@ -390,6 +390,17 @@ export default {
|
|
|
390
390
|
});
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
+
rows = rows.map((item) => {
|
|
394
|
+
if (item.key.includes('harvester')) {
|
|
395
|
+
item.key = item.key.replace('harvester', 'cloud');
|
|
396
|
+
}
|
|
397
|
+
if (item.value.includes('harvester')) {
|
|
398
|
+
item.value = item.value.replace('harvester', 'cloud');
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
return item;
|
|
402
|
+
});
|
|
403
|
+
|
|
393
404
|
return rows;
|
|
394
405
|
},
|
|
395
406
|
|
|
@@ -400,6 +411,8 @@ export default {
|
|
|
400
411
|
[this.valueName]: value,
|
|
401
412
|
};
|
|
402
413
|
|
|
414
|
+
obj.key = obj.key.replace('harvester', 'cloud');
|
|
415
|
+
obj.value = obj.value.replace('harvester', 'cloud');
|
|
403
416
|
obj.binary = false;
|
|
404
417
|
obj.canEncode = this.handleBase64;
|
|
405
418
|
obj.supported = true;
|
|
@@ -481,8 +494,8 @@ export default {
|
|
|
481
494
|
// let value = (row[valueName] || '');
|
|
482
495
|
// const key = (row[keyName] || '').trim();
|
|
483
496
|
|
|
484
|
-
const key = (row[keyName] || '').trim();
|
|
485
|
-
let value = (row[valueName] || '').trim();
|
|
497
|
+
const key = (row[keyName].replace('cloud', 'harvester') || '').trim();
|
|
498
|
+
let value = (row[valueName].replace('cloud', 'harvester') || '').trim();
|
|
486
499
|
|
|
487
500
|
if (value && typeOf(value) === 'object') {
|
|
488
501
|
out[key] = JSON.parse(JSON.stringify(value));
|
|
@@ -161,7 +161,7 @@ export default {
|
|
|
161
161
|
<div :class="containerClass">
|
|
162
162
|
<div :class="defaultSectionClass">
|
|
163
163
|
<div class="labels">
|
|
164
|
-
<div class="labels__header">
|
|
164
|
+
<div class="labels__header mb-20">
|
|
165
165
|
<div v-if="showLabelTitle">
|
|
166
166
|
<t k="labels.labels.title" />
|
|
167
167
|
</div>
|
|
@@ -330,7 +330,7 @@ export default {
|
|
|
330
330
|
:data-testid="`input-match-type-field-${index}`"
|
|
331
331
|
>
|
|
332
332
|
<div v-if="isView">
|
|
333
|
-
{{ row.matching }}
|
|
333
|
+
{{ row.matching.replace('harvester', 'cloud') }}
|
|
334
334
|
</div>
|
|
335
335
|
<LabeledSelect
|
|
336
336
|
v-else
|
|
@@ -345,7 +345,7 @@ export default {
|
|
|
345
345
|
:data-testid="`input-match-expression-key-${index}`"
|
|
346
346
|
>
|
|
347
347
|
<div v-if="isView" class="view-item-value">
|
|
348
|
-
{{ row.key }}
|
|
348
|
+
{{ row.key.replace('harvester', 'cloud') }}
|
|
349
349
|
</div>
|
|
350
350
|
<input
|
|
351
351
|
v-else-if="!hasKeySelectOptions"
|
|
@@ -256,7 +256,7 @@ export default {
|
|
|
256
256
|
const options = namespaces
|
|
257
257
|
.map((namespace) => ({ nameDisplay: namespace, id: namespace }))
|
|
258
258
|
.map(props.namespaceMapper || ((obj) => ({
|
|
259
|
-
label: obj.nameDisplay,
|
|
259
|
+
label: obj.nameDisplay.replace('harvester', 'cloud'),
|
|
260
260
|
value: obj.id,
|
|
261
261
|
})));
|
|
262
262
|
|
|
@@ -57,7 +57,7 @@ export default {
|
|
|
57
57
|
</script>
|
|
58
58
|
<template>
|
|
59
59
|
<div>
|
|
60
|
-
<div style="justify-content:
|
|
60
|
+
<div style="justify-content: space-between;" class="headers mb-10">
|
|
61
61
|
<div style="width: 400px;">
|
|
62
62
|
<label>{{ t('resourceQuota.headers.resourceType') }}</label>
|
|
63
63
|
</div>
|
|
@@ -748,7 +748,7 @@ export default {
|
|
|
748
748
|
data-testid="namespaces-values-label"
|
|
749
749
|
class="ns-values"
|
|
750
750
|
>
|
|
751
|
-
{{ value[0].label }}
|
|
751
|
+
{{ value[0].label.replace('harvester', 'cloud') }}
|
|
752
752
|
</div>
|
|
753
753
|
|
|
754
754
|
<!-- All the selected namespaces -->
|
|
@@ -774,20 +774,18 @@ export default {
|
|
|
774
774
|
:data-testid="`namespaces-value-${j}`"
|
|
775
775
|
class="ns-value"
|
|
776
776
|
>
|
|
777
|
-
<div>{{ ns.label }}</div>
|
|
777
|
+
<div>{{ ns.label.replace('harvester', 'cloud') }}</div>
|
|
778
778
|
<!-- block user from removing the last selection if ns forced filtering is on -->
|
|
779
|
-
<
|
|
779
|
+
<i
|
|
780
780
|
v-if="!namespaceFilterMode || value.length > 1"
|
|
781
781
|
small
|
|
782
782
|
ghost
|
|
783
|
-
class="ns-chip-button"
|
|
783
|
+
class="ns-chip-button icon icon-close"
|
|
784
784
|
:data-testid="`namespaces-values-close-${j}`"
|
|
785
785
|
@click="removeOption(ns, $event)"
|
|
786
786
|
@keydown.enter.space.stop="removeOption(ns, $event)"
|
|
787
787
|
@mousedown="handleValueMouseDown(ns, $event)"
|
|
788
|
-
|
|
789
|
-
<i class="icon icon-close" />
|
|
790
|
-
</RcButton>
|
|
788
|
+
/>
|
|
791
789
|
</div>
|
|
792
790
|
</div>
|
|
793
791
|
|
|
@@ -836,19 +834,15 @@ export default {
|
|
|
836
834
|
@click="focusFilter"
|
|
837
835
|
@keydown="inputKeyHandler($event)"
|
|
838
836
|
>
|
|
839
|
-
<
|
|
837
|
+
<i
|
|
840
838
|
v-if="hasFilter"
|
|
841
839
|
small
|
|
842
840
|
ghost
|
|
843
|
-
class="ns-filter-clear"
|
|
841
|
+
class="ns-filter-clear icon icon-close"
|
|
844
842
|
:aria-label="t('namespaceFilter.button.clearFilter')"
|
|
845
843
|
@click="clearFilter"
|
|
846
844
|
@keydown.enter.stop="clearFilter"
|
|
847
|
-
|
|
848
|
-
<i
|
|
849
|
-
class="icon icon-close"
|
|
850
|
-
/>
|
|
851
|
-
</RcButton>
|
|
845
|
+
/>
|
|
852
846
|
</div>
|
|
853
847
|
<div
|
|
854
848
|
v-if="namespaceFilterMode"
|
|
@@ -859,7 +853,7 @@ export default {
|
|
|
859
853
|
class="icon icon-info"
|
|
860
854
|
/>
|
|
861
855
|
</div>
|
|
862
|
-
<
|
|
856
|
+
<div
|
|
863
857
|
v-else
|
|
864
858
|
small
|
|
865
859
|
ghost
|
|
@@ -871,8 +865,9 @@ export default {
|
|
|
871
865
|
>
|
|
872
866
|
<i
|
|
873
867
|
class="icon icon-close"
|
|
868
|
+
@click="clear()"
|
|
874
869
|
/>
|
|
875
|
-
</
|
|
870
|
+
</div>
|
|
876
871
|
</div>
|
|
877
872
|
<div class="ns-divider mt-0" />
|
|
878
873
|
<div
|
|
@@ -889,12 +884,12 @@ export default {
|
|
|
889
884
|
v-for="(opt, i) in cachedFiltered"
|
|
890
885
|
:key="opt.id"
|
|
891
886
|
>
|
|
892
|
-
<
|
|
887
|
+
<div
|
|
893
888
|
v-if="opt.kind === NAMESPACE_FILTER_KINDS.DIVIDER"
|
|
894
889
|
role="separator"
|
|
895
890
|
aria-orientation="horizontal"
|
|
896
891
|
class="ns-divider"
|
|
897
|
-
|
|
892
|
+
/>
|
|
898
893
|
<div
|
|
899
894
|
v-else
|
|
900
895
|
:id="opt.elementId"
|
|
@@ -919,7 +914,7 @@ export default {
|
|
|
919
914
|
v-if="opt.kind === NAMESPACE_FILTER_KINDS.NAMESPACE"
|
|
920
915
|
class="icon icon-folder"
|
|
921
916
|
/>
|
|
922
|
-
<div>{{ opt.label }}</div>
|
|
917
|
+
<div>{{ opt.label.replace('harvester', 'cloud') }}</div>
|
|
923
918
|
<i
|
|
924
919
|
v-if="opt.selected"
|
|
925
920
|
class="icon icon-checkmark"
|