import React, { useEffect, useReducer } from 'react'; import { Alert, Button, DatePicker, Drawer, DrawerBody, DrawerContent, DrawerFooter, DrawerHeader, Input, NumberInput, Select, Selection, SelectItem, SharedSelection, Textarea } from '@heroui/react' import { useForm, Controller, FormProvider, useFormContext } from 'react-hook-form'; import { LogFormProps } from './LogFormProps.interface'; import { initialState, reducer } from './reducer'; import { AxiosError, AxiosResponse } from 'axios'; import { FormMode } from '../../enums/formMode'; import { usePilots } from '../../hooks/pilots/UsePilots'; import { useOidc } from '../../auth/oidcConfig'; import httpClient from '../../httpClient/httpClient'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faSave, faXmark } from '@fortawesome/free-solid-svg-icons' import { parseAbsolute, parseDate, getLocalTimeZone, CalendarDate, ZonedDateTime } from '@internationalized/date'; import { useLogbookContext } from '../../hooks/logbookContext/UseLogbookContext'; const LogForm = () => { const [state, dispatch] = useReducer(reducer, initialState); const { control, formState, reset, setValue } = useFormContext() const { pilots } = usePilots(); const { isUserLoggedIn } = useOidc(); const logbookContext = useLogbookContext() useEffect(() => { if (logbookContext.state.formMode === FormMode.VIEW) { dispatch({ type: 'SET_IS_DISABLED', payload: true }); } }, [logbookContext.state.formMode]); useEffect(() => { const getEntry = async () => { try { dispatch({ type: 'SET_IS_LOADING', payload: true }); const response: AxiosResponse = await httpClient.get( `api/logs/${logbookContext.state.selectedLogId}` ); const log = response.data; reset(log); } catch (error) { const axiosError = error as AxiosError; dispatch({ type: 'SET_ALERT', payload: { severity: 'danger', message: axiosError.message }}); } finally { dispatch({ type: 'SET_IS_LOADING', payload: false }); } }; if (logbookContext.state.selectedLogId) { getEntry(); } }, [logbookContext.state.selectedLogId]); useEffect(() => { if (pilots && FormMode.ADD) { const newPilotsOptions = pilots.map((pilot) => { return { key: pilot.id, label: pilot.name, }; }); console.log(newPilotsOptions) dispatch({ type: 'SET_PILOT_OPTIONS', payload: newPilotsOptions }); } }, [pilots]); return (
Pilot
{ return ( ); }} />
Date
{ const parsedAbsoluteDate = value ? parseAbsolute(value, getLocalTimeZone()) : value return( { let date = selectedDate as CalendarDate; setValue('date', date.toDate(getLocalTimeZone()).toISOString()) }} size='lg' value={parsedAbsoluteDate ? new CalendarDate(parsedAbsoluteDate.year, parsedAbsoluteDate.month, parsedAbsoluteDate.day) : value} /> ) }} />
Aircraft Make and Model
( )} />
{isUserLoggedIn && <>
Aircraft Identity
( )} />
}
Route From
( )} />
Route To
( )} />
Duration Of Flight
( )} />
{isUserLoggedIn && <>
Single Engine Land
( )} />
Simulator or ATD
( )} />

Landings

Day
( )} />
Night
( )} />

Type of Training or Experience

Ground Training Received
( )} />
Flight Training Received
( )} />
Cross Country
( )} />
Night
( )} />
Solo
( )} />
Pilot in Command
( )} />

Instrument

Actual
( )} />
Simulated
( )} />
Instrument Approaches
( )} />
Holds
( )} />
Nav / Track
( )} />
}

Notes

(