diff options
| author | Clawd <ai@clawd.bot> | 2026-02-28 08:15:03 -0800 |
|---|---|---|
| committer | Clawd <ai@clawd.bot> | 2026-02-28 08:15:03 -0800 |
| commit | a60b4077ec7a231a7cd766ca7d1ba84d6fabfd13 (patch) | |
| tree | 587d66b9a105dc69078ff1704b979659cbab6d8b /renderer/src/App.tsx | |
| parent | e4b1b26c1d61854b93c2cc3cba1714df2d7417d5 (diff) | |
Add delete functionality for projects and sessions
- Add delete buttons (🗑️) next to project/session dropdowns
- Add confirmation dialogs before deletion
- Add onDeleteProject and onDeleteSession props to Header
- Implement delete handlers in App.tsx with error handling
- Clear selection and related state after deletion
- Add CSS styling for delete button with hover effect
Diffstat (limited to 'renderer/src/App.tsx')
| -rw-r--r-- | renderer/src/App.tsx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/renderer/src/App.tsx b/renderer/src/App.tsx index d5a2efd..26ac252 100644 --- a/renderer/src/App.tsx +++ b/renderer/src/App.tsx | |||
| @@ -237,6 +237,38 @@ export function App() { | |||
| 237 | setOriginalContent(""); | 237 | setOriginalContent(""); |
| 238 | }; | 238 | }; |
| 239 | 239 | ||
| 240 | const handleDeleteProject = async (id: string) => { | ||
| 241 | try { | ||
| 242 | await api.deleteProject(id); | ||
| 243 | setProjects((prev) => prev.filter((p) => p.id !== id)); | ||
| 244 | if (selectedProject?.id === id) { | ||
| 245 | setSelectedProject(null); | ||
| 246 | setSelectedSession(null); | ||
| 247 | setSessions([]); | ||
| 248 | setMessages([]); | ||
| 249 | setDocumentContent(""); | ||
| 250 | setOriginalContent(""); | ||
| 251 | } | ||
| 252 | } catch (err) { | ||
| 253 | setError(err instanceof Error ? err.message : "Failed to delete project"); | ||
| 254 | } | ||
| 255 | }; | ||
| 256 | |||
| 257 | const handleDeleteSession = async (id: string) => { | ||
| 258 | try { | ||
| 259 | await api.deleteSession(id); | ||
| 260 | setSessions((prev) => prev.filter((s) => s.id !== id)); | ||
| 261 | if (selectedSession?.id === id) { | ||
| 262 | setSelectedSession(null); | ||
| 263 | setMessages([]); | ||
| 264 | setDocumentContent(""); | ||
| 265 | setOriginalContent(""); | ||
| 266 | } | ||
| 267 | } catch (err) { | ||
| 268 | setError(err instanceof Error ? err.message : "Failed to delete session"); | ||
| 269 | } | ||
| 270 | }; | ||
| 271 | |||
| 240 | return ( | 272 | return ( |
| 241 | <div className="app"> | 273 | <div className="app"> |
| 242 | <Header | 274 | <Header |
| @@ -248,6 +280,8 @@ export function App() { | |||
| 248 | onSelectSession={setSelectedSession} | 280 | onSelectSession={setSelectedSession} |
| 249 | onCreateProject={handleCreateProject} | 281 | onCreateProject={handleCreateProject} |
| 250 | onCreateSession={handleCreateSession} | 282 | onCreateSession={handleCreateSession} |
| 283 | onDeleteProject={handleDeleteProject} | ||
| 284 | onDeleteSession={handleDeleteSession} | ||
| 251 | /> | 285 | /> |
| 252 | 286 | ||
| 253 | <div className="main-content"> | 287 | <div className="main-content"> |
