@selfcommunity/react-core 0.1.2-alpha.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 (285) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +13 -0
  3. package/lib/cjs/components/provider/SCAlertMessagesProvider/index.js +67 -0
  4. package/lib/cjs/components/provider/SCContextProvider/index.js +117 -0
  5. package/lib/cjs/components/provider/SCLocaleProvider/index.js +158 -0
  6. package/lib/cjs/components/provider/SCNotificationProvider/index.js +73 -0
  7. package/lib/cjs/components/provider/SCPreferencesProvider/index.js +93 -0
  8. package/lib/cjs/components/provider/SCRoutingProvider/index.js +146 -0
  9. package/lib/cjs/components/provider/SCThemeProvider/index.js +123 -0
  10. package/lib/cjs/components/provider/SCUserProvider/index.js +310 -0
  11. package/lib/cjs/components/router/index.js +91 -0
  12. package/lib/cjs/constants/Actions.js +6 -0
  13. package/lib/cjs/constants/ContextProviders.js +29 -0
  14. package/lib/cjs/constants/Device.js +11 -0
  15. package/lib/cjs/constants/Errors.js +10 -0
  16. package/lib/cjs/constants/Features.js +84 -0
  17. package/lib/cjs/constants/Locale.js +19 -0
  18. package/lib/cjs/constants/Notification.js +67 -0
  19. package/lib/cjs/constants/Notifications.js +27 -0
  20. package/lib/cjs/constants/Preferences.js +344 -0
  21. package/lib/cjs/constants/Routes.js +68 -0
  22. package/lib/cjs/constants/Session.js +22 -0
  23. package/lib/cjs/constants/Theme.js +6 -0
  24. package/lib/cjs/constants/WebSocket.js +10 -0
  25. package/lib/cjs/hooks/useSCAuth.js +340 -0
  26. package/lib/cjs/hooks/useSCCachingManager.js +58 -0
  27. package/lib/cjs/hooks/useSCConnectionsManager.js +285 -0
  28. package/lib/cjs/hooks/useSCFetchCategories.js +71 -0
  29. package/lib/cjs/hooks/useSCFetchCategory.js +68 -0
  30. package/lib/cjs/hooks/useSCFetchCommentObject.js +68 -0
  31. package/lib/cjs/hooks/useSCFetchCommentObjects.js +296 -0
  32. package/lib/cjs/hooks/useSCFetchCustomAdv.js +84 -0
  33. package/lib/cjs/hooks/useSCFetchFeedObject.js +79 -0
  34. package/lib/cjs/hooks/useSCFetchIncubator.js +68 -0
  35. package/lib/cjs/hooks/useSCFetchTag.js +68 -0
  36. package/lib/cjs/hooks/useSCFetchUser.js +68 -0
  37. package/lib/cjs/hooks/useSCFollowedCategoriesManager.js +162 -0
  38. package/lib/cjs/hooks/useSCFollowersManager.js +232 -0
  39. package/lib/cjs/hooks/useSCMediaClick.js +27 -0
  40. package/lib/cjs/hooks/useSCSubscribedIncubatorsManager.js +165 -0
  41. package/lib/cjs/hooks/useSCWebPushMessaging.js +286 -0
  42. package/lib/cjs/hooks/useSCWebSocket.js +120 -0
  43. package/lib/cjs/index.js +169 -0
  44. package/lib/cjs/scss/styles.scss +1 -0
  45. package/lib/cjs/themes/theme.js +165 -0
  46. package/lib/cjs/types/context.js +3 -0
  47. package/lib/cjs/types/index.js +22 -0
  48. package/lib/cjs/utils/errors.js +196 -0
  49. package/lib/cjs/utils/locale.js +56 -0
  50. package/lib/cjs/utils/logger.js +32 -0
  51. package/lib/cjs/utils/object.js +44 -0
  52. package/lib/cjs/utils/session.js +17 -0
  53. package/lib/cjs/utils/string.js +57 -0
  54. package/lib/cjs/utils/url.js +70 -0
  55. package/lib/cjs/utils/user.js +83 -0
  56. package/lib/cjs/utils/validator.js +771 -0
  57. package/lib/cjs/utils/webPushMessaging.js +110 -0
  58. package/lib/cjs/utils/websocket.js +307 -0
  59. package/lib/esm/api-services/src/client/index.d.ts +115 -0
  60. package/lib/esm/api-services/src/client/index.d.ts.map +1 -0
  61. package/lib/esm/api-services/src/constants/Endpoints.d.ts +10 -0
  62. package/lib/esm/api-services/src/constants/Endpoints.d.ts.map +1 -0
  63. package/lib/esm/api-services/src/index.d.ts +24 -0
  64. package/lib/esm/api-services/src/index.d.ts.map +1 -0
  65. package/lib/esm/api-services/src/services/category/index.d.ts +13 -0
  66. package/lib/esm/api-services/src/services/category/index.d.ts.map +1 -0
  67. package/lib/esm/api-services/src/services/feature/index.d.ts +10 -0
  68. package/lib/esm/api-services/src/services/feature/index.d.ts.map +1 -0
  69. package/lib/esm/api-services/src/services/preference/index.d.ts +16 -0
  70. package/lib/esm/api-services/src/services/preference/index.d.ts.map +1 -0
  71. package/lib/esm/api-services/src/services/user/index.d.ts +16 -0
  72. package/lib/esm/api-services/src/services/user/index.d.ts.map +1 -0
  73. package/lib/esm/api-services/src/utils/http.d.ts +6 -0
  74. package/lib/esm/api-services/src/utils/http.d.ts.map +1 -0
  75. package/lib/esm/api-services/src/utils/token.d.ts +16 -0
  76. package/lib/esm/api-services/src/utils/token.d.ts.map +1 -0
  77. package/lib/esm/components/provider/SCAlertMessagesProvider/index.js +67 -0
  78. package/lib/esm/components/provider/SCContextProvider/index.js +117 -0
  79. package/lib/esm/components/provider/SCLocaleProvider/index.js +158 -0
  80. package/lib/esm/components/provider/SCNotificationProvider/index.js +73 -0
  81. package/lib/esm/components/provider/SCPreferencesProvider/index.js +93 -0
  82. package/lib/esm/components/provider/SCRoutingProvider/index.js +146 -0
  83. package/lib/esm/components/provider/SCThemeProvider/index.js +123 -0
  84. package/lib/esm/components/provider/SCUserProvider/index.js +310 -0
  85. package/lib/esm/components/router/index.js +91 -0
  86. package/lib/esm/constants/Actions.js +6 -0
  87. package/lib/esm/constants/ContextProviders.js +29 -0
  88. package/lib/esm/constants/Device.js +11 -0
  89. package/lib/esm/constants/Errors.js +10 -0
  90. package/lib/esm/constants/Features.js +84 -0
  91. package/lib/esm/constants/Locale.js +19 -0
  92. package/lib/esm/constants/Notification.js +67 -0
  93. package/lib/esm/constants/Notifications.js +27 -0
  94. package/lib/esm/constants/Preferences.js +344 -0
  95. package/lib/esm/constants/Routes.js +68 -0
  96. package/lib/esm/constants/Session.js +22 -0
  97. package/lib/esm/constants/Theme.js +6 -0
  98. package/lib/esm/constants/WebSocket.js +10 -0
  99. package/lib/esm/hooks/useSCAuth.js +340 -0
  100. package/lib/esm/hooks/useSCCachingManager.js +58 -0
  101. package/lib/esm/hooks/useSCConnectionsManager.js +285 -0
  102. package/lib/esm/hooks/useSCFetchCategories.js +71 -0
  103. package/lib/esm/hooks/useSCFetchCategory.js +68 -0
  104. package/lib/esm/hooks/useSCFetchCommentObject.js +68 -0
  105. package/lib/esm/hooks/useSCFetchCommentObjects.js +296 -0
  106. package/lib/esm/hooks/useSCFetchCustomAdv.js +84 -0
  107. package/lib/esm/hooks/useSCFetchFeedObject.js +79 -0
  108. package/lib/esm/hooks/useSCFetchIncubator.js +68 -0
  109. package/lib/esm/hooks/useSCFetchTag.js +68 -0
  110. package/lib/esm/hooks/useSCFetchUser.js +68 -0
  111. package/lib/esm/hooks/useSCFollowedCategoriesManager.js +162 -0
  112. package/lib/esm/hooks/useSCFollowersManager.js +232 -0
  113. package/lib/esm/hooks/useSCMediaClick.js +27 -0
  114. package/lib/esm/hooks/useSCSubscribedIncubatorsManager.js +165 -0
  115. package/lib/esm/hooks/useSCWebPushMessaging.js +286 -0
  116. package/lib/esm/hooks/useSCWebSocket.js +120 -0
  117. package/lib/esm/index.js +169 -0
  118. package/lib/esm/react-core/src/components/provider/SCAlertMessagesProvider/index.d.ts +37 -0
  119. package/lib/esm/react-core/src/components/provider/SCAlertMessagesProvider/index.d.ts.map +1 -0
  120. package/lib/esm/react-core/src/components/provider/SCContextProvider/index.d.ts +35 -0
  121. package/lib/esm/react-core/src/components/provider/SCContextProvider/index.d.ts.map +1 -0
  122. package/lib/esm/react-core/src/components/provider/SCLocaleProvider/index.d.ts +42 -0
  123. package/lib/esm/react-core/src/components/provider/SCLocaleProvider/index.d.ts.map +1 -0
  124. package/lib/esm/react-core/src/components/provider/SCNotificationProvider/index.d.ts +37 -0
  125. package/lib/esm/react-core/src/components/provider/SCNotificationProvider/index.d.ts.map +1 -0
  126. package/lib/esm/react-core/src/components/provider/SCPreferencesProvider/index.d.ts +38 -0
  127. package/lib/esm/react-core/src/components/provider/SCPreferencesProvider/index.d.ts.map +1 -0
  128. package/lib/esm/react-core/src/components/provider/SCRoutingProvider/index.d.ts +39 -0
  129. package/lib/esm/react-core/src/components/provider/SCRoutingProvider/index.d.ts.map +1 -0
  130. package/lib/esm/react-core/src/components/provider/SCThemeProvider/index.d.ts +49 -0
  131. package/lib/esm/react-core/src/components/provider/SCThemeProvider/index.d.ts.map +1 -0
  132. package/lib/esm/react-core/src/components/provider/SCUserProvider/index.d.ts +38 -0
  133. package/lib/esm/react-core/src/components/provider/SCUserProvider/index.d.ts.map +1 -0
  134. package/lib/esm/react-core/src/components/router/index.d.ts +34 -0
  135. package/lib/esm/react-core/src/components/router/index.d.ts.map +1 -0
  136. package/lib/esm/react-core/src/constants/Actions.d.ts +2 -0
  137. package/lib/esm/react-core/src/constants/Actions.d.ts.map +1 -0
  138. package/lib/esm/react-core/src/constants/ContextProviders.d.ts +6 -0
  139. package/lib/esm/react-core/src/constants/ContextProviders.d.ts.map +1 -0
  140. package/lib/esm/react-core/src/constants/Device.d.ts +6 -0
  141. package/lib/esm/react-core/src/constants/Device.d.ts.map +1 -0
  142. package/lib/esm/react-core/src/constants/Errors.d.ts +5 -0
  143. package/lib/esm/react-core/src/constants/Errors.d.ts.map +1 -0
  144. package/lib/esm/react-core/src/constants/Features.d.ts +41 -0
  145. package/lib/esm/react-core/src/constants/Features.d.ts.map +1 -0
  146. package/lib/esm/react-core/src/constants/Locale.d.ts +8 -0
  147. package/lib/esm/react-core/src/constants/Locale.d.ts.map +1 -0
  148. package/lib/esm/react-core/src/constants/Notification.d.ts +55 -0
  149. package/lib/esm/react-core/src/constants/Notification.d.ts.map +1 -0
  150. package/lib/esm/react-core/src/constants/Notifications.d.ts +11 -0
  151. package/lib/esm/react-core/src/constants/Notifications.d.ts.map +1 -0
  152. package/lib/esm/react-core/src/constants/Routes.d.ts +29 -0
  153. package/lib/esm/react-core/src/constants/Routes.d.ts.map +1 -0
  154. package/lib/esm/react-core/src/constants/Session.d.ts +10 -0
  155. package/lib/esm/react-core/src/constants/Session.d.ts.map +1 -0
  156. package/lib/esm/react-core/src/constants/Theme.d.ts +2 -0
  157. package/lib/esm/react-core/src/constants/Theme.d.ts.map +1 -0
  158. package/lib/esm/react-core/src/hooks/useSCAuth.d.ts +56 -0
  159. package/lib/esm/react-core/src/hooks/useSCAuth.d.ts.map +1 -0
  160. package/lib/esm/react-core/src/hooks/useSCCachingManager.d.ts +19 -0
  161. package/lib/esm/react-core/src/hooks/useSCCachingManager.d.ts.map +1 -0
  162. package/lib/esm/react-core/src/hooks/useSCConnectionsManager.d.ts +40 -0
  163. package/lib/esm/react-core/src/hooks/useSCConnectionsManager.d.ts.map +1 -0
  164. package/lib/esm/react-core/src/hooks/useSCFetchCategories.d.ts +17 -0
  165. package/lib/esm/react-core/src/hooks/useSCFetchCategories.d.ts.map +1 -0
  166. package/lib/esm/react-core/src/hooks/useSCFetchCategory.d.ts +19 -0
  167. package/lib/esm/react-core/src/hooks/useSCFetchCategory.d.ts.map +1 -0
  168. package/lib/esm/react-core/src/hooks/useSCFetchCommentObject.d.ts +19 -0
  169. package/lib/esm/react-core/src/hooks/useSCFetchCommentObject.d.ts.map +1 -0
  170. package/lib/esm/react-core/src/hooks/useSCFetchCommentObjects.d.ts +54 -0
  171. package/lib/esm/react-core/src/hooks/useSCFetchCommentObjects.d.ts.map +1 -0
  172. package/lib/esm/react-core/src/hooks/useSCFetchCustomAdv.d.ts +19 -0
  173. package/lib/esm/react-core/src/hooks/useSCFetchCustomAdv.d.ts.map +1 -0
  174. package/lib/esm/react-core/src/hooks/useSCFetchFeedObject.d.ts +21 -0
  175. package/lib/esm/react-core/src/hooks/useSCFetchFeedObject.d.ts.map +1 -0
  176. package/lib/esm/react-core/src/hooks/useSCFetchIncubator.d.ts +19 -0
  177. package/lib/esm/react-core/src/hooks/useSCFetchIncubator.d.ts.map +1 -0
  178. package/lib/esm/react-core/src/hooks/useSCFetchTag.d.ts +19 -0
  179. package/lib/esm/react-core/src/hooks/useSCFetchTag.d.ts.map +1 -0
  180. package/lib/esm/react-core/src/hooks/useSCFetchUser.d.ts +19 -0
  181. package/lib/esm/react-core/src/hooks/useSCFetchUser.d.ts.map +1 -0
  182. package/lib/esm/react-core/src/hooks/useSCFollowedCategoriesManager.d.ts +37 -0
  183. package/lib/esm/react-core/src/hooks/useSCFollowedCategoriesManager.d.ts.map +1 -0
  184. package/lib/esm/react-core/src/hooks/useSCFollowersManager.d.ts +37 -0
  185. package/lib/esm/react-core/src/hooks/useSCFollowersManager.d.ts.map +1 -0
  186. package/lib/esm/react-core/src/hooks/useSCMediaClick.d.ts +4 -0
  187. package/lib/esm/react-core/src/hooks/useSCMediaClick.d.ts.map +1 -0
  188. package/lib/esm/react-core/src/hooks/useSCSubscribedIncubatorsManager.d.ts +27 -0
  189. package/lib/esm/react-core/src/hooks/useSCSubscribedIncubatorsManager.d.ts.map +1 -0
  190. package/lib/esm/react-core/src/hooks/useSCWebPushMessaging.d.ts +9 -0
  191. package/lib/esm/react-core/src/hooks/useSCWebPushMessaging.d.ts.map +1 -0
  192. package/lib/esm/react-core/src/hooks/useSCWebSocket.d.ts +12 -0
  193. package/lib/esm/react-core/src/hooks/useSCWebSocket.d.ts.map +1 -0
  194. package/lib/esm/react-core/src/index.d.ts +77 -0
  195. package/lib/esm/react-core/src/index.d.ts.map +1 -0
  196. package/lib/esm/react-core/src/types/context.d.ts +428 -0
  197. package/lib/esm/react-core/src/types/context.d.ts.map +1 -0
  198. package/lib/esm/react-core/src/types/index.d.ts +3 -0
  199. package/lib/esm/react-core/src/types/index.d.ts.map +1 -0
  200. package/lib/esm/react-core/src/utils/errors.d.ts +98 -0
  201. package/lib/esm/react-core/src/utils/errors.d.ts.map +1 -0
  202. package/lib/esm/react-core/src/utils/locale.d.ts +10 -0
  203. package/lib/esm/react-core/src/utils/locale.d.ts.map +1 -0
  204. package/lib/esm/react-core/src/utils/logger.d.ts +11 -0
  205. package/lib/esm/react-core/src/utils/logger.d.ts.map +1 -0
  206. package/lib/esm/react-core/src/utils/object.d.ts +13 -0
  207. package/lib/esm/react-core/src/utils/object.d.ts.map +1 -0
  208. package/lib/esm/react-core/src/utils/session.d.ts +6 -0
  209. package/lib/esm/react-core/src/utils/session.d.ts.map +1 -0
  210. package/lib/esm/react-core/src/utils/string.d.ts +21 -0
  211. package/lib/esm/react-core/src/utils/string.d.ts.map +1 -0
  212. package/lib/esm/react-core/src/utils/url.d.ts +22 -0
  213. package/lib/esm/react-core/src/utils/url.d.ts.map +1 -0
  214. package/lib/esm/react-core/src/utils/user.d.ts +41 -0
  215. package/lib/esm/react-core/src/utils/user.d.ts.map +1 -0
  216. package/lib/esm/react-core/src/utils/validator.d.ts +239 -0
  217. package/lib/esm/react-core/src/utils/validator.d.ts.map +1 -0
  218. package/lib/esm/react-core/src/utils/webPushMessaging.d.ts +14 -0
  219. package/lib/esm/react-core/src/utils/webPushMessaging.d.ts.map +1 -0
  220. package/lib/esm/react-core/src/utils/websocket.d.ts +177 -0
  221. package/lib/esm/react-core/src/utils/websocket.d.ts.map +1 -0
  222. package/lib/esm/react-i18n/src/index.d.ts +815 -0
  223. package/lib/esm/react-i18n/src/index.d.ts.map +1 -0
  224. package/lib/esm/scss/styles.scss +1 -0
  225. package/lib/esm/themes/theme.js +165 -0
  226. package/lib/esm/types/context.js +3 -0
  227. package/lib/esm/types/index.js +22 -0
  228. package/lib/esm/types/src/index.d.ts +9 -0
  229. package/lib/esm/types/src/index.d.ts.map +1 -0
  230. package/lib/esm/types/src/types/auth.d.ts +26 -0
  231. package/lib/esm/types/src/types/auth.d.ts.map +1 -0
  232. package/lib/esm/types/src/types/broadcastMessage.d.ts +73 -0
  233. package/lib/esm/types/src/types/broadcastMessage.d.ts.map +1 -0
  234. package/lib/esm/types/src/types/category.d.ts +100 -0
  235. package/lib/esm/types/src/types/category.d.ts.map +1 -0
  236. package/lib/esm/types/src/types/comment.d.ts +97 -0
  237. package/lib/esm/types/src/types/comment.d.ts.map +1 -0
  238. package/lib/esm/types/src/types/customAdv.d.ts +53 -0
  239. package/lib/esm/types/src/types/customAdv.d.ts.map +1 -0
  240. package/lib/esm/types/src/types/customNotification.d.ts +28 -0
  241. package/lib/esm/types/src/types/customNotification.d.ts.map +1 -0
  242. package/lib/esm/types/src/types/embed.d.ts +33 -0
  243. package/lib/esm/types/src/types/embed.d.ts.map +1 -0
  244. package/lib/esm/types/src/types/feed.d.ts +208 -0
  245. package/lib/esm/types/src/types/feed.d.ts.map +1 -0
  246. package/lib/esm/types/src/types/incubator.d.ts +53 -0
  247. package/lib/esm/types/src/types/incubator.d.ts.map +1 -0
  248. package/lib/esm/types/src/types/index.d.ts +22 -0
  249. package/lib/esm/types/src/types/index.d.ts.map +1 -0
  250. package/lib/esm/types/src/types/location.d.ts +61 -0
  251. package/lib/esm/types/src/types/location.d.ts.map +1 -0
  252. package/lib/esm/types/src/types/media.d.ts +52 -0
  253. package/lib/esm/types/src/types/media.d.ts.map +1 -0
  254. package/lib/esm/types/src/types/notification.d.ts +416 -0
  255. package/lib/esm/types/src/types/notification.d.ts.map +1 -0
  256. package/lib/esm/types/src/types/poll.d.ts +77 -0
  257. package/lib/esm/types/src/types/poll.d.ts.map +1 -0
  258. package/lib/esm/types/src/types/privateMessage.d.ts +109 -0
  259. package/lib/esm/types/src/types/privateMessage.d.ts.map +1 -0
  260. package/lib/esm/types/src/types/prize.d.ts +48 -0
  261. package/lib/esm/types/src/types/prize.d.ts.map +1 -0
  262. package/lib/esm/types/src/types/tag.d.ts +47 -0
  263. package/lib/esm/types/src/types/tag.d.ts.map +1 -0
  264. package/lib/esm/types/src/types/user.d.ts +227 -0
  265. package/lib/esm/types/src/types/user.d.ts.map +1 -0
  266. package/lib/esm/utils/errors.js +196 -0
  267. package/lib/esm/utils/locale.js +56 -0
  268. package/lib/esm/utils/logger.js +32 -0
  269. package/lib/esm/utils/object.js +44 -0
  270. package/lib/esm/utils/session.js +17 -0
  271. package/lib/esm/utils/src/index.d.ts +7 -0
  272. package/lib/esm/utils/src/index.d.ts.map +1 -0
  273. package/lib/esm/utils/src/utils/string.d.ts +21 -0
  274. package/lib/esm/utils/src/utils/string.d.ts.map +1 -0
  275. package/lib/esm/utils/src/utils/url.d.ts +22 -0
  276. package/lib/esm/utils/src/utils/url.d.ts.map +1 -0
  277. package/lib/esm/utils/string.js +57 -0
  278. package/lib/esm/utils/url.js +70 -0
  279. package/lib/esm/utils/user.js +83 -0
  280. package/lib/esm/utils/validator.js +771 -0
  281. package/lib/esm/utils/webPushMessaging.js +110 -0
  282. package/lib/esm/utils/websocket.js +307 -0
  283. package/lib/umd/react-core.js +2 -0
  284. package/lib/umd/react-core.js.LICENSE.txt +1 -0
  285. package/package.json +128 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = useSCSubscribedIncubatorsManager;
5
+
6
+ var _react = require("react");
7
+
8
+ var _apiServices = require("@selfcommunity/api-services");
9
+
10
+ var _logger = require("../utils/logger");
11
+
12
+ var _Errors = require("../constants/Errors");
13
+
14
+ var _useSCCachingManager = _interopRequireDefault(require("./useSCCachingManager"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ /**
19
+ :::info
20
+ This custom hook is used to manage to manage subscribed incubators.
21
+ :::
22
+ :::tipHow to use it:
23
+
24
+ Follow these steps:
25
+ ```jsx
26
+ 1. const scUserContext: SCUserContextType = useSCUser();
27
+ 2. const scSubscribedIncubatorsManager: SCSubscribedIncubatorsManagerType = scUserContext.managers.incubators;
28
+ 3. scSubscribedIncubatorsManager.isSubscribed(incubator)
29
+ ```
30
+ :::
31
+ */
32
+ function useSCSubscribedIncubatorsManager(user) {
33
+ const {
34
+ cache,
35
+ updateCache,
36
+ emptyCache,
37
+ data,
38
+ setData,
39
+ loading,
40
+ setLoading,
41
+ isLoading
42
+ } = (0, _useSCCachingManager.default)();
43
+ /**
44
+ * Memoized refresh all subscribed
45
+ * It makes a single request to the server and retrieves
46
+ * all the incubators subscribed by the authenticated user in a single solution
47
+ * It might be useful for multi-tab sync
48
+ */
49
+
50
+ const refresh = (0, _react.useMemo)(() => () => {
51
+ emptyCache();
52
+
53
+ if (user) {
54
+ // Only if user is authenticated
55
+ _apiServices.http.request({
56
+ url: _apiServices.Endpoints.GetAllIncubators.url({}),
57
+ method: _apiServices.Endpoints.GetAllIncubators.method
58
+ }).then(res => {
59
+ if (res.status >= 300) {
60
+ return Promise.reject(res);
61
+ }
62
+
63
+ updateCache(Object.keys(res.data.results).map(id => parseInt(id)));
64
+ setData(Object.entries(res.data.results).filter(([k, v]) => v === true).map(([k, v]) => parseInt(k)));
65
+ return Promise.resolve(res.data);
66
+ }).catch(e => {
67
+ _logger.Logger.error(_Errors.SCOPE_SC_CORE, 'Unable to refresh incubators subscribed by the authenticated user.');
68
+
69
+ _logger.Logger.error(_Errors.SCOPE_SC_CORE, e);
70
+ });
71
+ }
72
+ }, [data, user, cache]);
73
+ /**
74
+ * Memoized subscribe/unsubscribe incubator
75
+ * Toggle action
76
+ */
77
+
78
+ const subscribe = (0, _react.useMemo)(() => incubator => {
79
+ setLoading(prev => [...prev, ...[incubator.id]]);
80
+ return _apiServices.http.request({
81
+ url: _apiServices.Endpoints.SubscribeToIncubator.url({
82
+ id: incubator.id
83
+ }),
84
+ method: _apiServices.Endpoints.SubscribeToIncubator.method
85
+ }).then(res => {
86
+ if (res.status >= 300) {
87
+ return Promise.reject(res);
88
+ }
89
+
90
+ updateCache([incubator.id]);
91
+ const isSubscribed = data.includes(incubator.id);
92
+ setData(prev => isSubscribed ? prev.filter(id => id !== incubator.id) : [...[incubator.id], ...prev]);
93
+ setLoading(prev => prev.filter(i => i !== incubator.id));
94
+ return Promise.resolve(res.data);
95
+ });
96
+ }, [data, loading, cache]);
97
+ /**
98
+ * Check if the authenticated user has subscribed the incubator
99
+ * Update the subscribed cached
100
+ * Update subscribed incubators
101
+ * @param incubator
102
+ */
103
+
104
+ const checkIsIncubatorFollowed = incubator => {
105
+ setLoading(prev => prev.includes(incubator.id) ? prev : [...prev, ...[incubator.id]]);
106
+
107
+ _apiServices.http.request({
108
+ url: _apiServices.Endpoints.CheckIncubatorSubscription.url({
109
+ id: incubator.id
110
+ }),
111
+ method: _apiServices.Endpoints.CheckIncubatorSubscription.method
112
+ }).then(res => {
113
+ if (res.status >= 300) {
114
+ return Promise.reject(res);
115
+ }
116
+
117
+ updateCache([incubator.id]);
118
+ setData(prev => res.data.subscribed ? [...prev, ...[incubator.id]] : prev.filter(id => id !== incubator.id));
119
+ setLoading(prev => prev.filter(i => i !== incubator.id));
120
+ return Promise.resolve(res.data);
121
+ });
122
+ }; // /**
123
+ // * Bypass remote check if the incubator is subscribed
124
+ // */
125
+ // const getSubscriptionStatus = useMemo(
126
+ // () => (incubator: SCIncubatorType) => {
127
+ // const isSubscribed = incubator.subscribed === true;
128
+ // updateCache([incubator.id]);
129
+ // setData((prev) => (isSubscribed ? [...prev, ...[incubator.id]] : prev));
130
+ // return isSubscribed;
131
+ // },
132
+ // [data, cache]
133
+ // );
134
+
135
+ /**
136
+ * Memoized isSubscribed
137
+ * If incubator is already in cache -> check if the incubator is in subscribed,
138
+ * otherwise, check if auth user is subscribed to the incubator
139
+ */
140
+
141
+
142
+ const isSubscribed = (0, _react.useMemo)(() => incubator => {
143
+ if (cache.includes(incubator.id)) {
144
+ return Boolean(data.includes(incubator.id));
145
+ } // if ('subscribed' in incubator) {
146
+ // return getSubscriptionStatus(incubator);
147
+ // }
148
+
149
+
150
+ if (!loading.includes(incubator.id)) {
151
+ checkIsIncubatorFollowed(incubator);
152
+ }
153
+
154
+ return false;
155
+ }, [data, loading, cache]);
156
+ return {
157
+ incubators: data,
158
+ loading,
159
+ isLoading,
160
+ subscribe,
161
+ isSubscribed,
162
+ refresh,
163
+ emptyCache
164
+ };
165
+ }
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = useSCWebPushMessaging;
5
+
6
+ var _react = require("react");
7
+
8
+ var _SCContextProvider = require("../components/provider/SCContextProvider");
9
+
10
+ var _SCUserProvider = require("../components/provider/SCUserProvider");
11
+
12
+ var _logger = require("../utils/logger");
13
+
14
+ var _webPushMessaging = require("../utils/webPushMessaging");
15
+
16
+ var _Errors = require("../constants/Errors");
17
+
18
+ var _apiServices = require("@selfcommunity/api-services");
19
+
20
+ var _Device = require("../constants/Device");
21
+
22
+ var _SCPreferencesProvider = require("../components/provider/SCPreferencesProvider");
23
+
24
+ var SCPreferences = _interopRequireWildcard(require("../constants/Preferences"));
25
+
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
30
+ /**
31
+ :::info
32
+ This custom hook is used to to init web push messaging.
33
+ :::
34
+ */
35
+ function useSCWebPushMessaging() {
36
+ // CONTEXT
37
+ const scContext = (0, _SCContextProvider.useSCContext)();
38
+ const scUserContext = (0, _SCUserProvider.useSCUser)();
39
+ const scPreferencesContext = (0, _react.useContext)(_SCPreferencesProvider.SCPreferencesContext); // STATE
40
+
41
+ const [wpSubscription, setWpSubscription] = (0, _react.useState)(null); // REFS
42
+
43
+ const subAttempts = (0, _react.useRef)(0); // CONST
44
+
45
+ const applicationServerKey = scContext.settings.notifications.webPushMessaging.applicationServerKey !== undefined ? scContext.settings.notifications.webPushMessaging.applicationServerKey : SCPreferences.PROVIDERS_WEB_PUSH_PUBLIC_KEY in scPreferencesContext.preferences ? scPreferencesContext.preferences[SCPreferences.PROVIDERS_WEB_PUSH_PUBLIC_KEY].value : null;
46
+ const webPushEnabled = SCPreferences.PROVIDERS_WEB_PUSH_ENABLED in scPreferencesContext.preferences && scPreferencesContext.preferences[SCPreferences.PROVIDERS_WEB_PUSH_ENABLED].value ? scPreferencesContext.preferences[SCPreferences.PROVIDERS_WEB_PUSH_ENABLED].value : false;
47
+ /**
48
+ * perform update the Subscription
49
+ * @param data
50
+ * @param remove
51
+ */
52
+
53
+ const performUpdateSubscription = (data, remove) => {
54
+ const url = remove ? _apiServices.Endpoints.DeleteDevice.url({
55
+ type: _Device.WEB_PUSH_NOTIFICATION_DEVICE_TYPE,
56
+ id: data.registration_id
57
+ }) : _apiServices.Endpoints.NewDevice.url({
58
+ type: _Device.WEB_PUSH_NOTIFICATION_DEVICE_TYPE
59
+ });
60
+ const method = remove ? _apiServices.Endpoints.DeleteDevice.method : _apiServices.Endpoints.NewDevice.method;
61
+ return _apiServices.http.request(Object.assign({
62
+ url,
63
+ method
64
+ }, remove ? {} : {
65
+ data: data
66
+ })).then(res => {
67
+ if (res.status >= 300) {
68
+ return Promise.reject(res);
69
+ }
70
+
71
+ return Promise.resolve(res.data);
72
+ });
73
+ };
74
+ /**
75
+ * updateSubscriptionOnServer to sync current subscription
76
+ * @param sub
77
+ */
78
+
79
+
80
+ const updateSubscriptionOnServer = (sub, remove) => {
81
+ const browser = (0, _webPushMessaging.loadVersionBrowser)();
82
+ const endpointParts = sub.endpoint.split('/');
83
+ const registration_id = endpointParts[endpointParts.length - 1];
84
+ const data = {
85
+ browser: browser.name.toUpperCase(),
86
+ p256dh: btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('p256dh')))),
87
+ auth: btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('auth')))),
88
+ user: scUserContext.user ? scUserContext.user.username : '',
89
+ registration_id: registration_id
90
+ };
91
+ return performUpdateSubscription(data, remove).then(res => {
92
+ if (remove) {
93
+ setWpSubscription(null);
94
+ } else {
95
+ setWpSubscription(res);
96
+ }
97
+ }).catch(e => {
98
+ _logger.Logger.error(_Errors.SCOPE_SC_CORE, e);
99
+ });
100
+ };
101
+ /**
102
+ * Unsubscribe
103
+ * @param callback
104
+ */
105
+
106
+
107
+ const unsubscribe = (callback = null) => {
108
+ navigator.serviceWorker.ready.then(function (serviceWorkerRegistration) {
109
+ // To unsubscribe from push messaging, you need get the
110
+ // subcription object, which you can call unsubscribe() on.
111
+ serviceWorkerRegistration.pushManager.getSubscription().then(pushSubscription => {
112
+ // Check we have a subscription to unsubscribe
113
+ if (!pushSubscription) {
114
+ // No subscription object, so set the state
115
+ // to allow the user to subscribe to push
116
+ return;
117
+ } // We have a subscription, so call unsubscribe on it
118
+
119
+
120
+ pushSubscription.unsubscribe().then(() => {
121
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'Unsubscription successfully'); // Request to server to remove
122
+ // the users data from your data store so you
123
+ // don't attempt to send them push messages anymore
124
+
125
+
126
+ updateSubscriptionOnServer(pushSubscription, true).then(() => {
127
+ callback && callback();
128
+ });
129
+ }).catch(function (e) {
130
+ // We failed to unsubscribe, this can lead to
131
+ // an unusual state, so may be best to remove
132
+ // the subscription id from your data store and
133
+ // inform the user that you disabled push
134
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, `Unsubscription error.`);
135
+
136
+ console.log(e);
137
+ });
138
+ }).catch(function (e) {
139
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, `Error thrown while unsubscribing from push messaging. ${e}`);
140
+ });
141
+ });
142
+ };
143
+ /**
144
+ * Get subscription
145
+ */
146
+
147
+
148
+ const subscribe = () => {
149
+ navigator.serviceWorker.ready.then(function (serviceWorkerRegistration) {
150
+ serviceWorkerRegistration.pushManager.subscribe({
151
+ userVisibleOnly: true,
152
+ applicationServerKey: (0, _webPushMessaging.urlB64ToUint8Array)(applicationServerKey)
153
+ }).then(function (subscription) {
154
+ if (!subscription) {
155
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'We aren’t subscribed to push.');
156
+ } else {
157
+ updateSubscriptionOnServer(subscription, false);
158
+ }
159
+ }).catch(function (e) {
160
+ if (Notification.permission === 'denied') {
161
+ // The user denied the notification permission which
162
+ // means we failed to subscribe and the user will need
163
+ // to manually change the notification permission to
164
+ // subscribe to push messages
165
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'Permission for Notifications was denied');
166
+ } else {
167
+ // A problem occurred with the subscription
168
+ subAttempts.current += 1;
169
+
170
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, `Unable to subscribe(${subAttempts.current}) to push. ${e}`);
171
+
172
+ if (subAttempts.current < 3) {
173
+ unsubscribe(() => subscribe());
174
+ } else {
175
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, `Unable to subscribe to push. ${e}`);
176
+ }
177
+ }
178
+ });
179
+ });
180
+ };
181
+ /**
182
+ * Request web push notification permission
183
+ * @type {(function(): void)|*}
184
+ */
185
+
186
+
187
+ const requestNotificationPermission = () => {
188
+ if (Notification.permission !== 'granted') {
189
+ Notification.requestPermission().then(function (permission) {
190
+ if (permission === 'granted') {
191
+ navigator.serviceWorker.ready.then(serviceWorkerRegistration => {
192
+ // Do we already have a push message subscription?
193
+ serviceWorkerRegistration.pushManager.getSubscription().then(function (subscription) {
194
+ // Enable any UI which subscribes / unsubscribes from
195
+ // push messages.
196
+ if (!subscription) {
197
+ subscribe();
198
+ return;
199
+ } // Keep your server in sync with the latest subscription
200
+
201
+
202
+ updateSubscriptionOnServer(subscription, false);
203
+ }).catch(err => {
204
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'Error during getSubscription()');
205
+
206
+ console.log(err);
207
+ });
208
+ });
209
+ } else {
210
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'Permission for Notifications was denied');
211
+ }
212
+ });
213
+ }
214
+ };
215
+ /**
216
+ * Initialize state
217
+ */
218
+
219
+
220
+ const initialiseState = () => {
221
+ /**
222
+ * Check if Notifications supported in the service worker
223
+ */
224
+ if (!('showNotification' in ServiceWorkerRegistration.prototype)) {
225
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, "Notifications aren't supported.");
226
+
227
+ return;
228
+ }
229
+ /**
230
+ * Features, such as service workers and push notifications, require HTTPS secure domains,
231
+ * so your development environment must serve content over HTTPS to match a production environment.
232
+ * Check if push messaging is supported.
233
+ */
234
+
235
+
236
+ if (!('PushManager' in window && 'serviceWorker' in navigator)) {
237
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, "Service Worker or Push messaging aren't supported.");
238
+
239
+ return;
240
+ }
241
+ /**
242
+ * Check the current Notification permission.
243
+ * If its denied, it's a permanent block until the user changes the permission
244
+ */
245
+
246
+
247
+ if (Notification.permission === 'denied') {
248
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'The user has blocked notifications.');
249
+
250
+ return;
251
+ } else {
252
+ if (Notification.permission === 'default') {
253
+ _logger.Logger.info(_Errors.SCOPE_SC_CORE, 'Request permission.');
254
+
255
+ requestNotificationPermission();
256
+ } else if (Notification.permission === 'granted') {
257
+ subscribe();
258
+ }
259
+ }
260
+ };
261
+ /**
262
+ * Init state web push subscription
263
+ * If web push enabled, applicationServerKey and user is logged, check subscription
264
+ */
265
+
266
+
267
+ (0, _react.useEffect)(() => {
268
+ if (!wpSubscription && !scContext.settings.notifications.webPushMessaging.disableToastMessage && scUserContext.user) {
269
+ if (!webPushEnabled) {
270
+ _logger.Logger.warn(_Errors.SCOPE_SC_CORE, 'This instance is not configured to support notifications. Enable this feature.');
271
+ } else if (!applicationServerKey) {
272
+ _logger.Logger.warn(_Errors.SCOPE_SC_CORE, 'Invalid or missing applicationServerKey. Check the configuration that is passed to the SCContextProvider.');
273
+ } else {
274
+ initialiseState();
275
+ }
276
+ }
277
+
278
+ if (!scUserContext.user && wpSubscription) {
279
+ // Unsubscribe if user not in session
280
+ unsubscribe();
281
+ }
282
+ }, [scUserContext.user, scContext.settings.notifications.webPushMessaging, wpSubscription]);
283
+ return {
284
+ wpSubscription
285
+ };
286
+ }
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = useSCWebSocket;
5
+
6
+ var _react = require("react");
7
+
8
+ var _types = require("@selfcommunity/types");
9
+
10
+ var _SCContextProvider = require("../components/provider/SCContextProvider");
11
+
12
+ var _SCUserProvider = require("../components/provider/SCUserProvider");
13
+
14
+ var _websocket = _interopRequireDefault(require("../utils/websocket"));
15
+
16
+ var _Notification = require("../constants/Notification");
17
+
18
+ var _WebSocket = require("../constants/WebSocket");
19
+
20
+ var _pubsubJs = _interopRequireDefault(require("pubsub-js"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ /**
25
+ :::info
26
+ This custom hook is used to to init web socket.
27
+ :::
28
+ */
29
+ function useSCWebSocket() {
30
+ const scContext = (0, _SCContextProvider.useSCContext)();
31
+ const scUserContext = (0, _SCUserProvider.useSCUser)();
32
+ const [wsInstance, setWsInstance] = (0, _react.useState)(null); // Websocket uri and protocols
33
+
34
+ const _wsUri = `wss://${new URL(scContext.settings.portal).hostname}/ws/${_WebSocket.WS_FACILITY_NOTIFY}?subscribe-user`;
35
+
36
+ const _wsProtocol = scContext.settings.session.authToken && scContext.settings.session.authToken.accessToken ? `${_WebSocket.WS_PROTOCOL_PREFIX}${scContext.settings.session.authToken.accessToken}` : null;
37
+ /**
38
+ * Before document unload handler
39
+ * Close webSocket
40
+ */
41
+
42
+
43
+ const handleBeforeUnload = () => {
44
+ wsInstance && wsInstance.close();
45
+ };
46
+ /**
47
+ * Check if there is a currently active session and a
48
+ * wsInstance connection when the provider is mounted for the first time.
49
+ * If there is an error, it means there is no session.
50
+ */
51
+
52
+
53
+ (0, _react.useEffect)(() => {
54
+ if (scUserContext.user && !wsInstance && _wsUri && _wsProtocol) {
55
+ setWsInstance(_websocket.default.getInstance({
56
+ uri: _wsUri,
57
+ heartbeatMsg: _WebSocket.WS_HEARTBEAT_MESSAGE,
58
+ protocols: [_wsProtocol],
59
+ receiveMessage: receiveMessage
60
+ })); // Close the socket channel before window unload
61
+
62
+ window.addEventListener('beforeunload', handleBeforeUnload);
63
+ }
64
+
65
+ if (!scUserContext.user && wsInstance) {
66
+ // Disconnect the socket
67
+ window.removeEventListener('beforeunload', handleBeforeUnload);
68
+ wsInstance && wsInstance.close();
69
+ }
70
+ }, [scUserContext.user]);
71
+ /**
72
+ * Receive a message from wsInstance.
73
+ */
74
+
75
+ const receiveMessage = data => {
76
+ // receive a message though the websocket from the server
77
+ let _data = JSON.parse(data);
78
+
79
+ if (_data && _data.type && _Notification.SCNotificationTopics.includes(_data.type)) {
80
+ if (_data.type === _types.SCNotificationTopicType.INTERACTION) {
81
+ /**
82
+ * With topic interaction there are two types of notifications group:
83
+ * - notification_banner
84
+ * - comment, nested_comment, follow, etc..
85
+ */
86
+ if (_data.data.activity_type === _types.SCNotificationTypologyType.NOTIFICATION_BANNER) {
87
+ /**
88
+ * Notification of type 'notification_banner'
89
+ * It is a special case of notifications with topic 'interaction'
90
+ */
91
+ _pubsubJs.default.publish(`${_data.type}.${_types.SCNotificationTypologyType.NOTIFICATION_BANNER}`, _data);
92
+ } else if (_Notification.SCNotificationMapping[_data.data.activity_type]) {
93
+ /**
94
+ * Notification of type 'comment', 'nested_comment', etc...
95
+ */
96
+ _pubsubJs.default.publish(`${_data.type}.${_Notification.SCNotificationMapping[_data.data.activity_type]}`, _data);
97
+ }
98
+
99
+ setNotificationCounters(_data.data);
100
+ } else {
101
+ _pubsubJs.default.publish(`${_data.type}`, _data);
102
+ }
103
+ }
104
+ };
105
+ /**
106
+ * Update user context counters
107
+ * @param payload
108
+ */
109
+
110
+
111
+ const setNotificationCounters = payload => {
112
+ payload.count_interactions !== undefined && scUserContext.setUnseenInteractionsCounter(payload.count_interactions);
113
+ payload.count_notification_banners !== undefined && scUserContext.setUnseenInteractionsCounter(payload.count_notification_banners);
114
+ };
115
+
116
+ return {
117
+ wsInstance,
118
+ setWsInstance
119
+ };
120
+ }