263 lines
8.5 KiB
TypeScript
263 lines
8.5 KiB
TypeScript
import { VerticalLogItem } from "@/ui/display/log-item";
|
|
import ErrorDisplay from "@/ui/error-display";
|
|
import { client } from "@/util/api";
|
|
import {
|
|
Center,
|
|
Container,
|
|
Grid,
|
|
Loader,
|
|
ScrollArea,
|
|
Stack,
|
|
Title,
|
|
} from "@mantine/core";
|
|
import { useParams } from "@remix-run/react";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
|
|
export default function Flight() {
|
|
const params = useParams();
|
|
|
|
const flight = useQuery({
|
|
queryKey: [params.id],
|
|
queryFn: async () =>
|
|
await client.get(`/flights/${params.id}`).then((res) => res.data),
|
|
});
|
|
|
|
const log = flight.data;
|
|
|
|
return (
|
|
// <Container>
|
|
<Stack h="calc(100vh-95px)">
|
|
{flight.isError ? (
|
|
<Center h="calc(100vh - 95px)">
|
|
<ErrorDisplay error="Error Fetching Flight" />
|
|
</Center>
|
|
) : flight.isPending ? (
|
|
<Center h="calc(100vh - 95px)">
|
|
<Loader />
|
|
</Center>
|
|
) : flight.data ? (
|
|
<>
|
|
<Title order={3} py="lg" style={{ textAlign: "center" }}>
|
|
Flight Log
|
|
</Title>
|
|
<ScrollArea h="calc(100vh - 95px - 110px)" m="0" p="0">
|
|
<Container h="100%">
|
|
<Grid justify="center">
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem label="Date" content={log.date} date />
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem label="Aircraft" content={log.aircraft} />
|
|
</Grid.Col>
|
|
{log.waypoint_from || log.waypoint_to ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Waypoint From"
|
|
content={log.waypoint_from}
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Waypoint To"
|
|
content={log.waypoint_to}
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
{log.route ? (
|
|
<>
|
|
<Grid.Col span={12}>
|
|
<VerticalLogItem label="Route" content={log.route} />
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
{log.hobbs_start || log.hobbs_end ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Hobbs Start"
|
|
content={log.hobbs_start}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Hobbs End"
|
|
content={log.hobbs_end}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
{log.tach_start || log.tach_end ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Tach Start"
|
|
content={log.tach_start}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Tach End"
|
|
content={log.tach_end}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
{log.time_start || log.time_off ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time Start"
|
|
content={log.time_start}
|
|
time
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time Off"
|
|
content={log.time_off}
|
|
time
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
{log.time_down || log.time_stop ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time Down"
|
|
content={log.time_down}
|
|
time
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time Stop"
|
|
content={log.time_stop}
|
|
time
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Total Time"
|
|
content={log.time_total}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Time Solo"
|
|
content={log.time_solo}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Time Night"
|
|
content={log.time_night}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time PIC"
|
|
content={log.time_pic}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time SIC"
|
|
content={log.time_sic}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
{log.time_xc && log.dist_xc ? (
|
|
<>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Time Cross-Country"
|
|
content={log.time_xc}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Cross-Country Distance"
|
|
content={log.dist_xc}
|
|
decimal={2}
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Takeoffs (Day)"
|
|
content={log.takeoffs_day}
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Landings (Day)"
|
|
content={log.landings_day}
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Takeoffs (Night)"
|
|
content={log.takeoffs_night}
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={6}>
|
|
<VerticalLogItem
|
|
label="Landings (Night)"
|
|
content={log.landings_night}
|
|
/>
|
|
</Grid.Col>
|
|
{log.time_instrument ||
|
|
log.time_sim_instrument ||
|
|
log.holds_instrument ? (
|
|
<>
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Instrument Time"
|
|
content={log.time_instrument}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Simulated Instrument Time"
|
|
content={log.time_sim_instrument}
|
|
hours
|
|
/>
|
|
</Grid.Col>
|
|
<Grid.Col span={4}>
|
|
<VerticalLogItem
|
|
label="Instrument Holds"
|
|
content={log.holds_instrument}
|
|
/>
|
|
</Grid.Col>
|
|
</>
|
|
) : null}
|
|
</Grid>
|
|
</Container>
|
|
</ScrollArea>
|
|
</>
|
|
) : (
|
|
<Center h="calc(100vh - 95px)">
|
|
<ErrorDisplay error="Unknown Error" />
|
|
</Center>
|
|
)}
|
|
</Stack>
|
|
// </Container>
|
|
);
|
|
}
|