@weavy/uikit-react 12.1.0 → 14.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 (280) hide show
  1. package/changelog.md +60 -0
  2. package/dist/cjs/index.js +28 -6
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/types/client/WeavyClient.d.ts +8 -1
  5. package/dist/cjs/types/components/Attachment.d.ts +2 -1
  6. package/dist/cjs/types/components/Chat.d.ts +1 -1
  7. package/dist/cjs/types/components/Messages.d.ts +3 -1
  8. package/dist/cjs/types/components/PdfViewer.d.ts +3 -1
  9. package/dist/cjs/types/components/Preview.d.ts +8 -10
  10. package/dist/cjs/types/contexts/PreviewContext.d.ts +2 -1
  11. package/dist/cjs/types/contexts/WeavyContext.d.ts +2 -3
  12. package/dist/cjs/types/hooks/useConversations.d.ts +1 -1
  13. package/dist/cjs/types/hooks/useMutateMessage.d.ts +1 -1
  14. package/dist/cjs/types/hooks/useMutateRead.d.ts +1 -0
  15. package/dist/cjs/types/types/Chat.d.ts +2 -1
  16. package/dist/cjs/types/types/Message.d.ts +2 -0
  17. package/dist/cjs/types/types/types.d.ts +63 -9
  18. package/dist/cjs/types/ui/Spinner.d.ts +10 -0
  19. package/dist/cjs/types/utils/fileUtilities.d.ts +1 -4
  20. package/dist/css/weavy-chat.css +1803 -1041
  21. package/dist/css/weavy-messenger.css +2141 -1360
  22. package/dist/css/weavy.css +1943 -1162
  23. package/dist/esm/index.js +28 -6
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/types/client/WeavyClient.d.ts +8 -1
  26. package/dist/esm/types/components/Attachment.d.ts +2 -1
  27. package/dist/esm/types/components/Chat.d.ts +1 -1
  28. package/dist/esm/types/components/Messages.d.ts +3 -1
  29. package/dist/esm/types/components/PdfViewer.d.ts +3 -1
  30. package/dist/esm/types/components/Preview.d.ts +8 -10
  31. package/dist/esm/types/contexts/PreviewContext.d.ts +2 -1
  32. package/dist/esm/types/contexts/WeavyContext.d.ts +2 -3
  33. package/dist/esm/types/hooks/useConversations.d.ts +1 -1
  34. package/dist/esm/types/hooks/useMutateMessage.d.ts +1 -1
  35. package/dist/esm/types/hooks/useMutateRead.d.ts +1 -0
  36. package/dist/esm/types/types/Chat.d.ts +2 -1
  37. package/dist/esm/types/types/Message.d.ts +2 -0
  38. package/dist/esm/types/types/types.d.ts +63 -9
  39. package/dist/esm/types/ui/Spinner.d.ts +10 -0
  40. package/dist/esm/types/utils/fileUtilities.d.ts +1 -4
  41. package/dist/index.d.ts +15 -7
  42. package/package.json +2 -2
  43. package/rollup.config.js +3 -1
  44. package/src/client/WeavyClient.ts +105 -29
  45. package/src/components/Attachment.tsx +8 -7
  46. package/src/components/Chat.tsx +8 -7
  47. package/src/components/Conversation.tsx +29 -23
  48. package/src/components/ConversationBadge.tsx +7 -5
  49. package/src/components/ConversationForm.tsx +1 -1
  50. package/src/components/ConversationList.tsx +59 -11
  51. package/src/components/ConversationListItem.tsx +71 -54
  52. package/src/components/FileBrowser.tsx +53 -50
  53. package/src/components/MeetingCard.tsx +35 -13
  54. package/src/components/Meetings.tsx +1 -1
  55. package/src/components/Message.tsx +41 -41
  56. package/src/components/Messages.tsx +62 -61
  57. package/src/components/Messenger.tsx +7 -2
  58. package/src/components/NewConversation.tsx +1 -1
  59. package/src/components/PdfViewer.tsx +93 -88
  60. package/src/components/Preview.tsx +115 -54
  61. package/src/components/Reactions.tsx +11 -5
  62. package/src/components/SearchUsers.tsx +21 -11
  63. package/src/components/SeenBy.tsx +13 -7
  64. package/src/components/Typing.tsx +11 -12
  65. package/src/contexts/PreviewContext.tsx +90 -16
  66. package/src/contexts/UserContext.tsx +1 -1
  67. package/src/contexts/WeavyContext.tsx +10 -7
  68. package/src/hooks/useBadge.ts +2 -6
  69. package/src/hooks/useChat.ts +3 -14
  70. package/src/hooks/useConversation.ts +1 -7
  71. package/src/hooks/useConversations.ts +15 -11
  72. package/src/hooks/useFileUploader.ts +6 -8
  73. package/src/hooks/useMembers.ts +1 -7
  74. package/src/hooks/useMessages.ts +1 -7
  75. package/src/hooks/useMutateChat.ts +6 -11
  76. package/src/hooks/useMutateConversation.ts +7 -10
  77. package/src/hooks/useMutateConversationName.ts +10 -12
  78. package/src/hooks/useMutateDeleteReaction.ts +3 -8
  79. package/src/hooks/useMutateExternalBlobs.ts +6 -11
  80. package/src/hooks/useMutateMeeting.ts +6 -11
  81. package/src/hooks/useMutateMembers.ts +8 -13
  82. package/src/hooks/useMutateMessage.ts +9 -18
  83. package/src/hooks/useMutatePinned.ts +3 -8
  84. package/src/hooks/useMutateReaction.ts +6 -12
  85. package/src/hooks/useMutateRead.ts +5 -12
  86. package/src/hooks/useMutateRemoveMembers.ts +7 -12
  87. package/src/hooks/useMutateTyping.ts +6 -11
  88. package/src/hooks/usePresence.ts +2 -3
  89. package/src/hooks/useReactions.ts +11 -12
  90. package/src/hooks/useSearchUsers.ts +1 -6
  91. package/src/hooks/useUser.ts +3 -14
  92. package/src/scss/theme/_alert.scss +61 -63
  93. package/src/scss/theme/_appbar.scss +105 -28
  94. package/src/scss/theme/_avatar.scss +23 -28
  95. package/src/scss/theme/_badge.scss +26 -18
  96. package/src/scss/theme/_buttons.scss +107 -52
  97. package/src/scss/theme/_card.scss +102 -4
  98. package/src/scss/theme/_checkbox.scss +16 -20
  99. package/src/scss/theme/_code-vscode-dark.scss +184 -0
  100. package/src/scss/theme/_code-vscode-light.scss +179 -0
  101. package/src/scss/theme/_code.scss +9 -114
  102. package/src/scss/theme/_comment-editor-cm.scss +97 -0
  103. package/src/scss/theme/_comment-editor.scss +129 -0
  104. package/src/scss/theme/_comments.scss +66 -0
  105. package/src/scss/theme/_content.scss +33 -5
  106. package/src/scss/theme/_conversations.scss +19 -78
  107. package/src/scss/theme/_dropdown.scss +102 -15
  108. package/src/scss/theme/_embed.scss +135 -0
  109. package/src/scss/theme/_facepile.scss +11 -0
  110. package/src/scss/theme/_filebrowser.scss +1 -1
  111. package/src/scss/theme/_files.scss +77 -48
  112. package/src/scss/theme/_grid.scss +8 -0
  113. package/src/scss/theme/_icons.scss +155 -19
  114. package/src/scss/theme/_image-grid.scss +7 -10
  115. package/src/scss/theme/_input.scss +160 -0
  116. package/src/scss/theme/_item.scss +169 -0
  117. package/src/scss/theme/_list.scss +57 -0
  118. package/src/scss/theme/_meeting.scss +11 -0
  119. package/src/scss/theme/_message-editor-cm.scss +95 -0
  120. package/src/scss/theme/_message-editor.scss +66 -20
  121. package/src/scss/theme/_messages.scss +51 -105
  122. package/src/scss/theme/_meta.scss +12 -0
  123. package/src/scss/theme/_overlays.scss +31 -76
  124. package/src/scss/theme/_pager.scss +5 -1
  125. package/src/scss/theme/_pane.scss +13 -2
  126. package/src/scss/theme/_panels.scss +34 -25
  127. package/src/scss/theme/_picker-list.scss +5 -3
  128. package/src/scss/theme/_placeholder.scss +19 -0
  129. package/src/scss/theme/_poll.scss +49 -0
  130. package/src/scss/theme/_post-editor-cm.scss +100 -0
  131. package/src/scss/theme/_post-editor.scss +127 -0
  132. package/src/scss/theme/_post.scss +83 -0
  133. package/src/scss/theme/_preview-code.scss +14 -0
  134. package/src/scss/theme/_preview-embed.scss +11 -5
  135. package/src/scss/theme/_preview-image.scss +8 -26
  136. package/src/scss/theme/_preview-media.scss +1 -0
  137. package/src/scss/theme/_preview-pdf.scss +10 -15
  138. package/src/scss/theme/_preview-text.scss +1 -1
  139. package/src/scss/theme/_preview.scss +59 -76
  140. package/src/scss/theme/_reactions.scss +48 -17
  141. package/src/scss/theme/_sheet.scss +59 -0
  142. package/src/scss/theme/_sidebar.scss +86 -0
  143. package/src/scss/theme/_spinner.scss +11 -7
  144. package/src/scss/theme/_tab.scss +72 -0
  145. package/src/scss/theme/_tables.scss +70 -23
  146. package/src/scss/theme/_toasts.scss +56 -26
  147. package/src/scss/theme/_type.scss +41 -0
  148. package/src/scss/theme/{mixins → base}/_backdrop.scss +0 -0
  149. package/src/scss/theme/{bootstrap/mixins → base}/_breakpoints.scss +9 -0
  150. package/src/scss/theme/base/_colors.scss +315 -0
  151. package/src/scss/theme/base/_md.scss +19 -0
  152. package/src/scss/theme/base/_palette.scss +130 -0
  153. package/src/scss/theme/{mixins → base}/_position.scss +5 -5
  154. package/src/scss/theme/base/_reboot.scss +51 -0
  155. package/src/scss/theme/base/_scroll.scss +180 -0
  156. package/src/scss/theme/base/_svg.scss +49 -0
  157. package/src/scss/theme/base/_text.scss +23 -0
  158. package/src/scss/theme/base/_vars.scss +203 -0
  159. package/src/scss/theme/{fonts → base/fonts}/_fontmapping-roboto.scss +0 -0
  160. package/src/scss/theme/{fonts → base/fonts}/_fontmapping-segoe-ui.scss +0 -0
  161. package/src/scss/theme/base/fonts/_index.scss +2 -0
  162. package/src/scss/weavy-chat.scss +11 -4
  163. package/src/scss/weavy-messenger.scss +38 -21
  164. package/src/types/Chat.ts +2 -1
  165. package/src/types/Message.ts +3 -1
  166. package/src/types/types.ts +72 -10
  167. package/src/ui/Icon.tsx +1 -1
  168. package/src/ui/Spinner.tsx +19 -0
  169. package/src/utils/fileUtilities.ts +11 -125
  170. package/src/utils/infiniteScroll.js +11 -2
  171. package/src/utils/postal-parent.js +398 -0
  172. package/src/utils/promise.js +187 -0
  173. package/src/utils/scrollbarDetection.js +68 -9
  174. package/src/utils/utils.js +547 -0
  175. package/src/scss/theme/_attachments.scss +0 -74
  176. package/src/scss/theme/_cm-editor.scss +0 -42
  177. package/src/scss/theme/_colors.scss +0 -520
  178. package/src/scss/theme/_config.scss +0 -6
  179. package/src/scss/theme/_inputs.scss +0 -28
  180. package/src/scss/theme/_nav.scss +0 -52
  181. package/src/scss/theme/_palette.scss +0 -165
  182. package/src/scss/theme/_preview-icon.scss +0 -41
  183. package/src/scss/theme/_reboot.scss +0 -41
  184. package/src/scss/theme/_root.scss +0 -2
  185. package/src/scss/theme/_scroll.scss +0 -55
  186. package/src/scss/theme/_search.scss +0 -68
  187. package/src/scss/theme/_turbo.scss +0 -17
  188. package/src/scss/theme/_variables.scss +0 -139
  189. package/src/scss/theme/bootstrap/_accordion.scss +0 -146
  190. package/src/scss/theme/bootstrap/_alert.scss +0 -71
  191. package/src/scss/theme/bootstrap/_badge.scss +0 -38
  192. package/src/scss/theme/bootstrap/_breadcrumb.scss +0 -40
  193. package/src/scss/theme/bootstrap/_button-group.scss +0 -142
  194. package/src/scss/theme/bootstrap/_buttons.scss +0 -186
  195. package/src/scss/theme/bootstrap/_card.scss +0 -234
  196. package/src/scss/theme/bootstrap/_carousel.scss +0 -229
  197. package/src/scss/theme/bootstrap/_close.scss +0 -40
  198. package/src/scss/theme/bootstrap/_containers.scss +0 -41
  199. package/src/scss/theme/bootstrap/_dropdown.scss +0 -248
  200. package/src/scss/theme/bootstrap/_forms.scss +0 -9
  201. package/src/scss/theme/bootstrap/_functions.scss +0 -302
  202. package/src/scss/theme/bootstrap/_grid.scss +0 -33
  203. package/src/scss/theme/bootstrap/_helpers.scss +0 -10
  204. package/src/scss/theme/bootstrap/_images.scss +0 -42
  205. package/src/scss/theme/bootstrap/_list-group.scss +0 -191
  206. package/src/scss/theme/bootstrap/_maps.scss +0 -54
  207. package/src/scss/theme/bootstrap/_mixins.scss +0 -43
  208. package/src/scss/theme/bootstrap/_modal.scss +0 -237
  209. package/src/scss/theme/bootstrap/_nav.scss +0 -172
  210. package/src/scss/theme/bootstrap/_navbar.scss +0 -276
  211. package/src/scss/theme/bootstrap/_offcanvas.scss +0 -143
  212. package/src/scss/theme/bootstrap/_pagination.scss +0 -109
  213. package/src/scss/theme/bootstrap/_placeholders.scss +0 -51
  214. package/src/scss/theme/bootstrap/_popover.scss +0 -196
  215. package/src/scss/theme/bootstrap/_progress.scss +0 -59
  216. package/src/scss/theme/bootstrap/_reboot.scss +0 -610
  217. package/src/scss/theme/bootstrap/_root.scss +0 -73
  218. package/src/scss/theme/bootstrap/_spinners.scss +0 -85
  219. package/src/scss/theme/bootstrap/_tables.scss +0 -164
  220. package/src/scss/theme/bootstrap/_toasts.scss +0 -70
  221. package/src/scss/theme/bootstrap/_tooltip.scss +0 -120
  222. package/src/scss/theme/bootstrap/_transitions.scss +0 -27
  223. package/src/scss/theme/bootstrap/_type.scss +0 -106
  224. package/src/scss/theme/bootstrap/_utilities.scss +0 -647
  225. package/src/scss/theme/bootstrap/_variables.scss +0 -1633
  226. package/src/scss/theme/bootstrap/forms/_floating-labels.scss +0 -74
  227. package/src/scss/theme/bootstrap/forms/_form-check.scss +0 -175
  228. package/src/scss/theme/bootstrap/forms/_form-control.scss +0 -194
  229. package/src/scss/theme/bootstrap/forms/_form-range.scss +0 -91
  230. package/src/scss/theme/bootstrap/forms/_form-select.scss +0 -71
  231. package/src/scss/theme/bootstrap/forms/_form-text.scss +0 -11
  232. package/src/scss/theme/bootstrap/forms/_input-group.scss +0 -129
  233. package/src/scss/theme/bootstrap/forms/_labels.scss +0 -36
  234. package/src/scss/theme/bootstrap/forms/_validation.scss +0 -12
  235. package/src/scss/theme/bootstrap/helpers/_clearfix.scss +0 -3
  236. package/src/scss/theme/bootstrap/helpers/_color-bg.scss +0 -10
  237. package/src/scss/theme/bootstrap/helpers/_colored-links.scss +0 -12
  238. package/src/scss/theme/bootstrap/helpers/_position.scss +0 -36
  239. package/src/scss/theme/bootstrap/helpers/_ratio.scss +0 -26
  240. package/src/scss/theme/bootstrap/helpers/_stacks.scss +0 -15
  241. package/src/scss/theme/bootstrap/helpers/_stretched-link.scss +0 -15
  242. package/src/scss/theme/bootstrap/helpers/_text-truncation.scss +0 -7
  243. package/src/scss/theme/bootstrap/helpers/_visually-hidden.scss +0 -8
  244. package/src/scss/theme/bootstrap/helpers/_vr.scss +0 -8
  245. package/src/scss/theme/bootstrap/mixins/_alert.scss +0 -15
  246. package/src/scss/theme/bootstrap/mixins/_backdrop.scss +0 -14
  247. package/src/scss/theme/bootstrap/mixins/_banner.scss +0 -9
  248. package/src/scss/theme/bootstrap/mixins/_border-radius.scss +0 -78
  249. package/src/scss/theme/bootstrap/mixins/_box-shadow.scss +0 -18
  250. package/src/scss/theme/bootstrap/mixins/_buttons.scss +0 -70
  251. package/src/scss/theme/bootstrap/mixins/_caret.scss +0 -64
  252. package/src/scss/theme/bootstrap/mixins/_clearfix.scss +0 -9
  253. package/src/scss/theme/bootstrap/mixins/_color-scheme.scss +0 -7
  254. package/src/scss/theme/bootstrap/mixins/_container.scss +0 -11
  255. package/src/scss/theme/bootstrap/mixins/_deprecate.scss +0 -10
  256. package/src/scss/theme/bootstrap/mixins/_forms.scss +0 -152
  257. package/src/scss/theme/bootstrap/mixins/_gradients.scss +0 -47
  258. package/src/scss/theme/bootstrap/mixins/_grid.scss +0 -151
  259. package/src/scss/theme/bootstrap/mixins/_image.scss +0 -16
  260. package/src/scss/theme/bootstrap/mixins/_list-group.scss +0 -24
  261. package/src/scss/theme/bootstrap/mixins/_lists.scss +0 -7
  262. package/src/scss/theme/bootstrap/mixins/_pagination.scss +0 -10
  263. package/src/scss/theme/bootstrap/mixins/_reset-text.scss +0 -17
  264. package/src/scss/theme/bootstrap/mixins/_resize.scss +0 -6
  265. package/src/scss/theme/bootstrap/mixins/_table-variants.scss +0 -24
  266. package/src/scss/theme/bootstrap/mixins/_text-truncate.scss +0 -8
  267. package/src/scss/theme/bootstrap/mixins/_transition.scss +0 -26
  268. package/src/scss/theme/bootstrap/mixins/_utilities.scss +0 -97
  269. package/src/scss/theme/bootstrap/mixins/_visually-hidden.scss +0 -29
  270. package/src/scss/theme/bootstrap/utilities/_api.scss +0 -47
  271. package/src/scss/theme/bootstrap/vendor/_rfs.scss +0 -354
  272. package/src/scss/theme/bs/_badge.scss +0 -20
  273. package/src/scss/theme/bs/_buttons.scss +0 -185
  274. package/src/scss/theme/bs/_dropdown.scss +0 -86
  275. package/src/scss/theme/bs/_forms.scss +0 -161
  276. package/src/scss/theme/bs/_list-group.scss +0 -73
  277. package/src/scss/theme/bs/_tables.scss +0 -46
  278. package/src/scss/theme/fonts/_index.scss +0 -2
  279. package/src/scss/theme/mixins/_palette.scss +0 -165
  280. package/src/scss/theme/mixins/_scrollbar.scss +0 -110
@@ -14,26 +14,21 @@ export default function useMutateExternalBlobs() {
14
14
 
15
15
 
16
16
  type MutateProps = {
17
- blobs: []
17
+ blobs: []
18
18
  }
19
19
 
20
20
  const mutateExternalBlobs = async ({ blobs }: MutateProps) => {
21
21
 
22
- const response = await fetch(client.url + "/api/blobs/external", {
23
- method: "POST",
24
- body: JSON.stringify(blobs),
25
- headers: {
26
- "content-type": "application/json",
27
- "Authorization": "Bearer " + await client.tokenFactory()
28
- }
29
- });
22
+ const response = await client.post("/api/blobs/external",
23
+ "POST",
24
+ JSON.stringify(blobs));
30
25
 
31
26
  return response.json();
32
27
  };
33
28
 
34
29
  return useMutation(mutateExternalBlobs, {
35
30
  onSuccess: (variables: any) => {
36
-
37
- }
31
+
32
+ }
38
33
  });
39
34
  }
@@ -14,26 +14,21 @@ export default function useMutateMeeting() {
14
14
 
15
15
 
16
16
  type MutateProps = {
17
- provider: string
17
+ provider: string
18
18
  }
19
19
 
20
20
  const mutateMeeting = async ({ provider }: MutateProps) => {
21
21
 
22
- const response = await fetch(client.url + "/api/meetings", {
23
- method: "POST",
24
- body: JSON.stringify({provider: provider}),
25
- headers: {
26
- "content-type": "application/json",
27
- "Authorization": "Bearer " + await client.tokenFactory()
28
- }
29
- });
22
+ const response = await client.post("/api/meetings",
23
+ "POST",
24
+ JSON.stringify({ provider: provider }));
30
25
 
31
26
  return response.json();
32
27
  };
33
28
 
34
29
  return useMutation(mutateMeeting, {
35
30
  onSuccess: (variables: any) => {
36
-
37
- }
31
+
32
+ }
38
33
  });
39
34
  }
@@ -14,30 +14,25 @@ export default function useMutateMembers() {
14
14
 
15
15
 
16
16
  type MutateProps = {
17
- id: number | null,
17
+ id: number | null,
18
18
  members: number[]
19
19
  }
20
20
 
21
21
  // add members to conversation
22
22
  const mutateMembers = async ({ id, members }: MutateProps) => {
23
23
 
24
- const response = await fetch(client.url + "/api/apps/" + id + "/members/", {
25
- method: "POST",
26
- body: JSON.stringify(members),
27
- headers: {
28
- "content-type": "application/json",
29
- "Authorization": "Bearer " + await client.tokenFactory()
30
- }
31
- });
24
+ const response = await client.post("/api/apps/" + id + "/members/",
25
+ "POST",
26
+ JSON.stringify(members));
32
27
 
33
28
  return response;
34
29
  };
35
30
 
36
31
  return useMutation(mutateMembers, {
37
32
  onSuccess: (data: any, variables: any, context: any) => {
38
- queryClient.invalidateQueries("conversations");
39
- queryClient.invalidateQueries(["conversation", variables.id]);
40
- queryClient.invalidateQueries(["members", variables.id]);
41
- }
33
+ queryClient.invalidateQueries("conversations");
34
+ queryClient.invalidateQueries(["conversation", variables.id]);
35
+ queryClient.invalidateQueries(["members", variables.id]);
36
+ }
42
37
  });
43
38
  }
@@ -22,39 +22,30 @@ export default function useMutateMessage() {
22
22
  }
23
23
 
24
24
  const mutateMessage = async ({ id, text, userId, attachments, meetings }: MutateProps) => {
25
- const response = await fetch(client.url + "/api/apps/" + id + "/messages", {
26
- method: "POST",
27
- body: JSON.stringify({
25
+
26
+ const response = await client.post("/api/apps/" + id + "/messages",
27
+ "POST",
28
+ JSON.stringify({
28
29
  text: text,
29
30
  blobs: attachments.map((a: FileType) => { return a.id }),
30
31
  meeting_id: meetings.length > 0 ? meetings[0].id : null
31
- }),
32
- headers: {
33
- "content-type": "application/json",
34
- "Authorization": "Bearer " + await client.tokenFactory()
35
- }
36
- });
37
-
32
+ }));
38
33
  return response.json();
39
34
  };
40
35
 
41
36
  return useMutation(mutateMessage, {
42
- onSuccess: (data: any, variables: any, context: any) => {
37
+ onSuccess: (data: MessageType, variables: any, context: any) => {
43
38
 
44
39
  const previousData = queryClient.getQueryData<any>(['messages', variables.id]);
45
40
  if (previousData && previousData.pages) {
46
41
  // update cache
47
42
  const newPagesArray = previousData.pages.map((page: any, i: number) => {
48
-
49
-
50
-
51
43
  // remove temp message
52
44
  if (i === 0) {
53
45
  page.data = [
54
46
  ...page.data.filter((message: MessageType) => message.id !== context.tempId),
55
47
  data
56
48
  ]
57
-
58
49
  }
59
50
 
60
51
  return page;
@@ -68,7 +59,7 @@ export default function useMutateMessage() {
68
59
  }
69
60
 
70
61
  // refetch conversations list
71
- queryClient.invalidateQueries("conversations");
62
+ queryClient.invalidateQueries("conversations");
72
63
 
73
64
  },
74
65
  onMutate: async (variables: any) => {
@@ -100,8 +91,8 @@ export default function useMutateMessage() {
100
91
 
101
92
  // update cache
102
93
  queryClient.setQueryData(["messages", variables.id], (data: any) => {
103
- let updatedPages = [lastPage];
104
- if (data?.pages.length > 1) {
94
+ let updatedPages = [lastPage];
95
+ if (data?.pages.length > 1) {
105
96
  updatedPages = [lastPage, ...data?.pages.slice(1)];
106
97
  }
107
98
  return {
@@ -20,14 +20,9 @@ export default function useMutatePinned() {
20
20
 
21
21
  const mutatePinned = async ({ id, pin }: MutateProps) => {
22
22
 
23
- const response = await fetch(client.url + "/api/conversations/" + id + "/pin", {
24
- method: + !pin ? "DELETE": "PUT",
25
- body: "",
26
- headers: {
27
- "content-type": "application/json",
28
- "Authorization": "Bearer " + await client.tokenFactory()
29
- }
30
- });
23
+ const response = await client.post("/api/conversations/" + id + "/pin",
24
+ !pin ? "DELETE" : "PUT",
25
+ "");
31
26
 
32
27
  return response.json();
33
28
  };
@@ -16,20 +16,14 @@ export default function useMutateReaction() {
16
16
 
17
17
  type MutateProps = {
18
18
  id: number | null,
19
- reaction: string
19
+ reaction: string
20
20
  }
21
21
 
22
- const mutateReaction = async ({id, reaction }: MutateProps) => {
23
-
24
-
25
- const response = await fetch(client.url + "/api/messages/" + id + "/reactions/", {
26
- method: "POST",
27
- body: JSON.stringify({ content: reaction}),
28
- headers: {
29
- "content-type": "application/json",
30
- "Authorization": "Bearer " + await client.tokenFactory()
31
- }
32
- });
22
+ const mutateReaction = async ({ id, reaction }: MutateProps) => {
23
+
24
+ const response = await client.post("/api/messages/" + id + "/reactions/",
25
+ "POST",
26
+ JSON.stringify({ content: reaction }));
33
27
 
34
28
  return response;
35
29
  };
@@ -15,20 +15,13 @@ export default function useMutateRead() {
15
15
 
16
16
  type MutateProps = {
17
17
  id: number | null,
18
- read: boolean
18
+ read: boolean,
19
+ messageId: number | null
19
20
  }
20
21
 
21
- const mutateRead = async ({ id, read }: MutateProps) => {
22
-
23
- const response = await fetch(client.url + "/api/conversations/" + id + "/read", {
24
- method: !read ? "DELETE": "PUT",
25
- body: "",
26
- headers: {
27
- "content-type": "application/json",
28
- "Authorization": "Bearer " + await client.tokenFactory()
29
- }
30
- });
31
-
22
+ const mutateRead = async ({ id, read, messageId }: MutateProps) => {
23
+ const url = read ? `/api/conversations/${id}/read?messageId=${messageId}`: `/api/conversations/${id}/read`;
24
+ const response = await client.post(url, !read ? "DELETE": "PUT", "")
32
25
  return response.json();
33
26
  };
34
27
 
@@ -16,28 +16,23 @@ export default function useMutateRemoveMembers() {
16
16
 
17
17
 
18
18
  type MutateProps = {
19
- id: number | null,
19
+ id: number | null,
20
20
  members: number[]
21
21
  }
22
22
 
23
23
  const mutateRemove = async ({ id, members }: MutateProps) => {
24
24
 
25
- const response = await fetch(client.url + "/api/apps/" + id + "/members/" + members.join(","), {
26
- method: "DELETE",
27
- body: JSON.stringify(members),
28
- headers: {
29
- "content-type": "application/json",
30
- "Authorization": "Bearer " + await client.tokenFactory()
31
- }
32
- });
25
+ const response = await client.post("/api/apps/" + id + "/members/" + members.join(","),
26
+ "DELETE",
27
+ JSON.stringify(members));
33
28
 
34
29
  return response;
35
30
  };
36
31
 
37
32
  return useMutation(mutateRemove, {
38
33
  onSuccess: () => {
39
- queryClient.invalidateQueries("conversations");
40
- setSelectedConversationId(null);
41
- }
34
+ queryClient.invalidateQueries("conversations");
35
+ setSelectedConversationId(null);
36
+ }
42
37
  });
43
38
  }
@@ -6,29 +6,24 @@ import { WeavyContext } from "../contexts/WeavyContext";
6
6
  export default function useMutateTyping() {
7
7
 
8
8
  const { client } = useContext(WeavyContext);
9
-
9
+
10
10
  if (!client) {
11
11
  throw new Error('useMutateTyping must be used within an WeavyProvider');
12
12
  }
13
13
 
14
14
 
15
15
  type MutateProps = {
16
- id: number | null
16
+ id: number | null
17
17
  }
18
18
 
19
19
  const mutateTyping = async ({ id }: MutateProps) => {
20
20
 
21
- const response = await fetch(client.url + "/api/conversations/" + id + "/typing", {
22
- method: "PUT",
23
- body: JSON.stringify({}),
24
- headers: {
25
- "content-type": "application/json",
26
- "Authorization": "Bearer " + await client.tokenFactory()
27
- }
28
- });
21
+ const response = await client.post("/api/conversations/" + id + "/typing",
22
+ "PUT",
23
+ JSON.stringify({}));
29
24
 
30
25
  return response;
31
26
  };
32
27
 
33
- return useMutation(mutateTyping, { });
28
+ return useMutation(mutateTyping, {});
34
29
  }
@@ -10,11 +10,10 @@ export default function usePresence() {
10
10
  }
11
11
 
12
12
  useEffect(() => {
13
- client.subscribe("online", "online", handlePresenceChange)
13
+ client.subscribe(null, "online", handlePresenceChange)
14
14
  }, []);
15
15
 
16
- const handlePresenceChange = (data: any) => {
17
-
16
+ const handlePresenceChange = (data: any) => {
18
17
  if (Array.isArray(data)) {
19
18
  document.querySelectorAll(".wy-presence").forEach(function (item) {
20
19
  item.classList.remove("wy-presence-active");
@@ -9,7 +9,7 @@ export default function useReactions(id: number, reactions: ReactableType[]) {
9
9
 
10
10
  const groupReactions = useCallback((data: ReactableType[]) => {
11
11
  var group = [...new Map<string, ReactableType>(data.map((item: ReactableType) => [item.content, item])).values()];
12
-
12
+
13
13
  return group.map((item: ReactableType): ReactionGroup => {
14
14
  return {
15
15
  content: item.content,
@@ -19,17 +19,17 @@ export default function useReactions(id: number, reactions: ReactableType[]) {
19
19
  });
20
20
  }, [reactionsList]);
21
21
 
22
- const handleRealtimeReactionInserted = useCallback((reaction: ReactionType) => {
23
- if (reaction.parent.id === id) {
22
+ const handleRealtimeReactionInserted = useCallback((reaction: RealtimeReaction) => {
23
+ if (reaction.entity.id === id) {
24
24
  setReactionsList((oldList) => {
25
- return [...oldList || [], { content: reaction.content, created_by_id: reaction.created_by.id }];
25
+ return [...oldList || [], { content: reaction.reaction, created_by_id: reaction.actor.id }];
26
26
  });
27
27
  }
28
28
  }, [id, reactionsList]);
29
29
 
30
- const handleRealtimeReactionDeleted = useCallback((reaction: ReactionType) => {
31
- if (reaction.parent.id === id) {
32
- setReactionsList(oldList => oldList.filter(item => item.created_by_id !== reaction.created_by.id));
30
+ const handleRealtimeReactionDeleted = useCallback((reaction: RealtimeReaction) => {
31
+ if (reaction.entity.id === id) {
32
+ setReactionsList(oldList => oldList.filter(item => item.created_by_id !== reaction.actor.id));
33
33
  }
34
34
  }, [id, reactionsList]);
35
35
 
@@ -38,13 +38,12 @@ export default function useReactions(id: number, reactions: ReactableType[]) {
38
38
  }, [reactions]);
39
39
 
40
40
  useEffect(() => {
41
-
42
- on('reaction-inserted', handleRealtimeReactionInserted);
43
- on('reaction-deleted', handleRealtimeReactionDeleted);
41
+ on('reaction_added_' + id, handleRealtimeReactionInserted);
42
+ on('reaction_deleted_' + id, handleRealtimeReactionDeleted);
44
43
 
45
44
  return () => {
46
- off('reaction-inserted', handleRealtimeReactionInserted);
47
- off('reaction-deleted', handleRealtimeReactionDeleted);
45
+ off('reaction_added_' + id, handleRealtimeReactionInserted);
46
+ off('reaction_deleted_' + id, handleRealtimeReactionDeleted);
48
47
  }
49
48
  }, [id]);
50
49
 
@@ -12,12 +12,7 @@ export default function useSearchUsers(text: string, options: any) {
12
12
  }
13
13
 
14
14
  const getUsers = async () => {
15
- const response = await fetch(client.url + "/api/users?q=" + text + "&skip=0&top=" + PAGE_SIZE, {
16
- headers: {
17
- "content-type": "application/json",
18
- "Authorization": "Bearer " + await client.tokenFactory()
19
- }
20
- });
15
+ const response = await client.get("/api/users?q=" + text + "&skip=0&top=" + PAGE_SIZE);
21
16
  const data = await response.json();
22
17
  return data;
23
18
  };
@@ -1,12 +1,8 @@
1
- //import { useContext } from "react";
2
1
  import { useQuery } from "react-query";
3
2
  import WeavyClient from "../client/WeavyClient";
4
- //import { WeavyContext } from "../contexts/WeavyContext";
5
3
 
6
4
  /// GET current user
7
- export default function useUser(client: WeavyClient) {
8
- //const { client } = useContext(WeavyContext);
9
-
5
+ export default function useUser(client: WeavyClient) {
10
6
  if (!client) {
11
7
  throw new Error('useUser must be used within an WeavyProvider');
12
8
  }
@@ -14,17 +10,10 @@ export default function useUser(client: WeavyClient) {
14
10
  const getUser = async () => {
15
11
 
16
12
  try {
17
- const response = await fetch(client.url + "/api/user", {
18
- headers: {
19
- "content-type": "application/json",
20
- "Authorization": "Bearer " + await client.tokenFactory()
21
- }
22
- });
23
-
13
+ const response = await client.get("/api/user");
24
14
  if(response.ok){
25
15
  return await response.json();
26
- }
27
-
16
+ }
28
17
  console.error("Could not load Weavy user data...")
29
18
  return null;
30
19
  } catch(err: any){
@@ -1,73 +1,71 @@
1
- @use "config" as *;
1
+ @use "sass:map";
2
+ @use "base/vars";
3
+ @use "base/colors";
2
4
 
3
- // Global alerts
5
+ .wy-alerts {
6
+ position: fixed;
7
+ left: 0;
8
+ top: 4rem;
9
+ right: 0;
10
+ pointer-events: none;
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: center;
14
+ justify-content: center;
15
+ z-index: vars.$zindex-fixed;
16
+ gap: 1rem;
17
+ }
4
18
 
5
- .wy-alert-message {
6
- padding: .25rem .5rem;
7
- background-color: $client-alert-background;
8
- text-align: center;
9
- width: $client-panel-width;
10
- color: $client-alert-color;
11
- border-radius: .1875rem;
12
- margin: 0 auto;
13
- margin-top: 1rem;
14
- font-family: $font-family-base;
15
- position: relative;
16
- z-index: 10;
17
- box-shadow: $md-shadow-8dp;
18
- max-width: calc(100% - 3rem);
19
- pointer-events: none;
20
- user-select: none;
19
+ .wy-alert {
20
+ background: colors.$surface-1;
21
+ color: colors.$on-surface;
22
+ margin: 0 0 1rem;
23
+ //max-width: calc(100% - 3rem);
24
+ gap: .5rem;
25
+ display: flex;
26
+ flex-direction:row;
27
+ flex-wrap: wrap;
28
+ align-items: baseline;
29
+ cursor: pointer;
30
+ border-radius: vars.$border-radius;
31
+ margin-left: auto;
32
+ margin-right: auto;
33
+ margin-bottom: 1rem;
34
+ padding: .5rem 1rem;
35
+ user-select: none;
36
+ //box-shadow: vars.$shadow-level2;
37
+ position: relative;
38
+ overflow: hidden;
39
+ height: auto;
40
+ gap: .5rem;
21
41
 
22
- a {
23
- color: darken($client-alert-color, 10%);
24
- text-decoration: $link-decoration;
25
- font-weight: $alert-link-font-weight;
26
- pointer-events: auto;
42
+ &.wy-fade {
43
+ transition: all vars.$transition;
44
+
45
+ &:not(.wy-show) {
46
+ opacity: 0;
47
+ height: 0;
48
+ padding-top: 0;
49
+ padding-bottom: 0;
50
+ margin-top: 0;
51
+ margin-bottom: 0;
27
52
  }
53
+ }
28
54
 
29
- &.wy-fade {
30
- transition: all $md-animation-duration $md-animation-curve-default;
31
- opacity: 0;
32
- height: 0;
33
- padding-top: 0;
34
- padding-bottom: 0;
35
- margin-top: 0;
55
+ .wy-text {
56
+ line-height: 1.5;
57
+ padding: .5rem;
58
+ }
36
59
 
37
- &.wy-in {
38
- transition: opacity $md-animation-duration $md-animation-curve-default;
39
- opacity: 1;
40
- height: auto;
41
- padding-top: .5rem;
42
- padding-bottom: .5rem;
43
- margin-top: 1rem;
44
- }
45
- }
60
+ .wy-button {
61
+ margin-left: auto;
62
+ pointer-events: auto;
63
+ }
64
+ }
46
65
 
47
- .wy-button {
48
- cursor: pointer;
49
- display: inline-flex;
50
- flex-shrink: 0;
51
- flex-grow: 0;
52
66
 
53
- > * {
54
- display: inline-flex;
55
- }
56
67
 
57
- font-weight: 400;
58
- text-align: center;
59
- white-space: nowrap;
60
- vertical-align: middle;
61
- user-select: none;
62
- border: 1px solid transparent;
63
- padding: .3125rem .75rem;
64
- font-size: 1rem;
65
- line-height: 1.5;
66
- border-radius: .1875rem;
67
- color: $white;
68
- background-color: $primary;
69
- border-color: $primary;
70
- box-shadow: $btn-box-shadow;
71
- margin-top: .5rem;
72
- }
68
+ .wy-alert-primary {
69
+ background: colors.$primary-container;
70
+ color: colors.$on-primary-container;
73
71
  }