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,11 @@
1
+ import type { UI_T_AlarmsTableKeys } from '~/components/common/layout/bottomPanel/alarms/old/lib/models/types'
2
+
3
+ export const alarmsTableKeys: UI_T_AlarmsTableKeys[] = [
4
+ 'object',
5
+ 'status',
6
+ 'name',
7
+ 'triggered',
8
+ 'acknowledged',
9
+ 'acknowledged_by',
10
+ 'triggering_event',
11
+ ]
@@ -0,0 +1,8 @@
1
+ export type UI_T_AlarmsTableKeys =
2
+ | 'object'
3
+ | 'status'
4
+ | 'name'
5
+ | 'triggered'
6
+ | 'acknowledged'
7
+ | 'acknowledged_by'
8
+ | 'triggering_event'
@@ -0,0 +1,19 @@
1
+ import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
2
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
3
+
4
+ export const statusFilterItemsFunc = (
5
+ localization: UI_I_Localization
6
+ ): UI_I_Dropdown[] => [
7
+ {
8
+ text: localization.common.all,
9
+ value: -1,
10
+ },
11
+ {
12
+ text: localization.common.running,
13
+ value: 1,
14
+ },
15
+ {
16
+ text: localization.common.failed,
17
+ value: 3,
18
+ },
19
+ ]
@@ -0,0 +1 @@
1
+ export type UI_T_BottomPanelTabType = 'recentTask' | 'alarms'
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <component
3
+ :is="currentComponent"
4
+ v-model:status-filter="statusFilter"
5
+ :data-table="props.dataTable"
6
+ :total-items="props.totalItems"
7
+ :total-pages="props.totalPages"
8
+ :pagination="props.pagination"
9
+ :loading="props.loading"
10
+ @pagination="emits('pagination', $event)"
11
+ @sort="emits('sort', $event)"
12
+ />
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
17
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
18
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
19
+ import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
20
+
21
+ const statusFilter = defineModel<UI_T_SelectedStatus>('statusFilter', {
22
+ required: true,
23
+ })
24
+
25
+ const props = defineProps<{
26
+ dataTable: UI_I_RecentTaskItem<UI_T_NodeType>[]
27
+ totalItems: number
28
+ totalPages: number
29
+ pagination: UI_I_Pagination
30
+ loading: boolean
31
+ }>()
32
+
33
+ const emits = defineEmits<{
34
+ (event: 'pagination', value: UI_I_Pagination | null): void
35
+ (event: 'sort', value: string): void
36
+ }>()
37
+
38
+ const { $store }: any = useNuxtApp()
39
+
40
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
41
+
42
+ const currentComponent = computed(() =>
43
+ isNewView.value
44
+ ? defineAsyncComponent(() => import('./new/New.vue'))
45
+ : defineAsyncComponent(() => import('./old/Old.vue'))
46
+ )
47
+ </script>
48
+
49
+ <style scoped lang="scss"></style>
@@ -0,0 +1,14 @@
1
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
2
+ import type { UI_T_NavNodes } from '~/lib/models/types'
3
+
4
+ interface UI_I_TargetData {
5
+ id: string
6
+ type: UI_T_NodeType
7
+ }
8
+
9
+ export interface UI_I_DataTargetForTable extends UI_I_TargetData {
10
+ nav: UI_T_NavNodes
11
+ isLink: boolean
12
+ iconClassName: string
13
+ testId?: string
14
+ }
@@ -0,0 +1,430 @@
1
+ <template>
2
+ <ui-data-table
3
+ :data="data"
4
+ :options="options"
5
+ :loading="props.loading"
6
+ test-id="resent-task-table"
7
+ @sort="onSort"
8
+ >
9
+ <template #icon="{ item }">
10
+ <span class="flex-align-center">
11
+ <span :class="['icon', item.data.icon]" />
12
+
13
+ <span
14
+ :data-id="`rtask-${item.data.testId}`"
15
+ :class="item.data.isLink && 'target-link'"
16
+ @click="onSelectNodeOfTree(item.data)"
17
+ >
18
+ {{ item.text }}
19
+ </span>
20
+ </span>
21
+ </template>
22
+
23
+ <template #status="{ item }">
24
+ <ui-chip :test-id="item.data.testId" :color="item.data.chipColor" rounded>
25
+ <ui-icon
26
+ :name="item.data.icon"
27
+ width="14px"
28
+ height="14px"
29
+ class="chip-icon"
30
+ ></ui-icon>
31
+ {{ item.text }}
32
+ </ui-chip>
33
+
34
+ <div v-if="item.data.operations.length" class="ml-2">
35
+ <common-tooltip-help
36
+ :test-id="item.data.index + '-operations'"
37
+ :help-id="item.data.index + '-operations-icon'"
38
+ :title="localization.tasks.vmUpdateSteps"
39
+ :help-text="item.data.error"
40
+ status="info"
41
+ @toggle-show="onToggleOperationsTooltip"
42
+ >
43
+ <template #default>
44
+ <div class="operations-container">
45
+ <div
46
+ v-for="(item2, key2) in item.data.operations"
47
+ :key="key2"
48
+ :data-id="item2.testId"
49
+ class="status-detail-item flex flex-align-center"
50
+ >
51
+ <div class="left-block">
52
+ <ui-icon
53
+ :name="item2.iconClassName"
54
+ class="status-detail-item__icon"
55
+ width="16"
56
+ height="16"
57
+ />
58
+ <span class="text-ellipsis">{{ item2.operation_type }}:</span>
59
+ </div>
60
+ <div class="right-block text-ellipsis">
61
+ <span
62
+ :title="item2.message"
63
+ class="status-detail-item-message text-ellipsis text-3 font-[500]"
64
+ >{{ item2.message || '--' }}</span
65
+ >
66
+ <ui-icon
67
+ name="arrow"
68
+ width="16"
69
+ height="16"
70
+ class="toggle-text-icon pointer"
71
+ :data-id="`toggle-text-icon-${key2}`"
72
+ @click="onToggleLongText(key2)"
73
+ />
74
+ </div>
75
+ </div>
76
+ <div class="bottom-info-block">
77
+ <span class="completed-text"
78
+ >{{
79
+ item.data.operations.length -
80
+ item.data.failedOperationsCount
81
+ }}
82
+ {{ localization.common.of }}
83
+ {{ item.data.operations.length }}
84
+ {{ localization.common.completed }}</span
85
+ >
86
+ <span
87
+ :class="[
88
+ 'failed-text',
89
+ { error: item.data.failedOperationsCount },
90
+ ]"
91
+ >{{ item.data.failedOperationsCount }}
92
+ {{ localization.common.failed }}</span
93
+ >
94
+ </div>
95
+ </div>
96
+ </template>
97
+ </common-tooltip-help>
98
+ </div>
99
+
100
+ <div v-if="item.data.error" class="ml-2">
101
+ <common-tooltip-help
102
+ :test-id="`${item.data.index}`"
103
+ :help-id="item.data.index + 'icon'"
104
+ :title="localization.common.failureReason"
105
+ :help-text="item.data.error"
106
+ dropdown-width="max-content"
107
+ dropdown-max-width="480px"
108
+ dropdown-max-height="200px"
109
+ status="error"
110
+ dropdown-top
111
+ dropdown-left
112
+ />
113
+ </div>
114
+ </template>
115
+
116
+ <template #default-actions="{ item }">
117
+ <div class="actions w-full">
118
+ <ui-button
119
+ :test-id="`resent-task-item-${item.data.id}-action`"
120
+ variant="text"
121
+ is-without-height
122
+ is-without-sizes
123
+ @click="onToggleActions(item.data.id)"
124
+ >
125
+ <span
126
+ :class="['action-icon', { active: actionsIsShow[item.data.id] }]"
127
+ >
128
+ <ui-icon name="vertical-dotes" width="20" height="20" />
129
+ </span>
130
+ </ui-button>
131
+ <ui-dropdown
132
+ :show="actionsIsShow[item.data.id] || false"
133
+ :test-id="`resent-task-item-action-${item.data.id}`"
134
+ :items="actions"
135
+ :elem-id="`resent-task-item-${item.data.id}-action`"
136
+ width="max-content"
137
+ left
138
+ @select="onSelectAction(item.data.target, $event, item.data.id)"
139
+ @hide="onHideActionsDropdown(item.data.id)"
140
+ >
141
+ <template #row="{ item: dropMenu }">
142
+ <ui-icon
143
+ v-if="dropMenu.iconName === 'hide'"
144
+ name="password-hide"
145
+ width="16"
146
+ height="16"
147
+ />
148
+ <span class="action-text">
149
+ {{ dropMenu.text }}
150
+ </span>
151
+ </template>
152
+ </ui-dropdown>
153
+ </div>
154
+ </template>
155
+ </ui-data-table>
156
+ </template>
157
+
158
+ <script setup lang="ts">
159
+ import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
160
+ import type {
161
+ UI_I_DataTable,
162
+ UI_I_DataTableHeader,
163
+ UI_I_DataTableBody,
164
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
165
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
166
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
167
+ import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
168
+ import type { UI_I_DataTargetForTable } from '~/components/common/layout/bottomPanel/recentTasks/lib/models/interfaces'
169
+ import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
170
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
171
+ import {
172
+ options,
173
+ getHeaderDataFunc,
174
+ getBodyDataFunc,
175
+ } from '~/components/common/layout/bottomPanel/recentTasks/new/lib/config/config'
176
+
177
+ const statusFilter = defineModel<UI_T_SelectedStatus>('statusFilter', {
178
+ required: true,
179
+ })
180
+
181
+ const props = defineProps<{
182
+ dataTable: UI_I_RecentTaskItem<UI_T_NodeType>[]
183
+ loading: boolean
184
+ pagination: UI_I_Pagination // Для Warning props
185
+ }>()
186
+ const emits = defineEmits<{
187
+ (event: 'sort', value: string): void
188
+ }>()
189
+
190
+ const localization = computed<UI_I_Localization>(() => useLocal())
191
+ const { $store }: any = useNuxtApp()
192
+
193
+ const actionsIsShow = ref<boolean[]>([])
194
+
195
+ const data = computed<UI_I_DataTable>(() => ({
196
+ id: 'resent-task-table',
197
+ header: resentTaskHeadItems.value,
198
+ body: resentTaskBodyItems.value,
199
+ }))
200
+
201
+ const resentTaskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
202
+ getHeaderDataFunc(localization.value)
203
+ )
204
+
205
+ const resentTaskBodyItems = ref<UI_I_DataTableBody[]>([])
206
+ watch(
207
+ () => props.dataTable,
208
+ (newValue) => {
209
+ if (!newValue?.length) {
210
+ resentTaskBodyItems.value = []
211
+ return
212
+ }
213
+
214
+ // if (statusFilter.value !== -1) {
215
+ // newValue.items = newValue.items.filter(
216
+ // (task) => task.status === statusFilter.value
217
+ // )
218
+ // }
219
+
220
+ resentTaskBodyItems.value = getBodyDataFunc(newValue, localization.value)
221
+ },
222
+ { deep: true, immediate: true }
223
+ )
224
+ const onSort = (value: string): void => {
225
+ emits('sort', value)
226
+ }
227
+
228
+ const actions = computed<UI_I_Dropdown[]>(() => [
229
+ {
230
+ value: 'view',
231
+ text: localization.value.common.viewTarget,
232
+ iconName: 'hide',
233
+ selected: false,
234
+ },
235
+ ])
236
+ const onToggleActions = (id: number): void => {
237
+ actionsIsShow.value[id] = !actionsIsShow.value[id]
238
+ }
239
+ const onSelectAction = (
240
+ data: UI_I_DataTargetForTable,
241
+ action: 'view',
242
+ actionId: number
243
+ ): void => {
244
+ switch (action) {
245
+ case 'view':
246
+ onSelectNodeOfTree(data)
247
+ break
248
+ }
249
+ onHideActionsDropdown(actionId)
250
+ }
251
+ const onHideActionsDropdown = (id: number): void => {
252
+ actionsIsShow.value[id] = false
253
+ }
254
+
255
+ const onSelectNodeOfTree = (data: UI_I_DataTargetForTable): void => {
256
+ if (!data.isLink) return
257
+
258
+ const { type, id, nav } = data
259
+
260
+ const node = {
261
+ id,
262
+ type,
263
+ }
264
+
265
+ const path = `/inventory/type=${type};nav=${nav};id=${id}/summary`
266
+ navigateTo(path)
267
+
268
+ $store.dispatch('inventory/A_SELECT_NODE', { node, type })
269
+ }
270
+
271
+ const onToggleOperationsTooltip = (): void => {
272
+ setTimeout(() => {
273
+ document.querySelectorAll('.status-detail-item').forEach((item) => {
274
+ const messageItem = item.querySelector('.status-detail-item-message')
275
+
276
+ if (!messageItem) return
277
+
278
+ const isEllipsisActive = messageItem.scrollWidth > messageItem.clientWidth
279
+
280
+ isEllipsisActive &&
281
+ item.querySelector('.right-block')?.classList.toggle('active')
282
+ })
283
+ }, 0)
284
+ }
285
+ const onToggleLongText = (index: number): void => {
286
+ document
287
+ .querySelectorAll('.status-detail-item')
288
+ [index].querySelectorAll('.right-block')[0]
289
+ .classList.toggle('show-full')
290
+ }
291
+ </script>
292
+
293
+ <style>
294
+ /*TODO move up*/
295
+ :root {
296
+ --actions-icon-color: #4d5d69;
297
+ --actions-icon-hover-color: #213444;
298
+ --actions-icon-icative-color: #008fd6;
299
+ --status-operations-container-border: #e9ebeda3;
300
+ --status-operations-container-completed-info-text: #4d5d69;
301
+ --status-operations-container-failed-error-text: #ea3223;
302
+ }
303
+ :root.dark-theme {
304
+ --actions-icon-color: #e9eaec;
305
+ --actions-icon-hover-color: #ffffff;
306
+ --actions-icon-icative-color: #2ba2de;
307
+ --status-operations-container-border: #e9ebed1f;
308
+ --status-operations-container-completed-info-text: #e9eaec;
309
+ --status-operations-container-failed-error-text: #ec4235;
310
+ }
311
+ </style>
312
+ <style scoped lang="scss">
313
+ .resent-task-table {
314
+ height: inherit;
315
+
316
+ .target-link {
317
+ font-family: 'Inter', sans-serif;
318
+ font-size: 13px;
319
+ color: var(--bottom-pannel-rtask-link-text);
320
+ font-weight: 400;
321
+ line-height: 15.73px;
322
+ cursor: pointer;
323
+ &:hover {
324
+ color: var(--bottom-pannel-rtask-link-hover-text);
325
+ }
326
+ }
327
+ .chip-icon {
328
+ min-width: 14px;
329
+ //margin-right: 6px;
330
+ }
331
+ .icon {
332
+ margin-right: 4px;
333
+ }
334
+
335
+ .actions {
336
+ .action-icon {
337
+ width: 16px;
338
+ height: 16px;
339
+ color: var(--actions-icon-color);
340
+
341
+ &:hover {
342
+ color: var(--actions-icon-hover-color);
343
+ }
344
+ &.active {
345
+ color: var(--actions-icon-icative-color);
346
+ }
347
+ }
348
+
349
+ .action-text {
350
+ margin-left: 8px;
351
+ }
352
+ }
353
+
354
+ .operations-container {
355
+ max-width: 448px;
356
+ min-width: 288px;
357
+ padding-top: 16px;
358
+ border-top: 1px solid var(--status-operations-container-border);
359
+ display: grid;
360
+ grid-row-gap: 20px;
361
+
362
+ .status-detail-item {
363
+ display: grid;
364
+ grid-template-columns: 50% 50%;
365
+
366
+ .left-block {
367
+ display: flex;
368
+ align-items: center;
369
+ grid-gap: 8px;
370
+ padding-right: 24px;
371
+ }
372
+ .right-block {
373
+ display: grid;
374
+ align-items: flex-start;
375
+
376
+ &.active {
377
+ grid-template-columns: 1fr max-content;
378
+ grid-column-gap: 8px;
379
+
380
+ .toggle-text-icon {
381
+ display: unset;
382
+ }
383
+ }
384
+ &.show-full {
385
+ .status-detail-item-message {
386
+ white-space: break-spaces;
387
+ }
388
+ .toggle-text-icon {
389
+ transform: rotate(0deg);
390
+ }
391
+ }
392
+
393
+ .status-detail-item-message {
394
+ color: #9da6ad;
395
+ }
396
+ .toggle-text-icon {
397
+ transform: rotate(180deg);
398
+ display: none;
399
+ }
400
+ }
401
+
402
+ &__icon {
403
+ min-width: 16px;
404
+ color: #ea3223;
405
+ :deep(path) {
406
+ fill-opacity: 1;
407
+ }
408
+ }
409
+ }
410
+ .bottom-info-block {
411
+ display: flex;
412
+ justify-content: space-between;
413
+ padding-top: 16px;
414
+ border-top: 1px solid var(--status-operations-container-border);
415
+
416
+ .completed-text {
417
+ font-weight: 500;
418
+ color: var(--status-operations-container-completed-info-text);
419
+ }
420
+ .failed-text {
421
+ color: #9da6ad;
422
+
423
+ &.error {
424
+ color: var(--status-operations-container-failed-error-text);
425
+ }
426
+ }
427
+ }
428
+ }
429
+ }
430
+ </style>