import { HotkeyEnum } from '@lobechat/const/hotkeys'; import { ActionIcon, Flexbox, Hotkey } from '@lobehub/ui'; import { Popconfirm } from 'antd'; import { LucideGalleryVerticalEnd, LucideMessageSquarePlus } from 'lucide-react'; import { memo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useIsMobile } from '@/hooks/useIsMobile'; import { useActionSWR } from '@/libs/swr'; import { useChatStore } from '@/store/chat'; import { useUserStore } from '@/store/user'; import { settingsSelectors } from '@/store/user/selectors'; const SaveTopic = memo(() => { const { t } = useTranslation('chat'); const hotkey = useUserStore(settingsSelectors.getHotkeyById(HotkeyEnum.SaveTopic)); const [hasTopic, openNewTopicOrSaveTopic] = useChatStore((s) => [ !!s.activeTopicId, s.openNewTopicOrSaveTopic, ]); const mobile = useIsMobile(); const { mutate, isValidating } = useActionSWR('openNewTopicOrSaveTopic', openNewTopicOrSaveTopic); const [confirmOpened, setConfirmOpened] = useState(false); const icon = hasTopic ? LucideMessageSquarePlus : LucideGalleryVerticalEnd; const desc = t(hasTopic ? 'topic.openNewTopic' : 'topic.saveCurrentMessages'); if (mobile) { return ( {t(hasTopic ? 'topic.checkOpenNewTopic' : 'topic.checkSaveCurrentMessages')} } onConfirm={() => mutate()} onOpenChange={setConfirmOpened} > setConfirmOpened(true)} /> ); } else { return ( mutate()} /> ); } }); SaveTopic.displayName = 'SaveTopic'; export default SaveTopic;