Pinafore-Web-Client-Frontend/routes/_store/computations/timelineComputations.js

46 lines
1.7 KiB
JavaScript

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) {
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)
store.compute('firstTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
return timelineItemIds && timelineItemIds[0]
})
store.compute('lastTimelineItemId', ['timelineItemIds'], (timelineItemIds) => {
return timelineItemIds && 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
)
}