@replyke/core 7.0.0-beta.101 → 7.0.0-beta.104

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 (257) hide show
  1. package/dist/cjs/config/axios.d.ts +1 -0
  2. package/dist/cjs/config/axios.js +4 -4
  3. package/dist/cjs/config/axios.js.map +1 -1
  4. package/dist/cjs/context/chat-context.d.ts +17 -0
  5. package/dist/cjs/context/chat-context.js +299 -0
  6. package/dist/cjs/context/chat-context.js.map +1 -0
  7. package/dist/cjs/context/conversation-context.d.ts +14 -0
  8. package/dist/cjs/context/conversation-context.js +231 -0
  9. package/dist/cjs/context/conversation-context.js.map +1 -0
  10. package/dist/cjs/context/index.d.ts +3 -0
  11. package/dist/cjs/context/index.js +13 -1
  12. package/dist/cjs/context/index.js.map +1 -1
  13. package/dist/cjs/context/message-thread-context.d.ts +13 -0
  14. package/dist/cjs/context/message-thread-context.js +32 -0
  15. package/dist/cjs/context/message-thread-context.js.map +1 -0
  16. package/dist/cjs/hooks/chat/conversations/index.d.ts +10 -0
  17. package/dist/cjs/hooks/chat/conversations/index.js +17 -0
  18. package/dist/cjs/hooks/chat/conversations/index.js.map +1 -0
  19. package/dist/cjs/hooks/chat/conversations/useConversation.d.ts +18 -0
  20. package/dist/cjs/hooks/chat/conversations/useConversation.js +134 -0
  21. package/dist/cjs/hooks/chat/conversations/useConversation.js.map +1 -0
  22. package/dist/cjs/hooks/chat/conversations/useConversationMembers.d.ts +18 -0
  23. package/dist/cjs/hooks/chat/conversations/useConversationMembers.js +219 -0
  24. package/dist/cjs/hooks/chat/conversations/useConversationMembers.js.map +1 -0
  25. package/dist/cjs/hooks/chat/conversations/useConversations.d.ts +17 -0
  26. package/dist/cjs/hooks/chat/conversations/useConversations.js +193 -0
  27. package/dist/cjs/hooks/chat/conversations/useConversations.js.map +1 -0
  28. package/dist/cjs/hooks/chat/conversations/useCreateDirectConversation.d.ts +6 -0
  29. package/dist/cjs/hooks/chat/conversations/useCreateDirectConversation.js +83 -0
  30. package/dist/cjs/hooks/chat/conversations/useCreateDirectConversation.js.map +1 -0
  31. package/dist/cjs/hooks/chat/conversations/useSpaceConversation.d.ts +10 -0
  32. package/dist/cjs/hooks/chat/conversations/useSpaceConversation.js +91 -0
  33. package/dist/cjs/hooks/chat/conversations/useSpaceConversation.js.map +1 -0
  34. package/dist/cjs/hooks/chat/index.d.ts +15 -0
  35. package/dist/cjs/hooks/chat/index.js +36 -0
  36. package/dist/cjs/hooks/chat/index.js.map +1 -0
  37. package/dist/cjs/hooks/chat/messages/index.d.ts +12 -0
  38. package/dist/cjs/hooks/chat/messages/index.js +19 -0
  39. package/dist/cjs/hooks/chat/messages/index.js.map +1 -0
  40. package/dist/cjs/hooks/chat/messages/useChatMessages.d.ts +15 -0
  41. package/dist/cjs/hooks/chat/messages/useChatMessages.js +228 -0
  42. package/dist/cjs/hooks/chat/messages/useChatMessages.js.map +1 -0
  43. package/dist/cjs/hooks/chat/messages/useDeleteMessage.d.ts +6 -0
  44. package/dist/cjs/hooks/chat/messages/useDeleteMessage.js +81 -0
  45. package/dist/cjs/hooks/chat/messages/useDeleteMessage.js.map +1 -0
  46. package/dist/cjs/hooks/chat/messages/useEditMessage.d.ts +13 -0
  47. package/dist/cjs/hooks/chat/messages/useEditMessage.js +81 -0
  48. package/dist/cjs/hooks/chat/messages/useEditMessage.js.map +1 -0
  49. package/dist/cjs/hooks/chat/messages/useMessageThread.d.ts +15 -0
  50. package/dist/cjs/hooks/chat/messages/useMessageThread.js +38 -0
  51. package/dist/cjs/hooks/chat/messages/useMessageThread.js.map +1 -0
  52. package/dist/cjs/hooks/chat/messages/useSendMessage.d.ts +17 -0
  53. package/dist/cjs/hooks/chat/messages/useSendMessage.js +156 -0
  54. package/dist/cjs/hooks/chat/messages/useSendMessage.js.map +1 -0
  55. package/dist/cjs/hooks/chat/messages/useToggleReaction.d.ts +11 -0
  56. package/dist/cjs/hooks/chat/messages/useToggleReaction.js +95 -0
  57. package/dist/cjs/hooks/chat/messages/useToggleReaction.js.map +1 -0
  58. package/dist/cjs/hooks/chat/useChatSocket.d.ts +11 -0
  59. package/dist/cjs/hooks/chat/useChatSocket.js +13 -0
  60. package/dist/cjs/hooks/chat/useChatSocket.js.map +1 -0
  61. package/dist/cjs/hooks/chat/useConversationData.d.ts +31 -0
  62. package/dist/cjs/hooks/chat/useConversationData.js +47 -0
  63. package/dist/cjs/hooks/chat/useConversationData.js.map +1 -0
  64. package/dist/cjs/hooks/chat/useMarkConversationAsRead.d.ts +10 -0
  65. package/dist/cjs/hooks/chat/useMarkConversationAsRead.js +87 -0
  66. package/dist/cjs/hooks/chat/useMarkConversationAsRead.js.map +1 -0
  67. package/dist/cjs/hooks/chat/useReportMessage.d.ts +8 -0
  68. package/dist/cjs/hooks/chat/useReportMessage.js +76 -0
  69. package/dist/cjs/hooks/chat/useReportMessage.js.map +1 -0
  70. package/dist/cjs/hooks/chat/useTotalUnreadCount.d.ts +6 -0
  71. package/dist/cjs/hooks/chat/useTotalUnreadCount.js +14 -0
  72. package/dist/cjs/hooks/chat/useTotalUnreadCount.js.map +1 -0
  73. package/dist/cjs/hooks/chat/useTypingIndicator.d.ts +21 -0
  74. package/dist/cjs/hooks/chat/useTypingIndicator.js +68 -0
  75. package/dist/cjs/hooks/chat/useTypingIndicator.js.map +1 -0
  76. package/dist/cjs/hooks/comments/index.d.ts +1 -1
  77. package/dist/cjs/hooks/comments/index.js.map +1 -1
  78. package/dist/cjs/hooks/comments/useCommentSectionData.d.ts +5 -0
  79. package/dist/cjs/hooks/comments/useCommentSectionData.js +20 -17
  80. package/dist/cjs/hooks/comments/useCommentSectionData.js.map +1 -1
  81. package/dist/cjs/hooks/spaces/index.d.ts +4 -0
  82. package/dist/cjs/hooks/spaces/index.js +6 -1
  83. package/dist/cjs/hooks/spaces/index.js.map +1 -1
  84. package/dist/cjs/hooks/spaces/useSpaceMentions.d.ts +24 -0
  85. package/dist/cjs/hooks/spaces/useSpaceMentions.js +191 -0
  86. package/dist/cjs/hooks/spaces/useSpaceMentions.js.map +1 -0
  87. package/dist/cjs/hooks/spaces/useUnbanMember.d.ts +11 -0
  88. package/dist/cjs/hooks/spaces/useUnbanMember.js +71 -0
  89. package/dist/cjs/hooks/spaces/useUnbanMember.js.map +1 -0
  90. package/dist/cjs/hooks/users/index.d.ts +1 -1
  91. package/dist/cjs/hooks/users/index.js +3 -3
  92. package/dist/cjs/hooks/users/index.js.map +1 -1
  93. package/dist/cjs/hooks/users/{useMentions.d.ts → useUserMentions.d.ts} +8 -4
  94. package/dist/cjs/hooks/users/{useMentions.js → useUserMentions.js} +22 -17
  95. package/dist/cjs/hooks/users/useUserMentions.js.map +1 -0
  96. package/dist/cjs/index.d.ts +11 -5
  97. package/dist/cjs/index.js +70 -5
  98. package/dist/cjs/index.js.map +1 -1
  99. package/dist/cjs/interfaces/models/File.d.ts +1 -0
  100. package/dist/cjs/interfaces/models/IChatMessage.d.ts +34 -0
  101. package/dist/cjs/interfaces/models/IChatMessage.js +3 -0
  102. package/dist/cjs/interfaces/models/IChatMessage.js.map +1 -0
  103. package/dist/cjs/interfaces/models/IConversation.d.ts +25 -0
  104. package/dist/cjs/interfaces/models/IConversation.js +3 -0
  105. package/dist/cjs/interfaces/models/IConversation.js.map +1 -0
  106. package/dist/cjs/interfaces/models/IConversationMember.d.ts +16 -0
  107. package/dist/cjs/interfaces/models/IConversationMember.js +3 -0
  108. package/dist/cjs/interfaces/models/IConversationMember.js.map +1 -0
  109. package/dist/cjs/interfaces/models/Mention.d.ts +8 -1
  110. package/dist/cjs/store/api/spacesApi.d.ts +364 -0
  111. package/dist/cjs/store/api/spacesApi.js +20 -3
  112. package/dist/cjs/store/api/spacesApi.js.map +1 -1
  113. package/dist/cjs/store/hooks.d.ts +1 -0
  114. package/dist/cjs/store/index.d.ts +2 -0
  115. package/dist/cjs/store/replykeReducers.d.ts +2 -0
  116. package/dist/cjs/store/replykeReducers.js +2 -0
  117. package/dist/cjs/store/replykeReducers.js.map +1 -1
  118. package/dist/cjs/store/rootReducer.d.ts +3 -0
  119. package/dist/cjs/store/slices/chatSlice.d.ts +120 -0
  120. package/dist/cjs/store/slices/chatSlice.js +369 -0
  121. package/dist/cjs/store/slices/chatSlice.js.map +1 -0
  122. package/dist/cjs/store/slices/entityListsSlice.d.ts +168 -24
  123. package/dist/cjs/store/slices/spaceListsSlice.d.ts +24 -0
  124. package/dist/cjs/store/slices/userSlice.d.ts +16 -0
  125. package/dist/cjs/types/socket.d.ts +73 -0
  126. package/dist/cjs/types/socket.js +3 -0
  127. package/dist/cjs/types/socket.js.map +1 -0
  128. package/dist/esm/config/axios.d.ts +1 -0
  129. package/dist/esm/config/axios.js +1 -1
  130. package/dist/esm/config/axios.js.map +1 -1
  131. package/dist/esm/context/chat-context.d.ts +17 -0
  132. package/dist/esm/context/chat-context.js +291 -0
  133. package/dist/esm/context/chat-context.js.map +1 -0
  134. package/dist/esm/context/conversation-context.d.ts +14 -0
  135. package/dist/esm/context/conversation-context.js +223 -0
  136. package/dist/esm/context/conversation-context.js.map +1 -0
  137. package/dist/esm/context/index.d.ts +3 -0
  138. package/dist/esm/context/index.js +3 -0
  139. package/dist/esm/context/index.js.map +1 -1
  140. package/dist/esm/context/message-thread-context.d.ts +13 -0
  141. package/dist/esm/context/message-thread-context.js +24 -0
  142. package/dist/esm/context/message-thread-context.js.map +1 -0
  143. package/dist/esm/hooks/chat/conversations/index.d.ts +10 -0
  144. package/dist/esm/hooks/chat/conversations/index.js +6 -0
  145. package/dist/esm/hooks/chat/conversations/index.js.map +1 -0
  146. package/dist/esm/hooks/chat/conversations/useConversation.d.ts +18 -0
  147. package/dist/esm/hooks/chat/conversations/useConversation.js +129 -0
  148. package/dist/esm/hooks/chat/conversations/useConversation.js.map +1 -0
  149. package/dist/esm/hooks/chat/conversations/useConversationMembers.d.ts +18 -0
  150. package/dist/esm/hooks/chat/conversations/useConversationMembers.js +214 -0
  151. package/dist/esm/hooks/chat/conversations/useConversationMembers.js.map +1 -0
  152. package/dist/esm/hooks/chat/conversations/useConversations.d.ts +17 -0
  153. package/dist/esm/hooks/chat/conversations/useConversations.js +188 -0
  154. package/dist/esm/hooks/chat/conversations/useConversations.js.map +1 -0
  155. package/dist/esm/hooks/chat/conversations/useCreateDirectConversation.d.ts +6 -0
  156. package/dist/esm/hooks/chat/conversations/useCreateDirectConversation.js +78 -0
  157. package/dist/esm/hooks/chat/conversations/useCreateDirectConversation.js.map +1 -0
  158. package/dist/esm/hooks/chat/conversations/useSpaceConversation.d.ts +10 -0
  159. package/dist/esm/hooks/chat/conversations/useSpaceConversation.js +86 -0
  160. package/dist/esm/hooks/chat/conversations/useSpaceConversation.js.map +1 -0
  161. package/dist/esm/hooks/chat/index.d.ts +15 -0
  162. package/dist/esm/hooks/chat/index.js +13 -0
  163. package/dist/esm/hooks/chat/index.js.map +1 -0
  164. package/dist/esm/hooks/chat/messages/index.d.ts +12 -0
  165. package/dist/esm/hooks/chat/messages/index.js +7 -0
  166. package/dist/esm/hooks/chat/messages/index.js.map +1 -0
  167. package/dist/esm/hooks/chat/messages/useChatMessages.d.ts +15 -0
  168. package/dist/esm/hooks/chat/messages/useChatMessages.js +223 -0
  169. package/dist/esm/hooks/chat/messages/useChatMessages.js.map +1 -0
  170. package/dist/esm/hooks/chat/messages/useDeleteMessage.d.ts +6 -0
  171. package/dist/esm/hooks/chat/messages/useDeleteMessage.js +76 -0
  172. package/dist/esm/hooks/chat/messages/useDeleteMessage.js.map +1 -0
  173. package/dist/esm/hooks/chat/messages/useEditMessage.d.ts +13 -0
  174. package/dist/esm/hooks/chat/messages/useEditMessage.js +76 -0
  175. package/dist/esm/hooks/chat/messages/useEditMessage.js.map +1 -0
  176. package/dist/esm/hooks/chat/messages/useMessageThread.d.ts +15 -0
  177. package/dist/esm/hooks/chat/messages/useMessageThread.js +33 -0
  178. package/dist/esm/hooks/chat/messages/useMessageThread.js.map +1 -0
  179. package/dist/esm/hooks/chat/messages/useSendMessage.d.ts +17 -0
  180. package/dist/esm/hooks/chat/messages/useSendMessage.js +151 -0
  181. package/dist/esm/hooks/chat/messages/useSendMessage.js.map +1 -0
  182. package/dist/esm/hooks/chat/messages/useToggleReaction.d.ts +11 -0
  183. package/dist/esm/hooks/chat/messages/useToggleReaction.js +90 -0
  184. package/dist/esm/hooks/chat/messages/useToggleReaction.js.map +1 -0
  185. package/dist/esm/hooks/chat/useChatSocket.d.ts +11 -0
  186. package/dist/esm/hooks/chat/useChatSocket.js +11 -0
  187. package/dist/esm/hooks/chat/useChatSocket.js.map +1 -0
  188. package/dist/esm/hooks/chat/useConversationData.d.ts +31 -0
  189. package/dist/esm/hooks/chat/useConversationData.js +42 -0
  190. package/dist/esm/hooks/chat/useConversationData.js.map +1 -0
  191. package/dist/esm/hooks/chat/useMarkConversationAsRead.d.ts +10 -0
  192. package/dist/esm/hooks/chat/useMarkConversationAsRead.js +82 -0
  193. package/dist/esm/hooks/chat/useMarkConversationAsRead.js.map +1 -0
  194. package/dist/esm/hooks/chat/useReportMessage.d.ts +8 -0
  195. package/dist/esm/hooks/chat/useReportMessage.js +71 -0
  196. package/dist/esm/hooks/chat/useReportMessage.js.map +1 -0
  197. package/dist/esm/hooks/chat/useTotalUnreadCount.d.ts +6 -0
  198. package/dist/esm/hooks/chat/useTotalUnreadCount.js +12 -0
  199. package/dist/esm/hooks/chat/useTotalUnreadCount.js.map +1 -0
  200. package/dist/esm/hooks/chat/useTypingIndicator.d.ts +21 -0
  201. package/dist/esm/hooks/chat/useTypingIndicator.js +66 -0
  202. package/dist/esm/hooks/chat/useTypingIndicator.js.map +1 -0
  203. package/dist/esm/hooks/comments/index.d.ts +1 -1
  204. package/dist/esm/hooks/comments/index.js.map +1 -1
  205. package/dist/esm/hooks/comments/useCommentSectionData.d.ts +5 -0
  206. package/dist/esm/hooks/comments/useCommentSectionData.js +20 -17
  207. package/dist/esm/hooks/comments/useCommentSectionData.js.map +1 -1
  208. package/dist/esm/hooks/spaces/index.d.ts +4 -0
  209. package/dist/esm/hooks/spaces/index.js +3 -0
  210. package/dist/esm/hooks/spaces/index.js.map +1 -1
  211. package/dist/esm/hooks/spaces/useSpaceMentions.d.ts +24 -0
  212. package/dist/esm/hooks/spaces/useSpaceMentions.js +186 -0
  213. package/dist/esm/hooks/spaces/useSpaceMentions.js.map +1 -0
  214. package/dist/esm/hooks/spaces/useUnbanMember.d.ts +11 -0
  215. package/dist/esm/hooks/spaces/useUnbanMember.js +66 -0
  216. package/dist/esm/hooks/spaces/useUnbanMember.js.map +1 -0
  217. package/dist/esm/hooks/users/index.d.ts +1 -1
  218. package/dist/esm/hooks/users/index.js +1 -1
  219. package/dist/esm/hooks/users/index.js.map +1 -1
  220. package/dist/esm/hooks/users/{useMentions.d.ts → useUserMentions.d.ts} +8 -4
  221. package/dist/esm/hooks/users/{useMentions.js → useUserMentions.js} +22 -17
  222. package/dist/esm/hooks/users/useUserMentions.js.map +1 -0
  223. package/dist/esm/index.d.ts +11 -5
  224. package/dist/esm/index.js +7 -3
  225. package/dist/esm/index.js.map +1 -1
  226. package/dist/esm/interfaces/models/File.d.ts +1 -0
  227. package/dist/esm/interfaces/models/IChatMessage.d.ts +34 -0
  228. package/dist/esm/interfaces/models/IChatMessage.js +2 -0
  229. package/dist/esm/interfaces/models/IChatMessage.js.map +1 -0
  230. package/dist/esm/interfaces/models/IConversation.d.ts +25 -0
  231. package/dist/esm/interfaces/models/IConversation.js +2 -0
  232. package/dist/esm/interfaces/models/IConversation.js.map +1 -0
  233. package/dist/esm/interfaces/models/IConversationMember.d.ts +16 -0
  234. package/dist/esm/interfaces/models/IConversationMember.js +2 -0
  235. package/dist/esm/interfaces/models/IConversationMember.js.map +1 -0
  236. package/dist/esm/interfaces/models/Mention.d.ts +8 -1
  237. package/dist/esm/store/api/spacesApi.d.ts +364 -0
  238. package/dist/esm/store/api/spacesApi.js +19 -2
  239. package/dist/esm/store/api/spacesApi.js.map +1 -1
  240. package/dist/esm/store/hooks.d.ts +1 -0
  241. package/dist/esm/store/index.d.ts +2 -0
  242. package/dist/esm/store/replykeReducers.d.ts +2 -0
  243. package/dist/esm/store/replykeReducers.js +2 -0
  244. package/dist/esm/store/replykeReducers.js.map +1 -1
  245. package/dist/esm/store/rootReducer.d.ts +3 -0
  246. package/dist/esm/store/slices/chatSlice.d.ts +120 -0
  247. package/dist/esm/store/slices/chatSlice.js +350 -0
  248. package/dist/esm/store/slices/chatSlice.js.map +1 -0
  249. package/dist/esm/store/slices/entityListsSlice.d.ts +168 -24
  250. package/dist/esm/store/slices/spaceListsSlice.d.ts +24 -0
  251. package/dist/esm/store/slices/userSlice.d.ts +16 -0
  252. package/dist/esm/types/socket.d.ts +73 -0
  253. package/dist/esm/types/socket.js +2 -0
  254. package/dist/esm/types/socket.js.map +1 -0
  255. package/package.json +3 -2
  256. package/dist/cjs/hooks/users/useMentions.js.map +0 -1
  257. package/dist/esm/hooks/users/useMentions.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ export declare const BASE_URL = "https://api.replyke.com/v7";
1
2
  declare const _default: import("axios").AxiosInstance;
2
3
  export default _default;
3
4
  export declare const axiosPrivate: import("axios").AxiosInstance;
@@ -3,14 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.axiosPrivate = void 0;
6
+ exports.axiosPrivate = exports.BASE_URL = void 0;
7
7
  var axios_1 = __importDefault(require("axios"));
8
- var BASE_URL = "https://api.replyke.com/v7";
8
+ exports.BASE_URL = "https://api.replyke.com/v7";
9
9
  exports.default = axios_1.default.create({
10
- baseURL: BASE_URL,
10
+ baseURL: exports.BASE_URL,
11
11
  });
12
12
  exports.axiosPrivate = axios_1.default.create({
13
- baseURL: BASE_URL,
13
+ baseURL: exports.BASE_URL,
14
14
  headers: { "Content-Type": "application/json" },
15
15
  });
16
16
  //# sourceMappingURL=axios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/config/axios.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAE1B,IAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,kBAAe,eAAK,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,eAAK,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;CAChD,CAAC,CAAC"}
1
+ {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../../src/config/axios.ts"],"names":[],"mappings":";;;;;;AAAA,gDAA0B;AAEb,QAAA,QAAQ,GAAG,4BAA4B,CAAC;AAErD,kBAAe,eAAK,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,gBAAQ;CAClB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,eAAK,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,gBAAQ;IACjB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;CAChD,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React, { ReactNode } from "react";
2
+ import { Socket } from "socket.io-client";
3
+ import type { ServerToClientEvents, ClientToServerEvents } from "../types/socket";
4
+ export interface ChatContextValue {
5
+ socket: Socket<ServerToClientEvents, ClientToServerEvents> | null;
6
+ connected: boolean;
7
+ /** Called by ConversationProvider on mount to suppress unread increments */
8
+ registerActiveConversation: (id: string) => void;
9
+ /** Called by ConversationProvider on unmount */
10
+ unregisterActiveConversation: (id: string) => void;
11
+ }
12
+ export declare const ChatContext: React.Context<ChatContextValue>;
13
+ export declare function useChatContext(): ChatContextValue;
14
+ export interface ChatProviderProps {
15
+ children: ReactNode;
16
+ }
17
+ export declare const ChatProvider: React.FC<ChatProviderProps>;
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ChatProvider = exports.ChatContext = void 0;
27
+ exports.useChatContext = useChatContext;
28
+ var jsx_runtime_1 = require("react/jsx-runtime");
29
+ var react_1 = require("react");
30
+ var socket_io_client_1 = require("socket.io-client");
31
+ var hooks_1 = require("../store/hooks");
32
+ var authSlice_1 = require("../store/slices/authSlice");
33
+ var userSlice_1 = require("../store/slices/userSlice");
34
+ var authSlice_2 = require("../store/slices/authSlice");
35
+ var useProject_1 = __importDefault(require("../hooks/projects/useProject"));
36
+ var axios_1 = require("../config/axios");
37
+ var chatSlice_1 = require("../store/slices/chatSlice");
38
+ exports.ChatContext = (0, react_1.createContext)({
39
+ socket: null,
40
+ connected: false,
41
+ registerActiveConversation: function () { },
42
+ unregisterActiveConversation: function () { },
43
+ });
44
+ // ─── Hook ────────────────────────────────────────────────────────────────────
45
+ function useChatContext() {
46
+ return (0, react_1.useContext)(exports.ChatContext);
47
+ }
48
+ /** Derive the socket.io server URL from the REST API base URL. */
49
+ function getSocketUrl() {
50
+ // socket.io mounts at the origin; strip the path from BASE_URL
51
+ try {
52
+ return new URL(axios_1.BASE_URL).origin;
53
+ }
54
+ catch (_a) {
55
+ return "https://api.replyke.com";
56
+ }
57
+ }
58
+ var ChatProvider = function (_a) {
59
+ var _b;
60
+ var children = _a.children;
61
+ var dispatch = (0, hooks_1.useReplykeDispatch)();
62
+ var projectId = (0, useProject_1.default)().projectId;
63
+ var accessToken = (0, hooks_1.useReplykeSelector)(authSlice_1.selectAccessToken);
64
+ var user = (0, hooks_1.useReplykeSelector)(userSlice_1.selectUser);
65
+ var authUser = (0, hooks_1.useReplykeSelector)(authSlice_2.selectUser);
66
+ var currentUser = user || authUser;
67
+ // Keep mutable refs for values the socket handlers need without closing over stale state
68
+ var currentUserIdRef = (0, react_1.useRef)((_b = currentUser === null || currentUser === void 0 ? void 0 : currentUser.id) !== null && _b !== void 0 ? _b : null);
69
+ (0, react_1.useEffect)(function () {
70
+ var _a;
71
+ currentUserIdRef.current = (_a = currentUser === null || currentUser === void 0 ? void 0 : currentUser.id) !== null && _a !== void 0 ? _a : null;
72
+ }, [currentUser]);
73
+ // Fresh snapshot of messages for socket handlers that need to find a message by id
74
+ var messagesRef = (0, react_1.useRef)({});
75
+ var allMessages = (0, hooks_1.useReplykeSelector)(function (state) { return state.replyke.chat.messages; });
76
+ (0, react_1.useEffect)(function () {
77
+ messagesRef.current = allMessages;
78
+ }, [allMessages]);
79
+ // Fresh snapshot of conversations for conversation:updated merging
80
+ var conversationsRef = (0, react_1.useRef)({});
81
+ var allConversations = (0, hooks_1.useReplykeSelector)(function (state) { return state.replyke.chat.conversations; });
82
+ (0, react_1.useEffect)(function () {
83
+ conversationsRef.current = allConversations;
84
+ }, [allConversations]);
85
+ // Socket state (tracked in React state so context consumers re-render when it changes)
86
+ var _c = (0, react_1.useState)(null), socketState = _c[0], setSocketState = _c[1];
87
+ var _d = (0, react_1.useState)(false), connected = _d[0], setConnected = _d[1];
88
+ // Mutable refs that don't need to trigger re-renders
89
+ var socketRef = (0, react_1.useRef)(null);
90
+ var prevTokenRef = (0, react_1.useRef)(null);
91
+ // Set of conversationIds currently open — prevents unread bumps for active views
92
+ var activeConversationIds = (0, react_1.useRef)(new Set());
93
+ // Typing timers per conversation: conversationId → Map<userId, timer>
94
+ var typingTimers = (0, react_1.useRef)(new Map());
95
+ var registerActiveConversation = (0, react_1.useCallback)(function (id) {
96
+ activeConversationIds.current.add(id);
97
+ }, []);
98
+ var unregisterActiveConversation = (0, react_1.useCallback)(function (id) {
99
+ activeConversationIds.current.delete(id);
100
+ }, []);
101
+ // Helper: cancel a pending typing-timeout for a user in a conversation
102
+ var clearTypingTimer = (0, react_1.useCallback)(function (conversationId, userId) {
103
+ var convMap = typingTimers.current.get(conversationId);
104
+ if (!convMap)
105
+ return;
106
+ var timer = convMap.get(userId);
107
+ if (timer !== undefined) {
108
+ clearTimeout(timer);
109
+ convMap.delete(userId);
110
+ }
111
+ }, []);
112
+ // Helper: find a message by id across all loaded conversation buckets
113
+ var findMessage = (0, react_1.useCallback)(function (messageId) {
114
+ var _a;
115
+ for (var _i = 0, _b = Object.values(messagesRef.current); _i < _b.length; _i++) {
116
+ var bucket = _b[_i];
117
+ var found = (_a = bucket.items) === null || _a === void 0 ? void 0 : _a.find(function (m) { return m.id === messageId; });
118
+ if (found)
119
+ return found;
120
+ }
121
+ return null;
122
+ }, []);
123
+ // Helper: remove a userId from the Redux typing list for a conversation
124
+ var removeTypingUser = (0, react_1.useCallback)(function (conversationId, userId) {
125
+ // We can't use the selector inside a callback without re-reading,
126
+ // so we derive the current array from the state ref we keep in messagesRef.
127
+ // Actually for typing we need the current typingUsers — but that's a separate ref.
128
+ // Simplest: dispatch with the current stored typing users derived from our own
129
+ // typing timer map (we know who is in the map = who is typing).
130
+ var convMap = typingTimers.current.get(conversationId);
131
+ var typingUserIds = convMap ? Array.from(convMap.keys()) : [];
132
+ dispatch((0, chatSlice_1.setTypingUsers)({
133
+ conversationId: conversationId,
134
+ userIds: typingUserIds.filter(function (id) { return id !== userId; }),
135
+ }));
136
+ }, [dispatch]);
137
+ // ── Main socket creation effect ─────────────────────────────────────────────
138
+ var hasToken = Boolean(accessToken);
139
+ (0, react_1.useEffect)(function () {
140
+ if (!projectId || !accessToken)
141
+ return;
142
+ var socketUrl = getSocketUrl();
143
+ var socket = (0, socket_io_client_1.io)(socketUrl, {
144
+ auth: { token: accessToken },
145
+ query: { projectId: projectId },
146
+ autoConnect: true,
147
+ });
148
+ socketRef.current = socket;
149
+ setSocketState(socket);
150
+ prevTokenRef.current = accessToken;
151
+ // ── Connection state ────────────────────────────────────────────────────
152
+ socket.on("connect", function () {
153
+ setConnected(true);
154
+ dispatch((0, chatSlice_1.setSocketConnected)(true));
155
+ });
156
+ socket.on("disconnect", function () {
157
+ setConnected(false);
158
+ dispatch((0, chatSlice_1.setSocketConnected)(false));
159
+ });
160
+ // ── message:created ─────────────────────────────────────────────────────
161
+ socket.on("message:created", function (message) {
162
+ dispatch((0, chatSlice_1.upsertMessage)(message));
163
+ dispatch((0, chatSlice_1.upsertConversationPreview)({
164
+ conversationId: message.conversationId,
165
+ patch: {
166
+ lastMessageAt: message.createdAt,
167
+ lastMessage: message,
168
+ },
169
+ }));
170
+ if (!activeConversationIds.current.has(message.conversationId)) {
171
+ dispatch((0, chatSlice_1.incrementUnread)(message.conversationId));
172
+ }
173
+ });
174
+ // ── message:updated ─────────────────────────────────────────────────────
175
+ socket.on("message:updated", function (payload) {
176
+ var existing = findMessage(payload.messageId);
177
+ if (existing) {
178
+ dispatch((0, chatSlice_1.upsertMessage)(__assign(__assign({}, existing), { content: payload.content, gif: payload.gif, mentions: payload.mentions, metadata: payload.metadata, editedAt: payload.editedAt })));
179
+ }
180
+ });
181
+ // ── message:deleted ─────────────────────────────────────────────────────
182
+ socket.on("message:deleted", function (payload) {
183
+ var existing = findMessage(payload.messageId);
184
+ if (existing) {
185
+ dispatch((0, chatSlice_1.upsertMessage)(__assign(__assign({}, existing), { userDeletedAt: payload.userDeletedAt, content: null, gif: null, mentions: [], metadata: {}, files: undefined })));
186
+ }
187
+ });
188
+ // ── message:removed ─────────────────────────────────────────────────────
189
+ socket.on("message:removed", function (payload) {
190
+ var existing = findMessage(payload.messageId);
191
+ if (existing) {
192
+ dispatch((0, chatSlice_1.upsertMessage)(__assign(__assign({}, existing), { moderationStatus: "removed" })));
193
+ }
194
+ });
195
+ // ── message:reaction ────────────────────────────────────────────────────
196
+ socket.on("message:reaction", function (payload) {
197
+ var _a;
198
+ dispatch((0, chatSlice_1.updateReactions)({
199
+ conversationId: payload.conversationId,
200
+ messageId: payload.messageId,
201
+ reactionCounts: payload.reactionCounts,
202
+ userId: payload.userId,
203
+ emoji: payload.emoji,
204
+ delta: payload.delta,
205
+ currentUserId: (_a = currentUserIdRef.current) !== null && _a !== void 0 ? _a : "",
206
+ }));
207
+ });
208
+ // ── thread:reply_count ──────────────────────────────────────────────────
209
+ socket.on("thread:reply_count", function (payload) {
210
+ var existing = findMessage(payload.messageId);
211
+ if (existing) {
212
+ dispatch((0, chatSlice_1.upsertMessage)(__assign(__assign({}, existing), { threadReplyCount: payload.threadReplyCount })));
213
+ }
214
+ });
215
+ // ── typing:start ────────────────────────────────────────────────────────
216
+ socket.on("typing:start", function (_a) {
217
+ var userId = _a.userId, conversationId = _a.conversationId;
218
+ // Ignore self-loop (multiple tabs)
219
+ if (userId === currentUserIdRef.current)
220
+ return;
221
+ // Reset the 5-second auto-timeout for this user
222
+ clearTypingTimer(conversationId, userId);
223
+ if (!typingTimers.current.has(conversationId)) {
224
+ typingTimers.current.set(conversationId, new Map());
225
+ }
226
+ var convMap = typingTimers.current.get(conversationId);
227
+ // Add to Redux typing list if not already present
228
+ var currentTyping = Array.from(convMap.keys());
229
+ if (!currentTyping.includes(userId)) {
230
+ dispatch((0, chatSlice_1.setTypingUsers)({
231
+ conversationId: conversationId,
232
+ userIds: __spreadArray(__spreadArray([], currentTyping, true), [userId], false),
233
+ }));
234
+ }
235
+ // Set timeout to auto-remove after 5 seconds without a keep-alive
236
+ var timer = setTimeout(function () {
237
+ var _a;
238
+ removeTypingUser(conversationId, userId);
239
+ (_a = typingTimers.current.get(conversationId)) === null || _a === void 0 ? void 0 : _a.delete(userId);
240
+ }, 5000);
241
+ convMap.set(userId, timer);
242
+ });
243
+ // ── typing:stop ─────────────────────────────────────────────────────────
244
+ socket.on("typing:stop", function (_a) {
245
+ var userId = _a.userId, conversationId = _a.conversationId;
246
+ clearTypingTimer(conversationId, userId);
247
+ removeTypingUser(conversationId, userId);
248
+ });
249
+ // ── conversation:updated ────────────────────────────────────────────────
250
+ socket.on("conversation:updated", function (patch) {
251
+ var _a;
252
+ var existing = (_a = conversationsRef.current[patch.id]) === null || _a === void 0 ? void 0 : _a.data;
253
+ if (existing) {
254
+ dispatch((0, chatSlice_1.setConversation)(__assign(__assign({}, existing), patch)));
255
+ }
256
+ });
257
+ // ── Cleanup ─────────────────────────────────────────────────────────────
258
+ return function () {
259
+ socket.removeAllListeners();
260
+ socket.disconnect();
261
+ socketRef.current = null;
262
+ setSocketState(null);
263
+ setConnected(false);
264
+ dispatch((0, chatSlice_1.setSocketConnected)(false));
265
+ // Clear all pending typing timers
266
+ Array.from(typingTimers.current.values()).forEach(function (convMap) {
267
+ Array.from(convMap.values()).forEach(function (timer) {
268
+ clearTimeout(timer);
269
+ });
270
+ });
271
+ typingTimers.current.clear();
272
+ };
273
+ // eslint-disable-next-line react-hooks/exhaustive-deps
274
+ }, [projectId, hasToken]);
275
+ // ── Token refresh effect ────────────────────────────────────────────────────
276
+ // When the access token rotates (same socket, new credentials), update socket.auth
277
+ // and force a fresh handshake. Must NOT re-create the socket — that would clear all
278
+ // room memberships. Instead: update auth object, then disconnect().connect().
279
+ (0, react_1.useEffect)(function () {
280
+ var socket = socketRef.current;
281
+ if (!socket || !accessToken)
282
+ return;
283
+ if (prevTokenRef.current === accessToken)
284
+ return;
285
+ prevTokenRef.current = accessToken;
286
+ // socket.auth must be updated BEFORE disconnect().connect() —
287
+ // Socket.io auto-reconnect reuses the original auth object.
288
+ socket.auth = { token: accessToken };
289
+ socket.disconnect().connect();
290
+ }, [accessToken]);
291
+ return ((0, jsx_runtime_1.jsx)(exports.ChatContext.Provider, { value: {
292
+ socket: socketState,
293
+ connected: connected,
294
+ registerActiveConversation: registerActiveConversation,
295
+ unregisterActiveConversation: unregisterActiveConversation,
296
+ }, children: children }));
297
+ };
298
+ exports.ChatProvider = ChatProvider;
299
+ //# sourceMappingURL=chat-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-context.js","sourceRoot":"","sources":["../../../src/context/chat-context.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import React, { ReactNode } from "react";
2
+ import { UseConversationDataValues } from "../hooks/chat/useConversationData";
3
+ export interface ConversationContextValue extends UseConversationDataValues {
4
+ conversationId: string;
5
+ }
6
+ export declare const ConversationContext: React.Context<Partial<ConversationContextValue>>;
7
+ export declare function useConversationContext(): Partial<ConversationContextValue>;
8
+ export interface ConversationProviderProps {
9
+ conversationId: string;
10
+ /** Called when the conversation is deleted by an admin */
11
+ onDeleted?: () => void;
12
+ children: ReactNode;
13
+ }
14
+ export declare const ConversationProvider: React.FC<ConversationProviderProps>;
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.ConversationProvider = exports.ConversationContext = void 0;
54
+ exports.useConversationContext = useConversationContext;
55
+ var jsx_runtime_1 = require("react/jsx-runtime");
56
+ var react_1 = require("react");
57
+ var chat_context_1 = require("./chat-context");
58
+ var hooks_1 = require("../store/hooks");
59
+ var chatSlice_1 = require("../store/slices/chatSlice");
60
+ var useConversationData_1 = __importDefault(require("../hooks/chat/useConversationData"));
61
+ var useMarkConversationAsRead_1 = __importDefault(require("../hooks/chat/useMarkConversationAsRead"));
62
+ var useAxiosPrivate_1 = __importDefault(require("../config/useAxiosPrivate"));
63
+ var useProject_1 = __importDefault(require("../hooks/projects/useProject"));
64
+ var chatSlice_2 = require("../store/slices/chatSlice");
65
+ var handleError_1 = require("../utils/handleError");
66
+ exports.ConversationContext = (0, react_1.createContext)({});
67
+ function useConversationContext() {
68
+ return (0, react_1.useContext)(exports.ConversationContext);
69
+ }
70
+ var ConversationProvider = function (_a) {
71
+ var conversationId = _a.conversationId, onDeleted = _a.onDeleted, children = _a.children;
72
+ var dispatch = (0, hooks_1.useReplykeDispatch)();
73
+ var projectId = (0, useProject_1.default)().projectId;
74
+ var axios = (0, useAxiosPrivate_1.default)();
75
+ var _b = (0, chat_context_1.useChatContext)(), socket = _b.socket, registerActiveConversation = _b.registerActiveConversation, unregisterActiveConversation = _b.unregisterActiveConversation;
76
+ // Read the newest message id from Redux for reconnect catch-up
77
+ var newestMessageId = (0, hooks_1.useReplykeSelector)((0, chatSlice_1.selectNewestMessageId)(conversationId));
78
+ var newestMessageIdRef = (0, react_1.useRef)(newestMessageId);
79
+ (0, react_1.useEffect)(function () {
80
+ newestMessageIdRef.current = newestMessageId;
81
+ }, [newestMessageId]);
82
+ var mark = (0, useMarkConversationAsRead_1.default)({ conversationId: conversationId });
83
+ var catchUpMessages = (0, react_1.useCallback)(function (afterTimestamp) { return __awaiter(void 0, void 0, void 0, function () {
84
+ var response, messages, err_1;
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0:
88
+ if (!projectId || !conversationId)
89
+ return [2 /*return*/];
90
+ _a.label = 1;
91
+ case 1:
92
+ _a.trys.push([1, 3, , 4]);
93
+ return [4 /*yield*/, axios.get("/".concat(projectId, "/v7/chat/conversations/").concat(conversationId, "/messages"), { params: { after: afterTimestamp, limit: 100, sort: "asc" } })];
94
+ case 2:
95
+ response = _a.sent();
96
+ messages = response.data.messages;
97
+ messages.forEach(function (msg) { return dispatch((0, chatSlice_2.upsertMessage)(msg)); });
98
+ return [3 /*break*/, 4];
99
+ case 3:
100
+ err_1 = _a.sent();
101
+ (0, handleError_1.handleError)(err_1, "Failed to fetch missed messages");
102
+ return [3 /*break*/, 4];
103
+ case 4: return [2 /*return*/];
104
+ }
105
+ });
106
+ }); }, [projectId, conversationId, axios, dispatch]);
107
+ // Keep a ref to the messages state so socket handlers can find latest messages
108
+ var messagesRef = (0, react_1.useRef)([]);
109
+ var reduxMessages = (0, hooks_1.useReplykeSelector)(function (state) { var _a, _b; return (_b = (_a = state.replyke.chat.messages[conversationId]) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : []; });
110
+ (0, react_1.useEffect)(function () {
111
+ messagesRef.current = reduxMessages;
112
+ }, [reduxMessages]);
113
+ // ── Conversation data (messages, send, members, etc.) ─────────────────────
114
+ // Called before the socket effects so upsertMember / removeMemberLocally are
115
+ // available as stable callbacks in the member event handlers below.
116
+ var data = (0, useConversationData_1.default)({ conversationId: conversationId });
117
+ // ── Room join / leave ──────────────────────────────────────────────────────
118
+ (0, react_1.useEffect)(function () {
119
+ if (!socket || !conversationId)
120
+ return;
121
+ var room = conversationId;
122
+ // Register this conversation as active (suppresses unread increments in ChatProvider)
123
+ registerActiveConversation(room);
124
+ // Join the Socket.io room
125
+ socket.emit("join:conversation", { conversationId: conversationId });
126
+ // Mark as read on mount (catches up any unread before the view was opened)
127
+ var newestId = newestMessageIdRef.current;
128
+ if (newestId) {
129
+ mark(newestId);
130
+ }
131
+ return function () {
132
+ socket.emit("leave:conversation", { conversationId: conversationId });
133
+ unregisterActiveConversation(room);
134
+ };
135
+ }, [socket, conversationId, registerActiveConversation, unregisterActiveConversation, mark]);
136
+ // ── Reconnect handler ──────────────────────────────────────────────────────
137
+ // On reconnects (not the initial connect), re-join the room and catch up on
138
+ // messages that arrived during the disconnection window.
139
+ (0, react_1.useEffect)(function () {
140
+ if (!socket || !conversationId)
141
+ return;
142
+ // Track whether the initial connect has been observed so we can distinguish
143
+ // it from subsequent reconnects (socket.on("connect") fires on both).
144
+ var hasConnectedOnceRef = { current: socket.connected };
145
+ var handleConnect = function () { return __awaiter(void 0, void 0, void 0, function () {
146
+ var newest, newestMsg;
147
+ return __generator(this, function (_a) {
148
+ switch (_a.label) {
149
+ case 0:
150
+ if (!hasConnectedOnceRef.current) {
151
+ // Initial connect — the mount effect already joined the room.
152
+ hasConnectedOnceRef.current = true;
153
+ return [2 /*return*/];
154
+ }
155
+ // True reconnect: re-join the room and catch up on missed messages.
156
+ socket.emit("join:conversation", { conversationId: conversationId });
157
+ newest = newestMessageIdRef.current;
158
+ if (!newest) return [3 /*break*/, 2];
159
+ newestMsg = messagesRef.current.find(function (m) { return m.id === newest; });
160
+ if (!newestMsg) return [3 /*break*/, 2];
161
+ return [4 /*yield*/, catchUpMessages(new Date(newestMsg.createdAt).toISOString())];
162
+ case 1:
163
+ _a.sent();
164
+ _a.label = 2;
165
+ case 2: return [2 /*return*/];
166
+ }
167
+ });
168
+ }); };
169
+ socket.on("connect", handleConnect);
170
+ return function () {
171
+ socket.off("connect", handleConnect);
172
+ };
173
+ }, [socket, conversationId, catchUpMessages]);
174
+ // ── conversation:deleted ───────────────────────────────────────────────────
175
+ (0, react_1.useEffect)(function () {
176
+ if (!socket || !conversationId)
177
+ return;
178
+ var handleDeleted = function (_a) {
179
+ var deletedId = _a.conversationId;
180
+ if (deletedId !== conversationId)
181
+ return;
182
+ socket.emit("leave:conversation", { conversationId: conversationId });
183
+ unregisterActiveConversation(conversationId);
184
+ onDeleted === null || onDeleted === void 0 ? void 0 : onDeleted();
185
+ };
186
+ socket.on("conversation:deleted", handleDeleted);
187
+ return function () {
188
+ socket.off("conversation:deleted", handleDeleted);
189
+ };
190
+ }, [socket, conversationId, unregisterActiveConversation, onDeleted]);
191
+ // ── Member join / leave ────────────────────────────────────────────────────
192
+ // Update local members state when the server broadcasts member changes.
193
+ (0, react_1.useEffect)(function () {
194
+ if (!socket || !conversationId)
195
+ return;
196
+ var handleMemberJoined = function (payload) {
197
+ if (payload.conversationId !== conversationId)
198
+ return;
199
+ data.upsertMember(payload.member);
200
+ };
201
+ var handleMemberLeft = function (payload) {
202
+ if (payload.conversationId !== conversationId)
203
+ return;
204
+ data.removeMemberLocally(payload.userId);
205
+ };
206
+ socket.on("member:joined", handleMemberJoined);
207
+ socket.on("member:left", handleMemberLeft);
208
+ return function () {
209
+ socket.off("member:joined", handleMemberJoined);
210
+ socket.off("member:left", handleMemberLeft);
211
+ };
212
+ }, [socket, conversationId, data.upsertMember, data.removeMemberLocally]);
213
+ // ── Mark read on new messages ──────────────────────────────────────────────
214
+ // While this conversation is mounted, each incoming message is immediately marked read.
215
+ (0, react_1.useEffect)(function () {
216
+ if (!socket || !conversationId)
217
+ return;
218
+ var handleMessage = function (message) {
219
+ if (message.conversationId !== conversationId)
220
+ return;
221
+ mark(message.id);
222
+ };
223
+ socket.on("message:created", handleMessage);
224
+ return function () {
225
+ socket.off("message:created", handleMessage);
226
+ };
227
+ }, [socket, conversationId, mark]);
228
+ return ((0, jsx_runtime_1.jsx)(exports.ConversationContext.Provider, { value: __assign(__assign({}, data), { conversationId: conversationId }), children: children }));
229
+ };
230
+ exports.ConversationProvider = ConversationProvider;
231
+ //# sourceMappingURL=conversation-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-context.js","sourceRoot":"","sources":["../../../src/context/conversation-context.tsx"],"names":[],"mappings":"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"}
@@ -4,3 +4,6 @@ export { ReplykeIntegrationProvider } from "./replyke-integration-context";
4
4
  export { EntityProvider } from "./entity-context";
5
5
  export { CommentSectionProvider } from "./comment-section-context";
6
6
  export { SpaceProvider } from "./space-context";
7
+ export { ChatProvider, ChatContext, useChatContext, type ChatContextValue, type ChatProviderProps, } from "./chat-context";
8
+ export { ConversationProvider, ConversationContext, useConversationContext, type ConversationContextValue, type ConversationProviderProps, } from "./conversation-context";
9
+ export { MessageThreadProvider, MessageThreadContext, useMessageThreadContext, type MessageThreadContextValue, type MessageThreadProviderProps, } from "./message-thread-context";