diff --git a/blocks/edit/da-title/da-title.js b/blocks/edit/da-title/da-title.js index 899f306d..6a3ecc0b 100644 --- a/blocks/edit/da-title/da-title.js +++ b/blocks/edit/da-title/da-title.js @@ -18,12 +18,14 @@ const ICONS = [ '/blocks/edit/img/Smock_Cloud_18_N.svg', '/blocks/edit/img/Smock_CloudDisconnected_18_N.svg', '/blocks/edit/img/Smock_CloudError_18_N.svg', + '/blocks/edit/img/cloud_refresh.svg', ]; const CLOUD_ICONS = { connected: 'spectrum-Cloud-connected', + disconnected: 'spectrum-Cloud-offline', offline: 'spectrum-Cloud-offline', - connecting: 'spectrum-Cloud-error', + connecting: 'cloud_refresh', error: 'spectrum-Cloud-error', }; @@ -64,6 +66,7 @@ export default class DaTitle extends LitElement { } handleError(json, action, icon) { + console.log('handleError', json, action, icon); this._status = { ...json.error, action }; icon.classList.remove('is-sending'); icon.parentElement.classList.add('is-error'); diff --git a/blocks/edit/img/cloud_refresh.svg b/blocks/edit/img/cloud_refresh.svg new file mode 100644 index 00000000..a7ce7470 --- /dev/null +++ b/blocks/edit/img/cloud_refresh.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/blocks/edit/prose/index.js b/blocks/edit/prose/index.js index 37114762..88e10f95 100644 --- a/blocks/edit/prose/index.js +++ b/blocks/edit/prose/index.js @@ -197,6 +197,21 @@ function handleAwarenessUpdates(wsProvider, daTitle, win, path) { }); win.addEventListener('online', () => { daTitle.collabStatus = 'online'; }); win.addEventListener('offline', () => { daTitle.collabStatus = 'offline'; }); + // TODO: use 10 mins in production + // const DISCONNECT_TIMEOUT = 10 * 60 * 1000; + const DISCONNECT_TIMEOUT = 5000; + let disconnectTimeout = null; + win.addEventListener('focus', () => { + // cancel any pending disconnect + if (disconnectTimeout) clearTimeout(disconnectTimeout); + wsProvider.connect(); + }); + win.addEventListener('blur', () => { + if (disconnectTimeout) clearTimeout(disconnectTimeout); + disconnectTimeout = setTimeout(() => { + wsProvider.disconnect(); + }, DISCONNECT_TIMEOUT); + }); } export function createAwarenessStatusWidget(wsProvider, win, path) { diff --git a/test/unit/blocks/edit/proseCollab.test.js b/test/unit/blocks/edit/proseCollab.test.js index 4eedb58b..f86af61c 100644 --- a/test/unit/blocks/edit/proseCollab.test.js +++ b/test/unit/blocks/edit/proseCollab.test.js @@ -35,7 +35,7 @@ describe('Prose collab', () => { const daTitle = pi.createAwarenessStatusWidget(wsp, win); expect(daTitle).to.equal(dat); - expect(winEventListeners.length).to.equal(2); + expect(winEventListeners.length).to.equal(4); const el0 = winEventListeners[0]; const el1 = winEventListeners[1]; const elOnline = el0.n === 'online' ? el0 : el1;