import * as React from 'react' import { LatLng } from 'leaflet' import { Popup as LeafletPopup, useMap } from 'react-leaflet' import { useEffect, useState } from 'react' import { useAddItem, useUpdateItem } from '../hooks/useItems' import { Geometry, LayerProps, Item, ItemsApi } from '../../../types' import TextAreaInput from '../../Input/TextAreaInput' import InputText from '../../Input/InputText' export interface ItemFormPopupProps { position: LatLng, layer: LayerProps, item?: Item, api?: ItemsApi, setItemFormPopup: React.Dispatch> } export default function ItemFormPopup(props: ItemFormPopupProps) { const [spinner, setSpinner] = useState(false); const map = useMap(); const addItem = useAddItem(); const updateItem = useUpdateItem(); const handleSubmit = async (evt: any) => { const formItem: Item = {} as Item; Array.from(evt.target).forEach((input: HTMLFormElement) => { if (input.name) { console.log(input.name + ": " + input.value); formItem[input.name] = input.value; } }); formItem['position']=new Geometry(props.position.lng, props.position.lat); evt.preventDefault(); setSpinner(true); if (props.item) { formItem['id']=props.item.id; await props.api?.updateItem!(formItem); formItem['api']=props.api; formItem['layer']=props.layer; await updateItem(formItem); setSpinner(false); map.closePopup(); } else { formItem['id']=crypto.randomUUID(); await props.api?.createItem!(formItem); formItem['api']=props.api; formItem['layer']=props.layer; await addItem(formItem); setSpinner(false); map.closePopup(); } props.setItemFormPopup(null); } return (
handleSubmit(e)}>
New {props.layer.name}
) }