fix(workspace): restore playlist info entry in header playlist dropdown (#1328)

The context-actions section of the playlist switcher lost its "Playlist
info" button when playlist actions moved into the per-row menu
(156c12c51): the showPlaylistInfo input, the playlistInfoRequested
output and the whole shell wiring stayed alive, but no template rendered
the entry anymore — the active playlist's info dialog was only reachable
by locating its own row in the list.

Render the button again, gated on the existing showPlaylistInfo input,
alongside Account info and Add playlist. Regression test asserts all
three context actions render in the opened menu and that clicking
Playlist info emits.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5 authored and GitHub committed 2026-08-01 20:26:38 +02:00
1 parent 8f861a3a1b
commit 94efd7d379
3 files changed
+56 -5

No files matched your search

@@ -0,0 +1,8 @@
---
type: fix
area: workspace
---
The playlist dropdown in the header shows a "Playlist info" entry for the
active playlist again, next to "Account info" and "Add playlist" — it had
disappeared when playlist actions moved into the per-row menu.
@@ -202,16 +202,16 @@
}
</div>
@if (showAddPlaylist() || showAccountInfo()) {
@if (showAddPlaylist() || showAccountInfo() || showPlaylistInfo()) {
<div class="context-actions-section">
@if (showAddPlaylist()) {
@if (showPlaylistInfo()) {
<button
class="context-action-item"
(click)="requestAddPlaylist()"
(click)="requestPlaylistInfo()"
>
<mat-icon>add</mat-icon>
<mat-icon>info</mat-icon>
<span>{{
'WORKSPACE.SHELL.ADD_PLAYLIST' | translate
'WORKSPACE.SHELL.PLAYLIST_INFO' | translate
}}</span>
</button>
}
@@ -226,6 +226,17 @@
}}</span>
</button>
}
@if (showAddPlaylist()) {
<button
class="context-action-item"
(click)="requestAddPlaylist()"
>
<mat-icon>add</mat-icon>
<span>{{
'WORKSPACE.SHELL.ADD_PLAYLIST' | translate
}}</span>
</button>
}
</div>
}
</mat-menu>
@@ -295,6 +295,38 @@ describe('PlaylistSwitcherComponent', () => {
expect(accountInfoSpy).toHaveBeenCalledTimes(1);
});
it('renders playlist info, account info, and add playlist context actions in the menu', async () => {
await createComponent();
fixture.componentRef.setInput('showPlaylistInfo', true);
fixture.componentRef.setInput('showAccountInfo', true);
fixture.componentRef.setInput('showAddPlaylist', true);
fixture.detectChanges();
const playlistInfoSpy = jest.fn();
component.playlistInfoRequested.subscribe(playlistInfoSpy);
component.menuTrigger().openMenu();
fixture.detectChanges();
const actionButtons = Array.from(
document.querySelectorAll<HTMLButtonElement>(
'.context-actions-section .context-action-item'
)
);
const labels = actionButtons.map((button) =>
button.textContent?.trim()
);
expect(labels).toEqual([
expect.stringContaining('PLAYLIST_INFO'),
expect.stringContaining('ACCOUNT_INFO'),
expect.stringContaining('ADD_PLAYLIST'),
]);
actionButtons[0].click();
expect(playlistInfoSpy).toHaveBeenCalledTimes(1);
});
it('opens the menu, syncs overlay width, and checks portal statuses for Xtream playlists', fakeAsync(async () => {
await createComponent();