diff --git a/web-app/src/Api/appointmentsApi.js b/web-app/src/Api/appointmentsApi.js index a813205..ae92b58 100644 --- a/web-app/src/Api/appointmentsApi.js +++ b/web-app/src/Api/appointmentsApi.js @@ -1,5 +1,5 @@ -import {createApi} from "@reduxjs/toolkit/query/react"; -import {baseQueryWithAuth} from "./baseQuery.js"; +import { createApi } from "@reduxjs/toolkit/query/react"; +import { baseQueryWithAuth } from "./baseQuery.js"; export const appointmentsApi = createApi({ reducerPath: 'appointmentsApi', @@ -7,7 +7,10 @@ export const appointmentsApi = createApi({ tagTypes: ['Appointment'], endpoints: (builder) => ({ getAppointments: builder.query({ - query: (doctor_id) => `/appointments/doctor/${doctor_id}/`, + query: ({ doctor_id, start_date, end_date }) => ({ + url: `/appointments/doctor/${doctor_id}/`, + params: { start_date, end_date }, + }), providesTags: ['Appointment'], refetchOnMountOrArgChange: 5, }), @@ -25,7 +28,7 @@ export const appointmentsApi = createApi({ invalidatesTags: ['Appointment'], }), updateAppointment: builder.mutation({ - query: ({id, data}) => ({ + query: ({ id, data }) => ({ url: `/appointments/${id}/`, method: 'PUT', body: data, diff --git a/web-app/src/Api/scheduledAppointmentsApi.js b/web-app/src/Api/scheduledAppointmentsApi.js index 1a2eedf..96dc4d7 100644 --- a/web-app/src/Api/scheduledAppointmentsApi.js +++ b/web-app/src/Api/scheduledAppointmentsApi.js @@ -1,5 +1,5 @@ -import {createApi} from "@reduxjs/toolkit/query/react"; -import {baseQueryWithAuth} from "./baseQuery.js"; +import { createApi } from "@reduxjs/toolkit/query/react"; +import { baseQueryWithAuth } from "./baseQuery.js"; export const scheduledAppointmentsApi = createApi({ reducerPath: 'scheduledAppointmentsApi', @@ -7,7 +7,10 @@ export const scheduledAppointmentsApi = createApi({ tagTypes: ['ScheduledAppointment'], endpoints: (builder) => ({ getScheduledAppointments: builder.query({ - query: (doctor_id) => `/scheduled_appointments/doctor/${doctor_id}/`, + query: ({ doctor_id, start_date, end_date }) => ({ + url: `/scheduled_appointments/doctor/${doctor_id}/`, + params: { start_date, end_date }, + }), providesTags: ['ScheduledAppointment'], }), createScheduledAppointment: builder.mutation({ @@ -19,7 +22,7 @@ export const scheduledAppointmentsApi = createApi({ invalidatesTags: ['ScheduledAppointment'], }), updateScheduledAppointment: builder.mutation({ - query: ({id, data}) => ({ + query: ({ id, data }) => ({ url: `/scheduled_appointments/${id}/`, method: 'PUT', body: data, diff --git a/web-app/src/Components/Dummies/AppointmentFormModal/useAppointmentFormModalUI.js b/web-app/src/Components/Dummies/AppointmentFormModal/useAppointmentFormModalUI.js index 848949f..da82d62 100644 --- a/web-app/src/Components/Dummies/AppointmentFormModal/useAppointmentFormModalUI.js +++ b/web-app/src/Components/Dummies/AppointmentFormModal/useAppointmentFormModalUI.js @@ -6,7 +6,6 @@ import dayjs from "dayjs"; import {useGetAppointmentsQuery} from "../../../Api/appointmentsApi.js"; import {Grid} from "antd"; import {useUploadAppointmentFileMutation} from "../../../Api/appointmentFilesApi.js"; -import Compressor from 'compressorjs'; const {useBreakpoint} = Grid; @@ -30,9 +29,20 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen const [uploadAppointmentFile, {isLoading: isUploadingFile}] = useUploadAppointmentFileMutation(); - const {data: appointments = []} = useGetAppointmentsQuery(userData.id, { - pollingInterval: 20000, - }); + const startDate = appointmentDate.startOf('month').utc().format('YYYY-MM-DD'); + const endDate = appointmentDate.endOf('month').utc().format('YYYY-MM-DD'); + + const { + data: appointments = [], + isLoading: isLoadingAppointments, + isError: isErrorAppointments, + } = useGetAppointmentsQuery( + {doctor_id: userData.id, start_date: startDate, end_date: endDate}, + { + pollingInterval: 60000, + skip: !userData.id, + } + ); const { data: previousAppointments = [], @@ -43,6 +53,16 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen skip: !selectedPatient, }); + useEffect(() => { + if (isErrorAppointments) { + notification.error({ + message: 'Ошибка', + description: 'Ошибка загрузки приемов.', + placement: 'topRight', + }); + } + }, [isErrorAppointments]); + const blockStepStyle = {marginBottom: 16}; const searchInputStyle = {marginBottom: 16}; const chooseContainerStyle = {maxHeight: 400, overflowY: "auto"}; @@ -180,6 +200,7 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen appointment_datetime: dayjs(scheduledData.appointment_datetime), results: scheduledData.results || "", }); + setAppointmentDate(dayjs(scheduledData.appointment_datetime)); } } else { form.setFieldsValue({ @@ -219,9 +240,14 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen setFormValues({}); setIsDrawerVisible(false); setDraftFiles([]); + setAppointmentDate(dayjs(new Date())); // Сбрасываем дату + }; + + const handleSetAppointmentDate = (date) => { + setAppointmentDate(date); + form.setFieldsValue({appointment_datetime: date}); // Синхронизируем форму }; - const handleSetAppointmentDate = (date) => setAppointmentDate(date); const modalWidth = useMemo(() => (screenXS ? 700 : "90%"), [screenXS]); const showDrawer = () => { @@ -330,8 +356,8 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen } catch (error) { console.error("Error creating appointment:", error); notification.error({ - message: "Ошибка загрузки файла", - description: `Не удалось загрузить файл ${JSON.stringify(error.data?.detail || error.data || error.message || "Неизвестная ошибка", null, 2)}`, + message: "Ошибка создания приема", + description: `Не удалось создать прием: ${JSON.stringify(error.data?.detail || error.data || error.message || "Неизвестная ошибка", null, 2)}`, placement: "topRight", }); } @@ -405,6 +431,8 @@ const useAppointmentFormModalUI = (createAppointment, patients, cancelAppointmen handleAddFile, handleRemoveFile, isUploadingFile, + isLoadingAppointments, + isErrorAppointments, }; }; diff --git a/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx b/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx index d66ae33..cbc5f05 100644 --- a/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx +++ b/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx @@ -1,5 +1,5 @@ -import { Badge, Button, FloatButton, List, Result, Row, Space, Tag, Typography } from "antd"; -import { Splitter } from "antd"; +import {Badge, Button, FloatButton, List, Result, Row, Space, Tag, Typography} from "antd"; +import {Splitter} from "antd"; import { CalendarOutlined, MenuFoldOutlined, @@ -12,12 +12,6 @@ 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 { - openModal, - setSelectedAppointment, - setSelectedScheduledAppointment -} from "../../../Redux/Slices/appointmentsSlice.js"; import AppointmentViewModal from "../../Dummies/AppointmentViewModal/AppointmentViewModal.jsx"; import ScheduledAppointmentFormModal from "../../Dummies/ScheduledAppintmentFormModal/ScheduledAppointmentFormModal.jsx"; @@ -48,16 +42,10 @@ const AppointmentsPage = () => { openCreateScheduledAppointmentModal, currentMonth, handleMonthChange, + handleEventClick, + openCreateAppointmentModal, } = useAppointments(); - const dispatch = useDispatch(); - const handleEventClick = (event) => { - if (event.appointment_datetime) { - dispatch(setSelectedAppointment(event)); - } else { - dispatch(setSelectedScheduledAppointment(event)); - } - }; if (isError) return ( { return ( <> - Приемы + Приемы {isLoading ? ( - + ) : ( <> - + - + @@ -85,7 +73,7 @@ const AppointmentsPage = () => { } /> - + @@ -149,9 +137,9 @@ const AppointmentsPage = () => { {item.appointment_datetime ? ( - + ) : ( - + )} {dayjs(item.appointment_datetime || item.scheduled_datetime).format('DD.MM.YYYY HH:mm')} @@ -185,7 +173,7 @@ const AppointmentsPage = () => {