bfg-common 1.5.122 → 1.5.124

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 (131) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/localization/local_be.json +3084 -3084
  3. package/assets/localization/local_en.json +3088 -3088
  4. package/assets/localization/local_hy.json +2 -2
  5. package/assets/localization/local_kk.json +2 -2
  6. package/assets/localization/local_ru.json +2 -2
  7. package/assets/localization/local_zh.json +3085 -3085
  8. package/components/atoms/TheIcon3.vue +50 -50
  9. package/components/atoms/perPage/PerPage.vue +58 -58
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  13. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  14. package/components/common/context/lib/models/interfaces.ts +31 -31
  15. package/components/common/context/recursion/Recursion.vue +87 -87
  16. package/components/common/context/recursion/RecursionNew.vue +238 -238
  17. package/components/common/diagramMain/DiagramMain.vue +897 -897
  18. package/components/common/diagramMain/Header.vue +214 -214
  19. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  20. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  21. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  22. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  23. package/components/common/pages/home/headline/Headline.vue +45 -45
  24. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  25. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  26. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  27. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  28. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  29. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  30. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  31. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  32. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  33. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  34. package/components/common/pages/packages/Packages.vue +208 -208
  35. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  36. package/components/common/readyToComplete/New.vue +66 -66
  37. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  38. package/components/common/recursionTree/RecursionTree.vue +223 -223
  39. package/components/common/select/button/ButtonDropdown.vue +108 -108
  40. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  41. package/components/common/vm/actions/add/Add.vue +785 -785
  42. package/components/common/vm/actions/add/New.vue +556 -556
  43. package/components/common/vm/actions/add/Old.vue +371 -371
  44. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  45. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  46. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  47. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  48. package/components/common/vm/actions/clone/Clone.vue +801 -798
  49. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  50. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -626
  51. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +149 -149
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +74 -74
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +83 -83
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  82. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  83. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  88. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +39 -39
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  96. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  97. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +100 -100
  98. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  99. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +134 -134
  100. package/components/common/vm/actions/common/select/computeResource/treeView/New.vue +44 -44
  101. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  102. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  103. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  104. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  105. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  106. package/components/common/vm/actions/common/select/os/New.vue +122 -122
  107. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  108. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  109. package/components/common/vm/actions/common/select/storage/Storage.vue +131 -131
  110. package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +326 -326
  111. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  112. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  113. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  114. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  115. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  116. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  117. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  118. package/components/common/wizards/vm/migrate/select/computeResource/tableView/TableView.vue +137 -137
  119. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  120. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  121. package/components/common/wizards/vm/migrate/vmOrigin/lib/models/interfaces.ts +1 -0
  122. package/composables/productNameLocal.ts +30 -30
  123. package/composables/useAppVersion.ts +21 -21
  124. package/package.json +1 -1
  125. package/plugins/date.ts +233 -233
  126. package/plugins/directives.ts +24 -24
  127. package/public/spice-console/lib/images/bitmap.js +203 -203
  128. package/public/spice-console/network/spicechannel.js +383 -383
  129. package/store/main/mutations.ts +7 -7
  130. package/store/main/state.ts +7 -7
  131. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,84 +1,84 @@
1
- <template>
2
- <div class="select-create-type py-3">
3
- <div
4
- v-for="item in props.items"
5
- v-development="item.disabled"
6
- :key="item.value"
7
- :class="[
8
- 'select-create-type-block',
9
- { selected: item.value === model, disabled: item.disabled },
10
- ]"
11
- @click="model = item.value"
12
- >
13
- <ui-radio
14
- v-model="model"
15
- :label="item.text"
16
- :value="item.value"
17
- :test-id="item.testId"
18
- :disabled="item.disabled"
19
- size="md"
20
- />
21
-
22
- <p class="description">
23
- {{ item.description }}
24
- </p>
25
- </div>
26
- </div>
27
- </template>
28
-
29
- <script setup lang="ts">
30
- import type { UI_I_VmCreateTypeOption } from '~/components/common/vm/actions/common/select/createType/lib/models/interfaces'
31
-
32
- const model = defineModel<string>()
33
-
34
- const props = defineProps<{
35
- items: UI_I_VmCreateTypeOption[]
36
- }>()
37
- </script>
38
-
39
- <style>
40
- :root {
41
- --select-create-type-block-bg-color: #ffffff;
42
- --select-create-type-block-border-color: #e9ebed;
43
- --select-create-type-block-border-hover-color: #d3d6da;
44
- --select-create-type-block-selected-bg-color: #f0f8fd;
45
- --select-create-type-block-selected-border-color: #008fd6;
46
- }
47
- :root.dark-theme {
48
- --select-create-type-block-bg-color: transparent;
49
- --select-create-type-block-border-color: #e9ebed1f;
50
- --select-create-type-block-border-hover-color: #e9ebed3d;
51
- --select-create-type-block-selected-bg-color: #2ba2de14;
52
- --select-create-type-block-selected-border-color: #2ba2de;
53
- }
54
- </style>
55
- <style scoped lang="scss">
56
- .select-create-type-block {
57
- background-color: var(--select-create-type-block-bg-color);
58
- border: 1px solid var(--select-create-type-block-border-color);
59
- padding: 12px;
60
- border-radius: 8px;
61
-
62
- &:not(.selected):not(.disabled) {
63
- cursor: pointer;
64
- &:hover {
65
- border-color: var(--select-create-type-block-border-hover-color);
66
- }
67
- }
68
-
69
- &.selected {
70
- background-color: var(--select-create-type-block-selected-bg-color);
71
- border: 1.5px solid var(--select-create-type-block-selected-border-color);
72
- }
73
-
74
- &:not(:last-child) {
75
- margin-bottom: 12px;
76
- }
77
-
78
- .description {
79
- font-size: 13px;
80
- color: #9da6ad;
81
- margin: 8px 0 0 28px;
82
- }
83
- }
84
- </style>
1
+ <template>
2
+ <div class="select-create-type py-3">
3
+ <div
4
+ v-for="item in props.items"
5
+ v-development="item.disabled"
6
+ :key="item.value"
7
+ :class="[
8
+ 'select-create-type-block',
9
+ { selected: item.value === model, disabled: item.disabled },
10
+ ]"
11
+ @click="model = item.value"
12
+ >
13
+ <ui-radio
14
+ v-model="model"
15
+ :label="item.text"
16
+ :value="item.value"
17
+ :test-id="item.testId"
18
+ :disabled="item.disabled"
19
+ size="md"
20
+ />
21
+
22
+ <p class="description">
23
+ {{ item.description }}
24
+ </p>
25
+ </div>
26
+ </div>
27
+ </template>
28
+
29
+ <script setup lang="ts">
30
+ import type { UI_I_VmCreateTypeOption } from '~/components/common/vm/actions/common/select/createType/lib/models/interfaces'
31
+
32
+ const model = defineModel<string>()
33
+
34
+ const props = defineProps<{
35
+ items: UI_I_VmCreateTypeOption[]
36
+ }>()
37
+ </script>
38
+
39
+ <style>
40
+ :root {
41
+ --select-create-type-block-bg-color: #ffffff;
42
+ --select-create-type-block-border-color: #e9ebed;
43
+ --select-create-type-block-border-hover-color: #d3d6da;
44
+ --select-create-type-block-selected-bg-color: #f0f8fd;
45
+ --select-create-type-block-selected-border-color: #008fd6;
46
+ }
47
+ :root.dark-theme {
48
+ --select-create-type-block-bg-color: transparent;
49
+ --select-create-type-block-border-color: #e9ebed1f;
50
+ --select-create-type-block-border-hover-color: #e9ebed3d;
51
+ --select-create-type-block-selected-bg-color: #2ba2de14;
52
+ --select-create-type-block-selected-border-color: #2ba2de;
53
+ }
54
+ </style>
55
+ <style scoped lang="scss">
56
+ .select-create-type-block {
57
+ background-color: var(--select-create-type-block-bg-color);
58
+ border: 1px solid var(--select-create-type-block-border-color);
59
+ padding: 12px;
60
+ border-radius: 8px;
61
+
62
+ &:not(.selected):not(.disabled) {
63
+ cursor: pointer;
64
+ &:hover {
65
+ border-color: var(--select-create-type-block-border-hover-color);
66
+ }
67
+ }
68
+
69
+ &.selected {
70
+ background-color: var(--select-create-type-block-selected-bg-color);
71
+ border: 1.5px solid var(--select-create-type-block-selected-border-color);
72
+ }
73
+
74
+ &:not(:last-child) {
75
+ margin-bottom: 12px;
76
+ }
77
+
78
+ .description {
79
+ font-size: 13px;
80
+ color: #9da6ad;
81
+ margin: 8px 0 0 28px;
82
+ }
83
+ }
84
+ </style>
@@ -1,5 +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
+ 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,167 +1,167 @@
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>
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>