import { Button, Card, CardActions, CardContent, Grid, Skeleton, TextField, Typography, } from '@mui/material'; import React from 'react'; import { useNavigate } from 'react-router-dom'; import { Context } from '../data/Context'; import { Competiton } from '../models/Competition'; /** * * @return {JSX.Element} calendar page */ export default function CalendarPage() { const competitions = React.useRef([]); const [filteredCompetitions, setFilteredCompetitions] = React.useState(); const [filter, setFilter] = React.useState(); const { api, setTitle, setContainerMaxWidth } = React.useContext(Context); const navigate = useNavigate(); React.useEffect(() => { setTitle('DAV calendar'); setContainerMaxWidth('lg'); }, []); React.useEffect(() => { api.getCompetitions('GER').then(result => { console.log(result.competitions.filter); competitions.current = result.competitions.filter(competition => competition.discipline?.includes('speed'), ); setFilteredCompetitions(filterCompetitions(competitions.current)); }); }, []); React.useEffect(() => { if (competitions.current.length > 0) setFilteredCompetitions(filterCompetitions(competitions.current)); }, [filter]); const filterCompetitions = (competitions: Competiton[]) => { return competitions.filter(c => { const queryMatches = c.name .toLowerCase() .includes(filter?.toLocaleLowerCase() ?? ''); const date = new Date(c.date).getTime(); const currentDate = new Date().getTime(); return queryMatches && currentDate - date > 24 * 60 * 60 * 1000; }); }; const openCompetition = (competitionId: string, categoryId: string) => { navigate(`/speed-flowchart/${competitionId}/${categoryId}`); }; return ( <> setFilter(e.target.value)} fullWidth /> {filteredCompetitions?.map(competition => ( {competition.name} {competition.date_span} {competition.cats.map(category => ( ))} ))} {filteredCompetitions === undefined && ( )} {filteredCompetitions?.length === 0 && ( Nothing found! )} ); }