bfg-common 1.5.920 → 1.5.921

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 (58) hide show
  1. package/assets/localization/local_be.json +15 -3
  2. package/assets/localization/local_en.json +15 -3
  3. package/assets/localization/local_hy.json +15 -3
  4. package/assets/localization/local_kk.json +15 -3
  5. package/assets/localization/local_ru.json +15 -3
  6. package/assets/localization/local_zh.json +15 -3
  7. package/components/common/pages/scheduledTasks/lib/models/interfaces.ts +6 -0
  8. package/components/common/pages/scheduledTasks/modals/common/frequency/Frequency.vue +46 -42
  9. package/components/common/pages/scheduledTasks/modals/common/frequency/afterStartup/AfterStartup.vue +15 -48
  10. package/components/common/pages/scheduledTasks/modals/common/frequency/afterStartup/New.vue +43 -0
  11. package/components/common/pages/scheduledTasks/modals/common/frequency/afterStartup/Old.vue +65 -0
  12. package/components/common/pages/scheduledTasks/modals/common/frequency/end/End.vue +15 -69
  13. package/components/common/pages/scheduledTasks/modals/common/frequency/end/New.vue +73 -0
  14. package/components/common/pages/scheduledTasks/modals/common/frequency/end/Old.vue +112 -0
  15. package/components/common/pages/scheduledTasks/modals/common/frequency/interval/Interval.vue +19 -53
  16. package/components/common/pages/scheduledTasks/modals/common/frequency/interval/New.vue +49 -0
  17. package/components/common/pages/scheduledTasks/modals/common/frequency/interval/Old.vue +68 -0
  18. package/components/common/pages/scheduledTasks/modals/common/frequency/lib/utils.ts +1 -1
  19. package/components/common/pages/scheduledTasks/modals/common/frequency/on/New.vue +137 -0
  20. package/components/common/pages/scheduledTasks/modals/common/frequency/on/Old.vue +234 -0
  21. package/components/common/pages/scheduledTasks/modals/common/frequency/on/On.vue +28 -168
  22. package/components/common/pages/scheduledTasks/modals/common/frequency/on/lib/config/options.ts +17 -0
  23. package/components/common/pages/scheduledTasks/modals/common/frequency/on/selectWeek/New.vue +66 -0
  24. package/components/common/pages/scheduledTasks/modals/common/frequency/on/selectWeek/Old.vue +44 -0
  25. package/components/common/pages/scheduledTasks/modals/common/frequency/on/selectWeek/SelectWeek.vue +17 -28
  26. package/components/common/pages/scheduledTasks/modals/common/frequency/on/selectWeek/lib/config/weekOptions.ts +20 -50
  27. package/components/common/pages/scheduledTasks/modals/common/frequency/startOn/New.vue +46 -0
  28. package/components/common/pages/scheduledTasks/modals/common/frequency/startOn/Old.vue +77 -0
  29. package/components/common/pages/scheduledTasks/modals/common/frequency/startOn/StartOn.vue +15 -51
  30. package/components/common/pages/scheduledTasks/modals/common/taskForm/New.vue +194 -0
  31. package/components/common/pages/scheduledTasks/modals/common/{newTaskForm/NewTaskForm.vue → taskForm/Old.vue} +12 -69
  32. package/components/common/pages/scheduledTasks/modals/common/taskForm/TaskForm.vue +129 -0
  33. package/components/common/pages/scheduledTasks/table/Table.vue +27 -81
  34. package/components/common/pages/scheduledTasks/table/expandDetails/ExpandDetails.vue +2 -2
  35. package/components/common/pages/scheduledTasks/table/expandDetails/New.vue +48 -17
  36. package/components/common/pages/scheduledTasks/table/expandDetails/Old.vue +1 -3
  37. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/HistoryRun.vue +16 -54
  38. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/new/New.vue +147 -0
  39. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/new/lib/config/historyRunsTable.ts +161 -0
  40. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/old/Old.vue +68 -0
  41. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/{lib → old/lib}/config/historyRunsTable.ts +4 -4
  42. package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/{lib → old/lib}/config/tableKeys.ts +1 -1
  43. package/components/common/pages/scheduledTasks/table/expandDetails/lib/config/expandDetails.ts +7 -5
  44. package/components/common/pages/scheduledTasks/table/expandDetails/lib/models/interfaces.ts +8 -0
  45. package/components/common/pages/scheduledTasks/table/lib/models/enums.ts +4 -0
  46. package/components/common/pages/scheduledTasks/table/new/New.vue +320 -0
  47. package/components/common/pages/scheduledTasks/table/new/lib/config/scheduledTasksTable.ts +218 -0
  48. package/components/common/pages/scheduledTasks/table/new/lib/models/enums.ts +14 -0
  49. package/components/common/pages/scheduledTasks/table/old/Old.vue +93 -0
  50. package/components/common/pages/scheduledTasks/table/{lib → old/lib}/config/scheduledTasksTable.ts +13 -9
  51. package/components/common/pages/scheduledTasks/table/{lib → old/lib}/config/tableKeys.ts +1 -1
  52. package/package.json +1 -1
  53. package/components/common/pages/scheduledTasks/table/lib/config/schedulerStatus.ts +0 -4
  54. package/components/common/pages/scheduledTasks/table/lib/models/interfaces.ts +0 -11
  55. /package/components/common/pages/scheduledTasks/modals/common/{newTaskForm → taskForm}/lib/models/interfaces.ts +0 -0
  56. /package/components/common/pages/scheduledTasks/modals/common/{newTaskForm → taskForm}/lib/utils.ts +0 -0
  57. /package/components/common/pages/scheduledTasks/table/expandDetails/historyRun/{lib → old/lib}/models/types.ts +0 -0
  58. /package/components/common/pages/scheduledTasks/table/{lib → old/lib}/models/types.ts +0 -0
@@ -0,0 +1,161 @@
1
+ import type {
2
+ UI_I_DataTableBody,
3
+ UI_I_DataTableHeader,
4
+ UI_I_DataTableOptions,
5
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
6
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
7
+ import type { UI_I_ScheduledTasks } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
8
+ import { UI_E_SchedulerRunStatus } from '~/components/common/pages/scheduledTasks/table/lib/models/enums'
9
+ import {
10
+ UI_E_SchedulerStatus,
11
+ UI_E_SchedulerChipColor,
12
+ UI_E_SchedulerChipIcon,
13
+ } from '~/components/common/pages/scheduledTasks/table/new/lib/models/enums'
14
+
15
+ // Маппинг для статусов
16
+ const STATUS_MAPPING = {
17
+ [UI_E_SchedulerStatus.Completed]: {
18
+ textKey: 'completed',
19
+ icon: UI_E_SchedulerChipIcon.StatusCheck,
20
+ chipColor: UI_E_SchedulerChipColor.Green,
21
+ },
22
+ [UI_E_SchedulerStatus.Running]: {
23
+ textKey: 'running',
24
+ icon: UI_E_SchedulerChipIcon.StatusCheck,
25
+ chipColor: UI_E_SchedulerChipColor.Green,
26
+ },
27
+ [UI_E_SchedulerStatus.Failed]: {
28
+ textKey: 'failed',
29
+ icon: UI_E_SchedulerChipIcon.Information,
30
+ chipColor: UI_E_SchedulerChipColor.Red,
31
+ },
32
+ }
33
+
34
+ export const getHeaderDataFunc = (
35
+ localization: UI_I_Localization
36
+ ): UI_I_DataTableHeader[] => [
37
+ {
38
+ col: 'col0',
39
+ colName: 'start',
40
+ text: localization.common.startTime,
41
+ isSortable: true,
42
+ sort: 'asc',
43
+ width: '240px',
44
+ show: true,
45
+ filter: true,
46
+ },
47
+ {
48
+ col: 'col1',
49
+ colName: 'duration',
50
+ text: localization.scheduledTasks.duration,
51
+ isSortable: true,
52
+ sort: 'asc',
53
+ width: '180px',
54
+ show: true,
55
+ filter: true,
56
+ },
57
+ {
58
+ col: 'col2',
59
+ colName: 'end',
60
+ text: localization.scheduledTasks.endTime,
61
+ isSortable: true,
62
+ sort: 'asc',
63
+ width: '180px',
64
+ show: true,
65
+ filter: true,
66
+ },
67
+ {
68
+ col: 'col3',
69
+ colName: 'result',
70
+ text: localization.scheduledTasks.result,
71
+ isSortable: true,
72
+ sort: 'asc',
73
+ width: '110px',
74
+ show: true,
75
+ filter: true,
76
+ },
77
+ ]
78
+
79
+ export const options: UI_I_DataTableOptions = {
80
+ perPageOptions: [
81
+ { text: '10', value: 10 },
82
+ { text: '25', value: 25 },
83
+ { text: '50', value: 50 },
84
+ { text: '100', value: 100, default: true },
85
+ ],
86
+ isSelectable: false,
87
+ isFocusable: false,
88
+ showPagination: false,
89
+ showPaginationOnTop: false,
90
+ showPageInfo: false,
91
+ isSortable: true,
92
+ server: false,
93
+ isResizable: true,
94
+ showSearch: false,
95
+ showSelectedRows: false,
96
+ showColumnManager: false,
97
+ withActions: false,
98
+ inBlock: true,
99
+ showExport: false,
100
+ withCollapse: false,
101
+ }
102
+
103
+ export const getBodyDataFunc = (
104
+ bodyData: UI_I_ScheduledTasks['items'][number]['last_5_run'],
105
+ localization: UI_I_Localization
106
+ ): UI_I_DataTableBody[] => {
107
+ const { $formattedDatetime }: any = useNuxtApp()
108
+ return bodyData.map((schedulerHistory, index: number) => {
109
+ const startTime = schedulerHistory.start
110
+ const formattedStartTime = $formattedDatetime(+startTime * 1000, {
111
+ hasSeconds: true,
112
+ })
113
+
114
+ const endTime = schedulerHistory.end
115
+ const formattedEndTime =
116
+ endTime && $formattedDatetime(+endTime * 1000, { hasSeconds: true })
117
+
118
+ const statusKey =
119
+ schedulerHistory?.result.toLowerCase() === UI_E_SchedulerRunStatus.SUCCESS
120
+ ? UI_E_SchedulerStatus.Completed
121
+ : schedulerHistory?.result === UI_E_SchedulerRunStatus.RUNNING
122
+ ? UI_E_SchedulerStatus.Running
123
+ : UI_E_SchedulerStatus.Failed
124
+ const statusData = {
125
+ ...STATUS_MAPPING[statusKey],
126
+ testId: `${schedulerHistory.tid}-${index}-status`,
127
+ }
128
+
129
+ return {
130
+ row: schedulerHistory.tid,
131
+ collapse: false,
132
+ isHiddenCollapse: false,
133
+ collapseToggle: false,
134
+ data: [
135
+ {
136
+ col: 'col0',
137
+ text: formattedStartTime,
138
+ testId: `table-item-${schedulerHistory.tid}`,
139
+ },
140
+ {
141
+ col: 'col1',
142
+ text: 'schedulerHistory.sched_type' || '--',
143
+ data: 'statusData',
144
+ testId: `table-item-${schedulerHistory.tid}`,
145
+ },
146
+ {
147
+ col: 'col2',
148
+ text: formattedEndTime,
149
+ testId: `table-item-${schedulerHistory.tid}`,
150
+ },
151
+ {
152
+ key: 'status',
153
+ col: 'col3',
154
+ text: localization.common[statusData.textKey],
155
+ data: statusData,
156
+ testId: `table-item-${schedulerHistory.tid}`,
157
+ },
158
+ ],
159
+ }
160
+ })
161
+ }
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <atoms-table-data-grid
3
+ :selected-row="null"
4
+ :page-size="1"
5
+ :page="1"
6
+ :head-items="headItems"
7
+ :body-items="bodyItems"
8
+ :total-items="props.totalItems"
9
+ :total-pages="props.totalPages"
10
+ :loading="props.isLoading"
11
+ test-id="scheduled-tasks-history-runs-table"
12
+ class="history-runs-table"
13
+ off-select-by-row
14
+ hide-footer
15
+ >
16
+ <template #icon="{ item }">
17
+ <atoms-the-icon :name="item.data.iconClassName" class="icon" />
18
+ <span :title="item.text" class="text-ellipsis">
19
+ {{ item.text }}
20
+ </span>
21
+ </template>
22
+ </atoms-table-data-grid>
23
+ </template>
24
+
25
+ <script lang="ts" setup>
26
+ import type {
27
+ UI_I_HeadItem,
28
+ UI_I_BodyItem,
29
+ } from '~/components/atoms/table/compact/lib/models/interfaces'
30
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
31
+ import type { UI_I_ScheduledTasksTableItem } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
32
+ import * as historyRunTable from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/old/lib/config/historyRunsTable'
33
+
34
+ const props = defineProps<{
35
+ tableItems: UI_I_ScheduledTasksTableItem['last_5_run']
36
+ totalItems: number
37
+ totalPages: number
38
+ isLoading: boolean
39
+ }>()
40
+
41
+ const localization = computed<UI_I_Localization>(() => useLocal())
42
+
43
+ const headItems = computed<UI_I_HeadItem[]>(() =>
44
+ historyRunTable.headItems(localization.value)
45
+ )
46
+ const bodyItems = computed<UI_I_BodyItem[][]>(() => {
47
+ return historyRunTable.bodyItems(props.tableItems || [])
48
+ })
49
+ </script>
50
+
51
+ <style lang="scss" scoped>
52
+ .history-runs-table {
53
+ height: inherit;
54
+ :deep(.datagrid-outer-wrapper) {
55
+ height: inherit;
56
+ padding-top: 0;
57
+ }
58
+ :deep(.datagrid-row-scrollable) {
59
+ flex-direction: row;
60
+ }
61
+
62
+ .icon {
63
+ width: 18px;
64
+ min-width: 18px;
65
+ margin-right: 3px;
66
+ }
67
+ }
68
+ </style>
@@ -9,8 +9,8 @@ import {
9
9
  UI_E_RecentTaskStatus,
10
10
  } from '~/lib/models/store/tasks/enums'
11
11
  import type { UI_I_ScheduledTasksTableItem } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
12
- import { historyLastRunTableKeys } from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/lib/config/tableKeys'
13
- import { schedulerRunStatus } from '~/components/common/pages/scheduledTasks/table/lib/config/schedulerStatus'
12
+ import { historyLastRunTableKeys } from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/old/lib/config/tableKeys'
13
+ import { UI_E_SchedulerRunStatus } from '~/components/common/pages/scheduledTasks/table/lib/models/enums'
14
14
 
15
15
  const getItems = (
16
16
  localization: UI_I_Localization
@@ -68,9 +68,9 @@ export const bodyItems = (
68
68
  const statusData = {
69
69
  iconClassName:
70
70
  UI_E_IconNameByRecentTaskStatus[
71
- event?.result.toLowerCase() === schedulerRunStatus.SUCCESS
71
+ event?.result.toLowerCase() === UI_E_SchedulerRunStatus.SUCCESS
72
72
  ? 2
73
- : event?.result === schedulerRunStatus.RUNNING
73
+ : event?.result === UI_E_SchedulerRunStatus.RUNNING
74
74
  ? 1
75
75
  : 3
76
76
  ],
@@ -1,4 +1,4 @@
1
- import type { UI_T_HistoryLastRunTableTuple } from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/lib/models/types'
1
+ import type { UI_T_HistoryLastRunTableTuple } from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/old/lib/models/types'
2
2
 
3
3
  export const historyLastRunTableKeys: UI_T_HistoryLastRunTableTuple = [
4
4
  'start',
@@ -1,18 +1,18 @@
1
1
  import type { UI_I_Localization } from '~/lib/models/interfaces'
2
- import type { UI_I_ScheduleTableRowDetails } from '~/components/common/pages/scheduledTasks/table/lib/models/interfaces'
2
+ import type { UI_I_ScheduleTableExpandDetails } from '~/components/common/pages/scheduledTasks/table/expandDetails/lib/models/interfaces'
3
3
  import type { UI_I_ScheduledTasksTableItem } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
4
4
 
5
5
  export const detailsListFunc = (
6
6
  data: UI_I_ScheduledTasksTableItem,
7
7
  localization: UI_I_Localization
8
- ): UI_I_ScheduleTableRowDetails[] => {
8
+ ): UI_I_ScheduleTableExpandDetails[] => {
9
9
  const { $formattedDatetime }: any = useNuxtApp()
10
10
 
11
11
  return [
12
12
  {
13
13
  id: 1,
14
14
  text: localization.scheduledTasks.scheduledDescription,
15
- value: data.description,
15
+ value: data?.description || '--',
16
16
  testId: 'scheduled-tasks-description',
17
17
  },
18
18
 
@@ -25,13 +25,15 @@ export const detailsListFunc = (
25
25
  {
26
26
  id: 3,
27
27
  text: localization.scheduledTasks.emailNotification,
28
- value: data.notify_emails,
28
+ value: data?.notify_emails || localization.common.none,
29
+ disabled: !data?.notify_emails,
29
30
  testId: 'scheduled-tasks-email-notification',
30
31
  },
31
32
  {
32
33
  id: 4,
33
34
  text: localization.common.initiator,
34
- value: data.initiator,
35
+ value: data?.initiator || '--',
36
+ iconClassName: data?.initiator ? 'user-icon' : '',
35
37
  testId: 'scheduled-tasks-initiator',
36
38
  },
37
39
  {
@@ -0,0 +1,8 @@
1
+ import { UI_I_TableRowDropDetails } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
2
+ import type { UI_I_ScheduledTasks } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
3
+
4
+ export interface UI_I_ScheduleTableExpandDetails
5
+ extends Omit<UI_I_TableRowDropDetails, 'value'> {
6
+ value: string | UI_I_ScheduledTasks['items'][number]['last_5_run']
7
+ disabled?: boolean
8
+ }
@@ -0,0 +1,4 @@
1
+ export enum UI_E_SchedulerRunStatus {
2
+ RUNNING = 'this task has been started',
3
+ SUCCESS = 'success',
4
+ }
@@ -0,0 +1,320 @@
1
+ <template>
2
+ <div :class="`table-view-scheduled-tasks table-container-${data.id}`">
3
+ <ui-data-table
4
+ :data="data"
5
+ :options="options"
6
+ :loading="props.isLoading"
7
+ :total-pages="props.totalPages"
8
+ :total-items="props.totalItems"
9
+ :texts="texts"
10
+ :skeleton="skeletonData"
11
+ test-id="task-table"
12
+ @sort="onSorting"
13
+ @pagination="onPagination"
14
+ @column-filter="onColumnFilter"
15
+ @select-row="onSelectRow"
16
+ >
17
+ <template #insteadOfTitleActions>
18
+ <templates-inventory-vm-configure-scheduled-tasks-tools-panel
19
+ :selected-task="selectedScheduledTaskLocal"
20
+ :selected-task-from-table="props.selectedScheduler"
21
+ />
22
+ </template>
23
+
24
+ <template #icon="{ item }">
25
+ <span class="flex-align-center">
26
+ <ui-icon
27
+ :name="item.data.iconClassName"
28
+ width="18"
29
+ height="18"
30
+ class="mr-1"
31
+ />
32
+ {{ item.text }}
33
+ </span>
34
+ </template>
35
+
36
+ <template #status="{ item }">
37
+ <ui-chip
38
+ :test-id="item.data.testId"
39
+ :color="item.data.chipColor"
40
+ rounded
41
+ >
42
+ <ui-icon
43
+ :name="item.data.icon"
44
+ width="14px"
45
+ height="14px"
46
+ class="chip-icon"
47
+ ></ui-icon>
48
+ {{ item.text }}
49
+ </ui-chip>
50
+
51
+ <common-tooltip-help
52
+ v-if="item.data.chipColor === 'red'"
53
+ :title="localization.common.failureReason"
54
+ :help-text="item.data.runResult"
55
+ :test-id="`${item.data.testId}`"
56
+ :help-id="`${item.data.testId}-tooltip`"
57
+ status="error"
58
+ dropdown-width="320px"
59
+ dropdown-left
60
+ dropdown-top
61
+ class="ml-2"
62
+ />
63
+ </template>
64
+
65
+ <template #default-actions="{ item }">
66
+ <div class="scheduler-drop-action">
67
+ <ui-button
68
+ :id="`event-table-action-${item.data.id}`"
69
+ :test-id="`event-table-action-${item.data.id}`"
70
+ variant="text"
71
+ is-without-height
72
+ is-without-sizes
73
+ @click.stop="onToggleActions(item.data.id)"
74
+ >
75
+ <span
76
+ :class="[
77
+ 'scheduler-drop-action__icon',
78
+ { active: actionsShowId === item.data.id },
79
+ ]"
80
+ >
81
+ <ui-icon name="vertical-dotes" width="20" height="20" />
82
+ </span>
83
+ </ui-button>
84
+ <ui-dropdown
85
+ :show="actionsShowId === item.data.id"
86
+ :test-id="`event-table-action-dropdown-${item.data.id}`"
87
+ :items="actions"
88
+ :elem-id="`event-table-action-${item.data.id}`"
89
+ width="max-content"
90
+ left
91
+ @select="onSelectAction(item.data, $event)"
92
+ @hide="onHideActionsDropdown"
93
+ >
94
+ <template #row="{ item: dropMenu }">
95
+ <ui-icon :name="dropMenu.iconName" width="16" height="16" />
96
+ <span class="scheduler-drop-action__icon__text">
97
+ {{ dropMenu.text }}
98
+ </span>
99
+ </template>
100
+ </ui-dropdown>
101
+ </div>
102
+ </template>
103
+
104
+ <template #expand="{ item }">
105
+ <common-pages-scheduled-tasks-table-expand-details
106
+ :data="item.data[0]?.data.expandData"
107
+ />
108
+ </template>
109
+
110
+ <template #skeleton-header>
111
+ <div class="skeleton-header">
112
+ <div class="left-skeleton">
113
+ <ui-skeleton-item width="70" height="16" />
114
+ <div class="vertical-line"></div>
115
+ <ui-skeleton-item width="70" height="16" />
116
+ <ui-skeleton-item width="70" height="16" />
117
+ </div>
118
+ <div class="right-skeleton">
119
+ <ui-skeleton-item width="128" height="36" border-radius="8" />
120
+ </div>
121
+ </div>
122
+ </template>
123
+ </ui-data-table>
124
+ </div>
125
+ </template>
126
+
127
+ <script setup lang="ts">
128
+ import { useDebounceFn } from '@vueuse/core'
129
+ import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
130
+ import type {
131
+ UI_I_DataTable,
132
+ UI_I_DataTableHeader,
133
+ UI_I_DataTableBody,
134
+ UI_I_DataTableBodyData,
135
+ UI_I_DataTableSkeleton,
136
+ UI_I_Pagination,
137
+ UI_I_TableTexts,
138
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
139
+ import type { UI_T_ArbitraryObject } from '~/node_modules/bfg-uikit/models/types'
140
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
141
+ import type { UI_I_ScheduledTasks } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
142
+ import {
143
+ options,
144
+ getTargetActionsFunc,
145
+ getHeaderDataFunc,
146
+ getBodyDataFunc,
147
+ } from '~/components/common/pages/scheduledTasks/table/new/lib/config/scheduledTasksTable'
148
+
149
+ const selectedScheduledTaskLocal = defineModel<string | null>({
150
+ required: true,
151
+ })
152
+ const props = defineProps<{
153
+ tableItems: UI_I_ScheduledTasks['items']
154
+ totalItems: number
155
+ totalPages: number
156
+ selectedScheduler: UI_I_ScheduledTasks['items'][number]
157
+ isLoading: boolean
158
+ }>()
159
+ const emits = defineEmits<{
160
+ (event: 'sort', value: string): void
161
+ (event: 'pagination', value: UI_I_Pagination): void
162
+ (event: 'col-search', value: string): void
163
+ }>()
164
+
165
+ const localization = computed<UI_I_Localization>(() => useLocal())
166
+
167
+ const texts = computed<UI_I_TableTexts>(() => ({
168
+ searchHere: localization.value.common.searchHere,
169
+ rowsPerPage: localization.value.common.rowsPerPage,
170
+ of: localization.value.common.of,
171
+ selected: localization.value.common.selected,
172
+ columns: localization.value.common.columns,
173
+ previous: localization.value.common.previous,
174
+ next: localization.value.common.next,
175
+ noItemsFound: localization.value.common.noItemsFound,
176
+ exportAll: localization.value.common.exportAll,
177
+ exportSelected: localization.value.common.exportSelected,
178
+ all: localization.value.common.all,
179
+ filter: localization.value.common.filter,
180
+ }))
181
+ const skeletonData = ref<UI_I_DataTableSkeleton>({
182
+ columnsCount: 6,
183
+ headColumns: [],
184
+ bodyColumns: [],
185
+ })
186
+
187
+ const actionsShowId = ref<number>(-1)
188
+
189
+ const data = computed<UI_I_DataTable>(() => ({
190
+ id: 'scheduled-tasks-table',
191
+ header: taskHeadItems.value,
192
+ body: taskBodyItems.value,
193
+ }))
194
+
195
+ const taskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
196
+ getHeaderDataFunc(localization.value)
197
+ )
198
+ const taskBodyItems = computed<UI_I_DataTableBody[]>(() => {
199
+ return getBodyDataFunc(props.tableItems || [], localization.value)
200
+ })
201
+
202
+ const onSorting = (value: string): void => {
203
+ emits('sort', value)
204
+ }
205
+ const onPagination = (value: UI_I_Pagination): void => {
206
+ emits('pagination', value)
207
+ }
208
+ const sendFilter = useDebounceFn((searchText: string) => {
209
+ emits('col-search', searchText)
210
+ }, 1000)
211
+ const onColumnFilter = (obj: UI_T_ArbitraryObject<string>): void => {
212
+ let searchText = ''
213
+
214
+ for (const [key, value] of Object.entries(obj)) {
215
+ const currentFilter = searchText
216
+ ? ',' + key + '.' + value
217
+ : key + '.' + value
218
+
219
+ searchText = searchText + (value ? currentFilter : '')
220
+ }
221
+ sendFilter(searchText)
222
+ }
223
+
224
+ const actions = computed<UI_I_Dropdown[]>(() =>
225
+ getTargetActionsFunc(localization.value)
226
+ )
227
+ const onToggleActions = (id: number): void => {
228
+ if (actionsShowId.value === id) {
229
+ actionsShowId.value = -1
230
+ } else {
231
+ actionsShowId.value = id
232
+ }
233
+ }
234
+ const onSelectAction = (
235
+ data: UI_I_DataTableBodyData['data'],
236
+ action: 'view-target' | 'copy-clipboard' | 'export'
237
+ ): void => {
238
+ const { event } = data
239
+
240
+ switch (action) {
241
+ case 'view-target':
242
+ break
243
+ case 'copy-clipboard': {
244
+ const clipboardText =
245
+ [event]?.map((item) => Object.values(item).join(',')).join('\n') || ''
246
+
247
+ navigator.clipboard.writeText(clipboardText)
248
+ break
249
+ }
250
+ case 'export':
251
+ break
252
+ }
253
+ onHideActionsDropdown()
254
+ }
255
+ const onHideActionsDropdown = (): void => {
256
+ actionsShowId.value = -1
257
+ }
258
+
259
+ const onSelectRow = (value: UI_I_DataTableBody[]): void => {
260
+ selectedScheduledTaskLocal.value = value[0]?.row
261
+ }
262
+ </script>
263
+
264
+ <style scoped lang="scss">
265
+ .table-view-scheduled-tasks {
266
+ height: inherit;
267
+
268
+ :deep(.table-container) {
269
+ grid-template-rows: min-content auto min-content;
270
+ }
271
+
272
+ .chip-icon {
273
+ min-width: 14px;
274
+ }
275
+ .icon {
276
+ margin-right: 4px;
277
+ }
278
+
279
+ .scheduler-drop-action {
280
+ width: 100%;
281
+ &__icon {
282
+ width: 20px;
283
+ height: 20px;
284
+ color: var(--tasks-actions-icon-color);
285
+
286
+ &:hover {
287
+ color: var(--tasks-actions-icon-hover-color);
288
+ }
289
+ &.active {
290
+ color: var(--tasks-actions-icon-icative-color);
291
+ }
292
+ }
293
+ &__text {
294
+ margin-left: 8px;
295
+ }
296
+ }
297
+
298
+ .skeleton-header {
299
+ display: flex;
300
+ justify-content: space-between;
301
+ align-items: center;
302
+
303
+ .left-skeleton {
304
+ display: flex;
305
+ align-items: center;
306
+ column-gap: 16px;
307
+ .vertical-line {
308
+ height: 24px;
309
+ border-right: 1px solid var(--table-line);
310
+ }
311
+ }
312
+
313
+ .right-skeleton {
314
+ display: flex;
315
+ align-items: center;
316
+ column-gap: 16px;
317
+ }
318
+ }
319
+ }
320
+ </style>