Files

78 lines
2.1 KiB
JavaScript

import Ember from 'ember';
import BackNavigateable from 'flaredown/mixins/back-navigateable';
import SearchableDropdown from 'flaredown/mixins/searchable-dropdown';
import NavbarSearchable from 'flaredown/mixins/navbar-searchable';
const {
get,
set,
computed,
observer,
Controller,
getProperties,
setProperties,
run: {
debounce,
},
inject: {
service,
},
} = Ember;
export default Controller.extend(BackNavigateable, SearchableDropdown, NavbarSearchable, {
session: service(),
query: '',
searchFieldObserver: observer('query', function() {
debounce(this, this.searchPosts, 200);
}),
isFollowed: computed('model.topicFollowing.updatedAt', function() {
const { id, type, topicFollowing } = getProperties(get(this, 'model'), 'id', 'type', 'topicFollowing');
return get(topicFollowing, `${type}Ids`).includes(parseInt(id));
}),
searchPosts() {
const page = 1;
const { model, query } = getProperties(this, 'model', 'query');
const { id, type } = getProperties(model, 'id', 'type');
this
.store
.query('post', { id, type, query, page })
.then(posts => setProperties(this, { page, 'model.posts': posts.toArray() }));
},
actions: {
toggleTopicFollowing() {
const { model, isFollowed } = getProperties(this, 'model', 'isFollowed');
const { id, type, topicFollowing } = getProperties(model, 'id', 'type', 'topicFollowing');
get(topicFollowing, `${type}Ids`)[isFollowed ? 'removeObject' : 'addObject'](parseInt(id));
topicFollowing.save();
},
crossedTheLine(above) {
if (above) {
const { model, query } = getProperties(this, 'model', 'query');
let { id, page, type, posts } = getProperties(model, 'id', 'page', 'type', 'posts');
set(this, 'loadingTopics', true);
page += 1;
this
.store
.query('post', { id, type, query, page })
.then(newPosts => {
setProperties(this, { 'model.page': page, loadingTopics: false });
posts.pushObjects(newPosts.toArray());
});
}
},
},
});