import React, { useState, useEffect } from "react"; import { BrowserRouter as Router, Routes, Route, Link, useLocation, Navigate, useNavigate } from "react-router-dom"; import { getSeed, getTrips, getNextTripId } from "./api"; import ItemsPage from "./pages/ItemsPage"; import TripChecklist from "./pages/TripChecklist"; import TripsPage from "./pages/TripsPage"; import TagsPage from "./pages/TagsPage"; const APP_TITLE = "da packste dich weg"; function NextTripRedirect({ trips }: { trips: any[] }) { const [nextTripId, setNextTripId] = React.useState(null); const [error, setError] = React.useState(null); React.useEffect(() => { getNextTripId() .then(setNextTripId) .catch(() => setError("Kein anstehender Trip gefunden")); }, []); if (error) return
{error}
; if (!nextTripId) return
Lade...
; return ; } function Navigation() { const location = useLocation(); const navItems = [ { to: "/trips", label: "Trips" }, { to: "/items", label: "Items" }, { to: "/tags", label: "Tags" }, ]; // Navigation für den Titel-Link const navigate = useNavigate(); async function goToCurrentTrip() { try { const id = await getNextTripId(); navigate(`/trips/${id}`); } catch { alert("Kein anstehender Trip gefunden"); } } // Prüfe, ob ein einzelner Trip angezeigt wird const isTripDetail = /^\/trips\/[^/]+$/.test(location.pathname); return ( ); } export default function App() { const [trips, setTrips] = useState([]); const [dbError, setDbError] = useState(null); const navigate = useNavigate(); async function loadTrips() { try { const data = await getTrips(); setTrips(data); setDbError(null); } catch (err) { setDbError("Warnung: Verbindung zur Datenbank fehlgeschlagen!"); } } useEffect(() => { loadTrips(); }, []); useEffect(() => { document.title = APP_TITLE; }, []); async function goToCurrentTrip() { try { const id = await getNextTripId(); navigate(`/trips/${id}`); } catch { alert("Kein anstehender Trip gefunden"); } } return (
{dbError && (
{dbError}
)} } /> } /> } /> } /> } />
); } // Wichtig: Der -Inhalt muss innerhalb von verwendet werden! // In main.tsx ist das bereits der Fall.