From 20706fb9a4ec646816b44a10842aa8f58ea0fd75 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Wed, 16 Sep 2026 11:01:02 +0200 Subject: music: play, play next, add to queue The player's queue could only be replaced: every onPlayQueue reset tracks/order/pos together. It becomes one reducer (queue-ops.js) with an `op`, because two appends batched into one tick cannot both read the track count out of separate useStates. A shared pop-up menu (menu.js) carries the three verbs, on right-click and on a dots button. A track row is now a div holding two buttons: a button cannot contain a button. Found by the browser probe: both music wrappers took two arguments and forwarded two, so every "add to queue" arrived as a plain play. Co-Authored-By: Claude Opus 5 --- packages/meshbay-hub/tests/test_hook_ordering.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'packages/meshbay-hub/tests/test_hook_ordering.py') diff --git a/packages/meshbay-hub/tests/test_hook_ordering.py b/packages/meshbay-hub/tests/test_hook_ordering.py index 28ec93e..994ca2e 100644 --- a/packages/meshbay-hub/tests/test_hook_ordering.py +++ b/packages/meshbay-hub/tests/test_hook_ordering.py @@ -49,6 +49,9 @@ STATIC_FILES = [ # `useMemo` chain in the tree — a dozen derived lists, each depending on # the one above it, which is precisely the shape this checks. "search-page.js", + # The shared pop-up menu (docs/playlists.md §10.1), reached from the media + # views rather than imported by the shell. + "menu.js", ] pytestmark = pytest.mark.skipif(not APP.exists(), reason="SPA sources unavailable") -- cgit v1.2.3