'use client'; import { useState, useCallback } from 'react'; import { useWeeklyCheckInLive, type WeeklyCheckInLiveEvent } from '@/hooks/useWeeklyCheckInLive'; import { LiveIndicator } from '@/components/collaboration/LiveIndicator'; import { ShareModal } from '@/components/collaboration/ShareModal'; import { shareWeeklyCheckInSession, removeWeeklyCheckInShare } from '@/actions/weekly-checkin'; 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 WeeklyCheckInLiveWrapperProps { sessionId: string; sessionTitle: string; currentUserId: string; shares: Share[]; isOwner: boolean; canEdit: boolean; userTeams?: TeamWithMembers[]; children: React.ReactNode; } export function WeeklyCheckInLiveWrapper({ sessionId, sessionTitle, currentUserId, shares, isOwner, canEdit, userTeams = [], children, }: WeeklyCheckInLiveWrapperProps) { const [shareModalOpen, setShareModalOpen] = useState(false); const [lastEventUser, setLastEventUser] = useState(null); const handleEvent = useCallback((event: WeeklyCheckInLiveEvent) => { // 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 } = useWeeklyCheckInLive({ 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="Options de partage" sessionSubtitle="Check-in hebdomadaire" sessionTitle={sessionTitle} shares={shares} isOwner={isOwner} userTeams={userTeams} currentUserId={currentUserId} onShareWithEmail={(email, role) => shareWeeklyCheckInSession(sessionId, email, role)} onRemoveShare={(userId) => removeWeeklyCheckInShare(sessionId, userId)} helpText={ <> Éditeur : peut modifier les items et leurs catégories
Lecteur : peut uniquement consulter } /> ); }