import ActivityIndicator from "../indicators/activity-indicator"; import { LuTrash } from "react-icons/lu"; import { Button } from "../ui/button"; import { useCallback, useState } from "react"; import { isDesktop, isMobile } from "react-device-detect"; import { FaDownload, FaPlay, FaShareAlt } from "react-icons/fa"; import Chip from "../indicators/Chip"; import { Skeleton } from "../ui/skeleton"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogTitle, } from "../ui/dialog"; import { Input } from "../ui/input"; import useKeyboardListener from "@/hooks/use-keyboard-listener"; import { DeleteClipType, Export } from "@/types/export"; import { MdEditSquare } from "react-icons/md"; import { baseUrl } from "@/api/baseUrl"; import { cn } from "@/lib/utils"; import { shareOrCopy } from "@/utils/browserUtil"; import { useTranslation } from "react-i18next"; import { ImageShadowOverlay } from "../overlay/ImageShadowOverlay"; type ExportProps = { className: string; exportedRecording: Export; onSelect: (selected: Export) => void; onRename: (original: string, update: string) => void; onDelete: ({ file, exportName }: DeleteClipType) => void; }; export default function ExportCard({ className, exportedRecording, onSelect, onRename, onDelete, }: ExportProps) { const { t } = useTranslation(["views/exports"]); const [hovered, setHovered] = useState(false); const [loading, setLoading] = useState( exportedRecording.thumb_path.length > 0, ); // editing name const [editName, setEditName] = useState<{ original: string; update?: string; }>(); const submitRename = useCallback(() => { if (editName == undefined) { return; } onRename(exportedRecording.id, editName.update ?? ""); setEditName(undefined); }, [editName, exportedRecording, onRename, setEditName]); useKeyboardListener( editName != undefined ? ["Enter"] : [], (key, modifiers) => { if ( key == "Enter" && modifiers.down && !modifiers.repeat && editName && (editName.update?.length ?? 0) > 0 ) { submitRename(); return true; } return false; }, ); return ( <> { if (!open) { setEditName(undefined); } }} > { if (isMobile) { e.preventDefault(); } }} > {t("editExport.title")} {t("editExport.desc")} {editName && ( <> setEditName({ original: editName.original ?? "", update: e.target.value, }) } /> )}
setHovered(true) : undefined} onMouseLeave={isDesktop ? () => setHovered(false) : undefined} onClick={isDesktop ? undefined : () => setHovered(!hovered)} > {exportedRecording.in_progress ? ( ) : ( <> {exportedRecording.thumb_path.length > 0 ? ( setLoading(false)} /> ) : (
)} )} {hovered && (
{!exportedRecording.in_progress && ( shareOrCopy( `${baseUrl}export?id=${exportedRecording.id}`, exportedRecording.name.replaceAll("_", " "), ) } > )} {!exportedRecording.in_progress && ( )} {!exportedRecording.in_progress && ( setEditName({ original: exportedRecording.name, update: undefined, }) } > )} onDelete({ file: exportedRecording.id, exportName: exportedRecording.name, }) } >
{!exportedRecording.in_progress && ( )}
)} {loading && ( )}
{exportedRecording.name.replaceAll("_", " ")}
); }