Skip to content

Commit 8346e79

Browse files
committed
feat: add dedicated surgery routes for correct sidebar navigation
Add /surgeries/:surgeryId and /surgeries/:surgeryId/edit routes so that navigating to a surgery from the Surgeries list keeps "Surgeries" active in the sidebar, while navigating from a Patient detail keeps "Patients" active. Components now detect navigation context and show appropriate breadcrumbs and maintain context in internal links.
1 parent f4d8f55 commit 8346e79

5 files changed

Lines changed: 59 additions & 20 deletions

File tree

src/renderer/src/main.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@ const router = createHashRouter([
106106
path: '/quick-surgery',
107107
element: <QuickAddSurgery />
108108
},
109+
{
110+
path: '/surgeries/:surgeryId',
111+
element: <ViewSurgery />
112+
},
113+
{
114+
path: '/surgeries/:surgeryId/edit',
115+
element: <EditSurgery />
116+
},
109117

110118
{
111119
path: '/support',

src/renderer/src/routes/surgeries/edit-surgery.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,25 @@ const getSurgeryByIdQuery = (id: number) => queries.surgeries.get(id)
1818
export const EditSurgery = () => {
1919
const queryClient = useQueryClient()
2020
const formRef = useRef<AddOrEditSurgeryRef>(null)
21-
const { patientId, surgeryId } = useParams()
21+
const { patientId: urlPatientId, surgeryId } = useParams()
2222
const { setBreadcrumbs } = useBreadcrumbs()
23-
const { data: patient } = useQuery({
24-
...getPatientByIdQuery(parseInt(patientId!)),
25-
enabled: !!patientId
26-
})
23+
24+
// Detect navigation context - if urlPatientId is not present, we came from surgeries list
25+
const isFromSurgeriesContext = !urlPatientId
2726

2827
const { data: surgery } = useQuery({
2928
...getSurgeryByIdQuery(parseInt(surgeryId!)),
3029
enabled: !!surgeryId
3130
})
3231

32+
// Derive patientId from URL or from surgery data
33+
const patientId = urlPatientId ? parseInt(urlPatientId) : surgery?.patient_id
34+
35+
const { data: patient } = useQuery({
36+
...getPatientByIdQuery(patientId!),
37+
enabled: !!patientId
38+
})
39+
3340
useKeyboardEvent({
3441
key: 's',
3542
ctrlKey: true,
@@ -47,8 +54,12 @@ export const EditSurgery = () => {
4754
const surgeryName = useMemo(() => surgery?.bht || 'Surgery', [surgery?.bht])
4855

4956
useEffect(() => {
50-
setBreadcrumbs([{ label: 'Surgeries', to: '/surgeries' }])
51-
}, [setBreadcrumbs])
57+
if (isFromSurgeriesContext) {
58+
setBreadcrumbs([{ label: 'Surgeries', to: '/surgeries' }])
59+
} else {
60+
setBreadcrumbs([{ label: 'Patients', to: '/patients' }])
61+
}
62+
}, [setBreadcrumbs, isFromSurgeriesContext])
5263

5364
return (
5465
<FormLayout
@@ -61,7 +72,11 @@ export const EditSurgery = () => {
6172
<>
6273
Editing{' '}
6374
<Link
64-
to={`/patients/${patient?.id}/surgeries/${surgery?.id}`}
75+
to={
76+
isFromSurgeriesContext
77+
? `/surgeries/${surgery?.id}`
78+
: `/patients/${patient?.id}/surgeries/${surgery?.id}`
79+
}
6580
className="font-medium text-foreground font-mono hover:text-primary hover:underline transition-colors"
6681
>
6782
{surgeryName}
@@ -96,7 +111,7 @@ export const EditSurgery = () => {
96111
surgery={surgery}
97112
onUpdated={async (_surgery) => {
98113
await queryClient.invalidateQueries({
99-
queryKey: queries.surgeries.list({ patient_id: parseInt(patientId!) }).queryKey
114+
queryKey: queries.surgeries.list({ patient_id: patientId! }).queryKey
100115
})
101116
await queryClient.invalidateQueries({
102117
queryKey: queries.surgeries.get(parseInt(surgeryId!)).queryKey

src/renderer/src/routes/surgeries/list-surgeries.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ function SurgeryRow({
155155
return (
156156
<div
157157
className="group flex items-center gap-4 p-4 rounded-xl border bg-card hover:bg-accent/50 hover:border-primary/20 cursor-pointer"
158-
onClick={() => onNavigate(`/patients/${surgery.patient_id}/surgeries/${surgery.id}`)}
158+
onClick={() => onNavigate(`/surgeries/${surgery.id}`)}
159159
>
160160
<SurgeryIcon />
161161

@@ -185,7 +185,7 @@ function SurgeryRow({
185185
className="h-8 w-8"
186186
onClick={(e) => {
187187
e.stopPropagation()
188-
onNavigate(`/patients/${surgery.patient_id}/surgeries/${surgery.id}/edit`)
188+
onNavigate(`/surgeries/${surgery.id}/edit`)
189189
}}
190190
>
191191
<Edit3 className="h-4 w-4" />

src/renderer/src/routes/surgeries/quick-add-surgery.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ export function QuickAddSurgery() {
9494
await queryClient.invalidateQueries({
9595
queryKey: queries.surgeries.list({ patient_id: selectedPatient.id }).queryKey
9696
})
97-
navigate(`/patients/${selectedPatient.id}/surgeries/${surgery.id}`)
97+
navigate(`/surgeries/${surgery.id}`)
9898
}
9999
}
100100

src/renderer/src/routes/surgeries/view-surgery.tsx

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,21 +214,27 @@ const FollowupShimmer = () => (
214214
// ============================================================
215215
export const ViewSurgery = () => {
216216
const navigate = useNavigate()
217-
const { patientId, surgeryId } = useParams()
217+
const { patientId: urlPatientId, surgeryId } = useParams()
218218
const { setBreadcrumbs } = useBreadcrumbs()
219219
const { settings } = useSettings()
220220
const queryClient = useQueryClient()
221221

222-
const { data: patient } = useQuery({
223-
...getPatientByIdQuery(parseInt(patientId!)),
224-
enabled: !!patientId
225-
})
222+
// Detect navigation context - if urlPatientId is not present, we came from surgeries list
223+
const isFromSurgeriesContext = !urlPatientId
226224

227225
const { data: surgery } = useQuery({
228226
...getSurgeryByIdQuery(parseInt(surgeryId!)),
229227
enabled: !!surgeryId
230228
})
231229

230+
// Derive patientId from URL or from surgery data
231+
const patientId = urlPatientId ? parseInt(urlPatientId) : surgery?.patient_id
232+
233+
const { data: patient } = useQuery({
234+
...getPatientByIdQuery(patientId!),
235+
enabled: !!patientId
236+
})
237+
232238
const { data: followups, isLoading: isFollowupLoading } = useQuery({
233239
...getSurgeryFollowupsQuery(parseInt(surgeryId!)),
234240
enabled: !!surgeryId
@@ -245,8 +251,12 @@ export const ViewSurgery = () => {
245251
)
246252

247253
useEffect(() => {
248-
setBreadcrumbs([{ label: 'Surgeries', to: '/surgeries' }])
249-
}, [setBreadcrumbs])
254+
if (isFromSurgeriesContext) {
255+
setBreadcrumbs([{ label: 'Surgeries', to: '/surgeries' }])
256+
} else {
257+
setBreadcrumbs([{ label: 'Patients', to: '/patients' }])
258+
}
259+
}, [setBreadcrumbs, isFromSurgeriesContext])
250260

251261
const surgeryContext = patient && surgery ? createSurgeryContext(patient, surgery, settings) : null
252262

@@ -363,7 +373,13 @@ export const ViewSurgery = () => {
363373
)}
364374
<Button
365375
variant="gradient"
366-
onClick={() => navigate(`/patients/${patientId}/surgeries/${surgeryId}/edit`)}
376+
onClick={() =>
377+
navigate(
378+
isFromSurgeriesContext
379+
? `/surgeries/${surgeryId}/edit`
380+
: `/patients/${patientId}/surgeries/${surgeryId}/edit`
381+
)
382+
}
367383
>
368384
<Edit className="h-4 w-4 mr-2" />
369385
Edit All

0 commit comments

Comments
 (0)