From 0eaef3cf600c45086c3f8f5a1b55f76e03cb8786 Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Fri, 9 May 2025 15:29:56 +0100 Subject: [PATCH] fix(widget): support showing quick replies after a refresh --- widget/src/providers/ChatProvider.tsx | 37 ++++++++++++++++++++------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/widget/src/providers/ChatProvider.tsx b/widget/src/providers/ChatProvider.tsx index aca50c87..00db0698 100644 --- a/widget/src/providers/ChatProvider.tsx +++ b/widget/src/providers/ChatProvider.tsx @@ -20,7 +20,9 @@ import { useSubscribeBroadcastChannel } from "../hooks/useSubscribeBroadcastChan import { StdEventType } from "../types/chat-io-messages.types"; import { Direction, + IncomingMessageType, IPayload, + IQuickReply, ISubscriber, ISuggestion, QuickReplyType, @@ -35,6 +37,16 @@ import { useSettings } from "./SettingsProvider"; import { useSocket, useSubscribe } from "./SocketProvider"; import { useWidget } from "./WidgetProvider"; +const formatQuickReplies = (quick_replies?: IQuickReply[]): ISuggestion[] => + (quick_replies || []).map( + (qr) => + ({ + content_type: QuickReplyType.text, + text: qr.title, + payload: qr.payload, + } as ISuggestion), + ); + interface Participant { id: string; name: string; @@ -262,16 +274,11 @@ const ChatProvider: React.FC<{ "data" in newIOMessage && "quick_replies" in newIOMessage.data ) { - setSuggestions( - (newIOMessage.data.quick_replies || []).map( - (qr) => - ({ - content_type: QuickReplyType.text, - text: qr.title, - payload: qr.payload, - } as ISuggestion), - ), + const formattedSuggestions = formatQuickReplies( + newIOMessage.data.quick_replies, ); + + setSuggestions(formattedSuggestions); } else { setSuggestions([]); } @@ -327,6 +334,18 @@ const ChatProvider: React.FC<{ queryParams, ).toString()}`, ); + const mostRecentMessage = body.messages.at(-1); + + if ( + mostRecentMessage && + mostRecentMessage.type === IncomingMessageType.quick_replies + ) { + const formattedSuggestions = formatQuickReplies( + mostRecentMessage.data["quick_replies"], + ); + + setSuggestions(formattedSuggestions); + } localStorage.setItem("profile", JSON.stringify(body.profile)); setMessages(