From b53ab902f80d0d2b58c0faefbb886cbaee5efcd4 Mon Sep 17 00:00:00 2001
From: andrei
Date: Wed, 4 Jun 2025 19:05:49 +0500
Subject: [PATCH] =?UTF-8?q?feat:=20=D0=9C=D0=BE=D0=B4=D0=B0=D0=BB=D1=8C?=
=?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D0=BF=D1=80?=
=?UTF-8?q?=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=D0=B0=20=D0=B7=D0=B0=D0=BF?=
=?UTF-8?q?=D0=B8=D1=81=D0=B8:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
=?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA?=
=?UTF-8?q?=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
web-app/src/Api/appointmentFilesApi.js | 35 ++++++++++++++++-
.../AppointmentViewModal.jsx | 30 ++++++++++++++-
.../useAppointmentViewUI.js | 38 +++++++++++++++++++
3 files changed, 99 insertions(+), 4 deletions(-)
diff --git a/web-app/src/Api/appointmentFilesApi.js b/web-app/src/Api/appointmentFilesApi.js
index cfe7274..17fd2e1 100644
--- a/web-app/src/Api/appointmentFilesApi.js
+++ b/web-app/src/Api/appointmentFilesApi.js
@@ -1,11 +1,33 @@
import { createApi } from "@reduxjs/toolkit/query/react";
import { baseQueryWithAuth } from "./baseQuery.js";
+import { isPlainObject } from "@reduxjs/toolkit";
export const appointmentFilesApi = createApi({
reducerPath: 'appointmentFilesApi',
baseQuery: baseQueryWithAuth,
tagTypes: ['AppointmentFile'],
endpoints: (builder) => ({
+ getAppointmentFiles: builder.query({
+ query: (appointmentId) => {
+ console.log(`Fetching files for appointment ID: ${appointmentId}`);
+ return `/appointment_files/${appointmentId}/`;
+ },
+ providesTags: ['AppointmentFile'],
+ refetchOnMountOrArgChange: 5,
+ }),
+ downloadAppointmentFile: builder.mutation({
+ query: (fileId) => ({
+ url: `/appointment_files/${fileId}/file/`,
+ method: 'GET',
+ }),
+ }),
+ deleteAppointmentFile: builder.mutation({
+ query: (fileId) => ({
+ url: `/appointment_files/${fileId}/`,
+ method: 'DELETE',
+ }),
+ invalidatesTags: ['AppointmentFile'],
+ }),
uploadAppointmentFile: builder.mutation({
query: ({ appointmentId, file }) => {
if (!(file instanceof File)) {
@@ -24,11 +46,20 @@ export const appointmentFilesApi = createApi({
invalidatesTags: ['AppointmentFile'],
}),
}),
+ middleware: (defaultMiddleware) =>
+ defaultMiddleware({
+ serializableCheck: {
+ isSerializable: (value) => {
+ if (value instanceof Blob) return true; // Игнорируем Blob
+ return isPlainObject(value) || typeof value !== 'object';
+ },
+ },
+ }),
});
export const {
useGetAppointmentFilesQuery,
- useDownloadAppointmentFileQuery,
- useUploadAppointmentFileMutation,
+ useDownloadAppointmentFileMutation,
useDeleteAppointmentFileMutation,
+ useUploadAppointmentFileMutation,
} = appointmentFilesApi;
\ No newline at end of file
diff --git a/web-app/src/Components/Widgets/AppointmentViewModal/AppointmentViewModal.jsx b/web-app/src/Components/Widgets/AppointmentViewModal/AppointmentViewModal.jsx
index e54fb91..d772052 100644
--- a/web-app/src/Components/Widgets/AppointmentViewModal/AppointmentViewModal.jsx
+++ b/web-app/src/Components/Widgets/AppointmentViewModal/AppointmentViewModal.jsx
@@ -1,4 +1,4 @@
-import {Button, Modal, Row, Typography} from "antd";
+import { Button, Modal, Row, Typography, Spin } from "antd";
import useAppointmentViewUI from "./useAppointmentViewUI.js";
const AppointmentViewModal = () => {
@@ -16,6 +16,10 @@ const AppointmentViewModal = () => {
getPatientField,
getResults,
onCancel,
+ files,
+ isFilesLoading,
+ downloadingFiles,
+ downloadFile,
} = useAppointmentViewUI();
if (!selectedAppointment) {
@@ -63,8 +67,30 @@ const AppointmentViewModal = () => {
{labels.results}
+
+ {labels.files}
+
+ {isFilesLoading ? (
+
+ ) : files.length > 0 ? (
+ files.map((file) => (
+
+ {file.file_title || labels.notSpecified}
+
+
+ ))
+ ) : (
+ {labels.noFiles}
+ )}