diff --git a/web/app/root.tsx b/web/app/root.tsx index 89aab9e..0b5a732 100644 --- a/web/app/root.tsx +++ b/web/app/root.tsx @@ -17,13 +17,15 @@ import { } from "@remix-run/react"; import { - MutationCache, + HydrationBoundary, QueryCache, QueryClient, QueryClientProvider, } from "@tanstack/react-query"; import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import { useDehydratedState } from "use-dehydrated-state"; + import { Button, ColorSchemeScript, @@ -102,7 +104,7 @@ export function ErrorBoundary() { ); } -export default function App({ pageProps }) { +export default function App() { const navigate = useNavigate(); const [queryClient] = useState( () => @@ -128,6 +130,8 @@ export default function App({ pageProps }) { }) ); + const dehydratedState = useDehydratedState(); + return ( @@ -139,15 +143,17 @@ export default function App({ pageProps }) { - - - - - - - - - + + + + + + + + + + + diff --git a/web/app/routes/logbook.flights/flights-list.tsx b/web/app/routes/logbook.flights/flights-list.tsx index 74b7ae3..79834b7 100644 --- a/web/app/routes/logbook.flights/flights-list.tsx +++ b/web/app/routes/logbook.flights/flights-list.tsx @@ -8,19 +8,82 @@ import { Stack, Loader, Center, + Divider, } from "@mantine/core"; import { Link, useLocation, useNavigate } from "@remix-run/react"; import { IconPlus } from "@tabler/icons-react"; -import { useQuery } from "@tanstack/react-query"; +import { UseQueryResult, useQuery } from "@tanstack/react-query"; + +function useFlights() { + const flights = useQuery({ + queryKey: ["flights-list"], + queryFn: async () => { + const res = await client.get(`/flights`); + const groupedFlights: { [date: string]: FlightConciseSchema[] } = {}; + res.data.map((log: FlightConciseSchema) => { + const dateStr = log.date; + + if (!groupedFlights[dateStr]) { + groupedFlights[dateStr] = []; + } + + groupedFlights[dateStr].push(log); + }); + return groupedFlights; + }, + }); + + return flights; +} + +function FlightsListDisplay({ + flights, + page, +}: { + flights: UseQueryResult<{ [date: string]: FlightConciseSchema[] }>; + page: string; +}) { + return ( + <> + {flights.data ? ( + Object.entries(flights.data).map(([date, logs], index: number) => ( + <> + + {date} + + + {logs.map((flight: FlightConciseSchema) => ( + + ))} + + )) + ) : flights.isLoading ? ( +
+ +
+ ) : ( +
+ No Flights +
+ )} + + ); +} export function FlightsList() { const location = useLocation(); const page = location.pathname.split("/")[3]; - const flights = useQuery({ - queryKey: ["flights-list"], - queryFn: async () => await client.get(`/flights`).then((res) => res.data), - }); + const flights = useFlights(); const navigate = useNavigate(); @@ -35,23 +98,7 @@ export function FlightsList() { Add - {flights.data ? ( - flights.data.map((flight: FlightConciseSchema, index: number) => ( - - )) - ) : flights.isLoading ? ( -
- -
- ) : ( - No Flights - )} +
); @@ -61,33 +108,14 @@ export function MobileFlightsList() { const location = useLocation(); const page = location.pathname.split("/")[3]; - const flights = useQuery({ - queryKey: ["flights-list"], - queryFn: async () => await client.get(`/flights`).then((res) => res.data), - }); + const flights = useFlights(); const navigate = useNavigate(); return ( - {flights.data ? ( - flights.data.map((flight: FlightConciseSchema, index: number) => ( - - )) - ) : flights.isLoading ? ( -
- -
- ) : ( - No Flights - )} +