From ac29ecaffe727e57077318535465dc9f2c3a8652 Mon Sep 17 00:00:00 2001 From: Toby Zerner Date: Mon, 11 May 2015 10:47:42 +0930 Subject: [PATCH] Make sure discussion list subtrees don't go missing. Fixes #66 --- .../forum/src/components/composer-discussion.js | 2 +- .../js/forum/src/components/discussion-list.js | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/framework/core/js/forum/src/components/composer-discussion.js b/framework/core/js/forum/src/components/composer-discussion.js index 5186406d4..e78b4c896 100644 --- a/framework/core/js/forum/src/components/composer-discussion.js +++ b/framework/core/js/forum/src/components/composer-discussion.js @@ -65,7 +65,7 @@ export default class ComposerDiscussion extends ComposerBody { app.store.createRecord('discussions').save(data).then(discussion => { app.composer.hide(); - app.cache.discussionList.discussions().unshift(discussion); + app.cache.discussionList.addDiscussion(discussion); m.route(app.route('discussion', { id: discussion.id(), slug: discussion.slug() })); }, response => { this.loading(false); diff --git a/framework/core/js/forum/src/components/discussion-list.js b/framework/core/js/forum/src/components/discussion-list.js index d00d59bd6..baa912ede 100644 --- a/framework/core/js/forum/src/components/discussion-list.js +++ b/framework/core/js/forum/src/components/discussion-list.js @@ -24,10 +24,6 @@ export default class DiscussionList extends Component { app.session.on('loggedIn', this.loggedInHandler = this.refresh.bind(this)) } - addSubtrees(discussions) { - - } - params() { var params = {}; for (var i in this.props.params) { @@ -78,11 +74,15 @@ export default class DiscussionList extends Component { this.loadResults(this.discussions().length).then((results) => this.parseResults(results)); } + initSubtree(discussion) { + this.subtrees[discussion.id()] = new SubtreeRetainer(() => discussion.freshness); + } + parseResults(results) { m.startComputation(); this.loading(false); - results.forEach(discussion => this.subtrees[discussion.id()] = new SubtreeRetainer(() => discussion.freshness)); + results.forEach(this.initSubtree.bind(this)); [].push.apply(this.discussions(), results); this.moreResults(!!results.payload.links.next); @@ -104,6 +104,11 @@ export default class DiscussionList extends Component { } } + addDiscussion(discussion) { + this.discussions().unshift(discussion); + this.initSubtree(discussion); + } + view() { return m('div', [ m('ul.discussions-list', [ @@ -119,7 +124,7 @@ export default class DiscussionList extends Component { var active = m.route().substr(0, discussionRoute.length) === discussionRoute; var subtree = this.subtrees[discussion.id()]; - return m('li.discussion-summary'+(isUnread ? '.unread' : '')+(active ? '.active' : ''), {key: discussion.id(), 'data-id': discussion.id()}, subtree.retain() || m('div', [ + return m('li.discussion-summary'+(isUnread ? '.unread' : '')+(active ? '.active' : ''), {key: discussion.id(), 'data-id': discussion.id()}, (subtree && subtree.retain()) || m('div', [ controls.length ? DropdownButton.component({ items: controls, className: 'contextual-controls',