import 'leaflet/dist/leaflet.css'; import 'bootstrap/dist/css/bootstrap.css'; import { MapContainer, TileLayer, LayersControl, Circle, LayerGroup, Popup, Marker } from 'react-leaflet'; import { Button, Modal, Table } from 'react-bootstrap'; import { useEffect, useState } from 'react'; import wxService from './services/wx.service'; import { WxRegion } from '@shared/types/config.types'; import { WxData } from '../../shared/src/types/wx.types'; import { DivIcon } from 'leaflet'; function App() { const [showModal, setShowModal] = useState(false); const [loading, setLoading] = useState(false); const [regions, setRegions] = useState([]); const [selectedRegion, setSelectedRegion] = useState(''); const [wxData, setWxData] = useState(null); function getSetShowModal(val: boolean) { return () => setShowModal(val); } useEffect(() => { if (selectedRegion) { return; } setLoading(true); wxService.getRegions() .then(regionsResponse => { setRegions(regionsResponse); setShowModal(true); setLoading(false); }); }, []); useEffect(() => { setLoading(true); wxService.getWxData(selectedRegion).then(wxResponse => { setWxData(wxResponse); setShowModal(false); setLoading(false); console.log(wxResponse); }); }, [selectedRegion]); return ( <> Regions {regions.length ? regions.map((region, idx) => ) : <> }
#
{idx + 1} {region.identifier} {region.fixes.length} Fixes
- no regions defined -
OpenStreetMap', 'CARTO', 'Weather data by Open-Meteo.com (open-meteo.com)', 'IASsure-WX: Fionn Sperath and contributors', ].map(str => `© ${str}`).join(' | ')} subdomains={'abc'} maxZoom={20} minZoom={0} /> {/* {dots.map((dot, index) => {dot.label} )} */} {Object.entries(wxData?.data || {}).map(([fix, data], idx) => ( <> {/* {Object.entries(data.levels).map(([lvl, lvlData], lvlIdx) => ( ))}
{fix}
LvlTemp/KWind
{lvl} {Math.round(Number(lvlData['T(K)']))} {lvlData.windhdg}° / {lvlData.windspeed}kts
*/} ${fix}`, className: 'bg-none text-warning' })} > {Object.entries(data.levels).map(([lvl, lvlData], lvlIdx) => ( ))}
{fix}
LvlTemp/KWind
{lvl} {Math.round(Number(lvlData['T(K)']))} {lvlData.windhdg}° / {lvlData.windspeed}kts
))}
{/* {populatedRoutes.filter(r => !!r).map((populatedRoute, idx) => { if (!populatedRoute) { return null; } const line: [number, number][] = []; const dots: { pos: [number, number], color: string, label: string }[] = []; if (populatedRoute.adep) { line.push([populatedRoute.adep.lat, populatedRoute.adep.lon]); dots.push({ pos: [populatedRoute.adep.lat, populatedRoute.adep.lon], color: 'red', label: `${populatedRoute.adep.icao} / ${populatedRoute.adep.name}` }); } for (const point of populatedRoute.points) { line.push([point.lat, point.lon]); dots.push({ pos: [point.lat, point.lon], color: 'blue', label: point.identifier }); } if (populatedRoute.ades) { line.push([populatedRoute.ades.lat, populatedRoute.ades.lon]); dots.push({ pos: [populatedRoute.ades.lat, populatedRoute.ades.lon], color: 'green', label: [populatedRoute.ades.icao, populatedRoute.ades.name].join(' ') }); } return {dots.map((dot, index) => {dot.label} )} ; })} */}
); } export default App;