diff --git a/src/Components/MultiDayForecast/Component.css b/src/Components/MultiDayForecast/Component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/Components/MultiDayForecast/Component.tsx b/src/Components/MultiDayForecast/Component.tsx new file mode 100644 index 0000000..8088a07 --- /dev/null +++ b/src/Components/MultiDayForecast/Component.tsx @@ -0,0 +1,83 @@ +import * as React from 'react'; +import '../../../node_modules/open-weather-icons/dist/css/open-weather-icons.css'; +import './Component.css'; +import { Forecast5Days, ForecaseAtInstance } from '../WeatherApp'; +import { SingleDayForecast } from '../SingleDayForecast'; +import { Utils } from '../../Utils'; + +export interface MultiDayForecastProps { + forecast5Days: Forecast5Days; +} + +export interface MultiDayForecastState { + forecastDay1: Array; + forecastDay2: Array; + forecastDay3: Array; + forecastDay4: Array; + forecastDay5: Array; +} + +export class MultiDayForecast extends React.Component { + + constructor(props: MultiDayForecastProps) { + super(props); + + this.state = this.extractStateFromProps(props); + } + + componentWillReceiveProps(nextProps: MultiDayForecastProps) { + var nextState = this.extractStateFromProps(nextProps); + + this.setState(nextState); + } + + extractStateFromProps(props: MultiDayForecastProps): MultiDayForecastState { + const tempState: MultiDayForecastState = { + forecastDay1: [], + forecastDay2: [], + forecastDay3: [], + forecastDay4: [], + forecastDay5: [], + }; + + const day1 = Utils.createTodayDateInIndiaTZ(), + day2 = day1.clone().add(1, 'd'), + day3 = day1.clone().add(2, 'd'), + day4 = day1.clone().add(3, 'd'), + day5 = day1.clone().add(4, 'd'); + + props.forecast5Days.list.forEach((forecastAtInstanceValue) => { + const forecastDay = Utils.createDateFromEpochInIndiaTZ(forecastAtInstanceValue.dt); + + if (Utils.checkSameDayInSameTZ(forecastDay, day1)) { + tempState.forecastDay1.push(forecastAtInstanceValue); + } else if (Utils.checkSameDayInSameTZ(forecastDay, day2)) { + tempState.forecastDay2.push(forecastAtInstanceValue); + } else if (Utils.checkSameDayInSameTZ(forecastDay, day3)) { + tempState.forecastDay3.push(forecastAtInstanceValue); + } else if (Utils.checkSameDayInSameTZ(forecastDay, day4)) { + tempState.forecastDay4.push(forecastAtInstanceValue); + } else if (Utils.checkSameDayInSameTZ(forecastDay, day5)) { + tempState.forecastDay5.push(forecastAtInstanceValue); + } else { + // Because it is rolling 5 days, last few times can fall into (today + 5) th day + // Just skip those values + } + + }); + + return tempState; + } + + render() { + return ( +
+ + + + + +
+ ); + } +} diff --git a/src/Components/MultiDayForecast/index.tsx b/src/Components/MultiDayForecast/index.tsx new file mode 100644 index 0000000..82ed6e1 --- /dev/null +++ b/src/Components/MultiDayForecast/index.tsx @@ -0,0 +1 @@ +export { MultiDayForecast } from './Component'; \ No newline at end of file