import '@/index.css' import { useState } from 'react' import { navigate } from 'vike/client/router' import { getCsrfToken } from '@rudderjs/middleware/client' // URL this view is served at — see Login.tsx for rationale. export const route = '/register' export interface RegisterProps { submitUrl?: string loginUrl?: string homeUrl?: string } export default function Register(props: RegisterProps) { const submitUrl = props.submitUrl ?? '/auth/sign-up/email' const loginUrl = props.loginUrl ?? '/login' const homeUrl = props.homeUrl ?? '/' const [name, setName] = useState('') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) async function handleSubmit(e: React.FormEvent) { e.preventDefault() setError('') setLoading(true) const res = await fetch(submitUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': getCsrfToken(), }, body: JSON.stringify({ name, email, password }), }) if (res.ok) { await navigate(homeUrl) } else { const body = await res.json().catch(() => ({})) as { message?: string } setError(body.message ?? 'Could not create account. Please try again.') } setLoading(false) } return (
Get started in seconds