From 6ec703e9fb1a819bf76565ca16068f3d26858b66 Mon Sep 17 00:00:00 2001 From: Donghyun Cho Date: Sun, 26 Jun 2022 22:42:06 +0900 Subject: [PATCH 1/2] Update README.md --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 6f40c22..be35467 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,6 @@ http://likelion-10th-inha-gallery.surge.sh 기타 디자인과 레이아웃은 원본과 요구사항과 크게 다르지 않은 범위에서 원하는대로 만드셔도 좋습니다. -### 📘 추가 구현 사항 - -> 아래 내용은 필수 구현 사항을 모두 구현한 다음 선택적으로 구현해주세요. - -이미지 조회, 댓글 추가/삭제를 넘어 이미지를 추가하고 삭제하는 기능을 개발합니다. 아래 내용은 자유롭게 기획, 디자인 하여 구현해주세요 🤗. - -1. 특정한 이미지를 삭제하는 기능 - ## API 요청을 호스트 정보와 문서는 아래와 같습니다. From 078ac00b5830ef1cca59930fde652899d3f4e60e Mon Sep 17 00:00:00 2001 From: sohee Date: Sun, 3 Jul 2022 00:45:47 -0700 Subject: [PATCH 2/2] fe-last first commit --- package-lock.json | 136 ++++++++++++++++++++++++++++++++ package.json | 3 + public/fire.jpg | Bin 0 -> 44958 bytes src/App.js | 27 ++++++- src/component/ArticleDetail.jsx | 37 +++++++++ src/component/Comment.jsx | 44 +++++++++++ src/component/Global.jsx | 9 +++ src/component/Main.jsx | 49 ++++++++++++ src/component/Profile.jsx | 53 +++++++++++++ src/pages/Detail.jsx | 99 +++++++++++++++++++++++ src/pages/HomePage.jsx | 47 +++++++++++ 11 files changed, 503 insertions(+), 1 deletion(-) create mode 100644 public/fire.jpg create mode 100644 src/component/ArticleDetail.jsx create mode 100644 src/component/Comment.jsx create mode 100644 src/component/Global.jsx create mode 100644 src/component/Main.jsx create mode 100644 src/component/Profile.jsx create mode 100644 src/pages/Detail.jsx create mode 100644 src/pages/HomePage.jsx diff --git a/package-lock.json b/package-lock.json index 88a3684..18fdf41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1312,6 +1312,29 @@ "postcss-value-parser": "^4.2.0" } }, + "@emotion/is-prop-valid": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz", + "integrity": "sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==", + "requires": { + "@emotion/memoize": "^0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, "@eslint/eslintrc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", @@ -3131,6 +3154,27 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==" }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -3299,6 +3343,23 @@ "@babel/helper-define-polyfill-provider": "^0.3.1" } }, + "babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, "babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", @@ -3541,6 +3602,11 @@ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -3896,6 +3962,11 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, "css-declaration-sorter": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", @@ -4000,6 +4071,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -5663,6 +5744,22 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "requires": { + "@babel/runtime": "^7.7.6" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -9360,6 +9457,23 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, + "react-router": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", + "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", + "requires": { + "history": "^5.2.0" + } + }, + "react-router-dom": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", + "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", + "requires": { + "history": "^5.2.0", + "react-router": "6.3.0" + } + }, "react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -9960,6 +10074,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10261,6 +10380,23 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" }, + "styled-components": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz", + "integrity": "sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + } + }, "stylehacks": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", diff --git a/package.json b/package.json index a109254..1ee36dc 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,12 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.0.1", "@testing-library/user-event": "^13.5.0", + "axios": "^0.27.2", "react": "^18.0.0", "react-dom": "^18.0.0", + "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", + "styled-components": "^5.3.5", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/public/fire.jpg b/public/fire.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be39fd3772c17221f3bed4c16fb4d621a44b133a GIT binary patch literal 44958 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 { - return
Code Here :)
; + return ( + + + + + } + /> + } /> + + + ); }; export default App; diff --git a/src/component/ArticleDetail.jsx b/src/component/ArticleDetail.jsx new file mode 100644 index 0000000..766ed46 --- /dev/null +++ b/src/component/ArticleDetail.jsx @@ -0,0 +1,37 @@ +import React from "react"; +import styled from "styled-components"; + +const Title = styled.div` + width: 100%; + height: 50px; + font-size: 30px; + font-weight: bold; + margin-top: 20px; + margin-left: 20px; +`; + +const Content = styled.div` + width: 100%; + height: 50px; + font-size: 18px; + margin-left: 20px; +`; + +const Image = styled.div` + width: 100%; + height: 500px; + background-image: url(${(props) => props.imgUrl}); + background-size: cover; +`; + +const ArticleDetail = ({ title, content, imgUrl }) => { + return ( + <> + {title} + {content} + + + ); +}; + +export default ArticleDetail; diff --git a/src/component/Comment.jsx b/src/component/Comment.jsx new file mode 100644 index 0000000..42fdb49 --- /dev/null +++ b/src/component/Comment.jsx @@ -0,0 +1,44 @@ +import React from "react"; +import styled from "styled-components"; +import axios from "axios"; + +const CommentContainer = styled.div` + display: flex; + padding: 10px 30px 10px 30px; +`; + +const CommentName = styled.div` + flex-basis: 50px; + font-weight: bold; +`; + +const CommentContent = styled.div` + flex-grow: 5; + font-weight: 500; +`; + +const CommentDelete = styled.div` + flex-basis: 50px; + color: gray; + cursor: pointer; +`; + +const Comment = ({ id, content, apiUrl }) => { + const onClickDelete = () => { + axios.delete(`${apiUrl}/album/delete/comment/${id}`).then(() => { + window.location.reload(true); + }); + }; + + return ( + <> + + 익명 + {content} + 삭제 + + + ); +}; + +export default Comment; diff --git a/src/component/Global.jsx b/src/component/Global.jsx new file mode 100644 index 0000000..be3ae4a --- /dev/null +++ b/src/component/Global.jsx @@ -0,0 +1,9 @@ +import { createGlobalStyle } from "styled-components"; + +const GlobalStyle = createGlobalStyle` + body { + margin: 0px; + } +`; + +export default GlobalStyle; diff --git a/src/component/Main.jsx b/src/component/Main.jsx new file mode 100644 index 0000000..33ccb70 --- /dev/null +++ b/src/component/Main.jsx @@ -0,0 +1,49 @@ +import React from "react"; +import styled from "styled-components"; +import { NavLink } from "react-router-dom"; + +const ArticleBox = styled.div` + display: inline-block; + width: 500px; + height: 550px; + padding-bottom: 5px; +`; + +const Image = styled.div` + width: 500px; + height: 500px; + background-image: url(${(props) => props.imgUrl}); + background-size: cover; +`; + +const Title = styled.div` + width: 500px; + height: 25px; + text-align: center; + font-weight: bold; + padding-top: 5px; +`; + +const Content = styled.div` + width: 500px; + height: 25px; + text-align: center; + font-size: 12px; + color: gray; +`; + +const Main = ({ id, imgUrl, title, content }) => { + return ( + <> + + + + + {title} + {content} + + + ); +}; + +export default Main; diff --git a/src/component/Profile.jsx b/src/component/Profile.jsx new file mode 100644 index 0000000..bfbc488 --- /dev/null +++ b/src/component/Profile.jsx @@ -0,0 +1,53 @@ +import React from "react"; +import styled from "styled-components"; + +const Container = styled.div` + width: 100%; + height: 200px; + display: flex; + align-items: center; +`; + +const Image = styled.div` + background-image: url(${(props) => props.imgUrl}); + background-size: cover; + width: 140px; + height: 120px; + border-radius: 50%; + margin-left: 10px; + margin-right: 10px; +`; + +const TextContainer = styled.div` + width: 100%; + height: 120px; + display: flex; + flex-direction: column; + justify-content: center; +`; + +const Name = styled.div` + font-weight: bold; + font-size: 25px; +`; + +const Content = styled.div``; + +const Count = styled.div` + margin-top: 10px; +`; + +const Profile = ({ imgUrl, name, content, length }) => { + return ( + + + + {name} + {content} + 게시물 {length}개 + + + ); +}; + +export default Profile; diff --git a/src/pages/Detail.jsx b/src/pages/Detail.jsx new file mode 100644 index 0000000..bf11d08 --- /dev/null +++ b/src/pages/Detail.jsx @@ -0,0 +1,99 @@ +import React from "react"; +import styled from "styled-components"; +import { useEffect, useState } from "react"; +import { useParams } from "react-router-dom"; +import axios from "axios"; +import ArticleDetail from "../component/ArticleDetail"; +import Comment from "../component/Comment"; + +const Text = styled.div` + border-bottom: 1px solid lightgray; + padding: 10px; + display: flex; + justify-content: space-between; +`; + +const Input = styled.input` + width: 1400px; + border: 0px; + padding: 10px; + font-size: 15px; +`; + +const Button = styled.button` + background-color: white; + border: 0px; + color: blue; + font-size: 16px; + cursor: pointer; +`; + +const Detail = ({ apiUrl }) => { + const { id } = useParams(); + const [article, setArticle] = useState(); + const [comments, setComments] = useState(); + + const [comment, setComment] = useState(""); + + useEffect(() => { + axios.get(`${apiUrl}/album/${id}`).then((res) => { + setArticle(res.data); + }); + }, [id]); + + useEffect(() => { + axios.get(`${apiUrl}/album/find/${id}`).then((res) => { + console.log(res.data); + setComments(res.data); + }); + }, [id]); + + const onChangeComment = (e) => { + setComment(e.target.value); + }; + + const onClickComment = () => { + axios + .post(`${apiUrl}/album/create/comment/${id}`, { content: comment }) + .then(() => { + window.location.reload(true); + }) + .catch((err) => { + console.log(err.response.data.message); + }); + }; + + if (!article || !comments) return "이미지 로딩중"; + + console.log(comments); + + return ( + <> + + + + + + {comments.map((comment) => { + return ( + + ); + })} + + ); +}; + +export default Detail; diff --git a/src/pages/HomePage.jsx b/src/pages/HomePage.jsx new file mode 100644 index 0000000..b3203d2 --- /dev/null +++ b/src/pages/HomePage.jsx @@ -0,0 +1,47 @@ +import React from "react"; +import styled from "styled-components"; +import { useEffect, useState } from "react"; +import axios from "axios"; +import Profile from "../component/Profile"; +import Main from "../component/Main"; + +const ArticleContainer = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); +`; + +const HomePage = ({ imgUrl, name, content, apiUrl }) => { + const [articles, setArticles] = useState([]); + + useEffect(() => { + axios.get(`${apiUrl}/album/articles`).then((res) => { + setArticles(res.data); + }); + }, []); + + return ( + <> + + + {articles.map((article) => { + return ( +
+ ); + })} +
+ + ); +}; + +export default HomePage;