bfg-common 1.5.540 → 1.5.541

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 (124) 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/configuration/backupWindow/BackupWindow.vue +29 -29
  25. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
  26. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
  27. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  28. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
  29. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  30. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  31. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  32. package/components/common/pages/backups/modals/restore/networks/Networks.vue +1 -0
  33. package/components/common/pages/hardwareHealth/tableView/lib/config/sensorTable.ts +1 -1
  34. package/components/common/pages/hardwareHealth/tableView/modal/SensorWarning.vue +1 -1
  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/tooltip/Help.vue +5 -0
  48. package/components/common/treeView/TreeView.vue +52 -52
  49. package/components/common/vm/actions/add/Add.vue +950 -949
  50. package/components/common/vm/actions/add/New.vue +690 -689
  51. package/components/common/vm/actions/add/Old.vue +402 -400
  52. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  53. package/components/common/vm/actions/clone/Clone.vue +809 -808
  54. package/components/common/vm/actions/clone/new/New.vue +457 -454
  55. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -427
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  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/select/compatibility/Old.vue +107 -107
  72. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  73. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  74. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  75. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  76. package/components/common/vm/actions/common/select/storage/Old.vue +125 -132
  77. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -167
  78. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -330
  79. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  80. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  81. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  82. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  83. package/components/common/vm/actions/register/Register.vue +352 -352
  84. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  85. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/Compatibility.vue +35 -31
  86. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/New.vue +99 -98
  87. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/Old.vue +53 -54
  88. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/lib/models/enums.ts +1 -1
  89. package/components/common/wizards/common/compatibility/lib/models/types.ts +1 -0
  90. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -85
  91. package/components/common/wizards/common/steps/computeResource/New.vue +93 -92
  92. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -102
  93. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  94. package/components/common/wizards/common/steps/name/New.vue +221 -221
  95. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  96. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  97. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  98. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  99. package/components/common/wizards/datastore/add/Add.vue +228 -228
  100. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  101. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  102. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -195
  103. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  104. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +1 -1
  105. package/composables/useAppVersion.ts +21 -21
  106. package/composables/useLocal.ts +6 -6
  107. package/composables/useLocalCommon.ts +39 -39
  108. package/package.json +1 -1
  109. package/plugins/console.ts +21 -21
  110. package/plugins/date.ts +233 -233
  111. package/plugins/mouse.ts +21 -21
  112. package/plugins/panelStates.ts +70 -70
  113. package/plugins/text.ts +59 -59
  114. package/public/spice-console/application/clientgui.js +854 -854
  115. package/public/spice-console/application/packetfactory.js +211 -211
  116. package/public/spice-console/application/virtualmouse.js +147 -147
  117. package/public/spice-console/lib/images/bitmap.js +203 -203
  118. package/public/spice-console/network/spicechannel.js +440 -440
  119. package/public/spice-console/process/cursorprocess.js +121 -121
  120. package/public/spice-console/process/inputprocess.js +227 -227
  121. package/public/spice-console/process/mainprocess.js +210 -210
  122. package/public/spice-console/run.js +210 -210
  123. package/store/main/mutations.ts +7 -7
  124. package/store/main/state.ts +7 -7
@@ -1,132 +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
- <div v-if="!props.hideCompatibility" class="compatibility-wrap">
37
- <p class="compatibility">
38
- {{ localization.inventorySummary.compatibility }}
39
- </p>
40
- <div class="compatibility-message flex-align-center">
41
- <template v-if="props.selectedStorage">
42
- <div class="icon-status-ok" />
43
- <span>{{ localization.common.compatibilityChecksSucceeded }}</span>
44
- </template>
45
- <div v-else>
46
- <br />
47
- </div>
48
- </div>
49
- </div>
50
- </div>
51
- </template>
52
-
53
- <script setup lang="ts">
54
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
55
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
56
- import type { UI_I_Localization } from '~/lib/models/interfaces'
57
- import type {
58
- UI_I_ColumnKey,
59
- UI_I_HeadItem,
60
- UI_I_BodyItem,
61
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
62
- import * as table from '~/components/common/vm/actions/common/select/storage/lib/config/config'
63
-
64
- const selectedRow = defineModel<number | null>('selectedRow')
65
- const pagination = defineModel<UI_I_Pagination>('pagination', {
66
- required: true,
67
- })
68
-
69
- const props = withDefaults(
70
- defineProps<{
71
- datastore: UI_I_DatastoreTableItem[]
72
- isDatastoreLoading: boolean
73
- errors: string[]
74
- selectedStorage: UI_I_DatastoreTableItem | null
75
- hideCompatibility?: boolean
76
- }>(),
77
- {
78
- hideCompatibility: undefined,
79
- }
80
- )
81
- const emits = defineEmits<{
82
- (event: 'remove-error'): void
83
- (event: 'change-storage', value: number): void
84
- }>()
85
-
86
- const localization = computed<UI_I_Localization>(() => useLocal())
87
-
88
- const headItems = ref<UI_I_HeadItem[]>(table.headItems(localization.value))
89
- const columnKeys = ref<UI_I_ColumnKey[]>(table.columnKeys(localization.value))
90
- watch(localization, () => {
91
- columnKeys.value = table.columnKeys(localization.value)
92
- })
93
-
94
- const bodyItems = computed<UI_I_BodyItem[][]>(() => {
95
- return table.bodyItems(props.datastore || [], localization.value)
96
- })
97
- </script>
98
-
99
- <style scoped lang="scss">
100
- .select-storage {
101
- flex: 1;
102
- display: flex;
103
- flex-direction: column;
104
-
105
- .table-wrap {
106
- flex: 1;
107
-
108
- .datagrid-cell-icon {
109
- margin-right: 6px;
110
- }
111
-
112
- :deep(.relative) {
113
- height: 100%;
114
-
115
- .datagrid-outer-wrapper {
116
- height: 100%;
117
- }
118
- }
119
- }
120
-
121
- .compatibility-wrap {
122
- padding-top: 10px;
123
-
124
- .compatibility-message {
125
- border: 1px solid #000;
126
- padding-top: 5px;
127
- padding-left: 5px;
128
- overflow: auto;
129
- }
130
- }
131
- }
132
- </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,167 +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
- @remove-error="onRemoveValidationErrors"
15
- @change-storage="changeStorage"
16
- />
17
- <common-vm-actions-common-select-storage-old
18
- v-else
19
- v-model:selected-row="selectedRow"
20
- v-model:pagination="pagination"
21
- :datastore="props.datastore"
22
- :is-datastore-loading="props.isDatastoreLoading"
23
- :errors="errors"
24
- :selected-storage="selectedStorage"
25
- :hide-compatibility="props.hideCompatibility"
26
- @remove-error="onRemoveValidationErrors"
27
- @change-storage="changeStorage"
28
- />
29
- </template>
30
-
31
- <script setup lang="ts">
32
- import type { UI_I_DataTableOptions } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
33
- import type {
34
- UI_I_Pagination,
35
- UI_I_TablePayload,
36
- } from '~/lib/models/table/interfaces'
37
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
38
- import type { UI_I_Localization } from '~/lib/models/interfaces'
39
-
40
- const props = withDefaults(
41
- defineProps<{
42
- storageSubmit: null | Function
43
- datastore: UI_I_DatastoreTableItem[]
44
- isDatastoreLoading: boolean
45
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
46
- storage?: UI_I_DatastoreTableItem
47
- hideCompatibility?: boolean
48
- hideAlert?: boolean
49
- isInWizard?: boolean
50
- tableOptions?: UI_I_DataTableOptions
51
- }>(),
52
- {
53
- storage: undefined,
54
- hideCompatibility: undefined,
55
- hideAlert: undefined,
56
- isInWizard: undefined,
57
- tableOptions: undefined,
58
- }
59
- )
60
- const emits = defineEmits<{
61
- (event: 'submit', value: UI_I_DatastoreTableItem): void
62
- (event: 'change-storage', value: UI_I_DatastoreTableItem): void
63
- (event: 'is-selected-row', value: boolean): void
64
- (event: 'has-errors', value: boolean): void
65
- }>()
66
-
67
- const { $store }: any = useNuxtApp()
68
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
69
-
70
- const localization = computed<UI_I_Localization>(() => useLocal())
71
-
72
- const pagination = ref<UI_I_Pagination>({
73
- page: 1,
74
- pageSize: 100,
75
- })
76
- const getStorage = async (): Promise<void> => {
77
- const payload: UI_I_TablePayload = {
78
- pagination: pagination.value,
79
- sortBy: null,
80
- type: 'datastore',
81
- schema: 'full',
82
- }
83
-
84
- props.getDatastoreTableFunc(payload).then(() => {
85
- selectedRow.value = null
86
- setStorageFromProps()
87
- })
88
- }
89
- getStorage()
90
-
91
- const selectedStorage = ref<UI_I_DatastoreTableItem | null>(null)
92
- const selectedRow = ref<number | null>(null)
93
- const changeStorage = (index: number): void => {
94
- if (!props.datastore) return
95
- selectedStorage.value = props.datastore[index]
96
- selectedRow.value = index
97
- emits('change-storage', selectedStorage.value)
98
- }
99
-
100
- const setStorageFromProps = (): void => {
101
- if (!props.storage) return
102
- props.datastore.forEach((item, index) => {
103
- if (item.id === props.storage.id) changeStorage(index)
104
- })
105
- }
106
- watch(
107
- () => props.storage,
108
- () => {
109
- setStorageFromProps()
110
- },
111
- { immediate: true }
112
- )
113
- watch(
114
- () => props.datastore,
115
- (newValue) => {
116
- const hasSelectedRow: boolean = !!newValue.filter?.(item => item.id === selectedStorage.value?.id).length
117
- if(!hasSelectedRow) {
118
- selectedRow.value = null
119
- selectedStorage.value = null
120
- }
121
- },
122
- { immediate: true }
123
- )
124
- watch(
125
- selectedRow,
126
- (newValue) => {
127
- emits('is-selected-row', typeof newValue === 'number')
128
- },
129
- { immediate: true }
130
- )
131
-
132
- watch(
133
- () => props.storageSubmit,
134
- (newValue) => {
135
- newValue && submit(newValue)
136
- }
137
- )
138
- const submit = (cb: Function): void => {
139
- if (!selectedStorage.value) {
140
- showValidationErrors([
141
- localization.value.common.selectValidDestinationStorage,
142
- ])
143
- cb(false)
144
- return
145
- }
146
-
147
- emits('submit', selectedStorage.value)
148
- cb(true)
149
- }
150
-
151
- const errors = ref<string[]>([])
152
- const showValidationErrors = (arr: string[]): void => {
153
- errors.value = arr
154
- }
155
- const onRemoveValidationErrors = (): void => {
156
- errors.value = []
157
- }
158
- watch(
159
- errors,
160
- (newValue) => {
161
- emits('has-errors', !newValue.length)
162
- },
163
- { immediate: true, deep: true }
164
- )
165
- </script>
166
-
167
- <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>