Skip to content

Commit cad1f06

Browse files
authored
Merge pull request UiPath#51 from UiPath/fix/dragdropmultiple
fix(drag-and-drop-file): respect multiple=false flag
2 parents 22bfa4c + 52f2585 commit cad1f06

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

projects/angular/directives/ui-drag-and-drop-file/src/ui-drag-and-drop-file.directive.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { UiDragAndDropFileDirective } from './ui-drag-and-drop-file.directive';
1818
[fileType]="fileType"
1919
[fileClearRef]="clearRef"
2020
[disabled]="disabled"
21+
[multiple]="multiple"
2122
(fileClear)="onFileClear()"
2223
(fileChange)="onFileChange($event)">
2324
Test
@@ -30,6 +31,7 @@ class TestDragAndDropFileComponent {
3031
public fileType = '.txt';
3132
public files?: File[];
3233
public disabled = false;
34+
public multiple = false;
3335

3436
onFileChange(files: FileList) {
3537
this.files = Array.from(files);
@@ -159,6 +161,9 @@ describe('Directive: UiDragAndDropFileDirective', () => {
159161
});
160162

161163
it('should filter different file types', () => {
164+
component.multiple = true;
165+
fixture.detectChanges();
166+
162167
dropEvent.dataTransfer.files.add(
163168
fakeFile(component.fileType),
164169
fakeFile(component.fileType),
@@ -173,6 +178,17 @@ describe('Directive: UiDragAndDropFileDirective', () => {
173178
expect(component.files).toBeDefined();
174179
expect(component.files!.length).toBe(3);
175180
});
181+
182+
it('should NOT allow multiple files when multiple=false', () => {
183+
dropEvent.dataTransfer.files.add(
184+
fakeFile('.jpg'),
185+
fakeFile('.png'),
186+
);
187+
188+
container.dispatchEvent(dropEvent);
189+
190+
expect(component.files).toBeUndefined();
191+
});
176192
});
177193

178194
describe('via input', () => {
@@ -209,6 +225,9 @@ describe('Directive: UiDragAndDropFileDirective', () => {
209225
});
210226

211227
it('should filter different file types', () => {
228+
component.multiple = true;
229+
fixture.detectChanges();
230+
212231
targetElement.files.add(
213232
fakeFile(component.fileType),
214233
fakeFile(component.fileType),

projects/angular/directives/ui-drag-and-drop-file/src/ui-drag-and-drop-file.directive.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,10 @@ export class UiDragAndDropFileDirective implements AfterViewInit, OnDestroy {
167167
@HostListener('dragover', ['$event'])
168168
protected _onDragOver(ev: DragEvent) {
169169
this._preventAll(ev);
170-
if (this.disabled) { return; }
170+
if (
171+
this.disabled ||
172+
ev.dataTransfer && ev.dataTransfer.items.length > 1 && !this.multiple
173+
) { return; }
171174
this._isDragging = true;
172175
}
173176

@@ -217,7 +220,10 @@ export class UiDragAndDropFileDirective implements AfterViewInit, OnDestroy {
217220
file.name.endsWith(this.fileType),
218221
);
219222

220-
if (!emittedFiles.length) { return; }
223+
if (
224+
!emittedFiles.length ||
225+
emittedFiles.length > 1 && !this.multiple
226+
) { return; }
221227

222228
this.fileChange.emit(emittedFiles);
223229
}

0 commit comments

Comments
 (0)