import { useState } from "react"; import { MiiGender } from "@prisma/client"; import DatingPreferencesViewer from "@/components/mii/dating-preferences"; import VoiceViewer from "@/components/mii/voice-viewer"; import PersonalityViewer from "@/components/mii/personality-viewer"; import { SwitchMiiInstructions } from "@/types"; interface Props { instructions: React.RefObject; } export default function HeadTab({ instructions }: Props) { const [height, setHeight] = useState(instructions.current.height ?? 64); const [weight, setWeight] = useState(instructions.current.weight ?? 64); const [datingPreferences, setDatingPreferences] = useState(instructions.current.datingPreferences ?? []); const [voice, setVoice] = useState({ speed: instructions.current.voice.speed ?? 25, pitch: instructions.current.voice.pitch ?? 25, depth: instructions.current.voice.depth ?? 25, delivery: instructions.current.voice.delivery ?? 25, tone: instructions.current.voice.tone ?? 0, }); const [birthday, setBirthday] = useState({ day: instructions.current.birthday.day ?? (null as number | null), month: instructions.current.birthday.month ?? (null as number | null), age: instructions.current.birthday.age ?? (null as number | null), dontAge: instructions.current.birthday.dontAge, }); const [personality, setPersonality] = useState({ movement: instructions.current.personality.movement ?? -1, speech: instructions.current.personality.speech ?? -1, energy: instructions.current.personality.energy ?? -1, thinking: instructions.current.personality.thinking ?? -1, overall: instructions.current.personality.overall ?? -1, }); return ( <>

Misc


Body
{ setHeight(e.target.valueAsNumber); instructions.current.height = e.target.valueAsNumber; }} />
{ setWeight(e.target.valueAsNumber); instructions.current.weight = e.target.valueAsNumber; }} />

Dating Preferences
{ setDatingPreferences((prev) => { const updated = e.target.checked ? (prev.includes(gender) ? prev : [...prev, gender]) : prev.filter((p) => p !== gender); instructions.current.datingPreferences = updated; return updated; }); }} />

Voice
{ setVoice((p) => ({ ...p, [label]: e.target.valueAsNumber })); instructions.current.voice[label as keyof typeof voice] = e.target.valueAsNumber; }} onClickTone={(i) => { setVoice((p) => ({ ...p, tone: i })); instructions.current.voice.tone = i; }} />

Birthday
{ setBirthday((p) => ({ ...p, day: e.target.valueAsNumber })); instructions.current.birthday.day = e.target.valueAsNumber; }} />
{ setBirthday((p) => ({ ...p, month: e.target.valueAsNumber })); instructions.current.birthday.month = e.target.valueAsNumber; }} />
{ setBirthday((p) => ({ ...p, age: e.target.valueAsNumber })); instructions.current.birthday.age = e.target.valueAsNumber; }} />
{ setBirthday((p) => ({ ...p, dontAge: e.target.checked })); instructions.current.birthday.dontAge = e.target.checked; }} />

Personality
{ setPersonality((p) => { const updated = { ...p, [key]: i }; instructions.current.personality = updated; return updated; }); instructions.current.personality = personality; }} />
); }