This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/components/discovery-topics-list.js.es6
2019-11-07 15:38:28 -06:00

53 lines
1.5 KiB
JavaScript

import { schedule } from "@ember/runloop";
import { scheduleOnce } from "@ember/runloop";
import Component from "@ember/component";
import { on, observes } from "discourse-common/utils/decorators";
import LoadMore from "discourse/mixins/load-more";
import UrlRefresh from "discourse/mixins/url-refresh";
const DiscoveryTopicsListComponent = 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) {
schedule("afterRender", () => $(window).scrollTop(scrollTo + 1));
} else {
scheduleOnce("afterRender", this, this.loadMoreUnlessFull);
}
},
@observes("topicTrackingState.states")
_updateTopics() {
this.topicTrackingState.updateTopics(this.model.topics);
},
@observes("incomingCount")
_updateTitle() {
Discourse.updateContextCount(this.incomingCount);
},
saveScrollPosition() {
this.session.set("topicListScrollPosition", $(window).scrollTop());
},
actions: {
loadMore() {
Discourse.updateContextCount(0);
this.model.loadMore().then(hasMoreResults => {
schedule("afterRender", () => this.saveScrollPosition());
if (!hasMoreResults) {
this.eyeline.flushRest();
} else if ($(window).height() >= $(document).height()) {
this.send("loadMore");
}
});
}
}
});
export default DiscoveryTopicsListComponent;