From 895589c235d7fd8190d0eb5e3fcc20e19ce53296 Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Sat, 26 Apr 2025 17:59:30 -0700 Subject: [PATCH] Added delete confirmation --- frontend/src/App.tsx | 1 + frontend/src/Controls.tsx | 2 +- frontend/src/Conversation.tsx | 19 ++----- frontend/src/DeleteConfirmation.tsx | 88 +++++++++++++++++++++++++++++ frontend/src/ResumeBuilder.tsx | 17 +++--- src/server.py | 4 +- 6 files changed, 105 insertions(+), 26 deletions(-) create mode 100644 frontend/src/DeleteConfirmation.tsx diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 0279555..c4c323b 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -180,6 +180,7 @@ const App = () => { {...{ type: "chat", prompt: "What would you like to know about James?", + resetLabel: "chat", sessionId, connectionBase, setSnack, diff --git a/frontend/src/Controls.tsx b/frontend/src/Controls.tsx index adc7726..f74d1bf 100644 --- a/frontend/src/Controls.tsx +++ b/frontend/src/Controls.tsx @@ -487,7 +487,7 @@ const Controls = ({ sessionId, setSnack, connectionBase }: ControlsParams) => { - + ); } diff --git a/frontend/src/Conversation.tsx b/frontend/src/Conversation.tsx index 83ca2b2..7a734b5 100644 --- a/frontend/src/Conversation.tsx +++ b/frontend/src/Conversation.tsx @@ -3,10 +3,8 @@ import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Tooltip from '@mui/material/Tooltip'; import Button from '@mui/material/Button'; -import IconButton from '@mui/material/IconButton'; import Box from '@mui/material/Box'; import SendIcon from '@mui/icons-material/Send'; -import ResetIcon from '@mui/icons-material/RestartAlt'; import { SxProps, Theme } from '@mui/material'; import PropagateLoader from "react-spinners/PropagateLoader"; @@ -14,6 +12,7 @@ import { Message, MessageList, MessageData } from './Message'; import { SetSnackType } from './Snack'; import { ContextStatus } from './ContextStatus'; import { useAutoScrollToBottom } from './AutoScroll'; +import { DeleteConfirmation } from './DeleteConfirmation'; import './Conversation.css'; @@ -498,18 +497,10 @@ const Conversation = forwardRef(({ } - { reset(); resetAction && resetAction(); }} - > - - - - + m.role !== 'content') === -1} + onDelete={() => { reset(); resetAction && resetAction(); }} /> + + + + + ); +} + +export { + DeleteConfirmation +}; \ No newline at end of file diff --git a/frontend/src/ResumeBuilder.tsx b/frontend/src/ResumeBuilder.tsx index 2818dda..cf9587a 100644 --- a/frontend/src/ResumeBuilder.tsx +++ b/frontend/src/ResumeBuilder.tsx @@ -119,12 +119,6 @@ const ResumeBuilder: React.FC = ({ setHasJobDescription(true); } - /* If there is more than one message, it is user: "...JOB_DESCRIPTION...", assistant: "...stored..." - * which means a resume has been generated. */ - if (reduced.length > 1) { - setHasResume(true); - } - /* Filter out any messages which the server injected for state management */ reduced = reduced.filter(m => m.display !== "hide"); @@ -253,6 +247,7 @@ const ResumeBuilder: React.FC = ({ actionLabel: "Generate Resume", prompt: "Paste a job description, then click Generate...", multiline: true, + resetLabel: `job description${hasFacts ? ", resume, and fact check" : hasResume ? " and resume" : ""}`, messageFilter: filterJobDescriptionMessages, resetAction: resetJobDescription, onResponse: jobResponse, @@ -269,6 +264,7 @@ const ResumeBuilder: React.FC = ({ type: "job_description", actionLabel: "Send", prompt: "Ask a question about this job description...", + resetLabel: `job description${hasFacts ? ", resume, and fact check" : hasResume ? " and resume" : ""}`, messageFilter: filterJobDescriptionMessages, defaultPrompts: jobDescriptionQuestions, resetAction: resetJobDescription, @@ -279,7 +275,7 @@ const ResumeBuilder: React.FC = ({ }} /> } - }, [connectionBase, filterJobDescriptionMessages, hasJobDescription, sessionId, setSnack, jobResponse, resetJobDescription]); + }, [connectionBase, filterJobDescriptionMessages, hasJobDescription, sessionId, setSnack, jobResponse, resetJobDescription, hasFacts, hasResume]); /** * Renders the resume view with loading indicator @@ -299,6 +295,7 @@ const ResumeBuilder: React.FC = ({ actionLabel: "Fact Check", multiline: true, type: "resume", + resetLabel: `job description${hasFacts ? ", resume, and fact check" : hasResume ? " and resume" : ""}`, messageFilter: filterResumeMessages, onResponse: resumeResponse, resetAction: resetResume, @@ -314,6 +311,7 @@ const ResumeBuilder: React.FC = ({ type: "resume", actionLabel: "Send", prompt: "Ask a question about this job resume...", + resetLabel: `job description${hasFacts ? ", resume, and fact check" : hasResume ? " and resume" : ""}`, messageFilter: filterResumeMessages, defaultPrompts: resumeQuestions, resetAction: resetResume, @@ -324,7 +322,7 @@ const ResumeBuilder: React.FC = ({ }} /> } - }, [connectionBase, filterResumeMessages, hasFacts, sessionId, setSnack, resumeResponse, resetResume]); + }, [connectionBase, filterResumeMessages, hasFacts, sessionId, setSnack, resumeResponse, resetResume, hasResume]); /** * Renders the fact check view @@ -342,6 +340,7 @@ const ResumeBuilder: React.FC = ({ type: "fact_check", actionLabel: "Send", prompt: "Ask a question about any discrepencies...", + resetLabel: `job description${hasFacts ? ", resume, and fact check" : hasResume ? " and resume" : ""}`, messageFilter: filterFactsMessages, defaultPrompts: factsQuestions, resetAction: resetFacts, @@ -351,7 +350,7 @@ const ResumeBuilder: React.FC = ({ setSnack, }} /> - }, [connectionBase, sessionId, setSnack, factsResponse, filterFactsMessages, resetFacts]); + }, [connectionBase, sessionId, setSnack, factsResponse, filterFactsMessages, resetFacts, hasResume, hasFacts]); /** * Gets the appropriate content based on active state for Desktop diff --git a/src/server.py b/src/server.py index e18332e..42309de 100644 --- a/src/server.py +++ b/src/server.py @@ -579,8 +579,8 @@ class WebServer: case "history": reset_map = { "job_description": ("job_description", "resume", "fact_check"), - "resume": ("resume", "fact_check"), - "fact_check": ("fact_check",), + "resume": ("job_description", "resume", "fact_check"), + "fact_check": ("job_description", "resume", "fact_check"), "chat": ("chat",), } resets = reset_map.get(session_type, ())