bfg-common 1.5.521 → 1.5.523

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 (116) 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_ru.json +3622 -3622
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/collapse/CollapseNav.vue +170 -170
  9. package/components/atoms/perPage/PerPage.vue +58 -58
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  14. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  15. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  16. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  17. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  18. package/components/common/diagramMain/port/Port.vue +580 -580
  19. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  20. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  21. package/components/common/pages/backups/DetailView.vue +52 -52
  22. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  23. package/components/common/pages/backups/modals/Modals.vue +243 -243
  24. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  25. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  26. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  27. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  28. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  29. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  30. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  31. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  32. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  33. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  34. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  35. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  36. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  37. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  38. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  39. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  40. package/components/common/pages/scheduledTasks/modals/common/newTaskForm/lib/utils.ts +5 -3
  41. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  42. package/components/common/select/radio/RadioGroup.vue +137 -137
  43. package/components/common/spiceConsole/Drawer.vue +420 -420
  44. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  45. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  46. package/components/common/tools/Actions.vue +207 -207
  47. package/components/common/treeView/TreeView.vue +52 -52
  48. package/components/common/vm/actions/add/Add.vue +895 -895
  49. package/components/common/vm/actions/add/New.vue +695 -695
  50. package/components/common/vm/actions/add/Old.vue +414 -414
  51. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  52. package/components/common/vm/actions/clone/Clone.vue +863 -863
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -393
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +15 -11
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +15 -14
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  65. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  66. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  67. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  68. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  69. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  70. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  71. package/components/common/vm/actions/common/lib/models/interfaces.ts +1 -0
  72. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  73. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  74. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  75. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  76. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  77. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  78. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  79. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  80. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  81. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  82. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  83. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  84. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  85. package/components/common/vm/actions/register/Register.vue +285 -285
  86. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  87. package/components/common/wizards/common/steps/name/Name.vue +179 -179
  88. package/components/common/wizards/common/steps/name/New.vue +221 -221
  89. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  90. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  91. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  92. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  93. package/components/common/wizards/datastore/add/Add.vue +228 -228
  94. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  95. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  96. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  97. package/composables/useAppVersion.ts +21 -21
  98. package/composables/useLocal.ts +6 -6
  99. package/composables/useLocalCommon.ts +39 -39
  100. package/package.json +1 -1
  101. package/plugins/console.ts +21 -21
  102. package/plugins/date.ts +233 -233
  103. package/plugins/mouse.ts +21 -21
  104. package/plugins/panelStates.ts +70 -70
  105. package/plugins/text.ts +59 -59
  106. package/public/spice-console/application/clientgui.js +854 -854
  107. package/public/spice-console/application/packetfactory.js +211 -211
  108. package/public/spice-console/application/virtualmouse.js +147 -147
  109. package/public/spice-console/lib/images/bitmap.js +203 -203
  110. package/public/spice-console/network/spicechannel.js +440 -440
  111. package/public/spice-console/process/cursorprocess.js +121 -121
  112. package/public/spice-console/process/inputprocess.js +227 -227
  113. package/public/spice-console/process/mainprocess.js +210 -210
  114. package/public/spice-console/run.js +210 -210
  115. package/store/main/mutations.ts +7 -7
  116. package/store/main/state.ts +7 -7
@@ -63,7 +63,7 @@
63
63
  :id="`vm-wizard-hard-disk-${props.index}`"
64
64
  v-model.number="size"
65
65
  :test-id="`vm-wizard-hard-disk-${props.index}`"
66
- :disabled="props.isDisabledSize || props.isRunning"
66
+ :disabled="props.isDisabledSize"
67
67
  :class="[
68
68
  'spinfree edit-setting-input input-text-color',
69
69
  { 'has-error': props.hardDiskTypeErrorLocalText },
@@ -79,7 +79,7 @@
79
79
  :id="`hard-disk-type-select-${props.index}`"
80
80
  v-model="hardDiskType"
81
81
  :items="props.hardDiskTypeOptions"
82
- :disabled="props.type === 'exist' || props.isRunning"
82
+ :disabled="props.isDisabledSize"
83
83
  :test-id="`hard-disk-type-select-${props.index}`"
84
84
  width="auto"
85
85
  class="unit"
@@ -95,7 +95,7 @@
95
95
  :index="props.index"
96
96
  />
97
97
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location
98
- v-if="props.isNewType"
98
+ v-if="props.isNewHardDisk"
99
99
  :location="props.location"
100
100
  :index="props.index"
101
101
  :error-validation-fields="props.errorValidationFields"
@@ -114,14 +114,14 @@
114
114
  v-model:disk-provisioning="diskProvisioning"
115
115
  :index="props.index"
116
116
  :error-validation-fields="props.errorValidationFields"
117
- :disabled="(props.isEdit && !props.isNewType) || props.isRunning"
117
+ :disabled="props.isDisabledProvisioning"
118
118
  @remove-error-by-title="emits('remove-error-by-title', $event)"
119
119
  />
120
120
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-sharing
121
121
  v-model:sharing="sharing"
122
122
  :index="props.index"
123
123
  :error-validation-fields="props.errorValidationFields"
124
- :disabled="props.isRunning && !props.isNewType"
124
+ :disabled="props.isDisabledSharing"
125
125
  @remove-error-by-title="emits('remove-error-by-title', $event)"
126
126
  />
127
127
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-limit-iops
@@ -129,7 +129,7 @@
129
129
  v-model:limit-iops-type="limitIopsType"
130
130
  :index="props.index"
131
131
  :error-validation-fields="props.errorValidationFields"
132
- :disabled="props.isRunning && !props.isNewType"
132
+ :disabled="props.isDisabledLimitIops"
133
133
  @valid="limitIopsInvalid = $event"
134
134
  @remove-error-by-title="emits('remove-error-by-title', $event)"
135
135
  />
@@ -137,21 +137,21 @@
137
137
  v-model:disk-mode="diskMode"
138
138
  :index="props.index"
139
139
  :error-validation-fields="props.errorValidationFields"
140
- :disabled="props.isRunning && !props.isNewType"
140
+ :disabled="props.isDisabledMode"
141
141
  @remove-error-by-title="emits('remove-error-by-title', $event)"
142
142
  />
143
143
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-cache
144
144
  v-model:cache="cache"
145
145
  :index="props.index"
146
146
  :error-validation-fields="props.errorValidationFields"
147
- :disabled="(props.isEdit && !props.isNewType) || props.isRunning"
147
+ :disabled="props.isDisabledCache"
148
148
  @remove-error-by-title="emits('remove-error-by-title', $event)"
149
149
  />
150
150
  <common-vm-actions-common-customize-hardware-virtual-hardware-bus
151
151
  v-model:bus="bus"
152
152
  :index="props.index"
153
153
  :error-validation-fields="props.errorValidationFields"
154
- :disabled="!props.isNewHardDisk && props.isRunning"
154
+ :disabled="props.isDisabledBus"
155
155
  :help-text="localization.common.busVirtioHelpDesc"
156
156
  :test-id="`vm-wizard-disk-bus-field-${props.index}`"
157
157
  :guest-machine-type="props.guestMachineType"
@@ -201,6 +201,12 @@ const props = withDefaults(
201
201
  errorText: string
202
202
  hardDiskTypeErrorLocalText: string
203
203
  isDisabledSize: boolean
204
+ isDisabledProvisioning: boolean
205
+ isDisabledSharing: boolean
206
+ isDisabledLimitIops: boolean
207
+ isDisabledMode: boolean
208
+ isDisabledCache: boolean
209
+ isDisabledBus: boolean
204
210
  hardDiskTypeOptions: UI_I_OptionItem[]
205
211
  maxHardDisk: number
206
212
  location: UI_I_DatastoreTableItem | null
@@ -215,12 +221,10 @@ const props = withDefaults(
215
221
  type: UI_T_HardDiskType
216
222
  hardDisk: UI_I_SendDataNewHardDisk
217
223
  guestMachineType?: UI_I_OptionItem | null
218
- isNewType?: boolean
219
224
  computeResource?: UI_I_TreeNode | null
220
225
  }>(),
221
226
  {
222
227
  guestMachineType: undefined,
223
- isNewType: undefined,
224
228
  computeResource: undefined,
225
229
  }
226
230
  )
@@ -71,10 +71,7 @@
71
71
  'spinfree edit-setting-input input-text-color',
72
72
  { 'has-error': props.hardDiskTypeErrorLocalText },
73
73
  ]"
74
- :disabled="
75
- props.isDisabledSize ||
76
- (props.isRunning && diskProvisioning === 'thick')
77
- "
74
+ :disabled="props.isDisabledSize"
78
75
  type="number"
79
76
  @blur="emits('validate-size')"
80
77
  @click.stop
@@ -89,7 +86,7 @@
89
86
  :id="`hard-disk-type-select-${props.index}`"
90
87
  v-model="hardDiskType"
91
88
  :data-id="`hard-disk-type-select-${props.index}`"
92
- :disabled="props.type === 'exist' || props.isRunning"
89
+ :disabled="props.isDisabledSize"
93
90
  class="input-text-color"
94
91
  @change="emits('validate-size')"
95
92
  @click.stop
@@ -112,7 +109,7 @@
112
109
  :index="props.index"
113
110
  />
114
111
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location
115
- v-if="props.isNewType"
112
+ v-if="props.isNewHardDisk"
116
113
  :location="props.location"
117
114
  :index="props.index"
118
115
  :error-validation-fields="props.errorValidationFields"
@@ -131,14 +128,14 @@
131
128
  v-model:disk-provisioning="diskProvisioning"
132
129
  :index="props.index"
133
130
  :error-validation-fields="props.errorValidationFields"
134
- :disabled="(props.isEdit && !props.isNewType) || props.isRunning"
131
+ :disabled="props.isDisabledProvisioning"
135
132
  @remove-error-by-title="emits('remove-error-by-title', $event)"
136
133
  />
137
134
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-sharing
138
135
  v-model:sharing="sharing"
139
136
  :index="props.index"
140
137
  :error-validation-fields="props.errorValidationFields"
141
- :disabled="props.isRunning && !props.isNewType"
138
+ :disabled="props.isDisabledSharing"
142
139
  @remove-error-by-title="emits('remove-error-by-title', $event)"
143
140
  />
144
141
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-limit-iops
@@ -146,7 +143,7 @@
146
143
  v-model:limit-iops-type="limitIopsType"
147
144
  :index="props.index"
148
145
  :error-validation-fields="props.errorValidationFields"
149
- :disabled="props.isRunning && !props.isNewType"
146
+ :disabled="props.isDisabledLimitIops"
150
147
  @valid="limitIopsInvalid = $event"
151
148
  @remove-error-by-title="emits('remove-error-by-title', $event)"
152
149
  />
@@ -154,21 +151,21 @@
154
151
  v-model:disk-mode="diskMode"
155
152
  :index="props.index"
156
153
  :error-validation-fields="props.errorValidationFields"
157
- :disabled="props.isRunning && !props.isNewType"
154
+ :disabled="props.isDisabledMode"
158
155
  @remove-error-by-title="emits('remove-error-by-title', $event)"
159
156
  />
160
157
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-cache
161
158
  v-model:cache="cache"
162
159
  :index="props.index"
163
160
  :error-validation-fields="props.errorValidationFields"
164
- :disabled="(props.isEdit && !props.isNewType) || props.isRunning"
161
+ :disabled="props.isDisabledCache"
165
162
  @remove-error-by-title="emits('remove-error-by-title', $event)"
166
163
  />
167
164
  <common-vm-actions-common-customize-hardware-virtual-hardware-bus
168
165
  v-model:bus="bus"
169
166
  :index="props.index"
170
167
  :error-validation-fields="props.errorValidationFields"
171
- :disabled="!props.isNewHardDisk && props.isRunning"
168
+ :disabled="props.isDisabledBus"
172
169
  :help-text="localization.common.busVirtioHelpDesc"
173
170
  :test-id="`vm-wizard-disk-bus-field-${props.index}`"
174
171
  :guest-machine-type="props.guestMachineType"
@@ -219,6 +216,12 @@ const props = withDefaults(
219
216
  errorText: string
220
217
  hardDiskTypeErrorLocalText: string
221
218
  isDisabledSize: boolean
219
+ isDisabledProvisioning: boolean
220
+ isDisabledSharing: boolean
221
+ isDisabledLimitIops: boolean
222
+ isDisabledMode: boolean
223
+ isDisabledCache: boolean
224
+ isDisabledBus: boolean
222
225
  hardDiskTypeOptions: UI_I_OptionItem[]
223
226
  maxHardDisk: number
224
227
  location: UI_I_DatastoreTableItem | null
@@ -233,12 +236,10 @@ const props = withDefaults(
233
236
  type: UI_T_HardDiskType
234
237
  hardDisk: UI_I_SendDataNewHardDisk
235
238
  guestMachineType?: UI_I_OptionItem | null
236
- isNewType?: boolean
237
239
  computeResource?: UI_I_TreeNode | null
238
240
  }>(),
239
241
  {
240
242
  guestMachineType: undefined,
241
- isNewType: undefined,
242
243
  computeResource: undefined,
243
244
  }
244
245
  )
@@ -1,154 +1,154 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-new
3
- v-if="isNewView"
4
- v-model:selected-location="selectedLocation"
5
- :index="props.index"
6
- :datastore="props.datastore"
7
- :is-datastore-loading="props.isDatastoreLoading"
8
- :get-datastore-table-func="props.getDatastoreTableFunc"
9
- :api-error="apiError"
10
- :location-options="locationOptions"
11
- :storage-modal-is-show="storageModalIsShow"
12
- :storage-submit="storageSubmit"
13
- @change-location="onChangeLocation"
14
- @change-storage="onChangeStorage"
15
- @hide-storage-modal="onHideStorageModal"
16
- @submit-storage-modal="onSubmitStorageModal"
17
- @remove-validation-error="onRemoveValidationError"
18
- />
19
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-old
20
- v-else
21
- v-model:selected-location="selectedLocation"
22
- :index="props.index"
23
- :datastore="props.datastore"
24
- :is-datastore-loading="props.isDatastoreLoading"
25
- :get-datastore-table-func="props.getDatastoreTableFunc"
26
- :api-error="apiError"
27
- :location-options="locationOptions"
28
- :storage-modal-is-show="storageModalIsShow"
29
- :storage-submit="storageSubmit"
30
- @change-location="onChangeLocation"
31
- @change-storage="onChangeStorage"
32
- @hide-storage-modal="onHideStorageModal"
33
- @submit-storage-modal="onSubmitStorageModal"
34
- @remove-validation-error="onRemoveValidationError"
35
- />
36
- </template>
37
-
38
- <script setup lang="ts">
39
- import type {
40
- UI_I_HTMLSelectElement,
41
- UI_I_Localization,
42
- } from '~/lib/models/interfaces'
43
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
44
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
45
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
46
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
47
-
48
- const props = defineProps<{
49
- location: UI_I_DatastoreTableItem | null
50
- index: number
51
- errorValidationFields: UI_I_ErrorValidationField[]
52
- datastore: UI_I_DatastoreTableItem[]
53
- isDatastoreLoading: boolean
54
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
55
- }>()
56
- const emits = defineEmits<{
57
- (event: 'change', value: UI_I_DatastoreTableItem): void
58
- (event: 'remove-error-by-title', value: string): void
59
- }>()
60
-
61
- const { $store }: any = useNuxtApp()
62
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
-
64
- const localization = computed<UI_I_Localization>(() => useLocal())
65
-
66
- const selectedLocation = ref<string>(props.location?.id || '')
67
-
68
- const storages = ref<UI_I_DatastoreTableItem[]>([])
69
- const addStorage = (storage: UI_I_DatastoreTableItem): void => {
70
- const hasStorage = storages.value.some((item) => item.id === storage.id)
71
- if (hasStorage) {
72
- return
73
- }
74
-
75
- storages.value.push(storage)
76
- }
77
- const locationOptions = ref<UI_I_OptionItem[]>([])
78
-
79
- watch(
80
- () => props.location,
81
- (newValue) => {
82
- if (locationOptions.value.length || !newValue) {
83
- return
84
- }
85
-
86
- locationOptions.value = [
87
- {
88
- text: localization.value.common.storeWithVirtualMachine,
89
- value: newValue.id,
90
- },
91
- { text: `${localization.value.common.browse}...`, value: -1 },
92
- ]
93
- selectedLocation.value = newValue.id
94
- storages.value.push(newValue)
95
- addStorage(newValue)
96
- },
97
- { immediate: true }
98
- )
99
-
100
- const storageSubmit = ref<null | Function>(null)
101
- const onSubmitStorageModal = (): void => {
102
- storageSubmit.value = (_isValid: boolean): void => {
103
- storageSubmit.value = null
104
- }
105
- }
106
- const storageModalIsShow = ref<boolean>(false)
107
- const onHideStorageModal = (): void => {
108
- storageModalIsShow.value = false
109
- if (selectedLocation.value === -1)
110
- selectedLocation.value = locationOptions.value[0].value
111
- }
112
- const onChangeStorage = (storage: UI_I_DatastoreTableItem): void => {
113
- locationOptions.value = [
114
- locationOptions.value[0],
115
- { text: storage.name, value: storage.id },
116
- // @ts-ignore
117
- locationOptions.value.at(-1),
118
- ]
119
-
120
- selectedLocation.value = storage.id
121
- emits('change', storage)
122
- addStorage(storage)
123
- onHideStorageModal()
124
- }
125
- const onChangeLocation = (event: UI_I_HTMLSelectElement): void => {
126
- const value = +event.target.value
127
- if (value === -1) {
128
- storageModalIsShow.value = true
129
- return
130
- }
131
-
132
- selectedLocation.value = event.target.value
133
- const storage = storages.value.find((item) => item.id === event.target.value)
134
- storage && emits('change', storage)
135
- }
136
-
137
- const typeError = computed<string>(
138
- () => `disk_devices[${props.index}].location`
139
- )
140
-
141
- const apiError = computed<string>(() => {
142
- return (
143
- props.errorValidationFields?.find(
144
- (message) => message.field === typeError.value
145
- )?.error_message || ''
146
- )
147
- })
148
-
149
- const onRemoveValidationError = (): void => {
150
- emits('remove-error-by-title', typeError.value)
151
- }
152
- </script>
153
-
154
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-new
3
+ v-if="isNewView"
4
+ v-model:selected-location="selectedLocation"
5
+ :index="props.index"
6
+ :datastore="props.datastore"
7
+ :is-datastore-loading="props.isDatastoreLoading"
8
+ :get-datastore-table-func="props.getDatastoreTableFunc"
9
+ :api-error="apiError"
10
+ :location-options="locationOptions"
11
+ :storage-modal-is-show="storageModalIsShow"
12
+ :storage-submit="storageSubmit"
13
+ @change-location="onChangeLocation"
14
+ @change-storage="onChangeStorage"
15
+ @hide-storage-modal="onHideStorageModal"
16
+ @submit-storage-modal="onSubmitStorageModal"
17
+ @remove-validation-error="onRemoveValidationError"
18
+ />
19
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-location-old
20
+ v-else
21
+ v-model:selected-location="selectedLocation"
22
+ :index="props.index"
23
+ :datastore="props.datastore"
24
+ :is-datastore-loading="props.isDatastoreLoading"
25
+ :get-datastore-table-func="props.getDatastoreTableFunc"
26
+ :api-error="apiError"
27
+ :location-options="locationOptions"
28
+ :storage-modal-is-show="storageModalIsShow"
29
+ :storage-submit="storageSubmit"
30
+ @change-location="onChangeLocation"
31
+ @change-storage="onChangeStorage"
32
+ @hide-storage-modal="onHideStorageModal"
33
+ @submit-storage-modal="onSubmitStorageModal"
34
+ @remove-validation-error="onRemoveValidationError"
35
+ />
36
+ </template>
37
+
38
+ <script setup lang="ts">
39
+ import type {
40
+ UI_I_HTMLSelectElement,
41
+ UI_I_Localization,
42
+ } from '~/lib/models/interfaces'
43
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
44
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
45
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
46
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
47
+
48
+ const props = defineProps<{
49
+ location: UI_I_DatastoreTableItem | null
50
+ index: number
51
+ errorValidationFields: UI_I_ErrorValidationField[]
52
+ datastore: UI_I_DatastoreTableItem[]
53
+ isDatastoreLoading: boolean
54
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
55
+ }>()
56
+ const emits = defineEmits<{
57
+ (event: 'change', value: UI_I_DatastoreTableItem): void
58
+ (event: 'remove-error-by-title', value: string): void
59
+ }>()
60
+
61
+ const { $store }: any = useNuxtApp()
62
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
63
+
64
+ const localization = computed<UI_I_Localization>(() => useLocal())
65
+
66
+ const selectedLocation = ref<string>(props.location?.id || '')
67
+
68
+ const storages = ref<UI_I_DatastoreTableItem[]>([])
69
+ const addStorage = (storage: UI_I_DatastoreTableItem): void => {
70
+ const hasStorage = storages.value.some((item) => item.id === storage.id)
71
+ if (hasStorage) {
72
+ return
73
+ }
74
+
75
+ storages.value.push(storage)
76
+ }
77
+ const locationOptions = ref<UI_I_OptionItem[]>([])
78
+
79
+ watch(
80
+ () => props.location,
81
+ (newValue) => {
82
+ if (locationOptions.value.length || !newValue) {
83
+ return
84
+ }
85
+
86
+ locationOptions.value = [
87
+ {
88
+ text: localization.value.common.storeWithVirtualMachine,
89
+ value: newValue.id,
90
+ },
91
+ { text: `${localization.value.common.browse}...`, value: -1 },
92
+ ]
93
+ selectedLocation.value = newValue.id
94
+ storages.value.push(newValue)
95
+ addStorage(newValue)
96
+ },
97
+ { immediate: true }
98
+ )
99
+
100
+ const storageSubmit = ref<null | Function>(null)
101
+ const onSubmitStorageModal = (): void => {
102
+ storageSubmit.value = (_isValid: boolean): void => {
103
+ storageSubmit.value = null
104
+ }
105
+ }
106
+ const storageModalIsShow = ref<boolean>(false)
107
+ const onHideStorageModal = (): void => {
108
+ storageModalIsShow.value = false
109
+ if (selectedLocation.value === -1)
110
+ selectedLocation.value = locationOptions.value[0].value
111
+ }
112
+ const onChangeStorage = (storage: UI_I_DatastoreTableItem): void => {
113
+ locationOptions.value = [
114
+ locationOptions.value[0],
115
+ { text: storage.name, value: storage.id },
116
+ // @ts-ignore
117
+ locationOptions.value.at(-1),
118
+ ]
119
+
120
+ selectedLocation.value = storage.id
121
+ emits('change', storage)
122
+ addStorage(storage)
123
+ onHideStorageModal()
124
+ }
125
+ const onChangeLocation = (event: UI_I_HTMLSelectElement): void => {
126
+ const value = +event.target.value
127
+ if (value === -1) {
128
+ storageModalIsShow.value = true
129
+ return
130
+ }
131
+
132
+ selectedLocation.value = event.target.value
133
+ const storage = storages.value.find((item) => item.id === event.target.value)
134
+ storage && emits('change', storage)
135
+ }
136
+
137
+ const typeError = computed<string>(
138
+ () => `disk_devices[${props.index}].location`
139
+ )
140
+
141
+ const apiError = computed<string>(() => {
142
+ return (
143
+ props.errorValidationFields?.find(
144
+ (message) => message.field === typeError.value
145
+ )?.error_message || ''
146
+ )
147
+ })
148
+
149
+ const onRemoveValidationError = (): void => {
150
+ emits('remove-error-by-title', typeError.value)
151
+ }
152
+ </script>
153
+
154
+ <style scoped lang="scss"></style>