import { useRecoilState } from 'recoil'; import * as Tabs from '@radix-ui/react-tabs'; import React, { useState, useContext, useEffect, useCallback, useRef } from 'react'; import { useClearConversationsMutation } from 'librechat-data-provider'; import { ThemeContext, useLocalize, useOnClickOutside, useConversation, useConversations, } from '~/hooks'; import type { TDangerButtonProps } from '~/common'; import DangerButton from './DangerButton'; import store from '~/store'; import useLocalStorage from '~/hooks/useLocalStorage'; export const ThemeSelector = ({ theme, onChange, }: { theme: string; onChange: (value: string) => void; }) => { const localize = useLocalize(); return (
{localize('com_nav_theme')}
); }; export const ClearChatsButton = ({ confirmClear, className = '', showText = true, mutation, onClick, }: Pick< TDangerButtonProps, 'confirmClear' | 'mutation' | 'className' | 'showText' | 'onClick' >) => { return ( ); }; export const LangSelector = ({ langcode, onChange, }: { langcode: string; onChange: (value: string) => void; }) => { const localize = useLocalize(); return (
{localize('com_nav_language')}
); }; function General() { const { theme, setTheme } = useContext(ThemeContext); const clearConvosMutation = useClearConversationsMutation(); const [confirmClear, setConfirmClear] = useState(false); const [langcode, setLangcode] = useRecoilState(store.lang); const [selectedLang, setSelectedLang] = useLocalStorage('selectedLang', langcode); const { newConversation } = useConversation(); const { refreshConversations } = useConversations(); const contentRef = useRef(null); useOnClickOutside(contentRef, () => confirmClear && setConfirmClear(false), []); useEffect(() => { if (clearConvosMutation.isSuccess) { newConversation(); refreshConversations(); } }, [clearConvosMutation.isSuccess, newConversation, refreshConversations]); const clearConvos = useCallback(() => { if (confirmClear) { console.log('Clearing conversations...'); clearConvosMutation.mutate({}); setConfirmClear(false); } else { setConfirmClear(true); } }, [confirmClear, clearConvosMutation]); const changeTheme = useCallback( (value: string) => { setTheme(value); }, [setTheme], ); const changeLang = useCallback( (value: string) => { setSelectedLang(value); if (value === 'auto') { const userLang = navigator.language || navigator.languages[0]; setLangcode(userLang); localStorage.setItem('lang', userLang); } else { setLangcode(value); localStorage.setItem('lang', value); } }, [setLangcode, setSelectedLang], ); return (
); } export default React.memo(General);