secutorpro commited on
Commit
08a174c
·
verified ·
1 Parent(s): 741bf09

sos panel

Browse files
Files changed (1) hide show
  1. web/src/components/SosPanel.jsx +15 -15
web/src/components/SosPanel.jsx CHANGED
@@ -1,23 +1,23 @@
1
- export default function SosPanel({ sos, openCount, onAck, onResolve }) {
 
2
  return (
3
  <section className="panel">
4
- <h2>SOS alerts {openCount > 0 && <span className="badge">{openCount}</span>}</h2>
5
- {sos.length === 0 && <p className="muted small">No alerts.</p>}
6
  {sos.map((a) => (
7
- <div key={a.id} className={`sos-item ${a.state}`}>
8
- <div>
9
- <b>{a.member_name}</b>{' '}
10
- <span className="muted small">{new Date(a.created_at).toLocaleTimeString()}</span>
11
- <div className="muted small">
12
- {a.lat != null ? `${a.lat.toFixed(5)}, ${a.lng.toFixed(5)}` : 'no fix'}
13
- {a.ack_by ? ` · ack: ${a.ack_by}` : ''}
14
- </div>
15
  </div>
16
  <div className="row">
17
- {a.state === 'open' && <button className="small-btn" onClick={() => onAck(a.id)}>Ack</button>}
18
- {a.state !== 'resolved' && (
19
- <button className="secondary small-btn" onClick={() => onResolve(a.id)}>Resolve</button>
20
- )}
21
  </div>
22
  </div>
23
  ))}
 
1
+ export default function SosPanel({ sos, onAck, onResolve, onSelect }) {
2
+ const open = sos.filter((a) => a.state !== 'resolved');
3
  return (
4
  <section className="panel">
5
+ <h2>SOS alerts ({open.length})</h2>
6
+ {sos.length === 0 && <p className="muted">No active alerts.</p>}
7
  {sos.map((a) => (
8
+ <div key={a.id} className={`sos-item ${a.state === 'ack' ? 'ack' : ''}`}>
9
+ <div className="sos-top">
10
+ <span>🆘 {a.member_name}</span>
11
+ <span style={{ fontSize: 10, color: '#7d8b9c' }}>{new Date(a.created_at).toLocaleTimeString()}</span>
12
+ </div>
13
+ <div className="sos-meta">
14
+ {a.lat != null ? `${a.lat.toFixed(5)}, ${a.lng.toFixed(5)}` : 'no position'} ·{' '}
15
+ {a.state === 'ack' ? `ack by ${a.ack_by}` : 'unacknowledged'}
16
  </div>
17
  <div className="row">
18
+ {a.state === 'open' && <button className="btn-ack" onClick={() => onAck(a.id)}>Ack</button>}
19
+ {a.state !== 'resolved' && <button className="btn-mut" onClick={() => onResolve(a.id)}>Resolve</button>}
20
+ <button className="btn-mut" onClick={() => onSelect(a.member_id)}>Locate</button>
 
21
  </div>
22
  </div>
23
  ))}