import React, { useEffect, useState } from 'react' import { transitClient } from '../api' export default function StopsManager({ token, user }) { const client = transitClient(token) const [stops, setStops] = useState([]) const [name, setName] = useState('') const [lat, setLat] = useState('') const [lon, setLon] = useState('') const [message, setMessage] = useState(null) const [isAdmin] = useState(Boolean(user?.userCode)) const [deleteConfirm, setDeleteConfirm] = useState(null) const loadStops = async () => { try { const res = await client.get('/admin/stops') setStops(res.data.stops || []) } catch (err) { setMessage('Error: ' + (err.response?.data?.error || err.message)) } } useEffect(() => { loadStops() }, []) const createStop = async (e) => { e.preventDefault() setMessage(null) try { const res = await client.post('/admin/stops', { name, latitude: parseFloat(lat), longitude: parseFloat(lon) }) setMessage('Stop created: #' + res.data.stop.id) setName(''); setLat(''); setLon('') await loadStops() } catch (err) { const errMsg = err.response?.data?.error || err.message if (err.response?.status === 401) { setMessage('Unauthorized: invalid token') } else if (err.response?.status === 403) { setMessage('Forbidden: you are not an admin') } else { setMessage('Error: ' + errMsg) } } } const deleteStop = async (stopId, stopName) => { setMessage(null) try { await client.delete(`/admin/stops/${stopId}`) setMessage(`Halte "${stopName}" verwijderd`) setDeleteConfirm(null) await loadStops() } catch (err) { const errMsg = err.response?.data?.error || err.message setMessage('Error: ' + errMsg) } } return (

Stops

Maak herbruikbare haltes aan.

{stops.map(stop => (
#{stop.id} {stop.name}
{stop.latitude}, {stop.longitude}
{isAdmin && ( )}
))}
{isAdmin ? (
setName(e.target.value)} /> setLat(e.target.value)} /> setLon(e.target.value)} />
) : (
You must be admin to create stops.
)} {message &&
{message}
} {deleteConfirm && (

Delete Stop?

{deleteConfirm.name}

This cannot be undone.

)}
) } const overlay = { position: 'fixed', top: 0, left: 0, right: 0, bottom: 0, backgroundColor: 'rgba(0,0,0,0.5)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000, } const modal = { backgroundColor: '#fff', padding: '2rem', borderRadius: '8px', maxWidth: '400px', boxShadow: '0 4px 12px rgba(0,0,0,0.15)', }