Skip to content

Commit

Permalink
Merge pull request #153 from Team-Lecue/feature/TargetPage
Browse files Browse the repository at this point in the history
[ TargetPage ] dev 머지 PR입니다!!
  • Loading branch information
jungwoo3490 authored Jan 17, 2024
2 parents 7624b1f + 4f785de commit 594491c
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 46 deletions.
44 changes: 7 additions & 37 deletions src/Target/components/FavoriteImageInput/index.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
import { useEffect, useRef, useState } from 'react';
import { useRef, useState } from 'react';

import { IcCamera, ImgBook } from '../../../assets';
import { getPresignedUrl, uploadFile } from '../../util/api';
import * as S from './FavoriteImageInput.style';

interface FavoriteImageInputProps {
imgFile: string;
uploadImage: (file: string) => void;
changePresignedFileName: (fileName: string) => void;
imgFile: File | null;
changeFileData: (file: File) => void;
}

function FavoriteImageInput({
imgFile,
uploadImage,
changePresignedFileName,
}: FavoriteImageInputProps) {
function FavoriteImageInput({ changeFileData }: FavoriteImageInputProps) {
const imgRef = useRef<HTMLInputElement | null>(null);
const [presignedData, setPresignedData] = useState({
url: '',
fileName: '',
});

useEffect(() => {
const fetchPresignedData = async () => {
const { url, fileName } = await getPresignedUrl('/api/images/book');
setPresignedData({ url, fileName });
changePresignedFileName(fileName);
};

fetchPresignedData();
}, []);
const [imgFile, setImgFile] = useState('');

const handleImageUpload = async (): Promise<void> => {
const fileInput = imgRef.current;
Expand All @@ -41,19 +22,8 @@ function FavoriteImageInput({
base64Reader.readAsDataURL(file);
base64Reader.onloadend = () => {
if (base64Reader.result !== null) {
uploadImage(base64Reader.result as string);
}
};

const binaryReader = new FileReader();
binaryReader.readAsArrayBuffer(file);
binaryReader.onloadend = async () => {
if (binaryReader.result !== null) {
await uploadFile(
presignedData.url,
binaryReader.result as ArrayBuffer,
file.type,
);
changeFileData(file);
setImgFile(base64Reader.result as string);
}
};
}
Expand Down
44 changes: 35 additions & 9 deletions src/Target/page/TargetPage/index.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,48 @@
import { useState } from 'react';
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';

import Header from '../../../components/common/Header';
import CompleteButton from '../../components/CompleteButton';
import FavoriteImageInput from '../../components/FavoriteImageInput';
import NameInput from '../../components/NameInput';
import { getPresignedUrl, uploadFile } from '../../util/api';
import * as S from './TargetPage.style';

function TargetPage() {
const [imgFile, setImgFile] = useState('');
const [presignedFileName, setPresignedFileName] = useState('');
const [name, setName] = useState('');
const [fileData, setFileData] = useState<File | null>(null); // Add this line
const [presignedData, setPresignedData] = useState({
url: '',
fileName: '',
});
const navigate = useNavigate();

const handleClickCompleteButton = () => {
useEffect(() => {
const fetchPresignedData = async () => {
const { url, fileName } = await getPresignedUrl('/api/images/book');
setPresignedData({ url, fileName });
setPresignedFileName(fileName);
};

fetchPresignedData();
}, []);

const handleClickCompleteButton = async () => {
if (fileData) {
const reader = new FileReader();
reader.readAsArrayBuffer(fileData);
reader.onloadend = async () => {
if (reader.result !== null) {
await uploadFile(
presignedData.url,
reader.result as ArrayBuffer,
fileData.type,
);
}
};
}

navigate('/select-book', {
state: { presignedFileName: presignedFileName, name: name },
});
Expand All @@ -31,16 +60,13 @@ function TargetPage() {
<S.FavoriteInputWrapper>
<S.SectionTitle>최애의 사진 업로드</S.SectionTitle>
<FavoriteImageInput
imgFile={imgFile}
uploadImage={(file) => setImgFile(file)}
changePresignedFileName={(filename) =>
setPresignedFileName(filename)
}
imgFile={fileData}
changeFileData={(file) => setFileData(file)}
/>
</S.FavoriteInputWrapper>
</S.InputSectionWrapper>
<CompleteButton
isActive={imgFile !== '' && name.length !== 0}
isActive={fileData !== null && name.length !== 0}
onClick={handleClickCompleteButton}
/>
</S.TargetPageBodyWrapper>
Expand Down

0 comments on commit 594491c

Please sign in to comment.