diff --git a/pages/[id]/HackerInfo.js b/pages/[id]/HackerInfo.js index 1d89d78..4d3ea4f 100644 --- a/pages/[id]/HackerInfo.js +++ b/pages/[id]/HackerInfo.js @@ -122,6 +122,8 @@ export default function HackerInfo({ id, hackathons }) { const [filter, setFilter] = useState({}) const [calculate, setCalculate] = useState({}) const downloadLink = useRef() + const [uniqueEvents, setUniqueEvents] = useState([]) + const [selectedEvents, setSelectedEvents] = useState([]) const clearFilters = () => { setGroupBy({ col1: '', func: '', col2: '' }) @@ -152,6 +154,35 @@ export default function HackerInfo({ id, hackathons }) { setFilteredData(res) }, [filter]) + useEffect(() => { + if (unfilteredData.length > 0 && currTable === 'Applicants') { + const events = new Set() + unfilteredData.forEach(hacker => { + if (hacker.attendedEvents) { + const hackerEvents = hacker.attendedEvents.split(',').map(e => e.trim()) + hackerEvents.forEach(event => { + if (event) events.add(event) + }) + } + }) + setUniqueEvents(Array.from(events)) + } + }, [unfilteredData, currTable]) + + const applyEventFilter = () => { + if (selectedEvents.length === 0) { + setFilteredData(unfilteredData) + return + } + + const filtered = unfilteredData.filter(hacker => { + if (!hacker.attendedEvents) return false + const hackerEvents = hacker.attendedEvents.split(',').map(e => e.trim()) + return selectedEvents.every(event => hackerEvents.includes(event)) + }) + setFilteredData(filtered) + } + const saveGroupBy = () => { setFilter({ ...filter, @@ -464,6 +495,39 @@ export default function HackerInfo({ id, hackathons }) { )} + + + {uniqueEvents.map(event => ( + + ))} + {uniqueEvents.length > 0 && ( + {renderTable}