import { useState, useEffect } from "react"; import Image from "next/image"; import Metrics from "./components/Metrics"; import { convertTime, ctoF, timeToAMPM } from "./services/converters"; import { isPM } from "./services/utils"; import styles from "../styles/Home.module.css"; const App = () => { const [input, setInput] = useState("Riga"); const [systemUsed, setSystemUsed] = useState("metric"); const [weatherData, setWeatherData] = useState(); const getData = async () => { const res = await fetch("api/data", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ input }), }); const data = await res.json(); setWeatherData({ ...data }); setInput(""); }; const enterKeydown = (event) => { if (event.keyCode === 13) { getData(); } }; useEffect(() => { getData(); }, []); const changeSystem = () => systemUsed == "metric" ? setSystemUsed("imperial") : setSystemUsed("metric"); var weekday = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", ]; return weatherData && !weatherData.message ? (

{weatherData.name}, {weatherData.sys.country}

{weatherData.weather[0].description}

weatherIcon

{systemUsed == "metric" ? Math.round(weatherData.main.temp) : Math.round(ctoF(weatherData.main.temp))} °{systemUsed == "metric" ? "C" : "F"}

Feels like{" "} {systemUsed == "metric" ? Math.round(weatherData.main.feels_like) : Math.round(ctoF(weatherData.main.feels_like))} °{systemUsed == "metric" ? "C" : "F"}

{ weekday[ new Date( convertTime(weatherData.dt, weatherData.timezone).input ).getUTCDay() ] } ,{" "} {systemUsed == "metric" ? parseInt( convertTime(weatherData.dt, weatherData.timezone)[0].split( ":" )[0] ) : timeToAMPM( convertTime(weatherData.dt, weatherData.timezone)[0] ).split(":")[0]} :00{" "} {systemUsed == "imperial" ? isPM(convertTime(weatherData.dt, weatherData.timezone)[0]) : ""}

{ e.target.value = ""; e.target.placeholder = ""; }} onChange={(e) => setInput(e.target.value)} onKeyDown={(e) => { enterKeydown(e); e.target.placeholder = "Search a city..."; }} />

Metric System

Imperial System

) : weatherData && weatherData.message ? (

City not found, try again!

(e.target.value = "")} onChange={(e) => setInput(e.target.value)} onKeyDown={(e) => enterKeydown(e)} />
) : (

Loading data...

); }; export default App;