From e07a20010ccc26d3ee3cdfd49618aec44431728b Mon Sep 17 00:00:00 2001 From: hanyoung Date: Thu, 25 Jul 2024 11:47:26 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=B8=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=8A=A4=ED=83=80=EC=9D=BC=EB=A7=81=20=EA=B3=A0?= =?UTF-8?q?=EB=8F=84=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Header/NotiModal/NotiList.tsx | 8 +-- .../Header/NotiModal/NotiModal.styled.ts | 43 +++++++++--- .../src/components/Header/NotiModal/index.tsx | 2 +- .../components/Header/NotiModal/notiMocks.ts | 9 ++- .../components/MissionList/MissionItem.tsx | 28 ++++---- .../MissionList/MissionList.styled.ts | 53 +++----------- .../components/common/Badge/Badge.styled.ts | 3 +- .../src/components/common/Badge/index.tsx | 2 +- .../src/components/common/Card/Card.styled.ts | 4 +- frontend/src/pages/MissionListPage.tsx | 70 ++++--------------- 10 files changed, 85 insertions(+), 137 deletions(-) diff --git a/frontend/src/components/Header/NotiModal/NotiList.tsx b/frontend/src/components/Header/NotiModal/NotiList.tsx index 2cbe6c82..9a238df9 100644 --- a/frontend/src/components/Header/NotiModal/NotiList.tsx +++ b/frontend/src/components/Header/NotiModal/NotiList.tsx @@ -14,10 +14,10 @@ export default function NotiList() { return isEmpty ? (
알림이 없습니다.
) : ( - notifications.map(({ id, message }) => ( - - {message} - + notifications.map(({ id, title, message }) => ( + + {title} + {message} )) ); diff --git a/frontend/src/components/Header/NotiModal/NotiModal.styled.ts b/frontend/src/components/Header/NotiModal/NotiModal.styled.ts index d7531ec6..fa8d3591 100644 --- a/frontend/src/components/Header/NotiModal/NotiModal.styled.ts +++ b/frontend/src/components/Header/NotiModal/NotiModal.styled.ts @@ -5,28 +5,31 @@ export const NotiModalContainer = styled.div` position: fixed; top: 5.5rem; right: 17rem; - width: 30rem; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); + box-shadow: + 0 0.6rem 0.9rem rgba(0, 0, 0, 0.12), + 0 1.2rem 1.8rem rgba(0, 0, 0, 0.08); border-radius: 1rem; - padding: 2rem; - background-color: var(--grey-100); + padding: 2.5rem 3.4rem; + background-color: white; `; export const NotiItem = styled.div` + width: 28rem; position: relative; font-size: 1.1rem; margin-bottom: 1rem; - padding: 1rem; - border-radius: 1rem; + padding: 2.3rem 0; + border-bottom: 0.1rem solid var(--grey-100); background-color: white; - box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1); + cursor: pointer; `; -export const NotiTitle = styled.h2` - font-size: 1.5rem; - font-weight: 700; - margin-bottom: 1.5rem; +export const NotiModalTitle = styled.h2` + color: var(--grey-600); + font-size: 1.4rem; + margin-bottom: 1.2rem; + font-weight: 500; `; export const NotiReadBtn = styled.button` @@ -37,3 +40,21 @@ export const NotiReadBtn = styled.button` right: 0; bottom: 0; `; + +export const NotiTitle = styled.div` + font-size: 1.6rem; + font-weight: bold; + margin-bottom: 0.6rem; +`; + +export const NotiMessage = styled.div` + color: var(--grey-500); + font-size: 1.4rem; + font-weight: 500; + + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +`; diff --git a/frontend/src/components/Header/NotiModal/index.tsx b/frontend/src/components/Header/NotiModal/index.tsx index a19af814..d5eefeef 100644 --- a/frontend/src/components/Header/NotiModal/index.tsx +++ b/frontend/src/components/Header/NotiModal/index.tsx @@ -13,7 +13,7 @@ export default function NotiModal({ closeModal }: NotiModalProps) { return ( - 🔔 알림 + 알림 ); diff --git a/frontend/src/components/Header/NotiModal/notiMocks.ts b/frontend/src/components/Header/NotiModal/notiMocks.ts index da755d54..37f86f2c 100644 --- a/frontend/src/components/Header/NotiModal/notiMocks.ts +++ b/frontend/src/components/Header/NotiModal/notiMocks.ts @@ -1,5 +1,6 @@ export interface Notification { id: number; + title: string; message: string; isRead: boolean; } @@ -7,12 +8,16 @@ export interface Notification { export const NOTI_MOCKS: Notification[] = [ { id: 1, - message: '버건디님과 페어 매칭이 완료되었습니다.', + title: '리뷰가 도착했어요!', + message: + '버건디님으로부터 리뷰가 도착했어요. 지금 미션 현황 페이지에서 확인해보세요. 지금 미션 현황 페이지에서 확인해보세요. 지금 미션 현황 페이지에서 확인해보세요.', isRead: false, }, { id: 2, - message: '리브님으로부터 리뷰가 도착했습니다. 지금 미션 현황 페이지에서 확인해보세요.', + title: '리뷰가 도착했어요!', + message: + '리브님으로부터 리뷰가 도착했습니다. 지금 미션 현황 페이지에서 확인해보세요. 지금 미션 현황 페이지에서 확인해보세요. 지금 미션 현황 페이지에서 확인해보세요.', isRead: false, }, ]; diff --git a/frontend/src/components/MissionList/MissionItem.tsx b/frontend/src/components/MissionList/MissionItem.tsx index 493119e0..8b28cb11 100644 --- a/frontend/src/components/MissionList/MissionItem.tsx +++ b/frontend/src/components/MissionList/MissionItem.tsx @@ -1,6 +1,8 @@ import * as S from './MissionList.styled'; import { Link } from 'react-router-dom'; import type { Mission } from '@/types'; +import Card from '../common/Card'; +import Badge from '../common/Badge'; interface MissionItemProps { mission: Mission; @@ -11,21 +13,17 @@ export default function MissionItem({ mission }: MissionItemProps) { return ( - - - - - [미션] {title} - - - 🔥 인기 미션 - ☕️ JAVA - 🔒 리뷰 100% 보장 - - - 무료 - - + + {title} + + + } + /> ); } diff --git a/frontend/src/components/MissionList/MissionList.styled.ts b/frontend/src/components/MissionList/MissionList.styled.ts index 0de3da41..0ebf5de3 100644 --- a/frontend/src/components/MissionList/MissionList.styled.ts +++ b/frontend/src/components/MissionList/MissionList.styled.ts @@ -1,9 +1,12 @@ import styled from 'styled-components'; export const MissionListContainer = styled.div` + display: flex; + flex-direction: column; + gap: 5rem; margin: 0 auto; + margin-bottom: 10rem; width: fit-content; - padding-top: 3rem; `; export const MissionListTitle = styled.h2` @@ -35,51 +38,15 @@ export const MissionThumbnailImg = styled.img` `; export const MissionDescription = styled.div` - padding: 2.2rem; + display: flex; + flex-direction: column; + justify-content: space-between; + height: 100%; `; export const MissionTitle = styled.p` - font-size: 1.8rem; - font-weight: 700; + font-size: 1.6rem; + font-weight: bold; color: black; margin-bottom: 1.7rem; `; - -export const TagWrapper = styled.div` - display: flex; - gap: 0.7rem; -`; - -const BaseTag = styled.div` - text-align: center; - font-size: 1.2rem; - font-weight: 600; - padding: 0.3rem 1rem; - border-radius: 0.5rem; -`; - -export const PopularTag = styled(BaseTag)` - color: #ff850a; - background-color: #fff7de; -`; - -export const BackendTag = styled(BaseTag)` - font-weight: 700; - color: #b07219; - background-color: #faf5f2; -`; - -export const InsuranceTag = styled(BaseTag)` - color: var(--primary-600); - background-color: var(--primary-50); -`; - -export const HorizontalLine = styled.div` - border-top: 1px solid var(--grey-200); - margin: 2.2rem 0; -`; - -export const MissionPrice = styled.div` - font-size: 1.6rem; - font-weight: 700; -`; diff --git a/frontend/src/components/common/Badge/Badge.styled.ts b/frontend/src/components/common/Badge/Badge.styled.ts index b6963367..e81d97f4 100644 --- a/frontend/src/components/common/Badge/Badge.styled.ts +++ b/frontend/src/components/common/Badge/Badge.styled.ts @@ -9,6 +9,7 @@ export const BadgeContainer = styled.div` color: ${({ $fontColor }) => $fontColor}; background-color: ${({ $backgroundColor }) => $backgroundColor}; width: fit-content; - padding: 0.5rem; + padding: 0.4rem 0.8rem; border-radius: 0.4rem; + font-size: 1.2rem; `; diff --git a/frontend/src/components/common/Badge/index.tsx b/frontend/src/components/common/Badge/index.tsx index 7f737d07..6cd5bb32 100644 --- a/frontend/src/components/common/Badge/index.tsx +++ b/frontend/src/components/common/Badge/index.tsx @@ -10,7 +10,7 @@ interface BadgeProps extends HTMLAttributes { export default function Badge({ text, fontColor = 'black', - backgroundColor = 'var(--primary-50)', + backgroundColor = 'var(--primary-100)', }: BadgeProps) { return ( diff --git a/frontend/src/components/common/Card/Card.styled.ts b/frontend/src/components/common/Card/Card.styled.ts index 1fac5d0d..66bcf0a1 100644 --- a/frontend/src/components/common/Card/Card.styled.ts +++ b/frontend/src/components/common/Card/Card.styled.ts @@ -2,8 +2,6 @@ import styled from 'styled-components'; export const CardContainer = styled.div` width: 30rem; - margin: 10rem; - width: fit-content; box-shadow: 0 0.4rem 0.4rem rgba(0, 0, 0, 0.12); border-radius: 0 0 0.8rem 0.8rem; cursor: pointer; @@ -23,5 +21,5 @@ export const Thumbnail = styled.img` export const Content = styled.div` padding: 2.5rem; - height: 21.9rem; + height: 20rem; `; diff --git a/frontend/src/pages/MissionListPage.tsx b/frontend/src/pages/MissionListPage.tsx index 5d4a9c97..eae34ffb 100644 --- a/frontend/src/pages/MissionListPage.tsx +++ b/frontend/src/pages/MissionListPage.tsx @@ -2,70 +2,28 @@ import MissionItem from '@/components/MissionList/MissionItem'; import * as S from '@/components/MissionList/MissionList.styled'; import Carousel from '@/components/Carousel/Carousel'; import useMissions from '@/hooks/useMissions'; +import MyMissionInProgress from '@/components/MyMission/MyMissionInProgress/MyMissionInProgress'; +import getPlaceholderImg from '@/components/common/Card/getPlaceholderImg'; export default function MissionListPage() { const { data: allMissions } = useMissions(); return ( - 미션 풀고 리뷰 받고, Devel Up! - {/** - * 캐러셀 테스트 용으로 만들어본 이미지들입니다. 추후 수정 예정 - */} -
- -
-
- -
- -
- -
+ + +
- - {allMissions.map((mission) => ( - - ))} - + +
+ 새로운 미션에 참여해 보세요! + + {allMissions.map((mission) => ( + + ))} + +
); }