From 4fcace18f3949ba527195e541d271c8439094d3f Mon Sep 17 00:00:00 2001 From: DaKheera47 Date: Thu, 15 Jan 2026 22:44:52 +0000 Subject: [PATCH] jd can be edited --- .../src/client/components/DiscoveredPanel.tsx | 37 +++++++++++++++++-- .../src/client/components/TailoringEditor.tsx | 28 ++++++++++++-- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/orchestrator/src/client/components/DiscoveredPanel.tsx b/orchestrator/src/client/components/DiscoveredPanel.tsx index 1ac58dc..16c091d 100644 --- a/orchestrator/src/client/components/DiscoveredPanel.tsx +++ b/orchestrator/src/client/components/DiscoveredPanel.tsx @@ -247,6 +247,7 @@ const TailorMode: React.FC = ({ }) => { const [catalog, setCatalog] = useState([]); const [summary, setSummary] = useState(job.tailoredSummary || ""); + const [jobDescription, setJobDescription] = useState(job.jobDescription || ""); const [selectedIds, setSelectedIds] = useState>(() => { const saved = job.selectedProjectIds?.split(",").filter(Boolean) ?? []; return new Set(saved); @@ -265,13 +266,15 @@ const TailorMode: React.FC = ({ // Reset form when job changes useEffect(() => { setSummary(job.tailoredSummary || ""); + setJobDescription(job.jobDescription || ""); const saved = job.selectedProjectIds?.split(",").filter(Boolean) ?? []; setSelectedIds(new Set(saved)); setDraftStatus("saved"); - }, [job.id, job.tailoredSummary, job.selectedProjectIds]); + }, [job.id, job.tailoredSummary, job.selectedProjectIds, job.jobDescription]); // Track unsaved changes const savedSummary = job.tailoredSummary || ""; + const savedDescription = job.jobDescription || ""; const savedIds = useMemo(() => { const saved = job.selectedProjectIds?.split(",").filter(Boolean) ?? []; return new Set(saved); @@ -279,12 +282,13 @@ const TailorMode: React.FC = ({ const hasChanges = useMemo(() => { if (summary !== savedSummary) return true; + if (jobDescription !== savedDescription) return true; if (selectedIds.size !== savedIds.size) return true; for (const id of selectedIds) { if (!savedIds.has(id)) return true; } return false; - }, [summary, savedSummary, selectedIds, savedIds]); + }, [summary, savedSummary, jobDescription, savedDescription, selectedIds, savedIds]); // Update draft status when changes are made useEffect(() => { @@ -302,6 +306,7 @@ const TailorMode: React.FC = ({ setDraftStatus("saving"); await api.updateJob(job.id, { tailoredSummary: summary, + jobDescription: jobDescription, selectedProjectIds: Array.from(selectedIds).join(","), }); setDraftStatus("saved"); @@ -311,7 +316,7 @@ const TailorMode: React.FC = ({ }, 1500); return () => clearTimeout(timeout); - }, [summary, selectedIds, hasChanges, draftStatus, job.id]); + }, [summary, jobDescription, selectedIds, hasChanges, draftStatus, job.id]); const handleToggleProject = (id: string) => { const next = new Set(selectedIds); @@ -323,8 +328,19 @@ const TailorMode: React.FC = ({ const handleGenerateWithAI = async () => { try { setIsGenerating(true); + + // Save any pending changes first so AI uses the latest description + if (hasChanges) { + await api.updateJob(job.id, { + tailoredSummary: summary, + jobDescription: jobDescription, + selectedProjectIds: Array.from(selectedIds).join(","), + }); + } + const updatedJob = await api.summarizeJob(job.id, { force: true }); setSummary(updatedJob.tailoredSummary || ""); + setJobDescription(updatedJob.jobDescription || ""); if (updatedJob.selectedProjectIds) { setSelectedIds( new Set(updatedJob.selectedProjectIds.split(",").filter(Boolean)) @@ -348,6 +364,7 @@ const TailorMode: React.FC = ({ setIsSaving(true); await api.updateJob(job.id, { tailoredSummary: summary, + jobDescription: jobDescription, selectedProjectIds: Array.from(selectedIds).join(","), }); } catch { @@ -441,6 +458,20 @@ const TailorMode: React.FC = ({ + {/* Job Description */} +
+ +