bfg-common 1.4.569 → 1.4.570

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 (137) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +407 -407
  2. package/assets/img/icons/icons-sprite-dark-2.svg +343 -343
  3. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-dark-4.svg +255 -255
  5. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  6. package/assets/img/icons/icons-sprite-dark-6.svg +94 -94
  7. package/assets/img/icons/icons-sprite-light-1.svg +407 -407
  8. package/assets/img/icons/icons-sprite-light-2.svg +343 -343
  9. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  10. package/assets/img/icons/icons-sprite-light-4.svg +255 -255
  11. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  12. package/assets/img/icons/icons-sprite-light-6.svg +94 -94
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  15. package/components/atoms/stack/StackBlock.vue +185 -185
  16. package/components/atoms/table/dataGrid/DataGrid.vue +1633 -1633
  17. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  18. package/components/common/browse/BrowseNew.vue +237 -237
  19. package/components/common/browse/BrowseOld.vue +217 -217
  20. package/components/common/browse/blocks/contents/Files.vue +35 -35
  21. package/components/common/browse/blocks/contents/FilesOld.vue +70 -70
  22. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +92 -92
  23. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  24. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  25. package/components/common/browse/lib/models/interfaces.ts +5 -5
  26. package/components/common/context/lib/models/interfaces.ts +30 -30
  27. package/components/common/context/recursion/Recursion.vue +86 -86
  28. package/components/common/context/recursion/RecursionNew.vue +199 -199
  29. package/components/common/context/recursion/RecursionOld.vue +213 -213
  30. package/components/common/diagramMain/Header.vue +211 -211
  31. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  32. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  33. package/components/common/diagramMain/lib/models/enums.ts +44 -44
  34. package/components/common/diagramMain/lib/models/types.ts +21 -21
  35. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  36. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +330 -330
  37. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  38. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +497 -497
  39. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +812 -812
  40. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  41. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  42. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  43. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  44. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +398 -398
  45. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  46. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  47. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +23 -23
  48. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  49. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  50. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  51. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +537 -537
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  57. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  58. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  59. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  60. package/components/common/diagramMain/port/Ports.vue +47 -47
  61. package/components/common/layout/theHeader/helpMenu/About.vue +85 -85
  62. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  63. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +152 -152
  64. package/components/common/portlets/customAttributes/Portlet.vue +655 -655
  65. package/components/common/portlets/tag/Portlet.vue +422 -422
  66. package/components/common/portlets/tag/TagAddNew.vue +624 -624
  67. package/components/common/spiceConsole/Drawer.vue +370 -370
  68. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  69. package/components/common/vm/actions/add/Add.vue +617 -617
  70. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +267 -267
  72. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +264 -264
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +118 -118
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +55 -55
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +147 -147
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +55 -55
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +74 -74
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +85 -85
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +91 -91
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +46 -46
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +27 -27
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +100 -100
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  122. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  123. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  124. package/components/common/vm/actions/common/select/storage/new/New.vue +159 -159
  125. package/components/common/vm/actions/editSettings/EditSettings.vue +214 -214
  126. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +182 -182
  127. package/components/common/vm/actions/editSettings/new/New.vue +176 -176
  128. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -87
  129. package/components/common/wizards/network/add/lib/config/steps.ts +464 -464
  130. package/composables/productNameLocal.ts +30 -30
  131. package/package.json +1 -1
  132. package/plugins/date.ts +233 -233
  133. package/plugins/recursion.ts +311 -311
  134. package/public/spice-console/lib/images/bitmap.js +203 -203
  135. package/public/spice-console/network/spicechannel.js +383 -383
  136. package/store/main/mutations.ts +7 -7
  137. package/store/main/state.ts +7 -7
@@ -1,422 +1,422 @@
1
- <template>
2
- <div>
3
- <ui-portlet
4
- class="tags"
5
- test-id="tags-portlet"
6
- :title="portletTitle"
7
- :dragged="props.dragged"
8
- :dragged-any="props.draggedAny"
9
- :is-open="props.isOpen"
10
- :portlet-id="props.portletId"
11
- @toggle="onTogglePortlet"
12
- >
13
- <template #portletBody>
14
- <ui-data-table
15
- test-id="tags-portlet-table"
16
- :data="data"
17
- :options="options"
18
- server-off
19
- :default-layout="false"
20
- size="sm"
21
- >
22
- <!-- :loading="loading"-->
23
- <template #icon="{ item }">
24
- <div class="actions-dropdown-button-container">
25
- <span
26
- :id="`actions-tags-${item.data.row}`"
27
- :class="[
28
- 'icon-container',
29
- {
30
- selected: isShow[`action-tags-${item.data.row}`],
31
- },
32
- ]"
33
- @click="onShowActions(item.data.row)"
34
- >
35
- <ui-icon :name="item.data.icon" width="16" height="16" />
36
- </span>
37
- <ui-popup-window
38
- v-model="isShow[`action-tags-${item.data.row}`]"
39
- :elem-id="`actions-tags-${item.data.row}`"
40
- width="fit-content"
41
- >
42
- <div class="edit-actions-container">
43
- <div
44
- class="action"
45
- data-id="view-tag-details-action"
46
- @click="onShowDetails(item.data.row)"
47
- >
48
- <ui-icon name="view-details" width="16" height="16" />
49
- <span>{{ localization.common.viewDetails }}</span>
50
- </div>
51
- <div
52
- class="action-remove"
53
- data-id="show-remove-tag-dialog-action"
54
- @click="onShowRemoveDialog(item.data.row)"
55
- >
56
- <ui-icon name="delete" width="16" height="16" />
57
- <span>{{ localization.common.remove }}</span>
58
- </div>
59
- </div>
60
- </ui-popup-window>
61
- </div>
62
- </template>
63
- </ui-data-table>
64
- </template>
65
- <template #portletFooter>
66
- <div class="footer">
67
- <ui-button
68
- test-id="show-assign-new-tag-modal"
69
- variant="text"
70
- is-without-height
71
- is-without-sizes
72
- @click="onShowAssignModal"
73
- >
74
- {{ localization.common.assignNew }}...
75
- </ui-button>
76
- </div>
77
- </template>
78
- </ui-portlet>
79
-
80
- <ui-popup
81
- v-if="isShowRemoveDialog"
82
- test-id="remove-tag-dialog"
83
- icon-name="info-status"
84
- :texts="removeTagDialogTexts"
85
- :message="removeTagMessage"
86
- :title="localization.common.removeTag"
87
- @hide="onHideRemoveDialog"
88
- @submit="onRemoveTag"
89
- />
90
-
91
- <common-portlets-tag-add-new
92
- v-if="isShowModal"
93
- :is-show-modal="isShowModal"
94
- :assign-data="assignData"
95
- :selected-item-name="props.selectedItemName"
96
- @add-new-tag="onAddNewTag"
97
- @create-category="onCreateCategory"
98
- @cancel="onHideAssignModal"
99
- @assign="onAssignSelectedTags"
100
- />
101
- </div>
102
- </template>
103
-
104
- <script setup lang="ts">
105
- import type {
106
- UI_I_ArbitraryObject,
107
- UI_I_Localization,
108
- } from '~/lib/models/interfaces'
109
- import type {
110
- UI_I_DataTable,
111
- UI_I_DataTableOptions,
112
- UI_I_DataTableHeader,
113
- UI_I_DataTableBody,
114
- } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
115
- import type { UI_I_ModalTexts } from '~/node_modules/bfg-uikit/components/ui/modal/models/interfaces'
116
- import type { UI_I_CreateCategoryData } from '~/components/common/portlets/tag/lib/models/interfaces'
117
- import {
118
- tagTableHeaderOptions,
119
- tagTableHeaderDataFunc,
120
- tagsAssignBodyItemsTemporary,
121
- } from '~/components/common/portlets/tag/lib/config/config'
122
-
123
- const props = defineProps<{
124
- portletId: string
125
- dragged?: boolean
126
- isOpen?: boolean
127
- draggedAny?: boolean
128
- selectedItemName: string
129
- bodyItems: UI_I_DataTableBody[]
130
- }>()
131
-
132
- const localization = computed<UI_I_Localization>(() => useLocal())
133
-
134
- const isShow = ref<UI_I_ArbitraryObject<boolean>>({})
135
- const isShowModal = ref<boolean>(false)
136
- const onShowAssignModal = (): void => {
137
- isShowModal.value = true
138
- }
139
-
140
- const onHideAssignModal = (): void => {
141
- isShowModal.value = false
142
- }
143
- const onShowActions = (id: number): void => {
144
- isShow.value[`action-tags-${id}`] = !isShow.value[`action-tags-${id}`]
145
- }
146
- const onShowDetails = (_id: number): void => {
147
- navigateTo('/tags-attributes/tags')
148
- }
149
-
150
- const isShowRemoveDialog = ref<boolean>(false)
151
-
152
- const onHideRemoveDialog = (): void => {
153
- isShowRemoveDialog.value = false
154
- }
155
- const tagIdForRemove = ref<number>(0)
156
- const tagNameForRemove = computed<string>(
157
- () =>
158
- (tagsBodyItems.value.find(
159
- (row: UI_I_DataTableBody) => row.row === tagIdForRemove.value
160
- )?.data[0]?.text || '') as string
161
- )
162
-
163
- const removeTagMessage = computed<string>(() =>
164
- localization.value.common.removeTagDialog
165
- .replace?.('{tagName}', tagNameForRemove.value)
166
- .replace('{selectedItemName}', props.selectedItemName)
167
- )
168
- const onShowRemoveDialog = (id: number): void => {
169
- tagIdForRemove.value = id
170
- isShowRemoveDialog.value = true
171
- }
172
-
173
- const removeTagDialogTexts = computed<UI_I_ModalTexts>(() => ({
174
- button1: localization.value.common.cancel,
175
- button2: localization.value.common.remove,
176
- }))
177
-
178
- const onRemoveTag = (): void => {
179
- onHideRemoveDialog()
180
-
181
- const removeItem = tagsBodyItems.value.find(
182
- (row) => row.row === tagIdForRemove.value
183
- )
184
- if (!removeItem) return
185
-
186
- emits('remove-tag', removeItem)
187
- tagsBodyItems.value = tagsBodyItems.value.filter(
188
- (row) => row.row !== tagIdForRemove.value
189
- )
190
- }
191
-
192
- const options: UI_I_DataTableOptions = {
193
- ...tagTableHeaderOptions,
194
- isSelectable: false,
195
- }
196
-
197
- const tagsHeadItems = computed<UI_I_DataTableHeader[]>(() =>
198
- tagTableHeaderDataFunc(localization.value)
199
- )
200
- // const tagsBodyItems = computed<UI_I_TableBodyItem[][]>(() => {
201
- // return $store.getters['inventory/getTags'] || []
202
- // })
203
-
204
- // const { $store } = useNuxtApp()
205
-
206
- const tagsBodyItems = ref<UI_I_DataTableBody[]>([])
207
-
208
- watch(
209
- () => props.bodyItems,
210
- (newValue: UI_I_DataTableBody[]) => {
211
- tagsBodyItems.value = newValue
212
- },
213
- { deep: true, immediate: true }
214
- )
215
-
216
- const tagsAssignBodyItems = ref<UI_I_DataTableBody[]>(
217
- useDeepCopy(tagsAssignBodyItemsTemporary)
218
- )
219
-
220
- const data = computed<UI_I_DataTable>(() => ({
221
- id: '0',
222
- selectedRows: [],
223
- isAllSelected: false,
224
- title: '',
225
- subTitle: '',
226
- header: tagsHeadItems.value,
227
- body: tagsBodyItems.value,
228
- }))
229
-
230
- const assignData = computed<UI_I_DataTable>(() => ({
231
- id: '1',
232
- selectedRows: [],
233
- isAllSelected: false,
234
- title: '',
235
- subTitle: '',
236
- header: tagsHeadItems.value,
237
- body: tagsAssignBodyItems.value,
238
- }))
239
-
240
- // const showTagModal = (): void => {
241
- // isShowTagModal.value = true
242
- // }
243
-
244
- // const routeParams = useRoute().params
245
- // const routeId: string = routeParams?.id.toString()
246
- // const routeType: string = routeParams?.type.toString()
247
- // const getTags = async (): Promise<void> => {
248
- // const payload: I_GetTagsPayload = {
249
- // id: routeId,
250
- // type: `${routeType}s`,
251
- // }
252
- //
253
- // return await $store.dispatch('inventory/A_GET_TAGS', payload)
254
- // }
255
- // getTags()
256
-
257
- const onAddNewTag = (newTag: UI_I_DataTableBody): void => {
258
- tagsAssignBodyItems.value.push(newTag)
259
- emits('create-new-tag', newTag)
260
- }
261
-
262
- const onAssignSelectedTags = async (
263
- data: UI_I_DataTableBody[]
264
- ): Promise<void> => {
265
- if (data.length > 0) {
266
- const sortedIds = tagsBodyItems.value
267
- .map((row: UI_I_DataTableBody) => Number(row.row))
268
- .sort()
269
- let lastId = sortedIds[sortedIds.length - 1]
270
- lastId = lastId === undefined ? -1 : lastId
271
-
272
- const selectedNewTags = data.map((row, index) => {
273
- return {
274
- ...row,
275
- row: lastId + index + 1,
276
- isSelected: false,
277
- data: [
278
- row.data[0],
279
- row.data[1],
280
- row.data[2],
281
- {
282
- ...row.data[3],
283
- key: 'icon',
284
- data: {
285
- icon: 'vertical-dotes',
286
- row: lastId + index + 1,
287
- },
288
- },
289
- ],
290
- }
291
- })
292
-
293
- const addedTagsName = selectedNewTags.map((row) => row.data[0].text)
294
-
295
- tagsAssignBodyItems.value = tagsAssignBodyItems.value.filter(
296
- (row: UI_I_DataTableBody) => !addedTagsName.includes(row.data[0].text)
297
- )
298
-
299
- tagsBodyItems.value = [...tagsBodyItems.value, ...selectedNewTags]
300
- emits('assign-new-tags', selectedNewTags)
301
- }
302
- onHideAssignModal()
303
- // const tags = data.map((row) => {
304
- // return {
305
- // name: row[0].text,
306
- // description: row[1].text,
307
- // category: 'none',
308
- // }
309
- // })
310
- // const payload: I_UpdateTagsPayload = {
311
- // tags,
312
- // id: routeId,
313
- // type: `${routeType}s`,
314
- // }
315
- // hideTagModal()
316
- // await $store.dispatch('inventory/A_UPDATE_TAGS', payload)
317
- //
318
- // globalRefresh()
319
- }
320
-
321
- const portletTitle = computed<string>(
322
- () =>
323
- localization.value.common.assignedTags +
324
- (tagsBodyItems.value.length ? ` (${tagsBodyItems.value.length})` : '')
325
- )
326
- // const globalRefresh = (): void => {
327
- // $store.dispatch('main/A_GLOBAL_REFRESH', null)
328
- // }
329
-
330
- const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
331
- emits('create-category', data)
332
- }
333
-
334
- const emits = defineEmits<{
335
- (event: 'toggle-portlet', id: string): void
336
- (event: 'create-category', value: UI_I_CreateCategoryData): void
337
- (event: 'create-new-tag', value: UI_I_DataTableBody): void
338
- (event: 'assign-new-tags', value: UI_I_DataTableBody[]): void
339
- (event: 'remove-tag', value: UI_I_DataTableBody): void
340
- }>()
341
-
342
- const onTogglePortlet = (id: string): void => {
343
- emits('toggle-portlet', id)
344
- }
345
- </script>
346
-
347
- <style scoped lang="scss">
348
- .icon-container {
349
- width: 16px;
350
- height: 16px;
351
- display: block;
352
- cursor: pointer;
353
- color: var(--table-actions-icon);
354
-
355
- &:hover,
356
- &.selected {
357
- color: var(--table-actions-icon-hover);
358
- }
359
- }
360
-
361
- .action-remove {
362
- display: flex;
363
- align-items: center;
364
- column-gap: 8px;
365
-
366
- height: 32px;
367
- border-radius: 4px;
368
- padding: 8px;
369
- color: var(--table-actions-remove);
370
- cursor: pointer;
371
-
372
- font-size: 13px;
373
- font-weight: 500;
374
- line-height: 15.73px;
375
-
376
- &:hover {
377
- background: var(--table-actions-bg-hover);
378
- }
379
- }
380
-
381
- .action {
382
- display: flex;
383
- align-items: center;
384
- column-gap: 8px;
385
-
386
- height: 32px;
387
- border-radius: 4px;
388
- padding: 8px;
389
- color: var(--table-actions-view);
390
- margin-bottom: 8px;
391
- cursor: pointer;
392
-
393
- font-size: 13px;
394
- font-weight: 500;
395
- line-height: 15.73px;
396
-
397
- &:hover {
398
- background: var(--table-actions-bg-hover);
399
- }
400
- }
401
-
402
- .footer {
403
- padding: 0 16px 8px;
404
-
405
- :deep(button.ui-btn) {
406
- line-height: 16px;
407
- margin-bottom: 11px;
408
- margin-left: 6px;
409
- width: fit-content;
410
- }
411
- }
412
-
413
- .actions-dropdown-button-container {
414
- display: flex;
415
- justify-content: flex-end;
416
- width: 100%;
417
- }
418
-
419
- .edit-actions-container {
420
- padding: 8px;
421
- }
422
- </style>
1
+ <template>
2
+ <div>
3
+ <ui-portlet
4
+ class="tags"
5
+ test-id="tags-portlet"
6
+ :title="portletTitle"
7
+ :dragged="props.dragged"
8
+ :dragged-any="props.draggedAny"
9
+ :is-open="props.isOpen"
10
+ :portlet-id="props.portletId"
11
+ @toggle="onTogglePortlet"
12
+ >
13
+ <template #portletBody>
14
+ <ui-data-table
15
+ test-id="tags-portlet-table"
16
+ :data="data"
17
+ :options="options"
18
+ server-off
19
+ :default-layout="false"
20
+ size="sm"
21
+ >
22
+ <!-- :loading="loading"-->
23
+ <template #icon="{ item }">
24
+ <div class="actions-dropdown-button-container">
25
+ <span
26
+ :id="`actions-tags-${item.data.row}`"
27
+ :class="[
28
+ 'icon-container',
29
+ {
30
+ selected: isShow[`action-tags-${item.data.row}`],
31
+ },
32
+ ]"
33
+ @click="onShowActions(item.data.row)"
34
+ >
35
+ <ui-icon :name="item.data.icon" width="16" height="16" />
36
+ </span>
37
+ <ui-popup-window
38
+ v-model="isShow[`action-tags-${item.data.row}`]"
39
+ :elem-id="`actions-tags-${item.data.row}`"
40
+ width="fit-content"
41
+ >
42
+ <div class="edit-actions-container">
43
+ <div
44
+ class="action"
45
+ data-id="view-tag-details-action"
46
+ @click="onShowDetails(item.data.row)"
47
+ >
48
+ <ui-icon name="view-details" width="16" height="16" />
49
+ <span>{{ localization.common.viewDetails }}</span>
50
+ </div>
51
+ <div
52
+ class="action-remove"
53
+ data-id="show-remove-tag-dialog-action"
54
+ @click="onShowRemoveDialog(item.data.row)"
55
+ >
56
+ <ui-icon name="delete" width="16" height="16" />
57
+ <span>{{ localization.common.remove }}</span>
58
+ </div>
59
+ </div>
60
+ </ui-popup-window>
61
+ </div>
62
+ </template>
63
+ </ui-data-table>
64
+ </template>
65
+ <template #portletFooter>
66
+ <div class="footer">
67
+ <ui-button
68
+ test-id="show-assign-new-tag-modal"
69
+ variant="text"
70
+ is-without-height
71
+ is-without-sizes
72
+ @click="onShowAssignModal"
73
+ >
74
+ {{ localization.common.assignNew }}...
75
+ </ui-button>
76
+ </div>
77
+ </template>
78
+ </ui-portlet>
79
+
80
+ <ui-popup
81
+ v-if="isShowRemoveDialog"
82
+ test-id="remove-tag-dialog"
83
+ icon-name="info-status"
84
+ :texts="removeTagDialogTexts"
85
+ :message="removeTagMessage"
86
+ :title="localization.common.removeTag"
87
+ @hide="onHideRemoveDialog"
88
+ @submit="onRemoveTag"
89
+ />
90
+
91
+ <common-portlets-tag-add-new
92
+ v-if="isShowModal"
93
+ :is-show-modal="isShowModal"
94
+ :assign-data="assignData"
95
+ :selected-item-name="props.selectedItemName"
96
+ @add-new-tag="onAddNewTag"
97
+ @create-category="onCreateCategory"
98
+ @cancel="onHideAssignModal"
99
+ @assign="onAssignSelectedTags"
100
+ />
101
+ </div>
102
+ </template>
103
+
104
+ <script setup lang="ts">
105
+ import type {
106
+ UI_I_ArbitraryObject,
107
+ UI_I_Localization,
108
+ } from '~/lib/models/interfaces'
109
+ import type {
110
+ UI_I_DataTable,
111
+ UI_I_DataTableOptions,
112
+ UI_I_DataTableHeader,
113
+ UI_I_DataTableBody,
114
+ } from '~/node_modules/bfg-uikit/components/ui/dataTable/models/interfaces'
115
+ import type { UI_I_ModalTexts } from '~/node_modules/bfg-uikit/components/ui/modal/models/interfaces'
116
+ import type { UI_I_CreateCategoryData } from '~/components/common/portlets/tag/lib/models/interfaces'
117
+ import {
118
+ tagTableHeaderOptions,
119
+ tagTableHeaderDataFunc,
120
+ tagsAssignBodyItemsTemporary,
121
+ } from '~/components/common/portlets/tag/lib/config/config'
122
+
123
+ const props = defineProps<{
124
+ portletId: string
125
+ dragged?: boolean
126
+ isOpen?: boolean
127
+ draggedAny?: boolean
128
+ selectedItemName: string
129
+ bodyItems: UI_I_DataTableBody[]
130
+ }>()
131
+
132
+ const localization = computed<UI_I_Localization>(() => useLocal())
133
+
134
+ const isShow = ref<UI_I_ArbitraryObject<boolean>>({})
135
+ const isShowModal = ref<boolean>(false)
136
+ const onShowAssignModal = (): void => {
137
+ isShowModal.value = true
138
+ }
139
+
140
+ const onHideAssignModal = (): void => {
141
+ isShowModal.value = false
142
+ }
143
+ const onShowActions = (id: number): void => {
144
+ isShow.value[`action-tags-${id}`] = !isShow.value[`action-tags-${id}`]
145
+ }
146
+ const onShowDetails = (_id: number): void => {
147
+ navigateTo('/tags-attributes/tags')
148
+ }
149
+
150
+ const isShowRemoveDialog = ref<boolean>(false)
151
+
152
+ const onHideRemoveDialog = (): void => {
153
+ isShowRemoveDialog.value = false
154
+ }
155
+ const tagIdForRemove = ref<number>(0)
156
+ const tagNameForRemove = computed<string>(
157
+ () =>
158
+ (tagsBodyItems.value.find(
159
+ (row: UI_I_DataTableBody) => row.row === tagIdForRemove.value
160
+ )?.data[0]?.text || '') as string
161
+ )
162
+
163
+ const removeTagMessage = computed<string>(() =>
164
+ localization.value.common.removeTagDialog
165
+ .replace?.('{tagName}', tagNameForRemove.value)
166
+ .replace('{selectedItemName}', props.selectedItemName)
167
+ )
168
+ const onShowRemoveDialog = (id: number): void => {
169
+ tagIdForRemove.value = id
170
+ isShowRemoveDialog.value = true
171
+ }
172
+
173
+ const removeTagDialogTexts = computed<UI_I_ModalTexts>(() => ({
174
+ button1: localization.value.common.cancel,
175
+ button2: localization.value.common.remove,
176
+ }))
177
+
178
+ const onRemoveTag = (): void => {
179
+ onHideRemoveDialog()
180
+
181
+ const removeItem = tagsBodyItems.value.find(
182
+ (row) => row.row === tagIdForRemove.value
183
+ )
184
+ if (!removeItem) return
185
+
186
+ emits('remove-tag', removeItem)
187
+ tagsBodyItems.value = tagsBodyItems.value.filter(
188
+ (row) => row.row !== tagIdForRemove.value
189
+ )
190
+ }
191
+
192
+ const options: UI_I_DataTableOptions = {
193
+ ...tagTableHeaderOptions,
194
+ isSelectable: false,
195
+ }
196
+
197
+ const tagsHeadItems = computed<UI_I_DataTableHeader[]>(() =>
198
+ tagTableHeaderDataFunc(localization.value)
199
+ )
200
+ // const tagsBodyItems = computed<UI_I_TableBodyItem[][]>(() => {
201
+ // return $store.getters['inventory/getTags'] || []
202
+ // })
203
+
204
+ // const { $store } = useNuxtApp()
205
+
206
+ const tagsBodyItems = ref<UI_I_DataTableBody[]>([])
207
+
208
+ watch(
209
+ () => props.bodyItems,
210
+ (newValue: UI_I_DataTableBody[]) => {
211
+ tagsBodyItems.value = newValue
212
+ },
213
+ { deep: true, immediate: true }
214
+ )
215
+
216
+ const tagsAssignBodyItems = ref<UI_I_DataTableBody[]>(
217
+ useDeepCopy(tagsAssignBodyItemsTemporary)
218
+ )
219
+
220
+ const data = computed<UI_I_DataTable>(() => ({
221
+ id: '0',
222
+ selectedRows: [],
223
+ isAllSelected: false,
224
+ title: '',
225
+ subTitle: '',
226
+ header: tagsHeadItems.value,
227
+ body: tagsBodyItems.value,
228
+ }))
229
+
230
+ const assignData = computed<UI_I_DataTable>(() => ({
231
+ id: '1',
232
+ selectedRows: [],
233
+ isAllSelected: false,
234
+ title: '',
235
+ subTitle: '',
236
+ header: tagsHeadItems.value,
237
+ body: tagsAssignBodyItems.value,
238
+ }))
239
+
240
+ // const showTagModal = (): void => {
241
+ // isShowTagModal.value = true
242
+ // }
243
+
244
+ // const routeParams = useRoute().params
245
+ // const routeId: string = routeParams?.id.toString()
246
+ // const routeType: string = routeParams?.type.toString()
247
+ // const getTags = async (): Promise<void> => {
248
+ // const payload: I_GetTagsPayload = {
249
+ // id: routeId,
250
+ // type: `${routeType}s`,
251
+ // }
252
+ //
253
+ // return await $store.dispatch('inventory/A_GET_TAGS', payload)
254
+ // }
255
+ // getTags()
256
+
257
+ const onAddNewTag = (newTag: UI_I_DataTableBody): void => {
258
+ tagsAssignBodyItems.value.push(newTag)
259
+ emits('create-new-tag', newTag)
260
+ }
261
+
262
+ const onAssignSelectedTags = async (
263
+ data: UI_I_DataTableBody[]
264
+ ): Promise<void> => {
265
+ if (data.length > 0) {
266
+ const sortedIds = tagsBodyItems.value
267
+ .map((row: UI_I_DataTableBody) => Number(row.row))
268
+ .sort()
269
+ let lastId = sortedIds[sortedIds.length - 1]
270
+ lastId = lastId === undefined ? -1 : lastId
271
+
272
+ const selectedNewTags = data.map((row, index) => {
273
+ return {
274
+ ...row,
275
+ row: lastId + index + 1,
276
+ isSelected: false,
277
+ data: [
278
+ row.data[0],
279
+ row.data[1],
280
+ row.data[2],
281
+ {
282
+ ...row.data[3],
283
+ key: 'icon',
284
+ data: {
285
+ icon: 'vertical-dotes',
286
+ row: lastId + index + 1,
287
+ },
288
+ },
289
+ ],
290
+ }
291
+ })
292
+
293
+ const addedTagsName = selectedNewTags.map((row) => row.data[0].text)
294
+
295
+ tagsAssignBodyItems.value = tagsAssignBodyItems.value.filter(
296
+ (row: UI_I_DataTableBody) => !addedTagsName.includes(row.data[0].text)
297
+ )
298
+
299
+ tagsBodyItems.value = [...tagsBodyItems.value, ...selectedNewTags]
300
+ emits('assign-new-tags', selectedNewTags)
301
+ }
302
+ onHideAssignModal()
303
+ // const tags = data.map((row) => {
304
+ // return {
305
+ // name: row[0].text,
306
+ // description: row[1].text,
307
+ // category: 'none',
308
+ // }
309
+ // })
310
+ // const payload: I_UpdateTagsPayload = {
311
+ // tags,
312
+ // id: routeId,
313
+ // type: `${routeType}s`,
314
+ // }
315
+ // hideTagModal()
316
+ // await $store.dispatch('inventory/A_UPDATE_TAGS', payload)
317
+ //
318
+ // globalRefresh()
319
+ }
320
+
321
+ const portletTitle = computed<string>(
322
+ () =>
323
+ localization.value.common.assignedTags +
324
+ (tagsBodyItems.value.length ? ` (${tagsBodyItems.value.length})` : '')
325
+ )
326
+ // const globalRefresh = (): void => {
327
+ // $store.dispatch('main/A_GLOBAL_REFRESH', null)
328
+ // }
329
+
330
+ const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
331
+ emits('create-category', data)
332
+ }
333
+
334
+ const emits = defineEmits<{
335
+ (event: 'toggle-portlet', id: string): void
336
+ (event: 'create-category', value: UI_I_CreateCategoryData): void
337
+ (event: 'create-new-tag', value: UI_I_DataTableBody): void
338
+ (event: 'assign-new-tags', value: UI_I_DataTableBody[]): void
339
+ (event: 'remove-tag', value: UI_I_DataTableBody): void
340
+ }>()
341
+
342
+ const onTogglePortlet = (id: string): void => {
343
+ emits('toggle-portlet', id)
344
+ }
345
+ </script>
346
+
347
+ <style scoped lang="scss">
348
+ .icon-container {
349
+ width: 16px;
350
+ height: 16px;
351
+ display: block;
352
+ cursor: pointer;
353
+ color: var(--table-actions-icon);
354
+
355
+ &:hover,
356
+ &.selected {
357
+ color: var(--table-actions-icon-hover);
358
+ }
359
+ }
360
+
361
+ .action-remove {
362
+ display: flex;
363
+ align-items: center;
364
+ column-gap: 8px;
365
+
366
+ height: 32px;
367
+ border-radius: 4px;
368
+ padding: 8px;
369
+ color: var(--table-actions-remove);
370
+ cursor: pointer;
371
+
372
+ font-size: 13px;
373
+ font-weight: 500;
374
+ line-height: 15.73px;
375
+
376
+ &:hover {
377
+ background: var(--table-actions-bg-hover);
378
+ }
379
+ }
380
+
381
+ .action {
382
+ display: flex;
383
+ align-items: center;
384
+ column-gap: 8px;
385
+
386
+ height: 32px;
387
+ border-radius: 4px;
388
+ padding: 8px;
389
+ color: var(--table-actions-view);
390
+ margin-bottom: 8px;
391
+ cursor: pointer;
392
+
393
+ font-size: 13px;
394
+ font-weight: 500;
395
+ line-height: 15.73px;
396
+
397
+ &:hover {
398
+ background: var(--table-actions-bg-hover);
399
+ }
400
+ }
401
+
402
+ .footer {
403
+ padding: 0 16px 8px;
404
+
405
+ :deep(button.ui-btn) {
406
+ line-height: 16px;
407
+ margin-bottom: 11px;
408
+ margin-left: 6px;
409
+ width: fit-content;
410
+ }
411
+ }
412
+
413
+ .actions-dropdown-button-container {
414
+ display: flex;
415
+ justify-content: flex-end;
416
+ width: 100%;
417
+ }
418
+
419
+ .edit-actions-container {
420
+ padding: 8px;
421
+ }
422
+ </style>