"use client"; import { Search, Send, X } from "lucide-react"; import * as React from "react"; import { toast } from "sonner"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { ScrollArea } from "@/components/ui/scroll-area"; import { MessageService } from "@/services/message.service"; import { UserService } from "@/services/user.service"; import type { User } from "@/types/user"; interface ShareDialogProps { contentId: string; contentTitle: string; contentUrl: string; open: boolean; onOpenChange: (open: boolean) => void; } export function ShareDialog({ contentId, contentTitle, contentUrl: _unused, // Support legacy prop open, onOpenChange, }: ShareDialogProps) { const [searchQuery, setSearchQuery] = React.useState(""); const [results, setResults] = React.useState([]); const [isLoading, setIsLoading] = React.useState(false); const [sendingTo, setSendingTo] = React.useState(null); React.useEffect(() => { if (!open) { setSearchQuery(""); setResults([]); return; } const fetchInitial = async () => { setIsLoading(true); try { // Par défaut, montrer les conversations récentes ou suggérer des gens const recent = await UserService.search(""); setResults(recent); } catch (error) { console.error("Failed to fetch users", error); } finally { setIsLoading(false); } }; fetchInitial(); }, [open]); React.useEffect(() => { if (searchQuery.length < 2) return; const timeout = setTimeout(async () => { setIsLoading(true); try { const data = await UserService.search(searchQuery); setResults(data); } catch (error) { console.error("Search failed", error); } finally { setIsLoading(false); } }, 300); return () => clearTimeout(timeout); }, [searchQuery]); const handleShare = async (user: User) => { setSendingTo(user.uuid); try { const shareUrl = `${window.location.origin}/meme/${contentId}`; await MessageService.sendMessage( user.uuid, `Regarde ce mème : ${contentTitle}\n${shareUrl}`, ); toast.success(`Partagé avec @${user.username}`); onOpenChange(false); } catch (_error) { toast.error("Échec du partage"); } finally { setSendingTo(null); } }; return ( Partager avec
setSearchQuery(e.target.value)} /> {searchQuery && ( )}
{isLoading && results.length === 0 ? (
Chargement...
) : results.length === 0 ? (
Aucun membre trouvé.
) : ( results.map((user) => (
{user.username[0].toUpperCase()}
{user.displayName || user.username} @{user.username}
)) )}
); }