This repository is meant to store a calendar app made using ReactJS, Typescript, Styled Components and related techlonogies.
- Unfortunetly, Visual Crossing API only provides a small package of requests for free tier accounts, thus, it is possible that (maybe) the user won't be able to see the weather data neither on the Big Colendar nor see the WeatherSearcher component. The screen would be like this:
- The project was developed using ReactJS;
- For proper data typing and better development experience, TypeScript was used;
- For a better CSS in JS handling and general styling, Styled Components was used;
- The library Axios was used for API consumption;
- For accessing weather data, the Visual Crossing API was used. Available at: https://www.visualcrossing.com/weather/weather-data-services#/login;
- For accessing the user's current city, the Ip Info API was used. Available at: https://ipinfo.io/developers;
- The page routing was made using React Router DOM on its most current version (6);
yarn
yarn start
- Ability to add "reminders" (max. 30 characters) for a day and time specified by the user. Also, include a city;
- Ability to edit reminders - including changing text, city, day and time;
- Add a weather service call from MetaWeather, AccuWeather or VisualCrossing and get the weather forecast (e.g. Rain) for the date of the calendar reminder based on the city;
-
Expand the calendar to support more than the current month or year;
-
Properly handle overflow when multiple reminders appear on the same date;
- The project is meant to support multiple months and years, the user can navigate through different dates, months or years by using the arrows above the Big Calendar or the ones above the small calendar:
- The WeatherSearcher component rendered on the Sibebar makes an API call from Visual Crossing API together with an API call from Ip Info API. First, Ip Info API is called to get the city the user is currently in (this city name is saved in a state), then Visual Crossing API is called using the city name saved in the state to concatenate that city name in the URL, making an Axios API call and then the component renders the weather data in that city. As a result, we have a component that looks like this: