fix: race condition in new context event
This commit is contained in:
parent
9a65a1e7c7
commit
62de293194
@ -46,6 +46,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
const [displayMessages, setDisplayMessages] = useState<Message[]>([])
|
const [displayMessages, setDisplayMessages] = useState<Message[]>([])
|
||||||
const [hasMore, setHasMore] = useState(false)
|
const [hasMore, setHasMore] = useState(false)
|
||||||
const [isLoadingMore, setIsLoadingMore] = useState(false)
|
const [isLoadingMore, setIsLoadingMore] = useState(false)
|
||||||
|
const [isProcessingContext, setIsProcessingContext] = useState(false)
|
||||||
const { messages, displayCount, loading, updateMessages, clearTopicMessages, deleteMessage } =
|
const { messages, displayCount, loading, updateMessages, clearTopicMessages, deleteMessage } =
|
||||||
useMessageOperations(topic)
|
useMessageOperations(topic)
|
||||||
|
|
||||||
@ -107,6 +108,10 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
EventEmitter.on(EVENT_NAMES.NEW_CONTEXT, async () => {
|
EventEmitter.on(EVENT_NAMES.NEW_CONTEXT, async () => {
|
||||||
|
if (isProcessingContext) return
|
||||||
|
setIsProcessingContext(true)
|
||||||
|
|
||||||
|
try {
|
||||||
const messages = messagesRef.current
|
const messages = messagesRef.current
|
||||||
|
|
||||||
if (messages.length === 0) {
|
if (messages.length === 0) {
|
||||||
@ -116,7 +121,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
const lastMessage = last(messages)
|
const lastMessage = last(messages)
|
||||||
|
|
||||||
if (lastMessage?.type === 'clear') {
|
if (lastMessage?.type === 'clear') {
|
||||||
deleteMessage(lastMessage)
|
await deleteMessage(lastMessage)
|
||||||
scrollToBottom()
|
scrollToBottom()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -126,6 +131,9 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
await updateMessages(newMessages)
|
await updateMessages(newMessages)
|
||||||
|
|
||||||
scrollToBottom()
|
scrollToBottom()
|
||||||
|
} finally {
|
||||||
|
setIsProcessingContext(false)
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
EventEmitter.on(EVENT_NAMES.NEW_BRANCH, async (index: number) => {
|
EventEmitter.on(EVENT_NAMES.NEW_BRANCH, async (index: number) => {
|
||||||
const newTopic = getDefaultTopic(assistant.id)
|
const newTopic = getDefaultTopic(assistant.id)
|
||||||
@ -151,7 +159,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
|||||||
|
|
||||||
return () => unsubscribes.forEach((unsub) => unsub())
|
return () => unsubscribes.forEach((unsub) => unsub())
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [assistant, dispatch, scrollToBottom, topic])
|
}, [assistant, dispatch, scrollToBottom, topic, isProcessingContext])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
runAsyncFunction(async () => {
|
runAsyncFunction(async () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user