Skip to content

Commit 5c334e7

Browse files
fix: update last consummed index and improve scroll manage
1 parent 05749db commit 5c334e7

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

src/components/chat/messager.vue

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
</chat-header>
1414

1515
<div class="message-list">
16-
<div
16+
<transition-group
1717
v-if="messages"
18+
name="fade-message"
1819
class="message-container chat-scroller"
1920
ref="MessageContainer"
2021
:class="{ 'quiet-loading': isLoading }"
@@ -29,10 +30,9 @@
2930
:previous-message="index > 0 ? messages[index - 1] : {}"
3031
:members="members"
3132
:message="message"
32-
>
33-
</messager-item>
33+
/>
3434
<!-- End of message Item -->
35-
</div>
35+
</transition-group>
3636
</div>
3737

3838
<!-- Message Box toolbar -->
@@ -122,6 +122,12 @@ export default {
122122
this.$emit("opened", this.channel.sid);
123123
},
124124
immediate: true
125+
},
126+
isFocused(value) {
127+
const len = this.messages.length;
128+
if (value && len > 0) {
129+
this.setLastConsumedIndex(this.messages[0].index);
130+
}
125131
}
126132
},
127133
computed: {
@@ -150,11 +156,6 @@ export default {
150156
created() {
151157
this.getDescription();
152158
},
153-
mounted() {
154-
setTimeout(() => {
155-
this.scrollToBottom();
156-
});
157-
},
158159
beforeDestroy() {
159160
this.removeActiveChannelListeners();
160161
},
@@ -232,15 +233,6 @@ export default {
232233
}
233234
},
234235
235-
scrollToBottom(behavior) {
236-
this.$nextTick(() => {
237-
const el = this.$refs.MessageContainer;
238-
if (el) {
239-
el.scrollTo({ top: el.scrollHeight, behavior });
240-
}
241-
});
242-
},
243-
244236
removeActiveChannelListeners() {
245237
if (this.channel) {
246238
this.channel.removeListener("messageAdded", this.addMessage);
@@ -249,16 +241,10 @@ export default {
249241
},
250242
251243
getMessages() {
252-
this.getMessagesFunc();
253-
},
254-
255-
getMessagesFunc() {
256244
this.channel.getMessages(30).then(page => {
257-
this.messages = page.items || [];
258-
this.scrollToBottom();
259-
const lastIndex = this.messages.length - 1;
260-
if (lastIndex >= 0 && this.isFocused) {
261-
this.setLastConsumedIndex(this.messages[lastIndex].index);
245+
this.messages = page.items.reverse() || [];
246+
if (this.isFocused && this.messages.length) {
247+
this.setLastConsumedIndex(this.messages[0].index);
262248
}
263249
this.channel.on("messageAdded", this.addMessage);
264250
this.channel.on("memberUpdated", this.updateMembers);
@@ -281,9 +267,8 @@ export default {
281267
},
282268
283269
addMessage(message) {
284-
this.messages.push(message);
270+
this.messages.unshift(message);
285271
this.setLastConsumedIndex(message.index);
286-
this.scrollToBottom("smooth");
287272
},
288273
289274
setLastConsumedIndex(index) {
@@ -349,6 +334,8 @@ export default {
349334
display: block;
350335
width: 100%;
351336
height: 100%;
337+
display: flex;
338+
flex-direction: column-reverse;
352339
overflow-x: hidden;
353340
overflow-y: scroll;
354341
}
@@ -374,6 +361,7 @@ export default {
374361
white-space: pre-wrap;
375362
width: 100%;
376363
border: 0;
364+
resize: none;
377365
378366
&:focus {
379367
outline: none;
@@ -403,4 +391,17 @@ export default {
403391
width: 220px !important;
404392
border: 2px solid #ccc;
405393
}
394+
395+
.fade-message-enter {
396+
opacity: 0;
397+
}
398+
399+
.fade-message-enter-active {
400+
transition: opacity 0.5s;
401+
}
402+
403+
.fade-message-leave-active {
404+
transition: opacity 0.2s;
405+
opacity: 0;
406+
}
406407
</style>

0 commit comments

Comments
 (0)