43 lines
940 B
TypeScript
43 lines
940 B
TypeScript
import { JSONValue } from 'ai';
|
|
import { Dispatch, memo, SetStateAction } from 'react';
|
|
|
|
import { UIBlock } from './block';
|
|
import { useBlockStream } from './use-block-stream';
|
|
|
|
interface BlockStreamHandlerProps {
|
|
setBlock: Dispatch<SetStateAction<UIBlock>>;
|
|
streamingData: JSONValue[] | undefined;
|
|
}
|
|
|
|
export function PureBlockStreamHandler({
|
|
setBlock,
|
|
streamingData,
|
|
}: BlockStreamHandlerProps) {
|
|
useBlockStream({
|
|
streamingData,
|
|
setBlock,
|
|
});
|
|
|
|
return null;
|
|
}
|
|
|
|
function areEqual(
|
|
prevProps: BlockStreamHandlerProps,
|
|
nextProps: BlockStreamHandlerProps
|
|
) {
|
|
if (!prevProps.streamingData && !nextProps.streamingData) {
|
|
return true;
|
|
}
|
|
|
|
if (!prevProps.streamingData || !nextProps.streamingData) {
|
|
return false;
|
|
}
|
|
|
|
if (prevProps.streamingData.length !== nextProps.streamingData.length) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
export const BlockStreamHandler = memo(PureBlockStreamHandler, areEqual);
|