Skip to content

Commit 3c31b03

Browse files
authored
Chat - group content and bubble elements should be attached to DOM before template render (T1304688)
1 parent a88e2b1 commit 3c31b03

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,10 @@ class MessageGroup extends Widget<Properties> {
113113

114114
_renderMessageBubble(message: Message): void {
115115
const $bubble = $('<div>')
116-
.data(MESSAGE_DATA_KEY, message);
116+
.data(MESSAGE_DATA_KEY, message)
117+
.appendTo(this._$messageBubbleContainer);
117118

118119
this._createComponent($bubble, MessageBubble, this._getMessageBubbleOptions(message));
119-
120-
this._$messageBubbleContainer.append($bubble);
121120
}
122121

123122
_getMessageBubbleOptions(message: Message): MessageBubbleProperties {
@@ -145,7 +144,9 @@ class MessageGroup extends Widget<Properties> {
145144
}
146145

147146
_renderMessageBubbles(items: Message[]): void {
148-
this._$messageBubbleContainer = $('<div>').addClass(CHAT_MESSAGEGROUP_CONTENT_CLASS);
147+
this._$messageBubbleContainer = $('<div>')
148+
.addClass(CHAT_MESSAGEGROUP_CONTENT_CLASS)
149+
.appendTo(this.element());
149150

150151
items.forEach((message, index) => {
151152
const shouldCreateEditedElement = index !== 0 && message.type !== 'image' && (message as TextMessage).isEdited === true && !message.isDeleted;
@@ -158,8 +159,6 @@ class MessageGroup extends Widget<Properties> {
158159

159160
this._renderMessageBubble(message);
160161
});
161-
162-
this._$messageBubbleContainer.appendTo(this.element());
163162
}
164163

165164
_renderMessageGroupInformation(message: Message, shouldRenderEditedMessage?: boolean): void {

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import localization from 'localization';
88
const AVATAR_CLASS = 'dx-avatar';
99
const CHAT_MESSAGEGROUP_TIME_CLASS = 'dx-chat-messagegroup-time';
1010
const CHAT_MESSAGEBUBBLE_CLASS = 'dx-chat-messagebubble';
11+
const CHAT_MESSAGEGROUP_CONTENT_CLASS = 'dx-chat-messagegroup-content';
1112
const CHAT_MESSAGEGROUP_AUTHOR_NAME_CLASS = 'dx-chat-messagegroup-author-name';
1213
const CHAT_MESSAGE_EDITED_TEXT_CLASS = 'dx-chat-message-edited-text';
1314

@@ -310,6 +311,21 @@ QUnit.module('MessageGroup', moduleConfig, () => {
310311
assert.strictEqual(messageTemplate.callCount, 1, 'messageTemplate function was called on bubble template render');
311312
assert.deepEqual(messageTemplate.lastCall.args[0], message, 'messageTemplate function was called with correct data');
312313
});
314+
315+
QUnit.test('Group content and bubble elements should be attached to DOM before template is rendrered (T1304688)', function(assert) {
316+
assert.expect(2);
317+
318+
this.reinit({
319+
items: [{ text: 'some text' }],
320+
messageTemplate: () => {
321+
const $groupContent = this.$element.find(`.${CHAT_MESSAGEGROUP_CONTENT_CLASS}`);
322+
const $bubble = this.$element.find(`.${CHAT_MESSAGEBUBBLE_CLASS}`);
323+
324+
assert.strictEqual($groupContent.length, 1, 'group content element exists');
325+
assert.strictEqual($bubble.length, 1, 'bubble element exists');
326+
},
327+
});
328+
});
313329
});
314330

315331
QUnit.module('localization', moduleConfig, () => {

0 commit comments

Comments
 (0)