docs(quick-4): Add set as default playlist context menu option for single playlist selection
This commit is contained in:
+2
-2
@@ -80,7 +80,7 @@ None currently.
|
|||||||
| 001 | Multi-playlist import support | 2026-02-28 | 50c8a33 | [001-multi-playlist-import-support](./quick/001-multi-playlist-import-support/) |
|
| 001 | Multi-playlist import support | 2026-02-28 | 50c8a33 | [001-multi-playlist-import-support](./quick/001-multi-playlist-import-support/) |
|
||||||
| 002 | Auto-rename duplicate playlists on import | 2026-02-28 | 8ba8bbe | [002-auto-rename-duplicate-playlists-on-import](./quick/002-auto-rename-duplicate-playlists-on-import/) |
|
| 002 | Auto-rename duplicate playlists on import | 2026-02-28 | 8ba8bbe | [002-auto-rename-duplicate-playlists-on-import](./quick/002-auto-rename-duplicate-playlists-on-import/) |
|
||||||
| 003 | Add multi-select to playlist view with context menu delete support | 2026-02-28 | c92ced2 | [3-add-multi-select-to-playlist-view-with-c](./quick/3-add-multi-select-to-playlist-view-with-c/) |
|
| 003 | Add multi-select to playlist view with context menu delete support | 2026-02-28 | c92ced2 | [3-add-multi-select-to-playlist-view-with-c](./quick/3-add-multi-select-to-playlist-view-with-c/) |
|
||||||
| 004 | Add "Set as Default Playlist" context menu option | 2026-02-28 | 9971b63 | [4-add-set-as-default-playlist-context-menu](./quick/4-add-set-as-default-playlist-context-menu/) |
|
| 004 | Add "set as default playlist" context menu option for single playlist selection | 2026-02-28 | 9971b63 | [4-add-set-as-default-playlist-context-menu](./quick/4-add-set-as-default-playlist-context-menu/) |
|
||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
@@ -100,5 +100,5 @@ None currently.
|
|||||||
|
|
||||||
---
|
---
|
||||||
*State initialized: 2026-02-27*
|
*State initialized: 2026-02-27*
|
||||||
Last activity: 2026-02-28 - Completed quick task 004: Add "Set as Default Playlist" context menu option
|
Last activity: 2026-02-28 - Completed quick task 004: Add "set as default playlist" context menu option for single playlist selection
|
||||||
*Last updated: 2026-02-28*
|
*Last updated: 2026-02-28*
|
||||||
|
|||||||
@@ -0,0 +1,171 @@
|
|||||||
|
---
|
||||||
|
phase: quick
|
||||||
|
plan: 4
|
||||||
|
type: execute
|
||||||
|
wave: 1
|
||||||
|
depends_on: []
|
||||||
|
files_modified:
|
||||||
|
- frontend/src/components/playlist-view/playlist-view.ts
|
||||||
|
autonomous: true
|
||||||
|
requirements: []
|
||||||
|
must_haves:
|
||||||
|
truths:
|
||||||
|
- "Right-clicking a single playlist shows 'Set as Default Playlist' option"
|
||||||
|
- "Clicking 'Set as Default Playlist' updates the default/favorites playlist to that playlist"
|
||||||
|
- "Option does NOT appear when multiple playlists are selected"
|
||||||
|
artifacts:
|
||||||
|
- path: "frontend/src/components/playlist-view/playlist-view.ts"
|
||||||
|
provides: "Set as Default Playlist context menu item + handler"
|
||||||
|
key_links:
|
||||||
|
- from: "playlist-view.ts context menu"
|
||||||
|
to: "favCtrl.setDefaultPlaylist()"
|
||||||
|
via: "onPlaylistContextAction('set-default')"
|
||||||
|
pattern: "favCtrl\\.setDefaultPlaylist"
|
||||||
|
---
|
||||||
|
|
||||||
|
<objective>
|
||||||
|
Add a "Set as Default Playlist" option to the playlist-level context menu in the playlist view.
|
||||||
|
|
||||||
|
Purpose: Allow users to quickly set any playlist as the default (favorites) playlist via right-click, instead of navigating to Settings.
|
||||||
|
Output: Updated playlist-view.ts with new context menu item and handler.
|
||||||
|
</objective>
|
||||||
|
|
||||||
|
<execution_context>
|
||||||
|
@/home/caleb/.config/Claude/get-shit-done/workflows/execute-plan.md
|
||||||
|
@/home/caleb/.config/Claude/get-shit-done/templates/summary.md
|
||||||
|
</execution_context>
|
||||||
|
|
||||||
|
<context>
|
||||||
|
@frontend/src/components/playlist-view/playlist-view.ts
|
||||||
|
@frontend/src/store/controllers/favorites-controller.ts
|
||||||
|
@frontend/src/store/favorites-store.ts
|
||||||
|
|
||||||
|
<interfaces>
|
||||||
|
<!-- Key contracts the executor needs — no codebase exploration required. -->
|
||||||
|
|
||||||
|
From playlist-view.ts (already instantiated):
|
||||||
|
```typescript
|
||||||
|
private favCtrl = new FavoritesController(this);
|
||||||
|
```
|
||||||
|
|
||||||
|
From favorites-controller.ts:
|
||||||
|
```typescript
|
||||||
|
async setDefaultPlaylist(id: number): Promise<void>;
|
||||||
|
get playlistId(): number; // current default playlist ID
|
||||||
|
```
|
||||||
|
|
||||||
|
Playlist context menu handler pattern (line ~1707):
|
||||||
|
```typescript
|
||||||
|
private async onPlaylistContextAction(action: string) {
|
||||||
|
const index = this.playlistContextMenuIndex;
|
||||||
|
const entry = this.entries[index];
|
||||||
|
if (!entry) return;
|
||||||
|
switch (action) {
|
||||||
|
case 'rename': ...
|
||||||
|
case 'delete': ...
|
||||||
|
}
|
||||||
|
// cleanup at end
|
||||||
|
this.selectedPlaylists = new Set();
|
||||||
|
this.lastSelectedPlaylistIndex = null;
|
||||||
|
this.closePlaylistContextMenu();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Playlist entry shape:
|
||||||
|
```typescript
|
||||||
|
interface PlaylistEntry {
|
||||||
|
summary: playlist.Summary; // .ID: number, .Name: string
|
||||||
|
expanded: boolean;
|
||||||
|
tracks: playlist.Track[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Single-select guard pattern (line ~2341):
|
||||||
|
```typescript
|
||||||
|
${this.selectedPlaylists.size <= 1 ? html`...single-select-only items...` : nothing}
|
||||||
|
```
|
||||||
|
</interfaces>
|
||||||
|
</context>
|
||||||
|
|
||||||
|
<tasks>
|
||||||
|
|
||||||
|
<task type="auto">
|
||||||
|
<name>Task 1: Add "Set as Default Playlist" context menu item and handler</name>
|
||||||
|
<files>frontend/src/components/playlist-view/playlist-view.ts</files>
|
||||||
|
<action>
|
||||||
|
Two changes in playlist-view.ts:
|
||||||
|
|
||||||
|
1. **Add handler case** in `onPlaylistContextAction()` (around line 1716, inside the switch statement, after the `'rename'` case and before `'delete'`):
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
case 'set-default':
|
||||||
|
void this.favCtrl
|
||||||
|
.setDefaultPlaylist(entry.summary.ID)
|
||||||
|
.catch((err: unknown) => {
|
||||||
|
console.error(
|
||||||
|
'Failed to set default playlist:',
|
||||||
|
err,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
```
|
||||||
|
|
||||||
|
This follows the exact same pattern used in config-page.ts (line ~812).
|
||||||
|
|
||||||
|
2. **Add menu item** in the playlist context menu template (around line 2341). Insert a new `wa-dropdown-item` AFTER the existing Rename item but still inside the `this.selectedPlaylists.size <= 1` guard block. The Rename item block currently ends at line ~2356 with `: nothing}`. Restructure so that both Rename AND Set as Default are inside the single-select guard:
|
||||||
|
|
||||||
|
```html
|
||||||
|
${this.selectedPlaylists.size <= 1
|
||||||
|
? html`
|
||||||
|
<wa-dropdown-item
|
||||||
|
@click=${() =>
|
||||||
|
void this.onPlaylistContextAction('rename')}
|
||||||
|
>
|
||||||
|
<wa-icon slot="icon" name="pen"></wa-icon>
|
||||||
|
Rename
|
||||||
|
</wa-dropdown-item>
|
||||||
|
<wa-dropdown-item
|
||||||
|
@click=${() =>
|
||||||
|
void this.onPlaylistContextAction('set-default')}
|
||||||
|
>
|
||||||
|
<wa-icon slot="icon" name="star"></wa-icon>
|
||||||
|
Set as Default Playlist
|
||||||
|
</wa-dropdown-item>
|
||||||
|
`
|
||||||
|
: nothing}
|
||||||
|
```
|
||||||
|
|
||||||
|
Use the "star" icon name since this relates to the favorites/default playlist concept and matches the icon style option in settings.
|
||||||
|
|
||||||
|
Do NOT add any new imports — `FavoritesController` is already imported and instantiated as `this.favCtrl`.
|
||||||
|
</action>
|
||||||
|
<verify>
|
||||||
|
<automated>cd frontend && npx tsc --noEmit --pretty 2>&1 | head -30</automated>
|
||||||
|
</verify>
|
||||||
|
<done>
|
||||||
|
- Right-clicking a single playlist in the playlist view shows "Set as Default Playlist" option with a star icon
|
||||||
|
- Clicking it calls favCtrl.setDefaultPlaylist() with the playlist's ID
|
||||||
|
- The option does NOT appear when multiple playlists are selected (same guard as Rename)
|
||||||
|
- TypeScript compiles without errors
|
||||||
|
</done>
|
||||||
|
</task>
|
||||||
|
|
||||||
|
</tasks>
|
||||||
|
|
||||||
|
<verification>
|
||||||
|
1. `cd frontend && npx tsc --noEmit` — TypeScript compilation passes
|
||||||
|
2. Manual: Right-click a single playlist → context menu shows Rename, Set as Default Playlist, Delete
|
||||||
|
3. Manual: Select multiple playlists → right-click → context menu shows only Delete (no Rename, no Set as Default)
|
||||||
|
4. Manual: Click "Set as Default Playlist" → verify in Settings that the default playlist updated
|
||||||
|
</verification>
|
||||||
|
|
||||||
|
<success_criteria>
|
||||||
|
- Single playlist right-click menu shows "Set as Default Playlist" between Rename and Delete
|
||||||
|
- Multi-select right-click menu does NOT show the option
|
||||||
|
- Clicking the option successfully changes the default/favorites playlist
|
||||||
|
- No TypeScript compilation errors
|
||||||
|
</success_criteria>
|
||||||
|
|
||||||
|
<output>
|
||||||
|
After completion, create `.planning/quick/4-add-set-as-default-playlist-context-menu/4-SUMMARY.md`
|
||||||
|
</output>
|
||||||
Reference in New Issue
Block a user