Skip to content

Commit 70bd4b8

Browse files
committed
행사 상세 화면에 되돌아가는 목표는 직전 진입으로 할 수 있도록 정돈
1 parent 1625d27 commit 70bd4b8

4 files changed

Lines changed: 166 additions & 6 deletions

File tree

src/data/events/2026.ts

Lines changed: 155 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,160 @@ import type { Event } from '@/data/constants'
55

66
export const events2026: Event[] = [
77

8-
// [업데이트 필요] 행사 확정 시 항목 추가 (dummy-data.md 참고)
8+
// ── [TEST] 상태 1: 접수 없는 행사 (내부 행사) ──────────────────────
9+
{
10+
slug: '2026-test-no-recruit',
11+
title: '[TEST 1] 접수 없는 행사',
12+
eventDate: { start: '2026-03-15', startTime: '14:00', endTime: '18:00' },
13+
format: ['offline'],
14+
kind: 'regular',
15+
audience: 'operator',
16+
summary: '접수 기간 없이 진행되는 내부 행사 (운영진 한정).',
17+
},
18+
19+
// ── [TEST] 상태 2a: 접수 전 (2주 초과 → 역대 행사 미노출, 올해 행사 노출) ──
20+
{
21+
slug: '2026-test-before-recruit-hidden',
22+
title: '[TEST 2a] 접수 전 (2주 초과, 역대 행사 미노출)',
23+
eventDate: { start: '2026-04-24', startTime: '15:00', endTime: '19:00' },
24+
recruitDate: { start: '2026-03-25', end: '2026-04-22' },
25+
format: ['offline'],
26+
kind: 'regular',
27+
audience: 'members',
28+
summary: '접수 시작이 2주 넘게 남아 역대 행사 탭에서 미노출, 올해 행사 탭엔 노출.',
29+
},
30+
31+
// ── [TEST] 상태 2b: 접수 전 (2주 이내 → 역대 행사·올해 행사 모두 노출) ──
32+
{
33+
slug: '2026-test-before-recruit-visible',
34+
title: '[TEST 2b] 접수 전 (2주 이내, 역대 행사 노출)',
35+
eventDate: { start: '2026-04-09', startTime: '15:00', endTime: '19:00' },
36+
recruitDate: { start: '2026-03-15', end: '2026-04-07' },
37+
format: ['offline'],
38+
kind: 'regular',
39+
audience: 'members',
40+
summary: '접수 시작이 2주 이내라 역대 행사 탭에서도 노출.',
41+
},
42+
43+
// ── [TEST] 상태 3: 접수 중 (행사 전) ──────────────────────────────
44+
{
45+
slug: '2026-test-recruiting',
46+
title: '[TEST 3] 접수 중인 행사',
47+
eventDate: { start: '2026-03-20', startTime: '18:00', endTime: '21:00' },
48+
recruitDate: { start: '2026-02-20', end: '2026-03-10' },
49+
format: ['offline'],
50+
kind: 'regular',
51+
audience: 'open',
52+
summary: '현재 접수 기간이 진행 중인 행사.',
53+
capacity: 100,
54+
},
55+
56+
// ── [TEST] 상태 4: 접수 종료, 행사 전 ─────────────────────────────
57+
{
58+
slug: '2026-test-recruit-closed',
59+
title: '[TEST 4] 접수 종료, 행사 대기 중',
60+
eventDate: { start: '2026-03-10', startTime: '13:00', endTime: '17:00' },
61+
recruitDate: { start: '2026-02-01', end: '2026-02-28' },
62+
format: ['online'],
63+
kind: 'regular',
64+
audience: 'open',
65+
summary: '접수는 마감됐고 아직 행사 당일이 되지 않은 상태.',
66+
capacity: 50,
67+
},
68+
69+
// ── [TEST] 상태 5: 행사 당일 ───────────────────────────────────────
70+
{
71+
slug: '2026-test-today',
72+
title: '[TEST 5] 오늘 행사',
73+
eventDate: { start: '2026-03-06', startTime: '10:00', endTime: '18:00' },
74+
recruitDate: { start: '2026-02-10', end: '2026-03-04' },
75+
format: ['offline', 'online'],
76+
kind: 'regular',
77+
audience: 'open',
78+
summary: '오늘 진행 중인 행사.',
79+
capacity: 80,
80+
},
81+
82+
// ── [TEST] 상태 6: 행사 종료, 데이터 미취합 ───────────────────────
83+
{
84+
slug: '2026-test-past-no-data',
85+
title: '[TEST 6] 행사 종료 (데이터 미취합)',
86+
eventDate: { start: '2026-02-15', startTime: '13:00', endTime: '17:00' },
87+
recruitDate: { start: '2026-01-21', end: '2026-02-14' },
88+
format: ['offline'],
89+
kind: 'regular',
90+
audience: 'members',
91+
summary: '행사는 끝났지만 참여자 현황이 아직 집계되지 않은 상태.',
92+
capacity: 60,
93+
},
94+
95+
// ── [TEST] 상태 7: 완전 마무리 ────────────────────────────────────
96+
{
97+
slug: '2026-test-completed',
98+
title: '[TEST 7] 완전 마무리된 행사',
99+
eventDate: { start: '2026-02-01', startTime: '14:00', endTime: '18:00' },
100+
recruitDate: { start: '2026-01-06', end: '2026-01-31' },
101+
format: ['offline'],
102+
kind: 'regular',
103+
audience: 'open',
104+
summary: '행사도 끝나고 참여자 현황까지 모두 취합 완료된 상태.',
105+
capacity: 80,
106+
registrants: { members: 30, regular: 20, external: 15, operator: 10, partner: 2 },
107+
attendees: { members: 28, regular: 18, external: 12, operator: 10, partner: 2 },
108+
},
109+
110+
// ── [TEST] 상태 8a: 계획중 — 월만 확정 ───────────────────────────
111+
{
112+
slug: '2026-test-planning-month',
113+
title: '[TEST 8a] 계획중 (월만 확정)',
114+
eventDate: { start: '2026-11-01', precision: 'month' },
115+
format: ['offline'],
116+
kind: 'regular',
117+
audience: 'open',
118+
summary: '날짜가 아직 확정되지 않은 계획중 행사 — 월만 알려진 케이스.',
119+
},
120+
121+
// ── [TEST] 상태 8b: 계획중 — 후보 날짜 여러 개 ────────────────────
122+
{
123+
slug: '2026-test-planning-candidates',
124+
title: '[TEST 8b] 계획중 (후보 날짜)',
125+
eventDate: { start: '2026-12-06', candidates: ['2026-12-06', '2026-12-13', '2026-12-20'] },
126+
format: ['offline'],
127+
kind: 'regular',
128+
audience: 'open',
129+
summary: '날짜가 아직 확정되지 않은 계획중 행사 — 후보 날짜 복수 케이스.',
130+
},
131+
132+
// ── [TEST] 다일 행사 (eventDate.end 있음) ──────────────────────────
133+
{
134+
slug: '2026-test-multiday',
135+
title: '[TEST 9] 다일 행사 (이틀)',
136+
eventDate: { start: '2026-05-09', end: '2026-05-10', startTime: '10:00', endTime: '18:00' },
137+
recruitDate: { start: '2026-04-20', end: '2026-05-08' },
138+
format: ['offline'],
139+
kind: 'regular',
140+
audience: 'open',
141+
summary: '이틀에 걸쳐 진행되는 다일 행사.',
142+
capacity: 100,
143+
},
144+
145+
// ── [TEST] 장소 정보 포함 ───────────────────────────────────────────
146+
{
147+
slug: '2026-test-with-location',
148+
title: '[TEST 10] 장소 정보 포함 행사',
149+
eventDate: { start: '2026-06-06', startTime: '14:00', endTime: '18:00' },
150+
recruitDate: { start: '2026-05-18', end: '2026-06-05' },
151+
location: '멀티캠퍼스 역삼 18층',
152+
locationUrl: {
153+
naver: 'https://naver.me/x5GzwAww',
154+
kakao: 'https://place.map.kakao.com/21414107',
155+
google: 'https://maps.app.goo.gl/7cw8g2vDrjxw1AQU9',
156+
},
157+
format: ['offline'],
158+
kind: 'regular',
159+
audience: 'open',
160+
summary: '지도 링크 렌더링 테스트용 행사.',
161+
capacity: 80,
162+
},
9163

10164
]

src/pages/events/archive-detail.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useParams, Link } from 'react-router-dom'
1+
import { useParams, useLocation, Link } from 'react-router-dom'
22
import { motion } from 'framer-motion'
33
import { ChevronLeft, MapPin, CalendarDays, Users, Globe, Monitor, Tv, ExternalLink } from 'lucide-react'
44
import { allEvents } from '@/data/computed'
@@ -9,14 +9,18 @@ const FORMAT_ICON = { offline: MapPin, online: Monitor, recorded: Tv }
99

1010
export default function EventsArchiveDetailPage() {
1111
const { slug } = useParams<{ slug: string }>()
12+
const { state } = useLocation()
1213
const event = allEvents.find(e => e.slug === slug)
1314

15+
const backTo = state?.from === 'upcoming' ? '/events/upcoming' : '/events/archive'
16+
const backLabel = state?.from === 'upcoming' ? '올해 행사 일정' : '역대 행사'
17+
1418
if (!event) {
1519
return (
1620
<div className="flex flex-col items-center justify-center min-h-[60vh] gap-4">
1721
<p className="text-slate-400 text-sm">행사를 찾을 수 없습니다.</p>
18-
<Link to="/events/archive" className="text-xs font-black text-blue-500 hover:text-blue-700">
19-
역대 행사로 돌아가기
22+
<Link to={backTo} className="text-xs font-black text-blue-500 hover:text-blue-700">
23+
{backLabel} 돌아가기
2024
</Link>
2125
</div>
2226
)
@@ -38,10 +42,10 @@ export default function EventsArchiveDetailPage() {
3842

3943
{/* 뒤로가기 */}
4044
<Link
41-
to="/events/archive"
45+
to={backTo}
4246
className="inline-flex items-center gap-1.5 text-xs font-black text-slate-400 hover:text-blue-500 transition-colors w-fit"
4347
>
44-
<ChevronLeft size={14} /> 역대 행사
48+
<ChevronLeft size={14} /> {backLabel}
4549
</Link>
4650

4751
{/* 메인 레이아웃: 좌 정보 + 우 이미지 */}

src/pages/events/archive.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ function EventCard({ event }: { event: Event }) {
144144
>
145145
<Link
146146
to={`/events/archive/${event.slug}`}
147+
state={{ from: 'archive' }}
147148
className="group flex flex-col bg-white border border-slate-200 rounded-2xl overflow-hidden
148149
hover:border-blue-200 hover:shadow-md transition-all duration-200"
149150
>

src/pages/events/upcoming.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ export default function EventsUpcomingPage() {
148148
>
149149
<Link
150150
to={`/events/archive/${event.slug}`}
151+
state={{ from: 'upcoming' }}
151152
className={`relative overflow-hidden group flex items-start gap-4 bg-white border rounded-2xl px-5 py-4 pr-14
152153
hover:border-blue-200 hover:shadow-md transition-all duration-200
153154
${isPast ? 'border-slate-100' : 'border-slate-200'}`}

0 commit comments

Comments
 (0)