bfg-common 1.5.714 → 1.5.716

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