bfg-common 1.5.675 → 1.5.677

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