khamba
Version:
A cli tool for sharing files through local network.
30 lines (29 loc) • 1.47 kB
JavaScript
import React, { useMemo } from 'react';
import { Box, Text } from 'ink';
import CustomTask from '../../components/Misc/CustomTask.js';
import { adjustStringLength, formatBytes } from '../../functions/helper.js';
import ProgressBar from '../../components/Misc/ProgressBar.js';
import { spinners } from '../../components/Misc/Spinner.js';
const taskState = {
DEFAULT: 'pending',
TRANSFERRING: 'loading',
TRANSFERRED: 'loading',
HASH_CHECKING: 'loading',
ERROR: 'error',
SUCCESS: 'success',
};
const SingleFileTransfer = ({ file, longestNameLength }) => {
const label = useMemo(() => {
const fileName = adjustStringLength(file.fileName, longestNameLength);
const formattedSize = formatBytes(file.totalSize);
return `⠀${fileName} - ${formattedSize}`;
}, [file, longestNameLength]);
const progress = useMemo(() => Math.min((file.totalTransferred / file.totalSize) * 100, 100), [file.totalTransferred, file.totalSize]);
return (React.createElement(Box, null,
React.createElement(ProgressBar, { percent: progress }),
React.createElement(CustomTask, { frames: file.state == 'HASH_CHECKING' ? spinners.dotsMore : spinners.dots, color: file.state == 'HASH_CHECKING' ? 'blue' : undefined, label: label, state: taskState[file.state] }),
file.errorMsg && React.createElement(Text, { color: "red" },
"\u2800",
file.errorMsg)));
};
export default SingleFileTransfer;