From c47f60163d415f577fed5409907cd3732eba2900 Mon Sep 17 00:00:00 2001 From: corpi Date: Tue, 10 Mar 2026 14:30:25 +0900 Subject: [PATCH] =?UTF-8?q?refactor(admin):=20scene=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C=20=ED=99=94=EB=A9=B4=EC=9D=84=20=EB=8B=A8=EC=88=9C?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/admin/page.tsx | 137 ++++++++++++++++++++++++++--------------- src/shared/i18n/ko.ts | 41 +++++++----- 2 files changed, 113 insertions(+), 65 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index deef730..f403aea 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -82,6 +82,7 @@ const formatResultSummary = (uploadResult: UploadResult | null) => { export default function AdminPage() { const [session, setSession] = useState(null); const [activeView, setActiveView] = useState('scene'); + const [isDurationOverrideEnabled, setIsDurationOverrideEnabled] = useState(false); const [loginId, setLoginId] = useState(copy.admin.defaultLoginId); const [password, setPassword] = useState(copy.admin.defaultPassword); const [loginError, setLoginError] = useState(null); @@ -123,6 +124,7 @@ export default function AdminPage() { const handleLogout = () => { setSession(null); setActiveView('scene'); + setIsDurationOverrideEnabled(false); setSceneMessage(null); setSoundMessage(null); setUploadResult(null); @@ -149,18 +151,15 @@ export default function AdminPage() { } const formData = new FormData(); - for (const fieldName of ['cardFile', 'stageFile', 'mobileStageFile', 'hdStageFile']) { - const file = source.get(fieldName); - if (file instanceof File && file.size > 0) { - formData.append(fieldName, file); - } + const sourceImageFile = source.get('sourceImageFile'); + + if (sourceImageFile instanceof File && sourceImageFile.size > 0) { + formData.append('sourceImageFile', sourceImageFile); } - for (const fieldName of ['placeholderGradient', 'blurDataUrl']) { - const value = String(source.get(fieldName) ?? '').trim(); - if (value) { - formData.append(fieldName, value); - } + const blurDataUrl = String(source.get('blurDataUrl') ?? '').trim(); + if (blurDataUrl) { + formData.append('blurDataUrl', blurDataUrl); } const response = await adminApi.uploadScene(sceneId, formData, session.accessToken); @@ -201,10 +200,15 @@ export default function AdminPage() { } } - for (const fieldName of ['durationSec', 'defaultVolume']) { - const value = String(source.get(fieldName) ?? '').trim(); - if (value) { - formData.append(fieldName, value); + const defaultVolume = String(source.get('defaultVolume') ?? '').trim(); + if (defaultVolume) { + formData.append('defaultVolume', defaultVolume); + } + + if (isDurationOverrideEnabled) { + const durationSec = String(source.get('durationSec') ?? '').trim(); + if (durationSec) { + formData.append('durationSec', durationSec); } } @@ -212,6 +216,7 @@ export default function AdminPage() { setUploadResult({ type: 'sound', payload: response }); setSoundMessage(copy.admin.messages.soundUploadDone(presetId)); form.reset(); + setIsDurationOverrideEnabled(false); } catch (error) { setSoundMessage(error instanceof Error ? error.message : copy.admin.messages.soundUploadFailed); } finally { @@ -221,6 +226,8 @@ export default function AdminPage() { const activeMeta = getViewMeta(activeView); const currentMessage = activeView === 'scene' ? sceneMessage : soundMessage; + const lastExtractedDurationSec = + uploadResult?.type === 'sound' ? uploadResult.payload.durationSec ?? null : null; if (!session) { return ( @@ -488,48 +495,33 @@ export default function AdminPage() {
-
+
+

{copy.admin.views.scene.sceneIdHint}

-
+
+ +
+
+

{copy.admin.views.scene.sourceImageHint}

+

{copy.admin.views.scene.sourceImageDerivedHint}

-
-
- - -
-
- - -
-
- -
-
- - -
-
- - -
-
- -
+