import { IAgentScopeRuntimeWebUIMessage, IAgentScopeRuntimeWebUIMessagesContext } from "@agentscope-ai/chat"; import { useGetState } from 'ahooks'; import React from "react"; import { createContext, useContextSelector } from 'use-context-selector'; export const ChatAnywhereMessagesContext = createContext({ messages: [], setMessages: () => { }, getMessages: () => [], }); export function ChatAnywhereMessagesContextProvider(props: { children: React.ReactNode | React.ReactNode[]; }) { const [messages, setMessages, getMessages] = useGetState([]); const value = { messages, setMessages, getMessages, }; return {props.children} ; } export const useChatAnywhereMessages = () => { const { setMessages, getMessages } = useContextSelector(ChatAnywhereMessagesContext, v => ({ setMessages: v.setMessages, getMessages: v.getMessages, })); const removeAllMessages = React.useCallback(() => { setMessages([]); }, []); const getMessage = React.useCallback((id: string) => { return getMessages().find(item => item.id === id); }, []); const removeMessage = React.useCallback((message: Partial) => { // @ts-ignore setMessages(prev => { return prev.filter(item => item.id !== message.id); }) }, []); const updateMessage = React.useCallback((message: Partial & { id: string }) => { // @ts-ignore setMessages((prev) => { const index = prev.findIndex((item) => item.id === message.id); if (index > -1) { const nextMessage = { ...prev[index], ...message }; return [...prev.slice(0, index), nextMessage, ...prev.slice(index + 1)]; } else { return [...prev, message]; } }); }, []); return { getMessages, removeAllMessages, getMessage, removeMessage, updateMessage, }; }