bfg-common 1.5.683 → 1.5.684

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.
@@ -118,12 +118,6 @@
118
118
  emits('remove-hard-disk', [props.hardDisksIndex[key], item])
119
119
  "
120
120
  @roll-back="emits('roll-back-hard-disk', props.hardDisksIndex[key])"
121
- @send-data="
122
- emits('send-data-new-hard-disk-method', [
123
- $event,
124
- props.hardDisksIndex[key],
125
- ])
126
- "
127
121
  @invalid="
128
122
  emits('set-invalid-hard-disk', [
129
123
  $event,
@@ -267,10 +261,15 @@
267
261
  </div>
268
262
  <template v-if="props.passthroughDevices || props.mediatedDevices">
269
263
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device
270
- v-for="(item, key) in props.pciDevices"
264
+ v-for="(item, key) in model.passthrough_pci_devices"
265
+ v-model:address="item.address"
266
+ v-model:vendor_name="item.vendor_name"
267
+ v-model:class_name="item.class_name"
268
+ v-model:device_name="item.device_name"
269
+ v-model:mediated_device="item.mediated_device"
270
+ v-model:mediated_device_uuid="item.mediated_device_uuid"
271
271
  :key="props.pciDevicesIndex[key]"
272
272
  :index="props.pciDevicesIndex[key]"
273
- :pci-device="item"
274
273
  :error-validation-fields="props.errorValidationFields"
275
274
  :passthrough-devices="props.passthroughDevices"
276
275
  :mediated-devices="props.mediatedDevices"
@@ -278,12 +277,6 @@
278
277
  :is-edit="props.isEdit"
279
278
  :state="props.state"
280
279
  @remove="emits('remove-pci-device', props.pciDevicesIndex[key])"
281
- @send-data="
282
- emits('send-data-pci-devices-method', [
283
- $event,
284
- props.pciDevicesIndex[key],
285
- ])
286
- "
287
280
  @invalid="
288
281
  emits('set-invalid-pci-device', [
289
282
  $event,
@@ -399,7 +392,6 @@ const props = withDefaults(
399
392
  state?: string | number
400
393
  // hardDisks?: UI_I_SendDataNewHardDisk[] | null
401
394
  videoCard?: UI_I_SendDataVideoCard
402
- pciDevices?: UI_I_SendDataNewPciDevice[]
403
395
  // cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
404
396
  guestMachineType?: UI_I_OptionItem | null
405
397
  passthroughDevices?: UI_I_PciDevice[]
@@ -412,7 +404,6 @@ const props = withDefaults(
412
404
  cpu: undefined,
413
405
  state: undefined,
414
406
  videoCard: undefined,
415
- pciDevices: undefined,
416
407
  guestMachineType: undefined,
417
408
  passthroughDevices: undefined,
418
409
  mediatedDevices: undefined,
@@ -443,14 +434,6 @@ const emits = defineEmits<{
443
434
  (event: 'roll-back-cd-dvd-drive', value: number): void
444
435
  (event: 'set-invalid-pci-device', value: [boolean, number]): void
445
436
  (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
446
- (
447
- event: 'send-data-pci-devices-method',
448
- value: [UI_I_SendDataNewPciDevice, number]
449
- ): void
450
- (
451
- event: 'send-data-new-hard-disk-method',
452
- value: [UI_I_SendDataNewHardDisk, number]
453
- ): void
454
437
  (
455
438
  event: 'send-data-new-cd-dvd-drive-method',
456
439
  value: [UI_I_SendDataNewCdDvdDrive, number]
@@ -475,7 +458,7 @@ const deviceCount = computed<number>(
475
458
  // (props.pciDevices?.length || 0) +
476
459
  (model.value.disk_devices?.length || 0) +
477
460
  (model.value.network_devices?.length || 0) +
478
- (props.pciDevices?.length || 0) +
461
+ (model.value.passthrough_pci_devices?.length || 0) +
479
462
  6
480
463
  )
481
464
  const deviceCountText = computed<string>(() =>
@@ -98,12 +98,6 @@
98
98
  emits('remove-hard-disk', [props.hardDisksIndex[key], item])
99
99
  "
100
100
  @roll-back="emits('roll-back-hard-disk', props.hardDisksIndex[key])"
101
- @send-data="
102
- emits('send-data-new-hard-disk-method', [
103
- $event,
104
- props.hardDisksIndex[key],
105
- ])
106
- "
107
101
  @invalid="
108
102
  emits('set-invalid-hard-disk', [
109
103
  $event,
@@ -247,10 +241,15 @@
247
241
  </div>
248
242
  <template v-if="props.passthroughDevices || props.mediatedDevices">
249
243
  <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device
250
- v-for="(item, key) in props.pciDevices"
244
+ v-for="(item, key) in model.passthrough_pci_devices"
245
+ v-model:address="item.address"
246
+ v-model:vendor-name="item.vendor_name"
247
+ v-model:class-name="item.class_name"
248
+ v-model:device-name="item.device_name"
249
+ v-model:mediated-device="item.mediated_device"
250
+ v-model:mediated-device-uuid="item.mediated_device_uuid"
251
251
  :key="props.pciDevicesIndex[key]"
252
252
  :index="props.pciDevicesIndex[key]"
253
- :pci-device="item"
254
253
  :error-validation-fields="props.errorValidationFields"
255
254
  :passthrough-devices="props.passthroughDevices"
256
255
  :mediated-devices="props.mediatedDevices"
@@ -258,12 +257,6 @@
258
257
  :is-edit="props.isEdit"
259
258
  :state="props.state"
260
259
  @remove="emits('remove-pci-device', props.pciDevicesIndex[key])"
261
- @send-data="
262
- emits('send-data-pci-devices-method', [
263
- $event,
264
- props.pciDevicesIndex[key],
265
- ])
266
- "
267
260
  @invalid="
268
261
  emits('set-invalid-pci-device', [
269
262
  $event,
@@ -373,7 +366,6 @@ const props = withDefaults(
373
366
  cpu?: API_UI_I_VmEditCpu
374
367
  state?: string | number
375
368
  videoCard?: UI_I_SendDataVideoCard
376
- pciDevices?: UI_I_SendDataNewPciDevice[]
377
369
  guestMachineType?: UI_I_OptionItem | null
378
370
  passthroughDevices?: UI_I_PciDevice[]
379
371
  mediatedDevices?: UI_I_MediatedDevice[]
@@ -384,7 +376,6 @@ const props = withDefaults(
384
376
  cpu: undefined,
385
377
  state: undefined,
386
378
  videoCard: undefined,
387
- pciDevices: undefined,
388
379
  guestMachineType: undefined,
389
380
  passthroughDevices: undefined,
390
381
  mediatedDevices: undefined,
@@ -414,14 +405,6 @@ const emits = defineEmits<{
414
405
  (event: 'roll-back-cd-dvd-drive', value: number): void
415
406
  (event: 'set-invalid-pci-device', value: [boolean, number]): void
416
407
  (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
417
- (
418
- event: 'send-data-pci-devices-method',
419
- value: [UI_I_SendDataNewPciDevice, number]
420
- ): void
421
- (
422
- event: 'send-data-new-hard-disk-method',
423
- value: [UI_I_SendDataNewHardDisk, number]
424
- ): void
425
408
  (
426
409
  event: 'send-data-new-cd-dvd-drive-method',
427
410
  value: [UI_I_SendDataNewCdDvdDrive, number]
@@ -30,7 +30,6 @@
30
30
  :get-datastore-table-func="getDatastoreTableFunc"
31
31
  :state="state"
32
32
  :video-card="videoCard"
33
- :pci-devices="pciDevicesLocal"
34
33
  :guest-machine-type="guestMachineType"
35
34
  :passthrough-devices="passthroughDevices"
36
35
  :mediated-devices="mediatedDevices"
@@ -56,7 +55,6 @@
56
55
  @roll-back-cd-dvd-drive="onRollBackCdDvdDrive"
57
56
  @set-invalid-pci-device="onSetInvalidPciDevice(...$event)"
58
57
  @get-active-device-child="emits('get-active-device-child', $event)"
59
- @send-data-pci-devices-method="onSendDataPciDevicesMethod(...$event)"
60
58
  @send-data-new-hard-disk-method="onSendDataNewHardDiskMethod(...$event)"
61
59
  @send-data-new-cd-dvd-drive-method="sendDataNewCdDvdDriveMethod(...$event)"
62
60
  />
@@ -119,7 +117,7 @@ const props = withDefaults(
119
117
  hardDisks?: UI_I_SendDataNewHardDisk[] | null
120
118
  cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
121
119
  videoCard?: UI_I_SendDataVideoCard
122
- pciDevices?: UI_I_SendDataNewPciDevice[]
120
+ // pciDevices?: UI_I_SendDataNewPciDevice[]
123
121
  passthroughDevices?: UI_I_PciDevice[]
124
122
  mediatedDevices?: UI_I_MediatedDevice[]
125
123
  guestMachineType?: UI_I_OptionItem | null
@@ -132,7 +130,7 @@ const props = withDefaults(
132
130
  hardDisks: undefined,
133
131
  cdDvdDrives: undefined,
134
132
  videoCard: undefined,
135
- pciDevices: undefined,
133
+ // pciDevices: undefined,
136
134
  passthroughDevices: undefined,
137
135
  mediatedDevices: undefined,
138
136
  guestMachineType: undefined,
@@ -221,10 +219,12 @@ if (!model.value.disk_devices?.length) {
221
219
  // )
222
220
 
223
221
  const getDisksSize = (): number => {
224
- return model.value.disk_devices.reduce(
225
- (acum, disk) => (acum += disk.size || 0),
226
- 0
227
- ) || 0
222
+ return (
223
+ model.value.disk_devices.reduce(
224
+ (acum, disk) => (acum += disk.size || 0),
225
+ 0
226
+ ) || 0
227
+ )
228
228
  }
229
229
  const initialDisksSize = getDisksSize()
230
230
  const storageFree = computed<number>(() => {
@@ -518,30 +518,46 @@ const defaultPciDevice: UI_I_SendDataNewPciDevice = {
518
518
  }
519
519
  const pciDevicesIndex = ref<number[]>([0])
520
520
  const pciDevicesType = ref<('new' | 'edit' | 'removed')[]>(['new'])
521
- const pciDevicesLocal = ref<UI_I_SendDataNewPciDevice[]>([])
522
- watch(
523
- () => props.pciDevices,
524
- (newValue) => {
525
- if ((!props.isEdit && !props.isClone) || !newValue) return
521
+ // const pciDevicesLocal = ref<UI_I_SendDataNewPciDevice[]>([])
522
+ if (!model.value.passthrough_pci_devices?.length) {
523
+ pciDevicesIndex.value = []
524
+ pciDevicesType.value = []
525
+ } else {
526
+ model.value.passthrough_pci_devices.forEach((_disk, _index, array) => {
527
+ if (!props.isEdit && !props.isClone) return
526
528
 
527
- const count = newValue?.length || 0
529
+ const count = array.length
528
530
  pciDevicesIndex.value = [...Array(count).keys()]
529
- pciDevicesLocal.value = newValue || []
530
531
  if (props.isEdit) {
531
532
  pciDevicesType.value = Array(count).fill('edit')
532
533
  } else if (props.isClone) {
533
- pciDevicesType.value = Array(count).fill('new')
534
+ pciDevicesType.value = Array(count).fill('clone') // before been new
534
535
  }
535
- },
536
- { immediate: true }
537
- )
536
+ })
537
+ }
538
+ // watch(
539
+ // () => props.pciDevices,
540
+ // (newValue) => {
541
+ // if ((!props.isEdit && !props.isClone) || !newValue) return
542
+ //
543
+ // const count = newValue?.length || 0
544
+ // pciDevicesIndex.value = [...Array(count).keys()]
545
+ // pciDevicesLocal.value = newValue || []
546
+ // if (props.isEdit) {
547
+ // pciDevicesType.value = Array(count).fill('edit')
548
+ // } else if (props.isClone) {
549
+ // pciDevicesType.value = Array(count).fill('new')
550
+ // }
551
+ // },
552
+ // { immediate: true }
553
+ // )
538
554
 
539
555
  const addPciDevice = (): void => {
540
556
  const newIndex = (pciDevicesIndex.value.at(-1) ?? -1) + 1
541
557
  pciDevicesIndex.value.push(newIndex)
542
558
  pciDevicesType.value.push('new')
543
559
 
544
- pciDevicesLocal.value.push(useDeepCopy(defaultPciDevice))
560
+ // pciDevicesLocal.value.push(useDeepCopy(defaultPciDevice))
545
561
  model.value.passthrough_pci_devices.push(useDeepCopy(defaultPciDevice))
546
562
  }
547
563
  const onRemovePciDevice = (index: number): void => {
@@ -555,11 +571,11 @@ const onRemovePciDevice = (index: number): void => {
555
571
  model.value.passthrough_pci_devices.filter((_pciDevice, key: number) => {
556
572
  return removeIndex !== key
557
573
  })
558
- pciDevicesLocal.value = pciDevicesLocal.value.filter(
559
- (_pciDevice, key: number) => {
560
- return removeIndex !== key
561
- }
562
- )
574
+ // pciDevicesLocal.value = pciDevicesLocal.value.filter(
575
+ // (_pciDevice, key: number) => {
576
+ // return removeIndex !== key
577
+ // }
578
+ // )
563
579
 
564
580
  delete newPciDeviceInvalidKeys.value[index]
565
581
  }
@@ -608,14 +624,6 @@ const sendDataNewCdDvdDriveMethod = (
608
624
  model.value.disk_devices[cdromIndexStart + index]?.boot_order || 0,
609
625
  }
610
626
  }
611
- const onSendDataPciDevicesMethod = (
612
- data: UI_I_SendDataNewPciDevice,
613
- index: number
614
- ): void => {
615
- model.value.passthrough_pci_devices[index] = {
616
- ...data,
617
- }
618
- }
619
627
 
620
628
  const onSetInvalidHardDisk = (invalid: boolean, index: number): void => {
621
629
  newHardDiskInvalidKeys.value[index] = invalid
@@ -1,199 +1,253 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-model:selected-type="selectedType"
5
- v-model:direct-path-io="directPathIo"
6
- v-model:dynamic-direct-path-io="dynamicDirectPathIo"
7
- v-model:nvidia-grid-profile="nvidiaGridProfile"
8
- :index="props.index"
9
- :passthrough-devices="props.passthroughDevices"
10
- :mediated-devices="props.mediatedDevices"
11
- :type="props.type"
12
- :is-removable="isRemovable"
13
- :label="label"
14
- :selected-label="selectedLabel"
15
- :pci-device-type-options="pciDeviceTypeOptions"
16
- @remove="emits('remove')"
17
- />
18
- </template>
19
-
20
- <script setup lang="ts">
21
- import type { UI_I_Localization } from '~/lib/models/interfaces'
22
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
23
- import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
24
- import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
25
- import type {
26
- UI_I_MediatedDevice,
27
- UI_I_PciDevice,
28
- } from '~/lib/models/store/vm/interfaces'
29
- import type { UI_I_Option } from '~/components/atoms/select/lib/models/interfaces'
30
- import { pciDeviceTypeOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
31
-
32
- const props = withDefaults(
33
- defineProps<{
34
- index: number
35
- pciDevice: UI_I_SendDataNewPciDevice
36
- passthroughDevices: UI_I_PciDevice[]
37
- mediatedDevices: UI_I_MediatedDevice[]
38
- type: UI_T_PciDeviceType
39
- isEdit: boolean
40
- state?: string | number
41
- // errorValidationFields: UI_I_ErrorValidationField<string>[]
42
- }>(),
43
- {
44
- state: undefined,
45
- }
46
- )
47
- const emits = defineEmits<{
48
- (event: 'send-data', value: UI_I_SendDataNewPciDevice): void
49
- (event: 'remove'): void
50
- }>()
51
-
52
- const { $store }: any = useNuxtApp()
53
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
54
- const currentComponent = computed(() =>
55
- isNewView.value
56
- ? defineAsyncComponent(() => import('./New.vue'))
57
- : defineAsyncComponent(() => import('./Old.vue'))
58
- )
59
-
60
- const localization = computed<UI_I_Localization>(() => useLocal())
61
-
62
- const isRunning = computed<boolean>(() => {
63
- return props.state === 2
64
- })
65
-
66
- const isRemovable = computed<boolean>(() => {
67
- return !props.isEdit || !isRunning.value
68
- })
69
-
70
- const label = computed<string>(() => {
71
- if (props.type === 'edit')
72
- return `${localization.value.common.newPciDevice} ${props.index + 1}`
73
-
74
- return `${localization.value.common.pciDevice} *`
75
- })
76
-
77
- const selectedLabel = computed<string>(() => {
78
- if (props.pciDevice.address) {
79
- return `${props.pciDevice.address} | ${props.pciDevice.device_name}`
80
- }
81
- switch (selectedType.value.value) {
82
- case 'direct_path_io':
83
- return `${directPathIo.value?.address} | ${directPathIo.value?.device_name}`
84
- case 'dynamic_direct_path_io':
85
- return `${dynamicDirectPathIo.value?.address} | ${dynamicDirectPathIo.value?.device_name}`
86
- default:
87
- return nvidiaGridProfile.value?.text
88
- }
89
- })
90
-
91
- const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(
92
- pciDeviceTypeOptionsFunc(
93
- !props.passthroughDevices.length,
94
- !props.mediatedDevices.length
95
- )
96
- )
97
- const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptions.value[0])
98
- pciDeviceTypeOptions.value.forEach((option) => {
99
- if (!option.disabled) selectedType.value = option
100
- })
101
-
102
- const directPathIo = ref<string>('') /// TODO
103
- const dynamicDirectPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
104
- const nvidiaGridProfile = ref<UI_I_Option | null>(null)
105
-
106
- watch(
107
- [() => props.pciDevice, () => props.mediatedDevices],
108
- ([newValue1]) => {
109
- // const passthroughDevice = props.passthroughDevices.find(
110
- // (item) => item.address === newValue.address
111
- // )
112
- // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
113
- if (newValue1) {
114
- // directPathIo.value = newValue1
115
- const passthroughDevice = props.passthroughDevices.find((device) => {
116
- return (
117
- device.class_name + '_' + device.address ===
118
- newValue1.class_name + '_' + newValue1.address
119
- )
120
- })
121
- if (passthroughDevice) {
122
- dynamicDirectPathIo.value = passthroughDevice
123
- }
124
-
125
- const mediatedDevice = props.mediatedDevices.find((device) => {
126
- return (
127
- device.profile_name + '_' + device.root_device ===
128
- newValue1.class_name + '_' + newValue1.address
129
- )
130
- })
131
- if (mediatedDevice) {
132
- nvidiaGridProfile.value = {
133
- text: mediatedDevice.human_readable,
134
- value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
135
- }
136
-
137
- selectedType.value =
138
- pciDeviceTypeOptions.value.find(
139
- (option) => option.value === 'nvidia_grid'
140
- ) || selectedType.value
141
- }
142
- }
143
- },
144
- { immediate: true, deep: true }
145
- )
146
-
147
- const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
148
- const nvidia = props.mediatedDevices.find(
149
- (device) =>
150
- nvidiaGridProfile.value?.value ===
151
- device.profile_name + '_' + device.root_device
152
- )
153
- switch (selectedType.value.value) {
154
- case 'direct_path_io':
155
- return {
156
- address: '',
157
- vendor_name: '',
158
- class_name: '',
159
- device_name: '',
160
- mediated_device: false,
161
- }
162
- case 'dynamic_direct_path_io':
163
- return {
164
- address: dynamicDirectPathIo.value?.address || '',
165
- vendor_name: dynamicDirectPathIo.value?.vendor_name || '',
166
- class_name: dynamicDirectPathIo.value?.class_name || '',
167
- device_name: dynamicDirectPathIo.value?.device_name || '',
168
- mediated_device: false,
169
- }
170
- case 'nvidia_grid':
171
- return {
172
- address: nvidia?.root_device || '',
173
- vendor_name: '',
174
- class_name: nvidia?.profile_name || '',
175
- device_name: nvidia?.name || '',
176
- mediated_device: true,
177
- mediated_device_uuid: '',
178
- }
179
- default:
180
- return {
181
- address: '',
182
- vendor_name: '',
183
- class_name: '',
184
- device_name: '',
185
- mediated_device: false,
186
- }
187
- }
188
- })
189
-
190
- watch(
191
- sendData,
192
- (newValue) => {
193
- emits('send-data', props.type === 'edit' ? props.pciDevice : newValue)
194
- },
195
- { immediate: true }
196
- )
197
- </script>
198
-
199
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-model:selected-type="selectedType"
5
+ v-model:direct-path-io="directPathIo"
6
+ v-model:dynamic-direct-path-io="dynamicDirectPathIo"
7
+ v-model:nvidia-grid-profile="nvidiaGridProfile"
8
+ :index="props.index"
9
+ :passthrough-devices="props.passthroughDevices"
10
+ :mediated-devices="props.mediatedDevices"
11
+ :type="props.type"
12
+ :is-removable="isRemovable"
13
+ :label="label"
14
+ :selected-label="selectedLabel"
15
+ :pci-device-type-options="pciDeviceTypeOptions"
16
+ @remove="emits('remove')"
17
+ />
18
+ </template>
19
+
20
+ <script setup lang="ts">
21
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
22
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
23
+ import type { UI_I_SendDataNewPciDevice } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
24
+ import type { UI_T_PciDeviceType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
25
+ import type {
26
+ UI_I_MediatedDevice,
27
+ UI_I_PciDevice,
28
+ } from '~/lib/models/store/vm/interfaces'
29
+ import type { UI_I_Option } from '~/components/atoms/select/lib/models/interfaces'
30
+ import { pciDeviceTypeOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options'
31
+
32
+ const address = defineModel<string>('address')
33
+ const vendorName = defineModel<string>('vendorName')
34
+ const className = defineModel<string>('className')
35
+ const deviceName = defineModel<string>('deviceName')
36
+ const mediatedDevice = defineModel<string>('mediatedDevice')
37
+ const mediatedDeviceUuid = defineModel<string>('mediatedDeviceUuid')
38
+
39
+ const props = withDefaults(
40
+ defineProps<{
41
+ index: number
42
+ passthroughDevices: UI_I_PciDevice[]
43
+ mediatedDevices: UI_I_MediatedDevice[]
44
+ type: UI_T_PciDeviceType
45
+ isEdit: boolean
46
+ state?: string | number
47
+ // errorValidationFields: UI_I_ErrorValidationField<string>[]
48
+ }>(),
49
+ {
50
+ state: undefined,
51
+ }
52
+ )
53
+ const emits = defineEmits<{
54
+ (event: 'remove'): void
55
+ }>()
56
+
57
+ const { $store }: any = useNuxtApp()
58
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
59
+ const currentComponent = computed(() =>
60
+ isNewView.value
61
+ ? defineAsyncComponent(() => import('./New.vue'))
62
+ : defineAsyncComponent(() => import('./Old.vue'))
63
+ )
64
+
65
+ const localization = computed<UI_I_Localization>(() => useLocal())
66
+
67
+ const isRunning = computed<boolean>(() => {
68
+ return props.state === 2
69
+ })
70
+
71
+ const isRemovable = computed<boolean>(() => {
72
+ return !props.isEdit || !isRunning.value
73
+ })
74
+
75
+ const label = computed<string>(() => {
76
+ if (props.type === 'edit')
77
+ return `${localization.value.common.newPciDevice} ${props.index + 1}`
78
+
79
+ return `${localization.value.common.pciDevice} *`
80
+ })
81
+
82
+ const selectedLabel = computed<string>(() => {
83
+ if (address.value) {
84
+ return `${address.value} | ${deviceName.value}`
85
+ }
86
+ switch (selectedType.value.value) {
87
+ case 'direct_path_io':
88
+ return `${directPathIo.value?.address} | ${directPathIo.value?.device_name}`
89
+ case 'dynamic_direct_path_io':
90
+ return `${dynamicDirectPathIo.value?.address} | ${dynamicDirectPathIo.value?.device_name}`
91
+ default:
92
+ return nvidiaGridProfile.value?.text
93
+ }
94
+ })
95
+
96
+ const pciDeviceTypeOptions = ref<UI_I_OptionItem[]>(
97
+ pciDeviceTypeOptionsFunc(
98
+ !props.passthroughDevices.length,
99
+ !props.mediatedDevices.length
100
+ )
101
+ )
102
+ const selectedType = ref<UI_I_OptionItem>(pciDeviceTypeOptions.value[0])
103
+ pciDeviceTypeOptions.value.forEach((option) => {
104
+ if (!option.disabled) selectedType.value = option
105
+ })
106
+
107
+ const directPathIo = ref<string>('') /// TODO
108
+ const dynamicDirectPathIo = ref<UI_I_PciDevice>(props.passthroughDevices[0])
109
+ const nvidiaGridProfile = ref<UI_I_Option | null>(null)
110
+
111
+ const set = (): void => {
112
+ // const passthroughDevice = props.passthroughDevices.find(
113
+ // (item) => item.address === newValue.address
114
+ // )
115
+ // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
116
+ // directPathIo.value = newValue1
117
+ const passthroughDevice = props.passthroughDevices.find((device) => {
118
+ return (
119
+ device.class_name + '_' + device.address ===
120
+ className.value + '_' + address.value
121
+ )
122
+ })
123
+ if (passthroughDevice) {
124
+ dynamicDirectPathIo.value = passthroughDevice
125
+ }
126
+
127
+ const mediatedDevice = props.mediatedDevices.find((device) => {
128
+ return (
129
+ device.profile_name + '_' + device.root_device ===
130
+ className.value + '_' + address.value
131
+ )
132
+ })
133
+ if (mediatedDevice) {
134
+ nvidiaGridProfile.value = {
135
+ text: mediatedDevice.human_readable,
136
+ value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
137
+ }
138
+
139
+ selectedType.value =
140
+ pciDeviceTypeOptions.value.find(
141
+ (option) => option.value === 'nvidia_grid'
142
+ ) || selectedType.value
143
+ }
144
+ }
145
+ watch(
146
+ () => props.mediatedDevices,
147
+ () => {
148
+ // if (props.isEdit) set()
149
+ set() // for edit
150
+ },
151
+ { immediate: true, deep: true }
152
+ )
153
+
154
+ // watch(
155
+ // [() => props.pciDevice, () => props.mediatedDevices],
156
+ // ([newValue1]) => {
157
+ // // const passthroughDevice = props.passthroughDevices.find(
158
+ // // (item) => item.address === newValue.address
159
+ // // )
160
+ // // passthroughDevice && (directPathIo.value = passthroughDevice) // Todo change
161
+ // if (newValue1) {
162
+ // // directPathIo.value = newValue1
163
+ // const passthroughDevice = props.passthroughDevices.find((device) => {
164
+ // return (
165
+ // device.class_name + '_' + device.address ===
166
+ // newValue1.class_name + '_' + newValue1.address
167
+ // )
168
+ // })
169
+ // if (passthroughDevice) {
170
+ // dynamicDirectPathIo.value = passthroughDevice
171
+ // }
172
+ //
173
+ // const mediatedDevice = props.mediatedDevices.find((device) => {
174
+ // return (
175
+ // device.profile_name + '_' + device.root_device ===
176
+ // newValue1.class_name + '_' + newValue1.address
177
+ // )
178
+ // })
179
+ // if (mediatedDevice) {
180
+ // nvidiaGridProfile.value = {
181
+ // text: mediatedDevice.human_readable,
182
+ // value: mediatedDevice.profile_name + '_' + mediatedDevice.root_device,
183
+ // }
184
+ //
185
+ // selectedType.value =
186
+ // pciDeviceTypeOptions.value.find(
187
+ // (option) => option.value === 'nvidia_grid'
188
+ // ) || selectedType.value
189
+ // }
190
+ // }
191
+ // },
192
+ // { immediate: true, deep: true }
193
+ // )
194
+
195
+ const sendData = computed<UI_I_SendDataNewPciDevice>(() => {
196
+ const nvidia = props.mediatedDevices.find(
197
+ (device) =>
198
+ nvidiaGridProfile.value?.value ===
199
+ device.profile_name + '_' + device.root_device
200
+ )
201
+ switch (selectedType.value.value) {
202
+ case 'direct_path_io':
203
+ return {
204
+ address: '',
205
+ vendor_name: '',
206
+ class_name: '',
207
+ device_name: '',
208
+ mediated_device: false,
209
+ }
210
+ case 'dynamic_direct_path_io':
211
+ return {
212
+ address: dynamicDirectPathIo.value?.address || '',
213
+ vendor_name: dynamicDirectPathIo.value?.vendor_name || '',
214
+ class_name: dynamicDirectPathIo.value?.class_name || '',
215
+ device_name: dynamicDirectPathIo.value?.device_name || '',
216
+ mediated_device: false,
217
+ }
218
+ case 'nvidia_grid':
219
+ return {
220
+ address: nvidia?.root_device || '',
221
+ vendor_name: '',
222
+ class_name: nvidia?.profile_name || '',
223
+ device_name: nvidia?.name || '',
224
+ mediated_device: true,
225
+ mediated_device_uuid: '',
226
+ }
227
+ default:
228
+ return {
229
+ address: '',
230
+ vendor_name: '',
231
+ class_name: '',
232
+ device_name: '',
233
+ mediated_device: false,
234
+ }
235
+ }
236
+ })
237
+
238
+ watch(
239
+ sendData,
240
+ (newValue) => {
241
+ address.value = newValue.address
242
+ vendorName.value = newValue.vendor_name
243
+ className.value = newValue.class_name
244
+ deviceName.value = newValue.device_name
245
+ mediatedDevice.value = newValue.mediated_device
246
+ mediatedDeviceUuid.value = newValue.mediated_device_uuid || ''
247
+ // emits('send-data', props.type === 'edit' ? props.pciDevice : newValue)
248
+ },
249
+ { immediate: true }
250
+ )
251
+ </script>
252
+
253
+ <style scoped lang="scss"></style>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.683",
4
+ "version": "1.5.684",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",