download working (#2230)

Co-authored-by: burnettk <burnettk@users.noreply.github.com>
This commit is contained in:
Kevin Burnett 2025-02-06 08:39:35 -08:00 committed by GitHub
parent eea607d2ca
commit 8644dcafff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -15,6 +15,8 @@ import { PureAbility } from '@casl/ability';
import ButtonWithConfirmation from './ButtonWithConfirmation';
import ProcessModelTestRun from './ProcessModelTestRun';
import { ProcessFile } from '../interfaces';
import HttpService from '../services/HttpService';
import useAPIError from '../hooks/UseApiError';
interface ProcessModelFileListProps {
processModel: any;
@ -35,6 +37,7 @@ export default function ProcessModelFileList({
onSetPrimaryFile,
isTestCaseFile,
}: ProcessModelFileListProps) {
const { addError, removeError } = useAPIError();
const profileModelFileEditUrl = (processModelFile: ProcessFile) => {
if (processModel) {
if (processModelFile.name.match(/\.(dmn|bpmn)$/)) {
@ -47,6 +50,40 @@ export default function ProcessModelFileList({
return null;
};
const handleProcessModelFileResult = (processModelFile: ProcessFile) => {
if (
!('file_contents' in processModelFile) ||
processModelFile.file_contents === undefined
) {
addError({
message: `Could not file file contents for file: ${processModelFile.name}`,
});
return;
}
let contentType = 'application/xml';
if (processModelFile.type === 'json') {
contentType = 'application/json';
}
const element = document.createElement('a');
const file = new Blob([processModelFile.file_contents], {
type: contentType,
});
const downloadFileName = processModelFile.name;
element.href = URL.createObjectURL(file);
element.download = downloadFileName;
document.body.appendChild(element);
element.click();
};
const downloadFile = (fileName: string) => {
removeError();
const processModelPath = `process-models/${modifiedProcessModelId}`;
HttpService.makeCallToBackend({
path: `/${processModelPath}/files/${fileName}`,
successCallback: handleProcessModelFileResult,
});
};
const renderButtonElements = (
processModelFile: ProcessFile,
isPrimaryBpmnFile: boolean,
@ -80,12 +117,7 @@ export default function ProcessModelFileList({
iconDescription="Download File"
hasIconOnly
size="lg"
onClick={() =>
window.open(
`/${targetUris.processModelFilePath}/${processModelFile.name}`,
'_blank',
)
}
onClick={() => downloadFile(processModelFile.name)}
/>
</Can>,
);