Add snooze date shorthand expander (#1621)

* Add snooze date shorthand expander

* Add "tomorrow", "next week" expanders

* Support "2mo" for "2 months"

* Add additional tomorrow expander
This commit is contained in:
Devon Zuegel 2019-09-23 08:13:45 -07:00 committed by Ben Gotow
parent b3b1f84874
commit f4929c7c9b

View file

@ -130,6 +130,48 @@ function getChronoPast() {
return _chronoPast;
}
function expandDateLikeString(dateLikeString: string) {
// Short format: 2h
if (/^\d+h$/.test(dateLikeString)) {
const numHours = dateLikeString.match(/^\d+/)[0]; // Extract number
return `${numHours} hours`;
}
// Short format: 2d
if (/^\d+d$/.test(dateLikeString)) {
const numDays = dateLikeString.match(/^\d+/)[0]; // Extract number
return `${numDays} days`;
}
// Short format: 2w
if (/^\d+w$/.test(dateLikeString)) {
const numWeeks = dateLikeString.match(/^\d+/)[0]; // Extract number
return `${numWeeks} weeks`;
}
// Short format: 2m, 2mo
if (/^\d+mo?$/.test(dateLikeString)) {
const numMonths = dateLikeString.match(/^\d+/)[0]; // Extract number
return `${numMonths} months`;
}
// Short format: t, to, tom => tomorrow
if (['t', 'to', 'tom', 'tom '].indexOf(dateLikeString) >= 0) {
return `tomorrow morning`;
}
// Short format: nw, next week => next week
if (['nw', 'next week'].indexOf(dateLikeString) >= 0) {
return `next Monday`;
}
if (dateLikeString.indexOf('tom ') === 0) {
return dateLikeString.replace('tom ', 'tomorrow ');
}
return dateLikeString; // Return original string if no match
}
const DateUtils = {
// Localized format: ddd, MMM D, YYYY h:mmA
DATE_FORMAT_LONG: 'llll',
@ -288,7 +330,8 @@ const DateUtils = {
* @return {moment} - moment object representing date
*/
futureDateFromString(dateLikeString) {
const date = getChronoFuture().parseDate(dateLikeString);
const expanded = expandDateLikeString(dateLikeString);
const date = getChronoFuture().parseDate(expanded);
if (!date) {
return null;
}