'use client'; import { useState, useMemo } from 'react'; import { Search } from 'lucide-react'; import { CloseIcon, PlusIcon } from './Icons'; import { Dialog, DialogContent, DialogTitle, } from '@/components/ui/dialog'; export default function AddFundToGroupModal({ allFunds, currentGroupCodes, holdings = {}, onClose, onAdd }) { const [selected, setSelected] = useState(new Set()); const [searchQuery, setSearchQuery] = useState(''); const availableFunds = useMemo(() => { const base = (allFunds || []).filter(f => !(currentGroupCodes || []).includes(f.code)); if (!searchQuery.trim()) return base; const query = searchQuery.trim().toLowerCase(); return base.filter(f => (f.name && f.name.toLowerCase().includes(query)) || (f.code && f.code.includes(query)) ); }, [allFunds, currentGroupCodes, searchQuery]); const getHoldingAmount = (fund) => { const holding = holdings[fund?.code]; if (!holding || !holding.share || holding.share <= 0) return null; const nav = Number(fund?.dwjz) || Number(fund?.gsz) || Number(fund?.estGsz) || 0; if (!nav) return null; return holding.share * nav; }; const toggleSelect = (code) => { setSelected(prev => { const next = new Set(prev); if (next.has(code)) next.delete(code); else next.add(code); return next; }); }; const handleOpenChange = (open) => { if (!open) { onClose?.(); } }; return ( 添加基金到分组
添加基金到分组
setSearchQuery(e.target.value)} placeholder="搜索基金名称或编号" style={{ width: '100%', paddingLeft: 36, }} />
{availableFunds.length === 0 ? (

{searchQuery.trim() ? '未找到匹配的基金' : '所有基金已在该分组中'}

) : (
{availableFunds.map((fund) => (
toggleSelect(fund.code)} style={{ cursor: 'pointer' }} >
{selected.has(fund.code) &&
}
{fund.name}
#{fund.code}
{getHoldingAmount(fund) != null && (
持仓金额:¥{getHoldingAmount(fund).toFixed(2)}
)}
))}
)}
); }