@axelor/aos-mobile-core 0.0.1

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 (361) hide show
  1. package/README.md +310 -0
  2. package/lib/api/attached-files-api.d.ts +8 -0
  3. package/lib/api/attached-files-api.js +51 -0
  4. package/lib/api/attached-files-api.js.map +1 -0
  5. package/lib/api/login-api.d.ts +5 -0
  6. package/lib/api/login-api.js +41 -0
  7. package/lib/api/login-api.js.map +1 -0
  8. package/lib/api/mail-message-api.d.ts +43 -0
  9. package/lib/api/mail-message-api.js +114 -0
  10. package/lib/api/mail-message-api.js.map +1 -0
  11. package/lib/api/menu-config-api.d.ts +5 -0
  12. package/lib/api/menu-config-api.js +68 -0
  13. package/lib/api/menu-config-api.js.map +1 -0
  14. package/lib/api/metafile-api.d.ts +6 -0
  15. package/lib/api/metafile-api.js +50 -0
  16. package/lib/api/metafile-api.js.map +1 -0
  17. package/lib/api/mobile-config-api.d.ts +1 -0
  18. package/lib/api/mobile-config-api.js +31 -0
  19. package/lib/api/mobile-config-api.js.map +1 -0
  20. package/lib/api/net-info-utils.d.ts +5 -0
  21. package/lib/api/net-info-utils.js +29 -0
  22. package/lib/api/net-info-utils.js.map +1 -0
  23. package/lib/api/traceback-api.d.ts +7 -0
  24. package/lib/api/traceback-api.js +35 -0
  25. package/lib/api/traceback-api.js.map +1 -0
  26. package/lib/api/utils.d.ts +25 -0
  27. package/lib/api/utils.js +92 -0
  28. package/lib/api/utils.js.map +1 -0
  29. package/lib/app/Application.d.ts +15 -0
  30. package/lib/app/Application.js +29 -0
  31. package/lib/app/Application.js.map +1 -0
  32. package/lib/app/ContextedApplication.d.ts +9 -0
  33. package/lib/app/ContextedApplication.js +80 -0
  34. package/lib/app/ContextedApplication.js.map +1 -0
  35. package/lib/app/ContextsProvider.d.ts +14 -0
  36. package/lib/app/ContextsProvider.js +63 -0
  37. package/lib/app/ContextsProvider.js.map +1 -0
  38. package/lib/app/Module.d.ts +26 -0
  39. package/lib/app/Module.js +19 -0
  40. package/lib/app/Module.js.map +1 -0
  41. package/lib/app/RootNavigator.d.ts +7 -0
  42. package/lib/app/RootNavigator.js +69 -0
  43. package/lib/app/RootNavigator.js.map +1 -0
  44. package/lib/app/index.d.ts +5 -0
  45. package/lib/app/index.js +22 -0
  46. package/lib/app/index.js.map +1 -0
  47. package/lib/assets/Logo_Axelor.png +0 -0
  48. package/lib/auth/api/company-api.d.ts +1 -0
  49. package/lib/auth/api/company-api.js +31 -0
  50. package/lib/auth/api/company-api.js.map +1 -0
  51. package/lib/auth/api/config-api.d.ts +2 -0
  52. package/lib/auth/api/config-api.js +45 -0
  53. package/lib/auth/api/config-api.js.map +1 -0
  54. package/lib/auth/api/index.d.ts +4 -0
  55. package/lib/auth/api/index.js +22 -0
  56. package/lib/auth/api/index.js.map +1 -0
  57. package/lib/auth/api/language-api.d.ts +1 -0
  58. package/lib/auth/api/language-api.js +24 -0
  59. package/lib/auth/api/language-api.js.map +1 -0
  60. package/lib/auth/api/user-api.d.ts +2 -0
  61. package/lib/auth/api/user-api.js +30 -0
  62. package/lib/auth/api/user-api.js.map +1 -0
  63. package/lib/auth/features/asyncFunctionsIndex.d.ts +4 -0
  64. package/lib/auth/features/asyncFunctionsIndex.js +22 -0
  65. package/lib/auth/features/asyncFunctionsIndex.js.map +1 -0
  66. package/lib/auth/features/companySlice.d.ts +14 -0
  67. package/lib/auth/features/companySlice.js +48 -0
  68. package/lib/auth/features/companySlice.js.map +1 -0
  69. package/lib/auth/features/configSlice.d.ts +37 -0
  70. package/lib/auth/features/configSlice.js +82 -0
  71. package/lib/auth/features/configSlice.js.map +1 -0
  72. package/lib/auth/features/index.d.ts +4 -0
  73. package/lib/auth/features/index.js +22 -0
  74. package/lib/auth/features/index.js.map +1 -0
  75. package/lib/auth/features/languageSlice.d.ts +14 -0
  76. package/lib/auth/features/languageSlice.js +48 -0
  77. package/lib/auth/features/languageSlice.js.map +1 -0
  78. package/lib/auth/features/userSlice.d.ts +27 -0
  79. package/lib/auth/features/userSlice.js +83 -0
  80. package/lib/auth/features/userSlice.js.map +1 -0
  81. package/lib/auth/i18n/en.json +23 -0
  82. package/lib/auth/i18n/fr.json +23 -0
  83. package/lib/auth/index.d.ts +5 -0
  84. package/lib/auth/index.js +55 -0
  85. package/lib/auth/index.js.map +1 -0
  86. package/lib/auth/screens/SettingsScreen.d.ts +4 -0
  87. package/lib/auth/screens/SettingsScreen.js +79 -0
  88. package/lib/auth/screens/SettingsScreen.js.map +1 -0
  89. package/lib/auth/screens/UserScreen.d.ts +5 -0
  90. package/lib/auth/screens/UserScreen.js +116 -0
  91. package/lib/auth/screens/UserScreen.js.map +1 -0
  92. package/lib/auth/screens/index.d.ts +2 -0
  93. package/lib/auth/screens/index.js +20 -0
  94. package/lib/auth/screens/index.js.map +1 -0
  95. package/lib/axios/AxiosApi.d.ts +12 -0
  96. package/lib/axios/AxiosApi.js +32 -0
  97. package/lib/axios/AxiosApi.js.map +1 -0
  98. package/lib/components/external/Camera/Camera.d.ts +2 -0
  99. package/lib/components/external/Camera/Camera.js +148 -0
  100. package/lib/components/external/Camera/Camera.js.map +1 -0
  101. package/lib/components/external/Camera/CaptureButton.d.ts +10 -0
  102. package/lib/components/external/Camera/CaptureButton.js +118 -0
  103. package/lib/components/external/Camera/CaptureButton.js.map +1 -0
  104. package/lib/components/external/CameraScanner/CameraScanner.d.ts +10 -0
  105. package/lib/components/external/CameraScanner/CameraScanner.js +87 -0
  106. package/lib/components/external/CameraScanner/CameraScanner.js.map +1 -0
  107. package/lib/components/external/PlanningView/PlanningView.d.ts +11 -0
  108. package/lib/components/external/PlanningView/PlanningView.js +123 -0
  109. package/lib/components/external/PlanningView/PlanningView.js.map +1 -0
  110. package/lib/components/external/PlanningView/agenda.helpers.d.ts +10 -0
  111. package/lib/components/external/PlanningView/agenda.helpers.js +90 -0
  112. package/lib/components/external/PlanningView/agenda.helpers.js.map +1 -0
  113. package/lib/components/external/Scanner/Scanner.d.ts +2 -0
  114. package/lib/components/external/Scanner/Scanner.js +67 -0
  115. package/lib/components/external/Scanner/Scanner.js.map +1 -0
  116. package/lib/components/external/Stopwatch/Stopwatch.d.ts +18 -0
  117. package/lib/components/external/Stopwatch/Stopwatch.js +114 -0
  118. package/lib/components/external/Stopwatch/Stopwatch.js.map +1 -0
  119. package/lib/components/external/Timer/Timer.d.ts +9 -0
  120. package/lib/components/external/Timer/Timer.js +60 -0
  121. package/lib/components/external/Timer/Timer.js.map +1 -0
  122. package/lib/components/external/index.d.ts +6 -0
  123. package/lib/components/external/index.js +24 -0
  124. package/lib/components/external/index.js.map +1 -0
  125. package/lib/components/index.d.ts +4 -0
  126. package/lib/components/index.js +22 -0
  127. package/lib/components/index.js.map +1 -0
  128. package/lib/components/molecules/ErrorText/ErrorText.d.ts +4 -0
  129. package/lib/components/molecules/ErrorText/ErrorText.js +31 -0
  130. package/lib/components/molecules/ErrorText/ErrorText.js.map +1 -0
  131. package/lib/components/molecules/HeaderOptionsMenuItem/HeaderOptionMenuItem.d.ts +9 -0
  132. package/lib/components/molecules/HeaderOptionsMenuItem/HeaderOptionMenuItem.js +56 -0
  133. package/lib/components/molecules/HeaderOptionsMenuItem/HeaderOptionMenuItem.js.map +1 -0
  134. package/lib/components/molecules/IconSettings/IconSettings.d.ts +4 -0
  135. package/lib/components/molecules/IconSettings/IconSettings.js +31 -0
  136. package/lib/components/molecules/IconSettings/IconSettings.js.map +1 -0
  137. package/lib/components/molecules/InputBarCodeCard/InputBarCodeCard.d.ts +7 -0
  138. package/lib/components/molecules/InputBarCodeCard/InputBarCodeCard.js +84 -0
  139. package/lib/components/molecules/InputBarCodeCard/InputBarCodeCard.js.map +1 -0
  140. package/lib/components/molecules/LoginButton/LoginButton.d.ts +4 -0
  141. package/lib/components/molecules/LoginButton/LoginButton.js +40 -0
  142. package/lib/components/molecules/LoginButton/LoginButton.js.map +1 -0
  143. package/lib/components/molecules/MailMessageReadIcon/MailMessageReadIcon.d.ts +7 -0
  144. package/lib/components/molecules/MailMessageReadIcon/MailMessageReadIcon.js +55 -0
  145. package/lib/components/molecules/MailMessageReadIcon/MailMessageReadIcon.js.map +1 -0
  146. package/lib/components/molecules/TrackItem/TrackItem.d.ts +9 -0
  147. package/lib/components/molecules/TrackItem/TrackItem.js +65 -0
  148. package/lib/components/molecules/TrackItem/TrackItem.js.map +1 -0
  149. package/lib/components/molecules/index.d.ts +7 -0
  150. package/lib/components/molecules/index.js +25 -0
  151. package/lib/components/molecules/index.js.map +1 -0
  152. package/lib/components/organisms/AOSImage/AOSImage.d.ts +15 -0
  153. package/lib/components/organisms/AOSImage/AOSImage.js +37 -0
  154. package/lib/components/organisms/AOSImage/AOSImage.js.map +1 -0
  155. package/lib/components/organisms/AOSImageBubble/AOSImageBubble.d.ts +9 -0
  156. package/lib/components/organisms/AOSImageBubble/AOSImageBubble.js +30 -0
  157. package/lib/components/organisms/AOSImageBubble/AOSImageBubble.js.map +1 -0
  158. package/lib/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.d.ts +9 -0
  159. package/lib/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js +68 -0
  160. package/lib/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js.map +1 -0
  161. package/lib/components/organisms/LogoImage/LogoImage.d.ts +4 -0
  162. package/lib/components/organisms/LogoImage/LogoImage.js +52 -0
  163. package/lib/components/organisms/LogoImage/LogoImage.js.map +1 -0
  164. package/lib/components/organisms/MailMessageCard/MailMessageCard.d.ts +17 -0
  165. package/lib/components/organisms/MailMessageCard/MailMessageCard.js +79 -0
  166. package/lib/components/organisms/MailMessageCard/MailMessageCard.js.map +1 -0
  167. package/lib/components/organisms/MailMessageCommentCard/MailMessageCommentCard.d.ts +12 -0
  168. package/lib/components/organisms/MailMessageCommentCard/MailMessageCommentCard.js +139 -0
  169. package/lib/components/organisms/MailMessageCommentCard/MailMessageCommentCard.js.map +1 -0
  170. package/lib/components/organisms/MailMessageNotificationCard/MailMessageNotificationCard.d.ts +15 -0
  171. package/lib/components/organisms/MailMessageNotificationCard/MailMessageNotificationCard.js +79 -0
  172. package/lib/components/organisms/MailMessageNotificationCard/MailMessageNotificationCard.js.map +1 -0
  173. package/lib/components/organisms/PasswordInput/PasswordInput.d.ts +7 -0
  174. package/lib/components/organisms/PasswordInput/PasswordInput.js +36 -0
  175. package/lib/components/organisms/PasswordInput/PasswordInput.js.map +1 -0
  176. package/lib/components/organisms/ScannerAutocompleteSearch/ScannerAutocompleteSearch.d.ts +17 -0
  177. package/lib/components/organisms/ScannerAutocompleteSearch/ScannerAutocompleteSearch.js +68 -0
  178. package/lib/components/organisms/ScannerAutocompleteSearch/ScannerAutocompleteSearch.js.map +1 -0
  179. package/lib/components/organisms/UrlInput/UrlInput.d.ts +10 -0
  180. package/lib/components/organisms/UrlInput/UrlInput.js +38 -0
  181. package/lib/components/organisms/UrlInput/UrlInput.js.map +1 -0
  182. package/lib/components/organisms/UsernameInput/UsernameInput.d.ts +6 -0
  183. package/lib/components/organisms/UsernameInput/UsernameInput.js +33 -0
  184. package/lib/components/organisms/UsernameInput/UsernameInput.js.map +1 -0
  185. package/lib/components/organisms/index.d.ts +11 -0
  186. package/lib/components/organisms/index.js +29 -0
  187. package/lib/components/organisms/index.js.map +1 -0
  188. package/lib/components/templates/AttachedFilesView/AttachedFilesView.d.ts +10 -0
  189. package/lib/components/templates/AttachedFilesView/AttachedFilesView.js +87 -0
  190. package/lib/components/templates/AttachedFilesView/AttachedFilesView.js.map +1 -0
  191. package/lib/components/templates/MailMessageView/MailMessageView.d.ts +6 -0
  192. package/lib/components/templates/MailMessageView/MailMessageView.js +140 -0
  193. package/lib/components/templates/MailMessageView/MailMessageView.js.map +1 -0
  194. package/lib/components/templates/index.d.ts +2 -0
  195. package/lib/components/templates/index.js +20 -0
  196. package/lib/components/templates/index.js.map +1 -0
  197. package/lib/features/attachedFilesSlice.d.ts +35 -0
  198. package/lib/features/attachedFilesSlice.js +82 -0
  199. package/lib/features/attachedFilesSlice.js.map +1 -0
  200. package/lib/features/authSlice.d.ts +44 -0
  201. package/lib/features/authSlice.js +67 -0
  202. package/lib/features/authSlice.js.map +1 -0
  203. package/lib/features/cameraSlice.d.ts +14 -0
  204. package/lib/features/cameraSlice.js +52 -0
  205. package/lib/features/cameraSlice.js.map +1 -0
  206. package/lib/features/index.d.ts +8 -0
  207. package/lib/features/index.js +26 -0
  208. package/lib/features/index.js.map +1 -0
  209. package/lib/features/mailMessageSlice.d.ts +97 -0
  210. package/lib/features/mailMessageSlice.js +219 -0
  211. package/lib/features/mailMessageSlice.js.map +1 -0
  212. package/lib/features/menuConfigSlice.d.ts +14 -0
  213. package/lib/features/menuConfigSlice.js +48 -0
  214. package/lib/features/menuConfigSlice.js.map +1 -0
  215. package/lib/features/metafileSlice.d.ts +14 -0
  216. package/lib/features/metafileSlice.js +48 -0
  217. package/lib/features/metafileSlice.js.map +1 -0
  218. package/lib/features/mobileConfigSlice.d.ts +14 -0
  219. package/lib/features/mobileConfigSlice.js +52 -0
  220. package/lib/features/mobileConfigSlice.js.map +1 -0
  221. package/lib/features/scannerSlice.d.ts +14 -0
  222. package/lib/features/scannerSlice.js +52 -0
  223. package/lib/features/scannerSlice.js.map +1 -0
  224. package/lib/hooks/use-effect-debugger.d.ts +1 -0
  225. package/lib/hooks/use-effect-debugger.js +47 -0
  226. package/lib/hooks/use-effect-debugger.js.map +1 -0
  227. package/lib/i18n/api/translation.d.ts +2 -0
  228. package/lib/i18n/api/translation.js +38 -0
  229. package/lib/i18n/api/translation.js.map +1 -0
  230. package/lib/i18n/component/Translator.d.ts +6 -0
  231. package/lib/i18n/component/Translator.js +74 -0
  232. package/lib/i18n/component/Translator.js.map +1 -0
  233. package/lib/i18n/helpers/langages.d.ts +3 -0
  234. package/lib/i18n/helpers/langages.js +34 -0
  235. package/lib/i18n/helpers/langages.js.map +1 -0
  236. package/lib/i18n/helpers/translations.d.ts +1 -0
  237. package/lib/i18n/helpers/translations.js +24 -0
  238. package/lib/i18n/helpers/translations.js.map +1 -0
  239. package/lib/i18n/hooks/use-translator.d.ts +5 -0
  240. package/lib/i18n/hooks/use-translator.js +24 -0
  241. package/lib/i18n/hooks/use-translator.js.map +1 -0
  242. package/lib/i18n/i18n.d.ts +20 -0
  243. package/lib/i18n/i18n.js +53 -0
  244. package/lib/i18n/i18n.js.map +1 -0
  245. package/lib/i18n/index.d.ts +4 -0
  246. package/lib/i18n/index.js +22 -0
  247. package/lib/i18n/index.js.map +1 -0
  248. package/lib/i18n/translations/en.json +52 -0
  249. package/lib/i18n/translations/fr.json +52 -0
  250. package/lib/index.d.ts +18 -0
  251. package/lib/index.js +36 -0
  252. package/lib/index.js.map +1 -0
  253. package/lib/navigator/Navigator.d.ts +12 -0
  254. package/lib/navigator/Navigator.js +118 -0
  255. package/lib/navigator/Navigator.js.map +1 -0
  256. package/lib/navigator/drawer/AuthMenuIconButton.d.ts +6 -0
  257. package/lib/navigator/drawer/AuthMenuIconButton.js +29 -0
  258. package/lib/navigator/drawer/AuthMenuIconButton.js.map +1 -0
  259. package/lib/navigator/drawer/BackIcon.d.ts +4 -0
  260. package/lib/navigator/drawer/BackIcon.js +32 -0
  261. package/lib/navigator/drawer/BackIcon.js.map +1 -0
  262. package/lib/navigator/drawer/DrawerContent.d.ts +8 -0
  263. package/lib/navigator/drawer/DrawerContent.js +177 -0
  264. package/lib/navigator/drawer/DrawerContent.js.map +1 -0
  265. package/lib/navigator/drawer/DrawerToggleButton.d.ts +4 -0
  266. package/lib/navigator/drawer/DrawerToggleButton.js +32 -0
  267. package/lib/navigator/drawer/DrawerToggleButton.js.map +1 -0
  268. package/lib/navigator/drawer/Menu.d.ts +8 -0
  269. package/lib/navigator/drawer/Menu.js +91 -0
  270. package/lib/navigator/drawer/Menu.js.map +1 -0
  271. package/lib/navigator/drawer/MenuIconButton.d.ts +10 -0
  272. package/lib/navigator/drawer/MenuIconButton.js +64 -0
  273. package/lib/navigator/drawer/MenuIconButton.js.map +1 -0
  274. package/lib/navigator/drawer/MenuItem.d.ts +8 -0
  275. package/lib/navigator/drawer/MenuItem.js +71 -0
  276. package/lib/navigator/drawer/MenuItem.js.map +1 -0
  277. package/lib/navigator/menu.helper.d.ts +8 -0
  278. package/lib/navigator/menu.helper.js +50 -0
  279. package/lib/navigator/menu.helper.js.map +1 -0
  280. package/lib/navigator/module.helper.d.ts +7 -0
  281. package/lib/navigator/module.helper.js +95 -0
  282. package/lib/navigator/module.helper.js.map +1 -0
  283. package/lib/navigator/roles.helper.d.ts +4 -0
  284. package/lib/navigator/roles.helper.js +33 -0
  285. package/lib/navigator/roles.helper.js.map +1 -0
  286. package/lib/redux/hooks.d.ts +5 -0
  287. package/lib/redux/hooks.js +25 -0
  288. package/lib/redux/hooks.js.map +1 -0
  289. package/lib/redux/store.d.ts +1 -0
  290. package/lib/redux/store.js +28 -0
  291. package/lib/redux/store.js.map +1 -0
  292. package/lib/screens/AttachedFilesScreen.d.ts +5 -0
  293. package/lib/screens/AttachedFilesScreen.js +26 -0
  294. package/lib/screens/AttachedFilesScreen.js.map +1 -0
  295. package/lib/screens/ErrorScreen.d.ts +5 -0
  296. package/lib/screens/ErrorScreen.js +46 -0
  297. package/lib/screens/ErrorScreen.js.map +1 -0
  298. package/lib/screens/LoginScreen.d.ts +4 -0
  299. package/lib/screens/LoginScreen.js +115 -0
  300. package/lib/screens/LoginScreen.js.map +1 -0
  301. package/lib/screens/MailMessageScreen.d.ts +5 -0
  302. package/lib/screens/MailMessageScreen.js +25 -0
  303. package/lib/screens/MailMessageScreen.js.map +1 -0
  304. package/lib/storage/Storage.d.ts +17 -0
  305. package/lib/storage/Storage.js +53 -0
  306. package/lib/storage/Storage.js.map +1 -0
  307. package/lib/tools/ClipboardProvider.d.ts +7 -0
  308. package/lib/tools/ClipboardProvider.js +59 -0
  309. package/lib/tools/ClipboardProvider.js.map +1 -0
  310. package/lib/tools/FileViewer.d.ts +13 -0
  311. package/lib/tools/FileViewer.js +48 -0
  312. package/lib/tools/FileViewer.js.map +1 -0
  313. package/lib/tools/LinkingProvider.d.ts +17 -0
  314. package/lib/tools/LinkingProvider.js +94 -0
  315. package/lib/tools/LinkingProvider.js.map +1 -0
  316. package/lib/tools/index.d.ts +3 -0
  317. package/lib/tools/index.js +21 -0
  318. package/lib/tools/index.js.map +1 -0
  319. package/lib/tools/linking.helper.d.ts +25 -0
  320. package/lib/tools/linking.helper.js +70 -0
  321. package/lib/tools/linking.helper.js.map +1 -0
  322. package/lib/types/index.d.ts +2 -0
  323. package/lib/types/index.js +20 -0
  324. package/lib/types/index.js.map +1 -0
  325. package/lib/types/mail-message-notification-type.d.ts +12 -0
  326. package/lib/types/mail-message-notification-type.js +48 -0
  327. package/lib/types/mail-message-notification-type.js.map +1 -0
  328. package/lib/types/stopwatch-type.d.ts +14 -0
  329. package/lib/types/stopwatch-type.js +64 -0
  330. package/lib/types/stopwatch-type.js.map +1 -0
  331. package/lib/utils/agenda.d.ts +1 -0
  332. package/lib/utils/agenda.js +28 -0
  333. package/lib/utils/agenda.js.map +1 -0
  334. package/lib/utils/date.d.ts +4 -0
  335. package/lib/utils/date.js +41 -0
  336. package/lib/utils/date.js.map +1 -0
  337. package/lib/utils/displayers.d.ts +1 -0
  338. package/lib/utils/displayers.js +19 -0
  339. package/lib/utils/displayers.js.map +1 -0
  340. package/lib/utils/formatters.d.ts +5 -0
  341. package/lib/utils/formatters.js +74 -0
  342. package/lib/utils/formatters.js.map +1 -0
  343. package/lib/utils/index.d.ts +9 -0
  344. package/lib/utils/index.js +27 -0
  345. package/lib/utils/index.js.map +1 -0
  346. package/lib/utils/list.d.ts +3 -0
  347. package/lib/utils/list.js +101 -0
  348. package/lib/utils/list.js.map +1 -0
  349. package/lib/utils/object.d.ts +2 -0
  350. package/lib/utils/object.js +36 -0
  351. package/lib/utils/object.js.map +1 -0
  352. package/lib/utils/show-toast-message.d.ts +2 -0
  353. package/lib/utils/show-toast-message.js +22 -0
  354. package/lib/utils/show-toast-message.js.map +1 -0
  355. package/lib/utils/string.d.ts +4 -0
  356. package/lib/utils/string.js +54 -0
  357. package/lib/utils/string.js.map +1 -0
  358. package/lib/utils/time.d.ts +4 -0
  359. package/lib/utils/time.js +78 -0
  360. package/lib/utils/time.js.map +1 -0
  361. package/package.json +95 -0
@@ -0,0 +1,148 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useEffect, useState, useCallback, useMemo, useRef } from 'react';
19
+ import { Dimensions, Platform, StyleSheet, View } from 'react-native';
20
+ import { useDispatch } from 'react-redux';
21
+ import { Camera as PackageCamera, frameRateIncluded, sortFormats, useCameraDevices, } from 'react-native-vision-camera';
22
+ import StaticSafeAreaInsets from 'react-native-static-safe-area-insets';
23
+ import RNFS from 'react-native-fs';
24
+ import { Icon, useThemeColor } from '@axelor/aos-mobile-ui';
25
+ import { disableCamera, takePhoto, useCameraSelector, } from '../../../features/cameraSlice';
26
+ import CaptureButton from './CaptureButton';
27
+ const CONTENT_SPACING = 40;
28
+ const SAFE_BOTTOM = Platform.select({
29
+ ios: StaticSafeAreaInsets.safeAreaInsetsBottom,
30
+ }) ?? 0;
31
+ const SAFE_AREA_PADDING = {
32
+ paddingLeft: StaticSafeAreaInsets.safeAreaInsetsLeft + CONTENT_SPACING,
33
+ paddingTop: StaticSafeAreaInsets.safeAreaInsetsTop + CONTENT_SPACING,
34
+ paddingRight: StaticSafeAreaInsets.safeAreaInsetsRight + CONTENT_SPACING,
35
+ paddingBottom: SAFE_BOTTOM + CONTENT_SPACING,
36
+ };
37
+ const BUTTON_SIZE = 40;
38
+ const Camera = () => {
39
+ const Colors = useThemeColor();
40
+ const { isEnabled } = useCameraSelector();
41
+ const [hasPermission, setHasPermission] = useState(false);
42
+ const [cameraPosition, setCameraPosition] = useState('back');
43
+ const [flash, setFlash] = useState('off');
44
+ const [enableNightMode, setEnableNightMode] = useState(false);
45
+ const camera = useRef(null);
46
+ const devices = useCameraDevices();
47
+ const device = devices[cameraPosition];
48
+ const dispatch = useDispatch();
49
+ const formats = useMemo(() => {
50
+ if (device?.formats == null) {
51
+ return [];
52
+ }
53
+ return device.formats.sort(sortFormats);
54
+ }, [device?.formats]);
55
+ const fps = useMemo(() => {
56
+ if (enableNightMode && !device?.supportsLowLightBoost) {
57
+ // User has enabled Night Mode, but Night Mode is not natively supported, so we simulate it by lowering the frame rate.
58
+ return 30;
59
+ }
60
+ const supportsHdrAt60Fps = formats.some(f => f.supportsVideoHDR &&
61
+ f.frameRateRanges.some(r => frameRateIncluded(r, 60)));
62
+ if (!supportsHdrAt60Fps) {
63
+ // User has enabled HDR, but HDR is not supported at 60 FPS.
64
+ return 30;
65
+ }
66
+ const supports60Fps = formats.some(f => f.frameRateRanges.some(r => frameRateIncluded(r, 60)));
67
+ if (!supports60Fps) {
68
+ // 60 FPS is not supported by any format.
69
+ return 30;
70
+ }
71
+ // If nothing blocks us from using it, we default to 60 FPS.
72
+ return 60;
73
+ }, [device?.supportsLowLightBoost, enableNightMode, formats]);
74
+ const supportsCameraFlipping = useMemo(() => devices.back != null && devices.front != null, [devices.back, devices.front]);
75
+ const supportsFlash = device?.hasFlash ?? false;
76
+ const canToggleNightMode = enableNightMode
77
+ ? true
78
+ : (device?.supportsLowLightBoost ?? false) || fps > 30; // either we have native support, or we can lower the FPS
79
+ const onFlipCameraPressed = useCallback(() => {
80
+ setCameraPosition(p => (p === 'back' ? 'front' : 'back'));
81
+ }, []);
82
+ const onFlashPressed = useCallback(() => {
83
+ setFlash(f => (f === 'off' ? 'on' : 'off'));
84
+ }, []);
85
+ const onMediaCapture = useCallback(async (photo) => {
86
+ const photoData = await RNFS.readFile(photo.path, 'base64');
87
+ dispatch(takePhoto(photoData));
88
+ dispatch(disableCamera());
89
+ }, [dispatch]);
90
+ useEffect(() => {
91
+ if (isEnabled) {
92
+ (async () => {
93
+ const status = await PackageCamera.requestCameraPermission();
94
+ setHasPermission(status === 'authorized');
95
+ })();
96
+ }
97
+ return () => setHasPermission(false);
98
+ }, [dispatch, isEnabled]);
99
+ if (!hasPermission && !isEnabled) {
100
+ return null;
101
+ }
102
+ return (<View style={styles.container}>
103
+ {device != null && (<PackageCamera ref={camera} style={styles.camera} device={device} isActive={true} photo={true}/>)}
104
+ <View style={styles.rightButtonRow}>
105
+ {supportsCameraFlipping && (<Icon style={styles.button} name="camera" color={Colors.backgroundColor} size={24} touchable={true} onPress={onFlipCameraPressed}/>)}
106
+ {supportsFlash && (<Icon style={styles.button} name="flash" FontAwesome5={false} color={flash === 'on'
107
+ ? Colors.primaryColor.background
108
+ : Colors.backgroundColor} size={24} touchable={true} onPress={onFlashPressed}/>)}
109
+ {canToggleNightMode && (<Icon style={styles.button} name={enableNightMode ? 'moon' : 'moon-o'} FontAwesome5={enableNightMode ? true : false} color={Colors.backgroundColor} size={24} touchable={true} onPress={() => setEnableNightMode(!enableNightMode)}/>)}
110
+ <Icon style={styles.button} name={'times'} color={Colors.backgroundColor} size={24} touchable={true} onPress={() => dispatch(disableCamera())}/>
111
+ </View>
112
+ <View style={styles.captureButton}>
113
+ <CaptureButton camera={camera} onMediaCaptured={onMediaCapture} flash={flash} enabled={isEnabled}/>
114
+ </View>
115
+ </View>);
116
+ };
117
+ const styles = StyleSheet.create({
118
+ captureButton: {
119
+ position: 'absolute',
120
+ top: Dimensions.get('window').height - SAFE_AREA_PADDING.paddingBottom * 2,
121
+ left: Dimensions.get('window').width / 2 - SAFE_AREA_PADDING.paddingLeft,
122
+ zIndex: 20,
123
+ },
124
+ camera: {
125
+ height: Dimensions.get('window').height,
126
+ width: Dimensions.get('window').width,
127
+ position: 'absolute',
128
+ top: 0,
129
+ zIndex: 10,
130
+ },
131
+ button: {
132
+ marginBottom: CONTENT_SPACING,
133
+ width: BUTTON_SIZE,
134
+ height: BUTTON_SIZE,
135
+ borderRadius: BUTTON_SIZE / 2,
136
+ backgroundColor: 'rgba(140, 140, 140, 0.3)',
137
+ justifyContent: 'center',
138
+ alignItems: 'center',
139
+ },
140
+ rightButtonRow: {
141
+ position: 'absolute',
142
+ right: SAFE_AREA_PADDING.paddingRight,
143
+ top: SAFE_AREA_PADDING.paddingTop,
144
+ zIndex: 15,
145
+ },
146
+ });
147
+ export default Camera;
148
+ //# sourceMappingURL=Camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Camera.js","sourceRoot":"","sources":["../../../../src/components/external/Camera/Camera.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { Camera, PhotoFile } from 'react-native-vision-camera';
3
+ declare const CaptureButton: ({ camera, onMediaCaptured, flash, enabled, style, }: {
4
+ camera: React.RefObject<Camera>;
5
+ onMediaCaptured: (media: PhotoFile) => void;
6
+ flash: 'off' | 'on';
7
+ enabled: boolean;
8
+ style?: any;
9
+ }) => JSX.Element;
10
+ export default CaptureButton;
@@ -0,0 +1,118 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useMemo } from 'react';
19
+ import { TouchableOpacity, StyleSheet, View } from 'react-native';
20
+ import Reanimated, { Easing, useAnimatedStyle, withSpring, withTiming, useSharedValue, withRepeat, } from 'react-native-reanimated';
21
+ const CAPTURE_BUTTON_SIZE = 78;
22
+ const BORDER_WIDTH = CAPTURE_BUTTON_SIZE * 0.1;
23
+ const CaptureButton = ({ camera, onMediaCaptured, flash, enabled, style, }) => {
24
+ const takePhotoOptions = useMemo(() => ({
25
+ photoCodec: 'jpeg',
26
+ qualityPrioritization: 'speed',
27
+ flash: flash,
28
+ quality: 90,
29
+ skipMetadata: false,
30
+ }), [flash]);
31
+ const isPressingButton = useSharedValue(false);
32
+ const takePhoto = useCallback(async () => {
33
+ try {
34
+ if (camera.current == null) {
35
+ throw new Error('Camera ref is null!');
36
+ }
37
+ const photo = await camera.current.takePhoto(takePhotoOptions);
38
+ onMediaCaptured(photo);
39
+ }
40
+ catch (e) {
41
+ console.error('Failed to take photo!', e);
42
+ }
43
+ }, [camera, onMediaCaptured, takePhotoOptions]);
44
+ const shadowStyle = useAnimatedStyle(() => ({
45
+ transform: [
46
+ {
47
+ scale: withSpring(isPressingButton.value ? 1 : 0, {
48
+ mass: 1,
49
+ damping: 35,
50
+ stiffness: 300,
51
+ }),
52
+ },
53
+ ],
54
+ }), [isPressingButton]);
55
+ const buttonStyle = useAnimatedStyle(() => {
56
+ let scale;
57
+ if (enabled) {
58
+ if (isPressingButton.value) {
59
+ scale = withRepeat(withSpring(1, {
60
+ stiffness: 100,
61
+ damping: 1000,
62
+ }), -1, true);
63
+ }
64
+ else {
65
+ scale = withSpring(0.9, {
66
+ stiffness: 500,
67
+ damping: 300,
68
+ });
69
+ }
70
+ }
71
+ else {
72
+ scale = withSpring(0.6, {
73
+ stiffness: 500,
74
+ damping: 300,
75
+ });
76
+ }
77
+ return {
78
+ opacity: withTiming(enabled ? 1 : 0.3, {
79
+ duration: 100,
80
+ easing: Easing.linear,
81
+ }),
82
+ transform: [
83
+ {
84
+ scale: scale,
85
+ },
86
+ ],
87
+ };
88
+ }, [enabled, isPressingButton]);
89
+ return (<TouchableOpacity onPress={takePhoto}>
90
+ <Reanimated.View style={[buttonStyle, style]}>
91
+ <Reanimated.View style={styles.flex}>
92
+ <Reanimated.View style={[styles.shadow, shadowStyle]}/>
93
+ <View style={styles.button}/>
94
+ </Reanimated.View>
95
+ </Reanimated.View>
96
+ </TouchableOpacity>);
97
+ };
98
+ const styles = StyleSheet.create({
99
+ flex: {
100
+ flex: 1,
101
+ },
102
+ shadow: {
103
+ position: 'absolute',
104
+ width: CAPTURE_BUTTON_SIZE,
105
+ height: CAPTURE_BUTTON_SIZE,
106
+ borderRadius: CAPTURE_BUTTON_SIZE / 2,
107
+ backgroundColor: '#e34077',
108
+ },
109
+ button: {
110
+ width: CAPTURE_BUTTON_SIZE,
111
+ height: CAPTURE_BUTTON_SIZE,
112
+ borderRadius: CAPTURE_BUTTON_SIZE / 2,
113
+ borderWidth: BORDER_WIDTH,
114
+ borderColor: 'white',
115
+ },
116
+ });
117
+ export default CaptureButton;
118
+ //# sourceMappingURL=CaptureButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CaptureButton.js","sourceRoot":"","sources":["../../../../src/components/external/Camera/CaptureButton.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export default CameraScanner;
2
+ declare function CameraScanner({ isActive, onScan, coordinate, onClose, }: {
3
+ isActive?: boolean;
4
+ onScan?: (value: any) => void;
5
+ coordinate?: {
6
+ x: number;
7
+ y: number;
8
+ };
9
+ onClose?: () => void;
10
+ }): JSX.Element;
@@ -0,0 +1,87 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useCallback, useEffect, useState, useMemo } from 'react';
19
+ import { Dimensions, StyleSheet } from 'react-native';
20
+ import { Camera, useCameraDevices } from 'react-native-vision-camera';
21
+ import { BarcodeFormat, useScanBarcodes } from 'vision-camera-code-scanner';
22
+ import { formatScan } from '../../../utils/formatters';
23
+ import { Icon, useThemeColor } from '@axelor/aos-mobile-ui';
24
+ const CameraScanner = ({ isActive = false, onScan = value => { }, coordinate = { x: 0, y: 0 }, onClose = () => { }, }) => {
25
+ const positionStyle = useMemo(() => {
26
+ return getStyles(coordinate);
27
+ }, [coordinate]);
28
+ const [hasPermission, setHasPermission] = useState(false);
29
+ const devices = useCameraDevices();
30
+ const device = devices.back;
31
+ const Colors = useThemeColor();
32
+ const [frameProcessor, barcodes] = useScanBarcodes([BarcodeFormat.ALL_FORMATS], {
33
+ checkInverted: true,
34
+ });
35
+ const handleScan = useCallback(barcode => {
36
+ if (barcode != null) {
37
+ onScan({
38
+ value: formatScan(barcode.displayValue, BarcodeFormat[barcode.format]),
39
+ type: BarcodeFormat[barcode.format],
40
+ });
41
+ }
42
+ }, [onScan]);
43
+ useEffect(() => {
44
+ if (barcodes[0] != null) {
45
+ handleScan(barcodes[0]);
46
+ }
47
+ }, [barcodes, handleScan]);
48
+ useEffect(() => {
49
+ if (isActive) {
50
+ (async () => {
51
+ const status = await Camera.requestCameraPermission();
52
+ setHasPermission(status === 'authorized');
53
+ })();
54
+ }
55
+ return () => setHasPermission(false);
56
+ }, [isActive]);
57
+ return (device != null &&
58
+ hasPermission && (<>
59
+ <Icon name="times" size={24} color={Colors.primaryColor.background} touchable={true} onPress={onClose} style={[styles.icon, positionStyle.icon]}/>
60
+ <Camera style={[styles.camera, positionStyle.camera]} device={device} isActive={true} frameProcessor={frameProcessor} frameProcessorFps={5}/>
61
+ </>));
62
+ };
63
+ const getStyles = coordinate => {
64
+ return StyleSheet.create({
65
+ camera: {
66
+ top: coordinate != null ? -coordinate.y : 0,
67
+ },
68
+ icon: {
69
+ top: coordinate != null ? -coordinate.y + 20 : 0,
70
+ },
71
+ });
72
+ };
73
+ const styles = StyleSheet.create({
74
+ camera: {
75
+ height: Dimensions.get('window').height,
76
+ width: Dimensions.get('window').width,
77
+ position: 'absolute',
78
+ zIndex: 50,
79
+ },
80
+ icon: {
81
+ zIndex: 60,
82
+ position: 'absolute',
83
+ right: 30,
84
+ },
85
+ });
86
+ export default CameraScanner;
87
+ //# sourceMappingURL=CameraScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraScanner.js","sourceRoot":"","sources":["../../../../src/components/external/CameraScanner/CameraScanner.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { AgendaItem } from './agenda.helpers';
3
+ interface PlanningProps {
4
+ numberMonthsAroundToday?: number;
5
+ loading?: boolean;
6
+ fetchbyMonth: (param: any) => void;
7
+ renderItem?: (item: AgendaItem, isFirst: boolean) => React.Component | JSX.Element;
8
+ itemList?: AgendaItem[];
9
+ }
10
+ declare const PlanningView: ({ numberMonthsAroundToday, renderItem, fetchbyMonth, loading, itemList, }: PlanningProps) => JSX.Element;
11
+ export default PlanningView;
@@ -0,0 +1,123 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ import React, { useMemo, useState } from 'react';
19
+ import { StyleSheet, View } from 'react-native';
20
+ import { Text, useThemeColor } from '@axelor/aos-mobile-ui';
21
+ import { Agenda } from 'react-native-calendars';
22
+ import { createAgendaSchedule, getShortName, isToday, mapEntryToItem, } from './agenda.helpers';
23
+ const PlanningView = ({ numberMonthsAroundToday = 12, renderItem, fetchbyMonth, loading = false, itemList = [], }) => {
24
+ const Colors = useThemeColor();
25
+ const agendaItems = useMemo(() => createAgendaSchedule(itemList, numberMonthsAroundToday), [itemList, numberMonthsAroundToday]);
26
+ const [fetchDate, setFetchDate] = useState();
27
+ const styles = useMemo(() => getStyles(Colors), [Colors]);
28
+ const renderDate = date => {
29
+ const today = date && isToday(date) ? styles.today : undefined;
30
+ if (date) {
31
+ return (<View style={styles.day}>
32
+ <Text style={[styles.dayNum, today]}>{date.getDate()}</Text>
33
+ <Text style={[styles.dayText, today]}>
34
+ {getShortName(date, 'en')}
35
+ </Text>
36
+ </View>);
37
+ }
38
+ else {
39
+ return <View style={styles.day}/>;
40
+ }
41
+ };
42
+ const renderEmptyDate = () => {
43
+ return <View style={styles.emptyDate}/>;
44
+ };
45
+ const renderDayItem = (item, isFirst) => {
46
+ const agendaItem = mapEntryToItem(item, itemList);
47
+ if (agendaItem) {
48
+ if (renderItem) {
49
+ return renderItem(agendaItem, isFirst);
50
+ }
51
+ return (<View style={[styles.dayItem, isFirst ? {} : null]}>
52
+ <Text>{agendaItem.name}</Text>
53
+ </View>);
54
+ }
55
+ };
56
+ return (<View style={styles.agendaContainer}>
57
+ <Agenda items={agendaItems} loadItemsForMonth={date => {
58
+ setFetchDate(date);
59
+ fetchbyMonth(date);
60
+ }} pastScrollRange={numberMonthsAroundToday} futureScrollRange={numberMonthsAroundToday} renderItem={renderDayItem} renderDay={renderDate} renderEmptyDate={renderEmptyDate} onRefresh={() => {
61
+ console.log('refresh');
62
+ console.log(fetchDate);
63
+ fetchbyMonth(fetchDate);
64
+ }} refreshing={loading} theme={{
65
+ todayTextColor: Colors.text,
66
+ calendarBackground: Colors.backgroundColor,
67
+ indicatorColor: Colors.primaryColor.background,
68
+ textSectionTitleColor: Colors.placeholderTextColor,
69
+ dayTextColor: Colors.text,
70
+ selectedDayTextColor: Colors.text,
71
+ monthTextColor: Colors.text,
72
+ selectedDayBackgroundColor: Colors.primaryColor.background_light,
73
+ backgroundColor: Colors.backgroundColor,
74
+ dotColor: Colors.primaryColor.background,
75
+ selectedDotColor: Colors.text,
76
+ agendaDayTextColor: Colors.text,
77
+ agendaDayNumColor: Colors.text,
78
+ agendaTodayColor: Colors.primaryColor.background_light,
79
+ agendaKnobColor: Colors.secondaryColor.background,
80
+ todayBackgroundColor: Colors.secondaryColor.background_light,
81
+ }}/>
82
+ </View>);
83
+ };
84
+ const getStyles = Colors => StyleSheet.create({
85
+ agendaContainer: {
86
+ height: '100%',
87
+ },
88
+ emptyDate: {
89
+ height: 15,
90
+ flex: 1,
91
+ paddingTop: 30,
92
+ },
93
+ dayItem: {
94
+ backgroundColor: 'red',
95
+ flex: 1,
96
+ borderRadius: 5,
97
+ padding: 10,
98
+ marginRight: 10,
99
+ marginTop: 17,
100
+ },
101
+ dayNum: {
102
+ fontSize: 28,
103
+ fontWeight: '200',
104
+ color: Colors.text,
105
+ },
106
+ dayText: {
107
+ fontSize: 14,
108
+ color: Colors.text,
109
+ backgroundColor: Colors.background,
110
+ marginTop: -5,
111
+ },
112
+ day: {
113
+ width: 63,
114
+ alignItems: 'center',
115
+ justifyContent: 'flex-start',
116
+ marginTop: 32,
117
+ },
118
+ today: {
119
+ color: Colors.primaryColor,
120
+ },
121
+ });
122
+ export default PlanningView;
123
+ //# sourceMappingURL=PlanningView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanningView.js","sourceRoot":"","sources":["../../../../src/components/external/PlanningView/PlanningView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AgendaEntry, AgendaSchedule } from 'react-native-calendars';
2
+ export interface AgendaItem {
3
+ id: number;
4
+ date: string | Date;
5
+ [objectKey: string]: object | string | number;
6
+ }
7
+ export declare function mapEntryToItem(agendaItem: AgendaEntry, itemList: AgendaItem[]): AgendaItem;
8
+ export declare function createAgendaSchedule(items: AgendaItem[], monthsAroundDate: number): AgendaSchedule;
9
+ export declare function getShortName(date: any, lang: any): string;
10
+ export declare function isToday(date: any): boolean;
@@ -0,0 +1,90 @@
1
+ /*
2
+ * Axelor Business Solutions
3
+ *
4
+ * Copyright (C) 2023 Axelor (<http://axelor.com>).
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU Affero General Public License, version 3,
8
+ * as published by the Free Software Foundation.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU Affero General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Affero General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ export function mapEntryToItem(agendaItem, itemList) {
19
+ const itemId = parseInt(agendaItem.name, 10);
20
+ return itemList.find((item) => item.id === itemId);
21
+ }
22
+ function mapItemToEntry(item) {
23
+ return { name: '' + item?.id, height: 80, day: (item?.date).toString() };
24
+ }
25
+ function mapItemListToEntryList(items) {
26
+ return items.map(mapItemToEntry);
27
+ }
28
+ function formatDate(date) {
29
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
30
+ .toString()
31
+ .padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
32
+ }
33
+ function addDays(originDate, days) {
34
+ var date = new Date(originDate);
35
+ date.setDate(date.getDate() + days);
36
+ return date;
37
+ }
38
+ function addMonths(originDate, months) {
39
+ var date = new Date(originDate);
40
+ date.setMonth(date.getMonth() + months);
41
+ return date;
42
+ }
43
+ function getAllDates(startDate, stopDate) {
44
+ var dateArray = [];
45
+ const endDate = new Date(stopDate);
46
+ var currentDate = new Date(startDate);
47
+ while (currentDate <= endDate) {
48
+ dateArray.push(new Date(currentDate));
49
+ currentDate = addDays(currentDate, 1);
50
+ }
51
+ return dateArray;
52
+ }
53
+ function getAllDatesFromDate(monthsAroundDate, date) {
54
+ const startDate = addMonths(date, -monthsAroundDate);
55
+ const stopDate = addMonths(date, monthsAroundDate);
56
+ return getAllDates(startDate, stopDate);
57
+ }
58
+ function generateAgendaItems(monthsAroundDate) {
59
+ const todayDate = new Date();
60
+ const dateArray = getAllDatesFromDate(monthsAroundDate, todayDate);
61
+ const agendaItems = {};
62
+ dateArray.forEach((date) => (agendaItems[formatDate(date)] = []));
63
+ return agendaItems;
64
+ }
65
+ export function createAgendaSchedule(items, monthsAroundDate) {
66
+ const agendaSchedule = generateAgendaItems(monthsAroundDate);
67
+ const agendaItems = mapItemListToEntryList(items);
68
+ agendaItems.forEach((item) => {
69
+ const itemDate = formatDate(new Date(item.day));
70
+ return (agendaSchedule[itemDate] = [...agendaSchedule[itemDate], item]);
71
+ });
72
+ return agendaSchedule;
73
+ }
74
+ export function getShortName(date, lang) {
75
+ return new Intl.DateTimeFormat(lang, { weekday: 'short' }).format(date);
76
+ }
77
+ function sameDate(date1, date2) {
78
+ if (date1.getDate() === date2.getDate() &&
79
+ date1.getMonth() === date2.getMonth() &&
80
+ date1.getFullYear() === date2.getFullYear()) {
81
+ return true;
82
+ }
83
+ return false;
84
+ }
85
+ export function isToday(date) {
86
+ const d = new Date(date);
87
+ const today = new Date();
88
+ return sameDate(d, today);
89
+ }
90
+ //# sourceMappingURL=agenda.helpers.js.map