Weather web app built with React.js
Sky is a location-aware weather web app that displays weather forecast as a short summary with the option to get more detailed information about the forecast in different formats(currently, hourly, daily).
Upload images of wireframe to cloudinary and add the link here with a description of the specific wireframe.
- Fork and clone this repo
- Run
npm i - Start the server with
npm start
- Use OpenCage API to get coordinates of a place or address
- Use DarkSky API to get the weather for the coordinates
- Display the current weather
- Allow the user to see the weekly weather forecast
- Allow the user to see an hourly forecast for the same day
- Setup the app on a secure HTTPS site
- Enable Location Services for mobile devices
- Include HTML Geolocation API to get user's current location and fetch weather data
- Include location details component
Define the the React components and the architectural design of your app.
This is the list of components I will be building and using.
| Component | Description |
|---|---|
| Home | This will render the home screen and everything else. |
| WeatherCard | This will render the weather for a given day |
| HourlyCard | This will render the weather for a given hour |
| HourlyList | This will render multiple HourlyWeatherCard components |
| WeeklyList | This will render multiple DailyWeatherCard components |
| WeatherIcon | This will render the weather icon from the react-animated-weather npm package |
| CurrentLocation | This renders current location of the user |
| Input | Takes an input value from the user. |
| Header | Navigation Bar |
| Footer | |
| LocationDetails | This renders location details. |
| Smmary | Summary of the current forecast |
These are some rough estimates on how long it will take to code each component and API
| Component | Priority | Estimated Time | Time Invested | Actual Time |
|---|---|---|---|---|
| Home | H | 3h | TBD | TBD |
| OpenCage API | H | 3h | TBD | TBD |
| DarkSky API | H | 3h | TBD | TBD |
| react-icons-weather | H | 3h | TBD | TBD |
| DailyWeatherCard | H | 1.5h | TBD | TBD |
| HourlyWeatherCard | H | 3.5h | TBD | TBD |
| HourlyWeatherList | H | 4h | TBD | TBD |
| WeeklyWeatherList | H | 3h | TBD | TBD |
| Total | - | 24h | TBD | TBD |
Helper functions should be generic enought that they can be reused in other applications. Use this section to document all helper functions that fall into this category.
| Function | Description |
|---|---|
| timeCoverter | This will convert UNIX timestamp to 12-hour format units. |
| dateConverter | This will convert UNIX timestamp to a date. |
| URLify | This will convert a string into a proper format for the API call. |
Use this section to list all supporting libraries and thier role in the project.
| Library | Function |
|---|---|
| react-icons-weather | Allows me to render good looking icons based on the DarkSky API icon values |
| react-animated-weather | Allows me to render animated icons based on the DarkSky API icon values |
componentDidMount() uses geolocation API to pass coordinates on a callback function which fetches the data and set it state.
componentDidMount() {
if (window.navigator.geolocation) {
window.navigator.geolocation.getCurrentPosition(async position => {
let lat = position.coords.latitude;
let lon = position.coords.longitude;
let coordinates = `${lat},${lon}`
this.getDataFromCoordinates(coordinates, false)
},
error => {
console.log("Error: ", error)
},
{ enableHighAccuracy: true });
}
}
A major issue for me was passing state from a controlled component to other children components. Initially I didn't lift state to App.js and I decided to go a different route - I used local storage to save and retrieve state. It was a good practice, however this is not optimal for buildin a final prototype.
ERROR: app.js:34 Uncaught SyntaxError: Unexpected identifier
RESOLUTION: Missing comma after first object in sources {} object
