bfg-common 1.5.453 → 1.5.454

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.
@@ -2749,7 +2749,8 @@
2749
2749
  "template": "Шаблон",
2750
2750
  "convertToTemplate": "Пераўтварыць у шаблон",
2751
2751
  "newTemplate": "Новы шаблон",
2752
- "createTemplateFromVM": "Стварыць шаблон з ВМ"
2752
+ "createTemplateFromVM": "Стварыць шаблон з ВМ",
2753
+ "actionsNumObjects": "Дзеянні – {0} аб’ектаў"
2753
2754
  },
2754
2755
  "networks": {
2755
2756
  "active_ports": "Актыўныя Парты",
@@ -2753,7 +2753,8 @@
2753
2753
  "template": "Template",
2754
2754
  "convertToTemplate": "Convert to Template",
2755
2755
  "newTemplate": "New Template",
2756
- "createTemplateFromVM": "Create Template from VM"
2756
+ "createTemplateFromVM": "Create Template from VM",
2757
+ "actionsNumObjects": "Actions - {0} Objects"
2757
2758
  },
2758
2759
  "networks": {
2759
2760
  "active_ports": "Active ports",
@@ -2753,7 +2753,8 @@
2753
2753
  "template": "Ձևանմուշ",
2754
2754
  "convertToTemplate": "Վերափոխել ձևանմուշի",
2755
2755
  "newTemplate": "Նոր ձևանմուշ",
2756
- "createTemplateFromVM": "Ստեղծել ձևանմուշ ՎՄ-ից"
2756
+ "createTemplateFromVM": "Ստեղծել ձևանմուշ ՎՄ-ից",
2757
+ "actionsNumObjects": "Գործողություններ – {0} օբյեկտ"
2757
2758
  },
2758
2759
  "networks": {
2759
2760
  "active_ports": "Ակտիվ պորտեր",
@@ -2752,7 +2752,8 @@
2752
2752
  "template": "Үлгі",
2753
2753
  "convertToTemplate": "Үлгіге айналдыру",
2754
2754
  "newTemplate": "Жаңа үлгі",
2755
- "createTemplateFromVM": "ВМ негізінде үлгі жасау"
2755
+ "createTemplateFromVM": "ВМ негізінде үлгі жасау",
2756
+ "actionsNumObjects": "Әрекеттер – {0} нысан"
2756
2757
  },
2757
2758
  "networks": {
2758
2759
  "active_ports": "Белсенді порттар",
@@ -2752,7 +2752,8 @@
2752
2752
  "template": "Шаблон",
2753
2753
  "convertToTemplate": "Преобразовать в шаблон",
2754
2754
  "newTemplate": "Новый шаблон",
2755
- "createTemplateFromVM": "Создать шаблон из ВМ"
2755
+ "createTemplateFromVM": "Создать шаблон из ВМ",
2756
+ "actionsNumObjects": "Действия – {0} объектов"
2756
2757
  },
2757
2758
  "networks": {
2758
2759
  "active_ports": "Активные порты",
@@ -2750,7 +2750,8 @@
2750
2750
  "template": "模板",
2751
2751
  "convertToTemplate": "转换为模板",
2752
2752
  "newTemplate": "新模板",
2753
- "createTemplateFromVM": "从虚拟机创建模板"
2753
+ "createTemplateFromVM": "从虚拟机创建模板",
2754
+ "actionsNumObjects": "操作 – {0} 个对象"
2754
2755
  },
2755
2756
  "networks": {
2756
2757
  "active_ports": "活动端口",
@@ -211,6 +211,7 @@
211
211
  :data-id="`${item[0].testId}-select-row`"
212
212
  class="datagrid-row-master datagrid-row-flex"
213
213
  @click.stop="selectRowById(item[0])"
214
+ @contextmenu.prevent="onShowContextMenu($event, item[0])"
214
215
  >
215
216
  <div
216
217
  v-if="props.type || $slots.toggleBlock"
@@ -601,6 +602,7 @@ const emits = defineEmits<{
601
602
  (event: 'sorting', value: [string, boolean]): void
602
603
  (event: 'change', value: any): void
603
604
  (event: 'row-detail', value: number): void
605
+ (event: 'show-context-menu', value: Event): void
604
606
  }>()
605
607
 
606
608
  const localization = computed<UI_I_Localization>(() => useLocal())
@@ -1086,6 +1088,19 @@ const exportSelected = (): void => {
1086
1088
  generateCsvAndDownload([header, ...Array.from(rows)])
1087
1089
  }
1088
1090
 
1091
+ const onShowContextMenu = (event: Event, item: UI_I_BodyItem): void => {
1092
+ const { id } = item
1093
+ let has = false
1094
+ if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
1095
+ has = selectedRowLocal.value.includes(id)
1096
+ } else {
1097
+ has = selectedRowLocal.value === id
1098
+ }
1099
+ if (!has) selectRowById(item)
1100
+
1101
+ emits('show-context-menu', event)
1102
+ }
1103
+
1089
1104
  onMounted(() => {
1090
1105
  window.addEventListener('mousemove', mousemove)
1091
1106
  window.addEventListener('mouseup', mouseup)
@@ -107,12 +107,12 @@
107
107
  import type { UI_I_Localization } from '~/lib/models/interfaces'
108
108
 
109
109
  const alertShow = defineModel<boolean>('alert-show')
110
- const currentDateFrom = defineModel<boolean>('current-date-from')
111
- const dateFrom = defineModel<boolean>('date-from')
112
- const currentTimeFrom = defineModel<boolean>('current-time-from')
113
- const currentDateTo = defineModel<boolean>('current-date-to')
114
- const dateTo = defineModel<boolean>('date-to')
115
- const currentTimeTo = defineModel<boolean>('current-time-to')
110
+ const currentDateFrom = defineModel<string>('current-date-from')
111
+ const dateFrom = defineModel<number>('date-from')
112
+ const currentTimeFrom = defineModel<string>('current-time-from')
113
+ const currentDateTo = defineModel<string>('current-date-to')
114
+ const dateTo = defineModel<number>('date-to')
115
+ const currentTimeTo = defineModel<string>('current-time-to')
116
116
 
117
117
  const props = defineProps<{
118
118
  titleIntervalModal: string
@@ -1,102 +1,102 @@
1
- <template>
2
- <div class="main-content-backups h-full overflow-hidden">
3
- <common-pages-backups-tools
4
- :project="props.project"
5
- :backups-count="backupsTree.length"
6
- :backups-loading="backupsLoading"
7
- :selected-node="selectedNode"
8
- :target-type="typeFromRoute"
9
- @select="onShowModal"
10
- />
11
-
12
- <atoms-loader-pre-loader
13
- v-show="backupsLoading"
14
- id="loader"
15
- :show="true"
16
- class="backups-loading w-full h-full flex items-center justify-center"
17
- test-id="backups-tree-spinner"
18
- />
19
- <div class="fill-parent w-full h-full">
20
- <div v-if="backupsTree.length" class="backup-view mt-1 flex w-full">
21
- <common-tree-view
22
- :loading="backupsLoading"
23
- :nodes="backupsTree"
24
- @select-node="onSelectNode"
25
- @show-nodes="onShowNodes"
26
- />
27
- <common-pages-backups-detail-view :detail="detailData" />
28
- </div>
29
- <div v-else class="empty-block flex justify-center items-center w-full">
30
- {{ localization.common.noBackupAvailable }}
31
- </div>
32
- </div>
33
- </div>
34
- </template>
35
-
36
- <script setup lang="ts">
37
- import type { UI_T_Project } from '~/lib/models/types'
38
- import type { UI_I_Localization } from '~/lib/models/interfaces'
39
- import type {
40
- UI_T_TargetType,
41
- UI_T_BackupActionType,
42
- } from '~/components/common/pages/backups/lib/models/types'
43
- import type {
44
- UI_I_Backup,
45
- UI_I_BackupsTreeNode,
46
- } from '~/components/common/pages/backups/lib/models/interfaces'
47
-
48
- const props = defineProps<{
49
- project: UI_T_Project
50
- backups: UI_I_Backup[]
51
- backupsTree: UI_I_BackupsTreeNode[]
52
- backupsLoading: boolean
53
- selectedNode: UI_I_BackupsTreeNode
54
- }>()
55
- const emits = defineEmits<{
56
- (event: 'select-node', value: string | number): void
57
- (event: 'show-nodes', value: string | number): void
58
- (event: 'set-action', value: UI_T_BackupActionType): void
59
- }>()
60
-
61
- const localization = computed<UI_I_Localization>(() => useLocal())
62
- const { $recursion }: any = useNuxtApp()
63
-
64
- const typeFromRoute = computed<UI_T_TargetType>(
65
- () => useRoute().params.type.toString() as UI_T_TargetType
66
- )
67
-
68
- const detailData = computed<UI_I_BackupsTreeNode | null>(() => {
69
- const node =
70
- $recursion.find(props.backupsTree, true, 'isActive', 'nodes') || null
71
- return node?.type === 'backup' ? node : null
72
- })
73
-
74
- const onSelectNode = (item: UI_I_BackupsTreeNode): void => {
75
- emits('select-node', item.id)
76
- if (item.type === 'group') {
77
- onShowNodes(item.id.toString())
78
- }
79
- }
80
- const onShowNodes = (id: string | number): void => {
81
- emits('show-nodes', id)
82
- }
83
-
84
- const onShowModal = (action: UI_T_BackupActionType): void => {
85
- emits('set-action', action)
86
- }
87
- </script>
88
-
89
- <style scoped lang="scss">
90
- .main-content-backups {
91
- padding: 10px 5px 10px 0;
92
-
93
- .fill-parent {
94
- overflow: visible;
95
-
96
- .backup-view {
97
- // TODO fix
98
- height: calc(90% - 24px);
99
- }
100
- }
101
- }
102
- </style>
1
+ <template>
2
+ <div class="main-content-backups h-full overflow-hidden">
3
+ <common-pages-backups-tools
4
+ :project="props.project"
5
+ :backups-count="backupsTree.length"
6
+ :backups-loading="backupsLoading"
7
+ :selected-node="selectedNode"
8
+ :target-type="typeFromRoute"
9
+ @select="onShowModal"
10
+ />
11
+
12
+ <atoms-loader-pre-loader
13
+ v-show="backupsLoading"
14
+ id="loader"
15
+ :show="true"
16
+ class="backups-loading w-full h-full flex items-center justify-center"
17
+ test-id="backups-tree-spinner"
18
+ />
19
+ <div class="fill-parent w-full h-full">
20
+ <div v-if="backupsTree.length" class="backup-view mt-1 flex w-full">
21
+ <common-tree-view
22
+ :loading="backupsLoading"
23
+ :nodes="backupsTree"
24
+ @select-node="onSelectNode"
25
+ @show-nodes="onShowNodes"
26
+ />
27
+ <common-pages-backups-detail-view :detail="detailData" />
28
+ </div>
29
+ <div v-else class="empty-block flex justify-center items-center w-full">
30
+ {{ localization.common.noBackupAvailable }}
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </template>
35
+
36
+ <script setup lang="ts">
37
+ import type { UI_T_Project } from '~/lib/models/types'
38
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
39
+ import type {
40
+ UI_T_TargetType,
41
+ UI_T_BackupActionType,
42
+ } from '~/components/common/pages/backups/lib/models/types'
43
+ import type {
44
+ UI_I_Backup,
45
+ UI_I_BackupsTreeNode,
46
+ } from '~/components/common/pages/backups/lib/models/interfaces'
47
+
48
+ const props = defineProps<{
49
+ project: UI_T_Project
50
+ backups: UI_I_Backup[]
51
+ backupsTree: UI_I_BackupsTreeNode[]
52
+ backupsLoading: boolean
53
+ selectedNode: UI_I_BackupsTreeNode | null
54
+ }>()
55
+ const emits = defineEmits<{
56
+ (event: 'select-node', value: string | number): void
57
+ (event: 'show-nodes', value: string | number): void
58
+ (event: 'set-action', value: UI_T_BackupActionType): void
59
+ }>()
60
+
61
+ const localization = computed<UI_I_Localization>(() => useLocal())
62
+ const { $recursion }: any = useNuxtApp()
63
+
64
+ const typeFromRoute = computed<UI_T_TargetType>(
65
+ () => useRoute().params.type.toString() as UI_T_TargetType
66
+ )
67
+
68
+ const detailData = computed<UI_I_BackupsTreeNode | null>(() => {
69
+ const node =
70
+ $recursion.find(props.backupsTree, true, 'isActive', 'nodes') || null
71
+ return node?.type === 'backup' ? node : null
72
+ })
73
+
74
+ const onSelectNode = (item: UI_I_BackupsTreeNode): void => {
75
+ emits('select-node', item.id)
76
+ if (item.type === 'group') {
77
+ onShowNodes(item.id.toString())
78
+ }
79
+ }
80
+ const onShowNodes = (id: string | number): void => {
81
+ emits('show-nodes', id)
82
+ }
83
+
84
+ const onShowModal = (action: UI_T_BackupActionType): void => {
85
+ emits('set-action', action)
86
+ }
87
+ </script>
88
+
89
+ <style scoped lang="scss">
90
+ .main-content-backups {
91
+ padding: 10px 5px 10px 0;
92
+
93
+ .fill-parent {
94
+ overflow: visible;
95
+
96
+ .backup-view {
97
+ // TODO fix
98
+ height: calc(90% - 24px);
99
+ }
100
+ }
101
+ }
102
+ </style>
@@ -43,7 +43,10 @@
43
43
  <script lang="ts" setup>
44
44
  import type { UI_I_WizardStep } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
45
45
  import type { UI_T_Project } from '~/lib/models/types'
46
- import type { UI_I_SendTaskParams, UI_I_ModalPayload } from '~/lib/models/interfaces'
46
+ import type {
47
+ UI_I_SendTaskParams,
48
+ UI_I_ModalPayload,
49
+ } from '~/lib/models/interfaces'
47
50
  import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
48
51
  import type {
49
52
  UI_I_BackupDatastoreTable,
@@ -69,7 +72,7 @@ const props = defineProps<{
69
72
  selectedVmName: string
70
73
  disks: UI_I_Pvm['disk_devices']
71
74
  disksLoading: boolean
72
- datastoreTable: UI_I_BackupDatastoreTable
75
+ datastoreTable: UI_I_BackupDatastoreTable | null
73
76
  datastoreTableLoading: boolean
74
77
  restoreDatastore: UI_I_DatastoreTableItem[]
75
78
  isRestoreDatastoreLoading: boolean
@@ -101,7 +101,7 @@ const props = defineProps<{
101
101
  selectedVmName: string
102
102
  disks: UI_I_Pvm['disk_devices']
103
103
  disksLoading: boolean
104
- datastoreTable: UI_I_BackupDatastoreTable
104
+ datastoreTable: UI_I_BackupDatastoreTable | null
105
105
  datastoreTableLoading: boolean
106
106
  }>()
107
107
 
@@ -1,59 +1,59 @@
1
- <template>
2
- <div class="datastores h-full">
3
- <common-pages-backups-modals-create-backup-datastores-table-view
4
- v-model:selected="model.backup_storage"
5
- :data-table="props.datastoreTable?.items"
6
- :total-items="props.datastoreTable?.total_items || 0"
7
- :total-pages="props.datastoreTable?.total_pages || 1"
8
- :loading="props.datastoreTableLoading"
9
- />
10
- </div>
11
- </template>
12
-
13
- <script lang="ts" setup>
14
- import type {
15
- UI_I_BackupDatastoreTable,
16
- UI_I_CreateBackupForm
17
- } from '~/components/common/pages/backups/modals/lib/models/interfaces'
18
-
19
- const props = defineProps<{
20
- datastoreTable: UI_I_BackupDatastoreTable
21
- datastoreTableLoading: boolean
22
- }>()
23
- const emits = defineEmits<{
24
- (event: 'change', value: string[]): void
25
- }>()
26
-
27
- const model = defineModel<UI_I_CreateBackupForm>({ required: true })
28
-
29
- const selectedKeys = ref<string[]>([])
30
-
31
- watch(
32
- () => props.datastoreTable,
33
- () => {
34
- selectedKeys.value = []
35
- },
36
- { deep: true, immediate: true }
37
- )
38
-
39
- watch(
40
- () => model.value.backup_storage,
41
- (newValue: string) => {
42
- const selectedNames: string[] = []
43
-
44
- props.datastoreTable?.items.forEach((item) => {
45
- if (newValue === item.id) selectedNames.push(item.name)
46
- })
47
-
48
- emits('change', selectedNames)
49
- },
50
- { deep: true, immediate: true }
51
- )
52
- </script>
53
-
54
- <style lang="scss" scoped>
55
- .backups-table-content {
56
- height: 100%;
57
- padding: 0 10px 10px 10px;
58
- }
59
- </style>
1
+ <template>
2
+ <div class="datastores h-full">
3
+ <common-pages-backups-modals-create-backup-datastores-table-view
4
+ v-model:selected="model.backup_storage"
5
+ :data-table="props.datastoreTable?.items || []"
6
+ :total-items="props.datastoreTable?.total_items || 0"
7
+ :total-pages="props.datastoreTable?.total_pages || 1"
8
+ :loading="props.datastoreTableLoading"
9
+ />
10
+ </div>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import type {
15
+ UI_I_BackupDatastoreTable,
16
+ UI_I_CreateBackupForm
17
+ } from '~/components/common/pages/backups/modals/lib/models/interfaces'
18
+
19
+ const props = defineProps<{
20
+ datastoreTable: UI_I_BackupDatastoreTable | null
21
+ datastoreTableLoading: boolean
22
+ }>()
23
+ const emits = defineEmits<{
24
+ (event: 'change', value: string[]): void
25
+ }>()
26
+
27
+ const model = defineModel<UI_I_CreateBackupForm>({ required: true })
28
+
29
+ const selectedKeys = ref<string[]>([])
30
+
31
+ watch(
32
+ () => props.datastoreTable,
33
+ () => {
34
+ selectedKeys.value = []
35
+ },
36
+ { deep: true, immediate: true }
37
+ )
38
+
39
+ watch(
40
+ () => model.value.backup_storage,
41
+ (newValue: string) => {
42
+ const selectedNames: string[] = []
43
+
44
+ props.datastoreTable?.items.forEach((item) => {
45
+ if (newValue === item.id) selectedNames.push(item.name)
46
+ })
47
+
48
+ emits('change', selectedNames)
49
+ },
50
+ { deep: true, immediate: true }
51
+ )
52
+ </script>
53
+
54
+ <style lang="scss" scoped>
55
+ .backups-table-content {
56
+ height: 100%;
57
+ padding: 0 10px 10px 10px;
58
+ }
59
+ </style>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.453",
4
+ "version": "1.5.454",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",