2024-02-14 23:48:46 -05:00
|
|
|
import * as React from 'react';
|
|
|
|
import { useEffect, useState } from "react";
|
2024-03-02 00:51:43 -05:00
|
|
|
import { Grid, ImageList, Box, Tooltip, CircularProgress, Slider, IconButton } from '@mui/material';
|
2024-02-27 21:37:43 -05:00
|
|
|
import { FileUpload } from '@mui/icons-material';
|
2024-03-02 00:51:43 -05:00
|
|
|
import EditableArtistPortfolioImage from './editablePortfolioImage';
|
|
|
|
|
2024-02-14 23:48:46 -05:00
|
|
|
const EditableArtistPortfolio = ({ artistId }) => {
|
|
|
|
const [portfolioData, setPortfolioData] = useState([]);
|
2024-02-18 06:59:55 -05:00
|
|
|
const [columns, setColumns] = useState(2);
|
2024-02-14 23:48:46 -05:00
|
|
|
const [loading, setLoading] = useState(true); // State for loading indicator
|
|
|
|
useEffect(() => {
|
|
|
|
getData();
|
|
|
|
}, []);
|
|
|
|
|
2024-02-18 06:59:55 -05:00
|
|
|
const handleColumns = (event, value)=>{
|
|
|
|
setColumns(value);
|
|
|
|
}
|
|
|
|
|
2024-02-14 23:48:46 -05:00
|
|
|
const getData = async () => {
|
|
|
|
const response = await fetch('/api/discovery/artist/' + artistId + '/portfolio');
|
|
|
|
const data = await response.json();
|
|
|
|
setPortfolioData(data);
|
|
|
|
setLoading(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
function handlePortfolioUploadImageChange(event) {
|
|
|
|
const file = event.target.files[0];
|
|
|
|
const formData = new FormData();
|
2024-02-15 02:16:38 -05:00
|
|
|
formData.append('newImage', file);
|
2024-02-14 23:48:46 -05:00
|
|
|
|
|
|
|
fetch('/api/artist/portfolio', {
|
|
|
|
method: 'POST',
|
|
|
|
body: formData // Don't set Content-Type, FormData will handle it
|
|
|
|
})
|
|
|
|
.then(response => response.json())
|
|
|
|
.then(data => {
|
|
|
|
getData();
|
|
|
|
})
|
|
|
|
.catch(error => {
|
|
|
|
console.error('Error uploading file:', error);
|
|
|
|
// Handle error appropriately
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
(loading) ? (
|
|
|
|
<Box sx={{ textAlign: "center", paddingTop: 20 }}>
|
|
|
|
<CircularProgress sx={{ paddingTop: 5 }} />
|
|
|
|
</Box>
|
|
|
|
) :
|
|
|
|
(
|
2024-02-15 02:16:38 -05:00
|
|
|
|
2024-02-15 21:49:12 -05:00
|
|
|
<Grid container spacing={2} sm={12}>
|
2024-02-27 21:37:43 -05:00
|
|
|
<Grid item xs={12} sm={1} sx={{ textAlign: "center" }}>
|
2024-02-18 06:59:55 -05:00
|
|
|
<input
|
|
|
|
id="portfolioUploadInput"
|
|
|
|
style={{ display: 'none' }}
|
|
|
|
accept="image/*"
|
|
|
|
type="file"
|
|
|
|
onChange={handlePortfolioUploadImageChange}
|
|
|
|
/>
|
|
|
|
<label htmlFor="portfolioUploadInput">
|
2024-02-27 21:37:43 -05:00
|
|
|
<Tooltip arrow title="Upload Image To Portfolio">
|
|
|
|
<IconButton color="primary" component="span">
|
2024-03-02 00:51:43 -05:00
|
|
|
<FileUpload sx={{fontSize:"2rem"}}/>
|
2024-02-27 21:37:43 -05:00
|
|
|
</IconButton>
|
|
|
|
</Tooltip>
|
2024-02-18 06:59:55 -05:00
|
|
|
</label>
|
|
|
|
</Grid>
|
2024-02-27 21:37:43 -05:00
|
|
|
<Grid item xs={12} sm={11} sx={{ textAlign: "center" }}>
|
|
|
|
<Tooltip arrow title="Amount of columns">
|
2024-02-18 06:59:55 -05:00
|
|
|
<Slider
|
|
|
|
defaultValue={columns}
|
|
|
|
aria-labelledby="discrete-slider"
|
|
|
|
valueLabelDisplay="auto"
|
|
|
|
onChange={handleColumns}
|
|
|
|
step={1}
|
|
|
|
marks
|
|
|
|
min={1}
|
|
|
|
max={5}/>
|
2024-02-27 21:37:43 -05:00
|
|
|
</Tooltip>
|
|
|
|
|
2024-02-18 06:59:55 -05:00
|
|
|
</Grid>
|
|
|
|
<Grid item xs={12} sm={12} sx={{maxHeight:"45rem",overflowY:"scroll"}}>
|
|
|
|
<ImageList variant='masonry' cols={columns} sx={{ width:"100%" }}>
|
2024-02-15 21:49:12 -05:00
|
|
|
{portfolioData.map((item) => (
|
|
|
|
<EditableArtistPortfolioImage artistId={artistId} itemId={item.id} reload={getData}/>
|
|
|
|
))}
|
|
|
|
</ImageList>
|
|
|
|
</Grid>
|
2024-02-14 23:48:46 -05:00
|
|
|
</Grid>
|
2024-02-15 21:49:12 -05:00
|
|
|
|
2024-02-14 23:48:46 -05:00
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
export default EditableArtistPortfolio
|