bfg-common 1.5.673 → 1.5.675

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 (125) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  14. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  15. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  16. package/components/common/diagramMain/port/Port.vue +580 -580
  17. package/components/common/layout/bottomPanel/BottomPanel.vue +84 -0
  18. package/components/common/layout/bottomPanel/New.vue +243 -0
  19. package/components/common/layout/bottomPanel/Old.vue +160 -0
  20. package/components/common/layout/bottomPanel/alarms/Alarms.vue +76 -0
  21. package/components/common/layout/bottomPanel/alarms/lib/models/interfaces.ts +23 -0
  22. package/components/common/layout/bottomPanel/alarms/new/New.vue +212 -0
  23. package/components/common/layout/bottomPanel/alarms/new/lib/config/config.ts +193 -0
  24. package/components/common/layout/bottomPanel/alarms/new/lib/models/enums.ts +10 -0
  25. package/components/common/layout/bottomPanel/alarms/new/lib/models/interfaces.ts +12 -0
  26. package/components/common/layout/bottomPanel/alarms/old/Old.vue +191 -0
  27. package/components/common/layout/bottomPanel/alarms/old/lib/config/alarmTables.ts +89 -0
  28. package/components/common/layout/bottomPanel/alarms/old/lib/config/tableKeys.ts +11 -0
  29. package/components/common/layout/bottomPanel/alarms/old/lib/models/types.ts +8 -0
  30. package/components/common/layout/bottomPanel/lib/config/statusFilter.ts +19 -0
  31. package/components/common/layout/bottomPanel/lib/models/types.ts +1 -0
  32. package/components/common/layout/bottomPanel/recentTasks/RecentTasks.vue +49 -0
  33. package/components/common/layout/bottomPanel/recentTasks/lib/models/interfaces.ts +14 -0
  34. package/components/common/layout/bottomPanel/recentTasks/new/New.vue +430 -0
  35. package/components/common/layout/bottomPanel/recentTasks/new/lib/config/config.ts +259 -0
  36. package/components/common/layout/bottomPanel/recentTasks/old/Old.vue +277 -0
  37. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/recentTaskTable.ts +240 -0
  38. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/tableKeys.ts +15 -0
  39. package/components/common/layout/bottomPanel/recentTasks/old/lib/models/types.ts +14 -0
  40. package/components/common/layout/theHeader/TheHeaderNew.vue +315 -315
  41. package/components/common/layout/theHeader/TheHeaderOld.vue +262 -262
  42. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  43. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  44. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +93 -93
  45. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +193 -193
  46. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesOld.vue +144 -144
  47. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  48. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +216 -216
  49. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +31 -31
  50. package/components/common/pages/backups/DetailView.vue +52 -52
  51. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  52. package/components/common/pages/backups/modals/Modals.vue +243 -243
  53. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  54. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  55. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  56. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  57. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  58. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  59. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  60. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  61. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  62. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  63. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  64. package/components/common/qr/Qr.vue +57 -57
  65. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  66. package/components/common/select/radio/RadioGroup.vue +137 -137
  67. package/components/common/spiceConsole/Drawer.vue +420 -420
  68. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  69. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  70. package/components/common/tools/Actions.vue +207 -207
  71. package/components/common/treeView/TreeView.vue +52 -52
  72. package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
  73. package/components/common/vm/actions/clone/new/New.vue +438 -438
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +489 -489
  78. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  79. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  80. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  81. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  82. package/components/common/vm/actions/common/select/options/Old.vue +110 -110
  83. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  84. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  85. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  86. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  87. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  88. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  89. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  90. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  91. package/components/common/wizards/common/compatibility/New.vue +99 -99
  92. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  93. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  94. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  95. package/components/common/wizards/common/steps/name/New.vue +221 -221
  96. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  97. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  98. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  99. package/components/common/wizards/datastore/add/Add.vue +228 -228
  100. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  101. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  102. package/composables/useAppVersion.ts +21 -21
  103. package/composables/useEnvLanguage.ts +22 -22
  104. package/composables/useLocal.ts +6 -6
  105. package/composables/useLocalCommon.ts +39 -39
  106. package/lib/models/enums.ts +65 -1
  107. package/package.json +1 -1
  108. package/plugins/console.ts +21 -21
  109. package/plugins/mouse.ts +21 -21
  110. package/plugins/panelStates.ts +70 -70
  111. package/plugins/text.ts +59 -59
  112. package/public/spice-console/application/clientgui.js +854 -854
  113. package/public/spice-console/application/packetfactory.js +211 -211
  114. package/public/spice-console/application/virtualmouse.js +147 -147
  115. package/public/spice-console/lib/images/bitmap.js +203 -203
  116. package/public/spice-console/network/spicechannel.js +440 -440
  117. package/public/spice-console/process/cursorprocess.js +128 -128
  118. package/public/spice-console/process/inputprocess.js +227 -227
  119. package/public/spice-console/process/mainprocess.js +212 -212
  120. package/public/spice-console/run.js +210 -210
  121. package/store/main/mutations.ts +7 -7
  122. package/store/main/state.ts +7 -7
  123. package/store/tasks/actions.ts +165 -165
  124. package/store/tasks/mappers/recentTasks.ts +123 -123
  125. package/store/tasks/mutations.ts +82 -82
@@ -0,0 +1,259 @@
1
+ import type {
2
+ UI_I_DataTableBody,
3
+ UI_I_DataTableOptions,
4
+ UI_I_DataTableHeader,
5
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
6
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
7
+ import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
8
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
9
+ import { UI_E_RecentTaskStatus } from '~/lib/models/store/tasks/enums'
10
+ import { UI_E_NodeIconsByState } from '~/lib/models/enums'
11
+ import { UI_E_TabsByTypeEnum } from '~/components/common/pages/home/widgets/warnings/table/lib/models/enums'
12
+ import {
13
+ UI_E_RTaskChipColor,
14
+ UI_E_RTaskStatusIcon,
15
+ } from '~/components/common/pages/tasks/table/lib/models/enums'
16
+
17
+ export const getHeaderDataFunc = (
18
+ localization: UI_I_Localization
19
+ ): UI_I_DataTableHeader[] => [
20
+ {
21
+ col: 0,
22
+ colName: 'taskName',
23
+ text: localization.tasks.taskName,
24
+ isSortable: true,
25
+ sort: 'asc',
26
+ sortColumn: true,
27
+ width: '180px',
28
+ show: true,
29
+ filter: true,
30
+ },
31
+ {
32
+ col: 1,
33
+ colName: 'target',
34
+ text: localization.common.target,
35
+ isSortable: true,
36
+ sort: 'asc',
37
+ width: '180px',
38
+ show: true,
39
+ filter: true,
40
+ },
41
+ {
42
+ col: 2,
43
+ colName: 'status',
44
+ text: localization.common.status,
45
+ isSortable: true,
46
+ sort: 'asc',
47
+ width: '180px',
48
+ show: true,
49
+ filter: true,
50
+ },
51
+ {
52
+ col: 3,
53
+ colName: 'details',
54
+ text: localization.common.details,
55
+ isSortable: true,
56
+ sort: 'asc',
57
+ width: '180px',
58
+ show: true,
59
+ filter: true,
60
+ },
61
+ {
62
+ col: 4,
63
+ colName: 'initiator',
64
+ text: localization.common.initiator,
65
+ isSortable: true,
66
+ sort: 'asc',
67
+ width: '180px',
68
+ show: true,
69
+ filter: true,
70
+ },
71
+ {
72
+ col: 5,
73
+ colName: 'queuedFor',
74
+ text: localization.common.queuedFor,
75
+ isSortable: true,
76
+ sort: 'asc',
77
+ width: '180px',
78
+ show: true,
79
+ filter: true,
80
+ },
81
+ {
82
+ col: 6,
83
+ colName: 'startTime',
84
+ text: localization.common.startTime,
85
+ isSortable: true,
86
+ sort: 'asc',
87
+ width: '180px',
88
+ show: true,
89
+ filter: true,
90
+ },
91
+ {
92
+ col: 7,
93
+ colName: 'completionTime',
94
+ text: localization.common.completionTime,
95
+ isSortable: true,
96
+ sort: 'asc',
97
+ width: '180px',
98
+ show: true,
99
+ filter: true,
100
+ },
101
+ {
102
+ col: 8,
103
+ colName: 'executionTime',
104
+ text: localization.common.executionTime,
105
+ isSortable: true,
106
+ sort: 'asc',
107
+ width: '180px',
108
+ show: true,
109
+ filter: true,
110
+ },
111
+ {
112
+ col: 9,
113
+ colName: 'server',
114
+ text: localization.common.server,
115
+ isSortable: true,
116
+ sort: 'asc',
117
+ width: '180px',
118
+ show: true,
119
+ filter: true,
120
+ },
121
+ {
122
+ col: 10,
123
+ colName: 'zone',
124
+ text: localization.common.zone,
125
+ isSortable: true,
126
+ sort: 'asc',
127
+ width: '180px',
128
+ show: true,
129
+ filter: true,
130
+ },
131
+ {
132
+ col: 11,
133
+ colName: 'default-actions',
134
+ text: '',
135
+ show: true,
136
+ },
137
+ ]
138
+
139
+ export const options: UI_I_DataTableOptions = {
140
+ perPageOptions: [
141
+ { text: '10', value: 10 },
142
+ { text: '25', value: 25 },
143
+ { text: '50', value: 50 },
144
+ { text: '100', value: 100 },
145
+ ],
146
+ isSelectable: false,
147
+ isFocusable: false,
148
+ showPagination: true,
149
+ showPageInfo: true,
150
+ isSortable: true,
151
+ server: false,
152
+ isResizable: true,
153
+ showSearch: false,
154
+ showColumnManager: true,
155
+ withActions: true,
156
+ inBlock: true,
157
+ inBlockOnlyLightMode: true,
158
+ }
159
+
160
+ export const getBodyDataFunc = (
161
+ bodyData: UI_I_RecentTaskItem<UI_T_NodeType>[],
162
+ localization: UI_I_Localization
163
+ ): UI_I_DataTableBody[] => {
164
+ const { $store, $text, $formattedDatetime }: any = useNuxtApp()
165
+
166
+ return bodyData.map((task, index: number) => {
167
+ const iconClassName = UI_E_NodeIconsByState[`${task.targetType}_Normal`]
168
+ const id = task.extra?.created_id || task.target
169
+ const targetData = {
170
+ id,
171
+ icon: iconClassName,
172
+ nav: UI_E_TabsByTypeEnum[task.targetType],
173
+ type: task.targetType,
174
+ isLink: true,
175
+ testId: `${task.targetType}-item`,
176
+ }
177
+
178
+ const lang = $store.getters['main/getInterfaceLang']
179
+ const currentOperations = task.statusDetails.map((item) => {
180
+ return {
181
+ ...item,
182
+ operation_type:
183
+ lang === 'en_US'
184
+ ? $text.toCapitalizeEveryWord(item.operation_type)
185
+ : item.operation_type,
186
+ }
187
+ })
188
+ const statusData = {
189
+ icon: UI_E_RTaskStatusIcon[task.status],
190
+ chipColor: UI_E_RTaskChipColor[task.status],
191
+ error: task.error,
192
+ operations: currentOperations,
193
+ failedOperationsCount: task.statusDetails?.filter(
194
+ (item) => item.status !== 4
195
+ ).length,
196
+ testId: `${task.taskName}-progress`,
197
+ index,
198
+ }
199
+
200
+ const formattedStartTime =
201
+ task.startTime === '--'
202
+ ? '--'
203
+ : $formattedDatetime(+task.startTime * 1000, {
204
+ hasSeconds: true,
205
+ })
206
+
207
+ const formattedCompletionTime =
208
+ task.completion === '--'
209
+ ? '--'
210
+ : $formattedDatetime(+task.completion * 1000, {
211
+ hasSeconds: true,
212
+ })
213
+
214
+ return {
215
+ row: index,
216
+ collapse: false,
217
+ isHiddenCollapse: false,
218
+ collapseToggle: false,
219
+ data: [
220
+ { col: 0, text: task.taskName },
221
+ {
222
+ key: 'icon',
223
+ col: 1,
224
+ text: task.target,
225
+ data: targetData,
226
+ },
227
+ {
228
+ key: 'status',
229
+ col: 2,
230
+ text: localization.common[UI_E_RecentTaskStatus[task.status]],
231
+ data: statusData,
232
+ },
233
+ { col: 3, text: task.details || '--' },
234
+ { col: 4, text: task.initiator },
235
+ { col: 5, text: `${task.queuedFor} ms` },
236
+ { col: 6, text: formattedStartTime },
237
+ { col: 7, text: formattedCompletionTime },
238
+ { col: 8, text: `${task.execution} ms` },
239
+ { col: 9, text: task.server },
240
+ {
241
+ key: 'icon',
242
+ col: 10,
243
+ text: task.zone,
244
+ data: {
245
+ icon: 'vsphere-icon-vcenter',
246
+ isLink: false,
247
+ testId: 'zone-item',
248
+ },
249
+ },
250
+ {
251
+ key: 'default-actions',
252
+ col: 'default-actions',
253
+ text: '',
254
+ data: { id: index, target: targetData },
255
+ },
256
+ ],
257
+ }
258
+ })
259
+ }
@@ -0,0 +1,277 @@
1
+ <template>
2
+ <div class="data-table-view">
3
+ <atoms-table-data-grid
4
+ v-model:selected-row="selectedRow"
5
+ v-model:column-keys="columnKeys"
6
+ v-model:page-size="paginationLocal.pageSize"
7
+ v-model:page="paginationLocal.page"
8
+ :head-items="headItems"
9
+ :body-items="bodyItems"
10
+ :total-items="props.totalItems"
11
+ :total-pages="props.totalPages"
12
+ :items-per-page="itemsPerPage"
13
+ :loading="props.loading"
14
+ test-id="bottom-panel-table"
15
+ class="data-table"
16
+ row-attribute-id-name="data-recent-tasks-id"
17
+ hide-pagination
18
+ server-off
19
+ @sorting="onSorting"
20
+ >
21
+ <template #icon="{ item }">
22
+ <div v-if="item.data.isIconSvg" class="data-table-view__col-icon">
23
+ <atoms-the-icon :name="item.data.iconClassName" />
24
+ </div>
25
+ <span v-else :class="['datagrid-cell-icon', item.data.iconClassName]" />
26
+ <a
27
+ v-if="item.data.isLink"
28
+ :id="item.data.id"
29
+ :data-id="`rtask-${item.data.testId}`"
30
+ :title="item.text"
31
+ href="javascript:void(0)"
32
+ class="text-ellipsis"
33
+ @click="onSelectNodeOfTree(item)"
34
+ >{{ item.text }}</a
35
+ >
36
+ <span
37
+ v-else
38
+ :data-id="`rtask-${item.data.testId}`"
39
+ :title="item.text"
40
+ class="text-ellipsis"
41
+ >
42
+ {{ item.text }}
43
+ </span>
44
+
45
+ <div v-if="item.data.operations?.length">
46
+ <div
47
+ :id="'status-details-help-icon' + item.id"
48
+ class="status-details-help-icon signpost-container relative"
49
+ >
50
+ <atoms-the-icon
51
+ :data-id="'toggle-status-details-help-icon' + item.id"
52
+ fill="#0072a3"
53
+ width="21px"
54
+ height="21px"
55
+ name="info-circle"
56
+ class="cursor-pointer"
57
+ @click.stop="
58
+ item.data.isShowStatusDetails = !item.data.isShowStatusDetails
59
+ "
60
+ />
61
+ <atoms-tooltip-signpost
62
+ v-if="item.data.isShowStatusDetails"
63
+ :elem-id="'status-details-help-icon' + item.id"
64
+ test-id="select-datastore-type"
65
+ @hide="item.data.isShowStatusDetails = false"
66
+ >
67
+ <ul class="status-details flex flex-col">
68
+ <li
69
+ v-for="(item2, key2) in item.data.operations"
70
+ :key="key2"
71
+ :data-id="item2.testId"
72
+ class="status-detail-item flex flex-align-baseline"
73
+ >
74
+ <atoms-the-icon
75
+ :name="item2.iconClassName"
76
+ width="16px"
77
+ height="16px"
78
+ />
79
+ <span>{{ item2.operation_type }}:</span>
80
+ <span
81
+ :title="item2.message"
82
+ class="status-detail-item-message"
83
+ >{{ item2.message || '--' }}</span
84
+ >
85
+ </li>
86
+ </ul>
87
+ </atoms-tooltip-signpost>
88
+ </div>
89
+ </div>
90
+ </template>
91
+
92
+ <template #action>
93
+ <div class="flex-space-between flex-align-center">
94
+ <div class="flex-align-center">
95
+ <div class="select">
96
+ <select
97
+ id="bottom-panel-select-type"
98
+ v-model="statusFilter"
99
+ data-id="bottom-panel-select-type-select"
100
+ class="clr-select"
101
+ >
102
+ <option :value="-1">{{ localization.common.all }}</option>
103
+ <option :value="1">{{ localization.common.running }}</option>
104
+ <option :value="3">{{ localization.common.failed }}</option>
105
+ </select>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </template>
110
+ </atoms-table-data-grid>
111
+ </div>
112
+ </template>
113
+
114
+ <script lang="ts" setup>
115
+ import type {
116
+ UI_I_ColumnKey,
117
+ UI_I_HeadItem,
118
+ UI_I_BodyItem,
119
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
120
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
121
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
122
+ import type { UI_I_TreeNodeShort } from '~/components/common/recursionTree/lib/models/interfaces'
123
+ import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
124
+ import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
125
+ import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
126
+ import type { UI_I_SelectNodePayload } from '~/components/common/pages/home/widgets/warnings/table/lib/models/interfaces'
127
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
128
+ import { itemsPerPage } from '~/components/atoms/table/dataGrid/lib/config/itemsPerPage'
129
+ import * as table from '~/components/common/layout/bottomPanel/recentTasks/old/lib/config/recentTaskTable'
130
+
131
+ const statusFilter = defineModel<UI_T_SelectedStatus>('statusFilter', {
132
+ required: true,
133
+ })
134
+
135
+ const props = defineProps<{
136
+ dataTable: UI_I_RecentTaskItem<UI_T_NodeType>[]
137
+ pagination: UI_I_Pagination
138
+ totalItems: number
139
+ totalPages: number
140
+ loading: boolean
141
+ }>()
142
+ const emits = defineEmits<{
143
+ (event: 'pagination', value: UI_I_Pagination | null): void
144
+ (event: 'sort', value: string): void
145
+ }>()
146
+
147
+ const localization = computed<UI_I_Localization>(() => useLocal())
148
+
149
+ const selectedRow = ref<number[]>([])
150
+
151
+ const onSorting = (event: [number, boolean]): void => {
152
+ const [column, status] = event
153
+ const direction = status ? 'desc' : 'asc'
154
+
155
+ const sort = `${column}.${direction}`
156
+
157
+ emits('sort', sort)
158
+ }
159
+
160
+ const paginationLocal = ref<UI_I_Pagination | null>(null)
161
+ watch(
162
+ () => props.pagination,
163
+ (newValue) => {
164
+ paginationLocal.value = newValue
165
+ },
166
+ { immediate: true }
167
+ )
168
+ watch(
169
+ paginationLocal,
170
+ (newValue) => {
171
+ emits('pagination', newValue)
172
+ },
173
+ { deep: true, immediate: true }
174
+ )
175
+
176
+ const columnKeys = ref<UI_I_ColumnKey[]>(table.columnKeys(localization.value))
177
+ watch(localization, () => {
178
+ columnKeys.value = table.columnKeys(localization.value)
179
+ })
180
+
181
+ const headItems = computed<UI_I_HeadItem[]>(() =>
182
+ table.headItems(localization.value)
183
+ )
184
+
185
+ const { $store }: any = useNuxtApp()
186
+ const timeFormat = computed<UI_T_TimeValue>(
187
+ () => $store.getters['main/getTimeFormat']
188
+ )
189
+
190
+ const bodyItems = ref<UI_I_BodyItem[][]>([])
191
+ watch(
192
+ [
193
+ (): UI_I_RecentTaskItem<UI_T_NodeType>[] => props.dataTable,
194
+ statusFilter,
195
+ timeFormat,
196
+ localization,
197
+ ],
198
+ ([newValue1]) => {
199
+ if (!newValue1?.length) {
200
+ bodyItems.value = []
201
+ return
202
+ }
203
+
204
+ bodyItems.value = table.bodyItems(newValue1, statusFilter.value)
205
+ },
206
+ { deep: true, immediate: true }
207
+ )
208
+
209
+ const onSelectNodeOfTree = (data: UI_I_BodyItem): void => {
210
+ const { type, id, nav } = data.data
211
+
212
+ const node: UI_I_TreeNodeShort = {
213
+ id,
214
+ type,
215
+ }
216
+
217
+ // useLocalStorage('sSpec', node)
218
+
219
+ const path = `/inventory/type=${type};nav=${nav};id=${id}/summary`
220
+
221
+ navigateTo(path)
222
+
223
+ const payload: UI_I_SelectNodePayload = {
224
+ node,
225
+ type,
226
+ }
227
+ $store.dispatch('inventory/A_SELECT_NODE', payload)
228
+ }
229
+ </script>
230
+
231
+ <style lang="scss" scoped>
232
+ .data-table-view {
233
+ height: inherit;
234
+ .data-table {
235
+ height: inherit;
236
+ :deep(.datagrid-outer-wrapper) {
237
+ height: inherit;
238
+
239
+ .datagrid-footer__action {
240
+ width: 100%;
241
+
242
+ .select {
243
+ margin-left: 10px;
244
+ }
245
+ }
246
+ }
247
+ }
248
+ &__col-icon {
249
+ min-width: 16px;
250
+ height: 16px;
251
+ margin-right: 2px;
252
+ }
253
+ &__action {
254
+ padding-left: 0.3rem;
255
+ }
256
+
257
+ .status-details-help-icon {
258
+ margin: 4px 0 0 2px;
259
+ }
260
+ .status-details {
261
+ gap: 4px;
262
+
263
+ .status-detail-item {
264
+ gap: 4px;
265
+
266
+ .status-detail-item-message {
267
+ max-width: 200px;
268
+ margin-left: 4px;
269
+ }
270
+
271
+ span {
272
+ color: var(--table-color) !important;
273
+ }
274
+ }
275
+ }
276
+ }
277
+ </style>