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,356 +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
- } from 'react-native'
18
- import {
19
- Transitioning,
20
- Transition,
21
- TransitioningView
22
- } from 'react-native-reanimated'
23
- import Message from './Message'
24
- import {
25
- ChatProps,
26
- MessageProps,
27
- ComposerProps,
28
- SystemMessageProps,
29
- ChatRef
30
- } from './types'
31
- import { NewMessageModel } from '../../classes/Message/types'
32
- import Composer from './Composer'
33
- import SystemMessage from './SystemMessage'
34
-
35
- function Chat<MessageModel extends NewMessageModel = NewMessageModel>(
36
- props: ChatProps<MessageModel>,
37
- ref: MutableRefObject<ChatRef<MessageModel>>
38
- ) {
39
- // "constructor" variables
40
-
41
- const inputRef = useRef<TextInput>()
42
- const flatListRef = useRef<FlatList<MessageModel>>()
43
- const componentRef = useRef<ChatRef<MessageModel>>()
44
-
45
- if (!componentRef.current) {
46
- componentRef.current = {
47
- focusInput: () => inputRef.current && inputRef.current.focus(),
48
- blurInput: () => inputRef.current && inputRef.current.blur(),
49
- scrollToEnd: () =>
50
- flatListRef.current && flatListRef.current.scrollToEnd(),
51
- scrollToIndex: params =>
52
- flatListRef.current && flatListRef.current.scrollToIndex(params),
53
- scrollToItem: params =>
54
- flatListRef.current && flatListRef.current.scrollToItem(params),
55
- scrollToOffset: params =>
56
- flatListRef.current && flatListRef.current.scrollToOffset(params)
57
- }
58
- if (ref) ref.current = componentRef.current
59
- }
60
-
61
- // used to shuffle/transition the inbox when it changes
62
- const transitionRef = useRef<TransitioningView>(null)
63
- const mounted = useRef(false)
64
-
65
- // track animated position of scroll
66
- const scrollY: Animated.Value = useMemo(
67
- () => props.animatedScrollNode || new Animated.Value(0),
68
- [props.animatedScrollNode]
69
- )
70
-
71
- // upate position of scroll variable
72
- const onScroll = Animated.event(
73
- [{ nativeEvent: { contentOffset: { y: scrollY } } }],
74
- { useNativeDriver: true }
75
- )
76
-
77
- // effect to handle new messages coming in / scrolling to bottom
78
- // TODO we may have to use getNode() for the animated flatlist, right?
79
- useEffect(() => {
80
- if (flatListRef.current) {
81
- const iSentLastMessage =
82
- props.messages[0] &&
83
- props.messages[0].user &&
84
- props.messages[0].user.id === props.user.id
85
- if (iSentLastMessage && !props.disableScrollToBottomOnSend)
86
- flatListRef.current.scrollToOffset({ offset: 0 })
87
- else if (props.scrollToBottomOnAllNewMessages)
88
- flatListRef.current.scrollToOffset({ offset: 0 })
89
- }
90
- }, [
91
- props.disableScrollToBottomOnSend,
92
- props.scrollToBottomOnAllNewMessages,
93
- props.messages,
94
- props.user.id
95
- ])
96
-
97
- // 💩 a super way of handling viewable items not on the fly. (easy way to track viewed messages)
98
- // TODO abstract this to a different custom hook.
99
- const onViewableItemsChangedRef = useRef(props.onViewableItemsChanged)
100
- const onViewMessagesRef = useRef(props.onViewMessages)
101
- const messagesRef = useRef(props.messages)
102
- // ...onto the effect 😅
103
- useEffect(() => {
104
- // make updated methods available to onviewable items changed
105
- onViewableItemsChangedRef.current = props.onViewableItemsChanged
106
- onViewMessagesRef.current = props.onViewMessages
107
- messagesRef.current = props.messages
108
- }, [props.onViewableItemsChanged, props.onViewMessages, props.messages])
109
-
110
- const onViewableItemsChanged: FlatList<
111
- MessageModel
112
- >['props']['onViewableItemsChanged'] = useCallback(
113
- (info: { viewableItems: ViewToken[]; changed: ViewToken[] }) => {
114
- if (onViewableItemsChangedRef.current)
115
- onViewableItemsChangedRef.current(info)
116
-
117
- if (onViewMessagesRef.current) {
118
- const visibleMessages = info.viewableItems
119
- .filter(i => i.isViewable)
120
- .map(i => i.item)
121
- const latestMessageId =
122
- messagesRef.current &&
123
- messagesRef.current[0] &&
124
- messagesRef.current[0].id
125
- onViewMessagesRef.current({
126
- visibleMessages,
127
- latestMessageId
128
- })
129
- }
130
- },
131
- []
132
- )
133
- // END OF THAT 💩
134
-
135
- // effect to handle animating the screen if the messages changed or people typing just changed
136
- useEffect(() => {
137
- if (
138
- !props.disableTransitions &&
139
- // if we've already mounted, or we want to transition even if we haven't...
140
- (mounted.current || !props.disableTransitionOnMount) &&
141
- // and assuming the transition component is initialized...
142
- transitionRef.current
143
- )
144
- // animate
145
- transitionRef.current.animateNextTransition()
146
- else mounted.current = true
147
- }, [
148
- props.disableTransitionOnMount,
149
- props.namesOfUsersTyping,
150
- props.messages,
151
- props.disableTransitions
152
- ])
153
-
154
- const renderItem = (info: ListRenderItemInfo<MessageModel>) => {
155
- if (props.renderItem) return props.renderItem(info)
156
- if (props.renderMessage === null) return null
157
-
158
- const { item: message, index } = info
159
-
160
- if (message.system) {
161
- const systemProps: SystemMessageProps = {
162
- text: message.text,
163
- createdAt: message.createdAt,
164
- textStyle: props.systemMessageTextStyle,
165
- containerStyle: props.systemMessageContainerStyle,
166
- dateToStringFunc: props.systemMessageDateToStringFunc,
167
- dateStyle: props.systemMessageDateStyle
168
- }
169
-
170
- if (props.renderSystemMessage === null) return null
171
- if (props.renderSystemMessage)
172
- return props.renderSystemMessage(systemProps)
173
-
174
- return <SystemMessage {...systemProps} />
175
- }
176
-
177
- const isMe = message.user.id === props.user.id
178
-
179
- // indicates that the previous message was sent by someone else, so this starts a new bunch
180
- const messageCreatesNewBunch = !(
181
- props.messages[index + 1] &&
182
- props.messages[index + 1].user &&
183
- props.messages[index + 1].user.id === (props.user && props.user.id)
184
- )
185
-
186
- // show name if the previous message was sent by someone else
187
- const showName = !isMe && messageCreatesNewBunch
188
-
189
- // by default, only show avatar for a the bottom of a bunch
190
- let showAvatar = props.showAvatarForEveryMessage || messageCreatesNewBunch
191
- // and we hide the avatar if we say to
192
- if (isMe && props.hideMyAvatar) showAvatar = false
193
-
194
- const bubbleStyle =
195
- props.bubbleStyle && props.bubbleStyle[isMe ? 'me' : 'others']
196
- const messageContainerStyle =
197
- props.messageContainerStyle &&
198
- props.messageContainerStyle[isMe ? 'me' : 'others']
199
- const bubbleTextStyle =
200
- props.bubbleTextStyle && props.bubbleTextStyle[isMe ? 'me' : 'others']
201
- const messageWrapperStyle =
202
- props.messageWrapperStyle &&
203
- props.messageWrapperStyle[isMe ? 'me' : 'others']
204
-
205
- const messageProps: MessageProps = {
206
- messageContainerStyle,
207
- bubbleStyle,
208
- bubbleTextStyle,
209
- messageWrapperStyle,
210
- delivered: true,
211
- isMe: message.user.id === props.user.id,
212
- renderFooter: props.renderMessageFooter,
213
- imageProps: props.imageProps,
214
- media: message.media,
215
- name: message.user.name,
216
- system: message.system,
217
- text: message.text,
218
- read: true,
219
- renderMedia: props.renderMessageMedia,
220
- onLongPress: props.onLongPressMessage,
221
- onPress: props.onPressMessage,
222
- pressType: props.messagePressType || 'double',
223
- doubleTapDelay: props.messageDoubleTapDelay,
224
- disableSwipeActions: props.disableSwipeActions,
225
- swipeActions: props.swipeActions,
226
- longPressDelay: props.messageLongPressDelay,
227
- id: message.id,
228
- showName,
229
- avatar: message.user.avatar,
230
- avatarImageProps: props.avatarImageProps,
231
- avatarSize: props.avatarSize,
232
- renderAvatar: props.renderAvatar,
233
- showAvatar,
234
- initialsBackgroundColor: props.initialsBackgroundColor,
235
- initialsTextColor: props.initialsTextColor,
236
- renderInitials: props.renderInitials
237
- }
238
-
239
- if (props.renderMessage) return props.renderMessage(messageProps)
240
- return <Message {...messageProps} />
241
- }
242
-
243
- const keyExtractor = useMemo(
244
- () => props.keyExtractor || (({ id }: MessageModel) => id),
245
- [props.keyExtractor]
246
- )
247
-
248
- const renderList = () => {
249
- return (
250
- <Animated.FlatList
251
- {...props.flatListProps}
252
- ref={flatListRef as MutableRefObject<FlatList<MessageModel>>}
253
- data={props.messages}
254
- keyExtractor={keyExtractor}
255
- renderItem={renderItem}
256
- extraData={props.extraData}
257
- ListHeaderComponent={props.ListFooterComponent}
258
- inverted
259
- onScroll={onScroll}
260
- onViewableItemsChanged={onViewableItemsChanged}
261
- keyboardShouldPeristTaps={props.keyboardShouldPersistTaps || 'handled'}
262
- keyboardDismissMode={props.keyboardDismissMode || 'interactive'}
263
- contentContainerStyle={{
264
- ...styles.contentContainer,
265
- ...(props.contentContainerStyle || {})
266
- }}
267
- />
268
- )
269
- }
270
- const renderHeader = () => {
271
- if (props.renderHeader) return props.renderHeader()
272
- return null
273
- }
274
- const renderFooter = () => {
275
- if (props.renderFooter) return props.renderFooter()
276
- return null
277
- }
278
- const renderComposer = () => {
279
- if (props.renderComposer === null) return null
280
-
281
- const composerProps: ComposerProps = {
282
- onInputTextChanged: props.onInputTextChanged,
283
- text: props.text,
284
- initialText: props.initialText,
285
- placeholderColor: props.placeholderColor,
286
- placeholderText: props.placeholderText,
287
- renderSendButton: props.renderSendButton,
288
- renderTextInput: props.renderTextInput,
289
- textInputProps: props.textInputProps,
290
- media: props.media,
291
- onChangeMedia: props.onChangeMedia,
292
- user: props.user,
293
- onSend: props.onSend,
294
- sendButtonMode: props.sendButtonMode,
295
- containerStyle: props.composerContainerStyle,
296
- inputContainerStyle: props.inputContainerStyle,
297
- inputStyle: props.inputStyle,
298
- tintColor: props.tintColor,
299
- inputRef: inputRef as MutableRefObject<TextInput>
300
- }
301
- if (props.renderComposer) return props.renderComposer(composerProps)
302
-
303
- return <Composer {...composerProps} />
304
- }
305
-
306
- // now, onto the actual render code
307
- const Container =
308
- props.ContainerComponent || (props.safeArea ? SafeAreaView : View)
309
-
310
- // reanimated transition
311
- const transition = useMemo(
312
- () =>
313
- props.transitionConfig || (
314
- <Transition.Sequence>
315
- <Transition.Together>
316
- <Transition.Out type="fade" />
317
- <Transition.Change interpolation="easeOut" />
318
- </Transition.Together>
319
- <Transition.In type="fade" />
320
- </Transition.Sequence>
321
- ),
322
- [props.transitionConfig]
323
- )
324
- const containerStyle = useMemo(
325
- () => ({
326
- ...styles.container,
327
- ...props.containerStyle
328
- }),
329
- [props.containerStyle]
330
- )
331
- return (
332
- <Transitioning.View
333
- ref={transitionRef}
334
- transition={transition}
335
- style={containerStyle}
336
- >
337
- <Container style={containerStyle}>
338
- {renderHeader()}
339
- {renderList()}
340
- {renderFooter()}
341
- {renderComposer()}
342
- </Container>
343
- </Transitioning.View>
344
- )
345
- }
346
-
347
- export default Chat
348
-
349
- const styles = StyleSheet.create({
350
- container: {
351
- flex: 1
352
- },
353
- contentContainer: {
354
- flexGrow: 1
355
- }
356
- })