khamba
Version:
A cli tool for sharing files through local network.
31 lines (30 loc) • 1.36 kB
JavaScript
import React, { useMemo } from 'react';
import SelectInput from 'ink-select-input';
import { Box } from 'ink';
import { useStore } from '@nanostores/react';
import { $peersFiles } from '../../stores/fileHandlerStore.js';
import { formatBytes } from '../../functions/helper.js';
const PeerList = ({ peers, onSelect }) => {
const peersFiles = useStore($peersFiles);
const onlySenders = useMemo(() => Object.entries(peers)?.filter(([key, value]) => true), [peers]);
const items = useMemo(() => onlySenders?.map(([key, value]) => {
const selectedPeerFiles = peersFiles[key] ?? {};
const totalFiles = Object.keys(selectedPeerFiles).length;
const totalSize = Object.values(selectedPeerFiles).reduce((acc, item) => acc + (item?.fileSize ?? 0), 0);
const formattedSize = formatBytes(totalSize);
const label = totalFiles > 0
? `${value.name} - ${totalFiles} files | ${formattedSize}`
: `${value.name}`;
return {
label: label,
value: key,
};
}), [onlySenders, peersFiles]);
const handleSelect = (item) => {
if (item)
onSelect(item.value);
};
return (React.createElement(Box, { marginTop: 1, marginLeft: 1 },
React.createElement(SelectInput, { items: items, onSelect: handleSelect })));
};
export default PeerList;