mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-25 11:46:12 +01:00
88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
|
|
import { useState, useEffect } from 'react';
|
||
|
|
import { useGetUserQuery, useUpdateMemoryPreferencesMutation } from '~/data-provider';
|
||
|
|
import { useToastContext } from '~/Providers';
|
||
|
|
import { Switch } from '~/components/ui';
|
||
|
|
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',
|
||
|
|
});
|
||
|
|
// Revert the toggle on error
|
||
|
|
setReferenceSavedMemories((prev) => !prev);
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
// Initialize state from user data
|
||
|
|
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 className="flex items-center gap-2">
|
||
|
|
{localize('com_ui_reference_saved_memories')}
|
||
|
|
</div>
|
||
|
|
<div 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-label={localize('com_ui_reference_saved_memories')}
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
</>
|
||
|
|
)}
|
||
|
|
</div>
|
||
|
|
);
|
||
|
|
}
|