├── src ├── components │ ├── pages │ │ ├── login │ │ │ ├── index.js │ │ │ └── hooks │ │ │ │ └── useLogin.js │ │ ├── Mypage │ │ │ ├── store │ │ │ │ ├── index.ts │ │ │ │ └── mypageCurPageState.ts │ │ │ ├── types.d.ts │ │ │ ├── utils │ │ │ │ ├── articleType.js │ │ │ │ ├── index.ts │ │ │ │ ├── ModalPortal.js │ │ │ │ └── getArticleInfo.js │ │ │ ├── components │ │ │ │ ├── index.ts │ │ │ │ ├── MypageBoard │ │ │ │ │ ├── MypageButton.jsx │ │ │ │ │ ├── LinkIcon.tsx │ │ │ │ │ ├── CharSelectModalButtons.tsx │ │ │ │ │ ├── MypageProfile.jsx │ │ │ │ │ ├── ArticlePreview.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── ProfileSection.jsx │ │ │ │ │ ├── MyArticlePreview.tsx │ │ │ │ │ └── CharSelectModal.tsx │ │ │ │ └── MyArticleBoard │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── MyArticleList.tsx │ │ │ │ │ ├── MyCommentList.tsx │ │ │ │ │ ├── PageSelector.tsx │ │ │ │ │ └── LikeArticleList.tsx │ │ │ ├── styles │ │ │ │ ├── MypageBoard.styles.ts │ │ │ │ ├── MyArticleBoardInner.styles.ts │ │ │ │ ├── index.ts │ │ │ │ ├── CharSelectModalButtons.styles.ts │ │ │ │ ├── MypageButton.styles.js │ │ │ │ ├── Mypage.styles.ts │ │ │ │ ├── PageSelector.styles.ts │ │ │ │ ├── MyArticleBoard.styles.ts │ │ │ │ ├── ProfileSection.styles.js │ │ │ │ ├── ArticlePreview.styles.ts │ │ │ │ ├── MyArticlePreview.styles.ts │ │ │ │ ├── CharSelectModal.styles.ts │ │ │ │ └── MypageProfile.styles.js │ │ │ ├── assets │ │ │ │ ├── icon42.svg │ │ │ │ ├── index.js │ │ │ │ ├── iconFacebook.svg │ │ │ │ ├── iconTwitter.svg │ │ │ │ ├── iconLinkedin.svg │ │ │ │ ├── iconGithub.svg │ │ │ │ └── iconSolvedac.svg │ │ │ ├── hooks │ │ │ │ ├── useMyArticlePreview.ts │ │ │ │ ├── useClickOutside.ts │ │ │ │ ├── useGetLikeArticles.ts │ │ │ │ ├── useGetMyArticles.ts │ │ │ │ ├── useGetMyComments.ts │ │ │ │ ├── useMypageBoard.ts │ │ │ │ ├── useMypage.ts │ │ │ │ ├── useCharSelectModal.ts │ │ │ │ ├── index.ts │ │ │ │ ├── useMyArticleBoard.ts │ │ │ │ ├── useMypageProfile.ts │ │ │ │ ├── useProfileSection.ts │ │ │ │ └── usePageSelector.ts │ │ │ └── index.tsx │ │ ├── articles │ │ │ ├── common │ │ │ │ ├── styles.jsx │ │ │ │ ├── utils.tsx │ │ │ │ ├── reducer.ts │ │ │ │ ├── types.ts │ │ │ │ ├── Advertisement.jsx │ │ │ │ └── Board.jsx │ │ │ ├── ArticleDetailPage │ │ │ │ ├── components │ │ │ │ │ ├── article │ │ │ │ │ │ ├── ArticleDetailTitle.tsx │ │ │ │ │ │ ├── ArticleDetailCategory.tsx │ │ │ │ │ │ ├── ArticleDetailWriter.tsx │ │ │ │ │ │ ├── ArticleDetailInfo.tsx │ │ │ │ │ │ ├── ArticleContainer.tsx │ │ │ │ │ │ ├── ArticleContent.tsx │ │ │ │ │ │ ├── ArticleUpdateDelete.tsx │ │ │ │ │ │ ├── ArticleDetailHeader.tsx │ │ │ │ │ │ └── ArticleLike.tsx │ │ │ │ │ └── comment │ │ │ │ │ │ ├── CommentCount.tsx │ │ │ │ │ │ ├── CommentsList.tsx │ │ │ │ │ │ ├── CommentContainer.tsx │ │ │ │ │ │ └── CommentInput.tsx │ │ │ │ └── index.tsx │ │ │ ├── ArticleListPage │ │ │ │ ├── components │ │ │ │ │ ├── ArticleListItem.jsx │ │ │ │ │ ├── CategoryName.jsx │ │ │ │ │ ├── ArticleList.jsx │ │ │ │ │ └── ArticleListHeader.jsx │ │ │ │ └── hooks │ │ │ │ │ └── useArticleListHeader.ts │ │ │ └── ArticleWritingPage │ │ │ │ ├── components │ │ │ │ ├── WritingContent.tsx │ │ │ │ ├── ArticleWritingBody.tsx │ │ │ │ └── ArticleWritingHeader.tsx │ │ │ │ └── index.tsx │ │ ├── Auth │ │ │ └── index.jsx │ │ ├── main │ │ │ ├── MainPreviewBoard.jsx │ │ │ ├── MainPreviewBoards.jsx │ │ │ └── Main.jsx │ │ ├── Donation │ │ │ ├── index.tsx │ │ │ ├── DesktopDonation.tsx │ │ │ └── MobileDonation.tsx │ │ └── Error.jsx │ └── atoms │ │ ├── Modal.js │ │ └── Login.js ├── setupTests.js ├── common │ ├── Footer │ │ ├── index.js │ │ ├── BuyCoffee.tsx │ │ └── Footer.tsx │ ├── TopNav │ │ ├── index.js │ │ ├── styled │ │ │ ├── Logo.styled.js │ │ │ ├── index.js │ │ │ ├── MenuItems.styled.js │ │ │ ├── Account.styled.js │ │ │ └── TopNav.styled.js │ │ ├── components │ │ │ ├── LoginButton.tsx │ │ │ ├── Logo.tsx │ │ │ ├── TopNav.tsx │ │ │ ├── UserName.tsx │ │ │ ├── NotiList.tsx │ │ │ ├── CategoryItems.tsx │ │ │ ├── Sidebar.jsx │ │ │ └── SidebarCategoryList.tsx │ │ └── ScrollToTap.tsx │ ├── urls.ts │ ├── Preview │ │ ├── PreviewArticleItems.jsx │ │ ├── CommentCount.jsx │ │ ├── LikeCount.jsx │ │ ├── PreviewArticleBoard.jsx │ │ ├── PreviewHeader.jsx │ │ └── PreviewArticleItem.jsx │ ├── PageLayout.jsx │ ├── hooks │ │ └── api │ │ │ ├── comment.ts │ │ │ ├── user.js │ │ │ ├── category.ts │ │ │ ├── search.ts │ │ │ └── article.ts │ ├── utils.js │ ├── constants.js │ ├── PageSelector.jsx │ └── QuickLink │ │ └── QuickLink.jsx ├── styles │ ├── rem.js │ ├── assets.js │ ├── theme.js │ └── reset.css ├── network │ ├── types │ │ ├── Image.ts │ │ ├── Notification.ts │ │ ├── Category.ts │ │ ├── Pagination.ts │ │ ├── Comment.ts │ │ ├── Reaction.ts │ │ ├── User.ts │ │ └── Article.ts │ ├── CategoryService.ts │ ├── CheckInService.js │ ├── FtAuthService.ts │ ├── APIType.js │ ├── ArticleService2.ts │ ├── AuthService.ts │ ├── ImageService.ts │ ├── CommentService2.ts │ ├── ReactionService.ts │ ├── BestService.js │ ├── index.js │ ├── NotificationService.js │ └── DefaultService.js ├── datas │ ├── index.js │ └── mypage.js ├── store │ ├── user.ts │ ├── category.ts │ ├── notiModal.ts │ └── userCurrentPos.ts ├── index.css ├── index.js ├── App.js ├── __test__ │ └── LoginButton.test.js ├── Router.js └── logo.svg ├── .github ├── pull_request_template.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── auto_author_assign.yml │ └── test.yml ├── public ├── robots.txt ├── assets │ ├── error.png │ ├── 42mainlogo.png │ ├── 42mainlogo2.png │ ├── 42mainlogo3.png │ ├── characterLogo.png │ ├── sidebar │ │ ├── 42gg.png │ │ ├── cabi.png │ │ ├── 80000co.png │ │ ├── giggle.png │ │ ├── humansof42.png │ │ └── 42jiphyeonjeon.png │ ├── CharacterNoBG │ │ ├── bbo.png │ │ ├── bora.png │ │ ├── ddub.png │ │ ├── nana.png │ │ ├── babybbo.png │ │ ├── babybora.png │ │ ├── babyddub.png │ │ ├── babynana.png │ │ ├── hyeonkim.png │ │ ├── seongparcat.png │ │ ├── babyhyeonkim.png │ │ └── seongparcat2.png │ ├── donation │ │ ├── donation1.png │ │ ├── donation2.png │ │ ├── donation3.png │ │ ├── donation-paint1.png │ │ ├── donation-paint2.png │ │ ├── donation-paint3.png │ │ ├── donation-paint1-cut.png │ │ ├── donation-paint2-cut.png │ │ └── donation-paint3-cut.png │ ├── 42worldCharacterLogo.png │ ├── CharacterWhiteBG │ │ ├── bbo.png │ │ ├── bora.png │ │ ├── ddub.png │ │ ├── nana.png │ │ ├── babybbo.png │ │ ├── babybora.png │ │ ├── babyddub.png │ │ ├── babynana.png │ │ ├── hyeonkim.png │ │ ├── seongparcat.png │ │ ├── babyhyeonkim.png │ │ └── seongparcat2.png │ ├── images │ │ ├── logo │ │ │ ├── Logo@16x.png │ │ │ ├── Logo@1x.png │ │ │ ├── Logo@2x.png │ │ │ ├── Logo@4x.png │ │ │ └── Logo@8x.png │ │ ├── prelogo │ │ │ ├── logo@16x.png │ │ │ ├── logo@2x.png │ │ │ ├── logo@4x.png │ │ │ └── logo@8x.png │ │ └── Icon │ │ │ ├── Favorite.svg │ │ │ └── notFavorite.svg │ ├── advertisement │ │ ├── surviving42.png │ │ └── surviving42_1.png │ ├── menu.svg │ ├── myPage.svg │ ├── like.svg │ ├── 42mainlogo2.svg │ ├── Footer │ │ ├── mail.svg │ │ ├── article.svg │ │ └── github.svg │ ├── new.svg │ ├── alarmNo.svg │ ├── bell.svg │ ├── alarmYes.svg │ └── hot.svg └── manifest.json ├── craco.config.js ├── tsconfig.paths.json ├── .prettierrc.js ├── .gitignore ├── .eslintrc.js ├── package.json └── README.md /src/components/pages/login/index.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## 변경 사항 2 | 3 | ## 변경한 이유 4 | 5 | ## 스크린샷 또는 관련 문서 6 | -------------------------------------------------------------------------------- /src/common/Footer/index.js: -------------------------------------------------------------------------------- 1 | import Footer from './Footer'; 2 | 3 | export default Footer; 4 | -------------------------------------------------------------------------------- /src/styles/rem.js: -------------------------------------------------------------------------------- 1 | export const rem = px => { 2 | return `${px * 0.0625}rem`; 3 | }; 4 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/common/TopNav/index.js: -------------------------------------------------------------------------------- 1 | import TopNav from "./components/TopNav"; 2 | 3 | export default TopNav; -------------------------------------------------------------------------------- /src/network/types/Image.ts: -------------------------------------------------------------------------------- 1 | export interface GetUploadUrlResponse { 2 | uploadUrl: string; 3 | } 4 | -------------------------------------------------------------------------------- /public/assets/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/error.png -------------------------------------------------------------------------------- /public/assets/42mainlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/42mainlogo.png -------------------------------------------------------------------------------- /public/assets/42mainlogo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/42mainlogo2.png -------------------------------------------------------------------------------- /public/assets/42mainlogo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/42mainlogo3.png -------------------------------------------------------------------------------- /public/assets/characterLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/characterLogo.png -------------------------------------------------------------------------------- /public/assets/sidebar/42gg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/42gg.png -------------------------------------------------------------------------------- /public/assets/sidebar/cabi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/cabi.png -------------------------------------------------------------------------------- /src/datas/index.js: -------------------------------------------------------------------------------- 1 | import articles from './articles'; 2 | 3 | const data = { articles }; 4 | 5 | export default data; 6 | -------------------------------------------------------------------------------- /public/assets/sidebar/80000co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/80000co.png -------------------------------------------------------------------------------- /public/assets/sidebar/giggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/giggle.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/bbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/bbo.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/bora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/bora.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/ddub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/ddub.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/nana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/nana.png -------------------------------------------------------------------------------- /public/assets/donation/donation1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation1.png -------------------------------------------------------------------------------- /public/assets/donation/donation2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation2.png -------------------------------------------------------------------------------- /public/assets/donation/donation3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation3.png -------------------------------------------------------------------------------- /public/assets/sidebar/humansof42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/humansof42.png -------------------------------------------------------------------------------- /public/assets/42worldCharacterLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/42worldCharacterLogo.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/bbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/bbo.png -------------------------------------------------------------------------------- /public/assets/images/logo/Logo@16x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/logo/Logo@16x.png -------------------------------------------------------------------------------- /public/assets/images/logo/Logo@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/logo/Logo@1x.png -------------------------------------------------------------------------------- /public/assets/images/logo/Logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/logo/Logo@2x.png -------------------------------------------------------------------------------- /public/assets/images/logo/Logo@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/logo/Logo@4x.png -------------------------------------------------------------------------------- /public/assets/images/logo/Logo@8x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/logo/Logo@8x.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/babybbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/babybbo.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/babybora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/babybora.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/babyddub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/babyddub.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/babynana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/babynana.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/hyeonkim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/hyeonkim.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/bora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/bora.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/ddub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/ddub.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/nana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/nana.png -------------------------------------------------------------------------------- /public/assets/images/prelogo/logo@16x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/prelogo/logo@16x.png -------------------------------------------------------------------------------- /public/assets/images/prelogo/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/prelogo/logo@2x.png -------------------------------------------------------------------------------- /public/assets/images/prelogo/logo@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/prelogo/logo@4x.png -------------------------------------------------------------------------------- /public/assets/images/prelogo/logo@8x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/images/prelogo/logo@8x.png -------------------------------------------------------------------------------- /public/assets/sidebar/42jiphyeonjeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/sidebar/42jiphyeonjeon.png -------------------------------------------------------------------------------- /src/components/pages/Mypage/store/index.ts: -------------------------------------------------------------------------------- 1 | import mypageCurPageState from './mypageCurPageState'; 2 | 3 | export { mypageCurPageState }; 4 | -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/seongparcat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/seongparcat.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/babybbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/babybbo.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/babybora.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/babybora.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/babyddub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/babyddub.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/babynana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/babynana.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/hyeonkim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/hyeonkim.png -------------------------------------------------------------------------------- /public/assets/advertisement/surviving42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/advertisement/surviving42.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint1.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint2.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint3.png -------------------------------------------------------------------------------- /src/store/user.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'recoil'; 2 | 3 | export const userState = atom({ 4 | key: 'userState', 5 | default: null, 6 | }); 7 | -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/babyhyeonkim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/babyhyeonkim.png -------------------------------------------------------------------------------- /public/assets/CharacterNoBG/seongparcat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterNoBG/seongparcat2.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/seongparcat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/seongparcat.png -------------------------------------------------------------------------------- /public/assets/advertisement/surviving42_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/advertisement/surviving42_1.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint1-cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint1-cut.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint2-cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint2-cut.png -------------------------------------------------------------------------------- /public/assets/donation/donation-paint3-cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/donation/donation-paint3-cut.png -------------------------------------------------------------------------------- /src/components/pages/Mypage/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface IMypageLink { 2 | linkType: string; 3 | linkValue: string; 4 | linkHref: string; 5 | } 6 | -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/babyhyeonkim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/babyhyeonkim.png -------------------------------------------------------------------------------- /public/assets/CharacterWhiteBG/seongparcat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/42-world/42world-Frontend/HEAD/public/assets/CharacterWhiteBG/seongparcat2.png -------------------------------------------------------------------------------- /src/store/category.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'recoil'; 2 | 3 | export const categoryState = atom({ 4 | key: 'categoryState', 5 | default: [], 6 | }); 7 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/utils/articleType.js: -------------------------------------------------------------------------------- 1 | const ARTICLE_TYPE = { 2 | ARTICLE: 1, 3 | COMMENT: 2, 4 | LIKED: 3, 5 | }; 6 | 7 | export default ARTICLE_TYPE; 8 | -------------------------------------------------------------------------------- /src/store/notiModal.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'recoil'; 2 | 3 | export const notiModalState = atom({ 4 | key: 'notiModalState', 5 | default: false, 6 | }); 7 | -------------------------------------------------------------------------------- /src/store/userCurrentPos.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'recoil'; 2 | 3 | export const userCurrentPosState = atom({ 4 | key: 'userCurrentPos', 5 | default: '', 6 | }); 7 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/components/index.ts: -------------------------------------------------------------------------------- 1 | import MypageBoard from './MypageBoard'; 2 | import MyArticleBoard from './MyArticleBoard'; 3 | 4 | export { MyArticleBoard, MypageBoard }; 5 | -------------------------------------------------------------------------------- /src/components/pages/articles/common/styles.jsx: -------------------------------------------------------------------------------- 1 | /** @jsxImportSource @emotion/react */ 2 | 3 | import { css } from '@emotion/react'; 4 | 5 | export const block = css` 6 | margin: 0 0.8rem; 7 | width: 100%; 8 | `; 9 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/styles/MypageBoard.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | 3 | export const mypageArticle = css` 4 | display: flex; 5 | justify-content: space-between; 6 | flex-wrap: wrap; 7 | `; 8 | -------------------------------------------------------------------------------- /src/common/TopNav/styled/Logo.styled.js: -------------------------------------------------------------------------------- 1 | import { Link } from 'react-router-dom'; 2 | import styled from 'styled-components'; 3 | 4 | export const StyledTopNavLogo = styled(Link)` 5 | display: flex; 6 | align-items: center; 7 | `; 8 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/store/mypageCurPageState.ts: -------------------------------------------------------------------------------- 1 | import { atom } from 'recoil'; 2 | 3 | const mypageCurPageState = atom({ 4 | key: 'mypage-curPageState', 5 | default: 1, 6 | }); 7 | 8 | export default mypageCurPageState; 9 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/utils/index.ts: -------------------------------------------------------------------------------- 1 | import ModalPortal from './ModalPortal'; 2 | import getArticleInfo from './getArticleInfo'; 3 | import ARTICLE_TYPE from './articleType'; 4 | 5 | export { ModalPortal, getArticleInfo, ARTICLE_TYPE }; 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[Bug]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 오류 사진 및 설명 11 | 12 | 13 | ## 발생 위치 14 | 15 | 16 | ## 해결시도 17 | -------------------------------------------------------------------------------- /src/network/types/Notification.ts: -------------------------------------------------------------------------------- 1 | export type Notification = { 2 | id: number; 3 | type: 'NEW_COMMENT' | 'FROM_ADMIN'; 4 | content: string; 5 | isRead: boolean; 6 | articleId: number; 7 | createdAt: Date; 8 | updatedAt: Date; 9 | }; 10 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/styles/MyArticleBoardInner.styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { theme } from '@root/styles/theme'; 3 | 4 | export const articleContentWrapper = css` 5 | text-decoration: none; 6 | color: ${theme.black}; 7 | `; 8 | -------------------------------------------------------------------------------- /src/common/TopNav/styled/index.js: -------------------------------------------------------------------------------- 1 | export { StyledProfileImage, StyledUserName } from './Account.styled'; 2 | export { StyledTopNavLogo } from './Logo.styled'; 3 | export { StyledTopNav, TopNavSpace } from './TopNav.styled'; 4 | export { StyledMenuButton } from './MenuItems.styled'; 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 작업할 내용 11 | 12 | ## 해야할 일 13 | - [ ] todo1 14 | - [ ] todo2 15 | - [ ] todo3 16 | -------------------------------------------------------------------------------- /src/common/urls.ts: -------------------------------------------------------------------------------- 1 | const URLs = { 2 | CATEGORY: '/category', 3 | MYPAGE: '/mypage', 4 | WRITING: '/writing', 5 | ARTICLE: '/article', 6 | DONATION: '/donation', 7 | LOGIN: '/login', 8 | AUTH: '/auth', 9 | ERROR: '/error', 10 | }; 11 | 12 | export default URLs; 13 | -------------------------------------------------------------------------------- /src/common/Preview/PreviewArticleItems.jsx: -------------------------------------------------------------------------------- 1 | import PreviewArticleItem from './PreviewArticleItem'; 2 | 3 | const PreviewArticleItems = ({ items }) => { 4 | return
{items && items.map(item => )}
; 5 | }; 6 | 7 | export default PreviewArticleItems; 8 | -------------------------------------------------------------------------------- /craco.config.js: -------------------------------------------------------------------------------- 1 | const CracoAlias = require('craco-alias'); 2 | 3 | module.exports = { 4 | plugins: [ 5 | { 6 | plugin: CracoAlias, 7 | options: { 8 | source: 'tsconfig', 9 | tsConfigPath: 'tsconfig.paths.json', 10 | }, 11 | }, 12 | ], 13 | }; 14 | -------------------------------------------------------------------------------- /tsconfig.paths.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@root/*": ["src/*"], 6 | "@common/*": ["src/common/*"], 7 | "@components/*": ["src/components/*"], 8 | "@network/*": ["src/network/*"], 9 | "@styles/*": ["src/styles"] 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/components/pages/articles/ArticleDetailPage/components/article/ArticleDetailTitle.tsx: -------------------------------------------------------------------------------- 1 | import { StringProps } from '@components/pages/articles/common/types'; 2 | 3 | const ArticleDetailTitle = ({ title }: StringProps) => { 4 | return

{title}

; 5 | }; 6 | 7 | export default ArticleDetailTitle; 8 | -------------------------------------------------------------------------------- /src/network/types/Category.ts: -------------------------------------------------------------------------------- 1 | export type Category = { 2 | id: number; 3 | name: string; 4 | isAnonymous: boolean; 5 | isArticleWritable: boolean; 6 | isArticleReadable: boolean; 7 | isCommentWritable: boolean; 8 | isCommentReadable: boolean; 9 | isReactionable: boolean; 10 | }; 11 | -------------------------------------------------------------------------------- /src/network/types/Pagination.ts: -------------------------------------------------------------------------------- 1 | export type Meta = { 2 | page: number; 3 | take: number; 4 | totalCount: number; 5 | pageCount: number; 6 | hasPreviousPage: Boolean; 7 | hasNextPage: Boolean; 8 | }; 9 | 10 | export interface Pagination { 11 | data: T[]; 12 | meta: Meta; 13 | } 14 | -------------------------------------------------------------------------------- /src/components/pages/Mypage/styles/index.ts: -------------------------------------------------------------------------------- 1 | import StyledMypageButton from './MypageButton.styles'; 2 | 3 | import StyledMypageProfile from './MypageProfile.styles'; 4 | import StyledProfileSection from './ProfileSection.styles'; 5 | 6 | export { StyledMypageButton, StyledMypageProfile, StyledProfileSection }; 7 | -------------------------------------------------------------------------------- /src/common/PageLayout.jsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from 'react-router-dom'; 2 | import TopNav from '@common/TopNav'; 3 | import Footer from '@common/Footer'; 4 | 5 | export const PageLayout = () => { 6 | return ( 7 | <> 8 | 9 | 10 |