// 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 (
Recipient picker
Pulled from get-information-schools.service.gov.uk · contacts scraped from each trust website
{selectedMats.length} / {window.MATS.length} selected
setQuery(e.target.value)} placeholder="Search by name, town or TR-ID" style={{ width: "100%", padding: "8px 10px 8px 32px", fontSize: 13, fontFamily: "inherit", border: "1px solid var(--rule)", background: "var(--surface)", borderRadius: 2, outline: "none" }} />
{filtered.map((m) => { const sel = selectedMats.includes(m.uid); return ( toggle(m.uid)} style={{ cursor: "pointer", borderBottom: "1px solid var(--rule)", background: sel ? "var(--nav-active-bg)" : "transparent" }}> ); })}
0} onChange={toggleAll} style={{ accentColor: "var(--accent)" }} /> Trust Region Schools Contact Source
{m.name}
{m.uid} · {m.town}
{m.region} {m.schools}
{m.contact}
{m.contactName} · {m.contactRole}
{m.verified ? Verified : Scraped }
{m.source}
{filtered.length === 0 && (
No trusts match your filters.
)}
); } function Th({ children, width, num }) { return {children}; } function RecipientsScreen() { const [sel, setSel] = React.useState(window.MATS.filter((m) => m.verified).map((m) => m.uid)); return (
}>Recipients
{[ { label: "MATs in GIAS", v: "1,247", sub: "Last sync 04:00 UTC" }, { label: "Contacts verified", v: "892", sub: "Confidence ≥ 0.85" }, { label: "Contacts scraped", v: "267", sub: "0.5 ≤ conf < 0.85" }, { label: "Bounces (30d)", v: "11", sub: "Pending re-scrape" } ].map((s, i) => (
{s.label}
{s.v}
{s.sub}
))}
); } Object.assign(window, { RecipientPicker, RecipientsScreen });