bfg-common 1.5.674 → 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.
@@ -1,419 +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_NodeType } from '~/components/common/pages/home/lib/models/types'
170
- import {
171
- options,
172
- getHeaderDataFunc,
173
- getBodyDataFunc,
174
- } from '~/components/common/layout/bottomPanel/recentTasks/new/lib/config/config'
175
-
176
- const props = defineProps<{
177
- dataTable: UI_I_RecentTaskItem<UI_T_NodeType>[]
178
- loading: boolean
179
- pagination: UI_I_Pagination // Для Warning props
180
- }>()
181
- const emits = defineEmits<{
182
- (event: 'sort', value: string): void
183
- }>()
184
-
185
- const localization = computed<UI_I_Localization>(() => useLocal())
186
- const { $store }: any = useNuxtApp()
187
-
188
- const actionsIsShow = ref<boolean[]>([])
189
-
190
- const data = computed<UI_I_DataTable>(() => ({
191
- id: 'resent-task-table',
192
- header: resentTaskHeadItems.value,
193
- body: resentTaskBodyItems.value,
194
- }))
195
-
196
- const resentTaskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
197
- getHeaderDataFunc(localization.value)
198
- )
199
-
200
- const resentTaskBodyItems = ref<UI_I_DataTableBody[]>([])
201
- watch(
202
- () => props.dataTable,
203
- (newValue) => {
204
- if (!newValue?.length) {
205
- resentTaskBodyItems.value = []
206
- return
207
- }
208
-
209
- resentTaskBodyItems.value = getBodyDataFunc(newValue, localization.value)
210
- },
211
- { deep: true, immediate: true }
212
- )
213
- const onSort = (value: string): void => {
214
- emits('sort', value)
215
- }
216
-
217
- const actions = computed<UI_I_Dropdown[]>(() => [
218
- {
219
- value: 'view',
220
- text: localization.value.common.viewTarget,
221
- iconName: 'hide',
222
- selected: false,
223
- },
224
- ])
225
- const onToggleActions = (id: number): void => {
226
- actionsIsShow.value[id] = !actionsIsShow.value[id]
227
- }
228
- const onSelectAction = (
229
- data: UI_I_DataTargetForTable,
230
- action: 'view',
231
- actionId: number
232
- ): void => {
233
- switch (action) {
234
- case 'view':
235
- onSelectNodeOfTree(data)
236
- break
237
- }
238
- onHideActionsDropdown(actionId)
239
- }
240
- const onHideActionsDropdown = (id: number): void => {
241
- actionsIsShow.value[id] = false
242
- }
243
-
244
- const onSelectNodeOfTree = (data: UI_I_DataTargetForTable): void => {
245
- if (!data.isLink) return
246
-
247
- const { type, id, nav } = data
248
-
249
- const node = {
250
- id,
251
- type,
252
- }
253
-
254
- const path = `/inventory/type=${type};nav=${nav};id=${id}/summary`
255
- navigateTo(path)
256
-
257
- $store.dispatch('inventory/A_SELECT_NODE', { node, type })
258
- }
259
-
260
- const onToggleOperationsTooltip = (): void => {
261
- setTimeout(() => {
262
- document.querySelectorAll('.status-detail-item').forEach((item) => {
263
- const messageItem = item.querySelector('.status-detail-item-message')
264
-
265
- if (!messageItem) return
266
-
267
- const isEllipsisActive = messageItem.scrollWidth > messageItem.clientWidth
268
-
269
- isEllipsisActive &&
270
- item.querySelector('.right-block')?.classList.toggle('active')
271
- })
272
- }, 0)
273
- }
274
- const onToggleLongText = (index: number): void => {
275
- document
276
- .querySelectorAll('.status-detail-item')
277
- [index].querySelectorAll('.right-block')[0]
278
- .classList.toggle('show-full')
279
- }
280
- </script>
281
-
282
- <style>
283
- /*TODO move up*/
284
- :root {
285
- --actions-icon-color: #4d5d69;
286
- --actions-icon-hover-color: #213444;
287
- --actions-icon-icative-color: #008fd6;
288
- --status-operations-container-border: #e9ebeda3;
289
- --status-operations-container-completed-info-text: #4d5d69;
290
- --status-operations-container-failed-error-text: #ea3223;
291
- }
292
- :root.dark-theme {
293
- --actions-icon-color: #e9eaec;
294
- --actions-icon-hover-color: #ffffff;
295
- --actions-icon-icative-color: #2ba2de;
296
- --status-operations-container-border: #e9ebed1f;
297
- --status-operations-container-completed-info-text: #e9eaec;
298
- --status-operations-container-failed-error-text: #ec4235;
299
- }
300
- </style>
301
- <style scoped lang="scss">
302
- .resent-task-table {
303
- height: inherit;
304
-
305
- .target-link {
306
- font-family: 'Inter', sans-serif;
307
- font-size: 13px;
308
- color: var(--bottom-pannel-rtask-link-text);
309
- font-weight: 400;
310
- line-height: 15.73px;
311
- cursor: pointer;
312
- &:hover {
313
- color: var(--bottom-pannel-rtask-link-hover-text);
314
- }
315
- }
316
- .chip-icon {
317
- min-width: 14px;
318
- //margin-right: 6px;
319
- }
320
- .icon {
321
- margin-right: 4px;
322
- }
323
-
324
- .actions {
325
- .action-icon {
326
- width: 16px;
327
- height: 16px;
328
- color: var(--actions-icon-color);
329
-
330
- &:hover {
331
- color: var(--actions-icon-hover-color);
332
- }
333
- &.active {
334
- color: var(--actions-icon-icative-color);
335
- }
336
- }
337
-
338
- .action-text {
339
- margin-left: 8px;
340
- }
341
- }
342
-
343
- .operations-container {
344
- max-width: 448px;
345
- min-width: 288px;
346
- padding-top: 16px;
347
- border-top: 1px solid var(--status-operations-container-border);
348
- display: grid;
349
- grid-row-gap: 20px;
350
-
351
- .status-detail-item {
352
- display: grid;
353
- grid-template-columns: 50% 50%;
354
-
355
- .left-block {
356
- display: flex;
357
- align-items: center;
358
- grid-gap: 8px;
359
- padding-right: 24px;
360
- }
361
- .right-block {
362
- display: grid;
363
- align-items: flex-start;
364
-
365
- &.active {
366
- grid-template-columns: 1fr max-content;
367
- grid-column-gap: 8px;
368
-
369
- .toggle-text-icon {
370
- display: unset;
371
- }
372
- }
373
- &.show-full {
374
- .status-detail-item-message {
375
- white-space: break-spaces;
376
- }
377
- .toggle-text-icon {
378
- transform: rotate(0deg);
379
- }
380
- }
381
-
382
- .status-detail-item-message {
383
- color: #9da6ad;
384
- }
385
- .toggle-text-icon {
386
- transform: rotate(180deg);
387
- display: none;
388
- }
389
- }
390
-
391
- &__icon {
392
- min-width: 16px;
393
- color: #ea3223;
394
- :deep(path) {
395
- fill-opacity: 1;
396
- }
397
- }
398
- }
399
- .bottom-info-block {
400
- display: flex;
401
- justify-content: space-between;
402
- padding-top: 16px;
403
- border-top: 1px solid var(--status-operations-container-border);
404
-
405
- .completed-text {
406
- font-weight: 500;
407
- color: var(--status-operations-container-completed-info-text);
408
- }
409
- .failed-text {
410
- color: #9da6ad;
411
-
412
- &.error {
413
- color: var(--status-operations-container-failed-error-text);
414
- }
415
- }
416
- }
417
- }
418
- }
419
- </style>
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>