@weavy/uikit-react 14.0.4 → 15.0.1

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 (360) hide show
  1. package/.vscode/settings.json +2 -0
  2. package/changelog.md +10 -0
  3. package/dist/cjs/client/WeavyClient.d.ts +1 -0
  4. package/dist/cjs/components/Attachment.d.ts +5 -5
  5. package/dist/cjs/components/Blob.d.ts +9 -0
  6. package/dist/cjs/components/Comment.d.ts +18 -0
  7. package/dist/cjs/components/CommentCount.d.ts +7 -0
  8. package/dist/cjs/components/CommentEdit.d.ts +16 -0
  9. package/dist/cjs/components/CommentPlaceholder.d.ts +8 -0
  10. package/dist/cjs/components/CommentTrashed.d.ts +15 -0
  11. package/dist/cjs/components/CommentView.d.ts +18 -0
  12. package/dist/cjs/components/Comments.d.ts +8 -0
  13. package/dist/cjs/components/ConversationListItem.d.ts +1 -1
  14. package/dist/cjs/components/Dropzone.d.ts +10 -0
  15. package/dist/cjs/components/Editor.d.ts +25 -0
  16. package/dist/cjs/components/Embed.d.ts +8 -0
  17. package/dist/cjs/components/FileItem.d.ts +41 -0
  18. package/dist/cjs/components/FileList.d.ts +11 -0
  19. package/dist/cjs/components/FileVersions.d.ts +9 -0
  20. package/dist/cjs/components/Files.d.ts +4 -0
  21. package/dist/cjs/components/Image.d.ts +3 -3
  22. package/dist/cjs/components/MeetingCard.d.ts +1 -1
  23. package/dist/cjs/components/Meetings.d.ts +2 -1
  24. package/dist/cjs/components/Poll.d.ts +8 -0
  25. package/dist/cjs/components/PollOption.d.ts +10 -0
  26. package/dist/cjs/components/Post.d.ts +21 -0
  27. package/dist/cjs/components/PostEdit.d.ts +17 -0
  28. package/dist/cjs/components/PostList.d.ts +6 -0
  29. package/dist/cjs/components/PostPlaceholder.d.ts +8 -0
  30. package/dist/cjs/components/PostTrashed.d.ts +14 -0
  31. package/dist/cjs/components/PostView.d.ts +21 -0
  32. package/dist/cjs/components/Posts.d.ts +4 -0
  33. package/dist/cjs/components/Preview.d.ts +1 -3
  34. package/dist/cjs/components/PreviewFiles.d.ts +10 -0
  35. package/dist/cjs/components/Reactions.d.ts +6 -2
  36. package/dist/cjs/components/SearchUsers.d.ts +2 -1
  37. package/dist/cjs/contexts/CloudFilesContext.d.ts +9 -0
  38. package/dist/cjs/hooks/useApps.d.ts +1 -0
  39. package/dist/cjs/hooks/useCloudFiles.d.ts +3 -0
  40. package/dist/cjs/hooks/useCommentList.d.ts +1 -0
  41. package/dist/cjs/hooks/useEmbeds.d.ts +5 -0
  42. package/dist/cjs/hooks/useFileList.d.ts +1 -0
  43. package/dist/cjs/hooks/useFileUploader.d.ts +8 -0
  44. package/dist/cjs/hooks/useFileVersions.d.ts +2 -0
  45. package/dist/cjs/hooks/useInfiniteScroll.d.ts +4 -0
  46. package/dist/cjs/hooks/useIsFirstRender.d.ts +2 -0
  47. package/dist/cjs/hooks/useMutateApps.d.ts +5 -0
  48. package/dist/cjs/hooks/useMutateComment.d.ts +10 -0
  49. package/dist/cjs/hooks/useMutateConversationName.d.ts +1 -1
  50. package/dist/cjs/hooks/useMutateDeleteReaction.d.ts +3 -1
  51. package/dist/cjs/hooks/useMutateEditComment.d.ts +10 -0
  52. package/dist/cjs/hooks/useMutateEditPost.d.ts +10 -0
  53. package/dist/cjs/hooks/useMutateExternalBlobs.d.ts +2 -2
  54. package/dist/cjs/hooks/useMutateFile.d.ts +26 -0
  55. package/dist/cjs/hooks/useMutateFileRename.d.ts +5 -0
  56. package/dist/cjs/hooks/useMutateFileSubscribe.d.ts +7 -0
  57. package/dist/cjs/hooks/useMutateFileTrash.d.ts +10 -0
  58. package/dist/cjs/hooks/useMutateFileVersion.d.ts +7 -0
  59. package/dist/cjs/hooks/useMutateFiles.d.ts +2 -0
  60. package/dist/cjs/hooks/useMutateLeaveConversation.d.ts +4 -0
  61. package/dist/cjs/hooks/useMutateMessage.d.ts +2 -2
  62. package/dist/cjs/hooks/useMutatePost.d.ts +10 -0
  63. package/dist/cjs/hooks/useMutateReaction.d.ts +3 -1
  64. package/dist/cjs/hooks/useMutateRead.d.ts +1 -1
  65. package/dist/cjs/hooks/useMutateReplaceReaction.d.ts +6 -0
  66. package/dist/cjs/hooks/useMutateRestoreComment.d.ts +5 -0
  67. package/dist/cjs/hooks/useMutateRestorePost.d.ts +4 -0
  68. package/dist/cjs/hooks/useMutateStarred.d.ts +4 -0
  69. package/dist/cjs/hooks/useMutateSubscribe.d.ts +4 -0
  70. package/dist/cjs/hooks/useMutateTrashComment.d.ts +5 -0
  71. package/dist/cjs/hooks/useMutateTrashPost.d.ts +4 -0
  72. package/dist/cjs/hooks/useMutateTyping.d.ts +2 -0
  73. package/dist/cjs/hooks/useMutateUnsubscribe.d.ts +4 -0
  74. package/dist/cjs/hooks/useMutateVote.d.ts +5 -0
  75. package/dist/cjs/hooks/usePost.d.ts +1 -0
  76. package/dist/cjs/hooks/usePosts.d.ts +1 -0
  77. package/dist/cjs/hooks/usePostsList.d.ts +1 -0
  78. package/dist/cjs/hooks/useReactionList.d.ts +1 -0
  79. package/dist/cjs/hooks/useSessionState.d.ts +2 -0
  80. package/dist/cjs/hooks/useUnload.d.ts +2 -0
  81. package/dist/cjs/hooks/useUpdateEffect.d.ts +3 -0
  82. package/dist/cjs/hooks/useVotes.d.ts +1 -0
  83. package/dist/cjs/index.d.ts +3 -1
  84. package/dist/cjs/index.js +28 -6
  85. package/dist/cjs/index.js.map +1 -1
  86. package/dist/cjs/types/ConversationListItem.d.ts +1 -0
  87. package/dist/cjs/types/Files.d.ts +7 -0
  88. package/dist/cjs/types/Message.d.ts +2 -2
  89. package/dist/cjs/types/Posts.d.ts +4 -0
  90. package/dist/cjs/types/interfaces.d.ts +9 -0
  91. package/dist/cjs/types/types.d.ts +138 -22
  92. package/dist/cjs/ui/Dropdown.d.ts +18 -2
  93. package/dist/cjs/ui/Icon.d.ts +10 -2
  94. package/dist/cjs/ui/Overlay.d.ts +3 -1
  95. package/dist/cjs/ui/Sheet.d.ts +14 -0
  96. package/dist/cjs/ui/Spinner.d.ts +2 -1
  97. package/dist/cjs/utils/cacheUtils.d.ts +14 -0
  98. package/dist/cjs/utils/fileUtilities.d.ts +10 -1
  99. package/dist/cjs/utils/mentions.d.ts +6 -0
  100. package/dist/cjs/utils/openUrl.d.ts +1 -0
  101. package/dist/css/weavy-chat.css +637 -218
  102. package/dist/css/weavy-files.css +3046 -0
  103. package/dist/css/weavy-messenger.css +643 -213
  104. package/dist/css/weavy-posts.css +2773 -0
  105. package/dist/css/weavy.css +1749 -308
  106. package/dist/esm/client/WeavyClient.d.ts +1 -0
  107. package/dist/esm/components/Attachment.d.ts +5 -5
  108. package/dist/esm/components/Blob.d.ts +9 -0
  109. package/dist/esm/components/Comment.d.ts +18 -0
  110. package/dist/esm/components/CommentCount.d.ts +7 -0
  111. package/dist/esm/components/CommentEdit.d.ts +16 -0
  112. package/dist/esm/components/CommentPlaceholder.d.ts +8 -0
  113. package/dist/esm/components/CommentTrashed.d.ts +15 -0
  114. package/dist/esm/components/CommentView.d.ts +18 -0
  115. package/dist/esm/components/Comments.d.ts +8 -0
  116. package/dist/esm/components/ConversationListItem.d.ts +1 -1
  117. package/dist/esm/components/Dropzone.d.ts +10 -0
  118. package/dist/esm/components/Editor.d.ts +25 -0
  119. package/dist/esm/components/Embed.d.ts +8 -0
  120. package/dist/esm/components/FileItem.d.ts +41 -0
  121. package/dist/esm/components/FileList.d.ts +11 -0
  122. package/dist/esm/components/FileVersions.d.ts +9 -0
  123. package/dist/esm/components/Files.d.ts +4 -0
  124. package/dist/esm/components/Image.d.ts +3 -3
  125. package/dist/esm/components/MeetingCard.d.ts +1 -1
  126. package/dist/esm/components/Meetings.d.ts +2 -1
  127. package/dist/esm/components/Poll.d.ts +8 -0
  128. package/dist/esm/components/PollOption.d.ts +10 -0
  129. package/dist/esm/components/Post.d.ts +21 -0
  130. package/dist/esm/components/PostEdit.d.ts +17 -0
  131. package/dist/esm/components/PostList.d.ts +6 -0
  132. package/dist/esm/components/PostPlaceholder.d.ts +8 -0
  133. package/dist/esm/components/PostTrashed.d.ts +14 -0
  134. package/dist/esm/components/PostView.d.ts +21 -0
  135. package/dist/esm/components/Posts.d.ts +4 -0
  136. package/dist/esm/components/Preview.d.ts +1 -3
  137. package/dist/esm/components/PreviewFiles.d.ts +10 -0
  138. package/dist/esm/components/Reactions.d.ts +6 -2
  139. package/dist/esm/components/SearchUsers.d.ts +2 -1
  140. package/dist/esm/contexts/CloudFilesContext.d.ts +9 -0
  141. package/dist/esm/hooks/useApps.d.ts +1 -0
  142. package/dist/esm/hooks/useCloudFiles.d.ts +3 -0
  143. package/dist/esm/hooks/useCommentList.d.ts +1 -0
  144. package/dist/esm/hooks/useEmbeds.d.ts +5 -0
  145. package/dist/esm/hooks/useFileList.d.ts +1 -0
  146. package/dist/esm/hooks/useFileUploader.d.ts +8 -0
  147. package/dist/esm/hooks/useFileVersions.d.ts +2 -0
  148. package/dist/esm/hooks/useInfiniteScroll.d.ts +4 -0
  149. package/dist/esm/hooks/useIsFirstRender.d.ts +2 -0
  150. package/dist/esm/hooks/useMutateApps.d.ts +5 -0
  151. package/dist/esm/hooks/useMutateComment.d.ts +10 -0
  152. package/dist/esm/hooks/useMutateConversationName.d.ts +1 -1
  153. package/dist/esm/hooks/useMutateDeleteReaction.d.ts +3 -1
  154. package/dist/esm/hooks/useMutateEditComment.d.ts +10 -0
  155. package/dist/esm/hooks/useMutateEditPost.d.ts +10 -0
  156. package/dist/esm/hooks/useMutateExternalBlobs.d.ts +2 -2
  157. package/dist/esm/hooks/useMutateFile.d.ts +26 -0
  158. package/dist/esm/hooks/useMutateFileRename.d.ts +5 -0
  159. package/dist/esm/hooks/useMutateFileSubscribe.d.ts +7 -0
  160. package/dist/esm/hooks/useMutateFileTrash.d.ts +10 -0
  161. package/dist/esm/hooks/useMutateFileVersion.d.ts +7 -0
  162. package/dist/esm/hooks/useMutateFiles.d.ts +2 -0
  163. package/dist/esm/hooks/useMutateLeaveConversation.d.ts +4 -0
  164. package/dist/esm/hooks/useMutateMessage.d.ts +2 -2
  165. package/dist/esm/hooks/useMutatePost.d.ts +10 -0
  166. package/dist/esm/hooks/useMutateReaction.d.ts +3 -1
  167. package/dist/esm/hooks/useMutateRead.d.ts +1 -1
  168. package/dist/esm/hooks/useMutateReplaceReaction.d.ts +6 -0
  169. package/dist/esm/hooks/useMutateRestoreComment.d.ts +5 -0
  170. package/dist/esm/hooks/useMutateRestorePost.d.ts +4 -0
  171. package/dist/esm/hooks/useMutateStarred.d.ts +4 -0
  172. package/dist/esm/hooks/useMutateSubscribe.d.ts +4 -0
  173. package/dist/esm/hooks/useMutateTrashComment.d.ts +5 -0
  174. package/dist/esm/hooks/useMutateTrashPost.d.ts +4 -0
  175. package/dist/esm/hooks/useMutateTyping.d.ts +2 -0
  176. package/dist/esm/hooks/useMutateUnsubscribe.d.ts +4 -0
  177. package/dist/esm/hooks/useMutateVote.d.ts +5 -0
  178. package/dist/esm/hooks/usePost.d.ts +1 -0
  179. package/dist/esm/hooks/usePosts.d.ts +1 -0
  180. package/dist/esm/hooks/usePostsList.d.ts +1 -0
  181. package/dist/esm/hooks/useReactionList.d.ts +1 -0
  182. package/dist/esm/hooks/useSessionState.d.ts +2 -0
  183. package/dist/esm/hooks/useUnload.d.ts +2 -0
  184. package/dist/esm/hooks/useUpdateEffect.d.ts +3 -0
  185. package/dist/esm/hooks/useVotes.d.ts +1 -0
  186. package/dist/esm/index.d.ts +3 -1
  187. package/dist/esm/index.js +28 -6
  188. package/dist/esm/index.js.map +1 -1
  189. package/dist/esm/types/ConversationListItem.d.ts +1 -0
  190. package/dist/esm/types/Files.d.ts +7 -0
  191. package/dist/esm/types/Message.d.ts +2 -2
  192. package/dist/esm/types/Posts.d.ts +4 -0
  193. package/dist/esm/types/interfaces.d.ts +9 -0
  194. package/dist/esm/types/types.d.ts +138 -22
  195. package/dist/esm/ui/Dropdown.d.ts +18 -2
  196. package/dist/esm/ui/Icon.d.ts +10 -2
  197. package/dist/esm/ui/Overlay.d.ts +3 -1
  198. package/dist/esm/ui/Sheet.d.ts +14 -0
  199. package/dist/esm/ui/Spinner.d.ts +2 -1
  200. package/dist/esm/utils/cacheUtils.d.ts +14 -0
  201. package/dist/esm/utils/fileUtilities.d.ts +10 -1
  202. package/dist/esm/utils/mentions.d.ts +6 -0
  203. package/dist/esm/utils/openUrl.d.ts +1 -0
  204. package/dist/index.d.ts +50 -6
  205. package/package.json +8 -2
  206. package/src/client/WeavyClient.ts +35 -1
  207. package/src/components/Attachment.tsx +20 -13
  208. package/src/components/Blob.tsx +28 -0
  209. package/src/components/Comment.tsx +43 -0
  210. package/src/components/CommentCount.tsx +15 -0
  211. package/src/components/CommentEdit.tsx +48 -0
  212. package/src/components/CommentPlaceholder.tsx +34 -0
  213. package/src/components/CommentTrashed.tsx +45 -0
  214. package/src/components/CommentView.tsx +142 -0
  215. package/src/components/Comments.tsx +78 -0
  216. package/src/components/Conversation.tsx +85 -31
  217. package/src/components/ConversationList.tsx +12 -41
  218. package/src/components/ConversationListItem.tsx +125 -74
  219. package/src/components/Dropzone.tsx +26 -0
  220. package/src/components/Editor.tsx +700 -0
  221. package/src/components/Embed.tsx +80 -0
  222. package/src/components/FileItem.tsx +391 -0
  223. package/src/components/FileList.tsx +166 -0
  224. package/src/components/FileVersions.tsx +100 -0
  225. package/src/components/Files.tsx +294 -0
  226. package/src/components/Image.tsx +11 -10
  227. package/src/components/Meeting.tsx +1 -2
  228. package/src/components/MeetingCard.tsx +1 -1
  229. package/src/components/Meetings.tsx +13 -5
  230. package/src/components/Message.tsx +14 -19
  231. package/src/components/Messages.tsx +38 -64
  232. package/src/components/NewConversation.tsx +8 -6
  233. package/src/components/PdfViewer.tsx +2 -2
  234. package/src/components/Poll.tsx +45 -0
  235. package/src/components/PollOption.tsx +65 -0
  236. package/src/components/Post.tsx +45 -0
  237. package/src/components/PostEdit.tsx +49 -0
  238. package/src/components/PostList.tsx +95 -0
  239. package/src/components/PostPlaceholder.tsx +32 -0
  240. package/src/components/PostTrashed.tsx +35 -0
  241. package/src/components/PostView.tsx +194 -0
  242. package/src/components/Posts.tsx +59 -0
  243. package/src/components/Preview.tsx +16 -23
  244. package/src/components/PreviewFiles.tsx +336 -0
  245. package/src/components/Reactions.tsx +142 -38
  246. package/src/components/SearchUsers.tsx +77 -37
  247. package/src/components/Typing.tsx +1 -1
  248. package/src/{components/FileBrowser.tsx → contexts/CloudFilesContext.tsx} +46 -30
  249. package/src/contexts/PreviewContext.tsx +102 -85
  250. package/src/contexts/WeavyContext.tsx +10 -6
  251. package/src/hooks/useApps.ts +23 -0
  252. package/src/hooks/useCloudFiles.ts +12 -0
  253. package/src/hooks/useCommentList.ts +30 -0
  254. package/src/hooks/useEmbeds.ts +126 -0
  255. package/src/hooks/useEvents.ts +3 -1
  256. package/src/hooks/useFileList.ts +84 -0
  257. package/src/hooks/useFileUploader.ts +38 -1
  258. package/src/hooks/useFileVersions.ts +20 -0
  259. package/src/hooks/useInfiniteScroll.ts +45 -0
  260. package/src/hooks/useIsFirstRender.ts +15 -0
  261. package/src/hooks/useMembers.ts +3 -3
  262. package/src/hooks/useMutateApps.ts +48 -0
  263. package/src/hooks/useMutateComment.ts +60 -0
  264. package/src/hooks/useMutateConversationName.ts +1 -1
  265. package/src/hooks/useMutateDeleteReaction.ts +17 -4
  266. package/src/hooks/useMutateEditComment.ts +63 -0
  267. package/src/hooks/useMutateEditPost.ts +64 -0
  268. package/src/hooks/useMutateExternalBlobs.ts +5 -9
  269. package/src/hooks/useMutateFile.ts +311 -0
  270. package/src/hooks/useMutateFileRename.ts +51 -0
  271. package/src/hooks/useMutateFileSubscribe.ts +80 -0
  272. package/src/hooks/useMutateFileTrash.ts +115 -0
  273. package/src/hooks/useMutateFileVersion.ts +85 -0
  274. package/src/hooks/useMutateFiles.ts +23 -0
  275. package/src/hooks/useMutateLeaveConversation.ts +38 -0
  276. package/src/hooks/useMutateMessage.ts +23 -62
  277. package/src/hooks/useMutatePost.ts +60 -0
  278. package/src/hooks/useMutateReaction.ts +21 -6
  279. package/src/hooks/useMutateRead.ts +8 -2
  280. package/src/hooks/useMutateRemoveMembers.ts +2 -9
  281. package/src/hooks/useMutateReplaceReaction.ts +59 -0
  282. package/src/hooks/useMutateRestoreComment.ts +37 -0
  283. package/src/hooks/useMutateRestorePost.ts +36 -0
  284. package/src/hooks/useMutateStarred.ts +35 -0
  285. package/src/hooks/useMutateSubscribe.ts +36 -0
  286. package/src/hooks/useMutateTrashComment.ts +37 -0
  287. package/src/hooks/useMutateTrashPost.ts +36 -0
  288. package/src/hooks/useMutateTyping.ts +5 -3
  289. package/src/hooks/useMutateUnsubscribe.ts +36 -0
  290. package/src/hooks/useMutateVote.ts +59 -0
  291. package/src/hooks/usePost.ts +20 -0
  292. package/src/hooks/usePosts.ts +21 -0
  293. package/src/hooks/usePostsList.ts +31 -0
  294. package/src/hooks/useReactionList.ts +21 -0
  295. package/src/hooks/useSearchUsers.ts +2 -2
  296. package/src/hooks/useSessionState.ts +23 -0
  297. package/src/hooks/useUnload.ts +19 -0
  298. package/src/hooks/useUpdateEffect.ts +16 -0
  299. package/src/hooks/useVotes.ts +21 -0
  300. package/src/index.ts +5 -1
  301. package/src/scss/theme/_appbar.scss +8 -4
  302. package/src/scss/theme/_card.scss +2 -0
  303. package/src/scss/theme/_comment-editor-cm.scss +5 -1
  304. package/src/scss/theme/_comments.scss +9 -8
  305. package/src/scss/theme/_conversations.scss +4 -0
  306. package/src/scss/theme/_files.scss +2 -81
  307. package/src/scss/theme/_icons.scss +21 -3
  308. package/src/scss/theme/_input.scss +13 -7
  309. package/src/scss/theme/_item.scss +23 -1
  310. package/src/scss/theme/_message-editor-cm.scss +5 -1
  311. package/src/scss/theme/_pager.scss +1 -1
  312. package/src/scss/theme/_post-editor-cm.scss +2 -2
  313. package/src/scss/theme/_post.scss +3 -10
  314. package/src/scss/theme/_preview-pdf-viewer.scss +996 -0
  315. package/src/scss/theme/_preview-pdf.scss +57 -783
  316. package/src/scss/theme/_sheet.scss +4 -1
  317. package/src/scss/theme/_spinner.scss +10 -1
  318. package/src/scss/theme/_tables.scss +2 -0
  319. package/src/scss/theme/base/_scroll.scss +3 -0
  320. package/src/scss/weavy-chat.scss +3 -1
  321. package/src/scss/weavy-files.scss +31 -0
  322. package/src/scss/weavy-messenger.scss +3 -1
  323. package/src/scss/weavy-posts.scss +35 -0
  324. package/src/scss/weavy.scss +2 -0
  325. package/src/types/ConversationListItem.ts +1 -0
  326. package/src/types/Files.ts +7 -0
  327. package/src/types/Message.ts +2 -2
  328. package/src/types/Posts.ts +4 -0
  329. package/src/types/interfaces.ts +13 -0
  330. package/src/types/types.ts +157 -28
  331. package/src/ui/Button.tsx +6 -5
  332. package/src/ui/Dropdown.tsx +67 -16
  333. package/src/ui/Icon.tsx +112 -15
  334. package/src/ui/Overlay.tsx +6 -2
  335. package/src/ui/Sheet.tsx +87 -0
  336. package/src/ui/Spinner.tsx +7 -4
  337. package/src/utils/cacheUtils.ts +246 -0
  338. package/src/utils/fileUtilities.ts +208 -24
  339. package/src/utils/infinite-scroll.js +103 -0
  340. package/src/utils/mentions.ts +50 -0
  341. package/src/utils/openUrl.ts +41 -0
  342. package/src/utils/{scrollToBottom.js → scroll-position.js} +50 -9
  343. package/src/utils/{scrollbarDetection.js → scrollbar-detection.js} +0 -0
  344. package/src/utils/utils.js +15 -1
  345. package/tsconfig.json +1 -1
  346. package/dist/cjs/components/ConversationForm.d.ts +0 -7
  347. package/dist/cjs/components/File.d.ts +0 -9
  348. package/dist/cjs/components/FileBrowser.d.ts +0 -6
  349. package/dist/cjs/hooks/usePreview.d.ts +0 -4
  350. package/dist/cjs/hooks/useReactions.d.ts +0 -3
  351. package/dist/esm/components/ConversationForm.d.ts +0 -7
  352. package/dist/esm/components/File.d.ts +0 -9
  353. package/dist/esm/components/FileBrowser.d.ts +0 -6
  354. package/dist/esm/hooks/usePreview.d.ts +0 -4
  355. package/dist/esm/hooks/useReactions.d.ts +0 -3
  356. package/src/components/ConversationForm.tsx +0 -210
  357. package/src/components/File.tsx +0 -21
  358. package/src/hooks/usePreview.ts +0 -21
  359. package/src/hooks/useReactions.ts +0 -51
  360. package/src/utils/infiniteScroll.js +0 -184
@@ -6,49 +6,22 @@ import NewConversation from './NewConversation';
6
6
  import Avatar from './Avatar';
7
7
  import { UserContext } from '../contexts/UserContext';
8
8
  import Button from '../ui/Button';
9
- import { createScroller } from "../utils/infiniteScroll";
9
+ import Spinner from '../ui/Spinner';
10
+ import useInfinteScroll from '../hooks/useInfiniteScroll';
10
11
 
11
12
  const ConversationList = () => {
12
13
  const { client } = useContext(WeavyContext);
13
14
  const { user } = useContext(UserContext);
14
- const { data, isLoading, refetch, fetchNextPage, hasNextPage, isFetchingNextPage } = useConversations({});
15
- const loadMoreRef = useRef<any>();
16
- const [resolveScrollerFetch, setResolveScrollerFetch] = useState<Function | null>()
17
- let scroller: IntersectionObserver | null;
18
15
 
19
16
  if (!client) {
20
17
  throw new Error('Weavy ConversationList component must be used within an WeavyProvider');
21
18
  }
22
19
 
20
+ const infinteConversations = useConversations({});
21
+ const { data, isLoading, refetch, fetchNextPage, hasNextPage, isFetchingNextPage } = infinteConversations;
23
22
 
24
- useLayoutEffect(() => {
25
- if(!isLoading){
26
- scroller?.disconnect();
23
+ const loadMoreRef = useInfinteScroll(infinteConversations);
27
24
 
28
- scroller = createScroller(loadMoreRef.current, () => {
29
- if (hasNextPage) {
30
- return fetchNextPage().then(() => {
31
- // Wait for useLayoutEffect before resolving
32
- return new Promise((resolve: Function) => setResolveScrollerFetch(resolve))
33
- })
34
- }
35
- })
36
- }
37
-
38
- return () => {
39
- scroller?.disconnect();
40
- scroller = null;
41
- }
42
-
43
- }, [isLoading]);
44
-
45
- useLayoutEffect(() => {
46
- // Resolve fetchNextPage after layout has been painted
47
- if (!isFetchingNextPage && resolveScrollerFetch) {
48
- resolveScrollerFetch()
49
- setResolveScrollerFetch(null);
50
- }
51
- }, [data]);
52
25
 
53
26
  useEffect(() => {
54
27
 
@@ -66,12 +39,6 @@ const ConversationList = () => {
66
39
  }
67
40
 
68
41
 
69
- if (isLoading) {
70
- return (
71
- <div>Loading Conversation list...</div>
72
- )
73
- }
74
-
75
42
  let loadMoreButton = <Button.UI onClick={() => fetchNextPage()} disabled={!hasNextPage || isFetchingNextPage} className="wy-message-readmore">Load more</Button.UI>;
76
43
 
77
44
  return (
@@ -84,22 +51,26 @@ const ConversationList = () => {
84
51
  </nav>
85
52
  </header>
86
53
  <div className="wy-conversations">
54
+ {isLoading &&
55
+ <Spinner.UI overlay={true} />
56
+ }
57
+
87
58
  {data && data.pages && data.pages.map((group, i) => {
88
59
  return group.data?.map((item) => {
89
- return < ConversationListItem key={item.id} refetchConversations={refetch} item={item} />
60
+ return <ConversationListItem key={item.id} refetchConversations={refetch} item={item} userId={user.id} />
90
61
  })
91
62
 
92
63
  }
93
64
 
94
65
  )}
95
- <div className="wy-message-readmore" ref={loadMoreRef}>
66
+ <div className="wy-pager" ref={loadMoreRef}>
96
67
  {isFetchingNextPage
97
68
  ? 'Loading more...'
98
69
  : hasNextPage
99
70
  ? loadMoreButton
100
71
  : ""}
101
72
 
102
- </div>
73
+ </div>
103
74
  </div>
104
75
  </>
105
76
  )
@@ -13,36 +13,39 @@ import useMutateRemoveMembers from '../hooks/useMutateRemoveMembers';
13
13
  import Avatar from './Avatar';
14
14
  import { UserContext } from '../contexts/UserContext';
15
15
  import classNames from 'classnames';
16
+ import useMutateStarred from '../hooks/useMutateStarred';
17
+ import useMutateLeaveConversation from '../hooks/useMutateLeaveConversation';
16
18
 
17
- const ConversationListItem = ({ item, refetchConversations }: ConversationListItemProps) => {
19
+ const ConversationListItem = ({ item, userId, refetchConversations }: ConversationListItemProps) => {
18
20
 
19
21
  const { client } = useContext(WeavyContext);
20
22
  const { setSelectedConversationId, selectedConversationId } = useContext(MessengerContext);
21
23
  const { user } = useContext(UserContext);
22
24
  const readMutation = useMutateRead();
23
25
  const pinMutation = useMutatePinned();
24
- const removeMembers = useMutateRemoveMembers();
26
+ const starMutation = useMutateStarred();
27
+ const leaveConversation = useMutateLeaveConversation();
25
28
  const date = dayjs.utc(item.last_message?.created_at).tz(dayjs.tz.guess());
26
29
 
27
-
28
- // extract and keep all emojis
29
- const emojiHtml = item.last_message?.html || '';
30
- const emojiRegexp = /<img[^>]+wy-emoji.+>/g;
31
- const emojiShortcodeRegexp = /title=\"(:[^:\s]+:)\"/;
32
- const messageEmojis: { [index: string]: string } = {};
33
-
34
- emojiHtml.match(emojiRegexp)?.forEach((imgEmoji) => {
35
- let shortCode = imgEmoji.match(emojiShortcodeRegexp)![1];
36
-
37
- if (shortCode) {
38
- messageEmojis[shortCode] = imgEmoji;
39
- }
40
- });
41
30
 
42
- // replace text shortcodes with extracted emojis
43
- const shortCodeRegexp = /:[^:\s]*(?:::[^:\s]*)*:/gi;
44
- const itemSnippet = (item.last_message?.text || '').replace(shortCodeRegexp, (shortCode) => messageEmojis[shortCode]);
31
+ // extract and keep all emojis
32
+ // const emojiHtml = item.last_message?.html || '';
33
+ // const emojiRegexp = /<img[^>]+wy-emoji.+\/>/g;
34
+ // const emojiShortcodeRegexp = /title=\"(:[^:\s]+:)\"/;
35
+ // const messageEmojis: { [index: string]: string } = {};
36
+
37
+ // emojiHtml.match(emojiRegexp)?.forEach((imgEmoji) => {
38
+ // let shortCode = imgEmoji.match(emojiShortcodeRegexp)![1];
39
+
40
+ // if (shortCode) {
41
+ // messageEmojis[shortCode] = imgEmoji;
42
+ // }
43
+ // });
45
44
 
45
+ // replace text shortcodes with extracted emojis
46
+ //const shortCodeRegexp = /:[^:\s]*(?:::[^:\s]*)*:/gi;
47
+ //const itemSnippet = (item.last_message?.text || '').replace(shortCodeRegexp, (shortCode) => messageEmojis[shortCode]);
48
+
46
49
 
47
50
  const ChatRoom = "edb400ac-839b-45a7-b2a8-6a01820d1c44";
48
51
 
@@ -53,19 +56,19 @@ const ConversationListItem = ({ item, refetchConversations }: ConversationListIt
53
56
  }
54
57
  }
55
58
 
56
- const handleAppUpdated = useCallback((realtimeEvent: RealtimeApp) => {
59
+ const handleAppUpdated = useCallback((realtimeEvent: RealtimeApp) => {
57
60
  if (realtimeEvent.app.id !== item.id) return;
58
61
  refetchConversations();
59
62
 
60
63
  }, [item.id]);
61
64
 
62
- const handleMessageCreated = useCallback((realtimeEvent: RealtimeMessage) => {
65
+ const handleMessageCreated = useCallback((realtimeEvent: RealtimeMessage) => {
63
66
  if (realtimeEvent.message.app_id !== item.id) return;
64
67
  refetchConversations();
65
68
 
66
69
  }, [item.id]);
67
70
 
68
- const handleMemberAdded = useCallback((realtimeEvent: RealtimeMember) => {
71
+ const handleMemberAdded = useCallback((realtimeEvent: RealtimeMember) => {
69
72
  if (realtimeEvent.app.id !== item.id) return;
70
73
  refetchConversations();
71
74
 
@@ -81,9 +84,7 @@ const ConversationListItem = ({ item, refetchConversations }: ConversationListIt
81
84
  client?.unsubscribe(`a${item.id}`, "message_created", handleMessageCreated);
82
85
  client?.unsubscribe(`a${item.id}`, "member_added", handleMemberAdded);
83
86
  }
84
- }, [item.id])
85
-
86
- const otherId = item.type !== ChatRoom ? item.member_ids.find((i) => { return i != user.id }) : null;
87
+ }, [item.id]);
87
88
 
88
89
  const handleUnread = (e: React.MouseEvent<HTMLAnchorElement>) => {
89
90
  e.preventDefault();
@@ -106,17 +107,22 @@ const ConversationListItem = ({ item, refetchConversations }: ConversationListIt
106
107
  }
107
108
 
108
109
  const handleLeaveConversation = () => {
109
- removeMembers.mutate({ id: item.id, members: [user.id] });
110
+ leaveConversation.mutate({ id: item.id, members: [user.id] });
110
111
  }
111
112
 
112
- // const handleStar = (e: React.MouseEvent<HTMLAnchorElement>) => {
113
- // e.preventDefault();
114
- // console.log("Star: ", item.id)
115
- // }
113
+ const handleStar = (e: React.MouseEvent<HTMLAnchorElement>) => {
114
+ e.preventDefault();
115
+ starMutation.mutate({ id: item.id, star: true });
116
+ }
117
+
118
+ const handleUnstar = (e: React.MouseEvent<HTMLAnchorElement>) => {
119
+ e.preventDefault();
120
+ starMutation.mutate({ id: item.id, star: false });
121
+ }
116
122
 
117
123
  return (
118
- <div className={classNames('wy-item wy-item-lg wy-item-hover wy-conversation', {"wy-unread": item.is_unread, "wy-active": selectedConversationId === item.id})} key={item.id} onClick={(e) => handleClick(e, item.id)}>
119
- <Avatar src={item.avatar_url} id={otherId || -1} presence={item.type !== ChatRoom ? "away" : ""} name={item.display_name} />
124
+ <div className={classNames('wy-item wy-item-lg wy-item-hover wy-conversation', { "wy-unread": item.is_unread, "wy-active": selectedConversationId === item.id })} key={item.id} onClick={(e) => handleClick(e, item.id)}>
125
+ <Avatar src={item.avatar_url} id={item.user_id || -1} presence={item.type !== ChatRoom ? "away" : ""} name={item.display_name} />
120
126
 
121
127
  <div className="wy-item-body">
122
128
  <div className="wy-item-row">
@@ -129,59 +135,104 @@ const ConversationListItem = ({ item, refetchConversations }: ConversationListIt
129
135
  <div className="wy-item-text">
130
136
  <Typing id={item.id} context="listitem">
131
137
 
132
- {itemSnippet &&
138
+ {/* {itemSnippet &&
133
139
  <span className="wy-typing-hide" dangerouslySetInnerHTML={{ __html: itemSnippet }}></span>
134
- }
135
- {!itemSnippet &&
136
- <span className="wy-typing-hide">
137
- {item.last_message?.attachment_ids?.length > 0 &&
138
- <Icon.UI name="attachment" size={1} />
139
- }
140
- {item.last_message?.meeting_id &&
141
- <Icon.UI name="zoom" size={1} />
142
- }
143
- </span>
144
- }
140
+ } */}
141
+ {/* {!itemSnippet && */}
142
+ <span className="wy-typing-hide">
143
+
144
+ {item.last_message &&
145
+ <>
146
+ {userId === item.last_message?.created_by.id &&
147
+ <>You: </>
148
+ }
149
+ {(item.member_count || 0) > 2 && userId !== item.last_message?.created_by.id &&
150
+ <>{item.last_message?.created_by.display_name}: </>
151
+ }
152
+ </>
153
+ }
154
+
155
+ {item.last_message?.text &&
156
+ <>{item.last_message?.plain}</>
157
+ }
158
+ {!item.last_message?.text && (item.last_message?.attachment_count || 0) > 0 &&
159
+ <Icon.UI name="attachment" size={1} />
160
+ }
161
+ {!item.last_message?.text && item.last_message?.meeting_id &&
162
+ <Icon.UI name="zoom" size={1} />
163
+ }
164
+ {!item.last_message &&
165
+ <>&nbsp;</>
166
+ }
167
+ </span>
168
+ {/* } */}
145
169
 
146
170
  </Typing>
147
171
  </div>
148
-
172
+
149
173
 
150
174
  </div>
151
175
  </div>
152
176
  <div className="wy-item-actions wy-item-actions-bottom">
177
+ {item.is_starred &&
178
+ <Button.UI onClick={handleUnstar}>
179
+ <Icon.UI name="star" size={1} className='wy-icon-yellow'/>
180
+ </Button.UI>
181
+
182
+ }
183
+
184
+ <Dropdown.UI directionX='left' icon={item.is_pinned ? "pin": undefined}>
185
+ <>
186
+ {item.is_unread &&
187
+ <Dropdown.Item onClick={handleRead}>
188
+ <Icon.UI name="unread"></Icon.UI>
189
+ Mark as read
190
+ </Dropdown.Item>
191
+ }
192
+ {!item.is_unread &&
193
+ <Dropdown.Item onClick={handleUnread}>
194
+ <Icon.UI name="read"></Icon.UI>
195
+ Mark as unread
196
+ </Dropdown.Item>
197
+ }
198
+ </>
199
+ <>
153
200
  {item.is_pinned &&
154
- <Button.UI onClick={handleUnpin}>
155
- <Icon.UI name="pin" size={1/1.5} />
156
- </Button.UI>
157
-
201
+ <Dropdown.Item onClick={handleUnpin}>
202
+ <Icon.UI name="unpin"></Icon.UI>
203
+ Unpin
204
+ </Dropdown.Item>
158
205
  }
206
+ {!item.is_pinned &&
207
+ <Dropdown.Item onClick={handlePin}>
208
+ <Icon.UI name="pin"></Icon.UI>
209
+ Pin
210
+ </Dropdown.Item>
211
+ }
212
+ </>
213
+ <>
214
+ {item.is_starred &&
215
+ <Dropdown.Item onClick={handleUnstar}>
216
+ <Icon.UI name="unstar"></Icon.UI>
217
+ Unstar
218
+ </Dropdown.Item>
219
+ }
220
+ {!item.is_starred &&
221
+ <Dropdown.Item onClick={handleStar}>
222
+ <Icon.UI name="star"></Icon.UI>
223
+ Star
224
+ </Dropdown.Item>
225
+ }
226
+ </>
227
+ {item.type === ChatRoom &&
228
+ <Dropdown.Item onClick={handleLeaveConversation}>
229
+ <Icon.UI name="account-minus"></Icon.UI>
230
+ Leave conversation
231
+ </Dropdown.Item>
232
+ }
233
+ </Dropdown.UI>
159
234
 
160
- <Dropdown.UI directionX='left'>
161
- <>
162
- {item.is_unread &&
163
- <Dropdown.Item onClick={handleRead}>Mark as read</Dropdown.Item>
164
- }
165
- {!item.is_unread &&
166
- <Dropdown.Item onClick={handleUnread}>Mark as unread</Dropdown.Item>
167
- }
168
- </>
169
- <>
170
- {item.is_pinned &&
171
- <Dropdown.Item onClick={handleUnpin}>Unpin</Dropdown.Item>
172
- }
173
- {!item.is_pinned &&
174
- <Dropdown.Item onClick={handlePin}>Pin</Dropdown.Item>
175
- }
176
- </>
177
- {item.type === ChatRoom &&
178
- <Dropdown.Item onClick={handleLeaveConversation}>Leave conversation</Dropdown.Item>
179
- }
180
-
181
- {/* <li><Button.UI onClick={handleStar}>Star</Button.UI></li> */}
182
- </Dropdown.UI>
183
-
184
- </div>
235
+ </div>
185
236
  </div>
186
237
  )
187
238
  }
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { useDropzone, FileRejection, DropEvent, Accept } from "react-dropzone";
3
+
4
+ type Props = {
5
+ onDrop: <T extends File>(acceptedFiles: T[], fileRejections: FileRejection[], event: DropEvent) => void,
6
+ accept?: Accept,
7
+ dragClass: string,
8
+ children?: React.ReactNode
9
+ }
10
+
11
+ const Dropzone = ({ onDrop, accept, dragClass, children }: Props) => {
12
+ const { getRootProps, isDragActive } = useDropzone({
13
+ onDrop,
14
+ accept,
15
+ noClick: true,
16
+ noKeyboard: true
17
+ });
18
+
19
+ return (
20
+ <div className={isDragActive ? dragClass: ""} {...getRootProps()} >
21
+ {children}
22
+ </div>
23
+ )
24
+ }
25
+
26
+ export default Dropzone;