From 01146661c79eb574d4b9f53021f8be7b8d44f63f Mon Sep 17 00:00:00 2001 From: Derek Holloway Date: Sat, 28 Jun 2025 10:09:20 -0700 Subject: [PATCH] Add image functionalitly to frontend --- .../src/app/models/Product.ts | 8 ++++- .../store/admin/newitem/new.component.html | 11 ++++-- .../store/admin/newitem/new.component.ts | 35 ++++++++++++++++--- .../Services/DatabaseService/ProductImage.cs | 4 +-- 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/MistoxWebsite.Client/src/app/models/Product.ts b/src/MistoxWebsite.Client/src/app/models/Product.ts index 92fb7bf..436a3fc 100644 --- a/src/MistoxWebsite.Client/src/app/models/Product.ts +++ b/src/MistoxWebsite.Client/src/app/models/Product.ts @@ -3,7 +3,13 @@ export class Product { public name: string = ""; public description: string = ""; public curShowingIMG: number = 0; - public images: File[] = []; + public images: ProductImage[] = []; public cost: number = 0; public url: string = ""; +} + +export class ProductImage { + imageID: number = 0; + productID: number = 0; + image: File | null = null; } \ No newline at end of file diff --git a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.html b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.html index e299d31..c3b9abe 100644 --- a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.html +++ b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.html @@ -24,7 +24,7 @@
- +
@@ -36,4 +36,11 @@ - \ No newline at end of file + + + +
+
+ Image Preview +
+
\ No newline at end of file diff --git a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts index c2e4051..e85ce42 100644 --- a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts +++ b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts @@ -5,7 +5,7 @@ import { Router, ActivatedRoute } from '@angular/router'; import { Title } from '@angular/platform-browser'; import { CommonModule } from '@angular/common'; import { Authentication } from '../../../../services/Authentication'; -import { Product } from 'app/models/Product'; +import { Product, ProductImage } from 'app/models/Product'; @Component({ selector: 'item-new', @@ -15,8 +15,9 @@ import { Product } from 'app/models/Product'; }) export class NewItemComponent { - newItem: Product = new Product(); + readonly maxFileMB = 16; + newItem: Product = new Product(); errorMsgs: string[] = []; constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) { @@ -28,15 +29,39 @@ export class NewItemComponent { } selectedFiles: File[] = []; - onFileSelected(event: any){ - this.selectedFiles = event.target.files; + imagePreviews: string[] = []; + onFileSelected(event: Event){ + const fileInput = event.target as HTMLInputElement; + this.imagePreviews = []; + + if (!fileInput.files?.length){ + return; + } + + for (let i=0; i this.maxFileMB * 1024 * 1024){ + this.errorMsgs.push("File exceeds max file size of 16MB"); + continue; + } + // No issues add file to the list + this.selectedFiles.push( file ); + + const reader = new FileReader(); + reader.onload= () => { + this.imagePreviews.push(reader.result as string); + } + reader.readAsDataURL(file); + } } onSubmit(){ // Add uploaded files to dto if (this.selectedFiles.length > 0){ for(let i=0; i