import { Cloud, Sun, CloudRain, CloudSnow, Wind } from 'lucide-react'; import { useEffect, useState } from 'react'; const WeatherWidget = () => { const [data, setData] = useState({ temperature: 0, condition: '', location: '', humidity: 0, windSpeed: 0, icon: '', }); const [loading, setLoading] = useState(true); useEffect(() => { const getApproxLocation = async () => { const res = await fetch('https://ipwhois.app/json/'); const data = await res.json(); return { latitude: data.latitude, longitude: data.longitude, city: data.city, }; }; const getLocation = async ( callback: (location: { latitude: number; longitude: number; city: string; }) => void, ) => { /* // Geolocation doesn't give city so we'll country using ipapi for now if (navigator.geolocation) { const result = await navigator.permissions.query({ name: 'geolocation', }) if (result.state === 'granted') { navigator.geolocation.getCurrentPosition(position => { callback({ latitude: position.coords.latitude, longitude: position.coords.longitude, }) }) } else if (result.state === 'prompt') { callback(await getApproxLocation()) navigator.geolocation.getCurrentPosition(position => {}) } else if (result.state === 'denied') { callback(await getApproxLocation()) } } else { callback(await getApproxLocation()) } */ callback(await getApproxLocation()); }; getLocation(async (location) => { const res = await fetch(`/api/weather`, { method: 'POST', body: JSON.stringify({ lat: location.latitude, lng: location.longitude, }), }); const data = await res.json(); if (res.status !== 200) { console.error('Error fetching weather data'); setLoading(false); return; } setData({ temperature: data.temperature, condition: data.condition, location: location.city, humidity: data.humidity, windSpeed: data.windSpeed, icon: data.icon, }); setLoading(false); }); }, []); return (