Commit a4e5130f authored by Alexander Turinske's avatar Alexander Turinske

Fix issue with reactivity with a prop

- found issue where prop array was being used in the data object
  and was not updating properly
- switched it to a computed property
- update data manipulation
parent 53ce3876
...@@ -38,22 +38,13 @@ export default { ...@@ -38,22 +38,13 @@ export default {
data: () => ({ data: () => ({
discussionsDictionary: {}, discussionsDictionary: {},
poll: null,
lastFetchedAt: null, lastFetchedAt: null,
}), }),
computed: { computed: {
discussions: { discussions() {
get() {
return Object.values(this.discussionsDictionary); return Object.values(this.discussionsDictionary);
}, },
set(newDiscussions) {
this.discussionsDictionary = newDiscussions.reduce((acc, discussion) => {
acc[discussion.id] = discussion;
return acc;
}, {});
},
},
noteDictionary() { noteDictionary() {
return this.discussions return this.discussions
.flatMap(x => x.notes) .flatMap(x => x.notes)
...@@ -136,26 +127,26 @@ export default { ...@@ -136,26 +127,26 @@ export default {
notes.forEach(note => { notes.forEach(note => {
// If the note exists, update it. // If the note exists, update it.
if (this.noteDictionary[note.id]) { if (this.noteDictionary[note.id]) {
const updatedDiscussion = this.discussionsDictionary[note.discussion_id]; const updatedDiscussion = { ...this.discussionsDictionary[note.discussion_id] };
const index = updatedDiscussion.notes.findIndex(curr => curr.id === note.id); updatedDiscussion.notes = updatedDiscussion.notes.map(curr =>
updatedDiscussion.notes.splice(index, 1, note); curr.id === note.id ? note : curr,
this.$set(this.discussionsDictionary, note.discussion_id, updatedDiscussion); );
this.discussionsDictionary[note.discussion_id] = updatedDiscussion;
} }
// If the note doesn't exist, but the discussion does, add the note to the discussion. // If the note doesn't exist, but the discussion does, add the note to the discussion.
else if (this.discussionsDictionary[note.discussion_id]) { else if (this.discussionsDictionary[note.discussion_id]) {
const updatedDiscussion = this.discussionsDictionary[note.discussion_id]; const updatedDiscussion = { ...this.discussionsDictionary[note.discussion_id] };
updatedDiscussion.notes.push(note); updatedDiscussion.notes.push(note);
this.$set(this.discussionsDictionary, note.discussion_id, updatedDiscussion); this.discussionsDictionary[note.discussion_id] = updatedDiscussion;
} }
// If the discussion doesn't exist, create it. // If the discussion doesn't exist, create it.
else { else {
const newDiscussions = [...this.discussions]; const newDiscussion = {
newDiscussions.push({
id: note.discussion_id, id: note.discussion_id,
reply_id: note.discussion_id, reply_id: note.discussion_id,
notes: [note], notes: [note],
}); };
this.discussions = newDiscussions; this.$set(this.discussionsDictionary, newDiscussion.id, newDiscussion);
} }
}); });
}, },
......
...@@ -27,6 +27,11 @@ export default { ...@@ -27,6 +27,11 @@ export default {
return this.notes.filter(x => x !== this.systemNote); return this.notes.filter(x => x !== this.systemNote);
}, },
}, },
watch: {
discussion(newDiscussion) {
this.notes = newDiscussion.notes;
},
},
methods: { methods: {
addComment(comment) { addComment(comment) {
this.notes.push(comment); this.notes.push(comment);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment