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;