pinafore/routes/_store/instanceComputations.js

83 lines
2.9 KiB
JavaScript
Raw Normal View History

2018-03-03 21:23:26 +00:00
function computeForInstance (store, computedKey, key, defaultValue) {
store.compute(computedKey,
[key, 'currentInstance'],
(instanceData, currentInstance) => (currentInstance && instanceData[currentInstance]) || defaultValue)
}
2018-02-09 06:29:29 +00:00
export function instanceComputations (store) {
2018-03-03 21:23:26 +00:00
computeForInstance(store, 'currentTheme', 'instanceThemes', 'default')
computeForInstance(store, 'currentVerifyCredentials', 'verifyCredentials', null)
computeForInstance(store, 'currentInstanceInfo', 'instanceInfos', null)
computeForInstance(store, 'pinnedPage', 'pinnedPages', '/local')
computeForInstance(store, 'lists', 'instanceLists', [])
computeForInstance(store, 'currentStatusModifications', 'statusModifications', null)
computeForInstance(store, 'currentComposeText', 'composeText', {})
computeForInstance(store, 'currentUploadedMedia', 'uploadedMedia', {})
computeForInstance(store, 'currentCustomEmoji', 'customEmoji', [])
computeForInstance(store, 'currentPostPrivacy', 'postPrivacy', {})
2018-01-28 21:09:39 +00:00
store.compute(
'isUserLoggedIn',
['currentInstance', 'loggedInInstances'],
(currentInstance, loggedInInstances) => !!(currentInstance && Object.keys(loggedInInstances).includes(currentInstance))
)
store.compute(
'loggedInInstancesAsList',
['currentInstance', 'loggedInInstances', 'loggedInInstancesInOrder'],
(currentInstance, loggedInInstances, loggedInInstancesInOrder) => {
return loggedInInstancesInOrder.map(instanceName => {
return Object.assign({
current: currentInstance === instanceName,
name: instanceName
}, loggedInInstances[instanceName])
})
}
)
store.compute(
'currentInstanceData',
['currentInstance', 'loggedInInstances'],
(currentInstance, loggedInInstances) => {
return Object.assign({
name: currentInstance
}, loggedInInstances[currentInstance])
})
store.compute(
'accessToken',
['currentInstanceData'],
2018-01-28 23:44:33 +00:00
(currentInstanceData) => currentInstanceData && currentInstanceData.access_token
2018-01-28 21:09:39 +00:00
)
2018-02-08 17:15:25 +00:00
store.compute(
'pinnedListTitle',
['lists', 'pinnedPage'],
(lists, pinnedPage) => {
if (!pinnedPage.startsWith('/lists')) {
return
}
let listId = pinnedPage.split('/').slice(-1)[0]
let list = lists.find(_ => _.id === listId)
return list ? list.title : ''
}
)
2018-02-16 16:59:44 +00:00
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'],
2018-03-03 21:23:26 +00:00
(numberOfNotifications) => !!numberOfNotifications
2018-02-28 07:18:07 +00:00
)
2018-02-09 06:29:29 +00:00
}