Skip to content

Commit

Permalink
Download supplementary & attachments files archive
Browse files Browse the repository at this point in the history
  • Loading branch information
SemaiCZE committed Feb 10, 2018
1 parent 2e3d02a commit 2cef43b
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 11 deletions.
18 changes: 15 additions & 3 deletions src/components/Exercises/FilesTable/FilesTable.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import Icon from 'react-fontawesome';
import { Table } from 'react-bootstrap';
import Button from '../../widgets/FlatButton';
import Box from '../../widgets/Box';
import { SendIcon } from '../../icons';
import { SendIcon, DownloadIcon } from '../../icons';

import UploadContainer from '../../../containers/UploadContainer';
import ResourceRenderer from '../../helpers/ResourceRenderer';
Expand All @@ -31,7 +31,8 @@ const FilesTable = ({
RowComponent,
intl,
isOpen = true,
viewOnly = false
viewOnly = false,
downloadArchive
}) =>
<Box title={title} collapsable isOpen={isOpen} unlimitedHeight>
<div>
Expand Down Expand Up @@ -88,6 +89,16 @@ const FilesTable = ({
</p>}
</div>}
</ResourceRenderer>
{downloadArchive &&
<p>
<Button bsStyle="primary" onClick={downloadArchive}>
<DownloadIcon />{' '}
<FormattedMessage
id="app.filesTable.downloadArchive"
defaultMessage="Download all"
/>
</Button>
</p>}
</div>
</Box>;

Expand All @@ -113,7 +124,8 @@ FilesTable.propTypes = {
RowComponent: PropTypes.func.isRequired,
intl: PropTypes.shape({ locale: PropTypes.string.isRequired }).isRequired,
isOpen: PropTypes.bool,
viewOnly: PropTypes.bool
viewOnly: PropTypes.bool,
downloadArchive: PropTypes.func
};

export default injectIntl(FilesTable);
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import {
import {
fetchAttachmentFiles,
addAttachmentFiles,
removeAttachmentFile
removeAttachmentFile,
downloadAttachmentArchive
} from '../../redux/modules/attachmentFiles';

import { createGetAttachmentFiles } from '../../redux/selectors/attachmentFiles';
Expand All @@ -23,7 +24,8 @@ const AttachmentFilesTableContainer = ({
attachmentFiles,
loadFiles,
addFiles,
removeFile
removeFile,
downloadArchive
}) =>
<FilesTableContainer
uploadId={`attachment-exercise-files-${exercise.id}`}
Expand All @@ -45,6 +47,7 @@ const AttachmentFilesTableContainer = ({
}
HeaderComponent={AttachmentFilesTableHeaderRow}
RowComponent={AttachmentFilesTableRow}
downloadArchive={downloadArchive}
/>;

AttachmentFilesTableContainer.propTypes = {
Expand All @@ -55,7 +58,8 @@ AttachmentFilesTableContainer.propTypes = {
attachmentFiles: ImmutablePropTypes.map,
loadFiles: PropTypes.func.isRequired,
addFiles: PropTypes.func.isRequired,
removeFile: PropTypes.func.isRequired
removeFile: PropTypes.func.isRequired,
downloadArchive: PropTypes.func
};

export default connect(
Expand All @@ -70,6 +74,10 @@ export default connect(
(dispatch, { exercise }) => ({
loadFiles: () => dispatch(fetchAttachmentFiles(exercise.id)),
addFiles: files => dispatch(addAttachmentFiles(exercise.id, files)),
removeFile: id => dispatch(removeAttachmentFile(exercise.id, id))
removeFile: id => dispatch(removeAttachmentFile(exercise.id, id)),
downloadArchive: e => {
e.preventDefault();
dispatch(downloadAttachmentArchive(exercise.id));
}
})
)(AttachmentFilesTableContainer);
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ import {
import {
fetchSupplementaryFilesForExercise,
addSupplementaryFiles,
removeSupplementaryFile
removeSupplementaryFile,
downloadSupplementaryArchive
} from '../../redux/modules/supplementaryFiles';
import { downloadSupplementaryFile } from '../../redux/modules/files';

Expand All @@ -27,6 +28,7 @@ const SupplementaryFilesTableContainer = ({
removeFile,
downloadFile,
viewOnly = false,
downloadArchive,
...props
}) =>
<FilesTableContainer
Expand All @@ -51,6 +53,7 @@ const SupplementaryFilesTableContainer = ({
HeaderComponent={SupplementaryFilesTableHeaderRow}
RowComponent={SupplementaryFilesTableRow}
viewOnly={viewOnly}
downloadArchive={downloadArchive}
{...props}
/>;

Expand All @@ -64,7 +67,8 @@ SupplementaryFilesTableContainer.propTypes = {
addFiles: PropTypes.func.isRequired,
removeFile: PropTypes.func.isRequired,
downloadFile: PropTypes.func.isRequired,
viewOnly: PropTypes.bool
viewOnly: PropTypes.bool,
downloadArchive: PropTypes.func
};

export default connect(
Expand All @@ -80,6 +84,10 @@ export default connect(
downloadFile: (event, id) => {
event.preventDefault();
dispatch(downloadSupplementaryFile(id));
},
downloadArchive: e => {
e.preventDefault();
dispatch(downloadSupplementaryArchive(exercise.id));
}
})
)(SupplementaryFilesTableContainer);
13 changes: 12 additions & 1 deletion src/redux/modules/attachmentFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import factory, {
resourceStatus
} from '../helpers/resourceManager';
import { createApiAction } from '../middleware/apiMiddleware';
import { downloadHelper } from '../helpers/api/download';

const resourceName = 'attachmentFiles';
const { actions, reduceActions } = factory({ resourceName });
Expand All @@ -19,7 +20,9 @@ export const actionTypes = {
ADD_FILES_FULFILLED: 'recodex/attachmentFiles/ADD_FILES_FULFILLED',
ADD_FILES_FAILED: 'recodex/attachmentFiles/ADD_FILES_REJECTED',
REMOVE_FILE: 'recodex/attachmentFiles/REMOVE_FILE',
REMOVE_FILE_FULFILLED: 'recodex/attachmentFiles/REMOVE_FILE_FULFILLED'
REMOVE_FILE_FULFILLED: 'recodex/attachmentFiles/REMOVE_FILE_FULFILLED',
DOWNLOAD_ATTACHMENT_ARCHIVE:
'recodex/attachmentFiles/DOWNLOAD_ATTACHMENT_ARCHIVE'
};

export const fetchAttachmentFiles = exerciseId =>
Expand Down Expand Up @@ -53,6 +56,14 @@ export const removeAttachmentFile = (exerciseId, fileId) =>
meta: { exerciseId, fileId }
});

export const downloadAttachmentArchive = downloadHelper({
actionType: actionTypes.DOWNLOAD_ATTACHMENT_ARCHIVE,
fetch: null,
endpoint: id => `/exercises/${id}/attachment-files/download-archive`,
fileNameSelector: (id, state) => `${id}.zip`,
contentType: 'application/zip'
});

/**
* Reducer
*/
Expand Down
13 changes: 12 additions & 1 deletion src/redux/modules/supplementaryFiles.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import factory, {
resourceStatus
} from '../helpers/resourceManager';
import { createApiAction } from '../middleware/apiMiddleware';
import { downloadHelper } from '../helpers/api/download';

const resourceName = 'supplementaryFiles';
const { actions, reduceActions } = factory({ resourceName });
Expand All @@ -19,7 +20,9 @@ export const actionTypes = {
ADD_FILES_FULFILLED: 'recodex/supplementaryFiles/ADD_FILES_FULFILLED',
ADD_FILES_FAILED: 'recodex/supplementaryFiles/ADD_FILES_REJECTED',
REMOVE_FILE: 'recodex/supplementaryFiles/REMOVE_FILE',
REMOVE_FILE_FULFILLED: 'recodex/supplementaryFiles/REMOVE_FILE_FULFILLED'
REMOVE_FILE_FULFILLED: 'recodex/supplementaryFiles/REMOVE_FILE_FULFILLED',
DOWNLOAD_SUPPLEMENTARY_ARCHIVE:
'recodex/supplementaryFiles/DOWNLOAD_SUPPLEMENTARY_ARCHIVE'
};

export const fetchSupplementaryFilesForExercise = exerciseId =>
Expand Down Expand Up @@ -53,6 +56,14 @@ export const removeSupplementaryFile = (exerciseId, fileId) =>
meta: { exerciseId, fileId }
});

export const downloadSupplementaryArchive = downloadHelper({
actionType: actionTypes.DOWNLOAD_SUPPLEMENTARY_ARCHIVE,
fetch: null,
endpoint: id => `/exercises/${id}/supplementary-files/download-archive`,
fileNameSelector: (id, state) => `${id}.zip`,
contentType: 'application/zip'
});

/**
* Reducer
*/
Expand Down

0 comments on commit 2cef43b

Please sign in to comment.