'use client'; import { useState, useCallback } from 'react'; import { useMotivatorLive, type MotivatorLiveEvent } from '@/hooks/useMotivatorLive'; import { LiveIndicator } from '@/components/collaboration/LiveIndicator'; import { ShareModal } from '@/components/collaboration/ShareModal'; import { shareMotivatorSession, removeMotivatorShare } from '@/actions/moving-motivators'; import type { TeamWithMembers } from '@/lib/share-utils'; import { Button } from '@/components/ui/Button'; import { Avatar } from '@/components/ui/Avatar'; 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 MotivatorLiveWrapperProps { sessionId: string; sessionTitle: string; currentUserId: string; shares: Share[]; isOwner: boolean; canEdit: boolean; userTeams?: TeamWithMembers[]; children: React.ReactNode; } export function MotivatorLiveWrapper({ sessionId, sessionTitle, currentUserId, shares, isOwner, canEdit, userTeams = [], children, }: MotivatorLiveWrapperProps) { const [shareModalOpen, setShareModalOpen] = useState(false); const [lastEventUser, setLastEventUser] = useState(null); const handleEvent = useCallback((event: MotivatorLiveEvent) => { // Show who made the last change if (event.user?.name || event.user?.email) { setLastEventUser(event.user.name || event.user.email); // Clear after 3 seconds setTimeout(() => setLastEventUser(null), 3000); } }, []); const { isConnected, error } = useMotivatorLive({ sessionId, currentUserId, onEvent: handleEvent, }); return ( <> {/* Header toolbar */}
{lastEventUser && (
✏️ {lastEventUser} édite...
)} {!canEdit && (
👁️ Mode lecture
)}
{/* Collaborators avatars */} {shares.length > 0 && (
{shares.slice(0, 3).map((share) => ( ))} {shares.length > 3 && (
+{shares.length - 3}
)}
)}
{/* Content */}
{children}
{/* Share Modal */} setShareModalOpen(false)} title="Partager la session" sessionSubtitle="Session Moving Motivators" sessionTitle={sessionTitle} shares={shares} isOwner={isOwner} userTeams={userTeams} currentUserId={currentUserId} onShareWithEmail={(email, role) => shareMotivatorSession(sessionId, email, role)} onRemoveShare={(userId) => removeMotivatorShare(sessionId, userId)} helpText={ <> Éditeur : peut modifier les cartes et leurs positions
Lecteur : peut uniquement consulter } /> ); }