/* Attendance & Truancy Prevention — rate, one-tap absence report, pattern alert */ function AttendanceScreen({ onNav, onBack }) { const [sheet, setSheet] = React.useState(false); const [date, setDate] = React.useState('Today'); const [reason, setReason] = React.useState(null); const [note, setNote] = React.useState(''); const DATES = ['Today','Tomorrow','Pick a date']; const REASONS = [ { id:'sick', label:'Illness', icon:'thermometer' }, { id:'appt', label:'Appointment', icon:'stethoscope' }, { id:'family',label:'Family', icon:'users' }, { id:'other', label:'Other', icon:'circle-ellipsis' }, ]; const recent = [ { day:'Fri, May 29', status:'Present', bg:'var(--success-100)', fg:'var(--success-600)', icon:'check' }, { day:'Thu, May 28', status:'Present', bg:'var(--success-100)', fg:'var(--success-600)', icon:'check' }, { day:'Wed, May 27', status:'Tardy', bg:'var(--warning-100)', fg:'var(--warning-600)', icon:'clock' }, { day:'Tue, May 26', status:'Present', bg:'var(--success-100)', fg:'var(--success-600)', icon:'check' }, { day:'Mon, May 25', status:'Excused', bg:'var(--info-100)', fg:'var(--info-500)', icon:'shield-check' }, ]; const reset = () => { setSheet(false); setReason(null); setNote(''); setDate('Today'); }; const submit = () => { const r = REASONS.find(x=>x.id===reason); jlToast('Absence reported · ' + date + (r ? ' · ' + r.label : ''), { icon:'calendar-check' }); reset(); }; return (
{/* rate hero */}
THIS SCHOOL YEAR
96%
On track
172 of 180 school days present
{[ { n:'172', l:'Present', c:'var(--success-500)' }, { n:'5', l:'Absent', c:'var(--danger-500)' }, { n:'3', l:'Tardy', c:'var(--warning-600)' }, ].map(s => (
{s.n}
{s.l}
))}
{/* report absence CTA */} {/* pattern alert */}
Attendance pattern noticed
EJ has been absent or tardy on 3 Mondays this term. Catching this early helps avoid chronic absence.
{/* recent days */} Recent Days
{recent.map((r,i) => ( {i>0 && }
{r.day}
{r.status}
))}
{/* report-absence sheet */} {sheet && (
e.stopPropagation()} style={{ width:'100%', background:'#fff', borderRadius:'22px 22px 0 0', padding:'10px 18px 30px' }}>
Report an Absence
For EJ Hatten · Katy Middle School
Which day?
{DATES.map(d => { const on = date===d; return ( ); })}
Reason
{REASONS.map(r => { const on = reason===r.id; return ( ); })}
Note to school (optional)