Skip to content

Commit b9b057b

Browse files
committed
refactor(ui): dedupe grouped message options
1 parent 2277570 commit b9b057b

1 file changed

Lines changed: 58 additions & 67 deletions

File tree

ui/src/ui/chat/grouped-render.ts

Lines changed: 58 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -408,34 +408,63 @@ export function renderStreamingGroup(
408408
`;
409409
}
410410

411-
export function renderMessageGroup(
411+
type RenderMessageGroupOptions = {
412+
onOpenSidebar?: (content: SidebarContent) => void;
413+
sessionKey?: string;
414+
agentId?: string;
415+
showReasoning: boolean;
416+
showToolCalls?: boolean;
417+
autoExpandToolCalls?: boolean;
418+
isToolMessageExpanded?: (messageId: string) => boolean | undefined;
419+
onToggleToolMessageExpanded?: (messageId: string, expanded?: boolean) => void;
420+
isToolExpanded?: (toolCardId: string) => boolean;
421+
onToggleToolExpanded?: (toolCardId: string) => void;
422+
onRequestUpdate?: () => void;
423+
assistantName?: string;
424+
assistantAvatar?: string | null;
425+
userName?: string | null;
426+
userAvatar?: string | null;
427+
basePath?: string;
428+
localMediaPreviewRoots?: readonly string[];
429+
assistantAttachmentAuthToken?: string | null;
430+
canvasPluginSurfaceUrl?: string | null;
431+
embedSandboxMode?: EmbedSandboxMode;
432+
allowExternalEmbedUrls?: boolean;
433+
contextWindow?: number | null;
434+
onDelete?: () => void;
435+
};
436+
437+
type GroupedMessageRenderOptions = Parameters<typeof renderGroupedMessage>[2];
438+
439+
function buildGroupedMessageRenderOptions(
412440
group: MessageGroup,
413-
opts: {
414-
onOpenSidebar?: (content: SidebarContent) => void;
415-
sessionKey?: string;
416-
agentId?: string;
417-
showReasoning: boolean;
418-
showToolCalls?: boolean;
419-
autoExpandToolCalls?: boolean;
420-
isToolMessageExpanded?: (messageId: string) => boolean | undefined;
421-
onToggleToolMessageExpanded?: (messageId: string, expanded?: boolean) => void;
422-
isToolExpanded?: (toolCardId: string) => boolean;
423-
onToggleToolExpanded?: (toolCardId: string) => void;
424-
onRequestUpdate?: () => void;
425-
assistantName?: string;
426-
assistantAvatar?: string | null;
427-
userName?: string | null;
428-
userAvatar?: string | null;
429-
basePath?: string;
430-
localMediaPreviewRoots?: readonly string[];
431-
assistantAttachmentAuthToken?: string | null;
432-
canvasPluginSurfaceUrl?: string | null;
433-
embedSandboxMode?: EmbedSandboxMode;
434-
allowExternalEmbedUrls?: boolean;
435-
contextWindow?: number | null;
436-
onDelete?: () => void;
437-
},
438-
) {
441+
item: MessageGroup["messages"][number],
442+
index: number,
443+
opts: RenderMessageGroupOptions,
444+
): GroupedMessageRenderOptions {
445+
return {
446+
isStreaming: group.isStreaming && index === group.messages.length - 1,
447+
sessionKey: opts.sessionKey,
448+
agentId: opts.agentId,
449+
duplicateCount: item.duplicateCount ?? 1,
450+
showReasoning: opts.showReasoning,
451+
showToolCalls: opts.showToolCalls ?? true,
452+
autoExpandToolCalls: opts.autoExpandToolCalls ?? false,
453+
isToolMessageExpanded: opts.isToolMessageExpanded,
454+
onToggleToolMessageExpanded: opts.onToggleToolMessageExpanded,
455+
isToolExpanded: opts.isToolExpanded,
456+
onToggleToolExpanded: opts.onToggleToolExpanded,
457+
onRequestUpdate: opts.onRequestUpdate,
458+
canvasPluginSurfaceUrl: opts.canvasPluginSurfaceUrl,
459+
basePath: opts.basePath,
460+
localMediaPreviewRoots: opts.localMediaPreviewRoots,
461+
assistantAttachmentAuthToken: opts.assistantAttachmentAuthToken,
462+
embedSandboxMode: opts.embedSandboxMode,
463+
allowExternalEmbedUrls: opts.allowExternalEmbedUrls,
464+
};
465+
}
466+
467+
export function renderMessageGroup(group: MessageGroup, opts: RenderMessageGroupOptions) {
439468
const normalizedRole = normalizeRoleForGrouping(group.role);
440469
const assistantName = opts.assistantName ?? "Assistant";
441470
const resolvedUserName = resolveLocalUserName({
@@ -539,26 +568,7 @@ export function renderMessageGroup(
539568
renderGroupedMessage(
540569
item.message,
541570
item.key,
542-
{
543-
isStreaming: group.isStreaming && index === group.messages.length - 1,
544-
sessionKey: opts.sessionKey,
545-
agentId: opts.agentId,
546-
duplicateCount: item.duplicateCount ?? 1,
547-
showReasoning: opts.showReasoning,
548-
showToolCalls: opts.showToolCalls ?? true,
549-
autoExpandToolCalls: opts.autoExpandToolCalls ?? false,
550-
isToolMessageExpanded: opts.isToolMessageExpanded,
551-
onToggleToolMessageExpanded: opts.onToggleToolMessageExpanded,
552-
isToolExpanded: opts.isToolExpanded,
553-
onToggleToolExpanded: opts.onToggleToolExpanded,
554-
onRequestUpdate: opts.onRequestUpdate,
555-
canvasPluginSurfaceUrl: opts.canvasPluginSurfaceUrl,
556-
basePath: opts.basePath,
557-
localMediaPreviewRoots: opts.localMediaPreviewRoots,
558-
assistantAttachmentAuthToken: opts.assistantAttachmentAuthToken,
559-
embedSandboxMode: opts.embedSandboxMode,
560-
allowExternalEmbedUrls: opts.allowExternalEmbedUrls,
561-
},
571+
buildGroupedMessageRenderOptions(group, item, index, opts),
562572
opts.onOpenSidebar,
563573
),
564574
)}
@@ -596,26 +606,7 @@ export function renderMessageGroup(
596606
renderGroupedMessage(
597607
item.message,
598608
item.key,
599-
{
600-
isStreaming: group.isStreaming && index === group.messages.length - 1,
601-
sessionKey: opts.sessionKey,
602-
agentId: opts.agentId,
603-
duplicateCount: item.duplicateCount ?? 1,
604-
showReasoning: opts.showReasoning,
605-
showToolCalls: opts.showToolCalls ?? true,
606-
autoExpandToolCalls: opts.autoExpandToolCalls ?? false,
607-
isToolMessageExpanded: opts.isToolMessageExpanded,
608-
onToggleToolMessageExpanded: opts.onToggleToolMessageExpanded,
609-
isToolExpanded: opts.isToolExpanded,
610-
onToggleToolExpanded: opts.onToggleToolExpanded,
611-
onRequestUpdate: opts.onRequestUpdate,
612-
canvasPluginSurfaceUrl: opts.canvasPluginSurfaceUrl,
613-
basePath: opts.basePath,
614-
localMediaPreviewRoots: opts.localMediaPreviewRoots,
615-
assistantAttachmentAuthToken: opts.assistantAttachmentAuthToken,
616-
embedSandboxMode: opts.embedSandboxMode,
617-
allowExternalEmbedUrls: opts.allowExternalEmbedUrls,
618-
},
609+
buildGroupedMessageRenderOptions(group, item, index, opts),
619610
opts.onOpenSidebar,
620611
),
621612
)}

0 commit comments

Comments
 (0)