sprof 0.1.0

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 (357) hide show
  1. package/README.md +29 -0
  2. package/package.json +101 -0
  3. package/src/Hooks/Hooks.ts +75 -0
  4. package/src/assets/img/avatar.webp +0 -0
  5. package/src/assets/styles/borders.scss +11 -0
  6. package/src/assets/styles/brandbook.css +227 -0
  7. package/src/assets/styles/colors.scss +42 -0
  8. package/src/assets/styles/fonts.scss +15 -0
  9. package/src/assets/styles/index.css +15 -0
  10. package/src/assets/styles/index.scss +45 -0
  11. package/src/assets/styles/platform/android.css +53 -0
  12. package/src/assets/styles/platform/ios.css +53 -0
  13. package/src/assets/styles/platform/webdesktop.css +72 -0
  14. package/src/assets/styles/platform/webdesktop_old.css +65 -0
  15. package/src/assets/styles/platform/webmobile.css +53 -0
  16. package/src/assets/styles/platform/webtablet.css +53 -0
  17. package/src/assets/styles/reset.scss +28 -0
  18. package/src/assets/styles/shadow.scss +6 -0
  19. package/src/assets/styles/theme/aquaBlueLight.css +162 -0
  20. package/src/assets/styles/theme/blueLight.css +187 -0
  21. package/src/assets/styles/theme/blueLight_test.css +162 -0
  22. package/src/assets/styles/theme/dark.css +286 -0
  23. package/src/assets/styles/theme/light.css +151 -0
  24. package/src/assets/svg/ArrowLeft.svg +5 -0
  25. package/src/assets/svg/ArrowRight.svg +5 -0
  26. package/src/assets/svg/Close.svg +7 -0
  27. package/src/assets/svg/DoubleArrowLeft.svg +5 -0
  28. package/src/assets/svg/DoubleArrowRight.svg +5 -0
  29. package/src/assets/svg/Ellipsis.svg +7 -0
  30. package/src/assets/svg/Filter.svg +10 -0
  31. package/src/assets/svg/Menu.svg +5 -0
  32. package/src/assets/svg/Move.svg +5 -0
  33. package/src/assets/svg/Password.svg +5 -0
  34. package/src/assets/svg/RightMenu.svg +5 -0
  35. package/src/assets/svg/Settings.svg +6 -0
  36. package/src/assets/svg/User.svg +6 -0
  37. package/src/buildLibrary.ts +59 -0
  38. package/src/classes/Auth.ts +63 -0
  39. package/src/classes/AuthButton.ts +64 -0
  40. package/src/classes/AuthForm.ts +114 -0
  41. package/src/classes/AuthModal.ts +32 -0
  42. package/src/classes/AuthStatusesObjects.ts +37 -0
  43. package/src/classes/AuthTokens.ts +43 -0
  44. package/src/classes/AuthUser.ts +53 -0
  45. package/src/classes/CallbackRequest.ts +12 -0
  46. package/src/classes/Chat.ts +18 -0
  47. package/src/classes/ChatMessage.ts +48 -0
  48. package/src/classes/Contact.ts +96 -0
  49. package/src/classes/Cropper.ts +22 -0
  50. package/src/classes/DateHelper.ts +29 -0
  51. package/src/classes/Email.ts +18 -0
  52. package/src/classes/EmailField.ts +42 -0
  53. package/src/classes/EmailRules.ts +4 -0
  54. package/src/classes/FTSPPreset.ts +16 -0
  55. package/src/classes/FileInfo.ts +86 -0
  56. package/src/classes/HttpResponse.ts +22 -0
  57. package/src/classes/Human.ts +106 -0
  58. package/src/classes/LabelValue.ts +11 -0
  59. package/src/classes/LocalStore.ts +22 -0
  60. package/src/classes/M2M.ts +25 -0
  61. package/src/classes/Menu.ts +102 -0
  62. package/src/classes/PageSectionImage.ts +19 -0
  63. package/src/classes/PasswordField.ts +39 -0
  64. package/src/classes/PasswordRepeatField.ts +37 -0
  65. package/src/classes/Phone.ts +17 -0
  66. package/src/classes/PostAddress.ts +11 -0
  67. package/src/classes/PostAddressRules.ts +1 -0
  68. package/src/classes/Role.ts +13 -0
  69. package/src/classes/Schema.ts +13 -0
  70. package/src/classes/SchemaField.ts +10 -0
  71. package/src/classes/SearchElement.ts +18 -0
  72. package/src/classes/SearchElementMeta.ts +10 -0
  73. package/src/classes/SearchGroup.ts +25 -0
  74. package/src/classes/SearchGroupMetaColumn.ts +11 -0
  75. package/src/classes/SearchModel.ts +61 -0
  76. package/src/classes/SortModel.ts +57 -0
  77. package/src/classes/SubMenu.ts +56 -0
  78. package/src/classes/TelephoneNumberRules.ts +9 -0
  79. package/src/classes/User.ts +17 -0
  80. package/src/classes/UserAccount.ts +17 -0
  81. package/src/classes/UserService.ts +20 -0
  82. package/src/classes/ValidationRules.ts +15 -0
  83. package/src/classes/ValueType.ts +69 -0
  84. package/src/classes/Website.ts +11 -0
  85. package/src/classes/WebsiteRules.ts +4 -0
  86. package/src/classes/admin/AdminButtonParams.ts +27 -0
  87. package/src/classes/admin/AdminHeaderParams.ts +34 -0
  88. package/src/classes/calendar/Calendar.ts +168 -0
  89. package/src/classes/calendar/Day.ts +15 -0
  90. package/src/classes/calendar/Month.ts +144 -0
  91. package/src/classes/calendar/Week.ts +44 -0
  92. package/src/classes/calendar/Year.ts +130 -0
  93. package/src/classes/filters/Cursor.ts +43 -0
  94. package/src/classes/filters/FTSP.ts +99 -0
  95. package/src/classes/filters/FilterModel.ts +263 -0
  96. package/src/classes/filters/FilterQuery.ts +187 -0
  97. package/src/classes/filters/OperatorsOptions.ts +8 -0
  98. package/src/classes/filters/OperatorsTextOptions.ts +3 -0
  99. package/src/classes/filters/Pagination.ts +78 -0
  100. package/src/classes/filters/SelectFilter.ts +15 -0
  101. package/src/classes/filters/TreeModel.ts +14 -0
  102. package/src/classes/page/CustomSection.ts +24 -0
  103. package/src/classes/page/Page.ts +160 -0
  104. package/src/classes/page/PageDocument.ts +27 -0
  105. package/src/classes/page/PageImage.ts +15 -0
  106. package/src/classes/page/PageSection.ts +82 -0
  107. package/src/classes/page/PageSectionDocument.ts +56 -0
  108. package/src/classes/page/PageSideMenu.ts +74 -0
  109. package/src/components/AdaptiveContainer.vue +154 -0
  110. package/src/components/AdaptiveContainerHorizontal.vue +173 -0
  111. package/src/components/AdminGallery.vue +238 -0
  112. package/src/components/AuthModal.vue +16 -0
  113. package/src/components/CarouselImages.vue +434 -0
  114. package/src/components/ContactForm.vue +219 -0
  115. package/src/components/ContextWindow.vue +48 -0
  116. package/src/components/DateInputRange.vue +66 -0
  117. package/src/components/DateInputRange_v2.vue +25 -0
  118. package/src/components/DropList.vue +55 -0
  119. package/src/components/Edit.svg +10 -0
  120. package/src/components/EmailForm.vue +180 -0
  121. package/src/components/FTSPPanel.vue +379 -0
  122. package/src/components/FilterCheckbox.vue +73 -0
  123. package/src/components/FilterSelect.vue +104 -0
  124. package/src/components/FiltersButtonsSelect.vue +126 -0
  125. package/src/components/GeneralItem.vue +172 -0
  126. package/src/components/GridContainer.vue +66 -0
  127. package/src/components/Icons/Filter/IconDownload.vue +55 -0
  128. package/src/components/Icons/Filter/IconFilter.vue +55 -0
  129. package/src/components/Icons/IconArrowLeft.vue +36 -0
  130. package/src/components/Icons/IconCheckDefault.vue +41 -0
  131. package/src/components/Icons/IconClose.vue +37 -0
  132. package/src/components/Icons/IconEdit.vue +40 -0
  133. package/src/components/Icons/IconEmail.vue +36 -0
  134. package/src/components/Icons/IconMove.vue +53 -0
  135. package/src/components/Icons/IconPhone.vue +36 -0
  136. package/src/components/Icons/IconSearch.vue +47 -0
  137. package/src/components/Icons/IconSelectArrow.vue +41 -0
  138. package/src/components/Icons/Pagination/ArrowLeft.vue +52 -0
  139. package/src/components/Icons/Pagination/ArrowRight.vue +52 -0
  140. package/src/components/Icons/Pagination/DoubleArrowLeft.vue +52 -0
  141. package/src/components/Icons/Pagination/DoubleArrowRight.vue +52 -0
  142. package/src/components/Icons/Pagination/EllipsisSvg.vue +58 -0
  143. package/src/components/ImageCropper.vue +203 -0
  144. package/src/components/InfoItem.vue +294 -0
  145. package/src/components/InfoItemSelectButtons.vue +43 -0
  146. package/src/components/LeftRightContainer.vue +93 -0
  147. package/src/components/MessageBody.vue +45 -0
  148. package/src/components/PAutocomplete.vue +93 -0
  149. package/src/components/PDialog.vue +77 -0
  150. package/src/components/PLoader.vue +68 -0
  151. package/src/components/PNotification.vue +79 -0
  152. package/src/components/PPagination.vue +174 -0
  153. package/src/components/PhoneForm.vue +180 -0
  154. package/src/components/RSContainer.vue +262 -0
  155. package/src/components/RemoteSearch.vue +156 -0
  156. package/src/components/ResearcheContainer.vue +71 -0
  157. package/src/components/RightSliderContainer.vue +181 -0
  158. package/src/components/RightTabsContainer.vue +210 -0
  159. package/src/components/SelectValueType.vue +39 -0
  160. package/src/components/SingleNameToggleForm.vue +399 -0
  161. package/src/components/SortList.vue +101 -0
  162. package/src/components/SortSelect.vue +93 -0
  163. package/src/components/SvgIcon.vue +25 -0
  164. package/src/components/Switch3Pos.vue +173 -0
  165. package/src/components/ThemeWrapper.vue +19 -0
  166. package/src/components/ToggleInfoItem.vue +296 -0
  167. package/src/components/TopSliderContainer.vue +166 -0
  168. package/src/components/UploaderImage.vue +268 -0
  169. package/src/components/atoms/PButton/PButton.stories.ts +44 -0
  170. package/src/components/atoms/PButton/PButton.test.ts +66 -0
  171. package/src/components/atoms/PButton/PButton.vue +54 -0
  172. package/src/components/atoms/PButton/skins/p-button_base.css +131 -0
  173. package/src/components/atoms/PButton/skins/p-button_filter.scss +83 -0
  174. package/src/components/atoms/PButton/skins/p-button_icon.scss +78 -0
  175. package/src/components/atoms/PButton/skins/p-button_pag.css +44 -0
  176. package/src/components/atoms/PButton/skins/p-button_text.css +88 -0
  177. package/src/components/atoms/PButton/skins/p-button_text_ano.css +88 -0
  178. package/src/components/atoms/PCheckbox/PCheckBox.test.ts +107 -0
  179. package/src/components/atoms/PCheckbox/PCheckBox.vue +92 -0
  180. package/src/components/atoms/PDatePicker/PDatePicker.test.ts +63 -0
  181. package/src/components/atoms/PDatePicker/PDatePicker.vue +141 -0
  182. package/src/components/atoms/PFlex/PFlex.test.ts +41 -0
  183. package/src/components/atoms/PFlex/PFlex.vue +46 -0
  184. package/src/components/atoms/PInput/PInput.stories.ts +40 -0
  185. package/src/components/atoms/PInput/PInput.test.ts +92 -0
  186. package/src/components/atoms/PInput/PInput.vue +133 -0
  187. package/src/components/atoms/PInputDate/PInputDate.test.ts +55 -0
  188. package/src/components/atoms/PInputDate/PInputDate.vue +79 -0
  189. package/src/components/atoms/PInputNumber/PInputNumber.vue +175 -0
  190. package/src/components/atoms/PLeftSlider/PLeftSlider.test.ts +121 -0
  191. package/src/components/atoms/PLeftSlider/PLeftSlider.vue +139 -0
  192. package/src/components/atoms/PList/PList.test.ts +32 -0
  193. package/src/components/atoms/PList/PList.vue +27 -0
  194. package/src/components/atoms/PListItem/PListItem.test.ts +61 -0
  195. package/src/components/atoms/PListItem/PListItem.vue +51 -0
  196. package/src/components/atoms/PRadio/PRadio.test.ts +110 -0
  197. package/src/components/atoms/PRadio/PRadio.vue +97 -0
  198. package/src/components/atoms/PRightSlider/PRightSlider.test.ts +123 -0
  199. package/src/components/atoms/PRightSlider/PRightSlider.vue +149 -0
  200. package/src/components/atoms/PSelect/PSelect.test.ts +74 -0
  201. package/src/components/atoms/PSelect/PSelect.vue +192 -0
  202. package/src/components/atoms/PSelect/select-arrow-down.svg +4 -0
  203. package/src/components/atoms/PSticky/PSticky.test.ts +70 -0
  204. package/src/components/atoms/PSticky/PSticky.vue +37 -0
  205. package/src/components/atoms/PString/PString.test.ts +58 -0
  206. package/src/components/atoms/PString/PString.vue +58 -0
  207. package/src/components/atoms/PTextarea/PTextarea.stories.ts +40 -0
  208. package/src/components/atoms/PTextarea/PTextarea.test.ts +22 -0
  209. package/src/components/atoms/PTextarea/PTextarea.vue +123 -0
  210. package/src/components/atoms/PTopSlider/PTopSlider.test.ts +95 -0
  211. package/src/components/atoms/PTopSlider/PTopSlider.vue +164 -0
  212. package/src/components/molecules/Collapse/CollapseContainer.vue +36 -0
  213. package/src/components/molecules/Collapse/CollapseItem.vue +295 -0
  214. package/src/components/molecules/Collapse/VerticalCollapseContainer.vue +102 -0
  215. package/src/components/molecules/PAdd/PAdd.vue +65 -0
  216. package/src/components/molecules/PAdd/PContainer.vue +65 -0
  217. package/src/components/molecules/PAdd/PContainerStickyHead.vue +51 -0
  218. package/src/components/molecules/PDel/PDel.vue +74 -0
  219. package/src/components/organisms/AuthForm.vue +219 -0
  220. package/src/components/organisms/PModal.vue +113 -0
  221. package/src/components/organisms/PTabs/ITab.ts +5 -0
  222. package/src/components/organisms/PTabs/PTabs.vue +190 -0
  223. package/src/components/organisms/UploaderFile/UploaderFile.test.ts +23 -0
  224. package/src/components/organisms/UploaderFile/UploaderFile.vue +202 -0
  225. package/src/components/pages/AuthPage.vue +22 -0
  226. package/src/components/pages/PageNotFound.vue +7 -0
  227. package/src/index.ts +206 -0
  228. package/src/interfaces/AdminLayout.ts +4 -0
  229. package/src/interfaces/Animations.ts +5 -0
  230. package/src/interfaces/AuthStatuses.ts +8 -0
  231. package/src/interfaces/CalendarScale.ts +6 -0
  232. package/src/interfaces/Callback.ts +2 -0
  233. package/src/interfaces/Class.ts +3 -0
  234. package/src/interfaces/DataTypes.ts +8 -0
  235. package/src/interfaces/Filter.ts +3 -0
  236. package/src/interfaces/IAdminMenu.ts +9 -0
  237. package/src/interfaces/IAuthInfo.ts +0 -0
  238. package/src/interfaces/ICursor.ts +14 -0
  239. package/src/interfaces/IEmailPassword.ts +4 -0
  240. package/src/interfaces/IFIlesList.ts +4 -0
  241. package/src/interfaces/IFile.ts +7 -0
  242. package/src/interfaces/IFileAnchor.ts +4 -0
  243. package/src/interfaces/IFileInfo.ts +22 -0
  244. package/src/interfaces/IFileInfosGetter.ts +5 -0
  245. package/src/interfaces/IFiler.ts +7 -0
  246. package/src/interfaces/IFilter.ts +4 -0
  247. package/src/interfaces/IFilterQuery.ts +24 -0
  248. package/src/interfaces/IForm.ts +5 -0
  249. package/src/interfaces/IHTTPTypes.ts +19 -0
  250. package/src/interfaces/IMessage.ts +5 -0
  251. package/src/interfaces/IOption.ts +4 -0
  252. package/src/interfaces/IOrdered.ts +4 -0
  253. package/src/interfaces/IPagination.ts +15 -0
  254. package/src/interfaces/ISearchElement.ts +6 -0
  255. package/src/interfaces/ISearchObject.ts +6 -0
  256. package/src/interfaces/ISearchQuery.ts +4 -0
  257. package/src/interfaces/ISelectFilter.ts +6 -0
  258. package/src/interfaces/ISortModel.ts +18 -0
  259. package/src/interfaces/IStorePaginator.ts +4 -0
  260. package/src/interfaces/ISupposedTimePeriod.ts +4 -0
  261. package/src/interfaces/ITimePeriod.ts +4 -0
  262. package/src/interfaces/ITokens.ts +4 -0
  263. package/src/interfaces/IWithId.ts +3 -0
  264. package/src/interfaces/IWithImage.ts +9 -0
  265. package/src/interfaces/IWithName.ts +4 -0
  266. package/src/interfaces/IWithSupposedTimePeriod.ts +4 -0
  267. package/src/interfaces/ItemsWithCount.ts +4 -0
  268. package/src/interfaces/LocalStoreKeys.ts +7 -0
  269. package/src/interfaces/Operators.ts +11 -0
  270. package/src/interfaces/Orders.ts +4 -0
  271. package/src/interfaces/RoleName.ts +4 -0
  272. package/src/interfaces/SocialTypes.ts +6 -0
  273. package/src/interfaces/Sort.ts +9 -0
  274. package/src/interfaces/ValueRelation.ts +7 -0
  275. package/src/interfaces/canvas/ICanvas.ts +3 -0
  276. package/src/interfaces/canvas/ICanvasResult.ts +7 -0
  277. package/src/interfaces/canvas/ICoordinates.ts +6 -0
  278. package/src/interfaces/types.ts +3 -0
  279. package/src/services/AdminHead.ts +32 -0
  280. package/src/services/AdminSideMenu.ts +52 -0
  281. package/src/services/AdminUI.ts +9 -0
  282. package/src/services/Arrays.ts +65 -0
  283. package/src/services/Axios.ts +64 -0
  284. package/src/services/BaseRoutes.ts +21 -0
  285. package/src/services/BaseStore.ts +220 -0
  286. package/src/services/Button.ts +42 -0
  287. package/src/services/Cache.ts +44 -0
  288. package/src/services/CacheS.ts +44 -0
  289. package/src/services/CarouselSwipe.ts +14 -0
  290. package/src/services/ClassHelper.ts +101 -0
  291. package/src/services/Color.ts +8 -0
  292. package/src/services/CreateSortModels.ts +26 -0
  293. package/src/services/Cursor.ts +51 -0
  294. package/src/services/DateFormat.ts +102 -0
  295. package/src/services/DateMask.ts +69 -0
  296. package/src/services/Dates.ts +41 -0
  297. package/src/services/DatesFormatter.ts +45 -0
  298. package/src/services/Dialog.ts +70 -0
  299. package/src/services/Dragger.ts +22 -0
  300. package/src/services/Extension.ts +6 -0
  301. package/src/services/Favourite.ts +62 -0
  302. package/src/services/HttpClient.ts +199 -0
  303. package/src/services/HttpClientS.ts +188 -0
  304. package/src/services/HttpError.ts +58 -0
  305. package/src/services/Loading.ts +14 -0
  306. package/src/services/MakeCarousel.ts +10 -0
  307. package/src/services/Menu.ts +102 -0
  308. package/src/services/Message.ts +66 -0
  309. package/src/services/Notification.ts +37 -0
  310. package/src/services/PHelp.ts +20 -0
  311. package/src/services/Paginator.ts +22 -0
  312. package/src/services/Period.ts +29 -0
  313. package/src/services/PhoneService.ts +46 -0
  314. package/src/services/Router.ts +85 -0
  315. package/src/services/RouterGuard.ts +15 -0
  316. package/src/services/Scheduler.ts +66 -0
  317. package/src/services/Scroll.ts +19 -0
  318. package/src/services/SortList.ts +44 -0
  319. package/src/services/Sorter.ts +6 -0
  320. package/src/services/Strings.test.ts +30 -0
  321. package/src/services/Strings.ts +138 -0
  322. package/src/services/Time.ts +124 -0
  323. package/src/services/Timer.ts +13 -0
  324. package/src/services/Token.ts +71 -0
  325. package/src/services/Visible.ts +16 -0
  326. package/src/services/WaitElement.ts +19 -0
  327. package/src/services/WebSocketClient.ts +62 -0
  328. package/src/services/brandColors.ts +5 -0
  329. package/src/services/buildNameNumbers.ts +8 -0
  330. package/src/services/countRating.ts +12 -0
  331. package/src/services/index.ts +105 -0
  332. package/src/services/indexNames.ts +55 -0
  333. package/src/services/moves.ts +17 -0
  334. package/src/services/useConfirmLeavePage.ts +52 -0
  335. package/src/services/validate.ts +22 -0
  336. package/src/store/AuthStore.ts +58 -0
  337. package/src/store/ContactsStore.ts +11 -0
  338. package/src/store/CropperStore.ts +20 -0
  339. package/src/store/EmailsStore.ts +11 -0
  340. package/src/store/FTSPPresetsStore.ts +11 -0
  341. package/src/store/FileInfosStore.ts +11 -0
  342. package/src/store/HumansStore.ts +11 -0
  343. package/src/store/MenusStore.ts +11 -0
  344. package/src/store/PhonesStore.ts +11 -0
  345. package/src/store/SchemasStore.ts +11 -0
  346. package/src/store/SearchStore.ts +65 -0
  347. package/src/store/ServicesStores.ts +29 -0
  348. package/src/store/ServicesStoresNames.ts +17 -0
  349. package/src/store/UserAccountsStore.ts +11 -0
  350. package/src/store/ValueTypesStore.ts +11 -0
  351. package/src/tsconfig.build-lib.json +30 -0
  352. package/src/types/AuthInfo.ts +6 -0
  353. package/src/types/HttpHeaders.ts +12 -0
  354. package/src/types/HttpMethods.ts +6 -0
  355. package/src/types/Sizes.ts +7 -0
  356. package/src/types/Statuses.ts +9 -0
  357. package/src/types/ValueTypes.ts +16 -0
@@ -0,0 +1,69 @@
1
+ const isRemove = (n: number) => n === 8 || n === 46;
2
+ const isDigit = (n: number) => n > 46 && n < 58;
3
+ const isNavigate = (n: number) => n > 34 && n < 41;
4
+ // const isSpace = (n: number) => n === 47;
5
+ const addDot = (val: string) => val + '.';
6
+
7
+ const checkInvalidKey = (e: KeyboardEvent, code: number, len: number) => {
8
+ if (isRemove(code) || isNavigate(code)) {
9
+ return;
10
+ }
11
+ if (!isDigit(code) || len > 9) {
12
+ e.preventDefault();
13
+ }
14
+ };
15
+
16
+ function replaceDots(val: string, len: number): string {
17
+ if (len > 8) {
18
+ let day = val.substring(0, 2).replace('.', '1');
19
+ if (Number(day) > 31) {
20
+ day = '31';
21
+ }
22
+ let month = val.substring(3, 5).replace('.', '1');
23
+ if (Number(month) > 12) {
24
+ month = '12';
25
+ }
26
+ let year = val.substring(6, 10).replace('.', '1');
27
+ if (Number(year) > 2100) {
28
+ year = '2100';
29
+ }
30
+ val = day + '.' + month + '.' + year;
31
+ }
32
+ return val;
33
+ }
34
+
35
+ export default function dateFormat(e: KeyboardEvent): void {
36
+ const code = e.keyCode;
37
+ let val = (<HTMLInputElement>e.srcElement).value;
38
+ const len = val.length;
39
+ checkInvalidKey(e, code, len);
40
+ if (!isRemove(code) && (len === 2 || len === 5)) {
41
+ val = addDot(val);
42
+ }
43
+
44
+ const allValue = (<HTMLInputElement>e.srcElement).value + String.fromCharCode(e.which);
45
+ if (isRemove(code)) {
46
+ (<HTMLInputElement>e.srcElement).value = val;
47
+ return;
48
+ }
49
+
50
+ if (val.length === 0 && Number(allValue) > 3) {
51
+ val = '3';
52
+ e.preventDefault();
53
+ }
54
+
55
+ if (val.length === 1 && Number(allValue) > 31) {
56
+ val = '31';
57
+ e.preventDefault();
58
+ }
59
+
60
+ if (allValue.length === 5) {
61
+ const month = Number(allValue.substring(3, 5));
62
+ if (month > 12) {
63
+ val = val.substring(0, 3) + '12';
64
+ e.preventDefault();
65
+ }
66
+ }
67
+ val = replaceDots(val, len);
68
+ (<HTMLInputElement>e.srcElement).value = val;
69
+ }
@@ -0,0 +1,41 @@
1
+ import DatesFormatter from './DatesFormatter';
2
+ import Period from './Period';
3
+
4
+ // const SetDays = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
5
+ // const SetDaysMobile = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС'];
6
+ // const SetShortDays = ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'];
7
+
8
+ interface IWithDate {
9
+ date: Date;
10
+ }
11
+
12
+ export default abstract class Dates {
13
+ static GetPeriod(start: Date, end: Date): string {
14
+ return Period.Get(DatesFormatter.Format(start), DatesFormatter.Format(end));
15
+ }
16
+ static GetDateOrToday(item?: IWithDate): Date {
17
+ return item ? item.date : new Date();
18
+ }
19
+ static InPeriod(date: Date, start: Date, end: Date): boolean {
20
+ return Period.In(new Date(date), new Date(start), new Date(end));
21
+ }
22
+ static GetDatesFromPeriod(start: Date, end: Date): Date[] {
23
+ const dates: Date[] = [new Date(start)];
24
+ let curDate = start;
25
+ while (curDate <= end) {
26
+ curDate = Dates.AddDays(curDate, 1);
27
+ dates.push(curDate);
28
+ }
29
+ return dates;
30
+ }
31
+
32
+ static AddDays(date: Date, days: number): Date {
33
+ const res = new Date(date);
34
+ res.setDate(res.getDate() + days);
35
+ return res;
36
+ }
37
+
38
+ static Eq(d1: Date, d2: Date): boolean {
39
+ return d1.getTime() === d2.getTime();
40
+ }
41
+ }
@@ -0,0 +1,45 @@
1
+ // const SetDays = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
2
+ // const SetDaysMobile = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС'];
3
+ // const SetShortDays = ['ВС', 'ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ'];
4
+
5
+ interface CustomDateTimeFormatOptions {
6
+ localeMatcher?: string;
7
+ weekday?: 'narrow' | 'short' | 'long';
8
+ era?: string;
9
+ year?: 'numeric' | '2-digit' | undefined;
10
+ month?: 'numeric' | '2-digit' | 'narrow' | 'short' | 'long';
11
+ day?: 'numeric' | '2-digit' | undefined;
12
+ hour?: 'numeric' | '2-digit';
13
+ minute?: 'numeric' | '2-digit';
14
+ second?: string;
15
+ timeZoneName?: string;
16
+ formatMatcher?: string;
17
+ hour12?: boolean;
18
+ timeZone?: string;
19
+ }
20
+
21
+ const locale = 'ru-RU';
22
+ export default abstract class DatesFormatter {
23
+ locale = 'ru-RU';
24
+
25
+ static Format(date?: Date, options?: CustomDateTimeFormatOptions): string {
26
+ if (!date) {
27
+ return '';
28
+ }
29
+ const opt: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit', hour: undefined, minute: undefined };
30
+ if (options) {
31
+ opt.year = options.year || options.year === undefined ? options.year : opt.year;
32
+ opt.month = options.month || options.month === undefined ? options.month : opt.month;
33
+ opt.day = options.day || options.day === undefined ? options.day : opt.day;
34
+ opt.hour = options.hour ?? opt.hour;
35
+ opt.minute = options.minute ?? opt.minute;
36
+ }
37
+ return Intl.DateTimeFormat(locale, opt).format(new Date(date));
38
+ }
39
+
40
+ static FromRuStr(value: string): Date {
41
+ const parts = value.split('.');
42
+ const date = new Date(`${parts[2]}-${parts[1]}-${parts[0]}`);
43
+ return date;
44
+ }
45
+ }
@@ -0,0 +1,70 @@
1
+ import Message, { MessageOpts } from './Message';
2
+
3
+ type DialogResultType = 'cancel' | 'submit';
4
+ interface DialogResult {
5
+ type: DialogResultType;
6
+ // eslint-disable-next-line
7
+ [key: string]: any;
8
+ }
9
+
10
+ type DialogOpts = MessageOpts & {
11
+ text: string;
12
+ confirmButtonText: string;
13
+ cancelButtonText: string;
14
+ };
15
+
16
+ class DialogConstructor extends Message {
17
+ private confirmButtonText = 'Да';
18
+ private cancelButtonText = 'Нет';
19
+
20
+ // eslint-disable-next-line
21
+ private resolve?: any;
22
+ // eslint-disable-next-line
23
+ private reject?: any;
24
+
25
+ GetConfirmButtonText(): string {
26
+ return this.confirmButtonText;
27
+ }
28
+
29
+ GetCancelButtonText(): string {
30
+ return this.cancelButtonText;
31
+ }
32
+
33
+ Show(m: string | DialogOpts): Promise<DialogResult> {
34
+ super.show();
35
+ if (typeof m !== 'string') {
36
+ this.confirmButtonText = m.confirmButtonText;
37
+ this.cancelButtonText = m.cancelButtonText;
38
+ }
39
+ return new Promise<DialogResult>((resolve, reject) => {
40
+ this.resolve = resolve;
41
+ this.reject = reject;
42
+ });
43
+ }
44
+
45
+ Save(): Promise<DialogResult> {
46
+ return this.Show({
47
+ text: 'У вас есть несохранённые изменения',
48
+ confirmButtonText: 'Сохранить',
49
+ cancelButtonText: 'Не сохранять',
50
+ });
51
+ }
52
+
53
+ Submit() {
54
+ this.resolve(true);
55
+ this.hide();
56
+ }
57
+ Cancel() {
58
+ this.reject();
59
+ this.hide();
60
+ }
61
+
62
+ protected hide() {
63
+ this.resolve = undefined;
64
+ this.reject = undefined;
65
+ super.hide();
66
+ }
67
+ }
68
+
69
+ const Dialog: DialogConstructor = new DialogConstructor();
70
+ export default Dialog;
@@ -0,0 +1,22 @@
1
+ export default class Dragger {
2
+ private dragged = false;
3
+ private dragImg = new Image();
4
+
5
+ constructor() {
6
+ this.dragImg.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
7
+ }
8
+
9
+ start(e?: DragEvent): void {
10
+ this.dragged = true;
11
+ if (e && e.dataTransfer) {
12
+ e.dataTransfer.setDragImage(this.dragImg, 0, 0);
13
+ }
14
+ }
15
+
16
+ end(): void {
17
+ this.dragged = false;
18
+ }
19
+ isDragged(): boolean {
20
+ return this.dragged;
21
+ }
22
+ }
@@ -0,0 +1,6 @@
1
+ export default class Extenstion {
2
+ static Get(filename: string): string {
3
+ const parts = filename.split('.');
4
+ return parts[parts.length - 1];
5
+ }
6
+ }
@@ -0,0 +1,62 @@
1
+ const FavouriteService = (() => {
2
+ function _setFavourite(domain: string, id: (string | undefined)[]) {
3
+ localStorage.setItem(`${domain}_favourite`, id.toString());
4
+ }
5
+
6
+ function _isFavourite(domain: string, id: string): boolean {
7
+ const ids = localStorage.getItem(`${domain}_favourite`);
8
+ if (!ids) {
9
+ return false;
10
+ }
11
+ const idArr = ids.split(',');
12
+ return idArr.includes(id);
13
+ }
14
+
15
+ function _addToFavourite(domain: string, id: string) {
16
+ const ids = localStorage.getItem(`${domain}_favourite`);
17
+ if (!ids) {
18
+ _setFavourite(domain, [id]);
19
+ return;
20
+ }
21
+ const idArr = ids!.split(',');
22
+ idArr.push(id);
23
+ _setFavourite(domain, idArr);
24
+ }
25
+
26
+ function _removeFromFavourite(domain: string, id: string) {
27
+ const ids = localStorage.getItem(`${domain}_favourite`);
28
+ if (!ids) {
29
+ return;
30
+ }
31
+ const idArr = ids.split(',').filter((i: string) => i !== id);
32
+ _setFavourite(domain, idArr);
33
+ }
34
+
35
+ function _clearFavourite() {
36
+ for (const key in localStorage) {
37
+ if (key.includes('_favourite')) {
38
+ localStorage.removeItem(key);
39
+ }
40
+ }
41
+ }
42
+ // function _getAccessToken() {
43
+ // return localStorage.getItem('access_token');
44
+ // }
45
+ // function _getRefreshToken() {
46
+ // return localStorage.getItem('refresh_token');
47
+ // }
48
+ // function _clearTokens() {
49
+ // localStorage.removeItem('access_token');
50
+ // localStorage.removeItem('refresh_token');
51
+ // }
52
+
53
+ return {
54
+ addToFavourite: _addToFavourite,
55
+ removeFromFavourite: _removeFromFavourite,
56
+ setFavourite: _setFavourite,
57
+ isFavourite: _isFavourite,
58
+ clearFavourite: _clearFavourite,
59
+ };
60
+ })();
61
+
62
+ export default FavouriteService;
@@ -0,0 +1,199 @@
1
+ import HttpEngine from "@/services/Axios";
2
+ import FileInfo from "@/services/classes/FileInfo";
3
+ import {
4
+ IBodilessParams,
5
+ IBodyfulParams,
6
+ } from "@/services/interfaces/IHTTPTypes";
7
+
8
+ import LocalStore from "../classes/LocalStore";
9
+ import LocalStoreKeys from "../interfaces/LocalStoreKeys";
10
+ import HttpHeaders, {
11
+ HttpHeadersKeys,
12
+ HttpHeadersValues,
13
+ } from "../types/HttpHeaders";
14
+
15
+ const baseUrl = import.meta.env.VITE_APP_BASE_URL ?? "";
16
+ const apiVersion = import.meta.env.VITE_APP_API_V1 ?? "";
17
+ const apiHost = import.meta.env.VITE_APP_API_HOST ?? "";
18
+
19
+ export default class HttpClient {
20
+ endpoint: string;
21
+ headers: HttpHeaders;
22
+
23
+ constructor(endpoint = "") {
24
+ this.endpoint = endpoint;
25
+ this.headers = {
26
+ [HttpHeadersKeys.ContentType]: HttpHeadersValues.ApplicationJson,
27
+ };
28
+ }
29
+
30
+ newWebSocket(query: string): WebSocket {
31
+ const url =
32
+ apiHost.replace("http", "ws") + "/ws" + "/" + this.endpoint + "/" + query;
33
+ return new WebSocket(url);
34
+ }
35
+
36
+ private static download(clientFileName: string | undefined, res: unknown) {
37
+ const fileName = HttpClient.getDownloadFileName(
38
+ clientFileName,
39
+ res.headers
40
+ );
41
+ const url = URL.createObjectURL(res.data);
42
+
43
+ const link = document.createElement("a");
44
+ link.href = url;
45
+ link.setAttribute("download", fileName);
46
+ link.setAttribute("target", "_blank");
47
+ document.body.appendChild(link);
48
+ link.click();
49
+ }
50
+
51
+ // eslint-disable-next-line
52
+ private static getDownloadFileName(
53
+ clientFileName: string | undefined,
54
+ headers: any
55
+ ): string {
56
+ if (clientFileName) {
57
+ return clientFileName;
58
+ }
59
+ const headerLine = headers["content-disposition"];
60
+ const startFileNameIndex = headerLine.indexOf('"') + 1;
61
+ const endFileNameIndex = headerLine.lastIndexOf('"');
62
+ const serverFileName = headerLine.substring(
63
+ startFileNameIndex,
64
+ endFileNameIndex
65
+ );
66
+
67
+ if (serverFileName) {
68
+ return serverFileName;
69
+ }
70
+ return "file";
71
+ }
72
+
73
+ private getHeaders(headers?: HttpHeaders): HttpHeaders {
74
+ const token = LocalStore.Get<string>(LocalStoreKeys.AccessToken);
75
+ if (!headers) {
76
+ headers = this.headers;
77
+ }
78
+ if (token) {
79
+ headers[HttpHeadersKeys.Token] = token;
80
+ }
81
+ return headers ?? this.headers;
82
+ }
83
+
84
+ private returnResponse<ReturnType, PayloadType>(
85
+ params: IBodilessParams | IBodyfulParams<PayloadType> | undefined,
86
+ res: unknown
87
+ ): ReturnType | void {
88
+ if (!res) {
89
+ return;
90
+ }
91
+ return params?.isBlob
92
+ ? HttpClient.download(params.downloadFileName, res)
93
+ : res.data;
94
+ }
95
+
96
+ async get<ReturnType>(params?: IBodilessParams): Promise<ReturnType | void> {
97
+ return this.returnResponse(
98
+ params,
99
+ await HttpEngine.Get(
100
+ this.buildUrl(params?.query),
101
+ this.getHeaders(params?.headers),
102
+ this.getResponseType(params?.isBlob)
103
+ )
104
+ );
105
+ }
106
+
107
+ async post<PayloadType, ReturnType>(
108
+ params: IBodyfulParams<PayloadType>
109
+ ): Promise<ReturnType | void> {
110
+ return this.returnResponse(
111
+ params,
112
+ await HttpEngine.Post(
113
+ this.buildUrl(params?.query),
114
+ this.getHeaders(params?.headers),
115
+ this.getResponseType(params.isBlob),
116
+ this.createFormDataPayload<PayloadType>(
117
+ params?.payload,
118
+ params?.fileInfos
119
+ )
120
+ )
121
+ );
122
+ }
123
+
124
+ async put<PayloadType, ReturnType>(
125
+ params: IBodyfulParams<PayloadType>
126
+ ): Promise<ReturnType | void> {
127
+ return this.returnResponse(
128
+ params,
129
+ await HttpEngine.Put(
130
+ this.buildUrl(params?.query),
131
+ this.getHeaders(params?.headers),
132
+ this.createFormDataPayload<PayloadType>(
133
+ params?.payload,
134
+ params?.fileInfos
135
+ )
136
+ )
137
+ );
138
+ }
139
+
140
+ async delete<PayloadType, ReturnType>(
141
+ params: IBodyfulParams<PayloadType>
142
+ ): Promise<ReturnType | void> {
143
+ return this.returnResponse(
144
+ params,
145
+ await HttpEngine.Delete(
146
+ this.buildUrl(params?.query),
147
+ this.getHeaders(params?.headers),
148
+ this.createFormDataPayload<PayloadType>(
149
+ params?.payload,
150
+ params?.fileInfos
151
+ )
152
+ )
153
+ );
154
+ }
155
+
156
+ async subscribe<PayloadType>(
157
+ params: IBodyfulParams<PayloadType>
158
+ ): Promise<EventSource> {
159
+ const { query } = params;
160
+
161
+ const source = new EventSource(this.buildUrl(query));
162
+ return source;
163
+ }
164
+
165
+ private buildUrl(query?: string): string {
166
+ if (query) {
167
+ const queryString = query ?? "";
168
+ return this.endpoint.length <= 0
169
+ ? baseUrl + apiVersion + queryString
170
+ : baseUrl + apiVersion + this.endpoint + "/" + queryString;
171
+ }
172
+ return baseUrl + apiVersion + this.endpoint;
173
+ }
174
+
175
+ private getResponseType(blob?: boolean): "blob" | "json" {
176
+ return blob ? "blob" : "json";
177
+ }
178
+
179
+ private createFormDataPayload<PayloadType>(
180
+ payload?: PayloadType,
181
+ fileInfos?: FileInfo[]
182
+ ): FormData {
183
+ const data = new FormData();
184
+ data.append("form", JSON.stringify(payload));
185
+
186
+ if (fileInfos) {
187
+ for (const fileInfo of fileInfos) {
188
+ if (fileInfo.file) {
189
+ data.append(
190
+ fileInfo.id ?? "files",
191
+ fileInfo.file,
192
+ fileInfo.originalName
193
+ );
194
+ }
195
+ }
196
+ }
197
+ return data;
198
+ }
199
+ }
@@ -0,0 +1,188 @@
1
+ import HttpEngine from "@/services/Axios";
2
+ import FileInfo from "@/services/classes/FileInfo";
3
+ import {
4
+ IBodilessParams,
5
+ IBodyfulParams,
6
+ } from "@/services/interfaces/IHTTPTypes";
7
+
8
+ import LocalStore from "../classes/LocalStore";
9
+ import LocalStoreKeys from "../interfaces/LocalStoreKeys";
10
+ import HttpHeaders, {
11
+ HttpHeadersKeys,
12
+ HttpHeadersValues,
13
+ } from "../types/HttpHeaders";
14
+
15
+ const baseUrl = import.meta.env.VITE_APP_BASE_URL ?? "";
16
+ const apiVersion = import.meta.env.VITE_APP_API_V1 ?? "";
17
+ const apiHost = import.meta.env.VITE_APP_API_HOST ?? "";
18
+
19
+ export default abstract class HttpClient {
20
+ static headers: HttpHeaders = {
21
+ [HttpHeadersKeys.ContentType]: HttpHeadersValues.ApplicationJson,
22
+ };
23
+
24
+ newWebSocket(query: string): WebSocket {
25
+ const url = apiHost.replace("http", "ws") + "/ws" + "/" + query;
26
+ return new WebSocket(url);
27
+ }
28
+
29
+ private static download(clientFileName: string | undefined, res: unknown) {
30
+ const fileName = HttpClient.getDownloadFileName(
31
+ clientFileName,
32
+ res.headers
33
+ );
34
+ const url = URL.createObjectURL(res.data);
35
+
36
+ const link = document.createElement("a");
37
+ link.href = url;
38
+ link.setAttribute("download", fileName);
39
+ link.setAttribute("target", "_blank");
40
+ document.body.appendChild(link);
41
+ link.click();
42
+ }
43
+
44
+ // eslint-disable-next-line
45
+ private static getDownloadFileName(
46
+ clientFileName: string | undefined,
47
+ headers: any
48
+ ): string {
49
+ if (clientFileName) {
50
+ return clientFileName;
51
+ }
52
+ const headerLine = headers["content-disposition"];
53
+ const startFileNameIndex = headerLine.indexOf('"') + 1;
54
+ const endFileNameIndex = headerLine.lastIndexOf('"');
55
+ const serverFileName = headerLine.substring(
56
+ startFileNameIndex,
57
+ endFileNameIndex
58
+ );
59
+
60
+ if (serverFileName) {
61
+ return serverFileName;
62
+ }
63
+ return "file";
64
+ }
65
+
66
+ private static getHeaders(headers?: HttpHeaders): HttpHeaders {
67
+ const token = LocalStore.Get<string>(LocalStoreKeys.AccessToken);
68
+ if (!headers) {
69
+ headers = HttpClient.headers;
70
+ }
71
+ if (token) {
72
+ headers[HttpHeadersKeys.Token] = token;
73
+ }
74
+ return headers ?? HttpClient.headers;
75
+ }
76
+
77
+ private static returnResponse<ReturnType, PayloadType>(
78
+ params: IBodilessParams | IBodyfulParams<PayloadType> | undefined,
79
+ res: unknown
80
+ ): ReturnType | void {
81
+ if (!res) {
82
+ return;
83
+ }
84
+ return params?.isBlob
85
+ ? HttpClient.download(params.downloadFileName, res)
86
+ : res.data;
87
+ }
88
+
89
+ static async Get<ReturnType>(
90
+ params?: IBodilessParams
91
+ ): Promise<ReturnType | void> {
92
+ return HttpClient.returnResponse(
93
+ params,
94
+ await HttpEngine.Get(
95
+ HttpClient.buildUrl(params?.query ?? ""),
96
+ HttpClient.getHeaders(params?.headers),
97
+ HttpClient.getResponseType(params?.isBlob)
98
+ )
99
+ );
100
+ }
101
+
102
+ static async Post<PayloadType, ReturnType>(
103
+ params: IBodyfulParams<PayloadType>
104
+ ): Promise<ReturnType | void> {
105
+ return HttpClient.returnResponse(
106
+ params,
107
+ await HttpEngine.Post(
108
+ HttpClient.buildUrl(params?.query),
109
+ HttpClient.getHeaders(params?.headers),
110
+ HttpClient.getResponseType(params.isBlob),
111
+ HttpClient.createFormDataPayload<PayloadType>(
112
+ params?.payload,
113
+ params?.fileInfos
114
+ )
115
+ )
116
+ );
117
+ }
118
+
119
+ static async Put<PayloadType, ReturnType>(
120
+ params: IBodyfulParams<PayloadType>
121
+ ): Promise<ReturnType | void> {
122
+ return HttpClient.returnResponse(
123
+ params,
124
+ await HttpEngine.Put(
125
+ HttpClient.buildUrl(params?.query),
126
+ HttpClient.getHeaders(params?.headers),
127
+ HttpClient.createFormDataPayload<PayloadType>(
128
+ params?.payload,
129
+ params?.fileInfos
130
+ )
131
+ )
132
+ );
133
+ }
134
+
135
+ static async Delete<PayloadType, ReturnType>(
136
+ params: IBodyfulParams<PayloadType>
137
+ ): Promise<ReturnType | void> {
138
+ return HttpClient.returnResponse(
139
+ params,
140
+ await HttpEngine.Delete(
141
+ HttpClient.buildUrl(params?.query),
142
+ HttpClient.getHeaders(params?.headers)
143
+ )
144
+ );
145
+ }
146
+
147
+ static async Subscribe<PayloadType>(
148
+ params: IBodyfulParams<PayloadType>
149
+ ): Promise<EventSource> {
150
+ const { query } = params;
151
+
152
+ const source = new EventSource(HttpClient.buildUrl(query));
153
+ return source;
154
+ }
155
+
156
+ private static buildUrl(query: string): string {
157
+ const queryString = query ?? "";
158
+ return baseUrl + apiVersion + queryString;
159
+ // const queryString = query ? '/' + query : '';
160
+ // return baseUrl + '/' + apiVersion + '/' + queryString;
161
+ }
162
+
163
+ private static getResponseType(blob?: boolean): "blob" | "json" {
164
+ return blob ? "blob" : "json";
165
+ }
166
+
167
+ private static createFormDataPayload<PayloadType>(
168
+ payload?: PayloadType,
169
+ fileInfos?: FileInfo[]
170
+ ): FormData {
171
+ const data = new FormData();
172
+ data.append("form", JSON.stringify(payload));
173
+ console.log(data, payload, fileInfos);
174
+
175
+ if (fileInfos) {
176
+ for (const fileInfo of fileInfos) {
177
+ if (fileInfo.file) {
178
+ data.append(
179
+ fileInfo.id ?? "files",
180
+ fileInfo.file,
181
+ fileInfo.originalName
182
+ );
183
+ }
184
+ }
185
+ }
186
+ return data;
187
+ }
188
+ }