bfg-common 1.5.301 → 1.5.303
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/img/icons/icons-sprite-dark-1.svg +46 -44
- package/assets/img/icons/icons-sprite-light-1.svg +45 -43
- package/assets/localization/local_be.json +4 -2
- package/assets/localization/local_en.json +4 -2
- package/assets/localization/local_hy.json +4 -2
- package/assets/localization/local_kk.json +4 -2
- package/assets/localization/local_ru.json +4 -2
- package/assets/localization/local_zh.json +4 -2
- package/components/common/backup/storage/actions/add/New.vue +29 -16
- package/components/common/backup/storage/actions/add/lib/validations.ts +1 -1
- package/components/common/backup/storage/actions/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +0 -1
- package/components/common/backup/storage/actions/add/steps/name/New.vue +2 -0
- package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigureNew.vue +16 -15
- package/components/common/backup/storage/actions/add/steps/readyComplete/lib/config/propertiesDetails.ts +4 -4
- package/components/common/backup/storage/actions/add/steps/typeMode/TypeMode.vue +7 -1
- package/components/common/backup/storage/actions/add/steps/typeMode/TypeModeNew.vue +45 -11
- package/components/common/context/lib/models/interfaces.ts +2 -0
- package/components/common/context/recursion/RecursionNew.vue +3 -2
- package/components/common/context/recursion/RecursionOld.vue +3 -2
- package/components/common/tooltip/Help.vue +76 -39
- package/components/common/vm/actions/clone/Clone.vue +817 -817
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +2 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +2 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +2 -2
- package/components/common/vm/actions/common/select/storage/new/New.vue +21 -3
- package/package.json +1 -1
|
@@ -2411,7 +2411,8 @@
|
|
|
2411
2411
|
"lock": "Замак",
|
|
2412
2412
|
"added": "Дададзена",
|
|
2413
2413
|
"errorSelectLocationHost": "Калі ласка, выберыце дапушчальнае месцазнаходжанне для гэтага хоста. Вы можаце размясціць яго толькі ў дата-цэнтры, тэчцы хостаў і кластараў або ў кластары.",
|
|
2414
|
-
"nameAndDeviceSelectionHostAlertInfo": "Вы праглядаеце дыскі/LUN, даступныя на бягучым хосце. Калі патрэбны дыск/LUN не адлюстроўваецца, магчыма, ён недаступны для гэтага хоста. Паспрабуйце наладзіць доступ да гэтага дыска/LUN."
|
|
2414
|
+
"nameAndDeviceSelectionHostAlertInfo": "Вы праглядаеце дыскі/LUN, даступныя на бягучым хосце. Калі патрэбны дыск/LUN не адлюстроўваецца, магчыма, ён недаступны для гэтага хоста. Паспрабуйце наладзіць доступ да гэтага дыска/LUN.",
|
|
2415
|
+
"selectVirtualMachineToProceed": "Абярыце віртуальную машыну для працягвання."
|
|
2415
2416
|
},
|
|
2416
2417
|
"auth": {
|
|
2417
2418
|
"welcomeTo": "Сардэчна запрашаем у",
|
|
@@ -3208,7 +3209,8 @@
|
|
|
3208
3209
|
"folderPlaceholder": "Напрыклад: /vols/vol0/datastore-001",
|
|
3209
3210
|
"specifyServerAddressExample": "Укажыце адрас сервера, напрыклад: nas, nas.it.com або 192.168.0.1.",
|
|
3210
3211
|
"serverPlaceholder": "Напрыклад: nas, nas.it.com або 192.168.0.1",
|
|
3211
|
-
"storageReview": "Перагледзьце падрабязнасці перад стварэннем рэзервовага сховішча."
|
|
3212
|
+
"storageReview": "Перагледзьце падрабязнасці перад стварэннем рэзервовага сховішча.",
|
|
3213
|
+
"backupStorageName": "Назва рэзервовага сховішча"
|
|
3212
3214
|
},
|
|
3213
3215
|
"ssoUsers": {
|
|
3214
3216
|
"passwordRequirements": "Патрабаванні да пароля",
|
|
@@ -2415,7 +2415,8 @@
|
|
|
2415
2415
|
"lock": "Lock",
|
|
2416
2416
|
"added": "Added",
|
|
2417
2417
|
"errorSelectLocationHost": "Please select a valid location for this host. You can only place it in a datacenter, a host and cluster folder, or a cluster.",
|
|
2418
|
-
"nameAndDeviceSelectionHostAlertInfo": "You are viewing disks/LUN available on the current host. If the disk/LUN you’re looking for is not listed, it might not be accessible to this host. Try configuring accessibility of that disk/LUN."
|
|
2418
|
+
"nameAndDeviceSelectionHostAlertInfo": "You are viewing disks/LUN available on the current host. If the disk/LUN you’re looking for is not listed, it might not be accessible to this host. Try configuring accessibility of that disk/LUN.",
|
|
2419
|
+
"selectVirtualMachineToProceed": "Select a virtual machine to proceed."
|
|
2419
2420
|
},
|
|
2420
2421
|
"auth": {
|
|
2421
2422
|
"welcomeTo": "Welcome to",
|
|
@@ -3212,7 +3213,8 @@
|
|
|
3212
3213
|
"folderPlaceholder": "E.g: /vols/vol0/datastore-001",
|
|
3213
3214
|
"specifyServerAddressExample": "Specify the server address - for example, nas, nas.it.com or 192.168.0.1.",
|
|
3214
3215
|
"serverPlaceholder": "E.g: nas, nas.it.com or 192.168.0.1",
|
|
3215
|
-
"storageReview": "Review the details before the backup storage is created."
|
|
3216
|
+
"storageReview": "Review the details before the backup storage is created.",
|
|
3217
|
+
"backupStorageName": "Backup Storage Name"
|
|
3216
3218
|
},
|
|
3217
3219
|
"ssoUsers": {
|
|
3218
3220
|
"passwordRequirements": "Password requirements",
|
|
@@ -2415,7 +2415,8 @@
|
|
|
2415
2415
|
"lock": "Ամրոց",
|
|
2416
2416
|
"added": "Ավելացվել է",
|
|
2417
2417
|
"errorSelectLocationHost": "Խնդրում ենք ընտրել այս հոսթը տեղադրելու վավեր տեղ։ Դուք կարող եք այն տեղադրել միայն տվյալների կենտրոնում, հոսթերի և կլաստերների պանակում կամ կլաստերում։",
|
|
2418
|
-
"nameAndDeviceSelectionHostAlertInfo": "Դուք դիտում եք ընթացիկ հոսթում հասանելի սկավառակները/LUN-երը։ Եթե դուք փնտրում եք սկավառակ/LUN, որը ցուցադրված չէ, ապա այն հնարավոր է հասանելի չէ այս հոսթին։ Փորձեք կազմաձևել այդ սկավառակի/LUN-ի հասանելիությունը։"
|
|
2418
|
+
"nameAndDeviceSelectionHostAlertInfo": "Դուք դիտում եք ընթացիկ հոսթում հասանելի սկավառակները/LUN-երը։ Եթե դուք փնտրում եք սկավառակ/LUN, որը ցուցադրված չէ, ապա այն հնարավոր է հասանելի չէ այս հոսթին։ Փորձեք կազմաձևել այդ սկավառակի/LUN-ի հասանելիությունը։",
|
|
2419
|
+
"selectVirtualMachineToProceed": "Ընտրեք վիրտուալ մեքենա շարունակելու համար։"
|
|
2419
2420
|
},
|
|
2420
2421
|
"auth": {
|
|
2421
2422
|
"welcomeTo": "Բարի գալուստ",
|
|
@@ -3212,7 +3213,8 @@
|
|
|
3212
3213
|
"folderPlaceholder": "Օրինակ՝ /vols/vol0/datastore-001",
|
|
3213
3214
|
"specifyServerAddressExample": "Նշեք սերվերի հասցեն, օրինակ՝ nas, nas.it.com կամ 192.168.0.1։",
|
|
3214
3215
|
"serverPlaceholder": "Օրինակ՝ nas, nas.it.com կամ 192.168.0.1",
|
|
3215
|
-
"storageReview": "Մինչ պահուստային պահեստի ստեղծումը, վերանայեք մանրամասները։"
|
|
3216
|
+
"storageReview": "Մինչ պահուստային պահեստի ստեղծումը, վերանայեք մանրամասները։",
|
|
3217
|
+
"backupStorageName": "Պահուստային պահեստի անունը"
|
|
3216
3218
|
},
|
|
3217
3219
|
"ssoUsers": {
|
|
3218
3220
|
"passwordRequirements": "Գաղտնաբառի պահանջներ",
|
|
@@ -2414,7 +2414,8 @@
|
|
|
2414
2414
|
"lock": "Құлып",
|
|
2415
2415
|
"added": "Қосылды",
|
|
2416
2416
|
"errorSelectLocationHost": "Осы хостты орналастыру үшін жарамды орынды таңдаңыз. Сіз оны тек деректер орталығына, хосттар мен кластерлер қалтасына немесе кластерге орналастыра аласыз.",
|
|
2417
|
-
"nameAndDeviceSelectionHostAlertInfo": "Сіз ағымдағы хостта қолжетімді диск/LUN тізімін қарап отырсыз. Егер іздеген диск/LUN көрсетілмесе, бұл хост үшін ол қолжетімсіз болуы мүмкін. Осы диск/LUN-ның қолжетімділігін баптап көріңіз."
|
|
2417
|
+
"nameAndDeviceSelectionHostAlertInfo": "Сіз ағымдағы хостта қолжетімді диск/LUN тізімін қарап отырсыз. Егер іздеген диск/LUN көрсетілмесе, бұл хост үшін ол қолжетімсіз болуы мүмкін. Осы диск/LUN-ның қолжетімділігін баптап көріңіз.",
|
|
2418
|
+
"selectVirtualMachineToProceed": "Жалғастыру үшін виртуалды машинаны таңдаңыз."
|
|
2418
2419
|
},
|
|
2419
2420
|
"auth": {
|
|
2420
2421
|
"welcomeTo": "Қош келдіңіз",
|
|
@@ -3211,7 +3212,8 @@
|
|
|
3211
3212
|
"folderPlaceholder": "Мысалы: /vols/vol0/datastore-001",
|
|
3212
3213
|
"specifyServerAddressExample": "Сервердің мекенжайын көрсетіңіз, мысалы: nas, nas.it.com немесе 192.168.0.1.",
|
|
3213
3214
|
"serverPlaceholder": "Мысалы: nas, nas.it.com немесе 192.168.0.1",
|
|
3214
|
-
"storageReview": "Резервтік сақтау орнын жасамас бұрын мәліметтерді қарап шығыңыз."
|
|
3215
|
+
"storageReview": "Резервтік сақтау орнын жасамас бұрын мәліметтерді қарап шығыңыз.",
|
|
3216
|
+
"backupStorageName": "Резервтік сақтау атауы"
|
|
3215
3217
|
},
|
|
3216
3218
|
"ssoUsers": {
|
|
3217
3219
|
"passwordRequirements": "Парольге қойылатын талаптар",
|
|
@@ -2414,7 +2414,8 @@
|
|
|
2414
2414
|
"lock": "Блокировать",
|
|
2415
2415
|
"added": "Добавлено",
|
|
2416
2416
|
"errorSelectLocationHost": "Пожалуйста, выберите допустимое расположение для этого хоста. Вы можете поместить его только в датацентр, папку хостов и кластеров или в кластер.",
|
|
2417
|
-
"nameAndDeviceSelectionHostAlertInfo": "Вы просматриваете диски/LUN, доступные на текущем хосте. Если нужный диск/LUN не отображается, возможно, он недоступен для этого хоста. Попробуйте настроить доступ к этому диску/LUN."
|
|
2417
|
+
"nameAndDeviceSelectionHostAlertInfo": "Вы просматриваете диски/LUN, доступные на текущем хосте. Если нужный диск/LUN не отображается, возможно, он недоступен для этого хоста. Попробуйте настроить доступ к этому диску/LUN.",
|
|
2418
|
+
"selectVirtualMachineToProceed": "Выберите виртуальную машину для продолжения."
|
|
2418
2419
|
},
|
|
2419
2420
|
"auth": {
|
|
2420
2421
|
"welcomeTo": "Добро пожаловать в",
|
|
@@ -3211,7 +3212,8 @@
|
|
|
3211
3212
|
"folderPlaceholder": "Например: /vols/vol0/datastore-001",
|
|
3212
3213
|
"specifyServerAddressExample": "Укажите адрес сервера, например: nas, nas.it.com или 192.168.0.1.",
|
|
3213
3214
|
"serverPlaceholder": "Например: nas, nas.it.com или 192.168.0.1",
|
|
3214
|
-
"storageReview": "Просмотрите информацию перед созданием хранилища резервных копий."
|
|
3215
|
+
"storageReview": "Просмотрите информацию перед созданием хранилища резервных копий.",
|
|
3216
|
+
"backupStorageName": "Имя хранилища резервных копий"
|
|
3215
3217
|
},
|
|
3216
3218
|
"ssoUsers": {
|
|
3217
3219
|
"passwordRequirements": "Требования к паролю",
|
|
@@ -2412,7 +2412,8 @@
|
|
|
2412
2412
|
"lock": "锁,锁",
|
|
2413
2413
|
"added": "已添加",
|
|
2414
2414
|
"errorSelectLocationHost": "请选择此主机的有效位置。您只能将其放置在数据中心、主机与集群文件夹或集群中。",
|
|
2415
|
-
"nameAndDeviceSelectionHostAlertInfo": "您正在查看当前主机上可用的磁盘/LUN。如果您查找的磁盘/LUN未列出,可能该主机无法访问。请尝试配置该磁盘/LUN 的可访问性。"
|
|
2415
|
+
"nameAndDeviceSelectionHostAlertInfo": "您正在查看当前主机上可用的磁盘/LUN。如果您查找的磁盘/LUN未列出,可能该主机无法访问。请尝试配置该磁盘/LUN 的可访问性。",
|
|
2416
|
+
"selectVirtualMachineToProceed": "请选择一个虚拟机以继续。"
|
|
2416
2417
|
},
|
|
2417
2418
|
"auth": {
|
|
2418
2419
|
"welcomeTo": "欢迎来到",
|
|
@@ -3209,7 +3210,8 @@
|
|
|
3209
3210
|
"folderPlaceholder": "例如:/vols/vol0/datastore-001",
|
|
3210
3211
|
"specifyServerAddressExample": "指定服务器地址,例如:nas、nas.it.com 或 192.168.0.1。",
|
|
3211
3212
|
"serverPlaceholder": "例如:nas、nas.it.com 或 192.168.0.1",
|
|
3212
|
-
"storageReview": "在创建备份存储之前,请查看详细信息。"
|
|
3213
|
+
"storageReview": "在创建备份存储之前,请查看详细信息。",
|
|
3214
|
+
"backupStorageName": "备份存储名称"
|
|
3213
3215
|
},
|
|
3214
3216
|
"ssoUsers": {
|
|
3215
3217
|
"passwordRequirements": "密码要求",
|
|
@@ -22,13 +22,15 @@
|
|
|
22
22
|
<ui-wizard-subtitle :sub-title="selectedStep.subTitle" />
|
|
23
23
|
|
|
24
24
|
<common-tooltip-help
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
test-id="datastore-type-subtitle-tooltip"
|
|
26
|
+
help-id="datastore-type-subtitle-tooltip-icon"
|
|
27
|
+
:title="localization.common.information"
|
|
28
|
+
:help-text="localization.common.datastoreTypeHelpDesc"
|
|
29
|
+
:is-show-help="isShowFirstStepHelp"
|
|
30
|
+
dropdown-width="320px"
|
|
31
|
+
dropdown-left
|
|
32
|
+
class="ml-2"
|
|
33
|
+
@update-is-show="onUpdateIsShowFirstStepHelp"
|
|
32
34
|
/>
|
|
33
35
|
</div>
|
|
34
36
|
</div>
|
|
@@ -38,6 +40,8 @@
|
|
|
38
40
|
v-if="selectedStep.id === dynamicSteps.type"
|
|
39
41
|
v-model="formModelLocal.type_code"
|
|
40
42
|
:project="props.project"
|
|
43
|
+
:updater-hide-all-help-popups="updaterHideAllHelpPopups"
|
|
44
|
+
@hide-all-help-popups="isShowFirstStepHelp = false"
|
|
41
45
|
/>
|
|
42
46
|
</template>
|
|
43
47
|
</ui-wizard-block>
|
|
@@ -125,15 +129,17 @@
|
|
|
125
129
|
</div>
|
|
126
130
|
</template>
|
|
127
131
|
<template #content>
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
<div class="pb-4">
|
|
133
|
+
<common-vm-actions-common-select-storage
|
|
134
|
+
:datastore="props.datastore"
|
|
135
|
+
:is-datastore-loading="props.isDatastoreLoading"
|
|
136
|
+
:get-datastore-table-func="props.getDatastoreTableFunc"
|
|
137
|
+
hide-compatibility
|
|
138
|
+
hide-alert
|
|
139
|
+
class="storage-datatable h-full"
|
|
140
|
+
@change-storage="onChangeStorage"
|
|
141
|
+
/>
|
|
142
|
+
</div>
|
|
137
143
|
</template>
|
|
138
144
|
</ui-wizard-block>
|
|
139
145
|
|
|
@@ -245,6 +251,13 @@ const texts = computed<UI_I_WizardTexts>(() => ({
|
|
|
245
251
|
of: localization.value.common.of2,
|
|
246
252
|
}))
|
|
247
253
|
|
|
254
|
+
const updaterHideAllHelpPopups = ref<number>(0)
|
|
255
|
+
const isShowFirstStepHelp = ref<boolean>(false)
|
|
256
|
+
const onUpdateIsShowFirstStepHelp = (value: boolean): void => {
|
|
257
|
+
updaterHideAllHelpPopups.value++
|
|
258
|
+
isShowFirstStepHelp.value = value
|
|
259
|
+
}
|
|
260
|
+
|
|
248
261
|
const subTitleBlock0 = ref<HTMLElement | null>(null)
|
|
249
262
|
const { height: height0 } = useElementSize(subTitleBlock0)
|
|
250
263
|
|
|
@@ -221,7 +221,7 @@ export const checkStorageSync = (
|
|
|
221
221
|
if (!storm_id) {
|
|
222
222
|
stepHasError = wizard.setValidation(dynamicSteps.storage, 'storage', {
|
|
223
223
|
fieldMessage: '',
|
|
224
|
-
alertMessage: localization.common.
|
|
224
|
+
alertMessage: localization.common.selectValidDestinationStorage,
|
|
225
225
|
})
|
|
226
226
|
} else if (wizard.hasMessage(dynamicSteps.storage, 'storage')) {
|
|
227
227
|
value = wizard.removeValidation(dynamicSteps.storage, 'storage', value)
|
|
@@ -38,6 +38,8 @@ const localization = computed<UI_I_Localization>(() => useLocal())
|
|
|
38
38
|
const nameErrorText = computed<string>(() => {
|
|
39
39
|
if (!props.alertMessages?.length && props.messagesFields?.name?.field) {
|
|
40
40
|
return props.messagesFields.name.field
|
|
41
|
+
} else if (!formModelLocal.value.name) {
|
|
42
|
+
return localization.value.common.fieldRequired
|
|
41
43
|
}
|
|
42
44
|
return ''
|
|
43
45
|
})
|
package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigureNew.vue
CHANGED
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
{{ localization.common.folder }}
|
|
37
37
|
</span>
|
|
38
38
|
<common-tooltip-help
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
test-id="backup-storage-tooltip-info-folder"
|
|
40
|
+
help-id="backup-storage-tooltip-info-folder-icon"
|
|
41
|
+
:title="localization.common.information"
|
|
42
|
+
:help-text="localization.backup.specifyFolderPathExample"
|
|
43
|
+
dropdown-width="272px"
|
|
44
|
+
dropdown-left
|
|
45
|
+
dropdown-top
|
|
46
46
|
/>
|
|
47
47
|
</div>
|
|
48
48
|
<div class="basics-step-row-content">
|
|
@@ -64,13 +64,13 @@
|
|
|
64
64
|
{{ localization.common.server }}
|
|
65
65
|
</span>
|
|
66
66
|
<common-tooltip-help
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
test-id="backup-storage-tooltip-info-server"
|
|
68
|
+
help-id="backup-storage-tooltip-info-server-icon"
|
|
69
|
+
:title="localization.common.information"
|
|
70
|
+
:help-text="localization.backup.specifyServerAddressExample"
|
|
71
|
+
dropdown-width="272px"
|
|
72
|
+
dropdown-left
|
|
73
|
+
dropdown-top
|
|
74
74
|
/>
|
|
75
75
|
</div>
|
|
76
76
|
<div class="basics-step-row-content">
|
|
@@ -138,7 +138,6 @@ const props = defineProps<{
|
|
|
138
138
|
messagesFields: UI_I_WizardStep['fields']
|
|
139
139
|
}>()
|
|
140
140
|
|
|
141
|
-
|
|
142
141
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
143
142
|
|
|
144
143
|
const isEmptyAlertMessages = computed<boolean>(() => {
|
|
@@ -152,6 +151,8 @@ const isEmptyAlertMessages = computed<boolean>(() => {
|
|
|
152
151
|
const nameErrorText = computed<string>(() => {
|
|
153
152
|
if (isEmptyAlertMessages.value && props.messagesFields?.name?.field) {
|
|
154
153
|
return props.messagesFields.name.field
|
|
154
|
+
} else if (!formModelLocal.value.name) {
|
|
155
|
+
return localization.value.common.fieldRequired
|
|
155
156
|
}
|
|
156
157
|
return ''
|
|
157
158
|
})
|
|
@@ -48,11 +48,11 @@ const localDetailsFunc = (
|
|
|
48
48
|
value: '',
|
|
49
49
|
items: [
|
|
50
50
|
{
|
|
51
|
-
label: localization.
|
|
51
|
+
label: localization.backup.backupStorageName,
|
|
52
52
|
value: name,
|
|
53
53
|
items: [],
|
|
54
54
|
testId: 'view-selected-name-in-complete',
|
|
55
|
-
iconClassName: '
|
|
55
|
+
iconClassName: 'icon-backup-storage',
|
|
56
56
|
},
|
|
57
57
|
],
|
|
58
58
|
actions: [],
|
|
@@ -95,11 +95,11 @@ const nfsDetailsFunc = (
|
|
|
95
95
|
value: '',
|
|
96
96
|
items: [
|
|
97
97
|
{
|
|
98
|
-
label: localization.
|
|
98
|
+
label: localization.backup.backupStorageName,
|
|
99
99
|
value: name,
|
|
100
100
|
items: [],
|
|
101
101
|
testId: 'view-storage-name-in-complete',
|
|
102
|
-
iconClassName: '
|
|
102
|
+
iconClassName: 'icon-backup-storage',
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
label: localization.common.server,
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
v-if="isNewView"
|
|
4
4
|
v-model="formDatastoreTypeMode"
|
|
5
5
|
:options="datastoreTypeOptions"
|
|
6
|
+
:updater-hide-all-help-popups="props.updaterHideAllHelpPopups"
|
|
7
|
+
@hide-all-help-popups="emits('hide-all-help-popups')"
|
|
6
8
|
/>
|
|
7
9
|
|
|
8
10
|
<common-backup-storage-actions-add-steps-type-mode-old
|
|
@@ -14,13 +16,17 @@
|
|
|
14
16
|
|
|
15
17
|
<script lang="ts" setup>
|
|
16
18
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
17
|
-
import type {UI_T_Project} from
|
|
19
|
+
import type { UI_T_Project } from '~/lib/models/types'
|
|
18
20
|
import type { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
|
|
19
21
|
import { datastoreTypesFunc } from '~/components/common/backup/storage/actions/add/steps/typeMode/lib/config/typeOptions'
|
|
20
22
|
|
|
21
23
|
const formDatastoreTypeMode = defineModel<number>({ required: true })
|
|
22
24
|
const props = defineProps<{
|
|
23
25
|
project: UI_T_Project
|
|
26
|
+
updaterHideAllHelpPopups: number
|
|
27
|
+
}>()
|
|
28
|
+
const emits = defineEmits<{
|
|
29
|
+
(event: 'hide-all-help-popups'): void
|
|
24
30
|
}>()
|
|
25
31
|
|
|
26
32
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section class="datastore-type">
|
|
3
|
-
<div class="datastore-type__radio-container">
|
|
3
|
+
<div ref="datastoreTypeContainer" class="datastore-type__radio-container">
|
|
4
4
|
<ui-radio
|
|
5
5
|
v-for="(option, key) in props.options"
|
|
6
6
|
:key="key"
|
|
@@ -18,15 +18,17 @@
|
|
|
18
18
|
|
|
19
19
|
<template #tooltip>
|
|
20
20
|
<common-tooltip-help
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
:test-id="`${option.testId}-${key}`"
|
|
22
|
+
:help-id="`${option.testId}-${key}`"
|
|
23
|
+
:help-text="option.tooltipContent"
|
|
24
|
+
:title="localization.common.information"
|
|
25
|
+
:is-show-help="tooltipsShowState[key]"
|
|
26
|
+
icon-width="18"
|
|
27
|
+
icon-height="18"
|
|
28
|
+
dropdown-width="320px"
|
|
29
|
+
dropdown-left
|
|
30
|
+
dropdown-top
|
|
31
|
+
@update-is-show="onUpdateIsShow(key, $event)"
|
|
30
32
|
/>
|
|
31
33
|
</template>
|
|
32
34
|
</ui-radio>
|
|
@@ -36,16 +38,48 @@
|
|
|
36
38
|
|
|
37
39
|
<script lang="ts" setup>
|
|
38
40
|
// TODO this component is duplicate
|
|
41
|
+
import { useElementSize } from '@vueuse/core'
|
|
39
42
|
import type { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
|
|
40
|
-
import type {UI_I_Localization} from
|
|
43
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
41
44
|
|
|
42
45
|
const datastoreTypeModeLocal = defineModel<number>({ required: true })
|
|
43
46
|
const props = defineProps<{
|
|
44
47
|
options: UI_I_RadioOption[]
|
|
48
|
+
updaterHideAllHelpPopups: number
|
|
49
|
+
}>()
|
|
50
|
+
const emits = defineEmits<{
|
|
51
|
+
(event: 'hide-all-help-popups'): void
|
|
45
52
|
}>()
|
|
46
53
|
|
|
47
54
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
48
55
|
|
|
56
|
+
const tooltipsShowState = ref<boolean[]>([])
|
|
57
|
+
const onUpdateIsShow = (key: number, value: boolean): void => {
|
|
58
|
+
tooltipsShowState.value = Array(props.options.length).fill(false)
|
|
59
|
+
emits('hide-all-help-popups')
|
|
60
|
+
tooltipsShowState.value[key] = value
|
|
61
|
+
}
|
|
62
|
+
watch(
|
|
63
|
+
() => [props.updaterHideAllHelpPopups, props.options],
|
|
64
|
+
(newValue) => {
|
|
65
|
+
tooltipsShowState.value = Array(newValue[1].length).fill(false)
|
|
66
|
+
},
|
|
67
|
+
{ immediate: true, deep: true }
|
|
68
|
+
)
|
|
69
|
+
const datastoreTypeContainer = ref<HTMLElement | null>(null)
|
|
70
|
+
const { width } = useElementSize(datastoreTypeContainer)
|
|
71
|
+
watch([datastoreTypeContainer, width], (newValue) => {
|
|
72
|
+
if (!newValue[0]?.children.length) return
|
|
73
|
+
|
|
74
|
+
let maxHeight = 0
|
|
75
|
+
for (const child of newValue[0].children) {
|
|
76
|
+
const height = child.getBoundingClientRect().height
|
|
77
|
+
if (height > maxHeight) maxHeight = height
|
|
78
|
+
}
|
|
79
|
+
for (const child of newValue[0].children) {
|
|
80
|
+
child.style.height = newValue[1] <= 600 ? 'auto' : `${maxHeight}px`
|
|
81
|
+
}
|
|
82
|
+
})
|
|
49
83
|
</script>
|
|
50
84
|
|
|
51
85
|
<style>
|
|
@@ -14,6 +14,7 @@ export interface UI_I_ContextMenu<T = string> {
|
|
|
14
14
|
items: UI_I_ContextMenuItem[]
|
|
15
15
|
}
|
|
16
16
|
export interface UI_I_ContextMenuItem<T = string> {
|
|
17
|
+
key: number
|
|
17
18
|
name: string
|
|
18
19
|
actionType: T | ''
|
|
19
20
|
iconClassName: string
|
|
@@ -23,6 +24,7 @@ export interface UI_I_ContextMenuItem<T = string> {
|
|
|
23
24
|
isHeader?: boolean
|
|
24
25
|
disabled?: boolean
|
|
25
26
|
development?: boolean
|
|
27
|
+
permission?: string
|
|
26
28
|
isShowItems?: boolean
|
|
27
29
|
testId?: string
|
|
28
30
|
style?: {
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
<ui-loader2 class="context-loader" test-id="context-menu" />
|
|
5
5
|
</template>
|
|
6
6
|
<li
|
|
7
|
-
v-for="
|
|
8
|
-
:key="key"
|
|
7
|
+
v-for="item in props.items"
|
|
9
8
|
v-development="item.development"
|
|
9
|
+
v-permission="item.permission"
|
|
10
|
+
:key="item.key"
|
|
10
11
|
:class="[
|
|
11
12
|
'menu-item',
|
|
12
13
|
{ disabled: item.disabled || isLoading },
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
/>
|
|
9
9
|
</template>
|
|
10
10
|
<li
|
|
11
|
-
v-for="
|
|
11
|
+
v-for="item in props.items"
|
|
12
12
|
v-development="item.development"
|
|
13
|
-
|
|
13
|
+
v-permission="item.permission"
|
|
14
|
+
:key="item.key"
|
|
14
15
|
:class="[
|
|
15
16
|
'menu-item',
|
|
16
17
|
{ disabled: item.disabled || item.development || isLoading },
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="flex-align-center relative">
|
|
3
3
|
<ui-icon
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
:id="`${props.helpId}`"
|
|
5
|
+
:data-id="`${props.testId}-show-help-icon`"
|
|
6
|
+
name="info"
|
|
7
|
+
:width="props.iconWidth || '16'"
|
|
8
|
+
:height="props.iconHeight || '16'"
|
|
9
|
+
:class="[
|
|
10
|
+
'help-icon cursor-pointer',
|
|
11
|
+
{ active: currentIsShowHelp },
|
|
12
|
+
{ disabled: props.isDisabled },
|
|
13
|
+
]"
|
|
14
|
+
@click.stop.prevent="currentIsShowHelp = !currentIsShowHelp"
|
|
11
15
|
/>
|
|
12
16
|
<ui-popup-window
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
v-model="currentIsShowHelp"
|
|
18
|
+
:left="props.dropdownLeft"
|
|
19
|
+
:right="props.dropdownRight"
|
|
20
|
+
:top="props.dropdownTop"
|
|
21
|
+
:elem-id="props.helpId"
|
|
22
|
+
:width="props.dropdownWidth || 'max-content'"
|
|
23
|
+
:max-height="props.dropdownMaxHeight || 'unset'"
|
|
21
24
|
>
|
|
22
25
|
<div class="help-content" :style="{ width: props.dropdownWidth }">
|
|
23
26
|
<div class="headline">
|
|
@@ -26,11 +29,11 @@
|
|
|
26
29
|
{{ props.title || localization.mainNavigation.help }}
|
|
27
30
|
</h3>
|
|
28
31
|
<ui-icon
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
name="close"
|
|
33
|
+
width="16"
|
|
34
|
+
height="16"
|
|
35
|
+
class="help-close-icon cursor-pointer"
|
|
36
|
+
@click.stop.prevent="currentIsShowHelp = false"
|
|
34
37
|
/>
|
|
35
38
|
</div>
|
|
36
39
|
|
|
@@ -44,32 +47,66 @@
|
|
|
44
47
|
</div>
|
|
45
48
|
</template>
|
|
46
49
|
<script setup lang="ts">
|
|
47
|
-
|
|
48
50
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
49
51
|
import { T_TooltipHelpStatus } from '~/components/common/tooltip/lib/models/types'
|
|
50
52
|
|
|
51
|
-
const props =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
const props = withDefaults(
|
|
54
|
+
defineProps<{
|
|
55
|
+
testId: string
|
|
56
|
+
helpId: string
|
|
57
|
+
dropdownWidth?: string
|
|
58
|
+
helpText?: string
|
|
59
|
+
iconWidth?: string
|
|
60
|
+
iconHeight?: string
|
|
61
|
+
dropdownMaxHeight?: string
|
|
62
|
+
dropdownLeft?: boolean
|
|
63
|
+
dropdownRight?: boolean
|
|
64
|
+
dropdownTop?: boolean
|
|
65
|
+
isDisabled?: boolean
|
|
66
|
+
title?: string
|
|
67
|
+
status?: T_TooltipHelpStatus
|
|
68
|
+
isShowHelp?: boolean
|
|
69
|
+
}>(),
|
|
70
|
+
{
|
|
71
|
+
dropdownWidth: undefined,
|
|
72
|
+
helpText: undefined,
|
|
73
|
+
iconWidth: undefined,
|
|
74
|
+
iconHeight: undefined,
|
|
75
|
+
dropdownMaxHeight: undefined,
|
|
76
|
+
dropdownLeft: undefined,
|
|
77
|
+
dropdownRight: undefined,
|
|
78
|
+
dropdownTop: undefined,
|
|
79
|
+
isDisabled: undefined,
|
|
80
|
+
title: undefined,
|
|
81
|
+
status: undefined,
|
|
82
|
+
isShowHelp: undefined,
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
const emits = defineEmits<{
|
|
87
|
+
(event: 'update-is-show', value: boolean): void
|
|
65
88
|
}>()
|
|
66
89
|
|
|
67
90
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
68
91
|
|
|
69
|
-
const
|
|
92
|
+
const isShowHelpLocal = ref<boolean>(false)
|
|
70
93
|
|
|
71
|
-
const
|
|
94
|
+
const currentIsShowHelp = computed<boolean>({
|
|
95
|
+
get() {
|
|
96
|
+
return typeof props.isShowHelp === 'undefined'
|
|
97
|
+
? isShowHelpLocal.value
|
|
98
|
+
: props.isShowHelp
|
|
99
|
+
},
|
|
100
|
+
set(newValue) {
|
|
101
|
+
if (typeof props.isShowHelp === 'undefined')
|
|
102
|
+
isShowHelpLocal.value = newValue
|
|
103
|
+
else emits('update-is-show', newValue)
|
|
104
|
+
},
|
|
105
|
+
})
|
|
72
106
|
|
|
107
|
+
const tooltipStatus = computed<string>(() =>
|
|
108
|
+
props.status === 'error' ? 'error' : 'info-2'
|
|
109
|
+
)
|
|
73
110
|
</script>
|
|
74
111
|
<style>
|
|
75
112
|
:root {
|
|
@@ -117,7 +154,7 @@ const tooltipStatus = computed<string>(() => props.status === 'error' ? 'error'
|
|
|
117
154
|
color: var(--help-color);
|
|
118
155
|
}
|
|
119
156
|
.help-close-icon {
|
|
120
|
-
color: var(--help-close-icon-color)
|
|
157
|
+
color: var(--help-close-icon-color);
|
|
121
158
|
}
|
|
122
159
|
}
|
|
123
160
|
|
|
@@ -129,4 +166,4 @@ const tooltipStatus = computed<string>(() => props.status === 'error' ? 'error'
|
|
|
129
166
|
white-space: normal;
|
|
130
167
|
}
|
|
131
168
|
}
|
|
132
|
-
</style>
|
|
169
|
+
</style>
|