UNPKG

khamba

Version:

A cli tool for sharing files through local network.

44 lines (43 loc) 2.58 kB
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;