← back to IWasCute
src/app/licensor/page.tsx
96 lines
'use client'
import { useState } from 'react'
import Stepper from '@/components/licensor/Stepper'
import PhotoUpload from '@/components/licensor/PhotoUpload'
import CopyrightInfo from '@/components/licensor/CopyrightInfo'
import LikenessRelease from '@/components/licensor/LikenessRelease'
import ReviewSubmit from '@/components/licensor/ReviewSubmit'
import type { PhotoFile } from '@/components/licensor/PhotoUpload'
import type { CopyrightData } from '@/components/licensor/CopyrightInfo'
import type { LikenessData } from '@/components/licensor/LikenessRelease'
const TOTAL_STEPS = 4
function todayISOString() {
const d = new Date()
return d.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })
}
export default function LicensorPage() {
const [step, setStep] = useState(0)
// Step 1 — Photos
const [photos, setPhotos] = useState<PhotoFile[]>([])
// Step 2 — Copyright
const [copyrightInfo, setCopyrightInfo] = useState<CopyrightData>({
photographer: '',
relationship: '',
year: '',
hasPermission: '',
estateRights: false,
applyToAll: true,
})
// Step 3 — Likeness
const [likenessRelease, setLikenessRelease] = useState<LikenessData>({
isSubject: false,
isAdult: false,
editorial: false,
commercial: false,
aiTraining: false,
signature: '',
date: todayISOString(),
})
const next = () => setStep((s) => Math.min(s + 1, TOTAL_STEPS - 1))
const back = () => setStep((s) => Math.max(s - 1, 0))
return (
<div className="px-4 py-8 md:px-8 md:py-12 max-w-2xl mx-auto">
{/* Stepper */}
<Stepper currentStep={step} />
{/* Step content */}
<div className="mt-8">
{step === 0 && (
<PhotoUpload
photos={photos}
onPhotosChange={setPhotos}
onNext={next}
/>
)}
{step === 1 && (
<CopyrightInfo
photos={photos}
copyrightInfo={copyrightInfo}
onCopyrightChange={setCopyrightInfo}
onNext={next}
onBack={back}
/>
)}
{step === 2 && (
<LikenessRelease
likenessRelease={likenessRelease}
onLikenessChange={setLikenessRelease}
onNext={next}
onBack={back}
/>
)}
{step === 3 && (
<ReviewSubmit
photos={photos}
copyrightInfo={copyrightInfo}
likenessRelease={likenessRelease}
onBack={back}
/>
)}
</div>
</div>
)
}