/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ import { FunctionComponent, useCallback, useState } from 'react' import { WarehouseData, EMPTY_WAREHOUSE } from '../../../models' import { Button, ColumnLayout, Form, FormField, FormSection, Inline, Input, Stack } from 'aws-northstar' import { useHistory, useParams } from 'react-router-dom' import { v4 as uuid } from 'uuid' import { useWarehouseContext } from '../../../contexts/WarehouseContext' 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 { warehouseId } = useParams<{ warehouseId: string }>() const [{ items: warehouseItems, isLoading }, { updateItem, createItem }] = useWarehouseContext() const editMode = !(warehouseId === 'new' || warehouseId === undefined) const [warehouseData, updateWarehouseData] = useImmer(() => { if (editMode && warehouseItems != null) { const sel = warehouseItems.find((x) => x.Id === warehouseId) if (sel != null) { return sel } } return { ...EMPTY_WAREHOUSE, Id: uuid(), } }) const [formError, setFormError] = useState() const onSubmit = useCallback( async (event: React.FormEvent) => { event.preventDefault() if (warehouseData == null) { throw new Error('WarehouseData is null') } try { if (editMode) { updateItem(warehouseData, true) } else { await createItem(warehouseData) } history.push(`/${appvars.URL.WAREHOUSE}/${warehouseData.Id}`) } catch (err) { setFormError(`Error while ${editMode ? 'updating' : 'saving new'} warehouse object: ${err}`) } }, [warehouseData, history, updateItem, createItem, setFormError, editMode], ) if (warehouseData == null) { return null } return (
} > { updateWarehouseData((draft: Draft) => { draft.warehouseCode = e }) }} /> { updateWarehouseData((draft: Draft) => { draft.latitude = parseFloat(e) }) }} /> { updateWarehouseData((draft: Draft) => { draft.longitude = parseFloat(e) }) }} /> { updateWarehouseData((draft: Draft) => { draft.warehouseName = e }) }} /> { updateWarehouseData((draft: Draft) => { draft.address = e }) }} />
) }