import React, { useEffect, useState } from 'react' import { transitClient } from '../api' export default function FleetManager({ token, user }) { const client = transitClient(token) const [buses, setBuses] = useState([]) const [name, setName] = useState('') const [seatCapacity, setSeatCapacity] = useState('') const [licensePlate, setLicensePlate] = useState('') const [message, setMessage] = useState(null) const [canCreateBus, setCanCreateBus] = useState(true) const [isAdmin] = useState(Boolean(user?.userCode)) const [editingBus, setEditingBus] = useState(null) const [deleteConfirm, setDeleteConfirm] = useState(null) const loadBuses = async () => { try { const res = await client.get('/admin/fleet/buses') setBuses(res.data.buses || []) } catch (err) { setMessage('Error: ' + (err.response?.data?.error || err.message)) } } 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)', } useEffect(() => { loadBuses() }, []) const createBus = async (e) => { e.preventDefault() setMessage(null) try { const res = await client.post('/admin/fleet/buses', { name, seatCapacity: Number(seatCapacity), licensePlate, }) setName('') setSeatCapacity('') setLicensePlate('') setMessage('Bus created: #' + (res.data.bus?.id || 'ok')) await loadBuses() } catch (err) { const details = err.response?.data?.details || err.response?.data?.error || err.message if (String(details).includes('permission denied') || err.response?.status === 403) { setCanCreateBus(false) setMessage('Fleet create is read-only on this database user.') return } setMessage('Error: ' + details) } } return (

Fleet

Beheer voertuigen voor de vloot.

{buses.map(bus => (
#{bus.id} {bus.name}
Seats: {bus.seatCapacity}
Plate: {bus.licensePlate}
{isAdmin && ( <> )}
))}
{isAdmin && canCreateBus ? (
setName(e.target.value)} /> setSeatCapacity(e.target.value)} /> setLicensePlate(e.target.value)} />
) : (
Fleet create is read-only on this database user.
)} {message &&
{message}
} {editingBus && (

Edit Bus

{ e.preventDefault() setMessage(null) try { await client.patch(`/admin/fleet/buses/${editingBus.id}`, { name: editingBus.name, seatCapacity: Number(editingBus.seatCapacity), licensePlate: editingBus.licensePlate, }) setMessage('Bus updated') setEditingBus(null) await loadBuses() } catch (err) { setMessage('Error: ' + (err.response?.data?.error || err.message)) } }} className="stack-form">
setEditingBus({...editingBus, name: e.target.value})} /> setEditingBus({...editingBus, seatCapacity: e.target.value})} /> setEditingBus({...editingBus, licensePlate: e.target.value})} />
)} {deleteConfirm && (

Delete Bus?

{deleteConfirm.name}

)}
) }