Skip to content

Commit cb77dd4

Browse files
authored
ENGCOM-7459: Don't load datepicker module until it is actually needed #27860
2 parents aac7c4c + 587d0c0 commit cb77dd4

File tree

3 files changed

+29
-28
lines changed

3 files changed

+29
-28
lines changed

app/code/Magento/Theme/view/frontend/templates/js/calendar.phtml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
<script>
1515
require([
1616
'jquery',
17-
'jquery-ui-modules/datepicker'
1817
], function($){
1918

2019
//<![CDATA[
@@ -34,7 +33,7 @@ require([
3433
timeText: "<?= $block->escapeJs(__('Time')) ?>",
3534
hourText: "<?= $block->escapeJs(__('Hour')) ?>",
3635
minuteText: "<?= $block->escapeJs(__('Minute')) ?>",
37-
dateFormat: $.datepicker.RFC_2822,
36+
dateFormat: "D, d M yy", // $.datepicker.RFC_2822
3837
showOn: "button",
3938
showAnim: "",
4039
changeMonth: true,

app/code/Magento/Ui/view/base/web/js/lib/knockout/bindings/datepicker.js

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@ define([
77
'ko',
88
'underscore',
99
'jquery',
10-
'mage/translate',
11-
'mage/calendar',
12-
'moment',
13-
'mageUtils'
14-
], function (ko, _, $, $t, calendar, moment, utils) {
10+
'mage/translate'
11+
], function (ko, _, $, $t) {
1512
'use strict';
1613

1714
var defaults = {
@@ -46,10 +43,12 @@ define([
4643
observable = config;
4744
}
4845

49-
$(el).calendar(options);
46+
require(['mage/calendar'], function () {
47+
$(el).calendar(options);
5048

51-
ko.utils.registerEventHandler(el, 'change', function () {
52-
observable(this.value);
49+
ko.utils.registerEventHandler(el, 'change', function () {
50+
observable(this.value);
51+
});
5352
});
5453
},
5554

@@ -62,6 +61,7 @@ define([
6261
*/
6362
update: function (element, valueAccessor) {
6463
var config = valueAccessor(),
64+
$element = $(element),
6565
observable,
6666
options = {},
6767
newVal;
@@ -75,26 +75,21 @@ define([
7575
observable = config;
7676
}
7777

78-
if (_.isEmpty(observable())) {
79-
if ($(element).datepicker('getDate')) {
80-
$(element).datepicker('setDate', null);
81-
$(element).blur();
78+
require(['moment', 'mage/utils/misc', 'mage/calendar'], function (moment, utils) {
79+
if (_.isEmpty(observable())) {
80+
newVal = null;
81+
} else {
82+
newVal = moment(
83+
observable(),
84+
utils.convertToMomentFormat(
85+
options.dateFormat + (options.showsTime ? ' ' + options.timeFormat : '')
86+
)
87+
).toDate();
8288
}
83-
} else {
84-
newVal = moment(
85-
observable(),
86-
utils.convertToMomentFormat(
87-
options.dateFormat + (options.showsTime ? ' ' + options.timeFormat : '')
88-
)
89-
).toDate();
9089

91-
if ($(element).datepicker('getDate') == null ||
92-
newVal.valueOf() !== $(element).datepicker('getDate').valueOf()
93-
) {
94-
$(element).datepicker('setDate', newVal);
95-
$(element).blur();
96-
}
97-
}
90+
$element.datepicker('setDate', newVal);
91+
$element.blur();
92+
});
9893
}
9994
};
10095
});

dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/ko/bind/datepicker.test.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ define([
88
'jquery',
99
'moment',
1010
'mageUtils',
11+
'mage/calendar',
1112
'Magento_Ui/js/lib/knockout/bindings/datepicker'
1213
], function (ko, $, moment, utils) {
1314
'use strict';
@@ -18,6 +19,7 @@ define([
1819
config;
1920

2021
beforeEach(function () {
22+
jasmine.clock().install();
2123
element = $('<input />');
2224
observable = ko.observable();
2325

@@ -38,6 +40,7 @@ define([
3840
});
3941

4042
afterEach(function () {
43+
jasmine.clock().uninstall();
4144
element.remove();
4245
});
4346

@@ -62,13 +65,17 @@ define([
6265
expectedDate = moment(date, utils.convertToMomentFormat(inputFormat)).toDate();
6366
observable(date);
6467

68+
jasmine.clock().tick(100);
69+
6570
expect(expectedDate.valueOf()).toEqual(element.datepicker('getDate').valueOf());
6671
});
6772

6873
it('clear picked date\'s value after clear observable value', function () {
6974
element.datepicker('setTimezoneDate').blur().trigger('change');
7075
observable('');
7176

77+
jasmine.clock().tick(100);
78+
7279
expect(null).toEqual(element.datepicker('getDate'));
7380
});
7481
});

0 commit comments

Comments
 (0)