UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

80 lines (63 loc) 2.47 kB
import { t } from 'i18next'; import { ChatTopic, ChatTopicSummary, GroupedTopic } from '@/types/topic'; import { groupTopicsByTime } from '@/utils/client/topic'; import { ChatStoreState } from '../../initialState'; const currentTopics = (s: ChatStoreState): ChatTopic[] | undefined => s.topicMaps[s.activeId]; const currentActiveTopic = (s: ChatStoreState): ChatTopic | undefined => { return currentTopics(s)?.find((topic) => topic.id === s.activeTopicId); }; const searchTopics = (s: ChatStoreState): ChatTopic[] => s.searchTopics; const displayTopics = (s: ChatStoreState): ChatTopic[] | undefined => currentTopics(s); const currentFavTopics = (s: ChatStoreState): ChatTopic[] => currentTopics(s)?.filter((s) => s.favorite) || []; const currentUnFavTopics = (s: ChatStoreState): ChatTopic[] => currentTopics(s)?.filter((s) => !s.favorite) || []; const currentTopicLength = (s: ChatStoreState): number => currentTopics(s)?.length || 0; const getTopicById = (id: string) => (s: ChatStoreState): ChatTopic | undefined => currentTopics(s)?.find((topic) => topic.id === id); const currentActiveTopicSummary = (s: ChatStoreState): ChatTopicSummary | undefined => { const activeTopic = currentActiveTopic(s); if (!activeTopic) return undefined; return { content: activeTopic.historySummary || '', model: activeTopic.metadata?.model || '', provider: activeTopic.metadata?.provider || '', }; }; const isCreatingTopic = (s: ChatStoreState) => s.creatingTopic; const isUndefinedTopics = (s: ChatStoreState) => !currentTopics(s); const isInSearchMode = (s: ChatStoreState) => s.inSearchingMode; const isSearchingTopic = (s: ChatStoreState) => s.isSearchingTopic; const groupedTopicsSelector = (s: ChatStoreState): GroupedTopic[] => { const topics = displayTopics(s); if (!topics) return []; const favTopics = currentFavTopics(s); const unfavTopics = currentUnFavTopics(s); return favTopics.length > 0 ? [ { children: favTopics, id: 'favorite', title: t('favorite', { ns: 'topic' }), }, ...groupTopicsByTime(unfavTopics), ] : groupTopicsByTime(topics); }; export const topicSelectors = { currentActiveTopic, currentActiveTopicSummary, currentTopicLength, currentTopics, currentUnFavTopics, displayTopics, getTopicById, groupedTopicsSelector, isCreatingTopic, isInSearchMode, isSearchingTopic, isUndefinedTopics, searchTopics, };