diff --git a/mechanic-pwa/frontend/src/pages/InspectionEditor.tsx b/mechanic-pwa/frontend/src/pages/InspectionEditor.tsx index 04bcb06..fbc9386 100644 --- a/mechanic-pwa/frontend/src/pages/InspectionEditor.tsx +++ b/mechanic-pwa/frontend/src/pages/InspectionEditor.tsx @@ -125,6 +125,10 @@ export default function InspectionEditor() { const [flow, setFlow] = useState({ kind: "idle" }); const [zoneLabels, setZoneLabels] = useState | null>(null); const [tireWearOpen, setTireWearOpen] = useState(false); + // Local draft заметок механика — синхронизируется с ins.notes когда осмотр + // прогружается / обновляется. Кнопка «Сохранить» появляется только когда + // draft отличается от сохранённого (см. notesDirty ниже). + const [notesDraft, setNotesDraft] = useState(""); useEffect(() => { loadZoneLabels().then(setZoneLabels); }, []); @@ -133,8 +137,18 @@ export default function InspectionEditor() { queryFn: () => getInspection(insId), }); + useEffect(() => { + if (ins?.notes !== undefined) setNotesDraft(ins.notes ?? ""); + }, [ins?.notes]); + const finalize = useMutation({ - mutationFn: () => patchInspection(insId, { status: "completed" }), + mutationFn: () => + // При завершении осмотра коммитим текст заметки тем же patch'ем — + // если механик что-то ввёл и сразу нажал «Завершить», не теряем. + patchInspection(insId, { + status: "completed", + notes: (notesDraft ?? "").trim() || undefined, + }), onSuccess: () => { toast.success("Осмотр завершён"); navigate(`/inspections/${insId}`); @@ -142,6 +156,15 @@ export default function InspectionEditor() { onError: () => toast.error("Не удалось завершить"), }); + const notesMutation = useMutation({ + mutationFn: (next: string) => patchInspection(insId, { notes: next }), + onSuccess: (updated) => { + toast.success("Заметка сохранена"); + qc.setQueryData(["inspection", insId], updated); + }, + onError: () => toast.error("Не удалось сохранить заметку"), + }); + const removeMarker = useMutation({ mutationFn: (markerId: number) => deleteMarker(markerId), onSuccess: () => { @@ -445,6 +468,46 @@ export default function InspectionEditor() { )} + +

+ Заметки механика +

+ {editable ? ( + <> +