summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorHarrison Healey <harrisonmhealey@gmail.com>2017-04-04 00:21:15 -0400
committerCorey Hulen <corey@hulen.com>2017-04-03 21:21:15 -0700
commit63cdb89144f27929928f819b4ffae936ff79ac15 (patch)
treec732d2f8955dbd857a6c29bb04a720a35f767d48 /webapp
parent0a81dd9fff606d041ee08c62c655bf6966c7a66a (diff)
downloadchat-63cdb89144f27929928f819b4ffae936ff79ac15.tar.gz
chat-63cdb89144f27929928f819b4ffae936ff79ac15.tar.bz2
chat-63cdb89144f27929928f819b4ffae936ff79ac15.zip
PLT-6147 Fixed reactions not rendering properly while loading (#5958)
Diffstat (limited to 'webapp')
-rw-r--r--webapp/components/post_view/components/reaction_list_container.jsx18
-rw-r--r--webapp/components/post_view/components/reaction_list_view.jsx20
-rw-r--r--webapp/sass/layout/_post.scss4
-rw-r--r--webapp/stores/reaction_store.jsx36
4 files changed, 38 insertions, 40 deletions
diff --git a/webapp/components/post_view/components/reaction_list_container.jsx b/webapp/components/post_view/components/reaction_list_container.jsx
index 906145eed..cdc58003b 100644
--- a/webapp/components/post_view/components/reaction_list_container.jsx
+++ b/webapp/components/post_view/components/reaction_list_container.jsx
@@ -81,16 +81,12 @@ export default class ReactionListContainer extends React.Component {
}
render() {
- if (this.props.post.has_reactions && this.state.reactions.length > 0) {
- return (
- <ReactionListView
- post={this.props.post}
- reactions={this.state.reactions}
- emojis={this.state.emojis}
- />
- );
- }
-
- return null;
+ return (
+ <ReactionListView
+ post={this.props.post}
+ reactions={this.state.reactions}
+ emojis={this.state.emojis}
+ />
+ );
}
}
diff --git a/webapp/components/post_view/components/reaction_list_view.jsx b/webapp/components/post_view/components/reaction_list_view.jsx
index c322ce727..b6c4b3a19 100644
--- a/webapp/components/post_view/components/reaction_list_view.jsx
+++ b/webapp/components/post_view/components/reaction_list_view.jsx
@@ -13,17 +13,23 @@ export default class ReactionListView extends React.Component {
}
render() {
+ if (!this.props.post.has_reactions || (this.props.reactions && this.props.reactions.length === 0)) {
+ return null;
+ }
+
const reactionsByName = new Map();
const emojiNames = [];
- for (const reaction of this.props.reactions) {
- const emojiName = reaction.emoji_name;
+ if (this.props.reactions) {
+ for (const reaction of this.props.reactions) {
+ const emojiName = reaction.emoji_name;
- if (reactionsByName.has(emojiName)) {
- reactionsByName.get(emojiName).push(reaction);
- } else {
- emojiNames.push(emojiName);
- reactionsByName.set(emojiName, [reaction]);
+ if (reactionsByName.has(emojiName)) {
+ reactionsByName.get(emojiName).push(reaction);
+ } else {
+ emojiNames.push(emojiName);
+ reactionsByName.set(emojiName, [reaction]);
+ }
}
}
diff --git a/webapp/sass/layout/_post.scss b/webapp/sass/layout/_post.scss
index 751980c43..a3b228241 100644
--- a/webapp/sass/layout/_post.scss
+++ b/webapp/sass/layout/_post.scss
@@ -1287,10 +1287,6 @@ form {
.post-reaction-list {
min-height: 30px;
-
- &:empty {
- display: none;
- }
}
.post-reaction {
diff --git a/webapp/stores/reaction_store.jsx b/webapp/stores/reaction_store.jsx
index 166569e3d..51ad5140e 100644
--- a/webapp/stores/reaction_store.jsx
+++ b/webapp/stores/reaction_store.jsx
@@ -37,36 +37,36 @@ class ReactionStore extends EventEmitter {
}
addReaction(postId, reaction) {
- const reactions = [];
-
- for (const existing of this.getReactions(postId)) {
- // make sure not to add duplicates
- if (existing.user_id !== reaction.user_id || existing.post_id !== reaction.post_id ||
- existing.emoji_name !== reaction.emoji_name) {
- reactions.push(existing);
- }
- }
+ let reactions = this.getReactions(postId) || [];
+
+ // Make sure not to add duplicates
+ const existingIndex = reactions.findIndex((existing) => {
+ return existing.user_id === reaction.user_id && existing.post_id === reaction.post_id && existing.emoji_name === reaction.emoji_name;
+ });
- reactions.push(reaction);
+ if (existingIndex === -1) {
+ reactions = [...reactions, reaction];
+ }
this.setReactions(postId, reactions);
}
removeReaction(postId, reaction) {
- const reactions = [];
+ let reactions = this.getReactions(postId) || [];
+
+ const existingIndex = reactions.findIndex((existing) => {
+ return existing.user_id === reaction.user_id && existing.post_id === reaction.post_id && existing.emoji_name === reaction.emoji_name;
+ });
- for (const existing of this.getReactions(postId)) {
- if (existing.user_id !== reaction.user_id || existing.post_id !== reaction.post_id ||
- existing.emoji_name !== reaction.emoji_name) {
- reactions.push(existing);
- }
+ if (existingIndex !== -1) {
+ reactions = reactions.slice(0, existingIndex).concat(reactions.slice(existingIndex + 1));
}
this.setReactions(postId, reactions);
}
getReactions(postId) {
- return this.reactions.get(postId) || [];
+ return this.reactions.get(postId);
}
handleEventPayload(payload) {
@@ -89,4 +89,4 @@ class ReactionStore extends EventEmitter {
}
}
-export default new ReactionStore(); \ No newline at end of file
+export default new ReactionStore();