Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions web/components/patients/LoadTaskPresetDialog.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@ import { useApplyTaskGraph, useTaskPresets } from '@/data'
import { GetPatientDocument, type TaskPresetsQuery } from '@/api/gql/generated'
import { useSystemSuggestionTasks } from '@/context/SystemSuggestionTasksContext'
import { presetGraphToTaskGraphInput } from '@/utils/taskGraph'
import type { PatientDetailListSuccessHint } from '@/components/patients/patientDetailListHint'

type PresetRow = TaskPresetsQuery['taskPresets'][number]

type LoadTaskPresetDialogProps = {
isOpen: boolean,
onClose: () => void,
patientId: string,
onSuccess?: () => void,
onSuccess?: (hint?: PatientDetailListSuccessHint) => void,
}

export function LoadTaskPresetDialog({
Expand Down Expand Up @@ -110,7 +111,7 @@ export function LoadTaskPresetDialog({
showToast(translation('tasksCreatedFromPreset'))
setConfirmOpen(false)
onClose()
onSuccess?.()
onSuccess?.({ needsPatientListRefetch: true })
},
[
applyTaskGraph,
Expand Down
18 changes: 10 additions & 8 deletions web/components/patients/PatientDataEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { useLocations, usePatient } from '@/data'
import { Building2, CheckIcon, Locate, PlusIcon, Users, XIcon } from 'lucide-react'
import { formatLocationPath, formatLocationPathFromId } from '@/utils/location'
import { toISODate } from './PatientDetailView'
import type { PatientDetailListSuccessHint } from './patientDetailListHint'
import { LocationSelectionDialog } from '@/components/locations/LocationSelectionDialog'
import {
useCreatePatient,
Expand All @@ -34,7 +35,7 @@ type PatientFormValues = Omit<CreatePatientInput, 'clinicId' | 'teamIds' | 'posi
interface PatientDataEditorProps {
id: null | string,
initialCreateData?: Partial<CreatePatientInput>,
onSuccess?: () => void,
onSuccess?: (hint?: PatientDetailListSuccessHint) => void,
onClose?: () => void,
onCreateDraftDirtyChange?: (dirty: boolean) => void,
}
Expand Down Expand Up @@ -136,7 +137,7 @@ export const PatientDataEditor = ({
variables: { data },
onCompleted: () => {
onCreateDraftDirtyChange?.(false)
onSuccess?.()
onSuccess?.({ needsPatientListRefetch: true })
onClose?.()
},
onError: (error) => {
Expand Down Expand Up @@ -203,9 +204,10 @@ export const PatientDataEditor = ({
const samePosition = (data.positionId ?? current.position?.id) === current.position?.id
const sameDescription = (data.description ?? current.description ?? '') === (current.description ?? '')
if (sameFirstname && sameLastname && sameBirthdate && sameSex && sameAssignedIds && sameClinic && sameTeamIds && samePosition && sameDescription) return
const needsPatientListRefetch = !sameClinic || !sameTeamIds || !samePosition || !sameAssignedIds
updatePatient({
variables: { id: patientId, data },
onCompleted: () => onSuccess?.(),
onCompleted: () => onSuccess?.({ needsPatientListRefetch }),
})
}
})
Expand Down Expand Up @@ -412,7 +414,7 @@ export const PatientDataEditor = ({
<div className="flex gap-4 flex-wrap">
<Button
disabled={value === PatientState.Admitted}
onClick={() => admitPatient({ variables: { id: patientId! }, onCompleted: () => onSuccess?.() })}
onClick={() => admitPatient({ variables: { id: patientId! }, onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }) })}
color={value === PatientState.Admitted ? 'positive' : 'neutral'}
>
<Visibility isVisible={value === PatientState.Admitted}>
Expand All @@ -432,7 +434,7 @@ export const PatientDataEditor = ({
</Button>
<Button
disabled={value === PatientState.Wait}
onClick={() => waitPatient({ variables: { id: patientId! }, onCompleted: () => onSuccess?.() })}
onClick={() => waitPatient({ variables: { id: patientId! }, onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }) })}
color={value === PatientState.Wait ? 'warning' : 'neutral'}
>
<Visibility isVisible={value === PatientState.Admitted}>
Expand Down Expand Up @@ -605,7 +607,7 @@ export const PatientDataEditor = ({
onCancel={() => setIsMarkDeadDialogOpen(false)}
onConfirm={() => {
if (patientId && markPatientDead) {
markPatientDead({ variables: { id: patientId }, onCompleted: () => onSuccess?.() })
markPatientDead({ variables: { id: patientId }, onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }) })
}
setIsMarkDeadDialogOpen(false)
}}
Expand All @@ -619,7 +621,7 @@ export const PatientDataEditor = ({
onCancel={() => setIsDischargeDialogOpen(false)}
onConfirm={() => {
if (patientId && dischargePatient) {
dischargePatient({ variables: { id: patientId }, onCompleted: () => onSuccess?.() })
dischargePatient({ variables: { id: patientId }, onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }) })
}
setIsDischargeDialogOpen(false)
}}
Expand All @@ -636,7 +638,7 @@ export const PatientDataEditor = ({
deletePatient({
variables: { id: patientId },
onCompleted: () => {
onSuccess?.()
onSuccess?.({ needsPatientListRefetch: true })
onClose?.()
},
})
Expand Down
5 changes: 3 additions & 2 deletions web/components/patients/PatientDetailView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { PatientStateChip } from '@/components/patients/PatientStateChip'
import { LocationChips } from '@/components/locations/LocationChips'
import { PatientTasksView } from './PatientTasksView'
import { PatientDataEditor } from './PatientDataEditor'
import type { PatientDetailListSuccessHint } from './patientDetailListHint'
import { AuditLogTimeline } from '@/components/AuditLogTimeline'
import { PropertyList, type PropertyValue } from '../tables/PropertyList'
import { useUpdatePatient } from '@/data'
Expand Down Expand Up @@ -50,7 +51,7 @@ export const localToUTCWithSameTime = (d: Date | null | undefined): Date | null
interface PatientDetailViewProps {
patientId?: string,
onClose: () => void,
onSuccess: () => void,
onSuccess?: (hint?: PatientDetailListSuccessHint) => void,
initialCreateData?: Partial<CreatePatientInput>,
onOpenSystemSuggestion?: (suggestion: SystemSuggestion, patientName: string) => void,
onCreateDraftDirtyChange?: (dirty: boolean) => void,
Expand Down Expand Up @@ -128,7 +129,7 @@ export const PatientDetailView = ({
properties: propertyInputs,
},
},
onCompleted: () => onSuccess(),
onCompleted: () => onSuccess?.({ needsPatientListRefetch: false }),
})
}, [isEditMode, patientId, patientData, convertPropertyValueToInput, updatePatient, onSuccess])

Expand Down
9 changes: 5 additions & 4 deletions web/components/patients/PatientTasksView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ import type { GetPatientQuery } from '@/api/gql/generated'
import { TaskDetailView } from '@/components/tasks/TaskDetailView'
import { useCompleteTask, useReopenTask } from '@/data'
import { LoadTaskPresetDialog } from '@/components/patients/LoadTaskPresetDialog'
import type { PatientDetailListSuccessHint } from '@/components/patients/patientDetailListHint'

interface PatientTasksViewProps {
patientId: string,
patientData: GetPatientQuery | undefined,
onSuccess?: () => void,
onSuccess?: (hint?: PatientDetailListSuccessHint) => void,
}

const sortByDueDate = <T extends { dueDate?: string | Date | null }>(tasks: T[]): T[] => {
Expand Down Expand Up @@ -63,7 +64,7 @@ export const PatientTasksView = ({
if (done) {
completeTask({
variables: { id: taskId },
onCompleted: () => onSuccess?.(),
onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }),
onError: () => {
setOptimisticTaskUpdates(prev => {
const next = new Map(prev)
Expand All @@ -75,7 +76,7 @@ export const PatientTasksView = ({
} else {
reopenTask({
variables: { id: taskId },
onCompleted: () => onSuccess?.(),
onCompleted: () => onSuccess?.({ needsPatientListRefetch: true }),
onError: () => {
setOptimisticTaskUpdates(prev => {
const next = new Map(prev)
Expand Down Expand Up @@ -190,7 +191,7 @@ export const PatientTasksView = ({
initialPatientId={isCreatingTask ? patientId : undefined}
initialPatientName={isCreatingTask ? initialPatientName : undefined}
onListSync={() => {
onSuccess?.()
onSuccess?.({ needsPatientListRefetch: true })
}}
onClose={() => {
setTaskId(null)
Expand Down
3 changes: 3 additions & 0 deletions web/components/patients/patientDetailListHint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export type PatientDetailListSuccessHint = {
needsPatientListRefetch: boolean,
}
10 changes: 7 additions & 3 deletions web/components/tables/PatientList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import type { LocationType } from '@/api/gql/generated'
import { Sex, PatientState, type GetPatientsQuery, type TaskType, PropertyEntity, FieldType, type QueryableField } from '@/api/gql/generated'
import { usePropertyDefinitions, usePatientsPaginated, useQueryableFields, useRefreshingEntityIds } from '@/data'
import { PatientDetailView } from '@/components/patients/PatientDetailView'
import type { PatientDetailListSuccessHint } from '@/components/patients/patientDetailListHint'
import { LocationChips } from '@/components/locations/LocationChips'
import { LocationChipsBySetting } from '@/components/patients/LocationChipsBySetting'
import { PatientStateChip } from '@/components/patients/PatientStateChip'
Expand Down Expand Up @@ -1119,9 +1120,12 @@ export const PatientList = forwardRef<PatientListRef, PatientListProps>(({ initi
<PatientDetailView
patientId={selectedPatient?.id ?? openedPatientId ?? undefined}
onClose={closePatientDrawer}
onSuccess={() => {
embeddedOnRefetch?.()
void refetch()
onSuccess={(hint?: PatientDetailListSuccessHint) => {
const needsRefetch = hint?.needsPatientListRefetch ?? true
if (needsRefetch) {
embeddedOnRefetch?.()
void refetch()
}
onPatientUpdated?.()
}}
onOpenSystemSuggestion={openSuggestionModal}
Expand Down
7 changes: 5 additions & 2 deletions web/components/tables/TaskList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { Drawer } from '@helpwave/hightide'
import { TaskDetailView } from '@/components/tasks/TaskDetailView'
import { AvatarStatusComponent } from '@/components/AvatarStatusComponent'
import { PatientDetailView } from '@/components/patients/PatientDetailView'
import type { PatientDetailListSuccessHint } from '@/components/patients/patientDetailListHint'
import { useTasksTranslation } from '@/i18n/useTasksTranslation'
import { useTasksContext } from '@/hooks/useTasksContext'
import { UserInfoPopup } from '@/components/UserInfoPopup'
Expand Down Expand Up @@ -1075,8 +1076,10 @@ export const TaskList = forwardRef<TaskListRef, TaskListProps>(({ tasks: initial
<PatientDetailView
patientId={selectedPatientId}
onClose={() => setSelectedPatientId(null)}
onSuccess={() => {
onRefetch?.()
onSuccess={(hint?: PatientDetailListSuccessHint) => {
if (hint?.needsPatientListRefetch ?? true) {
onRefetch?.()
}
}}
/>
)}
Expand Down
Loading