56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { on, observes } from "ember-addons/ember-computed-decorators";
|
|
import LoadMore from "discourse/mixins/load-more";
|
|
import UrlRefresh from "discourse/mixins/url-refresh";
|
|
|
|
const DiscoveryTopicsListComponent = Ember.Component.extend(
|
|
UrlRefresh,
|
|
LoadMore,
|
|
{
|
|
classNames: ["contents"],
|
|
eyelineSelector: ".topic-list-item",
|
|
|
|
@on("didInsertElement")
|
|
@observes("model")
|
|
_readjustScrollPosition() {
|
|
const scrollTo = this.session.get("topicListScrollPosition");
|
|
if (scrollTo && scrollTo >= 0) {
|
|
Ember.run.schedule("afterRender", () =>
|
|
$(window).scrollTop(scrollTo + 1)
|
|
);
|
|
} else {
|
|
Ember.run.scheduleOnce("afterRender", this, this.loadMoreUnlessFull);
|
|
}
|
|
},
|
|
|
|
@observes("incomingCount")
|
|
_updateTitle() {
|
|
Discourse.updateContextCount(this.incomingCount);
|
|
},
|
|
|
|
saveScrollPosition() {
|
|
this.session.set("topicListScrollPosition", $(window).scrollTop());
|
|
},
|
|
|
|
scrolled() {
|
|
this._super(...arguments);
|
|
this.saveScrollPosition();
|
|
},
|
|
|
|
actions: {
|
|
loadMore() {
|
|
Discourse.updateContextCount(0);
|
|
this.model.loadMore().then(hasMoreResults => {
|
|
Ember.run.schedule("afterRender", () => this.saveScrollPosition());
|
|
if (!hasMoreResults) {
|
|
this.eyeline.flushRest();
|
|
} else if ($(window).height() >= $(document).height()) {
|
|
this.send("loadMore");
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
export default DiscoveryTopicsListComponent;
|