khamba
Version:
A cli tool for sharing files through local network.
44 lines (43 loc) • 2.58 kB
JavaScript
import React, { useMemo } from 'react';
import SendArrowAnimation from '../../../components/Misc/SendArrowAnimation.js';
import { Box, Text } from 'ink';
import { findLongestString, formatBytes } from '../../../functions/helper.js';
import SingleFileTransfer from '../../../components/Transfer/SingleFileTransfer.js';
const SinglePeerTransferForSender = ({ peerTransferInfo }) => {
const longestNameLength = useMemo(() => {
const longestLength = findLongestString(Object.values(peerTransferInfo.files).map(file => file.fileName))?.length ?? Infinity;
return Math.min(longestLength, 30);
}, [peerTransferInfo.files]);
const sumTotalTransferred = useMemo(() => Object.values(peerTransferInfo.files).reduce((sum, file) => sum + file.totalTransferred, 0), [JSON.stringify(peerTransferInfo.files)]);
const overallState = useMemo(() => {
const fileStates = Object.values(peerTransferInfo.files).map(file => file.state);
if (fileStates.includes('ERROR')) {
return 'FAILED';
}
return fileStates.every(state => state === 'SUCCESS')
? 'COMPLETE'
: 'IN_PROGRESS';
}, [JSON.stringify(peerTransferInfo.files)]);
const stateMessageComponent = {
IN_PROGRESS: React.createElement(Text, { dimColor: true }, "Sending Files..."),
COMPLETE: React.createElement(Text, { dimColor: true }, "Files Transfer Complete \uD83C\uDF89"),
FAILED: (React.createElement(Text, { dimColor: true, color: 'red' }, "Transfer Failed \u2718")),
};
return (React.createElement(Box, { borderColor: "green", borderStyle: "bold", paddingX: 1, flexDirection: "column", marginTop: 1 },
React.createElement(Box, null,
React.createElement(Text, { backgroundColor: "green", color: "white", bold: true },
"\u2800",
peerTransferInfo.peerInfo.peerName,
"\u2800"),
overallState == 'IN_PROGRESS' && React.createElement(SendArrowAnimation, null)),
React.createElement(Box, null,
stateMessageComponent[overallState],
React.createElement(Text, { dimColor: true },
"\u2800(",
formatBytes(sumTotalTransferred),
"\u2800/\u2800",
formatBytes(peerTransferInfo.totalFileSize),
")")),
Object.entries(peerTransferInfo.files).map(([key, value]) => (React.createElement(SingleFileTransfer, { key: key, file: value, longestNameLength: longestNameLength })))));
};
export default SinglePeerTransferForSender;