fix focus() being called too often
This commit is contained in:
parent
60dd2ecff2
commit
7053230ac0
|
@ -42,7 +42,8 @@
|
||||||
export default {
|
export default {
|
||||||
oncreate() {
|
oncreate() {
|
||||||
let focusSelector = this.get('focusSelector')
|
let focusSelector = this.get('focusSelector')
|
||||||
if (this.refs.node && focusSelector) {
|
if (this.refs.node && focusSelector &&
|
||||||
|
this.store.getForCurrentTimeline('shouldRestoreFocus')) {
|
||||||
restoreFocus(this.refs.node, focusSelector)
|
restoreFocus(this.refs.node, focusSelector)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -113,7 +113,8 @@
|
||||||
registerClickDelegate(delegateKey, (e) => this.onClickOrKeydown(e))
|
registerClickDelegate(delegateKey, (e) => this.onClickOrKeydown(e))
|
||||||
}
|
}
|
||||||
let focusSelector = this.get('focusSelector')
|
let focusSelector = this.get('focusSelector')
|
||||||
if (this.refs.node && focusSelector) {
|
if (this.refs.node && focusSelector &&
|
||||||
|
this.store.getForCurrentTimeline('shouldRestoreFocus')) {
|
||||||
restoreFocus(this.refs.node, focusSelector)
|
restoreFocus(this.refs.node, focusSelector)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -177,6 +177,16 @@
|
||||||
},
|
},
|
||||||
onScrollTopChanged(scrollTop) {
|
onScrollTopChanged(scrollTop) {
|
||||||
this.set({scrollTop: scrollTop})
|
this.set({scrollTop: scrollTop})
|
||||||
|
if (!this.get('observedOnScrollTopChanged')) {
|
||||||
|
// ignore the first scroll top change, e.g.
|
||||||
|
// because we forced a scroll top change
|
||||||
|
this.set({observedOnScrollTopChanged: true})
|
||||||
|
} else {
|
||||||
|
// after that, don't allow statuses/notifications to call focus()
|
||||||
|
// after we've already started scrolling. that causes scrolling to
|
||||||
|
// jump around
|
||||||
|
this.store.setForCurrentTimeline({shouldRestoreFocus: false})
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onScrollToBottom() {
|
onScrollToBottom() {
|
||||||
if (!this.store.get('initialized') ||
|
if (!this.store.get('initialized') ||
|
||||||
|
@ -233,7 +243,10 @@
|
||||||
},
|
},
|
||||||
setupFocus() {
|
setupFocus() {
|
||||||
this.onPushState = this.onPushState.bind(this)
|
this.onPushState = this.onPushState.bind(this)
|
||||||
this.store.setForCurrentTimeline({ignoreBlurEvents: false})
|
this.store.setForCurrentTimeline({
|
||||||
|
ignoreBlurEvents: false,
|
||||||
|
shouldRestoreFocus: true
|
||||||
|
})
|
||||||
window.addEventListener('pushState', this.onPushState)
|
window.addEventListener('pushState', this.onPushState)
|
||||||
},
|
},
|
||||||
teardownFocus() {
|
teardownFocus() {
|
||||||
|
|
|
@ -18,6 +18,7 @@ export function timelineComputations (store) {
|
||||||
computeForTimeline(store, 'showHeader', false)
|
computeForTimeline(store, 'showHeader', false)
|
||||||
computeForTimeline(store, 'shouldShowHeader', false)
|
computeForTimeline(store, 'shouldShowHeader', false)
|
||||||
computeForTimeline(store, 'timelineItemIdsAreStale', false)
|
computeForTimeline(store, 'timelineItemIdsAreStale', false)
|
||||||
|
computeForTimeline(store, 'shouldRestoreFocus', false)
|
||||||
|
|
||||||
store.compute('firstTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
|
store.compute('firstTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
|
||||||
return timelineItemIds && timelineItemIds[0]
|
return timelineItemIds && timelineItemIds[0]
|
||||||
|
|
|
@ -20,6 +20,12 @@ export function timelineMixins (Store) {
|
||||||
return root && root[instanceName] && root[instanceName][timelineName]
|
return root && root[instanceName] && root[instanceName][timelineName]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Store.prototype.getForCurrentTimeline = function (key) {
|
||||||
|
let instanceName = this.get('currentInstance')
|
||||||
|
let timelineName = this.get('currentTimeline')
|
||||||
|
return this.getForTimeline(instanceName, timelineName, key)
|
||||||
|
}
|
||||||
|
|
||||||
Store.prototype.getAllTimelineData = function (instanceName, key) {
|
Store.prototype.getAllTimelineData = function (instanceName, key) {
|
||||||
let root = this.get(`timelineData_${key}`) || {}
|
let root = this.get(`timelineData_${key}`) || {}
|
||||||
return root[instanceName] || {}
|
return root[instanceName] || {}
|
||||||
|
|
Loading…
Reference in a new issue