import { useEffect, useState } from 'react'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { RefreshCw, Lock } from 'lucide-react'; import { generateSlugFromName } from '@/lib/slugUtils'; interface SlugFieldProps { name: string; slug: string; onSlugChange: (slug: string) => void; isModerator: boolean; label?: string; hideForNonModerators?: boolean; } export function SlugField({ name, slug, onSlugChange, isModerator, label = 'URL Slug', hideForNonModerators = true }: SlugFieldProps) { const [isEditing, setIsEditing] = useState(false); // Auto-generate slug when name changes useEffect(() => { if (!isEditing && name) { const generatedSlug = generateSlugFromName(name); onSlugChange(generatedSlug); } }, [name, isEditing, onSlugChange]); const handleRegenerate = () => { if (name) { const generatedSlug = generateSlugFromName(name); onSlugChange(generatedSlug); setIsEditing(false); } }; // Hide completely for non-moderators if configured if (!isModerator && hideForNonModerators) { return null; } return (
{!isModerator && ( Auto-generated )} {isModerator && ( Moderator )}
{ onSlugChange(e.target.value); setIsEditing(true); }} placeholder="url-slug" readOnly={!isModerator} className={!isModerator ? 'bg-muted cursor-not-allowed' : ''} /> {isModerator && ( )}
{!isModerator && (

URL will be automatically generated from the name

)} {isModerator && slug && (

Preview: .../{slug}

)}
); }