Refactor redirect to dayname path logic

This commit is contained in:
2018-03-23 13:23:39 +05:30
parent e453cbc954
commit ced1d20138
+58 -15
View File
@@ -8,19 +8,59 @@ import { NextOpenCloseMini } from '../NextOpenCloseMini';
import { allHolidays } from '../../Data'; import { allHolidays } from '../../Data';
import { Utils, OpenOrClose } from "../../Utils"; import { Utils, OpenOrClose } from "../../Utils";
enum OpenOrCloseOrClosed { const enum OpenOrCloseOrClosed {
Open = "open", Open = "open",
Close = "close", Close = "close",
Closed = "closed" Closed = "closed"
} }
const enum DayNames {
today = "today",
tomorrow = "tomorrow",
yesterday = "yesterday",
}
class IsNiftyOpenApp extends React.Component { class IsNiftyOpenApp extends React.Component {
static mapAbsoluteDateToRelativeDayName(xDay: moment.Moment): DayNames | undefined {
// Redirect to relative if day is within +-1 day of today
let tmpToday = Utils.createTodayDateInIndiaTZ();
let tmpTomorrow = tmpToday.clone().add(1, "d");
let tmpYesterday = tmpToday.clone().subtract(1, "d");
if (Utils.checkSameDayInSameTZ(xDay, tmpToday)) {
return DayNames.today;
} else if (Utils.checkSameDayInSameTZ(xDay, tmpTomorrow)) {
return DayNames.tomorrow;
} else if (Utils.checkSameDayInSameTZ(xDay, tmpYesterday)) {
return DayNames.yesterday;
} else {
return undefined;
}
}
calcOpenOrCloseForOpenCloseMini(xDay: moment.Moment) { calcOpenOrCloseForOpenCloseMini(xDay: moment.Moment) {
var isTodayEventHoliday = Utils.getEventHolidayOnDate(xDay, allHolidays) !== undefined; var isTodayEventHoliday = Utils.getEventHolidayOnDate(xDay, allHolidays) !== undefined;
return isTodayEventHoliday ? OpenOrClose.Open : OpenOrClose.Close; return isTodayEventHoliday ? OpenOrClose.Open : OpenOrClose.Close;
} }
returnRedirectToDayNamePathIfPossible(openOrClose: OpenOrClose, xDay: moment.Moment): JSX.Element | undefined {
var relativeDayName = IsNiftyOpenApp.mapAbsoluteDateToRelativeDayName(xDay);
if (relativeDayName !== undefined) {
return this.redirectToOpenRelativeDay(openOrClose, relativeDayName);
} else {
return undefined;
}
}
renderAllPanels(questionString: OpenOrCloseOrClosed, dateText: string): React.ReactElement<{}> { renderAllPanels(questionString: OpenOrCloseOrClosed, dateText: string): React.ReactElement<{}> {
var question: OpenOrClose; var question: OpenOrClose;
if (questionString === OpenOrCloseOrClosed.Open) { if (questionString === OpenOrCloseOrClosed.Open) {
@@ -31,36 +71,39 @@ class IsNiftyOpenApp extends React.Component {
let xDay: moment.Moment, xPlusOneDay: moment.Moment; let xDay: moment.Moment, xPlusOneDay: moment.Moment;
{ {
const enum DateNames {
today = "today",
tomorrow = "tomorrow",
yesterday = "yesterday",
}
if (dateText === undefined) { if (dateText === undefined) {
return this.redirectToOpenToday(question); return this.redirectToOpenRelativeDay(question);
} }
dateText = dateText.toLowerCase(); dateText = dateText.toLowerCase();
switch (dateText) { switch (dateText) {
case DateNames.today: case DayNames.today:
xDay = Utils.createTodayDateInIndiaTZ(); xDay = Utils.createTodayDateInIndiaTZ();
break; break;
case DateNames.tomorrow: case DayNames.tomorrow:
xDay = Utils.createTodayDateInIndiaTZ().add(1, "d"); xDay = Utils.createTodayDateInIndiaTZ().add(1, "d");
break; break;
case DateNames.yesterday: case DayNames.yesterday:
xDay = Utils.createTodayDateInIndiaTZ().subtract(1, "d"); xDay = Utils.createTodayDateInIndiaTZ().subtract(1, "d");
break; break;
default: default:
let possiblyXDay = Utils.createSomeDateInIndiaTZ(dateText); let possiblyXDay = Utils.createSomeDateInIndiaTZ(dateText);
if (possiblyXDay.isValid()) { if (possiblyXDay.isValid()) {
{
// Redirect to day name path if possible
let redirectDayNamePath = this.returnRedirectToDayNamePathIfPossible(question, possiblyXDay);
if (redirectDayNamePath !== undefined) {
return redirectDayNamePath;
}
}
// Else continue
xDay = possiblyXDay; xDay = possiblyXDay;
} else { } else {
return this.redirectToOpenToday(question); return this.redirectToOpenRelativeDay(question);
} }
break; break;
} }
@@ -99,8 +142,8 @@ class IsNiftyOpenApp extends React.Component {
); );
} }
redirectToOpenToday(question: OpenOrClose = OpenOrClose.Open) { redirectToOpenRelativeDay(question: OpenOrClose = OpenOrClose.Open, dayName: DayNames = DayNames.today): JSX.Element {
return (<Redirect to={`/${question}/today`} />); return (<Redirect to={`/${question}/${dayName}`} />);
} }
render() { render() {
@@ -116,7 +159,7 @@ class IsNiftyOpenApp extends React.Component {
props.match.params.dateText); props.match.params.dateText);
}} }}
/> />
{this.redirectToOpenToday()} {this.redirectToOpenRelativeDay()}
</Switch> </Switch>
</div> </div>
); );