이정민

이미지 수정 플로우 변경

...@@ -5,9 +5,9 @@ import styled from "styled-components"; ...@@ -5,9 +5,9 @@ import styled from "styled-components";
5 const ToastEditor = dynamic(() => import("components/ToastEditor"), { 5 const ToastEditor = dynamic(() => import("components/ToastEditor"), {
6 ssr: false, 6 ssr: false,
7 }); 7 });
8 -const Image = () => { 8 +const Image = ({ previewURL, setPreviewURL }) => {
9 const [file, setFile] = useState(undefined); 9 const [file, setFile] = useState(undefined);
10 - const [previewURL, setPreviewURL] = useState<string | ArrayBuffer>(""); 10 + console.log('previewURL',previewURL)
11 11
12 // const uploadImage = (file) => { 12 // const uploadImage = (file) => {
13 // if (!file) { 13 // if (!file) {
...@@ -15,32 +15,32 @@ const Image = () => { ...@@ -15,32 +15,32 @@ const Image = () => {
15 // } 15 // }
16 // }; 16 // };
17 17
18 - const selectImg = (e) => { 18 + // const selectImg = (e) => {
19 - const reader = new FileReader(); 19 + // const reader = new FileReader();
20 - const targetFile = e.target.files[0]; 20 + // const targetFile = e.target.files[0];
21 - setFile(targetFile); 21 + // setFile(targetFile);
22 - // uploadImage(targetFile); 22 + // // uploadImage(targetFile);
23 23
24 - reader.onloadend = () => { 24 + // reader.onloadend = () => {
25 - setPreviewURL(reader.result); 25 + // setPreviewURL(reader.result);
26 - }; 26 + // };
27 27
28 - reader.readAsDataURL(targetFile); 28 + // reader.readAsDataURL(targetFile);
29 - }; 29 + // };
30 30
31 - const [isEditorOpened, setIsEditorOpened] = useState(false); 31 + // const [isEditorOpened, setIsEditorOpened] = useState(false);
32 - const handleEditor = () => { 32 + // const handleEditor = () => {
33 - setIsEditorOpened(true); 33 + // setIsEditorOpened(true);
34 - }; 34 + // };
35 35
36 return ( 36 return (
37 <> 37 <>
38 <Container> 38 <Container>
39 <ImgBox> 39 <ImgBox>
40 - <div onClick={handleEditor}>asdf</div> 40 + {/* <div onClick={handleEditor}>asdf</div> */}
41 - {file === undefined ? ( 41 + {/* {file === undefined ? ( */}
42 <> 42 <>
43 - <div className="sub-flex"> 43 + {/* <div className="sub-flex">
44 <BlankBox /> 44 <BlankBox />
45 <div>Click to add a photo</div> 45 <div>Click to add a photo</div>
46 <input 46 <input
...@@ -59,9 +59,9 @@ const Image = () => { ...@@ -59,9 +59,9 @@ const Image = () => {
59 onChange={selectImg} 59 onChange={selectImg}
60 /> 60 />
61 </div> 61 </div>
62 - <div className="sub-flex">Open Image Editor</div> 62 + <div className="sub-flex">Open Image Editor</div> */}
63 </> 63 </>
64 - ) : ( 64 + {/* ) : ( */}
65 <img 65 <img
66 id="image" 66 id="image"
67 alt={""} 67 alt={""}
...@@ -69,15 +69,15 @@ const Image = () => { ...@@ -69,15 +69,15 @@ const Image = () => {
69 objectFit: "cover", 69 objectFit: "cover",
70 display: "flex", 70 display: "flex",
71 margin: "0 auto", 71 margin: "0 auto",
72 - width: "30rem", 72 + width: "50rem",
73 }} 73 }}
74 src={previewURL as string} 74 src={previewURL as string}
75 /> 75 />
76 - )} 76 + {/* )} */}
77 </ImgBox> 77 </ImgBox>
78 {/* <Menu /> */} 78 {/* <Menu /> */}
79 </Container> 79 </Container>
80 - {isEditorOpened && <ToastEditor {...{ setPreviewURL }} />} 80 + {/* {isEditorOpened && <ToastEditor {...{ setPreviewURL, setIsImgAdded }} />} */}
81 </> 81 </>
82 ); 82 );
83 }; 83 };
......
...@@ -3,28 +3,28 @@ import ImageEditor from "@toast-ui/react-image-editor"; ...@@ -3,28 +3,28 @@ import ImageEditor from "@toast-ui/react-image-editor";
3 import { useEffect, useState } from "react"; 3 import { useEffect, useState } from "react";
4 import "tui-image-editor/dist/tui-image-editor.css"; 4 import "tui-image-editor/dist/tui-image-editor.css";
5 5
6 -const ToastEditor = ({ setPreviewURL }) => { 6 +const ToastEditor = ({ setPreviewURL, setIsImgAdded }) => {
7 - const [lowerCanvas, setLowerCanvas] = useState<HTMLCanvasElement>(); 7 + // const [lowerCanvas, setLowerCanvas] = useState<HTMLCanvasElement>();
8 - const [upperCanvas, setUpperCanvas] = useState<HTMLCanvasElement>(); 8 + // const [upperCanvas, setUpperCanvas] = useState<HTMLCanvasElement>();
9 - // console.log( 9 + // // console.log(
10 - // document.getElementsByClassName("lower-canvas")[0]?.toDataURL("image/png") 10 + // // document.getElementsByClassName("lower-canvas")[0]?.toDataURL("image/png")
11 - // ); 11 + // // );
12 - console.log("s"); 12 + // console.log("s");
13 13
14 - // const [upperCanvas, setUpperCanvas] = useState( 14 + // // const [upperCanvas, setUpperCanvas] = useState(
15 - // document.getElementsByClassName("upper-canvas ")[0] 15 + // // document.getElementsByClassName("upper-canvas ")[0]
16 - // ); 16 + // // );
17 17
18 - useEffect(() => { 18 + // useEffect(() => {
19 - window?.addEventListener("click", () => { 19 + // window?.addEventListener("click", () => {
20 - setLowerCanvas( 20 + // setLowerCanvas(
21 - document.getElementsByClassName("lower-canvas")[0] as HTMLCanvasElement 21 + // document.getElementsByClassName("lower-canvas")[0] as HTMLCanvasElement
22 - ); 22 + // );
23 - setUpperCanvas( 23 + // setUpperCanvas(
24 - document.getElementsByClassName("upper-canvas")[0] as HTMLCanvasElement 24 + // document.getElementsByClassName("upper-canvas")[0] as HTMLCanvasElement
25 - ); 25 + // );
26 - }); 26 + // });
27 - }, []); 27 + // }, []);
28 28
29 // useEffect(() => { 29 // useEffect(() => {
30 // const img = lowerCanvas?.toDataURL("image/png"); 30 // const img = lowerCanvas?.toDataURL("image/png");
...@@ -54,7 +54,10 @@ const ToastEditor = ({ setPreviewURL }) => { ...@@ -54,7 +54,10 @@ const ToastEditor = ({ setPreviewURL }) => {
54 // }, [lowerCanvas?.toDataURL("image/png")]); 54 // }, [lowerCanvas?.toDataURL("image/png")]);
55 55
56 const handleEnd = () => { 56 const handleEnd = () => {
57 + const lowerCanvas = document.getElementsByClassName("lower-canvas")[0] as HTMLCanvasElement;
57 setPreviewURL(lowerCanvas.toDataURL("image/png")); 58 setPreviewURL(lowerCanvas.toDataURL("image/png"));
59 + console.log('asdf')
60 + setIsImgAdded(true);
58 }; 61 };
59 62
60 return ( 63 return (
......
...@@ -2,23 +2,41 @@ import Header from "components/Header"; ...@@ -2,23 +2,41 @@ import Header from "components/Header";
2 import Image from "components/Image"; 2 import Image from "components/Image";
3 import styled from "styled-components"; 3 import styled from "styled-components";
4 import dynamic from "next/dynamic"; 4 import dynamic from "next/dynamic";
5 +import { useState } from "react";
5 6
6 const ToastEditor = dynamic(() => import("components/ToastEditor"), { 7 const ToastEditor = dynamic(() => import("components/ToastEditor"), {
7 ssr: false, 8 ssr: false,
8 }); 9 });
9 10
10 -const Index = () => ( 11 +const Index = () => {
11 - <Container> 12 + const [isEditorOpened, setIsEditorOpened] = useState(false);
12 - <Header /> 13 + const [previewURL, setPreviewURL] = useState<string | ArrayBuffer>("");
13 - <Image /> 14 + const [isImgAdded, setIsImgAdded] = useState(false);
14 - {/* <ToastEditor /> */} 15 +
15 - </Container> 16 + return (
16 -); 17 + <Container>
18 + <Header />
19 +
20 + {!isImgAdded ? (
21 + <button className="open-button" onClick={() => setIsEditorOpened(true)}>
22 + asdf
23 + </button>
24 + ) : (
25 + <Image {...{ previewURL, setPreviewURL }} />
26 + )}
27 + {isEditorOpened && !isImgAdded && (
28 + <ToastEditor {...{ setPreviewURL, setIsImgAdded }} />
29 + )}
30 + </Container>
31 + );
32 +};
17 33
18 const Container = styled.div` 34 const Container = styled.div`
19 display: flex; 35 display: flex;
20 flex-direction: column; 36 flex-direction: column;
21 align-items: center; 37 align-items: center;
38 + .open-button {
39 + }
22 `; 40 `;
23 41
24 export default Index; 42 export default Index;
......