UNPKG

khamba

Version:

A cli tool for sharing files through local network.

31 lines (30 loc) 1.36 kB
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;