pinafore/routes/_store/observers/onlineObservers.js

43 lines
1.3 KiB
JavaScript
Raw Normal View History

import debounce from 'lodash-es/debounce'
2018-03-09 03:08:14 +01:00
import { toast } from '../../_utils/toast'
const OFFLINE_DELAY = 5000
const NOTIFY_OFFLINE_LIMIT = 1
2018-03-09 03:08:14 +01:00
let notifyCount = 0
let offlineStyle = process.browser && document.getElementById('theOfflineStyle')
// debounce to avoid notifying for a short connection issue
2018-03-09 03:08:14 +01:00
const notifyOffline = debounce(() => {
if (process.browser && !navigator.onLine && ++notifyCount <= NOTIFY_OFFLINE_LIMIT) {
toast.say('You seem to be offline. You can still read toots while offline.')
}
2018-03-09 03:08:14 +01:00
}, OFFLINE_DELAY)
2018-03-09 03:09:35 +01:00
export function onlineObservers (store) {
2018-03-09 03:08:14 +01:00
if (!process.browser) {
return
}
let meta = document.getElementById('theThemeColor')
let oldTheme = meta.content
store.observe('online', online => {
// "only x" ensures the <style> tag does not have any effect
offlineStyle.setAttribute('media', online ? 'only x' : 'all')
2018-03-09 03:08:14 +01:00
if (online) {
meta.content = oldTheme
} else {
let offlineThemeColor = window.__themeColors.offline
if (meta.content !== offlineThemeColor) {
oldTheme = meta.content
}
meta.content = offlineThemeColor
notifyOffline()
}
})
window.addEventListener('offline', () => store.set({ online: false }))
window.addEventListener('online', () => store.set({ online: true }))
2018-03-09 03:09:35 +01:00
}