import { Match, Switch, createSignal, onMount } from 'solid-js' import { useStore } from '@nanostores/solid' import { createShortcut } from '@solid-primitives/keyboard' import { currentErrorMessage, isSendBoxFocus, scrollController } from '@/stores/ui' import { addConversation, conversationMap, currentConversationId } from '@/stores/conversation' import { loadingStateMap, streamsMap } from '@/stores/streams' import { handlePrompt } from '@/logics/conversation' import { globalAbortController } from '@/stores/settings' import { useI18n, useMobileScreen } from '@/hooks' import Button from './ui/Button' import { fetchData } from '../http/api' export default () => { const { t } = useI18n() let inputRef: HTMLTextAreaElement const $conversationMap = useStore(conversationMap) const $currentConversationId = useStore(currentConversationId) const $isSendBoxFocus = useStore(isSendBoxFocus) const $currentErrorMessage = useStore(currentErrorMessage) const $streamsMap = useStore(streamsMap) const $loadingStateMap = useStore(loadingStateMap) const $globalAbortController = useStore(globalAbortController) const [inputPrompt, setInputPrompt] = createSignal('') const [footerClass, setFooterClass] = createSignal('') const isEditing = () => inputPrompt() || $isSendBoxFocus() const currentConversation = () => { return $conversationMap()[$currentConversationId()] } const isStreaming = () => !!$streamsMap()[$currentConversationId()] const isLoading = () => !!$loadingStateMap()[$currentConversationId()] onMount(() => { fetchData({}, function(data) { if(data.code==201 || data.code==401){ currentErrorMessage.set(data) return ; } // 登录后的一些操作 }, '/chatgptApi', 'POST'); createShortcut(['Control', 'Enter'], () => { $isSendBoxFocus() && handleSend() }) useMobileScreen(() => { setFooterClass('sticky bottom-0 left-0 right-0 overflow-hidden') }) }) const stateType = () => { if ($currentErrorMessage()) return $currentErrorMessage().code==401 ? 'login' : 'error' else if (isLoading() || isStreaming()) return 'loading' else if (isEditing()) return 'editing' else return 'normal' } const EmptyState = () => (
{ isSendBoxFocus.set(true) inputRef.focus() }} >
{t('send.placeholder')}
) const EditState = () => (