bfg-common 1.5.473 → 1.5.474

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 (156) 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 +1 -2
  7. package/assets/localization/local_en.json +1 -2
  8. package/assets/localization/local_hy.json +1 -2
  9. package/assets/localization/local_kk.json +1 -2
  10. package/assets/localization/local_ru.json +1 -2
  11. package/assets/localization/local_zh.json +1 -2
  12. package/assets/scss/clarity/local_ar.json +1 -2
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +170 -170
  15. package/components/atoms/perPage/PerPage.vue +58 -58
  16. package/components/atoms/table/dataGrid/DataGrid.vue +1709 -1709
  17. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  19. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  20. package/components/atoms/window/Window.vue +458 -458
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/context/lib/models/interfaces.ts +33 -33
  23. package/components/common/diagramMain/modals/lib/config/networkModal.ts +398 -398
  24. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  25. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  26. package/components/common/diagramMain/port/Port.vue +580 -580
  27. package/components/common/layout/theHeader/helpMenu/About.vue +79 -82
  28. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +3 -7
  29. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +2 -3
  30. package/components/common/pages/backups/DetailView.vue +52 -52
  31. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  32. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  33. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +26 -26
  34. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +66 -66
  35. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  36. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +35 -35
  37. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  38. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  39. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  40. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  41. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  42. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  43. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  44. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  45. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  46. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  47. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  48. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  49. package/components/common/pages/backups/tools/Tools.vue +75 -75
  50. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  51. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  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/VmsOld.vue +35 -35
  55. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  56. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  57. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  58. package/components/common/select/radio/RadioGroup.vue +137 -137
  59. package/components/common/spiceConsole/Drawer.vue +392 -392
  60. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  61. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  62. package/components/common/tools/Actions.vue +207 -207
  63. package/components/common/treeView/TreeView.vue +52 -52
  64. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  65. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +4 -1
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusOld.vue +1 -1
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +1 -0
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +1 -0
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +1 -0
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +84 -78
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocketNew.vue +4 -1
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlugNew.vue +4 -1
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/maxCpu/MaxCpuNew.vue +4 -1
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +4 -1
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/SharesNew.vue +4 -1
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/LimitNew.vue +4 -1
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlugNew.vue +4 -1
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +2 -0
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/CacheNew.vue +4 -1
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/File.vue +1 -0
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/file/FileNew.vue +5 -1
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIopsNew.vue +4 -1
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +4 -1
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSize.vue +1 -0
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/maximumSize/MaximumSizeNew.vue +5 -1
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeNew.vue +4 -1
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/ProvisioningNew.vue +4 -1
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +4 -1
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterTypeNew.vue +4 -1
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +4 -1
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +69 -66
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +4 -1
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +1 -0
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +49 -42
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +4 -1
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +4 -1
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +4 -1
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/ReservationNew.vue +4 -1
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/ModelNew.vue +4 -1
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysNew.vue +4 -1
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +4 -1
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/DelayNew.vue +4 -1
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +4 -1
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +4 -1
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +4 -1
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +16 -4
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +4 -1
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +4 -1
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +4 -1
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +4 -1
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +4 -1
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +4 -1
  129. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  130. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  131. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  132. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  133. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  134. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  135. package/components/common/vm/actions/common/select/name/Name.vue +197 -197
  136. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  137. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  138. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  139. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  140. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  141. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  142. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  143. package/components/common/vm/actions/register/Register.vue +267 -267
  144. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  145. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  146. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  147. package/composables/productNameLocal.ts +30 -30
  148. package/composables/useAppVersion.ts +21 -21
  149. package/package.json +1 -1
  150. package/plugins/date.ts +233 -233
  151. package/plugins/panelStates.ts +70 -70
  152. package/plugins/text.ts +59 -59
  153. package/public/spice-console/lib/images/bitmap.js +203 -203
  154. package/public/spice-console/network/spicechannel.js +440 -440
  155. package/store/main/mutations.ts +7 -7
  156. package/store/main/state.ts +7 -7
@@ -1,197 +1,197 @@
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 = withDefaults(
31
- defineProps<{
32
- nameFormSubmit: null | Function
33
- show: boolean
34
- project: UI_T_Project
35
- validateEmptyName?: boolean
36
- dataCenter?: UI_I_TreeNode // для сферы
37
- existName?: string
38
- }>(),
39
- {
40
- validateEmptyName: false,
41
- dataCenter: undefined,
42
- existName: undefined,
43
- }
44
- )
45
- const emits = defineEmits<{
46
- (event: 'submit', value: [string, UI_I_TreeNode | null]): void
47
- (event: 'loading', value: boolean): void
48
- (
49
- event: 'check-name',
50
- value: [[string, UI_I_TreeNode | null], (error: any) => void]
51
- ): void
52
- (event: 'has-errors', value: boolean): void
53
- }>()
54
-
55
- const { $store }: any = useNuxtApp()
56
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
57
-
58
- const localization = computed<UI_I_Localization>(() => useLocal())
59
-
60
- // TODO 100
61
- const vmName = ref<string>(props.existName || '')
62
-
63
- const selectedNode = ref<UI_I_TreeNode | null>(null)
64
- const onSelectNode = (node: UI_I_TreeNode): void => {
65
- selectedNode.value = node
66
- }
67
-
68
- watch(
69
- () => props.nameFormSubmit,
70
- (newValue) => {
71
- newValue && submit(newValue)
72
- }
73
- )
74
-
75
- const isParentDatacenter = (node: UI_I_TreeNode | null): boolean => {
76
- if (!node) return false
77
-
78
- if (node.parent?.type === 'datacenter') return true
79
- if (node.parent?.type === 'folder') return isParentDatacenter(node.parent)
80
- return false
81
- }
82
- const submit = async (cb: Function): Promise<void> => {
83
- const name = vmName.value
84
-
85
- if (props.validateEmptyName && name === '') {
86
- showValidationErrors([
87
- localization.value.common.emptyNameValidationDescription,
88
- ])
89
- cb(false)
90
- return
91
- }
92
- if (name !== '') {
93
- const isNameValid = await checkNameIsValid(name)
94
- if (!isNameValid) {
95
- cb(false)
96
- return
97
- }
98
- }
99
-
100
- if (props.project === 'sphere') {
101
- // const isDatacenterFolder = isParentDatacenter(selectedNode.value)
102
-
103
- if (
104
- // selectedNode.value?.type !== 'datacenter' &&
105
- // selectedNode.value?.type === 'folder' &&
106
- // !isDatacenterFolder
107
- // TODO рефакторинг, здесь сейчас проверяем является ли выбранный элемент датацентром или папкой(вм)
108
- ![3, 7].includes(selectedNode.value?.kind)
109
- ) {
110
- showValidationErrors([
111
- localization.value.common.enterValidLocationVirtualMachine,
112
- ])
113
- cb(false)
114
- return
115
- }
116
- }
117
-
118
- onRemoveValidationErrors()
119
- emits('submit', [name, selectedNode.value])
120
- cb(true)
121
- }
122
- const checkNameIsValid = async (name: string): Promise<boolean> => {
123
- emits('loading', true)
124
-
125
- return new Promise((resolve) => {
126
- emits('check-name', [
127
- [name, selectedNode.value],
128
- (error) => {
129
- emits('loading', false)
130
-
131
- const status = error?.statusCode || 200
132
- switch (status) {
133
- case 400: // Empty name
134
- showValidationErrors([
135
- localization.value.common.emptyNameValidationDescription,
136
- ])
137
- resolve(false)
138
- break
139
- case 405: // Invalid kind
140
- showValidationErrors([
141
- localization.value.common.kindValidationDescription,
142
- ])
143
- resolve(false)
144
- break
145
- case 406: // Invalid name
146
- showValidationErrors([
147
- localization.value.common.vmNameValidationDescription,
148
- ])
149
- resolve(false)
150
- break
151
- case 409: // Name exist
152
- showValidationErrors([
153
- localization.value.common.vmNameExistInSelectedLocation,
154
- ])
155
- resolve(false)
156
- break
157
- }
158
-
159
- resolve(true)
160
- },
161
- ])
162
- })
163
- }
164
-
165
- const errors = ref<string[]>([])
166
- const showValidationErrors = (data: string[]): void => {
167
- errors.value = data
168
- }
169
- const onRemoveValidationErrors = (): void => {
170
- errors.value = []
171
- }
172
- watch(
173
- errors,
174
- (newValue) => {
175
- emits('has-errors', !newValue.length)
176
- },
177
- { immediate: true, deep: true }
178
- )
179
-
180
- watch(
181
- () => props.show,
182
- (newValue) => {
183
- if (!newValue) return
184
-
185
- const input = document.getElementById('virtual-machine-name')
186
- if (!input) return
187
-
188
- setTimeout(() => {
189
- input.focus()
190
- }, 0)
191
- }
192
- )
193
-
194
- const isShowHelp = ref<boolean>(false)
195
- </script>
196
-
197
- <style scoped lang="scss"></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 = withDefaults(
31
+ defineProps<{
32
+ nameFormSubmit: null | Function
33
+ show: boolean
34
+ project: UI_T_Project
35
+ validateEmptyName?: boolean
36
+ dataCenter?: UI_I_TreeNode // для сферы
37
+ existName?: string
38
+ }>(),
39
+ {
40
+ validateEmptyName: false,
41
+ dataCenter: undefined,
42
+ existName: undefined,
43
+ }
44
+ )
45
+ const emits = defineEmits<{
46
+ (event: 'submit', value: [string, UI_I_TreeNode | null]): void
47
+ (event: 'loading', value: boolean): void
48
+ (
49
+ event: 'check-name',
50
+ value: [[string, UI_I_TreeNode | null], (error: any) => void]
51
+ ): void
52
+ (event: 'has-errors', value: boolean): void
53
+ }>()
54
+
55
+ const { $store }: any = useNuxtApp()
56
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
57
+
58
+ const localization = computed<UI_I_Localization>(() => useLocal())
59
+
60
+ // TODO 100
61
+ const vmName = ref<string>(props.existName || '')
62
+
63
+ const selectedNode = ref<UI_I_TreeNode | null>(null)
64
+ const onSelectNode = (node: UI_I_TreeNode): void => {
65
+ selectedNode.value = node
66
+ }
67
+
68
+ watch(
69
+ () => props.nameFormSubmit,
70
+ (newValue) => {
71
+ newValue && submit(newValue)
72
+ }
73
+ )
74
+
75
+ const isParentDatacenter = (node: UI_I_TreeNode | null): boolean => {
76
+ if (!node) return false
77
+
78
+ if (node.parent?.type === 'datacenter') return true
79
+ if (node.parent?.type === 'folder') return isParentDatacenter(node.parent)
80
+ return false
81
+ }
82
+ const submit = async (cb: Function): Promise<void> => {
83
+ const name = vmName.value
84
+
85
+ if (props.validateEmptyName && name === '') {
86
+ showValidationErrors([
87
+ localization.value.common.emptyNameValidationDescription,
88
+ ])
89
+ cb(false)
90
+ return
91
+ }
92
+ if (name !== '') {
93
+ const isNameValid = await checkNameIsValid(name)
94
+ if (!isNameValid) {
95
+ cb(false)
96
+ return
97
+ }
98
+ }
99
+
100
+ if (props.project === 'sphere') {
101
+ // const isDatacenterFolder = isParentDatacenter(selectedNode.value)
102
+
103
+ if (
104
+ // selectedNode.value?.type !== 'datacenter' &&
105
+ // selectedNode.value?.type === 'folder' &&
106
+ // !isDatacenterFolder
107
+ // TODO рефакторинг, здесь сейчас проверяем является ли выбранный элемент датацентром или папкой(вм)
108
+ ![3, 7].includes(selectedNode.value?.kind)
109
+ ) {
110
+ showValidationErrors([
111
+ localization.value.common.enterValidLocationVirtualMachine,
112
+ ])
113
+ cb(false)
114
+ return
115
+ }
116
+ }
117
+
118
+ onRemoveValidationErrors()
119
+ emits('submit', [name, selectedNode.value])
120
+ cb(true)
121
+ }
122
+ const checkNameIsValid = async (name: string): Promise<boolean> => {
123
+ emits('loading', true)
124
+
125
+ return new Promise((resolve) => {
126
+ emits('check-name', [
127
+ [name, selectedNode.value],
128
+ (error) => {
129
+ emits('loading', false)
130
+
131
+ const status = error?.statusCode || 200
132
+ switch (status) {
133
+ case 400: // Empty name
134
+ showValidationErrors([
135
+ localization.value.common.emptyNameValidationDescription,
136
+ ])
137
+ resolve(false)
138
+ break
139
+ case 405: // Invalid kind
140
+ showValidationErrors([
141
+ localization.value.common.kindValidationDescription,
142
+ ])
143
+ resolve(false)
144
+ break
145
+ case 406: // Invalid name
146
+ showValidationErrors([
147
+ localization.value.common.vmNameValidationDescription,
148
+ ])
149
+ resolve(false)
150
+ break
151
+ case 409: // Name exist
152
+ showValidationErrors([
153
+ localization.value.common.vmNameExistInSelectedLocation,
154
+ ])
155
+ resolve(false)
156
+ break
157
+ }
158
+
159
+ resolve(true)
160
+ },
161
+ ])
162
+ })
163
+ }
164
+
165
+ const errors = ref<string[]>([])
166
+ const showValidationErrors = (data: string[]): void => {
167
+ errors.value = data
168
+ }
169
+ const onRemoveValidationErrors = (): void => {
170
+ errors.value = []
171
+ }
172
+ watch(
173
+ errors,
174
+ (newValue) => {
175
+ emits('has-errors', !newValue.length)
176
+ },
177
+ { immediate: true, deep: true }
178
+ )
179
+
180
+ watch(
181
+ () => props.show,
182
+ (newValue) => {
183
+ if (!newValue) return
184
+
185
+ const input = document.getElementById('virtual-machine-name')
186
+ if (!input) return
187
+
188
+ setTimeout(() => {
189
+ input.focus()
190
+ }, 0)
191
+ }
192
+ )
193
+
194
+ const isShowHelp = ref<boolean>(false)
195
+ </script>
196
+
197
+ <style scoped lang="scss"></style>