import {Button, FloatButton, List, Result, Space, Typography} from "antd"; import {Splitter} from "antd"; import { CalendarOutlined, MenuFoldOutlined, MenuUnfoldOutlined, PlusOutlined, ClockCircleOutlined, DatabaseOutlined } from "@ant-design/icons"; import AppointmentsCalendarTab from "./Components/AppointmentCalendarTab/AppointmentsCalendarTab.jsx"; import useAppointmentsUI from "./useAppointmentsUI.js"; import useAppointments from "./useAppointments.js"; import dayjs from 'dayjs'; import LoadingIndicator from "../../Widgets/LoadingIndicator/LoadingIndicator.jsx"; import AppointmentFormModal from "../../Dummies/AppointmentFormModal/AppointmentFormModal.jsx"; import {useDispatch} from "react-redux"; import { closeModal, openModal, setSelectedAppointment, setSelectedScheduledAppointment } from "../../../Redux/Slices/appointmentsSlice.js"; import AppointmentViewModal from "../../Widgets/AppointmentViewModal/AppointmentViewModal.jsx"; import ScheduledAppointmentFormModal from "../../Dummies/ScheduledAppintmentFormModal/ScheduledAppointmentFormModal.jsx"; import ScheduledAppointmentsViewModal from "../../Widgets/ScheduledAppointmentsViewModal/ScheduledAppointmentsViewModal.jsx"; import AppointmentsListModal from "./Components/AppointmentsListModal/AppointmentsListModal.jsx"; const AppointmentsPage = () => { const appointmentsData = useAppointments(); const appointmentsPageUI = useAppointmentsUI(appointmentsData.appointments, appointmentsData.scheduledAppointments); const dispatch = useDispatch(); const handleEventClick = (event) => { if (event.appointment_datetime) { dispatch(setSelectedAppointment(event)); } else { dispatch(setSelectedScheduledAppointment(event)); } }; if (appointmentsData.isError) return ( ); return ( <> Приемы {appointmentsData.isLoading ? ( ) : ( <> {appointmentsPageUI.showSplitterPanel && ( Предстоящие события {appointmentsPageUI.upcomingEvents.length ? ( dayjs(a.appointment_datetime || a.scheduled_datetime).diff( dayjs(b.appointment_datetime || b.scheduled_datetime) ) )} renderItem={(item) => ( handleEventClick(item)} style={{ padding: "12px", marginBottom: "8px", borderRadius: "4px", background: item.appointment_datetime ? "#e6f7ff" : "#f6ffed", cursor: "pointer", transition: "background 0.3s", }} onMouseEnter={(e) => (e.currentTarget.style.background = item.appointment_datetime ? "#d9efff" : "#efffdb")} onMouseLeave={(e) => (e.currentTarget.style.background = item.appointment_datetime ? "#e6f7ff" : "#f6ffed")} > {item.appointment_datetime ? ( ) : ( )} {dayjs(item.appointment_datetime || item.scheduled_datetime).format('DD.MM.YYYY HH:mm')} {item.appointment_datetime ? 'Прием' : 'Запланировано'} {item.patient ? ` - ${item.patient.last_name} ${item.patient.first_name}` : ''} Тип: {item.type?.title || 'Не указан'} {dayjs(item.appointment_datetime || item.scheduled_datetime).isSame(dayjs(), 'day') && ( Сегодня )} )} /> ) : ( Нет предстоящих событий )} )}
} tooltip="Создать" > } onClick={() => dispatch(openModal())} tooltip="Прием" /> } onClick={appointmentsPageUI.openCreateScheduledAppointmentModal} tooltip="Запланированный прием" /> )} ); }; export default AppointmentsPage;