From 096ac21b190d665ef094e5b21624608f33b71b66 Mon Sep 17 00:00:00 2001 From: DaKheera47 Date: Fri, 20 Feb 2026 21:15:22 +0000 Subject: [PATCH] Use optimistic mark-as-applied mutation across client entry points --- orchestrator/src/client/components/ReadyPanel.tsx | 6 ++++-- orchestrator/src/client/pages/OrchestratorPage.tsx | 6 ++++-- .../src/client/pages/orchestrator/JobDetailPanel.tsx | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/orchestrator/src/client/components/ReadyPanel.tsx b/orchestrator/src/client/components/ReadyPanel.tsx index d0066ce..6524535 100644 --- a/orchestrator/src/client/components/ReadyPanel.tsx +++ b/orchestrator/src/client/components/ReadyPanel.tsx @@ -46,6 +46,7 @@ import { safeFilenamePart, } from "@/lib/utils"; import * as api from "../api"; +import { useMarkAsAppliedMutation } from "../hooks/queries/useJobMutations"; import { useProfile } from "../hooks/useProfile"; import { useRescoreJob } from "../hooks/useRescoreJob"; import { FitAssessment, JobHeader, TailoredSummary } from "."; @@ -82,6 +83,7 @@ export const ReadyPanel: React.FC = ({ timeoutId: ReturnType; } | null>(null); const previousJobIdRef = useRef(null); + const markAsAppliedMutation = useMarkAsAppliedMutation(); const { personName } = useProfile(); @@ -148,7 +150,7 @@ export const ReadyPanel: React.FC = ({ try { setIsMarkingApplied(true); - await api.markAsApplied(job.id); + await markAsAppliedMutation.mutateAsync(job.id); // Store for undo const timeoutId = setTimeout(() => { @@ -181,7 +183,7 @@ export const ReadyPanel: React.FC = ({ } finally { setIsMarkingApplied(false); } - }, [job, onJobMoved, onJobUpdated, handleUndoApplied]); + }, [job, markAsAppliedMutation, onJobMoved, onJobUpdated, handleUndoApplied]); const handleRegenerate = useCallback(async () => { if (!job) return; diff --git a/orchestrator/src/client/pages/OrchestratorPage.tsx b/orchestrator/src/client/pages/OrchestratorPage.tsx index 7089e71..5adc734 100644 --- a/orchestrator/src/client/pages/OrchestratorPage.tsx +++ b/orchestrator/src/client/pages/OrchestratorPage.tsx @@ -1,3 +1,4 @@ +import { useMarkAsAppliedMutation } from "@client/hooks/queries/useJobMutations"; import { useHotkeys } from "@client/hooks/useHotkeys"; import { useProfile } from "@client/hooks/useProfile"; import { useSettings } from "@client/hooks/useSettings"; @@ -146,6 +147,7 @@ export const OrchestratorPage: React.FC = () => { ); const { settings, refreshSettings } = useSettings(); + const markAsAppliedMutation = useMarkAsAppliedMutation(); const { jobs, selectedJob, @@ -438,8 +440,8 @@ export const OrchestratorPage: React.FC = () => { if (shortcutActionInFlight.current) return; shortcutActionInFlight.current = true; const jobId = selectedJob.id; - api - .markAsApplied(jobId) + markAsAppliedMutation + .mutateAsync(jobId) .then(async () => { toast.success("Marked as applied", { description: `${selectedJob.title} at ${selectedJob.employer}`, diff --git a/orchestrator/src/client/pages/orchestrator/JobDetailPanel.tsx b/orchestrator/src/client/pages/orchestrator/JobDetailPanel.tsx index 06dfe94..1238f19 100644 --- a/orchestrator/src/client/pages/orchestrator/JobDetailPanel.tsx +++ b/orchestrator/src/client/pages/orchestrator/JobDetailPanel.tsx @@ -42,6 +42,7 @@ import { import { JobDetailsEditDrawer } from "../../components/JobDetailsEditDrawer"; import { ReadyPanel } from "../../components/ReadyPanel"; import { TailoringEditor } from "../../components/TailoringEditor"; +import { useMarkAsAppliedMutation } from "../../hooks/queries/useJobMutations"; import { useProfile } from "../../hooks/useProfile"; import type { FilterTab } from "./constants"; @@ -73,6 +74,7 @@ export const JobDetailPanel: React.FC = ({ const [isEditDetailsOpen, setIsEditDetailsOpen] = useState(false); const saveTailoringRef = useRef Promise)>(null); const previousSelectedJobIdRef = useRef(null); + const markAsAppliedMutation = useMarkAsAppliedMutation(); const { personName } = useProfile(); @@ -227,7 +229,7 @@ export const JobDetailPanel: React.FC = ({ const handleApply = async () => { if (!selectedJob) return; try { - await api.markAsApplied(selectedJob.id); + await markAsAppliedMutation.mutateAsync(selectedJob.id); toast.success("Marked as applied"); await onJobUpdated(); } catch (error) {