diff --git a/application/api/user/routes.py b/application/api/user/routes.py index de5a3c0..eb5d7ac 100644 --- a/application/api/user/routes.py +++ b/application/api/user/routes.py @@ -37,6 +37,11 @@ def delete_conversation(): return {"status": "ok"} +@user.route("/api/delete_all_conversations", methods=["POST"]) +def delete_all_conversations(): + conversations_collection.delete_many({}) + return {"status": "ok"} + @user.route("/api/get_conversations", methods=["get"]) def get_conversations(): # provides a list of conversations diff --git a/frontend/src/Navigation.tsx b/frontend/src/Navigation.tsx index c6b56e3..a13b37a 100644 --- a/frontend/src/Navigation.tsx +++ b/frontend/src/Navigation.tsx @@ -19,7 +19,9 @@ import SettingGearDark from './assets/settingGear-dark.svg'; import Add from './assets/add.svg'; import UploadIcon from './assets/upload.svg'; import { ActiveState } from './models/misc'; +import Trash from '../src/assets/trash.svg'; import APIKeyModal from './preferences/APIKeyModal'; + import { selectApiKeyStatus, selectSelectedDocs, @@ -41,6 +43,7 @@ import SelectDocsModal from './preferences/SelectDocsModal'; import ConversationTile from './conversation/ConversationTile'; import { useDarkTheme } from './hooks'; import SourceDropdown from './components/SourceDropdown'; +import DeleteConvModal from './preferences/DeleteConvModal'; interface NavigationProps { navOpen: boolean; @@ -75,6 +78,9 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { const [apiKeyModalState, setApiKeyModalState] = useState('INACTIVE'); + const [deleteConvModalState, setDeleteConvState] = + useState('INACTIVE'); + const isSelectedDocsSet = useSelector(selectSelectedDocsStatus); const [selectedDocsModalState, setSelectedDocsModalState] = useState(isSelectedDocsSet ? 'INACTIVE' : 'ACTIVE'); @@ -112,6 +118,16 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) { .catch((error) => console.error(error)); }; + const handleDeleteAllConversations = () => { + fetch(`${apiHost}/api/delete_all_conversations`, { + method: 'POST', + }) + .then(() => { + fetchConversations(); + }) + .catch((error) => console.error(error)); + }; + const handleDeleteClick = (index: number, doc: Doc) => { const docPath = 'indexes/' + 'local' + '/' + doc.name; @@ -260,7 +276,20 @@ export default function Navigation({ navOpen, setNavOpen }: NavigationProps) {
{conversations && (
-

Chats

+
+

Chats

+ setDeleteConvState('ACTIVE')} + /> +
{conversations?.map((conversation) => (
-
+ + void; + handleDeleteAllConv: () => void; +}) { + // const dispatch = useDispatch() + const modalRef = useRef(null); + const { isMobile } = useMediaQuery(); + + useOutsideAlerter( + modalRef, + () => { + if (isMobile && modalState === 'ACTIVE') { + setModalState('INACTIVE'); + } + }, + [modalState], + ); + + function handleSubmit() { + handleDeleteAllConv(); + setModalState('INACTIVE'); + } + + function handleCancel() { + setModalState('INACTIVE'); + } + + return ( + { + return ( +
+

+ Are you sure you want to delete all the conversations? +

+

+
+ ); + }} + /> + ); +}