bfg-common 1.5.557 → 1.5.559

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 (115) 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 +6 -1
  7. package/assets/localization/local_en.json +6 -1
  8. package/assets/localization/local_hy.json +6 -1
  9. package/assets/localization/local_kk.json +6 -1
  10. package/assets/localization/local_ru.json +6 -1
  11. package/assets/localization/local_zh.json +6 -1
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/perPage/PerPage.vue +58 -58
  15. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  16. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  17. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  18. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  19. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  20. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  23. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  24. package/components/common/diagramMain/port/Port.vue +580 -580
  25. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  26. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  27. package/components/common/pages/backups/DetailView.vue +52 -52
  28. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  29. package/components/common/pages/backups/modals/Modals.vue +243 -243
  30. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  31. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  32. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  33. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  34. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  35. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  36. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  37. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  38. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  39. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  40. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  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/lib/config/steps.ts +347 -347
  49. package/components/common/vm/actions/clone/Clone.vue +809 -809
  50. package/components/common/vm/actions/clone/new/New.vue +457 -457
  51. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  52. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  53. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  54. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryNew.vue +158 -158
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryOld.vue +155 -155
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -427
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  62. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  63. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  64. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  65. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  66. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  67. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  68. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  69. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  70. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  71. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -178
  72. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  73. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  74. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  75. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  76. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  77. package/components/common/vm/actions/register/Register.vue +352 -352
  78. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  79. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  80. package/components/common/wizards/common/compatibility/New.vue +99 -99
  81. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  82. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -86
  83. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  84. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -103
  85. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  86. package/components/common/wizards/common/steps/name/New.vue +221 -221
  87. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  88. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  89. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  90. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  91. package/components/common/wizards/datastore/add/Add.vue +228 -228
  92. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  93. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  94. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -205
  95. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  96. package/composables/useAppVersion.ts +21 -21
  97. package/composables/useLocal.ts +6 -6
  98. package/composables/useLocalCommon.ts +39 -39
  99. package/package.json +1 -1
  100. package/plugins/console.ts +21 -21
  101. package/plugins/date.ts +233 -233
  102. package/plugins/mouse.ts +21 -21
  103. package/plugins/panelStates.ts +70 -70
  104. package/plugins/text.ts +59 -59
  105. package/public/spice-console/application/clientgui.js +854 -854
  106. package/public/spice-console/application/packetfactory.js +211 -211
  107. package/public/spice-console/application/virtualmouse.js +147 -147
  108. package/public/spice-console/lib/images/bitmap.js +203 -203
  109. package/public/spice-console/network/spicechannel.js +440 -440
  110. package/public/spice-console/process/cursorprocess.js +121 -121
  111. package/public/spice-console/process/inputprocess.js +227 -227
  112. package/public/spice-console/process/mainprocess.js +210 -210
  113. package/public/spice-console/run.js +210 -210
  114. package/store/main/mutations.ts +7 -7
  115. package/store/main/state.ts +7 -7
@@ -1,125 +1,125 @@
1
- <template>
2
- <div class="select-storage">
3
- <atoms-alert
4
- v-show="props.errors.length"
5
- :items="props.errors"
6
- status="alert-danger"
7
- test-id="storage-alert"
8
- @remove="emits('remove-error')"
9
- />
10
- <div class="table-wrap">
11
- <atoms-table-data-grid
12
- v-model:selected-row="selectedRow"
13
- v-model:column-keys="columnKeys"
14
- v-model:page-size="pagination.pageSize"
15
- v-model:page="pagination.page"
16
- :head-items="headItems"
17
- :body-items="bodyItems"
18
- :total-items="bodyItems.length"
19
- :total-pages="1"
20
- :loading="props.isDatastoreLoading"
21
- type="radio"
22
- test-id="storage-table"
23
- server-off
24
- hide-page-size
25
- @change="emits('change-storage', $event)"
26
- >
27
- <template #icon="{ item }">
28
- <span :class="['datagrid-cell-icon', item.data]" />
29
- <span class="text-ellipsis">
30
- {{ item.text }}
31
- </span>
32
- </template>
33
- </atoms-table-data-grid>
34
- </div>
35
-
36
- <common-wizards-common-compatibility
37
- v-if="!props.hideCompatibility"
38
- :status="props.compatibility[0]"
39
- :text="props.compatibility[1]"
40
- />
41
- </div>
42
- </template>
43
-
44
- <script setup lang="ts">
45
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
46
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
47
- import type { UI_I_Localization } from '~/lib/models/interfaces'
48
- import type {
49
- UI_I_ColumnKey,
50
- UI_I_HeadItem,
51
- UI_I_BodyItem,
52
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
53
- import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
54
- import * as table from '~/components/common/vm/actions/common/select/storage/lib/config/config'
55
-
56
- const selectedRow = defineModel<number | null>('selectedRow')
57
- const pagination = defineModel<UI_I_Pagination>('pagination', {
58
- required: true,
59
- })
60
-
61
- const props = withDefaults(
62
- defineProps<{
63
- datastore: UI_I_DatastoreTableItem[]
64
- isDatastoreLoading: boolean
65
- errors: string[]
66
- selectedStorage: UI_I_DatastoreTableItem | null
67
- compatibility: [UI_T_CompatibilityStatus, string]
68
- hideCompatibility?: boolean
69
- }>(),
70
- {
71
- hideCompatibility: undefined,
72
- }
73
- )
74
- const emits = defineEmits<{
75
- (event: 'remove-error'): void
76
- (event: 'change-storage', value: number): void
77
- }>()
78
-
79
- const localization = computed<UI_I_Localization>(() => useLocal())
80
-
81
- const headItems = ref<UI_I_HeadItem[]>(table.headItems(localization.value))
82
- const columnKeys = ref<UI_I_ColumnKey[]>(table.columnKeys(localization.value))
83
- watch(localization, () => {
84
- columnKeys.value = table.columnKeys(localization.value)
85
- })
86
-
87
- const bodyItems = computed<UI_I_BodyItem[][]>(() => {
88
- return table.bodyItems(props.datastore || [], localization.value)
89
- })
90
- </script>
91
-
92
- <style scoped lang="scss">
93
- .select-storage {
94
- flex: 1;
95
- display: flex;
96
- flex-direction: column;
97
-
98
- .table-wrap {
99
- flex: 1;
100
-
101
- .datagrid-cell-icon {
102
- margin-right: 6px;
103
- }
104
-
105
- :deep(.relative) {
106
- height: 100%;
107
-
108
- .datagrid-outer-wrapper {
109
- height: 100%;
110
- }
111
- }
112
- }
113
-
114
- .compatibility-wrap {
115
- padding-top: 10px;
116
-
117
- .compatibility-message {
118
- border: 1px solid #000;
119
- padding-top: 5px;
120
- padding-left: 5px;
121
- overflow: auto;
122
- }
123
- }
124
- }
125
- </style>
1
+ <template>
2
+ <div class="select-storage">
3
+ <atoms-alert
4
+ v-show="props.errors.length"
5
+ :items="props.errors"
6
+ status="alert-danger"
7
+ test-id="storage-alert"
8
+ @remove="emits('remove-error')"
9
+ />
10
+ <div class="table-wrap">
11
+ <atoms-table-data-grid
12
+ v-model:selected-row="selectedRow"
13
+ v-model:column-keys="columnKeys"
14
+ v-model:page-size="pagination.pageSize"
15
+ v-model:page="pagination.page"
16
+ :head-items="headItems"
17
+ :body-items="bodyItems"
18
+ :total-items="bodyItems.length"
19
+ :total-pages="1"
20
+ :loading="props.isDatastoreLoading"
21
+ type="radio"
22
+ test-id="storage-table"
23
+ server-off
24
+ hide-page-size
25
+ @change="emits('change-storage', $event)"
26
+ >
27
+ <template #icon="{ item }">
28
+ <span :class="['datagrid-cell-icon', item.data]" />
29
+ <span class="text-ellipsis">
30
+ {{ item.text }}
31
+ </span>
32
+ </template>
33
+ </atoms-table-data-grid>
34
+ </div>
35
+
36
+ <common-wizards-common-compatibility
37
+ v-if="!props.hideCompatibility"
38
+ :status="props.compatibility[0]"
39
+ :text="props.compatibility[1]"
40
+ />
41
+ </div>
42
+ </template>
43
+
44
+ <script setup lang="ts">
45
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
46
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
47
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
48
+ import type {
49
+ UI_I_ColumnKey,
50
+ UI_I_HeadItem,
51
+ UI_I_BodyItem,
52
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
53
+ import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
54
+ import * as table from '~/components/common/vm/actions/common/select/storage/lib/config/config'
55
+
56
+ const selectedRow = defineModel<number | null>('selectedRow')
57
+ const pagination = defineModel<UI_I_Pagination>('pagination', {
58
+ required: true,
59
+ })
60
+
61
+ const props = withDefaults(
62
+ defineProps<{
63
+ datastore: UI_I_DatastoreTableItem[]
64
+ isDatastoreLoading: boolean
65
+ errors: string[]
66
+ selectedStorage: UI_I_DatastoreTableItem | null
67
+ compatibility: [UI_T_CompatibilityStatus, string]
68
+ hideCompatibility?: boolean
69
+ }>(),
70
+ {
71
+ hideCompatibility: undefined,
72
+ }
73
+ )
74
+ const emits = defineEmits<{
75
+ (event: 'remove-error'): void
76
+ (event: 'change-storage', value: number): void
77
+ }>()
78
+
79
+ const localization = computed<UI_I_Localization>(() => useLocal())
80
+
81
+ const headItems = ref<UI_I_HeadItem[]>(table.headItems(localization.value))
82
+ const columnKeys = ref<UI_I_ColumnKey[]>(table.columnKeys(localization.value))
83
+ watch(localization, () => {
84
+ columnKeys.value = table.columnKeys(localization.value)
85
+ })
86
+
87
+ const bodyItems = computed<UI_I_BodyItem[][]>(() => {
88
+ return table.bodyItems(props.datastore || [], localization.value)
89
+ })
90
+ </script>
91
+
92
+ <style scoped lang="scss">
93
+ .select-storage {
94
+ flex: 1;
95
+ display: flex;
96
+ flex-direction: column;
97
+
98
+ .table-wrap {
99
+ flex: 1;
100
+
101
+ .datagrid-cell-icon {
102
+ margin-right: 6px;
103
+ }
104
+
105
+ :deep(.relative) {
106
+ height: 100%;
107
+
108
+ .datagrid-outer-wrapper {
109
+ height: 100%;
110
+ }
111
+ }
112
+ }
113
+
114
+ .compatibility-wrap {
115
+ padding-top: 10px;
116
+
117
+ .compatibility-message {
118
+ border: 1px solid #000;
119
+ padding-top: 5px;
120
+ padding-left: 5px;
121
+ overflow: auto;
122
+ }
123
+ }
124
+ }
125
+ </style>
@@ -1,178 +1,178 @@
1
- <template>
2
- <common-vm-actions-common-select-storage-new
3
- v-if="isNewView"
4
- v-model:selected-row="selectedRow"
5
- v-model:pagination="pagination"
6
- :datastore="props.datastore"
7
- :is-datastore-loading="props.isDatastoreLoading"
8
- :errors="errors"
9
- :selected-storage="selectedStorage"
10
- :hide-compatibility="props.hideCompatibility"
11
- :hide-alert="props.hideAlert"
12
- :is-in-wizard="props.isInWizard"
13
- :table-options="props.tableOptions"
14
- :compatibility="compatibility"
15
- @remove-error="onRemoveValidationErrors"
16
- @change-storage="changeStorage"
17
- />
18
- <common-vm-actions-common-select-storage-old
19
- v-else
20
- v-model:selected-row="selectedRow"
21
- v-model:pagination="pagination"
22
- :datastore="props.datastore"
23
- :is-datastore-loading="props.isDatastoreLoading"
24
- :errors="errors"
25
- :selected-storage="selectedStorage"
26
- :hide-compatibility="props.hideCompatibility"
27
- :compatibility="compatibility"
28
- @remove-error="onRemoveValidationErrors"
29
- @change-storage="changeStorage"
30
- />
31
- </template>
32
-
33
- <script setup lang="ts">
34
- import type { UI_I_DataTableOptions } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
35
- import type {
36
- UI_I_Pagination,
37
- UI_I_TablePayload,
38
- } from '~/lib/models/table/interfaces'
39
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
40
- import type { UI_I_Localization } from '~/lib/models/interfaces'
41
- import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
42
-
43
- const props = withDefaults(
44
- defineProps<{
45
- storageSubmit: null | Function
46
- datastore: UI_I_DatastoreTableItem[]
47
- isDatastoreLoading: boolean
48
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
49
- storage?: UI_I_DatastoreTableItem
50
- hideCompatibility?: boolean
51
- hideAlert?: boolean
52
- isInWizard?: boolean
53
- tableOptions?: UI_I_DataTableOptions
54
- }>(),
55
- {
56
- storage: undefined,
57
- hideCompatibility: undefined,
58
- hideAlert: undefined,
59
- isInWizard: undefined,
60
- tableOptions: undefined,
61
- }
62
- )
63
- const emits = defineEmits<{
64
- (event: 'submit', value: UI_I_DatastoreTableItem): void
65
- (event: 'change-storage', value: UI_I_DatastoreTableItem): void
66
- (event: 'is-selected-row', value: boolean): void
67
- (event: 'has-errors', value: boolean): void
68
- }>()
69
-
70
- const { $store }: any = useNuxtApp()
71
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
72
-
73
- const localization = computed<UI_I_Localization>(() => useLocal())
74
-
75
- const pagination = ref<UI_I_Pagination>({
76
- page: 1,
77
- pageSize: 100,
78
- })
79
- const getStorage = async (): Promise<void> => {
80
- const payload: UI_I_TablePayload = {
81
- pagination: pagination.value,
82
- sortBy: null,
83
- type: 'datastore',
84
- schema: 'full',
85
- }
86
-
87
- props.getDatastoreTableFunc(payload).then(() => {
88
- selectedRow.value = null
89
- setStorageFromProps()
90
- })
91
- }
92
- getStorage()
93
-
94
- const selectedStorage = ref<UI_I_DatastoreTableItem | null>(null)
95
- const selectedRow = ref<number | null>(null)
96
- const changeStorage = (index: number): void => {
97
- if (!props.datastore) return
98
- selectedStorage.value = props.datastore[index]
99
- selectedRow.value = index
100
- emits('change-storage', selectedStorage.value)
101
- }
102
-
103
- const setStorageFromProps = (): void => {
104
- if (!props.storage) return
105
- props.datastore.forEach((item, index) => {
106
- if (item.id === props.storage.id) changeStorage(index)
107
- })
108
- }
109
- watch(
110
- () => props.storage,
111
- () => {
112
- setStorageFromProps()
113
- },
114
- { immediate: true }
115
- )
116
- watch(
117
- () => props.datastore,
118
- (newValue) => {
119
- const hasSelectedRow: boolean = !!newValue.filter?.(
120
- (item) => item.id === selectedStorage.value?.id
121
- ).length
122
- if (!hasSelectedRow) {
123
- selectedRow.value = null
124
- selectedStorage.value = null
125
- }
126
- },
127
- { immediate: true }
128
- )
129
- watch(
130
- selectedRow,
131
- (newValue) => {
132
- emits('is-selected-row', typeof newValue === 'number')
133
- },
134
- { immediate: true }
135
- )
136
-
137
- watch(
138
- () => props.storageSubmit,
139
- (newValue) => {
140
- newValue && submit(newValue)
141
- }
142
- )
143
- const submit = (cb: Function): void => {
144
- if (!selectedStorage.value) {
145
- showValidationErrors([
146
- localization.value.common.selectValidDestinationStorage,
147
- ])
148
- cb(false)
149
- return
150
- }
151
-
152
- emits('submit', selectedStorage.value)
153
- cb(true)
154
- }
155
-
156
- const compatibility = computed<[UI_T_CompatibilityStatus, string]>(() => {
157
- if (!selectedStorage.value)
158
- return ['none', localization.value.vmWizard.noStorageSelected]
159
- return ['success', localization.value.common.compatibilityChecksSucceeded]
160
- })
161
-
162
- const errors = ref<string[]>([])
163
- const showValidationErrors = (arr: string[]): void => {
164
- errors.value = arr
165
- }
166
- const onRemoveValidationErrors = (): void => {
167
- errors.value = []
168
- }
169
- watch(
170
- errors,
171
- (newValue) => {
172
- emits('has-errors', !newValue.length)
173
- },
174
- { immediate: true, deep: true }
175
- )
176
- </script>
177
-
178
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-select-storage-new
3
+ v-if="isNewView"
4
+ v-model:selected-row="selectedRow"
5
+ v-model:pagination="pagination"
6
+ :datastore="props.datastore"
7
+ :is-datastore-loading="props.isDatastoreLoading"
8
+ :errors="errors"
9
+ :selected-storage="selectedStorage"
10
+ :hide-compatibility="props.hideCompatibility"
11
+ :hide-alert="props.hideAlert"
12
+ :is-in-wizard="props.isInWizard"
13
+ :table-options="props.tableOptions"
14
+ :compatibility="compatibility"
15
+ @remove-error="onRemoveValidationErrors"
16
+ @change-storage="changeStorage"
17
+ />
18
+ <common-vm-actions-common-select-storage-old
19
+ v-else
20
+ v-model:selected-row="selectedRow"
21
+ v-model:pagination="pagination"
22
+ :datastore="props.datastore"
23
+ :is-datastore-loading="props.isDatastoreLoading"
24
+ :errors="errors"
25
+ :selected-storage="selectedStorage"
26
+ :hide-compatibility="props.hideCompatibility"
27
+ :compatibility="compatibility"
28
+ @remove-error="onRemoveValidationErrors"
29
+ @change-storage="changeStorage"
30
+ />
31
+ </template>
32
+
33
+ <script setup lang="ts">
34
+ import type { UI_I_DataTableOptions } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
35
+ import type {
36
+ UI_I_Pagination,
37
+ UI_I_TablePayload,
38
+ } from '~/lib/models/table/interfaces'
39
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
40
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
41
+ import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
42
+
43
+ const props = withDefaults(
44
+ defineProps<{
45
+ storageSubmit: null | Function
46
+ datastore: UI_I_DatastoreTableItem[]
47
+ isDatastoreLoading: boolean
48
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
49
+ storage?: UI_I_DatastoreTableItem
50
+ hideCompatibility?: boolean
51
+ hideAlert?: boolean
52
+ isInWizard?: boolean
53
+ tableOptions?: UI_I_DataTableOptions
54
+ }>(),
55
+ {
56
+ storage: undefined,
57
+ hideCompatibility: undefined,
58
+ hideAlert: undefined,
59
+ isInWizard: undefined,
60
+ tableOptions: undefined,
61
+ }
62
+ )
63
+ const emits = defineEmits<{
64
+ (event: 'submit', value: UI_I_DatastoreTableItem): void
65
+ (event: 'change-storage', value: UI_I_DatastoreTableItem): void
66
+ (event: 'is-selected-row', value: boolean): void
67
+ (event: 'has-errors', value: boolean): void
68
+ }>()
69
+
70
+ const { $store }: any = useNuxtApp()
71
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
72
+
73
+ const localization = computed<UI_I_Localization>(() => useLocal())
74
+
75
+ const pagination = ref<UI_I_Pagination>({
76
+ page: 1,
77
+ pageSize: 100,
78
+ })
79
+ const getStorage = async (): Promise<void> => {
80
+ const payload: UI_I_TablePayload = {
81
+ pagination: pagination.value,
82
+ sortBy: null,
83
+ type: 'datastore',
84
+ schema: 'full',
85
+ }
86
+
87
+ props.getDatastoreTableFunc(payload).then(() => {
88
+ selectedRow.value = null
89
+ setStorageFromProps()
90
+ })
91
+ }
92
+ getStorage()
93
+
94
+ const selectedStorage = ref<UI_I_DatastoreTableItem | null>(null)
95
+ const selectedRow = ref<number | null>(null)
96
+ const changeStorage = (index: number): void => {
97
+ if (!props.datastore) return
98
+ selectedStorage.value = props.datastore[index]
99
+ selectedRow.value = index
100
+ emits('change-storage', selectedStorage.value)
101
+ }
102
+
103
+ const setStorageFromProps = (): void => {
104
+ if (!props.storage) return
105
+ props.datastore.forEach((item, index) => {
106
+ if (item.id === props.storage.id) changeStorage(index)
107
+ })
108
+ }
109
+ watch(
110
+ () => props.storage,
111
+ () => {
112
+ setStorageFromProps()
113
+ },
114
+ { immediate: true }
115
+ )
116
+ watch(
117
+ () => props.datastore,
118
+ (newValue) => {
119
+ const hasSelectedRow: boolean = !!newValue.filter?.(
120
+ (item) => item.id === selectedStorage.value?.id
121
+ ).length
122
+ if (!hasSelectedRow) {
123
+ selectedRow.value = null
124
+ selectedStorage.value = null
125
+ }
126
+ },
127
+ { immediate: true }
128
+ )
129
+ watch(
130
+ selectedRow,
131
+ (newValue) => {
132
+ emits('is-selected-row', typeof newValue === 'number')
133
+ },
134
+ { immediate: true }
135
+ )
136
+
137
+ watch(
138
+ () => props.storageSubmit,
139
+ (newValue) => {
140
+ newValue && submit(newValue)
141
+ }
142
+ )
143
+ const submit = (cb: Function): void => {
144
+ if (!selectedStorage.value) {
145
+ showValidationErrors([
146
+ localization.value.common.selectValidDestinationStorage,
147
+ ])
148
+ cb(false)
149
+ return
150
+ }
151
+
152
+ emits('submit', selectedStorage.value)
153
+ cb(true)
154
+ }
155
+
156
+ const compatibility = computed<[UI_T_CompatibilityStatus, string]>(() => {
157
+ if (!selectedStorage.value)
158
+ return ['none', localization.value.vmWizard.noStorageSelected]
159
+ return ['success', localization.value.common.compatibilityChecksSucceeded]
160
+ })
161
+
162
+ const errors = ref<string[]>([])
163
+ const showValidationErrors = (arr: string[]): void => {
164
+ errors.value = arr
165
+ }
166
+ const onRemoveValidationErrors = (): void => {
167
+ errors.value = []
168
+ }
169
+ watch(
170
+ errors,
171
+ (newValue) => {
172
+ emits('has-errors', !newValue.length)
173
+ },
174
+ { immediate: true, deep: true }
175
+ )
176
+ </script>
177
+
178
+ <style scoped lang="scss"></style>