Skip to content

Commit

Permalink
PLT-6147 Fixed reactions not rendering properly while loading
Browse files Browse the repository at this point in the history
  • Loading branch information
hmhealey committed Apr 3, 2017
1 parent 36c74d7 commit 5b0439b
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 40 deletions.
18 changes: 7 additions & 11 deletions webapp/components/post_view/components/reaction_list_container.jsx
Expand Up @@ -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}
/>
);
}
}
20 changes: 13 additions & 7 deletions webapp/components/post_view/components/reaction_list_view.jsx
Expand Up @@ -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]);
}
}
}

Expand Down
4 changes: 0 additions & 4 deletions webapp/sass/layout/_post.scss
Expand Up @@ -1287,10 +1287,6 @@ form {

.post-reaction-list {
min-height: 30px;

&:empty {
display: none;
}
}

.post-reaction {
Expand Down
36 changes: 18 additions & 18 deletions webapp/stores/reaction_store.jsx
Expand Up @@ -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) {
Expand All @@ -89,4 +89,4 @@ class ReactionStore extends EventEmitter {
}
}

export default new ReactionStore();
export default new ReactionStore();

0 comments on commit 5b0439b

Please sign in to comment.