Spaces:
Sleeping
Sleeping
| 'use client' | |
| import React from "react" | |
| import { useState } from 'react' | |
| import { Send } from 'lucide-react' | |
| import { Button } from '@/components/ui/button' | |
| export function ShareProblemSection() { | |
| const [formData, setFormData] = useState({ | |
| name: '', | |
| email: '', | |
| problem: '', | |
| }) | |
| const [isSubmitting, setIsSubmitting] = useState(false) | |
| const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle') | |
| const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => { | |
| const { name, value } = e.target | |
| setFormData(prev => ({ | |
| ...prev, | |
| [name]: value, | |
| })) | |
| } | |
| const handleSubmit = async (e: React.FormEvent) => { | |
| e.preventDefault() | |
| setIsSubmitting(true) | |
| try { | |
| // Simulate form submission | |
| await new Promise(resolve => setTimeout(resolve, 1000)) | |
| setSubmitStatus('success') | |
| setFormData({ name: '', email: '', problem: '' }) | |
| setTimeout(() => setSubmitStatus('idle'), 3000) | |
| } catch (error) { | |
| setSubmitStatus('error') | |
| setTimeout(() => setSubmitStatus('idle'), 3000) | |
| } finally { | |
| setIsSubmitting(false) | |
| } | |
| } | |
| return ( | |
| <section className="py-12 sm:py-16 md:py-20 px-4 md:px-6 bg-gradient-to-b from-background via-muted/20 to-background" aria-labelledby="share-problem-heading"> | |
| <div className="container mx-auto max-w-3xl"> | |
| <div className="bg-card border border-border rounded-2xl sm:rounded-3xl p-5 sm:p-8 md:p-12 shadow-lg"> | |
| <div className="text-center mb-6 sm:mb-8"> | |
| <h2 id="share-problem-heading" className="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-3 sm:mb-4"> | |
| Share Your Problem | |
| </h2> | |
| <p className="text-sm sm:text-base md:text-lg text-muted-foreground px-2"> | |
| Have a challenge you'd like the community to help solve? Tell us about it and let's innovate together. | |
| </p> | |
| </div> | |
| <form onSubmit={handleSubmit} className="space-y-4 sm:space-y-6"> | |
| {/* Name Field */} | |
| <div> | |
| <label htmlFor="name" className="block text-xs sm:text-sm font-semibold text-foreground mb-1.5 sm:mb-2"> | |
| Your Name | |
| </label> | |
| <input | |
| type="text" | |
| id="name" | |
| name="name" | |
| value={formData.name} | |
| onChange={handleChange} | |
| required | |
| placeholder="Enter your full name" | |
| className="w-full px-3 sm:px-4 py-2.5 sm:py-3 rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary transition-all text-sm sm:text-base" | |
| /> | |
| </div> | |
| {/* Email Field */} | |
| <div> | |
| <label htmlFor="email" className="block text-xs sm:text-sm font-semibold text-foreground mb-1.5 sm:mb-2"> | |
| Email Address | |
| </label> | |
| <input | |
| type="email" | |
| id="email" | |
| name="email" | |
| value={formData.email} | |
| onChange={handleChange} | |
| required | |
| placeholder="your.email@example.com" | |
| className="w-full px-3 sm:px-4 py-2.5 sm:py-3 rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary transition-all text-sm sm:text-base" | |
| /> | |
| </div> | |
| {/* Problem Field */} | |
| <div> | |
| <label htmlFor="problem" className="block text-xs sm:text-sm font-semibold text-foreground mb-1.5 sm:mb-2"> | |
| Describe Your Problem | |
| </label> | |
| <textarea | |
| id="problem" | |
| name="problem" | |
| value={formData.problem} | |
| onChange={handleChange} | |
| required | |
| placeholder="Tell us about the challenge you're facing. What problem are you trying to solve?" | |
| rows={5} | |
| className="w-full px-3 sm:px-4 py-2.5 sm:py-3 rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary transition-all resize-none text-sm sm:text-base" | |
| /> | |
| </div> | |
| {/* Submit Button and Status */} | |
| <div className="flex flex-col gap-4"> | |
| <Button | |
| type="submit" | |
| disabled={isSubmitting || submitStatus === 'success'} | |
| className="w-full bg-gradient-to-r from-primary to-secondary hover:opacity-90 disabled:opacity-50 text-white py-3 rounded-lg font-semibold flex items-center justify-center gap-2" | |
| > | |
| {isSubmitting ? ( | |
| <> | |
| <span className="animate-spin inline-block w-4 h-4 border-2 border-white border-t-transparent rounded-full" /> | |
| Submitting... | |
| </> | |
| ) : ( | |
| <> | |
| <Send className="w-4 h-4" /> | |
| Share Problem with Community | |
| </> | |
| )} | |
| </Button> | |
| {submitStatus === 'success' && ( | |
| <div className="bg-green-50 dark:bg-green-950/50 border border-green-200 dark:border-green-800 text-green-700 dark:text-green-400 px-4 py-3 rounded-lg text-center text-sm"> | |
| Thank you! We've received your problem and will review it shortly. | |
| </div> | |
| )} | |
| {submitStatus === 'error' && ( | |
| <div className="bg-red-50 dark:bg-red-950/50 border border-red-200 dark:border-red-800 text-red-700 dark:text-red-400 px-4 py-3 rounded-lg text-center text-sm"> | |
| Something went wrong. Please try again. | |
| </div> | |
| )} | |
| </div> | |
| </form> | |
| </div> | |
| </div> | |
| </section> | |
| ) | |
| } | |