chat 1.0.8 → 3.0.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 (318) hide show
  1. package/package.json +2 -96
  2. package/readme.md +1 -201
  3. package/lib/module/ChatContext/index.js +0 -2
  4. package/lib/module/ChatContext/index.js.map +0 -1
  5. package/lib/module/ChatContext/types.js +0 -2
  6. package/lib/module/ChatContext/types.js.map +0 -1
  7. package/lib/module/classes/Chat/index.js +0 -2
  8. package/lib/module/classes/Chat/index.js.map +0 -1
  9. package/lib/module/classes/Chat/types.js +0 -2
  10. package/lib/module/classes/Chat/types.js.map +0 -1
  11. package/lib/module/classes/Inbox/index.js +0 -2
  12. package/lib/module/classes/Inbox/index.js.map +0 -1
  13. package/lib/module/classes/Inbox/types.js +0 -2
  14. package/lib/module/classes/Inbox/types.js.map +0 -1
  15. package/lib/module/classes/Message/index.js +0 -2
  16. package/lib/module/classes/Message/index.js.map +0 -1
  17. package/lib/module/classes/Message/types.js +0 -2
  18. package/lib/module/classes/Message/types.js.map +0 -1
  19. package/lib/module/classes/Reaction/index.js +0 -2
  20. package/lib/module/classes/Reaction/index.js.map +0 -1
  21. package/lib/module/classes/Reaction/types.js +0 -2
  22. package/lib/module/classes/Reaction/types.js.map +0 -1
  23. package/lib/module/classes/Room/index.js +0 -2
  24. package/lib/module/classes/Room/index.js.map +0 -1
  25. package/lib/module/classes/Room/types.js +0 -2
  26. package/lib/module/classes/Room/types.js.map +0 -1
  27. package/lib/module/classes/index.js +0 -2
  28. package/lib/module/classes/index.js.map +0 -1
  29. package/lib/module/components/Avatar/index.js +0 -2
  30. package/lib/module/components/Avatar/index.js.map +0 -1
  31. package/lib/module/components/Chat/Bubble/index.js +0 -2
  32. package/lib/module/components/Chat/Bubble/index.js.map +0 -1
  33. package/lib/module/components/Chat/Composer/Input/index.js +0 -2
  34. package/lib/module/components/Chat/Composer/Input/index.js.map +0 -1
  35. package/lib/module/components/Chat/Composer/Send/index.js +0 -2
  36. package/lib/module/components/Chat/Composer/Send/index.js.map +0 -1
  37. package/lib/module/components/Chat/Composer/index.js +0 -2
  38. package/lib/module/components/Chat/Composer/index.js.map +0 -1
  39. package/lib/module/components/Chat/Media/Image/index.js +0 -2
  40. package/lib/module/components/Chat/Media/Image/index.js.map +0 -1
  41. package/lib/module/components/Chat/Media/index.js +0 -2
  42. package/lib/module/components/Chat/Media/index.js.map +0 -1
  43. package/lib/module/components/Chat/Message/Swiper/Action/index.js +0 -2
  44. package/lib/module/components/Chat/Message/Swiper/Action/index.js.map +0 -1
  45. package/lib/module/components/Chat/Message/Swiper/index.js +0 -2
  46. package/lib/module/components/Chat/Message/Swiper/index.js.map +0 -1
  47. package/lib/module/components/Chat/Message/Touchable/index.js +0 -2
  48. package/lib/module/components/Chat/Message/Touchable/index.js.map +0 -1
  49. package/lib/module/components/Chat/Message/index.js +0 -2
  50. package/lib/module/components/Chat/Message/index.js.map +0 -1
  51. package/lib/module/components/Chat/SystemMessage/index.js +0 -2
  52. package/lib/module/components/Chat/SystemMessage/index.js.map +0 -1
  53. package/lib/module/components/Chat/TypingFooter/index.js +0 -2
  54. package/lib/module/components/Chat/TypingFooter/index.js.map +0 -1
  55. package/lib/module/components/Chat/index.js +0 -2
  56. package/lib/module/components/Chat/index.js.map +0 -1
  57. package/lib/module/components/Chat/types.js +0 -2
  58. package/lib/module/components/Chat/types.js.map +0 -1
  59. package/lib/module/components/Chat-Old/Bubble/index.js +0 -2
  60. package/lib/module/components/Chat-Old/Bubble/index.js.map +0 -1
  61. package/lib/module/components/Chat-Old/Composer/Input/index.js +0 -2
  62. package/lib/module/components/Chat-Old/Composer/Input/index.js.map +0 -1
  63. package/lib/module/components/Chat-Old/Composer/Send/index.js +0 -2
  64. package/lib/module/components/Chat-Old/Composer/Send/index.js.map +0 -1
  65. package/lib/module/components/Chat-Old/Composer/index.js +0 -2
  66. package/lib/module/components/Chat-Old/Composer/index.js.map +0 -1
  67. package/lib/module/components/Chat-Old/Message/index.js +0 -2
  68. package/lib/module/components/Chat-Old/Message/index.js.map +0 -1
  69. package/lib/module/components/Chat-Old/Swiper/Action/index.js +0 -2
  70. package/lib/module/components/Chat-Old/Swiper/Action/index.js.map +0 -1
  71. package/lib/module/components/Chat-Old/Swiper/index.js +0 -2
  72. package/lib/module/components/Chat-Old/Swiper/index.js.map +0 -1
  73. package/lib/module/components/Chat-Old/SystemMessage/index.js +0 -2
  74. package/lib/module/components/Chat-Old/SystemMessage/index.js.map +0 -1
  75. package/lib/module/components/Chat-Old/index.js +0 -2
  76. package/lib/module/components/Chat-Old/index.js.map +0 -1
  77. package/lib/module/components/Chat-Old/types.js +0 -2
  78. package/lib/module/components/Chat-Old/types.js.map +0 -1
  79. package/lib/module/components/ChatProvider/index.js +0 -2
  80. package/lib/module/components/ChatProvider/index.js.map +0 -1
  81. package/lib/module/components/ChatProvider/types.js +0 -2
  82. package/lib/module/components/ChatProvider/types.js.map +0 -1
  83. package/lib/module/components/Inbox/Item/Circle/index.js +0 -2
  84. package/lib/module/components/Inbox/Item/Circle/index.js.map +0 -1
  85. package/lib/module/components/Inbox/Item/Circle/types.js +0 -2
  86. package/lib/module/components/Inbox/Item/Circle/types.js.map +0 -1
  87. package/lib/module/components/Inbox/Item/Initials/index.js +0 -2
  88. package/lib/module/components/Inbox/Item/Initials/index.js.map +0 -1
  89. package/lib/module/components/Inbox/Item/ItemDate/index.js +0 -2
  90. package/lib/module/components/Inbox/Item/ItemDate/index.js.map +0 -1
  91. package/lib/module/components/Inbox/Item/Separator/index.js +0 -2
  92. package/lib/module/components/Inbox/Item/Separator/index.js.map +0 -1
  93. package/lib/module/components/Inbox/Item/Subtitle/index.js +0 -2
  94. package/lib/module/components/Inbox/Item/Subtitle/index.js.map +0 -1
  95. package/lib/module/components/Inbox/Item/Swipeable/index.js +0 -2
  96. package/lib/module/components/Inbox/Item/Swipeable/index.js.map +0 -1
  97. package/lib/module/components/Inbox/Item/Title/index.js +0 -2
  98. package/lib/module/components/Inbox/Item/Title/index.js.map +0 -1
  99. package/lib/module/components/Inbox/Item/UnreadIndicator/index.js +0 -2
  100. package/lib/module/components/Inbox/Item/UnreadIndicator/index.js.map +0 -1
  101. package/lib/module/components/Inbox/Item/index.js +0 -2
  102. package/lib/module/components/Inbox/Item/index.js.map +0 -1
  103. package/lib/module/components/Inbox/index.js +0 -2
  104. package/lib/module/components/Inbox/index.js.map +0 -1
  105. package/lib/module/components/Inbox/question.md +0 -21
  106. package/lib/module/components/Inbox/readme.md +0 -21
  107. package/lib/module/components/Inbox/types.js +0 -2
  108. package/lib/module/components/Inbox/types.js.map +0 -1
  109. package/lib/module/components/RoomCreator/Content/Footer/Button/index.js +0 -2
  110. package/lib/module/components/RoomCreator/Content/Footer/Button/index.js.map +0 -1
  111. package/lib/module/components/RoomCreator/Content/Footer/Input/index.js +0 -2
  112. package/lib/module/components/RoomCreator/Content/Footer/Input/index.js.map +0 -1
  113. package/lib/module/components/RoomCreator/Content/Footer/index.js +0 -2
  114. package/lib/module/components/RoomCreator/Content/Footer/index.js.map +0 -1
  115. package/lib/module/components/RoomCreator/Content/Item/Icon/index.js +0 -2
  116. package/lib/module/components/RoomCreator/Content/Item/Icon/index.js.map +0 -1
  117. package/lib/module/components/RoomCreator/Content/Item/index.js +0 -2
  118. package/lib/module/components/RoomCreator/Content/Item/index.js.map +0 -1
  119. package/lib/module/components/RoomCreator/Content/index.js +0 -2
  120. package/lib/module/components/RoomCreator/Content/index.js.map +0 -1
  121. package/lib/module/components/RoomCreator/Header/index.js +0 -2
  122. package/lib/module/components/RoomCreator/Header/index.js.map +0 -1
  123. package/lib/module/components/RoomCreator/index.js +0 -2
  124. package/lib/module/components/RoomCreator/index.js.map +0 -1
  125. package/lib/module/components/RoomCreator/types.js +0 -2
  126. package/lib/module/components/RoomCreator/types.js.map +0 -1
  127. package/lib/module/components/TypingIndicator/index.js +0 -2
  128. package/lib/module/components/TypingIndicator/index.js.map +0 -1
  129. package/lib/module/components/index.js +0 -2
  130. package/lib/module/components/index.js.map +0 -1
  131. package/lib/module/helpers/getInitials.js +0 -2
  132. package/lib/module/helpers/getInitials.js.map +0 -1
  133. package/lib/module/helpers/sortByAvatar.js +0 -2
  134. package/lib/module/helpers/sortByAvatar.js.map +0 -1
  135. package/lib/module/hooks/index.js +0 -2
  136. package/lib/module/hooks/index.js.map +0 -1
  137. package/lib/module/hooks/useCreateRoom/index.js +0 -2
  138. package/lib/module/hooks/useCreateRoom/index.js.map +0 -1
  139. package/lib/module/hooks/useCreator/index.js +0 -2
  140. package/lib/module/hooks/useCreator/index.js.map +0 -1
  141. package/lib/module/hooks/useInbox/index.js +0 -2
  142. package/lib/module/hooks/useInbox/index.js.map +0 -1
  143. package/lib/module/hooks/useInbox/types.js +0 -2
  144. package/lib/module/hooks/useInbox/types.js.map +0 -1
  145. package/lib/module/hooks/useMessages/index.js +0 -2
  146. package/lib/module/hooks/useMessages/index.js.map +0 -1
  147. package/lib/module/hooks/useMessages/types.js +0 -2
  148. package/lib/module/hooks/useMessages/types.js.map +0 -1
  149. package/lib/module/hooks/useRoom/index.js +0 -2
  150. package/lib/module/hooks/useRoom/index.js.map +0 -1
  151. package/lib/module/hooks/useRoom/types.js +0 -2
  152. package/lib/module/hooks/useRoom/types.js.map +0 -1
  153. package/lib/module/hooks/useSend/useSendToGroup/index.js +0 -2
  154. package/lib/module/hooks/useSend/useSendToGroup/index.js.map +0 -1
  155. package/lib/module/hooks/useSend/useSendToPeople/index.js +0 -2
  156. package/lib/module/hooks/useSend/useSendToPeople/index.js.map +0 -1
  157. package/lib/module/hooks/useTyping/index.js +0 -2
  158. package/lib/module/hooks/useTyping/index.js.map +0 -1
  159. package/lib/module/hooks/useTypingOLD/index.js +0 -2
  160. package/lib/module/hooks/useTypingOLD/index.js.map +0 -1
  161. package/lib/module/hooks/useTypingOLD/types.js +0 -2
  162. package/lib/module/hooks/useTypingOLD/types.js.map +0 -1
  163. package/lib/module/hooks/useViewMessages/index.js +0 -2
  164. package/lib/module/hooks/useViewMessages/index.js.map +0 -1
  165. package/lib/module/hooks/useViewMessages/types.js +0 -2
  166. package/lib/module/hooks/useViewMessages/types.js.map +0 -1
  167. package/lib/module/hooks/useViewMessagesOld/index.js +0 -2
  168. package/lib/module/hooks/useViewMessagesOld/index.js.map +0 -1
  169. package/lib/module/index.js +0 -2
  170. package/lib/module/index.js.map +0 -1
  171. package/lib/typescript/ChatContext/index.d.ts +0 -2
  172. package/lib/typescript/ChatContext/types.d.ts +0 -4
  173. package/lib/typescript/classes/Chat/index.d.ts +0 -14
  174. package/lib/typescript/classes/Chat/types.d.ts +0 -21
  175. package/lib/typescript/classes/Inbox/types.d.ts +0 -2
  176. package/lib/typescript/classes/Message/index.d.ts +0 -47
  177. package/lib/typescript/classes/Message/types.d.ts +0 -66
  178. package/lib/typescript/classes/Reaction/index.d.ts +0 -17
  179. package/lib/typescript/classes/Reaction/types.d.ts +0 -33
  180. package/lib/typescript/classes/Room/index.d.ts +0 -42
  181. package/lib/typescript/classes/Room/types.d.ts +0 -112
  182. package/lib/typescript/classes/index.d.ts +0 -4
  183. package/lib/typescript/components/Avatar/index.d.ts +0 -4
  184. package/lib/typescript/components/Chat/Bubble/index.d.ts +0 -4
  185. package/lib/typescript/components/Chat/Composer/Input/index.d.ts +0 -7
  186. package/lib/typescript/components/Chat/Composer/Send/index.d.ts +0 -4
  187. package/lib/typescript/components/Chat/Composer/index.d.ts +0 -8
  188. package/lib/typescript/components/Chat/Media/Image/index.d.ts +0 -7
  189. package/lib/typescript/components/Chat/Media/index.d.ts +0 -4
  190. package/lib/typescript/components/Chat/Message/Touchable/index.d.ts +0 -4
  191. package/lib/typescript/components/Chat/Message/index.d.ts +0 -8
  192. package/lib/typescript/components/Chat/SystemMessage/index.d.ts +0 -4
  193. package/lib/typescript/components/Chat/TypingFooter/index.d.ts +0 -4
  194. package/lib/typescript/components/Chat/index.d.ts +0 -8
  195. package/lib/typescript/components/Chat/types.d.ts +0 -843
  196. package/lib/typescript/components/ChatProvider/index.d.ts +0 -10
  197. package/lib/typescript/components/ChatProvider/types.d.ts +0 -7
  198. package/lib/typescript/components/Inbox/Item/Initials/index.d.ts +0 -4
  199. package/lib/typescript/components/Inbox/Item/ItemDate/index.d.ts +0 -4
  200. package/lib/typescript/components/Inbox/Item/Separator/index.d.ts +0 -6
  201. package/lib/typescript/components/Inbox/Item/Subtitle/index.d.ts +0 -3
  202. package/lib/typescript/components/Inbox/Item/Swipeable/index.d.ts +0 -4
  203. package/lib/typescript/components/Inbox/Item/Title/index.d.ts +0 -3
  204. package/lib/typescript/components/Inbox/Item/UnreadIndicator/index.d.ts +0 -4
  205. package/lib/typescript/components/Inbox/Item/index.d.ts +0 -6
  206. package/lib/typescript/components/Inbox/index.d.ts +0 -4
  207. package/lib/typescript/components/Inbox/types.d.ts +0 -304
  208. package/lib/typescript/components/RoomCreator/Content/Footer/Button/index.d.ts +0 -4
  209. package/lib/typescript/components/RoomCreator/Content/Footer/Input/index.d.ts +0 -4
  210. package/lib/typescript/components/RoomCreator/Content/Footer/index.d.ts +0 -3
  211. package/lib/typescript/components/RoomCreator/Content/Item/Icon/index.d.ts +0 -4
  212. package/lib/typescript/components/RoomCreator/Content/Item/index.d.ts +0 -4
  213. package/lib/typescript/components/RoomCreator/Content/index.d.ts +0 -4
  214. package/lib/typescript/components/RoomCreator/Header/index.d.ts +0 -4
  215. package/lib/typescript/components/RoomCreator/index.d.ts +0 -4
  216. package/lib/typescript/components/RoomCreator/types.d.ts +0 -208
  217. package/lib/typescript/components/TypingIndicator/index.d.ts +0 -9
  218. package/lib/typescript/components/index.d.ts +0 -12
  219. package/lib/typescript/helpers/getInitials.d.ts +0 -1
  220. package/lib/typescript/hooks/index.d.ts +0 -8
  221. package/lib/typescript/hooks/useCreator/index.d.ts +0 -27
  222. package/lib/typescript/hooks/useInbox/index.d.ts +0 -29
  223. package/lib/typescript/hooks/useInbox/types.d.ts +0 -5
  224. package/lib/typescript/hooks/useMessages/index.d.ts +0 -24
  225. package/lib/typescript/hooks/useMessages/types.d.ts +0 -5
  226. package/lib/typescript/hooks/useRoom/index.d.ts +0 -26
  227. package/lib/typescript/hooks/useRoom/types.d.ts +0 -5
  228. package/lib/typescript/hooks/useSend/useSendToGroup/index.d.ts +0 -6
  229. package/lib/typescript/hooks/useSend/useSendToPeople/index.d.ts +0 -6
  230. package/lib/typescript/hooks/useTyping/index.d.ts +0 -36
  231. package/lib/typescript/hooks/useViewMessages/index.d.ts +0 -18
  232. package/lib/typescript/hooks/useViewMessages/types.d.ts +0 -20
  233. package/lib/typescript/index.d.ts +0 -11
  234. package/src/ChatContext/index.tsx +0 -9
  235. package/src/ChatContext/types.ts +0 -4
  236. package/src/classes/Chat/index.ts +0 -46
  237. package/src/classes/Chat/types.ts +0 -23
  238. package/src/classes/Inbox/index.ts +0 -12
  239. package/src/classes/Inbox/types.ts +0 -3
  240. package/src/classes/Message/index.ts +0 -310
  241. package/src/classes/Message/types.ts +0 -118
  242. package/src/classes/Reaction/index.ts +0 -108
  243. package/src/classes/Reaction/types.ts +0 -37
  244. package/src/classes/Room/index.ts +0 -323
  245. package/src/classes/Room/types.ts +0 -161
  246. package/src/classes/index.ts +0 -4
  247. package/src/components/Avatar/index.tsx +0 -25
  248. package/src/components/Chat/Bubble/index.tsx +0 -139
  249. package/src/components/Chat/Composer/Input/index.tsx +0 -45
  250. package/src/components/Chat/Composer/Send/index.tsx +0 -51
  251. package/src/components/Chat/Composer/index.tsx +0 -187
  252. package/src/components/Chat/Media/Image/index.tsx +0 -26
  253. package/src/components/Chat/Media/index.tsx +0 -11
  254. package/src/components/Chat/Message/Swiper/Action/index.tsx +0 -7
  255. package/src/components/Chat/Message/Swiper/index.tsx +0 -32
  256. package/src/components/Chat/Message/Touchable/index.tsx +0 -60
  257. package/src/components/Chat/Message/index.tsx +0 -328
  258. package/src/components/Chat/SystemMessage/index.tsx +0 -44
  259. package/src/components/Chat/TypingFooter/index.tsx +0 -48
  260. package/src/components/Chat/index.tsx +0 -596
  261. package/src/components/Chat/types.ts +0 -913
  262. package/src/components/Chat-Old/Bubble/index.tsx +0 -58
  263. package/src/components/Chat-Old/Composer/Input/index.tsx +0 -34
  264. package/src/components/Chat-Old/Composer/Send/index.tsx +0 -37
  265. package/src/components/Chat-Old/Composer/index.tsx +0 -131
  266. package/src/components/Chat-Old/Message/index.tsx +0 -160
  267. package/src/components/Chat-Old/Swiper/Action/index.tsx +0 -7
  268. package/src/components/Chat-Old/Swiper/index.tsx +0 -30
  269. package/src/components/Chat-Old/SystemMessage/index.tsx +0 -44
  270. package/src/components/Chat-Old/index.tsx +0 -356
  271. package/src/components/Chat-Old/types.ts +0 -752
  272. package/src/components/ChatProvider/index.tsx +0 -31
  273. package/src/components/ChatProvider/types.ts +0 -8
  274. package/src/components/Inbox/Item/Circle/index.tsx +0 -47
  275. package/src/components/Inbox/Item/Circle/types.ts +0 -8
  276. package/src/components/Inbox/Item/Initials/index.tsx +0 -41
  277. package/src/components/Inbox/Item/ItemDate/index.tsx +0 -26
  278. package/src/components/Inbox/Item/Separator/index.tsx +0 -13
  279. package/src/components/Inbox/Item/Subtitle/index.tsx +0 -23
  280. package/src/components/Inbox/Item/Swipeable/index.tsx +0 -143
  281. package/src/components/Inbox/Item/Title/index.tsx +0 -23
  282. package/src/components/Inbox/Item/UnreadIndicator/index.tsx +0 -84
  283. package/src/components/Inbox/Item/index.tsx +0 -307
  284. package/src/components/Inbox/index.tsx +0 -315
  285. package/src/components/Inbox/question.md +0 -21
  286. package/src/components/Inbox/readme.md +0 -21
  287. package/src/components/Inbox/types.ts +0 -371
  288. package/src/components/RoomCreator/Content/Footer/Button/index.tsx +0 -55
  289. package/src/components/RoomCreator/Content/Footer/Input/index.tsx +0 -27
  290. package/src/components/RoomCreator/Content/Footer/index.tsx +0 -72
  291. package/src/components/RoomCreator/Content/Item/Icon/index.tsx +0 -16
  292. package/src/components/RoomCreator/Content/Item/index.tsx +0 -87
  293. package/src/components/RoomCreator/Content/index.tsx +0 -75
  294. package/src/components/RoomCreator/Header/index.tsx +0 -74
  295. package/src/components/RoomCreator/index.tsx +0 -177
  296. package/src/components/RoomCreator/types.ts +0 -233
  297. package/src/components/TypingIndicator/index.tsx +0 -169
  298. package/src/components/index.ts +0 -18
  299. package/src/helpers/getInitials.ts +0 -11
  300. package/src/helpers/sortByAvatar.ts +0 -1
  301. package/src/hooks/index.ts +0 -8
  302. package/src/hooks/useCreateRoom/index.ts +0 -34
  303. package/src/hooks/useCreator/index.ts +0 -33
  304. package/src/hooks/useInbox/index.ts +0 -76
  305. package/src/hooks/useInbox/types.ts +0 -6
  306. package/src/hooks/useMessages/index.ts +0 -109
  307. package/src/hooks/useMessages/types.ts +0 -6
  308. package/src/hooks/useRoom/index.ts +0 -82
  309. package/src/hooks/useRoom/types.ts +0 -6
  310. package/src/hooks/useSend/useSendToGroup/index.ts +0 -38
  311. package/src/hooks/useSend/useSendToPeople/index.ts +0 -38
  312. package/src/hooks/useTyping/index.ts +0 -154
  313. package/src/hooks/useTypingOLD/index.ts +0 -67
  314. package/src/hooks/useTypingOLD/types.ts +0 -7
  315. package/src/hooks/useViewMessages/index.ts +0 -61
  316. package/src/hooks/useViewMessages/types.ts +0 -22
  317. package/src/hooks/useViewMessagesOld/index.ts +0 -39
  318. package/src/index.ts +0 -13
@@ -1,118 +0,0 @@
1
- import { FieldValue } from '@firebase/firestore-types'
2
- import { ReactionOption } from '../Reaction/types'
3
-
4
- export interface Message {
5
- id: string
6
- // roomId: string
7
- }
8
-
9
- export interface NewMessageModel extends Omit<Message, 'roomId'> {
10
- text: string
11
- createdAt: Date
12
- user: {
13
- id: string
14
- name: string
15
- avatar: string
16
- }
17
- // image?: string
18
- // // You can also add a video prop:
19
- // video?: string
20
- system?: boolean
21
- media?: MessageMedia
22
- reactions?: {
23
- [option in ReactionOption]: string[]
24
- }
25
- // Any additional custom parameters are passed through
26
- }
27
-
28
- export interface MessageMediaWithUrl {
29
- url: string
30
- uri?: string
31
- height: number
32
- width: number
33
- contentType: 'video' | 'image'
34
- }
35
-
36
- export interface MessageMediaWithUri {
37
- url: string
38
- uri?: string
39
- height: number
40
- width: number
41
- contentType: 'video' | 'image'
42
- }
43
-
44
- export type MessageMedia = MessageMediaWithUrl | MessageMediaWithUri
45
-
46
- // export interface MessageMedia {
47
- // url?: string
48
- // uri: string
49
- // height: number
50
- // width: number
51
- // contentType: 'video' | 'image'
52
- // }
53
-
54
- export interface NewMessageFormattedForServer
55
- extends Omit<NewMessageModel, 'createdAt'> {
56
- createdAt: FieldValue
57
- }
58
-
59
- export function isNewMessageModel(
60
- message: MessageModel
61
- ): message is NewMessageModel {
62
- return !!(message as NewMessageModel)
63
- }
64
-
65
- export function isNewMessageFormattedForServer(
66
- message: MessageModel
67
- ): message is NewMessageFormattedForServer {
68
- return !!(message as NewMessageFormattedForServer)
69
- }
70
-
71
- export interface EditMessageModel extends Message {
72
- text?: string
73
- }
74
-
75
- export type SendToRecipients = string[]
76
-
77
- // you might send a message to multiple rooms
78
- export type RoomId = string | string[]
79
-
80
- // the message model can be one of them
81
- export type MessageModel =
82
- | Message
83
- | NewMessageModel[]
84
- | EditMessageModel
85
- | MessageModelDocument[]
86
- | NewMessageFormattedForServer[]
87
- | NewMessageFormattedForServer
88
-
89
- export interface MessageModelDocument
90
- extends Omit<NewMessageModel, 'createdAt'> {
91
- id: string
92
- createdAt: firebase.firestore.Timestamp
93
- }
94
-
95
- export type SendFromFeedRecipient =
96
- | {
97
- id: string // roomId
98
- }
99
- | SendFromFeedRecipientArray
100
-
101
- export interface SendFromFeedRecipientArray {
102
- recipients: { id: string; name: string }[]
103
- }
104
-
105
- export const recipientHasId = (
106
- recipient: SendFromFeedRecipient
107
- ): recipient is { id: string } => !!(recipient as { id: string })
108
-
109
- export const recipientHasMembers = (
110
- recipient: SendFromFeedRecipient
111
- ): recipient is SendFromFeedRecipientArray =>
112
- !!(recipient as SendFromFeedRecipientArray)
113
-
114
- export type SendFromFeedRecipients = SendFromFeedRecipient[]
115
-
116
- export interface SendFromFeedModel extends Omit<NewMessageModel, 'id'> {
117
- recipients: SendFromFeedRecipientArray['recipients']
118
- }
@@ -1,108 +0,0 @@
1
- import { ReactionConfig } from './types'
2
- import Room from '../Room'
3
- import { fuego } from '../../components/ChatProvider'
4
- import { LastMessageServer } from '../Room/types'
5
-
6
- export default class {
7
- private config: ReactionConfig
8
- constructor(config: ReactionConfig) {
9
- this.config = config
10
- }
11
- get path() {
12
- const { messagesPath } = new Room({ id: this.config.roomId })
13
- return `${messagesPath}/${this.config.messageId}`
14
- }
15
- verb(): { add: string; remove: string } {
16
- switch (this.config.reaction) {
17
- case 'like':
18
- return { add: 'liked', remove: 'unliked' }
19
- case 'love':
20
- return { add: 'loved', remove: 'unloved' }
21
- default: {
22
- console.warn(
23
- 'reaction type is not valid. see reaction class:',
24
- this.config.reaction
25
- )
26
- return { add: '', remove: '' }
27
- }
28
- }
29
- }
30
- async add() {
31
- const { uid } = fuego.auth().currentUser as firebase.User
32
- const batch = fuego.db.batch()
33
- const messageRef = fuego.db.doc(this.path)
34
- batch.update(messageRef, {
35
- [`reactions.${this.config.reaction}`]: fuego.firebase.firestore.FieldValue.arrayUnion(
36
- uid
37
- )
38
- })
39
- const { path: roomPath } = new Room({ id: this.config.roomId })
40
- const roomRef = fuego.db.doc(roomPath)
41
-
42
- batch.update(roomRef, {
43
- lastMessage: this.makeLastMessage({ remove: false })
44
- })
45
- return batch.commit()
46
- }
47
- async remove() {
48
- const { uid } = fuego.auth().currentUser as firebase.User
49
- const batch = fuego.db.batch()
50
- const messageRef = fuego.db.doc(this.path)
51
- batch.update(messageRef, {
52
- [`reactions.${this.config.reaction}`]: fuego.firebase.firestore.FieldValue.arrayRemove(
53
- uid
54
- )
55
- })
56
- const { path: roomPath } = new Room({ id: this.config.roomId })
57
- const roomRef = fuego.db.doc(roomPath)
58
-
59
- batch.update(roomRef, {
60
- lastMessage: this.makeLastMessage({ remove: true })
61
- })
62
- return batch.commit()
63
- }
64
- makeReactionDescriptionText(remove?: boolean): string {
65
- if (this.config.descriptionText === null) return ''
66
- const { displayName } = fuego.auth().currentUser as firebase.User
67
- const { myName } = this.config
68
- const name = myName || displayName || ''
69
- const verb = remove ? this.verb().remove : this.verb().add
70
- if (this.config.descriptionText) {
71
- if (typeof this.config.descriptionText === 'string')
72
- return this.config.descriptionText
73
- if (typeof this.config.descriptionText !== 'function') {
74
- console.error(
75
- '🍇 Juice Reaction error. The descriptionText property should be either 1) a string or 2) a function that returns a string. Instead, you passed',
76
- this.config.descriptionText,
77
- ' of type ',
78
- typeof this.config.descriptionText,
79
- '. See the docs or command+hover over the descriptionText property in VS Code to details.'
80
- )
81
- } else {
82
- return this.config.descriptionText({
83
- reaction: this.config.reaction,
84
- name: name || '',
85
- text: this.config.text,
86
- verb,
87
- remove: !!remove
88
- })
89
- }
90
- }
91
- const firstName = name && name.split(' ')[0]
92
- let text = `${firstName} ${verb} a message`
93
- if (this.config.text) {
94
- text = `${firstName} ${verb} "${this.config.text}"`
95
- }
96
- return text
97
- }
98
- makeLastMessage(options: { remove?: boolean }): LastMessageServer {
99
- const { displayName: name = '' } = fuego.auth().currentUser as firebase.User
100
- return {
101
- id: '',
102
- createdAt: fuego.firebase.firestore.FieldValue.serverTimestamp(),
103
- name: name || '',
104
- system: true,
105
- text: this.makeReactionDescriptionText(options.remove)
106
- }
107
- }
108
- }
@@ -1,37 +0,0 @@
1
- export interface ReactionConfig {
2
- myName?: string
3
- messageId: string
4
- roomId: string
5
- text: string
6
- reaction: ReactionOption
7
- /**
8
- * An **optional** string or pure function to override the default description text.
9
- * The description text is used to create the last message that shows up in the inbox.
10
- *
11
- * By default, this will look something like: <name> <reaction>d "<message text>". For instance: Fernando liked "I want a pair of PATOS Shoes."
12
- *
13
- * If `null`, text will be an empty string.
14
- *
15
- * A verb for like will be 'liked', and if it's a removal, then it's 'unlike'. This pattern follows for other reactions too.
16
- *
17
- * @example
18
- * ```js
19
- * const reaction = new Reaction({
20
- * descriptionText: ({ reaction, name, text, verb, remove }) => remove ? \`${name} happily ${verb} ${text}\` : \`${name} sadly ${verb} ${text}\`,
21
- * text: message.text, roomId: room.id, messageId: message.id, text: message.text
22
- * })
23
- * ```
24
- */
25
- descriptionText?:
26
- | null
27
- | string
28
- | ((info: {
29
- reaction: ReactionOption
30
- name: string
31
- text: string
32
- verb: string
33
- remove: boolean
34
- }) => string)
35
- }
36
-
37
- export type ReactionOption = 'like' | 'love'
@@ -1,323 +0,0 @@
1
- import {
2
- NewRoomModel,
3
- RoomModel,
4
- EditRoomModel,
5
- NewRoomMember,
6
- currentUserExists,
7
- roomIsEditModel,
8
- ExistingRoomModel,
9
- RoomMembers,
10
- CreateRoomModel,
11
- RoomPropertiesModel,
12
- roomIsNewModel,
13
- roomIsCreateCallable
14
- } from './types'
15
- import { fuego, chat } from '../../components/ChatProvider'
16
- import { getInitials } from '../../helpers/getInitials'
17
- import { firestore } from 'firebase'
18
- import uuid from 'uuid'
19
-
20
- export default class {
21
- private room: RoomModel
22
- constructor(room: RoomModel) {
23
- this.room = room
24
- }
25
- get path() {
26
- return `${chat.roomsCollection}/${(this.room as RoomPropertiesModel).id}`
27
- }
28
- get messagesPath() {
29
- return `${this.path}/${chat.messagesCollection}`
30
- }
31
- getUnreadCount(): number {
32
- const { uid } = fuego.firebase.auth().currentUser as firebase.User
33
- try {
34
- const member = (this.room as ExistingRoomModel | NewRoomModel).members[
35
- uid
36
- ]
37
-
38
- return (member && member.unreadCount && member.unreadCount.count) || 0
39
- } catch (e) {
40
- console.error(
41
- `Room getUnreadCount error. Are you sure you initialized the room with the proper members schema?`
42
- )
43
- return 0
44
- }
45
- }
46
- /**
47
- * Views message function for a room.
48
- *
49
- * To use this in a react component out-of-the-box, I recommend using the [[useViewMessage]] hook. It will handle all this for you.
50
- *
51
- * @param messageId ID of the message you're viewing
52
- * @param messageCreatedAt Timestamp of the message which you're viewing, found in message.createdAt
53
- *
54
- * @remarks
55
- * If you aren't using the useViewMessage hook:
56
- * This function should be used with care. You don't want to send 500 writes if someone views 500 messages.
57
- * You only want to send a read for the most recent message being viewed, assuming it's someone else's message.
58
- * Also, you should be memoizing the last message you sent that you viewed to avoid repeats. Again, this is all handled by useViewMessages.
59
- *
60
- * @returns Promise that only resolves while you're online.
61
- */
62
- async viewMessage(messageId: string, messageCreatedAt: Date) {
63
- try {
64
- const ref = fuego.db.doc(this.path)
65
- const { uid } = fuego.auth().currentUser as firebase.User
66
-
67
- return ref.update({
68
- [`members.${uid}.unreadCount.count`]: 0,
69
- [`members.${uid}.unreadCount.lastCleared`]: fuego.firebase.firestore.FieldValue.serverTimestamp(),
70
- [`members.${uid}.unreadCount.lastSeen`]: {
71
- id: messageId,
72
- createdAt: messageCreatedAt
73
- }
74
- })
75
- } catch (e) {
76
- console.error('Room class: viewMessage() error:', e)
77
- }
78
- }
79
- getArrayOfMembersOtherThanMe() {
80
- const { members } = this.room as ExistingRoomModel
81
- const { uid } = fuego.auth().currentUser as firebase.User
82
- return Object.keys(members)
83
- .filter(id => id !== uid)
84
- .map(id => members[id])
85
- }
86
- getName(): string {
87
- const { members, name } = this.room as ExistingRoomModel
88
- if (name) return name
89
-
90
- const { uid } = fuego.auth().currentUser as firebase.User
91
-
92
- const otherPeopleInRoom = Object.keys(members).filter(
93
- (id: string) => id !== uid
94
- )
95
- const namesOfOtherPeopleInRoom = otherPeopleInRoom.map(
96
- id =>
97
- (members[id] &&
98
- members[id].name &&
99
- members[id].name.split(' ') &&
100
- members[id].name.split(' ')[0]) ||
101
- ''
102
- )
103
- if (!namesOfOtherPeopleInRoom.length) {
104
- console.error('no other members in room', this.room)
105
- return ''
106
- }
107
- if (namesOfOtherPeopleInRoom.length === 1)
108
- return members[otherPeopleInRoom[0]].name
109
- if (namesOfOtherPeopleInRoom.length === 2)
110
- return namesOfOtherPeopleInRoom.join(' & ')
111
-
112
- const commaNames = namesOfOtherPeopleInRoom
113
- .slice(0, namesOfOtherPeopleInRoom.length - 1)
114
- .join(', ')
115
- const finalName =
116
- namesOfOtherPeopleInRoom[namesOfOtherPeopleInRoom.length - 1]
117
-
118
- return `${commaNames} & ${finalName}`
119
- }
120
- getInitials(maxNumberOfInitials = 2): string {
121
- const { name } = this.room
122
- if (name) return getInitials(name)
123
-
124
- const members = this.getArrayOfMembersOtherThanMe()
125
-
126
- if (!members.length) {
127
- console.error(
128
- 'get room initials error: no other members in this room',
129
- this.room
130
- )
131
- return ''
132
- }
133
-
134
- if (members.length === 1) {
135
- return getInitials(members[0].name, maxNumberOfInitials)
136
- }
137
-
138
- return (
139
- members
140
- // first letter of each person's name
141
- .map(member => (member.name && member.name.slice(0, 1)) || '')
142
- .join('')
143
- // up to two initials
144
- .slice(0, maxNumberOfInitials)
145
- )
146
- }
147
- /**
148
- * @returns
149
- * A promise.all array of responses. The first array is for adding a system message; the second is for updating the room object.
150
- */
151
- async leave() {
152
- try {
153
- if (!currentUserExists(fuego.auth().currentUser)) {
154
- throw new Error(
155
- "🚨 Fuego auth error: Tried to leave a room, but there is no valid firebase auth object for this user. \n In order to join a room, the user must exist. If you're just testing around and don't want to have valid users, try await firebase.auth().signInAnonymously()."
156
- )
157
- }
158
- const { uid } = fuego.auth().currentUser as firebase.User
159
- // is this even necessary? maybe if people want the option to join or not...
160
- return fuego.db.doc(this.path).update({
161
- currentMembers: fuego.firebase.firestore.FieldValue.arrayRemove(uid),
162
- [`members.${uid}`]: fuego.firebase.firestore.FieldValue.delete()
163
- })
164
- } catch (e) {
165
- console.error(e)
166
- return null
167
- }
168
- }
169
- join() {
170
- try {
171
- if (!currentUserExists(fuego.auth().currentUser)) {
172
- throw new Error(
173
- "🚨 Fuego auth error: Tried to join a room, but there is no valid firebase auth object for this user. \n In order to join a room, the user must exist. If you're just testing around and don't want to have valid users, try await firebase.auth().signInAnonymously()."
174
- )
175
- }
176
- const { uid, displayName } = fuego.auth().currentUser as firebase.User
177
- const newMember: NewRoomMember = {
178
- name: displayName || 'Fredrick Failuretest',
179
- exists: true,
180
- joinedAt: fuego.firebase.firestore.FieldValue.serverTimestamp()
181
- }
182
- // is this even necessary?
183
- // maybe if people want the option to choose whether they join a room or not...
184
- return fuego.db.doc(this.path).update({
185
- [`members.${uid}`]: newMember,
186
- currentMembers: fuego.firebase.firestore.FieldValue.arrayUnion(uid)
187
- })
188
- } catch (e) {
189
- console.error(e)
190
- return null
191
- }
192
- }
193
- addMembers(members: RoomMembers) {
194
- const batch = fuego.db.batch()
195
- const ref = fuego.db.doc(this.path)
196
- Object.keys(members).forEach((uid: string) =>
197
- batch.update(ref, {
198
- [`members.${uid}`]: members[uid]
199
- })
200
- )
201
-
202
- batch.update(ref, {
203
- currentMembers: firestore.FieldValue.arrayUnion(...Object.keys(members))
204
- })
205
-
206
- return batch.commit()
207
- }
208
- removeMembers(members: RoomMembers) {
209
- const batch = fuego.db.batch()
210
- const ref = fuego.db.doc(this.path)
211
-
212
- Object.keys(members).forEach((uid: string) =>
213
- batch.update(ref, {
214
- [`members.${uid}.exists`]: false
215
- })
216
- )
217
-
218
- batch.update(ref, {
219
- currentMembers: firestore.FieldValue.arrayRemove(...Object.keys(members))
220
- })
221
-
222
- return batch.commit()
223
- }
224
- async create() {
225
- try {
226
- if (roomIsNewModel(this.room)) return this.addToFirebase()
227
- throw new Error(
228
- 'Tried to create room without the proper schema. See NewRoomModel typescript type.'
229
- )
230
- } catch (e) {
231
- console.error(e)
232
- return null
233
- }
234
- }
235
- async createViaCallable(): Promise<firebase.functions.HttpsCallableResult> {
236
- try {
237
- if (roomIsCreateCallable(this.room)) {
238
- const create = fuego.firebase
239
- .functions()
240
- .httpsCallable(chat.httpCallables.createRoom)
241
- return create({
242
- recipients: this.room.recipients,
243
- name: this.room.name || '',
244
- avatar: this.room.avatar || ''
245
- })
246
- }
247
- throw new Error(
248
- 'Error: improper room model for Room.createCallable(). The error comes from config for new Room(config). Make sure schema for config is correct'
249
- )
250
- } catch (e) {
251
- console.error(e)
252
- return {
253
- data: null
254
- }
255
- }
256
- }
257
- edit() {
258
- try {
259
- // typeguard
260
- if (roomIsEditModel(this.room)) return this.updateOnFirebase()
261
- throw new Error(
262
- 'Tried to edit room without the proper schema. See EditRoomModel typescript type.'
263
- )
264
- } catch (e) {
265
- console.error(e)
266
- return null
267
- }
268
- }
269
- getUsersTyping() {
270
- return this.getArrayOfMembersOtherThanMe().filter(
271
- member => member.typing && member.typing.state === 'typing'
272
- )
273
-
274
- // return Object.keys((this.room as ExistingRoomModel).members || {})
275
- // .filter(
276
- // (uid: string) =>
277
- // this.room &&
278
- // this.room.members &&
279
- // this.room.members[uid] &&
280
- // this.room.members[uid].typing
281
- // )
282
- // .map(
283
- // (uid: string) =>
284
- // (this.room as ExistingRoomModel) &&
285
- // this.room.members &&
286
- // this.room.members[uid]
287
- // )
288
- }
289
- updateOnFirebase() {
290
- const { id, ...room } = this.room as EditRoomModel
291
- return fuego.db.doc(this.path).update(room)
292
- }
293
- addToFirebase() {
294
- const { uid, displayName, photoURL } = fuego.auth()
295
- .currentUser as firebase.User
296
- const date = fuego.firebase.firestore.FieldValue.serverTimestamp()
297
- const me: NewRoomMember = {
298
- name: displayName || 'Inexistent Poopnugget',
299
- exists: true,
300
- avatar: photoURL || '',
301
- joinedAt: date
302
- }
303
- const members: RoomMembers = {
304
- ...(this.room as NewRoomModel).members,
305
- [uid]: me
306
- }
307
- const room: CreateRoomModel = {
308
- members,
309
- currentMembers: [...Object.keys(members)].sort(),
310
- createdAt: date,
311
- lastEdited: date,
312
- lastMessage: {
313
- system: true,
314
- text: `${me.name} started a chat`,
315
- createdAt: date,
316
- id: uuid.v4(),
317
- name: me.name
318
- }
319
- }
320
- const ref = fuego.db.collection(chat.roomsCollection).doc()
321
- return ref.set(room)
322
- }
323
- }