From 915b00edcd5a20582f2d5cdf28b24611330adbc6 Mon Sep 17 00:00:00 2001 From: Abhas Bhattacharya Date: Thu, 22 Mar 2018 13:55:24 +0530 Subject: [PATCH] Add date parsing and redirect logic for date sub-path in url --- src/Components/IsNiftyOpenApp/App.tsx | 57 ++++++++++++++++++++++++--- src/Utils/utils.ts | 4 ++ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/Components/IsNiftyOpenApp/App.tsx b/src/Components/IsNiftyOpenApp/App.tsx index f4f064c..26a6f3b 100644 --- a/src/Components/IsNiftyOpenApp/App.tsx +++ b/src/Components/IsNiftyOpenApp/App.tsx @@ -21,7 +21,7 @@ class IsNiftyOpenApp extends React.Component { return isTodayEventHoliday ? OpenOrClose.Open : OpenOrClose.Close; } - renderOpenXDay(questionString: OpenOrCloseOrClosed): React.ReactElement<{}> { + renderAllPanels(questionString: OpenOrCloseOrClosed, dateText: string): React.ReactElement<{}> { var question: OpenOrClose; if (questionString === OpenOrCloseOrClosed.Open) { question = OpenOrClose.Open; @@ -29,8 +29,44 @@ class IsNiftyOpenApp extends React.Component { question = OpenOrClose.Close; } - const xDay = Utils.createTodayDateInIndiaTZ(); - const xPlusOneDay = xDay.clone().add(1, "d"); + let xDay: moment.Moment, xPlusOneDay: moment.Moment; + { + const enum DateNames { + today = "today", + tomorrow = "tomorrow", + yesterday = "yesterday", + } + + if (dateText === undefined) { + return this.redirectToOpenToday(question); + } + dateText = dateText.toLowerCase(); + + switch (dateText) { + case DateNames.today: + xDay = Utils.createTodayDateInIndiaTZ(); + break; + + case DateNames.tomorrow: + xDay = Utils.createTodayDateInIndiaTZ().add(1, "d"); + break; + + case DateNames.yesterday: + xDay = Utils.createTodayDateInIndiaTZ().subtract(1, "d"); + break; + + default: + let possiblyXDay = Utils.createSomeDateInIndiaTZ(dateText); + if (possiblyXDay.isValid()) { + xDay = possiblyXDay; + } else { + return this.redirectToOpenToday(question); + } + break; + } + + } + xPlusOneDay = xDay.clone().add(1, "d"); return (
@@ -62,16 +98,25 @@ class IsNiftyOpenApp extends React.Component {
); } + + redirectToOpenToday(question: OpenOrClose = OpenOrClose.Open) { + return (); + } + render() { return (
{ return this.renderOpenXDay(props.match.params.openOrClosed); }} + path='/:openOrClosed(open|close[d]?)/:dateText?' + render={(props) => { + return this.renderAllPanels( + props.match.params.openOrClosed, + props.match.params.dateText); + }} /> - + {this.redirectToOpenToday()}
); diff --git a/src/Utils/utils.ts b/src/Utils/utils.ts index a2b074d..b6c930b 100644 --- a/src/Utils/utils.ts +++ b/src/Utils/utils.ts @@ -21,6 +21,10 @@ export class Utils { return moment.tz(moment.tz.guess()).tz("Asia/Kolkata"); } + static createSomeDateInIndiaTZ(dateString: string): moment.Moment { + return moment.tz(dateString, moment.tz.guess()).tz("Asia/Kolkata"); + } + static checkSameDayInSameTZ(moment1: moment.Moment, moment2: moment.Moment, raiseErrorTZMismatch: boolean = true) { // tslint:disable-next-line:triple-equals if (raiseErrorTZMismatch && (moment1.tz() != moment2.tz())) {