hazo_collab_forms 1.6.14 → 1.6.15
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.
- package/dist/components/hazo_collab_form_summary/index.d.ts.map +1 -1
- package/dist/components/hazo_collab_form_summary/index.js +50 -5
- package/dist/components/hazo_collab_form_summary/index.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/use_field_chat_status.d.ts +55 -0
- package/dist/utils/use_field_chat_status.d.ts.map +1 -0
- package/dist/utils/use_field_chat_status.js +154 -0
- package/dist/utils/use_field_chat_status.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_collab_form_summary/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAmF,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_collab_form_summary/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAmF,MAAM,OAAO,CAAC;AAIxG,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EAIzB,MAAM,YAAY,CAAC;AAMpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,qBAAqB,6GAoWhC,CAAC;AAGH,YAAY,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,WAAW,EACX,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAe,qBAAqB,CAAC"}
|
|
@@ -10,7 +10,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
10
10
|
import { useRef, useImperativeHandle, forwardRef, useMemo, useEffect } from 'react';
|
|
11
11
|
import { cn } from '../../utils/cn.js';
|
|
12
12
|
import { DEFAULT_DATE_FORMAT } from '../../utils/date_format.js';
|
|
13
|
-
import {
|
|
13
|
+
import { use_field_chat_status } from '../../utils/use_field_chat_status.js';
|
|
14
|
+
import { get_fields_set_name, get_fields_set_fields } from './types.js';
|
|
14
15
|
import { SummaryContext } from './context.js';
|
|
15
16
|
import { SummarySection } from './summary_section.js';
|
|
16
17
|
import { normalize_field_metadata_record, validate_summary_props } from './utils.js';
|
|
@@ -103,6 +104,50 @@ export const HazoCollabFormSummary = forwardRef(function HazoCollabFormSummary(p
|
|
|
103
104
|
[field_metadata_key]);
|
|
104
105
|
// Similarly for form_data - use JSON.stringify to detect mutations
|
|
105
106
|
const form_data_key = JSON.stringify(form_data);
|
|
107
|
+
// Collect all field IDs from sections for chat status checking
|
|
108
|
+
const all_field_ids = useMemo(() => {
|
|
109
|
+
const field_ids = [];
|
|
110
|
+
const process_fields = (field_list) => {
|
|
111
|
+
field_list.forEach((field) => {
|
|
112
|
+
field_ids.push(field.id);
|
|
113
|
+
// Process sub_fields if it's a group
|
|
114
|
+
if (field.field_type === 'group' && field.sub_fields) {
|
|
115
|
+
process_fields(field.sub_fields);
|
|
116
|
+
}
|
|
117
|
+
// Process DataTable rows - they use format: ${fieldId}:${rowId}
|
|
118
|
+
// These will be handled by the chat system using the field ID as reference
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
sections.forEach((section) => {
|
|
122
|
+
const fields = get_fields_set_fields(section);
|
|
123
|
+
process_fields(fields);
|
|
124
|
+
});
|
|
125
|
+
return field_ids;
|
|
126
|
+
}, [sections]);
|
|
127
|
+
// Use the shared hook to fetch chat status for all fields
|
|
128
|
+
const { chat_status: fetched_chat_status } = use_field_chat_status({
|
|
129
|
+
field_ids: all_field_ids,
|
|
130
|
+
chat_group_id,
|
|
131
|
+
enabled: enable_chat && !!chat_group_id,
|
|
132
|
+
realtime_mode: hazo_chat_realtime_mode,
|
|
133
|
+
poll_interval: hazo_chat_polling_interval,
|
|
134
|
+
});
|
|
135
|
+
// Merge fetched chat status with normalized field metadata
|
|
136
|
+
// Fetched status takes precedence over externally provided metadata
|
|
137
|
+
const field_metadata_with_chat_status = useMemo(() => {
|
|
138
|
+
const merged = { ...normalized_field_metadata };
|
|
139
|
+
// Apply fetched chat status to each field
|
|
140
|
+
for (const field_id of all_field_ids) {
|
|
141
|
+
const fetched_status = fetched_chat_status[field_id];
|
|
142
|
+
if (fetched_status) {
|
|
143
|
+
merged[field_id] = {
|
|
144
|
+
...merged[field_id],
|
|
145
|
+
chat_status: fetched_status,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return merged;
|
|
150
|
+
}, [normalized_field_metadata, fetched_chat_status, all_field_ids]);
|
|
106
151
|
// Validate props and warn about common configuration issues (dev mode only)
|
|
107
152
|
useEffect(() => {
|
|
108
153
|
validate_summary_props({
|
|
@@ -134,7 +179,7 @@ export const HazoCollabFormSummary = forwardRef(function HazoCollabFormSummary(p
|
|
|
134
179
|
// Build context value
|
|
135
180
|
const context_value = useMemo(() => ({
|
|
136
181
|
form_data,
|
|
137
|
-
field_metadata:
|
|
182
|
+
field_metadata: field_metadata_with_chat_status,
|
|
138
183
|
settings: {
|
|
139
184
|
show_empty_fields,
|
|
140
185
|
empty_field_text,
|
|
@@ -194,7 +239,7 @@ export const HazoCollabFormSummary = forwardRef(function HazoCollabFormSummary(p
|
|
|
194
239
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
195
240
|
[
|
|
196
241
|
form_data_key, // Use stringified key instead of reference for mutation detection
|
|
197
|
-
|
|
242
|
+
field_metadata_with_chat_status,
|
|
198
243
|
show_empty_fields,
|
|
199
244
|
empty_field_text,
|
|
200
245
|
empty_table_text,
|
|
@@ -243,7 +288,7 @@ export const HazoCollabFormSummary = forwardRef(function HazoCollabFormSummary(p
|
|
|
243
288
|
// Expose ref methods
|
|
244
289
|
useImperativeHandle(ref, () => ({
|
|
245
290
|
get_form_data: () => form_data,
|
|
246
|
-
get_field_metadata: () =>
|
|
291
|
+
get_field_metadata: () => field_metadata_with_chat_status,
|
|
247
292
|
scroll_to_section: (section_index) => {
|
|
248
293
|
const section_el = section_refs.current[section_index];
|
|
249
294
|
if (section_el) {
|
|
@@ -256,7 +301,7 @@ export const HazoCollabFormSummary = forwardRef(function HazoCollabFormSummary(p
|
|
|
256
301
|
field_el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
257
302
|
}
|
|
258
303
|
},
|
|
259
|
-
}), [form_data,
|
|
304
|
+
}), [form_data, field_metadata_with_chat_status]);
|
|
260
305
|
return (_jsx(SummaryContext.Provider, { value: context_value, children: _jsx("div", { className: cn('cls_hazo_collab_form_summary space-y-4', class_name), children: sections.map((section, index) => (_jsx(SummarySection, { section: section, section_index: index, show_edit_button: show_edit_buttons, on_edit: on_edit_section ? () => on_edit_section(index) : undefined, edit_button_text: edit_button_text, edit_button_icon: edit_button_icon, icon_background_color: icon_background_color, icon_color: icon_color, default_icon: default_icon, class_name: section_class_name, header_class_name: section_header_class_name, content_class_name: section_content_class_name, empty_section_text: empty_section_text, render_header: render_section_header, render_footer: render_section_footer, render_empty: render_empty_section }, get_fields_set_name(section) || index))) }) }));
|
|
261
306
|
});
|
|
262
307
|
export { SummaryContext, useSummaryContext } from './context.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/hazo_collab_form_summary/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAe,MAAM,OAAO,CAAC;AACxG,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/hazo_collab_form_summary/index.tsx"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { use_collab_chat } from './use_collab_chat.js';
|
|
|
6
6
|
export type { CollabChatContext } from './use_collab_chat.js';
|
|
7
7
|
export { use_chat_messages_check } from './use_chat_messages_check.js';
|
|
8
8
|
export type { UseChatMessagesCheckOptions } from './use_chat_messages_check.js';
|
|
9
|
+
export { use_field_chat_status } from './use_field_chat_status.js';
|
|
10
|
+
export type { UseFieldChatStatusOptions, UseFieldChatStatusResult } from './use_field_chat_status.js';
|
|
9
11
|
export { load_icon, load_icons, use_icon, preload_icons, clear_icon_cache, get_supported_icon_sets, } from './icon_loader.js';
|
|
10
12
|
export { format_date, format_date_range, DEFAULT_DATE_FORMAT, } from './date_format.js';
|
|
11
13
|
export type { DateFormat } from './date_format.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,YAAY,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export { cn } from './cn.js';
|
|
5
5
|
export { use_collab_chat } from './use_collab_chat.js';
|
|
6
6
|
export { use_chat_messages_check } from './use_chat_messages_check.js';
|
|
7
|
+
export { use_field_chat_status } from './use_field_chat_status.js';
|
|
7
8
|
export { load_icon, load_icons, use_icon, preload_icons, clear_icon_cache, get_supported_icon_sets, } from './icon_loader.js';
|
|
8
9
|
export { format_date, format_date_range, DEFAULT_DATE_FORMAT, } from './date_format.js';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to check chat status for multiple fields at once
|
|
3
|
+
* Returns a mapping of field_id -> ChatStatus ('none' | 'has_messages' | 'has_unread')
|
|
4
|
+
* Used by both HazoCollabFormSet and HazoCollabFormSummary
|
|
5
|
+
*/
|
|
6
|
+
import type { ChatStatus } from '../components/hazo_collab_form_base.js';
|
|
7
|
+
export interface UseFieldChatStatusOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Array of field IDs to check for messages
|
|
10
|
+
*/
|
|
11
|
+
field_ids: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Chat group ID for the chat (v3.0.0+)
|
|
14
|
+
*/
|
|
15
|
+
chat_group_id: string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Whether to enable the check (default: true)
|
|
18
|
+
*/
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Chat realtime mode
|
|
22
|
+
* - 'polling': Automatically poll for new messages every 5 seconds
|
|
23
|
+
* - 'manual': Disable automatic polling
|
|
24
|
+
* Default: 'polling'
|
|
25
|
+
*/
|
|
26
|
+
realtime_mode?: 'polling' | 'manual';
|
|
27
|
+
/**
|
|
28
|
+
* Polling interval in milliseconds (default: 5000ms)
|
|
29
|
+
*/
|
|
30
|
+
poll_interval?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface UseFieldChatStatusResult {
|
|
33
|
+
/**
|
|
34
|
+
* Mapping of field_id -> ChatStatus
|
|
35
|
+
*/
|
|
36
|
+
chat_status: Record<string, ChatStatus>;
|
|
37
|
+
/**
|
|
38
|
+
* Whether the hook is currently fetching
|
|
39
|
+
*/
|
|
40
|
+
is_loading: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Current user ID (fetched from auth)
|
|
43
|
+
*/
|
|
44
|
+
current_user_id: string | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Manually trigger a refresh of chat status
|
|
47
|
+
*/
|
|
48
|
+
refresh: () => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Hook to check chat status for multiple fields at once
|
|
52
|
+
* Efficiently batches checks and returns status mapping
|
|
53
|
+
*/
|
|
54
|
+
export declare function use_field_chat_status({ field_ids, chat_group_id, enabled, realtime_mode, poll_interval, }: UseFieldChatStatusOptions): UseFieldChatStatusResult;
|
|
55
|
+
//# sourceMappingURL=use_field_chat_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_field_chat_status.d.ts","sourceRoot":"","sources":["../../src/utils/use_field_chat_status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB;;OAEG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAExC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,aAAa,EACb,OAAc,EACd,aAAyB,EACzB,aAAoB,GACrB,EAAE,yBAAyB,GAAG,wBAAwB,CA2JtD"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to check chat status for multiple fields at once
|
|
3
|
+
* Returns a mapping of field_id -> ChatStatus ('none' | 'has_messages' | 'has_unread')
|
|
4
|
+
* Used by both HazoCollabFormSet and HazoCollabFormSummary
|
|
5
|
+
*/
|
|
6
|
+
'use client';
|
|
7
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
8
|
+
import { use_logger } from '../logger/context.js';
|
|
9
|
+
/**
|
|
10
|
+
* Hook to check chat status for multiple fields at once
|
|
11
|
+
* Efficiently batches checks and returns status mapping
|
|
12
|
+
*/
|
|
13
|
+
export function use_field_chat_status({ field_ids, chat_group_id, enabled = true, realtime_mode = 'polling', poll_interval = 5000, }) {
|
|
14
|
+
const logger = use_logger();
|
|
15
|
+
const [chat_status, set_chat_status] = useState({});
|
|
16
|
+
const [is_loading, set_is_loading] = useState(false);
|
|
17
|
+
const [current_user_id, set_current_user_id] = useState(undefined);
|
|
18
|
+
// Fetch current user ID on mount
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const fetch_current_user = async () => {
|
|
21
|
+
try {
|
|
22
|
+
const auth_response = await fetch('/api/hazo_auth/me');
|
|
23
|
+
if (auth_response.ok) {
|
|
24
|
+
const auth_data = await auth_response.json();
|
|
25
|
+
if (auth_data.authenticated && auth_data.user_id) {
|
|
26
|
+
set_current_user_id(auth_data.user_id);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger.error('[use_field_chat_status] Could not fetch current user', {
|
|
32
|
+
error: error instanceof Error ? error.message : String(error),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
fetch_current_user();
|
|
37
|
+
}, [logger]);
|
|
38
|
+
// Check chat messages for all fields
|
|
39
|
+
const check_chat_messages = useCallback(async () => {
|
|
40
|
+
if (!current_user_id || !chat_group_id || !enabled || field_ids.length === 0) {
|
|
41
|
+
logger.debug('[use_field_chat_status] Skipping check - missing requirements', {
|
|
42
|
+
has_current_user_id: !!current_user_id,
|
|
43
|
+
has_chat_group_id: !!chat_group_id,
|
|
44
|
+
enabled,
|
|
45
|
+
field_count: field_ids.length,
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
set_is_loading(true);
|
|
51
|
+
// Track status per field
|
|
52
|
+
const field_status_map = new Map();
|
|
53
|
+
logger.debug('[use_field_chat_status] Checking chat messages for fields', {
|
|
54
|
+
field_ids,
|
|
55
|
+
user_id: current_user_id,
|
|
56
|
+
chat_group_id,
|
|
57
|
+
});
|
|
58
|
+
// Query all fields in parallel
|
|
59
|
+
const check_promises = field_ids.map(async (field_id) => {
|
|
60
|
+
try {
|
|
61
|
+
const params = new URLSearchParams({
|
|
62
|
+
chat_group_id: chat_group_id || '',
|
|
63
|
+
reference_id: field_id,
|
|
64
|
+
});
|
|
65
|
+
const response = await fetch(`/api/hazo_chat/messages?${params.toString()}`);
|
|
66
|
+
if (response.ok) {
|
|
67
|
+
const data = await response.json();
|
|
68
|
+
const messages = data.messages || [];
|
|
69
|
+
const api_current_user_id = data.current_user_id;
|
|
70
|
+
// Check if field has any messages
|
|
71
|
+
const has_any_messages = Array.isArray(messages) && messages.length > 0;
|
|
72
|
+
// Check for unread messages from other users
|
|
73
|
+
const effective_current_user_id = api_current_user_id || current_user_id;
|
|
74
|
+
const has_unread = has_any_messages && messages.some((msg) => {
|
|
75
|
+
const is_unread = msg.read_at === null || msg.read_at === undefined;
|
|
76
|
+
const is_from_others = msg.sender_user_id !== effective_current_user_id;
|
|
77
|
+
return is_unread && is_from_others;
|
|
78
|
+
});
|
|
79
|
+
// Determine chat status
|
|
80
|
+
let status;
|
|
81
|
+
if (has_unread) {
|
|
82
|
+
status = 'has_unread';
|
|
83
|
+
}
|
|
84
|
+
else if (has_any_messages) {
|
|
85
|
+
status = 'has_messages';
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
status = 'none';
|
|
89
|
+
}
|
|
90
|
+
logger.debug('[use_field_chat_status] Field chat status', {
|
|
91
|
+
field_id,
|
|
92
|
+
status,
|
|
93
|
+
has_any_messages,
|
|
94
|
+
has_unread,
|
|
95
|
+
});
|
|
96
|
+
field_status_map.set(field_id, status);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
logger.error('[use_field_chat_status] Field API error', {
|
|
100
|
+
field_id,
|
|
101
|
+
status: response.status,
|
|
102
|
+
});
|
|
103
|
+
field_status_map.set(field_id, 'none');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
logger.error('[use_field_chat_status] Error checking field', {
|
|
108
|
+
field_id,
|
|
109
|
+
error: error instanceof Error ? error.message : String(error),
|
|
110
|
+
});
|
|
111
|
+
field_status_map.set(field_id, 'none');
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
await Promise.all(check_promises);
|
|
115
|
+
// Convert map to record
|
|
116
|
+
const chat_status_record = {};
|
|
117
|
+
field_status_map.forEach((status, field_id) => {
|
|
118
|
+
chat_status_record[field_id] = status;
|
|
119
|
+
});
|
|
120
|
+
logger.debug('[use_field_chat_status] Chat status check complete', {
|
|
121
|
+
chat_status_record,
|
|
122
|
+
});
|
|
123
|
+
set_chat_status(chat_status_record);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
logger.error('[use_field_chat_status] Error checking chat status', {
|
|
127
|
+
error: error instanceof Error ? error.message : String(error),
|
|
128
|
+
});
|
|
129
|
+
set_chat_status({});
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
set_is_loading(false);
|
|
133
|
+
}
|
|
134
|
+
}, [current_user_id, chat_group_id, enabled, field_ids, logger]);
|
|
135
|
+
// Effect to run checks and set up polling
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (!current_user_id || !chat_group_id || !enabled) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
check_chat_messages();
|
|
141
|
+
// Set up polling if not manual mode
|
|
142
|
+
if (realtime_mode !== 'manual') {
|
|
143
|
+
const interval_id = setInterval(check_chat_messages, poll_interval);
|
|
144
|
+
return () => clearInterval(interval_id);
|
|
145
|
+
}
|
|
146
|
+
}, [current_user_id, chat_group_id, enabled, realtime_mode, poll_interval, check_chat_messages]);
|
|
147
|
+
return {
|
|
148
|
+
chat_status,
|
|
149
|
+
is_loading,
|
|
150
|
+
current_user_id,
|
|
151
|
+
refresh: check_chat_messages,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=use_field_chat_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_field_chat_status.js","sourceRoot":"","sources":["../../src/utils/use_field_chat_status.ts"],"names":[],"mappings":"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"}
|