'use client' import { BackButton } from '@/components/BackButton' import { ReloadButton } from '@/components/ReloadButton' import { getCookie } from '@/util/cookie' import { Turnstile } from '@marsidev/react-turnstile' import axios from 'axios' import { useRouter } from 'next/navigation' import { useEffect, useRef, useState } from 'react' export default function BerryDashSubmitIcon () { const [token, setToken] = useState(null) const [result, setResult] = useState(-1) const [loading, setLoading] = useState(true) const router = useRouter() const backButtonRef = useRef(null) const [name, setName] = useState('') const [price, setPrice] = useState(10) const [file, setFile] = useState(undefined) const [preview, setPreview] = useState(null) useEffect(() => { document.title = 'Lncvrt Games - Berry Dash Icon Submition' const token = getCookie('accountToken', '-1') if (token === '-1') { router.push( '/account/login?redirect=/game/berry-dash/icon-marketplace/upload' ) } else setTimeout(() => setLoading(false), 0) const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Escape') { backButtonRef.current?.click() } } window.addEventListener('keydown', handleKeyDown) return () => window.removeEventListener('keydown', handleKeyDown) }, [router]) return (
window.location.reload()} />

{loading ? 'Loading...' : result == -1 ? 'Verify you are human to submit a icon' : 'Berry Dash Icon Submission'}

{!loading && ( <> {result == -1 ? ( { setToken(token) setResult(0) }} onError={() => setResult(1)} className='flex justify-center' /> ) : result == 0 ? (
{ e.preventDefault() if (!file) { alert('Please select a bird image!') return } if (file.type !== 'image/png') { alert('Please select a PNG file!') return } const reader = new FileReader() reader.onload = async () => { const base64Data = (reader.result as string).split(',')[1] try { const result = await axios.post( '/api/berrydash/icon-marketplace/upload', { token, fileContent: base64Data, name, price: price.toString() }, { headers: { authorization: getCookie('accountToken', '-1') } } ) if (result.data.success) { setResult(2) } else { alert( 'Failed to submit icon, error: ' + (result.data.message || 'n/a') ) } } catch (err: any) { if (err.response) { alert( 'Failed to submit icon, error: ' + (err.response.data?.message || JSON.stringify(err.response.data)) ) } else if (err.request) { alert('Failed to submit icon, no response from server.') } else { alert('Failed to submit icon, error: ' + err.message) } } } reader.readAsDataURL(file) }} > { const f = e.target.files?.[0] if (!f) return if (f.type !== 'image/png') { alert('Please select a PNG file!') return } setFile(f) const reader = new FileReader() reader.onload = () => setPreview(reader.result as string) reader.readAsDataURL(f) }} required /> setName(e.target.value)} required /> setPrice(Number(e.target.value))} required />

Preview:

Bird Name:{' '} {!/^[a-zA-Z0-9 ]+$/.test(name) || name.length > 16 ? 'N/A' : name}

Price: {price.toLocaleString('en-US')}

Designer Name: {getCookie('accountUsername', '-1')}

) : ( (result == 1 || result == 2) && (

{result == 1 ? 'Unable to verify captcha, please reload page.' : 'Successfully submitted icon! It will be reviewed soon. Refresh to add more icon, there is no limit after all!'}

) )} )}
) }