From 2fd4ab91d4aabd6b4c6125d6d0cbd17409d08a52 Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Mon, 1 Jun 2026 02:45:06 +0200 Subject: [PATCH] =?UTF-8?q?fix(details):=20corrige=20erro=20de=20id=20null?= =?UTF-8?q?=20(RETURNING=20id)=20e=20implementa=20navega=C3=A7=C3=A3o=20ba?= =?UTF-8?q?seada=20em=20rotas=20(/patient/:patientName)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dental-server/dental-client/src/App.jsx | 6 +++++ .../dental-client/src/pages/DashboardPage.jsx | 24 +++++++++---------- .../src/pages/ImageDetailsPage.jsx | 4 ++-- dental-server/routes/images.js | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/dental-server/dental-client/src/App.jsx b/dental-server/dental-client/src/App.jsx index 69d6f5e..79629c9 100644 --- a/dental-server/dental-client/src/App.jsx +++ b/dental-server/dental-client/src/App.jsx @@ -34,6 +34,12 @@ export default function App() { } /> + + + + } /> + {/* Rotas de administrador */} diff --git a/dental-server/dental-client/src/pages/DashboardPage.jsx b/dental-server/dental-client/src/pages/DashboardPage.jsx index b2ea8f9..1136e08 100644 --- a/dental-server/dental-client/src/pages/DashboardPage.jsx +++ b/dental-server/dental-client/src/pages/DashboardPage.jsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useRef } from 'react'; -import { useNavigate, useSearchParams } from 'react-router-dom'; +import { useNavigate, useSearchParams, useParams } from 'react-router-dom'; import api from '../api/client'; import { useSocket } from '../contexts/SocketContext'; import { useToast } from '../contexts/ToastContext'; @@ -33,6 +33,7 @@ export default function DashboardPage() { const { on, off } = useSocket(); const navigate = useNavigate(); const [searchParams] = useSearchParams(); + const { patientName: urlPatientName } = useParams(); // View state: 'patients' | 'patient-images' const [view, setView] = useState('patients'); @@ -95,11 +96,15 @@ export default function DashboardPage() { }, 300); }, [searchParams]); - // ── URL query patient (abre a pasta de RX do paciente se informado) ── + // ── URL path patient (abre a pasta de RX do paciente se informado no path) ── useEffect(() => { - const patientName = searchParams.get('patient'); - if (!patientName) return; + if (!urlPatientName) { + setView('patients'); + setSelectedPatient(null); + return; + } + const patientName = decodeURIComponent(urlPatientName); const loadQueryPatient = async () => { try { const { data } = await api.get(`/images/patients?search=${encodeURIComponent(patientName)}&limit=10`); @@ -123,8 +128,7 @@ export default function DashboardPage() { }; loadQueryPatient(); - navigate('/', { replace: true }); - }, [searchParams]); + }, [urlPatientName]); // ── Socket.IO: nova imagem em tempo real ────────────────────────── useEffect(() => { @@ -228,15 +232,11 @@ export default function DashboardPage() { }; const openPatient = (patient) => { - setSelectedPatient(patient); - setView('patient-images'); - loadPatientImages(patient.patient_name); + navigate('/patient/' + encodeURIComponent(patient.patient_name)); }; const goBack = () => { - setView('patients'); - setSelectedPatient(null); - loadPatients(); + navigate('/'); }; // ── Toggle image enabled ────────────────────────────────────────── diff --git a/dental-server/dental-client/src/pages/ImageDetailsPage.jsx b/dental-server/dental-client/src/pages/ImageDetailsPage.jsx index 54cb148..2425ec4 100644 --- a/dental-server/dental-client/src/pages/ImageDetailsPage.jsx +++ b/dental-server/dental-client/src/pages/ImageDetailsPage.jsx @@ -183,7 +183,7 @@ export default function ImageDetailsPage() { rotation: 0, flipH: false, flipV: false, remark: '' }); showToast('Imagem restaurada para o original!', 'success'); - navigate('/?patient=' + encodeURIComponent(patientName)); + navigate('/patient/' + encodeURIComponent(patientName)); } catch { showToast('Erro ao restaurar a imagem.', 'error'); } finally { @@ -337,7 +337,7 @@ export default function ImageDetailsPage() { {/* Top Header para navegação / Voltar */}
-
diff --git a/dental-server/routes/images.js b/dental-server/routes/images.js index a9ea7d0..02ecb93 100644 --- a/dental-server/routes/images.js +++ b/dental-server/routes/images.js @@ -403,7 +403,7 @@ router.post('/:id/transform', async (req, res) => { `INSERT INTO images ( image_guid, patient_name, clinic_name, client_name, original_filename, filename, enabled, rotation, flip_horizontal, flip_vertical, original_image_id, created_at, remark, doctor - ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)`, + ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14) RETURNING id`, [ `${realOriginal.image_guid}_${timestamp}`, realOriginal.patient_name,