"use client"; import { useState } from "react"; import MediaPlayer from "../MediaPlayer"; import FileUpload from "../FileUpload"; import { getImageUrl } from "@/lib/api"; interface MediaBlockProps { id: string; title?: string; url: string; type: 'video' | 'audio'; config: { maxPlays?: number; currentPlays?: number; show_transcript?: boolean; }; editMode: boolean; onChange: (updates: { title?: string; url?: string; config?: { maxPlays?: number; currentPlays?: number; show_transcript?: boolean } }) => void; transcription?: { en?: string; es?: string; cues?: { start: number; end: number; text: string }[]; } | null; } export default function MediaBlock({ title, url, type, config, editMode, onChange, transcription }: MediaBlockProps) { const [localPlays, setLocalPlays] = useState(config.currentPlays || 0); const [sourceType, setSourceType] = useState<"url" | "upload">(url.startsWith("/assets/") ? "upload" : "url"); const maxPlays = config.maxPlays || 0; const isLocked = maxPlays > 0 && localPlays >= maxPlays; const handleEnded = () => { if (maxPlays > 0) { const nextPlays = localPlays + 1; setLocalPlays(nextPlays); onChange({ config: { ...config, currentPlays: nextPlays } }); } }; // Full URL for display (handles relative paths from server) const displayUrl = getImageUrl(url); return (
Prevent content fatigue by limiting how many times a student can watch/listen.
Uncheck to hide transcription text (e.g. for listening tests).