refactor: AppointmentView: Переименован hook и убран console.log

This commit is contained in:
Андрей Дувакин 2025-06-04 19:24:09 +05:00
parent 4dca2314cc
commit a416b6cc95
3 changed files with 40 additions and 32 deletions

View File

@ -8,7 +8,6 @@ export const appointmentFilesApi = createApi({
endpoints: (builder) => ({
getAppointmentFiles: builder.query({
query: (appointmentId) => {
console.log(`Fetching files for appointment ID: ${appointmentId}`);
return `/appointment_files/${appointmentId}/`;
},
providesTags: ['AppointmentFile'],

View File

@ -1,5 +1,5 @@
import { Button, Modal, Row, Typography, Spin } from "antd";
import useAppointmentViewUI from "./useAppointmentViewUI.js";
import {Button, Modal, Row, Typography, Spin, Splitter, Divider} from "antd";
import useAppointmentView from "./useAppointmentView.js";
const AppointmentViewModal = () => {
const {
@ -20,7 +20,7 @@ const AppointmentViewModal = () => {
isFilesLoading,
downloadingFiles,
downloadFile,
} = useAppointmentViewUI();
} = useAppointmentView();
if (!selectedAppointment) {
return null;
@ -76,17 +76,18 @@ const AppointmentViewModal = () => {
<Spin/>
) : files.length > 0 ? (
files.map((file) => (
<div key={file.id} style={{ marginBottom: 8 }}>
<Row key={file.id} align="middle" justify="space-between">
<span>{file.file_title || labels.notSpecified}</span>
<Button
style={{ marginLeft: 8 }}
onClick={() => downloadFile(file.id, file.file_title)}
loading={downloadingFiles[file.id] || false}
disabled={downloadingFiles[file.id] || false}
type={"dashed"}
>
{downloadingFiles[file.id] ? labels.downloading : labels.download}
</Button>
</div>
<Divider/>
</Row>
))
) : (
<p>{labels.noFiles}</p>

View File

@ -4,8 +4,9 @@ import dayjs from "dayjs";
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);
@ -73,18 +74,16 @@ const useAppointmentViewUI = () => {
const downloadFile = async (fileId, fileName) => {
try {
setDownloadingFiles((prev) => ({...prev, [fileId]: true}));
// Выполняем запрос с использованием fetch, применяя baseQueryWithAuth для аутентификации
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,9 +107,14 @@ 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}));
}
@ -133,4 +141,4 @@ const useAppointmentViewUI = () => {
};
};
export default useAppointmentViewUI;
export default useAppointmentView;