diff --git a/src/page/UploadPage.jsx b/src/page/UploadPage.jsx
index fdf6daa..be88cee 100644
--- a/src/page/UploadPage.jsx
+++ b/src/page/UploadPage.jsx
@@ -1,27 +1,29 @@
import React, { useState, useEffect } from 'react';
-
import axios from 'axios';
import {
Button,
CssBaseline,
TextField,
FormControl,
- FormControlLabel,
- Checkbox,
- FormHelperText,
+ createTheme,
+ ThemeProvider,
Grid,
Box,
+ Checkbox,
+ FormControlLabel,
+ FormHelperText,
Typography,
Container,
Select,
MenuItem,
} from '@mui/material/';
-import { createTheme, ThemeProvider } from '@mui/material/styles';
-import styled from 'styled-components';
-import { useDropzone } from 'react-dropzone';
-// import * as contractApi from '../services/contract';
import { useNavigate } from 'react-router-dom';
-
+import { useDropzone } from 'react-dropzone';
+import styled from 'styled-components';
+import { ListItemButton, Drawer, List, Divider, ListItem, ListItemText } from '@mui/material';
+const Boxs = styled(Box)`
+ padding-bottom: 40px !important;
+`;
const thumbsContainer = {
display: 'flex',
flexDirection: 'row',
@@ -58,7 +60,6 @@ const img = {
width: 220,
height: 220,
};
-
const FormHelperTexts = styled(FormHelperText)`
width: 100%;
padding-left: 16px;
@@ -66,11 +67,14 @@ const FormHelperTexts = styled(FormHelperText)`
color: #d32f2f !important;
`;
-const Boxs = styled(Box)`
- padding-bottom: 40px !important;
-`;
+function UploadPage() {
+ function CheckSession() {
+ if (localStorage.getItem('jwtToken') == null) {
+ window.location = 'http://localhost:3000';
+ }
+ }
+ setInterval(CheckSession(), 100);
-function RegisterPage() {
const theme = createTheme({
palette: {
primary: {
@@ -84,22 +88,162 @@ function RegisterPage() {
},
},
});
- const [genre, setGenre] = useState('R&B');
+ const navigate = useNavigate();
+ const [state, setState] = React.useState({
+ bottom: false,
+ });
+ const [data, setData] = useState([]);
+ const [holder, setholder] = useState([]);
+ const [rate, setRate] = useState([]);
+ const [image, setImage] = useState('');
const [checked, setChecked] = useState(false);
- const [registerError, setRegisterError] = useState('');
- const token = localStorage.getItem('token');
- // let userId = localStorage.getItem('userId');
- // let sellerContractAddress;
+ const [file, setFile] = useState([]);
+ const [genre, setGenre] = useState('R&B');
+ const token = localStorage.getItem('jwtToken');
+ const [search, setSearch] = useState('');
+ const ariaLabel = { 'aria-label': 'search' };
+ const anchor = 'bottom';
+ const [musicError, setMusicError] = useState(false);
+ const [rateError, setRateError] = useState(false);
+ const [UploadError, setUploadError] = useState('');
+
+ const handleImage = (event) => {
+ setImage(event.target.value);
+ };
+
+ const handleAgree = (event) => {
+ setChecked(event.target.checked);
+ };
+
+ const handleChange = (event) => {
+ setGenre(event.target.value);
+ };
+
+ const handleFile = (event) => {
+ setFile(event.target.value);
+ };
+
+ const handleOnKeyPress = (e) => {
+ if (e.key == ' ') {
+ handleRate(e);
+ }
+ };
+ const handleRate = (e) => {
+ setRate((rate) => {
+ return [...rate, e.target.value];
+ });
+ };
+
+ function clickSubmit() {
+ if (confirm('한번 업로드 하면 수정이 불가능합니다. 업로드 하시겠습니까?')) {
+ //form submit
+ } else {
+ return;
+ }
+ }
+
+ const toggleDrawer = (anchor, open) => (event) => {
+ handleOnClick();
+
+ if (event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {
+ return;
+ }
+ setState({ ...state, [anchor]: open });
+ };
+
+ const holderlist = (item) => {
+ setholder((holder) => {
+ console.log(holder);
+ return [...holder, item];
+ });
+ };
+
+ const list = (anchor) => (
+
+
+ {data.map((item) => (
+
+ holderlist(item.id)}>
+
+
+
+ ))}
+
+
+
+ );
+
+ const onChangeSearch = (e) => {
+ setSearch(e.target.value);
+ toggleDrawer(anchor, true);
+ };
+
+ const handleOnClick = async () => {
+ // console.log(token);
+
+ await axios
+ .get(`http://${process.env.REACT_APP_BACKEND_URL}/api/v1/user?search=${search}`, {
+ headers: {
+ authorization: token,
+ },
+ })
+ .then((res) => {
+ setData(res.data.data);
+ console.log('데이터: ', data);
+ console.log('찾는 사람: ', search);
+ console.log('배열: ', holder);
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+ };
+ //앨범 커버 드래그앤드롭
+ const [images, setImages] = useState([]);
+ const { getRootProps, getInputProps } = useDropzone({
+ accept: 'image/*',
+ onDrop: (acceptedImages) => {
+ setImages(
+ acceptedImages.map((image) =>
+ Object.assign(image, {
+ preview: URL.createObjectURL(image),
+ }),
+ ),
+ );
+ handleImage(image);
+ },
+ });
+
+ const thumbs = images.map((image) => (
+
+
+

+
+
+ ));
+
+ useEffect(
+ () => () => {
+ // Make sure to revoke the Object URL to avoid memory leaks
+ images.forEach((image) => URL.revokeObjectURL(image.preview));
+ },
+ [images],
+ );
const onhandlePost = async (data) => {
- const { title, album, lylics, file, image } = data;
- const postData = { title, album, lylics, genre, file, image };
+ const { title, album, image, lylics, file, holder, rate } = data;
+ const postData = { title, album, lylics, image, genre, file, holder, rate };
// post
await axios
- .post(`http://${process.env.REACT_APP_BACKEND_URL}/api/v1/upload`, {
+ .post(`http://${process.env.REACT_APP_BACKEND_URL}/api/v1/upload`, postData, {
headers: {
- authorization: `${token}`,
+ authorization: token,
},
data: postData,
})
@@ -110,34 +254,59 @@ function RegisterPage() {
})
.catch(function (err) {
console.log(err);
- setRegisterError('업로드에 실패하였습니다. 다시한번 확인해 주세요.');
+ setUploadError('업로드에 실패하였습니다. 다시한번 확인해 주세요.');
});
};
- const handleChange = (event) => {
- setGenre(event.target.value);
- };
-
- const handleAgree = (event) => {
- setChecked(event.target.checked);
- };
-
const handleSubmit = (e) => {
e.preventDefault();
const data = new FormData(e.currentTarget);
console.log(data);
const genreType = genre;
+
const joinData = {
title: data.get('title'),
album: data.get('album'),
name: data.get('name'),
lylics: data.get('lylics'),
- file: data.get('file'),
- image: data.get('image'),
+ file: file,
+ image: image,
genre: genreType,
+ holder: holder,
+ rate: rate,
};
+ //중복곡 체크
+ const musicCheck = document.getElementById('file').value;
+ if (!musicCheck) {
+ setMusicError('파일을 업로드 해주세요');
+ } else {
+ axios({
+ method: 'post',
+ url: `http://${process.env.REACT_APP_BACKEND_URL}/api/v1/upload/check`,
+ data: {
+ music: e.target.value,
+ },
+ })
+ .then((res) => {
+ if (res.data !== null) {
+ setMusicError('');
+ } else {
+ setMusicError('이미 존재하는 음악입니다.');
+ }
+ })
+ .catch((err) => {
+ console.error(err);
+ });
+ }
+ // 저작권 비율 체크
+ const sum = rate.reduce((accumultor, currentNumber) => accumultor * 1 + currentNumber * 1);
+ console.log(rate);
+ console.log(sum);
+ if (sum != 1) setRateError('저작권 총합이 1이하가 되도록 설정해주세요!');
+ else setRateError('');
+
// 회원가입 동의 체크
if (!checked) alert('올바른 양식과 함께 업로드 약관에 동의해주세요.');
if (checked) {
@@ -145,61 +314,6 @@ function RegisterPage() {
}
};
- //엘범 커버 드래그앤드롭
- const [files, setFiles] = useState([]);
- const { getRootProps, getInputProps } = useDropzone({
- accept: 'image/*',
- onDrop: (acceptedFiles) => {
- setFiles(
- acceptedFiles.map((file) =>
- Object.assign(file, {
- preview: URL.createObjectURL(file),
- }),
- ),
- );
- },
- });
-
- const thumbs = files.map((file) => (
-
-
-

-
-
- ));
-
- useEffect(
- () => () => {
- // Make sure to revoke the Object URL to avoid memory leaks
- files.forEach((file) => URL.revokeObjectURL(file.preview));
- },
- [files],
- );
-
- //작곡가, 가수 추가 부분
- const [countComposerList, setCountComposerList] = useState([0]);
-
- const onAddComposerDiv = () => {
- let countArr = [...countComposerList];
- let counter = countArr.slice(-1)[0];
- counter += 1;
- countArr.push(counter); // index 사용 X
- // countArr[counter] = counter // index 사용 시 윗줄 대신 사용
- setCountComposerList(countArr);
- };
-
- const [countSingerList, setCountSingerList] = useState([0]);
-
- const onAddSingerDiv = () => {
- let countArr = [...countSingerList];
- let counter = countArr.slice(-1)[0];
- counter += 1;
- countArr.push(counter); // index 사용 X
- // countArr[counter] = counter // index 사용 시 윗줄 대신 사용
- setCountSingerList(countArr);
- };
- const navigate = useNavigate();
-
return (
@@ -228,13 +342,25 @@ function RegisterPage() {
>
음원 업로드
-
+
-
+
+
+
+
+
@@ -243,9 +369,9 @@ function RegisterPage() {
sx={{ backgroundColor: 'white', borderRadius: '0.3em' }}
labelId="genre"
id="genre-select"
- value={genre}
required
label="genre"
+ value={genre}
onChange={handleChange}
>
@@ -286,36 +412,114 @@ function RegisterPage() {
+ {musicError}
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {list(anchor)}
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {list(anchor)}
+
+
+
+
+
+
+
+
+
+
+ {list(anchor)}
+
+
+
+
+ {rateError}
+
- {registerError}
+ {UploadError}
@@ -363,99 +568,4 @@ function RegisterPage() {
);
}
-export default RegisterPage;
-
-//참여자 추가
-const DetailDiv = styled.div`
- div {
- margin-bottom: 3px;
- display: flex;
- }
-`;
-
-const CreateListDiv = styled.div`
- width: 100%;
- display: flex;
- align-items: center;
- flex-direction: column;
-`;
-
-const ComposerList = (props) => {
- return (
-
- {props.countComposerList &&
- props.countComposerList.map((item, i) => (
-
- ))}
-
- );
-};
-
-const SingerList = (props) => {
- return (
-
- {props.countSingerList &&
- props.countSingerList.map((item, i) => (
-
- ))}
-
- );
-};
+export default UploadPage;