// AdminScopeToggle.js // Multi-select BU scope picker for Admin users. // Allows selecting any combination of teams to filter Reporting/Compliance/Exports. // "My Teams" preset selects the admin's assigned bu_teams. // "All BUs" preset selects everything. // Custom selections are persisted in localStorage. import React, { useState, useRef, useEffect } from 'react'; import { useAuth } from '../contexts/AuthContext'; function AdminScopeToggle() { const { isAdmin, user, adminScope, setAdminScopeTeams, KNOWN_TEAMS, hasTeams } = useAuth(); const [open, setOpen] = useState(false); const ref = useRef(null); // Close dropdown on outside click useEffect(() => { if (!open) return; const handler = (e) => { if (ref.current && !ref.current.contains(e.target)) setOpen(false); }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, [open]); // Only render for Admin users if (!isAdmin()) return null; const selectedTeams = adminScope || []; const myTeams = user?.teams || []; const allSelected = selectedTeams.length === KNOWN_TEAMS.length; const isMyTeams = myTeams.length > 0 && selectedTeams.length === myTeams.length && myTeams.every(t => selectedTeams.includes(t)); const toggleTeam = (team) => { const next = selectedTeams.includes(team) ? selectedTeams.filter(t => t !== team) : [...selectedTeams, team]; setAdminScopeTeams(next); }; const selectAll = () => setAdminScopeTeams([...KNOWN_TEAMS]); const selectMyTeams = () => setAdminScopeTeams([...myTeams]); // Label for the button let label; if (allSelected || selectedTeams.length === 0) { label = 'All BUs'; } else if (isMyTeams) { label = 'My Teams'; } else { label = selectedTeams.join(', '); } return (
{open && (
{/* Presets */}
{myTeams.length > 0 && ( )}
{/* Individual team checkboxes */}
{KNOWN_TEAMS.map(team => { const checked = selectedTeams.includes(team); return ( ); })}
)}
); } export default AdminScopeToggle;