@plteam/chat-ui
Version:
CUI Kit is a free and open-source library for creating AI assistant chat interfaces, built with React, Material UI, and TypeScript
26 lines (25 loc) • 1.65 kB
JavaScript
import * as React from 'react';
import HistorySkeleton from '../HistorySkeleton';
import ThreadDeleteConfirm from '../ThreadDeleteConfirm';
import { useThreadsList } from './useThreadsList';
import ThreadListMapBlockGroupItem from './ThreadListMapBlockGroupItem';
import ThreadListItemMenu from '../ThreadListItemMenu';
import { useObserverValue } from '../../hooks/useObserverValue';
import { useHistoryContext } from '../../core/history/HistoryContext';
const ThreadsListMapBlock = () => {
const { apiRef, loading, slots, slotProps, internal } = useHistoryContext();
const threads = useObserverValue(internal?.model.list) ?? [];
const groupsMap = useThreadsList(threads, internal?.model) ?? {};
const setThread = (thread) => {
if (internal?.model?.currentThread.value?.id !== thread.id) {
apiRef.current?.onChangeCurrentThread?.({ thread });
apiRef.current?.onChangeThread(thread.id);
}
};
return (React.createElement(React.Fragment, null,
React.createElement(slots.threadsList, { ...slotProps.threadsList }, (loading || !internal) ? (React.createElement(HistorySkeleton, null)) : (React.createElement(React.Fragment, null,
groupsMap.map((groupModel, key) => (React.createElement(ThreadListMapBlockGroupItem, { key: groupModel.data.id, listGroupItem: groupModel, setThread: setThread, index: key, model: internal.model, slots: slots, slotProps: slotProps }))),
React.createElement(ThreadListItemMenu, { model: internal.model })))),
React.createElement(ThreadDeleteConfirm, null)));
};
export default ThreadsListMapBlock;