// Recipient picker — inline in compose, also standalone screen
function RecipientPicker({ selectedMats, setSelectedMats, scope, standalone }) {
const [query, setQuery] = React.useState("");
const [region, setRegion] = React.useState("All");
const [showOnlyVerified, setShowOnlyVerified] = React.useState(false);
const [sizeFilter, setSizeFilter] = React.useState("any"); // any | small | mid | large
const filtered = window.MATS.filter((m) => {
if (query && !`${m.name} ${m.town} ${m.uid}`.toLowerCase().includes(query.toLowerCase())) return false;
if (region !== "All" && m.region !== region) return false;
if (showOnlyVerified && !m.verified) return false;
if (sizeFilter === "small" && m.schools > 5) return false;
if (sizeFilter === "mid" && (m.schools < 6 || m.schools > 14)) return false;
if (sizeFilter === "large" && m.schools < 15) return false;
return true;
});
const toggle = (uid) => {
if (selectedMats.includes(uid)) setSelectedMats(selectedMats.filter((x) => x !== uid));
else setSelectedMats([...selectedMats, uid]);
};
const allFiltered = filtered.every((m) => selectedMats.includes(m.uid));
const toggleAll = () => {
if (allFiltered) setSelectedMats(selectedMats.filter((x) => !filtered.find((m) => m.uid === x)));
else setSelectedMats(Array.from(new Set([...selectedMats, ...filtered.map((m) => m.uid)])));
};
return (
{filtered.length === 0 && (
{filtered.map((m) => {
const sel = selectedMats.includes(m.uid);
return (
0} onChange={toggleAll} style={{ accentColor: "var(--accent)" }} />
Trust
Region
Schools
Contact
Source
toggle(m.uid)}
style={{ cursor: "pointer", borderBottom: "1px solid var(--rule)", background: sel ? "var(--nav-active-bg)" : "transparent" }}>
);
})}
{m.region}
{m.schools}
{m.verified
?