bfg-common 1.4.742 → 1.4.744

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 (128) hide show
  1. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  2. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  3. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  5. package/assets/scss/common/normalize.scss +361 -361
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1696 -1696
  10. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  12. package/components/common/browse/BrowseNew.vue +237 -237
  13. package/components/common/browse/BrowseOld.vue +217 -217
  14. package/components/common/browse/blocks/contents/Files.vue +37 -37
  15. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  16. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  17. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  18. package/components/common/context/lib/models/interfaces.ts +30 -30
  19. package/components/common/context/recursion/Recursion.vue +86 -86
  20. package/components/common/context/recursion/RecursionNew.vue +226 -211
  21. package/components/common/context/recursion/RecursionOld.vue +227 -213
  22. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  23. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  24. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +150 -150
  25. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -300
  26. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  27. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  28. package/components/common/pages/home/StatusContent.vue +49 -49
  29. package/components/common/pages/home/headline/Headline.vue +44 -44
  30. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  31. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  32. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  33. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  34. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  35. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  36. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  37. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  38. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  39. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  40. package/components/common/pages/home/widgets/vms/VmsNew.vue +101 -101
  41. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  42. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  43. package/components/common/recursionTree/RecursionTree.vue +223 -223
  44. package/components/common/select/button/ButtonDropdown.vue +108 -108
  45. package/components/common/selectLanguage/lib/config/config.ts +1 -0
  46. package/components/common/spiceConsole/Drawer.vue +370 -370
  47. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  48. package/components/common/split/horizontal/HorizontalNew.vue +384 -358
  49. package/components/common/split/horizontal/HorizontalOld.vue +345 -307
  50. package/components/common/split/vertical/Vertical.vue +160 -160
  51. package/components/common/vm/actions/add/Add.vue +621 -621
  52. package/components/common/vm/actions/clone/Clone.vue +639 -639
  53. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  54. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  55. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  56. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  115. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  116. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  117. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  118. package/composables/productNameLocal.ts +30 -30
  119. package/composables/useAppVersion.ts +21 -21
  120. package/package.json +1 -1
  121. package/plugins/date.ts +233 -233
  122. package/plugins/recursion.ts +311 -311
  123. package/public/spice-console/lib/images/bitmap.js +203 -203
  124. package/public/spice-console/network/spicechannel.js +383 -383
  125. package/public/spice-console-minify/run.min.js +4 -4
  126. package/store/main/mutations.ts +7 -7
  127. package/store/main/state.ts +7 -7
  128. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,96 +1,96 @@
1
- <template>
2
- <common-browse-blocks-contents-files-new-skeleton v-if="props.browseLoading" />
3
-
4
- <ul
5
- v-else-if="props.selectedFolderFiles.length"
6
- class="file-view__container"
7
- >
8
- <template v-for="file in props.selectedFolderFiles" :key="file.name">
9
- <li
10
- :data-id="file.testId"
11
- :class="[
12
- 'file-view',
13
- { active: file.name === props.selectedFile?.name },
14
- ]"
15
- @click="onSelectFile(file)"
16
- >
17
- <span class="file-view__icon" :class="file.iconClassName"></span>
18
- <span class="file-view__text">{{ file.name }}</span>
19
- </li>
20
- </template>
21
- </ul>
22
-
23
- <div v-else class="not-found-wrap">
24
- <ui-not-found :text="localization.common.noItemsFound" />
25
- </div>
26
- </template>
27
-
28
- <script setup lang="ts">
29
- import type { UI_I_Localization } from '~/lib/models/interfaces'
30
-
31
- const props = defineProps<{
32
- selectedFolderFiles: any[]
33
- selectedFile: any
34
- browseLoading: boolean
35
- }>()
36
-
37
- const emits = defineEmits<{
38
- (event: 'select-file', file: any): void
39
- }>()
40
-
41
- const localization = computed<UI_I_Localization>(() => useLocal())
42
-
43
- const onSelectFile = (file: any): void => {
44
- emits('select-file', file)
45
- }
46
- </script>
47
-
48
- <style scoped lang="scss">
49
- .file-view__container {
50
- list-style-position: inside;
51
- list-style-type: none;
52
- padding: 0;
53
- margin: 0;
54
-
55
- .file-view {
56
- display: flex;
57
- align-items: center;
58
- padding: 4px 8px;
59
- cursor: pointer;
60
- border-radius: 4px;
61
- height: 26px;
62
- margin-bottom: 2px;
63
- color: var(--select-file-text-color);
64
-
65
- &:hover {
66
- background-color: var(--select-file-hover-bg);
67
- }
68
- &.active {
69
- background-color: var(--select-file-selected-bg);
70
- color: var(--select-file-selected-text-color);
71
- }
72
- span {
73
- font-size: 12px;
74
- font-weight: 400;
75
- line-height: 14.52px;
76
-
77
- overflow: hidden;
78
- white-space: nowrap;
79
- text-overflow: ellipsis;
80
- }
81
- span:first-of-type {
82
- width: 16px;
83
- height: 16px;
84
- margin-right: 8px;
85
- }
86
- }
87
- }
88
- .not-found-wrap {
89
- display: flex;
90
- align-items: center;
91
- justify-content: center;
92
- flex-direction: column;
93
- height: 100%;
94
- width: 100%;
95
- }
96
- </style>
1
+ <template>
2
+ <common-browse-blocks-contents-files-new-skeleton v-if="props.browseLoading" />
3
+
4
+ <ul
5
+ v-else-if="props.selectedFolderFiles.length"
6
+ class="file-view__container"
7
+ >
8
+ <template v-for="file in props.selectedFolderFiles" :key="file.name">
9
+ <li
10
+ :data-id="file.testId"
11
+ :class="[
12
+ 'file-view',
13
+ { active: file.name === props.selectedFile?.name },
14
+ ]"
15
+ @click="onSelectFile(file)"
16
+ >
17
+ <span class="file-view__icon" :class="file.iconClassName"></span>
18
+ <span class="file-view__text">{{ file.name }}</span>
19
+ </li>
20
+ </template>
21
+ </ul>
22
+
23
+ <div v-else class="not-found-wrap">
24
+ <ui-not-found :text="localization.common.noItemsFound" />
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
30
+
31
+ const props = defineProps<{
32
+ selectedFolderFiles: any[]
33
+ selectedFile: any
34
+ browseLoading: boolean
35
+ }>()
36
+
37
+ const emits = defineEmits<{
38
+ (event: 'select-file', file: any): void
39
+ }>()
40
+
41
+ const localization = computed<UI_I_Localization>(() => useLocal())
42
+
43
+ const onSelectFile = (file: any): void => {
44
+ emits('select-file', file)
45
+ }
46
+ </script>
47
+
48
+ <style scoped lang="scss">
49
+ .file-view__container {
50
+ list-style-position: inside;
51
+ list-style-type: none;
52
+ padding: 0;
53
+ margin: 0;
54
+
55
+ .file-view {
56
+ display: flex;
57
+ align-items: center;
58
+ padding: 4px 8px;
59
+ cursor: pointer;
60
+ border-radius: 4px;
61
+ height: 26px;
62
+ margin-bottom: 2px;
63
+ color: var(--select-file-text-color);
64
+
65
+ &:hover {
66
+ background-color: var(--select-file-hover-bg);
67
+ }
68
+ &.active {
69
+ background-color: var(--select-file-selected-bg);
70
+ color: var(--select-file-selected-text-color);
71
+ }
72
+ span {
73
+ font-size: 12px;
74
+ font-weight: 400;
75
+ line-height: 14.52px;
76
+
77
+ overflow: hidden;
78
+ white-space: nowrap;
79
+ text-overflow: ellipsis;
80
+ }
81
+ span:first-of-type {
82
+ width: 16px;
83
+ height: 16px;
84
+ margin-right: 8px;
85
+ }
86
+ }
87
+ }
88
+ .not-found-wrap {
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ flex-direction: column;
93
+ height: 100%;
94
+ width: 100%;
95
+ }
96
+ </style>
@@ -1,18 +1,18 @@
1
- <template>
2
- <div class="skeleton-wrap">
3
- <ui-skeleton-item height="18px" />
4
- <ui-skeleton-item height="18px" />
5
- <ui-skeleton-item height="18px" />
6
- <ui-skeleton-item height="18px" />
7
- <ui-skeleton-item height="18px" />
8
- </div>
9
- </template>
10
-
11
- <script setup lang="ts"></script>
12
-
13
- <style scoped lang="scss">
14
- .skeleton-wrap {
15
- display: grid;
16
- grid-gap: 12px;
17
- }
18
- </style>
1
+ <template>
2
+ <div class="skeleton-wrap">
3
+ <ui-skeleton-item height="18px" />
4
+ <ui-skeleton-item height="18px" />
5
+ <ui-skeleton-item height="18px" />
6
+ <ui-skeleton-item height="18px" />
7
+ <ui-skeleton-item height="18px" />
8
+ </div>
9
+ </template>
10
+
11
+ <script setup lang="ts"></script>
12
+
13
+ <style scoped lang="scss">
14
+ .skeleton-wrap {
15
+ display: grid;
16
+ grid-gap: 12px;
17
+ }
18
+ </style>
@@ -1,30 +1,30 @@
1
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
2
-
3
- export interface UI_I_ContextMenuByEvent {
4
- event: any
5
- node: UI_I_TreeNode
6
- }
7
- export interface UI_I_ContextMenu<T = string> {
8
- x: number
9
- y: number
10
- id: string | number
11
- type: T
12
- titleText: string
13
- titleIconClassName: string
14
- items: UI_I_ContextMenuItem[]
15
- }
16
- export interface UI_I_ContextMenuItem<T = string> {
17
- name: string
18
- actionType: T | ''
19
- iconClassName: string
20
- items: UI_I_ContextMenuItem<T>[]
21
- shortcut?: string
22
- hasBorderTop?: boolean
23
- isHeader?: boolean
24
- disabled?: boolean
25
- isShowItems?: boolean
26
- testId?: string
27
- style?: {
28
- color: string
29
- }
30
- }
1
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
2
+
3
+ export interface UI_I_ContextMenuByEvent {
4
+ event: any
5
+ node: UI_I_TreeNode
6
+ }
7
+ export interface UI_I_ContextMenu<T = string> {
8
+ x: number
9
+ y: number
10
+ id: string | number
11
+ type: T
12
+ titleText: string
13
+ titleIconClassName: string
14
+ items: UI_I_ContextMenuItem[]
15
+ }
16
+ export interface UI_I_ContextMenuItem<T = string> {
17
+ name: string
18
+ actionType: T | ''
19
+ iconClassName: string
20
+ items: UI_I_ContextMenuItem<T>[]
21
+ shortcut?: string
22
+ hasBorderTop?: boolean
23
+ isHeader?: boolean
24
+ disabled?: boolean
25
+ isShowItems?: boolean
26
+ testId?: string
27
+ style?: {
28
+ color: string
29
+ }
30
+ }
@@ -1,86 +1,86 @@
1
- <template>
2
- <common-context-recursion-new
3
- v-if="isNewView"
4
- :items="props.items"
5
- :action-loading="props.actionLoading"
6
- :is-loading="isLoading"
7
- :test-id="props.testId"
8
- @select-item="selectItem"
9
- @toggle-items="toggleItems"
10
- />
11
- <common-context-recursion-old
12
- v-else
13
- :items="props.items"
14
- :action-loading="props.actionLoading"
15
- :is-loading="isLoading"
16
- :test-id="props.testId"
17
- @select-item="selectItem"
18
- @toggle-items="toggleItems"
19
- />
20
- </template>
21
-
22
- <script setup lang="ts">
23
- import type { UI_I_ContextMenuItem } from '~/components/common/context/lib/models/interfaces'
24
- import type { I_HTMLLiElement } from '~/components/common/context/recursion/lib/models/interfaces'
25
-
26
- const props = defineProps<{
27
- items: UI_I_ContextMenuItem[]
28
- actionLoading: string | null
29
- testId?: string
30
- }>()
31
- const emits = defineEmits<{
32
- (event: 'select-item', value: UI_I_ContextMenuItem): void
33
- }>()
34
-
35
- const { $store }: any = useNuxtApp()
36
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
37
-
38
- const isLoading = computed<boolean>(
39
- () => !!props.items.find((item) => item.actionType === props.actionLoading)
40
- )
41
-
42
- const selectItem = (item: UI_I_ContextMenuItem): void => {
43
- if (item.disabled) return
44
-
45
- emits('select-item', item)
46
- }
47
-
48
- const setElementPosition = (event: I_HTMLLiElement): void => {
49
- const top = event.target.getBoundingClientRect().top
50
- const childMenu = event.target.children[1].children[0]
51
- childMenu.style.top = `${top}px`
52
-
53
- const childMenuRect = (childMenu.getBoundingClientRect() as DOMRect) || null
54
-
55
- // Обрабатываем, если попап вишел за viewport (с права)
56
- if (childMenuRect.right > window.innerWidth) {
57
- event.target.classList.add('left')
58
- } else {
59
- event.target.classList.remove('left')
60
- }
61
-
62
- // Обрабатываем, если попап вишел за viewport (с низу)
63
- if (childMenuRect.bottom > window.innerHeight) {
64
- childMenu.style.top = 'auto'
65
- childMenu.style.bottom = '0px'
66
- } else {
67
- childMenu.style.bottom = 'unset'
68
- }
69
- }
70
-
71
- const toggleItems = (
72
- data: [UI_I_ContextMenuItem, boolean, I_HTMLLiElement]
73
- ): void => {
74
- const [item, show, e] = data
75
- if (!item.items.length || item.disabled) {
76
- return
77
- }
78
- item.isShowItems = show
79
-
80
- nextTick(() => {
81
- setElementPosition(e)
82
- })
83
- }
84
- </script>
85
-
86
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-context-recursion-new
3
+ v-if="isNewView"
4
+ :items="props.items"
5
+ :action-loading="props.actionLoading"
6
+ :is-loading="isLoading"
7
+ :test-id="props.testId"
8
+ @select-item="selectItem"
9
+ @toggle-items="toggleItems"
10
+ />
11
+ <common-context-recursion-old
12
+ v-else
13
+ :items="props.items"
14
+ :action-loading="props.actionLoading"
15
+ :is-loading="isLoading"
16
+ :test-id="props.testId"
17
+ @select-item="selectItem"
18
+ @toggle-items="toggleItems"
19
+ />
20
+ </template>
21
+
22
+ <script setup lang="ts">
23
+ import type { UI_I_ContextMenuItem } from '~/components/common/context/lib/models/interfaces'
24
+ import type { I_HTMLLiElement } from '~/components/common/context/recursion/lib/models/interfaces'
25
+
26
+ const props = defineProps<{
27
+ items: UI_I_ContextMenuItem[]
28
+ actionLoading: string | null
29
+ testId?: string
30
+ }>()
31
+ const emits = defineEmits<{
32
+ (event: 'select-item', value: UI_I_ContextMenuItem): void
33
+ }>()
34
+
35
+ const { $store }: any = useNuxtApp()
36
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
37
+
38
+ const isLoading = computed<boolean>(
39
+ () => !!props.items.find((item) => item.actionType === props.actionLoading)
40
+ )
41
+
42
+ const selectItem = (item: UI_I_ContextMenuItem): void => {
43
+ if (item.disabled) return
44
+
45
+ emits('select-item', item)
46
+ }
47
+
48
+ const setElementPosition = (event: I_HTMLLiElement): void => {
49
+ const top = event.target.getBoundingClientRect().top
50
+ const childMenu = event.target.children[1].children[0]
51
+ childMenu.style.top = `${top}px`
52
+
53
+ const childMenuRect = (childMenu.getBoundingClientRect() as DOMRect) || null
54
+
55
+ // Обрабатываем, если попап вишел за viewport (с права)
56
+ if (childMenuRect.right > window.innerWidth) {
57
+ event.target.classList.add('left')
58
+ } else {
59
+ event.target.classList.remove('left')
60
+ }
61
+
62
+ // Обрабатываем, если попап вишел за viewport (с низу)
63
+ if (childMenuRect.bottom > window.innerHeight) {
64
+ childMenu.style.top = 'auto'
65
+ childMenu.style.bottom = '0px'
66
+ } else {
67
+ childMenu.style.bottom = 'unset'
68
+ }
69
+ }
70
+
71
+ const toggleItems = (
72
+ data: [UI_I_ContextMenuItem, boolean, I_HTMLLiElement]
73
+ ): void => {
74
+ const [item, show, e] = data
75
+ if (!item.items.length || item.disabled) {
76
+ return
77
+ }
78
+ item.isShowItems = show
79
+
80
+ nextTick(() => {
81
+ setElementPosition(e)
82
+ })
83
+ }
84
+ </script>
85
+
86
+ <style scoped lang="scss"></style>