Skip to content

Commit 20c5b2d

Browse files
JohnMcLearclaude
andcommitted
fix: handle non-creator delete and add timeout fallback
- Listen for 'shout' event to show error when non-creator tries to delete (server sends shoutMessage instead of deleting) - Add 5-second timeout fallback in case the server doesn't respond (socket dropped, server crashed, etc.) Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent 32307d8 commit 20c5b2d

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/static/js/pad_editor.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,26 @@ const padeditor = (() => {
9090
// Navigating immediately caused a race condition where the browser
9191
// (especially Firefox) would close the WebSocket before the delete
9292
// message reached the server. See #7306.
93+
let handled = false;
9394
pad.socket.on('message', (data: any) => {
9495
if (data && data.disconnect === 'deleted') {
96+
handled = true;
9597
window.location.href = '/';
9698
}
9799
});
100+
// If the user is not the pad creator, the server sends a shout
101+
// message instead of deleting. Listen for it and show the error.
102+
pad.socket.on('shout', (data: any) => {
103+
handled = true;
104+
const msg = data?.data?.payload?.message?.message;
105+
if (msg) window.alert(msg);
106+
});
98107
pad.collabClient.sendMessage({type: 'PAD_DELETE', data:{padId: pad.getPadId()}});
108+
// Fallback: if the server doesn't respond within 5 seconds
109+
// (e.g. socket dropped), navigate away anyway.
110+
setTimeout(() => {
111+
if (!handled) window.location.href = '/';
112+
}, 5000);
99113
}
100114
})
101115

0 commit comments

Comments
 (0)