feat: 세션 진입 전 목표 세팅

This commit is contained in:
2026-02-13 11:37:18 +09:00
parent e9bd08c75d
commit 751b34c39f

89
src/app/boarding/page.tsx Normal file
View File

@@ -0,0 +1,89 @@
'use client';
import { useState, Suspense } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { ROUTES } from '@/lib/constants';
import { saveCurrentVoyage } from '@/lib/store';
import { Voyage } from '@/types';
function BoardingContent() {
const router = useRouter();
const searchParams = useSearchParams();
const routeId = searchParams.get('routeId');
const route = ROUTES.find(r => r.id === routeId) || ROUTES[0];
const [mission, setMission] = useState('');
const [notes, setNotes] = useState('');
const handleDocking = () => {
if (!mission.trim()) return;
const newVoyage: Voyage = {
id: crypto.randomUUID(),
routeId: route.id,
routeName: route.name,
durationMinutes: route.durationMinutes,
startedAt: Date.now(),
status: 'in_progress',
missionText: mission,
notes: notes,
};
saveCurrentVoyage(newVoyage);
router.push('/flight');
};
return (
<div className="flex flex-col flex-1 p-6 animate-in slide-in-from-bottom-4 duration-500">
<div className="mb-8">
<h2 className="text-sm text-indigo-400 font-semibold mb-1 uppercase tracking-widest">Boarding Check</h2>
<h1 className="text-3xl font-bold text-white">{route.name} </h1>
</div>
<div className="space-y-8 flex-1">
<div className="space-y-3">
<label className="block text-sm font-medium text-slate-300">
</label>
<input
type="text"
value={mission}
onChange={(e) => setMission(e.target.value)}
placeholder="예: 서론 3문단 완성하기"
className="w-full bg-slate-900/50 border-b-2 border-slate-700 focus:border-indigo-500 px-0 py-3 text-lg outline-none transition-colors placeholder:text-slate-600"
autoFocus
/>
</div>
<div className="space-y-3">
<label className="block text-sm font-medium text-slate-400">
()
</label>
<input
type="text"
value={notes}
onChange={(e) => setNotes(e.target.value)}
placeholder="오늘의 컨디션이나 제약사항"
className="w-full bg-transparent border-b border-slate-800 focus:border-slate-500 px-0 py-2 text-base outline-none transition-colors placeholder:text-slate-700 text-slate-300"
/>
</div>
</div>
<button
onClick={handleDocking}
disabled={!mission.trim()}
className="w-full py-4 bg-indigo-600 hover:bg-indigo-500 disabled:bg-slate-800 disabled:text-slate-500 text-white font-bold text-lg rounded-xl transition-all shadow-lg shadow-indigo-900/30 mt-8"
>
()
</button>
</div>
);
}
export default function BoardingPage() {
return (
<Suspense fallback={<div className="p-6">Loading...</div>}>
<BoardingContent />
</Suspense>
);
}