| | import { useState, useEffect } from 'react'; |
| | import { Switch, useToastContext } from '@librechat/client'; |
| | import { useGetUserQuery, useUpdateMemoryPreferencesMutation } from '~/data-provider'; |
| | import { useLocalize } from '~/hooks'; |
| |
|
| | interface PersonalizationProps { |
| | hasMemoryOptOut: boolean; |
| | hasAnyPersonalizationFeature: boolean; |
| | } |
| |
|
| | export default function Personalization({ |
| | hasMemoryOptOut, |
| | hasAnyPersonalizationFeature, |
| | }: PersonalizationProps) { |
| | const localize = useLocalize(); |
| | const { showToast } = useToastContext(); |
| | const { data: user } = useGetUserQuery(); |
| | const [referenceSavedMemories, setReferenceSavedMemories] = useState(true); |
| |
|
| | const updateMemoryPreferencesMutation = useUpdateMemoryPreferencesMutation({ |
| | onSuccess: () => { |
| | showToast({ |
| | message: localize('com_ui_preferences_updated'), |
| | status: 'success', |
| | }); |
| | }, |
| | onError: () => { |
| | showToast({ |
| | message: localize('com_ui_error_updating_preferences'), |
| | status: 'error', |
| | }); |
| | |
| | setReferenceSavedMemories((prev) => !prev); |
| | }, |
| | }); |
| |
|
| | |
| | useEffect(() => { |
| | if (user?.personalization?.memories !== undefined) { |
| | setReferenceSavedMemories(user.personalization.memories); |
| | } |
| | }, [user?.personalization?.memories]); |
| |
|
| | const handleMemoryToggle = (checked: boolean) => { |
| | setReferenceSavedMemories(checked); |
| | updateMemoryPreferencesMutation.mutate({ memories: checked }); |
| | }; |
| |
|
| | if (!hasAnyPersonalizationFeature) { |
| | return ( |
| | <div className="flex flex-col gap-3 text-sm text-text-primary"> |
| | <div className="text-text-secondary">{localize('com_ui_no_personalization_available')}</div> |
| | </div> |
| | ); |
| | } |
| |
|
| | return ( |
| | <div className="flex flex-col gap-3 text-sm text-text-primary"> |
| | {/* Memory Settings Section */} |
| | {hasMemoryOptOut && ( |
| | <> |
| | <div className="border-b border-border-medium pb-3"> |
| | <div className="text-base font-semibold">{localize('com_ui_memory')}</div> |
| | </div> |
| | |
| | <div className="flex items-center justify-between"> |
| | <div> |
| | <div id="reference-saved-memories-label" className="flex items-center gap-2"> |
| | {localize('com_ui_reference_saved_memories')} |
| | </div> |
| | <div |
| | id="reference-saved-memories-description" |
| | className="mt-1 text-xs text-text-secondary" |
| | > |
| | {localize('com_ui_reference_saved_memories_description')} |
| | </div> |
| | </div> |
| | <Switch |
| | checked={referenceSavedMemories} |
| | onCheckedChange={handleMemoryToggle} |
| | disabled={updateMemoryPreferencesMutation.isLoading} |
| | aria-labelledby="reference-saved-memories-label" |
| | aria-describedby="reference-saved-memories-description" |
| | /> |
| | </div> |
| | </> |
| | )} |
| | </div> |
| | ); |
| | } |
| |
|