|
1 | 1 | // 사이트 전반에서 공유하는 상수 및 레이블 매핑 |
2 | 2 |
|
3 | 3 | // ─── 행사 종류 / 참여 대상 ─────────────────────────────────────────── |
4 | | -export const EVENT_KIND_LABEL = { |
5 | | - regular: '정기', |
6 | | - ongoing: '상시', |
7 | | -} as const |
| 4 | +export type EventKind = 'regular' | 'ongoing' |
| 5 | + |
| 6 | +export const EVENT_KIND: Record<EventKind, { label: string; desc: string }> = { |
| 7 | + regular: { |
| 8 | + label: '정기', |
| 9 | + desc: 'SSAFYnity를 대표하는 대규모 정기 행사예요.\n연 2회(상*하반기 1회씩), 50~100명 이상 규모로 진행되는 동문회의 정체성을 담은 행사입니다', |
| 10 | + }, |
| 11 | + ongoing: { |
| 12 | + label: '상시', |
| 13 | + desc: '정회원을 위한 소규모 행사를 상시 운영합니다.\n더 자주, 더 가깝게 동문들과 만날 수 있는 자리입니다. 일부 공석에 대해 일반회원도 참여가능해요.', |
| 14 | + }, |
| 15 | +} |
8 | 16 |
|
9 | | -export type EventKind = keyof typeof EVENT_KIND_LABEL |
| 17 | +// label만 필요한 곳에서 사용 |
| 18 | +export const EVENT_KIND_LABEL: { [K in EventKind]: string } = { |
| 19 | + regular: EVENT_KIND.regular.label, |
| 20 | + ongoing: EVENT_KIND.ongoing.label, |
| 21 | +} |
10 | 22 |
|
11 | | -export const EVENT_AUDIENCE_LABEL = { |
12 | | - open: '공개', |
13 | | - members: '동문회', |
14 | | - regular: '정회원', |
15 | | - operator: '운영진', |
| 23 | +export const EVENT_AUDIENCE = { |
| 24 | + open: { label: '공개', desc: '동문 여부와 관계없이 누구나 참여할 수 있어요.' }, |
| 25 | + members: { label: '동문회', desc: '동문회원이라면 누구나 참여할 수 있어요.' }, |
| 26 | + regular: { label: '정회원', desc: '정회원만 참여할 수 있는 행사예요.' }, |
| 27 | + operator: { label: '운영진', desc: '운영진만 참여하는 내부 행사예요.' }, |
16 | 28 | } as const |
17 | 29 |
|
18 | | -export type EventAudience = keyof typeof EVENT_AUDIENCE_LABEL |
| 30 | +export type EventAudience = keyof typeof EVENT_AUDIENCE |
| 31 | + |
| 32 | +// label만 필요한 곳에서 사용 |
| 33 | +export const EVENT_AUDIENCE_LABEL: { [K in EventAudience]: string } = { |
| 34 | + open: EVENT_AUDIENCE.open.label, |
| 35 | + members: EVENT_AUDIENCE.members.label, |
| 36 | + regular: EVENT_AUDIENCE.regular.label, |
| 37 | + operator: EVENT_AUDIENCE.operator.label, |
| 38 | +} |
19 | 39 |
|
20 | 40 | // ─── 행사 진행 방식 ────────────────────────────────────────────────── |
21 | 41 | // 복수 선택 가능 (예: ['online', 'offline', 'recorded']) |
22 | | -export const EVENT_FORMAT_LABEL = { |
23 | | - online: '온라인', |
24 | | - offline: '오프라인', |
25 | | - recorded: '녹화제공', |
| 42 | +export const EVENT_FORMAT = { |
| 43 | + offline: { label: '오프라인', desc: '현장에 직접 방문하여 참여하는 행사예요.' }, |
| 44 | + online: { label: '온라인', desc: '온라인으로 참여하는 행사예요. 참여 링크는 별도 안내돼요.' }, |
| 45 | + recorded: { label: '녹화제공', desc: '참석하지 못해도 추후 녹화본을 제공해드려요.' }, |
26 | 46 | } as const |
27 | 47 |
|
28 | | -export type EventFormat = keyof typeof EVENT_FORMAT_LABEL |
| 48 | +export type EventFormat = keyof typeof EVENT_FORMAT |
29 | 49 |
|
30 | 50 | export const FORMAT_ORDER: EventFormat[] = ['offline', 'online', 'recorded'] |
31 | 51 |
|
| 52 | +// label만 필요한 곳에서 사용 |
| 53 | +export const EVENT_FORMAT_LABEL: { [K in EventFormat]: string } = { |
| 54 | + offline: EVENT_FORMAT.offline.label, |
| 55 | + online: EVENT_FORMAT.online.label, |
| 56 | + recorded: EVENT_FORMAT.recorded.label, |
| 57 | +} |
| 58 | + |
32 | 59 | // ─── 행사 날짜 ────────────────────────────────────────────────────── |
33 | 60 | // 날짜 범위 — 하루면 end 생략, 여러 날이면 end 기재 |
34 | 61 | export type EventDateRange = { |
|
0 commit comments