bfg-common 1.4.861 → 1.4.862

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 (56) hide show
  1. package/.idea/inspectionProfiles/Project_Default.xml +2 -1
  2. package/assets/localization/local_be.json +3012 -3009
  3. package/assets/localization/local_en.json +5 -2
  4. package/assets/localization/local_hy.json +5 -2
  5. package/assets/localization/local_kk.json +5 -2
  6. package/assets/localization/local_ru.json +5 -2
  7. package/assets/localization/local_zh.json +5 -2
  8. package/components/common/chartOptionsModal/counters/timespan/form/Form.vue +40 -313
  9. package/components/common/chartOptionsModal/counters/timespan/form/FormNew.vue +241 -0
  10. package/components/common/chartOptionsModal/counters/timespan/form/FormOld.vue +372 -0
  11. package/components/common/graph/GraphOld.vue +50 -31
  12. package/components/common/monitor/advanced/Advanced.vue +0 -3
  13. package/components/common/monitor/advanced/AdvancedNew.vue +0 -2
  14. package/components/common/monitor/advanced/AdvancedOld.vue +0 -2
  15. package/components/common/monitor/advanced/graphView/GraphView.vue +16 -18
  16. package/components/common/monitor/advanced/tools/Tools.vue +0 -3
  17. package/components/common/monitor/advanced/tools/ToolsNew.vue +0 -2
  18. package/components/common/monitor/advanced/tools/ToolsOld.vue +0 -2
  19. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModal.vue +113 -114
  20. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModalNew.vue +190 -0
  21. package/components/common/monitor/advanced/tools/chartOptionsModal/ChartOptionsModalOld.vue +189 -0
  22. package/components/common/monitor/advanced/tools/chartOptionsModal/Notification.vue +13 -20
  23. package/components/common/monitor/advanced/tools/chartOptionsModal/NotificationNew.vue +20 -0
  24. package/components/common/monitor/advanced/tools/chartOptionsModal/NotificationOld.vue +27 -0
  25. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/Actions.vue +28 -79
  26. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/ActionsNew.vue +160 -0
  27. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/ActionsOld.vue +114 -0
  28. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/Counters.vue +75 -56
  29. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/CountersNew.vue +97 -0
  30. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/CountersOld.vue +110 -0
  31. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/Table.vue +19 -58
  32. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableNew/TableNew.vue +46 -0
  33. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableNew/config/options.ts +19 -0
  34. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableNew/config/tableData.ts +71 -0
  35. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableNew/utils/constructTable.ts +29 -0
  36. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/tableOld/TableOld.vue +85 -0
  37. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/{lib → tableOld/lib}/config/tableConfig.ts +1 -1
  38. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/Timespan.vue +71 -47
  39. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/TimespanNew.vue +150 -0
  40. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/TimespanOld.vue +95 -0
  41. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/Object.vue +21 -26
  42. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/ObjectNew.vue +56 -0
  43. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/config/options.ts +25 -0
  44. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/config/tableData.ts +47 -0
  45. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/utils/constructTable.ts +22 -0
  46. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectOld/ObjectOld.vue +84 -0
  47. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/Metrics.vue +17 -29
  48. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/MetricsOld.vue +32 -0
  49. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/metricsNew/MetricsNew.vue +101 -0
  50. package/components/common/monitor/advanced/tools/chartOptionsModal/metrics/metricsNew/lib/utils/constructAccordion.ts +32 -0
  51. package/components/common/monitor/overview/Overview.vue +224 -221
  52. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalNew.vue +186 -181
  53. package/components/common/pages/hardwareHealth/historyTestimony/Graph.vue +26 -30
  54. package/lib/utils/date.ts +12 -0
  55. package/package.json +2 -2
  56. /package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/{lib → tableOld/lib}/models/types.ts +0 -0
@@ -0,0 +1,95 @@
1
+ <template>
2
+ <div class="timespan-objects-section-direction">
3
+ <common-chart-options-modal-counters-timespan-form
4
+ :language="props.language"
5
+ :selected-chart-type="props.selectedChartType"
6
+ :selected-timespan-type="props.selectedTimespanType"
7
+ :units-count="props.unitsCount"
8
+ :period-type="props.periodType"
9
+ :selected-custom-time="props.selectedCustomTime"
10
+ :custom-date-from="props.customDateFrom"
11
+ :custom-date-to="props.customDateTo"
12
+ :custom-time-from="props.customTimeFrom"
13
+ :custom-time-to="props.customTimeTo"
14
+ :valid-date-end="props.validDateEnd"
15
+ @update-chart-type="emits('update-chart-type', $event)"
16
+ @update-custom-time="emits('update-custom-time', $event)"
17
+ @update-timespan-type="emits('update-timespan-type', $event)"
18
+ @update-unit-count="emits('update-unit-count', $event)"
19
+ @update-period-type="emits('update-period-type', $event)"
20
+ @update-custom-date-from="emits('update-custom-date-from', $event)"
21
+ @update-custom-date-to="emits('update-custom-date-to', $event)"
22
+ @update-custom-time-from="emits('update-custom-time-from', $event)"
23
+ @update-custom-time-to="emits('update-custom-time-to', $event)"
24
+ />
25
+ <common-monitor-advanced-tools-chart-options-modal-counters-timespan-object
26
+ :type="props.type"
27
+ :chart="props.chart"
28
+ :total-cores="props.totalCores"
29
+ :host-id="props.hostId"
30
+ :selected-metrics-keys="props.selectedMetricsKeys"
31
+ :total-metric-items="props.totalMetricItems"
32
+ :selected-objects="props.selectedObjects"
33
+ :loading="props.objectsLoading"
34
+ :current-items="props.objectsData"
35
+ @select-objects="emits('select-objects', $event)"
36
+ />
37
+ </div>
38
+ </template>
39
+
40
+ <script setup lang="ts">
41
+ import type { UI_T_AdvancedType } from '~/components/common/monitor/advanced/lib/models/types'
42
+ import type {
43
+ UI_T_ChartHost,
44
+ UI_T_ChartVm,
45
+ } from '~/components/common/monitor/advanced/tools/chartOptionsModal/lib/models/types'
46
+ import type { UI_I_ObjectItem } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/lib/models/interfaces'
47
+
48
+ const props = defineProps<{
49
+ type: UI_T_AdvancedType
50
+ chart: UI_T_ChartHost | UI_T_ChartVm
51
+ language: string
52
+ selectedChartType: string
53
+ selectedTimespanType: string
54
+ unitsCount: number
55
+ periodType: string
56
+ selectedCustomTime: string
57
+ customDateFrom: string
58
+ customDateTo: string
59
+ customTimeFrom: string
60
+ customTimeTo: string
61
+ totalCores: number
62
+ hostId: string
63
+ selectedMetricsKeys: number[]
64
+ totalMetricItems: number
65
+ selectedObjects: string
66
+ objectsLoading: boolean
67
+ objectsData: UI_I_ObjectItem[]
68
+ validDateEnd: number
69
+ }>()
70
+
71
+ const emits = defineEmits<{
72
+ (event: 'update-chart-type', value: string): void
73
+ (event: 'update-custom-time', value: string): void
74
+ (event: 'update-timespan-type', value: string): void
75
+ (event: 'update-unit-count', value: number): void
76
+ (event: 'update-period-type', value: string): void
77
+ (event: 'update-custom-date-from', value: string): void
78
+ (event: 'update-custom-date-to', value: string): void
79
+ (event: 'update-custom-time-from', value: string): void
80
+ (event: 'update-custom-time-to', value: string): void
81
+ (event: 'select-objects', value: string): void
82
+ }>()
83
+ </script>
84
+
85
+ <style scoped lang="scss">
86
+ .timespan-objects-section-direction {
87
+ display: flex;
88
+ flex-direction: row;
89
+ }
90
+ @media (max-width: 1024px) {
91
+ .timespan-objects-section-direction {
92
+ flex-direction: column;
93
+ }
94
+ }
95
+ </style>
@@ -1,30 +1,21 @@
1
1
  <template>
2
- <div class="vertical-flex-container chart-option-objects-split">
3
- <span class="chart-options-grid-title">
4
- {{ localization.inventoryMonitor.selectObjectForChart }}:
5
- </span>
6
- <div class="flex-to-absolute-positioning-container">
7
- <div class="flex-to-absolute-positioning-container-inner">
8
- <atoms-table-data-grid
9
- v-model:selected-row="selectedRow"
10
- v-model:column-keys="columnItems"
11
- v-model:page-size="pagination.pageSize"
12
- v-model:page="pagination.page"
13
- :type="tableType"
14
- class="data-table"
15
- test-id="object-table"
16
- :loading="props.loading"
17
- :head-items="headItems"
18
- :body-items="bodyItems"
19
- :total-items="bodyItems.length"
20
- :total-pages="1"
21
- hide-footer
22
- server-off
23
- >
24
- </atoms-table-data-grid>
25
- </div>
26
- </div>
27
- </div>
2
+ <common-monitor-advanced-tools-chart-options-modal-counters-timespan-object-object-new
3
+ v-if="isNewView"
4
+ v-model:selected-row="selectedRow"
5
+ :table-type="tableType"
6
+ :loading="props.loading"
7
+ :body-items="bodyItems"
8
+ />
9
+ <common-monitor-advanced-tools-chart-options-modal-counters-timespan-object-object-old
10
+ v-else
11
+ v-model:selected-row="selectedRow"
12
+ v-model:column-items="columnItems"
13
+ v-model:pagination="pagination"
14
+ :table-type="tableType"
15
+ :loading="props.loading"
16
+ :head-items="headItems"
17
+ :body-items="bodyItems"
18
+ />
28
19
  </template>
29
20
 
30
21
  <script setup lang="ts">
@@ -61,6 +52,10 @@ const emits = defineEmits<{
61
52
  (event: 'select-objects', value: string): void
62
53
  }>()
63
54
 
55
+ const { $store }: any = useNuxtApp()
56
+
57
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
58
+
64
59
  const localization = computed<UI_I_Localization>(() => useLocal())
65
60
 
66
61
  const tableType = computed<UI_T_DataGridType>(() => {
@@ -0,0 +1,56 @@
1
+ <template>
2
+ <div class="object-table-container">
3
+ <ui-data-table
4
+ test-id="object-table"
5
+ :data="dataLocal"
6
+ :options="optionsData"
7
+ :loading="props.loading"
8
+ size="sm"
9
+ @select-row="onSelectRow"
10
+ />
11
+ </div>
12
+ </template>
13
+
14
+ <script setup lang="ts">
15
+ import type {
16
+ UI_I_DataTable,
17
+ UI_I_DataTableBody,
18
+ UI_I_DataTableOptions,
19
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
20
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
21
+ import type { UI_T_DataGridType } from '~/components/atoms/table/dataGrid/lib/models/types'
22
+ import type { UI_I_BodyItem } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
23
+ import { options } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/config/options'
24
+ import { tableDataFunc } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/config/tableData'
25
+
26
+ const selectedRowLocal = defineModel<number[] | number>('selectedRow', {
27
+ required: true,
28
+ })
29
+
30
+ const props = defineProps<{
31
+ tableType: UI_T_DataGridType
32
+ loading: boolean
33
+ bodyItems: UI_I_BodyItem[][]
34
+ }>()
35
+
36
+ const localization = computed<UI_I_Localization>(() => useLocal())
37
+
38
+ const optionsData = computed<UI_I_DataTableOptions>(() =>
39
+ options(props.tableType)
40
+ )
41
+ const dataLocal = computed<UI_I_DataTable>(() =>
42
+ tableDataFunc(localization.value, props.bodyItems, selectedRowLocal.value)
43
+ )
44
+
45
+ const onSelectRow = (value: UI_I_DataTableBody[]): void => {
46
+ selectedRowLocal.value = value.map((item) => item.row)
47
+ }
48
+ </script>
49
+
50
+ <style scoped lang="scss">
51
+ .object-table-container {
52
+ :deep(.bottom-grid-content) {
53
+ height: 170px;
54
+ }
55
+ }
56
+ </style>
@@ -0,0 +1,25 @@
1
+ import type { UI_I_DataTableOptions } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
2
+ import type { UI_T_DataGridType } from '~/components/atoms/table/dataGrid/lib/models/types'
3
+
4
+ export const options = (
5
+ selectType: UI_T_DataGridType
6
+ ): UI_I_DataTableOptions => {
7
+ return {
8
+ perPageOptions: [
9
+ { text: '10', value: 10 },
10
+ { text: '25', value: 25 },
11
+ { text: '50', value: 50 },
12
+ { text: '100', value: 100 },
13
+ ],
14
+ isSelectable: true,
15
+ selectType,
16
+ showPagination: false,
17
+ showPageInfo: false,
18
+ isSortable: true,
19
+ server: false,
20
+ isResizable: true,
21
+ showSearch: false,
22
+ showColumnManager: false,
23
+ inBlock: true,
24
+ }
25
+ }
@@ -0,0 +1,47 @@
1
+ import type { UI_I_DataTable } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
2
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
3
+ import type { UI_I_BodyItem } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
4
+ import { constructTable } from '~/components/common/monitor/advanced/tools/chartOptionsModal/counters/timespan/object/objectNew/lib/utils/constructTable'
5
+
6
+ export const tableDataFunc = (
7
+ localization: UI_I_Localization,
8
+ items: UI_I_BodyItem[][],
9
+ selectedKeys: number[] | number
10
+ ): UI_I_DataTable => {
11
+ const currentBody = constructTable(items)
12
+ const selectedRows: number[] = []
13
+
14
+ currentBody.forEach((item) => {
15
+ if (Array.isArray(selectedKeys)) {
16
+ if (selectedKeys.includes(item.row)) {
17
+ selectedRows.push(item.row)
18
+ }
19
+ } else {
20
+ if (selectedKeys === item.row) {
21
+ selectedRows.push(item.row)
22
+ }
23
+ }
24
+ })
25
+
26
+ return {
27
+ id: 'object-table',
28
+ selectedRows,
29
+ isAllSelected: false,
30
+ title: `${localization.inventoryMonitor.targetObjects} (${items.length})`,
31
+ subTitle: '',
32
+ header: [
33
+ {
34
+ col: 'col0',
35
+ colName: 'targetObjects',
36
+ text: localization.inventoryMonitor.targetObjects,
37
+ isSortable: true,
38
+ sort: 'asc',
39
+ width: '100%',
40
+ show: true,
41
+ filter: true,
42
+ },
43
+ ],
44
+
45
+ body: currentBody,
46
+ }
47
+ }
@@ -0,0 +1,22 @@
1
+ import type { UI_I_DataTableBody } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
2
+ import type { UI_I_BodyItem } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
3
+
4
+ export const constructTable = (
5
+ items: UI_I_BodyItem[][]
6
+ ): UI_I_DataTableBody[] => {
7
+ const result: UI_I_DataTableBody[] = []
8
+
9
+ items.forEach((item) => {
10
+ result.push({
11
+ row: Number(item[0].id),
12
+ data: [
13
+ {
14
+ col: 'col0',
15
+ text: String(item[0].text),
16
+ },
17
+ ],
18
+ })
19
+ })
20
+
21
+ return result
22
+ }
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <div class="vertical-flex-container chart-option-objects-split">
3
+ <span class="chart-options-grid-title">
4
+ {{ localization.inventoryMonitor.selectObjectForChart }}:
5
+ </span>
6
+ <div class="flex-to-absolute-positioning-container">
7
+ <div class="flex-to-absolute-positioning-container-inner">
8
+ <atoms-table-data-grid
9
+ v-model:selected-row="selectedRowLocal"
10
+ v-model:column-keys="columnItemsLocal"
11
+ v-model:page-size="paginationLocal.pageSize"
12
+ v-model:page="paginationLocal.page"
13
+ :type="props.tableType"
14
+ class="data-table"
15
+ test-id="object-table"
16
+ :loading="props.loading"
17
+ :head-items="props.headItems"
18
+ :body-items="props.bodyItems"
19
+ :total-items="props.bodyItems.length"
20
+ :total-pages="1"
21
+ hide-footer
22
+ server-off
23
+ >
24
+ </atoms-table-data-grid>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup lang="ts">
31
+ import type {
32
+ UI_I_HeadItem,
33
+ UI_I_BodyItem,
34
+ UI_I_ColumnKey,
35
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
36
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
37
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
38
+ import type { UI_T_DataGridType } from '~/components/atoms/table/dataGrid/lib/models/types'
39
+
40
+ const selectedRowLocal = defineModel<number[] | number>('selectedRow', {
41
+ required: true,
42
+ })
43
+ const columnItemsLocal = defineModel<UI_I_ColumnKey[]>('columnItems', {
44
+ required: true,
45
+ })
46
+ const paginationLocal = defineModel<UI_I_Pagination>('pagination', {
47
+ required: true,
48
+ })
49
+
50
+ const props = defineProps<{
51
+ tableType: UI_T_DataGridType
52
+ loading: boolean
53
+ headItems: UI_I_HeadItem[]
54
+ bodyItems: UI_I_BodyItem[][]
55
+ }>()
56
+
57
+ const localization = computed<UI_I_Localization>(() => useLocal())
58
+ </script>
59
+
60
+ <style scoped lang="scss">
61
+ .chart-option-objects-split {
62
+ flex: 1;
63
+
64
+ .chart-options-grid-title {
65
+ display: block;
66
+ margin-bottom: -20px;
67
+ }
68
+ .flex-to-absolute-positioning-container {
69
+ height: 100%;
70
+ max-height: 204px;
71
+ .flex-to-absolute-positioning-container-inner {
72
+ height: inherit;
73
+
74
+ .data-table {
75
+ height: inherit;
76
+
77
+ :deep(.datagrid-outer-wrapper) {
78
+ height: inherit;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ </style>
@@ -1,42 +1,30 @@
1
1
  <template>
2
- <div class="chart-option-groups-container">
3
- <span>{{ localization.inventoryMonitor.chartMetrics }}</span>
4
- <atoms-tabs-vertical-tabs
5
- v-model="selectedMetricLocal"
6
- :items="props.metricsItems"
7
- />
8
- </div>
2
+ <common-monitor-advanced-tools-chart-options-modal-metrics-metrics-new
3
+ v-if="isNewView"
4
+ v-model:selected-metric="selectedMetricLocal"
5
+ :metrics-items="props.metricsItems"
6
+ />
7
+ <common-monitor-advanced-tools-chart-options-modal-metrics-old
8
+ v-else
9
+ v-model:selected-metric="selectedMetricLocal"
10
+ :metrics-items="props.metricsItems"
11
+ />
9
12
  </template>
10
13
 
11
14
  <script setup lang="ts">
12
- import type { UI_I_Localization } from '~/lib/models/interfaces'
13
15
  import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
14
16
 
17
+ const selectedMetricLocal = defineModel<string>('selectedMetric', {
18
+ required: true,
19
+ })
20
+
15
21
  const props = defineProps<{
16
22
  metricsItems: UI_I_VerticalTabs[]
17
- selectedMetric: string
18
23
  }>()
19
24
 
20
- const emits = defineEmits<{
21
- (event: 'update:selected-metric', value: string): void
22
- }>()
25
+ const { $store }: any = useNuxtApp()
23
26
 
24
- const localization = computed<UI_I_Localization>(() => useLocal())
25
-
26
- const selectedMetricLocal = computed<string>({
27
- get() {
28
- return props.selectedMetric
29
- },
30
- set(newValue) {
31
- emits('update:selected-metric', newValue)
32
- },
33
- })
27
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
34
28
  </script>
35
29
 
36
- <style scoped lang="scss">
37
- .chart-option-groups-container {
38
- margin-top: 10px;
39
- flex-basis: 20%;
40
- //min-width: 20%;
41
- }
42
- </style>
30
+ <style scoped lang="scss"></style>
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <div class="chart-option-groups-container">
3
+ <span>{{ localization.inventoryMonitor.chartMetrics }}</span>
4
+ <atoms-tabs-vertical-tabs
5
+ v-model="selectedMetricLocal"
6
+ :items="props.metricsItems"
7
+ />
8
+ </div>
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
13
+ import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
14
+
15
+ const selectedMetricLocal = defineModel<string>('selectedMetric', {
16
+ required: true,
17
+ })
18
+
19
+ const props = defineProps<{
20
+ metricsItems: UI_I_VerticalTabs[]
21
+ }>()
22
+
23
+ const localization = computed<UI_I_Localization>(() => useLocal())
24
+ </script>
25
+
26
+ <style scoped lang="scss">
27
+ .chart-option-groups-container {
28
+ margin-top: 10px;
29
+ flex-basis: 20%;
30
+ //min-width: 20%;
31
+ }
32
+ </style>
@@ -0,0 +1,101 @@
1
+ <template>
2
+ <ui-accordion-recursion
3
+ v-for="(item, key) in accordionItems"
4
+ id="metrics-accordion-recursion"
5
+ :key="item.id"
6
+ :test-id="`${item.testId}-${key}`"
7
+ :accordion="item"
8
+ >
9
+ <template #header="{ data }">
10
+ <span class="main-headline">{{ data.headline }}</span>
11
+ </template>
12
+ <template #body="{ data }">
13
+ <div
14
+ v-for="(item2, key2) in data.children"
15
+ :key="key2"
16
+ class="accordion-main-text-content"
17
+ @click="selectedMetricLocal = item2.data.value"
18
+ >
19
+ <span
20
+ :class="[
21
+ 'accordion-toggle-item',
22
+ { active: selectedMetricLocal === item2.data.value },
23
+ ]"
24
+ >
25
+ <span
26
+ :title="item2.headline"
27
+ class="accordion-toggle-item-text metrics-accordion-toggle-item-text text-ellipsis"
28
+ >{{ item2.headline }}</span
29
+ >
30
+ </span>
31
+ <div v-if="data.children.length - 1 > key2" class="divider"></div>
32
+ </div>
33
+ </template>
34
+ </ui-accordion-recursion>
35
+ </template>
36
+
37
+ <script setup lang="ts">
38
+ import type { UI_I_Accordion } from '~/node_modules/bfg-uikit/components/ui/accordion/models/interfaces'
39
+ import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
40
+ import { constructAccordion } from '~/components/common/monitor/advanced/tools/chartOptionsModal/metrics/metricsNew/lib/utils/constructAccordion'
41
+ import { updateElementShowWithId } from 'bfg-uikit/components/ui/accordion/utils/recursion'
42
+
43
+ const selectedMetricLocal = defineModel<string>('selectedMetric', {
44
+ required: true,
45
+ })
46
+
47
+ const props = defineProps<{
48
+ metricsItems: UI_I_VerticalTabs[]
49
+ }>()
50
+
51
+ const accordionItems = ref<UI_I_Accordion[]>(
52
+ constructAccordion(props.metricsItems)
53
+ )
54
+
55
+ const onToggle = (id: number): void => {
56
+ accordionItems.value = updateElementShowWithId(accordionItems.value, id)
57
+ }
58
+
59
+ onMounted(() => {
60
+ onToggle(0)
61
+ })
62
+ </script>
63
+
64
+ <style>
65
+ :root {
66
+ --metrics-accordion-bg-color: #ffffff;
67
+ --metrics-accordion-item-color: #4d5d69;
68
+ }
69
+ :root.dark-theme {
70
+ --metrics-accordion-bg-color: #334453;
71
+ --metrics-accordion-item-color: #e9eaec;
72
+ }
73
+ </style>
74
+ <style scoped lang="scss">
75
+ #metrics-accordion-recursion {
76
+ padding: 12px;
77
+ background: var(--metrics-accordion-bg-color);
78
+ box-shadow: 0 1px 4px 0 #00000014;
79
+ border-radius: 8px;
80
+
81
+ .main-headline {
82
+ font-size: 14px;
83
+ font-weight: 500;
84
+ color: var(--metrics-accordion-item-color);
85
+ }
86
+ :deep(.accordion-toggle-item-icon) {
87
+ display: none;
88
+ }
89
+ .accordion-toggle-item {
90
+ padding-left: 24px;
91
+
92
+ &:not(.active) {
93
+ color: var(--metrics-accordion-item-color);
94
+ }
95
+ .metrics-accordion-toggle-item-text {
96
+ font-size: 13px;
97
+ font-weight: 500;
98
+ }
99
+ }
100
+ }
101
+ </style>
@@ -0,0 +1,32 @@
1
+ import type { UI_I_Accordion } from '~/node_modules/bfg-uikit/components/ui/accordion/models/interfaces'
2
+ import type { UI_I_VerticalTabs } from '~/components/atoms/tabs/lib/models/interfaces'
3
+
4
+ export const constructAccordion = (
5
+ items: UI_I_VerticalTabs[]
6
+ ): UI_I_Accordion[] => {
7
+ const localization = useLocal()
8
+ return [
9
+ {
10
+ id: 0,
11
+ testId: 'metrics-headline',
12
+ headline: `${localization.zabbix.metrics} (${items.length})`,
13
+ expended: false,
14
+ disabled: false,
15
+ hasChild: true,
16
+ children: items.map((item: UI_I_VerticalTabs, key) => {
17
+ return {
18
+ id: key + 1,
19
+ testId: `accordion-item-${item.value}`,
20
+ headline: item.text,
21
+ expended: false,
22
+ disabled: false,
23
+ hasChild: false,
24
+ children: [],
25
+ data: {
26
+ value: item.value,
27
+ },
28
+ }
29
+ }),
30
+ },
31
+ ]
32
+ }