Skip to content

Commit b017efd

Browse files
Splitter, MessageList: unobserve ResizeObserver on detach (T1311706) (#31514)
1 parent c940a81 commit b017efd

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

packages/devextreme/js/__internal/ui/chat/messagelist.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,7 @@ class MessageList extends Widget<Properties> {
776776

777777
_clean(): void {
778778
this._lastMessageDate = null;
779+
resizeObserverSingleton.unobserve(this.$element().get(0));
779780

780781
super._clean();
781782
}

packages/devextreme/js/__internal/ui/splitter/splitter.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,11 @@ class Splitter extends CollectionWidgetLiveUpdate<Properties> {
11261126
getLayout(): number[] {
11271127
return this._layout ?? [];
11281128
}
1129+
1130+
_clean(): void {
1131+
resizeObserverSingleton.unobserve(this.$element().get(0));
1132+
super._clean();
1133+
}
11291134
}
11301135

11311136
registerComponent('dxSplitter', Splitter);

packages/devextreme/testing/tests/DevExpress.ui.widgets/chatParts/messageList.tests.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import TypingIndicator from '__internal/ui/chat/typingindicator';
2323
import devices from '__internal/core/m_devices';
2424
import localization from 'localization';
2525
import dateLocalization from 'common/core/localization/date';
26+
import resizeObserverSingleton from 'core/resize_observer';
2627

2728
const CHAT_MESSAGELIST_CONTENT_CLASS = 'dx-chat-messagelist-content';
2829
const CHAT_MESSAGELIST_EMPTY_MESSAGE_CLASS = 'dx-chat-messagelist-empty-message';
@@ -1932,6 +1933,19 @@ QUnit.module('MessageList', () => {
19321933
}
19331934
});
19341935
});
1936+
1937+
QUnit.test('Should unobserve element on detach (T1311706)', function(assert) {
1938+
sinon.stub(resizeObserverSingleton, 'unobserve');
1939+
1940+
const instance = new MessageList($('#component'));
1941+
const $element = $(instance.$element());
1942+
1943+
$element.remove();
1944+
1945+
assert.strictEqual(resizeObserverSingleton.unobserve.callCount, 2);
1946+
1947+
resizeObserverSingleton.unobserve.restore();
1948+
});
19351949
});
19361950

19371951

packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import config from 'core/config';
88
import { createEvent } from 'common/core/events/utils/index';
99
import { name as DOUBLE_CLICK_EVENT } from 'common/core/events/double_click';
1010
import { name as CLICK_EVENT } from 'common/core/events/click';
11+
import resizeObserverSingleton from 'core/resize_observer';
1112

1213
import 'generic_light.css!';
1314

@@ -1344,6 +1345,22 @@ QUnit.module('Pane sizing', moduleConfig, () => {
13441345

13451346
this.assertLayout(['0', '66.6677', '33.3339']);
13461347
});
1348+
1349+
QUnit.test('Should unobserve element on detach (T1311706)', function(assert) {
1350+
sinon.stub(resizeObserverSingleton, 'unobserve');
1351+
1352+
const $splitter = $('<div id="splitterDetached">');
1353+
1354+
$splitter.dxSplitter({
1355+
dataSource: [{ size: '30%' }, { size: '70%' }]
1356+
});
1357+
1358+
$splitter.remove();
1359+
1360+
assert.strictEqual(resizeObserverSingleton.unobserve.callCount, 2);
1361+
1362+
resizeObserverSingleton.unobserve.restore();
1363+
});
13471364
});
13481365

13491366
QUnit.module('Pane visibility', moduleConfig, () => {

0 commit comments

Comments
 (0)