From 14cf8a7eac5a18d9851b951ab3836c006ece296e Mon Sep 17 00:00:00 2001 From: Alexis Feron Date: Wed, 8 Jan 2025 09:41:18 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20drag=20&=20drop=20functionali?= =?UTF-8?q?ty=20and=20fix=20suggestions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../add-pin-popup.component.html | 86 +++++++------------ .../add-pin-popup/add-pin-popup.component.ts | 62 +++++++++---- .../drag-drop/drag-drop.component.html | 72 ++++++++++++++++ .../drag-drop/drag-drop.component.spec.ts | 23 +++++ .../drag-drop/drag-drop.component.ts | 45 ++++++++++ 5 files changed, 216 insertions(+), 72 deletions(-) create mode 100644 src/app/components/drag-drop/drag-drop.component.html create mode 100644 src/app/components/drag-drop/drag-drop.component.spec.ts create mode 100644 src/app/components/drag-drop/drag-drop.component.ts diff --git a/src/app/components/add-pin-popup/add-pin-popup.component.html b/src/app/components/add-pin-popup/add-pin-popup.component.html index 6b615bc..654f293 100644 --- a/src/app/components/add-pin-popup/add-pin-popup.component.html +++ b/src/app/components/add-pin-popup/add-pin-popup.component.html @@ -15,7 +15,7 @@ aria-hidden="true" class="hidden absolute top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full" > -
+
@@ -50,7 +50,7 @@
-
+
-
- -
-
- - -
-
+
+ +
+
+ + +
+ +
+ +
+ + +
diff --git a/src/app/components/drag-drop/drag-drop.component.spec.ts b/src/app/components/drag-drop/drag-drop.component.spec.ts new file mode 100644 index 0000000..17747dc --- /dev/null +++ b/src/app/components/drag-drop/drag-drop.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DragDropComponent } from './drag-drop.component'; + +describe('DragDropComponent', () => { + let component: DragDropComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DragDropComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DragDropComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/drag-drop/drag-drop.component.ts b/src/app/components/drag-drop/drag-drop.component.ts new file mode 100644 index 0000000..72718bb --- /dev/null +++ b/src/app/components/drag-drop/drag-drop.component.ts @@ -0,0 +1,45 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-drag-drop', + imports: [CommonModule], + templateUrl: './drag-drop.component.html', +}) +export class DragDropComponent { + fileNames: string[] = []; + + onFilesSelected(event: Event): void { + const input = event.target as HTMLInputElement; + if (input.files) { + this.updateFileNames(input.files); + } + } + + onDrop(event: DragEvent): void { + event.preventDefault(); + event.stopPropagation(); + if (event.dataTransfer && event.dataTransfer.files) { + this.updateFileNames(event.dataTransfer.files); + } + } + + onDragOver(event: DragEvent): void { + event.preventDefault(); + } + + onDragLeave(event: DragEvent): void { + event.preventDefault(); + } + + private updateFileNames(files: FileList): void { + for (let i = 0; i < files.length; i++) { + this.fileNames.push(files[i].name); + } + } + + removeFile(fileName: string): void { + const index = this.fileNames.indexOf(fileName); + this.fileNames.splice(index, 1); + } +}