import React, { memo, Fragment } from 'react'; import prettyMs from 'pretty-ms'; import { FaSave, FaPlus, FaMinus, FaTag, FaSortNumericDown } from 'react-icons/fa'; import { motion } from 'framer-motion'; import Swal from 'sweetalert2'; import { saveColor } from './colors'; const SegmentList = memo(({ formatTimecode, cutSegments, getFrameCount, getSegColors, onSegClick, currentSegIndex, invertCutSegments, updateCurrentSegOrder, addCutSegment, removeCutSegment, setCurrentSegmentName, currentCutSeg, }) => { if (!cutSegments && invertCutSegments) { return
Make sure you have no overlapping segments.
; } if (!cutSegments || cutSegments.length === 0) { return
No segments to export.
; } const { segActiveBgColor: currentSegActiveBgColor } = getSegColors(currentCutSeg); async function onLabelSegmentPress() { const { value } = await Swal.fire({ showCancelButton: true, title: 'Label current segment', inputValue: currentCutSeg.name, input: 'text', }); if (value != null) setCurrentSegmentName(value); } async function onReorderSegsPress() { if (cutSegments.length < 2) return; const { value } = await Swal.fire({ title: `Change order of segment ${currentSegIndex + 1}`, text: `Please enter a number from 1 to ${cutSegments.length} to be the new order for the current segment`, input: 'text', inputValue: currentSegIndex + 1, showCancelButton: true, inputValidator: (v) => { const parsed = parseInt(v, 10); return Number.isNaN(parsed) || parsed > cutSegments.length || parsed < 1 ? 'Invalid number entered' : undefined; }, }); if (value) { const newOrder = parseInt(value, 10); updateCurrentSegOrder(newOrder - 1); } } return (
Segments to export:
{cutSegments.map((seg, index) => { const duration = seg.end - seg.start; const durationMs = duration * 1000; const isActive = !invertCutSegments && currentSegIndex === index; const uuid = seg.uuid || `${seg.start}`; function renderNumber() { if (invertCutSegments) return ; const { segBgColor, segBorderColor, } = getSegColors(seg); return {index + 1}; } const timeStr = `${formatTimecode(seg.start)} - ${formatTimecode(seg.end)}`; return ( !invertCutSegments && onSegClick(index)} key={uuid} positionTransition style={{ originY: 0, margin: '5px 0', border: `1px solid rgba(255,255,255,${isActive ? 1 : 0.3})`, padding: 5, borderRadius: 5 }} initial={{ scaleY: 0 }} animate={{ scaleY: 1 }} exit={{ scaleY: 0 }} >
{renderNumber()} {timeStr}
{seg.name}
Duration {prettyMs(durationMs)}
({Math.floor(durationMs)} ms, {getFrameCount(duration)} frames)
); })}
Segments total:
{formatTimecode(cutSegments.reduce((acc, { start, end }) => (end - start) + acc, 0))}
); }); export default SegmentList;