From 2aa4b4c1f385f3fc26e691b1a2aab3fc0e7c65a5 Mon Sep 17 00:00:00 2001 From: Flrande <50035259+Flrande@users.noreply.github.com> Date: Mon, 30 Oct 2023 03:50:18 +0800 Subject: [PATCH] fix: remove awareness state before window unload (#4752) --- packages/frontend/workspace/src/affine/index.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/frontend/workspace/src/affine/index.ts b/packages/frontend/workspace/src/affine/index.ts index 2c6827fcb9..327c5ab7c4 100644 --- a/packages/frontend/workspace/src/affine/index.ts +++ b/packages/frontend/workspace/src/affine/index.ts @@ -5,6 +5,7 @@ import { applyAwarenessUpdate, type Awareness, encodeAwarenessUpdate, + removeAwarenessStates, } from 'y-protocols/awareness'; import type { DocDataSource } from 'y-provider'; import type { Doc } from 'yjs'; @@ -190,6 +191,10 @@ function setupAffineAwareness( .catch(err => console.error(err)); }; + const windowBeforeUnloadHandler = () => { + removeAwarenessStates(awareness, [awareness.clientID], 'window unload'); + }; + conn.on('server-awareness-broadcast', awarenessBroadcast); conn.on('new-client-awareness-init', newClientAwarenessInitHandler); awareness.on('update', awarenessUpdate); @@ -198,9 +203,12 @@ function setupAffineAwareness( conn.emit('awareness-init', rootDoc.guid); }); + window.addEventListener('beforeunload', windowBeforeUnloadHandler); + return () => { awareness.off('update', awarenessUpdate); conn.off('server-awareness-broadcast', awarenessBroadcast); conn.off('new-client-awareness-init', newClientAwarenessInitHandler); + window.removeEventListener('unload', windowBeforeUnloadHandler); }; }