hazo_chat 2.0.11 → 2.0.12

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 (154) hide show
  1. package/README.md +43 -6
  2. package/package.json +3 -2
  3. package/dist/api/index.d.ts +0 -26
  4. package/dist/api/index.d.ts.map +0 -1
  5. package/dist/api/index.js +0 -25
  6. package/dist/api/index.js.map +0 -1
  7. package/dist/api/messages.d.ts +0 -34
  8. package/dist/api/messages.d.ts.map +0 -1
  9. package/dist/api/messages.js +0 -214
  10. package/dist/api/messages.js.map +0 -1
  11. package/dist/api/types.d.ts +0 -69
  12. package/dist/api/types.d.ts.map +0 -1
  13. package/dist/api/types.js +0 -8
  14. package/dist/api/types.js.map +0 -1
  15. package/dist/api/unread_count.d.ts +0 -57
  16. package/dist/api/unread_count.d.ts.map +0 -1
  17. package/dist/api/unread_count.js +0 -86
  18. package/dist/api/unread_count.js.map +0 -1
  19. package/dist/components/hazo_chat/hazo_chat.d.ts +0 -28
  20. package/dist/components/hazo_chat/hazo_chat.d.ts.map +0 -1
  21. package/dist/components/hazo_chat/hazo_chat.js +0 -201
  22. package/dist/components/hazo_chat/hazo_chat.js.map +0 -1
  23. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts +0 -17
  24. package/dist/components/hazo_chat/hazo_chat_attachment_preview.d.ts.map +0 -1
  25. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js +0 -60
  26. package/dist/components/hazo_chat/hazo_chat_attachment_preview.js.map +0 -1
  27. package/dist/components/hazo_chat/hazo_chat_context.d.ts +0 -42
  28. package/dist/components/hazo_chat/hazo_chat_context.d.ts.map +0 -1
  29. package/dist/components/hazo_chat/hazo_chat_context.js +0 -273
  30. package/dist/components/hazo_chat/hazo_chat_context.js.map +0 -1
  31. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts +0 -15
  32. package/dist/components/hazo_chat/hazo_chat_document_viewer.d.ts.map +0 -1
  33. package/dist/components/hazo_chat/hazo_chat_document_viewer.js +0 -111
  34. package/dist/components/hazo_chat/hazo_chat_document_viewer.js.map +0 -1
  35. package/dist/components/hazo_chat/hazo_chat_header.d.ts +0 -16
  36. package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +0 -1
  37. package/dist/components/hazo_chat/hazo_chat_header.js +0 -24
  38. package/dist/components/hazo_chat/hazo_chat_header.js.map +0 -1
  39. package/dist/components/hazo_chat/hazo_chat_input.d.ts +0 -16
  40. package/dist/components/hazo_chat/hazo_chat_input.d.ts.map +0 -1
  41. package/dist/components/hazo_chat/hazo_chat_input.js +0 -75
  42. package/dist/components/hazo_chat/hazo_chat_input.js.map +0 -1
  43. package/dist/components/hazo_chat/hazo_chat_messages.d.ts +0 -17
  44. package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +0 -1
  45. package/dist/components/hazo_chat/hazo_chat_messages.js +0 -109
  46. package/dist/components/hazo_chat/hazo_chat_messages.js.map +0 -1
  47. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts +0 -16
  48. package/dist/components/hazo_chat/hazo_chat_reference_list.d.ts.map +0 -1
  49. package/dist/components/hazo_chat/hazo_chat_reference_list.js +0 -59
  50. package/dist/components/hazo_chat/hazo_chat_reference_list.js.map +0 -1
  51. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts +0 -18
  52. package/dist/components/hazo_chat/hazo_chat_sidebar.d.ts.map +0 -1
  53. package/dist/components/hazo_chat/hazo_chat_sidebar.js +0 -72
  54. package/dist/components/hazo_chat/hazo_chat_sidebar.js.map +0 -1
  55. package/dist/components/hazo_chat/index.d.ts +0 -16
  56. package/dist/components/hazo_chat/index.d.ts.map +0 -1
  57. package/dist/components/hazo_chat/index.js +0 -19
  58. package/dist/components/hazo_chat/index.js.map +0 -1
  59. package/dist/components/index.d.ts +0 -9
  60. package/dist/components/index.d.ts.map +0 -1
  61. package/dist/components/index.js +0 -11
  62. package/dist/components/index.js.map +0 -1
  63. package/dist/components/ui/avatar.d.ts +0 -13
  64. package/dist/components/ui/avatar.d.ts.map +0 -1
  65. package/dist/components/ui/avatar.js +0 -28
  66. package/dist/components/ui/avatar.js.map +0 -1
  67. package/dist/components/ui/badge.d.ts +0 -16
  68. package/dist/components/ui/badge.d.ts.map +0 -1
  69. package/dist/components/ui/badge.js +0 -36
  70. package/dist/components/ui/badge.js.map +0 -1
  71. package/dist/components/ui/button.d.ts +0 -18
  72. package/dist/components/ui/button.d.ts.map +0 -1
  73. package/dist/components/ui/button.js +0 -47
  74. package/dist/components/ui/button.js.map +0 -1
  75. package/dist/components/ui/chat_bubble.d.ts +0 -18
  76. package/dist/components/ui/chat_bubble.d.ts.map +0 -1
  77. package/dist/components/ui/chat_bubble.js +0 -107
  78. package/dist/components/ui/chat_bubble.js.map +0 -1
  79. package/dist/components/ui/hover-card.d.ts +0 -13
  80. package/dist/components/ui/hover-card.d.ts.map +0 -1
  81. package/dist/components/ui/hover-card.js +0 -17
  82. package/dist/components/ui/hover-card.js.map +0 -1
  83. package/dist/components/ui/index.d.ts +0 -19
  84. package/dist/components/ui/index.d.ts.map +0 -1
  85. package/dist/components/ui/index.js +0 -21
  86. package/dist/components/ui/index.js.map +0 -1
  87. package/dist/components/ui/input.d.ts +0 -11
  88. package/dist/components/ui/input.d.ts.map +0 -1
  89. package/dist/components/ui/input.js +0 -18
  90. package/dist/components/ui/input.js.map +0 -1
  91. package/dist/components/ui/loading_skeleton.d.ts +0 -19
  92. package/dist/components/ui/loading_skeleton.d.ts.map +0 -1
  93. package/dist/components/ui/loading_skeleton.js +0 -30
  94. package/dist/components/ui/loading_skeleton.js.map +0 -1
  95. package/dist/components/ui/scroll-area.d.ts +0 -12
  96. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  97. package/dist/components/ui/scroll-area.js +0 -25
  98. package/dist/components/ui/scroll-area.js.map +0 -1
  99. package/dist/components/ui/separator.d.ts +0 -11
  100. package/dist/components/ui/separator.d.ts.map +0 -1
  101. package/dist/components/ui/separator.js +0 -18
  102. package/dist/components/ui/separator.js.map +0 -1
  103. package/dist/components/ui/skeleton.d.ts +0 -9
  104. package/dist/components/ui/skeleton.d.ts.map +0 -1
  105. package/dist/components/ui/skeleton.js +0 -16
  106. package/dist/components/ui/skeleton.js.map +0 -1
  107. package/dist/components/ui/textarea.d.ts +0 -11
  108. package/dist/components/ui/textarea.d.ts.map +0 -1
  109. package/dist/components/ui/textarea.js +0 -18
  110. package/dist/components/ui/textarea.js.map +0 -1
  111. package/dist/components/ui/tooltip.d.ts +0 -14
  112. package/dist/components/ui/tooltip.d.ts.map +0 -1
  113. package/dist/components/ui/tooltip.js +0 -30
  114. package/dist/components/ui/tooltip.js.map +0 -1
  115. package/dist/hooks/index.d.ts +0 -10
  116. package/dist/hooks/index.d.ts.map +0 -1
  117. package/dist/hooks/index.js +0 -10
  118. package/dist/hooks/index.js.map +0 -1
  119. package/dist/hooks/use_chat_messages.d.ts +0 -33
  120. package/dist/hooks/use_chat_messages.d.ts.map +0 -1
  121. package/dist/hooks/use_chat_messages.js +0 -466
  122. package/dist/hooks/use_chat_messages.js.map +0 -1
  123. package/dist/hooks/use_chat_references.d.ts +0 -17
  124. package/dist/hooks/use_chat_references.d.ts.map +0 -1
  125. package/dist/hooks/use_chat_references.js +0 -133
  126. package/dist/hooks/use_chat_references.js.map +0 -1
  127. package/dist/hooks/use_file_upload.d.ts +0 -23
  128. package/dist/hooks/use_file_upload.d.ts.map +0 -1
  129. package/dist/hooks/use_file_upload.js +0 -212
  130. package/dist/hooks/use_file_upload.js.map +0 -1
  131. package/dist/index.d.ts +0 -13
  132. package/dist/index.d.ts.map +0 -1
  133. package/dist/index.js +0 -17
  134. package/dist/index.js.map +0 -1
  135. package/dist/lib/config.d.ts +0 -41
  136. package/dist/lib/config.d.ts.map +0 -1
  137. package/dist/lib/config.js +0 -93
  138. package/dist/lib/config.js.map +0 -1
  139. package/dist/lib/constants.d.ts +0 -41
  140. package/dist/lib/constants.d.ts.map +0 -1
  141. package/dist/lib/constants.js +0 -72
  142. package/dist/lib/constants.js.map +0 -1
  143. package/dist/lib/index.d.ts +0 -9
  144. package/dist/lib/index.d.ts.map +0 -1
  145. package/dist/lib/index.js +0 -9
  146. package/dist/lib/index.js.map +0 -1
  147. package/dist/lib/utils.d.ts +0 -17
  148. package/dist/lib/utils.d.ts.map +0 -1
  149. package/dist/lib/utils.js +0 -20
  150. package/dist/lib/utils.js.map +0 -1
  151. package/dist/types/index.d.ts +0 -404
  152. package/dist/types/index.d.ts.map +0 -1
  153. package/dist/types/index.js +0 -11
  154. package/dist/types/index.js.map +0 -1
@@ -1,33 +0,0 @@
1
- /**
2
- * useChatMessages Hook
3
- *
4
- * Manages chat messages with:
5
- * - Cursor-based pagination (infinite scroll)
6
- * - Polling for new messages with configurable interval
7
- * - Optimistic updates for sent messages
8
- * - Soft delete functionality
9
- * - Exponential backoff on errors
10
- *
11
- * Uses fetch() to call API endpoints instead of direct database access.
12
- * This allows the hook to work in client components without Node.js dependencies.
13
- */
14
- import type { UseChatMessagesReturn } from '../types/index.js';
15
- import type { RealtimeMode } from '../types/index.js';
16
- export interface UseChatMessagesParams {
17
- /** UUID of the chat recipient (required) */
18
- receiver_user_id: string;
19
- /** Reference ID for chat context grouping */
20
- reference_id?: string;
21
- /** Reference type (default: 'chat') */
22
- reference_type?: string;
23
- /** Base URL for API endpoints (default: '/api/hazo_chat') */
24
- api_base_url?: string;
25
- /** Real-time update mode: 'polling' (automatic) or 'manual' (refresh only) */
26
- realtime_mode?: RealtimeMode;
27
- /** Polling interval in milliseconds (only used when realtime_mode = 'polling', default: 5000) */
28
- polling_interval?: number;
29
- /** Number of messages per page for pagination (default: 20) */
30
- messages_per_page?: number;
31
- }
32
- export declare function useChatMessages({ receiver_user_id, reference_id, reference_type, api_base_url, realtime_mode, polling_interval, messages_per_page }: UseChatMessagesParams): UseChatMessagesReturn;
33
- //# sourceMappingURL=use_chat_messages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_chat_messages.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAKV,qBAAqB,EAEtB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA6BD,wBAAgB,eAAe,CAAC,EAC9B,gBAAgB,EAChB,YAAiB,EACjB,cAAuB,EACvB,YAA+B,EAC/B,aAAqC,EACrC,gBAA2C,EAC3C,iBAA6C,EAC9C,EAAE,qBAAqB,GAAG,qBAAqB,CA6hB/C"}
@@ -1,466 +0,0 @@
1
- /**
2
- * useChatMessages Hook
3
- *
4
- * Manages chat messages with:
5
- * - Cursor-based pagination (infinite scroll)
6
- * - Polling for new messages with configurable interval
7
- * - Optimistic updates for sent messages
8
- * - Soft delete functionality
9
- * - Exponential backoff on errors
10
- *
11
- * Uses fetch() to call API endpoints instead of direct database access.
12
- * This allows the hook to work in client components without Node.js dependencies.
13
- */
14
- 'use client';
15
- import { useState, useEffect, useCallback, useRef } from 'react';
16
- import { DEFAULT_REALTIME_MODE, DEFAULT_POLLING_INTERVAL, DEFAULT_MESSAGES_PER_PAGE, MAX_RETRY_ATTEMPTS, RETRY_BASE_DELAY } from '../lib/constants.js';
17
- // ============================================================================
18
- // Hook Implementation
19
- // ============================================================================
20
- export function useChatMessages({ receiver_user_id, reference_id = '', reference_type = 'chat', api_base_url = '/api/hazo_chat', realtime_mode = DEFAULT_REALTIME_MODE, polling_interval = DEFAULT_POLLING_INTERVAL, messages_per_page = DEFAULT_MESSAGES_PER_PAGE }) {
21
- // -------------------------------------------------------------------------
22
- // State
23
- // -------------------------------------------------------------------------
24
- const [messages, set_messages] = useState([]);
25
- const [is_loading, set_is_loading] = useState(true);
26
- const [is_loading_more, set_is_loading_more] = useState(false);
27
- const [has_more, set_has_more] = useState(true);
28
- const [error, set_error] = useState(null);
29
- const [polling_status, set_polling_status] = useState('connected');
30
- const [current_user_id, set_current_user_id] = useState(null);
31
- // -------------------------------------------------------------------------
32
- // Refs
33
- // -------------------------------------------------------------------------
34
- const cursor_ref = useRef(0);
35
- const retry_count_ref = useRef(0);
36
- const user_profiles_cache_ref = useRef(new Map());
37
- const polling_timer_ref = useRef(null);
38
- const is_mounted_ref = useRef(true);
39
- // -------------------------------------------------------------------------
40
- // Cleanup on unmount
41
- // -------------------------------------------------------------------------
42
- useEffect(() => {
43
- is_mounted_ref.current = true;
44
- return () => {
45
- is_mounted_ref.current = false;
46
- if (polling_timer_ref.current) {
47
- clearInterval(polling_timer_ref.current);
48
- }
49
- };
50
- }, []);
51
- // -------------------------------------------------------------------------
52
- // Fetch user profiles via API
53
- // -------------------------------------------------------------------------
54
- const fetch_user_profiles = useCallback(async (user_ids) => {
55
- const uncached_ids = user_ids.filter((id) => !user_profiles_cache_ref.current.has(id));
56
- if (uncached_ids.length > 0) {
57
- try {
58
- // Use the hazo_auth profiles endpoint
59
- const response = await fetch('/api/hazo_auth/profiles', {
60
- method: 'POST',
61
- headers: { 'Content-Type': 'application/json' },
62
- body: JSON.stringify({ user_ids: uncached_ids }),
63
- credentials: 'include'
64
- });
65
- if (response.ok) {
66
- const data = await response.json();
67
- if (data.success && data.profiles) {
68
- data.profiles.forEach((profile) => {
69
- user_profiles_cache_ref.current.set(profile.id, profile);
70
- });
71
- }
72
- }
73
- }
74
- catch (err) {
75
- console.error('[useChatMessages] Failed to fetch user profiles:', err);
76
- }
77
- }
78
- return user_profiles_cache_ref.current;
79
- }, []);
80
- // -------------------------------------------------------------------------
81
- // Transform DB messages to ChatMessage
82
- // -------------------------------------------------------------------------
83
- const transform_messages = useCallback(async (db_messages, user_id) => {
84
- // Collect all unique user IDs
85
- const user_ids = new Set();
86
- db_messages.forEach((msg) => {
87
- user_ids.add(msg.sender_user_id);
88
- user_ids.add(msg.receiver_user_id);
89
- });
90
- // Fetch profiles
91
- const profiles = await fetch_user_profiles(Array.from(user_ids));
92
- // Transform messages
93
- return db_messages.map((msg) => ({
94
- ...msg,
95
- sender_profile: profiles.get(msg.sender_user_id),
96
- receiver_profile: profiles.get(msg.receiver_user_id),
97
- is_sender: msg.sender_user_id === user_id,
98
- send_status: 'sent'
99
- }));
100
- }, [fetch_user_profiles]);
101
- // -------------------------------------------------------------------------
102
- // Fetch messages via API
103
- // -------------------------------------------------------------------------
104
- const fetch_messages_from_api = useCallback(async () => {
105
- if (!receiver_user_id) {
106
- return { messages: [], user_id: null };
107
- }
108
- try {
109
- const params = new URLSearchParams({
110
- receiver_user_id,
111
- ...(reference_id && { reference_id }),
112
- ...(reference_type && { reference_type }),
113
- });
114
- const response = await fetch(`${api_base_url}/messages?${params.toString()}`, {
115
- credentials: 'include'
116
- });
117
- if (!response.ok) {
118
- throw new Error(`HTTP ${response.status}`);
119
- }
120
- const data = await response.json();
121
- if (data.success) {
122
- return {
123
- messages: data.messages || [],
124
- user_id: data.current_user_id || null
125
- };
126
- }
127
- else {
128
- throw new Error(data.error || 'Failed to fetch messages');
129
- }
130
- }
131
- catch (err) {
132
- console.error('[useChatMessages] Fetch error:', err);
133
- throw err;
134
- }
135
- }, [receiver_user_id, reference_id, reference_type, api_base_url]);
136
- // -------------------------------------------------------------------------
137
- // Initial load
138
- // -------------------------------------------------------------------------
139
- const load_initial = useCallback(async () => {
140
- if (!receiver_user_id) {
141
- set_is_loading(false);
142
- return;
143
- }
144
- set_is_loading(true);
145
- set_error(null);
146
- try {
147
- const { messages: db_messages, user_id } = await fetch_messages_from_api();
148
- if (user_id && is_mounted_ref.current) {
149
- set_current_user_id(user_id);
150
- }
151
- if (is_mounted_ref.current) {
152
- const transformed = user_id
153
- ? await transform_messages(db_messages, user_id)
154
- : db_messages.map(msg => ({ ...msg, is_sender: false, send_status: 'sent' }));
155
- set_messages(transformed);
156
- set_has_more(db_messages.length >= messages_per_page);
157
- cursor_ref.current = db_messages.length;
158
- retry_count_ref.current = 0;
159
- set_polling_status('connected');
160
- }
161
- }
162
- catch (err) {
163
- if (is_mounted_ref.current) {
164
- set_error('Failed to load messages');
165
- set_polling_status('error');
166
- }
167
- }
168
- finally {
169
- if (is_mounted_ref.current) {
170
- set_is_loading(false);
171
- }
172
- }
173
- }, [receiver_user_id, fetch_messages_from_api, transform_messages, messages_per_page]);
174
- // -------------------------------------------------------------------------
175
- // Load more (pagination) - Note: simplified, API should support pagination params
176
- // -------------------------------------------------------------------------
177
- const load_more = useCallback(async () => {
178
- if (!current_user_id || !has_more || is_loading_more) {
179
- return;
180
- }
181
- set_is_loading_more(true);
182
- try {
183
- // For now, reload all messages - pagination can be added to API later
184
- const { messages: db_messages } = await fetch_messages_from_api();
185
- const transformed = await transform_messages(db_messages, current_user_id);
186
- if (is_mounted_ref.current) {
187
- set_messages(transformed);
188
- set_has_more(false); // Simplified - loaded all
189
- cursor_ref.current = db_messages.length;
190
- }
191
- }
192
- catch (err) {
193
- console.error('[useChatMessages] Load more error:', err);
194
- }
195
- finally {
196
- if (is_mounted_ref.current) {
197
- set_is_loading_more(false);
198
- }
199
- }
200
- }, [current_user_id, has_more, is_loading_more, fetch_messages_from_api, transform_messages]);
201
- // -------------------------------------------------------------------------
202
- // Poll for new messages
203
- // -------------------------------------------------------------------------
204
- const poll_for_new_messages = useCallback(async () => {
205
- if (!current_user_id || !receiver_user_id) {
206
- return;
207
- }
208
- try {
209
- const { messages: db_messages } = await fetch_messages_from_api();
210
- if (db_messages.length > 0 && is_mounted_ref.current) {
211
- const transformed = await transform_messages(db_messages, current_user_id);
212
- set_messages((prev) => {
213
- // Merge new messages, avoiding duplicates
214
- const existing_ids = new Set(prev.map(m => m.id));
215
- const new_messages = transformed.filter(m => !existing_ids.has(m.id));
216
- if (new_messages.length > 0) {
217
- // Combine and sort by created_at
218
- const combined = [...prev, ...new_messages];
219
- combined.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
220
- return combined;
221
- }
222
- return prev;
223
- });
224
- }
225
- retry_count_ref.current = 0;
226
- if (is_mounted_ref.current) {
227
- set_polling_status('connected');
228
- }
229
- }
230
- catch (err) {
231
- console.error('[useChatMessages] Polling error:', err);
232
- retry_count_ref.current += 1;
233
- if (is_mounted_ref.current) {
234
- if (retry_count_ref.current >= MAX_RETRY_ATTEMPTS) {
235
- set_polling_status('error');
236
- }
237
- else {
238
- set_polling_status('reconnecting');
239
- }
240
- }
241
- }
242
- }, [current_user_id, receiver_user_id, fetch_messages_from_api, transform_messages]);
243
- // -------------------------------------------------------------------------
244
- // Start polling (only if realtime_mode is 'polling')
245
- // -------------------------------------------------------------------------
246
- useEffect(() => {
247
- // Only start polling if mode is 'polling'
248
- if (realtime_mode !== 'polling' || !receiver_user_id) {
249
- // Clear any existing timer if switching to manual mode
250
- if (polling_timer_ref.current) {
251
- clearInterval(polling_timer_ref.current);
252
- polling_timer_ref.current = null;
253
- }
254
- // Set status to connected for manual mode (no polling needed)
255
- if (realtime_mode === 'manual') {
256
- set_polling_status('connected');
257
- }
258
- return;
259
- }
260
- // Clear any existing timer
261
- if (polling_timer_ref.current) {
262
- clearInterval(polling_timer_ref.current);
263
- }
264
- // Calculate delay with exponential backoff
265
- const get_poll_delay = () => {
266
- if (retry_count_ref.current === 0) {
267
- return polling_interval;
268
- }
269
- return Math.min(polling_interval * Math.pow(2, retry_count_ref.current), RETRY_BASE_DELAY * 30 // Cap at 30 seconds
270
- );
271
- };
272
- const start_polling = () => {
273
- polling_timer_ref.current = setInterval(() => {
274
- poll_for_new_messages();
275
- }, get_poll_delay());
276
- };
277
- start_polling();
278
- return () => {
279
- if (polling_timer_ref.current) {
280
- clearInterval(polling_timer_ref.current);
281
- }
282
- };
283
- }, [receiver_user_id, realtime_mode, polling_interval, poll_for_new_messages]);
284
- // -------------------------------------------------------------------------
285
- // Initial load effect
286
- // -------------------------------------------------------------------------
287
- useEffect(() => {
288
- load_initial();
289
- }, [load_initial]);
290
- // -------------------------------------------------------------------------
291
- // Send message via API
292
- // -------------------------------------------------------------------------
293
- const send_message = useCallback(async (payload) => {
294
- if (!current_user_id) {
295
- set_error('Not authenticated');
296
- return false;
297
- }
298
- // Create optimistic message
299
- const optimistic_id = `optimistic-${Date.now()}`;
300
- const optimistic_message = {
301
- id: optimistic_id,
302
- reference_id: payload.reference_id,
303
- reference_type: payload.reference_type,
304
- sender_user_id: current_user_id,
305
- receiver_user_id: payload.receiver_user_id,
306
- message_text: payload.message_text,
307
- reference_list: payload.reference_list || null,
308
- read_at: null,
309
- deleted_at: null,
310
- created_at: new Date().toISOString(),
311
- changed_at: new Date().toISOString(),
312
- sender_profile: user_profiles_cache_ref.current.get(current_user_id),
313
- receiver_profile: user_profiles_cache_ref.current.get(payload.receiver_user_id),
314
- is_sender: true,
315
- send_status: 'sending'
316
- };
317
- // Add optimistic message to state
318
- set_messages((prev) => [...prev, optimistic_message]);
319
- try {
320
- const response = await fetch(`${api_base_url}/messages`, {
321
- method: 'POST',
322
- headers: { 'Content-Type': 'application/json' },
323
- credentials: 'include',
324
- body: JSON.stringify({
325
- receiver_user_id: payload.receiver_user_id,
326
- message_text: payload.message_text,
327
- reference_id: payload.reference_id,
328
- reference_type: payload.reference_type,
329
- }),
330
- });
331
- const data = await response.json();
332
- if (data.success && data.message && is_mounted_ref.current) {
333
- // Replace optimistic message with real one
334
- const real_message = {
335
- ...data.message,
336
- // Ensure all required fields are set with proper defaults
337
- reference_list: data.message.reference_list ?? null,
338
- read_at: data.message.read_at ?? null,
339
- deleted_at: data.message.deleted_at ?? null,
340
- changed_at: data.message.changed_at ?? data.message.created_at,
341
- sender_profile: user_profiles_cache_ref.current.get(current_user_id),
342
- receiver_profile: user_profiles_cache_ref.current.get(payload.receiver_user_id),
343
- is_sender: true,
344
- send_status: 'sent'
345
- };
346
- set_messages((prev) => {
347
- // Check if real message already exists (from polling)
348
- const real_message_exists = prev.some(msg => msg.id === real_message.id);
349
- if (real_message_exists) {
350
- // Real message already exists from polling, just remove optimistic one
351
- return prev.filter(msg => msg.id !== optimistic_id);
352
- }
353
- else {
354
- // Replace optimistic message with real one
355
- const replaced = prev.map((msg) => msg.id === optimistic_id ? real_message : msg);
356
- // Sort to ensure correct chronological order
357
- return replaced.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
358
- }
359
- });
360
- return true;
361
- }
362
- else {
363
- throw new Error(data.error || 'Failed to send message');
364
- }
365
- }
366
- catch (err) {
367
- console.error('[useChatMessages] Send error:', err);
368
- // Mark optimistic message as failed
369
- if (is_mounted_ref.current) {
370
- set_messages((prev) => prev.map((msg) => msg.id === optimistic_id
371
- ? { ...msg, send_status: 'failed' }
372
- : msg));
373
- }
374
- return false;
375
- }
376
- }, [current_user_id, api_base_url]);
377
- // -------------------------------------------------------------------------
378
- // Delete message (soft delete) via API
379
- // -------------------------------------------------------------------------
380
- const delete_message = useCallback(async (message_id) => {
381
- if (!current_user_id) {
382
- return false;
383
- }
384
- // Find the message to verify ownership
385
- const message = messages.find((m) => m.id === message_id);
386
- if (!message || message.sender_user_id !== current_user_id) {
387
- set_error('Cannot delete this message');
388
- return false;
389
- }
390
- // Optimistic update
391
- set_messages((prev) => prev.map((msg) => msg.id === message_id
392
- ? { ...msg, deleted_at: new Date().toISOString(), message_text: null }
393
- : msg));
394
- try {
395
- const response = await fetch(`${api_base_url}/messages/${message_id}`, {
396
- method: 'DELETE',
397
- credentials: 'include'
398
- });
399
- if (!response.ok) {
400
- throw new Error('Failed to delete message');
401
- }
402
- return true;
403
- }
404
- catch (err) {
405
- console.error('[useChatMessages] Delete error:', err);
406
- // Rollback on error
407
- if (is_mounted_ref.current) {
408
- set_messages((prev) => prev.map((msg) => msg.id === message_id
409
- ? { ...msg, deleted_at: message.deleted_at, message_text: message.message_text }
410
- : msg));
411
- }
412
- return false;
413
- }
414
- }, [current_user_id, messages, api_base_url]);
415
- // -------------------------------------------------------------------------
416
- // Mark as read via API
417
- // -------------------------------------------------------------------------
418
- const mark_as_read = useCallback(async (message_id) => {
419
- if (!current_user_id) {
420
- return;
421
- }
422
- const message = messages.find((m) => m.id === message_id);
423
- if (!message || message.read_at || message.sender_user_id === current_user_id) {
424
- return;
425
- }
426
- try {
427
- const response = await fetch(`${api_base_url}/messages/${message_id}/read`, {
428
- method: 'PATCH',
429
- credentials: 'include'
430
- });
431
- if (response.ok && is_mounted_ref.current) {
432
- set_messages((prev) => prev.map((msg) => msg.id === message_id
433
- ? { ...msg, read_at: new Date().toISOString() }
434
- : msg));
435
- }
436
- }
437
- catch (err) {
438
- console.error('[useChatMessages] Mark as read error:', err);
439
- }
440
- }, [current_user_id, messages, api_base_url]);
441
- // -------------------------------------------------------------------------
442
- // Refresh
443
- // -------------------------------------------------------------------------
444
- const refresh = useCallback(() => {
445
- cursor_ref.current = 0;
446
- set_messages([]);
447
- load_initial();
448
- }, [load_initial]);
449
- // -------------------------------------------------------------------------
450
- // Return
451
- // -------------------------------------------------------------------------
452
- return {
453
- messages,
454
- is_loading,
455
- is_loading_more,
456
- has_more,
457
- error,
458
- polling_status,
459
- load_more,
460
- send_message,
461
- delete_message,
462
- mark_as_read,
463
- refresh
464
- };
465
- }
466
- //# sourceMappingURL=use_chat_messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_chat_messages.js","sourceRoot":"","sources":["../../src/hooks/use_chat_messages.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- /**
2
- * useChatReferences Hook
3
- *
4
- * Manages chat references with:
5
- * - Aggregating references from messages and props
6
- * - Selection state management
7
- * - Finding source message for a reference
8
- */
9
- import type { ChatReferenceItem, ChatMessage, ReferenceItem, UseChatReferencesReturn } from '../types/index.js';
10
- interface UseChatReferencesParams {
11
- messages: ChatMessage[];
12
- initial_references?: ReferenceItem[];
13
- on_selection_change?: (reference: ChatReferenceItem | null) => void;
14
- }
15
- export declare function useChatReferences({ messages, initial_references, on_selection_change }: UseChatReferencesParams): UseChatReferencesReturn;
16
- export {};
17
- //# sourceMappingURL=use_chat_references.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_chat_references.d.ts","sourceRoot":"","sources":["../../src/hooks/use_chat_references.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAM3B,UAAU,uBAAuB;IAC/B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,aAAa,EAAE,CAAC;IACrC,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CACrE;AAMD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,kBAAuB,EACvB,mBAAmB,EACpB,EAAE,uBAAuB,GAAG,uBAAuB,CA6InD"}