bfg-common 1.5.773 → 1.5.774

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 (154) 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 +19 -4
  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/configure/advancedSystemSettings/AdvancedSystemSettings.vue +49 -0
  16. package/components/common/configure/advancedSystemSettings/modals/edit/Edit.vue +55 -0
  17. package/components/common/configure/advancedSystemSettings/modals/edit/New.vue +37 -0
  18. package/components/common/configure/advancedSystemSettings/modals/edit/Old.vue +46 -0
  19. package/components/common/configure/advancedSystemSettings/tableView/TableView.vue +30 -0
  20. package/components/common/configure/advancedSystemSettings/tableView/new/New.vue +193 -0
  21. package/components/common/configure/advancedSystemSettings/tableView/new/lib/config/hostTable.ts +308 -0
  22. package/components/common/configure/advancedSystemSettings/tableView/old/Old.vue +128 -0
  23. package/components/common/configure/advancedSystemSettings/tableView/old/lib/config/table.ts +93 -0
  24. package/components/common/configure/advancedSystemSettings/tableView/old/lib/config/tableKeys.ts +9 -0
  25. package/components/common/configure/advancedSystemSettings/tableView/old/lib/models/types.ts +5 -0
  26. package/components/common/configure/advancedSystemSettings/tools/New.vue +5 -0
  27. package/components/common/configure/advancedSystemSettings/tools/Old.vue +28 -0
  28. package/components/common/configure/advancedSystemSettings/tools/Tools.vue +28 -0
  29. package/components/common/configure/securityProfile/SecurityProfile.vue +28 -0
  30. package/components/common/configure/securityProfile/lockdownMode/LockdownMode.vue +112 -0
  31. package/components/common/configure/securityProfile/lockdownMode/lib/utils/constructData.ts +27 -0
  32. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/LockdownModeEdit.vue +61 -0
  33. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/New.vue +5 -0
  34. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/Old.vue +109 -0
  35. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/ExceptionUsers.vue +28 -0
  36. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/New.vue +5 -0
  37. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/Old.vue +180 -0
  38. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/config/table.ts +64 -0
  39. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/config/tableKeys.ts +6 -0
  40. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/exceptionUsers/old/lib/models/types.ts +1 -0
  41. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lib/config/tabs.ts +19 -0
  42. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/LockdownMode.vue +22 -0
  43. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/New.vue +5 -0
  44. package/components/common/configure/securityProfile/lockdownMode/modals/lockdownModeEdit/lockdownMode/Old.vue +76 -0
  45. package/components/common/configure/securityProfile/lockdownMode/tools/New.vue +5 -0
  46. package/components/common/configure/securityProfile/lockdownMode/tools/Old.vue +30 -0
  47. package/components/common/configure/securityProfile/lockdownMode/tools/Tools.vue +29 -0
  48. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  49. package/components/common/diagramMain/port/Port.vue +580 -580
  50. package/components/common/layout/console/Console.vue +70 -70
  51. package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
  52. package/components/common/layout/theHeader/userMenu/modals/preferences/view/New.vue +64 -64
  53. package/components/common/pages/backups/DetailView.vue +52 -52
  54. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  55. package/components/common/pages/backups/modals/Modals.vue +243 -243
  56. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +29 -29
  57. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
  58. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
  59. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
  60. package/components/common/pages/backups/modals/lib/config/restore.ts +116 -116
  61. package/components/common/pages/backups/modals/lib/models/interfaces.ts +187 -187
  62. package/components/common/pages/backups/modals/restore/Restore.vue +302 -302
  63. package/components/common/pages/backups/modals/restore/disks/Disks.vue +50 -50
  64. package/components/common/pages/backups/modals/restore/lib/config/readyToCompleteOptions.ts +94 -94
  65. package/components/common/pages/backups/modals/restore/lib/config/steps.ts +130 -130
  66. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  67. package/components/common/pages/backups/modals/restore/types/New.vue +95 -95
  68. package/components/common/pages/backups/modals/restore/types/Old.vue +62 -62
  69. package/components/common/pages/backups/modals/restore/types/Types.vue +31 -31
  70. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  71. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  72. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  73. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  74. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  75. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  76. package/components/common/pages/scheduledTasks/table/Table.vue +3 -11
  77. package/components/common/pages/scheduledTasks/table/expandDetails/ExpandDetails.vue +30 -0
  78. package/components/common/pages/scheduledTasks/table/expandDetails/New.vue +61 -0
  79. package/components/common/pages/scheduledTasks/table/{detailsList/DetailsList.vue → expandDetails/Old.vue} +7 -4
  80. package/components/common/pages/scheduledTasks/table/{detailsList/Table.vue → expandDetails/historyRun/HistoryRun.vue} +9 -5
  81. package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/config/historyRunsTable.ts +4 -2
  82. package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/config/tableKeys.ts +1 -1
  83. package/components/common/pages/scheduledTasks/table/{detailsList/lib/config/tasksRowDetails.ts → expandDetails/lib/config/expandDetails.ts} +3 -1
  84. package/components/common/pages/scheduledTasks/table/lib/config/scheduledTasksTable.ts +3 -0
  85. package/components/common/pages/tasks/Tasks.vue +125 -125
  86. package/components/common/pages/tasks/table/Table.vue +373 -373
  87. package/components/common/pages/tasks/table/lib/config/config.ts +279 -279
  88. package/components/common/pages/tasks/table/lib/models/interfaces.ts +9 -9
  89. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  90. package/components/common/select/radio/RadioGroup.vue +137 -137
  91. package/components/common/spiceConsole/Drawer.vue +420 -420
  92. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  93. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  94. package/components/common/tools/Actions.vue +207 -207
  95. package/components/common/treeView/TreeView.vue +52 -52
  96. package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
  97. package/components/common/vm/actions/clone/new/New.vue +438 -438
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
  101. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  102. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  103. package/components/common/vm/actions/common/select/options/New.vue +264 -264
  104. package/components/common/vm/actions/common/select/options/Options.vue +58 -58
  105. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  106. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  107. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  108. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  109. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  110. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  111. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  112. package/components/common/wizards/common/steps/name/New.vue +221 -221
  113. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  114. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  115. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  116. package/components/common/wizards/datastore/add/Add.vue +227 -227
  117. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  118. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  119. package/composables/useAppVersion.ts +21 -21
  120. package/composables/useBrowse.ts +24 -24
  121. package/composables/useLocal.ts +6 -6
  122. package/composables/useLocalCommon.ts +39 -39
  123. package/lib/models/types.ts +59 -59
  124. package/package.json +1 -1
  125. package/plugins/console.ts +21 -21
  126. package/plugins/mouse.ts +21 -21
  127. package/plugins/panelStates.ts +70 -70
  128. package/plugins/text.ts +59 -59
  129. package/public/spice-console/application/clientgui.js +854 -854
  130. package/public/spice-console/application/packetfactory.js +211 -211
  131. package/public/spice-console/application/virtualmouse.js +147 -147
  132. package/public/spice-console/lib/images/bitmap.js +203 -203
  133. package/public/spice-console/network/spicechannel.js +440 -440
  134. package/public/spice-console/process/cursorprocess.js +128 -128
  135. package/public/spice-console/process/inputprocess.js +227 -227
  136. package/public/spice-console/process/mainprocess.js +212 -212
  137. package/public/spice-console/run.js +210 -210
  138. package/store/inventory/modules/configure/advancedSystemSettings/actions.ts +122 -0
  139. package/store/inventory/modules/configure/advancedSystemSettings/getters.ts +9 -0
  140. package/store/inventory/modules/configure/advancedSystemSettings/lib/models/interfaces.ts +11 -0
  141. package/store/inventory/modules/configure/advancedSystemSettings/mutations.ts +12 -0
  142. package/store/inventory/modules/configure/advancedSystemSettings/state.ts +9 -0
  143. package/store/inventory/modules/configure/advancedSystemSettings/store.ts +12 -0
  144. package/store/inventory/modules/configure/securityProfile/actions.ts +58 -0
  145. package/store/inventory/modules/configure/securityProfile/getters.ts +10 -0
  146. package/store/inventory/modules/configure/securityProfile/lib/models/interfaces.ts +16 -0
  147. package/store/inventory/modules/configure/securityProfile/mutations.ts +13 -0
  148. package/store/inventory/modules/configure/securityProfile/state.ts +7 -0
  149. package/store/inventory/modules/configure/securityProfile/store.ts +12 -0
  150. package/store/main/mutations.ts +7 -7
  151. package/store/main/state.ts +7 -7
  152. package/store/tasks/mappers/recentTasks.ts +123 -123
  153. package/store/tasks/mutations.ts +82 -82
  154. /package/components/common/pages/scheduledTasks/table/{detailsList → expandDetails/historyRun}/lib/models/types.ts +0 -0
@@ -1,373 +1,373 @@
1
- <template>
2
- <ui-data-table
3
- :data="data"
4
- :options="options"
5
- :loading="props.loading"
6
- :total-pages="props.totalPages"
7
- :total-items="props.totalItems"
8
- :texts="texts"
9
- :skeleton="skeletonData"
10
- test-id="task-table"
11
- @sort="onSorting"
12
- @pagination="onPagination"
13
- @column-filter="onColumnFilter"
14
- >
15
- <template #icon="{ item }">
16
- <span class="flex-align-center">
17
- <span :class="['icon', item.data.icon]" />
18
-
19
- <span
20
- :data-id="`rtask-${item.data.testId}`"
21
- :class="item.data.isLink && 'target-link'"
22
- @click.stop="onSelectNodeOfTree(item.data)"
23
- >
24
- {{ item.text }}
25
- </span>
26
- </span>
27
- </template>
28
-
29
- <template #status="{ item }">
30
- <ui-chip :test-id="item.data.testId" :color="item.data.chipColor" rounded>
31
- <ui-icon
32
- :name="item.data.icon"
33
- width="14px"
34
- height="14px"
35
- class="chip-icon"
36
- ></ui-icon>
37
- {{ item.text }}
38
- </ui-chip>
39
-
40
- <div v-if="item.data.error" class="task-table__tooltip">
41
- <common-tooltip-help
42
- :test-id="item.data.testId"
43
- :help-id="item.data.testId + 'icon'"
44
- :title="localization.common.failureReason"
45
- :help-text="item.data.error"
46
- status="error"
47
- dropdown-width="232px"
48
- dropdown-left
49
- dropdown-top
50
- />
51
- </div>
52
- </template>
53
-
54
- <template #default-actions="{ item }">
55
- <div class="actions">
56
- <ui-button
57
- :id="`data-table-task-action-${item.data.id}`"
58
- :test-id="`data-table-task-action-${item.data.id}`"
59
- variant="text"
60
- is-without-height
61
- is-without-sizes
62
- @click.stop="onToggleActions(item.data.id)"
63
- >
64
- <span
65
- :class="['action-icon', { active: actionsShowId === item.data.id }]"
66
- >
67
- <ui-icon name="vertical-dotes" width="20" height="20" />
68
- </span>
69
- </ui-button>
70
- <ui-dropdown
71
- :show="actionsShowId === item.data.id"
72
- :test-id="`data-table-task-dropdown-${item.data.id}`"
73
- :items="actions"
74
- :elem-id="`data-table-task-action-${item.data.id}`"
75
- width="max-content"
76
- left
77
- @select="onSelectAction(item.data.target, $event)"
78
- @hide="onHideActionsDropdown"
79
- >
80
- <template #row="{ item: dropMenu }">
81
- <ui-icon
82
- v-if="dropMenu.iconName === 'hide'"
83
- name="password-hide"
84
- width="16"
85
- height="16"
86
- />
87
- <span class="action-text">
88
- {{ dropMenu.text }}
89
- </span>
90
- </template>
91
- </ui-dropdown>
92
- </div>
93
- </template>
94
-
95
- <template #expand="{ item }">
96
- <common-pages-tasks-table-expand-details :data="item.data" />
97
- </template>
98
-
99
- <template #skeleton-header>
100
- <div class="skeleton-header">
101
- <div class="left-skeleton">
102
- <ui-skeleton-item width="70" height="16" />
103
- <div class="vertical-line"></div>
104
- <ui-skeleton-item width="70" height="16" />
105
- <ui-skeleton-item width="70" height="16" />
106
- </div>
107
- <div class="right-skeleton">
108
- <ui-skeleton-item width="128" height="36" border-radius="8" />
109
- </div>
110
- </div>
111
- </template>
112
- </ui-data-table>
113
- </template>
114
-
115
- <script setup lang="ts">
116
- import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
117
- import type {
118
- UI_I_DataTable,
119
- UI_I_DataTableHeader,
120
- UI_I_DataTableBody,
121
- UI_I_DataTableSkeleton,
122
- UI_I_Pagination,
123
- UI_I_TableTexts,
124
- } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
125
- import type { UI_T_ArbitraryObject } from '~/node_modules/bfg-uikit/models/types'
126
- import type {
127
- UI_T_Project,
128
- UI_T_ProcuratorTypeNodes,
129
- UI_T_LangValue,
130
- } from '~/lib/models/types'
131
- import type { UI_I_Localization } from '~/lib/models/interfaces'
132
- import type { UI_I_TaskItem } from '~/lib/models/store/tasks/interfaces'
133
- import type { UI_I_TableTarget } from '~/lib/models/table/interfaces'
134
- import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
135
- import type { UI_I_TaskConfig } from '~/components/common/pages/tasks/table/lib/models/interfaces'
136
- import {
137
- options,
138
- getTargetActionsFunc,
139
- getHeaderDataFunc,
140
- getBodyDataFunc,
141
- } from '~/components/common/pages/tasks/table/lib/config/config'
142
- import { useDebounceFn } from '@vueuse/core'
143
-
144
- const props = defineProps<{
145
- project: UI_T_Project
146
- tableData: UI_I_TaskItem<UI_T_ProcuratorTypeNodes>[]
147
- totalPages: number
148
- totalItems: number
149
- loading: boolean
150
- config: UI_I_TaskConfig
151
- }>()
152
- const emits = defineEmits<{
153
- (event: 'sort', value: string): void
154
- (event: 'pagination', value: UI_I_Pagination): void
155
- (event: 'col-search', value: string): void
156
- }>()
157
-
158
- const localization = computed<UI_I_Localization>(() => useLocal())
159
- const { $store }: any = useNuxtApp()
160
-
161
- const texts = computed<UI_I_TableTexts>(() => ({
162
- searchHere: localization.value.common.searchHere,
163
- rowsPerPage: localization.value.common.rowsPerPage,
164
- of: localization.value.common.of,
165
- selected: localization.value.common.selected,
166
- columns: localization.value.common.columns,
167
- previous: localization.value.common.previous,
168
- next: localization.value.common.next,
169
- noItemsFound: localization.value.common.noItemsFound,
170
- exportAll: localization.value.common.exportAll,
171
- exportSelected: localization.value.common.exportSelected,
172
- all: localization.value.common.all,
173
- filter: localization.value.common.filter,
174
- }))
175
- const skeletonData = ref<UI_I_DataTableSkeleton>({
176
- columnsCount: 6,
177
- headColumns: [],
178
- bodyColumns: [],
179
- })
180
-
181
- const actionsShowId = ref<number>(-1)
182
-
183
- const data = computed<UI_I_DataTable>(() => ({
184
- id: 'tasks-table',
185
- header: taskHeadItems.value,
186
- body: taskBodyItems.value,
187
- }))
188
-
189
- const taskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
190
- getHeaderDataFunc(localization.value)
191
- )
192
-
193
- const timeFormat = computed<UI_T_TimeValue>(
194
- () => $store.getters['main/getTimeFormat']
195
- )
196
-
197
- const interfaceLang = computed<UI_T_LangValue>(
198
- () => $store.getters['main/getInterfaceLang']
199
- )
200
-
201
- const taskBodyItems = ref<UI_I_DataTableBody[]>([])
202
- watch(
203
- () => [props.tableData, timeFormat.value, interfaceLang.value],
204
- (
205
- newValue: [
206
- UI_I_TaskItem<UI_T_ProcuratorTypeNodes>[],
207
- UI_T_TimeValue,
208
- UI_T_LangValue
209
- ]
210
- ) => {
211
- if (!newValue[0]?.length) {
212
- taskBodyItems.value = []
213
- return
214
- }
215
-
216
- taskBodyItems.value = getBodyDataFunc(
217
- newValue[0],
218
- localization.value,
219
- props.project,
220
- props.config
221
- )
222
- },
223
- { deep: true, immediate: true }
224
- )
225
-
226
- // const openedError = ref<string>('')
227
-
228
- // const onToggleError = (value: string): void => {
229
- // if (!value || value === openedError.value) {
230
- // openedError.value = ''
231
- // } else {
232
- // openedError.value = value
233
- // }
234
- // }
235
-
236
- const onSorting = (value: string): void => {
237
- emits('sort', value)
238
- }
239
- const onPagination = (value: UI_I_Pagination): void => {
240
- emits('pagination', value)
241
- }
242
- const sendFilter = useDebounceFn((searchText: string) => {
243
- emits('col-search', searchText)
244
- }, 1000)
245
- const onColumnFilter = (obj: UI_T_ArbitraryObject<string>): void => {
246
- let searchText = ''
247
-
248
- for (const [key, value] of Object.entries(obj)) {
249
- const currentFilter = searchText
250
- ? ',' + key + '.' + value
251
- : key + '.' + value
252
-
253
- searchText = searchText + (value ? currentFilter : '')
254
- }
255
- sendFilter(searchText)
256
- }
257
-
258
- const actions = computed<UI_I_Dropdown[]>(() =>
259
- getTargetActionsFunc(localization.value, props.project)
260
- )
261
- const onToggleActions = (id: number): void => {
262
- if (actionsShowId.value === id) {
263
- actionsShowId.value = -1
264
- } else {
265
- actionsShowId.value = id
266
- }
267
- }
268
- const onSelectAction = (
269
- data: UI_I_TableTarget<typeof props.project>,
270
- action: 'view-target' | 'view-zone'
271
- ): void => {
272
- switch (action) {
273
- case 'view-target':
274
- onSelectNodeOfTree(data)
275
- break
276
- case 'view-zone':
277
- onSelectNodeOfTree({ ...data, type: 'zone', nav: 'h' })
278
- break
279
- }
280
- onHideActionsDropdown()
281
- }
282
- const onHideActionsDropdown = (): void => {
283
- actionsShowId.value = -1
284
- }
285
-
286
- const onSelectNodeOfTree = (
287
- data: UI_I_TableTarget<typeof props.project>
288
- ): void => {
289
- if (!data.isLink) return
290
-
291
- const { type, id, nav } = data
292
-
293
- const node = {
294
- id,
295
- type,
296
- }
297
-
298
- const path = `/inventory/type=${type};nav=${nav};id=${id}/summary`
299
- navigateTo(path)
300
-
301
- $store.dispatch('inventory/A_SELECT_NODE', { node, type })
302
- }
303
- </script>
304
-
305
- <style scoped lang="scss">
306
- .task-table {
307
- height: inherit;
308
-
309
- .target-link {
310
- font-family: 'Inter', sans-serif;
311
- font-size: 13px;
312
- color: var(--bottom-pannel-rtask-link-text);
313
- font-weight: 400;
314
- line-height: 15.73px;
315
- cursor: pointer;
316
- &:hover {
317
- color: var(--bottom-pannel-rtask-link-hover-text);
318
- }
319
- }
320
- .chip-icon {
321
- min-width: 14px;
322
- }
323
- .icon {
324
- margin-right: 4px;
325
- }
326
-
327
- .actions {
328
- width: 100%;
329
-
330
- .action-icon {
331
- width: 20px;
332
- height: 20px;
333
- color: var(--tasks-actions-icon-color);
334
-
335
- &:hover {
336
- color: var(--tasks-actions-icon-hover-color);
337
- }
338
- &.active {
339
- color: var(--tasks-actions-icon-icative-color);
340
- }
341
- }
342
-
343
- .action-text {
344
- margin-left: 8px;
345
- }
346
- }
347
- &__tooltip {
348
- margin-left: 8px;
349
- }
350
- }
351
-
352
- .skeleton-header {
353
- display: flex;
354
- justify-content: space-between;
355
- align-items: center;
356
-
357
- .left-skeleton {
358
- display: flex;
359
- align-items: center;
360
- column-gap: 16px;
361
- .vertical-line {
362
- height: 24px;
363
- border-right: 1px solid var(--table-line);
364
- }
365
- }
366
-
367
- .right-skeleton {
368
- display: flex;
369
- align-items: center;
370
- column-gap: 16px;
371
- }
372
- }
373
- </style>
1
+ <template>
2
+ <ui-data-table
3
+ :data="data"
4
+ :options="options"
5
+ :loading="props.loading"
6
+ :total-pages="props.totalPages"
7
+ :total-items="props.totalItems"
8
+ :texts="texts"
9
+ :skeleton="skeletonData"
10
+ test-id="task-table"
11
+ @sort="onSorting"
12
+ @pagination="onPagination"
13
+ @column-filter="onColumnFilter"
14
+ >
15
+ <template #icon="{ item }">
16
+ <span class="flex-align-center">
17
+ <span :class="['icon', item.data.icon]" />
18
+
19
+ <span
20
+ :data-id="`rtask-${item.data.testId}`"
21
+ :class="item.data.isLink && 'target-link'"
22
+ @click.stop="onSelectNodeOfTree(item.data)"
23
+ >
24
+ {{ item.text }}
25
+ </span>
26
+ </span>
27
+ </template>
28
+
29
+ <template #status="{ item }">
30
+ <ui-chip :test-id="item.data.testId" :color="item.data.chipColor" rounded>
31
+ <ui-icon
32
+ :name="item.data.icon"
33
+ width="14px"
34
+ height="14px"
35
+ class="chip-icon"
36
+ ></ui-icon>
37
+ {{ item.text }}
38
+ </ui-chip>
39
+
40
+ <div v-if="item.data.error" class="task-table__tooltip">
41
+ <common-tooltip-help
42
+ :test-id="item.data.testId"
43
+ :help-id="item.data.testId + 'icon'"
44
+ :title="localization.common.failureReason"
45
+ :help-text="item.data.error"
46
+ status="error"
47
+ dropdown-width="232px"
48
+ dropdown-left
49
+ dropdown-top
50
+ />
51
+ </div>
52
+ </template>
53
+
54
+ <template #default-actions="{ item }">
55
+ <div class="actions">
56
+ <ui-button
57
+ :id="`data-table-task-action-${item.data.id}`"
58
+ :test-id="`data-table-task-action-${item.data.id}`"
59
+ variant="text"
60
+ is-without-height
61
+ is-without-sizes
62
+ @click.stop="onToggleActions(item.data.id)"
63
+ >
64
+ <span
65
+ :class="['action-icon', { active: actionsShowId === item.data.id }]"
66
+ >
67
+ <ui-icon name="vertical-dotes" width="20" height="20" />
68
+ </span>
69
+ </ui-button>
70
+ <ui-dropdown
71
+ :show="actionsShowId === item.data.id"
72
+ :test-id="`data-table-task-dropdown-${item.data.id}`"
73
+ :items="actions"
74
+ :elem-id="`data-table-task-action-${item.data.id}`"
75
+ width="max-content"
76
+ left
77
+ @select="onSelectAction(item.data.target, $event)"
78
+ @hide="onHideActionsDropdown"
79
+ >
80
+ <template #row="{ item: dropMenu }">
81
+ <ui-icon
82
+ v-if="dropMenu.iconName === 'hide'"
83
+ name="password-hide"
84
+ width="16"
85
+ height="16"
86
+ />
87
+ <span class="action-text">
88
+ {{ dropMenu.text }}
89
+ </span>
90
+ </template>
91
+ </ui-dropdown>
92
+ </div>
93
+ </template>
94
+
95
+ <template #expand="{ item }">
96
+ <common-pages-tasks-table-expand-details :data="item.data" />
97
+ </template>
98
+
99
+ <template #skeleton-header>
100
+ <div class="skeleton-header">
101
+ <div class="left-skeleton">
102
+ <ui-skeleton-item width="70" height="16" />
103
+ <div class="vertical-line"></div>
104
+ <ui-skeleton-item width="70" height="16" />
105
+ <ui-skeleton-item width="70" height="16" />
106
+ </div>
107
+ <div class="right-skeleton">
108
+ <ui-skeleton-item width="128" height="36" border-radius="8" />
109
+ </div>
110
+ </div>
111
+ </template>
112
+ </ui-data-table>
113
+ </template>
114
+
115
+ <script setup lang="ts">
116
+ import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
117
+ import type {
118
+ UI_I_DataTable,
119
+ UI_I_DataTableHeader,
120
+ UI_I_DataTableBody,
121
+ UI_I_DataTableSkeleton,
122
+ UI_I_Pagination,
123
+ UI_I_TableTexts,
124
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
125
+ import type { UI_T_ArbitraryObject } from '~/node_modules/bfg-uikit/models/types'
126
+ import type {
127
+ UI_T_Project,
128
+ UI_T_ProcuratorTypeNodes,
129
+ UI_T_LangValue,
130
+ } from '~/lib/models/types'
131
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
132
+ import type { UI_I_TaskItem } from '~/lib/models/store/tasks/interfaces'
133
+ import type { UI_I_TableTarget } from '~/lib/models/table/interfaces'
134
+ import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
135
+ import type { UI_I_TaskConfig } from '~/components/common/pages/tasks/table/lib/models/interfaces'
136
+ import {
137
+ options,
138
+ getTargetActionsFunc,
139
+ getHeaderDataFunc,
140
+ getBodyDataFunc,
141
+ } from '~/components/common/pages/tasks/table/lib/config/config'
142
+ import { useDebounceFn } from '@vueuse/core'
143
+
144
+ const props = defineProps<{
145
+ project: UI_T_Project
146
+ tableData: UI_I_TaskItem<UI_T_ProcuratorTypeNodes>[]
147
+ totalPages: number
148
+ totalItems: number
149
+ loading: boolean
150
+ config: UI_I_TaskConfig
151
+ }>()
152
+ const emits = defineEmits<{
153
+ (event: 'sort', value: string): void
154
+ (event: 'pagination', value: UI_I_Pagination): void
155
+ (event: 'col-search', value: string): void
156
+ }>()
157
+
158
+ const localization = computed<UI_I_Localization>(() => useLocal())
159
+ const { $store }: any = useNuxtApp()
160
+
161
+ const texts = computed<UI_I_TableTexts>(() => ({
162
+ searchHere: localization.value.common.searchHere,
163
+ rowsPerPage: localization.value.common.rowsPerPage,
164
+ of: localization.value.common.of,
165
+ selected: localization.value.common.selected,
166
+ columns: localization.value.common.columns,
167
+ previous: localization.value.common.previous,
168
+ next: localization.value.common.next,
169
+ noItemsFound: localization.value.common.noItemsFound,
170
+ exportAll: localization.value.common.exportAll,
171
+ exportSelected: localization.value.common.exportSelected,
172
+ all: localization.value.common.all,
173
+ filter: localization.value.common.filter,
174
+ }))
175
+ const skeletonData = ref<UI_I_DataTableSkeleton>({
176
+ columnsCount: 6,
177
+ headColumns: [],
178
+ bodyColumns: [],
179
+ })
180
+
181
+ const actionsShowId = ref<number>(-1)
182
+
183
+ const data = computed<UI_I_DataTable>(() => ({
184
+ id: 'tasks-table',
185
+ header: taskHeadItems.value,
186
+ body: taskBodyItems.value,
187
+ }))
188
+
189
+ const taskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
190
+ getHeaderDataFunc(localization.value)
191
+ )
192
+
193
+ const timeFormat = computed<UI_T_TimeValue>(
194
+ () => $store.getters['main/getTimeFormat']
195
+ )
196
+
197
+ const interfaceLang = computed<UI_T_LangValue>(
198
+ () => $store.getters['main/getInterfaceLang']
199
+ )
200
+
201
+ const taskBodyItems = ref<UI_I_DataTableBody[]>([])
202
+ watch(
203
+ () => [props.tableData, timeFormat.value, interfaceLang.value],
204
+ (
205
+ newValue: [
206
+ UI_I_TaskItem<UI_T_ProcuratorTypeNodes>[],
207
+ UI_T_TimeValue,
208
+ UI_T_LangValue
209
+ ]
210
+ ) => {
211
+ if (!newValue[0]?.length) {
212
+ taskBodyItems.value = []
213
+ return
214
+ }
215
+
216
+ taskBodyItems.value = getBodyDataFunc(
217
+ newValue[0],
218
+ localization.value,
219
+ props.project,
220
+ props.config
221
+ )
222
+ },
223
+ { deep: true, immediate: true }
224
+ )
225
+
226
+ // const openedError = ref<string>('')
227
+
228
+ // const onToggleError = (value: string): void => {
229
+ // if (!value || value === openedError.value) {
230
+ // openedError.value = ''
231
+ // } else {
232
+ // openedError.value = value
233
+ // }
234
+ // }
235
+
236
+ const onSorting = (value: string): void => {
237
+ emits('sort', value)
238
+ }
239
+ const onPagination = (value: UI_I_Pagination): void => {
240
+ emits('pagination', value)
241
+ }
242
+ const sendFilter = useDebounceFn((searchText: string) => {
243
+ emits('col-search', searchText)
244
+ }, 1000)
245
+ const onColumnFilter = (obj: UI_T_ArbitraryObject<string>): void => {
246
+ let searchText = ''
247
+
248
+ for (const [key, value] of Object.entries(obj)) {
249
+ const currentFilter = searchText
250
+ ? ',' + key + '.' + value
251
+ : key + '.' + value
252
+
253
+ searchText = searchText + (value ? currentFilter : '')
254
+ }
255
+ sendFilter(searchText)
256
+ }
257
+
258
+ const actions = computed<UI_I_Dropdown[]>(() =>
259
+ getTargetActionsFunc(localization.value, props.project)
260
+ )
261
+ const onToggleActions = (id: number): void => {
262
+ if (actionsShowId.value === id) {
263
+ actionsShowId.value = -1
264
+ } else {
265
+ actionsShowId.value = id
266
+ }
267
+ }
268
+ const onSelectAction = (
269
+ data: UI_I_TableTarget<typeof props.project>,
270
+ action: 'view-target' | 'view-zone'
271
+ ): void => {
272
+ switch (action) {
273
+ case 'view-target':
274
+ onSelectNodeOfTree(data)
275
+ break
276
+ case 'view-zone':
277
+ onSelectNodeOfTree({ ...data, type: 'zone', nav: 'h' })
278
+ break
279
+ }
280
+ onHideActionsDropdown()
281
+ }
282
+ const onHideActionsDropdown = (): void => {
283
+ actionsShowId.value = -1
284
+ }
285
+
286
+ const onSelectNodeOfTree = (
287
+ data: UI_I_TableTarget<typeof props.project>
288
+ ): void => {
289
+ if (!data.isLink) return
290
+
291
+ const { type, id, nav } = data
292
+
293
+ const node = {
294
+ id,
295
+ type,
296
+ }
297
+
298
+ const path = `/inventory/type=${type};nav=${nav};id=${id}/summary`
299
+ navigateTo(path)
300
+
301
+ $store.dispatch('inventory/A_SELECT_NODE', { node, type })
302
+ }
303
+ </script>
304
+
305
+ <style scoped lang="scss">
306
+ .task-table {
307
+ height: inherit;
308
+
309
+ .target-link {
310
+ font-family: 'Inter', sans-serif;
311
+ font-size: 13px;
312
+ color: var(--bottom-pannel-rtask-link-text);
313
+ font-weight: 400;
314
+ line-height: 15.73px;
315
+ cursor: pointer;
316
+ &:hover {
317
+ color: var(--bottom-pannel-rtask-link-hover-text);
318
+ }
319
+ }
320
+ .chip-icon {
321
+ min-width: 14px;
322
+ }
323
+ .icon {
324
+ margin-right: 4px;
325
+ }
326
+
327
+ .actions {
328
+ width: 100%;
329
+
330
+ .action-icon {
331
+ width: 20px;
332
+ height: 20px;
333
+ color: var(--tasks-actions-icon-color);
334
+
335
+ &:hover {
336
+ color: var(--tasks-actions-icon-hover-color);
337
+ }
338
+ &.active {
339
+ color: var(--tasks-actions-icon-icative-color);
340
+ }
341
+ }
342
+
343
+ .action-text {
344
+ margin-left: 8px;
345
+ }
346
+ }
347
+ &__tooltip {
348
+ margin-left: 8px;
349
+ }
350
+ }
351
+
352
+ .skeleton-header {
353
+ display: flex;
354
+ justify-content: space-between;
355
+ align-items: center;
356
+
357
+ .left-skeleton {
358
+ display: flex;
359
+ align-items: center;
360
+ column-gap: 16px;
361
+ .vertical-line {
362
+ height: 24px;
363
+ border-right: 1px solid var(--table-line);
364
+ }
365
+ }
366
+
367
+ .right-skeleton {
368
+ display: flex;
369
+ align-items: center;
370
+ column-gap: 16px;
371
+ }
372
+ }
373
+ </style>