bfg-common 1.5.541 → 1.5.543

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/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  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/New.vue +8 -2
  25. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  26. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  27. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  28. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  29. package/components/common/pages/backups/modals/restore/Restore.vue +5 -4
  30. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  31. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  32. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  33. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  34. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  35. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  36. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  37. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  38. package/components/common/select/radio/RadioGroup.vue +137 -137
  39. package/components/common/spiceConsole/Drawer.vue +420 -420
  40. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  41. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  42. package/components/common/tools/Actions.vue +207 -207
  43. package/components/common/treeView/TreeView.vue +52 -52
  44. package/components/common/vm/actions/add/Add.vue +950 -950
  45. package/components/common/vm/actions/add/New.vue +690 -690
  46. package/components/common/vm/actions/add/Old.vue +402 -402
  47. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  48. package/components/common/vm/actions/clone/Clone.vue +809 -809
  49. package/components/common/vm/actions/clone/new/New.vue +457 -457
  50. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  51. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  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/newHardDisk/NewHardDisk.vue +427 -427
  55. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  60. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  61. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  62. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  63. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  64. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  65. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  66. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  67. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  68. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  69. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  70. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  71. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  72. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -178
  73. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  74. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  75. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  76. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  77. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  78. package/components/common/vm/actions/register/Register.vue +352 -352
  79. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  80. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  81. package/components/common/wizards/common/compatibility/New.vue +99 -99
  82. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  83. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -86
  84. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  85. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -103
  86. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  87. package/components/common/wizards/common/steps/name/New.vue +221 -221
  88. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  89. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  90. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  91. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  92. package/components/common/wizards/datastore/add/Add.vue +228 -228
  93. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  94. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  95. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -205
  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
@@ -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>