"use client"; import { useState, useEffect } from "react"; import { useSession } from "next-auth/react"; import Card from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import SectionTitle from "@/components/ui/SectionTitle"; import BackgroundSection from "@/components/ui/BackgroundSection"; import HouseCard from "./HouseCard"; import HouseForm from "./HouseForm"; import HouseManagement from "./HouseManagement"; import InvitationList from "./InvitationList"; import Input from "@/components/ui/Input"; interface House { id: string; name: string; description: string | null; creator: { id: string; username: string; avatar: string | null; }; memberships?: Array<{ id: string; role: string; user: { id: string; username: string; avatar: string | null; score?: number; level?: number; }; }>; _count?: { memberships: number; }; } interface User { id: string; username: string; avatar: string | null; } interface HousesSectionProps { initialHouses?: House[]; initialMyHouse?: House | null; initialUsers?: User[]; initialInvitations?: Array<{ id: string; house: { id: string; name: string; }; inviter: { id: string; username: string; avatar: string | null; }; status: string; createdAt: string; }>; backgroundImage: string; } export default function HousesSection({ initialHouses = [], initialMyHouse = null, initialUsers = [], initialInvitations = [], backgroundImage, }: HousesSectionProps) { const { data: session } = useSession(); const [houses, setHouses] = useState(initialHouses); const [myHouse, setMyHouse] = useState(initialMyHouse); const [invitations, setInvitations] = useState(initialInvitations); const [showCreateForm, setShowCreateForm] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const fetchHouses = async () => { try { const params = new URLSearchParams(); if (searchTerm) { params.append("search", searchTerm); } params.append("include", "members,creator"); const response = await fetch(`/api/houses?${params}`); if (response.ok) { const data = await response.json(); setHouses(data); } } catch (error) { console.error("Error fetching houses:", error); } }; const fetchMyHouse = async () => { try { const response = await fetch("/api/houses/my-house"); if (response.ok) { const data = await response.json(); setMyHouse(data); } else if (response.status === 404) { setMyHouse(null); } } catch (error) { console.error("Error fetching my house:", error); } }; const fetchInvitations = async () => { try { const response = await fetch("/api/invitations?status=PENDING"); if (response.ok) { const data = await response.json(); setInvitations(data); } } catch (error) { console.error("Error fetching invitations:", error); } }; useEffect(() => { if (searchTerm) { const timeout = setTimeout(() => { fetchHouses(); }, 300); return () => clearTimeout(timeout); } else { fetchHouses(); } }, [searchTerm]); const handleUpdate = () => { fetchMyHouse(); fetchHouses(); fetchInvitations(); }; const filteredHouses = houses.filter((house) => { if (!myHouse) return true; return house.id !== myHouse.id; }); return ( {/* Title Section */} MAISONS
{session?.user && ( <> {invitations.length > 0 && ( Mes Invitations )} Ma Maison {myHouse ? ( ) : (
{showCreateForm ? ( { setShowCreateForm(false); handleUpdate(); }} onCancel={() => setShowCreateForm(false)} /> ) : (

Vous n'êtes membre d'aucune maison. Créez-en une ou demandez à rejoindre une maison existante.

)}
)}
)} Toutes les Maisons
setSearchTerm(e.target.value)} />
{filteredHouses.length === 0 ? (

Aucune maison trouvée

) : (
{filteredHouses.map((house) => ( ))}
)}
); }