- Introduced a new endpoint `GET /equipment/{id}/attachment/download` in the API for downloading equipment attachment files.
- Implemented the `downloadEquipmentAttachmentFile` function in the client to handle file downloads via the API, ensuring proper token management and blob handling.
- Updated the EquipmentAttachmentInput, EquipmentList, and EquipmentShow components to utilize the new download link, enhancing user experience by allowing direct downloads without exposing the MinIO URL.
- Added a new EquipmentAttachmentLink component to encapsulate the download link logic and improve code reusability.
32 lines
912 B
TypeScript
32 lines
912 B
TypeScript
import { Link } from '@mui/material';
|
||
import { useNotify } from 'react-admin';
|
||
import { downloadEquipmentAttachmentFile } from './attachmentDownload';
|
||
|
||
type Props = {
|
||
equipmentId: string;
|
||
/** Текст ссылки и имя при сохранении в браузере */
|
||
fileName: string;
|
||
};
|
||
|
||
export function EquipmentAttachmentLink({ equipmentId, fileName }: Props) {
|
||
const notify = useNotify();
|
||
const label = fileName.trim() || 'Скачать';
|
||
|
||
return (
|
||
<Link
|
||
component="button"
|
||
type="button"
|
||
onClick={(e) => {
|
||
e.preventDefault();
|
||
e.stopPropagation();
|
||
void downloadEquipmentAttachmentFile(equipmentId, label).catch(() =>
|
||
notify('Не удалось скачать файл', { type: 'warning' }),
|
||
);
|
||
}}
|
||
sx={{ cursor: 'pointer', textAlign: 'left', verticalAlign: 'inherit' }}
|
||
>
|
||
{label}
|
||
</Link>
|
||
);
|
||
}
|