Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 20aeee0

Browse files
committed
Merge pull request #653 from appirio-tech/SUP-2947-file-size
Show error for file size
2 parents 29b3c66 + 81eff51 commit 20aeee0

File tree

2 files changed

+51
-20
lines changed

2 files changed

+51
-20
lines changed

app/directives/tc-file-input/tc-file-input.directive.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
function tcFileInput() {
77
return {
88
restrict: 'E',
9-
require: ['^form', '^ngModel'],
9+
require: '^form',
1010
templateUrl: 'directives/tc-file-input/tc-file-input.html',
1111
scope: {
1212
labelText: '@',
@@ -19,10 +19,7 @@
1919
setFileReference: '&',
2020
ngModel: '='
2121
},
22-
link: function(scope, element, attrs, controllers) {
23-
var formController = controllers[0];
24-
var ngModel = controllers[1];
25-
22+
link: function(scope, element, attrs, formController) {
2623
scope.selectFile = selectFile;
2724
var fileTypes = scope.fileType.split(',');
2825

@@ -34,26 +31,44 @@
3431
fileInput.bind('change', function() {
3532
var file = fileInput[0].files[0];
3633

34+
// About 1 in 20 times, the file is undefined (must be race condition)
35+
// Return early in this case so no errors are thrown
36+
if (!file) {
37+
return;
38+
}
39+
40+
var fileSize = file.size;
41+
var isAllowedFileSize = fileSize < '500000000';
42+
3743
var selectedFileType = file.type.slice(file.type.lastIndexOf('/') + 1);
3844
var isAllowedFileFormat = _.some(fileTypes, _.matches(selectedFileType));
3945

4046
scope.$apply(function(){
47+
// Set the file name as the value of the disabled input
48+
fileNameInput[0].value = file.name;
49+
var clickedFileInput = formController[attrs.fieldId];
50+
4151
if (!isAllowedFileFormat) {
42-
fileNameInput[0].value = file.name;
52+
// Manually setting is required since Angular doesn't support file inputs
53+
clickedFileInput.$setTouched();
54+
clickedFileInput.$setValidity('required', false);
55+
56+
} else {
57+
clickedFileInput.$setValidity('required', true);
58+
}
4359

60+
if (!isAllowedFileSize) {
4461
// Manually setting is required since Angular doesn't support file inputs
45-
formController[attrs.fieldId].$setTouched();
46-
formController[attrs.fieldId].$setValidity('required', false);
62+
clickedFileInput.$setTouched();
63+
clickedFileInput.$setValidity('filesize', false);
4764

4865
} else {
66+
clickedFileInput.$setValidity('filesize', true);
67+
}
68+
69+
if (isAllowedFileFormat && isAllowedFileSize) {
4970
// Pass file object up through callback into controller
5071
scope.setFileReference({file: file, fieldId: scope.fieldId});
51-
52-
// Set the file name as the value of the disabled input
53-
fileNameInput[0].value = file.name;
54-
55-
// Manually set validity of specific input field
56-
formController[attrs.fieldId].$setValidity('required', true);
5772
}
5873
});
5974
});

app/submissions/submit-file/submit-file.jade

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,14 @@
3737
ng-model="vm.submissionForm.submissionZip"
3838
)
3939

40-
.tc-error-messages(ng-show="submissionForm['SUBMISSION_ZIP'].$touched && submissionForm['SUBMISSION_ZIP'].$invalid")
41-
p(ng-show="submissionForm['SUBMISSION_ZIP'].$error.required") This is not the correct file format. Please select a .zip file.
40+
.tc-error-messages(
41+
ng-show="submissionForm['SUBMISSION_ZIP'].$touched && submissionForm['SUBMISSION_ZIP'].$invalid",
42+
ng-messages="submissionForm['SUBMISSION_ZIP'].$error"
43+
)
44+
p(ng-message="filesize") File size may not exceed 500MB.
45+
46+
p(ng-message="required") This is not the correct file format. Please select a .zip file.
47+
4248

4349
tc-file-input.tc-file-field(
4450
label-text="Source",
@@ -52,8 +58,13 @@
5258
ng-model="vm.submissionForm.sourceZip"
5359
)
5460

55-
.tc-error-messages(ng-show="submissionForm['SOURCE_ZIP'].$touched && submissionForm['SOURCE_ZIP'].$invalid")
56-
p(ng-show="submissionForm['SOURCE_ZIP'].$error.required") This is not the correct file format. Please select a .zip file.
61+
.tc-error-messages(
62+
ng-show="submissionForm['SOURCE_ZIP'].$touched && submissionForm['SOURCE_ZIP'].$invalid",
63+
ng-messages="submissionForm['SOURCE_ZIP'].$error"
64+
)
65+
p(ng-message="filesize") File size may not exceed 500MB.
66+
67+
p(ng-message="required") This is not the correct file format. Please select a .zip file.
5768

5869
tc-file-input.tc-file-field(
5970
label-text="Preview Image",
@@ -66,8 +77,13 @@
6677
ng-model="vm.submissionForm.designCover"
6778
)
6879

69-
.tc-error-messages(ng-show="submissionForm['DESIGN_COVER'].$touched && submissionForm['DESIGN_COVER'].$invalid")
70-
p(ng-show="submissionForm['DESIGN_COVER'].$error.required") This is not the correct file format. Please select a .jpg or .png file.
80+
.tc-error-messages(
81+
ng-show="submissionForm['DESIGN_COVER'].$touched && submissionForm['DESIGN_COVER'].$invalid",
82+
ng-messages="submissionForm['DESIGN_COVER'].$error"
83+
)
84+
p(ng-message="filesize") File size may not exceed 500MB.
85+
86+
p(ng-message="required") This is not the correct file format. Please select a .jpg or .png file.
7187

7288
tc-input.fieldset__input.submitterRank(
7389
label-text="Rank #",

0 commit comments

Comments
 (0)