bfg-common 1.5.57 → 1.5.59

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 (182) 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/combobox/Combobox.vue +2 -0
  16. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  17. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  18. package/components/atoms/perPage/PerPage.vue +58 -58
  19. package/components/atoms/stack/StackBlock.vue +185 -185
  20. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  21. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  22. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  23. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  24. package/components/atoms/tooltip/Signpost.vue +227 -227
  25. package/components/common/accordion/Recursion.vue +222 -222
  26. package/components/common/browse/BrowseNew.vue +237 -237
  27. package/components/common/browse/BrowseOld.vue +217 -217
  28. package/components/common/browse/blocks/contents/Files.vue +37 -37
  29. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  30. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  31. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  32. package/components/common/context/Context.vue +111 -111
  33. package/components/common/context/lib/models/interfaces.ts +31 -31
  34. package/components/common/context/recursion/Recursion.vue +87 -87
  35. package/components/common/context/recursion/RecursionNew.vue +238 -238
  36. package/components/common/context/recursion/RecursionOld.vue +228 -228
  37. package/components/common/details/DetailsItem.vue +109 -109
  38. package/components/common/diagramMain/DiagramMain.vue +897 -897
  39. package/components/common/diagramMain/Header.vue +214 -214
  40. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  41. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  43. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  44. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  45. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  46. package/components/common/pages/home/headline/Headline.vue +45 -45
  47. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  48. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  49. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  50. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  51. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  52. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  53. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  54. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  55. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  56. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  57. package/components/common/pages/packages/Packages.vue +208 -208
  58. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  59. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  60. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  61. package/components/common/portlets/tag/Portlet.vue +433 -433
  62. package/components/common/recursionTree/RecursionTree.vue +223 -223
  63. package/components/common/select/button/ButtonDropdown.vue +108 -108
  64. package/components/common/spiceConsole/Drawer.vue +370 -370
  65. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  66. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  67. package/components/common/split/vertical/Vertical.vue +160 -160
  68. package/components/common/tools/Actions.vue +202 -202
  69. package/components/common/vm/actions/add/Add.vue +727 -774
  70. package/components/common/vm/actions/add/New.vue +375 -0
  71. package/components/common/vm/actions/add/Old.vue +318 -0
  72. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  73. package/components/common/vm/actions/clone/Clone.vue +798 -798
  74. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  75. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  76. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  77. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  78. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  79. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  149. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  150. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +162 -162
  151. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -74
  152. package/components/common/vm/actions/common/select/createType/New.vue +84 -0
  153. package/components/common/vm/actions/common/select/createType/Old.vue +70 -0
  154. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +24 -4
  155. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -0
  156. package/components/common/vm/actions/common/select/name/Name.vue +167 -236
  157. package/components/common/vm/actions/common/select/name/New.vue +143 -0
  158. package/components/common/vm/actions/common/select/name/Old.vue +119 -0
  159. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  160. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  161. package/components/common/vm/actions/common/select/template/Template.vue +65 -65
  162. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  163. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  164. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  165. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  166. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  167. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  168. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  169. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  170. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  171. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  172. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  173. package/composables/productNameLocal.ts +30 -30
  174. package/composables/useAppVersion.ts +21 -21
  175. package/package.json +1 -1
  176. package/plugins/date.ts +233 -233
  177. package/plugins/directives.ts +24 -24
  178. package/public/spice-console/lib/images/bitmap.js +203 -203
  179. package/public/spice-console/network/spicechannel.js +383 -383
  180. package/store/main/mutations.ts +7 -7
  181. package/store/main/state.ts +7 -7
  182. 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>