group messages when by same user

This commit is contained in:
supertiger1234 2020-02-16 13:29:25 +00:00
parent ed303363f0
commit 074ff1b090
3 changed files with 63 additions and 22 deletions

View file

@ -15,7 +15,6 @@
</div> </div>
</div> </div>
<message <message
class="message-container"
v-for="(msg, index) in selectedChannelMessages" v-for="(msg, index) in selectedChannelMessages"
:class="{ :class="{
'show-message-animation': index === selectedChannelMessages.length - 1 'show-message-animation': index === selectedChannelMessages.length - 1
@ -24,8 +23,9 @@
:creator="msg.creator" :creator="msg.creator"
:message="msg" :message="msg"
:isServer="isServer" :isServer="isServer"
:hideAditional="groupedMessages.includes(msg.messageID)"
/> />
<!-- {{ groupedMessages }} -->
<uploadsQueue v-if="uploadQueue !== undefined" :queue="uploadQueue" /> <uploadsQueue v-if="uploadQueue !== undefined" :queue="uploadQueue" />
<div <div
class="load-more-button" class="load-more-button"
@ -321,6 +321,32 @@ export default {
return ( return (
this.$store.getters.bottomUnloaded[this.selectedChannelID] || false this.$store.getters.bottomUnloaded[this.selectedChannelID] || false
); );
},
groupedMessages() {
const messages = this.selectedChannelMessages;
const grouped = [];
let groupLength = 0;
let prevMessageCreator = null;
for (let index = 0; index < messages.length; index++) {
const message = messages[index];
if (message.type !== 0 && message.type !== undefined) {
groupLength = 0;
prevMessageCreator = null;
continue;
}
if (message.creator.uniqueID !== prevMessageCreator) {
groupLength = 0;
prevMessageCreator = message.creator.uniqueID;
} else {
if (groupLength > 3) {
groupLength = 0;
continue;
}
grouped.push(message.messageID);
groupLength += 1;
}
}
return grouped;
} }
} }
}; };

View file

@ -1,7 +1,7 @@
<template> <template>
<div <div
class="container" class="message-container container"
:class="{ 'mentioned-message': mentioned }" :class="{ 'mentioned-message': mentioned, hideAditional }"
@mouseover="mouseOverEvent" @mouseover="mouseOverEvent"
@mouseleave="hover = false" @mouseleave="hover = false"
> >
@ -18,6 +18,7 @@
> >
<div class="avatar"> <div class="avatar">
<profile-picture <profile-picture
v-if="!hideAditional"
:admin="creator.admin" :admin="creator.admin"
:url="`${userAvatar}${hover || !isGif ? '' : '?type=webp'}`" :url="`${userAvatar}${hover || !isGif ? '' : '?type=webp'}`"
size="50px" size="50px"
@ -26,10 +27,10 @@
/> />
</div> </div>
<div class="triangle"> <div class="triangle">
<div class="triangle-inner" /> <div class="triangle-inner" v-if="!hideAditional" />
</div> </div>
<div class="content" @dblclick="contentDoubleClickEvent"> <div class="content" @dblclick="contentDoubleClickEvent">
<div class="user-info"> <div class="user-info" v-if="!hideAditional">
<div <div
class="username" class="username"
:style="{ color: roleColor }" :style="{ color: roleColor }"
@ -150,7 +151,7 @@ import windowProperties from "@/utils/windowProperties";
import { mapState } from "vuex"; import { mapState } from "vuex";
export default { export default {
props: ["creator", "message", "isServer"], props: ["creator", "message", "isServer", "hideAditional"],
components: { components: {
ProfilePicture, ProfilePicture,
messageEmbedTemplate, messageEmbedTemplate,
@ -385,7 +386,19 @@ $message-color: rgba(0, 0, 0, 0.3);
position: relative; position: relative;
z-index: 1; z-index: 1;
} }
.hideAditional {
.content {
border-radius: 4px;
}
.avatar {
height: 46px;
flex-shrink: 0;
}
.triangle {
width: 8px;
flex-shrink: 0;
}
}
.drop-down-button { .drop-down-button {
opacity: 0; opacity: 0;
transition: 0.2s; transition: 0.2s;
@ -513,6 +526,8 @@ $message-color: rgba(0, 0, 0, 0.3);
.avatar { .avatar {
margin: auto 0 0 0; margin: auto 0 0 0;
height: 56px;
width: 56px;
} }
.triangle { .triangle {

View file

@ -2,30 +2,25 @@
<div class="my-profile-panel message-design"> <div class="my-profile-panel message-design">
<div class="message-example"> <div class="message-example">
<message-template <message-template
message="Hi" :message="{ message: 'Hi', created: Date.now() }"
:username="user.username" :creator="user"
:date="Date.now()" :date="Date.now()"
:unique-i-d="user.uniqueID"
:admin="user.admin" :admin="user.admin"
:avatar="user.avatar"
/> />
<message-template <message-template
message="Hello." :message="{ message: 'Hello.', created: Date.now() }"
username="Cool Dude" :creator="dummyUser"
:date="Date.now()" :date="Date.now()"
/> />
<message-template <message-template
message="Whaddup" :message="{ message: 'Whaddup', created: Date.now() }"
:username="user.username" :creator="user"
:date="Date.now()" :date="Date.now()"
:unique-i-d="user.uniqueID"
:admin="user.admin" :admin="user.admin"
:avatar="user.avatar"
/> />
<message-template <message-template
message="Nothing, bye." :message="{ message: 'Nothing, bye.', created: Date.now() }"
username="Cool Dude" :creator="dummyUser"
:date="Date.now()"
/> />
</div> </div>
<div class="options"> <div class="options">
@ -82,7 +77,12 @@ export default {
MessageTemplate MessageTemplate
}, },
data() { data() {
return {}; return {
dummyUser: {
username: "Cool Dude",
uniqueID: "dummy"
}
};
}, },
computed: { computed: {
apperance() { apperance() {