diff --git a/src/pages/AdminEvents.tsx b/src/pages/AdminEvents.tsx index 77d4f27..7ef7a73 100644 --- a/src/pages/AdminEvents.tsx +++ b/src/pages/AdminEvents.tsx @@ -10,6 +10,7 @@ import { type AdminEventPatchRequest, } from "@/api/adminEvent"; import { useState } from "react"; +import styles from "@/styles/AdminEvents.module.css"; const EMPTY_FORM = { title: "", @@ -351,157 +352,201 @@ export default function AdminEventsPage() { ["location", "장소", "text"], ["applyLink", "신청 링크", "text"], - ["tags", "태그, 쉼표 구분", "text"], + ["tags", "태그 (쉼표 구분)", "text"], ]; return ( -
-

행샤 어드민

- -
- setEventId(e.currentTarget.value)} - placeholder="행사 ID" - /> - - - - - - - - - - -
- -
-

JSON 파일 Sync

- - { - setSelectedFile(e.currentTarget.files?.[0] ?? null); - }} - /> - - -
- -
-

adminOverriddenFields lock/unlock

- -

- 마지막 응답 기준 lock: {overrideFields.length > 0 ? overrideFields.join(", ") : "없음"} -

- -
- {OVERRIDABLE_FIELDS.map(({ key, label }) => ( - - ))} +
+
+

행샤 어드민

+ +
+ {/* ── 왼쪽 패널 ── */} +
+ {/* 행사 관리 */} +
+

행사 관리

+
+ setEventId(e.currentTarget.value)} + placeholder="행사 ID" + /> + + + + + + + +
+ + + + +
+
+ + {/* 피드백 메시지 */} + {message &&

{message}

} + + {/* JSON 파일 Sync */} +
+

JSON 파일 Sync

+
+ + + + {selectedFile ? selectedFile.name : "선택된 파일 없음"} + + + +
+
+ + {/* adminOverriddenFields lock/unlock */} +
+

Override Fields

+ +
+ 현재 lock + {overrideFields.length > 0 ? ( + overrideFields.map((f) => ( + + {f} + + )) + ) : ( + 없음 + )} +
+ +
+ {OVERRIDABLE_FIELDS.map(({ key, label }) => { + const checked = selectedOverrideFields.includes(key); + return ( + + ); + })} +
+ +
+ + + +
+
+
+ + {/* ── 오른쪽 패널 ── */} +
+
+

행사 데이터

+
+ {fields.map(([key, label, type]) => ( +
+ + updateForm(key, e.currentTarget.value)} + /> +
+ ))} + +
+ +