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,129 @@
1
+ <template>
2
+ <!-- Аргумент (:template-view-mode) используется только для нового интерфейса -->
3
+ <component
4
+ :is="currentComponent"
5
+ v-model="scheduledTaskFormModel"
6
+ :target="props.target"
7
+ :form-validation-fields="initValidationFields"
8
+ :task-name-error-text="taskNameErrorText"
9
+ :frequency-method-options="frequencyMethodOptions"
10
+ :template-view-mode="props.templateViewMode"
11
+ @init-validation="onInitValidation"
12
+ />
13
+ </template>
14
+
15
+ <script lang="ts" setup>
16
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
17
+ import type { UI_I_SelectInputItem } from '~/components/common/select/input/lib/models/interfaces'
18
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
19
+ import type { UI_I_InitialValidationFields } from '~/components/common/pages/scheduledTasks/modals/common/taskForm/lib/models/interfaces'
20
+ import type { UI_T_FrequencyType } from '~/components/common/pages/scheduledTasks/modals/common/frequency/lib/models/types'
21
+ import * as cron from '~/components/common/pages/scheduledTasks/modals/common/taskForm/lib/utils'
22
+ import { frequencyMethodFunc } from '~/components/common/pages/scheduledTasks/modals/common/frequency/lib/config/frequencyOptions'
23
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
24
+
25
+ const scheduledTaskFormModel = defineModel<UI_I_ScheduleNewTasksForm>({
26
+ required: true,
27
+ })
28
+ const props = withDefaults(
29
+ defineProps<{
30
+ target: string
31
+ templateViewMode?: 'horizontal' | 'vertical'
32
+ }>(),
33
+ { templateViewMode: 'vertical' }
34
+ )
35
+
36
+ const localization = computed<UI_I_Localization>(() => useLocal())
37
+ const { $store }: any = useNuxtApp()
38
+
39
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
40
+ const currentComponent = computed(() =>
41
+ isNewView.value
42
+ ? defineAsyncComponent(() => import('./New.vue'))
43
+ : defineAsyncComponent(() => import('./Old.vue'))
44
+ )
45
+
46
+ const initValidationFields = ref<UI_I_InitialValidationFields>({
47
+ taskName: false,
48
+ })
49
+ const onInitValidation = (
50
+ types: (keyof UI_I_InitialValidationFields)[]
51
+ ): void => {
52
+ types.forEach((type) => (initValidationFields.value[type] = true))
53
+ }
54
+
55
+ const taskNameErrorText = computed<string>(() => {
56
+ if (!initValidationFields.value.taskName) return ''
57
+
58
+ scheduledTaskFormModel.value.task_name =
59
+ scheduledTaskFormModel.value.task_name.replace(/^\s+/, '')
60
+
61
+ return !scheduledTaskFormModel.value.task_name
62
+ ? localization.value.common.fieldRequired
63
+ : ''
64
+ })
65
+
66
+ const frequencyMethodOptions = computed<UI_I_SelectInputItem[]>(() =>
67
+ frequencyMethodFunc(localization.value)
68
+ )
69
+
70
+ watch(
71
+ scheduledTaskFormModel,
72
+ (newValue: UI_I_ScheduleNewTasksForm) => {
73
+ newValue.cron = generateCronExpression(newValue.frequency, newValue)
74
+ },
75
+ { deep: true }
76
+ )
77
+
78
+ const generateCronExpression = (
79
+ runType: UI_T_FrequencyType,
80
+ interval: UI_I_ScheduleNewTasksForm
81
+ ): string => {
82
+ let cronExpression
83
+
84
+ // Генерируем cron-выражение на основе runType
85
+ switch (runType) {
86
+ case 'once':
87
+ const timestamp = Math.floor(
88
+ new Date(interval.frg_on_time).getTime() / 1000
89
+ )
90
+ cronExpression = `* * * * * ${timestamp}:0-0-0-0:once`
91
+ break
92
+ case 'after-startup':
93
+ const suffixDelay =
94
+ interval.frg_after_startup === 0 ? '' : `-${interval.frg_after_startup}`
95
+ cronExpression = `* * * * * after_procurator_startup${suffixDelay}` // Выполняется после запуска procurator_startup с задержой N минут
96
+ break
97
+ case 'hour':
98
+ cronExpression = cron.generateHourlyCronExpression(interval)
99
+ break
100
+ case 'day':
101
+ cronExpression = cron.generateDailyCronExpression(interval)
102
+ break
103
+ case 'week':
104
+ cronExpression = cron.generateWeeklyCronExpression(interval)
105
+ break
106
+ case 'month':
107
+ cronExpression = cron.generateMonthlyCronExpression(interval)
108
+ break
109
+ default:
110
+ cronExpression = '* * * * *'
111
+ }
112
+
113
+ return cronExpression
114
+ }
115
+
116
+ // Используется только для нового интерфейса и вызывается в родительском компоненте
117
+ // Запускаем валидацию всех полей
118
+ const isValidateForm = (): boolean => {
119
+ onInitValidation(['taskName'])
120
+
121
+ const errorChecks = [taskNameErrorText.value]
122
+
123
+ // если поле невалидно — значение будет непустым
124
+ return errorChecks.every((text) => !text?.length)
125
+ }
126
+ defineExpose({
127
+ isValidateForm,
128
+ })
129
+ </script>
@@ -1,93 +1,39 @@
1
1
  <template>
2
- <div class="data-table-view">
3
- <atoms-table-data-grid
4
- v-model:selected-row="selectedScheduledTaskLocal"
5
- v-model:page-size="pagination.pageSize"
6
- v-model:page="pagination.page"
7
- :head-items="headItems"
8
- :body-items="bodyItems"
9
- :total-items="props.totalItems"
10
- :total-pages="props.totalPages"
11
- :items-per-page="itemsPerPage"
12
- :z-index-header-shift="2"
13
- :loading="loading"
14
- type="radio"
15
- class="data-table"
16
- test-id="scheduled-tasks-table"
17
- hide-pagination
18
- hide-page-size
19
- off-select-by-row
20
- server-off
21
- >
22
- <template #icon="{ item }">
23
- <atoms-the-icon :name="item.data.iconClassName" class="icon" />
24
- <span :title="item.text" class="text-ellipsis">
25
- {{ item.text }}
26
- </span>
27
- </template>
28
-
29
- <template #toggleBlock="{ item }">
30
- <common-pages-scheduled-tasks-table-expand-details
31
- :data="item[0].data.expandData"
32
- />
33
- </template>
34
- </atoms-table-data-grid>
35
- </div>
2
+ <!-- Аргументы (:selected-scheduler) используется только для нового интерфейса -->
3
+ <component
4
+ :is="currentComponent"
5
+ v-model="selectedScheduledTaskLocal"
6
+ :table-items="props.schedulerData?.items || []"
7
+ :total-items="props.schedulerData?.total_items || 0"
8
+ :total-pages="props.schedulerData?.total_pages || 1"
9
+ :selected-scheduler="props.selectedScheduler"
10
+ :is-loading="props.isLoading"
11
+ />
36
12
  </template>
37
13
 
38
14
  <script lang="ts" setup>
39
- import type {
40
- UI_I_HeadItem,
41
- UI_I_BodyItem,
42
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
43
- import { itemsPerPage } from '~/components/atoms/table/dataGrid/lib/config/itemsPerPage'
44
15
  import type { UI_I_Localization } from '~/lib/models/interfaces'
45
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
46
- import type { UI_I_ScheduledTasksTableItem } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
47
- import * as scheduledTaskTable from '~/components/common/pages/scheduledTasks/table/lib/config/scheduledTasksTable'
16
+ import type { UI_I_ScheduledTasks } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
48
17
 
49
- const props = defineProps<{
50
- dataTable: UI_I_ScheduledTasksTableItem[]
51
- loading: boolean
52
- totalItems: number
53
- totalPages: number
54
- }>()
55
18
  const selectedScheduledTaskLocal = defineModel<string | null>()
19
+ const props = withDefaults(
20
+ defineProps<{
21
+ schedulerData: UI_I_ScheduledTasks
22
+ selectedScheduler?: UI_I_ScheduledTasks['items'][number] // используется только в новом виде
23
+ isLoading: boolean
24
+ }>(),
25
+ {
26
+ selectedScheduler: undefined,
27
+ }
28
+ )
56
29
 
57
30
  const localization = computed<UI_I_Localization>(() => useLocal())
31
+ const { $store }: any = useNuxtApp()
58
32
 
59
- const pagination = ref<UI_I_Pagination>({
60
- page: 1,
61
- pageSize: 100,
62
- })
63
-
64
- const headItems = computed<UI_I_HeadItem[]>(() =>
65
- scheduledTaskTable.headItems(localization.value)
33
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
34
+ const currentComponent = computed(() =>
35
+ isNewView.value
36
+ ? defineAsyncComponent(() => import('./new/New.vue'))
37
+ : defineAsyncComponent(() => import('./old/Old.vue'))
66
38
  )
67
- const bodyItems = computed<UI_I_BodyItem[][]>(() => {
68
- return scheduledTaskTable.bodyItems(props.dataTable || [])
69
- })
70
39
  </script>
71
-
72
- <style lang="scss" scoped>
73
- .data-table-view {
74
- overflow: hidden;
75
- height: inherit;
76
- margin-bottom: 10px;
77
- :deep(.data-table) {
78
- height: inherit;
79
- .datagrid-outer-wrapper {
80
- height: inherit;
81
- padding-top: 0;
82
- //.datagrid {
83
- // margin-top: 0;
84
- //}
85
- }
86
- }
87
- .icon {
88
- width: 18px;
89
- min-width: 18px;
90
- margin-right: 3px;
91
- }
92
- }
93
- </style>
@@ -5,7 +5,7 @@
5
5
  <script lang="ts" setup>
6
6
  import type { UI_I_Localization } from '~/lib/models/interfaces'
7
7
  import type { UI_I_ScheduledTasksTableItem } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
8
- import type { UI_I_ScheduleTableRowDetails } from '~/components/common/pages/scheduledTasks/table/lib/models/interfaces'
8
+ import type { UI_I_ScheduleTableExpandDetails } from '~/components/common/pages/scheduledTasks/table/expandDetails/lib/models/interfaces'
9
9
  import { detailsListFunc } from '~/components/common/pages/scheduledTasks/table/expandDetails/lib/config/expandDetails'
10
10
 
11
11
  const props = defineProps<{
@@ -22,7 +22,7 @@ const currentComponent = computed(() =>
22
22
  : defineAsyncComponent(() => import('./Old.vue'))
23
23
  )
24
24
 
25
- const normalizedSchedulerDetails = computed<UI_I_ScheduleTableRowDetails[]>(
25
+ const normalizedSchedulerDetails = computed<UI_I_ScheduleTableExpandDetails[]>(
26
26
  () => {
27
27
  return detailsListFunc(props.data, localization.value)
28
28
  }
@@ -1,14 +1,50 @@
1
1
  <template>
2
- <div class="expand-details" />
2
+ <div class="expand-details">
3
+ <div
4
+ v-for="(item, key) in props.expandData"
5
+ :key="key"
6
+ class="expand-details__row"
7
+ :class="item.lastChild && 'history-run'"
8
+ >
9
+ <!-- Обычные строки -->
10
+ <template v-if="!item.lastChild">
11
+ <span class="expand-details__label"> {{ item.text }}: </span>
12
+
13
+ <span :class="['expand-details__value', { disabled: item.disabled }]">
14
+ <ui-icon
15
+ v-if="item.iconClassName"
16
+ :name="item.iconClassName"
17
+ width="18"
18
+ height="18"
19
+ class="mr-1"
20
+ />
21
+ {{ item.value }}
22
+ </span>
23
+ </template>
24
+
25
+ <!-- History -->
26
+ <template v-else>
27
+ <div class="expand-details__label">
28
+ {{ item.text }}
29
+ </div>
30
+
31
+ <div class="expand-details__value">
32
+ <common-pages-scheduled-tasks-table-expand-details-history-run
33
+ v-else
34
+ :history-run-data="item.value"
35
+ />
36
+ </div>
37
+ </template>
38
+ </div>
39
+ </div>
3
40
  </template>
4
41
 
5
42
  <script lang="ts" setup>
6
- // import type { UI_I_DataTableBodyData } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
7
-
8
- // const props = defineProps<{
9
- // expandData: UI_I_DataTableBodyData[]
10
- // }>()
43
+ import type { UI_I_DataTableBodyData } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
11
44
 
45
+ const props = defineProps<{
46
+ expandData: UI_I_DataTableBodyData[]
47
+ }>()
12
48
  </script>
13
49
 
14
50
  <style lang="scss" scoped>
@@ -33,9 +69,10 @@
33
69
  @extend %properties;
34
70
  color: #9da6ad;
35
71
  text-transform: capitalize;
36
-
37
- &.events {
38
- height: 18px;
72
+ .history-run & {
73
+ color: var(--title-form-first-color);
74
+ grid-column: 1 / -1; /* 🔥 ВАЖНО */
75
+ margin-top: 12px;
39
76
  }
40
77
  }
41
78
  &__value {
@@ -47,15 +84,9 @@
47
84
  .icon {
48
85
  margin-right: 4px;
49
86
  }
50
- }
51
- &__status {
52
- @include flex($align: center);
53
- .ui-chip {
54
- width: max-content;
87
+ .history-run & {
88
+ grid-column: 1 / -1; /* 🔥 ВАЖНО */
55
89
  }
56
90
  }
57
- &__tooltip {
58
- margin-left: 6px;
59
- }
60
91
  }
61
92
  </style>
@@ -35,9 +35,7 @@
35
35
 
36
36
  <common-pages-scheduled-tasks-table-expand-details-history-run
37
37
  v-else
38
- :data-table="item.value"
39
- :total-items="item.value.length"
40
- :total-pages="1"
38
+ :history-run-data="item.value"
41
39
  class="details-list__table"
42
40
  />
43
41
  </div>
@@ -1,67 +1,29 @@
1
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="false"
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>
2
+ <component
3
+ :is="currentComponent"
4
+ :table-items="props.historyRunData || []"
5
+ :total-items="props.historyRunData?.length || 0"
6
+ :total-pages="1"
7
+ :is-loading="false"
8
+ />
23
9
  </template>
24
10
 
25
11
  <script setup lang="ts">
26
- import type {
27
- UI_I_HeadItem,
28
- UI_I_BodyItem,
29
- } from '~/components/atoms/table/compact/lib/models/interfaces'
30
12
  import type { UI_I_Localization } from '~/lib/models/interfaces'
31
13
  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/lib/config/historyRunsTable'
33
14
 
34
15
  const props = defineProps<{
35
- dataTable: UI_I_ScheduledTasksTableItem['last_5_run']
36
- totalItems: number
37
- totalPages: number
16
+ historyRunData: UI_I_ScheduledTasksTableItem['last_5_run']
38
17
  }>()
39
18
 
40
- const localization = computed<UI_I_Localization>(() => useLocal())
19
+ const { $store }: any = useNuxtApp()
41
20
 
42
- const headItems = computed<UI_I_HeadItem[]>(() =>
43
- historyRunTable.headItems(localization.value)
21
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
22
+ const currentComponent = computed(() =>
23
+ isNewView.value
24
+ ? defineAsyncComponent(() => import('./new/New.vue'))
25
+ : defineAsyncComponent(() => import('./old/Old.vue'))
44
26
  )
45
- const bodyItems = computed<UI_I_BodyItem[][]>(() => {
46
- return historyRunTable.bodyItems(props.dataTable || [])
47
- })
48
- </script>
49
-
50
- <style lang="scss" scoped>
51
- .history-runs-table {
52
- height: inherit;
53
- :deep(.datagrid-outer-wrapper) {
54
- height: inherit;
55
- padding-top: 0;
56
- }
57
- :deep(.datagrid-row-scrollable) {
58
- flex-direction: row;
59
- }
60
27
 
61
- .icon {
62
- width: 18px;
63
- min-width: 18px;
64
- margin-right: 3px;
65
- }
66
- }
67
- </style>
28
+ const localization = computed<UI_I_Localization>(() => useLocal())
29
+ </script>
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <ui-data-table
3
+ :data="data"
4
+ :options="options"
5
+ :loading="props.isLoading"
6
+ :total-pages="props.totalPages"
7
+ :total-items="props.totalItems"
8
+ :texts="texts"
9
+ :skeleton="skeletonData"
10
+ test-id="task-table"
11
+ @sort="onSorting"
12
+ @pagination="onPagination"
13
+ @column-filter="onColumnFilter"
14
+ >
15
+ <template #status="{ item }">
16
+ <ui-chip :test-id="item.data.testId" :color="item.data.chipColor" rounded>
17
+ <ui-icon
18
+ :name="item.data.icon"
19
+ width="14px"
20
+ height="14px"
21
+ class="chip-icon"
22
+ ></ui-icon>
23
+ {{ item.text }}
24
+ </ui-chip>
25
+
26
+ <common-tooltip-help
27
+ v-if="item.data.chipColor === 'red'"
28
+ :title="localization.common.failureReason"
29
+ :help-text="'Lorem Ipsum'"
30
+ :test-id="`${item.data.testId}`"
31
+ :help-id="`${item.data.testId}-tooltip`"
32
+ status="error"
33
+ dropdown-width="320px"
34
+ dropdown-left
35
+ dropdown-top
36
+ class="ml-2"
37
+ />
38
+ </template>
39
+ </ui-data-table>
40
+ </template>
41
+
42
+ <script setup lang="ts">
43
+ import { useDebounceFn } from '@vueuse/core'
44
+ import type {
45
+ UI_I_DataTable,
46
+ UI_I_DataTableHeader,
47
+ UI_I_DataTableBody,
48
+ UI_I_DataTableSkeleton,
49
+ UI_I_Pagination,
50
+ UI_I_TableTexts,
51
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
52
+ import type { UI_T_ArbitraryObject } from '~/node_modules/bfg-uikit/models/types'
53
+ import type { UI_I_TableTarget } from '~/lib/models/table/interfaces'
54
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
55
+ import type { UI_I_ScheduledTasks } from '~/components/common/pages/scheduledTasks/lib/models/interfaces'
56
+ import {
57
+ options,
58
+ getHeaderDataFunc,
59
+ getBodyDataFunc,
60
+ } from '~/components/common/pages/scheduledTasks/table/expandDetails/historyRun/new/lib/config/historyRunsTable'
61
+
62
+
63
+ const props = defineProps<{
64
+ tableItems: UI_I_ScheduledTasks['items']
65
+ totalItems: number
66
+ totalPages: number
67
+ isLoading: boolean
68
+ }>()
69
+ const emits = defineEmits<{
70
+ (event: 'sort', value: string): void
71
+ (event: 'pagination', value: UI_I_Pagination): void
72
+ (event: 'col-search', value: string): void
73
+ (event: 'select-node', value: UI_I_TableTarget<'sphere'>): void
74
+ }>()
75
+
76
+ const localization = computed<UI_I_Localization>(() => useLocal())
77
+
78
+ const texts = computed<UI_I_TableTexts>(() => ({
79
+ searchHere: localization.value.common.searchHere,
80
+ rowsPerPage: localization.value.common.rowsPerPage,
81
+ of: localization.value.common.of,
82
+ selected: localization.value.common.selected,
83
+ columns: localization.value.common.columns,
84
+ previous: localization.value.common.previous,
85
+ next: localization.value.common.next,
86
+ noItemsFound: localization.value.common.noItemsFound,
87
+ exportAll: localization.value.common.exportAll,
88
+ exportSelected: localization.value.common.exportSelected,
89
+ all: localization.value.common.all,
90
+ filter: localization.value.common.filter,
91
+ }))
92
+ const skeletonData = ref<UI_I_DataTableSkeleton>({
93
+ columnsCount: 6,
94
+ headColumns: [],
95
+ bodyColumns: [],
96
+ })
97
+
98
+ const data = computed<UI_I_DataTable>(() => ({
99
+ id: 'scheduled-tasks-history-table',
100
+ header: taskHeadItems.value,
101
+ body: taskBodyItems.value,
102
+ }))
103
+
104
+ const taskHeadItems = computed<UI_I_DataTableHeader[]>(() =>
105
+ getHeaderDataFunc(localization.value)
106
+ )
107
+ const taskBodyItems = computed<UI_I_DataTableBody[]>(() => {
108
+ return getBodyDataFunc(props.tableItems || [], localization.value)
109
+ })
110
+
111
+ const onSorting = (value: string): void => {
112
+ emits('sort', value)
113
+ }
114
+ const onPagination = (value: UI_I_Pagination): void => {
115
+ emits('pagination', value)
116
+ }
117
+ const sendFilter = useDebounceFn((searchText: string) => {
118
+ emits('col-search', searchText)
119
+ }, 1000)
120
+ const onColumnFilter = (obj: UI_T_ArbitraryObject<string>): void => {
121
+ let searchText = ''
122
+
123
+ for (const [key, value] of Object.entries(obj)) {
124
+ const currentFilter = searchText
125
+ ? ',' + key + '.' + value
126
+ : key + '.' + value
127
+
128
+ searchText = searchText + (value ? currentFilter : '')
129
+ }
130
+ sendFilter(searchText)
131
+ }
132
+ </script>
133
+
134
+ <style scoped lang="scss">
135
+ .task-table {
136
+ height: inherit;
137
+ .chip-icon {
138
+ min-width: 14px;
139
+ }
140
+ .icon {
141
+ margin-right: 4px;
142
+ }
143
+ &__tooltip {
144
+ margin-left: 8px;
145
+ }
146
+ }
147
+ </style>