107 lines
3.6 KiB
JavaScript
107 lines
3.6 KiB
JavaScript
import { useDispatch, useSelector } from "react-redux";
|
||
import { setSelectedScheduledAppointment, openModalWithScheduledData } from "../../../Redux/Slices/appointmentsSlice.js";
|
||
import { notification } from "antd";
|
||
import dayjs from "dayjs";
|
||
|
||
const useScheduledAppointmentsViewModalUI = (cancelAppointment) => {
|
||
const dispatch = useDispatch();
|
||
const { selectedScheduledAppointment } = useSelector((state) => state.appointmentsUI);
|
||
|
||
const modalWidth = 700;
|
||
const blockStyle = { marginBottom: 16 };
|
||
const footerRowStyle = { marginTop: 16, gap: 8 };
|
||
const footerButtonStyle = { marginRight: 8 };
|
||
|
||
const labels = {
|
||
title: "Просмотр запланированного приема",
|
||
patient: "Пациент:",
|
||
birthday: "Дата рождения:",
|
||
email: "Email:",
|
||
phone: "Телефон:",
|
||
type: "Тип приема:",
|
||
appointmentTime: "Время приема:",
|
||
closeButton: "Закрыть",
|
||
convertButton: "Конвертировать в прием",
|
||
cancelButton: "Отмена приема",
|
||
popconfirmTitle: "Вы уверены, что хотите отменить прием?",
|
||
popconfirmOk: "Да, отменить",
|
||
popconfirmCancel: "Отмена",
|
||
notSpecified: "Не указан",
|
||
};
|
||
|
||
const visible = !!selectedScheduledAppointment;
|
||
|
||
const getDateString = (date) => {
|
||
return date ? dayjs(date).format("DD.MM.YYYY") : labels.notSpecified;
|
||
};
|
||
|
||
const getAppointmentTime = (datetime) => {
|
||
return datetime
|
||
? dayjs(datetime).format("DD.MM.YYYY HH:mm")
|
||
: labels.notSpecified;
|
||
};
|
||
|
||
const getPatientName = (patient) => {
|
||
return patient
|
||
? `${patient.last_name} ${patient.first_name}`
|
||
: labels.notSpecified;
|
||
};
|
||
|
||
const getPatientField = (field) => {
|
||
return field || labels.notSpecified;
|
||
};
|
||
|
||
const onCancel = () => {
|
||
dispatch(setSelectedScheduledAppointment(null));
|
||
};
|
||
|
||
const cancelScheduledAppointment = async () => {
|
||
try {
|
||
await cancelAppointment(selectedScheduledAppointment.id);
|
||
notification.success({
|
||
message: "Прием отменен",
|
||
placement: "topRight",
|
||
description: "Прием успешно отменен.",
|
||
});
|
||
onCancel();
|
||
} catch (error) {
|
||
notification.error({
|
||
message: "Ошибка",
|
||
description: error?.data?.detail || "Не удалось отменить прием.",
|
||
placement: "topRight",
|
||
});
|
||
}
|
||
};
|
||
|
||
const handleConvertToAppointment = () => {
|
||
if (selectedScheduledAppointment) {
|
||
dispatch(
|
||
openModalWithScheduledData({
|
||
id: selectedScheduledAppointment.id,
|
||
patient_id: selectedScheduledAppointment.patient?.id,
|
||
type_id: selectedScheduledAppointment.type?.id,
|
||
appointment_datetime: selectedScheduledAppointment.scheduled_datetime,
|
||
})
|
||
);
|
||
}
|
||
};
|
||
|
||
return {
|
||
selectedScheduledAppointment,
|
||
modalWidth,
|
||
blockStyle,
|
||
footerRowStyle,
|
||
footerButtonStyle,
|
||
labels,
|
||
visible,
|
||
getDateString,
|
||
getAppointmentTime,
|
||
getPatientName,
|
||
getPatientField,
|
||
onCancel,
|
||
cancelScheduledAppointment,
|
||
handleConvertToAppointment,
|
||
};
|
||
};
|
||
|
||
export default useScheduledAppointmentsViewModalUI; |