import React, { useState } from 'react'; import { useCreateLiveBlog } from '@/queries/live-blogs'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useNavigate } from '@tanstack/react-router'; import { Plus } from 'lucide-react'; interface CreateLiveBlogProps { onSuccess?: () => void; className?: string; } export function CreateLiveBlog({ onSuccess, className }: CreateLiveBlogProps) { const navigate = useNavigate(); const [formData, setFormData] = useState({ title: '', slug: '', description: '', status: 'draft' as 'draft' | 'live' | 'ended' | 'archived', }); const [errors, setErrors] = useState>({}); const createMutation = useCreateLiveBlog(); const generateSlug = (title: string) => { return title .toLowerCase() .replace(/[^\w\s-]/g, '') .replace(/\s+/g, '-') .replace(/--+/g, '-') .trim(); }; const handleTitleChange = (e: React.ChangeEvent) => { const title = e.target.value; setFormData({ ...formData, title, slug: formData.slug || generateSlug(title), }); if (errors.title) setErrors({ ...errors, title: '' }); }; const handleSlugChange = (e: React.ChangeEvent) => { setFormData({ ...formData, slug: e.target.value }); if (errors.slug) setErrors({ ...errors, slug: '' }); }; const validateForm = () => { const newErrors: Record = {}; if (!formData.title.trim()) { newErrors.title = 'Title is required'; } if (!formData.slug.trim()) { newErrors.slug = 'Slug is required'; } else if (!/^[a-z0-9-]+$/.test(formData.slug)) { newErrors.slug = 'Slug can only contain lowercase letters, numbers, and hyphens'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) return; try { const result = await createMutation.mutateAsync(formData); // Reset form setFormData({ title: '', slug: '', description: '', status: 'draft', }); setErrors({}); // Navigate to the new live blog navigate({ to: `/admin/live-blogs/${result.slug}` }); if (onSuccess) onSuccess(); } catch (error) { console.error('Failed to create live blog:', error); setErrors({ submit: 'Failed to create live blog. Please try again.' }); } }; return ( Create New Live Blog
{errors.title && (

{errors.title}

)}
{errors.slug && (

{errors.slug}

)}

This will be used in the URL: /live-blogs/your-slug-here