import { useEffect, useReducer } from 'react'; import { useForm, Controller, 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 { 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: 'error', 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 { label: pilot.name, value: pilot.id, }; }); newPilotsOptions.unshift({ label: '', value: '', }) dispatch({ type: 'SET_PILOT_OPTIONS', payload: newPilotsOptions }); } }, [pilots]); return (