From b541bef7aad6292036cb52a619533ccc6f5c82fb Mon Sep 17 00:00:00 2001 From: andrei Date: Sun, 1 Jun 2025 20:48:57 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=D0=B2=20=D0=B8=20=D0=B7=D0=B0=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BF=D1=80=D0=B8=D0=B5=D0=BC=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BB=D0=B8=D0=BA=D1=83=20=D0=BD=D0=B0=20=D1=8F?= =?UTF-8?q?=D1=87=D0=B5=D0=B9=D0=BA=D1=83=20=D0=BA=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0=D1=80=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppointmentsPage/AppointmentsPage.jsx | 53 ++++++------- .../AppointmentsCalendarTab.jsx | 4 +- .../useAppointmentCalendarUI.js | 30 +++---- .../AppointmentsListModal.jsx | 78 +++++++++++++++++++ web-app/src/Redux/Slices/appointmentsSlice.js | 18 +++-- 5 files changed, 130 insertions(+), 53 deletions(-) create mode 100644 web-app/src/Components/Pages/AppointmentsPage/Components/AppointmentsListModal/AppointmentsListModal.jsx diff --git a/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx b/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx index d1fefe3..f59db6a 100644 --- a/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx +++ b/web-app/src/Components/Pages/AppointmentsPage/AppointmentsPage.jsx @@ -1,21 +1,19 @@ -import {Button, FloatButton, Result, Tabs, Typography} from "antd"; -import {Splitter} from "antd"; -import {CalendarOutlined, TableOutlined, MenuFoldOutlined, MenuUnfoldOutlined, PlusOutlined} from "@ant-design/icons"; +import { Button, FloatButton, Result, Tabs, Typography } from "antd"; +import { Splitter } from "antd"; +import { CalendarOutlined, TableOutlined, MenuFoldOutlined, MenuUnfoldOutlined, PlusOutlined } from "@ant-design/icons"; import AppointmentsCalendarTab from "./Components/AppointmentCalendarTab/AppointmentsCalendarTab.jsx"; import AppointmentsTableTab from "./Components/AppointmentTableTab/AppointmentsTableTab.jsx"; import useAppointmentsUI from "./useAppointmentsUI.js"; import useAppointments from "./useAppointments.js"; import dayjs from 'dayjs'; import LoadingIndicator from "../../Widgets/LoadingIndicator.jsx"; -import AppointmentFormModal - from "./Components/AppointmentFormModal/AppointmentFormModal.jsx"; -import {useDispatch} from "react-redux"; -import {closeModal, openModal} from "../../../Redux/Slices/appointmentsSlice.js"; -import AppointmentViewModal - from "./Components/AppointmentViewModal/AppointmentViewModal.jsx"; +import AppointmentFormModal from "./Components/AppointmentFormModal/AppointmentFormModal.jsx"; +import { useDispatch } from "react-redux"; +import { closeModal, openModal } from "../../../Redux/Slices/appointmentsSlice.js"; +import AppointmentViewModal from "./Components/AppointmentViewModal/AppointmentViewModal.jsx"; import ScheduledAppointmentFormModal from "./Components/ScheduledAppintmentFormModal/ScheduledAppointmentFormModal.jsx"; -import ScheduledAppointmentsViewModal - from "./Components/ScheduledAppointmentsViewModal/ScheduledAppointmentsViewModal.jsx"; +import ScheduledAppointmentsViewModal from "./Components/ScheduledAppointmentsViewModal/ScheduledAppointmentsViewModal.jsx"; +import AppointmentsListModal from "./Components/AppointmentsListModal/AppointmentsListModal.jsx"; const AppointmentsPage = () => { const appointmentsData = useAppointments(); @@ -30,14 +28,14 @@ const AppointmentsPage = () => { { key: "1", label: "Календарь приемов", - children: , - icon: , + children: , + icon: , }, { key: "2", label: "Таблица приемов", - children: , - icon: , + children: , + icon: , }, ]; @@ -52,7 +50,7 @@ const AppointmentsPage = () => { return ( <> {appointmentsData.isLoading ? ( - + ) : ( <> { min="25%" max="90%" > - + {appointmentsPageUI.showSplitterPanel && ( @@ -83,7 +81,7 @@ const AppointmentsPage = () => { {appointmentsPageUI.upcomingEvents.length ? (
    - {appointmentsPageUI.upcomingEvents.map(app => ( + {appointmentsPageUI.upcomingEvents.map((app) => (
  • {dayjs(app.appointment_datetime || app.scheduled_datetime) .format('DD.MM.YYYY HH:mm')} - @@ -105,7 +103,7 @@ const AppointmentsPage = () => { + + ); +}; + +export default AppointmentsListModal; \ No newline at end of file diff --git a/web-app/src/Redux/Slices/appointmentsSlice.js b/web-app/src/Redux/Slices/appointmentsSlice.js index b555a98..380820b 100644 --- a/web-app/src/Redux/Slices/appointmentsSlice.js +++ b/web-app/src/Redux/Slices/appointmentsSlice.js @@ -2,14 +2,15 @@ import { createSlice } from '@reduxjs/toolkit'; const initialState = { modalVisible: false, - collapsed: true, + collapsed: false, siderWidth: 300, hovered: false, selectedAppointment: null, selectedScheduledAppointment: null, scheduledModalVisible: false, scheduledData: null, - selectedAppointments: [], // Новое поле для хранения массива выбранных приемов + appointmentsListModalVisible: false, + selectedDateAppointments: [], }; const appointmentsSlice = createSlice({ @@ -47,8 +48,13 @@ const appointmentsSlice = createSlice({ state.modalVisible = true; state.scheduledData = action.payload; }, - setSelectedAppointments(state, action) { - state.selectedAppointments = action.payload; + openAppointmentsListModal(state, action) { + state.appointmentsListModalVisible = true; + state.selectedDateAppointments = action.payload; + }, + closeAppointmentsListModal(state) { + state.appointmentsListModalVisible = false; + state.selectedDateAppointments = []; }, }, }); @@ -57,13 +63,15 @@ export const { openModal, closeModal, toggleSider, + setSiderWidth, setHovered, setSelectedAppointment, setSelectedScheduledAppointment, openScheduledModal, closeScheduledModal, openModalWithScheduledData, - setSelectedAppointments, + openAppointmentsListModal, + closeAppointmentsListModal, } = appointmentsSlice.actions; export default appointmentsSlice.reducer; \ No newline at end of file