Skip to content

Commit dd44edb

Browse files
committed
ACP2E-3275: [Cloud] - CMS Slider not reflecting the latest changes
1 parent 975aee1 commit dd44edb

File tree

2 files changed

+130
-2
lines changed
  • app/code/Magento/PageBuilder/view/adminhtml/web/js/form
  • dev/tests/js/jasmine/tests/app/code/Magento/PageBuilder/adminhtml/web/js/form

2 files changed

+130
-2
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/form/provider.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55

66
define([
77
'Magento_Ui/js/form/provider',
8-
'Magento_PageBuilder/js/events'
9-
], function (Provider, events) {
8+
'Magento_PageBuilder/js/events',
9+
'jquery'
10+
], function (Provider, events, $) {
1011
'use strict';
1112

1213
return Provider.extend({
@@ -18,8 +19,42 @@ define([
1819
/** @inheritdoc **/
1920
save: function () {
2021
events.trigger('form:' + this.id + ':saveAfter', this.get('data'));
22+
this._refreshSlickOnSave();
2123

2224
return this;
25+
},
26+
27+
/**
28+
* Refresh slick slide of parent window
29+
*
30+
* @private
31+
*/
32+
_refreshSlickOnSave: function () {
33+
let slickObj = $('.slick-list.draggable'),
34+
parentSlick,
35+
currentSettings;
36+
37+
if (slickObj.length === 0) {
38+
return;
39+
}
40+
41+
parentSlick = slickObj.parent();
42+
43+
if (typeof parentSlick.slick !== 'function') {
44+
return;
45+
}
46+
47+
currentSettings = parentSlick.slick('getSlick').options;
48+
49+
if (!currentSettings.infinite) {
50+
return;
51+
}
52+
53+
if (currentSettings.rows > 0) {
54+
parentSlick.slick('slickSetOption', 'rows', 0);
55+
}
56+
57+
parentSlick.slick('refresh');
2358
}
2459
});
2560
});
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/**
2+
* Copyright 2024 Adobe
3+
* All Rights Reserved.
4+
*/
5+
6+
define([
7+
'Magento_PageBuilder/js/form/provider',
8+
'Magento_PageBuilder/js/events',
9+
'jquery'
10+
], function (Provider, events, $) {
11+
'use strict';
12+
13+
describe('Magento_PageBuilder/js/form/provider', function () {
14+
let instance;
15+
16+
beforeEach(function () {
17+
instance = new Provider();
18+
spyOn(instance, 'get').and.returnValue({key: 'value'});
19+
spyOn(events, 'trigger');
20+
});
21+
22+
it('should initialize the client properly', function () {
23+
let result = instance.initClient();
24+
expect(result).toBe(instance);
25+
});
26+
27+
it('should trigger the saveAfter event with correct data', function () {
28+
instance.id = 'testId';
29+
instance.save();
30+
31+
expect(events.trigger).toHaveBeenCalledWith('form:testId:saveAfter', {key: 'value'});
32+
});
33+
34+
it('should trigger form saveAfter event and refresh slick if infinite is true', function () {
35+
const data = { key: 'value' };
36+
instance.set('data', data);
37+
38+
let slickMock = {
39+
options: { infinite: true, rows: 1},
40+
getSlick: function () {
41+
return { options: this.options };
42+
}
43+
};
44+
45+
let slickListMock = {
46+
length: 1,
47+
parent: jasmine.createSpy('parent').and.returnValue({
48+
slick: jasmine.createSpy('slick').and.returnValue(slickMock)
49+
})
50+
};
51+
52+
spyOn($.fn, 'find').and.returnValue(slickListMock);
53+
54+
const result = instance.save();
55+
56+
expect(events.trigger).toHaveBeenCalledWith('form:' + instance.id + ':saveAfter', data);
57+
expect($.fn.find).toHaveBeenCalledWith('.slick-list.draggable');
58+
expect($.fn.find().parent).toHaveBeenCalled();
59+
expect($.fn.find().parent().slick).toHaveBeenCalledWith('refresh');
60+
expect(result).toBe(instance);
61+
});
62+
63+
it('should not refresh slick if infinite is false', function () {
64+
const data = { key: 'value' };
65+
instance.set('data', data);
66+
67+
let slickMockFalse = {
68+
options: { infinite: false },
69+
getSlick: function () {
70+
return { options: this.options };
71+
}
72+
};
73+
74+
spyOn($.fn, 'find').and.returnValue(slickMockFalse);
75+
$.fn.find.and.returnValue({
76+
length: 1,
77+
parent: jasmine.createSpy('parent').and.returnValue({
78+
slick: jasmine.createSpy('slick').and.returnValue(slickMockFalse)
79+
})
80+
});
81+
82+
const result = instance.save();
83+
84+
expect(events.trigger).toHaveBeenCalledWith('form:' + instance.id + ':saveAfter', data);
85+
expect($('.slick-list.draggable').parent().slick.calls.count()).toBe(1);
86+
expect($.fn.find).toHaveBeenCalledWith('.slick-list.draggable');
87+
expect($.fn.find().parent).toHaveBeenCalled();
88+
expect($.fn.find().parent().slick).toHaveBeenCalled();
89+
expect($.fn.find().parent().slick).not.toHaveBeenCalledWith('refresh');
90+
expect(result).toBe(instance);
91+
});
92+
});
93+
});

0 commit comments

Comments
 (0)