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.
Files changed (26) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +46 -44
  2. package/assets/img/icons/icons-sprite-light-1.svg +45 -43
  3. package/assets/localization/local_be.json +4 -2
  4. package/assets/localization/local_en.json +4 -2
  5. package/assets/localization/local_hy.json +4 -2
  6. package/assets/localization/local_kk.json +4 -2
  7. package/assets/localization/local_ru.json +4 -2
  8. package/assets/localization/local_zh.json +4 -2
  9. package/components/common/backup/storage/actions/add/New.vue +29 -16
  10. package/components/common/backup/storage/actions/add/lib/validations.ts +1 -1
  11. package/components/common/backup/storage/actions/add/steps/hostAccessibility/table/new/lib/config/compatibleTable.ts +0 -1
  12. package/components/common/backup/storage/actions/add/steps/name/New.vue +2 -0
  13. package/components/common/backup/storage/actions/add/steps/nameAndConfigure/NameAndConfigureNew.vue +16 -15
  14. package/components/common/backup/storage/actions/add/steps/readyComplete/lib/config/propertiesDetails.ts +4 -4
  15. package/components/common/backup/storage/actions/add/steps/typeMode/TypeMode.vue +7 -1
  16. package/components/common/backup/storage/actions/add/steps/typeMode/TypeModeNew.vue +45 -11
  17. package/components/common/context/lib/models/interfaces.ts +2 -0
  18. package/components/common/context/recursion/RecursionNew.vue +3 -2
  19. package/components/common/context/recursion/RecursionOld.vue +3 -2
  20. package/components/common/tooltip/Help.vue +76 -39
  21. package/components/common/vm/actions/clone/Clone.vue +817 -817
  22. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +2 -2
  23. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +2 -2
  24. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +2 -2
  25. package/components/common/vm/actions/common/select/storage/new/New.vue +21 -3
  26. 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
- 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
- dropdown-width="320px"
30
- dropdown-left
31
- class="ml-2"
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
- <common-vm-actions-common-select-storage
129
- :datastore="props.datastore"
130
- :is-datastore-loading="props.isDatastoreLoading"
131
- :get-datastore-table-func="props.getDatastoreTableFunc"
132
- hide-compatibility
133
- hide-alert
134
- class="storage-datatable h-full"
135
- @change-storage="onChangeStorage"
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.selectLeastEntityContinue,
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)
@@ -45,7 +45,6 @@ export const options: UI_I_DataTableOptions = {
45
45
  isResizable: true,
46
46
  showSelectedRows: true,
47
47
  showColumnManager: false,
48
- inBlock: true,
49
48
  inModal: true
50
49
  }
51
50
 
@@ -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
  })
@@ -36,13 +36,13 @@
36
36
  {{ localization.common.folder }}
37
37
  </span>
38
38
  <common-tooltip-help
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
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
- 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
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.common.name,
51
+ label: localization.backup.backupStorageName,
52
52
  value: name,
53
53
  items: [],
54
54
  testId: 'view-selected-name-in-complete',
55
- iconClassName: 'vsphere-icon-datastore',
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.common.name,
98
+ label: localization.backup.backupStorageName,
99
99
  value: name,
100
100
  items: [],
101
101
  testId: 'view-storage-name-in-complete',
102
- iconClassName: 'vsphere-icon-datastore',
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 "~/lib/models/types";
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
- :test-id="`${option.testId}-${key}`"
22
- :help-id="`${option.testId}-${key}`"
23
- :help-text="option.tooltipContent"
24
- :title="localization.common.information"
25
- icon-width="18"
26
- icon-height="18"
27
- dropdown-width="320px"
28
- dropdown-left
29
- dropdown-top
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 "~/lib/models/interfaces";
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="(item, key) in props.items"
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="(item, key) in props.items"
11
+ v-for="item in props.items"
12
12
  v-development="item.development"
13
- :key="key"
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
- :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="['help-icon cursor-pointer', {active: isShowHelp}, {disabled: props.isDisabled}]"
10
- @click.stop.prevent="isShowHelp = !isShowHelp"
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
- v-model="isShowHelp"
14
- :left="props.dropdownLeft"
15
- :right="props.dropdownRight"
16
- :top="props.dropdownTop"
17
- :elem-id="props.helpId"
18
- :width="props.dropdownWidth || 'max-content'"
19
- :max-height="props.dropdownMaxHeight || 'unset'"
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
- name="close"
30
- width="16"
31
- height="16"
32
- class="help-close-icon cursor-pointer"
33
- @click.stop.prevent="isShowHelp = false"
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 = defineProps<{
52
- testId: string,
53
- helpId: string,
54
- dropdownWidth?: string
55
- helpText?: string,
56
- iconWidth?: string,
57
- iconHeight?: string,
58
- dropdownMaxHeight?: string,
59
- dropdownLeft?: boolean,
60
- dropdownRight?: boolean,
61
- dropdownTop?: boolean,
62
- isDisabled?: boolean,
63
- title?: string,
64
- status?: T_TooltipHelpStatus
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 isShowHelp = ref<boolean>(false)
92
+ const isShowHelpLocal = ref<boolean>(false)
70
93
 
71
- const tooltipStatus = computed<string>(() => props.status === 'error' ? 'error' : 'info-2')
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>