fix node removal with no parent caused by focus changes

This commit is contained in:
Nolan Lawson 2018-03-04 12:55:45 -08:00
parent 456c865a09
commit 562a58f030
3 changed files with 51 additions and 41 deletions

View File

@ -60,21 +60,4 @@ export function instanceComputations (store) {
return list ? list.title : ''
}
)
store.compute('numberOfNotifications',
['timelines', 'currentInstance', 'currentTimeline'],
(timelines, currentInstance, currentTimeline) => {
return currentTimeline !== 'notifications' &&
timelines &&
timelines[currentInstance] &&
timelines[currentInstance].notifications &&
timelines[currentInstance].notifications.itemIdsToAdd &&
timelines[currentInstance].notifications.itemIdsToAdd.length
}
)
store.compute('hasNotifications',
['numberOfNotifications'],
(numberOfNotifications) => !!numberOfNotifications
)
}

View File

@ -1,23 +1,45 @@
function computeForTimeline (store, key) {
store.compute(key, ['currentTimelineData'], (currentTimelineData) => currentTimelineData[key])
function computeForTimeline (store, key, defaultValue) {
store.compute(key,
['currentInstance', 'currentTimeline', `timelineData_${key}`],
(currentInstance, currentTimeline, root) => {
let instanceData = root && root[currentInstance]
return (currentTimeline && instanceData && currentTimeline in instanceData) ? instanceData[currentTimeline] : defaultValue
})
}
export function timelineComputations (store) {
store.compute('currentTimelineData', ['currentInstance', 'currentTimeline', 'timelines'],
(currentInstance, currentTimeline, timelines) => {
return ((timelines && timelines[currentInstance]) || {})[currentTimeline] || {}
})
computeForTimeline(store, 'timelineItemIds', null)
computeForTimeline(store, 'runningUpdate', false)
computeForTimeline(store, 'initialized', false)
computeForTimeline(store, 'lastFocusedElementSelector', null)
computeForTimeline(store, 'ignoreBlurEvents', false)
computeForTimeline(store, 'itemIdsToAdd', null)
computeForTimeline(store, 'showHeader', false)
computeForTimeline(store, 'shouldShowHeader', false)
computeForTimeline(store, 'timelineItemIds')
computeForTimeline(store, 'runningUpdate')
computeForTimeline(store, 'initialized')
computeForTimeline(store, 'lastFocusedElementSelector')
computeForTimeline(store, 'ignoreBlurEvents')
computeForTimeline(store, 'itemIdsToAdd')
computeForTimeline(store, 'showHeader')
computeForTimeline(store, 'shouldShowHeader')
store.compute('firstTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
return timelineItemIds && timelineItemIds[0]
})
store.compute('lastTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
return timelineItemIds && timelineItemIds[timelineItemIds.length - 1]
})
store.compute('firstTimelineItemId', ['timelineItemIds'], (timelineItemIds) => timelineItemIds && timelineItemIds.length && timelineItemIds[0])
store.compute('lastTimelineItemId', ['timelineItemIds'], (timelineItemIds) => timelineItemIds && timelineItemIds.length && timelineItemIds[timelineItemIds.length - 1])
store.compute('numberOfNotifications',
[`timelineData_itemIdsToAdd`, 'currentInstance', 'currentTimeline'],
(root, currentInstance, currentTimeline) => {
return (
currentTimeline !== 'notifications' &&
root &&
root[currentInstance] &&
root[currentInstance].notifications &&
root[currentInstance].notifications.length
) || 0
}
)
store.compute('hasNotifications',
['numberOfNotifications'],
(numberOfNotifications) => !!numberOfNotifications
)
}

View File

@ -1,16 +1,21 @@
export function timelineMixins (Store) {
Store.prototype.setForTimeline = function (instanceName, timelineName, obj) {
let timelines = this.get('timelines') || {}
let timelineData = timelines[instanceName] || {}
timelineData[timelineName] = Object.assign(timelineData[timelineName] || {}, obj)
timelines[instanceName] = timelineData
this.set({timelines: timelines})
let valuesToSet = {}
for (let key of Object.keys(obj)) {
let rootKey = `timelineData_${key}`
let root = this.get(rootKey) || {}
let instanceData = root[instanceName] = root[instanceName] || {}
instanceData[timelineName] = obj[key]
valuesToSet[rootKey] = root
}
this.set(valuesToSet)
}
Store.prototype.getForTimeline = function (instanceName, timelineName, key) {
let timelines = this.get('timelines') || {}
let timelineData = timelines[instanceName] || {}
return (timelineData[timelineName] || {})[key]
let rootKey = `timelineData_${key}`
let root = this.get(rootKey)
return root && root[instanceName] && root[instanceName][timelineName]
}
Store.prototype.setForCurrentTimeline = function (obj) {