From 6f76eab9088b6ef43f3dafc26cd704072f16c0c1 Mon Sep 17 00:00:00 2001 From: JeonYumin <40783675+JeonYumin94@users.noreply.github.com> Date: Thu, 1 Aug 2024 16:15:40 +0900 Subject: [PATCH] =?UTF-8?q?=08FE-27=20:twisted=5Frightwards=5Farrows:=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=B8=8C?= =?UTF-8?q?=EB=9E=9C=EC=B9=98=20=EC=B5=9C=EC=8B=A0=ED=99=94=20(#145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * FE-54๐Ÿ”€ ์ƒ์„ธํŽ˜์ด์ง€ main merge (#120) * FE-31 ์ƒ์„ธํŽ˜์ด์ง€ UI ์ œ์ž‘ (#12) * FE-31๐Ÿ’„์ƒ์„ธํŽ˜์ด์ง€ ๊ธฐ๋ณธ UI ์ œ์ž‘ * FE-31โ™ป๏ธ textareaํƒœ๊ทธ Textarea์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-31๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ถ”๊ฐ€ --------- Co-authored-by: Woojiseok * FE-43 โœจ ์ƒ์„ธํŽ˜์ด์ง€ ์—ํ”ผ๊ทธ๋žจ ์กฐํšŒ (#18) * FE-43โœจ ์ƒ์„ธํŽ˜์ด์ง€ Epigram API์—ฐ๋™ * FE-43โšก ๏ธaxios ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€ * FE-43๐Ÿ—๏ธ ์ƒ์„ธํŽ˜์ด์ง€ Layout ๊ตฌ์กฐ๊ฐœ์„  * FE-43๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-43๐Ÿ”ฅ ์‚ฌ์šฉ์•ˆํ•˜๋Š” ํŒŒ์ผ ์‚ญ์ œ * FE-43โœ๏ธ ์˜คํƒ€ ์ˆ˜์ • * FE-43 ๐Ÿ› id์—†์„๋•Œ useQuery์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * FE-43โ™ป๏ธ interface->zod ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ (#22) * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ * FE-43โœจ ์—ํ”ผ๊ทธ๋žจ ์ƒ์„ธํŽ˜์ด์ง€ ๋”๋ณด๊ธฐ ๋“œ๋กญ๋‹ค์šด ์ถ”๊ฐ€ * FE-43๐Ÿ’„ MoreOptionMenu ์Šคํƒ€์ผ ์ˆ˜์ • * FE-31 ์ƒ์„ธํŽ˜์ด์ง€ UI ์ œ์ž‘ (#12) * FE-31๐Ÿ’„์ƒ์„ธํŽ˜์ด์ง€ ๊ธฐ๋ณธ UI ์ œ์ž‘ * FE-31โ™ป๏ธ textareaํƒœ๊ทธ Textarea์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-31๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ถ”๊ฐ€ --------- Co-authored-by: Woojiseok * FE-43 โœจ ์ƒ์„ธํŽ˜์ด์ง€ ์—ํ”ผ๊ทธ๋žจ ์กฐํšŒ (#18) * FE-43โœจ ์ƒ์„ธํŽ˜์ด์ง€ Epigram API์—ฐ๋™ * FE-43โšก ๏ธaxios ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€ * FE-43๐Ÿ—๏ธ ์ƒ์„ธํŽ˜์ด์ง€ Layout ๊ตฌ์กฐ๊ฐœ์„  * FE-43๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-43๐Ÿ”ฅ ์‚ฌ์šฉ์•ˆํ•˜๋Š” ํŒŒ์ผ ์‚ญ์ œ * FE-43โœ๏ธ ์˜คํƒ€ ์ˆ˜์ • * FE-43 ๐Ÿ› id์—†์„๋•Œ useQuery์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * FE-43โ™ป๏ธ interface->zod ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ (#22) * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ * FE-43โœจ ์—ํ”ผ๊ทธ๋žจ ์ƒ์„ธํŽ˜์ด์ง€ ๋”๋ณด๊ธฐ ๋“œ๋กญ๋‹ค์šด ์ถ”๊ฐ€ * FE-43๐Ÿ’„ MoreOptionMenu ์Šคํƒ€์ผ ์ˆ˜์ • * โœจ ์ƒ์„ธํŽ˜์ด์ง€ ๋Œ“๊ธ€ ์กฐํšŒ api์—ฐ๋™ (#38) * FE-42๐Ÿ’„ EpigramComment์•ˆ์— CommentCard ์ถ”๊ฐ€ * FE-42โœจ ์ƒ์„ธํŽ˜์ด์ง€ ๋Œ“๊ธ€ ์กฐํšŒ api์—ฐ๋™ * FE-42โœจ dateUtilํ•จ์ˆ˜ ์ถ”๊ฐ€, ์ ์šฉ * FE-42โœจ ๋Œ“๊ธ€์ž‘์„ฑ์ž๊ฐ€ ๋ณธ์ธ์ธ์ง€ ํŒ๋ณ„ํ•ด ์ˆ˜์ •,์‚ญ์ œ ํ‘œ์‹œ * FE-42๐Ÿ”ฅ ์•ˆ์“ฐ๋Š” ํ•จ์ˆ˜ ์‚ญ์ œ * FE-42๐Ÿ’„ EpigramComment ๋ฐฐ๊ฒฝ์ƒ‰ ์ˆ˜์ • * FE-42โ™ป๏ธ CommetCard ๊ตฌ์กฐ ๊ฐœ์„  * FE-42๐Ÿ’„์ž‘์„ฑ๋œ ๋Œ“๊ธ€ ์—†์„๋•Œ UI ์ถ”๊ฐ€ * FE-42๐Ÿ› ๋Œ“๊ธ€์ˆ˜๋ฅผ length->totalCount๋กœ ๋ณ€๊ฒฝ * FE-42โ™ป๏ธ useEpigramCommentHook ๋ถ„๋ฆฌ * FE-42โœจ ๋Œ“๊ธ€ ๋ชฉ๋ก์— ๋ฌดํ•œ์Šคํฌ๋กค ์ ์šฉ * FE-42๐Ÿ’ก ์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ api ์—ฐ๋™ (#78) * FE-76โ™ป๏ธ ๋Œ“๊ธ€ textarea ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-76๐Ÿ’„ switch ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์ˆ˜์ • * FE-76โœจ textarea focus out ๋ฒ„ํŠผ ์ถ”๊ฐ€ * FE-76โœจ postComment schema,interface ์ถ”๊ฐ€, ์ˆ˜์ • * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ api ์—ฐ๋™ * FE-76๐Ÿ› import error ํ•ด๊ฒฐ * FE-76โœจ switch๋กœ ๋Œ“๊ธ€ ๊ณต๊ฐœ,๋น„๊ณต๊ฐœ ์„ค์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ image๋ฅผ ์œ ์ €๊ฐ€ ๋“ฑ๋กํ•œ image๋กœ ๋ณ€๊ฒฝ * FE-76๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-45โœจ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ api ์—ฐ๋™ (#80) * FE-45โœจ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ api ์—ฐ๋™ * FE-45๐Ÿ’„ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ ๋ชจ๋‹ฌ ์ถ”๊ฐ€ * FE-45๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ˆ˜์ • * FE-45โ™ป๏ธ DeleteAlertModal ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-45๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-78โœจ๋Œ“๊ธ€ ์ˆ˜์ •,์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#91) * FE-78๐Ÿ’„ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ui์ˆ˜์ • * FE-78โœจ ๋Œ“๊ธ€ ์‚ญ์ œ ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-78โœจ๋Œ“๊ธ€ ์‚ญ์ œ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-78โœจ ๋Œ“๊ธ€ ์ˆ˜์ • apiํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-78โœจ ๋Œ“๊ธ€ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-78๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-78๐Ÿ’„ EpigramComment height์ˆ˜์ • * FE-78๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#97) * FE-44๐Ÿšš ์ƒ์„ธํŽ˜์ด์ง€ ํŽ˜์ด์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • api ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-44โ™ป๏ธ ์ €์ž์„ ํƒ๊ด€๋ จ ํ•จ์ˆ˜ useAuthorSelectionํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-44๐Ÿ’„ EditEpigram,AddEpigram UI์ˆ˜์ • * FE-44๐Ÿ› ์ถœ์ฒ˜ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ๋ฒ„๊ทธ ์ˆ˜์ • * FE-44โœจ ์ž‘์„ฑ์ž ๋ณธ์ธ์ด ์•„๋‹๋•Œ ์ˆ˜์ •ํŽ˜์ด์ง€ ์ ‘๊ทผ ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-44๐Ÿ› ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-41โœจ์ข‹์•„์š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103) * FE-41โ™ป๏ธ httpClien์—t interceoptor ์ถ”๊ฐ€ * FE-41โœจ ์ข‹์•„์š” api ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-41โœจ ์ข‹์•„์š” ๊ธฐ๋Šฅ Layout์— ์ ์šฉ * FE-41โœจ Url Link๋ฒ„ํŠผ ์ƒ์„ฑ * FE-41๐Ÿ’„์ข‹์•„์š”,link๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ˆ˜์ • * FE-41๐Ÿ› import ์—๋Ÿฌ ํ•ด๊ฒฐ * FE-41โ™ป๏ธ ๊ธฐ์กดheader-> Header์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-54๐Ÿ› ์˜คํƒ€ ์ˆ˜์ • * build error ํ•ด๊ฒฐ --------- Co-authored-by: Woojiseok * FE-27 :twisted_rightwards_arrows: ๋งˆ์ดํŽ˜์ด์ง€ ๋‚ด ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก main ๋จธ์ง€ ์š”์ฒญ (#128) * FE-34 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ํ”„๋กœํ•„ ์ˆ˜์ • ๊ธฐ๋Šฅ (#53) * FE-34 :lipstick: ๋งˆ์ดํŽ˜์ด์ง€ UI ์ดˆ๊ธฐ์ž‘์—… * FE-34 :sparkles: ๋‚ด ์ •๋ณด ์กฐํšŒ API ์—ฐ๋™ * FE-34 :lipstick: shadcn/ui Dialog ์„ค์น˜ * FE-34 :sparkles: ํ”„๋กœํ•„ ์ˆ˜์ • API ์—ฐ๋™ * FE-34 :sparkles: ์ด๋ฏธ์ง€ ์‹คํŒจ ํ† ์ŠคํŠธ ์ถ”๊ฐ€ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ์บ˜๋ฆฐ๋” ์ถœ๋ ฅ ํ•จ์ˆ˜ (#58) * FE-36 :lipstick: ๊ฐ์ •๋‹ฌ๋ ฅ UI * FE-36 :sparkles: ์บ˜๋ฆฐ๋” ํ•จ์ˆ˜ ์ƒ์„ฑ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ (#65) * FE-36 :lipstick: ๊ฐ์ •๋‹ฌ๋ ฅ UI * FE-36 :sparkles: ์บ˜๋ฆฐ๋” ํ•จ์ˆ˜ ์ƒ์„ฑ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ: ์˜ค๋Š˜ ๋‚ ์งœ ํ‘œ์‹œ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ์›” ๋ณ„ ๊ฐ์ •๋กœ๊ทธ ์กฐํšŒ API ์—ฐ๋™ * FE-36 :sparkles: ์›”๋ณ„ ๊ฐ์ • ๋กœ๊ทธ ํ•ด๋‹น ๋‚ ์งœ์— ์ถœ๋ ฅ * FE-36 :lipstick: ๋‹ฌ๋ ฅ css ์ˆ˜์ • * FE-36 :art: ๋งˆ์ดํŽ˜์ด์ง€ ์บ˜๋ฆฐ๋” ํ—ค๋” ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ ํ•„ํ„ฐ๊ธฐ๋Šฅ * FE-27 :twisted_rightwards_arrows: ์—ํ”ฝ ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#81) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-27 :twisted_rightwards_arrows: ๋งˆ์ดํŽ˜์ด์ง€ ์—ํ”ฝ ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#85) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#86) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-37 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •์ฐจํŠธ (#89) * FE-37 :recycle: ์›”๋ณ„ ๊ฐ์ •๋กœ๊ทธ ์กฐํšŒ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * FE-37 :sparkles: ๊ฐ์ • ์ฐจํŠธ * FE-37 :hammer: ์ƒ์ˆ˜ ์ปจ๋ฒค์…˜ ์ˆ˜์ • * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#99) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-27 :hammer: ์ถฉ๋Œ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-27 :hammer: ์ถฉ๋Œ๋‚ด์—ญ ์ˆ˜์ • * FE-27 :twisted_rightwards_arrows: ์ถฉ๋Œ์˜ค๋ฅ˜ ์ˆ˜์ • --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: MOON Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN * FE-27 :twisted_rightwards_arrows: ๋งˆ์ดํŽ˜์ด์ง€ ์ตœ์‹ ํ™” (#102) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: MOON Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#111) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: MOON Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ Co-authored-by: JeonYumin <40783675+JeonYumin94@users.noreply.github.com> Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN * FE-27 :twisted_rightwards_arrows: ์ถฉ๋Œ์—๋Ÿฌ ์ˆ˜์ • (#113) Co-authored-by: morrison * FE-27 :truck: ๋งˆ์ดํŽ˜์ด์ง€ ui ๊ด€๋ จ ํด๋” ์ด๋™ (#114) * FE-38 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๋‚ด ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก ์กฐํšŒ (#126) * FE-38 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๋‚ด ์—ํ”ผ๊ทธ๋žจ ์กฐํšŒ * FE-38 :lipstick: ๋‚ด ์—ํ”ผ๊ทธ๋žจ ์—†์„ ๋•Œ UI * FE-38 :sparkles: ๋‚ด ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก ๋”๋ณด๊ธฐ ๊ตฌํ˜„ * FE-38 :sparkles: ๋‚ด ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก ๋”๋ณด๊ธฐ ๊ตฌํ˜„ * FE-38 :recycle: ๋‚ด ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก ์กฐํšŒ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * FE-38 :sparkles: ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก ๋ฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™ ๊ตฌํ˜„ * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#127) * FE-32 ๐Ÿ”€๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ ๋ฉ”์ธ ๋จธ์ง€ (#107) * ๐Ÿ’„FE-33 ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ UI (#10) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- Co-authored-by: ์ „์œ ๋ฏผ * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * โœจFeat: SearchBar UI ์ดˆ์•ˆ ์™„์„ฑ * styles: tailwind css ํฐํŠธ ์‚ฌ์ด์ฆˆ ์ถ”๊ฐ€ * feat: RecentSearches UI ์ดˆ์•ˆ ์™„์„ฑ * ๏ฟฝstyles: SearchResults UI ์ˆ˜์ • * ๏ฟฝstyles: RecentSearches UI ์ˆ˜์ • * โœจstyles: ๋ฐ˜์‘ํ˜• UI ์ถ”๊ฐ€ * FE-33 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ --------- Co-authored-by: ์ „์œ ๋ฏผ Co-authored-by: JeonYumin94 <40783675+JeonYumin94@users.noreply.github.com> Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> * FE-65 โœจ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ (#51) * FE-65 โœจfeat: ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-65 โœจfeat: ๊ฒ€์ƒ‰๋ฐ”์™€ ์—ฐ๋™ํ•˜์—ฌ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜๋„๋ก ์ˆ˜์ • * FE-65 โœจfeat: debounce๋ฅผ ์œ„ํ•œ lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ * FE-65 โœจfeat: debounce ๊ธฐ๋Šฅ ์ ์šฉ(++lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) * FE-65 โœจfeat: useEffectt๋กœ debouncedSearchํ•จ์ˆ˜ ์˜์กด์„ฑ ์„ค์ • * FE-65 โœจfeat: useCallback ๋Œ€์‹  useRef๋กœ ๋ณ€๊ฒฝ * FE-65 โœจfix:: debounce ๊ธฐ๋Šฅ ์ œ๊ฑฐ(๋ถˆํ•„์š”) * FE-65 โœจfeat: focus๋  ๋•Œ placeholder ์‚ฌ๋ผ์ง€๊ฒŒ ์ˆ˜์ • ๋ฐ UI ์ˆ˜์ • * FE-65 โœจfeat: isInitialMount ์„ ์–ธ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-65 โœจfix: ์ฃผ์„ ์ˆ˜์ • * FE-65 โœจfeat: ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ํด๋ฆญ ์‹œ ๊ทธ ๊ฒ€์ƒ‰์–ด๋กœ ๊ฒ€์ƒ‰๋˜๋Š” ๊ธฐ๋Šฅ * FE-65 styles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋Šฅ (#73) * FE-74 fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ญ์ œ * FE-74 โœจfeat: ํ…Œ์ŠคํŠธ ์šฉ api ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ * FE-74 โœจfeat: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-74 โœจfix: ์ค‘๋ณต๋œ key, href ์ œ๊ฑฐ ๋ฐ ๊ทœ์น™ ๋ฌด์‹œ ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจtest: ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ * FE-74 โœจfeat: ๊ฒ€์ƒ‰์–ด ํ•˜์ด๋ผ์ดํŒ… ๋ฐ ์ˆœ์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-74 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ api ํŒŒ์ผ ์‚ญ์ œ * FE-74 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจfix: ๋ฉ˜ํ† ๋ง ๋‚ด์šฉ ์ฃผ์„์œผ๋กœ ์ถ”๊ฐ€ * FE-32 ๐Ÿ”€ epic๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#77) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- Co-authored-by: ์ „์œ ๋ฏผ * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ --------- Co-authored-by: ์ „์œ ๋ฏผ Co-authored-by: JeonYumin94 <40783675+JeonYumin94@users.noreply.github.com> Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> * FE-75 โœจ๋ฌดํ•œ ์Šคํฌ๋กค, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ URL์— ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#104) * FE-75 โœจstyles: tailwind .config ํŒŒ์ผ ๋ฉ”์ธ๊ณผ ํ†ตํ•ฉ * FE-75 โœจfeat: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ Header ์ถ”๊ฐ€ * FE-75 โœจrefactor: useMemo ์‚ฌ์šฉ * FE-75 โœจfeat: URL์— ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ €์žฅ * FE-75 โœจstyles: ๋กœ๋”ฉ ์Šคํƒ€์ผ ๊ตฌํ˜„ * FE-75 โœจfeat: ์‹ค์ œ api ์ถ”๊ฐ€ * FE-75 โœจfeat: api ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-75 โœจfeat: ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ * FE-75 โœจfix: ์˜์กด์„ฑ ๋ฐฐ์—ด์—์„œ ๋กœ๋”ฉ ์ƒํƒœ ์ œ๊ฑฐ * FE-75 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-75 โœจfeat:: ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ * FE-75 โœจfix: ๊ฒ€์ƒ‰ ์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋„๋ก ์ˆ˜์ • * FE-32 ๐Ÿ”€๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#105) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- Co-authored-by: ์ „์œ ๋ฏผ * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * .http ํŒŒ์ผ ์‚ญ์ œ --------- Co-authored-by: ์ „์œ ๋ฏผ Co-authored-by: JeonYumin94 <40783675+JeonYumin94@users.noreply.github.com> Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: MOON Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-32 ๐Ÿ”€๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#110) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- Co-authored-by: ์ „์œ ๋ฏผ * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑโ€ฆ * FE-54๐Ÿ”€์ƒ์„ธํŽ˜์ด์ง€ url์ˆ˜์ • (#132) * FE-31 ์ƒ์„ธํŽ˜์ด์ง€ UI ์ œ์ž‘ (#12) * FE-31๐Ÿ’„์ƒ์„ธํŽ˜์ด์ง€ ๊ธฐ๋ณธ UI ์ œ์ž‘ * FE-31โ™ป๏ธ textareaํƒœ๊ทธ Textarea์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-31๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ถ”๊ฐ€ --------- Co-authored-by: Woojiseok * FE-43 โœจ ์ƒ์„ธํŽ˜์ด์ง€ ์—ํ”ผ๊ทธ๋žจ ์กฐํšŒ (#18) * FE-43โœจ ์ƒ์„ธํŽ˜์ด์ง€ Epigram API์—ฐ๋™ * FE-43โšก ๏ธaxios ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€ * FE-43๐Ÿ—๏ธ ์ƒ์„ธํŽ˜์ด์ง€ Layout ๊ตฌ์กฐ๊ฐœ์„  * FE-43๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-43๐Ÿ”ฅ ์‚ฌ์šฉ์•ˆํ•˜๋Š” ํŒŒ์ผ ์‚ญ์ œ * FE-43โœ๏ธ ์˜คํƒ€ ์ˆ˜์ • * FE-43 ๐Ÿ› id์—†์„๋•Œ useQuery์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * FE-43โ™ป๏ธ interface->zod ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ (#22) * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ * FE-43โœจ ์—ํ”ผ๊ทธ๋žจ ์ƒ์„ธํŽ˜์ด์ง€ ๋”๋ณด๊ธฐ ๋“œ๋กญ๋‹ค์šด ์ถ”๊ฐ€ * FE-43๐Ÿ’„ MoreOptionMenu ์Šคํƒ€์ผ ์ˆ˜์ • * FE-31 ์ƒ์„ธํŽ˜์ด์ง€ UI ์ œ์ž‘ (#12) * FE-31๐Ÿ’„์ƒ์„ธํŽ˜์ด์ง€ ๊ธฐ๋ณธ UI ์ œ์ž‘ * FE-31โ™ป๏ธ textareaํƒœ๊ทธ Textarea์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-31๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ถ”๊ฐ€ --------- Co-authored-by: Woojiseok * FE-43 โœจ ์ƒ์„ธํŽ˜์ด์ง€ ์—ํ”ผ๊ทธ๋žจ ์กฐํšŒ (#18) * FE-43โœจ ์ƒ์„ธํŽ˜์ด์ง€ Epigram API์—ฐ๋™ * FE-43โšก ๏ธaxios ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ถ”๊ฐ€ * FE-43๐Ÿ—๏ธ ์ƒ์„ธํŽ˜์ด์ง€ Layout ๊ตฌ์กฐ๊ฐœ์„  * FE-43๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-43๐Ÿ”ฅ ์‚ฌ์šฉ์•ˆํ•˜๋Š” ํŒŒ์ผ ์‚ญ์ œ * FE-43โœ๏ธ ์˜คํƒ€ ์ˆ˜์ • * FE-43 ๐Ÿ› id์—†์„๋•Œ useQuery์‹คํ–‰๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ * FE-43โ™ป๏ธ interface->zod ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ (#22) * FE-43โœจ ์‚ฌ์šฉ์ž ID์— ๋”ฐ๋ฅธ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ํ‘œ์‹œ * FE-43โœจ ์—ํ”ผ๊ทธ๋žจ ์ƒ์„ธํŽ˜์ด์ง€ ๋”๋ณด๊ธฐ ๋“œ๋กญ๋‹ค์šด ์ถ”๊ฐ€ * FE-43๐Ÿ’„ MoreOptionMenu ์Šคํƒ€์ผ ์ˆ˜์ • * โœจ ์ƒ์„ธํŽ˜์ด์ง€ ๋Œ“๊ธ€ ์กฐํšŒ api์—ฐ๋™ (#38) * FE-42๐Ÿ’„ EpigramComment์•ˆ์— CommentCard ์ถ”๊ฐ€ * FE-42โœจ ์ƒ์„ธํŽ˜์ด์ง€ ๋Œ“๊ธ€ ์กฐํšŒ api์—ฐ๋™ * FE-42โœจ dateUtilํ•จ์ˆ˜ ์ถ”๊ฐ€, ์ ์šฉ * FE-42โœจ ๋Œ“๊ธ€์ž‘์„ฑ์ž๊ฐ€ ๋ณธ์ธ์ธ์ง€ ํŒ๋ณ„ํ•ด ์ˆ˜์ •,์‚ญ์ œ ํ‘œ์‹œ * FE-42๐Ÿ”ฅ ์•ˆ์“ฐ๋Š” ํ•จ์ˆ˜ ์‚ญ์ œ * FE-42๐Ÿ’„ EpigramComment ๋ฐฐ๊ฒฝ์ƒ‰ ์ˆ˜์ • * FE-42โ™ป๏ธ CommetCard ๊ตฌ์กฐ ๊ฐœ์„  * FE-42๐Ÿ’„์ž‘์„ฑ๋œ ๋Œ“๊ธ€ ์—†์„๋•Œ UI ์ถ”๊ฐ€ * FE-42๐Ÿ› ๋Œ“๊ธ€์ˆ˜๋ฅผ length->totalCount๋กœ ๋ณ€๊ฒฝ * FE-42โ™ป๏ธ useEpigramCommentHook ๋ถ„๋ฆฌ * FE-42โœจ ๋Œ“๊ธ€ ๋ชฉ๋ก์— ๋ฌดํ•œ์Šคํฌ๋กค ์ ์šฉ * FE-42๐Ÿ’ก ์ฃผ์„ ์ถ”๊ฐ€ --------- Co-authored-by: ์šฐ์ง€์„ * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ api ์—ฐ๋™ (#78) * FE-76โ™ป๏ธ ๋Œ“๊ธ€ textarea ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-76๐Ÿ’„ switch ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์ˆ˜์ • * FE-76โœจ textarea focus out ๋ฒ„ํŠผ ์ถ”๊ฐ€ * FE-76โœจ postComment schema,interface ์ถ”๊ฐ€, ์ˆ˜์ • * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ api ์—ฐ๋™ * FE-76๐Ÿ› import error ํ•ด๊ฒฐ * FE-76โœจ switch๋กœ ๋Œ“๊ธ€ ๊ณต๊ฐœ,๋น„๊ณต๊ฐœ ์„ค์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-76โœจ ๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ image๋ฅผ ์œ ์ €๊ฐ€ ๋“ฑ๋กํ•œ image๋กœ ๋ณ€๊ฒฝ * FE-76๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-45โœจ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ api ์—ฐ๋™ (#80) * FE-45โœจ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ api ์—ฐ๋™ * FE-45๐Ÿ’„ ์—ํ”ผ๊ทธ๋žจ ์‚ญ์ œ ๋ชจ๋‹ฌ ์ถ”๊ฐ€ * FE-45๐Ÿ’„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ˆ˜์ • * FE-45โ™ป๏ธ DeleteAlertModal ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-45๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-78โœจ๋Œ“๊ธ€ ์ˆ˜์ •,์‚ญ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#91) * FE-78๐Ÿ’„ ๋ฏธํŠธ๋ณผ์•„์ด์ฝ˜ ui์ˆ˜์ • * FE-78โœจ ๋Œ“๊ธ€ ์‚ญ์ œ ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-78โœจ๋Œ“๊ธ€ ์‚ญ์ œ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-78โœจ ๋Œ“๊ธ€ ์ˆ˜์ • apiํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-78โœจ ๋Œ“๊ธ€ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-78๐Ÿ“ ์ฃผ์„ ์ถ”๊ฐ€ * FE-78๐Ÿ’„ EpigramComment height์ˆ˜์ • * FE-78๐Ÿ› build error ํ•ด๊ฒฐ --------- Co-authored-by: ์šฐ์ง€์„ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#97) * FE-44๐Ÿšš ์ƒ์„ธํŽ˜์ด์ง€ ํŽ˜์ด์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • api ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-44โœจ ์—ํ”ผ๊ทธ๋žจ ์ˆ˜์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-44โ™ป๏ธ ์ €์ž์„ ํƒ๊ด€๋ จ ํ•จ์ˆ˜ useAuthorSelectionํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-44๐Ÿ’„ EditEpigram,AddEpigram UI์ˆ˜์ • * FE-44๐Ÿ› ์ถœ์ฒ˜ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ๋ฒ„๊ทธ ์ˆ˜์ • * FE-44โœจ ์ž‘์„ฑ์ž ๋ณธ์ธ์ด ์•„๋‹๋•Œ ์ˆ˜์ •ํŽ˜์ด์ง€ ์ ‘๊ทผ ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-44๐Ÿ› ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฒ„๊ทธ ์ˆ˜์ • --------- Co-authored-by: ์šฐ์ง€์„ * FE-41โœจ์ข‹์•„์š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (#103) * FE-41โ™ป๏ธ httpClien์—t interceoptor ์ถ”๊ฐ€ * FE-41โœจ ์ข‹์•„์š” api ํ•จ์ˆ˜ ์ถ”๊ฐ€ * FE-41โœจ ์ข‹์•„์š” ๊ธฐ๋Šฅ Layout์— ์ ์šฉ * FE-41โœจ Url Link๋ฒ„ํŠผ ์ƒ์„ฑ * FE-41๐Ÿ’„์ข‹์•„์š”,link๋ฒ„ํŠผ ์Šคํƒ€์ผ ์ˆ˜์ • * FE-41๐Ÿ› import ์—๋Ÿฌ ํ•ด๊ฒฐ * FE-41โ™ป๏ธ ๊ธฐ์กดheader-> Header์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ --------- Co-authored-by: ์šฐ์ง€์„ * FE-54๐Ÿ› ์˜คํƒ€ ์ˆ˜์ • * build error ํ•ด๊ฒฐ * FE-54๐Ÿ› build errorํ•ด๊ฒฐ * Fe-54โ™ป๏ธ์ƒ์„ธํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#131) * FE-54๐Ÿšš ์ƒ์„ธํŽ˜์ด์ง€,์ˆ˜์ •ํŽ˜์ด์ง€ ํŽ˜์ด์ง€ ํด๋” ๋ณ€๊ฒฝ * FE-54โ™ป๏ธ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” url ์ˆ˜์ • * FE-54๐Ÿšš ์ž‘์„ฑํŽ˜์ด์ง€ ํŽ˜์ด์ง€ ํด๋” ์ƒ์„ฑ --------- Co-authored-by: Woojiseok * FE-46 โœจ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๋’ค๋กœ๊ฐ€๊ธฐ ํ•จ์ˆ˜ ์ถ”๊ฐ€ (#135) (#136) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- * FE-32 ๐Ÿ”€๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ ๋ฉ”์ธ ๋จธ์ง€ (#107) * ๐Ÿ’„FE-33 ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ UI (#10) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * โœจFeat: SearchBar UI ์ดˆ์•ˆ ์™„์„ฑ * styles: tailwind css ํฐํŠธ ์‚ฌ์ด์ฆˆ ์ถ”๊ฐ€ * feat: RecentSearches UI ์ดˆ์•ˆ ์™„์„ฑ * ๏ฟฝstyles: SearchResults UI ์ˆ˜์ • * ๏ฟฝstyles: RecentSearches UI ์ˆ˜์ • * โœจstyles: ๋ฐ˜์‘ํ˜• UI ์ถ”๊ฐ€ * FE-33 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * FE-33 fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * fix: build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ --------- * FE-65 โœจ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ (#51) * FE-65 โœจfeat: ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-65 โœจfeat: ๊ฒ€์ƒ‰๋ฐ”์™€ ์—ฐ๋™ํ•˜์—ฌ ์ฆ‰์‹œ ๋ฐ˜์˜๋˜๋„๋ก ์ˆ˜์ • * FE-65 โœจfeat: debounce๋ฅผ ์œ„ํ•œ lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ * FE-65 โœจfeat: debounce ๊ธฐ๋Šฅ ์ ์šฉ(++lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) * FE-65 โœจfeat: useEffectt๋กœ debouncedSearchํ•จ์ˆ˜ ์˜์กด์„ฑ ์„ค์ • * FE-65 โœจfeat: useCallback ๋Œ€์‹  useRef๋กœ ๋ณ€๊ฒฝ * FE-65 โœจfix:: debounce ๊ธฐ๋Šฅ ์ œ๊ฑฐ(๋ถˆํ•„์š”) * FE-65 โœจfeat: focus๋  ๋•Œ placeholder ์‚ฌ๋ผ์ง€๊ฒŒ ์ˆ˜์ • ๋ฐ UI ์ˆ˜์ • * FE-65 โœจfeat: isInitialMount ์„ ์–ธ ๋ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-65 โœจfix: ์ฃผ์„ ์ˆ˜์ • * FE-65 โœจfeat: ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ํด๋ฆญ ์‹œ ๊ทธ ๊ฒ€์ƒ‰์–ด๋กœ ๊ฒ€์ƒ‰๋˜๋Š” ๊ธฐ๋Šฅ * FE-65 styles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋Šฅ (#73) * FE-74 fix: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ญ์ œ * FE-74 โœจfeat: ํ…Œ์ŠคํŠธ ์šฉ api ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ * FE-74 โœจfeat: ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-74 โœจfix: ์ค‘๋ณต๋œ key, href ์ œ๊ฑฐ ๋ฐ ๊ทœ์น™ ๋ฌด์‹œ ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจtest: ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ * FE-74 โœจfeat: ๊ฒ€์ƒ‰์–ด ํ•˜์ด๋ผ์ดํŒ… ๋ฐ ์ˆœ์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-74 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ api ํŒŒ์ผ ์‚ญ์ œ * FE-74 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-74 โœจfix: ๋ฉ˜ํ† ๋ง ๋‚ด์šฉ ์ฃผ์„์œผ๋กœ ์ถ”๊ฐ€ * FE-32 ๐Ÿ”€ epic๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#77) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ --------- * FE-75 โœจ๋ฌดํ•œ ์Šคํฌ๋กค, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ URL์— ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#104) * FE-75 โœจstyles: tailwind .config ํŒŒ์ผ ๋ฉ”์ธ๊ณผ ํ†ตํ•ฉ * FE-75 โœจfeat: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ Header ์ถ”๊ฐ€ * FE-75 โœจrefactor: useMemo ์‚ฌ์šฉ * FE-75 โœจfeat: URL์— ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ €์žฅ * FE-75 โœจstyles: ๋กœ๋”ฉ ์Šคํƒ€์ผ ๊ตฌํ˜„ * FE-75 โœจfeat: ์‹ค์ œ api ์ถ”๊ฐ€ * FE-75 โœจfeat: api ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-75 โœจfeat: ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„ * FE-75 โœจfix: ์˜์กด์„ฑ ๋ฐฐ์—ด์—์„œ ๋กœ๋”ฉ ์ƒํƒœ ์ œ๊ฑฐ * FE-75 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-75 โœจfeat:: ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ * FE-75 โœจfix: ๊ฒ€์ƒ‰ ์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋„๋ก ์ˆ˜์ • * FE-32 ๐Ÿ”€๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#105) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- * .http ํŒŒ์ผ ์‚ญ์ œ --------- * FE-32 ๐Ÿ”€๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#110) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ * build ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ์ค‘ * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- * .http ํŒŒ์ผ ์‚ญ์ œ * merge main --------- * FE-32 ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ๋ฉ”์ธ ์ถฉ๋Œ ์ˆ˜์ • (#112) * .nvmrc ๋ฒ„์ „ ์ˆ˜์ • * ํฐํŠธ ๋ฐ ๊ณต์šฉ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ (#6) * font-family ์ถ”๊ฐ€ * tailwind common color ์ถ”๊ฐ€ * color ๋ช… ๋ณ€๊ฒฝ * lang ์ˆ˜์ • --------- * :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ shadcn ui ์ถ”๊ฐ€ (#7) * :lipstick: Feat: shadcn-ui init * :lipstick: Feat: add toast ui * Feat: add textarea ui * Feat: add switch ui * Feat: add radio-group ui * Feat: add label ui * Feat: add input ui * Feat: add form ui * Feat: add button ui * Feat: add dropdown-menu ui * Feat: add card ui * Feat: add badge ui * Feat: add avatar ui * Feat: add alert dialog ui * Chore: add eslint rules * Chore: add shadcn ui * FE-48 ๐Ÿ“ฐ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ face emoji svg ํŒŒ์ผ ์ƒ์„ฑ * FE-48 :art: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ƒ์„ฑ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์„ค์ • * FE-48 :lipstick: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ ui ์ˆ˜์ • * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์นด๋“œ ํด๋ฆญ ์ด๋ฒคํŠธ ๊ตฌํ˜„ - EmotionIconCardContainer๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ (Clicked<->UnClicked) * FE-48 ๐Ÿ“ ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ช…ํ™•ํ•œ ์˜๋ฏธ ์ „๋‹ฌ์„ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-48 :sparkles: ๊ฐ์ • ์ด๋ชจํ‹ฐ์ฝ˜ ์ƒํƒœ ๋ณ€ํ™” ๋™๊ธฐํ™” ๊ตฌ ๊ฐ์ • ์นด๋“œ๋ฅผ ํด๋ฆญํ•  ๋•Œ ์ƒํƒœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „ํ™˜๋˜๊ณ , ๋‹ค๋ฅธ ์นด๋“œ์˜ ์ƒํƒœ๋„ ๋™๊ธฐํ™”๋˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-48 :sparkles: EmotionSelector ์ปดํฌ๋„ŒํŠธ ๋™์  ํฌ๊ธฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„ useMediaQuery ํ›… ์ƒ์„ฑ: ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ * FE-48 :fire: ์ถœ๋ ฅ ํ™•์ธ์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ * FE-48 :hammer: EmotionTypes ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ emotion ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ importํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๊ตฌํ˜„ * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ui ๊ตฌํ˜„ tailwind css๋ฅผ ํ™•์žฅํ•ด ์ค„๋ฌด๋Šฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€ ๊ตฌํ˜„ * FE-59 :sparkles: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๋ฐ˜์‘ํ˜„ ๋””์ž์ธ ๊ตฌํ˜„ * FE-59 :lipstick: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ๊ธ€์”จ์ฒด ์ ์šฉ * FE-59 :fire: ์—ํ”ผ๊ทธ๋žจ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-59 :fire: ํ…Œ์ŠคํŠธ ํ”์  ์‚ญ์ œ * FE-58 :sparkles: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋Œ“๊ธ€ ์นด๋“œ ๊ธฐ๋ณธ ui ๊ตฌํ˜„ * FE-58 :lipstick: ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ์ ์šฉ * FE-58 :fire: ๋Œ“๊ธ€ ์นด๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-58 :lips: ๋Œ“๊ธ€ ์นด๋“œ ๊ด€๋ จ ์ธํ„ฐํŽ˜์ด์Šค, ์Šคํƒ€์ผ ๋ถ„๋ฆฌ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-50 โœจ๊ณต์šฉ์ปดํฌ๋„ŒํŠธ ํ—ค๋” ๊ตฌํ˜„ (#19) * FE-5050โœจ feat: ํ—ค๋” ๋ถ€๋ถ„ ๊ธฐ๋Šฅ ์ดˆ์•ˆ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”๊ฐ€ * FE-50 โœจstyles: ์ฃผ์„ ์ถ”์ถ”๊ฐ€ * FE-5050 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfeat: ๊ณต์œ  ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ๋ฐ ํ˜„์žฌ URL ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-50 โœจstyles: U์…‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น ์ง€๋”๋ผ๋„ ์•ˆ๋ฌด๋„ˆ์ง€๊ฒŒ UI ์ˆ˜์ • * FE-50 โœจcomment: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€ * FE-50 โœจfix: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-50 โœจfix: ํ•จ์ˆ˜๋ช… ์ปจ๋ฒค์…˜์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ * FE-50 โœจfix: types ํด๋”์— interface ์ •์˜ * FE-50 fix: build ์˜ค๋ฅ˜ ์ˆ˜์ • * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * FE-61 ๐Ÿ”จ eslint ๊ทœ์น™ ์ˆ˜์ • * FE-61 ๐Ÿ”ฅ InteractiveEmotionIconCard ์‚ญ์ œ ๋‹จ์ˆœ ๋ž˜ํ•‘ ๊ธฐ๋Šฅ๋ฐ–์— ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ / emotionselector์—์„œ emotioniconcard๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ • * FE-61 ๐Ÿ”จ EpigramCard ์‚ฌ์ด์ฆˆ ์žฌ์ •์˜ base -> xs๋กœ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ ํ…์ŠคํŠธ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 ๐Ÿ”จ CommentCard ํƒ€์ž… ๋‚ด๋ถ€ ์ •์˜ * FE-61 :truck: ๊ฐ์ • ์นด๋“œ ํด๋” ๊ตฌ์กฐ ๋ณ€๊ฒฝ * FE-61 ๐Ÿ“ ๊ฐ์ • ์นด๋“œ, ๊ฐ์ • ์…€๋ ‰ํ„ฐ ์ฃผ์„ ์ถ”๊ฐ€ * FE-61 :fire: ๋Œ“๊ธ€ ์นด๋“œ ๋””ํดํŠธ ํ”„๋กญ ์‚ญ์ œ * FE-62 โœจfix: ์ฃผ์„ ์ˆ˜์ • ๋ฐ ํƒ€์ž… ์ˆ˜์ • (#27) * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API --------- * FE-57 :sparkles: ๋Œ“๊ธ€ ์‚ญ์ œ API (#88) * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (#93) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ์ตœ์‹ ํ™” (์ถฉ๋Œ์ˆ˜์ •) (#98) --------- --------- --------- * FE-27 :twisted_rightwards_arrows: ๋งˆ์ดํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#100) * FE-34 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ํ”„๋กœํ•„ ์ˆ˜์ • ๊ธฐ๋Šฅ (#53) * FE-34 :lipstick: ๋งˆ์ดํŽ˜์ด์ง€ UI ์ดˆ๊ธฐ์ž‘์—… * FE-34 :sparkles: ๋‚ด ์ •๋ณด ์กฐํšŒ API ์—ฐ๋™ * FE-34 :lipstick: shadcn/ui Dialog ์„ค์น˜ * FE-34 :sparkles: ํ”„๋กœํ•„ ์ˆ˜์ • API ์—ฐ๋™ * FE-34 :sparkles: ์ด๋ฏธ์ง€ ์‹คํŒจ ํ† ์ŠคํŠธ ์ถ”๊ฐ€ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ์บ˜๋ฆฐ๋” ์ถœ๋ ฅ ํ•จ์ˆ˜ (#58) * FE-36 :lipstick: ๊ฐ์ •๋‹ฌ๋ ฅ UI * FE-36 :sparkles: ์บ˜๋ฆฐ๋” ํ•จ์ˆ˜ ์ƒ์„ฑ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ (#65) * FE-36 :lipstick: ๊ฐ์ •๋‹ฌ๋ ฅ UI * FE-36 :sparkles: ์บ˜๋ฆฐ๋” ํ•จ์ˆ˜ ์ƒ์„ฑ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ: ์˜ค๋Š˜ ๋‚ ์งœ ํ‘œ์‹œ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ์›” ๋ณ„ ๊ฐ์ •๋กœ๊ทธ ์กฐํšŒ API ์—ฐ๋™ * FE-36 :sparkles: ์›”๋ณ„ ๊ฐ์ • ๋กœ๊ทธ ํ•ด๋‹น ๋‚ ์งœ์— ์ถœ๋ ฅ * FE-36 :lipstick: ๋‹ฌ๋ ฅ css ์ˆ˜์ • * FE-36 :art: ๋งˆ์ดํŽ˜์ด์ง€ ์บ˜๋ฆฐ๋” ํ—ค๋” ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ * FE-36 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •๋‹ฌ๋ ฅ ํ•„ํ„ฐ๊ธฐ๋Šฅ * FE-27 :twisted_rightwards_arrows: ์—ํ”ฝ ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#81) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-27 :twisted_rightwards_arrows: ๋งˆ์ดํŽ˜์ด์ง€ ์—ํ”ฝ ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#85) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#86) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- --------- * FE-37 :sparkles: ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐ์ •์ฐจํŠธ (#89) * FE-37 :recycle: ์›”๋ณ„ ๊ฐ์ •๋กœ๊ทธ ์กฐํšŒ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง * FE-37 :sparkles: ๊ฐ์ • ์ฐจํŠธ * FE-37 :hammer: ์ƒ์ˆ˜ ์ปจ๋ฒค์…˜ ์ˆ˜์ • * FE-27 :twisted_rightwards_arrows: ๋ธŒ๋žœ์น˜ ์ตœ์‹ ํ™” (#99) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :lipstick: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ถ”๊ฐ€ * :lipstick: ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋กœ๊ณ  ์ถ”๊ฐ€ * :lipstick: ํšŒ์›๊ฐ€์ž… ui ์ถ”๊ฐ€ * :sparkles: ํšŒ์›๊ฐ€์ž… ์Šคํ‚ค๋งˆ ์ •์˜ * :heavy_plus_sign: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ์Šคํ‚ค๋งˆ ์ ์šฉ * :lipstick: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋œฐ ๋•Œ ๋ผ๋ฒจ, ์ธํ’‹๋„ ๊ฐ™์€ ์—๋Ÿฌ ์ƒ‰๊น” ์ถ”๊ฐ€ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฒ„ํŠผ์˜ ๋น„ํ™œ์„ฑํ™” ์ฒ˜๋ฆฌ * :memo: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ๋”ฐ๋ฅธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ * :fire: AuthLayout ์‚ญ์ œ * :art: ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋ธŒ๋ผ์šฐ์ € ํ™•๋Œ€์‹œ ui ๊นจ์ง ์ˆ˜์ • * :truck: ์ •๊ทœํ‘œํ˜„์‹ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :sparkles: ํšŒ์›๊ฐ€์ž… ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ํšŒ์›๊ฐ€์ž… api ์ƒ์„ฑ * :sparkles: useRegisterMutation hook ์ƒ์„ฑ * :zap: ํšŒ์›๊ฐ€์ž… ํผ์— mutaion hook ์ ์šฉ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :zap: isAxiosError๋กœ ๋ณ€๊ฒฝ * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * :twisted_rightwards_arrows: ์ถฉ๋Œ ํ•ด๊ฒฐ * :bug: postSignup ํ•จ์ˆ˜ ์ถ”๊ฐ€ * :bug: postSignin ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹ ์ˆ˜์ • * :wrench: lint ์ˆ˜์ • * :sparkles: oauth api ์ƒ์„ฑ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธ๋กœ ๋ณ€๊ฒฝ * FE-72โœจ ํƒœ๊ทธ ์ €์žฅ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ * FE-72โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก์‹œ ํ•ด๋‹น ์—ํ”ผ๊ทธ๋žจ ํŽ˜์ด์ง€๋กœ ์ด๋™ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ * FE-72โœจ ๋“ฑ๋ก ์ค‘์ผ๋•Œ์˜ ๋กœ์ง์ถ”๊ฐ€ * FE-72โœจ toast-> alert-dailog๋กœ ๋ณ€๊ฒฝ * FE-72๐Ÿ“ TODO์ฃผ์„ ์ถ”๊ฐ€ --------- * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ (#66) * FE-73โ™ป๏ธ Tag๊ด€๋ฆฌ ํ•จ์ˆ˜ ํ›…์œผ๋กœ ๋ถ„๋ฆฌ * FE-73โœจ RadioGroup ๋กœ์ง ์ˆ˜์ • * FE-73โœจ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ €์ž ๋ณธ์ธ ์„ ํƒ์‹œ์˜ ๋กœ์ง ๋ณ€๊ฒฝ * FE-73โœจ ์ค‘๋ณต ํƒœ๊ทธ ๊ฒ€์‚ฌ ๋กœ์ง ์ถ”๊ฐ€ * FE-73โ™ป๏ธ ์ถœ์ฒ˜ ์œ ํšจ์„ฑ(optional)๊ฒ€์‚ฌ ์ˆ˜์ • * FE-73โœจ ํ•„์ˆ˜ํ•ญ๋ชฉ ์ž…๋ ฅํ–ˆ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” * FE-73๐Ÿ› ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค๊ฐ€ ์ง€์› ์„๋•Œ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”๋˜์žˆ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • * FE-73๐Ÿ› useEffect ์˜์กด์„ฑ๋ฐฐ์—ด lint problem ํ•ด๊ฒฐ * FE-73๐Ÿ› url์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€ ์•ˆ๋œจ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • --------- * FE-71โ™ป๏ธ epic๋ธŒ๋žœ์น˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ (#76) * FE-71โ™ป๏ธ token,interceptor ๋กœ์ง ์ˆ˜์ • * FE-71โ™ป๏ธ AddEpigram ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜ * FE-71๐Ÿ”ฅ ํ…Œ์ŠคํŠธ์šฉ ์ƒ์„ธํŽ˜์ด์ง€ ์‚ญ์ œ * FE-71โ™ป๏ธ onKeyDown -> onKeyUp ์ˆ˜์ • --------- * :sparkles: ์นด์นด์˜คํ†ก ๋ฆฌ๋””๋ ‰ํŠธ uri ์„ค์ • * :sparkles: useKakaoLogin mutation hook ์ƒ์„ฑ * :zap: ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€ ์นด์นด์˜ค ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋งํฌ ์„ค์ • * :recycle: ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-51 :twisted_rightwards_arrows: ๊ณต์šฉ API ๋จธ์ง€ ์š”์ฒญ (#92) * FE-52 โœจ์—ํ”ผ๊ทธ๋žจ ๋ชฉ๋ก์กฐํšŒ API (#34) * FE-52 feat: api schema ์ž‘์„ฑ * FE-52 โœจfeat: getEpigrams api ์ž‘์„ฑ * FE-522 โœจfix: default export๋กœ ๋ณ€๊ฒฝ * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ * FE-52 โœจfeat: BaseUrl, TeamID ์ƒ์ˆ˜ ์ถ”๊ฐ€ ๋ฐ axios baseTRL ์ˆ˜์ • * FE-52 โœจfix: schema ๋ฐ apis ํŒŒ์ผ ์ˆ˜์ • * FE-52 โœจtest: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: .envํŒŒ์ผ ์ƒ์„ฑ ๋ฐ BaseURL ์ˆ˜์ • * FE-52 โœจfix: limit ํƒ€์ž… ์ˆ˜์ •(optional ์‚ญ์ œ) * FE-52 โœจtext: ํ…Œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์‚ญ์ œ * FE-52 โœจfix: api GET์š”์ฒญ ์ฃผ์†Œ ์ˆ˜์ •('epigrams' -> '/epigrams') * FE-53 :sparkles: ๊ฐ์ •์ด๋ชจํ‹ฐ์ฝ˜ ์ €์žฅ ์Šคํ‚ค๋งˆ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์ €์žฅ api ์ƒ์„ฑ * FE-53 :sparkles: getMe ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ ํ™•์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ * FE-53 :sparkles: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ * FE-53 :sparkles: ๊ฐ์ • ์ €์žฅ ํ›„ ํ† ์ŠคํŠธ ์•Œ๋ฆผ ํ‘œ์‹œ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ api ์ƒ์„ฑ * FE-53 :hammer: ๊ฐ์ • ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ถ”๊ฐ€ +) post, get ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ํ•œ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์ด๋™ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ ์ •์˜ * FE-53 :sparkles: ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ํ•จ์ˆ˜ ์ ์šฉ * FE-53 :truck: ์˜ค๋Š˜์˜ ๊ฐ์ • type ์ด๋ฆ„ ๋ณ€๊ฒฝ * FE-53 :sparkles: useMutation ํ›… ์‚ฌ์šฉ * FE-53 :memo: EmotionSelector ์ฃผ์„ ์ถ”๊ฐ€ * FE-53 :fire: api ํ•จ์ˆ˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ์ œ๊ฑฐ * FE-53 :hammer: useQuery๋ฅผ ์‚ฌ์šฉํ•ด ์˜ค๋Š˜์˜ ๊ฐ์ • ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” useQuery๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ผ ํ•จ * FE-56 :sparkles: ๋Œ“๊ธ€ ์ˆ˜์ • API (#84) * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋จธ์ง€ ์š”์ฒญ (#39) * :heavy_plus_sign: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ถ”๊ฐ€ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ * :lipstick: ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ UI ์ƒ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„ * FE-60 :sparkles: react hook form, zod ์ถ”๊ฐ€ * FE-60 :lipstick: ๋กœ๊ทธ์ธ ํผ ์Šคํƒ€์ผ ์ˆ˜์ • - ํ…์ŠคํŠธ ์ธํ’‹ ํ…Œ๋‘๋ฆฌ - ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ * FE-60 :recycle: ๋กœ๊ทธ์ธ ์Šคํ‚ค๋งˆ ๋ถ„๋ฆฌ * :sparkles: ๋กœ๊ทธ์ธ ์‘๋‹ต ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ์ •์˜ * :sparkles: ๋กœ๊ทธ์ธ api ์ƒ์„ฑ * :sparkles: ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๊ด€ํ•œ ์ธํ„ฐ์…‰ํ„ฐ ์ถ”๊ฐ€ * :sparkles: useSignin mutation hook ์ƒ์„ฑ * :zap: useSignin hook ๋กœ๊ทธ์ธ ํผ์— ์ ์šฉ * :fire: AuthLayout ์‚ญ์ œ * :art: onSubmit ํ•จ์ˆ˜ ์ธ๋ผ์ธ์œผ๋กœ ์ •์˜ * :recycle: ์‘๋‹ต ์ธํ„ฐ์…‰ํ„ฐ์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ํ† ํฐ ๊ฐฑ์‹  ๋กœ์ง ๊ฐœ์„  * :recycle: postSignin api ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์‚ญ์ œ * :fire: useSignin hook ์‚ญ์ œ * :truck: useSigninMutation hook์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ํŒŒ์ผ ์ด๋™ * :sparkles: Toaster ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ * :sparkles: toast๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ธฐ * FE-71 ๐Ÿ”€ ์—ํ”ผ๊ทธ๋žจ ์ž‘์„ฑ ํŽ˜์ด์ง€ (#71) * FE-64๐Ÿ’„ ๊ธ€์ž‘์„ฑ ํŽ˜์ด์ง€ UI์ถ”๊ฐ€ (#44) * FE-72 โœจ ์—ํ”ผ๊ทธ๋žจ ๋“ฑ๋ก api์—ฐ๋™ (#52) * FE-72โœจ ๊ธ€์ž‘์„ฑํŽ˜์ด์ง€ ์Šคํ‚ค๋งˆ ์ถ”๊ฐ€ * FE-72โœจ formํƒœ๊ทธ Form์ปดํฌ๋„ŒํŠธโ€ฆ Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: MOON Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: ์šฐ์ง€์„ Co-authored-by: JeonYumin <40783675+JeonYumin94@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: ์ „์œ ๋ฏผ Co-authored-by: kich555 <79491683+kich555@users.noreply.github.com> Co-authored-by: morrison * FE-29 :twisted_rightwards_arrows: ๋กœ๊ทธ์ธ, ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ˜์˜ ์š”์ฒญ (#140) * :sparkles: ๋„ค์ด๋ฒ„ post api ์ถ”๊ฐ€ * :sparkles: ๊ตฌ๊ธ€ post api ์ถ”๊ฐ€ * :wrench: ๋ผ์šฐํŒ… ์ˆ˜์ • * :sparkles: ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ ํ›… ์ถ”๊ฐ€ ๋ฐ ๋ผ์šฐํŒ…, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ตฌํ˜„ * :sparkles: ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ํ›… ์ถ”๊ฐ€ ๋ฐ ๋ผ์šฐํŒ…, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ตฌํ˜„ * :sparkles: ๋„ค์ด๋ฒ„ ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์„ค์ • * :sparkles: ๊ตฌ๊ธ€ ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์„ค์ • * :wrench: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ์šฉ: ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€, ์นด์นด์˜ค ๋กœ๊ทธ์ธ URL ์—…๋ฐ์ดํŠธ * :wrench: ๊ฐ€์ž…ํ•˜๊ธฐ ๊ฒฝ๋กœ ์ˆ˜์ • * :wrench: ๋กœ๊ทธ์ธ ํ›… ๋ผ์šฐํŒ… ์ˆ˜์ • * :wrench: ๋กœ๊ทธ์ธ ํ›… ์—๋Ÿฌ์ฒ˜๋ฆฌ ๋กœ์ง ์ˆ˜์ • * FE-27 :fire: ํด๋”์ด๋™ ํ›„ ์‚ญ์ œ ์•ˆ๋œ ๊ธฐ์กด ํŒŒ์ผ ์‚ญ์ œ --------- Co-authored-by: Jiseok Woo <115205098+jisurk@users.noreply.github.com> Co-authored-by: Woojiseok Co-authored-by: MOON <50370479+jangmoonwon@users.noreply.github.com> Co-authored-by: MOON Co-authored-by: imsoohyeok <160010477+imsoohyeok@users.noreply.github.com> Co-authored-by: NEWJIN <109906670+newjinlee@users.noreply.github.com> Co-authored-by: NEWJIN Co-authored-by: kich555 <79491683+kich555@users.noreply.github.com> Co-authored-by: morrison Co-authored-by: ์ „์œ ๋ฏผ --- src/apis/postGoogleOauth.ts | 11 +++ src/apis/postNaverOauth.ts | 12 +++ src/components/Header/Header.tsx | 12 ++- src/components/epigram/EditEpigram.tsx | 13 +-- src/hooks/useGoogleLogin.ts | 41 ++++++++ src/hooks/useKakaoLogin.ts | 2 +- src/hooks/useNaverLogin.ts | 42 ++++++++ src/hooks/useSignInMutation.ts | 33 ++++++- src/pageLayout/Epigram/AddEpigram.tsx | 2 +- src/pageLayout/Epigrams/MainLayout.tsx | 2 +- src/pageLayout/MypageLayout/MyPageLayout.tsx | 2 +- src/pageLayout/SearchLayout/SearchLayout.tsx | 2 +- src/pages/auth/SignIn.tsx | 15 ++- .../auth/redirect/google-callback/index.ts | 21 ++++ src/pages/auth/redirect/naver/index.ts | 19 ++++ src/pages/epigrams/[id]/index.tsx | 2 +- src/user/ui-profile/Calendar.tsx | 96 ------------------- src/user/ui-profile/CalendarHeader.tsx | 58 ----------- src/user/ui-profile/Chart.tsx | 96 ------------------- src/user/ui-profile/EmotionMonthlyLogs.tsx | 40 -------- 20 files changed, 202 insertions(+), 319 deletions(-) create mode 100644 src/apis/postGoogleOauth.ts create mode 100644 src/apis/postNaverOauth.ts create mode 100644 src/hooks/useGoogleLogin.ts create mode 100644 src/hooks/useNaverLogin.ts create mode 100644 src/pages/auth/redirect/google-callback/index.ts create mode 100644 src/pages/auth/redirect/naver/index.ts delete mode 100644 src/user/ui-profile/Calendar.tsx delete mode 100644 src/user/ui-profile/CalendarHeader.tsx delete mode 100644 src/user/ui-profile/Chart.tsx delete mode 100644 src/user/ui-profile/EmotionMonthlyLogs.tsx diff --git a/src/apis/postGoogleOauth.ts b/src/apis/postGoogleOauth.ts new file mode 100644 index 00000000..66e9e737 --- /dev/null +++ b/src/apis/postGoogleOauth.ts @@ -0,0 +1,11 @@ +import httpClient from '.'; + +const postGoogleOauth = async (code: string) => { + const response = await httpClient.post('/auth/signIn/GOOGLE', { + redirectUri: process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI, + token: code, + }); + return response.data; +}; + +export default postGoogleOauth; diff --git a/src/apis/postNaverOauth.ts b/src/apis/postNaverOauth.ts new file mode 100644 index 00000000..56434bb0 --- /dev/null +++ b/src/apis/postNaverOauth.ts @@ -0,0 +1,12 @@ +import httpClient from '.'; + +const postNaverOauth = async (code: string, state: string) => { + const response = await httpClient.post('/auth/signIn/NAVER', { + state, + redirectUri: process.env.NEXT_PUBLIC_NAVER_REDIRECT_URI, + token: code, + }); + return response.data; +}; + +export default postNaverOauth; diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index d342347f..14df0b93 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -18,9 +18,10 @@ import SHARE_ICON from '../../../public/icon/share-icon.svg'; // NOTE isButton ์ผ ๊ฒฝ์šฐ textInButton์˜ ๊ฐ’์„ ๋ฌด์กฐ๊ฑด ์ง€์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. // NOTE SHARE_ICON ์ถ”๊ฐ€ ์‹œ ํ† ์ŠคํŠธ ๊ธฐ๋Šฅ๋„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ์•„๋ž˜ ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”. +// TODO ์ƒˆ๋กœ ๋ฐ”๋€ ํ”ผ๊ทธ๋งˆ ์‹œ์•ˆ์œผ๋กœ ๋ฐ”๊ฟ€์ง€ ์ถ”ํ›„ ๊ฒฐ์ • + export interface HeaderProps { icon: 'back' | 'search' | ''; - routerPage: string; isLogo: boolean; insteadOfLogo: string; isProfileIcon: boolean; @@ -31,10 +32,15 @@ export interface HeaderProps { onClick: (e: React.MouseEvent) => void; } -function Header({ isLogo, icon, insteadOfLogo, isButton, isProfileIcon, isShareIcon, textInButton, routerPage, disabled, onClick }: HeaderProps) { +function Header({ isLogo, icon, insteadOfLogo, isButton, isProfileIcon, isShareIcon, textInButton, disabled, onClick }: HeaderProps) { const router = useRouter(); const { toast } = useToast(); + // ๋’ค๋กœ๊ฐ€๊ธฐ + const handleBack = () => { + router.back(); + }; + // ํŽ˜์ด์ง€ ์ด๋™ ํ•จ์ˆ˜ const handleNavigateTo = (path: string) => { router.push(path); @@ -65,7 +71,7 @@ function Header({ isLogo, icon, insteadOfLogo, isButton, isProfileIcon, isShareI
{icon === 'back' && ( - )} diff --git a/src/components/epigram/EditEpigram.tsx b/src/components/epigram/EditEpigram.tsx index 1b7e5f1a..35cbe728 100644 --- a/src/components/epigram/EditEpigram.tsx +++ b/src/components/epigram/EditEpigram.tsx @@ -121,18 +121,7 @@ function EditEpigram({ epigram }: EditEpigramProps) { return ( <> -
{}} - /> +
{}} />
diff --git a/src/hooks/useGoogleLogin.ts b/src/hooks/useGoogleLogin.ts new file mode 100644 index 00000000..46045f44 --- /dev/null +++ b/src/hooks/useGoogleLogin.ts @@ -0,0 +1,41 @@ +import postGoogleOauth from '@/apis/postGoogleOauth'; +import { toast } from '@/components/ui/use-toast'; +import { useMutation } from '@tanstack/react-query'; +import { isAxiosError } from 'axios'; +import { useRouter } from 'next/router'; + +const useGoogleLogin = () => { + const router = useRouter(); + + return useMutation({ + mutationFn: async (code: string) => { + const result = await postGoogleOauth(code); + localStorage.setItem('accessToken', result.accessToken); + localStorage.setItem('refreshToken', result.refreshToken); + return result; + }, + onSuccess: () => { + router.push('/epigrams'); + }, + onError: (error) => { + if (isAxiosError(error)) { + const status = error.response?.status; + + if (!status) return; + + if (status === 400) { + toast({ description: '์ž˜๋ชป๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.', className: 'bg-state-error text-white font-semibold' }); + router.push('/auth/SignIn'); + return; + } + + if (status >= 500) { + toast({ description: '์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.', className: 'bg-state-error text-white font-semibold' }); + } + } + toast({ description: '์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.', className: 'bg-state-error text-white font-semibold' }); + }, + }); +}; + +export default useGoogleLogin; diff --git a/src/hooks/useKakaoLogin.ts b/src/hooks/useKakaoLogin.ts index 14d8d81b..ea627868 100644 --- a/src/hooks/useKakaoLogin.ts +++ b/src/hooks/useKakaoLogin.ts @@ -15,7 +15,7 @@ const useKakaoLogin = () => { return result; }, onSuccess: () => { - router.push('/'); + router.push('/epigrams'); }, onError: (error) => { if (isAxiosError(error)) { diff --git a/src/hooks/useNaverLogin.ts b/src/hooks/useNaverLogin.ts new file mode 100644 index 00000000..9ff23b36 --- /dev/null +++ b/src/hooks/useNaverLogin.ts @@ -0,0 +1,42 @@ +import postNaverOauth from '@/apis/postNaverOauth'; +import { toast } from '@/components/ui/use-toast'; +import { useMutation } from '@tanstack/react-query'; +import { isAxiosError } from 'axios'; +import { useRouter } from 'next/router'; + +const useNaverLogin = () => { + const router = useRouter(); + + return useMutation({ + mutationFn: async ({ code, state }: { code: string; state: string }) => { + const result = await postNaverOauth(code, state); + localStorage.setItem('accessToken', result.accessToken); + localStorage.setItem('refreshToken', result.refreshToken); + return result; + }, + onSuccess: () => { + router.push('/epigrams'); + }, + onError: (error) => { + if (isAxiosError(error)) { + const status = error.response?.status; + + if (!status) return; + + if (status === 400) { + toast({ description: '์ž˜๋ชป๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.', className: 'bg-state-error text-white font-semibold' }); + router.push('/auth/SignIn'); + return; + } + + if (status >= 500) { + toast({ description: '์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.', className: 'bg-state-error text-white font-semibold' }); + } + } + + toast({ description: '์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.', className: 'bg-state-error text-white font-semibold' }); + }, + }); +}; + +export default useNaverLogin; diff --git a/src/hooks/useSignInMutation.ts b/src/hooks/useSignInMutation.ts index 2f4ebb5e..0ed58dc1 100644 --- a/src/hooks/useSignInMutation.ts +++ b/src/hooks/useSignInMutation.ts @@ -2,6 +2,7 @@ import { postSignin } from '@/apis/auth'; import { toast } from '@/components/ui/use-toast'; import { useMutation } from '@tanstack/react-query'; import { useRouter } from 'next/router'; +import { isAxiosError } from 'axios'; const useSigninMutation = () => { const router = useRouter(); @@ -11,10 +12,36 @@ const useSigninMutation = () => { onSuccess: (data) => { localStorage.setItem('accessToken', data.accessToken); localStorage.setItem('refreshToken', data.refreshToken); - router.push('/'); + router.push('/epigrams'); }, - onError: () => { - toast({ description: '์ด๋ฉ”์ผ ํ˜น์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.', className: 'border-state-error text-state-error font-semibold' }); + onError: (error) => { + if (!isAxiosError(error)) { + return; + } + + const { status } = error.response || {}; + + if (status === 500) { + toast({ + description: '์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.', + className: 'border-state-error text-state-error font-semibold', + }); + return; + } + + // NOTE: status๊ฐ’์€ ํ•ญ์ƒ ์žˆ์œผ๋ฉฐ undefined์™€ ์ˆซ์ž๋ฅผ ๋น„๊ต์—ฐ์‚ฐ ํ•  ์ˆ˜ ์—†์–ด Number๋กœ ์„ค์ • + if (Number(status) >= 500) { + toast({ + description: '์„œ๋ฒ„์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.', + className: 'border-state-error text-state-error font-semibold', + }); + return; + } + + toast({ + description: '์ด๋ฉ”์ผ ํ˜น์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•ด์ฃผ์„ธ์š”.', + className: 'border-state-error text-state-error font-semibold', + }); }, }); }; diff --git a/src/pageLayout/Epigram/AddEpigram.tsx b/src/pageLayout/Epigram/AddEpigram.tsx index 5738f1d4..97391b8f 100644 --- a/src/pageLayout/Epigram/AddEpigram.tsx +++ b/src/pageLayout/Epigram/AddEpigram.tsx @@ -106,7 +106,7 @@ function AddEpigram() { return ( <> -
{}} /> +
{}} />
diff --git a/src/pageLayout/Epigrams/MainLayout.tsx b/src/pageLayout/Epigrams/MainLayout.tsx index ab5baa66..b805fec6 100644 --- a/src/pageLayout/Epigrams/MainLayout.tsx +++ b/src/pageLayout/Epigrams/MainLayout.tsx @@ -9,7 +9,7 @@ import FAB from '@/components/main/FAB'; function MainLayout() { return ( <> -
{}} /> +
{}} />
diff --git a/src/pageLayout/MypageLayout/MyPageLayout.tsx b/src/pageLayout/MypageLayout/MyPageLayout.tsx index 46594787..3ae052d7 100644 --- a/src/pageLayout/MypageLayout/MyPageLayout.tsx +++ b/src/pageLayout/MypageLayout/MyPageLayout.tsx @@ -27,7 +27,7 @@ export default function MyPageLayout() { return (
-
{}} /> +
{}} />
diff --git a/src/pageLayout/SearchLayout/SearchLayout.tsx b/src/pageLayout/SearchLayout/SearchLayout.tsx index 02c68db9..e83b7785 100644 --- a/src/pageLayout/SearchLayout/SearchLayout.tsx +++ b/src/pageLayout/SearchLayout/SearchLayout.tsx @@ -100,7 +100,7 @@ function SearchLayout() { return ( <> -
{}} />; +
{}} />;
diff --git a/src/pages/auth/SignIn.tsx b/src/pages/auth/SignIn.tsx index c1bfd025..8e165591 100644 --- a/src/pages/auth/SignIn.tsx +++ b/src/pages/auth/SignIn.tsx @@ -77,19 +77,24 @@ export default function SignIn() {

ํšŒ์›์ด ์•„๋‹ˆ์‹ ๊ฐ€์š”?

- +
- + logo-naver - - logo-google - + {/* // FIXME: ๊ตฌ๊ธ€ ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ 500์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์˜€์Œ */} + {/* */} + logo-google + {/* */} logo-kakao diff --git a/src/pages/auth/redirect/google-callback/index.ts b/src/pages/auth/redirect/google-callback/index.ts new file mode 100644 index 00000000..1f925901 --- /dev/null +++ b/src/pages/auth/redirect/google-callback/index.ts @@ -0,0 +1,21 @@ +import { useEffect } from 'react'; +import { useSearchParams } from 'next/navigation'; +import useGoogleLogin from '@/hooks/useGoogleLogin'; + +export default function Google() { + const searchParams = useSearchParams(); + const code = searchParams.get('code'); + const { mutate: login } = useGoogleLogin(); + + useEffect(() => { + if (code) { + login(code); + } else { + /* eslint-disable no-console */ + console.log(code); // code๊ฐ€ ์—†์„ ๋•Œ ์ฝ˜์†”์— ์ถœ๋ ฅ + } + }, [code, login]); +} + +// code๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ http://localhost:3000/auth/redirect/kakao +// ํ† ์ŠคํŠธ๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋„์šฐ๊ณ , ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ diff --git a/src/pages/auth/redirect/naver/index.ts b/src/pages/auth/redirect/naver/index.ts new file mode 100644 index 00000000..ff844a3d --- /dev/null +++ b/src/pages/auth/redirect/naver/index.ts @@ -0,0 +1,19 @@ +import useNaverLogin from '@/hooks/useNaverLogin'; +import { useSearchParams } from 'next/navigation'; +import { useEffect } from 'react'; + +export default function Naver() { + const searchParams = useSearchParams(); + const code = searchParams.get('code'); + const state = searchParams.get('state'); + const { mutate: login } = useNaverLogin(); + + useEffect(() => { + if (code && state) { + login({ code, state }); + } else { + /* eslint-disable no-console */ + console.log(code, state); // code๊ฐ€ ์—†์„ ๋•Œ ์ฝ˜์†”์— ์ถœ๋ ฅ + } + }, [code, state, login]); +} diff --git a/src/pages/epigrams/[id]/index.tsx b/src/pages/epigrams/[id]/index.tsx index 9f5424ae..ffbd6f79 100644 --- a/src/pages/epigrams/[id]/index.tsx +++ b/src/pages/epigrams/[id]/index.tsx @@ -22,7 +22,7 @@ function DetailPage() { return (
-
{}} /> +
{}} />
diff --git a/src/user/ui-profile/Calendar.tsx b/src/user/ui-profile/Calendar.tsx deleted file mode 100644 index 4ce6d06a..00000000 --- a/src/user/ui-profile/Calendar.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import React, { useState } from 'react'; -import Image from 'next/image'; -import { subMonths } from 'date-fns'; -import { EmotionLog, EmotionTypeEN } from '@/types/emotion'; -import useCalendar from '../../hooks/useCalendar'; -import { DAY_LIST, DATE_MONTH_FIXER, iconPaths } from '../utill/constants'; -import CalendarHeader from './CalendarHeader'; - -interface CalendarProps { - currentDate: Date; // ํ˜„์žฌ ๋‚ ์งœ - setCurrentDate: React.Dispatch>; // ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜ - monthlyEmotionLogs: EmotionLog[]; -} - -export default function Calendar({ currentDate, setCurrentDate, monthlyEmotionLogs }: CalendarProps) { - // ์บ˜๋ฆฐ๋” ํ•จ์ˆ˜ ํ˜ธ์ถœ - const { weekCalendarList } = useCalendar(currentDate); - // ๊ฐ์ • ํ•„ํ„ฐ - const [selectedEmotion, setSelectedEmotion] = useState(null); - - // ๋‹ฌ๋ ฅ์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งคํ•‘ - const emotionMap: Record = Array.isArray(monthlyEmotionLogs) - ? monthlyEmotionLogs.reduce>((acc, log) => { - const date = new Date(log.createdAt); - const dateString = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; - acc[dateString] = log.emotion as EmotionTypeEN; - return acc; - }, {}) - : {}; - - // ์ด์ „ ๋‹ฌ ํด๋ฆญ - const handlePrevMonth = () => setCurrentDate((prevDate) => subMonths(prevDate, DATE_MONTH_FIXER)); - // ๋‹ค์Œ ๋‹ฌ ํด๋ฆญ - const handleNextMonth = () => setCurrentDate((prevDate) => subMonths(prevDate, -DATE_MONTH_FIXER)); - - // ๊ฐ์ • ํ•„ํ„ฐ - const handleEmotionSelect = (emotion: EmotionTypeEN) => { - // ํ˜„์žฌ ์„ ํƒ๋œ ๊ฐ์ •๊ณผ ๊ฐ™์œผ๋ฉด ์ดˆ๊ธฐํ™” - if (selectedEmotion === emotion) { - setSelectedEmotion(null); - } else { - setSelectedEmotion(emotion); - } - }; - - // ํ•„ํ„ฐ๋ง๋œ ๊ฐ์ • ๋งต ์ƒ์„ฑ - const filteredEmotionMap = selectedEmotion ? Object.fromEntries(Object.entries(emotionMap).filter(([, value]) => value === selectedEmotion)) : emotionMap; - - return ( -
- {/* ์บ˜๋ฆฐ๋” ํ—ค๋” */} - - {/* ์บ˜๋ฆฐ๋” */} -
-
- {DAY_LIST.map((day) => ( -
- {day} -
- ))} -
- {weekCalendarList.map((week, weekIndex) => ( - // TODO: index ๊ฐ’ Lint error. ์ž„์‹œ๋กœ ์ฃผ์„ ์‚ฌ์šฉ. ์ถ”ํ›„ ์ˆ˜์ • ์˜ˆ์ • - // eslint-disable-next-line react/no-array-index-key -
- {week.map((day, dayIndex) => { - // ํ˜„์žฌ ๋‚ ์งœ์™€ ๋น„๊ต - const isToday = day === currentDate.getDate() && currentDate.getMonth() === new Date().getMonth() && currentDate.getFullYear() === new Date().getFullYear(); - const dateString = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`; - const emotion: EmotionTypeEN = filteredEmotionMap[dateString]; // ๋‚ ์งœ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ • ๊ฐ€์ ธ์˜ค๊ธฐ - const iconPath = emotion && iconPaths[emotion] ? iconPaths[emotion].path : '/icon/BW/SmileFaceBWIcon.svg'; - - return ( -
- {emotion ? ( -
-

{day}

- ๊ฐ์ • -
- ) : ( -

{day}

- )} -
- ); - })} -
- ))} -
-
- ); -} diff --git a/src/user/ui-profile/CalendarHeader.tsx b/src/user/ui-profile/CalendarHeader.tsx deleted file mode 100644 index 2c337e1c..00000000 --- a/src/user/ui-profile/CalendarHeader.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuGroup, DropdownMenu } from '@/components/ui/dropdown-menu'; -import { Button } from '@/components/ui/button'; -import Image from 'next/image'; -import { EmotionTypeEN } from '@/types/emotion'; -import ARROW_BOTTOM_ICON from '../../../public/icon/arrow-bottom-icon.svg'; -import ARROW_RIGHT_ICON from '../../../public/icon/arrow-right-icon.svg'; -import ARROW_LEFT_ICON from '../../../public/icon/arrow-left-icon.svg'; -import { iconPaths } from '../utill/constants'; - -interface CalendarHeaderProps { - currentDate: Date; - onPrevMonth: () => void; - onNextMonth: () => void; - onEmotionSelect: (emotion: EmotionTypeEN) => void; - selectEmotion: EmotionTypeEN | null; -} - -export default function CalendarHeader({ currentDate, onPrevMonth, onNextMonth, onEmotionSelect, selectEmotion }: CalendarHeaderProps) { - return ( -
-
-
{`${currentDate.getFullYear()}๋…„ ${currentDate.getMonth() + 1}์›”`}
- - - - - - - {Object.entries(iconPaths).map(([emotionKey, { path, name }]) => ( - - - - ))} - - - -
-
- - -
-
- ); -} diff --git a/src/user/ui-profile/Chart.tsx b/src/user/ui-profile/Chart.tsx deleted file mode 100644 index 6e89af4c..00000000 --- a/src/user/ui-profile/Chart.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { EmotionLog, EmotionTypeEN } from '@/types/emotion'; -import Image from 'next/image'; -import { iconPaths } from '../utill/constants'; - -interface ChartProps { - monthlyEmotionLogs: EmotionLog[]; -} - -export default function Chart({ monthlyEmotionLogs }: ChartProps) { - // ๊ฐ์ •๋ณ„ ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ - const emotionCounts = monthlyEmotionLogs.reduce( - (count, log) => { - const { emotion } = log; - return { - ...count, // ๊ธฐ์กด์˜ count๋ฅผ ๋ณต์‚ฌ - [emotion]: (count[emotion] || 0) + 1, // ํ˜„์žฌ ๊ฐ์ •์˜ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€ - }; - }, - {} as Record, - ); - - // ๊ฐ์ • ์ข…๋ฅ˜ ๋ฐ ์ด ๊ฐ์ • ์ˆ˜ ๊ณ„์‚ฐ - const TOTAL_COUNT = monthlyEmotionLogs.length; - const EMOTIONS: EmotionTypeEN[] = ['MOVED', 'HAPPY', 'WORRIED', 'SAD', 'ANGRY']; - const RADIUS = 90; // ์›์˜ ๋ฐ˜์ง€๋ฆ„ - const CIRCUMFERENCE = 2 * Math.PI * RADIUS; - - // ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฐ์ • ์ฐพ๊ธฐ - const maxEmotion = EMOTIONS.reduce((max, emotion) => (emotionCounts[emotion] > emotionCounts[max] ? emotion : max), EMOTIONS[0]); - - // ์›ํ˜• ์ฐจํŠธ์˜ ๊ฐ ๊ฐ์ •์— ๋Œ€ํ•œ strokeDasharray์™€ strokeDashoffset ๊ณ„์‚ฐ - let offset = 0; - - return ( -
-

๊ฐ์ • ์ฐจํŠธ

-
-
- - - {EMOTIONS.map((emotion) => { - const count = emotionCounts[emotion] || 0; - const percentage = TOTAL_COUNT > 0 ? count / TOTAL_COUNT : 0; // 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋ฐฉ์ง€ - const strokeDasharray = `${CIRCUMFERENCE * percentage} ${CIRCUMFERENCE * (1 - percentage)}`; - - // ์ƒ‰์ƒ ์„ค์ • - let strokeColor; - switch (emotion) { - case 'HAPPY': - strokeColor = '#FBC85B'; - break; - case 'SAD': - strokeColor = '#E3E9F1'; - break; - case 'WORRIED': - strokeColor = '#C7D1E0'; - break; - case 'ANGRY': - strokeColor = '#EFF3F8'; - break; - default: - strokeColor = '#48BB98'; - } - - const circle = ; - - offset += CIRCUMFERENCE * percentage; // ๋‹ค์Œ ์›์„ ์œ„ํ•œ offset ์—…๋ฐ์ดํŠธ - return circle; - })} - - {/* ์ค‘์•™์— ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฐ์ • ์ถœ๋ ฅ */} -
- ๊ฐ์ • -

{iconPaths[maxEmotion].name}

-
-
-
-
- {EMOTIONS.map((emotion) => { - const count = emotionCounts[emotion] || 0; - const percentage = TOTAL_COUNT > 0 ? Math.floor((count / TOTAL_COUNT) * 100) : 0; // ํผ์„ผํŠธ ๊ณ„์‚ฐ ๋ฐ ์†Œ์ˆ˜์  ๋ฒ„๋ฆฌ๊ธฐ - - return ( -
-

- ๊ฐ์ • -

{percentage}%

-
- ); - })} -
-
-
-
- ); -} diff --git a/src/user/ui-profile/EmotionMonthlyLogs.tsx b/src/user/ui-profile/EmotionMonthlyLogs.tsx deleted file mode 100644 index 18d4ada8..00000000 --- a/src/user/ui-profile/EmotionMonthlyLogs.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useMonthlyEmotionLogs } from '@/hooks/useGetEmotion'; -import { Emotion } from '@/types/emotion'; -import { useEffect, useState } from 'react'; -import Calendar from './Calendar'; -import Chart from './Chart'; - -interface EmotionMonthlyLogsProps { - userId: number; -} - -export default function EmotionMonthlyLogs({ userId }: EmotionMonthlyLogsProps) { - // ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ์ƒํƒœ๋กœ ๊ด€๋ฆฌ - const [currentDate, setCurrentDate] = useState(new Date()); - - // ๊ฐ์ • ๋‹ฌ๋ ฅ ๊ฐ์ฒด ์ƒํƒœ ์ถ”๊ฐ€ - const [emotionRequest, setEmotionRequest] = useState({ - userId, - year: currentDate.getFullYear(), - month: currentDate.getMonth() + 1, - }); - - // '์›”'์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค request ์—…๋ฐ์ดํŠธ - useEffect(() => { - setEmotionRequest({ - userId, - year: currentDate.getFullYear(), - month: currentDate.getMonth() + 1, - }); - }, [currentDate]); - - // ์›”๋ณ„ ๊ฐ์ • ๋กœ๊ทธ ์กฐํšŒ - const { data: monthlyEmotionLogs = [] } = useMonthlyEmotionLogs(emotionRequest); - - return ( - <> - - - - ); -}