website cleanup
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
import { useState, FormEvent } from 'react';
|
||||
import { motion, AnimatePresence } from 'framer-motion';
|
||||
import { useServices } from '@/lib/services/ServiceProvider';
|
||||
|
||||
type FeedbackState =
|
||||
| { type: 'idle' }
|
||||
@@ -13,6 +14,7 @@ type FeedbackState =
|
||||
export default function EmailCapture() {
|
||||
const [email, setEmail] = useState('');
|
||||
const [feedback, setFeedback] = useState<FeedbackState>({ type: 'idle' });
|
||||
const { landingService } = useServices();
|
||||
|
||||
const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {
|
||||
e.preventDefault();
|
||||
@@ -25,39 +27,22 @@ export default function EmailCapture() {
|
||||
setFeedback({ type: 'loading' });
|
||||
|
||||
try {
|
||||
const response = await fetch('/api/signup', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ email }),
|
||||
});
|
||||
const result = await landingService.signup(email);
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
if (response.status === 429) {
|
||||
setFeedback({
|
||||
type: 'error',
|
||||
message: data.error,
|
||||
retryAfter: data.retryAfter
|
||||
});
|
||||
} else if (response.status === 409) {
|
||||
setFeedback({ type: 'info', message: data.error });
|
||||
setTimeout(() => setFeedback({ type: 'idle' }), 4000);
|
||||
} else {
|
||||
setFeedback({
|
||||
type: 'error',
|
||||
message: data.error || 'Something broke. Try again?',
|
||||
canRetry: true
|
||||
});
|
||||
}
|
||||
return;
|
||||
if (result.status === 'success') {
|
||||
setFeedback({ type: 'success', message: result.message });
|
||||
setEmail('');
|
||||
setTimeout(() => setFeedback({ type: 'idle' }), 5000);
|
||||
} else if (result.status === 'info') {
|
||||
setFeedback({ type: 'info', message: result.message });
|
||||
setTimeout(() => setFeedback({ type: 'idle' }), 4000);
|
||||
} else {
|
||||
setFeedback({
|
||||
type: 'error',
|
||||
message: result.message,
|
||||
canRetry: true
|
||||
});
|
||||
}
|
||||
|
||||
setFeedback({ type: 'success', message: data.message });
|
||||
setEmail('');
|
||||
setTimeout(() => setFeedback({ type: 'idle' }), 5000);
|
||||
} catch (error) {
|
||||
setFeedback({
|
||||
type: 'error',
|
||||
|
||||
Reference in New Issue
Block a user