'use client'; import { useState, useTransition } from 'react'; import Link from 'next/link'; import { Modal } from '@/components/ui/Modal'; import { Input } from '@/components/ui/Input'; import { Button } from '@/components/ui/Button'; import { Badge } from '@/components/ui/Badge'; import { Avatar } from '@/components/ui/Avatar'; import { shareWeatherSession, shareWeatherSessionToTeam, removeWeatherShare } from '@/actions/weather'; import type { ShareRole } from '@prisma/client'; interface ShareUser { id: string; name: string | null; email: string; } interface Share { id: string; role: ShareRole; user: ShareUser; createdAt: Date; } interface Team { id: string; name: string; description: string | null; userRole: 'ADMIN' | 'MEMBER'; } interface WeatherShareModalProps { isOpen: boolean; onClose: () => void; sessionId: string; sessionTitle: string; shares: Share[]; isOwner: boolean; userTeams?: Team[]; } export function WeatherShareModal({ isOpen, onClose, sessionId, sessionTitle, shares, isOwner, userTeams = [], }: WeatherShareModalProps) { const [shareType, setShareType] = useState<'user' | 'team'>('user'); const [email, setEmail] = useState(''); const [teamId, setTeamId] = useState(''); const [role, setRole] = useState('EDITOR'); const [error, setError] = useState(null); const [isPending, startTransition] = useTransition(); async function handleShare(e: React.FormEvent) { e.preventDefault(); setError(null); startTransition(async () => { let result; if (shareType === 'team') { result = await shareWeatherSessionToTeam(sessionId, teamId, role); } else { result = await shareWeatherSession(sessionId, email, role); } if (result.success) { setEmail(''); setTeamId(''); } else { setError(result.error || 'Erreur lors du partage'); } }); } async function handleRemove(userId: string) { startTransition(async () => { await removeWeatherShare(sessionId, userId); }); } return (
{/* Session info */}

Météo personnelle

{sessionTitle}

{/* Share form (only for owner) */} {isOwner && (
{/* Share type selector */}
{/* User share */} {shareType === 'user' && (
setEmail(e.target.value)} className="flex-1" required />
)} {/* Team share */} {shareType === 'team' && (
{userTeams.length === 0 ? (

Vous n'êtes membre d'aucune équipe. Créez une équipe depuis la page{' '} Équipes .

) : ( <>
)}
)} {error &&

{error}

}
)} {/* Current shares */}

Collaborateurs ({shares.length})

{shares.length === 0 ? (

Aucun collaborateur pour le moment

) : (
    {shares.map((share) => (
  • {share.user.name || share.user.email}

    {share.user.name &&

    {share.user.email}

    }
    {share.role === 'EDITOR' ? 'Éditeur' : 'Lecteur'} {isOwner && ( )}
  • ))}
)}
{/* Help text */}

Éditeur : peut modifier sa météo et voir celle des autres
Lecteur : peut uniquement consulter

); }