import React, { useEffect, useState, ChangeEvent, FormEvent } from 'react'; import { Link, useHistory } from 'react-router-dom'; import { FiArrowLeft } from 'react-icons/fi'; import { Map, TileLayer, Marker } from 'react-leaflet'; import axios from 'axios'; import { LeafletMouseEvent } from 'leaflet'; import api from '../../services/api'; import Dropzone from '../../components/Dropzone'; import './styles.css'; import logo from '../../assets/logo.svg'; // array ou objeto: manualmente informar o tipo da variavel interface Item { id: number; title: string; image_url: string; } interface IBGEUFResponse { sigla: string; } interface IBGECityResponse { nome: string; } const CreatePoint = () => { const [items, setItems] = useState([]); const [ufs, setUfs] = useState([]); const [cities, setCities] = useState([]); const [initialPosition, setInitialPosition] = useState<[number, number]>([0, 0]); const [formData, setFormData] = useState({ name: '', email: '', whatsapp: '', }); const [selectedUf, setSelectedUf] = useState('0'); const [selectedCity, setSelectedCity] = useState('0'); const [selectedItems, setSelectedItems] = useState([]); const [selectedPosition, setSelectedPosition] = useState<[number, number]>([0, 0]); const [selectedFile, setSelectedFile] = useState(); const history = useHistory(); useEffect(() => { navigator.geolocation.getCurrentPosition(position => { const { latitude, longitude } = position.coords; setInitialPosition([latitude, longitude]); }); }, []); useEffect(() => { api.get('items').then(response => { setItems(response.data); }); }, []); useEffect(() => { axios.get('https://servicodados.ibge.gov.br/api/v1/localidades/estados').then(response => { const ufInitials = response.data.map(uf => uf.sigla); setUfs(ufInitials); }); }, []); useEffect(() => { if (selectedUf === '0') { return; } axios .get(`https://servicodados.ibge.gov.br/api/v1/localidades/estados/${selectedUf}/municipios`) .then(response => { const cityNames = response.data.map(city => city.nome); setCities(cityNames); }); }, [selectedUf]); function handleSelectUf(event: ChangeEvent) { const uf = event.target.value; setSelectedUf(uf); } function handleSelectCity(event: ChangeEvent) { const city = event.target.value; setSelectedCity(city); } function handleMapClick(event: LeafletMouseEvent) { setSelectedPosition([ event.latlng.lat, event.latlng.lng, ]) } function handleInputChange(event: ChangeEvent) { const { name, value } = event.target; setFormData({ ...formData, [name]: value }); } function handleSelectItem(id: number) { const alreadySelected = selectedItems.findIndex(item => item === id); if (alreadySelected >= 0) { const filteredItems = selectedItems.filter(item => item !== id); setSelectedItems(filteredItems); } else { setSelectedItems([ ...selectedItems, id ]); } } async function handleSubmit(event: FormEvent) { event.preventDefault(); const { name, email, whatsapp } = formData; const uf = selectedUf; const city = selectedCity; const [latitude, longitude] = selectedPosition; const items = selectedItems; const data = new FormData(); data.append('name', name); data.append('email', email); data.append('whatsapp', whatsapp); data.append('uf', uf); data.append('city', city); data.append('latitude', String(latitude)); data.append('longitude', String(longitude)); data.append('items', items.join(',')); if (selectedFile) { data.append('image', selectedFile) } await api.post('points', data); alert('Ponto de coleta criado!'); history.push('/'); } return (
Ecoleta Voltar para home

Cadastro do
ponto de coleta

Dados

Endereço

Selecione o endereço no mapa

Ítens de coleta

Selecione um ou mais ítens abaixo
    {items.map(item => (
  • handleSelectItem(item.id)} className={selectedItems.includes(item.id) ? 'selected' : ''} > {item.title} {item.title}
  • ))}
); }; export default CreatePoint;