Skip to content

Commit 9d02ecd

Browse files
committed
WIP: fix: disable file buttons while upload in progress
This avoids race conditions and resulting issues, including: - deleting a file while an upload is in progress - selecting a new file to upload while another upload is in progress - submitting the assessment while an upload is in progress - TODO: deleting a file while submission is in progress Private-ref: https://tasks.opencraft.com/browse/BB-9938
1 parent 3e4bf88 commit 9d02ecd

10 files changed

+60
-44
lines changed

openassessment/xblock/static/dist/manifest.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44
"openassessment-editor-textarea.js.map": "/openassessment-editor-textarea.cbb31e4372be87d437fb.js.map",
55
"openassessment-editor-tinymce.js": "/openassessment-editor-tinymce.2a1e66e98a2a1132f633.js",
66
"openassessment-editor-tinymce.js.map": "/openassessment-editor-tinymce.2a1e66e98a2a1132f633.js.map",
7-
"openassessment-lms.css": "/openassessment-lms.42bdf01af5d117224bc9.css",
8-
"openassessment-lms.js": "/openassessment-lms.42bdf01af5d117224bc9.js",
9-
"openassessment-lms.css.map": "/openassessment-lms.42bdf01af5d117224bc9.css.map",
10-
"openassessment-lms.js.map": "/openassessment-lms.42bdf01af5d117224bc9.js.map",
11-
"openassessment-ltr.css": "/openassessment-ltr.0c6318822d5661f0f9ea.css",
12-
"openassessment-ltr.js": "/openassessment-ltr.0c6318822d5661f0f9ea.js",
13-
"openassessment-ltr.css.map": "/openassessment-ltr.0c6318822d5661f0f9ea.css.map",
14-
"openassessment-ltr.js.map": "/openassessment-ltr.0c6318822d5661f0f9ea.js.map",
15-
"openassessment-rtl.css": "/openassessment-rtl.c938e1614108d8feb891.css",
16-
"openassessment-rtl.js": "/openassessment-rtl.c938e1614108d8feb891.js",
17-
"openassessment-rtl.css.map": "/openassessment-rtl.c938e1614108d8feb891.css.map",
18-
"openassessment-rtl.js.map": "/openassessment-rtl.c938e1614108d8feb891.js.map",
7+
"openassessment-lms.css": "/openassessment-lms.ff602d9a3d17c398701d.css",
8+
"openassessment-lms.js": "/openassessment-lms.ff602d9a3d17c398701d.js",
9+
"openassessment-lms.css.map": "/openassessment-lms.ff602d9a3d17c398701d.css.map",
10+
"openassessment-lms.js.map": "/openassessment-lms.ff602d9a3d17c398701d.js.map",
11+
"openassessment-ltr.css": "/openassessment-ltr.97990de9668aaa4cd1d5.css",
12+
"openassessment-ltr.js": "/openassessment-ltr.97990de9668aaa4cd1d5.js",
13+
"openassessment-ltr.css.map": "/openassessment-ltr.97990de9668aaa4cd1d5.css.map",
14+
"openassessment-ltr.js.map": "/openassessment-ltr.97990de9668aaa4cd1d5.js.map",
15+
"openassessment-rtl.css": "/openassessment-rtl.19576ab9f81f644cb7fd.css",
16+
"openassessment-rtl.js": "/openassessment-rtl.19576ab9f81f644cb7fd.js",
17+
"openassessment-rtl.css.map": "/openassessment-rtl.19576ab9f81f644cb7fd.css.map",
18+
"openassessment-rtl.js.map": "/openassessment-rtl.19576ab9f81f644cb7fd.js.map",
1919
"openassessment-studio.js": "/openassessment-studio.b58bb4e55f63dadac6de.js",
2020
"openassessment-studio.js.map": "/openassessment-studio.b58bb4e55f63dadac6de.js.map",
2121
"fallback-default.png": "/4620b30a966533ace489dcc7afb151b9.png",

openassessment/xblock/static/dist/openassessment-lms.42bdf01af5d117224bc9.css

Lines changed: 0 additions & 3 deletions
This file was deleted.

openassessment/xblock/static/dist/openassessment-lms.ff602d9a3d17c398701d.css

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/dist/openassessment-lms.42bdf01af5d117224bc9.js renamed to openassessment/xblock/static/dist/openassessment-lms.ff602d9a3d17c398701d.js

Lines changed: 17 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/dist/openassessment-ltr.0c6318822d5661f0f9ea.css renamed to openassessment/xblock/static/dist/openassessment-ltr.97990de9668aaa4cd1d5.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/dist/openassessment-ltr.0c6318822d5661f0f9ea.js renamed to openassessment/xblock/static/dist/openassessment-ltr.97990de9668aaa4cd1d5.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/dist/openassessment-rtl.c938e1614108d8feb891.css renamed to openassessment/xblock/static/dist/openassessment-rtl.19576ab9f81f644cb7fd.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/dist/openassessment-rtl.c938e1614108d8feb891.js renamed to openassessment/xblock/static/dist/openassessment-rtl.19576ab9f81f644cb7fd.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

openassessment/xblock/static/js/src/lms/oa_response.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,24 +158,40 @@ export class ResponseView {
158158
this.baseView.bindLatexPreview(sel);
159159

160160
const uploadButton = sel.find('.file__upload');
161+
const deleteButtons = sel.find('.delete__uploaded__file');
162+
const fileInput = sel.find('.submission__answer__upload');
161163
const spinner = sel.find('.fa-spinner');
164+
165+
const disableWhileUploading = () => {
166+
uploadButton.prop('disabled', true);
167+
deleteButtons.prop('disabled', true);
168+
fileInput.prop('disabled', true);
169+
this.submitEnabled(false);
170+
spinner.removeClass('is--hidden');
171+
};
172+
173+
const enableAfterUploading = () => {
174+
uploadButton.prop('disabled', false);
175+
deleteButtons.prop('disabled', false);
176+
fileInput.prop('disabled', false);
177+
this.submitEnabled(true);
178+
spinner.addClass('is--hidden');
179+
};
180+
162181
// Install a click handler for the save button
163182
uploadButton.click(
164183
(eventObject) => {
165184
// Override default form submission
166185
eventObject.preventDefault();
167186
$('.submission__answer__display__file', view.element).removeClass('is--hidden');
168-
uploadButton.prop('disabled', true);
169-
spinner.removeClass('is--hidden');
187+
disableWhileUploading();
170188
if (view.hasAllUploadFiles()) {
171189
const promise = view.uploadFiles();
172190
promise.then(() => {
173-
uploadButton.prop('disabled', false);
174-
spinner.addClass('is--hidden');
191+
enableAfterUploading();
175192
});
176193
} else {
177-
uploadButton.prop('disabled', false);
178-
spinner.addClass('is--hidden');
194+
enableAfterUploading();
179195
}
180196
},
181197
);

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)