Skip to content

Commit 09db4ed

Browse files
Show UI errors for invalid files in media upload (#11061)
1 parent 237ac53 commit 09db4ed

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,15 @@ angular.module("umbraco.directives")
6565
function _filesQueued(files, event) {
6666
//Push into the queue
6767
Utilities.forEach(files, file => {
68+
if (_filterFile(file) === true) {
6869

69-
if (_filterFile(file) === true) {
70-
71-
if (file.$error) {
72-
scope.rejected.push(file);
73-
} else {
74-
scope.queue.push(file);
75-
}
70+
if (file.$error) {
71+
scope.rejected.push(file);
72+
} else {
73+
scope.queue.push(file);
7674
}
77-
});
75+
}
76+
});
7877

7978
//when queue is done, kick the uploader
8079
if (!scope.working) {
@@ -173,6 +172,8 @@ angular.module("umbraco.directives")
173172
}
174173
} else if (evt.Message) {
175174
file.serverErrorMessage = evt.Message;
175+
} else if (evt && typeof evt === 'string') {
176+
file.serverErrorMessage = evt;
176177
}
177178
// If file not found, server will return a 404 and display this message
178179
if (status === 404) {
@@ -247,11 +248,18 @@ angular.module("umbraco.directives")
247248
return true;// yes, we did open the choose-media dialog, therefor we return true.
248249
}
249250

250-
scope.handleFiles = function(files, event) {
251+
scope.handleFiles = function(files, event, invalidFiles) {
252+
const allFiles = [...files, ...invalidFiles];
253+
254+
// add unique key for each files to use in ng-repeats
255+
allFiles.forEach(file => {
256+
file.key = String.CreateGuid();
257+
});
258+
251259
if (scope.filesQueued) {
252-
scope.filesQueued(files, event);
260+
scope.filesQueued(allFiles, event);
253261
}
254-
_filesQueued(files, event);
262+
_filesQueued(allFiles, event);
255263
};
256264
}
257265
};

src/Umbraco.Web.UI.Client/src/views/components/upload/umb-file-dropzone.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<div ngf-drop
77
ng-hide="hideDropzone === 'true'"
88
ng-model="filesHolder"
9-
ngf-change="handleFiles($files, $event)"
9+
ngf-change="handleFiles($files, $event, $invalidFiles)"
1010
class="dropzone"
1111
ngf-drag-over-class="'drag-over'"
1212
ngf-multiple="true"
@@ -30,7 +30,7 @@
3030
class="file-select"
3131
ngf-select
3232
ng-model="filesHolder"
33-
ngf-change="handleFiles($newFiles, $event)"
33+
ngf-change="handleFiles($files, $event, $invalidFiles)"
3434
ngf-multiple="true"
3535
ngf-pattern="{{ accept }}"
3636
ngf-max-size="{{ maxFileSize }}">
@@ -43,7 +43,7 @@
4343
<ul class="file-list" ng-show="done.length > 0 || queue.length > 0 || rejected.length > 0 || filesHolder.length > 0">
4444

4545
<!-- make list sort order the same as photo grid. The last uploaded photo in the top -->
46-
<li class="file" ng-repeat="file in done">
46+
<li class="file" ng-repeat="file in done track by file.key">
4747

4848
<!-- file name -->
4949
<div class="file-description">{{ file.name }}</div>
@@ -68,13 +68,13 @@
6868
</li>
6969

7070
<!-- make list sort order the same as photo grid. The last uploaded photo in the top -->
71-
<li class="file" ng-repeat="queued in queue">
71+
<li class="file" ng-repeat="queued in queue track by queued.key">
7272

7373
<!-- file name -->
7474
<div class="file-name">{{queued.name}}</div>
7575
</li>
7676

77-
<li class="file" ng-repeat="file in rejected">
77+
<li class="file" ng-repeat="file in rejected track by file.key">
7878

7979
<!-- file name -->
8080
<div class="file-description">

0 commit comments

Comments
 (0)