import React, { useState } from 'react' import { MdMoreVert, MdVideocam, MdPersonAdd, MdEdit, MdOpenInNew, MdDelete } from 'react-icons/md' import { Dropdown } from './Dropdown' import { FaYoutube, FaFacebook, FaTwitch, FaLinkedin } from 'react-icons/fa' import { SkeletonTable } from './Skeleton' import styles from './TransmissionsTable.module.css' import InviteGuestsModal from './InviteGuestsModal' import type { Transmission } from '../types' interface Props { transmissions: Transmission[] onDelete: (id: string) => void onUpdate: (t: Transmission) => void isLoading?: boolean } const platformIcons: Record = { 'YouTube': , 'Facebook': , 'Twitch': , 'LinkedIn': , } const TransmissionsTable: React.FC = ({ transmissions, onDelete, onUpdate, isLoading }) => { const [activeTab, setActiveTab] = useState<'upcoming' | 'past'>('upcoming') const [inviteOpen, setInviteOpen] = useState(false) const [inviteLink, setInviteLink] = useState(undefined) // Filtrado por fechas const filtered = transmissions.filter(t => { if (!t.scheduled) return activeTab === 'upcoming' const scheduledDate = new Date(t.scheduled) const now = new Date() if (activeTab === 'upcoming') { return scheduledDate >= now } else { return scheduledDate < now } }) if (isLoading) { return (
) } return (
{!filtered || filtered.length === 0 ? (
{activeTab === 'upcoming' ? 'No hay transmisiones programadas todavía.' : 'No hay transmisiones anteriores.' }
) : (
{filtered.map(t => ( ))}
Título Creado Programado
{platformIcons[t.platform] || platformIcons['YouTube']}
{t.title}
{t.scheduled || '—'}
<> } items={[ { label: 'Agregar invitados', icon: , onClick: () => { setInviteLink(`https://streamyard.com/${t.id}`); setInviteOpen(true) } }, { label: 'Editar', icon: , onClick: () => {/* editar */} }, { divider: true, label: '', disabled: false }, { label: 'Ver en YouTube', icon: , onClick: () => {/* abrir */} }, { divider: true, label: '', disabled: false }, { label: 'Eliminar transmisión', icon: , onClick: () => onDelete(t.id), containerProps: { className: styles.deleteItem }, labelProps: { className: styles.dangerLabel } } ]} /> setInviteOpen(false)} link={inviteLink} />
)}
) } export default TransmissionsTable