From 1012383fe3c56a93a4b649600a7f31d4d0dc30d5 Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 16:03:49 +0900 Subject: [PATCH 01/32] =?UTF-8?q?feat:=20useLogin=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=ED=9B=85=20=EC=9E=91=EC=84=B1=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/remote/queries/auth/useLogin.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/remote/queries/auth/useLogin.ts diff --git a/src/remote/queries/auth/useLogin.ts b/src/remote/queries/auth/useLogin.ts new file mode 100644 index 00000000..958ca33c --- /dev/null +++ b/src/remote/queries/auth/useLogin.ts @@ -0,0 +1,16 @@ +import { useMutation } from '@tanstack/react-query'; + +import { login } from '@remote/api/requests/auth/auth.post.api'; + +function useLogin() { + return useMutation({ + mutationFn: login, + // eslint-disable-next-line no-console + onSuccess: () => { console.log('요청 성공'); }, + onError: () => { console.error('에러 발생'); }, + // eslint-disable-next-line no-console + onSettled: () => { console.log('결과에 관계 없이 무언가 실행됨'); }, + }); +} + +export default useLogin; From e0b984003159f39e06f07852c1a136da0cc48ddc Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 16:04:48 +0900 Subject: [PATCH 02/32] =?UTF-8?q?feat:=20login=20api=20post=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/remote/api/requests/auth/auth.post.api.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/remote/api/requests/auth/auth.post.api.ts b/src/remote/api/requests/auth/auth.post.api.ts index 493841b8..8332e69c 100644 --- a/src/remote/api/requests/auth/auth.post.api.ts +++ b/src/remote/api/requests/auth/auth.post.api.ts @@ -1,4 +1,4 @@ -import { ISignUp } from '../../types/auth'; +import { ISignIn, ISignUp } from '../../types/auth'; import { postRequest } from '../requests.api'; export const signup = async ({ @@ -10,3 +10,13 @@ export const signup = async ({ return response; }; + +export const login = async ({ + id, password, +}: ISignIn) => { + const response = await postRequest('/member/login', { + id, password, + }); + + return response; +}; From 70016a18ebd7ed158f2a15f3094eba7e321e9639 Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 16:05:28 +0900 Subject: [PATCH 03/32] =?UTF-8?q?test:=20login=20api=20msw=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=84=B1=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mocks/authHandler/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mocks/authHandler/index.ts b/src/mocks/authHandler/index.ts index 0df86ca4..35efe031 100644 --- a/src/mocks/authHandler/index.ts +++ b/src/mocks/authHandler/index.ts @@ -6,4 +6,9 @@ export const authHandlers = [ http.post(`${process.env.NEXT_PUBLIC_BASE_URL}/member/join`, () => { return HttpResponse.json('회원가입 성공!!'); }), + + /* ----- 로그인 api ----- */ + http.post(`${process.env.NEXT_PUBLIC_BASE_URL}/member/login`, () => { + return HttpResponse.json('로그인 성공!!'); + }), ]; From ca2815c7b3fe446f291a992cd8476c1e1a7615cd Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 16:06:56 +0900 Subject: [PATCH 04/32] =?UTF-8?q?feat:=20login=20validation=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=20?= =?UTF-8?q?=EC=BF=BC=EB=A6=AC=20=EC=97=B0=EA=B2=B0=20=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/login/page.tsx | 24 +++++++++++++++++------- src/constants/validationMessage.ts | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index ad889066..a25259ec 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -12,19 +12,28 @@ import Header from '@components/shared/header/Header'; import Spacing from '@components/shared/spacing/Spacing'; import TextField from '@components/shared/text-field/TextField'; import Title from '@components/shared/title/Title'; +import VALIDATION_MESSAGE_MAP from '@constants/validationMessage'; import { ISignIn } from '@remote/api/types/auth'; +import useLogin from '@remote/queries/auth/useLogin'; import styles from './page.module.scss'; const cx = classNames.bind(styles); function LoginPage() { - const { register, handleSubmit } = useForm(); + const { register, handleSubmit, formState: { isValid } } = useForm(); + const { mutate } = useLogin(); - // eslint-disable-next-line @typescript-eslint/require-await - const onSubmit = async () => { - // console.log(data); + const onSubmit = (data: ISignIn) => { + const { + id, password, + } = data; + mutate({ + id, password, + }); }; + + // TODO: api return 값에 따라 error처리 return (
@@ -35,16 +44,17 @@ function LoginPage() { label="아이디" required placeholder="아이디" - {...register('id')} + {...register('id', { required: true })} /> - diff --git a/src/constants/validationMessage.ts b/src/constants/validationMessage.ts index e04d0414..cb499f7a 100644 --- a/src/constants/validationMessage.ts +++ b/src/constants/validationMessage.ts @@ -19,6 +19,7 @@ const VALIDATION_MESSAGE_MAP: { confirmPassword: { message: '비밀번호를 확인해주세요.', }, + failedLogin: { message: '아이디 또는 비밀번호를 확인해주세요.' }, } as const; export default VALIDATION_MESSAGE_MAP; From 383a4782bcd3a24a054a23468a45b45f64271d47 Mon Sep 17 00:00:00 2001 From: wookki Date: Tue, 16 Jan 2024 18:00:27 +0900 Subject: [PATCH 05/32] =?UTF-8?q?assets:=20icon=20svg=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/icons/channel.svg | 5 ++--- public/assets/icons/favorite.svg | 4 ++-- public/assets/icons/filledFavorite.svg | 3 +++ public/assets/icons/filledHome.svg | 3 +++ public/assets/icons/home.svg | 5 ++--- public/assets/icons/location.svg | 3 +++ public/assets/icons/map.svg | 11 ----------- public/assets/icons/profile.svg | 5 ++--- 8 files changed, 17 insertions(+), 22 deletions(-) create mode 100644 public/assets/icons/filledFavorite.svg create mode 100644 public/assets/icons/filledHome.svg create mode 100644 public/assets/icons/location.svg delete mode 100644 public/assets/icons/map.svg diff --git a/public/assets/icons/channel.svg b/public/assets/icons/channel.svg index 39d109c6..71ae581d 100644 --- a/public/assets/icons/channel.svg +++ b/public/assets/icons/channel.svg @@ -1,4 +1,3 @@ - - - + + diff --git a/public/assets/icons/favorite.svg b/public/assets/icons/favorite.svg index f5b5cab7..3c4e8058 100644 --- a/public/assets/icons/favorite.svg +++ b/public/assets/icons/favorite.svg @@ -1,3 +1,3 @@ - - + + diff --git a/public/assets/icons/filledFavorite.svg b/public/assets/icons/filledFavorite.svg new file mode 100644 index 00000000..7637e9a6 --- /dev/null +++ b/public/assets/icons/filledFavorite.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/filledHome.svg b/public/assets/icons/filledHome.svg new file mode 100644 index 00000000..920845b0 --- /dev/null +++ b/public/assets/icons/filledHome.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/home.svg b/public/assets/icons/home.svg index 61609256..33bfa2c5 100644 --- a/public/assets/icons/home.svg +++ b/public/assets/icons/home.svg @@ -1,4 +1,3 @@ - - - + + diff --git a/public/assets/icons/location.svg b/public/assets/icons/location.svg new file mode 100644 index 00000000..f4a98532 --- /dev/null +++ b/public/assets/icons/location.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/map.svg b/public/assets/icons/map.svg deleted file mode 100644 index ba01ae04..00000000 --- a/public/assets/icons/map.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/public/assets/icons/profile.svg b/public/assets/icons/profile.svg index 16f9b485..96b6259d 100644 --- a/public/assets/icons/profile.svg +++ b/public/assets/icons/profile.svg @@ -1,4 +1,3 @@ - - - + + From f9c9eccf41dd31e757ae31e878baea8bd065048e Mon Sep 17 00:00:00 2001 From: wookki Date: Tue, 16 Jan 2024 18:09:21 +0900 Subject: [PATCH 06/32] =?UTF-8?q?feat:=20button-nav=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/shared/bottom-nav/BottomNav.module.scss | 1 + src/components/shared/bottom-nav/BottomNav.tsx | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/shared/bottom-nav/BottomNav.module.scss b/src/components/shared/bottom-nav/BottomNav.module.scss index 1828c956..e5068cd2 100644 --- a/src/components/shared/bottom-nav/BottomNav.module.scss +++ b/src/components/shared/bottom-nav/BottomNav.module.scss @@ -16,6 +16,7 @@ flex-direction: column; align-items: center; justify-content: space-between; + height: 42px; } } } diff --git a/src/components/shared/bottom-nav/BottomNav.tsx b/src/components/shared/bottom-nav/BottomNav.tsx index 3214f8b0..e22e7289 100644 --- a/src/components/shared/bottom-nav/BottomNav.tsx +++ b/src/components/shared/bottom-nav/BottomNav.tsx @@ -6,6 +6,8 @@ import { usePathname } from 'next/navigation'; import Channel from '@components/icons/Channel'; import Favorite from '@components/icons/Favorite'; +import FilledFavorite from '@components/icons/FilledFavorite'; +import FilledHome from '@components/icons/FilledHome'; import Home from '@components/icons/Home'; import Map from '@components/icons/Map'; import Profile from '@components/icons/Profile'; @@ -31,13 +33,13 @@ function BottomNav() {
  • - + {filteredPathName.startsWith('favorite') ? : } 즐겨찾기
  • - + {filteredPathName === '' ? : }
  • From f6dc404457acb85e58bef9c84e25e6831a60a3b1 Mon Sep 17 00:00:00 2001 From: wookki Date: Tue, 16 Jan 2024 18:09:43 +0900 Subject: [PATCH 07/32] =?UTF-8?q?feat:=20icon=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/icons/Channel.tsx | 10 +++++----- src/components/icons/Favorite.tsx | 12 +++++------- src/components/icons/FilledFavorite.tsx | 15 +++++++++++++++ src/components/icons/FilledHome.tsx | 15 +++++++++++++++ src/components/icons/Home.tsx | 13 +++++-------- src/components/icons/Map.tsx | 18 ++++++------------ src/components/icons/Profile.tsx | 10 +++++----- 7 files changed, 56 insertions(+), 37 deletions(-) create mode 100644 src/components/icons/FilledFavorite.tsx create mode 100644 src/components/icons/FilledHome.tsx diff --git a/src/components/icons/Channel.tsx b/src/components/icons/Channel.tsx index 93523524..25669aa7 100644 --- a/src/components/icons/Channel.tsx +++ b/src/components/icons/Channel.tsx @@ -1,15 +1,15 @@ import { Colors, colors } from '@styles/colorPalette'; interface ChannelProps { - size?: number + width?: number + height?: number color?: Colors } -function Channel({ size = 24, color = 'black' }: ChannelProps) { +function Channel({ width = 19, height = 18, color = 'black' }: ChannelProps) { return ( - - - + + ); diff --git a/src/components/icons/Favorite.tsx b/src/components/icons/Favorite.tsx index 53750ec5..3589c7f9 100644 --- a/src/components/icons/Favorite.tsx +++ b/src/components/icons/Favorite.tsx @@ -1,14 +1,12 @@ -import { Colors, colors } from '@styles/colorPalette'; - interface FavoriteProps { - size?: number - color: Colors + width?: number + height?: number } -function Favorite({ size = 24, color = 'black' }: FavoriteProps) { +function Favorite({ width = 21, height = 19 }: FavoriteProps) { return ( - - + + ); diff --git a/src/components/icons/FilledFavorite.tsx b/src/components/icons/FilledFavorite.tsx new file mode 100644 index 00000000..ecad9ad3 --- /dev/null +++ b/src/components/icons/FilledFavorite.tsx @@ -0,0 +1,15 @@ +interface FilledFavoriteProps { + width?: number + height?: number +} + +function FilledFavorite({ width = 21, height = 19 }: FilledFavoriteProps) { + return ( + + + + + ); +} + +export default FilledFavorite; diff --git a/src/components/icons/FilledHome.tsx b/src/components/icons/FilledHome.tsx new file mode 100644 index 00000000..0db1c178 --- /dev/null +++ b/src/components/icons/FilledHome.tsx @@ -0,0 +1,15 @@ +interface HomeProps { + width?: number + height?: number +} + +function FilledHome({ width = 16, height = 20 }: HomeProps) { + return ( + + + + + ); +} + +export default FilledHome; diff --git a/src/components/icons/Home.tsx b/src/components/icons/Home.tsx index 8cab874b..543fc88b 100644 --- a/src/components/icons/Home.tsx +++ b/src/components/icons/Home.tsx @@ -1,15 +1,12 @@ -import { Colors, colors } from '@/styles/colorPalette'; - interface HomeProps { - size?: number - color: Colors + width?: number + height?: number } -function Home({ size = 24, color }: HomeProps) { +function Home({ width = 16, height = 20 }: HomeProps) { return ( - - - + + ); diff --git a/src/components/icons/Map.tsx b/src/components/icons/Map.tsx index 74389445..442997fb 100644 --- a/src/components/icons/Map.tsx +++ b/src/components/icons/Map.tsx @@ -1,23 +1,17 @@ import { Colors, colors } from '@styles/colorPalette'; interface MapProps { - size?: number + width?: number + height?: number color?: Colors } -function Map({ size = 24, color = 'black' }: MapProps) { +function Map({ width = 17, height = 20, color = 'black' }: MapProps) { return ( - - - - - - - - - - + + + ); } diff --git a/src/components/icons/Profile.tsx b/src/components/icons/Profile.tsx index c1d7cd8c..6ea76956 100644 --- a/src/components/icons/Profile.tsx +++ b/src/components/icons/Profile.tsx @@ -1,15 +1,15 @@ import { Colors, colors } from '@styles/colorPalette'; interface ProfileProps { - size?: number + width?: number + height?: number color?: Colors } -function Profile({ size = 24, color = 'black' }: ProfileProps) { +function Profile({ width = 17, height = 16, color = 'black' }: ProfileProps) { return ( - - - + + ); From 29143192d07ff318fc872395d4d1beabbbe3819a Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 18:23:14 +0900 Subject: [PATCH 08/32] =?UTF-8?q?asset:=20heart,=20search=20svg=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=B3=80=EA=B2=BD=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/icons/heart.svg | 3 +++ public/assets/icons/search.svg | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 public/assets/icons/heart.svg diff --git a/public/assets/icons/heart.svg b/public/assets/icons/heart.svg new file mode 100644 index 00000000..2944da5e --- /dev/null +++ b/public/assets/icons/heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/search.svg b/public/assets/icons/search.svg index a69090da..44315c64 100644 --- a/public/assets/icons/search.svg +++ b/public/assets/icons/search.svg @@ -1,3 +1,3 @@ - - + + From 3a9ccfcc6e2be8937e7ced4816ffc283cba663d2 Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 18:24:47 +0900 Subject: [PATCH 09/32] =?UTF-8?q?design:=20Logo=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/icons/Logo.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/icons/Logo.tsx b/src/components/icons/Logo.tsx index 2fae0684..3f2e3cdc 100644 --- a/src/components/icons/Logo.tsx +++ b/src/components/icons/Logo.tsx @@ -12,8 +12,9 @@ function Logo({ }: LogoProps) { return ( - + + ); } From cf718832699c4662189e65647b33d54f2a694e04 Mon Sep 17 00:00:00 2001 From: seoye0ng Date: Tue, 16 Jan 2024 18:25:55 +0900 Subject: [PATCH 10/32] =?UTF-8?q?design:=20Share,=20BackArrow=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20?= =?UTF-8?q?=ED=81=AC=EA=B8=B0=20=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/icons/BackArrow.tsx | 2 +- src/components/icons/Share.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/icons/BackArrow.tsx b/src/components/icons/BackArrow.tsx index cf002ab5..2a4f5d23 100644 --- a/src/components/icons/BackArrow.tsx +++ b/src/components/icons/BackArrow.tsx @@ -8,7 +8,7 @@ interface BackProps { } function BackArrow({ - width = 9, height = 16, color = 'black', onClick, + width = 7, height = 14, color = 'black', onClick, }:BackProps) { return ( diff --git a/src/components/icons/Share.tsx b/src/components/icons/Share.tsx index 5997d0c7..08f171f3 100644 --- a/src/components/icons/Share.tsx +++ b/src/components/icons/Share.tsx @@ -8,7 +8,7 @@ interface ShareProps { } function Share({ - width = 18, height = 20, color = 'black', onClick, + width = 16, height = 18, color = 'black', onClick, }: ShareProps) { return ( From e6316264858df8b7b572aa8f8bb1a975ccb7c712 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 18:58:24 +0900 Subject: [PATCH 11/32] =?UTF-8?q?design:=20Search=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EB=B3=80=EA=B2=BD=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/icons/Search.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/icons/Search.tsx b/src/components/icons/Search.tsx index f2bd924e..f241c80b 100644 --- a/src/components/icons/Search.tsx +++ b/src/components/icons/Search.tsx @@ -5,11 +5,13 @@ interface SearchProps { color?: Colors } -function Search({ size = 17, color = 'gray300' }: SearchProps) { +function Search({ size = 18, color = 'black' }: SearchProps) { return ( - - + + + + ); } From 2c146e7c5d4f4ee99576ea8922156fabb1806cff Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 18:59:41 +0900 Subject: [PATCH 12/32] =?UTF-8?q?design:=20Header=20CSS=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/header/Header.module.scss | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/components/shared/header/Header.module.scss b/src/components/shared/header/Header.module.scss index e3ba8b3d..50a82c81 100644 --- a/src/components/shared/header/Header.module.scss +++ b/src/components/shared/header/Header.module.scss @@ -5,7 +5,7 @@ $white: var(--white); top: 0; box-sizing: border-box; width: 100%; - height: 48px; + height: 44px; background-color: $white; &.transparent { @@ -29,21 +29,26 @@ $white: var(--white); } .container { + align-items: center; justify-content: space-between; width: inherit; height: inherit; margin: 0; + ul.left { + & > li:first-child { + margin-right: 12.5px; + } + } + li.logo { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -45%); + height: fit-content; + transform: translateY(2px); } ul.right { display: flex; - gap: 18px; + gap: 13px; align-items: center; } @@ -51,6 +56,7 @@ $white: var(--white); margin-left: auto; a { + transform: translateY(2px); text-decoration: none; } } From 80b57f8a4e3479680301e38bef7301d9ce9efe42 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 19:01:07 +0900 Subject: [PATCH 13/32] =?UTF-8?q?test:=20Header=20storybook=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/shared/header/Header.stories.tsx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/components/shared/header/Header.stories.tsx b/src/components/shared/header/Header.stories.tsx index 13f00e80..57ca132b 100644 --- a/src/components/shared/header/Header.stories.tsx +++ b/src/components/shared/header/Header.stories.tsx @@ -7,13 +7,11 @@ const meta = { component: Header, tags: ['autodocs'], args: { - isLogin: false, displayLogo: true, isTransparent: false, displayRightIcon: false, }, argTypes: { - isLogin: { control: 'boolean' }, displayLogo: { control: 'boolean' }, isTransparent: { control: 'boolean' }, displayRightIcon: { control: 'boolean' }, @@ -23,18 +21,8 @@ const meta = { export default meta; type Story = StoryObj; -export const LoggedIn:Story = { +export const MainPage:Story = { args: { - isLogin: true, - displayLogo: true, - isTransparent: false, - displayRightIcon: false, - }, -}; - -export const LoggedOut:Story = { - args: { - isLogin: false, displayLogo: true, isTransparent: false, displayRightIcon: false, From 0a82e755d7227ac7610c8ddd8b5b167b7d570e88 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 19:02:50 +0900 Subject: [PATCH 14/32] =?UTF-8?q?design:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/shared/header/Header.tsx | 6 ++-- .../shared/header/headerItems/LeftIcon.tsx | 17 ++++++++--- .../shared/header/headerItems/RightIcon.tsx | 29 ++++++++++++------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/components/shared/header/Header.tsx b/src/components/shared/header/Header.tsx index dd732dfe..04734f22 100644 --- a/src/components/shared/header/Header.tsx +++ b/src/components/shared/header/Header.tsx @@ -7,18 +7,16 @@ import RightIcon from './headerItems/RightIcon'; import { HeaderProps } from './types/headerType'; export default function Header({ - isLogin = false, - displayLogo = true, isTransparent = false, displayRightIcon = false, + displayLogo = false, isTransparent = false, displayRightIcon = true, }:HeaderProps) { const cx = classNames.bind(styles); return (
      - {!displayLogo && } + {!displayLogo && } {displayLogo && } diff --git a/src/components/shared/header/headerItems/LeftIcon.tsx b/src/components/shared/header/headerItems/LeftIcon.tsx index a3df38c7..b69ed396 100644 --- a/src/components/shared/header/headerItems/LeftIcon.tsx +++ b/src/components/shared/header/headerItems/LeftIcon.tsx @@ -1,14 +1,23 @@ import BackArrow from '@components/icons/BackArrow'; +import Text from '@components/shared/text/Text'; interface LeftIconProps { className: string; + displayRightIcon?: boolean; } -function LeftIcon({ className }: LeftIconProps) { +function LeftIcon({ className, displayRightIcon }: LeftIconProps) { return ( -
    • - -
    • +
        +
      • + +
      • + {displayRightIcon && ( +
      • + +
      • + )} +
      ); } export default LeftIcon; diff --git a/src/components/shared/header/headerItems/RightIcon.tsx b/src/components/shared/header/headerItems/RightIcon.tsx index cdc80987..3a0a0c46 100644 --- a/src/components/shared/header/headerItems/RightIcon.tsx +++ b/src/components/shared/header/headerItems/RightIcon.tsx @@ -1,28 +1,33 @@ +'use client'; + +import { useState } from 'react'; + import Link from 'next/link'; +import FillHeart from '@components/icons/FilldHeart'; import Heart from '@components/icons/Heart'; +import Search from '@components/icons/Search'; import Share from '@components/icons/Share'; -import Text from '@shared/text/Text'; import { RightIconProps } from '../types/headerType'; function RightIcon({ className, - isLogin, displayLogo, displayRightIcon, }: RightIconProps) { - // TODO: 로그아웃 + const [isSaved, setIsSaved] = useState(false); + + const handleHeartClick = () => { + setIsSaved((prev) => { return !prev; }); + }; + if (displayLogo) { return (
    • - {isLogin - ? (로그아웃) - : ( - - 로그인 - - )} + + +
    • ); } @@ -31,7 +36,9 @@ function RightIcon({ return (
      • - + {isSaved + ? + : }
      • From aff1e5ccec977560431f60102b0ef86104170cbf Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 19:03:11 +0900 Subject: [PATCH 15/32] =?UTF-8?q?asset:=20heart=20svg=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/icons/filldheart.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 public/assets/icons/filldheart.svg diff --git a/public/assets/icons/filldheart.svg b/public/assets/icons/filldheart.svg new file mode 100644 index 00000000..8a75c684 --- /dev/null +++ b/public/assets/icons/filldheart.svg @@ -0,0 +1,3 @@ + + + From cd84f0c827a22f5dac5d02b3f7c4dcf23ba66237 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 19:04:13 +0900 Subject: [PATCH 16/32] =?UTF-8?q?fix:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20heart=20icon=20=ED=81=B4=EB=A6=AD=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/icons/FilldHeart.tsx | 19 +++++++++++++++++++ src/components/icons/Heart.tsx | 22 ++++++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) create mode 100644 src/components/icons/FilldHeart.tsx diff --git a/src/components/icons/FilldHeart.tsx b/src/components/icons/FilldHeart.tsx new file mode 100644 index 00000000..0b4c9793 --- /dev/null +++ b/src/components/icons/FilldHeart.tsx @@ -0,0 +1,19 @@ +import { colors } from '@styles/colorPalette'; + +interface HeartProps { + width?: number + height?:number + onClick?:()=>void +} + +function Heart({ + width = 19, height = 16.5, onClick, +}: HeartProps) { + return ( + + + + ); +} + +export default Heart; diff --git a/src/components/icons/Heart.tsx b/src/components/icons/Heart.tsx index 51a87487..8e22d3f8 100644 --- a/src/components/icons/Heart.tsx +++ b/src/components/icons/Heart.tsx @@ -1,28 +1,18 @@ -'use client'; - -import { useState } from 'react'; - import { Colors, colors } from '@styles/colorPalette'; interface HeartProps { - width: number - height:number + width?: number + height?:number color?: Colors - changeColor?: Colors + onClick?:() => void } function Heart({ - width, height, color = 'gray400', changeColor = 'pink', + width = 19, height = 16.5, color = 'black', onClick, }: HeartProps) { - const [isClicked, setIsClicked] = useState(false); - - const handleHeartClick = () => { - setIsClicked((prev) => { return !prev; }); - }; - return ( - - + + ); } From 641d5b92ad9e4900e56c611e25113d237b52804c Mon Sep 17 00:00:00 2001 From: seoyeong Date: Tue, 16 Jan 2024 19:10:55 +0900 Subject: [PATCH 17/32] =?UTF-8?q?chore:=20build=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/shared/product-article/ProductArticle.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/shared/product-article/ProductArticle.tsx b/src/components/shared/product-article/ProductArticle.tsx index c13f4ff3..08227a6f 100644 --- a/src/components/shared/product-article/ProductArticle.tsx +++ b/src/components/shared/product-article/ProductArticle.tsx @@ -41,7 +41,7 @@ function ProductArticle({ isRow = false, itemData }:ProductArticleProps) { {itemData.name}
        {itemData.category} - +
        From 49002807ecacb410359ceb9b7227d4a2e1b288fe Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 17:24:50 +0900 Subject: [PATCH 18/32] =?UTF-8?q?assets:=20=EB=A1=9C=EB=94=A9=EC=A4=91=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/loading.png | Bin 0 -> 34215 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/assets/loading.png diff --git a/public/assets/loading.png b/public/assets/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..6841d1be644ec894cf0941d861bbe4a23d0c44c1 GIT binary patch literal 34215 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 LNkvXXu0mjffdnpM literal 0 HcmV?d00001 From a913b399cc4ae7b4e55b2deaac205b236078e342 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 17:25:06 +0900 Subject: [PATCH 19/32] =?UTF-8?q?feat:=20Loading=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../details/Loading/Loading.module.scss | 12 ++++++++++ src/components/details/Loading/Loading.tsx | 23 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/components/details/Loading/Loading.module.scss create mode 100644 src/components/details/Loading/Loading.tsx diff --git a/src/components/details/Loading/Loading.module.scss b/src/components/details/Loading/Loading.module.scss new file mode 100644 index 00000000..5952a6bf --- /dev/null +++ b/src/components/details/Loading/Loading.module.scss @@ -0,0 +1,12 @@ +.loadingContainer { + img { + display: block; + margin: 0 auto; + } + + span { + display: block; + width: fit-content; + margin: 0 auto; + } +} diff --git a/src/components/details/Loading/Loading.tsx b/src/components/details/Loading/Loading.tsx new file mode 100644 index 00000000..5d79d172 --- /dev/null +++ b/src/components/details/Loading/Loading.tsx @@ -0,0 +1,23 @@ +import classNames from 'classnames/bind'; +import Image from 'next/image'; + +import Spacing from '@shared/spacing/Spacing'; +import Text from '@shared/text/Text'; + +import styles from './Loading.module.scss'; + +const cx = classNames.bind(styles); + +function Loading() { + return ( +
        + + 로딩 중.. + + 잠시만 기다려 주세요. + 해당 페이지로 이동 중입니다. +
        + ); +} + +export default Loading; From 4ba7d3ec88a5d889106f6449576277f543e1c027 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 17:25:31 +0900 Subject: [PATCH 20/32] =?UTF-8?q?test:=20Loading=20storybook=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../details/Loading/Loading.stories.tsx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/components/details/Loading/Loading.stories.tsx diff --git a/src/components/details/Loading/Loading.stories.tsx b/src/components/details/Loading/Loading.stories.tsx new file mode 100644 index 00000000..6a91c663 --- /dev/null +++ b/src/components/details/Loading/Loading.stories.tsx @@ -0,0 +1,22 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import Loading from './Loading'; + +const meta = { + title: 'details/Loading', + component: Loading, + parameters: { + }, + tags: ['autodocs'], + argTypes: { + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const defaultComponent: Story = { + args: { + + }, +}; From f9df0e73edabc75ee343efb61ab5b6989c3590ba Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 17:28:26 +0900 Subject: [PATCH 21/32] =?UTF-8?q?chore:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DetailsLoading.module.scss} | 0 .../DetailsLoading.stories.tsx} | 8 ++++---- .../Loading.tsx => details-loading/DetailsLoading.tsx} | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) rename src/components/details/{Loading/Loading.module.scss => details-loading/DetailsLoading.module.scss} (100%) rename src/components/details/{Loading/Loading.stories.tsx => details-loading/DetailsLoading.stories.tsx} (62%) rename src/components/details/{Loading/Loading.tsx => details-loading/DetailsLoading.tsx} (71%) diff --git a/src/components/details/Loading/Loading.module.scss b/src/components/details/details-loading/DetailsLoading.module.scss similarity index 100% rename from src/components/details/Loading/Loading.module.scss rename to src/components/details/details-loading/DetailsLoading.module.scss diff --git a/src/components/details/Loading/Loading.stories.tsx b/src/components/details/details-loading/DetailsLoading.stories.tsx similarity index 62% rename from src/components/details/Loading/Loading.stories.tsx rename to src/components/details/details-loading/DetailsLoading.stories.tsx index 6a91c663..bf105d58 100644 --- a/src/components/details/Loading/Loading.stories.tsx +++ b/src/components/details/details-loading/DetailsLoading.stories.tsx @@ -1,16 +1,16 @@ import type { Meta, StoryObj } from '@storybook/react'; -import Loading from './Loading'; +import DetailsLoading from './DetailsLoading'; const meta = { - title: 'details/Loading', - component: Loading, + title: 'details/DetailsLoading', + component: DetailsLoading, parameters: { }, tags: ['autodocs'], argTypes: { }, -} satisfies Meta; +} satisfies Meta; export default meta; type Story = StoryObj; diff --git a/src/components/details/Loading/Loading.tsx b/src/components/details/details-loading/DetailsLoading.tsx similarity index 71% rename from src/components/details/Loading/Loading.tsx rename to src/components/details/details-loading/DetailsLoading.tsx index 5d79d172..6be85d91 100644 --- a/src/components/details/Loading/Loading.tsx +++ b/src/components/details/details-loading/DetailsLoading.tsx @@ -4,15 +4,15 @@ import Image from 'next/image'; import Spacing from '@shared/spacing/Spacing'; import Text from '@shared/text/Text'; -import styles from './Loading.module.scss'; +import styles from './DetailsLoading.module.scss'; const cx = classNames.bind(styles); -function Loading() { +function DetailsLoading() { return (
        - 로딩 중.. + 로딩 중.. 잠시만 기다려 주세요. 해당 페이지로 이동 중입니다. @@ -20,4 +20,4 @@ function Loading() { ); } -export default Loading; +export default DetailsLoading; From 2f10fcf59b5531b1979b72a44c3ca435b96f4ae3 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 20:40:33 +0900 Subject: [PATCH 22/32] =?UTF-8?q?assets:=20Expand=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EC=BD=98=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/icons/expand.svg | 3 +++ src/components/icons/Expand.tsx | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 public/assets/icons/expand.svg create mode 100644 src/components/icons/Expand.tsx diff --git a/public/assets/icons/expand.svg b/public/assets/icons/expand.svg new file mode 100644 index 00000000..3ca34000 --- /dev/null +++ b/public/assets/icons/expand.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/components/icons/Expand.tsx b/src/components/icons/Expand.tsx new file mode 100644 index 00000000..d778f46f --- /dev/null +++ b/src/components/icons/Expand.tsx @@ -0,0 +1,21 @@ +import { Colors, colors } from '@styles/colorPalette'; + +interface ExpandProps { + width?: number + height?: number + isRotate: boolean + color?: Colors +} + +function Expand({ + width = 10, height = 6, color = 'black', isRotate, +}: ExpandProps) { + return ( + + + + + ); +} + +export default Expand; From bdf7c36bb2bc6c80de71302d8be57363f0a1c434 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 20:41:25 +0900 Subject: [PATCH 23/32] =?UTF-8?q?feat:=20Dropdown=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/dropdown/Dropdown.module.scss | 56 +++++++++++++++ src/components/shared/dropdown/Dropdown.tsx | 70 +++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 src/components/shared/dropdown/Dropdown.module.scss create mode 100644 src/components/shared/dropdown/Dropdown.tsx diff --git a/src/components/shared/dropdown/Dropdown.module.scss b/src/components/shared/dropdown/Dropdown.module.scss new file mode 100644 index 00000000..a3f06a1c --- /dev/null +++ b/src/components/shared/dropdown/Dropdown.module.scss @@ -0,0 +1,56 @@ +.container { + position: relative; + + &.favorite { + width: 80px; + } + + .selectedValue { + display: flex; + align-items: center; + justify-content: space-between; + + &.favorite { + width: 80px; + padding: 4px 4px 4px 8px; + border-radius: 8px; + background-color: var(--tertiary-400); + } + } + + .menu { + position: absolute; + z-index: 3; + top: 34px; + width: 80px; + border: 1px solid var(--tertiary-100); + border-radius: 8px; + + &.favorite { + background-color: var(--tertiary-400); + color: var(--tertiary-200); + } + + .item { + &.favorite { + padding: 4px 8px; + border-bottom: 1px solid var(--tertiary-100); + font-size: 14px; + } + + &:last-child { + border: none; + } + } + + label { + &.favorite { + font-size: inherit; + } + } + + .input[type="radio"] { + display: none; + } + } +} diff --git a/src/components/shared/dropdown/Dropdown.tsx b/src/components/shared/dropdown/Dropdown.tsx new file mode 100644 index 00000000..6f7ee75c --- /dev/null +++ b/src/components/shared/dropdown/Dropdown.tsx @@ -0,0 +1,70 @@ +'use client'; + +import { InputHTMLAttributes, forwardRef, useState } from 'react'; + +import classNames from 'classnames/bind'; + +import useOutsideClick from '@/hooks/useOutsideClick'; +import Expand from '@components/icons/Expand'; +import Text from '@shared/text/Text'; + +import styles from './Dropdown.module.scss'; + +const cx = classNames.bind(styles); + +interface Option { + label: string + value: string | number | undefined +} + +interface DropdownProps extends InputHTMLAttributes { + options: Option[] + label: string | number + value: string | number + type: 'favorite' +} + +const Dropdown = forwardRef(({ + label, + type, + options, + value, + ...props +}, ref) => { + const [isOpen, setIsOpen] = useState(false); + + const openDropdownMenu = () => { + setIsOpen((prev) => { return !prev; }); + }; + + const closeDropdownMenu = () => { + setIsOpen(false); + }; + + const containerRef = useOutsideClick(closeDropdownMenu); + + return ( +
        + + {isOpen && ( +
          + {options.map((option) => { + return ( +
        • + + +
        • + ); + })} +
        + )} +
        + ); +}); + +export default Dropdown; From b8d17d649150af9f77b79a9e37ca8083ab776617 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 20:41:44 +0900 Subject: [PATCH 24/32] =?UTF-8?q?test:=20Dropdown=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=8A=A4=ED=86=A0=EB=A6=AC=EB=B6=81=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/dropdown/Dropdown.stories.tsx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/components/shared/dropdown/Dropdown.stories.tsx diff --git a/src/components/shared/dropdown/Dropdown.stories.tsx b/src/components/shared/dropdown/Dropdown.stories.tsx new file mode 100644 index 00000000..f0065d4a --- /dev/null +++ b/src/components/shared/dropdown/Dropdown.stories.tsx @@ -0,0 +1,29 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import Dropdown from './Dropdown'; + +const meta = { + title: 'Shared/Dropdown', + component: Dropdown, + tags: ['autodocs'], + argTypes: { + options: { + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const YoutubeVideo: Story = { + args: { + type: 'favorite', + label: '최신순', + options: [ + { label: '최신순', value: 'latest' }, + { label: '오래된순', value: 'oldest' }, + ], + placeholder: '최신순', + value: 'latest', + }, +}; From c23ad2519dd7e53f5c23a1e9b3fa4448db879865 Mon Sep 17 00:00:00 2001 From: wookki Date: Wed, 17 Jan 2024 20:46:23 +0900 Subject: [PATCH 25/32] =?UTF-8?q?design:=20=ED=8C=94=EB=A0=88=ED=8A=B8=20?= =?UTF-8?q?=EC=83=89=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/globals.css | 3 +++ src/components/shared/dropdown/Dropdown.module.scss | 6 +++--- src/components/shared/dropdown/Dropdown.tsx | 4 ++-- src/styles/colorPalette.ts | 3 +++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/app/globals.css b/src/app/globals.css index 67437e92..aeac30fb 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -8,6 +8,9 @@ --gray-300: #72777A; --gray-400: #404446; --tertiary: #7A7A7A; + --tertiary-100: #EAEAEA; + --tertiary-200: #F6F6F6; + --tertiary-400: #7C7A7A; --black: #090A0A; --white: #FFF; --white-100: #F3F5F8; diff --git a/src/components/shared/dropdown/Dropdown.module.scss b/src/components/shared/dropdown/Dropdown.module.scss index a3f06a1c..aba14c71 100644 --- a/src/components/shared/dropdown/Dropdown.module.scss +++ b/src/components/shared/dropdown/Dropdown.module.scss @@ -14,7 +14,7 @@ width: 80px; padding: 4px 4px 4px 8px; border-radius: 8px; - background-color: var(--tertiary-400); + background-color: var(--tertiary-200); } } @@ -27,8 +27,8 @@ border-radius: 8px; &.favorite { - background-color: var(--tertiary-400); - color: var(--tertiary-200); + background-color: var(--tertiary-200); + color: var(--tertiary-400); } .item { diff --git a/src/components/shared/dropdown/Dropdown.tsx b/src/components/shared/dropdown/Dropdown.tsx index 6f7ee75c..9d31bb72 100644 --- a/src/components/shared/dropdown/Dropdown.tsx +++ b/src/components/shared/dropdown/Dropdown.tsx @@ -46,8 +46,8 @@ const Dropdown = forwardRef(({ return (
        {isOpen && (
          diff --git a/src/styles/colorPalette.ts b/src/styles/colorPalette.ts index 50001ed7..bebcc6e9 100644 --- a/src/styles/colorPalette.ts +++ b/src/styles/colorPalette.ts @@ -8,6 +8,9 @@ export const colors = { gray300: 'var(--gray-300)', gray400: 'var(--gray-400)', tertiary: 'var(--tertiary)', + tertiary100: 'var(--tertiary-100)', + tertiary200: 'var(--tertiary-200)', + tertiary400: 'var(--tertiary-400)', black: 'var(--black)', white: 'var(--white)', white100: 'var(--white-100)', From 4b9603606541baa11893e2d88e822a3e2226573b Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:02:04 +0900 Subject: [PATCH 26/32] =?UTF-8?q?rename:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20heart=20icon=20=ED=8C=8C=EC=9D=BC=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/icons/{filldheart.svg => filledHeart.svg} | 0 src/components/icons/{FilldHeart.tsx => FilledHeart.tsx} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename public/assets/icons/{filldheart.svg => filledHeart.svg} (100%) rename src/components/icons/{FilldHeart.tsx => FilledHeart.tsx} (100%) diff --git a/public/assets/icons/filldheart.svg b/public/assets/icons/filledHeart.svg similarity index 100% rename from public/assets/icons/filldheart.svg rename to public/assets/icons/filledHeart.svg diff --git a/src/components/icons/FilldHeart.tsx b/src/components/icons/FilledHeart.tsx similarity index 100% rename from src/components/icons/FilldHeart.tsx rename to src/components/icons/FilledHeart.tsx From a1fbcaab1f9a26c20d133e6575c0b2e5c65dc7d4 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:03:05 +0900 Subject: [PATCH 27/32] =?UTF-8?q?feat:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20type=20=EB=B3=80=EA=B2=BD=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/header/types/headerType.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/components/shared/header/types/headerType.ts b/src/components/shared/header/types/headerType.ts index e2af96b0..9e06c145 100644 --- a/src/components/shared/header/types/headerType.ts +++ b/src/components/shared/header/types/headerType.ts @@ -1,15 +1,17 @@ -interface CommonProps { - isLogin?: boolean; - displayLogo?: boolean; - displayRightIcon?: boolean; +interface LeftIconProps { + className?: string; + children?: React.ReactNode; + isDisplayLogo?:boolean } - -interface RightIconProps extends CommonProps { +interface RightIconProps { className?: string; + displayRightIconType?:string; + } -interface HeaderProps extends CommonProps { +interface HeaderProps extends LeftIconProps { isTransparent?: boolean; + displayRightIconType?:string; } -export type { HeaderProps, RightIconProps }; +export type { HeaderProps, LeftIconProps, RightIconProps }; From 28540e1847d76c71e5584a017f54720d7795c893 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:04:12 +0900 Subject: [PATCH 28/32] =?UTF-8?q?feat:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/header/Header.module.scss | 3 ++- src/components/shared/header/Header.tsx | 11 ++++----- .../shared/header/headerItems/LeftIcon.tsx | 24 +++++++++++++------ .../shared/header/headerItems/RightIcon.tsx | 11 ++++----- 4 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/components/shared/header/Header.module.scss b/src/components/shared/header/Header.module.scss index 50a82c81..78b9b573 100644 --- a/src/components/shared/header/Header.module.scss +++ b/src/components/shared/header/Header.module.scss @@ -7,6 +7,7 @@ $white: var(--white); width: 100%; height: 44px; background-color: $white; + box-shadow: inset 0 0 10px red; &.transparent { background-color: transparent; @@ -41,7 +42,7 @@ $white: var(--white); } } - li.logo { + li.left { height: fit-content; transform: translateY(2px); } diff --git a/src/components/shared/header/Header.tsx b/src/components/shared/header/Header.tsx index 04734f22..e6844533 100644 --- a/src/components/shared/header/Header.tsx +++ b/src/components/shared/header/Header.tsx @@ -1,24 +1,23 @@ import classNames from 'classnames/bind'; import styles from './Header.module.scss'; -import CenterIcon from './headerItems/CenterIcon'; import LeftIcon from './headerItems/LeftIcon'; import RightIcon from './headerItems/RightIcon'; import { HeaderProps } from './types/headerType'; export default function Header({ - displayLogo = false, isTransparent = false, displayRightIcon = true, + isDisplayLogo = true, + children, isTransparent = false, displayRightIconType, }:HeaderProps) { const cx = classNames.bind(styles); + return ( diff --git a/src/components/shared/header/headerItems/LeftIcon.tsx b/src/components/shared/header/headerItems/LeftIcon.tsx index b69ed396..4248ee6b 100644 --- a/src/components/shared/header/headerItems/LeftIcon.tsx +++ b/src/components/shared/header/headerItems/LeftIcon.tsx @@ -1,20 +1,30 @@ +import Link from 'next/link'; + import BackArrow from '@components/icons/BackArrow'; +import Logo from '@components/icons/Logo'; import Text from '@components/shared/text/Text'; -interface LeftIconProps { - className: string; - displayRightIcon?: boolean; -} +import { LeftIconProps } from '../types/headerType'; + +function LeftIcon({ className, children, isDisplayLogo }: LeftIconProps) { + if (isDisplayLogo) { + return ( +
        • + + + +
        • + ); + } -function LeftIcon({ className, displayRightIcon }: LeftIconProps) { return (
          • - {displayRightIcon && ( + {children && (
          • - + {children}
          • )}
          diff --git a/src/components/shared/header/headerItems/RightIcon.tsx b/src/components/shared/header/headerItems/RightIcon.tsx index 3a0a0c46..17043c87 100644 --- a/src/components/shared/header/headerItems/RightIcon.tsx +++ b/src/components/shared/header/headerItems/RightIcon.tsx @@ -4,7 +4,7 @@ import { useState } from 'react'; import Link from 'next/link'; -import FillHeart from '@components/icons/FilldHeart'; +import FilledHeart from '@/components/icons/FilledHeart'; import Heart from '@components/icons/Heart'; import Search from '@components/icons/Search'; import Share from '@components/icons/Share'; @@ -13,8 +13,7 @@ import { RightIconProps } from '../types/headerType'; function RightIcon({ className, - displayLogo, - displayRightIcon, + displayRightIconType, }: RightIconProps) { const [isSaved, setIsSaved] = useState(false); @@ -22,7 +21,7 @@ function RightIcon({ setIsSaved((prev) => { return !prev; }); }; - if (displayLogo) { + if (displayRightIconType === 'search') { return (
        • @@ -32,12 +31,12 @@ function RightIcon({ ); } - if (displayRightIcon) { + if (displayRightIconType === 'heartShare') { return (
          • {isSaved - ? + ? : }
          • From adf569c2ea798c5ca9d1ae64c33d0c2bb3128f7f Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:04:36 +0900 Subject: [PATCH 29/32] =?UTF-8?q?test:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20storybook=20=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/header/Header.stories.tsx | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/src/components/shared/header/Header.stories.tsx b/src/components/shared/header/Header.stories.tsx index 57ca132b..54ec4411 100644 --- a/src/components/shared/header/Header.stories.tsx +++ b/src/components/shared/header/Header.stories.tsx @@ -7,14 +7,12 @@ const meta = { component: Header, tags: ['autodocs'], args: { - displayLogo: true, - isTransparent: false, - displayRightIcon: false, }, argTypes: { - displayLogo: { control: 'boolean' }, + isDisplayLogo: { control: 'boolean' }, isTransparent: { control: 'boolean' }, - displayRightIcon: { control: 'boolean' }, + children: { control: 'string' }, + displayRightIconType: { control: 'string' }, }, }satisfies Meta; @@ -23,30 +21,55 @@ type Story = StoryObj; export const MainPage:Story = { args: { - displayLogo: true, + isDisplayLogo: true, isTransparent: false, - displayRightIcon: false, + displayRightIconType: 'search', }, }; -export const NotMainPage:Story = { +export const OtherPage:Story = { args: { - displayLogo: false, + isDisplayLogo: false, isTransparent: false, - displayRightIcon: false, + }, +}; + +export const FavoritePage:Story = { + args: { + isDisplayLogo: false, + isTransparent: false, + children: '즐겨찾기', + }, +}; + +export const CarInfoPage:Story = { + args: { + isDisplayLogo: false, + isTransparent: false, + children: '나의 차량 정보', + }, +}; + +export const CarWashInfoPage:Story = { + args: { + isDisplayLogo: false, + isTransparent: false, + children: '나의 세차 정보', }, }; export const MapPage:Story = { args: { - displayLogo: false, + isDisplayLogo: false, isTransparent: true, }, }; export const ProductPage:Story = { args: { - displayLogo: false, - displayRightIcon: true, + isDisplayLogo: false, + isTransparent: false, + children: '홈', + displayRightIconType: 'heartShare', }, }; From a29ffc3b760ef117241bba8e63a59900a3f8f343 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:06:37 +0900 Subject: [PATCH 30/32] =?UTF-8?q?design:=20Header=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20CSS=20=EC=88=98=EC=A0=95=20#80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/shared/header/Header.module.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/shared/header/Header.module.scss b/src/components/shared/header/Header.module.scss index 78b9b573..5e4fb13a 100644 --- a/src/components/shared/header/Header.module.scss +++ b/src/components/shared/header/Header.module.scss @@ -7,7 +7,6 @@ $white: var(--white); width: 100%; height: 44px; background-color: $white; - box-shadow: inset 0 0 10px red; &.transparent { background-color: transparent; From 3834331d8c10db708c9e4ac6fcedbb1889f43326 Mon Sep 17 00:00:00 2001 From: seoyeong Date: Wed, 17 Jan 2024 22:46:49 +0900 Subject: [PATCH 31/32] =?UTF-8?q?chore:=20build=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/login/page.tsx | 2 +- src/components/shared/header/headerItems/RightIcon.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index ad889066..3b64dd3f 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -27,7 +27,7 @@ function LoginPage() { }; return (
            -
            +
            diff --git a/src/components/shared/header/headerItems/RightIcon.tsx b/src/components/shared/header/headerItems/RightIcon.tsx index 17043c87..3aa43409 100644 --- a/src/components/shared/header/headerItems/RightIcon.tsx +++ b/src/components/shared/header/headerItems/RightIcon.tsx @@ -4,7 +4,7 @@ import { useState } from 'react'; import Link from 'next/link'; -import FilledHeart from '@/components/icons/FilledHeart'; +import FilledHeart from '@components/icons/FilledHeart'; import Heart from '@components/icons/Heart'; import Search from '@components/icons/Search'; import Share from '@components/icons/Share'; From 600d7e935061e55fe2583acfd625cfc84a4cdeba Mon Sep 17 00:00:00 2001 From: seoyeong <bsy0313@gmail.com> Date: Wed, 17 Jan 2024 22:56:09 +0900 Subject: [PATCH 32/32] =?UTF-8?q?chore:=20build=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/signup/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx index 86f2e982..109566cc 100644 --- a/src/app/signup/page.tsx +++ b/src/app/signup/page.tsx @@ -48,7 +48,7 @@ function SignupPage() { return ( <form onSubmit={handleSubmit(onSubmit)}> - <Header displayLogo={false} /> + <Header isDisplayLogo={false} /> <Spacing size={20} /> <Title title="회원가입" /> <TextField