95 lines
2.4 KiB
TypeScript
95 lines
2.4 KiB
TypeScript
import { useState } from "react";
|
|
|
|
export interface Appointment {
|
|
id: string;
|
|
patient: string;
|
|
time: string;
|
|
duration: number;
|
|
type: "consulta" | "exame" | "retorno";
|
|
status: "confirmed" | "pending" | "absent";
|
|
professional: string;
|
|
notes?: string;
|
|
}
|
|
|
|
export interface Professional {
|
|
id: string;
|
|
name: string;
|
|
specialty: string;
|
|
}
|
|
|
|
export interface WaitingPatient {
|
|
id: string;
|
|
name: string;
|
|
specialty: string;
|
|
preferredDate: string;
|
|
priority: "high" | "medium" | "low";
|
|
contact: string;
|
|
}
|
|
|
|
export const useAgenda = () => {
|
|
const [appointments, setAppointments] = useState<Appointment[]>([]);
|
|
const [waitingList, setWaitingList] = useState<WaitingPatient[]>([]);
|
|
const [isModalOpen, setIsModalOpen] = useState(false);
|
|
const [selectedAppointment, setSelectedAppointment] =
|
|
useState<Appointment | null>(null);
|
|
const [isWaitlistModalOpen, setIsWaitlistModalOpen] = useState(false);
|
|
|
|
const professionals: Professional[] = [
|
|
{ id: "1", name: "Dr. Carlos Silva", specialty: "Cardiologia" },
|
|
{ id: "2", name: "Dra. Maria Santos", specialty: "Dermatologia" },
|
|
{ id: "3", name: "Dr. João Oliveira", specialty: "Ortopedia" },
|
|
];
|
|
|
|
const handleSaveAppointment = (appointment: Appointment) => {
|
|
if (appointment.id) {
|
|
setAppointments((previous) =>
|
|
previous.map((a) => (a.id === appointment.id ? appointment : a)),
|
|
);
|
|
} else {
|
|
const newAppointment = {
|
|
...appointment,
|
|
id: Date.now().toString(),
|
|
};
|
|
setAppointments((previous) => [...previous, newAppointment]);
|
|
}
|
|
};
|
|
|
|
const handleEditAppointment = (appointment: Appointment) => {
|
|
setSelectedAppointment(appointment);
|
|
setIsModalOpen(true);
|
|
};
|
|
|
|
const handleAddAppointment = () => {
|
|
setSelectedAppointment(null);
|
|
setIsModalOpen(true);
|
|
};
|
|
|
|
const handleCloseModal = () => {
|
|
setIsModalOpen(false);
|
|
setSelectedAppointment(null);
|
|
};
|
|
|
|
const handleNotifyPatient = (patientId: string) => {
|
|
console.log(`Notificando paciente ${patientId}`);
|
|
};
|
|
|
|
const handleAddToWaitlist = () => {
|
|
setIsWaitlistModalOpen(true);
|
|
};
|
|
|
|
return {
|
|
appointments,
|
|
waitingList,
|
|
professionals,
|
|
isModalOpen,
|
|
selectedAppointment,
|
|
isWaitlistModalOpen,
|
|
handleSaveAppointment,
|
|
handleEditAppointment,
|
|
handleAddAppointment,
|
|
handleCloseModal,
|
|
handleNotifyPatient,
|
|
handleAddToWaitlist,
|
|
};
|
|
};
|