๐ Fix double header in mobile ui - #171
Conversation
There was a problem hiding this comment.
์ถ๊ฐ๋ก ์์ ํ ์ฌํญ
- ์๋ธํค๋์ ์ ๋ชฉ์ ์๋์ ๊ฐ์ด ์์ ํ์์ต๋๋ค.
- ๋ชจ์ ๋ฉ์ธ ํ๋ฉด: ์์ธ๋ณด๊ธฐ โ {๋ชจ์ ์ด๋ฆ}
- ๋ชจ์ ์ ์ฒญ ํ๋ฉด: ์ ๋ณด ์ ๋ ฅ โ ๋ชจ์ ์ ์ฒญํ๊ธฐ
์ง์ ๊ฒฝ๋ก์ ๋ฐ๋ฅธ ํค๋ ๋ถ๊ธฐ
- ํผ๊ทธ๋ง ์์ด์ดํ๋ ์์์๋, ๋ชจ์ ๋ฉ์ธ ํ๋ฉด์ผ๋ก ์ง์ ํ ๋ ๋์๋ณด๋๋ฅผ ๊ฑฐ์ณค๋์ง, ๋๋ URL์ ์ง์ ์ ๋ ฅํ๋์ง์ ๋ฐ๋ผ ํค๋๋ฅผ ๋ค๋ฅด๊ฒ ํ์ํ๊ณ ์์ต๋๋ค. ์ด ์ฌํญ๋ ๋ฐ์ํ์ฌ ์์ ๊ฐ๋ฅํ ๊น์โฆ?
๋ฐ์ํ ์น ๊ด๋ จ
-
์ ๋ ๋ฐ์ํ์ ์ ๋ชฐ๋ผ์ AI์ ๋ํ๋ฅผ ํด๋ดค๋๋ ๋น์ทํ ๋ด์ฉ์ ์ถ์ฒ๋ฐ์์ต๋๋ค.
ํ๋ฉด ๊ตฌ์กฐ๊ฐ ๊ฐ๋ก/์ธ๋ก๋ก ๋ค๋ฐ๋๋ ํฐ ๋ณํ๋ ๋ฌด์กฐ๊ฑด
md:, ๊ทธ ์ธ์ ๋จ์ํ ํฐํธ๋ ์ฌ๋ฐฑ์ด ์ปค์ง๋ ์์ํ ๋ณํ๋sm:์ ์ด๋ค. -
์ด ์ถ์ฒ์ ๋ฐ์๋ค์ธ๋ค๋ฉด, ํฐ ๋ณํ๋
md, ๋น๊ต์ ์์ ๋ณํ๋sm์ผ๋ก ๋ถ๊ธฐ์ ์ ์ผ์ผ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ธํค๋ ๋ ธ์ถ ์กฐ๊ฑด ์์
5/30 ํ์์์ ๋ง์ฝ ๋ชจ๋ฐ์ผ/์น ui ๊ธฐ์ค
|
### ๐ ์์ ๋ด์ฉ ์ฐธ์ฌ ์ ์ฒญ/์ทจ์/๊ฐ์ ์ทจ์ ์ดํ ์๋ก๊ณ ์นจํ์ง ์์๋ ์๋์ผ๋ก ์ผ์ ์ ๋ฐ์ดํฐ๋ค์ด ๊ฐฑ์ ๋๋๋ก ์์ ํ์ต๋๋ค. ๊ธฐ์กด์๋ ๊ฐฑ์ ํด์ผ ํ๋ ์๋ฒ ์ํ๊ฐ ์ฌ๋ฌ ๊ณณ์ ํฉ์ด์ ธ ์๊ณ , ๊ฐ ํ๋ฉด์ด ์๋ก ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๊ณ ์์์ต๋๋ค. - `EventMain.tsx`๋ ๋ชจ์ ์์ธ ๋ฐ์ดํฐ๋ฅผ `useEventDetail` ๋ด๋ถ `useState`๋ก ๋ค๊ณ ์์ต๋๋ค. - `Guests.tsx`๋ ์ฐธ์ฌ์ ๋ชฉ๋ก์ TanStack Query์ `['guests', eventId, filters]` ์บ์๋ก ๋ค๊ณ ์์ต๋๋ค. - ํ์ ์ฐธ์ฌ/์์ฑ ๋ชฉ๋ก์ `['myRegistrations']`, `['myEvents']` ์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ ํ์ด์ง์์ TanStack Query ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ฒ ์์ ํ๊ณ , mutation ์ฑ๊ณต ํ ๊ด๋ จ query key๋ฅผ ํ ๊ณณ์์ ๊ฐ์ด ๋ฌดํจํํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ์ต๋๋ค. MSW์ ์ฐธ์ฌ์ ๊ดํ ๋ก์ง์ ์์ฑํ์ฌ ๋ก์ปฌ ์๋ฒ์์ ์๋ก๊ณ ์นจ ์์ด ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. 1. ์ด๋ฒคํธ ์์ธ/์ฐธ์ฌ์ ๋ชฉ๋ก query key๋ฅผ ๋ช ์์ ์ผ๋ก ์ ๋ฆฌ 2. `useEventDetail`์ ์์ธ ์กฐํ๋ฅผ TanStack Query ๊ธฐ๋ฐ์ผ๋ก ์ ํ 3. ์ฐธ์ฌ ์ ์ฒญ/์ทจ์/๊ฐ์ ์ทจ์ mutation์ ๋ช ํํ ๋ถ๋ฆฌ 4. `Guests.tsx`๋ `refetch()` ๋์ query invalidation ์ฌ์ฉ 5. MSW handler์ mock DB ๋๊ธฐํ ### ๐ธ ์คํฌ๋ฆฐ์ท (์ ํ) ### ๐ ๋ฆฌ๋ทฐ ์๊ตฌ์ฌํญ (์ ํ) - TanStack Query ๊ธฐ๋ฐ์ผ๋ก ์์ ํ๋ ๊ณผ์ ์์, ๊ธฐ์กด์ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ query key์ธ ํ์ ๋ด ์ ์ฒญ ๋ชฉ๋ก `['myRegistrations']`๊ณผ ๋ด๊ฐ ๋ง๋ ๋ชจ์ ๋ชฉ๋ก `['myEvents']`์ `constants/queryKeys.ts`์์ `legacy`๋ก ๋ฌถ์์ต๋๋ค. ๊ธฐ์กด query key๋ ๊ด๋ฆฌ๋ฅผ ํธํ๊ฒ ํ๊ธฐ ์ํด์ `queryKeys.registrations.me()`๋ก ๋ณ๊ฒฝํ ์ ์์์ง๋ง, ์ฐ์ ์ด๋ฒ ์์ ์์๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์ ์งํ์ต๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก TanStack Query๋ฅผ ์ด์ฉํ๋ค๋ฉด ๋ค๋ฅธ pr๋ก ์์ ํ๊ฒ ์ต๋๋ค. - ์ํฐ๊ทธ๋๋นํฐ -> ์ฝ๋ฑ์ค๋ก ai ํด์ ๋ณ๊ฒฝํ๋๋ฐ, ์ฝ๋ฑ์ค์์๋ `AGENTS.md` ํ์ผ์ ํ๋ก์ ํธ ๋ฃจํธ์ ์์น์ํต๋๋ค. ์ด๋ฅผ ๊นํ๋ธ์ ์ฌ๋ฆด๊น์? ์๋๋ฉด `.gitignore`๋ก ์ฒ๋ฆฌํ ๊น์? - #171 pr ๋จผ์ ๋จธ์งํด์ฃผ์ค ์ ์๋์? ์ด pr ๋จผ์ ๋จธ์งํ๋ฉด 171์์ conflict๊ฐ ์ด๋ง์ด๋ง ํ ๊ฒ ๊ฐ์์์... --------- Co-authored-by: PARK Junyoung <bloomwayz@snu.ac.kr>
### ๐ ์์ ๋ด์ฉ ๋น๋ก๊ทธ์ธ ์ ์ ์ ์ผ์ ์ฐธ์ฌ ์ ์ฒญ์ผ๋ก ์ธํด ์๊ธด `regId`๊ฐ ์ฌ๋ผ์ง์ง ์๊ณ ์ํฅ์ ์ฃผ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด `regId`์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋๋ฉด ์ญ์ ํ๋๋ก ์์ ํ์ต๋๋ค. ์์ธํ `regId` ์ญ์ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. - ๋ก๊ทธ์ธ / ๋ก๊ทธ์์์ ๋ชจ๋ `regId`๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ถ๊ฐ๋ก ๋ก๊ทธ์ธ ์ํ์์๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ Url์ `regId`๋ฅผ ๋ฌด์ํฉ๋๋ค. - ๋น๋ก๊ทธ์ธ ์ ์ ๊ฐ ์ ์ฒญ์ ์ทจ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ์ `regId`๋ฅผ ์ ๊ฑฐํ๊ณ , Url์ `?regId=`๋ ์ ๊ฑฐํฉ๋๋ค. - `getRegistrationDetail(regId)`๊ฐ `401`, `403`, `404`๋ก ์คํจํ๋ฉด ์ค๋๋ ๋ก์ปฌ ์ํ๋ฅผ ๋ง๊ธฐ ์ํด ๋ก์ปฌ์คํ ๋ฆฌ์ง์ Url์ `regId`๋ฅผ ์ ๊ฑฐํฉ๋๋ค. - ํ ์ด๋ฒคํธ์์ 2๊ฐ ์ด์์ ๋น๋ก๊ทธ์ธ ์ ์ฒญ์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ๊ธฐ์กด `regId`๋ฅผ ์ ๊ฑฐํ๊ณ ๊ฐ์ฅ ์ต์ ์ `regId`๋ง ์ ์งํฉ๋๋ค. - ์ฃผ์ต์์ ๊ฐ์ ์ทจ์๋ก ์ธํด `BANNED`๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ ๋ค์ ์ ์ฒญ ๋ถ๊ฐ๋ฅํ๋ค๋ ํ์ด์ง๋ฅผ ํ์ํ๊ธฐ ์ํด `regId`๋ฅผ ์ญ์ ํ์ง ์๊ณ ์ ์งํฉ๋๋ค. ### ๐ธ ์คํฌ๋ฆฐ์ท (์ ํ) ### ๐ ๋ฆฌ๋ทฐ ์๊ตฌ์ฌํญ (์ ํ) - dev๊ฐ ์๋ #187 ์ ๋ธ๋์น ์์์ ์์ ํ์ฌ ์ด pr ๋จธ์ง ์ด์ 187์ ์ฐ์ ์ ์ผ๋ก ๋จธ์งํด์ผ ํฉ๋๋ค. - #171 pr์ด ๋จธ์ง๋๋ฉด 187๊ณผ ์ด pr ๋จธ์ง ์ปจํ๋ฆญํธ ํด๊ฒฐํ๊ณ ๋ค์ ๋ฆฌ๋ทฐ์์ฒญ ๋๋ฆฌ๊ฒ ์ต๋๋ค! --------- Co-authored-by: Park Junyoung <bloomwayz@snu.ac.kr>
๐ ์์ ๋ด์ฉ
๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ด์ค ํค๋๊ฐ ๋ํ๋๋ ๋ฌธ์ ๋ฅผ ์์ ํ์ต๋๋ค.
Subheader์ํ๋ฅผ ๊ฐ์งํ๋ zustand ์คํ ์ด๋ฅผ ์ถ๊ฐํ์ต๋๋ค.Subheader๊ฐ ๋ง์ดํธ ๋ ๊ฒฝ์ฐHeader.tsx์์ ๊ฐ๋ก ๊ธธ์ด๊ฐmd๋ฏธ๋ง์ธ์ง ํ์ธํ๊ณ , ๊ธ๋ก๋ฒ '๋ชจ์ด๋ฐ' ํค๋๋ฅผ ์จ๊น ์ฒ๋ฆฌํฉ๋๋ค.<Subheader>๋ฅผ ์ฌ์ฉํ๋EventMain.tsx,EventRegister.tsx,Guests.tsx,EventForm.tsx์์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.๐ธ ์คํฌ๋ฆฐ์ท (์ ํ)
๋ชจ๋ฐ์ผ ui

์น ui

๐ ๋ฆฌ๋ทฐ ์๊ตฌ์ฌํญ (์ ํ)
๋ชจ๋ฐ์ผ / ์น ๊ตฌ๋ถ ๊ธฐ์ค ํต์ผ
์ด๋ฒ ์์ ์ ํ๋ฉด์ ์ฌ์ดํธ ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ฐ์ผ ํ๊ฒฝ๊ณผ ์น ํ๊ฒฝ์ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ด
md์sm์ผ๋ก ํผ์ฉ๋๊ณ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ์์ต๋๋ค.๋ฐ๊ฒฌํ ๋ฐ์ํ ui๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
sm:w-screen-sm md:w-screen-md lg:w-screen-lg xl:max-w-screen-xl
ํ๋ฉด์ด ์ปค์ง ๋๋ง๋ค ์ค์ ์์ญ์ ์ต๋ ๋์ด ์ ํ์ ๊ธฐ๊ธฐ ํฌ๊ธฐ์ ๋ง์ถฐ ๋จ๊ณ๋ณ๋ก ๋๋ ค์ค๋๋ค.
sm:gap-4, sm:text-xl, sm:text-lg, sm:px-4, sm:py-3
๊ธฐ๋ณธ์ ์ผ๋ก ์์ ๋ชจ๋ฐ์ผ ํ๋ฉด์ ๋ง์ถ ํ ์คํธ ํฌ๊ธฐ(text-sm, text-lg)์ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ๋ค๊ฐ, sm(640px)์ ๋์ด๊ฐ๋ฉด ํฐํธ์ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์กฐ๊ธ ๋ ํผ์งํ๊ฒ ํค์๋๋ค.
sm:flex-row, sm:flex-col, sm:hidden ๋ฑ
์์ ํ๋ฉด์์๋ ์คํฌ๋กค๊ณผ ์์๋ค์ ์ธ๋ก๋ก ๊ธธ๊ฒ ๋ฐฐ์นํ์ง๋ง, sm(640px) ์ด์์์๋ ์๊ฐ/๋ ์ง ์ ํ ์์ญ์ ๊ฐ๋ก(๊ฐ๋ก ๋ถํ ์ฐฝ ํํ)๋ก ์ฌ๋ฐฐ์นํ๊ณ ๋ถํ์ํ ์คํฌ๋กค๋ฐ๋ฅผ ์จ๊น๋๋ค.
w-8 h-8 sm:w-10 sm:h-10 text-md sm:text-lg
์ฐ์ธก ์๋จ์ ํ๋กํ ์๋ฐํ ํฌ๊ธฐ๊ฐ ๋ชจ๋ฐ์ผ์์๋ ์๊ณ (8), ํ๋ธ๋ฆฟ ์ด์์์๋ ์ปค์ง๋๋ค(10).
Input, Textarea: ๋ฐ์คํฌํ ํ๊ฒฝ(md:)์์ ํ ์คํธ ์ฌ์ด์ฆ ์กฐ์ (md:text-sm).
AlertDialog: ๋ชจ๋ฐ์ผ์์๋ ๋ฒํผ์ด ์ธ๋ก๋ก ์์ด๊ณ ํ์ ์ด ์ ์ฒด ํ๋ฉด์ ์ฐจ์งํ์ง๋ง, 640px(sm:) ์ด์์์๋ ํ์ ์ ์ต๋ ๋์ด๋ฅผ ์ ํ(sm:max-w-md)ํ๊ณ ํ์ธ/์ทจ์ ๋ฒํผ์ ๊ฐ๋ก๋ก ๋๋ํ(sm:flex-row) ๋ฐฐ์นํฉ๋๋ค.
Calendar: ๋ฌ๋ ฅ ์ปดํฌ๋ํธ๊ฐ ๋์ ํ๋ฉด(md:)์์๋ ๊ฐ๋ก๋ก ๋ฐฐ์น(md:flex-row)๋ฉ๋๋ค.
์ ๋ฏธ๋์ด๋
md๊ฐ ์์ดํจ๋ ๋ฏธ๋์ ๊ท๊ฒฉ์ด์ด์sm์md๋ก ํต์ผํ๋ ๊ฒ์ ์ถ์ฒํ์์ต๋๋ค.ํน์ ๋ค๋น๊ฒ์ด์ ํค๋ ํ ๊ธ, ๋ฌ๋ ฅ ๊ฐ๋ก/์ธ๋ก ๋ฐฐ์น ์ ํ ๋ฑ ํผ์งํ ui ๋ณํ๋
md๋ก ํต์ผํ๊ณ , ์์ํ ์ฌ๋ฐฑ / ํฌ๊ธฐ ์กฐ์ ์ ๊ธฐ์กด์ฒ๋ผsm์ ์ ์งํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ์ต๋๋ค.(ํ๋กํ ์๋ฐํ ํฌ๊ธฐ๋sm์์ ํฌ๊ธฐ๊ฐ ๋ณํ๋ ๊ฒ์ ์ต์ ํ ๋์ด์๊ธด ํฉ๋๋ค)์ด๋ป๊ฒ ์์ ํ๋๊ฒ ์ข์๊น์? ๋ง์ฝ ํ๋ค๋ฉด ์๋ก ์ด์๋ฅผ ํ๊ณ ์์ ํ๊ฒ ์ต๋๋ค!