bfg-common 1.4.165 → 1.4.167

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 (43) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +407 -407
  2. package/assets/img/icons/icons-sprite-dark-2.svg +343 -343
  3. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-dark-4.svg +255 -255
  5. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  6. package/assets/img/icons/icons-sprite-dark-6.svg +83 -83
  7. package/assets/img/icons/icons-sprite-light-1.svg +407 -407
  8. package/assets/img/icons/icons-sprite-light-2.svg +343 -343
  9. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  10. package/assets/img/icons/icons-sprite-light-4.svg +255 -255
  11. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  12. package/assets/img/icons/icons-sprite-light-6.svg +83 -83
  13. package/assets/localization/local_be.json +1 -0
  14. package/assets/localization/local_en.json +1 -0
  15. package/assets/localization/local_hy.json +1 -0
  16. package/assets/localization/local_kk.json +1 -0
  17. package/assets/localization/local_ru.json +1 -0
  18. package/assets/localization/local_zh.json +1 -0
  19. package/assets/scss/common/global.scss +0 -4
  20. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  21. package/components/atoms/stack/StackBlock.vue +185 -185
  22. package/components/common/browse/blocks/Title.vue +91 -91
  23. package/components/common/browse/blocks/info/Date.vue +21 -21
  24. package/components/common/context/lib/models/interfaces.ts +30 -30
  25. package/components/common/context/recursion/Recursion.vue +86 -86
  26. package/components/common/context/recursion/RecursionNew.vue +199 -199
  27. package/components/common/context/recursion/RecursionOld.vue +213 -213
  28. package/components/common/layout/theHeader/TheHeaderNew.vue +6 -3
  29. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +25 -4
  30. package/components/common/pages/hardwareHealth/historyTestimony/Graph.vue +456 -435
  31. package/components/common/pages/hardwareHealth/historyTestimony/lib/config/containerSizes.ts +1 -0
  32. package/components/common/vm/actions/add/Add.vue +609 -609
  33. package/components/common/vm/actions/clone/Clone.vue +522 -522
  34. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/lib/config/options.ts +20 -20
  35. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +403 -403
  36. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Hv.vue +99 -99
  37. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +85 -85
  38. package/components/common/vm/actions/editSettings/EditSettings.vue +327 -327
  39. package/composables/productNameLocal.ts +30 -30
  40. package/package.json +1 -1
  41. package/plugins/recursion.ts +311 -311
  42. package/public/spice-console/lib/images/bitmap.js +203 -203
  43. package/store/tasks/mappers/recentTasks.ts +45 -45
@@ -1,435 +1,456 @@
1
- <template>
2
- <common-pages-hardware-health-history-testimony-tools
3
- v-model:selected-view="selectedView"
4
- v-model:selected-timespan-type="selectedTimespanType"
5
- :selected-chart-option-name="selectedChartOptionName"
6
- :is-show-chart-modal="isShowChartModal"
7
- :chart-title="props.powerData?.groupName || ''"
8
- :selected-metric="selectedMetric"
9
- :selected-power-counters-keys="selectedPowerCountersKeys"
10
- :power-selected-rows-local="powerSelectedRowsLocal"
11
- :selected-temperature-counters-keys="selectedTemperatureCountersKeys"
12
- :temperature-selected-rows-local="temperatureSelectedRowsLocal"
13
- :units-count="unitsCount"
14
- :power-counters-table-data="powerCountersTableData"
15
- :temperature-counters-table-data="temperatureCountersTableData"
16
- :language="props.language"
17
- :custom-date-from="customDateFrom"
18
- :custom-date-to="customDateTo"
19
- :custom-time-from="customTimeFrom"
20
- :custom-time-to="customTimeTo"
21
- :start-date="props.powerData?.pointStart || 0"
22
- :timespan-period-type="timespanPeriodType"
23
- @power-selected-rows-local="powerSelectedRowsLocal = $event"
24
- @temperature-selected-rows-local="temperatureSelectedRowsLocal = $event"
25
- @show-chart-modal="isShowChartModal = true"
26
- @hide-chart-modal="isShowChartModal = false"
27
- @update-tools="onUpdateTools"
28
- @delete-option="onDeleteOption"
29
- @submit-options="onSubmitOptions"
30
- @update-timespan-period-type="timespanPeriodType = $event"
31
- />
32
- <div
33
- ref="historyTestimonyGraph"
34
- :class="`history-testimony-graph ${selectedView}`"
35
- >
36
- <div>
37
- <common-graph
38
- v-if="powerDataLocal && !props.powerLoading"
39
- :data="powerDataLocal"
40
- :update="updatePowerHelper"
41
- :chart="powerChart"
42
- :selected-row="selectedRowPower"
43
- />
44
- <div
45
- v-else-if="props.powerLoading"
46
- class="history-testimony-graph__loader-block"
47
- >
48
- <div class="spinner"></div>
49
- </div>
50
- <div v-else class="history-testimony-graph__empty-content"></div>
51
- </div>
52
- <div>
53
- <common-graph
54
- v-if="temperatureDataLocal && !props.temperatureLoading"
55
- :data="temperatureDataLocal"
56
- :update="updateTemperatureHelper"
57
- :chart="temperatureChart"
58
- :selected-row="selectedRowTemperature"
59
- />
60
- <div
61
- v-else-if="props.temperatureLoading"
62
- class="history-testimony-graph__loader-block"
63
- >
64
- <div class="spinner"></div>
65
- </div>
66
- <div v-else class="history-testimony-graph__empty-content"></div>
67
- </div>
68
- </div>
69
- </template>
70
-
71
- <script setup lang="ts">
72
- import { format } from 'date-fns'
73
- import type {
74
- I_SeriesLine,
75
- I_LineGraph,
76
- } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/models/interfaces'
77
- import { graphDataFunc } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/utils/renderGraph'
78
- import type { UI_I_OptionsForm } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/interfaces'
79
- import type { UI_I_Localization } from '~/lib/models/interfaces'
80
- import type { UI_T_Chart } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/types'
81
- import type { UI_I_HardwareHealthSensors } from '~/components/common/pages/hardwareHealth/tableView/lib/models/interfaces'
82
- import type { UI_I_HardwareHealthSensorsGraph } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/models/interfaces'
83
- import type { UI_I_SensorsGraphPayload } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/lib/models/interfaces'
84
-
85
- const props = defineProps<{
86
- powerData: I_SeriesLine | null
87
- temperatureData: I_SeriesLine | null
88
- countersTableData: UI_I_HardwareHealthSensors[]
89
- language: string
90
- powerLoading: boolean
91
- temperatureLoading: boolean
92
- formattedDatetime: any
93
- isDarkMode: boolean
94
- getDateFormat: any
95
- mainSelectedRow: number[]
96
- }>()
97
- const selectedView = defineModel<string>('selectedView')
98
-
99
- const { $store }: any = useNuxtApp()
100
-
101
- // const historyTestimonyGraph = ref(null)
102
- // const contentWidth = ref<number>(
103
- // useElementSize(historyTestimonyGraph)?.width || 0
104
- // )
105
- // watch(contentWidth, (newValue) => {
106
- // if (newValue) {
107
- // updatePowerChart()
108
- // updateTemperatureChart()
109
- // }
110
- // if (!powerChart.value || !temperatureChart.value) return
111
- //
112
- // powerChart.value.setSize(1, powerChart.chartHeight)
113
- // temperatureChart.value.setSize(1, temperatureChart.chartHeight)
114
- //
115
- // setTimeout(() => {
116
- // powerChart.value.setSize(newValue, powerChart.chartHeight)
117
- // temperatureChart.value.setSize(newValue, temperatureChart.chartHeight)
118
- // }, 1000)
119
- // })
120
- // const isContentMediumSize = computed<boolean>(() => contentWidth.value <= 1200)
121
-
122
- const selectedChartOptionName = ref<string>('')
123
- const isShowChartModal = ref<boolean>(false)
124
- const selectedMetric = ref<UI_T_Chart>('power')
125
- const selectedPowerCountersKeys = ref<number[]>([])
126
- const selectedTemperatureCountersKeys = ref<number[]>([])
127
- const selectedTimespanType = ref<string>('')
128
- const customDateFrom = ref<string>('')
129
- const customDateTo = ref<string>('')
130
- const customTimeFrom = ref<string>('')
131
- const customTimeTo = ref<string>('')
132
-
133
- const selectedRowPower = ref<number[]>([])
134
- const selectedRowTemperature = ref<number[]>([])
135
- let powerCounters: UI_I_HardwareHealthSensors[] = []
136
- let temperatureCounters: UI_I_HardwareHealthSensors[] = []
137
- const updateAllSelectedSelectedRow = (): void => {
138
- selectedRowPower.value = []
139
- selectedRowTemperature.value = []
140
-
141
- if (!props.mainSelectedRow.length) return
142
-
143
- props.mainSelectedRow.forEach((key) => {
144
- const selectedItem = props.countersTableData[key]
145
- const category = selectedItem.category.toLowerCase()
146
-
147
- if (category === 'power') {
148
- const currentKey = powerCounters.findIndex(
149
- (item) => item.id === selectedItem.id
150
- )
151
- selectedRowPower.value.push(currentKey)
152
- } else if (category === 'temperature') {
153
- const currentKey = temperatureCounters.findIndex(
154
- (item) => item.id === selectedItem.id
155
- )
156
- selectedRowTemperature.value.push(currentKey)
157
- }
158
- })
159
- }
160
- watch(
161
- () => props.countersTableData,
162
- (newValue) => {
163
- powerCounters = newValue.filter(
164
- (item) => item.category.toLowerCase() === 'power'
165
- )
166
- temperatureCounters = newValue.filter(
167
- (item) => item.category.toLowerCase() === 'temperature'
168
- )
169
- },
170
- { deep: true, immediate: true }
171
- )
172
- watch(
173
- () => props.mainSelectedRow,
174
- () => {
175
- updateAllSelectedSelectedRow()
176
- },
177
- { deep: true, immediate: true }
178
- )
179
- watch(
180
- selectedView,
181
- () => {
182
- updateAllSelectedSelectedRow()
183
- },
184
- { deep: true }
185
- )
186
-
187
- const unitsCount = ref<number>(0)
188
- const powerCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
189
- const temperatureCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
190
- const powerSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
191
- const temperatureSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
192
-
193
- watch(
194
- () => props.countersTableData,
195
- (newValue) => {
196
- if (!newValue.length) return
197
-
198
- powerCountersTableData.value = []
199
- temperatureCountersTableData.value = []
200
-
201
- newValue.forEach((item, key) => {
202
- const newData: UI_I_HardwareHealthSensorsGraph = {
203
- id: key,
204
- name: item.name,
205
- description: item.category,
206
- measurement: '',
207
- units: '',
208
- nameEn: item.mainName || '',
209
- testId: `counters-table-${item.name}-item`,
210
- hidden: item.hidden,
211
- }
212
- if (item.category.toLowerCase() === 'power')
213
- powerCountersTableData.value.push(newData)
214
- else if (item.category.toLowerCase() === 'temperature')
215
- temperatureCountersTableData.value.push(newData)
216
- })
217
- },
218
- { immediate: true, deep: true }
219
- )
220
-
221
- const selectAllCounters = (): void => {
222
- if (!powerCountersTableData.value)
223
- setTimeout(() => {
224
- selectAllCounters()
225
- }, 2000)
226
- else {
227
- powerCountersTableData.value.forEach((item) => {
228
- selectedPowerCountersKeys.value.push(item.id)
229
- })
230
- temperatureCountersTableData.value.forEach((item) => {
231
- if (!item.hidden) selectedTemperatureCountersKeys.value.push(item.id)
232
- })
233
- }
234
- }
235
-
236
- onMounted(() => {
237
- selectAllCounters()
238
- })
239
-
240
- const localization = computed<UI_I_Localization>(() => useLocal())
241
-
242
- const powerDataLocal = ref<I_LineGraph | null>(null)
243
- const temperatureDataLocal = ref<I_LineGraph | null>(null)
244
- const updatePowerHelper = ref<number>(0)
245
- const updateTemperatureHelper = ref<number>(0)
246
- let dateFormat = ''
247
- const powerChart = ref<any>(null)
248
- const temperatureChart = ref<any>(null)
249
- const timespanPeriodType = ref<string>('last')
250
-
251
- const powerChartCallback = (newValue: any): void => {
252
- newValue && (powerChart.value = newValue)
253
- }
254
-
255
- const temperatureChartCallback = (newValue: any): void => {
256
- newValue && (temperatureChart.value = newValue)
257
- }
258
-
259
- const updatePowerChart = (): void => {
260
- if (!props.powerData) return
261
-
262
- powerDataLocal.value = graphDataFunc(
263
- props.powerData,
264
- props.isDarkMode,
265
- localization.value,
266
- () => {},
267
- false,
268
- false,
269
- true,
270
- 'spline',
271
- '',
272
- undefined,
273
- powerChartCallback,
274
- props.formattedDatetime,
275
- format,
276
- dateFormat
277
- )
278
-
279
- updatePowerHelper.value++
280
- }
281
-
282
- const updateTemperatureChart = (): void => {
283
- if (!props.temperatureData) return
284
-
285
- temperatureDataLocal.value = graphDataFunc(
286
- props.temperatureData,
287
- props.isDarkMode,
288
- localization.value,
289
- () => {},
290
- false,
291
- false,
292
- true,
293
- 'spline',
294
- '',
295
- undefined,
296
- temperatureChartCallback,
297
- props.formattedDatetime,
298
- format,
299
- dateFormat
300
- )
301
-
302
- updateTemperatureHelper.value++
303
- }
304
-
305
- watch(
306
- () => [props.powerData, props.isDarkMode, props.language],
307
- (newValue) => {
308
- dateFormat = props.getDateFormat(newValue[2])
309
- updatePowerChart()
310
- },
311
- { immediate: true, deep: true }
312
- )
313
-
314
- watch(
315
- () => [props.temperatureData, props.isDarkMode, props.language],
316
- (newValue) => {
317
- dateFormat = props.getDateFormat(newValue[2])
318
- updateTemperatureChart()
319
- },
320
- { immediate: true, deep: true }
321
- )
322
-
323
- const updateSelectedCountersKeys = (metricType: string): void => {
324
- if (metricType === 'power') {
325
- const newKeys: number[] = []
326
-
327
- powerSelectedRowsLocal.value.forEach((item) => {
328
- newKeys.push(item.id)
329
- })
330
- selectedPowerCountersKeys.value = newKeys
331
- } else if (metricType === 'temperature') {
332
- const newKeys: number[] = []
333
-
334
- temperatureSelectedRowsLocal.value.forEach((item) => {
335
- newKeys.push(item.id)
336
- })
337
- selectedTemperatureCountersKeys.value = newKeys
338
- }
339
- }
340
-
341
- const tools = {
342
- periodName: 'real_time',
343
- view: 'power',
344
- metricType: selectedMetric.value,
345
- period: [],
346
- }
347
-
348
- const onSubmitOptions = (data: UI_I_OptionsForm): void => {
349
- selectedTimespanType.value = data.periodName
350
- updateSelectedCountersKeys(data.metric)
351
- if (data.metric === 'power')
352
- $store.dispatch(
353
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
354
- data
355
- )
356
- if (data.metric === 'temperature')
357
- $store.dispatch(
358
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
359
- data
360
- )
361
- }
362
-
363
- const getAllMetrics = (): void => {
364
- $store.dispatch(
365
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
366
- tools
367
- )
368
- $store.dispatch(
369
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
370
- tools
371
- )
372
- }
373
-
374
- const onUpdateTools = (data: UI_I_SensorsGraphPayload): void => {
375
- const storageChartOptions = useLocalStorage(
376
- data.view + 'ChartOptionsSensors',
377
- undefined
378
- )
379
-
380
- selectedChartOptionName.value = ''
381
-
382
- if (storageChartOptions) {
383
- selectedChartOptionName.value = data.view
384
- } else {
385
- selectedMetric.value = 'power'
386
- }
387
-
388
- tools.periodName = data.periodName
389
- tools.view = data.view
390
- tools.period = data.period
391
- tools.metricType = data.metricType || selectedMetric.value
392
-
393
- getAllMetrics()
394
- }
395
-
396
- const onDeleteOption = (): void => {}
397
- </script>
398
-
399
- <style scoped lang="scss">
400
- .history-testimony-graph {
401
- display: grid;
402
- align-items: center;
403
- grid-gap: 20px;
404
- grid-template-columns: 1fr 1fr;
405
-
406
- //&.medium {
407
- // grid-template-columns: 1fr;
408
- //}
409
- &.power {
410
- grid-template-columns: 1fr 0;
411
-
412
- & > div:nth-child(2) {
413
- visibility: hidden;
414
- }
415
- }
416
- &.temperature {
417
- grid-template-columns: 0 1fr;
418
-
419
- & > div:nth-child(1) {
420
- visibility: hidden;
421
- }
422
- }
423
-
424
- &__loader-block {
425
- height: inherit;
426
- display: flex;
427
- justify-content: center;
428
- align-items: center;
429
- min-height: 300px;
430
- }
431
- &__empty-content {
432
- height: inherit;
433
- }
434
- }
435
- </style>
1
+ <template>
2
+ <common-pages-hardware-health-history-testimony-tools
3
+ v-model:selected-view="selectedView"
4
+ v-model:selected-timespan-type="selectedTimespanType"
5
+ :selected-chart-option-name="selectedChartOptionName"
6
+ :is-show-chart-modal="isShowChartModal"
7
+ :chart-title="props.powerData?.groupName || ''"
8
+ :selected-metric="selectedMetric"
9
+ :selected-power-counters-keys="selectedPowerCountersKeys"
10
+ :power-selected-rows-local="powerSelectedRowsLocal"
11
+ :selected-temperature-counters-keys="selectedTemperatureCountersKeys"
12
+ :temperature-selected-rows-local="temperatureSelectedRowsLocal"
13
+ :units-count="unitsCount"
14
+ :power-counters-table-data="powerCountersTableData"
15
+ :temperature-counters-table-data="temperatureCountersTableData"
16
+ :language="props.language"
17
+ :custom-date-from="customDateFrom"
18
+ :custom-date-to="customDateTo"
19
+ :custom-time-from="customTimeFrom"
20
+ :custom-time-to="customTimeTo"
21
+ :start-date="props.powerData?.pointStart || 0"
22
+ :timespan-period-type="timespanPeriodType"
23
+ @power-selected-rows-local="powerSelectedRowsLocal = $event"
24
+ @temperature-selected-rows-local="temperatureSelectedRowsLocal = $event"
25
+ @show-chart-modal="isShowChartModal = true"
26
+ @hide-chart-modal="isShowChartModal = false"
27
+ @update-tools="onUpdateTools"
28
+ @delete-option="onDeleteOption"
29
+ @submit-options="onSubmitOptions"
30
+ @update-timespan-period-type="timespanPeriodType = $event"
31
+ />
32
+ <div
33
+ ref="historyTestimonyGraph"
34
+ :class="[
35
+ `history-testimony-graph ${selectedView}`,
36
+ { medium: isMediumSizeGraphsContainer },
37
+ ]"
38
+ >
39
+ <div class="graph-container">
40
+ <common-graph
41
+ v-if="powerDataLocal && !props.powerLoading"
42
+ :data="powerDataLocal"
43
+ :update="updatePowerHelper"
44
+ :chart="powerChart"
45
+ :selected-row="selectedRowPower"
46
+ />
47
+ <div
48
+ v-else-if="props.powerLoading"
49
+ class="history-testimony-graph__loader-block"
50
+ >
51
+ <div class="spinner"></div>
52
+ </div>
53
+ <div v-else class="history-testimony-graph__empty-content"></div>
54
+ </div>
55
+ <div class="graph-container">
56
+ <common-graph
57
+ v-if="temperatureDataLocal && !props.temperatureLoading"
58
+ :data="temperatureDataLocal"
59
+ :update="updateTemperatureHelper"
60
+ :chart="temperatureChart"
61
+ :selected-row="selectedRowTemperature"
62
+ />
63
+ <div
64
+ v-else-if="props.temperatureLoading"
65
+ class="history-testimony-graph__loader-block"
66
+ >
67
+ <div class="spinner"></div>
68
+ </div>
69
+ <div v-else class="history-testimony-graph__empty-content"></div>
70
+ </div>
71
+ </div>
72
+ </template>
73
+
74
+ <script setup lang="ts">
75
+ import { useElementSize } from '@vueuse/core'
76
+ import { format } from 'date-fns'
77
+ import type {
78
+ I_SeriesLine,
79
+ I_LineGraph,
80
+ } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/models/interfaces'
81
+ import { graphDataFunc } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/utils/renderGraph'
82
+ import type { UI_I_OptionsForm } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/interfaces'
83
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
84
+ import type { UI_T_Chart } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/types'
85
+ import type { UI_I_HardwareHealthSensors } from '~/components/common/pages/hardwareHealth/tableView/lib/models/interfaces'
86
+ import type { UI_I_HardwareHealthSensorsGraph } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/models/interfaces'
87
+ import type { UI_I_SensorsGraphPayload } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/lib/models/interfaces'
88
+ import { containerMediumSize } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/config/containerSizes'
89
+
90
+ const props = defineProps<{
91
+ powerData: I_SeriesLine | null
92
+ temperatureData: I_SeriesLine | null
93
+ countersTableData: UI_I_HardwareHealthSensors[]
94
+ language: string
95
+ powerLoading: boolean
96
+ temperatureLoading: boolean
97
+ formattedDatetime: any
98
+ isDarkMode: boolean
99
+ getDateFormat: any
100
+ mainSelectedRow: number[]
101
+ }>()
102
+ const selectedView = defineModel<string>('selectedView')
103
+
104
+ const { $store }: any = useNuxtApp()
105
+
106
+ const historyTestimonyGraph = ref<any>(null)
107
+ const { width } = useElementSize(historyTestimonyGraph)
108
+ const isMediumSizeGraphsContainer = computed<boolean>(
109
+ () => width.value < containerMediumSize
110
+ )
111
+
112
+ // const historyTestimonyGraph = ref(null)
113
+ // const contentWidth = ref<number>(
114
+ // useElementSize(historyTestimonyGraph)?.width || 0
115
+ // )
116
+ // watch(contentWidth, (newValue) => {
117
+ // if (newValue) {
118
+ // updatePowerChart()
119
+ // updateTemperatureChart()
120
+ // }
121
+ // if (!powerChart.value || !temperatureChart.value) return
122
+ //
123
+ // powerChart.value.setSize(1, powerChart.chartHeight)
124
+ // temperatureChart.value.setSize(1, temperatureChart.chartHeight)
125
+ //
126
+ // setTimeout(() => {
127
+ // powerChart.value.setSize(newValue, powerChart.chartHeight)
128
+ // temperatureChart.value.setSize(newValue, temperatureChart.chartHeight)
129
+ // }, 1000)
130
+ // })
131
+ // const isContentMediumSize = computed<boolean>(() => contentWidth.value <= 1200)
132
+
133
+ const selectedChartOptionName = ref<string>('')
134
+ const isShowChartModal = ref<boolean>(false)
135
+ const selectedMetric = ref<UI_T_Chart>('power')
136
+ const selectedPowerCountersKeys = ref<number[]>([])
137
+ const selectedTemperatureCountersKeys = ref<number[]>([])
138
+ const selectedTimespanType = ref<string>('')
139
+ const customDateFrom = ref<string>('')
140
+ const customDateTo = ref<string>('')
141
+ const customTimeFrom = ref<string>('')
142
+ const customTimeTo = ref<string>('')
143
+
144
+ const selectedRowPower = ref<number[]>([])
145
+ const selectedRowTemperature = ref<number[]>([])
146
+ let powerCounters: UI_I_HardwareHealthSensors[] = []
147
+ let temperatureCounters: UI_I_HardwareHealthSensors[] = []
148
+ const updateAllSelectedSelectedRow = (): void => {
149
+ selectedRowPower.value = []
150
+ selectedRowTemperature.value = []
151
+
152
+ if (!props.mainSelectedRow.length) return
153
+
154
+ props.mainSelectedRow.forEach((key) => {
155
+ const selectedItem = props.countersTableData[key]
156
+ const category = selectedItem.category.toLowerCase()
157
+
158
+ if (category === 'power') {
159
+ const currentKey = powerCounters.findIndex(
160
+ (item) => item.id === selectedItem.id
161
+ )
162
+ selectedRowPower.value.push(currentKey)
163
+ } else if (category === 'temperature') {
164
+ const currentKey = temperatureCounters.findIndex(
165
+ (item) => item.id === selectedItem.id
166
+ )
167
+ selectedRowTemperature.value.push(currentKey)
168
+ }
169
+ })
170
+ }
171
+ watch(
172
+ () => props.countersTableData,
173
+ (newValue) => {
174
+ powerCounters = newValue.filter(
175
+ (item) => item.category.toLowerCase() === 'power'
176
+ )
177
+ temperatureCounters = newValue.filter(
178
+ (item) => item.category.toLowerCase() === 'temperature'
179
+ )
180
+ },
181
+ { deep: true, immediate: true }
182
+ )
183
+ watch(
184
+ () => props.mainSelectedRow,
185
+ () => {
186
+ updateAllSelectedSelectedRow()
187
+ },
188
+ { deep: true, immediate: true }
189
+ )
190
+ watch(
191
+ selectedView,
192
+ () => {
193
+ updateAllSelectedSelectedRow()
194
+ },
195
+ { deep: true }
196
+ )
197
+
198
+ const unitsCount = ref<number>(0)
199
+ const powerCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
200
+ const temperatureCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
201
+ const powerSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
202
+ const temperatureSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
203
+
204
+ watch(
205
+ () => props.countersTableData,
206
+ (newValue) => {
207
+ if (!newValue.length) return
208
+
209
+ powerCountersTableData.value = []
210
+ temperatureCountersTableData.value = []
211
+
212
+ newValue.forEach((item, key) => {
213
+ const newData: UI_I_HardwareHealthSensorsGraph = {
214
+ id: key,
215
+ name: item.name,
216
+ description: item.category,
217
+ measurement: '',
218
+ units: '',
219
+ nameEn: item.mainName || '',
220
+ testId: `counters-table-${item.name}-item`,
221
+ hidden: item.hidden,
222
+ }
223
+ if (item.category.toLowerCase() === 'power')
224
+ powerCountersTableData.value.push(newData)
225
+ else if (item.category.toLowerCase() === 'temperature')
226
+ temperatureCountersTableData.value.push(newData)
227
+ })
228
+ },
229
+ { immediate: true, deep: true }
230
+ )
231
+
232
+ const selectAllCounters = (): void => {
233
+ if (!powerCountersTableData.value)
234
+ setTimeout(() => {
235
+ selectAllCounters()
236
+ }, 2000)
237
+ else {
238
+ powerCountersTableData.value.forEach((item) => {
239
+ selectedPowerCountersKeys.value.push(item.id)
240
+ })
241
+ temperatureCountersTableData.value.forEach((item) => {
242
+ if (!item.hidden) selectedTemperatureCountersKeys.value.push(item.id)
243
+ })
244
+ }
245
+ }
246
+
247
+ onMounted(() => {
248
+ selectAllCounters()
249
+ })
250
+
251
+ const localization = computed<UI_I_Localization>(() => useLocal())
252
+
253
+ const powerDataLocal = ref<I_LineGraph | null>(null)
254
+ const temperatureDataLocal = ref<I_LineGraph | null>(null)
255
+ const updatePowerHelper = ref<number>(0)
256
+ const updateTemperatureHelper = ref<number>(0)
257
+ let dateFormat = ''
258
+ const powerChart = ref<any>(null)
259
+ const temperatureChart = ref<any>(null)
260
+ const timespanPeriodType = ref<string>('last')
261
+
262
+ const powerChartCallback = (newValue: any): void => {
263
+ newValue && (powerChart.value = newValue)
264
+ }
265
+
266
+ const temperatureChartCallback = (newValue: any): void => {
267
+ newValue && (temperatureChart.value = newValue)
268
+ }
269
+
270
+ const updatePowerChart = (): void => {
271
+ if (!props.powerData) return
272
+
273
+ powerDataLocal.value = graphDataFunc(
274
+ props.powerData,
275
+ props.isDarkMode,
276
+ localization.value,
277
+ () => {},
278
+ false,
279
+ false,
280
+ true,
281
+ 'spline',
282
+ '',
283
+ undefined,
284
+ powerChartCallback,
285
+ props.formattedDatetime,
286
+ format,
287
+ dateFormat
288
+ )
289
+
290
+ updatePowerHelper.value++
291
+ }
292
+
293
+ const updateTemperatureChart = (): void => {
294
+ if (!props.temperatureData) return
295
+
296
+ temperatureDataLocal.value = graphDataFunc(
297
+ props.temperatureData,
298
+ props.isDarkMode,
299
+ localization.value,
300
+ () => {},
301
+ false,
302
+ false,
303
+ true,
304
+ 'spline',
305
+ '',
306
+ undefined,
307
+ temperatureChartCallback,
308
+ props.formattedDatetime,
309
+ format,
310
+ dateFormat
311
+ )
312
+
313
+ updateTemperatureHelper.value++
314
+ }
315
+
316
+ watch(
317
+ () => [props.powerData, props.isDarkMode, props.language],
318
+ (newValue) => {
319
+ dateFormat = props.getDateFormat(newValue[2])
320
+ updatePowerChart()
321
+ },
322
+ { immediate: true, deep: true }
323
+ )
324
+
325
+ watch(
326
+ () => [props.temperatureData, props.isDarkMode, props.language],
327
+ (newValue) => {
328
+ dateFormat = props.getDateFormat(newValue[2])
329
+ updateTemperatureChart()
330
+ },
331
+ { immediate: true, deep: true }
332
+ )
333
+
334
+ const updateSelectedCountersKeys = (metricType: string): void => {
335
+ if (metricType === 'power') {
336
+ const newKeys: number[] = []
337
+
338
+ powerSelectedRowsLocal.value.forEach((item) => {
339
+ newKeys.push(item.id)
340
+ })
341
+ selectedPowerCountersKeys.value = newKeys
342
+ } else if (metricType === 'temperature') {
343
+ const newKeys: number[] = []
344
+
345
+ temperatureSelectedRowsLocal.value.forEach((item) => {
346
+ newKeys.push(item.id)
347
+ })
348
+ selectedTemperatureCountersKeys.value = newKeys
349
+ }
350
+ }
351
+
352
+ const tools = {
353
+ periodName: 'real_time',
354
+ view: 'power',
355
+ metricType: selectedMetric.value,
356
+ period: [],
357
+ }
358
+
359
+ const onSubmitOptions = (data: UI_I_OptionsForm): void => {
360
+ selectedTimespanType.value = data.periodName
361
+ updateSelectedCountersKeys(data.metric)
362
+ if (data.metric === 'power')
363
+ $store.dispatch(
364
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
365
+ data
366
+ )
367
+ if (data.metric === 'temperature')
368
+ $store.dispatch(
369
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
370
+ data
371
+ )
372
+ }
373
+
374
+ const getAllMetrics = (): void => {
375
+ $store.dispatch(
376
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
377
+ tools
378
+ )
379
+ $store.dispatch(
380
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
381
+ tools
382
+ )
383
+ }
384
+
385
+ const onUpdateTools = (data: UI_I_SensorsGraphPayload): void => {
386
+ const storageChartOptions = useLocalStorage(
387
+ data.view + 'ChartOptionsSensors',
388
+ undefined
389
+ )
390
+
391
+ selectedChartOptionName.value = ''
392
+
393
+ if (storageChartOptions) {
394
+ selectedChartOptionName.value = data.view
395
+ } else {
396
+ selectedMetric.value = 'power'
397
+ }
398
+
399
+ tools.periodName = data.periodName
400
+ tools.view = data.view
401
+ tools.period = data.period
402
+ tools.metricType = data.metricType || selectedMetric.value
403
+
404
+ getAllMetrics()
405
+ }
406
+
407
+ const onDeleteOption = (): void => {}
408
+ </script>
409
+
410
+ <style scoped lang="scss">
411
+ .history-testimony-graph {
412
+ display: flex;
413
+ align-items: center;
414
+ grid-gap: 20px;
415
+
416
+ &.medium {
417
+ flex-direction: column;
418
+
419
+ .graph-container {
420
+ width: 100%;
421
+ }
422
+ }
423
+ .graph-container {
424
+ width: calc(50% - 10px);
425
+ }
426
+ &.power {
427
+ & > div:nth-child(1) {
428
+ width: 100%;
429
+ }
430
+ & > div:nth-child(2) {
431
+ display: none;
432
+ width: 0;
433
+ }
434
+ }
435
+ &.temperature {
436
+ & > div:nth-child(1) {
437
+ display: none;
438
+ width: 0;
439
+ }
440
+ & > div:nth-child(2) {
441
+ width: 100%;
442
+ }
443
+ }
444
+
445
+ &__loader-block {
446
+ height: inherit;
447
+ display: flex;
448
+ justify-content: center;
449
+ align-items: center;
450
+ min-height: 300px;
451
+ }
452
+ &__empty-content {
453
+ height: inherit;
454
+ }
455
+ }
456
+ </style>