Skip to content

Commit

Permalink
Fe dev -> main merge (#277)
Browse files Browse the repository at this point in the history
* refactor: Chip ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€

* refactor: Text ์ปดํฌ๋„ŒํŠธ์— alias ์ถ”๊ฐ€

* refactor: Icon ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* feat: ๋”•์…”๋„ˆ๋ฆฌ ์ฒดํฌํ•˜๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: fetch ๋กœ์ง apis๋กœ ์˜ฎ๊น€

* refactor: useUserCode ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

* fix: ์ƒํƒœ ๊ฐ’ ๋ณ€๊ฒฝ

* refactor: ํƒ€์ž… ๊ฐ€๋“œ ์ถ”๊ฐ€

* refactor: useUser ํ›… ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ

* chore: ํ•„์š”์—†๋Š” ์ฃผ์„ ์‚ญ์ œ

* refactor: Error ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ

* refactor: type ๊ฐ€๋“œ ์ถ”๊ฐ€

* feat: gap ์ถ”๊ฐ€

* refactor: ๊ณตํ†ต๋˜๋Š” style ๋ถ„๋ฆฌ

* refactor: ์œ ํ‹ธํ•จ์ˆ˜ ํ†ตํ•ฉ getOrigin => getTarget

* refactor: ํ•จ์ˆ˜ return๋ฌธ ์ˆ˜์ •

* refactor: ์œ ํ‹ธํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •, ์Šค์ฝ”์–ด๊ฐ€ ํ…Œ์ด๋ธ” ๋’ค์— ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •

* feat: dashboardPage ๋ ˆ์ด์•„์›ƒ ๋ฐ˜์˜- ์•„ํ†ฐ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

* reafactor: eslintํ™œ์„ฑํ™”

* chore: if else ๋ฌธ if ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์„œ  ๊ฐ€๋…์„ฑ ์˜ฌ๋ฆผ

* refactor: ํ•„์š” ์—†๋Š” ์ฃผ์„ ์‚ญ์ œ

* refactor: ๋ถˆ๋ช…ํ™•ํ•œ ํ•จ์ˆ˜ ์ œ๊ฑฐ, types ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

* refactor: ๋Œ€์‹œ๋ณด๋“œ ๋ณด๊ธฐ ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ˆ˜์ •

* refactor: ์Šคํƒ€์ผ ์ค‘๋ณต ์ œ๊ฑฐ, ๋ ˆ์ด์•„์›ƒ ์ ์šฉ

* refactor: ํ…Œ์ŠคํŠธ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* refactor: ์•ˆ๋‚ด๋ฌธ๊ตฌ ์ˆ˜์ •

* refactor: ํ•„์š”์—†๋Š” ๋ถ„๊ธฐ ์ œ๊ฑฐ

* feat: ๋Œ€ํšŒ ์ข…๋ฃŒ ํ›„ 5๋ถ„ ์ด๋‚ด์—๋Š” ๋Œ€์‹œ๋ณด๋“œ ํŽ˜์ด์ง€์—์„œ ๋กœ๋”ฉ ํŽ˜์ด์ง€๋ฅผ ์ถœ๋ ฅ

* feat: surface.light ์ถ”๊ฐ€

* refactor: type title์— ๋Œ€ํ•œ ์˜คํƒ€ ์ˆ˜์ •

* refactor: ์ค‘๋ณต ์ œ๊ฑฐ, common์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ, pandacss ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: PageLayout์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •

* dashboardTable์—์„œ socket๊ณผ api๋ณ„๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ๋ถ„๋ฆฌ

* refactor: ๋ชจ๋‹ฌ์ฐฝ์ด dashboardTable์—๊ฒŒ props๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๋„๋ก ์ˆ˜์ •

* refactor: ๋ฐ์ดํ„ฐ๋ฅผ props๋กœ ๋ฐ›๋„๋ก ์ˆ˜์ •

* feat: ์‹œ๊ฐ„์— ๋”ฐ๋ผ socket ํ˜น์€ api๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑ

* refactor: consolelog์ฝ”๋“œ ์‚ญ์ œ

* chore: ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋Œ€ํšŒ ์ƒ์„ฑ ๋ฒ„ํŠผ ๋””์ž์ธ ์ˆ˜์ •

* chore: ํŽ˜์ด์ง€ ์„ค๋ช… ์ƒ์ˆ˜ ๋ณ€๊ฒฝ

* feat: CheckCircle ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

* chore: Header ๋””์ž์ธ ์ˆ˜์ •

* chore: ๋Œ€ํšŒ ์ •๋ณด ๋ฆฌ์ŠคํŠธ ๋””์ž์ธ ๋ณ€๊ฒฝ

* chore: ํ•„์š”์—†๋Š” ์ฃผ์„ ์‚ญ์ œ

* feat: alert์— success์™€ danger์— light์ถ”๊ฐ€

* refactor: ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ ํ™œ์šฉ ๋ฐ ์Šคํƒ€์ผ ์ ์šฉ

* refactor: ๊นƒํ—ˆ๋ธŒ URL์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌ

* refactor: CheckCircle => ๊ณตํ†ต ๋””์ž์ธ์œผ๋กœ ๋ณ€๊ฒฝ

* refactor: VStack ์ปดํฌ๋„ŒํŠธ ํด๋”๋กœ ์ด๋™

* update: VStack์— placeItem center๋ฅผ default๋กœ ์ถ”๊ฐ€

* update: CompetitionHeader ์š”์†Œ ์ค‘์•™ ๋ฐฐ์น˜ ๋ฐ gap ์„ค์ •

* update: BreadCrumb ๋ชจ์–‘ ์—…๋ฐ์ดํŠธ

* update: ๋Œ€ํšŒ ํ™”๋ฉด์— ๋กœ๊ณ  ์ถ”๊ฐ€

* fix: ์—๋””ํ„ฐ๊ฐ€ ํ™”๋ฉด์„ ๋ฒ—์–ด๋‚˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* update: ๋ฌธ์ œ ํ•ด๋” ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ

* fix: react์˜ unique props key ๋ฌธ์ œ ํ•ด๊ฒฐ"

* refactor: HStack ํด๋”๋กœ ์ด๋™

* update: ๋ฌธ์ œ ์„ ํƒ aside ๋ ˆ์ด์•„์›ƒ ์กฐ์ •

* update: footer ๋ ˆ์ด์•„์›ƒ ๊ฐœ์„ 

* update: ์—๋””ํ„ฐ ํฌ๊ธฐ๋ฅผ ์ „์ฒด 50% ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ProblemSolveContainer ๋ถ„๋ฆฌ

* refactor: ProblemSolveContainer์— ์‹ค์ œ ๋Œ€ํšŒ ์ •๋ณด ์ฃผ์ž…

* refactor: ๋ถˆํ•„์š”ํ•œ ๋ผ์ธ ์ œ๊ฑฐ

* refactor: Stack ์ปดํฌ๋„ŒํŠธ์—์„œ ์ค‘์•™์ •๋ ฌ ๋กœ์ง ์ œ๊ฑฐ

* refactor: ์ผ๋ถ€ 100% -> full ๋กœ ์Šคํƒ€์ผ ํ† ํฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* update: ์—๋””ํ„ฐ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ์„ ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ™•์žฅ

* update: ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ ๋””์ž์ธ ์ ์šฉ

* update: ์‹คํ–‰์ค‘์ธ ๊ฒฝ์šฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์— ์Šคํ”ผ๋„ˆ ์ถ”๊ฐ€

* update: ์—๋””ํ„ฐ, ๊ฒฐ๊ณผํ™”๋ฉด ๋น„์œจ 50:50์œผ๋กœ ์ˆ˜์ •

* fix: ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ ์ €์žฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: ๋ฆฐํŠธ ์ œ๊ฑฐ

* refactor: ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐ

* chore: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ ์šฉ,  ๋Œ€ํšŒ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ css ์ˆ˜์ •

* fix: ts-ignore ๋นŒ๋“œ์‹œ์— ์—๋Ÿฌ ๋ฐœ์ƒํ•ด์„œAuthContext ํƒ€์ž… ์ง€์ •

* refactor: api์š”์ฒญ๊ณผ socket์š”์ฒญ ํ›… ๊ฒฐํ•ฉ

* refactor: ํ•„์š” ์—†๋Š” ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ

* refactor: DashboardTable์— ํ•„์š”ํ•œ props๋ฅผ ๋„˜๊ฒจ์ฃผ๋„๋ก ์ˆ˜์ •

* refactor: DashboardModal์— ํ•„์š”ํ•œ props๋ฅผ ๋„˜๊ฒจ์ฃผ๋„๋ก ์ˆ˜์ •

* chore: merge

* refactor: common์˜ Loading์ปดํฌ๋„ŒํŠธ ํ™œ์šฉ

* refactor: useParticipantDashboard์˜ api๋กœ์ง ๋ถ„๋ฅ˜

* refactor: flex ์†์„ฑ=> table๋กœ ๋ณ€๊ฒฝ

* refactor: ๋Œ€ํšŒ ๋งŒ๋“œ๋Š” ๋ฒ„ํŠผ์— Link ํƒœ๊ทธ ์ถ”๊ฐ€

* chore: ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„  ๋ณ€๊ฒฝ

* refactor: html ํƒœ๊ทธ, css ๋ณ€๊ฒฝ

* fix: ๋Œ€ํšŒ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€๊ฐ€ ์ƒํƒœ์— ๋”ฐ๋ผ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* fix: ๋ฐฐ๊ฒฝ์ƒ‰์ด ์ž˜๋ฆฌ๋˜ ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: Header ์ปดํฌ๋„ŒํŠธ css ์ˆ˜์ •

* chore: ๋Œ€ํšŒ ํ…Œ์ด๋ธ” css  ์ˆ˜์ •

* refactor: Chip์ด ์˜๋„๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋˜ ์˜ค๋ฅ˜ ์ˆ˜์ •

* chore: chip text ํฌ๊ธฐ ์ง€์ •

* refactor: ๋Œ€์‹œ๋ณด๋“œ ํŽ˜์ด์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •

* chore: ๋Œ€ํšŒ ํ…Œ์ด๋ธ” ๋””์ž์ธ ์ˆ˜์ •

* fix: ํ™”๋ฉด ํ™•๋Œ€์‹œ ๋ฐฐ๊ฒฝํ™”๋ฉด์ด ์ž˜๋ฆฌ๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: useAuth์ปค์Šคํ…€ ํ›… ์‚ฌ์šฉ

* refactor: ๋ช…์‹œ์ ์ธ ์„ ์–ธ ์‚ฌ์šฉ

* refactor: css์ฝ”๋“œ ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ์ค‘๋ณต ์ œ๊ฑฐ

* chore: ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋””์ž์ธ ์ˆ˜์ •

* fix: ๋จธ์ง€  ํ›„ ๋นŒ๋“œ ์•ˆ ๋˜๋˜ ๊ฒƒ ์ˆ˜์ •

* fix: key ๊ฐ’ ๋น ์ง„ ๋ถ€๋ถ„ ์ถ”๊ฐ€

* fix: Logo path ๋ฐ”๋€๊ฑฐ ์ ์šฉ

* fix: Header ๋””์ž์ธ ์ˆ˜์ •

* fix": merge ๊ณผ์ •์—์„œ ๋น ์ง„ code ์ถ”๊ฐ€ ๋ฐ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ๋””์ž์ธ ์ˆ˜์ •

* refactor: PageLayout์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •

* refactor: ํ—ค๋” ์š”์†Œ๋ช… ๋ณ€๊ฒฝ ๋ฐ css์š”์†Œ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: DashboardTable์˜ text์š”์†Œ๊ฐ€ ์ค‘์•™ ์ •๋ ฌ์ด ๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •

* refactor: ๋Œ€์‹œ๋ณด๋“œ ํ…Œ์ด๋ธ” width ์ˆ˜์ •

* refactor: DashboardPage์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€๋ถ„ ์ปดํฌ๋„ŒํŠธํ™”

* fix: import ๊ฒฝ๋กœ ์ˆ˜์ •

* refactor: ๋ฌธ์ œ๊ฐ€ 9๊ฐœ์ผ ๊ฒฝ์šฐ ํ…์ŠคํŠธ๊ฐ€ ๋ญ‰๊ฐœ์ง€๋Š” ์˜ค๋ฅ˜ ์ˆ˜์ •

* refactor: Header์˜ ๋กœ๊ณ  ํ˜น์€ ํ…์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

* refactor: MainPage์—์„œ ๋Œ€ํšŒ๊ฐ€ ์‹œ์ž‘ ์ „์ผ ๊ฒฝ์šฐ ์‹œ์ž‘ ์ „ ์ƒํƒœ๋ฅผ ํ‘œ์‹œ

* refactor: ๋Œ€ํšŒ ํ™”๋ฉด์—์„œ ๋กœ๊ณ  ํ˜น์€ Algo With Me ๋ˆ„๋ฅด๋ฉด ํ™ˆ์œผ๋กœ ์ด๋™

* refactor: ํ•„์š”์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ

* refactor: ํ‹€๋ฆฐ ๋ฌธ์ œ์‹œ '-'๋นจ๊ฐ„๋ฐฐ๊ฒฝ, ๋ฏธ์ œ์ถœ์‹œ '-'๋ฐฐ๊ฒฝ์—†์Œ

* refactor: css ์š”์†Œ ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: ๋ชจ๋‹ฌ ์‚ฌ์ด์ฆˆ ๊ณ ์ •

* refactor: ํŽ˜์ด์ง€ ํ™•๋Œ€์‹œ dashboardTable์ด ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋„๋ก ์ˆ˜์ •

* refactor: ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์ฝ”๋“œ ์ œ๊ฑฐ

* feat: ์ œ์ถœ ์‹œ ๊ฒฐ๊ณผ ํ™”๋ฉด ์Šค์œ„์นญ

* update: ๋ฌธ์ œ ํƒญ ๋ณ€๊ฒฝ์‹œ ์ œ์ถœ ๊ฒฐ๊ณผ ์ดˆ๊ธฐํ™”

* update: ์‹คํŒจํ•œ ์ผ€์ด์Šค๋Š” x๋ฒ„ํŠผ ๋‚˜์˜ค๊ฒŒ ํ•จ

* feat: ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ testcase ๋ณ€๊ฒฝ

* feat: ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์ฐฝ์— ์˜ˆ์ƒ๊ฐ’ ์ถ”๊ฐ€

* feat: ์‹ค์ œ ์„œ๋ฒ„ ์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”

* fix: type ์—๋Ÿฌ ์ˆ˜์ •

* refactor: type ์ˆ˜์ •

* refactor: window.location.reload ๋Œ€์‹  navigate์‚ฌ์šฉ, ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ ์œ„์น˜ ๋ณ€๊ฒฝ

* refactor: navigate ์ธ์ž๊ฐ’ ์ˆ˜์ •

* refactor: navigate ์ธ์ž๊ฐ’ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •

* refactor: ๋™์ผํ•œ ๊ฒฝ๋กœ๋กœ์˜ navigate์ฝ”๋“œ ์‚ญ์ œ

* refactor: ํƒญ ์ธ๋ฑ์Šค ์ƒ์ˆ˜ํ™”

* update: ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ๊ธฐ๋Œ€๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉด ์ฒดํฌ,์•„๋‹ˆ๋ฉด xํ‘œ์‹œ๋ฅผ ํ•จ

* update: ํƒญ ์ด๋™์‹œ์—๋„ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ž„์‹œ ์ €์žฅ

* feat: ๋Œ€ํšŒ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๊ฒ€์ฆ ์‹คํŒจ๊ฐ€ ๋˜๋ฉด ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

* chore: alert ์ฐฝ ์ถ”๊ฐ€

* chore: ๋Œ€์‹œ๋ณด๋“œ ์ง‘๊ณ„ ํ›„ ๋ณด์—ฌ์ง€๊ธฐ ๋•Œ๋ฌธ์— main  ํŽ˜์ด์ง€๋กœ

* fix: build ์—๋Ÿฌ ์ˆ˜์ •

* fix: ๋Œ€ํšŒ ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๋™์ž‘ ์•ˆํ•˜๋Š” ๋ฒ„๊ทธ

๋Œ€ํšŒ ์ƒ์„ฑ ๋ฒ„ํŠผ ์•ˆ์˜ ํ…์ŠคํŠธ๋งŒ ํด๋ฆญ๋จ
ํ…์ŠคํŠธ๋ฅผ ๋งํฌ๋กœ ๊ฐ์‹ธ๊ณ  ์žˆ์–ด์„œ ์ƒ๊ธด ๋ฌธ์ œ
๋ฒ„ํŠผ ์ „์ฒด๋ฅผ ๋งํฌ๋กœ ๊ฐ์‹ธ๋„๋กํ•ด์„œ ํ•ด๊ฒฐ

Co-authored-by: youseock <[email protected]>
Co-authored-by: ์ด์šฐ์ฐฌ <[email protected]>

* update: ๋””ํ…Œ์ผ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ & ์‹œ๊ฐ„์ •๋ณด ์ถ”๊ฐ€

* refactor: Card ์ปดํฌ๋„ŒํŠธ Common์œผ๋กœ ๋ถ„๋ฆฌ

* fix: ๋ฌธ์ œ ์ƒ์„ธ๋ณด๊ธฐ ํŽ˜์ด์ง€ ์•ˆ๋‚˜์˜ค๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* fix: alog with me ๋ฌธ๊ตฌ algo with me๋กœ ์ˆ˜์ •

* feat: ๋Œ€ํšŒ ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ์ฐธ์—ฌ ๊ฐ€๋Šฅ ์ธ์›, ์ด ์ฐธ์—ฌ์ž ํ‘œ์‹œ

* fix: ์นฉ border ์ƒ‰์ƒ ๋ณ€๊ฒฝ

* feat: Console.log ์ถ”๊ฐ€

* refactor: ์ฃผ์„ ์ œ๊ฑฐ

* update: Pretendard ํฐํŠธ ์ ์šฉ

* feat: ๋Œ€ํšŒ ์‹œ์ž‘ ์‹œ๊ฐ„ ๋ฐ ์ข…๋ฃŒ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋Œ€ํšŒ ์ƒ์„ธ์ •๋ณด ๋ณด๊ธฐ ํŽ˜์ด์ง€๊ฐ€ ๋„˜์–ด๊ฐ€๋„๋ก ์ž‘์„ฑ

* refactor: Modal์ด ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ

* refactor: Icon ์ปดํฌ๋„ŒํŠธ์— minus ์•„์ด์ฝ˜ ์ถ”๊ฐ€

* update: ๋ชจ๋‹ฌ ๋””์ž์ธ ๊ฐœ์„ 

* update: ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๊ฐ€ ๋งŽ์œผ๋ฉด ์Šคํฌ๋กค ์ƒ์„ฑ

* fix: ๋Œ€ํšŒ ํŽ˜์ด์ง€์šฉ ๋ ˆ์ด์•„์›ƒ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

* update: ๋ฉ”์ธ ํŽ˜์ด์ง€ ํ•˜๋‹จ์— ๋นˆ ๊ณต๊ฐ„ ์‚ฝ์ž…

* refactor: navigate ์ธ์ž 0์œผ๋กœ ์ˆ˜์ •

* refactor: ํ…Œ์ŠคํŠธ์šฉ console ์ถ”๊ฐ€

* chore: netlify redirect ์˜ต์…˜ ์ถ”๊ฐ€

* refactor: navigate ์ธ์ž replace true ์ถ”๊ฐ€

* refactor: navigate path ์ˆ˜์ •

* refactor: navigate ์ธ์ž 0์œผ๋กœ ์ˆ˜์ •

* refactor: ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ

* fix: websocket ๊ด€๋ จ ๋ฒ„๊ทธ ์ œ๊ฑฐ

* chore: ํ•„์š”์—†๋Š” ๋กœ์ง ์‚ญ์ œ

* chore: isNil ์œ ํ‹ธํ•จ์ˆ˜ ์‚ฌ์šฉ

* fix: ๋ฉ”์ธํŽ˜์ด์ง€์˜ ๋Œ€์‹œ๋ณด๋“œ ๋งํฌ๊ฐ€ ๋Œ€ํšŒํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* update: contest -> competition์œผ๋กœ ๊ฒฝ๋กœ ์ˆ˜์ •

* fix: ๋Œ€์‹œ๋ณด๋“œ ๋งํฌ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* update: ๋Œ€ํšŒ ๋ชฉ๋ก ์•„์ดํ…œ ํ•˜๋‹จ์— border ์ถ”๊ฐ€

* update: ๋ฉ”์ธํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋‚ ์งœ ํ˜•์‹ yyyy. mm. dd. hh:mm ํ˜•์‹์œผ๋กœ ํ†ต์ผ

* fix: ๋Œ€ํšŒ ์ฐธ์—ฌ๋ฅผ ์‹ ์ฒญํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์€ ๋Œ€ํšŒ์— ์ž…์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋ง‰์Œ

* update: ๋Œ€ํšŒ ๋‚ด์˜ ๋Œ€์‹œ๋ณด๋“œ ๋ชจ๋‹ฌ์— borderRadius ์ถ”๊ฐ€

* update: ์„œ๋น„์Šค ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ณ€๊ฒฝ

* update: ๋Œ€์‹œ๋ณด๋“œ ํŒจ๋”ฉ, ๋งˆ์ด๋žญํฌ ํ•˜์ด๋ผ์ดํŠธ

* refactor: ์ŠคํŠธ๋ฆญํŠธ ๋ชจ๋“œ ์ œํ•œ ํ•ด์ œ

* fix: ๋Œ€ํšŒ ์ž…์žฅ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ์— ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•จ

* feat: ์œ ์ €์˜ ๋Œ€์‹œ๋ณด๋“œ row๋Š” ํ•˜์ด๋ผ์ดํŠธ

* update: ๋Œ€ํšŒ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋Œ€ํšŒ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

* feat: ์ฑ„์  ์ค‘์—๋Š” ๋‹ค์‹œ ์ œ์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ง‰์Œ

* refactor: strict mode ์ผฌ

* fix: Syntax์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ„ฐ์ง€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* fix:์ผ๋ถ€ ํ‘ผ ๋ฌธ์ œ ๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋ณด์ด์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* fix: ๋ชจ๋‹ฌ ๋ฐ–์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์‚์ ธ๋‚˜์˜ค๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* feat: ์ฝ”๋“œ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ์ถ”๊ฐ€

* update: aside ๋ฌธ์ œ ๊ตฌ๋ถ„ ์ž˜ ์•ˆ๊ฐ€๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* update: ๋กœ๊ทธ์ธํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๊ฐœ์„ 

* update: ๋ฉ”์ธํŽ˜์ด์ง€, header ๋ฒ„ํŠผ ํฌ๊ธฐ ์‚ด์ง ์ค„์ž„

* update: ProblemPage์— ๋ฌธ์ œ ์ค‘์•™ ๋ฐฐ์น˜

* update: ๋Œ€ํšŒ ์™„๋ฃŒ์‹œ ์ง‘๊ณ„์ค‘ ํ™”๋ฉด์— header ์ถ”๊ฐ€

* fix: Loading ์ฐธ์กฐ ์—๋Ÿฌ ์ˆ˜์ •

* refactor: ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ์‚ญ์ œ

* refactor: endsAt์— ๋”ฐ๋ผ ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด์ด ๋„˜์–ด๊ฐ€๋„๋ก ์ˆ˜์ •

* feat: ๋Œ€์‹œ๋ณด๋“œ ๋กœ๋”ฉ ํ™”๋ฉด์— ๋‚จ์€ ์‹œ๊ฐ„์ด ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •

* refactor: ๋กœ๋”ฉ ํŽ˜์ด์ง€ ui๊ฐœ์„  ๋ฐ ๋กœ๋”ฉ ํŽ˜์ด์ง€ ์ •์ƒ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •

* refactor: hook ์ด๋ฆ„ ๋ณ€๊ฒฝ

* refactor: ์ˆซ์ž ์ƒ์ˆ˜ํ™”

* chore: ํŒŒํ”ผ์ฝ˜ ์ถ”๊ฐ€, meta ์ •๋ณด ์ถ”๊ฐ€

* fix: meta ํƒœ๊ทธ ์ˆ˜์ •

* refactor: ๋ Œ๋”๋ง ์กฐ๊ฑด๋ฌธ ์ˆ˜์ • ๋ฐ ๋ฒ„ํผํƒ€์ž„ ์ถ”๊ฐ€

* refactor: Plus ์•„์ด์ฝ˜ ์ถ”๊ฐ€

* update: ๋Œ€ํšŒ ์ƒ์„ฑํ•˜๊ธฐ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๊ฐœ

* refactor: ๋””๋ฒ„๊น…์ฝ”๋“œ ์ œ๊ฑฐ

* update: ๋Œ€ํšŒ ์ƒ์„ฑ ์กฐ๊ฑด ๊ฐ•ํ™”

- ๋Œ€ํšŒ ๊ธฐ๊ฐ„์ด 5๋ถ„๋ณด๋‹ค ์งง์œผ๋ฉด ๋Œ€ํšŒ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ
- ๋Œ€ํšŒ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ํ˜„์žฌ ์‹œ๊ฐ„ + 5๋ถ„๊ณผ ๊ฐ™์œผ๋ฉด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

* refactor: Form ํƒœ๊ทธ ์ ์šฉ

* update: stdOut -> stdout์œผ๋กœ ๋ณ€๊ฒฝ

* feat: ์‹คํ–‰ ๊ฒฐ๊ณผ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ถœ๋ ฅ

* update: ์ œ์ถœ ๊ฒฐ๊ณผ ํ™•์ธ ๋กœ์ง์— problemResult ์ ์šฉ

* refactor: strict mode ํ•ด์ œ

* refactor: ๋ถˆํ•„์š”ํ•œ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ์ œ๊ฑฐ

* fix: alignItems๊ฐ€ flexStart๋ฅผ default๋กœ ํ•˜๋ฉฐ ์ƒ๊ธฐ๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* fix: Loading Page์˜ ์‹œ๊ฐ„ ๋ณ€๊ฒฝ -> ๋‚จ์€ ์‹œ๊ฐ„ ์ถœ๋ ฅ๋˜๋„๋ก ์ˆ˜์ •

---------

Co-authored-by: youseock <[email protected]>
Co-authored-by: ์ด์šฐ์ฐฌ <[email protected]>
Co-authored-by: youseock <[email protected]>
Co-authored-by: youseock <[email protected]>
Co-authored-by: ์ด์šฐ์ฐฌ <[email protected]>
  • Loading branch information
6 people authored Dec 13, 2023
1 parent 1712e92 commit 1ed88c8
Show file tree
Hide file tree
Showing 54 changed files with 801 additions and 314 deletions.
1 change: 1 addition & 0 deletions frontend/_redirects
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* /index.html 200
3 changes: 2 additions & 1 deletion frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
<html lang="ko">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<link rel="icon" type="image/x-icon" href="/algo.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="๋ˆ„๊ตฌ๋‚˜ ๋งŒ๋“ค๊ณ  ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋Œ€ํšŒ" />
<title>Algo With Me</title>
</head>
<body>
Expand Down
4 changes: 4 additions & 0 deletions frontend/netlify.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
Binary file added frontend/public/algo.ico
Binary file not shown.
5 changes: 5 additions & 0 deletions frontend/public/icons.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions frontend/src/apis/joinCompetition/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { CompetitionId } from '@/apis/competitions';
import api from '@/utils/api';

import type { CompetitionApiData } from './types';
Expand Down Expand Up @@ -42,3 +43,20 @@ export async function joinCompetition(data: CompetitionApiData) {
}
}
}

export async function fetchIsJoinableCompetition(
competitionId: CompetitionId,
token: string,
): Promise<boolean> {
try {
const { data } = await api.get(`/competitions/validation/${competitionId}`, {
headers: {
Authorization: `Bearer ${token}`,
},
});

return data.isJoinable;
} catch (err) {
return false;
}
}
5 changes: 5 additions & 0 deletions frontend/src/apis/joinCompetition/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,8 @@ export type CompetitionApiData = {
id: number;
token: string | null;
};

export type FetchIsCompetitionJoinableResponse = {
isJoinable: boolean;
message: string;
};
40 changes: 35 additions & 5 deletions frontend/src/components/Common/Button.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
import { cva, cx } from '@style/css';

import type { HTMLAttributes, MouseEvent } from 'react';
import type { HTMLAttributes, MouseEvent, ReactElement } from 'react';

import { isNil } from '@/utils/type';

type Theme = 'brand' | 'danger' | 'success' | 'warning' | 'none';
type Theme = 'brand' | 'danger' | 'success' | 'warning' | 'transparent' | 'none';

interface Props extends HTMLAttributes<HTMLButtonElement> {
theme?: Theme;
selected?: boolean;
disabled?: boolean;
leading?: ReactElement;
type?: 'button' | 'submit' | 'reset';
}

export function Button({
className,
children,
theme = 'none',
onClick,
leading,
selected = false,
disabled = false,
type = 'button',
...props
}: Props) {
const handleClick = (evt: MouseEvent<HTMLButtonElement>) => {
Expand All @@ -28,13 +32,20 @@ export function Button({
onClick(evt);
};

const hasLeading = !isNil(leading);

return (
<button
className={cx(className, style({ disabled }), themeStyle({ theme, selected, disabled }))}
type="button"
className={cx(
className,
style({ disabled, hasLeading }),
themeStyle({ theme, selected, disabled }),
)}
type={type}
onClick={isNil(onClick) ? undefined : handleClick}
{...props}
>
{leading}
{children}
</button>
);
Expand All @@ -43,6 +54,7 @@ export function Button({
const style = cva({
base: {
display: 'flex',
gap: '0.25rem',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '0.5rem',
Expand All @@ -58,6 +70,11 @@ const style = cva({
cursor: 'not-allowed',
},
},
hasLeading: {
true: {
paddingLeft: '0.5rem',
},
},
},
});

Expand Down Expand Up @@ -85,10 +102,14 @@ const themeStyle = cva({
warning: {
background: 'alert.warning',
},
transparent: {
background: 'transparent',
},
},
selected: {
true: {
filter: 'brightness(1.2)',
outline: '2px solid',
outlineColor: 'brand',
},
},
disabled: {
Expand All @@ -100,4 +121,13 @@ const themeStyle = cva({
},
},
},
compoundVariants: [
{
selected: true,
theme: 'transparent',
css: {
background: 'surface',
},
},
],
});
2 changes: 2 additions & 0 deletions frontend/src/components/Common/Icon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const ICON_NAMES = [
'spinner',
'cancel',
'minus',
'plus',
] as const;
type IconName = (typeof ICON_NAMES)[number];

Expand Down Expand Up @@ -56,6 +57,7 @@ Icon.CancelRound = ({ ...props }: Omit<Props, 'name'>) => (
Icon.Spinner = ({ ...props }: Omit<Props, 'name'>) => <Icon name="spinner" {...props}></Icon>;
Icon.Cancel = ({ ...props }: Omit<Props, 'name'>) => <Icon name="cancel" {...props}></Icon>;
Icon.Minus = ({ ...props }: Omit<Props, 'name'>) => <Icon name="minus" {...props}></Icon>;
Icon.Plus = ({ ...props }: Omit<Props, 'name'>) => <Icon name="plus" {...props}></Icon>;

const style = css({
display: 'inline-block',
Expand Down
25 changes: 23 additions & 2 deletions frontend/src/components/Common/Input.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,46 @@ import type {
} from 'react';
import { Children, cloneElement, forwardRef } from 'react';

import { Text } from '@/components/Common';

interface Props extends HTMLAttributes<HTMLDivElement> {
label?: ReactNode;
comment?: string;
children: ReactElement;
}

export function Input({ id, label, children, ...props }: Props) {
export function Input({ id, label, comment, children, ...props }: Props) {
const child = Children.only(children);

return (
<div {...props}>
<label htmlFor={id}>{label}</label>
<label htmlFor={id} className={labelStyle}>
{label}
</label>
{cloneElement(child, {
id,
...child.props,
})}
<Text.Label size="md" className={commentStyle}>
{comment}
</Text.Label>
</div>
);
}

const labelStyle = css({
display: 'block',
marginLeft: '0.25rem',
marginBottom: '0.5rem',
});

const commentStyle = css({
display: 'block',
marginTop: '0.25rem',
marginLeft: '0.25rem',
color: 'text.light',
});

interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
error?: boolean;
}
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Common/Loading.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ interface Props {
color: string;
}

export default function Loading({ size, color }: Props) {
export function Loading({ size, color }: Props) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
Expand Down
10 changes: 9 additions & 1 deletion frontend/src/components/Common/Socket/SocketProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ReactNode, useEffect, useRef, useState } from 'react';

import { connect } from '@/utils/socket';
import { connect, disconnect } from '@/utils/socket';
import { isNil } from '@/utils/type';

import { SocketContext } from './SocketContext';

Expand Down Expand Up @@ -47,6 +48,13 @@ export function SocketProvider({
}
}, [socket.current]);

useEffect(() => {
if (isNil(socket.current)) return;
return () => {
disconnect(`/${namespace}`);
};
}, [socket]);

return (
<SocketContext.Provider
value={{
Expand Down
38 changes: 35 additions & 3 deletions frontend/src/components/Common/VStack/VStack.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
import { css, cx } from '@style/css';
import { css, cva, cx } from '@style/css';

import { HTMLAttributes } from 'react';

export interface Props extends HTMLAttributes<HTMLElement> {
as?: React.ElementType;
alignItems?: 'flexStart' | 'flexEnd' | 'baseline' | 'stretch' | 'center';
}

export function VStack({ children, className, as = 'div', ...props }: Props) {
export function VStack({
children,
className,
as = 'div',
alignItems = 'flexStart',
...props
}: Props) {
const As = as;

return (
<As className={cx(className, rowListStyle)} {...props}>
<As className={cx(className, rowListStyle, alignItemStyle({ alignItems }))} {...props}>
{children}
</As>
);
Expand All @@ -19,3 +26,28 @@ export function VStack({ children, className, as = 'div', ...props }: Props) {
const rowListStyle = css({
display: 'flex',
});

const alignItemStyle = cva({
defaultVariants: {
alignItems: 'flexStart',
},
variants: {
alignItems: {
flexStart: {
alignItems: 'flex-start',
},
flexEnd: {
alignItems: 'flex-end',
},
baseline: {
alignItems: 'baseline',
},
stretch: {
alignItems: 'stretch',
},
center: {
alignItems: 'center',
},
},
},
});
1 change: 1 addition & 0 deletions frontend/src/components/Common/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ export * from './Icon';
export * from './BreadCrumb';
export * from './Logo';
export * from './Card';
export * from './Loading';
2 changes: 1 addition & 1 deletion frontend/src/components/Competition/CompetitionHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ interface Props extends VStackProps {}

export default function CompetitionHeader({ className, children, ...props }: Props) {
return (
<VStack className={cx(className, headerStyle)} as="header" {...props}>
<VStack alignItems="center" className={cx(className, headerStyle)} as="header" {...props}>
{children}
</VStack>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { useNavigate } from 'react-router-dom';

import { fetchIsJoinableCompetition } from '@/apis/joinCompetition';
import { Button } from '@/components/Common';
import useAuth from '@/hooks/login/useAuth';

Expand All @@ -10,25 +11,43 @@ interface Props {
}

export default function EnterCompetitionButton({ id, startsAt, endsAt }: Props) {
const competitionLink = `/contest/${id}`;
const competitionLink = `/competition/${id}`;
const { isLoggedin } = useAuth();
const navigate = useNavigate();

const handleNavigate = () => {
const handleNavigate = async () => {
const currentTime = new Date();

if (!isLoggedin) {
alert('๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.');
navigate('/login');
} else if (currentTime < startsAt) {

return;
}

if (currentTime < startsAt) {
alert('์•„์ง ๋Œ€ํšŒ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”');
window.location.reload();
} else if (currentTime >= endsAt) {
navigate(0);

return;
}

if (currentTime >= endsAt) {
alert('ํ•ด๋‹น ๋Œ€ํšŒ๋Š” ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
window.location.reload();
} else {
navigate(competitionLink);
navigate(0);

return;
}

const accessToken = localStorage.getItem('accessToken') ?? '';

const isJoinable = await fetchIsJoinableCompetition(id, accessToken);
if (!isJoinable) {
alert('๋Œ€ํšŒ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.\n๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋Šฆ์ง€ ์•Š๊ฒŒ ๋Œ€ํšŒ ์‹ ์ฒญ์„ ํ•ด์ฃผ์„ธ์š” :)');
return;
}

navigate(competitionLink);
};

return (
Expand Down
Loading

0 comments on commit 1ed88c8

Please sign in to comment.