From a416b6cc95e6b56eb5632b571cc5a82bfa890ef9 Mon Sep 17 00:00:00 2001
From: andrei
{labels.files}
{isFilesLoading ? ( -{labels.noFiles}
diff --git a/web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentViewUI.js b/web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentView.js similarity index 69% rename from web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentViewUI.js rename to web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentView.js index aeeaf1c..1b85f22 100644 --- a/web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentViewUI.js +++ b/web-app/src/Components/Widgets/AppointmentViewModal/useAppointmentView.js @@ -1,25 +1,26 @@ -import { useDispatch, useSelector } from "react-redux"; -import { setSelectedAppointment } from "../../../Redux/Slices/appointmentsSlice.js"; +import {useDispatch, useSelector} from "react-redux"; +import {setSelectedAppointment} from "../../../Redux/Slices/appointmentsSlice.js"; import dayjs from "dayjs"; -import { useState } from "react"; +import {useState} from "react"; import {useGetAppointmentFilesQuery} from "../../../Api/appointmentFilesApi.js"; import {baseQueryWithAuth} from "../../../Api/baseQuery.js"; +import {notification} from "antd"; -const useAppointmentViewUI = () => { +const useAppointmentView = () => { const dispatch = useDispatch(); - const { selectedAppointment } = useSelector((state) => state.appointmentsUI); + const {selectedAppointment} = useSelector((state) => state.appointmentsUI); - const { data: files = [], isLoading: isFilesLoading } = useGetAppointmentFilesQuery( + const {data: files = [], isLoading: isFilesLoading} = useGetAppointmentFilesQuery( selectedAppointment?.id, - { skip: !selectedAppointment?.id } + {skip: !selectedAppointment?.id} ); const [downloadingFiles, setDownloadingFiles] = useState({}); const modalWidth = 700; - const blockStyle = { marginBottom: 16 }; - const footerRowStyle = { marginTop: 16 }; - const footerButtonStyle = { marginRight: 8 }; + const blockStyle = {marginBottom: 16}; + const footerRowStyle = {marginTop: 16}; + const footerButtonStyle = {marginRight: 8}; const labels = { title: "Просмотр приема", @@ -72,19 +73,17 @@ const useAppointmentViewUI = () => { const downloadFile = async (fileId, fileName) => { try { - setDownloadingFiles((prev) => ({ ...prev, [fileId]: true })); - // Выполняем запрос с использованием fetch, применяя baseQueryWithAuth для аутентификации - const { url, ...options } = await baseQueryWithAuth( + setDownloadingFiles((prev) => ({...prev, [fileId]: true})); + const {url, ...options} = await baseQueryWithAuth( { url: `/appointment_files/${fileId}/file/`, method: 'GET', credentials: 'include', }, - { getState: () => ({}) }, + {}, {} ); - // Поскольку baseQueryWithAuth может вернуть объект с полной URL, используем его const response = await fetch(url, { ...options, method: 'GET', @@ -92,7 +91,11 @@ const useAppointmentViewUI = () => { }); if (!response.ok) { - throw new Error(`Ошибка HTTP: ${response.status} ${response.statusText}`); + notification.error({ + message: "Ошибка при скачивании файла", + description: "Не удалось загрузить файл.", + placement: "topRight", + }); } const blob = await response.blob(); @@ -104,11 +107,16 @@ const useAppointmentViewUI = () => { link.click(); link.remove(); window.URL.revokeObjectURL(downloadUrl); + } catch (error) { - console.error("Ошибка при скачивании файла:", error); - // Можно добавить уведомление, например, с antd message + console.error("Error downloading file:", error); + notification.error({ + message: "Ошибка при скачивании файлов", + description: "Не удалось загрузить файл.", + placement: "topRight", + }); } finally { - setDownloadingFiles((prev) => ({ ...prev, [fileId]: false })); + setDownloadingFiles((prev) => ({...prev, [fileId]: false})); } }; @@ -133,4 +141,4 @@ const useAppointmentViewUI = () => { }; }; -export default useAppointmentViewUI; \ No newline at end of file +export default useAppointmentView; \ No newline at end of file