import { useState, useRef } from 'react' import { useWaste } from '../store' interface ShareRecord { name: string // display name (folder name picked by user) global: boolean // true = all networks networkId?: string } const STORAGE_KEY = 'waste_shares' function loadShares(): ShareRecord[] { try { return JSON.parse(localStorage.getItem(STORAGE_KEY) ?? '[]') } catch { return [] } } function saveShares(shares: ShareRecord[]) { localStorage.setItem(STORAGE_KEY, JSON.stringify(shares)) } export function ShareManager() { const { activeNetworkId, setSharedFiles, sharedFilesByNetwork } = useWaste() const [shares, setShares] = useState(loadShares) const [includeSubfolders, setIncludeSubfolders] = useState(true) const inputRef = useRef(null) // Count files currently shared on active network const current = activeNetworkId ? sharedFilesByNetwork[activeNetworkId] : undefined const fileCount = current?.size ?? 0 function persist(next: ShareRecord[]) { setShares(next) saveShares(next) } function addShare(files: FileList, folderName: string) { const map = new Map() for (let i = 0; i < files.length; i++) { const f = files[i] const rel = (f as File & { webkitRelativePath?: string }).webkitRelativePath const path = rel ? rel.split('/').slice(1).join('/') : f.name if (!includeSubfolders && path.includes('/')) continue map.set(path, f) } setSharedFiles(map) const record: ShareRecord = { name: folderName, global: true, networkId: activeNetworkId ?? undefined, } persist([...shares.filter(s => s.name !== folderName), record]) } function removeShare(name: string) { persist(shares.filter(s => s.name !== name)) // Clear the in-memory share if it matches setSharedFiles(new Map()) } function onChange(e: React.ChangeEvent) { const fileList = e.target.files if (!fileList || fileList.length === 0) return // Get folder name from first file's path const first = fileList[0] as File & { webkitRelativePath?: string } const folderName = first.webkitRelativePath?.split('/')[0] ?? 'folder' addShare(fileList, folderName) e.target.value = '' } return (
{shares.length > 0 && (
    {shares.map(s => (
  • 📁 {s.name} {s.global ? 'all nets' : 'this net'}
  • ))}
)}
) }