diff --git a/js/forum/src/components/IndexPage.js b/js/forum/src/components/IndexPage.js index c48fb7020..8fedbfbb0 100644 --- a/js/forum/src/components/IndexPage.js +++ b/js/forum/src/components/IndexPage.js @@ -143,7 +143,7 @@ export default class IndexPage extends Page { */ sidebarItems() { const items = new ItemList(); - const canStartDiscussion = app.forum.canStartDiscussion() || !app.session.user; + const canStartDiscussion = app.forum.attribute('canStartDiscussion') || !app.session.user; items.add('newDiscussion', Button.component({ diff --git a/js/lib/Component.js b/js/lib/Component.js index 8f36306ea..1de36640f 100644 --- a/js/lib/Component.js +++ b/js/lib/Component.js @@ -34,7 +34,7 @@ export default class Component { * @param {Array|Object} children * @public */ - constructor(props = {}, children) { + constructor(props = {}, children = null) { if (children) props.children = children; this.constructor.initProps(props); @@ -158,6 +158,7 @@ export default class Component { * * @see https://lhorie.github.io/mithril/mithril.component.html * @param {Object} [props] Properties to set on the component + * @param children * @return {Object} The Mithril component object * @property {function} controller * @property {function} view @@ -165,7 +166,7 @@ export default class Component { * @property {Object} props The props that were passed to the component * @public */ - static component(props = {}, children) { + static component(props = {}, children = null) { const componentProps = Object.assign({}, props); if (children) componentProps.children = children; diff --git a/js/lib/Model.js b/js/lib/Model.js index 23c4597be..6d7fa0ca2 100644 --- a/js/lib/Model.js +++ b/js/lib/Model.js @@ -10,7 +10,7 @@ export default class Model { * @param {Store} store The data store that this model should be persisted to. * @public */ - constructor(data = {}, store) { + constructor(data = {}, store = null) { /** * The resource object from the API. * diff --git a/js/lib/models/Discussion.js b/js/lib/models/Discussion.js index 472caf895..210286075 100644 --- a/js/lib/models/Discussion.js +++ b/js/lib/models/Discussion.js @@ -5,7 +5,9 @@ import ItemList from 'flarum/utils/ItemList'; import { slug } from 'flarum/utils/string'; import Badge from 'flarum/components/Badge'; -export default class Discussion extends mixin(Model, { +export default class Discussion extends Model {} + +Object.assign(Discussion.prototype, { title: Model.attribute('title'), slug: computed('title', slug), @@ -35,8 +37,8 @@ export default class Discussion extends mixin(Model, { canReply: Model.attribute('canReply'), canRename: Model.attribute('canRename'), canHide: Model.attribute('canHide'), - canDelete: Model.attribute('canDelete') -}) { + canDelete: Model.attribute('canDelete'), + /** * Remove a post from the discussion's posts relationship. * @@ -55,7 +57,7 @@ export default class Discussion extends mixin(Model, { } }); } - } + }, /** * Get the estimated number of unread posts in this discussion for the current @@ -72,7 +74,7 @@ export default class Discussion extends mixin(Model, { } return 0; - } + }, /** * Get the Badge components that apply to this discussion. @@ -88,7 +90,7 @@ export default class Discussion extends mixin(Model, { } return items; - } + }, /** * Get a list of all of the post IDs in this discussion. @@ -99,4 +101,6 @@ export default class Discussion extends mixin(Model, { postIds() { return this.data.relationships.posts.data.map(link => link.id); } -} +}); + +export default Discussion; diff --git a/js/lib/models/Forum.js b/js/lib/models/Forum.js index bdda47170..00e0119db 100644 --- a/js/lib/models/Forum.js +++ b/js/lib/models/Forum.js @@ -1,9 +1,7 @@ import Model from 'flarum/Model'; import mixin from 'flarum/utils/mixin'; -export default class Forum extends mixin(Model, { - canStartDiscussion: Model.attribute('canStartDiscussion') -}) { +export default class Forum extends Model { apiEndpoint() { return '/forum'; } diff --git a/js/lib/models/Group.js b/js/lib/models/Group.js index 31be54173..1a1a6c645 100644 --- a/js/lib/models/Group.js +++ b/js/lib/models/Group.js @@ -1,12 +1,14 @@ import Model from 'flarum/Model'; import mixin from 'flarum/utils/mixin'; -class Group extends mixin(Model, { +class Group extends Model {} + +Object.assign(Group.prototype, { nameSingular: Model.attribute('nameSingular'), namePlural: Model.attribute('namePlural'), color: Model.attribute('color'), icon: Model.attribute('icon') -}) {} +}); Group.ADMINISTRATOR_ID = '1'; Group.GUEST_ID = '2'; diff --git a/js/lib/models/Notification.js b/js/lib/models/Notification.js index c50d8393c..7a03acbc7 100644 --- a/js/lib/models/Notification.js +++ b/js/lib/models/Notification.js @@ -2,7 +2,9 @@ import Model from 'flarum/Model'; import mixin from 'flarum/utils/mixin'; import computed from 'flarum/utils/computed'; -export default class Notification extends mixin(Model, { +export default class Notification extends Model {} + +Object.assign(Notification.prototype, { contentType: Model.attribute('contentType'), subjectId: Model.attribute('subjectId'), content: Model.attribute('content'), @@ -15,4 +17,6 @@ export default class Notification extends mixin(Model, { user: Model.hasOne('user'), sender: Model.hasOne('sender'), subject: Model.hasOne('subject') -}) {} +}); + +export default Notification; \ No newline at end of file diff --git a/js/lib/models/Post.js b/js/lib/models/Post.js index f8e91b9ef..43b6d5156 100644 --- a/js/lib/models/Post.js +++ b/js/lib/models/Post.js @@ -3,7 +3,9 @@ import mixin from 'flarum/utils/mixin'; import computed from 'flarum/utils/computed'; import { getPlainContent } from 'flarum/utils/string'; -export default class Post extends mixin(Model, { +export default class Post extends Model {} + +Object.assign(Post.prototype, { number: Model.attribute('number'), discussion: Model.hasOne('discussion'), @@ -24,4 +26,6 @@ export default class Post extends mixin(Model, { canEdit: Model.attribute('canEdit'), canDelete: Model.attribute('canDelete') -}) {} +}); + +export default Post; diff --git a/js/lib/models/User.js b/js/lib/models/User.js index 7e3fb5b9e..a1b231654 100644 --- a/js/lib/models/User.js +++ b/js/lib/models/User.js @@ -7,7 +7,9 @@ import ItemList from 'flarum/utils/ItemList'; import computed from 'flarum/utils/computed'; import GroupBadge from 'flarum/components/GroupBadge'; -export default class User extends mixin(Model, { +export default class User extends Model {} + +Object.assign(User.prototype, { username: Model.attribute('username'), email: Model.attribute('email'), isActivated: Model.attribute('isActivated'), @@ -45,8 +47,8 @@ export default class User extends mixin(Model, { } return '#' + stringToColor(username); - }) -}) { + }), + /** * Check whether or not the user has been seen in the last 5 minutes. * @@ -55,7 +57,7 @@ export default class User extends mixin(Model, { */ isOnline() { return this.lastSeenTime() > moment().subtract(5, 'minutes').toDate(); - } + }, /** * Get the Badge components that apply to this user. @@ -73,7 +75,7 @@ export default class User extends mixin(Model, { } return items; - } + }, /** * Calculate the dominant color of the user's avatar. The dominant color will @@ -92,7 +94,7 @@ export default class User extends mixin(Model, { m.redraw(); }; image.src = this.avatarUrl(); - } + }, /** * Update the user's preferences. @@ -107,4 +109,6 @@ export default class User extends mixin(Model, { return this.save({preferences}); } -} +}); + +export default User;