Showing
1 changed file
with
64 additions
and
1 deletions
| 1 | +import { useState } from "react"; | ||
| 1 | import styled from "styled-components"; | 2 | import styled from "styled-components"; |
| 2 | 3 | ||
| 3 | const Image = () => { | 4 | const Image = () => { |
| 5 | + const [file, setFile] = useState(undefined); | ||
| 6 | + const [previewURL, setPreviewURL] = useState(""); | ||
| 7 | + | ||
| 8 | + // const uploadImage = (file) => { | ||
| 9 | + // if (!file) { | ||
| 10 | + // return; | ||
| 11 | + // } | ||
| 12 | + // }; | ||
| 13 | + | ||
| 14 | + const selectImg = (e) => { | ||
| 15 | + const reader = new FileReader(); | ||
| 16 | + const targetFile = e.target.files[0]; | ||
| 17 | + setFile(targetFile); | ||
| 18 | + // uploadImage(targetFile); | ||
| 19 | + | ||
| 20 | + reader.onloadend = () => { | ||
| 21 | + setPreviewURL(reader.result); | ||
| 22 | + }; | ||
| 23 | + | ||
| 24 | + reader.readAsDataURL(targetFile); | ||
| 25 | + }; | ||
| 26 | + | ||
| 4 | return ( | 27 | return ( |
| 5 | <Container> | 28 | <Container> |
| 6 | - <ImgBox /> | 29 | + <ImgBox> |
| 30 | + {file === undefined ? ( | ||
| 31 | + <> | ||
| 32 | + <BlankBox /> | ||
| 33 | + <div>Click to add a photo</div> | ||
| 34 | + <input | ||
| 35 | + type="file" | ||
| 36 | + style={{ | ||
| 37 | + marginTop: "5px", | ||
| 38 | + position: "absolute", | ||
| 39 | + zIndex: 0, | ||
| 40 | + width: "90%", | ||
| 41 | + height: "100%", | ||
| 42 | + border: "none", | ||
| 43 | + cursor: "pointer", | ||
| 44 | + outline: "none", | ||
| 45 | + }} | ||
| 46 | + onChange={selectImg} | ||
| 47 | + /> | ||
| 48 | + </> | ||
| 49 | + ) : ( | ||
| 50 | + <img | ||
| 51 | + alt={""} | ||
| 52 | + style={{ objectFit: "cover", display: "flex", margin: "0 auto" }} | ||
| 53 | + src={previewURL} | ||
| 54 | + /> | ||
| 55 | + )} | ||
| 56 | + </ImgBox> | ||
| 7 | <Menu /> | 57 | <Menu /> |
| 8 | </Container> | 58 | </Container> |
| 9 | ); | 59 | ); |
| ... | @@ -26,12 +76,17 @@ const Container = styled.div` | ... | @@ -26,12 +76,17 @@ const Container = styled.div` |
| 26 | justify-content: center; | 76 | justify-content: center; |
| 27 | `; | 77 | `; |
| 28 | const ImgBox = styled.div` | 78 | const ImgBox = styled.div` |
| 79 | + position: relative; | ||
| 29 | width: 40rem; | 80 | width: 40rem; |
| 30 | height: 30rem; | 81 | height: 30rem; |
| 31 | background-color: white; | 82 | background-color: white; |
| 32 | box-shadow: ${({ theme }) => theme.boxShadow.normal}; | 83 | box-shadow: ${({ theme }) => theme.boxShadow.normal}; |
| 33 | border-radius: 2rem; | 84 | border-radius: 2rem; |
| 34 | margin-top: 2rem; | 85 | margin-top: 2rem; |
| 86 | + display: flex; | ||
| 87 | + align-items: center; | ||
| 88 | + justify-content: center; | ||
| 89 | + font-size: 1rem; | ||
| 35 | `; | 90 | `; |
| 36 | 91 | ||
| 37 | const Box = styled.div` | 92 | const Box = styled.div` |
| ... | @@ -42,5 +97,13 @@ const Box = styled.div` | ... | @@ -42,5 +97,13 @@ const Box = styled.div` |
| 42 | background-color: white; | 97 | background-color: white; |
| 43 | box-shadow: ${({ theme }) => theme.boxShadow.normal}; | 98 | box-shadow: ${({ theme }) => theme.boxShadow.normal}; |
| 44 | `; | 99 | `; |
| 100 | +const BlankBox = styled.div` | ||
| 101 | + z-index: 1; | ||
| 102 | + position: absolute; | ||
| 103 | + top: 0; | ||
| 104 | + width: 90%; | ||
| 105 | + height: 50px; | ||
| 106 | + background-color: white; | ||
| 107 | +`; | ||
| 45 | 108 | ||
| 46 | export default Image; | 109 | export default Image; | ... | ... |
-
Please register or login to post a comment