@natoe/colab 0.1.26 → 0.1.28
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/index.d.mts +52 -9
- package/dist/index.d.ts +52 -9
- package/dist/index.js +132 -48
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +132 -49
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -118,10 +118,28 @@ interface PatientData {
|
|
|
118
118
|
labName?: string;
|
|
119
119
|
bodyParts?: string[];
|
|
120
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Which thread on a case this is.
|
|
123
|
+
*
|
|
124
|
+
* - `case` — the shared discussion: lab, radiologist, physician, admin
|
|
125
|
+
* - `help_lab` — imaging center <-> Natoe support, private to that side
|
|
126
|
+
* - `help_radiologist` — assigned radiologist <-> Natoe support, private to that side
|
|
127
|
+
*
|
|
128
|
+
* The two help kinds are mutually invisible. That isolation is enforced by the
|
|
129
|
+
* backend's participant seeding, never by anything in this package — treat this
|
|
130
|
+
* as a label for rendering and for addressing the right thread, not as a
|
|
131
|
+
* security boundary.
|
|
132
|
+
*
|
|
133
|
+
* Optional everywhere, defaulting to `case`, so callers written before help
|
|
134
|
+
* threads existed keep their exact previous behaviour.
|
|
135
|
+
*/
|
|
136
|
+
type ConversationKind = 'case' | 'help_lab' | 'help_radiologist';
|
|
137
|
+
declare function isHelpKind(kind?: ConversationKind | string): boolean;
|
|
121
138
|
interface Conversation {
|
|
122
139
|
id: string;
|
|
123
140
|
orderId: string;
|
|
124
141
|
name: string;
|
|
142
|
+
kind?: ConversationKind;
|
|
125
143
|
picture?: string;
|
|
126
144
|
participants: Participant[];
|
|
127
145
|
lastMessage?: Message;
|
|
@@ -141,6 +159,9 @@ interface ConversationListItem$1 {
|
|
|
141
159
|
id: string;
|
|
142
160
|
orderId: string;
|
|
143
161
|
name: string;
|
|
162
|
+
/** Lets the inbox label help threads distinctly from the case thread on the
|
|
163
|
+
* same patient — both appear as separate rows. */
|
|
164
|
+
kind?: ConversationKind;
|
|
144
165
|
picture?: string;
|
|
145
166
|
unreadCount: number;
|
|
146
167
|
lastMessage?: Message;
|
|
@@ -154,6 +175,7 @@ interface ConversationListItem$1 {
|
|
|
154
175
|
interface ConversationPreview {
|
|
155
176
|
conversationId: string;
|
|
156
177
|
orderId: string;
|
|
178
|
+
kind?: ConversationKind;
|
|
157
179
|
messageCount: number;
|
|
158
180
|
unreadCount: number;
|
|
159
181
|
/** Last N messages (typically 5) for inline display */
|
|
@@ -163,7 +185,9 @@ interface ConversationPreview {
|
|
|
163
185
|
}
|
|
164
186
|
/** Batch preview response shape from the backend */
|
|
165
187
|
interface PreviewBatchResponse {
|
|
166
|
-
/** Key is orderId, value is preview or null if no conversation exists
|
|
188
|
+
/** Key is orderId, value is preview or null if no conversation exists.
|
|
189
|
+
* Scoped to a single `kind` per request — the backend filters server-side,
|
|
190
|
+
* so this map never mixes a case thread and a help thread for one order. */
|
|
167
191
|
previews: Record<string, ConversationPreview | null>;
|
|
168
192
|
}
|
|
169
193
|
/** Response from createConversationWithMessage (first-message flow) */
|
|
@@ -267,6 +291,8 @@ interface CollabPanelProps {
|
|
|
267
291
|
patientData: PatientData;
|
|
268
292
|
/** Participant user IDs — only used when creating a brand-new conversation */
|
|
269
293
|
participantIds?: string[];
|
|
294
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
295
|
+
kind?: ConversationKind;
|
|
270
296
|
/** Show "seen by" indicator under own messages (default true) */
|
|
271
297
|
showSeenBy?: boolean;
|
|
272
298
|
/**
|
|
@@ -317,7 +343,7 @@ interface CollabPanelProps {
|
|
|
317
343
|
* Full collaboration panel: patient header + pinned bar + message thread + input.
|
|
318
344
|
* Supports reply, pin/unpin, and (optionally) seen-by indicators.
|
|
319
345
|
*/
|
|
320
|
-
declare function CollabPanel({ orderId, patientData, participantIds, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
|
|
346
|
+
declare function CollabPanel({ orderId, patientData, participantIds, kind, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
|
|
321
347
|
|
|
322
348
|
interface CollabPopupProps {
|
|
323
349
|
/** Order ID for this conversation */
|
|
@@ -326,6 +352,8 @@ interface CollabPopupProps {
|
|
|
326
352
|
patientData: PatientData;
|
|
327
353
|
/** Participant user IDs — only used when creating a brand-new conversation */
|
|
328
354
|
participantIds?: string[];
|
|
355
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
356
|
+
kind?: ConversationKind;
|
|
329
357
|
/** Whether the popup is open */
|
|
330
358
|
isOpen: boolean;
|
|
331
359
|
/** Close the popup */
|
|
@@ -355,7 +383,7 @@ interface CollabPopupProps {
|
|
|
355
383
|
* Draggable floating chat popup — drop-in replacement for DraggableChatPopup.
|
|
356
384
|
* Renders a CollabPanel inside a movable, resizable container.
|
|
357
385
|
*/
|
|
358
|
-
declare function CollabPopup({ orderId, patientData, participantIds, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
|
|
386
|
+
declare function CollabPopup({ orderId, patientData, participantIds, kind, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
|
|
359
387
|
|
|
360
388
|
type ColabInlineMode = 'light' | 'dark';
|
|
361
389
|
interface CollabInlineProps {
|
|
@@ -363,6 +391,8 @@ interface CollabInlineProps {
|
|
|
363
391
|
patientData: PatientData;
|
|
364
392
|
/** User IDs to invite when the first message creates the conversation */
|
|
365
393
|
participantIds?: string[];
|
|
394
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
395
|
+
kind?: ConversationKind;
|
|
366
396
|
/** Called when user clicks the expand button — host opens the floating popup */
|
|
367
397
|
onExpand?: () => void;
|
|
368
398
|
/** Max inline messages to show (default 1 — just the latest) */
|
|
@@ -390,7 +420,7 @@ interface CollabInlineProps {
|
|
|
390
420
|
* Supports text and voice messages. File attachments and full chat features
|
|
391
421
|
* stay in the floating popup / inbox.
|
|
392
422
|
*/
|
|
393
|
-
declare function CollabInline({ orderId, patientData, participantIds, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
|
|
423
|
+
declare function CollabInline({ orderId, patientData, participantIds, kind, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
|
|
394
424
|
|
|
395
425
|
interface CollabInboxProps {
|
|
396
426
|
/** Optional: preselect a specific conversation (by conversation ID) */
|
|
@@ -552,6 +582,8 @@ interface FetchMessagesOptions {
|
|
|
552
582
|
interface CreateConversationOptions {
|
|
553
583
|
name: string;
|
|
554
584
|
participantIds?: string[];
|
|
585
|
+
/** Which thread to create. Defaults to the shared case thread. */
|
|
586
|
+
kind?: ConversationKind;
|
|
555
587
|
}
|
|
556
588
|
interface CollabContextValue {
|
|
557
589
|
socket: CollabSocket;
|
|
@@ -573,9 +605,9 @@ interface CollabContextValue {
|
|
|
573
605
|
*/
|
|
574
606
|
unreadCountsByOrder: Record<string, number>;
|
|
575
607
|
/** Batched preview lookup — coalesces calls within a microtask */
|
|
576
|
-
requestPreview: (orderId: string) => Promise<ConversationPreview | null>;
|
|
608
|
+
requestPreview: (orderId: string, kind?: ConversationKind) => Promise<ConversationPreview | null>;
|
|
577
609
|
/** Invalidate a cached preview (e.g. when a new message arrives) */
|
|
578
|
-
invalidatePreview: (orderId: string) => void;
|
|
610
|
+
invalidatePreview: (orderId: string, kind?: ConversationKind) => void;
|
|
579
611
|
/** Fetch paginated message history */
|
|
580
612
|
fetchMessages: (conversationId: string, options?: FetchMessagesOptions) => Promise<Message[]>;
|
|
581
613
|
/** Atomic create-or-send — creates conversation if missing, then stores the first message */
|
|
@@ -609,6 +641,15 @@ interface UseConversationOptions {
|
|
|
609
641
|
participantIds?: string[];
|
|
610
642
|
/** Load full history on mount (default true) */
|
|
611
643
|
loadHistory?: boolean;
|
|
644
|
+
/**
|
|
645
|
+
* Which thread on the case to open. Defaults to the shared `case` thread,
|
|
646
|
+
* so every existing caller is unaffected.
|
|
647
|
+
*
|
|
648
|
+
* For a help kind the backend seats only the requesting side plus Natoe
|
|
649
|
+
* support, and `participantIds` is ignored server-side — a help thread
|
|
650
|
+
* must never be widened by the client.
|
|
651
|
+
*/
|
|
652
|
+
kind?: ConversationKind;
|
|
612
653
|
}
|
|
613
654
|
interface UseConversationReturn {
|
|
614
655
|
conversation: Conversation | null;
|
|
@@ -643,7 +684,7 @@ interface UseConversationReturn {
|
|
|
643
684
|
* when the user sends the first message. If a conversation already exists for
|
|
644
685
|
* the given orderId, it's loaded and joined automatically.
|
|
645
686
|
*/
|
|
646
|
-
declare function useConversation({ orderId, patientData, participantIds, loadHistory, }: UseConversationOptions): UseConversationReturn;
|
|
687
|
+
declare function useConversation({ orderId, patientData, participantIds, loadHistory, kind, }: UseConversationOptions): UseConversationReturn;
|
|
647
688
|
|
|
648
689
|
interface UseConversationListOptions {
|
|
649
690
|
/**
|
|
@@ -677,6 +718,8 @@ interface UseInlineCollabOptions {
|
|
|
677
718
|
patientData: PatientData;
|
|
678
719
|
/** Participant IDs passed to the backend only when creating a new conversation */
|
|
679
720
|
participantIds?: string[];
|
|
721
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
722
|
+
kind?: ConversationKind;
|
|
680
723
|
/** Max messages to keep in inline state (default 5) */
|
|
681
724
|
messageLimit?: number;
|
|
682
725
|
}
|
|
@@ -704,7 +747,7 @@ interface UseInlineCollabReturn {
|
|
|
704
747
|
* - First sendMessage creates conversation atomically + starts real-time flow
|
|
705
748
|
* - Subsequent sends go through the socket
|
|
706
749
|
*/
|
|
707
|
-
declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, }: UseInlineCollabOptions): UseInlineCollabReturn;
|
|
750
|
+
declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, kind, }: UseInlineCollabOptions): UseInlineCollabReturn;
|
|
708
751
|
|
|
709
752
|
interface UseMessagesOptions {
|
|
710
753
|
conversationId: string | null;
|
|
@@ -1187,4 +1230,4 @@ declare const SUPPORTED_IMAGE_TYPES: string[];
|
|
|
1187
1230
|
/** Max file size in bytes (20MB) */
|
|
1188
1231
|
declare const MAX_FILE_SIZE: number;
|
|
1189
1232
|
|
|
1190
|
-
export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
|
|
1233
|
+
export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, type ConversationKind, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, isHelpKind, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
|
package/dist/index.d.ts
CHANGED
|
@@ -118,10 +118,28 @@ interface PatientData {
|
|
|
118
118
|
labName?: string;
|
|
119
119
|
bodyParts?: string[];
|
|
120
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Which thread on a case this is.
|
|
123
|
+
*
|
|
124
|
+
* - `case` — the shared discussion: lab, radiologist, physician, admin
|
|
125
|
+
* - `help_lab` — imaging center <-> Natoe support, private to that side
|
|
126
|
+
* - `help_radiologist` — assigned radiologist <-> Natoe support, private to that side
|
|
127
|
+
*
|
|
128
|
+
* The two help kinds are mutually invisible. That isolation is enforced by the
|
|
129
|
+
* backend's participant seeding, never by anything in this package — treat this
|
|
130
|
+
* as a label for rendering and for addressing the right thread, not as a
|
|
131
|
+
* security boundary.
|
|
132
|
+
*
|
|
133
|
+
* Optional everywhere, defaulting to `case`, so callers written before help
|
|
134
|
+
* threads existed keep their exact previous behaviour.
|
|
135
|
+
*/
|
|
136
|
+
type ConversationKind = 'case' | 'help_lab' | 'help_radiologist';
|
|
137
|
+
declare function isHelpKind(kind?: ConversationKind | string): boolean;
|
|
121
138
|
interface Conversation {
|
|
122
139
|
id: string;
|
|
123
140
|
orderId: string;
|
|
124
141
|
name: string;
|
|
142
|
+
kind?: ConversationKind;
|
|
125
143
|
picture?: string;
|
|
126
144
|
participants: Participant[];
|
|
127
145
|
lastMessage?: Message;
|
|
@@ -141,6 +159,9 @@ interface ConversationListItem$1 {
|
|
|
141
159
|
id: string;
|
|
142
160
|
orderId: string;
|
|
143
161
|
name: string;
|
|
162
|
+
/** Lets the inbox label help threads distinctly from the case thread on the
|
|
163
|
+
* same patient — both appear as separate rows. */
|
|
164
|
+
kind?: ConversationKind;
|
|
144
165
|
picture?: string;
|
|
145
166
|
unreadCount: number;
|
|
146
167
|
lastMessage?: Message;
|
|
@@ -154,6 +175,7 @@ interface ConversationListItem$1 {
|
|
|
154
175
|
interface ConversationPreview {
|
|
155
176
|
conversationId: string;
|
|
156
177
|
orderId: string;
|
|
178
|
+
kind?: ConversationKind;
|
|
157
179
|
messageCount: number;
|
|
158
180
|
unreadCount: number;
|
|
159
181
|
/** Last N messages (typically 5) for inline display */
|
|
@@ -163,7 +185,9 @@ interface ConversationPreview {
|
|
|
163
185
|
}
|
|
164
186
|
/** Batch preview response shape from the backend */
|
|
165
187
|
interface PreviewBatchResponse {
|
|
166
|
-
/** Key is orderId, value is preview or null if no conversation exists
|
|
188
|
+
/** Key is orderId, value is preview or null if no conversation exists.
|
|
189
|
+
* Scoped to a single `kind` per request — the backend filters server-side,
|
|
190
|
+
* so this map never mixes a case thread and a help thread for one order. */
|
|
167
191
|
previews: Record<string, ConversationPreview | null>;
|
|
168
192
|
}
|
|
169
193
|
/** Response from createConversationWithMessage (first-message flow) */
|
|
@@ -267,6 +291,8 @@ interface CollabPanelProps {
|
|
|
267
291
|
patientData: PatientData;
|
|
268
292
|
/** Participant user IDs — only used when creating a brand-new conversation */
|
|
269
293
|
participantIds?: string[];
|
|
294
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
295
|
+
kind?: ConversationKind;
|
|
270
296
|
/** Show "seen by" indicator under own messages (default true) */
|
|
271
297
|
showSeenBy?: boolean;
|
|
272
298
|
/**
|
|
@@ -317,7 +343,7 @@ interface CollabPanelProps {
|
|
|
317
343
|
* Full collaboration panel: patient header + pinned bar + message thread + input.
|
|
318
344
|
* Supports reply, pin/unpin, and (optionally) seen-by indicators.
|
|
319
345
|
*/
|
|
320
|
-
declare function CollabPanel({ orderId, patientData, participantIds, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
|
|
346
|
+
declare function CollabPanel({ orderId, patientData, participantIds, kind, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
|
|
321
347
|
|
|
322
348
|
interface CollabPopupProps {
|
|
323
349
|
/** Order ID for this conversation */
|
|
@@ -326,6 +352,8 @@ interface CollabPopupProps {
|
|
|
326
352
|
patientData: PatientData;
|
|
327
353
|
/** Participant user IDs — only used when creating a brand-new conversation */
|
|
328
354
|
participantIds?: string[];
|
|
355
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
356
|
+
kind?: ConversationKind;
|
|
329
357
|
/** Whether the popup is open */
|
|
330
358
|
isOpen: boolean;
|
|
331
359
|
/** Close the popup */
|
|
@@ -355,7 +383,7 @@ interface CollabPopupProps {
|
|
|
355
383
|
* Draggable floating chat popup — drop-in replacement for DraggableChatPopup.
|
|
356
384
|
* Renders a CollabPanel inside a movable, resizable container.
|
|
357
385
|
*/
|
|
358
|
-
declare function CollabPopup({ orderId, patientData, participantIds, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
|
|
386
|
+
declare function CollabPopup({ orderId, patientData, participantIds, kind, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
|
|
359
387
|
|
|
360
388
|
type ColabInlineMode = 'light' | 'dark';
|
|
361
389
|
interface CollabInlineProps {
|
|
@@ -363,6 +391,8 @@ interface CollabInlineProps {
|
|
|
363
391
|
patientData: PatientData;
|
|
364
392
|
/** User IDs to invite when the first message creates the conversation */
|
|
365
393
|
participantIds?: string[];
|
|
394
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
395
|
+
kind?: ConversationKind;
|
|
366
396
|
/** Called when user clicks the expand button — host opens the floating popup */
|
|
367
397
|
onExpand?: () => void;
|
|
368
398
|
/** Max inline messages to show (default 1 — just the latest) */
|
|
@@ -390,7 +420,7 @@ interface CollabInlineProps {
|
|
|
390
420
|
* Supports text and voice messages. File attachments and full chat features
|
|
391
421
|
* stay in the floating popup / inbox.
|
|
392
422
|
*/
|
|
393
|
-
declare function CollabInline({ orderId, patientData, participantIds, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
|
|
423
|
+
declare function CollabInline({ orderId, patientData, participantIds, kind, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
|
|
394
424
|
|
|
395
425
|
interface CollabInboxProps {
|
|
396
426
|
/** Optional: preselect a specific conversation (by conversation ID) */
|
|
@@ -552,6 +582,8 @@ interface FetchMessagesOptions {
|
|
|
552
582
|
interface CreateConversationOptions {
|
|
553
583
|
name: string;
|
|
554
584
|
participantIds?: string[];
|
|
585
|
+
/** Which thread to create. Defaults to the shared case thread. */
|
|
586
|
+
kind?: ConversationKind;
|
|
555
587
|
}
|
|
556
588
|
interface CollabContextValue {
|
|
557
589
|
socket: CollabSocket;
|
|
@@ -573,9 +605,9 @@ interface CollabContextValue {
|
|
|
573
605
|
*/
|
|
574
606
|
unreadCountsByOrder: Record<string, number>;
|
|
575
607
|
/** Batched preview lookup — coalesces calls within a microtask */
|
|
576
|
-
requestPreview: (orderId: string) => Promise<ConversationPreview | null>;
|
|
608
|
+
requestPreview: (orderId: string, kind?: ConversationKind) => Promise<ConversationPreview | null>;
|
|
577
609
|
/** Invalidate a cached preview (e.g. when a new message arrives) */
|
|
578
|
-
invalidatePreview: (orderId: string) => void;
|
|
610
|
+
invalidatePreview: (orderId: string, kind?: ConversationKind) => void;
|
|
579
611
|
/** Fetch paginated message history */
|
|
580
612
|
fetchMessages: (conversationId: string, options?: FetchMessagesOptions) => Promise<Message[]>;
|
|
581
613
|
/** Atomic create-or-send — creates conversation if missing, then stores the first message */
|
|
@@ -609,6 +641,15 @@ interface UseConversationOptions {
|
|
|
609
641
|
participantIds?: string[];
|
|
610
642
|
/** Load full history on mount (default true) */
|
|
611
643
|
loadHistory?: boolean;
|
|
644
|
+
/**
|
|
645
|
+
* Which thread on the case to open. Defaults to the shared `case` thread,
|
|
646
|
+
* so every existing caller is unaffected.
|
|
647
|
+
*
|
|
648
|
+
* For a help kind the backend seats only the requesting side plus Natoe
|
|
649
|
+
* support, and `participantIds` is ignored server-side — a help thread
|
|
650
|
+
* must never be widened by the client.
|
|
651
|
+
*/
|
|
652
|
+
kind?: ConversationKind;
|
|
612
653
|
}
|
|
613
654
|
interface UseConversationReturn {
|
|
614
655
|
conversation: Conversation | null;
|
|
@@ -643,7 +684,7 @@ interface UseConversationReturn {
|
|
|
643
684
|
* when the user sends the first message. If a conversation already exists for
|
|
644
685
|
* the given orderId, it's loaded and joined automatically.
|
|
645
686
|
*/
|
|
646
|
-
declare function useConversation({ orderId, patientData, participantIds, loadHistory, }: UseConversationOptions): UseConversationReturn;
|
|
687
|
+
declare function useConversation({ orderId, patientData, participantIds, loadHistory, kind, }: UseConversationOptions): UseConversationReturn;
|
|
647
688
|
|
|
648
689
|
interface UseConversationListOptions {
|
|
649
690
|
/**
|
|
@@ -677,6 +718,8 @@ interface UseInlineCollabOptions {
|
|
|
677
718
|
patientData: PatientData;
|
|
678
719
|
/** Participant IDs passed to the backend only when creating a new conversation */
|
|
679
720
|
participantIds?: string[];
|
|
721
|
+
/** Which thread on the case. Defaults to the shared `case` thread. */
|
|
722
|
+
kind?: ConversationKind;
|
|
680
723
|
/** Max messages to keep in inline state (default 5) */
|
|
681
724
|
messageLimit?: number;
|
|
682
725
|
}
|
|
@@ -704,7 +747,7 @@ interface UseInlineCollabReturn {
|
|
|
704
747
|
* - First sendMessage creates conversation atomically + starts real-time flow
|
|
705
748
|
* - Subsequent sends go through the socket
|
|
706
749
|
*/
|
|
707
|
-
declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, }: UseInlineCollabOptions): UseInlineCollabReturn;
|
|
750
|
+
declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, kind, }: UseInlineCollabOptions): UseInlineCollabReturn;
|
|
708
751
|
|
|
709
752
|
interface UseMessagesOptions {
|
|
710
753
|
conversationId: string | null;
|
|
@@ -1187,4 +1230,4 @@ declare const SUPPORTED_IMAGE_TYPES: string[];
|
|
|
1187
1230
|
/** Max file size in bytes (20MB) */
|
|
1188
1231
|
declare const MAX_FILE_SIZE: number;
|
|
1189
1232
|
|
|
1190
|
-
export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
|
|
1233
|
+
export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, type ConversationKind, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, isHelpKind, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
|