UNPKG

khamba

Version:

A cli tool for sharing files through local network.

42 lines (41 loc) 2.09 kB
import React, { useMemo } from 'react'; import SelectInput from 'ink-select-input'; import { Box, Text } from 'ink'; import { useStore } from '@nanostores/react'; import { $peersFiles } from '../stores/receiverfileHandlerStore.js'; import { formatBytes } from '../functions/helper.js'; import { $sendingFiles } from '../stores/baseStore.js'; const PeerList = ({ peers, onSelect }) => { const peersFiles = useStore($peersFiles); const sendingFiles = useStore($sendingFiles); 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); }; const isIAmSender = useMemo(() => JSON.stringify(sendingFiles) == '{}', [sendingFiles]); return (React.createElement(Box, { flexDirection: "column", marginTop: 1, marginLeft: 1 }, items.length > 0 && (React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, React.createElement(Text, null, "Press", ' ', React.createElement(Text, { backgroundColor: isIAmSender ? 'green' : '#A855F7' }, "\u2800\u21A9 Enter\u2800"), ' ', "to select peer"), React.createElement(Text, null, "Only receiver can select file for now. We are still working on it."))), React.createElement(SelectInput, { items: items, onSelect: handleSelect }))); }; export default PeerList;