bfg-common 1.5.60 → 1.5.61

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 (181) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +5 -2
  7. package/assets/localization/local_en.json +5 -2
  8. package/assets/localization/local_hy.json +5 -2
  9. package/assets/localization/local_kk.json +5 -2
  10. package/assets/localization/local_ru.json +5 -2
  11. package/assets/localization/local_zh.json +5 -2
  12. package/assets/scss/common/normalize.scss +339 -339
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +165 -165
  15. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  16. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  17. package/components/atoms/perPage/PerPage.vue +58 -58
  18. package/components/atoms/stack/StackBlock.vue +185 -185
  19. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  20. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  21. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  22. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  23. package/components/atoms/tooltip/Signpost.vue +227 -227
  24. package/components/common/accordion/Recursion.vue +222 -222
  25. package/components/common/browse/BrowseNew.vue +237 -237
  26. package/components/common/browse/BrowseOld.vue +217 -217
  27. package/components/common/browse/blocks/contents/Files.vue +37 -37
  28. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  29. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  30. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  31. package/components/common/context/Context.vue +111 -111
  32. package/components/common/context/lib/models/interfaces.ts +31 -31
  33. package/components/common/context/recursion/Recursion.vue +87 -87
  34. package/components/common/context/recursion/RecursionNew.vue +238 -238
  35. package/components/common/context/recursion/RecursionOld.vue +228 -228
  36. package/components/common/details/DetailsItem.vue +109 -109
  37. package/components/common/diagramMain/DiagramMain.vue +897 -897
  38. package/components/common/diagramMain/Header.vue +214 -214
  39. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  40. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  42. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  43. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  44. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  45. package/components/common/pages/home/headline/Headline.vue +45 -45
  46. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  47. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  48. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  49. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  50. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  51. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  52. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  53. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  54. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  55. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  56. package/components/common/pages/packages/Packages.vue +208 -208
  57. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  58. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  59. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  60. package/components/common/portlets/tag/Portlet.vue +433 -433
  61. package/components/common/recursionTree/RecursionTree.vue +223 -223
  62. package/components/common/select/button/ButtonDropdown.vue +108 -108
  63. package/components/common/spiceConsole/Drawer.vue +370 -370
  64. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  65. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  66. package/components/common/split/vertical/Vertical.vue +160 -160
  67. package/components/common/tools/Actions.vue +202 -202
  68. package/components/common/vm/actions/add/Add.vue +784 -774
  69. package/components/common/vm/actions/add/New.vue +429 -0
  70. package/components/common/vm/actions/add/Old.vue +371 -0
  71. package/components/common/vm/actions/add/lib/config/steps.ts +263 -247
  72. package/components/common/vm/actions/clone/Clone.vue +798 -798
  73. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  74. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -634
  75. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  76. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  77. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  78. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  148. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  149. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +162 -162
  150. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -74
  151. package/components/common/vm/actions/common/select/createType/New.vue +84 -0
  152. package/components/common/vm/actions/common/select/createType/Old.vue +70 -0
  153. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +24 -4
  154. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -0
  155. package/components/common/vm/actions/common/select/name/Name.vue +167 -236
  156. package/components/common/vm/actions/common/select/name/New.vue +143 -0
  157. package/components/common/vm/actions/common/select/name/Old.vue +119 -0
  158. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  159. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  160. package/components/common/vm/actions/common/select/template/Template.vue +64 -65
  161. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  162. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  163. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  164. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  165. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  166. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  167. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  168. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  169. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  170. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  171. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  172. package/composables/productNameLocal.ts +30 -30
  173. package/composables/useAppVersion.ts +21 -21
  174. package/package.json +1 -1
  175. package/plugins/date.ts +233 -233
  176. package/plugins/directives.ts +24 -24
  177. package/public/spice-console/lib/images/bitmap.js +203 -203
  178. package/public/spice-console/network/spicechannel.js +383 -383
  179. package/store/main/mutations.ts +7 -7
  180. package/store/main/state.ts +7 -7
  181. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <div class="select-create-type">
3
+ <atoms-list-select-list
4
+ v-model="model"
5
+ class="select"
6
+ :items="props.items"
7
+ />
8
+ <p class="description">
9
+ {{ description }}
10
+ </p>
11
+ </div>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
16
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
17
+
18
+ const model = defineModel<string>()
19
+
20
+ const props = defineProps<{
21
+ items: UI_I_OptionItem[]
22
+ }>()
23
+
24
+ const localization = computed<UI_I_Localization>(() => useLocal())
25
+
26
+ const description = computed<string>(() => {
27
+ let result = ''
28
+ switch (model.value) {
29
+ case '0':
30
+ result = localization.value.common.newVmCreateDescription
31
+ break
32
+ case '1':
33
+ result = localization.value.vmWizard.deployFromTemplateDescription
34
+ break
35
+ }
36
+ return result
37
+ })
38
+ </script>
39
+
40
+ <style scoped lang="scss">
41
+ .select-create-type {
42
+ display: flex;
43
+ padding-top: 12px;
44
+
45
+ .description {
46
+ color: #333333;
47
+ font-size: 13px;
48
+ }
49
+
50
+ .description,
51
+ .select {
52
+ flex: 1 1 100%;
53
+ margin-right: 5px;
54
+ }
55
+
56
+ :deep(select) {
57
+ background-color: transparent;
58
+ border-color: var(--type-list-border-color);
59
+ }
60
+ }
61
+ </style>
62
+
63
+ <style>
64
+ :root {
65
+ --type-list-border-color: #ccc;
66
+ }
67
+ :root.dark-theme {
68
+ --type-list-border-color: #000;
69
+ }
70
+ </style>
@@ -1,27 +1,47 @@
1
1
  import type { UI_I_Localization } from '~/lib/models/interfaces'
2
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
2
+ import type {
3
+ UI_I_VmCreateTypeOption
4
+ } from "~/components/common/vm/actions/common/select/createType/lib/models/interfaces";
3
5
 
4
6
  export const itemsFunc = (
5
7
  localization: UI_I_Localization,
6
8
  importFromVMWarevSphere: string
7
- ): UI_I_OptionItem[] => {
9
+ ): UI_I_VmCreateTypeOption[] => {
8
10
  return [
9
11
  {
10
12
  text: localization.common.createNewVirtualMachine,
11
13
  value: '0',
12
14
  disabled: false,
15
+ testId: 'create-new-vm',
16
+ description: localization.common.newVmCreateDescription
17
+ },
18
+ {
19
+ text: localization.vmWizard.deployFromTemplate,
20
+ value: '1',
21
+ disabled: false,
22
+ testId: 'deploy-from-template',
23
+ description: localization.vmWizard.deployFromTemplateDescription
24
+ },
25
+ {
26
+ text: localization.common.deployVmFromOVF,
27
+ value: '2',
28
+ disabled: true,
29
+ testId: 'deploy-from-ovf',
30
+ description: ''
13
31
  },
14
- { text: localization.vmWizard.deployFromTemplate, value: '1', disabled: false },
15
- { text: localization.common.deployVmFromOVF, value: '2', disabled: true },
16
32
  {
17
33
  text: importFromVMWarevSphere,
18
34
  value: '3',
19
35
  disabled: true,
36
+ testId: 'import-from-vmware-vsphere',
37
+ description: ''
20
38
  },
21
39
  {
22
40
  text: localization.common.importFromGorizontVS,
23
41
  value: '4',
24
42
  disabled: true,
43
+ testId: 'import-from-gorizont-vs',
44
+ description: ''
25
45
  },
26
46
  ]
27
47
  }
@@ -0,0 +1,5 @@
1
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
2
+
3
+ export interface UI_I_VmCreateTypeOption extends UI_I_OptionItem {
4
+ description: string
5
+ }
@@ -1,236 +1,167 @@
1
- <template>
2
- <div class="select-name">
3
- <atoms-alert
4
- v-show="errors.length"
5
- status="alert-danger"
6
- :items="errors"
7
- test-id="name-alert"
8
- @remove="onRemoveValidationErrors"
9
- />
10
-
11
- <form id="virtual-machine-form" @submit.prevent>
12
- <label for="virtual-machine-name"
13
- >{{ localization.common.virtualMachineName }}:</label
14
- >
15
- <input
16
- id="virtual-machine-name"
17
- v-model.trim="vmName"
18
- data-id="virtual-machine-name-input"
19
- type="text"
20
- maxlength="54"
21
- />
22
- <div id="vm-name-help-icon" class="content-signpost relative">
23
- <atoms-the-icon
24
- data-id="show-vm-name-help-icon"
25
- class="icon-show-help"
26
- fill="#0072a3"
27
- width="24px"
28
- height="24px"
29
- name="info-circle"
30
- @click="isShowHelp = !isShowHelp"
31
- />
32
- <atoms-tooltip-signpost
33
- v-if="isShowHelp"
34
- test-id="help-signpost"
35
- elem-id="vm-name-help-icon"
36
- @hide="isShowHelp = false"
37
- >
38
- <p>
39
- {{ localization.common.vmNameValidationDescription }}
40
- </p>
41
- </atoms-tooltip-signpost>
42
- </div>
43
- </form>
44
-
45
- <template v-if="props.project === 'sphere'">
46
- <p class="new-vm-name-and-folder-instructions mt-1">
47
- {{ localization.common.selectLocationVirtualMachine }}
48
- </p>
49
- <div class="tree-view-wrap">
50
- <common-vm-actions-add-folder-tree-view
51
- :data-center="props.dataCenter"
52
- @select-node="onSelectNode"
53
- />
54
- </div>
55
- </template>
56
- </div>
57
- </template>
58
-
59
- <script setup lang="ts">
60
- // import { API_UI_I_Error } from '~/lib/models/store/interfaces'
61
- import type { UI_I_Localization } from '~/lib/models/interfaces'
62
- import type { UI_T_Project } from '~/lib/models/types'
63
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
64
-
65
- const props = defineProps<{
66
- nameFormSubmit: null | Function
67
- show: boolean
68
- project: UI_T_Project
69
- dataCenter?: UI_I_TreeNode // для сферы
70
- }>()
71
- const emits = defineEmits<{
72
- (event: 'submit', value: [string, UI_I_TreeNode | null]): void
73
- (event: 'loading', value: boolean): void
74
- (
75
- event: 'check-name',
76
- value: [[string, UI_I_TreeNode | null], (error: any) => void]
77
- ): void
78
- }>()
79
-
80
- const localization = computed<UI_I_Localization>(() => useLocal())
81
-
82
- const vmName = ref<string>('')
83
-
84
- const selectedNode = ref<UI_I_TreeNode | null>(null)
85
- const onSelectNode = (node: UI_I_TreeNode): void => {
86
- selectedNode.value = node
87
- }
88
-
89
- watch(
90
- () => props.nameFormSubmit,
91
- (newValue) => {
92
- newValue && submit(newValue)
93
- }
94
- )
95
-
96
- const isParentDatacenter = (node: UI_I_TreeNode | null): boolean => {
97
- if (!node) return false
98
-
99
- if (node.parent?.type === 'datacenter') return true
100
- if (node.parent?.type === 'folder') return isParentDatacenter(node.parent)
101
- return false
102
- }
103
- const submit = async (cb: Function): Promise<void> => {
104
- const name = vmName.value
105
-
106
- if (name !== '') {
107
- const isNameValid = await checkNameIsValid(name)
108
- if (!isNameValid) {
109
- cb(false)
110
- return
111
- }
112
- }
113
-
114
- if (props.project === 'sphere') {
115
- // const isDatacenterFolder = isParentDatacenter(selectedNode.value)
116
-
117
- if (
118
- // selectedNode.value?.type !== 'datacenter' &&
119
- // selectedNode.value?.type === 'folder' &&
120
- // !isDatacenterFolder
121
- // TODO рефакторинг, здесь сейчас проверяем является ли выбранный элемент датацентром или папкой(вм)
122
- ![3, 7].includes(selectedNode.value?.kind)
123
- ) {
124
- showValidationErrors([
125
- localization.value.common.enterValidLocationVirtualMachine,
126
- ])
127
- cb(false)
128
- return
129
- }
130
- }
131
-
132
- onRemoveValidationErrors()
133
- emits('submit', [name, selectedNode.value])
134
- cb(true)
135
- }
136
- const checkNameIsValid = async (name: string): Promise<boolean> => {
137
- emits('loading', true)
138
-
139
- return new Promise((resolve) => {
140
- emits('check-name', [
141
- [name, selectedNode.value],
142
- (error) => {
143
- emits('loading', false)
144
-
145
- const status = error?.statusCode || 200
146
- switch (status) {
147
- case 405: // Invalid kind
148
- showValidationErrors([
149
- localization.value.common.kindValidationDescription,
150
- ])
151
- resolve(false)
152
- break
153
- case 406: // Invalid name
154
- showValidationErrors([
155
- localization.value.common.vmNameValidationDescription,
156
- ])
157
- resolve(false)
158
- break
159
- case 409: // Name exist
160
- showValidationErrors([
161
- localization.value.common.vmNameExistInSelectedLocation,
162
- ])
163
- resolve(false)
164
- break
165
- }
166
-
167
- resolve(true)
168
- },
169
- ])
170
- })
171
- }
172
-
173
- const errors = ref<string[]>([])
174
- const showValidationErrors = (data: string[]): void => {
175
- errors.value = data
176
- }
177
- const onRemoveValidationErrors = (): void => {
178
- errors.value = []
179
- }
180
-
181
- watch(
182
- () => props.show,
183
- (newValue) => {
184
- if (!newValue) return
185
-
186
- const input = document.getElementById('virtual-machine-name')
187
- if (!input) return
188
-
189
- setTimeout(() => {
190
- input.focus()
191
- }, 0)
192
- }
193
- )
194
-
195
- const isShowHelp = ref<boolean>(false)
196
- </script>
197
-
198
- <style scoped lang="scss">
199
- .select-name {
200
- form {
201
- display: flex;
202
- align-items: center;
203
- padding-top: 20px;
204
-
205
- label {
206
- width: 216px;
207
- }
208
- input {
209
- width: 345px;
210
- }
211
- }
212
-
213
- .tree-view-wrap {
214
- position: relative;
215
- border: 1px solid #000;
216
- padding: 5px;
217
- max-height: 300px;
218
- min-height: 200px;
219
- overflow: auto;
220
- margin-bottom: 10px;
221
- }
222
- }
223
- .content-signpost {
224
- .icon-show-help {
225
- cursor: pointer;
226
- }
227
-
228
- .help-title {
229
- font-size: 22px;
230
- margin-bottom: 24px;
231
- }
232
- .signpost {
233
- max-width: 360px;
234
- }
235
- }
236
- </style>
1
+ <template>
2
+ <common-vm-actions-common-select-name-new
3
+ v-if="isNewView"
4
+ v-model:vm-name="vmName"
5
+ v-model:is-show-help="isShowHelp"
6
+ :project="props.project"
7
+ :errors="errors"
8
+ :data-center="props.dataCenter"
9
+ @remove-validation-errors="onRemoveValidationErrors"
10
+ @select-node="onSelectNode"
11
+ />
12
+ <common-vm-actions-common-select-name-old
13
+ v-else
14
+ v-model:vm-name="vmName"
15
+ v-model:is-show-help="isShowHelp"
16
+ :project="props.project"
17
+ :errors="errors"
18
+ :data-center="props.dataCenter"
19
+ @remove-validation-errors="onRemoveValidationErrors"
20
+ @select-node="onSelectNode"
21
+ />
22
+ </template>
23
+
24
+ <script setup lang="ts">
25
+ // import { API_UI_I_Error } from '~/lib/models/store/interfaces'
26
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
27
+ import type { UI_T_Project } from '~/lib/models/types'
28
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
29
+
30
+ const props = defineProps<{
31
+ nameFormSubmit: null | Function
32
+ show: boolean
33
+ project: UI_T_Project
34
+ dataCenter?: UI_I_TreeNode // для сферы
35
+ }>()
36
+ const emits = defineEmits<{
37
+ (event: 'submit', value: [string, UI_I_TreeNode | null]): void
38
+ (event: 'loading', value: boolean): void
39
+ (
40
+ event: 'check-name',
41
+ value: [[string, UI_I_TreeNode | null], (error: any) => void]
42
+ ): void
43
+ }>()
44
+
45
+ const { $store }: any = useNuxtApp()
46
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
47
+
48
+ const localization = computed<UI_I_Localization>(() => useLocal())
49
+
50
+ const vmName = ref<string>('')
51
+
52
+ const selectedNode = ref<UI_I_TreeNode | null>(null)
53
+ const onSelectNode = (node: UI_I_TreeNode): void => {
54
+ selectedNode.value = node
55
+ }
56
+
57
+ watch(
58
+ () => props.nameFormSubmit,
59
+ (newValue) => {
60
+ newValue && submit(newValue)
61
+ }
62
+ )
63
+
64
+ const isParentDatacenter = (node: UI_I_TreeNode | null): boolean => {
65
+ if (!node) return false
66
+
67
+ if (node.parent?.type === 'datacenter') return true
68
+ if (node.parent?.type === 'folder') return isParentDatacenter(node.parent)
69
+ return false
70
+ }
71
+ const submit = async (cb: Function): Promise<void> => {
72
+ const name = vmName.value
73
+
74
+ if (name !== '') {
75
+ const isNameValid = await checkNameIsValid(name)
76
+ if (!isNameValid) {
77
+ cb(false)
78
+ return
79
+ }
80
+ }
81
+
82
+ if (props.project === 'sphere') {
83
+ // const isDatacenterFolder = isParentDatacenter(selectedNode.value)
84
+
85
+ if (
86
+ // selectedNode.value?.type !== 'datacenter' &&
87
+ // selectedNode.value?.type === 'folder' &&
88
+ // !isDatacenterFolder
89
+ // TODO рефакторинг, здесь сейчас проверяем является ли выбранный элемент датацентром или папкой(вм)
90
+ ![3, 7].includes(selectedNode.value?.kind)
91
+ ) {
92
+ showValidationErrors([
93
+ localization.value.common.enterValidLocationVirtualMachine,
94
+ ])
95
+ cb(false)
96
+ return
97
+ }
98
+ }
99
+
100
+ onRemoveValidationErrors()
101
+ emits('submit', [name, selectedNode.value])
102
+ cb(true)
103
+ }
104
+ const checkNameIsValid = async (name: string): Promise<boolean> => {
105
+ emits('loading', true)
106
+
107
+ return new Promise((resolve) => {
108
+ emits('check-name', [
109
+ [name, selectedNode.value],
110
+ (error) => {
111
+ emits('loading', false)
112
+
113
+ const status = error?.statusCode || 200
114
+ switch (status) {
115
+ case 405: // Invalid kind
116
+ showValidationErrors([
117
+ localization.value.common.kindValidationDescription,
118
+ ])
119
+ resolve(false)
120
+ break
121
+ case 406: // Invalid name
122
+ showValidationErrors([
123
+ localization.value.common.vmNameValidationDescription,
124
+ ])
125
+ resolve(false)
126
+ break
127
+ case 409: // Name exist
128
+ showValidationErrors([
129
+ localization.value.common.vmNameExistInSelectedLocation,
130
+ ])
131
+ resolve(false)
132
+ break
133
+ }
134
+
135
+ resolve(true)
136
+ },
137
+ ])
138
+ })
139
+ }
140
+
141
+ const errors = ref<string[]>([])
142
+ const showValidationErrors = (data: string[]): void => {
143
+ errors.value = data
144
+ }
145
+ const onRemoveValidationErrors = (): void => {
146
+ errors.value = []
147
+ }
148
+
149
+ watch(
150
+ () => props.show,
151
+ (newValue) => {
152
+ if (!newValue) return
153
+
154
+ const input = document.getElementById('virtual-machine-name')
155
+ if (!input) return
156
+
157
+ setTimeout(() => {
158
+ input.focus()
159
+ }, 0)
160
+ }
161
+ )
162
+
163
+ const isShowHelp = ref<boolean>(false)
164
+ </script>
165
+
166
+ <style scoped lang="scss">
167
+ </style>
@@ -0,0 +1,143 @@
1
+ <template>
2
+ <div class="select-name">
3
+ <div class="name-field">
4
+ <div class="flex-1 flex-align-center">
5
+ <label for="virtual-machine-name" class="name-label">{{
6
+ localization.common.name
7
+ }}</label>
8
+ <ui-icon
9
+ id="virtual-machine-name-icon"
10
+ width="16"
11
+ height="16"
12
+ name="info"
13
+ data-id="virtual-machine-name-icon"
14
+ :class="{ active: isShowHelp }"
15
+ @click.stop="isShowHelp = !isShowHelp"
16
+ />
17
+ </div>
18
+ <Teleport to="body">
19
+ <ui-dropdown
20
+ :show="isShowHelp"
21
+ elem-id="virtual-machine-name-icon"
22
+ test-id=""
23
+ :items="[]"
24
+ width="auto"
25
+ show-from-left
26
+ @hide="isShowHelp = false"
27
+ >
28
+ <template #content>
29
+ <div class="vm-name-help-content">
30
+ <div class="headline">
31
+ <ui-icon name="info-2" width="16" height="16" />
32
+ <h3 class="vm-name-help-title">
33
+ {{ localization.common.cpu }}
34
+ </h3>
35
+ <ui-icon
36
+ name="close"
37
+ width="16"
38
+ height="16"
39
+ class="pointer"
40
+ @click="isShowHelp = false"
41
+ />
42
+ </div>
43
+
44
+ <p class="vm-name-help-text">
45
+ {{ localization.common.vmCpuHelpText1 }}
46
+ </p>
47
+ </div>
48
+ </template>
49
+ </ui-dropdown>
50
+ </Teleport>
51
+
52
+ <div class="flex-2">
53
+ <ui-input
54
+ v-model="vmName"
55
+ type="text"
56
+ maxlength="54"
57
+ test-id="virtual-machine-name"
58
+ />
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </template>
63
+
64
+ <script setup lang="ts">
65
+ // import { API_UI_I_Error } from '~/lib/models/store/interfaces'
66
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
67
+ import type { UI_T_Project } from '~/lib/models/types'
68
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
69
+
70
+ const vmName = defineModel<string>('vmName', { required: true })
71
+ const isShowHelp = defineModel<boolean>('isShowHelp', { required: true })
72
+
73
+ const props = defineProps<{
74
+ project: UI_T_Project
75
+ errors: string[]
76
+ dataCenter?: UI_I_TreeNode // для сферы
77
+ }>()
78
+ const emits = defineEmits<{
79
+ (event: 'remove-validation-errors'): void
80
+ (event: 'select-node', value: UI_I_TreeNode): void
81
+ }>()
82
+
83
+ const localization = computed<UI_I_Localization>(() => useLocal())
84
+ </script>
85
+
86
+ <style scoped lang="scss">
87
+ .select-name {
88
+ .name-field {
89
+ display: flex;
90
+ align-items: center;
91
+
92
+ .name-label {
93
+ font-size: 13px;
94
+ color: #4d5d69;
95
+ margin-right: 8px;
96
+ }
97
+ #virtual-machine-name-icon {
98
+ color: #9da6ad;
99
+
100
+ &:hover {
101
+ color: #4d5d69;
102
+ }
103
+ &.active {
104
+ color: #008fd6;
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+ .vm-name-help-content {
111
+ padding: 16px;
112
+
113
+ .headline {
114
+ display: flex;
115
+ align-items: center;
116
+ gap: 8px;
117
+ margin-bottom: 12px;
118
+
119
+ .vm-name-help-title {
120
+ flex: 1;
121
+ font-size: 14px;
122
+ font-weight: 500;
123
+ line-height: 16.94px;
124
+ color: #4d5d69;
125
+ }
126
+ }
127
+
128
+ .vm-name-help-text {
129
+ font-size: 13px;
130
+ line-height: 15.73px;
131
+ color: #4d5d69;
132
+ margin-bottom: 12px;
133
+ }
134
+
135
+ .vm-name-more-info {
136
+ font-size: 13px;
137
+ font-weight: 500;
138
+ line-height: 15.73px;
139
+ color: #008fd6;
140
+ text-decoration: none;
141
+ }
142
+ }
143
+ </style>