diff --git a/js/components/upload_input.js b/js/components/upload_input.js index 273c1d20..edf01450 100644 --- a/js/components/upload_input.js +++ b/js/components/upload_input.js @@ -46,9 +46,9 @@ export default { return { hasInitialData: !!this.initialData, attachment: this.initialData || null, - showErrors: this.initialErrors, changed: false, - uploadError: null, + uploadError: false, + sizeError: false, } }, @@ -63,15 +63,22 @@ export default { methods: { addAttachment: async function(e) { + this.clearErrors() + const file = e.target.files[0] + if (file.size > 64000000) { + this.sizeError = true + return + } const response = await this.uploader.upload(file, this.objectName) + if (response.ok) { this.attachment = e.target.value this.$refs.attachmentFilename.value = file.name this.$refs.attachmentObjectName.value = this.objectName + this.$refs.attachmentInput.disabled = true } else { - this.showErrors = true this.uploadError = true } @@ -89,9 +96,9 @@ export default { this.attachment = null if (this.$refs.attachmentInput) { this.$refs.attachmentInput.value = null + this.$refs.attachmentInput.disabled = false } - this.showErrors = false - this.uploadError = false + this.clearErrors() this.changed = true emitEvent('field-change', this, { @@ -100,6 +107,10 @@ export default { watch: this.watch, }) }, + clearErrors: function() { + this.uploadError = false + this.sizeError = false + }, }, computed: { @@ -114,5 +125,12 @@ export default { hideInput: function() { return this.hasInitialData && !this.changed }, + showErrors: function() { + return ( + (!this.changed && this.initialErrors) || + this.uploadError || + this.sizeError + ) + }, }, } diff --git a/js/lib/upload.js b/js/lib/upload.js index 4a300b32..ff85ab4a 100644 --- a/js/lib/upload.js +++ b/js/lib/upload.js @@ -32,9 +32,9 @@ class AzureUploader { options, function(err, result) { if (err) { - reject(err) + resolve({ ok: false }) } else { - resolve(result) + resolve({ ok: true }) } } ) diff --git a/templates/components/upload_input.html b/templates/components/upload_input.html index a56cb0bf..a261ea21 100644 --- a/templates/components/upload_input.html +++ b/templates/components/upload_input.html @@ -46,6 +46,9 @@ + {% for error, error_messages in field.errors.items() %} {{error_messages[0]}} {% endfor %} diff --git a/translations.yaml b/translations.yaml index 01e6fc70..98d6c400 100644 --- a/translations.yaml +++ b/translations.yaml @@ -156,6 +156,7 @@ forms: length_error: Filename may be no longer than 100 characters. task_order: upload_error: There was an error uploading your file. Please try again. If you encounter repeated problems uploading this file, please contact CCPO. + size_error: The file you have selected is too large. Please choose a file no larger than 64MB. app_migration: both: 'Yes, migrating from both an on-premise data center and another cloud provider' cloud: 'Yes, migrating from another cloud provider' @@ -381,7 +382,7 @@ task_orders: pop_start: 'Period of Performance (PoP) start date' review_button: Review task order supporting_docs_header: Upload your supporting documentation - supporting_docs_size_limit: Your file may not exceed 1MB + supporting_docs_size_limit: Your file may not exceed 64MB supporting_docs_text: Upload a single PDF containing all relevant information. step_5: title: Confirm Signature