mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
💬 feat: Temporary Chats (#5493)
* feat: add expiredAt property to Conversation and Message models Added `expiredAt` property to both Conversation and Message schemas. Configured `expireAfterSeconds` index in MongoDB to automatically delete documents after a specified period. * feat(data-provider): add isTemporary and expiredAt properties to support temporary chats Added `isTemporary` property to TPayload and TSubmission for API calls for temporary chat. Additionally, added `expiredAt` property to `tConversationSchema` to determine if a chat is temporary. * feat: implement isTemporary state management Add Recoil state for tracking temporary conversations, update event handlers to respect temporary chat status * feat: add configuration to interfaceconfig to hide the temporary chat switch * feat: add Temporary Chat UI with switch and modify related behaviors - Added a Temporary Chat switch button at the end of dropdown lists in each model. - Updated the form background color to black when Temporary Chat is enabled. - Modified Navigation to exclude Temporary Chats from the chat list. * fix: exclude Temporary Chats from search results Updated the getConvosQueried query to ensure that Temporary Chats are not included in the search results. * fix: hide bookmark button for Temporary Chats Updated the UI to ensure that the bookmark button is not displayed when a chat is as Temporary Chat. * chore: update isTemporary state management in ChatRoute * chore: fix to pass the tests
This commit is contained in:
parent
5f9543f6fc
commit
8c404ae056
24 changed files with 185 additions and 13 deletions
61
client/src/components/Input/ModelSelect/TemporaryChat.tsx
Normal file
61
client/src/components/Input/ModelSelect/TemporaryChat.tsx
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import { useMemo } from 'react';
|
||||
|
||||
import { MessageCircleDashed } from 'lucide-react';
|
||||
import { useRecoilState, useRecoilValue } from 'recoil';
|
||||
import { useGetStartupConfig } from 'librechat-data-provider/react-query';
|
||||
import { Constants, getConfigDefaults } from 'librechat-data-provider';
|
||||
import temporaryStore from '~/store/temporary';
|
||||
import { Switch } from '~/components/ui';
|
||||
import { cn } from '~/utils';
|
||||
import store from '~/store';
|
||||
|
||||
export const TemporaryChat = () => {
|
||||
const { data: startupConfig } = useGetStartupConfig();
|
||||
const defaultInterface = getConfigDefaults().interface;
|
||||
const [isTemporary, setIsTemporary] = useRecoilState(temporaryStore.isTemporary);
|
||||
const conversation = useRecoilValue(store.conversationByIndex(0)) || undefined;
|
||||
const conversationId = conversation?.conversationId ?? '';
|
||||
const interfaceConfig = useMemo(
|
||||
() => startupConfig?.interface ?? defaultInterface,
|
||||
[startupConfig],
|
||||
);
|
||||
|
||||
if (!interfaceConfig.temporaryChat) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const isActiveConvo = Boolean(
|
||||
conversation &&
|
||||
conversationId &&
|
||||
conversationId !== Constants.NEW_CONVO &&
|
||||
conversationId !== 'search',
|
||||
);
|
||||
|
||||
const onClick = () => {
|
||||
if (isActiveConvo) {
|
||||
return;
|
||||
}
|
||||
setIsTemporary(!isTemporary);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="sticky bottom-0 border-t border-gray-200 bg-white px-6 py-4 dark:border-gray-700 dark:bg-gray-700">
|
||||
<div className="flex items-center">
|
||||
<div className={cn('flex flex-1 items-center gap-2', isActiveConvo && 'opacity-40')}>
|
||||
<MessageCircleDashed className="icon-sm" />
|
||||
<span className="text-sm text-gray-700 dark:text-gray-300">Temporary Chat</span>
|
||||
</div>
|
||||
<div className="ml-auto flex items-center">
|
||||
<Switch
|
||||
id="enableUserMsgMarkdown"
|
||||
checked={isTemporary}
|
||||
onCheckedChange={onClick}
|
||||
disabled={isActiveConvo}
|
||||
className="ml-4"
|
||||
data-testid="enableUserMsgMarkdown"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue