chat 1.0.8 → 4.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 (327) hide show
  1. package/dist/chunk-ACQNDPTB.js +356 -0
  2. package/dist/chunk-ACQNDPTB.js.map +1 -0
  3. package/dist/index.d.ts +1312 -0
  4. package/dist/index.js +1433 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/jsx-runtime-D7zHSnXe.d.ts +349 -0
  7. package/dist/jsx-runtime.d.ts +1 -0
  8. package/dist/jsx-runtime.js +17 -0
  9. package/dist/jsx-runtime.js.map +1 -0
  10. package/package.json +61 -97
  11. package/lib/module/ChatContext/index.js +0 -2
  12. package/lib/module/ChatContext/index.js.map +0 -1
  13. package/lib/module/ChatContext/types.js +0 -2
  14. package/lib/module/ChatContext/types.js.map +0 -1
  15. package/lib/module/classes/Chat/index.js +0 -2
  16. package/lib/module/classes/Chat/index.js.map +0 -1
  17. package/lib/module/classes/Chat/types.js +0 -2
  18. package/lib/module/classes/Chat/types.js.map +0 -1
  19. package/lib/module/classes/Inbox/index.js +0 -2
  20. package/lib/module/classes/Inbox/index.js.map +0 -1
  21. package/lib/module/classes/Inbox/types.js +0 -2
  22. package/lib/module/classes/Inbox/types.js.map +0 -1
  23. package/lib/module/classes/Message/index.js +0 -2
  24. package/lib/module/classes/Message/index.js.map +0 -1
  25. package/lib/module/classes/Message/types.js +0 -2
  26. package/lib/module/classes/Message/types.js.map +0 -1
  27. package/lib/module/classes/Reaction/index.js +0 -2
  28. package/lib/module/classes/Reaction/index.js.map +0 -1
  29. package/lib/module/classes/Reaction/types.js +0 -2
  30. package/lib/module/classes/Reaction/types.js.map +0 -1
  31. package/lib/module/classes/Room/index.js +0 -2
  32. package/lib/module/classes/Room/index.js.map +0 -1
  33. package/lib/module/classes/Room/types.js +0 -2
  34. package/lib/module/classes/Room/types.js.map +0 -1
  35. package/lib/module/classes/index.js +0 -2
  36. package/lib/module/classes/index.js.map +0 -1
  37. package/lib/module/components/Avatar/index.js +0 -2
  38. package/lib/module/components/Avatar/index.js.map +0 -1
  39. package/lib/module/components/Chat/Bubble/index.js +0 -2
  40. package/lib/module/components/Chat/Bubble/index.js.map +0 -1
  41. package/lib/module/components/Chat/Composer/Input/index.js +0 -2
  42. package/lib/module/components/Chat/Composer/Input/index.js.map +0 -1
  43. package/lib/module/components/Chat/Composer/Send/index.js +0 -2
  44. package/lib/module/components/Chat/Composer/Send/index.js.map +0 -1
  45. package/lib/module/components/Chat/Composer/index.js +0 -2
  46. package/lib/module/components/Chat/Composer/index.js.map +0 -1
  47. package/lib/module/components/Chat/Media/Image/index.js +0 -2
  48. package/lib/module/components/Chat/Media/Image/index.js.map +0 -1
  49. package/lib/module/components/Chat/Media/index.js +0 -2
  50. package/lib/module/components/Chat/Media/index.js.map +0 -1
  51. package/lib/module/components/Chat/Message/Swiper/Action/index.js +0 -2
  52. package/lib/module/components/Chat/Message/Swiper/Action/index.js.map +0 -1
  53. package/lib/module/components/Chat/Message/Swiper/index.js +0 -2
  54. package/lib/module/components/Chat/Message/Swiper/index.js.map +0 -1
  55. package/lib/module/components/Chat/Message/Touchable/index.js +0 -2
  56. package/lib/module/components/Chat/Message/Touchable/index.js.map +0 -1
  57. package/lib/module/components/Chat/Message/index.js +0 -2
  58. package/lib/module/components/Chat/Message/index.js.map +0 -1
  59. package/lib/module/components/Chat/SystemMessage/index.js +0 -2
  60. package/lib/module/components/Chat/SystemMessage/index.js.map +0 -1
  61. package/lib/module/components/Chat/TypingFooter/index.js +0 -2
  62. package/lib/module/components/Chat/TypingFooter/index.js.map +0 -1
  63. package/lib/module/components/Chat/index.js +0 -2
  64. package/lib/module/components/Chat/index.js.map +0 -1
  65. package/lib/module/components/Chat/types.js +0 -2
  66. package/lib/module/components/Chat/types.js.map +0 -1
  67. package/lib/module/components/Chat-Old/Bubble/index.js +0 -2
  68. package/lib/module/components/Chat-Old/Bubble/index.js.map +0 -1
  69. package/lib/module/components/Chat-Old/Composer/Input/index.js +0 -2
  70. package/lib/module/components/Chat-Old/Composer/Input/index.js.map +0 -1
  71. package/lib/module/components/Chat-Old/Composer/Send/index.js +0 -2
  72. package/lib/module/components/Chat-Old/Composer/Send/index.js.map +0 -1
  73. package/lib/module/components/Chat-Old/Composer/index.js +0 -2
  74. package/lib/module/components/Chat-Old/Composer/index.js.map +0 -1
  75. package/lib/module/components/Chat-Old/Message/index.js +0 -2
  76. package/lib/module/components/Chat-Old/Message/index.js.map +0 -1
  77. package/lib/module/components/Chat-Old/Swiper/Action/index.js +0 -2
  78. package/lib/module/components/Chat-Old/Swiper/Action/index.js.map +0 -1
  79. package/lib/module/components/Chat-Old/Swiper/index.js +0 -2
  80. package/lib/module/components/Chat-Old/Swiper/index.js.map +0 -1
  81. package/lib/module/components/Chat-Old/SystemMessage/index.js +0 -2
  82. package/lib/module/components/Chat-Old/SystemMessage/index.js.map +0 -1
  83. package/lib/module/components/Chat-Old/index.js +0 -2
  84. package/lib/module/components/Chat-Old/index.js.map +0 -1
  85. package/lib/module/components/Chat-Old/types.js +0 -2
  86. package/lib/module/components/Chat-Old/types.js.map +0 -1
  87. package/lib/module/components/ChatProvider/index.js +0 -2
  88. package/lib/module/components/ChatProvider/index.js.map +0 -1
  89. package/lib/module/components/ChatProvider/types.js +0 -2
  90. package/lib/module/components/ChatProvider/types.js.map +0 -1
  91. package/lib/module/components/Inbox/Item/Circle/index.js +0 -2
  92. package/lib/module/components/Inbox/Item/Circle/index.js.map +0 -1
  93. package/lib/module/components/Inbox/Item/Circle/types.js +0 -2
  94. package/lib/module/components/Inbox/Item/Circle/types.js.map +0 -1
  95. package/lib/module/components/Inbox/Item/Initials/index.js +0 -2
  96. package/lib/module/components/Inbox/Item/Initials/index.js.map +0 -1
  97. package/lib/module/components/Inbox/Item/ItemDate/index.js +0 -2
  98. package/lib/module/components/Inbox/Item/ItemDate/index.js.map +0 -1
  99. package/lib/module/components/Inbox/Item/Separator/index.js +0 -2
  100. package/lib/module/components/Inbox/Item/Separator/index.js.map +0 -1
  101. package/lib/module/components/Inbox/Item/Subtitle/index.js +0 -2
  102. package/lib/module/components/Inbox/Item/Subtitle/index.js.map +0 -1
  103. package/lib/module/components/Inbox/Item/Swipeable/index.js +0 -2
  104. package/lib/module/components/Inbox/Item/Swipeable/index.js.map +0 -1
  105. package/lib/module/components/Inbox/Item/Title/index.js +0 -2
  106. package/lib/module/components/Inbox/Item/Title/index.js.map +0 -1
  107. package/lib/module/components/Inbox/Item/UnreadIndicator/index.js +0 -2
  108. package/lib/module/components/Inbox/Item/UnreadIndicator/index.js.map +0 -1
  109. package/lib/module/components/Inbox/Item/index.js +0 -2
  110. package/lib/module/components/Inbox/Item/index.js.map +0 -1
  111. package/lib/module/components/Inbox/index.js +0 -2
  112. package/lib/module/components/Inbox/index.js.map +0 -1
  113. package/lib/module/components/Inbox/question.md +0 -21
  114. package/lib/module/components/Inbox/readme.md +0 -21
  115. package/lib/module/components/Inbox/types.js +0 -2
  116. package/lib/module/components/Inbox/types.js.map +0 -1
  117. package/lib/module/components/RoomCreator/Content/Footer/Button/index.js +0 -2
  118. package/lib/module/components/RoomCreator/Content/Footer/Button/index.js.map +0 -1
  119. package/lib/module/components/RoomCreator/Content/Footer/Input/index.js +0 -2
  120. package/lib/module/components/RoomCreator/Content/Footer/Input/index.js.map +0 -1
  121. package/lib/module/components/RoomCreator/Content/Footer/index.js +0 -2
  122. package/lib/module/components/RoomCreator/Content/Footer/index.js.map +0 -1
  123. package/lib/module/components/RoomCreator/Content/Item/Icon/index.js +0 -2
  124. package/lib/module/components/RoomCreator/Content/Item/Icon/index.js.map +0 -1
  125. package/lib/module/components/RoomCreator/Content/Item/index.js +0 -2
  126. package/lib/module/components/RoomCreator/Content/Item/index.js.map +0 -1
  127. package/lib/module/components/RoomCreator/Content/index.js +0 -2
  128. package/lib/module/components/RoomCreator/Content/index.js.map +0 -1
  129. package/lib/module/components/RoomCreator/Header/index.js +0 -2
  130. package/lib/module/components/RoomCreator/Header/index.js.map +0 -1
  131. package/lib/module/components/RoomCreator/index.js +0 -2
  132. package/lib/module/components/RoomCreator/index.js.map +0 -1
  133. package/lib/module/components/RoomCreator/types.js +0 -2
  134. package/lib/module/components/RoomCreator/types.js.map +0 -1
  135. package/lib/module/components/TypingIndicator/index.js +0 -2
  136. package/lib/module/components/TypingIndicator/index.js.map +0 -1
  137. package/lib/module/components/index.js +0 -2
  138. package/lib/module/components/index.js.map +0 -1
  139. package/lib/module/helpers/getInitials.js +0 -2
  140. package/lib/module/helpers/getInitials.js.map +0 -1
  141. package/lib/module/helpers/sortByAvatar.js +0 -2
  142. package/lib/module/helpers/sortByAvatar.js.map +0 -1
  143. package/lib/module/hooks/index.js +0 -2
  144. package/lib/module/hooks/index.js.map +0 -1
  145. package/lib/module/hooks/useCreateRoom/index.js +0 -2
  146. package/lib/module/hooks/useCreateRoom/index.js.map +0 -1
  147. package/lib/module/hooks/useCreator/index.js +0 -2
  148. package/lib/module/hooks/useCreator/index.js.map +0 -1
  149. package/lib/module/hooks/useInbox/index.js +0 -2
  150. package/lib/module/hooks/useInbox/index.js.map +0 -1
  151. package/lib/module/hooks/useInbox/types.js +0 -2
  152. package/lib/module/hooks/useInbox/types.js.map +0 -1
  153. package/lib/module/hooks/useMessages/index.js +0 -2
  154. package/lib/module/hooks/useMessages/index.js.map +0 -1
  155. package/lib/module/hooks/useMessages/types.js +0 -2
  156. package/lib/module/hooks/useMessages/types.js.map +0 -1
  157. package/lib/module/hooks/useRoom/index.js +0 -2
  158. package/lib/module/hooks/useRoom/index.js.map +0 -1
  159. package/lib/module/hooks/useRoom/types.js +0 -2
  160. package/lib/module/hooks/useRoom/types.js.map +0 -1
  161. package/lib/module/hooks/useSend/useSendToGroup/index.js +0 -2
  162. package/lib/module/hooks/useSend/useSendToGroup/index.js.map +0 -1
  163. package/lib/module/hooks/useSend/useSendToPeople/index.js +0 -2
  164. package/lib/module/hooks/useSend/useSendToPeople/index.js.map +0 -1
  165. package/lib/module/hooks/useTyping/index.js +0 -2
  166. package/lib/module/hooks/useTyping/index.js.map +0 -1
  167. package/lib/module/hooks/useTypingOLD/index.js +0 -2
  168. package/lib/module/hooks/useTypingOLD/index.js.map +0 -1
  169. package/lib/module/hooks/useTypingOLD/types.js +0 -2
  170. package/lib/module/hooks/useTypingOLD/types.js.map +0 -1
  171. package/lib/module/hooks/useViewMessages/index.js +0 -2
  172. package/lib/module/hooks/useViewMessages/index.js.map +0 -1
  173. package/lib/module/hooks/useViewMessages/types.js +0 -2
  174. package/lib/module/hooks/useViewMessages/types.js.map +0 -1
  175. package/lib/module/hooks/useViewMessagesOld/index.js +0 -2
  176. package/lib/module/hooks/useViewMessagesOld/index.js.map +0 -1
  177. package/lib/module/index.js +0 -2
  178. package/lib/module/index.js.map +0 -1
  179. package/lib/typescript/ChatContext/index.d.ts +0 -2
  180. package/lib/typescript/ChatContext/types.d.ts +0 -4
  181. package/lib/typescript/classes/Chat/index.d.ts +0 -14
  182. package/lib/typescript/classes/Chat/types.d.ts +0 -21
  183. package/lib/typescript/classes/Inbox/types.d.ts +0 -2
  184. package/lib/typescript/classes/Message/index.d.ts +0 -47
  185. package/lib/typescript/classes/Message/types.d.ts +0 -66
  186. package/lib/typescript/classes/Reaction/index.d.ts +0 -17
  187. package/lib/typescript/classes/Reaction/types.d.ts +0 -33
  188. package/lib/typescript/classes/Room/index.d.ts +0 -42
  189. package/lib/typescript/classes/Room/types.d.ts +0 -112
  190. package/lib/typescript/classes/index.d.ts +0 -4
  191. package/lib/typescript/components/Avatar/index.d.ts +0 -4
  192. package/lib/typescript/components/Chat/Bubble/index.d.ts +0 -4
  193. package/lib/typescript/components/Chat/Composer/Input/index.d.ts +0 -7
  194. package/lib/typescript/components/Chat/Composer/Send/index.d.ts +0 -4
  195. package/lib/typescript/components/Chat/Composer/index.d.ts +0 -8
  196. package/lib/typescript/components/Chat/Media/Image/index.d.ts +0 -7
  197. package/lib/typescript/components/Chat/Media/index.d.ts +0 -4
  198. package/lib/typescript/components/Chat/Message/Touchable/index.d.ts +0 -4
  199. package/lib/typescript/components/Chat/Message/index.d.ts +0 -8
  200. package/lib/typescript/components/Chat/SystemMessage/index.d.ts +0 -4
  201. package/lib/typescript/components/Chat/TypingFooter/index.d.ts +0 -4
  202. package/lib/typescript/components/Chat/index.d.ts +0 -8
  203. package/lib/typescript/components/Chat/types.d.ts +0 -843
  204. package/lib/typescript/components/ChatProvider/index.d.ts +0 -10
  205. package/lib/typescript/components/ChatProvider/types.d.ts +0 -7
  206. package/lib/typescript/components/Inbox/Item/Initials/index.d.ts +0 -4
  207. package/lib/typescript/components/Inbox/Item/ItemDate/index.d.ts +0 -4
  208. package/lib/typescript/components/Inbox/Item/Separator/index.d.ts +0 -6
  209. package/lib/typescript/components/Inbox/Item/Subtitle/index.d.ts +0 -3
  210. package/lib/typescript/components/Inbox/Item/Swipeable/index.d.ts +0 -4
  211. package/lib/typescript/components/Inbox/Item/Title/index.d.ts +0 -3
  212. package/lib/typescript/components/Inbox/Item/UnreadIndicator/index.d.ts +0 -4
  213. package/lib/typescript/components/Inbox/Item/index.d.ts +0 -6
  214. package/lib/typescript/components/Inbox/index.d.ts +0 -4
  215. package/lib/typescript/components/Inbox/types.d.ts +0 -304
  216. package/lib/typescript/components/RoomCreator/Content/Footer/Button/index.d.ts +0 -4
  217. package/lib/typescript/components/RoomCreator/Content/Footer/Input/index.d.ts +0 -4
  218. package/lib/typescript/components/RoomCreator/Content/Footer/index.d.ts +0 -3
  219. package/lib/typescript/components/RoomCreator/Content/Item/Icon/index.d.ts +0 -4
  220. package/lib/typescript/components/RoomCreator/Content/Item/index.d.ts +0 -4
  221. package/lib/typescript/components/RoomCreator/Content/index.d.ts +0 -4
  222. package/lib/typescript/components/RoomCreator/Header/index.d.ts +0 -4
  223. package/lib/typescript/components/RoomCreator/index.d.ts +0 -4
  224. package/lib/typescript/components/RoomCreator/types.d.ts +0 -208
  225. package/lib/typescript/components/TypingIndicator/index.d.ts +0 -9
  226. package/lib/typescript/components/index.d.ts +0 -12
  227. package/lib/typescript/helpers/getInitials.d.ts +0 -1
  228. package/lib/typescript/hooks/index.d.ts +0 -8
  229. package/lib/typescript/hooks/useCreator/index.d.ts +0 -27
  230. package/lib/typescript/hooks/useInbox/index.d.ts +0 -29
  231. package/lib/typescript/hooks/useInbox/types.d.ts +0 -5
  232. package/lib/typescript/hooks/useMessages/index.d.ts +0 -24
  233. package/lib/typescript/hooks/useMessages/types.d.ts +0 -5
  234. package/lib/typescript/hooks/useRoom/index.d.ts +0 -26
  235. package/lib/typescript/hooks/useRoom/types.d.ts +0 -5
  236. package/lib/typescript/hooks/useSend/useSendToGroup/index.d.ts +0 -6
  237. package/lib/typescript/hooks/useSend/useSendToPeople/index.d.ts +0 -6
  238. package/lib/typescript/hooks/useTyping/index.d.ts +0 -36
  239. package/lib/typescript/hooks/useViewMessages/index.d.ts +0 -18
  240. package/lib/typescript/hooks/useViewMessages/types.d.ts +0 -20
  241. package/lib/typescript/index.d.ts +0 -11
  242. package/readme.md +0 -201
  243. package/src/ChatContext/index.tsx +0 -9
  244. package/src/ChatContext/types.ts +0 -4
  245. package/src/classes/Chat/index.ts +0 -46
  246. package/src/classes/Chat/types.ts +0 -23
  247. package/src/classes/Inbox/index.ts +0 -12
  248. package/src/classes/Inbox/types.ts +0 -3
  249. package/src/classes/Message/index.ts +0 -310
  250. package/src/classes/Message/types.ts +0 -118
  251. package/src/classes/Reaction/index.ts +0 -108
  252. package/src/classes/Reaction/types.ts +0 -37
  253. package/src/classes/Room/index.ts +0 -323
  254. package/src/classes/Room/types.ts +0 -161
  255. package/src/classes/index.ts +0 -4
  256. package/src/components/Avatar/index.tsx +0 -25
  257. package/src/components/Chat/Bubble/index.tsx +0 -139
  258. package/src/components/Chat/Composer/Input/index.tsx +0 -45
  259. package/src/components/Chat/Composer/Send/index.tsx +0 -51
  260. package/src/components/Chat/Composer/index.tsx +0 -187
  261. package/src/components/Chat/Media/Image/index.tsx +0 -26
  262. package/src/components/Chat/Media/index.tsx +0 -11
  263. package/src/components/Chat/Message/Swiper/Action/index.tsx +0 -7
  264. package/src/components/Chat/Message/Swiper/index.tsx +0 -32
  265. package/src/components/Chat/Message/Touchable/index.tsx +0 -60
  266. package/src/components/Chat/Message/index.tsx +0 -328
  267. package/src/components/Chat/SystemMessage/index.tsx +0 -44
  268. package/src/components/Chat/TypingFooter/index.tsx +0 -48
  269. package/src/components/Chat/index.tsx +0 -596
  270. package/src/components/Chat/types.ts +0 -913
  271. package/src/components/Chat-Old/Bubble/index.tsx +0 -58
  272. package/src/components/Chat-Old/Composer/Input/index.tsx +0 -34
  273. package/src/components/Chat-Old/Composer/Send/index.tsx +0 -37
  274. package/src/components/Chat-Old/Composer/index.tsx +0 -131
  275. package/src/components/Chat-Old/Message/index.tsx +0 -160
  276. package/src/components/Chat-Old/Swiper/Action/index.tsx +0 -7
  277. package/src/components/Chat-Old/Swiper/index.tsx +0 -30
  278. package/src/components/Chat-Old/SystemMessage/index.tsx +0 -44
  279. package/src/components/Chat-Old/index.tsx +0 -356
  280. package/src/components/Chat-Old/types.ts +0 -752
  281. package/src/components/ChatProvider/index.tsx +0 -31
  282. package/src/components/ChatProvider/types.ts +0 -8
  283. package/src/components/Inbox/Item/Circle/index.tsx +0 -47
  284. package/src/components/Inbox/Item/Circle/types.ts +0 -8
  285. package/src/components/Inbox/Item/Initials/index.tsx +0 -41
  286. package/src/components/Inbox/Item/ItemDate/index.tsx +0 -26
  287. package/src/components/Inbox/Item/Separator/index.tsx +0 -13
  288. package/src/components/Inbox/Item/Subtitle/index.tsx +0 -23
  289. package/src/components/Inbox/Item/Swipeable/index.tsx +0 -143
  290. package/src/components/Inbox/Item/Title/index.tsx +0 -23
  291. package/src/components/Inbox/Item/UnreadIndicator/index.tsx +0 -84
  292. package/src/components/Inbox/Item/index.tsx +0 -307
  293. package/src/components/Inbox/index.tsx +0 -315
  294. package/src/components/Inbox/question.md +0 -21
  295. package/src/components/Inbox/readme.md +0 -21
  296. package/src/components/Inbox/types.ts +0 -371
  297. package/src/components/RoomCreator/Content/Footer/Button/index.tsx +0 -55
  298. package/src/components/RoomCreator/Content/Footer/Input/index.tsx +0 -27
  299. package/src/components/RoomCreator/Content/Footer/index.tsx +0 -72
  300. package/src/components/RoomCreator/Content/Item/Icon/index.tsx +0 -16
  301. package/src/components/RoomCreator/Content/Item/index.tsx +0 -87
  302. package/src/components/RoomCreator/Content/index.tsx +0 -75
  303. package/src/components/RoomCreator/Header/index.tsx +0 -74
  304. package/src/components/RoomCreator/index.tsx +0 -177
  305. package/src/components/RoomCreator/types.ts +0 -233
  306. package/src/components/TypingIndicator/index.tsx +0 -169
  307. package/src/components/index.ts +0 -18
  308. package/src/helpers/getInitials.ts +0 -11
  309. package/src/helpers/sortByAvatar.ts +0 -1
  310. package/src/hooks/index.ts +0 -8
  311. package/src/hooks/useCreateRoom/index.ts +0 -34
  312. package/src/hooks/useCreator/index.ts +0 -33
  313. package/src/hooks/useInbox/index.ts +0 -76
  314. package/src/hooks/useInbox/types.ts +0 -6
  315. package/src/hooks/useMessages/index.ts +0 -109
  316. package/src/hooks/useMessages/types.ts +0 -6
  317. package/src/hooks/useRoom/index.ts +0 -82
  318. package/src/hooks/useRoom/types.ts +0 -6
  319. package/src/hooks/useSend/useSendToGroup/index.ts +0 -38
  320. package/src/hooks/useSend/useSendToPeople/index.ts +0 -38
  321. package/src/hooks/useTyping/index.ts +0 -154
  322. package/src/hooks/useTypingOLD/index.ts +0 -67
  323. package/src/hooks/useTypingOLD/types.ts +0 -7
  324. package/src/hooks/useViewMessages/index.ts +0 -61
  325. package/src/hooks/useViewMessages/types.ts +0 -22
  326. package/src/hooks/useViewMessagesOld/index.ts +0 -39
  327. package/src/index.ts +0 -13
@@ -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
- }
@@ -1,161 +0,0 @@
1
- import { FieldValue, Timestamp } from '@firebase/firestore-types'
2
- import * as firebase from 'firebase'
3
-
4
- export interface LastMessage {
5
- createdAt: Date
6
- text: string
7
- name: string
8
- system: boolean
9
- id: string
10
- }
11
-
12
- export interface LastMessageServer extends Omit<LastMessage, 'createdAt'> {
13
- createdAt: FieldValue
14
- }
15
-
16
- /**
17
- * Unread count schema in the members dictionary for each room
18
- */
19
- export interface UnreadCount {
20
- count: number
21
- /**
22
- * The timestamp of the last time you cleared messages.
23
- */
24
- lastCleared: Date
25
- /**
26
- * Details of the last message you saw.
27
- */
28
- lastSeen: {
29
- id: string
30
- createdAt: Date
31
- }
32
- }
33
-
34
- export interface UnreadCountDocument extends Omit<UnreadCount, 'lastCleared'> {
35
- lastCleared: firebase.firestore.Timestamp
36
- }
37
-
38
- export interface UnreadCountServer extends Omit<UnreadCount, 'lastCleared'> {
39
- lastCleared: firebase.firestore.FieldValue
40
- }
41
-
42
- export interface RoomPropertiesModel {
43
- id: string
44
- // avatar url for this room
45
- avatar?: string
46
- members?: RoomMembers
47
- name?: string
48
- }
49
-
50
- export interface Typing {
51
- state: 'typing' | 'nothing'
52
- lastChanged: typeof firebase.database.ServerValue.TIMESTAMP
53
- }
54
-
55
- export interface RoomMember {
56
- // typing?: boolean
57
- typing?: Typing
58
- exists: boolean
59
- // we should probably do this one via cloud function
60
- name: string
61
- nickname?: string
62
- avatar?: string
63
- joinedAt: FieldValue
64
- unreadCount?: UnreadCount
65
- }
66
-
67
- export interface ExistingRoomMember {
68
- // optional nickname specific to this room
69
- nickname?: string
70
- // url to specific image for this room
71
- avatar?: string
72
- }
73
-
74
- export interface NewRoomMember extends RoomMember {}
75
-
76
- /**
77
- * Dictionary of members in the room.
78
- */
79
- export interface RoomMembers {
80
- [id: string]: RoomMember
81
- }
82
-
83
- /**
84
- * Configuration for the room class. Members doesn't need to include me.
85
- *
86
- * @example
87
- * ```
88
- * const room = new Room(config: NewRoomModel)
89
- * await room.create()
90
- * ```
91
- */
92
- export interface NewRoomModel extends Omit<RoomPropertiesModel, 'id'> {
93
- members: RoomMembers
94
- }
95
-
96
- export interface CreateCallableRoomModel extends Partial<RoomPropertiesModel> {
97
- recipients: string[]
98
- }
99
-
100
- export interface EditRoomModel extends Omit<RoomPropertiesModel, 'members'> {
101
- members?: RoomMembers
102
- name?: string
103
- lastMessage?: LastMessage
104
- }
105
-
106
- export interface ExistingRoomModel extends RoomPropertiesModel {
107
- lastMessage: LastMessage
108
- members: RoomMembers
109
- unreadCount?: number
110
- createdAt: FieldValue
111
- lastEdited: FieldValue
112
- currentMembers: string[]
113
- }
114
-
115
- export interface CreateRoomModel
116
- extends Omit<Omit<ExistingRoomModel, 'id'>, 'lastMessage'> {
117
- lastMessage: LastMessageServer
118
- }
119
-
120
- export interface CreateRoomCallableModel
121
- extends Omit<RoomPropertiesModel, 'id'> {
122
- members: RoomMembers
123
- }
124
-
125
- interface LastMessageDocument extends Omit<LastMessage, 'createdAt'> {
126
- createdAt: Timestamp
127
- }
128
-
129
- export interface ExistingRoomDocument
130
- extends Omit<ExistingRoomModel, 'lastMessage'> {
131
- lastMessage: LastMessageDocument
132
- }
133
-
134
- export type RoomModel =
135
- | RoomPropertiesModel
136
- | NewRoomModel
137
- | ExistingRoomModel
138
- | CreateCallableRoomModel
139
-
140
- // typescript type guard functions
141
- // see: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
142
-
143
- export function currentUserExists(
144
- user: firebase.User | null
145
- ): user is firebase.User {
146
- return !!(user as firebase.User)
147
- }
148
-
149
- export function roomIsEditModel(room: RoomModel): room is EditRoomModel {
150
- return !!(room as EditRoomModel)
151
- }
152
-
153
- export function roomIsNewModel(room: RoomModel): room is NewRoomModel {
154
- return !!(room as NewRoomModel)
155
- }
156
-
157
- export function roomIsCreateCallable(
158
- room: RoomModel
159
- ): room is CreateCallableRoomModel {
160
- return !!(room as CreateCallableRoomModel)
161
- }
@@ -1,4 +0,0 @@
1
- export { default as Reaction } from './Reaction'
2
- export { default as Message } from './Message'
3
- export { default as Room } from './Room'
4
- export { default as Chat } from './Chat'
@@ -1,25 +0,0 @@
1
- import React from 'react'
2
- import { Image, StyleSheet, View } from 'react-native'
3
- import { AvatarProps } from '../Inbox/types'
4
-
5
- export default React.memo(function(props: AvatarProps) {
6
- const size = props.size
7
- const borderRadius = size / 2
8
- const Img = props.ImageComponent || Image
9
- return (
10
- <View style={[styles.container, { borderRadius }]}>
11
- <Img
12
- style={[{ height: size, width: size }]}
13
- resizeMode="cover"
14
- {...(props.imageProps || {})}
15
- source={{ uri: props.avatar }}
16
- />
17
- </View>
18
- )
19
- })
20
-
21
- const styles = StyleSheet.create({
22
- container: {
23
- overflow: 'hidden'
24
- }
25
- })
@@ -1,139 +0,0 @@
1
- import React, { useMemo, FunctionComponent, useCallback } from 'react'
2
- import { BubbleProps } from '../types'
3
- import { View, Text, StyleSheet } from 'react-native'
4
- import { LinearGradient } from 'expo-linear-gradient'
5
- import { MessageMedia } from '../../../classes/Message/types'
6
- import Media from '../Media'
7
-
8
- const isValidColor = (color: string) =>
9
- /(#(?:[0-9a-f]{ 2 }){ 2,4 }|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[d\.]+%?\)|\b(transparent|black|silver|gray|whitesmoke|maroon|red|purple|fuchsia|green|lime|olivedrab|yellow|navy|blue|teal|aquamarine|orange|aliceblue|antiquewhite|aqua|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|goldenrod|gold|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavenderblush|lavender|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olive|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|white|yellowgreen|rebeccapurple)\b)/i.test(
10
- color
11
- )
12
-
13
- const Bubble: FunctionComponent<BubbleProps> = props => {
14
- const containerStyles = useMemo(() => {
15
- return [
16
- styles.container,
17
- props.isMe ? meStyles.container : otherStyles.container,
18
- props.style
19
- ]
20
- }, [props.style, props.isMe])
21
-
22
- const textStyles = useMemo(() => {
23
- const color = (props.textColor && { color: props.textColor }) || {}
24
- return [
25
- styles.text,
26
- props.isMe ? meStyles.text : otherStyles.text,
27
- color,
28
- props.textStyle
29
- ]
30
- }, [props.textStyle, props.isMe, props.textColor])
31
-
32
- const backgroundColor = useMemo(() => {
33
- let color: string[] = []
34
- if (Array.isArray(props.backgroundColor)) {
35
- color = props.backgroundColor
36
- }
37
- if (typeof props.backgroundColor === 'string') {
38
- color = [props.backgroundColor, props.backgroundColor]
39
- }
40
- const invalidColors = [
41
- ...Array.from(new Set(color.filter(color => !isValidColor(color))))
42
- ]
43
- if (invalidColors.length) {
44
- console.warn(
45
- `🍏 Juice warning: The background color value you gave to the Bubble component doesn't seem to be valid. Each color should be a HEX color or CSS color string, matching this format: #abc123, but instead, it got these: ${invalidColors}, which don't match the format. If you gave a valid CSS color and it works, you can ignore this.`
46
- )
47
- }
48
- return (
49
- color || (props.isMe ? ['#7B16FF', '#7114EA'] : ['#f1f7f8', '#f8f8f8'])
50
- )
51
- }, [props.backgroundColor, props.isMe])
52
-
53
- const { renderMedia: propsRenderMedia } = props
54
- const renderMedia = useCallback(() => {
55
- if (propsRenderMedia === null) return null
56
-
57
- if (!props.mediaContentType) return null
58
-
59
- const media: MessageMedia = {
60
- url: props.mediaUrl || '',
61
- uri: props.mediaUri,
62
- height: props.mediaHeight || 0,
63
- width: props.mediaWidth || 0,
64
- contentType: props.mediaContentType
65
- }
66
- if (propsRenderMedia) return propsRenderMedia({ media })
67
-
68
- return <Media {...media} />
69
- }, [
70
- props.mediaUrl,
71
- props.mediaUri,
72
- props.mediaHeight,
73
- props.mediaWidth,
74
- props.mediaContentType,
75
- propsRenderMedia
76
- ])
77
-
78
- const { text, renderText: propsRenderText } = props
79
- const renderText = useCallback(() => {
80
- if (text) {
81
- if (propsRenderText) return propsRenderText({ style: textStyles, text })
82
- return <Text style={textStyles}>{text}</Text>
83
- }
84
- return null
85
- }, [textStyles, text, propsRenderText])
86
-
87
- return (
88
- <View style={containerStyles} ref={props.bubbleRef}>
89
- <LinearGradient
90
- colors={backgroundColor}
91
- start={[0.1, 0.1]}
92
- end={[0.9, 0.9]}
93
- style={styles.gradient}
94
- >
95
- {renderMedia()}
96
- {renderText()}
97
- </LinearGradient>
98
- </View>
99
- )
100
- }
101
-
102
- export default React.memo(Bubble)
103
-
104
- const styles = StyleSheet.create({
105
- container: {
106
- maxWidth: '80%',
107
- borderRadius: 20,
108
- overflow: 'hidden'
109
- },
110
- text: {
111
- textAlign: 'left',
112
- fontSize: 16,
113
- paddingHorizontal: 12,
114
- paddingVertical: 10
115
- },
116
- gradient: {
117
- flex: 1
118
- }
119
- })
120
-
121
- const meStyles = StyleSheet.create({
122
- container: {
123
- // backgroundColor: 'rgb(123, 22, 255)',
124
- marginLeft: 5
125
- },
126
- text: {
127
- color: 'white'
128
- }
129
- })
130
-
131
- const otherStyles = StyleSheet.create({
132
- container: {
133
- // backgroundColor: 'lightgray',
134
- marginRight: 5
135
- },
136
- text: {
137
- color: 'black'
138
- }
139
- })
@@ -1,45 +0,0 @@
1
- import React from 'react'
2
- import { TextInput, StyleSheet, View } from 'react-native'
3
- import { InputProps } from '../../types'
4
-
5
- const Input = (props: InputProps) => {
6
- return (
7
- <View style={[styles.container, props.containerStyle]}>
8
- <TextInput
9
- {...props.inputProps}
10
- placeholder={props.placeholderText || 'Type a new message...'}
11
- placeholderTextColor={props.placeholderColor || 'lightgray'}
12
- selectionColor={props.tintColor || 'blue'}
13
- onChangeText={props.onChangeText}
14
- value={props.text}
15
- style={[styles.input, props.style]}
16
- multiline
17
- ref={props.inputRef}
18
- returnKeyLabel={props.sendOnKeyboardReturn ? 'Send' : undefined}
19
- returnKeyType={props.sendOnKeyboardReturn ? 'send' : undefined}
20
- onSubmitEditing={props.onSubmitEditing}
21
- />
22
- </View>
23
- )
24
- }
25
-
26
- Input.displayName = 'Juice.Input'
27
-
28
- export default React.memo(Input)
29
-
30
- const styles = StyleSheet.create({
31
- container: {
32
- flex: 1,
33
- flexDirection: 'row',
34
- marginHorizontal: 10,
35
- borderRadius: 20,
36
- borderWidth: 1,
37
- borderColor: 'lightgray'
38
- },
39
- input: {
40
- flex: 1,
41
- padding: 10,
42
- paddingTop: 10,
43
- fontSize: 16
44
- }
45
- })