fix: handle suggestion stream parts (#700)
This commit is contained in:
parent
aa29cc5ace
commit
6c23a8a604
1 changed files with 25 additions and 1 deletions
|
|
@ -1,12 +1,13 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useChat } from 'ai/react';
|
import { useChat } from 'ai/react';
|
||||||
import { useEffect, useRef } from 'react';
|
import { useEffect, useRef, useState } from 'react';
|
||||||
import { BlockKind } from './block';
|
import { BlockKind } from './block';
|
||||||
import { Suggestion } from '@/lib/db/schema';
|
import { Suggestion } from '@/lib/db/schema';
|
||||||
import { initialBlockData, useBlock } from '@/hooks/use-block';
|
import { initialBlockData, useBlock } from '@/hooks/use-block';
|
||||||
import { useUserMessageId } from '@/hooks/use-user-message-id';
|
import { useUserMessageId } from '@/hooks/use-user-message-id';
|
||||||
import { cx } from 'class-variance-authority';
|
import { cx } from 'class-variance-authority';
|
||||||
|
import { useSWRConfig } from 'swr';
|
||||||
|
|
||||||
type DataStreamDelta = {
|
type DataStreamDelta = {
|
||||||
type:
|
type:
|
||||||
|
|
@ -28,6 +29,19 @@ export function DataStreamHandler({ id }: { id: string }) {
|
||||||
const { setBlock } = useBlock();
|
const { setBlock } = useBlock();
|
||||||
const lastProcessedIndex = useRef(-1);
|
const lastProcessedIndex = useRef(-1);
|
||||||
|
|
||||||
|
const { mutate } = useSWRConfig();
|
||||||
|
const [optimisticSuggestions, setOptimisticSuggestions] = useState<
|
||||||
|
Array<Suggestion>
|
||||||
|
>([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (optimisticSuggestions && optimisticSuggestions.length > 0) {
|
||||||
|
const [optimisticSuggestion] = optimisticSuggestions;
|
||||||
|
const url = `/api/suggestions?documentId=${optimisticSuggestion.documentId}`;
|
||||||
|
mutate(url, optimisticSuggestions, false);
|
||||||
|
}
|
||||||
|
}, [optimisticSuggestions, mutate]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!dataStream?.length) return;
|
if (!dataStream?.length) return;
|
||||||
|
|
||||||
|
|
@ -93,6 +107,16 @@ export function DataStreamHandler({ id }: { id: string }) {
|
||||||
status: 'streaming',
|
status: 'streaming',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
case 'suggestion':
|
||||||
|
setTimeout(() => {
|
||||||
|
setOptimisticSuggestions((currentSuggestions) => [
|
||||||
|
...currentSuggestions,
|
||||||
|
delta.content as Suggestion,
|
||||||
|
]);
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
return draftBlock;
|
||||||
|
|
||||||
case 'clear':
|
case 'clear':
|
||||||
return {
|
return {
|
||||||
...draftBlock,
|
...draftBlock,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue