react-forecast-query
Version:
Higher order React component delivering weather information from open weather api. Wrapper for forecast-query package.
125 lines (91 loc) • 3.42 kB
Markdown
A simple higher order component capable of injecting weather information from open weather api into a component
```JSX
<div>
<input value={state.value} onInput={e => this.setState({ value: (e.target as HTMLInputElement).value })} />
<button onClick={() => this.setState(prevState => ({ apiKey: prevState.value }))}>Test component</button>
{state.apiKey && (
<WeatherDisplay
apiKey={state.apiKey}
label="Cloudy weather measurements"
query={['clouds', 'cloudy']}
by="hour"
loadingComponent={() => <div>Loading...</div>}
setup={forecast => forecast
.at(today, fourDaysFromNow)
.around(50.08804, 14.42076)
.units('metric')
.language('cz')}
/>
)}
</div>
```
```JSX
import React, { FunctionComponent } from "react";
import { InjectedForecastResults } from "react-forecast-query";
import weatherEnhancer from "react-forecast-query";
export interface WeatherDisplayProps {
label: string;
}
const WeatherDisplay: FunctionComponent<WeatherDisplayProps & InjectedForecastResults> = props => (
<section>
<label>{props.label}</label>
<ul>
{props.data.clouds?.map(clouds => (
<li>
{clouds.date.toDateString()} {clouds.date.toTimeString()} - {clouds.value}
</li>
))}
</ul>
<ul>
{props.data.cloudy?.map(weather => (
<li>
<img src={props.forecast.icon(weather.icon)} />
<div>
{weather.description}
</div>
</li>
))}
</ul>
</section>
);
export default weatherEnhancer(WeatherDisplay);
```
Use setup props to add location, units, language and dates, then define a string list of information you want to receive.
List of information is derived from ".list()" function in forecast-query.
"By" parameter refers to how descriptive the list should be ("hour" delivers hourly weather updates, "day" daily ones).
"loadingComponent" will display whatever component you want when the api is loading information.
## Changes since 0.1.0
Added error component
## Changes since 0.1.1
Fix error component error reporting
## Changes since 0.2.0
Add support for gps geolocation in browser.
### Example of use
```JSX
<WeatherDisplay
apiKey={state.apiKey}
label="Cloudy weather measurements"
query={['clouds', 'cloudy']}
by="hour"
loadingComponent={() => <div>Loading...</div>}
errorComponent={props => {
console.error(props.error);
return <div>Error!</div>
}}
geo // Try and get geolocation
updateGeo={1} // Updates every minute
setup={forecast => forecast
.at(today, fourDaysFromNow)
.units('metric') // No location setup needed
.language('cz')}
/>
```
Fixed a bug in typing of enhancer concerning Component class.
For more information about weather prediction from open weather api please visit: https://www.npmjs.com/package/forecast-query
If you find any bug or have an idea of how to improve this package, please file in an issue or a pull request