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

Commit 925f793

Browse files
committed
Load already uploaded photos onto edit product screen and make editable
1 parent 3cc47f0 commit 925f793

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

frontend/src/components/pages/adminDashboard/products/EditProductComponent.jsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { getAdminCategories, } from "../../../../redux/actions/adminCategoriesAc
99
import { getAdminManufacturers, } from "../../../../redux/actions/adminManufacturersActions"
1010
// import { newProduct, } from "../../../../redux/actions/createAdminProductActions"
1111
import { getAdminProductEdit, } from "../../../../redux/actions/adminProductEditActions"
12+
import RenderUploadedImages from "./RenderUploadedImages"
1213

1314
import "./EditProductComponent.scss"
1415

@@ -31,7 +32,7 @@ export default function EditProductComponent() {
3132
adminManufacturers: state.adminManufacturers,
3233
adminProductEdit: state.adminProductEdit,
3334
}))
34-
// At least one image is required.
35+
const [uploadedPhotos, setUploadedPhotos] = useState([])
3536
const [image, setImage] = useState(defaultImageState)
3637
const [image1, setImage1] = useState(defaultImageState)
3738
const [image2, setImage2] = useState(defaultImageState)
@@ -72,7 +73,6 @@ export default function EditProductComponent() {
7273
if (
7374
null !== state.adminProductEdit.data
7475
) {
75-
// TODO: set loaded product data into state.
7676
setName(state.adminProductEdit.data.name)
7777
setUnits(state.adminProductEdit.data.units)
7878
setWeight(state.adminProductEdit.data.weight)
@@ -81,6 +81,7 @@ export default function EditProductComponent() {
8181
setCategory(state.adminProductEdit.data.category.id)
8282
setManufacturer(state.adminProductEdit.data.manufacturer.id)
8383
setIsLive(state.adminProductEdit.data.isLive ? "1" : "0")
84+
setUploadedPhotos(state.adminProductEdit.data.photos)
8485
}
8586
if (
8687
null !== state.adminProductEdit.error
@@ -181,6 +182,20 @@ export default function EditProductComponent() {
181182
}
182183
}
183184

185+
const resetUploadedPhoto = id => {
186+
const newUploadedPhotos = uploadedPhotos
187+
for (const key in newUploadedPhotos) {
188+
if (id === newUploadedPhotos[key].id) {
189+
if (!newUploadedPhotos[key].reset) {
190+
newUploadedPhotos[key].reset = true
191+
} else {
192+
newUploadedPhotos[key].reset = false
193+
}
194+
}
195+
}
196+
setUploadedPhotos(newUploadedPhotos)
197+
}
198+
184199
const handleNameChange = e => {
185200
setName(e.target.value)
186201
}
@@ -339,6 +354,10 @@ export default function EditProductComponent() {
339354
<div className="col-xl-6 col-lg-6">
340355
<div className="card shadow mb-4">
341356
<div className="card-body">
357+
<RenderUploadedImages
358+
photos={uploadedPhotos}
359+
resetUploadedPhoto={resetUploadedPhoto}
360+
/>
342361
<div className="form-group">
343362
<input
344363
type="file"
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from "react"
2+
import { FaWindowClose, } from "react-icons/fa"
3+
4+
import "./RenderUploadedImages.scss"
5+
6+
export default function RenderUploadedImages({ photos, resetUploadedPhoto, }) {
7+
return <div className="row render-uploaded-images-container">
8+
{photos.map((photo, index) => (
9+
<div key={index} className="col-md-4">
10+
<div className="card">
11+
<div className="card-body">
12+
<img
13+
className={`img-fluid product-image ${photo.reset ? "reset-photo" : null}`}
14+
src={photo.path}
15+
alt={photo.name}
16+
/>
17+
<FaWindowClose
18+
className="reset-uploaded-file-input-icon"
19+
onClick={() => resetUploadedPhoto(photo.id)}
20+
/>
21+
</div>
22+
</div>
23+
</div>
24+
))}
25+
</div>
26+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
.render-uploaded-images-container {
2+
.product-image {
3+
min-height: 50px;
4+
min-width: 100px;
5+
}
6+
7+
.reset-uploaded-file-input-icon {
8+
float: right;
9+
height: 30px;
10+
width: 30px;
11+
cursor: pointer;
12+
}
13+
14+
.reset-photo {
15+
display: none;
16+
}
17+
}

0 commit comments

Comments
 (0)