chat 1.0.6 → 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 -844
  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 -184
  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 -592
  261. package/src/components/Chat/types.ts +0 -911
  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,592 +0,0 @@
1
- import React, {
2
- useMemo,
3
- useRef,
4
- useEffect,
5
- useCallback,
6
- MutableRefObject,
7
- } from 'react'
8
- import {
9
- FlatList,
10
- ListRenderItemInfo,
11
- SafeAreaView,
12
- View,
13
- StyleSheet,
14
- Animated,
15
- ViewToken,
16
- TextInput,
17
- KeyboardAvoidingView,
18
- Alert,
19
- Clipboard,
20
- } from 'react-native'
21
- import {
22
- Transitioning,
23
- Transition,
24
- TransitioningView,
25
- } from 'react-native-reanimated'
26
- import { NewMessageModel } from '../../classes/Message/types'
27
- import Message from './Message'
28
- import {
29
- ChatProps,
30
- MessageProps,
31
- ComposerProps,
32
- SystemMessageProps,
33
- ChatRef,
34
- } from './types'
35
- import Composer from './Composer'
36
- import SystemMessage from './SystemMessage'
37
- import TypingFooter from './TypingFooter'
38
-
39
- function Chat<MessageModel extends NewMessageModel = NewMessageModel>(
40
- props: ChatProps<MessageModel>
41
- ) {
42
- const checkForBrokenProps = () => {
43
- if (!props.user.name) {
44
- console.error(
45
- 'Breaking error: Messages component is missing a name in the user prop.'
46
- )
47
- }
48
- if (!props.user.id) {
49
- console.error(
50
- 'Breaking error: Messages component is missing an id in the user prop.'
51
- )
52
- }
53
- }
54
- checkForBrokenProps()
55
- // "constructor" variables
56
- const { chatRef: ref } = props
57
- const inputRef = useRef<TextInput>()
58
- const flatListRef = useRef<typeof Animated.ScrollView>()
59
- // const flatListRef = useRef<typeof Animated.FlatList<MessageModel>>()
60
- const componentRef = useRef<ChatRef<MessageModel>>()
61
-
62
- useEffect(() => {
63
- componentRef.current = {
64
- focusInput: () => inputRef.current?.focus(),
65
- blurInput: () => inputRef.current?.blur(),
66
- scrollToEnd: () => flatListRef.current?.getNode().scrollToEnd(),
67
- scrollToIndex: params =>
68
- flatListRef.current?.getNode().scrollToIndex(params),
69
- scrollToItem: params =>
70
- flatListRef.current?.getNode().scrollToItem(params),
71
- scrollToOffset: params =>
72
- flatListRef.current?.getNode().scrollToOffset(params),
73
- }
74
- if (ref) ref.current = componentRef.current
75
- })
76
-
77
- // if (!componentRef.current) {
78
- // componentRef.current = {
79
- // focusInput: () => inputRef.current && inputRef.current.focus(),
80
- // blurInput: () => inputRef.current && inputRef.current.blur(),
81
- // scrollToEnd: () =>
82
- // flatListRef.current && flatListRef.current.getNode().scrollToEnd(),
83
- // scrollToIndex: params =>
84
- // flatListRef.current &&
85
- // flatListRef.current.getNode().scrollToIndex(params),
86
- // scrollToItem: params =>
87
- // flatListRef.current &&
88
- // flatListRef.current.getNode().scrollToItem(params),
89
- // scrollToOffset: params =>
90
- // flatListRef.current &&
91
- // flatListRef.current.getNode().scrollToOffset(params),
92
- // }
93
- // if (ref) ref.current = componentRef.current
94
- // }
95
-
96
- // used to shuffle/transition the inbox when it changes
97
- const transitionRef = useRef<TransitioningView>(null)
98
- const mounted = useRef(false)
99
-
100
- // track animated position of scroll
101
- const scrollY: Animated.Value = useMemo(
102
- () => props.animatedScrollNode || new Animated.Value(0),
103
- [props.animatedScrollNode]
104
- )
105
-
106
- // upate position of scroll variable
107
- const onScroll = Animated.event(
108
- [{ nativeEvent: { contentOffset: { y: scrollY } } }],
109
- { useNativeDriver: true }
110
- )
111
-
112
- const messagesRef = useRef(props.messages)
113
-
114
- // effect to handle new messages coming in / scrolling to bottom
115
- // TODO we may have to use getNode() for the animated flatlist, right?
116
- useEffect(() => {
117
- const latestMessageIsNew =
118
- (props.messages[0] && props.messages[0].id) !==
119
- (messagesRef.current[0] && messagesRef.current[0].id)
120
- // const numberOfMessagesIncreased =
121
- // props.messages.length > messagesRef.current.length
122
- if (
123
- latestMessageIsNew &&
124
- // numberOfMessagesIncreased &&
125
- flatListRef.current
126
- ) {
127
- const iSentLastMessage =
128
- props.messages[0] &&
129
- props.messages[0].user &&
130
- props.messages[0].user.id === props.user.id
131
- if (iSentLastMessage && !props.disableScrollToBottomOnSend)
132
- flatListRef.current.getNode().scrollToOffset({ offset: 0 })
133
- else if (props.scrollToBottomOnAllNewMessages)
134
- flatListRef.current.getNode().scrollToOffset({ offset: 0 })
135
- }
136
- }, [
137
- props.disableScrollToBottomOnSend,
138
- props.scrollToBottomOnAllNewMessages,
139
- props.messages,
140
- props.user.id,
141
- ])
142
-
143
- // 💩 a super way of handling viewable items not on the fly. (easy way to track viewed messages)
144
- // TODO abstract this to a different custom hook.
145
- const onViewableItemsChangedRef = useRef(props.onViewableItemsChanged)
146
- const onViewMessagesRef = useRef(props.onViewMessages)
147
- // track the messages in a non-array too for fast querying.
148
- const messagesDict = useRef<{ [id: string]: MessageModel }>({})
149
- // ...onto the effect 😅
150
- useEffect(() => {
151
- // make updated methods available to onviewable items changed
152
- onViewableItemsChangedRef.current = props.onViewableItemsChanged
153
- onViewMessagesRef.current = props.onViewMessages
154
- messagesRef.current = props.messages
155
- messagesDict.current = {}
156
- if (props.messages) {
157
- props.messages.forEach(message => {
158
- messagesDict.current[message.id] = message
159
- })
160
- }
161
- }, [props.onViewableItemsChanged, props.onViewMessages, props.messages])
162
-
163
- const onViewableItemsChanged: FlatList<
164
- MessageModel
165
- >['props']['onViewableItemsChanged'] = useCallback(
166
- (info: { viewableItems: ViewToken[]; changed: ViewToken[] }) => {
167
- if (onViewableItemsChangedRef.current)
168
- onViewableItemsChangedRef.current(info)
169
-
170
- if (onViewMessagesRef.current) {
171
- const visibleMessages = info.viewableItems
172
- .filter(i => i.isViewable)
173
- .map(i => i.item)
174
- const latestMessageId =
175
- messagesRef.current &&
176
- messagesRef.current[0] &&
177
- messagesRef.current[0].id
178
- onViewMessagesRef.current({
179
- visibleMessages,
180
- latestMessageId,
181
- })
182
- }
183
- },
184
- []
185
- )
186
- // END OF THAT 💩
187
-
188
- const numberOfUsersTyping = useMemo(
189
- () => props.namesOfUsersTyping?.length ?? 0,
190
- [props.namesOfUsersTyping]
191
- )
192
- // effect to handle animating the screen if the messages changed or people typing just changed
193
- useEffect(() => {
194
- if (
195
- !props.disableTransitions &&
196
- // if we've already mounted, or we want to transition even if we haven't...
197
- (mounted.current || !props.disableTransitionOnMount) &&
198
- // and assuming the transition component is initialized...
199
- transitionRef.current
200
- )
201
- // animate
202
- transitionRef.current.animateNextTransition()
203
- else mounted.current = true
204
- }, [
205
- props.disableTransitionOnMount,
206
- numberOfUsersTyping,
207
- props.messages,
208
- props.disableTransitions,
209
- ])
210
-
211
- const { onPressMessage, onDoubleTapMessage, onLongPressMessage } = props
212
- const onPressItem = useCallback(
213
- id => {
214
- const message = messagesDict.current?.[id]
215
- if (onPressMessage) onPressMessage(message)
216
- },
217
- [onPressMessage]
218
- )
219
-
220
- const onDoubleTapItem = useCallback(
221
- id => {
222
- const message = messagesDict.current?.[id]
223
- if (onDoubleTapMessage) onDoubleTapMessage(message)
224
- },
225
- [onDoubleTapMessage]
226
- )
227
-
228
- const onLongPressItem = useCallback(
229
- id => {
230
- const message = messagesDict.current?.[id]
231
- if (onLongPressMessage) return onLongPressMessage(message)
232
- if (message && message.text) {
233
- Alert.alert('Message', message.text, [
234
- {
235
- text: 'Copy text',
236
- onPress: () => {
237
- Clipboard.setString(message.text)
238
- },
239
- style: 'cancel',
240
- },
241
- { text: 'Go back' },
242
- ])
243
- }
244
- },
245
- [onLongPressMessage]
246
- )
247
-
248
- const renderItem = (info: ListRenderItemInfo<MessageModel>) => {
249
- if (props.renderItem) return props.renderItem(info)
250
- if (props.renderMessage === null) return null
251
-
252
- const { item: message, index } = info
253
-
254
- if (message.system) {
255
- const systemProps: SystemMessageProps = {
256
- text: message.text,
257
- createdAt: message.createdAt,
258
- textStyle: props.systemMessageTextStyle,
259
- containerStyle: props.systemMessageContainerStyle,
260
- dateToStringFunc: props.systemMessageDateToStringFunc,
261
- dateStyle: props.systemMessageDateStyle,
262
- }
263
-
264
- if (props.renderSystemMessage === null) return null
265
- if (props.renderSystemMessage)
266
- return props.renderSystemMessage(systemProps)
267
-
268
- return <SystemMessage {...systemProps} />
269
- }
270
-
271
- const isMe = message.user.id === props.user.id
272
-
273
- // indicates that the previous message was sent by someone else, so this starts a new bunch
274
- const messageCreatesNewBunch = !(
275
- props.messages[index + 1] &&
276
- props.messages[index + 1].user &&
277
- props.messages[index + 1].user.id ===
278
- (props.messages[index] &&
279
- props.messages[index].user &&
280
- props.messages[index].user.id)
281
- )
282
-
283
- const isMostRecentMessageInBunch = !(
284
- props.messages[index - 1] &&
285
- props.messages[index - 1].user &&
286
- props.messages[index - 1].user.id ===
287
- (props.messages[index] &&
288
- props.messages[index].user &&
289
- props.messages[index].user.id)
290
- )
291
-
292
- // show name if the previous message was sent by someone else
293
- // also, only show my own name if specified, since that's kinda weird to show my own. beat my dribble
294
- let showName = props.showNameForEveryMessage || messageCreatesNewBunch
295
- if (isMe && !props.showMyName) showName = false
296
-
297
- // by default, only show avatar for a the bottom of a bunch
298
- const showAvatar =
299
- props.showAvatarForEveryMessage || isMostRecentMessageInBunch
300
- let renderAvatar = props.renderAvatar
301
- // and we hide the avatar if we say to
302
- if (isMe && props.hideMyAvatar) {
303
- // showAvatar = false
304
- renderAvatar = null
305
- }
306
-
307
- const bubbleStyle = props.bubbleStyle?.({ isMe })
308
- const messageContainerStyle = props.messageContainerStyle?.({ isMe })
309
- const bubbleTextStyle = props.bubbleTextStyle?.({ isMe })
310
- const messageWrapperStyle = props.messageWrapperStyle?.({ isMe })
311
- const bubbleBackgroundColor = props.bubbleBackgroundColor?.({ isMe })
312
- const bubbleTextColor = props.bubbleTextColor?.({ isMe })
313
-
314
- const messageProps: MessageProps = {
315
- messageContainerStyle,
316
- bubbleStyle,
317
- bubbleTextStyle,
318
- messageWrapperStyle,
319
- delivered: true,
320
- // isMe: (message.user && message.user.id) === (props.user && props.user.id),
321
- isMe,
322
- renderFooter: props.renderMessageFooter,
323
- imageProps: props.imageProps,
324
- // media: message.media,
325
- name: message.user.name,
326
- system: message.system,
327
- text: message.text,
328
- read: true,
329
- renderMedia: props.renderMessageMedia,
330
- onLongPress: onLongPressItem,
331
- onPress: onPressItem,
332
- // pressType: props.messagePressType || 'double',
333
- onDoubleTap: onDoubleTapItem,
334
- doubleTapDelay: props.messageDoubleTapDelay,
335
- disableSwipeActions: props.disableSwipeActions,
336
- swipeActions: props.swipeActions,
337
- longPressDelay: props.messageLongPressDelay,
338
- id: message.id,
339
- showName,
340
- avatar: message.user.avatar,
341
- avatarImageProps: props.avatarImageProps,
342
- avatarSize: props.avatarSize,
343
- renderAvatar,
344
- showAvatar,
345
- initialsBackgroundColor: props.initialsBackgroundColor,
346
- initialsTextColor: props.initialsTextColor,
347
- renderInitials: props.renderInitials,
348
- nameStyle: props.nameStyle,
349
- tintColor: props.tintColor,
350
- swipeActionWidth: props.swipeActionWidth,
351
- renderSwipeAction: props.renderSwipeAction,
352
- bubbleBackgroundColor,
353
- bubbleTextColor,
354
- userId: message.user.id,
355
- userName: message.user.name,
356
- AvatarImageComponent: props.AvatarImageComponent,
357
- mediaHeight: message.media?.height,
358
- mediaWidth: message.media?.width,
359
- mediaUri: message.media?.uri,
360
- mediaContentType: message.media?.contentType,
361
- mediaUrl: message.media?.url,
362
- createsNewBunch: messageCreatesNewBunch,
363
- renderText: props.renderMessageText,
364
- createdAt: message.createdAt,
365
- }
366
-
367
- if (props.renderMessage) return props.renderMessage(messageProps)
368
- return <Message {...messageProps} />
369
- }
370
- // ,
371
- // [
372
- // props.tintColor,
373
- // props.user,
374
- // props.renderItem,
375
- // props.renderMessage,
376
- // props.renderMessageFooter,
377
- // props.renderSystemMessage,
378
- // props.renderMessageMedia,
379
- // props.onPressMessage,
380
- // props.systemMessageContainerStyle,
381
- // props.systemMessageDateToStringFunc,
382
- // props.systemMessageDateStyle,
383
- // props.systemMessageTextStyle,
384
- // props.messages,
385
- // props.showNameForEveryMessage,
386
- // props.showMyName,
387
- // props.showAvatarForEveryMessage,
388
- // props.renderAvatar,
389
- // props.hideMyAvatar,
390
- // props.bubbleStyle,
391
- // props.messageContainerStyle,
392
- // props.bubbleTextStyle,
393
- // props.messageWrapperStyle,
394
- // props.bubbleBackgroundColor,
395
- // props.bubbleTextStyle,
396
- // props.bubbleTextColor,
397
- // props.renderMessageFooter,
398
- // props.imageProps,
399
- // props.onLongPressMessage,
400
- // props.messagePressType,
401
- // props.onPressMessage,
402
- // props.messageDoubleTapDelay,
403
- // props.disableSwipeActions,
404
- // props.swipeActionWidth,
405
- // props.swipeActions,
406
- // props.messageLongPressDelay,
407
- // props.avatarImageProps,
408
- // props.avatarSize,
409
- // props.initialsBackgroundColor,
410
- // props.initialsTextColor,
411
- // props.renderInitials,
412
- // props.nameStyle,
413
- // props.swipeActionWidth,
414
- // props.AvatarImageComponent,
415
- // ],
416
- // )
417
-
418
- const keyExtractor = useMemo(
419
- () => props.keyExtractor || (({ id }: MessageModel) => id),
420
- [props.keyExtractor]
421
- )
422
- const namesOfUsersTyping = useMemo(() => props.namesOfUsersTyping || [], [
423
- props.namesOfUsersTyping,
424
- ])
425
-
426
- const typingText = namesOfUsersTyping.join(', ')
427
-
428
- const { renderTypingIndicator, typingIndicatorProps } = props
429
- const ListFooterComponent = useCallback(() => {
430
- if (renderTypingIndicator === null || !numberOfUsersTyping) return null
431
-
432
- return (
433
- <TypingFooter
434
- typingText={props.showTypingText ? typingText : ''}
435
- numberOfUsersTyping={numberOfUsersTyping}
436
- {...typingIndicatorProps}
437
- />
438
- )
439
- }, [
440
- typingText,
441
- props.showTypingText,
442
- renderTypingIndicator,
443
- numberOfUsersTyping,
444
- typingIndicatorProps,
445
- ])
446
-
447
- const {
448
- flatListProps,
449
- keyboardDismissMode = 'interactive',
450
- keyboardShouldPersistTaps = 'handled',
451
- extraData,
452
- messages,
453
- contentContainerStyle,
454
- } = props
455
- const renderList = () => {
456
- return (
457
- <Animated.FlatList
458
- {...flatListProps}
459
- ref={flatListRef as MutableRefObject<FlatList<MessageModel>>}
460
- data={messages}
461
- keyExtractor={keyExtractor}
462
- renderItem={renderItem}
463
- extraData={extraData}
464
- ListHeaderComponent={ListFooterComponent}
465
- inverted
466
- // initialNum
467
- onScroll={onScroll}
468
- onViewableItemsChanged={onViewableItemsChanged}
469
- keyboardShouldPeristTaps={keyboardShouldPersistTaps}
470
- keyboardDismissMode={keyboardDismissMode}
471
- contentContainerStyle={{
472
- ...styles.contentContainer,
473
- ...(contentContainerStyle || {}),
474
- }}
475
- initialNumToRender={20}
476
- />
477
- )
478
- }
479
- // , [
480
- // flatListProps,
481
- // keyboardDismissMode,
482
- // keyboardShouldPersistTaps,
483
- // extraData,
484
- // messages,
485
- // onViewableItemsChanged,
486
- // ListFooterComponent,
487
- // onScroll,
488
- // keyExtractor,
489
- // renderItem,
490
- // contentContainerStyle,
491
- // ])
492
- const renderHeader = () => {
493
- if (props.renderHeader) return props.renderHeader()
494
- return null
495
- }
496
- const renderFooter = () => {
497
- if (props.renderFooter) return props.renderFooter()
498
- return null
499
- }
500
- const renderComposer = () => {
501
- if (props.renderComposer === null) return null
502
-
503
- const composerProps: ComposerProps = {
504
- onInputTextChanged: props.onInputTextChanged,
505
- text: props.text,
506
- initialText: props.initialText,
507
- placeholderColor: props.placeholderColor,
508
- placeholderText: props.placeholderText,
509
- renderSendButton: props.renderSendButton,
510
- renderTextInput: props.renderTextInput,
511
- textInputProps: props.textInputProps,
512
- media: props.media,
513
- onChangeMedia: props.onChangeMedia,
514
- user: props.user,
515
- onSend: props.onSend,
516
- sendButtonMode: props.sendButtonMode,
517
- containerStyle: props.composerContainerStyle,
518
- inputContainerStyle: props.inputContainerStyle,
519
- inputStyle: props.inputStyle,
520
- tintColor: props.tintColor,
521
- inputRef: inputRef as MutableRefObject<TextInput>,
522
- sendButtonContainerStyle: props.sendButtonContainerStyle,
523
- sendOnKeyboardReturn: props.sendOnKeyboardReturn,
524
- }
525
- if (props.renderComposer) return props.renderComposer(composerProps)
526
-
527
- return <Composer {...composerProps} />
528
- }
529
-
530
- // now, onto the actual render code
531
- const Container =
532
- props.ContainerComponent || (props.safeArea ? SafeAreaView : View)
533
- const KeyboardView =
534
- props.avoidKeyboard === false ? View : KeyboardAvoidingView
535
-
536
- // reanimated transition
537
- const transition = useMemo(
538
- () =>
539
- props.transitionConfig ||
540
- (true && (
541
- <Transition.Together>
542
- {/* <Transition.Out type="fade" durationMs={100} /> */}
543
- <Transition.Change interpolation="easeInOut" />
544
- <Transition.In type="fade" />
545
- </Transition.Together>
546
- )),
547
- [props.transitionConfig]
548
- )
549
- const containerStyle = useMemo(
550
- () => ({
551
- ...styles.container,
552
- ...props.containerStyle,
553
- }),
554
- [props.containerStyle]
555
- )
556
- return (
557
- <Transitioning.View
558
- ref={transitionRef}
559
- transition={transition}
560
- style={containerStyle}
561
- >
562
- <Container style={containerStyle}>
563
- <KeyboardView
564
- style={containerStyle}
565
- // behavior={Platform.OS === 'ios' ? 'padding' : undefined}
566
- behavior="padding"
567
- >
568
- {renderHeader()}
569
- {renderList()}
570
- {renderFooter()}
571
- {renderComposer()}
572
- </KeyboardView>
573
- </Container>
574
- </Transitioning.View>
575
- )
576
- }
577
-
578
- Chat.append = function<M>(state: M[], messages: M[]) {
579
- return [...messages, ...state]
580
- }
581
-
582
- export default Chat
583
-
584
- const styles = StyleSheet.create({
585
- container: {
586
- flex: 1,
587
- },
588
- contentContainer: {
589
- flexGrow: 1,
590
- marginTop: 5,
591
- },
592
- })