diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-09-21 19:53:33 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-09-21 19:53:33 +0200 |
| commit | 9f3445d03f106ee3ebd8b4b1bd546a08d9169af7 (patch) | |
| tree | fabae2b4c9e2fee75a73c5ba1479075be908a584 /packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js | |
| parent | 24b563d0073849d0ba74c3fce9822a70c98e9d9f (diff) | |
| download | meshbay-9f3445d03f106ee3ebd8b4b1bd546a08d9169af7.tar.gz | |
fix: ask in the page instead of native confirm/alert
A native confirm() or alert() leaves the desktop client unable to type
until the window is refocused. ask.js draws both in the page; the SPA
test now bans all three browser dialogs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js')
| -rw-r--r-- | packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js b/packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js index 64d1c62..a65d26d 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/playlist-menu.js @@ -2,6 +2,7 @@ import { html, useState, useCallback, useEffect, } from './vendor/htm-preact.js'; import { t } from './i18n.js'; +import { ask } from './ask.js'; import { Icon } from './icon.js'; import { Menu, useMenu } from './menu.js'; import * as P from './playlists.js'; @@ -123,10 +124,9 @@ function PlaylistMenuButton({ userId, lists, reload, onPlayQueue, onSync, cached }, [userId, reload, say]); const deletePlaylist = useCallback(async (p) => { - // `confirm` and not a component: Electron implements it, a dozen places in - // this SPA already use it, and a deletion is a tombstone rather than - // something that can be undone from the interface. - if (!window.confirm(t('playlists.confirm_delete', { name: p.name }))) return; + // Asked first: a deletion is a tombstone rather than something that can be + // undone from the interface. + if (!await ask(t('playlists.confirm_delete', { name: p.name }))) return; await P.deletePlaylist(userId, p.id); await reload(); say(t('playlists.deleted', { name: p.name })); |