import { Appointment } from "fhir/r4"; import { useCallback } from "react"; import { useFhirAppointmentBroadcast } from "../../../hooks"; import { useAppointmentServiceContext } from "../../../services"; // When the practice finishes, moves or cancels a visit, Home's next appointment must follow without a reload. export const usePatientAppointmentsStayCurrent = () => { const { setAppointmentsList } = useAppointmentServiceContext(); const upsert = useCallback( (appointment: Appointment) => setAppointmentsList((current: Appointment[]) => current.some((existing) => existing.id === appointment.id) ? current.map((existing) => (existing.id === appointment.id ? appointment : existing)) : [...current, appointment], ), [setAppointmentsList], ); const remove = useCallback( (appointment: Appointment) => setAppointmentsList((current: Appointment[]) => current.filter((existing) => existing.id !== appointment.id)), [setAppointmentsList], ); useFhirAppointmentBroadcast({ onCreate: upsert, onUpdate: upsert, onDelete: remove }); };