mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-11 03:09:57 +00:00
fix(v3): pedal click opens the plugin's screen, not its settings (#556)
The v3 Pedalboard's settingsTarget() resolved settings-first, so a plugin that ships both a screen and a settings panel (notably the bundled Audio Engine) could only ever reach its settings from the pedalboard — its actual page was unreachable. Flip to screen-first (stompbox metaphor: step on the pedal, see the pedal), falling back to settings when there is no screen. Keep a settings fallback in openPluginSettings() when a declared screen isn't mounted yet (installing/failed) so settings-bearing plugins are never stranded on a toast. Drive the pedal aria-label off the same target so it never promises the wrong surface. Update the unit test contract to screen > settings > none. Fixes #555 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
63eb7a4ffc
commit
f79efe2516
@@ -73,11 +73,15 @@ test('thumbUrl: manifest icon routes through the asset endpoint; else default',
|
||||
assert.equal(t.thumbUrl({ id: 'x', icon: '' }), '/static/v3/pedal-default.svg');
|
||||
});
|
||||
|
||||
test('settingsTarget: settings > screen > none', () => {
|
||||
test('settingsTarget: screen > settings > none', () => {
|
||||
const { t } = loadPage();
|
||||
assert.deepEqual(t.settingsTarget({ id: 'a', has_settings: true, nav: true }), { kind: 'settings', id: 'a' });
|
||||
// A screen wins even when the plugin also has settings (e.g. audio_engine):
|
||||
// the pedal opens the plugin's page, not its settings panel.
|
||||
assert.deepEqual(t.settingsTarget({ id: 'a', has_settings: true, nav: true }), { kind: 'screen', id: 'a' });
|
||||
assert.deepEqual(t.settingsTarget({ id: 'b', has_settings: false, nav: true }), { kind: 'screen', id: 'b' });
|
||||
assert.deepEqual(t.settingsTarget({ id: 'c', has_settings: false, has_screen: true }), { kind: 'screen', id: 'c' });
|
||||
// Settings-only plugin (no screen) falls back to its settings panel.
|
||||
assert.deepEqual(t.settingsTarget({ id: 'e', has_settings: true }), { kind: 'settings', id: 'e' });
|
||||
assert.deepEqual(t.settingsTarget({ id: 'd' }), { kind: 'none', id: 'd' });
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user