From a649b9514203205d079388d39eb20c4ff0ae86b8 Mon Sep 17 00:00:00 2001 From: Carlos Vializ Date: Mon, 25 Mar 2019 17:35:00 -0400 Subject: [PATCH 1/5] Fix bind data when start and end are the same --- extensions/amp-date-picker/0.1/amp-date-picker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extensions/amp-date-picker/0.1/amp-date-picker.js b/extensions/amp-date-picker/0.1/amp-date-picker.js index decfbd89ec92..51e4eca0518c 100644 --- a/extensions/amp-date-picker/0.1/amp-date-picker.js +++ b/extensions/amp-date-picker/0.1/amp-date-picker.js @@ -1452,6 +1452,11 @@ export class AmpDatePicker extends AMP.BaseElement { * @private */ iterateDateRange_(startDate, endDate, cb) { + if (startDate.isSame(endDate)) { + cb(startDate); + return; + } + const normalizedEndDate = endDate || startDate; if (!normalizedEndDate.isAfter(startDate)) { return; From 4f3fe49f78cb6121ec351e23eb84a0d2919801c6 Mon Sep 17 00:00:00 2001 From: Carlos Vializ Date: Mon, 25 Mar 2019 17:53:44 -0400 Subject: [PATCH 2/5] Use standard for loop instead to avoid complexity --- extensions/amp-date-picker/0.1/amp-date-picker.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/extensions/amp-date-picker/0.1/amp-date-picker.js b/extensions/amp-date-picker/0.1/amp-date-picker.js index 51e4eca0518c..e6e07395a181 100644 --- a/extensions/amp-date-picker/0.1/amp-date-picker.js +++ b/extensions/amp-date-picker/0.1/amp-date-picker.js @@ -1452,20 +1452,15 @@ export class AmpDatePicker extends AMP.BaseElement { * @private */ iterateDateRange_(startDate, endDate, cb) { - if (startDate.isSame(endDate)) { - cb(startDate); - return; - } - const normalizedEndDate = endDate || startDate; - if (!normalizedEndDate.isAfter(startDate)) { + if (!normalizedEndDate.isAfter(startDate) && + !normalizedEndDate.isSame(startDate)) { return; } - const index = startDate.clone(); - while (!index.isAfter(normalizedEndDate)) { - cb(index.clone()); - index.add(1, 'days'); + const days = normalizedEndDate.diff(startDate, 'days') + 1; + for (let i = 0; i < days; i++) { + cb(startDate.clone().add(i + 1, 'days')); } } From 14ea1cb1d547de08acf2dd6562dcc2437e1584d4 Mon Sep 17 00:00:00 2001 From: Carlos Vializ Date: Mon, 25 Mar 2019 17:54:02 -0400 Subject: [PATCH 3/5] Fix circular reference error from bind --- extensions/amp-date-picker/0.1/amp-date-picker.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/amp-date-picker/0.1/amp-date-picker.js b/extensions/amp-date-picker/0.1/amp-date-picker.js index e6e07395a181..15e56e854c46 100644 --- a/extensions/amp-date-picker/0.1/amp-date-picker.js +++ b/extensions/amp-date-picker/0.1/amp-date-picker.js @@ -38,7 +38,7 @@ import {createDeferred} from './react-utils'; import {createSingleDatePicker} from './single-date-picker'; import {dashToCamelCase} from '../../../src/string'; import {dev, user, userAssert} from '../../../src/log'; -import {dict} from '../../../src/utils/object'; +import {dict, map} from '../../../src/utils/object'; import {escapeCssSelectorIdent} from '../../../src/css'; import {once} from '../../../src/utils/function'; import {requireExternal} from '../../../src/module'; @@ -78,10 +78,10 @@ class BindDatesDetails { this['dates'] = dates; /** @const */ - this['start'] = dates[0]; + this['start'] = map(dates[0]); /** @const */ - this['end'] = dates[dates.length - 1]; + this['end'] = map(dates[dates.length - 1]); } } From b9faa3e48de9511c380f55e4df27cb12cc2c23d2 Mon Sep 17 00:00:00 2001 From: Carlos Vializ Date: Mon, 25 Mar 2019 18:00:13 -0400 Subject: [PATCH 4/5] Use isSameOrAfter --- extensions/amp-date-picker/0.1/amp-date-picker.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extensions/amp-date-picker/0.1/amp-date-picker.js b/extensions/amp-date-picker/0.1/amp-date-picker.js index 15e56e854c46..e4d70ea7c407 100644 --- a/extensions/amp-date-picker/0.1/amp-date-picker.js +++ b/extensions/amp-date-picker/0.1/amp-date-picker.js @@ -1453,8 +1453,7 @@ export class AmpDatePicker extends AMP.BaseElement { */ iterateDateRange_(startDate, endDate, cb) { const normalizedEndDate = endDate || startDate; - if (!normalizedEndDate.isAfter(startDate) && - !normalizedEndDate.isSame(startDate)) { + if (!normalizedEndDate.isSameOrAfter(startDate)) { return; } From 090a093d2c5992136d674455c1408fa1bbe08b51 Mon Sep 17 00:00:00 2001 From: Carlos Vializ Date: Tue, 26 Mar 2019 15:55:28 -0400 Subject: [PATCH 5/5] Fix missing externs --- third_party/moment/moment.extern.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/third_party/moment/moment.extern.js b/third_party/moment/moment.extern.js index 2a0b643cc857..a96ea7527bef 100644 --- a/third_party/moment/moment.extern.js +++ b/third_party/moment/moment.extern.js @@ -43,6 +43,19 @@ moment.prototype.isAfter = function(other) {}; */ moment.prototype.isBetween = function(first, second) {}; +/** + * @param {!moment} other + * @return {boolean} + */ +moment.prototype.isSameOrAfter = function(other) {}; + +/** + * @param {!moment} other + * @param {string} type + * @return {number} + */ +moment.prototype.diff = function(other, type) {}; + /** * @param {string} format * @return {string}