import { useState } from "react"; import { LogbookDrawerProps } from "./LogbookDrawerProps.interface"; import LogForm from "../logForm/LogForm"; import TracksForm from "../tracksForm/TracksForm"; import Alert from '../alert/Alert'; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faClock, faMapLocationDot, faSave, faXmark } from "@fortawesome/free-solid-svg-icons"; import { FormProvider, useForm } from "react-hook-form"; import { FormMode } from "../../enums/formMode"; import httpClient from "../../httpClient/httpClient"; import { AxiosError } from "axios"; import { useLogbookContext } from "../../hooks/logbookContext/UseLogbookContext"; import { useBreakpoints } from "../../hooks/useBreakpoints/UseBreakpoints"; import { ScreenSize } from "../../enums/screenSize"; const LogbookDrawer = ({ onOpenClose }: LogbookDrawerProps) => { const [activeTab, setActiveTab] = useState('time'); const defaultValues = { pilotId: '', date: null, aircraftMakeModel: '', aircraftIdentity: '', routeFrom: '', routeTo: '', durationOfFlight: null, singleEngineLand: null, simulatorAtd: null, landingsDay: null, landingsNight: null, groundTrainingReceived: null, flightTrainingReceived: null, crossCountry: null, night: null, solo: null, pilotInCommand: null, instrumentActual: null, instrumentSimulated: null, instrumentApproaches: null, instrumentHolds: null, instrumentNavTrack: null, notes: '' }; const methods = useForm(); const logbookContext = useLogbookContext() const { screenSize } = useBreakpoints(); const onCancel = () => { methods.reset(defaultValues); logbookContext.dispatch({ type: 'SET_IS_FORM_DISABLED', payload: false }); onOpenClose(FormMode.CANCEL); }; const onSubmit = async (data: unknown) => { try { logbookContext.dispatch({ type: 'SET_IS_FORM_DISABLED', payload: true }); logbookContext.dispatch({ type: 'SET_IS_FORM_LOADING', payload: true }); if (!logbookContext.state.selectedLogId) { await httpClient.post(`api/logs`, data); } else { await httpClient.put(`api/logs/${logbookContext.state.selectedLogId}`, data); } methods.reset(defaultValues); } catch (error) { const axiosError = error as AxiosError; logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: { severity: 'error', message: axiosError.message }}); } finally { logbookContext.dispatch({ type: 'SET_IS_FORM_LOADING', payload: false }); logbookContext.dispatch({ type: 'SET_IS_FORM_DISABLED', payload: false }); logbookContext.dispatch({ type: 'SET_FORM_MODE', payload: FormMode.CANCEL }); onOpenClose(FormMode.CANCEL); } }; const onTabClicked = (event: any) => { setActiveTab(event.target.ariaLabel) } return (
{}} checked={logbookContext.state.isDrawerOpen} />

{`${logbookContext.state.formMode.toString().toLowerCase().charAt(0).toUpperCase() + logbookContext.state.formMode.toString().slice(1).toLowerCase()} Entry`}

{logbookContext.state.formAlert && ( logbookContext.dispatch({ type: 'SET_FORM_ALERT', payload: undefined }) } severity={logbookContext.state.formAlert.severity} > {logbookContext.state.formAlert.message} )}
{logbookContext.state.formMode !== FormMode.ADD && <>
}
{activeTab !== 'tracks' &&
{logbookContext.state.formMode.toString() !== FormMode.VIEW && ( )}
}
) } export default LogbookDrawer