/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ import { FunctionComponent, useCallback, useState } from 'react' import { VehicleData, EMPTY_VEHICLE_DATA } from '../../../models' import { Button, Checkbox, ColumnLayout, Form, FormField, FormSection, Inline, Input, Stack } from 'aws-northstar' import { useHistory, useParams } from 'react-router-dom' import { v4 as uuid } from 'uuid' import { useVehicleContext } from '../../../contexts/VehicleContext' import { appvars } from '../../../config' import { dayjsutc } from '../../../utils/dayjs' import { useImmer } from 'use-immer' import { Draft } from 'immer' export const Editor: FunctionComponent = () => { const history = useHistory() const { vehicleId } = useParams<{ vehicleId: string }>() const [{ items: vehicleItems, isLoading }, { updateItem, createItem }] = useVehicleContext() const editMode = !(vehicleId === 'new' || vehicleId === undefined) const [vehicleData, updateVehicleData] = useImmer(() => { if (editMode && vehicleItems != null) { const sel = vehicleItems.find((x) => x.Id === vehicleId) if (sel != null) { return sel } } return { ...EMPTY_VEHICLE_DATA, Id: uuid(), } }) const [formError, setFormError] = useState() const onSubmit = useCallback( async (event: React.FormEvent) => { event.preventDefault() if (vehicleData == null) { throw new Error('VehicleData is null') } try { if (editMode) { updateItem(vehicleData, true) } else { await createItem(vehicleData) } history.push(`/${appvars.URL.VEHICLE}/${vehicleData.Id}`) } catch (err) { setFormError(`Error while ${editMode ? 'updating' : 'saving new'} vehicle object: ${err}`) } }, [vehicleData, history, updateItem, createItem, setFormError, editMode], ) if (vehicleData == null) { return null } return (
} > { updateVehicleData((draft: Draft) => { draft.carNo = e }) }} /> { updateVehicleData((draft: Draft) => { draft.warehouseCode = e }) }} /> { updateVehicleData((draft: Draft) => { draft.carGrade = e }) }} /> { updateVehicleData((draft: Draft) => { draft.maxWeight = parseFloat(e) }) }} />
) }