remix-nlux
Version:
Remix IDE NLUX integration. Remix IDE is the leading IDE for building and deploying smart contracts on Ethereum. NLUX is a JavaScript and React library for building conversational AI experiences.
38 lines (33 loc) • 1.28 kB
text/typescript
import {ChatSegment} from '@shared/types/chatSegment/chatSegment';
import {RefObject, useEffect, useMemo} from 'react';
import {ChatSegmentImperativeProps} from '../../ChatSegment/props';
export const useChatSegmentsController = function <AiMsg>(
segments: ChatSegment<AiMsg>[],
) {
const chatSegmentsRef = useMemo(
() => new Map<string, RefObject<ChatSegmentImperativeProps<AiMsg>>>(), [],
);
useEffect(() => {
if (segments.length === 0) {
chatSegmentsRef.clear();
return;
}
const itemsInRefsMap = new Set<string>(chatSegmentsRef.keys());
const itemsInSegments = new Set<string>(segments.map((segment) => segment.uid));
itemsInRefsMap.forEach((itemInRefsMap) => {
if (!itemsInSegments.has(itemInRefsMap)) {
chatSegmentsRef.delete(itemInRefsMap);
}
});
}, [segments]);
return {
get: (uid: string) => chatSegmentsRef.get(uid)?.current,
getRef: (uid: string) => chatSegmentsRef.get(uid),
set: (uid: string, ref: RefObject<ChatSegmentImperativeProps<AiMsg>>) => {
chatSegmentsRef.set(uid, ref);
},
remove: (uid: string) => {
chatSegmentsRef.delete(uid);
},
};
};