Skip to content

Commit 6b9e89a

Browse files
Martin Kruliskrulis-martin
authored andcommitted
Implementing per-partes upload using new API endpoints. ReCodEx can handle slow uploads of large files now.
1 parent 90128c9 commit 6b9e89a

File tree

28 files changed

+876
-401
lines changed

28 files changed

+876
-401
lines changed

.babelrc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
{
2-
"presets": ["@babel/preset-env", "@babel/preset-react"],
2+
"presets": [
3+
"@babel/preset-env",
4+
"@babel/preset-react"
5+
],
36
"plugins": [
47
["formatjs", {
58
"ast": true
69
}],
710
"transform-object-assign",
811
"transform-flow-strip-types",
9-
"@babel/plugin-proposal-class-properties"
12+
"@babel/plugin-proposal-class-properties",
13+
"@babel/plugin-transform-runtime"
1014
],
1115
"env": {
1216
"production": {

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
},
2828
"dependencies": {
2929
"@babel/plugin-transform-react-inline-elements": "^7.14.5",
30+
"@babel/runtime": "^7.14.6",
3031
"@formatjs/intl-pluralrules": "^4.0.27",
3132
"@formatjs/intl-relativetimeformat": "^9.1.6",
3233
"@fortawesome/fontawesome-free": "^5.15.3",
@@ -100,6 +101,7 @@
100101
"@babel/core": "^7.14.6",
101102
"@babel/node": "^7.14.7",
102103
"@babel/plugin-proposal-class-properties": "^7.14.5",
104+
"@babel/plugin-transform-runtime": "^7.14.5",
103105
"@babel/preset-env": "^7.14.7",
104106
"@babel/preset-react": "^7.14.5",
105107
"@babel/register": "^7.14.5",
@@ -112,9 +114,11 @@
112114
"babel-preset-es2015": "^6.6.0",
113115
"babel-preset-react": "^6.24.1",
114116
"babel-preset-stage-1": "^6.24.0",
117+
"babel-regenerator-runtime": "^6.5.0",
115118
"chai": "^4.3.4",
116119
"chai-spies": "^1.0.0",
117120
"colors": "^1.4.0",
121+
"core-js": "^3.15.2",
118122
"css-loader": "^5.2.6",
119123
"css-modules-require-hook": "^4.2.3",
120124
"dotenv": "^10.0.0",

src/components/Assignments/EvaluationProgress/EvaluationProgress.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ class EvaluationProgress extends Component {
5454
</Modal.Header>
5555
<Modal.Body>
5656
<ProgressBar>
57-
<ProgressBar now={completed} variant="success" active={!finished} />
58-
<ProgressBar now={skipped} variant="warning" active={!finished} />
59-
<ProgressBar now={failed} variant="danger" active={!finished} />
57+
<ProgressBar now={completed} variant="success" animated={!finished} />
58+
<ProgressBar now={skipped} variant="warning" animated={!finished} />
59+
<ProgressBar now={failed} variant="danger" animated={!finished} />
6060
</ProgressBar>
6161
{messages && (
6262
<div

src/components/Exercises/FilesTable/AttachmentFilesTableHeaderRow.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const AttachmentFilesTableHeaderRow = () => (
1010
<FormattedMessage id="app.attachmentFilesTable.url" defaultMessage="URL" />
1111
</th>
1212
<th>
13-
<FormattedMessage id="app.filesTable.fileSize" defaultMessage="File Size" />
13+
<FormattedMessage id="app.uploadFiles.fileSize" defaultMessage="File Size" />
1414
</th>
1515
<th>
1616
<FormattedMessage id="generic.uploadedAt" defaultMessage="Uploaded at" />

src/components/Exercises/FilesTable/FilesTable.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const FilesTable = ({
3131
<p className="text-center">
3232
<Button variant="success" disabled={!canSubmit} onClick={() => addFiles(newFiles)}>
3333
<SendIcon gapRight />
34-
<FormattedMessage id="app.filesTable.addFiles" defaultMessage="Save files" />
34+
<FormattedMessage id="app.filesTable.saveUploadedFilesButton" defaultMessage="Save Uploaded Files" />
3535
</Button>
3636
</p>
3737
)}
@@ -62,7 +62,7 @@ const FilesTable = ({
6262
{files.length === 0 && (
6363
<p className="text-center em-padding">
6464
<Icon icon={['far', 'folder-open']} gapRight />
65-
<FormattedMessage id="app.filesTable.empty" defaultMessage="There are no uploaded files yet." />
65+
<FormattedMessage id="app.filesTable.empty" defaultMessage="There are no saved files yet." />
6666
</p>
6767
)}
6868

src/components/Exercises/FilesTable/SupplementaryFilesTableHeaderRow.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const SupplementaryFilesTableHeaderRow = ({ viewOnly }) => (
88
<FormattedMessage id="app.filesTable.originalFileName" defaultMessage="Original File Name" />
99
</th>
1010
<th>
11-
<FormattedMessage id="app.filesTable.fileSize" defaultMessage="File Size" />
11+
<FormattedMessage id="app.uploadFiles.fileSize" defaultMessage="File Size" />
1212
</th>
1313
<th>
1414
<FormattedMessage id="generic.uploadedAt" defaultMessage="Uploaded at" />

src/components/Solutions/SubmitSolution/SubmitSolution.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import UploadContainer from '../../../containers/UploadContainer';
1212
import UsersNameContainer from '../../../containers/UsersNameContainer';
1313
import Confirm from '../../forms/Confirm';
1414

15-
import { createGetUploadedFiles } from '../../../redux/selectors/upload';
15+
import { uploadedFilesSelector } from '../../../redux/selectors/upload';
1616
import { hasEntryPoint } from '../../../redux/selectors/submission';
1717
import { getConfigVar } from '../../../helpers/config';
1818

@@ -369,7 +369,7 @@ SubmitSolution.propTypes = {
369369
export default injectIntl(
370370
connect(
371371
(state, { uploadId, isReferenceSolution = false }) => ({
372-
attachedFiles: createGetUploadedFiles(uploadId)(state),
372+
attachedFiles: uploadedFilesSelector(state, uploadId),
373373
messages: isReferenceSolution ? referenceSolutionMessages : submissionMessages,
374374
}),
375375
() => ({})

src/components/Solutions/Upload/Upload.js

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,67 +10,69 @@ const dropZoneStyles = {
1010
borderWidth: 2,
1111
borderColor: '#666',
1212
borderStyle: 'dashed',
13-
padding: 40,
14-
marginBottom: 20,
15-
borderRadius: 5,
16-
fontSize: 20,
13+
padding: '0.5em',
14+
marginBottom: '0.5em',
15+
borderRadius: '5px',
1716
textAlign: 'center',
1817
};
1918

2019
const Upload = ({
21-
uploadFiles,
2220
uploadingFiles,
23-
attachedFiles,
21+
uploadedFiles,
2422
failedFiles,
2523
removedFiles,
26-
removeFile,
27-
returnFile,
28-
removeFailedFile,
29-
retryUploadFile,
24+
doUploadFiles,
25+
doRequestUploadCancel,
26+
doRemoveFile,
27+
doRestoreRemovedFile,
28+
doRemoveFailedFile,
29+
doRetryUploadFile,
3030
}) => (
3131
<div>
32-
<Dropzone onDrop={uploadFiles}>
32+
<Dropzone onDrop={doUploadFiles}>
3333
{({ getRootProps, getInputProps }) => (
3434
<div {...getRootProps()} style={dropZoneStyles}>
3535
<input {...getInputProps()} />
36-
<p>
37-
<FormattedMessage id="app.submitSolution.dragAndDrop" defaultMessage="Drag and drop files here." />
38-
</p>
39-
<p>
36+
<div className="my-3">
4037
<Button variant="primary">
4138
<UploadIcon gapRight />
42-
<FormattedMessage id="app.submitSolution.addFile" defaultMessage="Add File(s)" />
39+
<FormattedMessage id="app.uploadFiles.addFileButton" defaultMessage="Select File(s) for Upload" />
4340
</Button>
44-
</p>
41+
</div>
42+
<div className="small text-muted my-3">
43+
<FormattedMessage id="app.uploadFiles.dragAndDrop" defaultMessage="Or simply drag and drop files here..." />
44+
</div>
4545
</div>
4646
)}
4747
</Dropzone>
4848

49-
{(uploadingFiles.length > 0 || attachedFiles.length > 0 || failedFiles.length > 0 || removedFiles.length > 0) && (
49+
{(uploadingFiles.length > 0 || uploadedFiles.length > 0 || failedFiles.length > 0 || removedFiles.length > 0) && (
5050
<UploadsTable
5151
uploadingFiles={uploadingFiles}
52-
attachedFiles={attachedFiles}
52+
uploadedFiles={uploadedFiles}
5353
failedFiles={failedFiles}
5454
removedFiles={removedFiles}
55-
removeFile={removeFile}
56-
returnFile={returnFile}
57-
removeFailedFile={removeFailedFile}
58-
retryUploadFile={retryUploadFile}
55+
doRequestUploadCancel={doRequestUploadCancel}
56+
doRemoveFile={doRemoveFile}
57+
doRestoreRemovedFile={doRestoreRemovedFile}
58+
doRemoveFailedFile={doRemoveFailedFile}
59+
doRetryUploadFile={doRetryUploadFile}
5960
/>
6061
)}
6162
</div>
6263
);
6364

6465
Upload.propTypes = {
6566
uploadingFiles: PropTypes.array.isRequired,
66-
attachedFiles: PropTypes.array.isRequired,
67+
uploadedFiles: PropTypes.array.isRequired,
6768
failedFiles: PropTypes.array.isRequired,
6869
removedFiles: PropTypes.array.isRequired,
69-
uploadFiles: PropTypes.func.isRequired,
70-
removeFile: PropTypes.func.isRequired,
71-
returnFile: PropTypes.func.isRequired,
72-
removeFailedFile: PropTypes.func.isRequired,
73-
retryUploadFile: PropTypes.func.isRequired,
70+
doRequestUploadCancel: PropTypes.func.isRequired,
71+
doUploadFiles: PropTypes.func.isRequired,
72+
doRemoveFile: PropTypes.func.isRequired,
73+
doRestoreRemovedFile: PropTypes.func.isRequired,
74+
doRemoveFailedFile: PropTypes.func.isRequired,
75+
doRetryUploadFile: PropTypes.func.isRequired,
7476
};
7577

7678
export default Upload;

0 commit comments

Comments
 (0)