bfg-common 1.4.730 → 1.4.732

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 (153) hide show
  1. package/assets/localization/local_be.json +1 -0
  2. package/assets/localization/local_en.json +1 -0
  3. package/assets/localization/local_hy.json +1 -0
  4. package/assets/localization/local_kk.json +1 -0
  5. package/assets/localization/local_ru.json +1 -0
  6. package/assets/localization/local_zh.json +1 -0
  7. package/assets/scss/common/normalize.scss +361 -361
  8. package/components/atoms/TheIcon3.vue +50 -50
  9. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  10. package/components/atoms/select/TheSelect.vue +1 -10
  11. package/components/atoms/stack/StackBlock.vue +185 -185
  12. package/components/atoms/table/dataGrid/DataGrid.vue +1696 -1696
  13. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  14. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  15. package/components/common/browse/BrowseNew.vue +237 -237
  16. package/components/common/browse/BrowseOld.vue +217 -217
  17. package/components/common/browse/blocks/contents/Files.vue +37 -37
  18. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  19. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  20. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/{monitor/advanced/tools/chartOptionsModal → chartOptionsModal}/counters/timespan/form/Form.vue +544 -539
  22. package/components/common/{pages/hardwareHealth/historyTestimony/tools/chartOptionsModal → chartOptionsModal}/counters/timespan/form/lib/config/dateForm.ts +116 -115
  23. package/components/common/context/lib/models/interfaces.ts +30 -30
  24. package/components/common/context/recursion/Recursion.vue +86 -86
  25. package/components/common/context/recursion/RecursionOld.vue +213 -213
  26. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  27. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  28. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +150 -150
  29. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -300
  30. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  31. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  32. package/components/common/monitor/advanced/Advanced.vue +5 -0
  33. package/components/common/monitor/advanced/tools/Tools.vue +9 -2
  34. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +9 -2
  35. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +2 -0
  36. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +95 -93
  37. package/components/common/monitor/overview/filters/Filters.vue +3 -0
  38. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +15 -5
  39. package/components/common/monitor/overview/filters/customIntervalModal/lib/config/dateChecker.ts +24 -14
  40. package/components/common/pages/hardwareHealth/HardwareHealth.vue +12 -5
  41. package/components/common/pages/hardwareHealth/historyTestimony/Graph.vue +456 -451
  42. package/components/common/pages/hardwareHealth/historyTestimony/tools/Tools.vue +387 -380
  43. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/ChartOptionsModal.vue +13 -6
  44. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/counters/Counters.vue +94 -94
  45. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/counters/timespan/Timespan.vue +66 -66
  46. package/components/common/pages/home/StatusContent.vue +49 -49
  47. package/components/common/pages/home/headline/Headline.vue +44 -44
  48. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  49. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  50. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  51. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  52. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  53. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  54. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  55. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  56. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  57. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  58. package/components/common/pages/home/widgets/vms/VmsNew.vue +101 -101
  59. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  60. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  61. package/components/common/recursionTree/RecursionTree.vue +223 -223
  62. package/components/common/select/button/ButtonDropdown.vue +108 -108
  63. package/components/common/spiceConsole/Drawer.vue +370 -370
  64. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  65. package/components/common/split/vertical/Vertical.vue +160 -160
  66. package/components/common/vm/actions/add/Add.vue +0 -2
  67. package/components/common/vm/actions/clone/Clone.vue +0 -2
  68. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  69. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +0 -3
  70. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +0 -2
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +0 -2
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +1 -9
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +2 -5
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +1 -3
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +4 -6
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +6 -38
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +5 -31
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +5 -31
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +2 -9
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/lib/config/options.ts +4 -11
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +1 -1
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionOld.vue +1 -1
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  136. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  137. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  138. package/components/common/vm/actions/editSettings/EditSettings.vue +0 -3
  139. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +0 -2
  140. package/components/common/vm/actions/editSettings/new/New.vue +0 -2
  141. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  142. package/composables/productNameLocal.ts +30 -30
  143. package/composables/useAppVersion.ts +21 -21
  144. package/package.json +1 -1
  145. package/plugins/date.ts +233 -233
  146. package/plugins/recursion.ts +311 -311
  147. package/public/spice-console/lib/images/bitmap.js +203 -203
  148. package/public/spice-console/network/spicechannel.js +383 -383
  149. package/store/main/mutations.ts +7 -7
  150. package/store/main/state.ts +7 -7
  151. package/store/tasks/mappers/recentTasks.ts +64 -64
  152. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/form/lib/config/dateForm.ts +0 -114
  153. package/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/counters/timespan/form/Form.vue +0 -539
@@ -1,451 +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="[
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 {
87
- UI_I_HardwareHealthHistoryTestimonyTools,
88
- UI_I_HardwareHealthSensorsGraph
89
- } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/models/interfaces'
90
- import type { UI_I_SensorsGraphPayload } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/lib/models/interfaces'
91
- import { containerMediumSize } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/config/containerSizes'
92
-
93
- const emits = defineEmits<{
94
- (event: 'update-tools', value: UI_I_HardwareHealthHistoryTestimonyTools): void
95
- }>()
96
- const props = defineProps<{
97
- powerData: I_SeriesLine | null
98
- temperatureData: I_SeriesLine | null
99
- countersTableData: UI_I_HardwareHealthSensors[]
100
- language: string
101
- powerLoading: boolean
102
- temperatureLoading: boolean
103
- formattedDatetime: any
104
- isDarkMode: boolean
105
- getDateFormat: any
106
- mainSelectedRow: number[]
107
- }>()
108
- const selectedView = defineModel<string>('selectedView')
109
-
110
- const { $store }: any = useNuxtApp()
111
-
112
- const historyTestimonyGraph = ref<any>(null)
113
- const { width } = useElementSize(historyTestimonyGraph)
114
- const isMediumSizeGraphsContainer = computed<boolean>(
115
- () => width.value < containerMediumSize
116
- )
117
-
118
- // const historyTestimonyGraph = ref(null)
119
- // const contentWidth = ref<number>(
120
- // useElementSize(historyTestimonyGraph)?.width || 0
121
- // )
122
- // watch(contentWidth, (newValue) => {
123
- // if (newValue) {
124
- // updatePowerChart()
125
- // updateTemperatureChart()
126
- // }
127
- // if (!powerChart.value || !temperatureChart.value) return
128
- //
129
- // powerChart.value.setSize(1, powerChart.chartHeight)
130
- // temperatureChart.value.setSize(1, temperatureChart.chartHeight)
131
- //
132
- // setTimeout(() => {
133
- // powerChart.value.setSize(newValue, powerChart.chartHeight)
134
- // temperatureChart.value.setSize(newValue, temperatureChart.chartHeight)
135
- // }, 1000)
136
- // })
137
- // const isContentMediumSize = computed<boolean>(() => contentWidth.value <= 1200)
138
-
139
- const selectedChartOptionName = ref<string>('')
140
- const isShowChartModal = ref<boolean>(false)
141
- const selectedMetric = ref<UI_T_Chart>('power')
142
- const selectedPowerCountersKeys = ref<number[]>([])
143
- const selectedTemperatureCountersKeys = ref<number[]>([])
144
- const selectedTimespanType = ref<string>('')
145
- const customDateFrom = ref<string>('')
146
- const customDateTo = ref<string>('')
147
- const customTimeFrom = ref<string>('')
148
- const customTimeTo = ref<string>('')
149
-
150
- const selectedRowPower = ref<number[]>([])
151
- const selectedRowTemperature = ref<number[]>([])
152
- let powerCounters: UI_I_HardwareHealthSensors[] = []
153
- let temperatureCounters: UI_I_HardwareHealthSensors[] = []
154
- const updateAllSelectedSelectedRow = (): void => {
155
- selectedRowPower.value = []
156
- selectedRowTemperature.value = []
157
-
158
- if (!props.mainSelectedRow.length) return
159
-
160
- props.mainSelectedRow.forEach((key) => {
161
- const selectedItem = props.countersTableData[key]
162
- const category = selectedItem.category.toLowerCase()
163
-
164
- if (category === 'power') {
165
- const currentKey = powerCounters.findIndex(
166
- (item) => item.id === selectedItem.id
167
- )
168
- selectedRowPower.value.push(currentKey)
169
- } else if (category === 'temperature') {
170
- const currentKey = temperatureCounters.findIndex(
171
- (item) => item.id === selectedItem.id
172
- )
173
- selectedRowTemperature.value.push(currentKey)
174
- }
175
- })
176
- }
177
- watch(
178
- () => props.countersTableData,
179
- (newValue) => {
180
- powerCounters = newValue.filter(
181
- (item) => item.category.toLowerCase() === 'power'
182
- )
183
- temperatureCounters = newValue.filter(
184
- (item) => item.category.toLowerCase() === 'temperature'
185
- )
186
- },
187
- { deep: true, immediate: true }
188
- )
189
- watch(
190
- () => props.mainSelectedRow,
191
- () => {
192
- updateAllSelectedSelectedRow()
193
- },
194
- { deep: true, immediate: true }
195
- )
196
- watch(
197
- selectedView,
198
- () => {
199
- updateAllSelectedSelectedRow()
200
- },
201
- { deep: true }
202
- )
203
-
204
- const unitsCount = ref<number>(0)
205
- const powerCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
206
- const temperatureCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
207
- const powerSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
208
- const temperatureSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
209
-
210
- watch(
211
- () => props.countersTableData,
212
- (newValue) => {
213
- if (!newValue.length) return
214
-
215
- powerCountersTableData.value = []
216
- temperatureCountersTableData.value = []
217
-
218
- newValue.forEach((item, key) => {
219
- const newData: UI_I_HardwareHealthSensorsGraph = {
220
- id: key,
221
- name: item.name,
222
- description: item.category,
223
- measurement: '',
224
- units: '',
225
- nameEn: item.mainName || '',
226
- testId: `counters-table-${item.name}-item`,
227
- hidden: item.hidden,
228
- }
229
- if (item.category.toLowerCase() === 'power')
230
- powerCountersTableData.value.push(newData)
231
- else if (item.category.toLowerCase() === 'temperature')
232
- temperatureCountersTableData.value.push(newData)
233
- })
234
- },
235
- { immediate: true, deep: true }
236
- )
237
-
238
- const selectAllCounters = (): void => {
239
- if (!powerCountersTableData.value)
240
- setTimeout(() => {
241
- selectAllCounters()
242
- }, 2000)
243
- else {
244
- powerCountersTableData.value.forEach((item) => {
245
- selectedPowerCountersKeys.value.push(item.id)
246
- })
247
- temperatureCountersTableData.value.forEach((item) => {
248
- if (!item.hidden) selectedTemperatureCountersKeys.value.push(item.id)
249
- })
250
- }
251
- }
252
-
253
- onMounted(() => {
254
- selectAllCounters()
255
- })
256
-
257
- const localization = computed<UI_I_Localization>(() => useLocal())
258
-
259
- const powerDataLocal = ref<I_LineGraph | null>(null)
260
- const temperatureDataLocal = ref<I_LineGraph | null>(null)
261
- const updatePowerHelper = ref<number>(0)
262
- const updateTemperatureHelper = ref<number>(0)
263
- let dateFormat = ''
264
- const powerChart = ref<any>(null)
265
- const temperatureChart = ref<any>(null)
266
- const timespanPeriodType = ref<string>('last')
267
-
268
- const powerChartCallback = (newValue: any): void => {
269
- newValue && (powerChart.value = newValue)
270
- }
271
-
272
- const temperatureChartCallback = (newValue: any): void => {
273
- newValue && (temperatureChart.value = newValue)
274
- }
275
-
276
- const updatePowerChart = (): void => {
277
- if (!props.powerData) return
278
-
279
- powerDataLocal.value = graphDataFunc(
280
- props.powerData,
281
- props.isDarkMode,
282
- localization.value,
283
- () => {},
284
- false,
285
- false,
286
- true,
287
- 'spline',
288
- '',
289
- undefined,
290
- powerChartCallback,
291
- props.formattedDatetime,
292
- format,
293
- dateFormat
294
- )
295
-
296
- updatePowerHelper.value++
297
- }
298
-
299
- const updateTemperatureChart = (): void => {
300
- if (!props.temperatureData) return
301
-
302
- temperatureDataLocal.value = graphDataFunc(
303
- props.temperatureData,
304
- props.isDarkMode,
305
- localization.value,
306
- () => {},
307
- false,
308
- false,
309
- true,
310
- 'spline',
311
- '',
312
- undefined,
313
- temperatureChartCallback,
314
- props.formattedDatetime,
315
- format,
316
- dateFormat
317
- )
318
-
319
- updateTemperatureHelper.value++
320
- }
321
-
322
- watch(
323
- () => [props.powerData, props.isDarkMode, props.language],
324
- (newValue) => {
325
- dateFormat = props.getDateFormat(newValue[2])
326
- updatePowerChart()
327
- },
328
- { immediate: true, deep: true }
329
- )
330
-
331
- watch(
332
- () => [props.temperatureData, props.isDarkMode, props.language],
333
- (newValue) => {
334
- dateFormat = props.getDateFormat(newValue[2])
335
- updateTemperatureChart()
336
- },
337
- { immediate: true, deep: true }
338
- )
339
-
340
- const updateSelectedCountersKeys = (metricType: string): void => {
341
- if (metricType === 'power') {
342
- const newKeys: number[] = []
343
-
344
- powerSelectedRowsLocal.value.forEach((item) => {
345
- newKeys.push(item.id)
346
- })
347
- selectedPowerCountersKeys.value = newKeys
348
- } else if (metricType === 'temperature') {
349
- const newKeys: number[] = []
350
-
351
- temperatureSelectedRowsLocal.value.forEach((item) => {
352
- newKeys.push(item.id)
353
- })
354
- selectedTemperatureCountersKeys.value = newKeys
355
- }
356
- }
357
-
358
- const tools: UI_I_HardwareHealthHistoryTestimonyTools = {
359
- periodName: 'real_time',
360
- view: 'power',
361
- metricType: selectedMetric.value,
362
- period: [],
363
- }
364
-
365
- const onSubmitOptions = (data: UI_I_OptionsForm): void => {
366
- selectedTimespanType.value = data.periodName
367
- updateSelectedCountersKeys(data.metric)
368
- if (data.metric === 'power')
369
- $store.dispatch(
370
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
371
- data
372
- )
373
- if (data.metric === 'temperature')
374
- $store.dispatch(
375
- 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
376
- data
377
- )
378
- }
379
-
380
- const onUpdateTools = (data: UI_I_SensorsGraphPayload): void => {
381
- const storageChartOptions = useLocalStorage(
382
- data.view + 'ChartOptionsSensors',
383
- undefined
384
- )
385
-
386
- selectedChartOptionName.value = ''
387
-
388
- if (storageChartOptions) {
389
- selectedChartOptionName.value = data.view
390
- } else {
391
- selectedMetric.value = 'power'
392
- }
393
-
394
- tools.periodName = data.periodName
395
- tools.view = data.view
396
- tools.period = data.period
397
- tools.metricType = data.metricType || selectedMetric.value
398
-
399
- emits('update-tools', tools)
400
- }
401
-
402
- const onDeleteOption = (): void => {}
403
- </script>
404
-
405
- <style scoped lang="scss">
406
- .history-testimony-graph {
407
- display: flex;
408
- align-items: center;
409
- grid-gap: 20px;
410
-
411
- &.medium {
412
- flex-direction: column;
413
-
414
- .graph-container {
415
- width: 100%;
416
- }
417
- }
418
- .graph-container {
419
- width: calc(50% - 10px);
420
- }
421
- &.power {
422
- & > div:nth-child(1) {
423
- width: 100%;
424
- }
425
- & > div:nth-child(2) {
426
- display: none;
427
- width: 0;
428
- }
429
- }
430
- &.temperature {
431
- & > div:nth-child(1) {
432
- display: none;
433
- width: 0;
434
- }
435
- & > div:nth-child(2) {
436
- width: 100%;
437
- }
438
- }
439
-
440
- &__loader-block {
441
- height: inherit;
442
- display: flex;
443
- justify-content: center;
444
- align-items: center;
445
- min-height: 300px;
446
- }
447
- &__empty-content {
448
- height: inherit;
449
- }
450
- }
451
- </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
+ :end-date="props.powerData?.pointEnd || 0"
23
+ :timespan-period-type="timespanPeriodType"
24
+ :valid-date-end="props.validDateEnd"
25
+ :format-date="props.formatDate"
26
+ @power-selected-rows-local="powerSelectedRowsLocal = $event"
27
+ @temperature-selected-rows-local="temperatureSelectedRowsLocal = $event"
28
+ @show-chart-modal="isShowChartModal = true"
29
+ @hide-chart-modal="isShowChartModal = false"
30
+ @update-tools="onUpdateTools"
31
+ @delete-option="onDeleteOption"
32
+ @submit-options="onSubmitOptions"
33
+ @update-period-type="timespanPeriodType = $event"
34
+ />
35
+ <div
36
+ ref="historyTestimonyGraph"
37
+ :class="[
38
+ `history-testimony-graph ${selectedView}`,
39
+ { medium: isMediumSizeGraphsContainer },
40
+ ]"
41
+ >
42
+ <div class="graph-container">
43
+ <common-graph
44
+ v-if="powerDataLocal && !props.powerLoading"
45
+ :data="powerDataLocal"
46
+ :update="updatePowerHelper"
47
+ :chart="powerChart"
48
+ :selected-row="selectedRowPower"
49
+ />
50
+ <div
51
+ v-else-if="props.powerLoading"
52
+ class="history-testimony-graph__loader-block"
53
+ >
54
+ <div class="spinner"></div>
55
+ </div>
56
+ <div v-else class="history-testimony-graph__empty-content"></div>
57
+ </div>
58
+ <div class="graph-container">
59
+ <common-graph
60
+ v-if="temperatureDataLocal && !props.temperatureLoading"
61
+ :data="temperatureDataLocal"
62
+ :update="updateTemperatureHelper"
63
+ :chart="temperatureChart"
64
+ :selected-row="selectedRowTemperature"
65
+ />
66
+ <div
67
+ v-else-if="props.temperatureLoading"
68
+ class="history-testimony-graph__loader-block"
69
+ >
70
+ <div class="spinner"></div>
71
+ </div>
72
+ <div v-else class="history-testimony-graph__empty-content"></div>
73
+ </div>
74
+ </div>
75
+ </template>
76
+
77
+ <script setup lang="ts">
78
+ import { useElementSize } from '@vueuse/core'
79
+ import { format } from 'date-fns'
80
+ import type {
81
+ I_SeriesLine,
82
+ I_LineGraph,
83
+ } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/models/interfaces'
84
+ import { graphDataFunc } from '~/node_modules/bfg-nuxt-3-graph/graph/lib/utils/renderGraph'
85
+ import type { UI_I_OptionsForm } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/interfaces'
86
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
87
+ import type { UI_T_Chart } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/chartOptionsModal/lib/models/types'
88
+ import type { UI_I_HardwareHealthSensors } from '~/components/common/pages/hardwareHealth/tableView/lib/models/interfaces'
89
+ import type {
90
+ UI_I_HardwareHealthHistoryTestimonyTools,
91
+ UI_I_HardwareHealthSensorsGraph,
92
+ } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/models/interfaces'
93
+ import type { UI_I_SensorsGraphPayload } from '~/components/common/pages/hardwareHealth/historyTestimony/tools/lib/models/interfaces'
94
+ import { containerMediumSize } from '~/components/common/pages/hardwareHealth/historyTestimony/lib/config/containerSizes'
95
+
96
+ const emits = defineEmits<{
97
+ (event: 'update-tools', value: UI_I_HardwareHealthHistoryTestimonyTools): void
98
+ }>()
99
+ const props = defineProps<{
100
+ powerData: I_SeriesLine | null
101
+ temperatureData: I_SeriesLine | null
102
+ countersTableData: UI_I_HardwareHealthSensors[]
103
+ language: string
104
+ powerLoading: boolean
105
+ temperatureLoading: boolean
106
+ formattedDatetime: any
107
+ isDarkMode: boolean
108
+ getDateFormat: any
109
+ mainSelectedRow: number[]
110
+ validDateEnd: number
111
+ formatDate: string
112
+ }>()
113
+ const selectedView = defineModel<string>('selectedView')
114
+
115
+ const { $store }: any = useNuxtApp()
116
+
117
+ const historyTestimonyGraph = ref<any>(null)
118
+ const { width } = useElementSize(historyTestimonyGraph)
119
+ const isMediumSizeGraphsContainer = computed<boolean>(
120
+ () => width.value < containerMediumSize
121
+ )
122
+
123
+ // const historyTestimonyGraph = ref(null)
124
+ // const contentWidth = ref<number>(
125
+ // useElementSize(historyTestimonyGraph)?.width || 0
126
+ // )
127
+ // watch(contentWidth, (newValue) => {
128
+ // if (newValue) {
129
+ // updatePowerChart()
130
+ // updateTemperatureChart()
131
+ // }
132
+ // if (!powerChart.value || !temperatureChart.value) return
133
+ //
134
+ // powerChart.value.setSize(1, powerChart.chartHeight)
135
+ // temperatureChart.value.setSize(1, temperatureChart.chartHeight)
136
+ //
137
+ // setTimeout(() => {
138
+ // powerChart.value.setSize(newValue, powerChart.chartHeight)
139
+ // temperatureChart.value.setSize(newValue, temperatureChart.chartHeight)
140
+ // }, 1000)
141
+ // })
142
+ // const isContentMediumSize = computed<boolean>(() => contentWidth.value <= 1200)
143
+
144
+ const selectedChartOptionName = ref<string>('')
145
+ const isShowChartModal = ref<boolean>(false)
146
+ const selectedMetric = ref<UI_T_Chart>('power')
147
+ const selectedPowerCountersKeys = ref<number[]>([])
148
+ const selectedTemperatureCountersKeys = ref<number[]>([])
149
+ const selectedTimespanType = ref<string>('')
150
+ const customDateFrom = ref<string>('')
151
+ const customDateTo = ref<string>('')
152
+ const customTimeFrom = ref<string>('')
153
+ const customTimeTo = ref<string>('')
154
+
155
+ const selectedRowPower = ref<number[]>([])
156
+ const selectedRowTemperature = ref<number[]>([])
157
+ let powerCounters: UI_I_HardwareHealthSensors[] = []
158
+ let temperatureCounters: UI_I_HardwareHealthSensors[] = []
159
+ const updateAllSelectedSelectedRow = (): void => {
160
+ selectedRowPower.value = []
161
+ selectedRowTemperature.value = []
162
+
163
+ if (!props.mainSelectedRow.length) return
164
+
165
+ props.mainSelectedRow.forEach((key) => {
166
+ const selectedItem = props.countersTableData[key]
167
+ const category = selectedItem.category.toLowerCase()
168
+
169
+ if (category === 'power') {
170
+ const currentKey = powerCounters.findIndex(
171
+ (item) => item.id === selectedItem.id
172
+ )
173
+ selectedRowPower.value.push(currentKey)
174
+ } else if (category === 'temperature') {
175
+ const currentKey = temperatureCounters.findIndex(
176
+ (item) => item.id === selectedItem.id
177
+ )
178
+ selectedRowTemperature.value.push(currentKey)
179
+ }
180
+ })
181
+ }
182
+ watch(
183
+ () => props.countersTableData,
184
+ (newValue) => {
185
+ powerCounters = newValue.filter(
186
+ (item) => item.category.toLowerCase() === 'power'
187
+ )
188
+ temperatureCounters = newValue.filter(
189
+ (item) => item.category.toLowerCase() === 'temperature'
190
+ )
191
+ },
192
+ { deep: true, immediate: true }
193
+ )
194
+ watch(
195
+ () => props.mainSelectedRow,
196
+ () => {
197
+ updateAllSelectedSelectedRow()
198
+ },
199
+ { deep: true, immediate: true }
200
+ )
201
+ watch(
202
+ selectedView,
203
+ () => {
204
+ updateAllSelectedSelectedRow()
205
+ },
206
+ { deep: true }
207
+ )
208
+
209
+ const unitsCount = ref<number>(0)
210
+ const powerCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
211
+ const temperatureCountersTableData = ref<UI_I_HardwareHealthSensorsGraph[]>([])
212
+ const powerSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
213
+ const temperatureSelectedRowsLocal = ref<UI_I_HardwareHealthSensorsGraph[]>([])
214
+
215
+ watch(
216
+ () => props.countersTableData,
217
+ (newValue) => {
218
+ if (!newValue.length) return
219
+
220
+ powerCountersTableData.value = []
221
+ temperatureCountersTableData.value = []
222
+
223
+ newValue.forEach((item, key) => {
224
+ const newData: UI_I_HardwareHealthSensorsGraph = {
225
+ id: key,
226
+ name: item.name,
227
+ description: item.category,
228
+ measurement: '',
229
+ units: '',
230
+ nameEn: item.mainName || '',
231
+ testId: `counters-table-${item.name}-item`,
232
+ hidden: item.hidden,
233
+ }
234
+ if (item.category.toLowerCase() === 'power')
235
+ powerCountersTableData.value.push(newData)
236
+ else if (item.category.toLowerCase() === 'temperature')
237
+ temperatureCountersTableData.value.push(newData)
238
+ })
239
+ },
240
+ { immediate: true, deep: true }
241
+ )
242
+
243
+ const selectAllCounters = (): void => {
244
+ if (!powerCountersTableData.value)
245
+ setTimeout(() => {
246
+ selectAllCounters()
247
+ }, 2000)
248
+ else {
249
+ powerCountersTableData.value.forEach((item) => {
250
+ selectedPowerCountersKeys.value.push(item.id)
251
+ })
252
+ temperatureCountersTableData.value.forEach((item) => {
253
+ if (!item.hidden) selectedTemperatureCountersKeys.value.push(item.id)
254
+ })
255
+ }
256
+ }
257
+
258
+ onMounted(() => {
259
+ selectAllCounters()
260
+ })
261
+
262
+ const localization = computed<UI_I_Localization>(() => useLocal())
263
+
264
+ const powerDataLocal = ref<I_LineGraph | null>(null)
265
+ const temperatureDataLocal = ref<I_LineGraph | null>(null)
266
+ const updatePowerHelper = ref<number>(0)
267
+ const updateTemperatureHelper = ref<number>(0)
268
+ let dateFormat = ''
269
+ const powerChart = ref<any>(null)
270
+ const temperatureChart = ref<any>(null)
271
+ const timespanPeriodType = ref<string>('last')
272
+
273
+ const powerChartCallback = (newValue: any): void => {
274
+ newValue && (powerChart.value = newValue)
275
+ }
276
+
277
+ const temperatureChartCallback = (newValue: any): void => {
278
+ newValue && (temperatureChart.value = newValue)
279
+ }
280
+
281
+ const updatePowerChart = (): void => {
282
+ if (!props.powerData) return
283
+
284
+ powerDataLocal.value = graphDataFunc(
285
+ props.powerData,
286
+ props.isDarkMode,
287
+ localization.value,
288
+ () => {},
289
+ false,
290
+ false,
291
+ true,
292
+ 'spline',
293
+ '',
294
+ undefined,
295
+ powerChartCallback,
296
+ props.formattedDatetime,
297
+ format,
298
+ dateFormat
299
+ )
300
+
301
+ updatePowerHelper.value++
302
+ }
303
+
304
+ const updateTemperatureChart = (): void => {
305
+ if (!props.temperatureData) return
306
+
307
+ temperatureDataLocal.value = graphDataFunc(
308
+ props.temperatureData,
309
+ props.isDarkMode,
310
+ localization.value,
311
+ () => {},
312
+ false,
313
+ false,
314
+ true,
315
+ 'spline',
316
+ '',
317
+ undefined,
318
+ temperatureChartCallback,
319
+ props.formattedDatetime,
320
+ format,
321
+ dateFormat
322
+ )
323
+
324
+ updateTemperatureHelper.value++
325
+ }
326
+
327
+ watch(
328
+ () => [props.powerData, props.isDarkMode, props.language],
329
+ (newValue) => {
330
+ dateFormat = props.getDateFormat(newValue[2])
331
+ updatePowerChart()
332
+ },
333
+ { immediate: true, deep: true }
334
+ )
335
+
336
+ watch(
337
+ () => [props.temperatureData, props.isDarkMode, props.language],
338
+ (newValue) => {
339
+ dateFormat = props.getDateFormat(newValue[2])
340
+ updateTemperatureChart()
341
+ },
342
+ { immediate: true, deep: true }
343
+ )
344
+
345
+ const updateSelectedCountersKeys = (metricType: string): void => {
346
+ if (metricType === 'power') {
347
+ const newKeys: number[] = []
348
+
349
+ powerSelectedRowsLocal.value.forEach((item) => {
350
+ newKeys.push(item.id)
351
+ })
352
+ selectedPowerCountersKeys.value = newKeys
353
+ } else if (metricType === 'temperature') {
354
+ const newKeys: number[] = []
355
+
356
+ temperatureSelectedRowsLocal.value.forEach((item) => {
357
+ newKeys.push(item.id)
358
+ })
359
+ selectedTemperatureCountersKeys.value = newKeys
360
+ }
361
+ }
362
+
363
+ const tools: UI_I_HardwareHealthHistoryTestimonyTools = {
364
+ periodName: 'real_time',
365
+ view: 'power',
366
+ metricType: selectedMetric.value,
367
+ period: [],
368
+ }
369
+
370
+ const onSubmitOptions = (data: UI_I_OptionsForm): void => {
371
+ selectedTimespanType.value = data.periodName
372
+ updateSelectedCountersKeys(data.metric)
373
+ if (data.metric === 'power')
374
+ $store.dispatch(
375
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_POWER',
376
+ data
377
+ )
378
+ if (data.metric === 'temperature')
379
+ $store.dispatch(
380
+ 'monitor/A_GET_HARDWARE_HEALTH_HISTORY_TESTIMONY_TEMPERATURE',
381
+ data
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
+ emits('update-tools', tools)
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>