bfg-common 1.5.61 → 1.5.63

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 (172) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/scss/common/normalize.scss +339 -339
  3. package/components/atoms/TheIcon3.vue +50 -50
  4. package/components/atoms/collapse/CollapseNav.vue +165 -165
  5. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  6. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  7. package/components/atoms/perPage/PerPage.vue +58 -58
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  10. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  11. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  12. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  13. package/components/atoms/tooltip/Signpost.vue +227 -227
  14. package/components/common/accordion/Recursion.vue +222 -222
  15. package/components/common/browse/BrowseNew.vue +237 -237
  16. package/components/common/browse/BrowseOld.vue +217 -217
  17. package/components/common/browse/blocks/contents/Files.vue +37 -37
  18. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  19. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  20. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/context/Context.vue +111 -111
  22. package/components/common/context/lib/models/interfaces.ts +31 -31
  23. package/components/common/context/recursion/Recursion.vue +87 -87
  24. package/components/common/context/recursion/RecursionNew.vue +238 -238
  25. package/components/common/context/recursion/RecursionOld.vue +228 -228
  26. package/components/common/details/DetailsItem.vue +109 -109
  27. package/components/common/diagramMain/DiagramMain.vue +897 -897
  28. package/components/common/diagramMain/Header.vue +214 -214
  29. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  30. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  31. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  32. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  33. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  34. package/components/common/monitor/advanced/tools/chartOptionsModal/actions/lib/utils/optionsActions.ts +32 -28
  35. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  36. package/components/common/monitor/advanced/tools/lib/config/advancedToolbar.ts +146 -130
  37. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  38. package/components/common/pages/home/headline/Headline.vue +45 -45
  39. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  40. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  41. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  42. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  43. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  44. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  45. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  46. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  47. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  48. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  49. package/components/common/pages/packages/Packages.vue +208 -208
  50. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  51. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  52. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  53. package/components/common/portlets/tag/Portlet.vue +433 -433
  54. package/components/common/recursionTree/RecursionTree.vue +223 -223
  55. package/components/common/select/button/ButtonDropdown.vue +108 -108
  56. package/components/common/spiceConsole/Drawer.vue +370 -370
  57. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  58. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  59. package/components/common/split/vertical/Vertical.vue +160 -160
  60. package/components/common/tools/Actions.vue +202 -202
  61. package/components/common/vm/actions/add/Add.vue +785 -784
  62. package/components/common/vm/actions/add/New.vue +429 -429
  63. package/components/common/vm/actions/add/Old.vue +371 -371
  64. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  65. package/components/common/vm/actions/clone/Clone.vue +798 -798
  66. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  67. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -626
  68. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  69. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  70. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  124. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  125. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  126. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  127. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  128. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  129. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  130. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  131. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  141. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  142. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +162 -162
  143. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  144. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  145. package/components/common/vm/actions/common/select/createType/Old.vue +70 -70
  146. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  147. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  148. package/components/common/vm/actions/common/select/name/New.vue +143 -143
  149. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  150. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  151. package/components/common/vm/actions/common/select/template/Template.vue +64 -64
  152. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  153. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  154. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  155. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  156. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  157. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  158. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  159. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  160. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  161. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  162. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  163. package/composables/productNameLocal.ts +30 -30
  164. package/composables/useAppVersion.ts +21 -21
  165. package/package.json +1 -1
  166. package/plugins/date.ts +233 -233
  167. package/plugins/directives.ts +24 -24
  168. package/public/spice-console/lib/images/bitmap.js +203 -203
  169. package/public/spice-console/network/spicechannel.js +383 -383
  170. package/store/main/mutations.ts +7 -7
  171. package/store/main/state.ts +7 -7
  172. package/store/tasks/mappers/recentTasks.ts +64 -64
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.61",
4
+ "version": "1.5.63",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",
package/plugins/date.ts CHANGED
@@ -1,233 +1,233 @@
1
- import { defineNuxtPlugin } from '#app'
2
- import {
3
- format,
4
- // differenceInYears,
5
- // differenceInMonths,
6
- // differenceInDays,
7
- // differenceInHours,
8
- // differenceInMinutes,
9
- // differenceInSeconds,
10
- } from 'date-fns'
11
- import * as localizations from 'date-fns/locale'
12
- import type { UI_T_DateFormat } from '~/lib/models/plugins/date/types'
13
- import type { UI_I_Dateformat } from '~/lib/models/plugins/date/interfaces'
14
- import type { UI_I_ArbitraryObject } from '~/lib/models/interfaces'
15
-
16
- export default defineNuxtPlugin(() => {
17
- // Проверяем переданое является датой
18
- const isDate = (date: string | number) => {
19
- return new Date(date).toString() !== 'Invalid Date'
20
- }
21
-
22
- // Проверяем формат времени браузера равно 24h
23
- const isBrowserLocale24h = () =>
24
- !new Intl.DateTimeFormat(undefined, { hour: 'numeric' })
25
- .format(0)
26
- .match(/AM/)
27
-
28
- // Получаем переводы для даты
29
- const getDateLocalization = (lang?: string) => {
30
- const currentLanguage = lang || useLocalStorage('lang') || 'en_US'
31
- const { be, enUS, hy, kk, ru, zhCN } = localizations
32
- let localization
33
-
34
- switch (currentLanguage) {
35
- case 'be_BY':
36
- localization = be
37
- break
38
- case 'en_US':
39
- localization = enUS
40
- break
41
- case 'hy_AM':
42
- localization = hy
43
- break
44
- case 'kk_KZ':
45
- localization = kk
46
- break
47
- case 'ru_RU':
48
- localization = ru
49
- break
50
- case 'zh_CHS':
51
- localization = zhCN
52
- break
53
- }
54
-
55
- return localization
56
- }
57
-
58
- // Получаем формат даты
59
- const getDateFormat = (lang?: string): UI_T_DateFormat => {
60
- const currentLanguage = lang || useLocalStorage('lang') || 'en_US'
61
- const dateFormats: UI_I_Dateformat = {
62
- be_BY: 'yyyy-MM-dd',
63
- en_US: 'MM-dd-yyyy',
64
- hy_AM: 'yyyy-MM-dd',
65
- kk_KZ: 'dd/MM/yyyy',
66
- ru_RU: 'dd/MM/yyyy',
67
- zh_CHS: 'yyyy-MM-dd',
68
- }
69
-
70
- const dateFormat = ref(dateFormats[currentLanguage])
71
-
72
- window.addEventListener('timeFormatStorageChanged', function handler() {
73
- dateFormat.value = dateFormats[lang || useLocalStorage('lang') || 'en_US'] // TODO нужно проверить когда будем работать без useLocalStorage
74
-
75
- window.removeEventListener('timeFormatStorageChanged', handler)
76
- })
77
-
78
- return dateFormat.value
79
- }
80
-
81
- // Получаем формат времени
82
- const getTimeFormat = (hasSeconds: boolean, timeFormat?: string) => {
83
- let appTimeFormat = timeFormat || useLocalStorage('timeFormat') || 'DEFAULT'
84
- let timeFormatLocal = ''
85
-
86
- if (appTimeFormat === 'DEFAULT') {
87
- const isBrowserTimeFormat24 = isBrowserLocale24h()
88
-
89
- appTimeFormat = isBrowserTimeFormat24 ? '24H' : appTimeFormat
90
- }
91
-
92
- if (appTimeFormat === '24H') {
93
- timeFormatLocal = 'HH:mm'
94
- } else {
95
- timeFormatLocal = 'h:mm aa'
96
- }
97
-
98
- hasSeconds && (timeFormatLocal = timeFormatLocal.replace(':mm', ':mm:ss'))
99
-
100
- return timeFormatLocal
101
- }
102
-
103
- // Форматирование даты из английского в стандартный
104
- const enFormatToStandardFormat = (date: string): string => {
105
- const splitDate = date.split('-')
106
- return [splitDate[2], splitDate[0], splitDate[1]].join('/')
107
- }
108
- const getUnixByDate = (dateTime: string, lang?: string): number => {
109
- const currentFormat: UI_T_DateFormat = getDateFormat(lang)
110
-
111
- const [date, time] = dateTime.split(' ')
112
-
113
- let standardDate = ''
114
- switch (currentFormat) {
115
- case 'dd/MM/yyyy':
116
- standardDate = date.split('/').reverse().join('/')
117
- break
118
- case 'yyyy-MM-dd':
119
- standardDate = date.replaceAll('-', '/')
120
- break
121
- case 'MM-dd-yyyy':
122
- standardDate = enFormatToStandardFormat(date)
123
- break
124
- }
125
-
126
- const standard = time ? standardDate + ' ' + time : standardDate
127
- return new Date(standard).getTime()
128
- }
129
-
130
- // Форматирование даты без временим
131
- const formattedDate = (
132
- date: number | string | Date,
133
- formatDate = '',
134
- lang?: string
135
- ) => {
136
- const formatDateLocal = formatDate || getDateFormat(lang)
137
-
138
- return format(new Date(date), formatDateLocal, {
139
- locale: getDateLocalization(lang),
140
- })
141
- }
142
- // Форматирование временим
143
- const formattedTime = (
144
- date: number | string | Date,
145
- formatDate = '',
146
- hasSeconds = false,
147
- timeFormat?: string
148
- ) => {
149
- const formatDateLocal = formatDate || getTimeFormat(hasSeconds, timeFormat)
150
-
151
- return format(new Date(date), formatDateLocal)
152
- }
153
-
154
- // Форматирование даты с временим
155
- const formattedDatetime = (
156
- date: number | string | Date,
157
- formatDate = '',
158
- hasSeconds = false,
159
- lang?: string,
160
- timeFormat?: string
161
- ) => {
162
- const formatDateLocal = ref(formatDate || getDateFormat(lang))
163
- const formatDatetime = ref(
164
- formatDateLocal.value + ' ' + getTimeFormat(hasSeconds, timeFormat)
165
- )
166
-
167
- window.addEventListener('timeFormatStorageChanged', function handler() {
168
- formatDatetime.value =
169
- formatDateLocal.value + ' ' + getTimeFormat(hasSeconds, timeFormat)
170
-
171
- window.removeEventListener('timeFormatStorageChanged', handler)
172
- })
173
-
174
- return format(new Date(date), formatDatetime.value, {
175
- locale: getDateLocalization(lang),
176
- })
177
- }
178
-
179
- const correctRuUnit = (value: number, type: string): string => {
180
- let result = ''
181
-
182
- const forms: UI_I_ArbitraryObject<string[]> = {
183
- second: ['Секунда', 'Секунды', 'Секунд'],
184
- minute: ['Минута', 'Минуты', 'Минут'],
185
- hour: ['Час', 'Часа', 'Часов'],
186
- day: ['День', 'Дня', 'Дней'],
187
- week: ['Неделя', 'Недели', 'Недель'],
188
- month: ['Месяц', 'Месяца', 'Месяцев'],
189
- year: ['Год', 'Года', 'Лет'],
190
- }
191
-
192
- const isFirstType = value % 10 === 1 && value % 100 !== 11
193
- const isSecondType =
194
- [2, 3, 4].includes(value % 10) && ![12, 13, 14].includes(value % 100)
195
-
196
- if (isFirstType) {
197
- result = forms[type][0]
198
- } else if (isSecondType) {
199
- result = forms[type][1]
200
- } else {
201
- result = forms[type][2]
202
- }
203
-
204
- return result
205
- }
206
-
207
- // Определяем сколько времени осталось
208
- // time = seconds
209
- const timeToTimeLeft = (time: number): number[] => {
210
- const seconds = Math.floor(time % 60)
211
- const minutes = Math.floor((time / 60) % 60)
212
- const hours = Math.floor((time / 60 / 60) % 24)
213
- const days = Math.floor((time / 60 / 60 / 24) % 30)
214
- const months = Math.floor((time / 60 / 60 / 24 / 30) % 12)
215
- const years = Math.floor(time / 60 / 60 / 24 / 30 / 12)
216
-
217
- return [years, months, days, hours, minutes, seconds]
218
- }
219
-
220
- return {
221
- provide: {
222
- isDate,
223
- getTimeFormat,
224
- getDateFormat,
225
- formattedTime,
226
- formattedDate,
227
- formattedDatetime,
228
- getUnixByDate,
229
- correctRuUnit,
230
- timeToTimeLeft,
231
- },
232
- }
233
- })
1
+ import { defineNuxtPlugin } from '#app'
2
+ import {
3
+ format,
4
+ // differenceInYears,
5
+ // differenceInMonths,
6
+ // differenceInDays,
7
+ // differenceInHours,
8
+ // differenceInMinutes,
9
+ // differenceInSeconds,
10
+ } from 'date-fns'
11
+ import * as localizations from 'date-fns/locale'
12
+ import type { UI_T_DateFormat } from '~/lib/models/plugins/date/types'
13
+ import type { UI_I_Dateformat } from '~/lib/models/plugins/date/interfaces'
14
+ import type { UI_I_ArbitraryObject } from '~/lib/models/interfaces'
15
+
16
+ export default defineNuxtPlugin(() => {
17
+ // Проверяем переданое является датой
18
+ const isDate = (date: string | number) => {
19
+ return new Date(date).toString() !== 'Invalid Date'
20
+ }
21
+
22
+ // Проверяем формат времени браузера равно 24h
23
+ const isBrowserLocale24h = () =>
24
+ !new Intl.DateTimeFormat(undefined, { hour: 'numeric' })
25
+ .format(0)
26
+ .match(/AM/)
27
+
28
+ // Получаем переводы для даты
29
+ const getDateLocalization = (lang?: string) => {
30
+ const currentLanguage = lang || useLocalStorage('lang') || 'en_US'
31
+ const { be, enUS, hy, kk, ru, zhCN } = localizations
32
+ let localization
33
+
34
+ switch (currentLanguage) {
35
+ case 'be_BY':
36
+ localization = be
37
+ break
38
+ case 'en_US':
39
+ localization = enUS
40
+ break
41
+ case 'hy_AM':
42
+ localization = hy
43
+ break
44
+ case 'kk_KZ':
45
+ localization = kk
46
+ break
47
+ case 'ru_RU':
48
+ localization = ru
49
+ break
50
+ case 'zh_CHS':
51
+ localization = zhCN
52
+ break
53
+ }
54
+
55
+ return localization
56
+ }
57
+
58
+ // Получаем формат даты
59
+ const getDateFormat = (lang?: string): UI_T_DateFormat => {
60
+ const currentLanguage = lang || useLocalStorage('lang') || 'en_US'
61
+ const dateFormats: UI_I_Dateformat = {
62
+ be_BY: 'yyyy-MM-dd',
63
+ en_US: 'MM-dd-yyyy',
64
+ hy_AM: 'yyyy-MM-dd',
65
+ kk_KZ: 'dd/MM/yyyy',
66
+ ru_RU: 'dd/MM/yyyy',
67
+ zh_CHS: 'yyyy-MM-dd',
68
+ }
69
+
70
+ const dateFormat = ref(dateFormats[currentLanguage])
71
+
72
+ window.addEventListener('timeFormatStorageChanged', function handler() {
73
+ dateFormat.value = dateFormats[lang || useLocalStorage('lang') || 'en_US'] // TODO нужно проверить когда будем работать без useLocalStorage
74
+
75
+ window.removeEventListener('timeFormatStorageChanged', handler)
76
+ })
77
+
78
+ return dateFormat.value
79
+ }
80
+
81
+ // Получаем формат времени
82
+ const getTimeFormat = (hasSeconds: boolean, timeFormat?: string) => {
83
+ let appTimeFormat = timeFormat || useLocalStorage('timeFormat') || 'DEFAULT'
84
+ let timeFormatLocal = ''
85
+
86
+ if (appTimeFormat === 'DEFAULT') {
87
+ const isBrowserTimeFormat24 = isBrowserLocale24h()
88
+
89
+ appTimeFormat = isBrowserTimeFormat24 ? '24H' : appTimeFormat
90
+ }
91
+
92
+ if (appTimeFormat === '24H') {
93
+ timeFormatLocal = 'HH:mm'
94
+ } else {
95
+ timeFormatLocal = 'h:mm aa'
96
+ }
97
+
98
+ hasSeconds && (timeFormatLocal = timeFormatLocal.replace(':mm', ':mm:ss'))
99
+
100
+ return timeFormatLocal
101
+ }
102
+
103
+ // Форматирование даты из английского в стандартный
104
+ const enFormatToStandardFormat = (date: string): string => {
105
+ const splitDate = date.split('-')
106
+ return [splitDate[2], splitDate[0], splitDate[1]].join('/')
107
+ }
108
+ const getUnixByDate = (dateTime: string, lang?: string): number => {
109
+ const currentFormat: UI_T_DateFormat = getDateFormat(lang)
110
+
111
+ const [date, time] = dateTime.split(' ')
112
+
113
+ let standardDate = ''
114
+ switch (currentFormat) {
115
+ case 'dd/MM/yyyy':
116
+ standardDate = date.split('/').reverse().join('/')
117
+ break
118
+ case 'yyyy-MM-dd':
119
+ standardDate = date.replaceAll('-', '/')
120
+ break
121
+ case 'MM-dd-yyyy':
122
+ standardDate = enFormatToStandardFormat(date)
123
+ break
124
+ }
125
+
126
+ const standard = time ? standardDate + ' ' + time : standardDate
127
+ return new Date(standard).getTime()
128
+ }
129
+
130
+ // Форматирование даты без временим
131
+ const formattedDate = (
132
+ date: number | string | Date,
133
+ formatDate = '',
134
+ lang?: string
135
+ ) => {
136
+ const formatDateLocal = formatDate || getDateFormat(lang)
137
+
138
+ return format(new Date(date), formatDateLocal, {
139
+ locale: getDateLocalization(lang),
140
+ })
141
+ }
142
+ // Форматирование временим
143
+ const formattedTime = (
144
+ date: number | string | Date,
145
+ formatDate = '',
146
+ hasSeconds = false,
147
+ timeFormat?: string
148
+ ) => {
149
+ const formatDateLocal = formatDate || getTimeFormat(hasSeconds, timeFormat)
150
+
151
+ return format(new Date(date), formatDateLocal)
152
+ }
153
+
154
+ // Форматирование даты с временим
155
+ const formattedDatetime = (
156
+ date: number | string | Date,
157
+ formatDate = '',
158
+ hasSeconds = false,
159
+ lang?: string,
160
+ timeFormat?: string
161
+ ) => {
162
+ const formatDateLocal = ref(formatDate || getDateFormat(lang))
163
+ const formatDatetime = ref(
164
+ formatDateLocal.value + ' ' + getTimeFormat(hasSeconds, timeFormat)
165
+ )
166
+
167
+ window.addEventListener('timeFormatStorageChanged', function handler() {
168
+ formatDatetime.value =
169
+ formatDateLocal.value + ' ' + getTimeFormat(hasSeconds, timeFormat)
170
+
171
+ window.removeEventListener('timeFormatStorageChanged', handler)
172
+ })
173
+
174
+ return format(new Date(date), formatDatetime.value, {
175
+ locale: getDateLocalization(lang),
176
+ })
177
+ }
178
+
179
+ const correctRuUnit = (value: number, type: string): string => {
180
+ let result = ''
181
+
182
+ const forms: UI_I_ArbitraryObject<string[]> = {
183
+ second: ['Секунда', 'Секунды', 'Секунд'],
184
+ minute: ['Минута', 'Минуты', 'Минут'],
185
+ hour: ['Час', 'Часа', 'Часов'],
186
+ day: ['День', 'Дня', 'Дней'],
187
+ week: ['Неделя', 'Недели', 'Недель'],
188
+ month: ['Месяц', 'Месяца', 'Месяцев'],
189
+ year: ['Год', 'Года', 'Лет'],
190
+ }
191
+
192
+ const isFirstType = value % 10 === 1 && value % 100 !== 11
193
+ const isSecondType =
194
+ [2, 3, 4].includes(value % 10) && ![12, 13, 14].includes(value % 100)
195
+
196
+ if (isFirstType) {
197
+ result = forms[type][0]
198
+ } else if (isSecondType) {
199
+ result = forms[type][1]
200
+ } else {
201
+ result = forms[type][2]
202
+ }
203
+
204
+ return result
205
+ }
206
+
207
+ // Определяем сколько времени осталось
208
+ // time = seconds
209
+ const timeToTimeLeft = (time: number): number[] => {
210
+ const seconds = Math.floor(time % 60)
211
+ const minutes = Math.floor((time / 60) % 60)
212
+ const hours = Math.floor((time / 60 / 60) % 24)
213
+ const days = Math.floor((time / 60 / 60 / 24) % 30)
214
+ const months = Math.floor((time / 60 / 60 / 24 / 30) % 12)
215
+ const years = Math.floor(time / 60 / 60 / 24 / 30 / 12)
216
+
217
+ return [years, months, days, hours, minutes, seconds]
218
+ }
219
+
220
+ return {
221
+ provide: {
222
+ isDate,
223
+ getTimeFormat,
224
+ getDateFormat,
225
+ formattedTime,
226
+ formattedDate,
227
+ formattedDatetime,
228
+ getUnixByDate,
229
+ correctRuUnit,
230
+ timeToTimeLeft,
231
+ },
232
+ }
233
+ })
@@ -1,24 +1,24 @@
1
- import type { DirectiveBinding } from '@vue/runtime-core'
2
-
3
- export default defineNuxtPlugin((nuxtApp) => {
4
- nuxtApp.vueApp.directive('development', {
5
- mounted(el: HTMLElement, binding: DirectiveBinding) {
6
- if (!binding.value) return
7
-
8
- el.setAttribute('title', 'In development')
9
- el.setAttribute('disabled', 'true')
10
- el.style.opacity = '0.6'
11
- el.style.cursor = 'not-allowed'
12
-
13
- el.addEventListener(
14
- 'click',
15
- (e: MouseEvent) => {
16
- e.preventDefault()
17
- e.stopPropagation()
18
- return false
19
- },
20
- true
21
- )
22
- },
23
- })
24
- })
1
+ import type { DirectiveBinding } from '@vue/runtime-core'
2
+
3
+ export default defineNuxtPlugin((nuxtApp) => {
4
+ nuxtApp.vueApp.directive('development', {
5
+ mounted(el: HTMLElement, binding: DirectiveBinding) {
6
+ if (!binding.value) return
7
+
8
+ el.setAttribute('title', 'In development')
9
+ el.setAttribute('disabled', 'true')
10
+ el.style.opacity = '0.6'
11
+ el.style.cursor = 'not-allowed'
12
+
13
+ el.addEventListener(
14
+ 'click',
15
+ (e: MouseEvent) => {
16
+ e.preventDefault()
17
+ e.stopPropagation()
18
+ return false
19
+ },
20
+ true
21
+ )
22
+ },
23
+ })
24
+ })