mirror of
https://github.com/discourse/discourse.git
synced 2025-04-17 09:09:05 +08:00
FEATURE: Remember scroll position in private message lists (#8212)
* FEATURE: remember position in private message lists * Unified saving scroll position between topic lists * added discovery-topics-list template * ran prettier * removed dynamic scroll key * JS cleanup
This commit is contained in:
parent
95114f87ae
commit
054fbd7846
@ -36,11 +36,6 @@ const DiscoveryTopicsListComponent = Ember.Component.extend(
|
||||
this.session.set("topicListScrollPosition", $(window).scrollTop());
|
||||
},
|
||||
|
||||
scrolled() {
|
||||
this._super(...arguments);
|
||||
this.saveScrollPosition();
|
||||
},
|
||||
|
||||
actions: {
|
||||
loadMore() {
|
||||
Discourse.updateContextCount(0);
|
||||
|
@ -2,8 +2,9 @@ import {
|
||||
default as computed,
|
||||
observes
|
||||
} from "ember-addons/ember-computed-decorators";
|
||||
import LoadMore from "discourse/mixins/load-more";
|
||||
|
||||
export default Ember.Component.extend({
|
||||
export default Ember.Component.extend(LoadMore, {
|
||||
tagName: "table",
|
||||
classNames: ["topic-list"],
|
||||
showTopicPostBadges: true,
|
||||
@ -54,6 +55,30 @@ export default Ember.Component.extend({
|
||||
this.refreshLastVisited();
|
||||
},
|
||||
|
||||
scrolled() {
|
||||
this._super(...arguments);
|
||||
let onScroll = this.onScroll;
|
||||
if (!onScroll) return;
|
||||
|
||||
onScroll.call(this);
|
||||
},
|
||||
|
||||
scrollToLastPosition() {
|
||||
if (!this.scrollOnLoad) return;
|
||||
|
||||
let scrollTo = this.session.get("topicListScrollPosition");
|
||||
if (scrollTo && scrollTo >= 0) {
|
||||
Ember.run.schedule("afterRender", () =>
|
||||
$(window).scrollTop(scrollTo + 1)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
didInsertElement() {
|
||||
this._super(...arguments);
|
||||
this.scrollToLastPosition();
|
||||
},
|
||||
|
||||
_updateLastVisitedTopic(topics, order, ascending, top) {
|
||||
this.set("lastVisitedTopic", null);
|
||||
|
||||
|
@ -16,6 +16,10 @@ export default Ember.Controller.extend({
|
||||
this.newIncoming = [];
|
||||
},
|
||||
|
||||
saveScrollPosition: function() {
|
||||
this.session.set("topicListScrollPosition", $(window).scrollTop());
|
||||
},
|
||||
|
||||
_showFooter: function() {
|
||||
this.set("application.showFooter", !this.get("model.canLoadMore"));
|
||||
}.observes("model.canLoadMore"),
|
||||
|
@ -18,10 +18,19 @@ export default (viewName, path, channel) => {
|
||||
},
|
||||
|
||||
model() {
|
||||
return this.store.findFiltered("topicList", {
|
||||
filter:
|
||||
"topics/" + path + "/" + this.modelFor("user").get("username_lower")
|
||||
});
|
||||
const session = Discourse.Session.current();
|
||||
let filter =
|
||||
"topics/" + path + "/" + this.modelFor("user").get("username_lower");
|
||||
let lastTopicList = session.get("topicList");
|
||||
if (lastTopicList && lastTopicList.filter === filter) {
|
||||
return lastTopicList;
|
||||
} else {
|
||||
session.setProperties({
|
||||
topicList: null,
|
||||
topicListScrollPosition: null
|
||||
});
|
||||
return this.store.findFiltered("topicList", { filter });
|
||||
}
|
||||
},
|
||||
|
||||
setupController() {
|
||||
|
@ -18,7 +18,10 @@
|
||||
canBulkSelect=canBulkSelect
|
||||
selected=selected
|
||||
skipHeader=skipHeader
|
||||
tagsForUser=tagsForUser}}
|
||||
tagsForUser=tagsForUser
|
||||
onScroll=onScroll
|
||||
scrollOnLoad=scrollOnLoad}}
|
||||
|
||||
{{else}}
|
||||
{{#unless loadingMore}}
|
||||
<div class='alert alert-info'>
|
||||
|
@ -0,0 +1,3 @@
|
||||
{{yield (hash
|
||||
saveScrollPosition=saveScrollPosition
|
||||
)}}
|
@ -26,7 +26,7 @@
|
||||
|
||||
{{bulk-select-button selected=selected action=(action "refresh") category=category}}
|
||||
|
||||
{{#discovery-topics-list model=model refresh=(action "refresh") incomingCount=topicTrackingState.incomingCount}}
|
||||
{{#discovery-topics-list model=model refresh=(action "refresh") incomingCount=topicTrackingState.incomingCount as |discoveryTopicList|}}
|
||||
{{#if top}}
|
||||
<div class='top-lists'>
|
||||
{{period-chooser period=period action=(action "changePeriod")}}
|
||||
@ -61,7 +61,8 @@
|
||||
expandAllPinned=expandAllPinned
|
||||
category=category
|
||||
topics=model.topics
|
||||
discoveryList=true}}
|
||||
discoveryList=true
|
||||
onScroll=discoveryTopicList.saveScrollPosition}}
|
||||
{{/if}}
|
||||
{{/discovery-topics-list}}
|
||||
|
||||
|
@ -7,7 +7,9 @@
|
||||
hasIncoming=hasIncoming
|
||||
incomingCount=incomingCount
|
||||
showInserted=(action "showInserted")
|
||||
tagsForUser=tagsForUser}}
|
||||
tagsForUser=tagsForUser
|
||||
onScroll=saveScrollPosition
|
||||
scrollOnLoad=true}}
|
||||
|
||||
{{conditional-loading-spinner condition=model.loadingMore}}
|
||||
{{/load-more}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user