Spaces:
Runtime error
Runtime error
import * as Tabs from '@radix-ui/react-tabs'; | |
import { CheckIcon } from 'lucide-react'; | |
import { ThemeContext } from '~/hooks/ThemeContext'; | |
import React, { useState, useContext, useCallback } from 'react'; | |
import { useClearConversationsMutation } from '@librechat/data-provider'; | |
import { useRecoilValue } from 'recoil'; | |
import store from '~/store'; | |
import { localize } from '~/localization/Translation'; | |
export const ThemeSelector = ({ | |
theme, | |
onChange, | |
}: { | |
theme: string; | |
onChange: (value: string) => void; | |
}) => { | |
const lang = useRecoilValue(store.lang); | |
return ( | |
<div className="flex items-center justify-between"> | |
<div>{localize(lang, 'com_nav_theme')}</div> | |
<select | |
className="w-24 rounded border border-black/10 bg-transparent text-sm dark:border-white/20 dark:bg-gray-900" | |
onChange={(e) => onChange(e.target.value)} | |
value={theme} | |
> | |
<option value="system">{localize(lang, 'com_nav_theme_system')}</option> | |
<option value="dark">{localize(lang, 'com_nav_theme_dark')}</option> | |
<option value="light">{localize(lang, 'com_nav_theme_light')}</option> | |
</select> | |
</div> | |
); | |
}; | |
export const ClearChatsButton = ({ | |
confirmClear, | |
showText = true, | |
onClick, | |
}: { | |
confirmClear: boolean; | |
showText: boolean; | |
onClick: () => void; | |
}) => { | |
const lang = useRecoilValue(store.lang); | |
return ( | |
<div className="flex items-center justify-between"> | |
{showText && <div>{localize(lang, 'com_nav_clear_all_chats')}</div>} | |
<button | |
className="btn relative bg-red-600 text-white hover:bg-red-800" | |
type="button" | |
id="clearConvosBtn" | |
onClick={onClick} | |
> | |
{confirmClear ? ( | |
<div className="flex w-full items-center justify-center gap-2" id="clearConvosTxt"> | |
<CheckIcon className="h-5 w-5" /> {localize(lang, 'com_nav_confirm_clear')} | |
</div> | |
) : ( | |
<div className="flex w-full items-center justify-center gap-2" id="clearConvosTxt"> | |
{localize(lang, 'com_nav_clear')} | |
</div> | |
)} | |
</button> | |
</div> | |
); | |
}; | |
function General() { | |
const { theme, setTheme } = useContext(ThemeContext); | |
const clearConvosMutation = useClearConversationsMutation(); | |
const [confirmClear, setConfirmClear] = useState(false); | |
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], | |
); | |
return ( | |
<Tabs.Content value="general" role="tabpanel" className="w-full md:min-h-[300px]"> | |
<div className="flex flex-col gap-3 text-sm text-gray-600 dark:text-gray-300"> | |
<div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700"> | |
<ThemeSelector theme={theme} onChange={changeTheme} /> | |
</div> | |
<div className="border-b pb-3 last-of-type:border-b-0 dark:border-gray-700"> | |
<ClearChatsButton confirmClear={confirmClear} onClick={clearConvos} showText={true} /> | |
</div> | |
</div> | |
</Tabs.Content> | |
); | |
} | |
export default React.memo(General); | |