bfg-common 1.5.59 → 1.5.60

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 (181) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/localization/local_be.json +2 -5
  7. package/assets/localization/local_en.json +2 -5
  8. package/assets/localization/local_hy.json +2 -5
  9. package/assets/localization/local_kk.json +2 -5
  10. package/assets/localization/local_ru.json +2 -5
  11. package/assets/localization/local_zh.json +2 -5
  12. package/assets/scss/common/normalize.scss +339 -339
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/collapse/CollapseNav.vue +165 -165
  15. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  16. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  17. package/components/atoms/perPage/PerPage.vue +58 -58
  18. package/components/atoms/stack/StackBlock.vue +185 -185
  19. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  20. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  21. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  22. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  23. package/components/atoms/tooltip/Signpost.vue +227 -227
  24. package/components/common/accordion/Recursion.vue +222 -222
  25. package/components/common/browse/BrowseNew.vue +237 -237
  26. package/components/common/browse/BrowseOld.vue +217 -217
  27. package/components/common/browse/blocks/contents/Files.vue +37 -37
  28. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  29. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  30. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  31. package/components/common/context/Context.vue +111 -111
  32. package/components/common/context/lib/models/interfaces.ts +31 -31
  33. package/components/common/context/recursion/Recursion.vue +87 -87
  34. package/components/common/context/recursion/RecursionNew.vue +238 -238
  35. package/components/common/context/recursion/RecursionOld.vue +228 -228
  36. package/components/common/details/DetailsItem.vue +109 -109
  37. package/components/common/diagramMain/DiagramMain.vue +897 -897
  38. package/components/common/diagramMain/Header.vue +214 -214
  39. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  40. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  42. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  43. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  44. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  45. package/components/common/pages/home/headline/Headline.vue +45 -45
  46. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  47. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  48. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  49. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  50. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  51. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  52. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  53. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  54. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  55. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  56. package/components/common/pages/packages/Packages.vue +208 -208
  57. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  58. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  59. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  60. package/components/common/portlets/tag/Portlet.vue +433 -433
  61. package/components/common/recursionTree/RecursionTree.vue +223 -223
  62. package/components/common/select/button/ButtonDropdown.vue +108 -108
  63. package/components/common/spiceConsole/Drawer.vue +370 -370
  64. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  65. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  66. package/components/common/split/vertical/Vertical.vue +160 -160
  67. package/components/common/tools/Actions.vue +202 -202
  68. package/components/common/vm/actions/add/Add.vue +774 -727
  69. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  70. package/components/common/vm/actions/clone/Clone.vue +798 -798
  71. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  72. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  73. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  74. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  75. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  76. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  146. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  147. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +162 -162
  148. package/components/common/vm/actions/common/select/createType/CreateType.vue +74 -38
  149. package/components/common/vm/actions/common/select/createType/lib/config/items.ts +4 -24
  150. package/components/common/vm/actions/common/select/name/Name.vue +236 -167
  151. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  152. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  153. package/components/common/vm/actions/common/select/template/Template.vue +65 -65
  154. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  155. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  156. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  157. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  158. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  159. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  160. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  161. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  162. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  163. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  164. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  165. package/composables/productNameLocal.ts +30 -30
  166. package/composables/useAppVersion.ts +21 -21
  167. package/package.json +1 -1
  168. package/plugins/date.ts +233 -233
  169. package/plugins/directives.ts +24 -24
  170. package/public/spice-console/lib/images/bitmap.js +203 -203
  171. package/public/spice-console/network/spicechannel.js +383 -383
  172. package/store/main/mutations.ts +7 -7
  173. package/store/main/state.ts +7 -7
  174. package/store/tasks/mappers/recentTasks.ts +64 -64
  175. package/components/common/vm/actions/add/New.vue +0 -375
  176. package/components/common/vm/actions/add/Old.vue +0 -318
  177. package/components/common/vm/actions/common/select/createType/New.vue +0 -84
  178. package/components/common/vm/actions/common/select/createType/Old.vue +0 -70
  179. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +0 -5
  180. package/components/common/vm/actions/common/select/name/New.vue +0 -143
  181. package/components/common/vm/actions/common/select/name/Old.vue +0 -119
@@ -1,222 +1,222 @@
1
- <template>
2
- <div class="column-switch-wrap flex-align-center relative" @click.stop>
3
- <button
4
- :id="columnSwitchId"
5
- :data-id="`${props.testId}-toggle-button`"
6
- class="column-switch-btn"
7
- @click.stop="toggle"
8
- >
9
- <atoms-the-icon
10
- name="column-switch"
11
- width="16px"
12
- height="16px"
13
- class="toggle-icon"
14
- />
15
- </button>
16
-
17
- <div v-show="open" :style="dropdownStyles" class="dropdown-menu">
18
- <div class="column-switch">
19
- <div class="switch-header">
20
- {{ localization.common.showColumns }}
21
- </div>
22
- <ul class="switch-content list-unstyled">
23
- <li
24
- v-for="(item, key) in columnKeysPresent"
25
- :key="`${item.key}_${key}`"
26
- >
27
- <div class="clr-checkbox-wrapper">
28
- <input
29
- :id="`${props.testId}-${item.id}`"
30
- v-model="item.show"
31
- :data-id="`${props.testId}-${item.testId}`"
32
- :disabled="isLast && item.show"
33
- type="checkbox"
34
- @change="change($event, key)"
35
- />
36
- <label
37
- :for="`${props.testId}-${item.id}`"
38
- class="clr-control-label"
39
- >{{ item.text }}</label
40
- >
41
- </div>
42
- </li>
43
- </ul>
44
- <div class="switch-footer">
45
- <button
46
- :id="`${props.testId}-select-all-button`"
47
- :data-id="`${props.testId}-select-all-button`"
48
- class="btn btn-sm btn-link switch-button export-link"
49
- @click="selectAll"
50
- >
51
- {{ localization.common.selectAll }}
52
- </button>
53
- </div>
54
- </div>
55
- </div>
56
- </div>
57
- </template>
58
-
59
- <script setup lang="ts">
60
- import type {
61
- UI_I_HTMLSelectElement,
62
- UI_I_Localization,
63
- } from '~/lib/models/interfaces'
64
- import type { UI_I_ColumnKey } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
65
-
66
- const props = withDefaults(
67
- defineProps<{
68
- columnKeys: UI_I_ColumnKey[]
69
- testId?: string
70
- }>(),
71
- { testId: 'ui-data-grid-column-switch' }
72
- )
73
- const emits = defineEmits<{
74
- (event: 'update:column-keys', value: UI_I_ColumnKey[]): void
75
- }>()
76
-
77
- const columnKeysPresent = computed<UI_I_ColumnKey[]>(() => {
78
- return props.columnKeys.map((item): UI_I_ColumnKey => {
79
- const testId = item.text
80
- .toLowerCase()
81
- .replace(/\s/g, '_')
82
- .replace(/[^a-zA-Z_]/g, '')
83
- .replace(/__+/g, '_')
84
- .replace(/_$/, '')
85
- return { ...item, id: useUniqueId(), testId: `show-column-${testId}` }
86
- })
87
- })
88
-
89
- const localization = computed<UI_I_Localization>(() => useLocal())
90
-
91
- const columnSwitchId = ref<string>('')
92
-
93
- const isLast = computed<boolean>(
94
- () => props.columnKeys.filter((columnKey) => columnKey.show).length === 1
95
- )
96
-
97
- const change = (e: UI_I_HTMLSelectElement, key: number): void => {
98
- const newColumnKeys = props.columnKeys.map((columnKey, i) => {
99
- if (i !== key) {
100
- return columnKey
101
- }
102
-
103
- columnKey.show = e.target.checked
104
- return columnKey
105
- })
106
- emits('update:column-keys', newColumnKeys)
107
- }
108
- const selectAll = (): void => {
109
- const newColumnKeys = props.columnKeys.map((columnKey) => {
110
- columnKey.show = true
111
- return columnKey
112
- })
113
- emits('update:column-keys', newColumnKeys)
114
- }
115
-
116
- const windowClick = (): void => {
117
- hide()
118
- }
119
- onMounted(() => {
120
- window.addEventListener('click', windowClick)
121
- columnSwitchId.value = `column-switch-${useUniqueId()}`
122
- setDropdownStyle()
123
- })
124
- onUnmounted(() => {
125
- window.removeEventListener('click', windowClick)
126
- })
127
-
128
- const open = ref<boolean>(false)
129
- const hide = (): void => {
130
- open.value = false
131
- }
132
- const toggle = (): void => {
133
- open.value = !open.value
134
- if (!open.value) {
135
- return
136
- }
137
-
138
- setDropdownStyle()
139
- }
140
-
141
- const dropdownStyles = ref({})
142
- const setDropdownStyle = (): void => {
143
- const elem = document.getElementById(columnSwitchId.value)
144
- if (!elem) {
145
- setTimeout(() => setDropdownStyle(), 0)
146
- return
147
- }
148
- const { x, y } = elem.getBoundingClientRect()
149
-
150
- dropdownStyles.value = {
151
- top: `${y - 10}px`,
152
- left: `${x}px`,
153
- }
154
- }
155
- </script>
156
-
157
- <style scoped lang="scss">
158
- .column-switch-wrap {
159
- .column-switch-btn {
160
- cursor: pointer;
161
- padding: 0;
162
- border: 0;
163
- display: flex;
164
- background-color: transparent;
165
-
166
- .toggle-icon {
167
- fill: #575757;
168
- }
169
- &:hover {
170
- .toggle-icon {
171
- fill: #0079b8;
172
- }
173
- }
174
- }
175
-
176
- .dropdown-menu {
177
- position: fixed;
178
- z-index: var(--z-fixed);
179
- visibility: unset;
180
- transform: translateY(-100%);
181
- background-color: var(--block-view-bg-color);
182
- border-color: var(--global-border-color);
183
-
184
- .column-switch {
185
- border-style: none;
186
- box-shadow: none;
187
- height: 85%;
188
- max-height: calc(15rem + 100px);
189
- padding: 18px;
190
- width: 250px;
191
- display: flex;
192
- flex-direction: column;
193
-
194
- .switch-header {
195
- font-size: 16px;
196
- color: var(--global-font-color4);
197
- padding-bottom: 12px;
198
- }
199
-
200
- .switch-content {
201
- overflow-y: auto;
202
- .clr-control-label {
203
- white-space: normal;
204
- }
205
- }
206
-
207
- .switch-footer {
208
- button {
209
- padding: 0;
210
- margin: 0;
211
- font-size: 12px;
212
- letter-spacing: 1px;
213
- color: #0079b8;
214
- text-transform: uppercase;
215
- display: flex;
216
- align-items: center;
217
- }
218
- }
219
- }
220
- }
221
- }
222
- </style>
1
+ <template>
2
+ <div class="column-switch-wrap flex-align-center relative" @click.stop>
3
+ <button
4
+ :id="columnSwitchId"
5
+ :data-id="`${props.testId}-toggle-button`"
6
+ class="column-switch-btn"
7
+ @click.stop="toggle"
8
+ >
9
+ <atoms-the-icon
10
+ name="column-switch"
11
+ width="16px"
12
+ height="16px"
13
+ class="toggle-icon"
14
+ />
15
+ </button>
16
+
17
+ <div v-show="open" :style="dropdownStyles" class="dropdown-menu">
18
+ <div class="column-switch">
19
+ <div class="switch-header">
20
+ {{ localization.common.showColumns }}
21
+ </div>
22
+ <ul class="switch-content list-unstyled">
23
+ <li
24
+ v-for="(item, key) in columnKeysPresent"
25
+ :key="`${item.key}_${key}`"
26
+ >
27
+ <div class="clr-checkbox-wrapper">
28
+ <input
29
+ :id="`${props.testId}-${item.id}`"
30
+ v-model="item.show"
31
+ :data-id="`${props.testId}-${item.testId}`"
32
+ :disabled="isLast && item.show"
33
+ type="checkbox"
34
+ @change="change($event, key)"
35
+ />
36
+ <label
37
+ :for="`${props.testId}-${item.id}`"
38
+ class="clr-control-label"
39
+ >{{ item.text }}</label
40
+ >
41
+ </div>
42
+ </li>
43
+ </ul>
44
+ <div class="switch-footer">
45
+ <button
46
+ :id="`${props.testId}-select-all-button`"
47
+ :data-id="`${props.testId}-select-all-button`"
48
+ class="btn btn-sm btn-link switch-button export-link"
49
+ @click="selectAll"
50
+ >
51
+ {{ localization.common.selectAll }}
52
+ </button>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </template>
58
+
59
+ <script setup lang="ts">
60
+ import type {
61
+ UI_I_HTMLSelectElement,
62
+ UI_I_Localization,
63
+ } from '~/lib/models/interfaces'
64
+ import type { UI_I_ColumnKey } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
65
+
66
+ const props = withDefaults(
67
+ defineProps<{
68
+ columnKeys: UI_I_ColumnKey[]
69
+ testId?: string
70
+ }>(),
71
+ { testId: 'ui-data-grid-column-switch' }
72
+ )
73
+ const emits = defineEmits<{
74
+ (event: 'update:column-keys', value: UI_I_ColumnKey[]): void
75
+ }>()
76
+
77
+ const columnKeysPresent = computed<UI_I_ColumnKey[]>(() => {
78
+ return props.columnKeys.map((item): UI_I_ColumnKey => {
79
+ const testId = item.text
80
+ .toLowerCase()
81
+ .replace(/\s/g, '_')
82
+ .replace(/[^a-zA-Z_]/g, '')
83
+ .replace(/__+/g, '_')
84
+ .replace(/_$/, '')
85
+ return { ...item, id: useUniqueId(), testId: `show-column-${testId}` }
86
+ })
87
+ })
88
+
89
+ const localization = computed<UI_I_Localization>(() => useLocal())
90
+
91
+ const columnSwitchId = ref<string>('')
92
+
93
+ const isLast = computed<boolean>(
94
+ () => props.columnKeys.filter((columnKey) => columnKey.show).length === 1
95
+ )
96
+
97
+ const change = (e: UI_I_HTMLSelectElement, key: number): void => {
98
+ const newColumnKeys = props.columnKeys.map((columnKey, i) => {
99
+ if (i !== key) {
100
+ return columnKey
101
+ }
102
+
103
+ columnKey.show = e.target.checked
104
+ return columnKey
105
+ })
106
+ emits('update:column-keys', newColumnKeys)
107
+ }
108
+ const selectAll = (): void => {
109
+ const newColumnKeys = props.columnKeys.map((columnKey) => {
110
+ columnKey.show = true
111
+ return columnKey
112
+ })
113
+ emits('update:column-keys', newColumnKeys)
114
+ }
115
+
116
+ const windowClick = (): void => {
117
+ hide()
118
+ }
119
+ onMounted(() => {
120
+ window.addEventListener('click', windowClick)
121
+ columnSwitchId.value = `column-switch-${useUniqueId()}`
122
+ setDropdownStyle()
123
+ })
124
+ onUnmounted(() => {
125
+ window.removeEventListener('click', windowClick)
126
+ })
127
+
128
+ const open = ref<boolean>(false)
129
+ const hide = (): void => {
130
+ open.value = false
131
+ }
132
+ const toggle = (): void => {
133
+ open.value = !open.value
134
+ if (!open.value) {
135
+ return
136
+ }
137
+
138
+ setDropdownStyle()
139
+ }
140
+
141
+ const dropdownStyles = ref({})
142
+ const setDropdownStyle = (): void => {
143
+ const elem = document.getElementById(columnSwitchId.value)
144
+ if (!elem) {
145
+ setTimeout(() => setDropdownStyle(), 0)
146
+ return
147
+ }
148
+ const { x, y } = elem.getBoundingClientRect()
149
+
150
+ dropdownStyles.value = {
151
+ top: `${y - 10}px`,
152
+ left: `${x}px`,
153
+ }
154
+ }
155
+ </script>
156
+
157
+ <style scoped lang="scss">
158
+ .column-switch-wrap {
159
+ .column-switch-btn {
160
+ cursor: pointer;
161
+ padding: 0;
162
+ border: 0;
163
+ display: flex;
164
+ background-color: transparent;
165
+
166
+ .toggle-icon {
167
+ fill: #575757;
168
+ }
169
+ &:hover {
170
+ .toggle-icon {
171
+ fill: #0079b8;
172
+ }
173
+ }
174
+ }
175
+
176
+ .dropdown-menu {
177
+ position: fixed;
178
+ z-index: var(--z-fixed);
179
+ visibility: unset;
180
+ transform: translateY(-100%);
181
+ background-color: var(--block-view-bg-color);
182
+ border-color: var(--global-border-color);
183
+
184
+ .column-switch {
185
+ border-style: none;
186
+ box-shadow: none;
187
+ height: 85%;
188
+ max-height: calc(15rem + 100px);
189
+ padding: 18px;
190
+ width: 250px;
191
+ display: flex;
192
+ flex-direction: column;
193
+
194
+ .switch-header {
195
+ font-size: 16px;
196
+ color: var(--global-font-color4);
197
+ padding-bottom: 12px;
198
+ }
199
+
200
+ .switch-content {
201
+ overflow-y: auto;
202
+ .clr-control-label {
203
+ white-space: normal;
204
+ }
205
+ }
206
+
207
+ .switch-footer {
208
+ button {
209
+ padding: 0;
210
+ margin: 0;
211
+ font-size: 12px;
212
+ letter-spacing: 1px;
213
+ color: #0079b8;
214
+ text-transform: uppercase;
215
+ display: flex;
216
+ align-items: center;
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ </style>
@@ -1,94 +1,94 @@
1
- import type { UI_ColumnSettingsStrategy } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
2
- import type {
3
- UI_I_ColumnKey,
4
- UI_I_HeadItem,
5
- } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
6
- import type { UI_I_DropdownButtonItem } from '~/components/common/select/button/lib/models/interfaces'
7
- import type { UI_I_Localization } from '~/lib/models/interfaces'
8
- import {
9
- constructColumnKey,
10
- constructHeadItem,
11
- } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
12
-
13
- export const defaultColumnKeys = (
14
- items: [string, boolean, string, string][],
15
- strategy?: UI_ColumnSettingsStrategy
16
- ): UI_I_ColumnKey[] => {
17
- const result: UI_I_ColumnKey[] = []
18
- items.forEach((item, i) => {
19
- let col: string = `col${i}` // Стандартное значение по умолчанию
20
-
21
- if (strategy) {
22
- // Проходим по ключам объекта и ищем соответствие индекса i в значениях
23
- for (const key in strategy) {
24
- if (strategy[key].includes(i)) {
25
- col = key
26
- break
27
- }
28
- }
29
- }
30
-
31
- result.push(
32
- constructColumnKey(col, item[0], item[1], `show-column-${item[3]}`)
33
- )
34
- })
35
- return result
36
- }
37
-
38
- export const defaultHeadItems = (
39
- items: [string, boolean, string, string][],
40
- strategy?: UI_ColumnSettingsStrategy
41
- ): UI_I_HeadItem[] => {
42
- const result: UI_I_HeadItem[] = []
43
- items.forEach((item, i) => {
44
- let col: string = `col${i}` // Стандартное значение по умолчанию
45
-
46
- if (strategy) {
47
- // Проходим по ключам объекта и ищем соответствие индекса i в значениях
48
- for (const key in strategy) {
49
- if (strategy[key].includes(i)) {
50
- col = key
51
- break
52
- }
53
- }
54
- }
55
-
56
- result.push(
57
- constructHeadItem(
58
- col,
59
- item[0],
60
- item[3],
61
- false,
62
- item[2],
63
- undefined,
64
- item[3]
65
- )
66
- )
67
- })
68
- return result
69
- }
70
-
71
- export const exportItemsFunc = (
72
- localization: UI_I_Localization,
73
- rows: number,
74
- selectedRows: number,
75
- testId: string
76
- ): UI_I_DropdownButtonItem[] => {
77
- return [
78
- {
79
- text: localization.common.allRowsCount.replace('{0}', '' + rows),
80
- type: '0',
81
- disabled: false,
82
- testId: `${testId}-export-all`,
83
- },
84
- {
85
- text: localization.common.selectedRowsCount.replace(
86
- '{0}',
87
- '' + selectedRows
88
- ),
89
- type: '1',
90
- disabled: false,
91
- testId: `${testId}-export-selected`,
92
- },
93
- ]
94
- }
1
+ import type { UI_ColumnSettingsStrategy } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
2
+ import type {
3
+ UI_I_ColumnKey,
4
+ UI_I_HeadItem,
5
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
6
+ import type { UI_I_DropdownButtonItem } from '~/components/common/select/button/lib/models/interfaces'
7
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
8
+ import {
9
+ constructColumnKey,
10
+ constructHeadItem,
11
+ } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
12
+
13
+ export const defaultColumnKeys = (
14
+ items: [string, boolean, string, string][],
15
+ strategy?: UI_ColumnSettingsStrategy
16
+ ): UI_I_ColumnKey[] => {
17
+ const result: UI_I_ColumnKey[] = []
18
+ items.forEach((item, i) => {
19
+ let col: string = `col${i}` // Стандартное значение по умолчанию
20
+
21
+ if (strategy) {
22
+ // Проходим по ключам объекта и ищем соответствие индекса i в значениях
23
+ for (const key in strategy) {
24
+ if (strategy[key].includes(i)) {
25
+ col = key
26
+ break
27
+ }
28
+ }
29
+ }
30
+
31
+ result.push(
32
+ constructColumnKey(col, item[0], item[1], `show-column-${item[3]}`)
33
+ )
34
+ })
35
+ return result
36
+ }
37
+
38
+ export const defaultHeadItems = (
39
+ items: [string, boolean, string, string][],
40
+ strategy?: UI_ColumnSettingsStrategy
41
+ ): UI_I_HeadItem[] => {
42
+ const result: UI_I_HeadItem[] = []
43
+ items.forEach((item, i) => {
44
+ let col: string = `col${i}` // Стандартное значение по умолчанию
45
+
46
+ if (strategy) {
47
+ // Проходим по ключам объекта и ищем соответствие индекса i в значениях
48
+ for (const key in strategy) {
49
+ if (strategy[key].includes(i)) {
50
+ col = key
51
+ break
52
+ }
53
+ }
54
+ }
55
+
56
+ result.push(
57
+ constructHeadItem(
58
+ col,
59
+ item[0],
60
+ item[3],
61
+ false,
62
+ item[2],
63
+ undefined,
64
+ item[3]
65
+ )
66
+ )
67
+ })
68
+ return result
69
+ }
70
+
71
+ export const exportItemsFunc = (
72
+ localization: UI_I_Localization,
73
+ rows: number,
74
+ selectedRows: number,
75
+ testId: string
76
+ ): UI_I_DropdownButtonItem[] => {
77
+ return [
78
+ {
79
+ text: localization.common.allRowsCount.replace('{0}', '' + rows),
80
+ type: '0',
81
+ disabled: false,
82
+ testId: `${testId}-export-all`,
83
+ },
84
+ {
85
+ text: localization.common.selectedRowsCount.replace(
86
+ '{0}',
87
+ '' + selectedRows
88
+ ),
89
+ type: '1',
90
+ disabled: false,
91
+ testId: `${testId}-export-selected`,
92
+ },
93
+ ]
94
+ }
@@ -1,16 +1,16 @@
1
- export const generateCsvAndDownload = (rows: HTMLElement[]): void => {
2
- const content: string[] = []
3
- rows.forEach((row: HTMLElement) => {
4
- content.push(row.innerText.replaceAll(';', ',').replaceAll('\n', ';'))
5
- })
6
-
7
- const csvContent = 'data:text/csv;charset=utf-8,' + content.join('\n')
8
-
9
- const encodedUri = encodeURI(csvContent)
10
- const link = document.createElement('a')
11
- link.setAttribute('href', encodedUri)
12
- link.setAttribute('download', 'my_data.csv')
13
- document.body.appendChild(link)
14
-
15
- link.click()
16
- }
1
+ export const generateCsvAndDownload = (rows: HTMLElement[]): void => {
2
+ const content: string[] = []
3
+ rows.forEach((row: HTMLElement) => {
4
+ content.push(row.innerText.replaceAll(';', ',').replaceAll('\n', ';'))
5
+ })
6
+
7
+ const csvContent = 'data:text/csv;charset=utf-8,' + content.join('\n')
8
+
9
+ const encodedUri = encodeURI(csvContent)
10
+ const link = document.createElement('a')
11
+ link.setAttribute('href', encodedUri)
12
+ link.setAttribute('download', 'my_data.csv')
13
+ document.body.appendChild(link)
14
+
15
+ link.click()
16
+ }