diff --git a/src/App.tsx b/src/App.tsx
index 01ffa4f..6ed091b 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -8,7 +8,7 @@ import RedirectPage from 'routes/LoginPage/RedirectPage';
import MainPage from 'routes/MainPage';
import MyPage from 'routes/MyPage';
import QuestionPage from 'routes/QuestionPage';
-import RecruitPage from 'routes/RecruitPage';
+import MyPage from 'routes/MyPage';
const App = () => {
return (
@@ -19,7 +19,9 @@ const App = () => {
} />
} />
} />
- } />
+ } />
+ } />
+ } />
} />
} />
diff --git a/src/assets/svgs/delete-button.svg b/src/assets/svgs/delete-button.svg
new file mode 100644
index 0000000..db5da2a
--- /dev/null
+++ b/src/assets/svgs/delete-button.svg
@@ -0,0 +1,18 @@
+
+
+
diff --git a/src/assets/svgs/file-upload.svg b/src/assets/svgs/file-upload.svg
new file mode 100644
index 0000000..9ac5516
--- /dev/null
+++ b/src/assets/svgs/file-upload.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svgs/index.js b/src/assets/svgs/index.js
index 31d30c3..7462389 100644
--- a/src/assets/svgs/index.js
+++ b/src/assets/svgs/index.js
@@ -26,3 +26,7 @@ export { ReactComponent as LikeCheckedIcon } from './like_clicked.svg';
export { ReactComponent as ProfileImage } from './mypageProfileImage.svg';
export { ReactComponent as PostButton } from './postbutton.svg';
export { ReactComponent as ProfileIcon } from './profileIcon.svg';
+
+export { ReactComponent as FileUpload } from './file-upload.svg';
+export { ReactComponent as MenuButton } from './menu-button.svg';
+export { ReactComponent as DeleteButton } from './delete-button.svg';
diff --git a/src/assets/svgs/menu-button.svg b/src/assets/svgs/menu-button.svg
new file mode 100644
index 0000000..59758c9
--- /dev/null
+++ b/src/assets/svgs/menu-button.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/components/UI/EditModal/editModal.module.scss b/src/components/UI/EditModal/editModal.module.scss
new file mode 100644
index 0000000..9ea3c92
--- /dev/null
+++ b/src/components/UI/EditModal/editModal.module.scss
@@ -0,0 +1,29 @@
+@use 'styles/constants/colors' as color;
+
+.editModal {
+ display: table;
+ align-items: center;
+ justify-content: center;
+ background-color: color.$WHITE;
+ border: 1px solid color.$GREY_SECONDARY;
+ border-radius: 8px;
+
+ button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 124px;
+ height: 47px;
+ font-size: 16px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+
+ button:first-child {
+ border-bottom: 1px solid color.$GREY_SECONDARY;
+ }
+
+ button:last-child {
+ color: color.$RED;
+ }
+}
diff --git a/src/components/UI/EditModal/index.tsx b/src/components/UI/EditModal/index.tsx
new file mode 100644
index 0000000..aa2d7c4
--- /dev/null
+++ b/src/components/UI/EditModal/index.tsx
@@ -0,0 +1,24 @@
+import styles from './editModal.module.scss';
+
+type Props = {
+ modalClose: () => void;
+};
+
+const EditModal = ({ modalClose }: Props) => {
+ const onModalClose = (e: { target: any; currentTarget: any }) => {
+ if (e.target !== e.currentTarget) {
+ console.log('hi');
+ modalClose();
+ }
+ };
+ return (
+
+ );
+};
+
+export default EditModal;
diff --git a/src/lib/axios.tsx b/src/lib/axios.tsx
new file mode 100644
index 0000000..79ae30c
--- /dev/null
+++ b/src/lib/axios.tsx
@@ -0,0 +1,7 @@
+import axios from 'axios';
+
+const Axios = axios.create({
+ baseURL: process.env.REACT_PUBLIC_BASE_URL,
+});
+
+export default Axios;
diff --git a/src/routes/InfoPage/PostPage/index.tsx b/src/routes/InfoPage/PostPage/index.tsx
new file mode 100644
index 0000000..dd16d0f
--- /dev/null
+++ b/src/routes/InfoPage/PostPage/index.tsx
@@ -0,0 +1,94 @@
+import styles from './postPage.module.scss';
+import { FileUpload, DeleteButton } from 'assets/svgs';
+import { Link } from 'react-router-dom';
+import { useState } from 'react';
+import Axios from 'lib/axios';
+
+interface FormType {
+ title: string;
+ content: string;
+}
+
+const PostPage = () => {
+ const [previewButton, setPreviewButton] = useState(false);
+ const [editButton, setEditButton] = useState(true);
+ const [imageSrc, setImageSrc] = useState('');
+
+ const previewSelected = () => {
+ if (previewButton === true && editButton === false) {
+ setPreviewButton(false);
+ setEditButton(true);
+ }
+ };
+
+ const editSelected = () => {
+ if (previewButton === false && editButton === true) {
+ setPreviewButton(true);
+ setEditButton(false);
+ }
+ };
+
+ const encodeFileToBase64 = (fileBlob: Blob) => {
+ const reader = new FileReader();
+ reader.readAsDataURL(fileBlob);
+ return new Promise((resolve) => {
+ reader.onload = () => {
+ setImageSrc(reader.result as any);
+ resolve();
+ console.log(reader.result);
+ };
+ });
+ };
+
+ const deleteFile = () => {
+ setImageSrc('');
+ };
+
+ return (
+
+
+
+
+
+
+
+
+
+ {imageSrc && (
+
+

+
+
+ )}
+
+
+
+
+ {
+ encodeFileToBase64(e.target.files[0]);
+ }}
+ accept="image/jpeg, image/jpg, image/png"
+ />
+
+
+
+
+
+
+
+
+ );
+};
+
+export default PostPage;
diff --git a/src/routes/InfoPage/PostPage/postPage.module.scss b/src/routes/InfoPage/PostPage/postPage.module.scss
new file mode 100644
index 0000000..1d993f0
--- /dev/null
+++ b/src/routes/InfoPage/PostPage/postPage.module.scss
@@ -0,0 +1,122 @@
+@use 'styles/constants/colors' as color;
+
+.postPage {
+ display: table;
+ width: 820px;
+ height: 914px;
+ margin: 98px auto;
+
+ .postBody {
+ width: 820px;
+ height: 770px;
+ border: 1px solid color.$GREY_SECONDARY;
+ border-radius: 8px;
+
+ .uploadTab {
+ display: flex;
+ justify-content: space-between;
+ width: 250px;
+ margin-top: 20px;
+ margin-left: 48px;
+
+ .selected {
+ padding-bottom: 20px;
+ font-size: 20px;
+ font-weight: 600;
+ border-bottom: 4px solid color.$BLUE_PRIMARY;
+ }
+
+ .unSelected {
+ padding-bottom: 20px;
+ font-size: 20px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ border-bottom: 4px solid color.$WHITE;
+ }
+ }
+
+ input {
+ display: flex;
+ margin-top: 28px;
+ margin-left: 48px;
+ font-size: 20px;
+ font-weight: 600;
+ }
+
+ input::placeholder {
+ color: color.$GREY_PRIMARY;
+ }
+
+ textarea {
+ width: 724px;
+ height: 260px;
+ margin-top: 28px;
+ margin-left: 48px;
+ font-size: 16px;
+ font-weight: 400;
+ resize: none;
+ border: none;
+ }
+
+ textarea::placeholder {
+ color: color.$GREY_PRIMARY;
+ }
+
+ .imageBackground {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ height: 300px;
+ margin-left: 15px;
+
+ svg {
+ margin-left: 5px;
+ }
+ }
+
+ .fileUpload {
+ display: table;
+ width: 107px;
+ height: 21px;
+ margin-top: 23px;
+ margin-left: 689px;
+
+ label {
+ width: 107px;
+ margin-top: -2px;
+ margin-left: 4px;
+ font-size: 18px;
+ font-weight: 400;
+ color: color.$BLUE_PRIMARY;
+ }
+
+ input[type='file'] {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+ }
+ }
+ }
+
+ .buttonBody {
+ button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 180px;
+ height: 46px;
+ margin: 0 auto;
+ margin-top: 98px;
+ font-size: 24px;
+ font-weight: 600;
+ color: color.$WHITE;
+ background-color: color.$BLUE_PRIMARY;
+ border-radius: 30px;
+ }
+ }
+}
diff --git a/src/routes/InfoPage/ReadPage/index.tsx b/src/routes/InfoPage/ReadPage/index.tsx
new file mode 100644
index 0000000..5418b98
--- /dev/null
+++ b/src/routes/InfoPage/ReadPage/index.tsx
@@ -0,0 +1,102 @@
+import styles from './readPage.module.scss';
+import { ProfileIcon, MenuButton, LikeIcon, CommentIcon, BookmarkIcon } from 'assets/svgs';
+import React, { useState } from 'react';
+import EditModal from 'components/UI/EditModal';
+import { Link } from 'react-router-dom';
+
+const ReadPage = () => {
+ const [textAreaValue, setTextAreaValue] = useState('');
+ const [modalOpen, setModalOpen] = useState(false);
+ const modalClose = () => {
+ setModalOpen(!modalOpen);
+ };
+ const onChangeValue = (e: React.ChangeEvent) => {
+ const target = e.target as HTMLInputElement;
+ setTextAreaValue(target.value);
+ };
+
+ return (
+
+
+
+
정보 공유합니당
+
+
+
+
+
+ {modalOpen && }
+
+
+
+
+
+
+
+
+
+
+ {textAreaValue && (
+ <>
+
+
+ >
+ )}
+
+
+
+
+ );
+};
+
+export default ReadPage;
diff --git a/src/routes/InfoPage/ReadPage/readPage.module.scss b/src/routes/InfoPage/ReadPage/readPage.module.scss
new file mode 100644
index 0000000..b6126f7
--- /dev/null
+++ b/src/routes/InfoPage/ReadPage/readPage.module.scss
@@ -0,0 +1,248 @@
+@use 'styles/constants/colors' as color;
+
+.readPage {
+ display: table;
+ width: 820px;
+ margin: 98px auto;
+
+ .postDiv {
+ height: 770px;
+ border: 1px solid color.$GREY_SECONDARY;
+ border-radius: 8px;
+
+ .topPostDiv {
+ display: flex;
+ width: 748px;
+ height: 28px;
+ margin-top: 18px;
+ margin-left: 48px;
+
+ .title {
+ width: 620px;
+ margin-top: 2px;
+ font-size: 20px;
+ font-weight: 600;
+ }
+
+ .profile {
+ display: flex;
+ width: 70px;
+ margin-top: 4px;
+ margin-left: 20px;
+
+ p {
+ display: flex;
+ margin-top: 1px;
+ margin-left: 4px;
+ font-size: 16px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+ }
+
+ .menu {
+ width: 28px;
+ margin-left: 10px;
+ }
+ }
+
+ hr {
+ display: flex;
+ width: 772px;
+ margin: 0 auto;
+ margin-top: 20px;
+ border-top: hidden;
+ border-right: hidden;
+ border-bottom: 1px solid color.$GREY_SECONDARY;
+ border-left: hidden;
+ }
+
+ hr:last-child {
+ display: flex;
+ width: 772px;
+ margin: 0 auto;
+ margin-top: 24px;
+ border-top: hidden;
+ border-right: hidden;
+ border-bottom: 1px solid color.$GREY_SECONDARY;
+ border-left: hidden;
+ }
+
+ textarea {
+ display: flex;
+ width: 724px;
+ height: 594px;
+ margin: 0 auto;
+ margin-top: 20px;
+ font-size: 16px;
+ font-weight: 400;
+ resize: none;
+ border: none;
+ }
+
+ .bottomPostDiv {
+ display: flex;
+ width: 766px;
+ height: 35px;
+ margin: 0 auto;
+ margin-top: 17px;
+
+ .count {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 65px;
+ height: 35px;
+
+ p {
+ margin-left: 8px;
+ font-size: 20px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+ }
+
+ .count + .count {
+ margin-left: 58px;
+ }
+
+ .date {
+ position: absolute;
+ display: flex;
+ margin: 7px 24px 24px 690px;
+ font-size: 16px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+ }
+ }
+
+ .commentDiv {
+ height: 714px;
+ margin-top: 36px;
+ background-color: color.$WHITE;
+
+ .commentTopDiv {
+ textarea {
+ width: 100%;
+ padding: 20px 30px;
+ resize: none;
+ border: 1px solid color.$GREY_SECONDARY;
+ border-radius: 30px;
+ }
+
+ .postComment {
+ height: 60px;
+
+ ::placeholder {
+ width: 100%;
+ font-size: 16px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+ }
+
+ .postCommentFocus {
+ height: 120px;
+ }
+
+ button {
+ position: absolute;
+ width: 76px;
+ height: 30px;
+ margin-top: 70px;
+ margin-left: -200px;
+ font-size: 16px;
+ font-weight: 400;
+ border: 1px solid color.$GREY_PRIMARY;
+ border-radius: 30px;
+ }
+
+ button:last-child {
+ margin-left: -106px;
+ color: color.$WHITE;
+ background-color: color.$BLUE_PRIMARY;
+ }
+ }
+
+ .commentBottomDiv {
+ display: table;
+ width: 820px;
+ margin-top: 58px;
+
+ .filter {
+ display: flex;
+
+ p {
+ font-size: 20px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+
+ p:last-child {
+ margin-left: 15px;
+ font-size: 20px;
+ font-weight: 400;
+ color: color.$BLUE_PRIMARY;
+ }
+ }
+
+ .comments {
+ display: table;
+ width: 820px;
+ margin-top: 12px;
+
+ .profile {
+ display: flex;
+ width: 80px;
+ height: 24px;
+ margin-top: 17px;
+ margin-left: 54px;
+ font-size: 20px;
+ font-weight: 600;
+
+ svg {
+ margin-top: 2px;
+ }
+
+ p {
+ margin-left: 4px;
+ }
+ }
+
+ .sideProfile {
+ display: flex;
+ width: 124px;
+ height: 28px;
+ margin-top: -28px;
+ margin-left: 640px;
+
+ p {
+ margin-top: 5px;
+ margin-right: 10px;
+ font-size: 16px;
+ font-weight: 400;
+ color: color.$GREY_PRIMARY;
+ }
+ }
+
+ .content {
+ height: 60px;
+ padding: 16px 54px 20px;
+
+ .like {
+ margin-top: 20px;
+ }
+ }
+ }
+
+ .comment:first-child {
+ border-top: 1px solid color.$GREY_PRIMARY;
+ }
+
+ .comment:last-child {
+ border-bottom: 1px solid color.$GREY_PRIMARY;
+ }
+ }
+ }
+}
diff --git a/src/routes/InfoPage/index.tsx b/src/routes/InfoPage/index.tsx
index 12091f9..0af0394 100644
--- a/src/routes/InfoPage/index.tsx
+++ b/src/routes/InfoPage/index.tsx
@@ -4,6 +4,7 @@ import Pagenation from 'routes/RecruitPage/Pagenation';
import InfoItem from '../../components/UI/InfoItem';
import Filter from './Filter';
import styles from './infoPage.module.scss';
+import { Link } from 'react-router-dom';
const InfoPage = () => {
const content = {
@@ -20,15 +21,18 @@ const InfoPage = () => {
width: 'wide' as const,
lineOfContent: 'oneLine' as const,
};
+
return (