Migrate poll plugin to use components

This commit is contained in:
Robin Ward
2016-11-21 14:49:00 -05:00
parent 7d37c2b919
commit 28061316ad
5 changed files with 29 additions and 57 deletions
@@ -1,7 +1,16 @@
import { ajax } from 'discourse/lib/ajax';
import { default as computed, observes } from "ember-addons/ember-computed-decorators";
import { ajax } from 'discourse/lib/ajax';
export default Ember.Component.extend({
layoutName: 'components/discourse-poll',
classNames: ["poll"],
attributeBindings: ["data-poll-type", "data-poll-name", "data-poll-status", "data-poll-public"],
"data-poll-type": Ember.computed.alias("poll.type"),
"data-poll-name": Ember.computed.alias("poll.name"),
"data-poll-status": Ember.computed.alias("poll.status"),
"data-poll-public": Ember.computed.alias("poll.public"),
export default Ember.Controller.extend({
isMultiple: Ember.computed.equal("poll.type", "multiple"),
isNumber: Ember.computed.equal("poll.type", "number"),
isClosed: Ember.computed.equal("poll.status", "closed"),
@@ -11,10 +20,10 @@ export default Ember.Controller.extend({
// - poll is closed
// - topic is archived
// - user wants to see the results
showingResults: Em.computed.or("isClosed", "post.topic.archived", "showResults"),
showingResults: Ember.computed.or("isClosed", "post.topic.archived", "showResults"),
showResultsDisabled: Em.computed.equal("poll.voters", 0),
hideResultsDisabled: Em.computed.or("isClosed", "post.topic.archived"),
showResultsDisabled: Ember.computed.equal("poll.voters", 0),
hideResultsDisabled: Ember.computed.or("isClosed", "post.topic.archived"),
@observes("post.polls")
_updatePoll() {
@@ -1,20 +1,10 @@
import { withPluginApi } from 'discourse/lib/plugin-api';
import { observes } from "ember-addons/ember-computed-decorators";
function createPollView(container, post, poll, vote, publicPoll) {
const controller = container.lookup("controller:poll", { singleton: false });
const view = container.lookup("view:poll");
controller.setProperties({
model: poll,
vote: vote,
public: publicPoll,
post
});
view.set("controller", controller);
return view;
function createPollComponent(container, post, poll, vote) {
const component = container.lookup("component:discourse-poll");
component.setProperties({ model: poll, vote, post });
return component;
}
let _pollViews;
@@ -89,20 +79,18 @@ function initializePolls(api) {
const $poll = $(pollElem);
const pollName = $poll.data("poll-name");
const publicPoll = $poll.data("poll-public");
const pollId = `${pollName}-${post.id}`;
const pollView = createPollView(
const pollComponent = createPollComponent(
helper.container,
post,
polls[pollName],
votes[pollName],
publicPoll
votes[pollName]
);
$poll.replaceWith($div);
Em.run.schedule('afterRender', () => pollView.renderer.replaceIn(pollView, $div[0]));
postPollViews[pollId] = pollView;
Em.run.schedule('afterRender', () => pollComponent.renderer.replaceIn(pollComponent, $div[0]));
postPollViews[pollId] = pollComponent;
});
_pollViews = postPollViews;
@@ -1,12 +0,0 @@
export default Em.View.extend({
templateName: "poll",
classNames: ["poll"],
attributeBindings: ["data-poll-type", "data-poll-name", "data-poll-status", "data-poll-public"],
poll: Em.computed.alias("controller.poll"),
"data-poll-type": Em.computed.alias("poll.type"),
"data-poll-name": Em.computed.alias("poll.name"),
"data-poll-status": Em.computed.alias("poll.status"),
"data-poll-public": Em.computed.alias("poll.public")
});