Skip to content

feat(web): replace quick-create playlist flow with a modal#14318

Merged
dylanjeffers merged 1 commit into
mainfrom
claude/trusting-antonelli-0dc3cc
May 20, 2026
Merged

feat(web): replace quick-create playlist flow with a modal#14318
dylanjeffers merged 1 commit into
mainfrom
claude/trusting-antonelli-0dc3cc

Conversation

@dylanjeffers
Copy link
Copy Markdown
Contributor

Summary

Replaces the one-shot "quick create" playlist flow (which immediately dispatched createPlaylist({ playlist_name: 'New Playlist' }) and routed the user into the edit page) with a real Create Playlist modal that captures title, optional description, and optional artwork up front.

  • Adds a CreatePlaylistModal Redux modal slice (using the existing createModal helper), wired into the modals reducer / types / parent state.
  • Adds the CreatePlaylistModal component in packages/web/src/components/create-playlist-modal/. Uses Harmony Modal + TextInput + TextArea + the existing UploadArtwork component, plus the resizeImage pipeline for artwork.
  • The sidebar "New → Create Playlist" popup item (CreatePlaylistLibraryItemButton) and the empty-library nav link (EmptyLibraryNavLink) now open the modal instead of dispatching createPlaylist directly.
  • Playlists still default to private (enforced by the existing optimisticallySavePlaylist saga) and the saga still routes the user to the new playlist page after creation, so the post-create UX is unchanged.

This is the first chunk of a larger playlist-editor UX initiative; follow-up PRs will add the duplicate-playlist secondary action and paste-tracks-by-URL.

Test plan

  • Sign in to the web app
  • Left nav → click the + (New) button → Create Playlist
  • Verify the new modal opens with empty fields, an optional artwork uploader, a 64-char-capped title field, and a 1000-char description with counter
  • Create with empty title → playlist gets named "New Playlist", lands on the edit page, default visibility is Hidden/private
  • Create with a custom title + description + artwork → all three are reflected on the edit page
  • Open modal, click Cancel or backdrop → no playlist is created
  • Empty-library nav link in sidebar also opens this modal (sign in with a brand-new account that has zero playlists, or temporarily clear the library)

🤖 Generated with Claude Code

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 15, 2026

⚠️ No Changeset found

Latest commit: 0d699e5

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

The "New" button in the playlist library sidebar (and the empty-state nav
link) used to immediately create a playlist named "New Playlist" and route
the user into the edit page. Replace that one-shot dispatch with a Create
Playlist modal that lets the user set a title, optional description, and
optional artwork before the playlist is created.

- New `CreatePlaylistModal` slice via `createModal` helper, wired into
  the modals reducer/state.
- New `CreatePlaylistModal` component (Harmony Modal + TextInput +
  TextArea + UploadArtwork) reusing the existing `resizeImage` pipeline.
- The sidebar "New" popup item and the empty-library nav link both open
  the modal instead of dispatching `createPlaylist` directly.
- Playlists still default to private (enforced by the existing
  `optimisticallySavePlaylist` saga) and the saga still routes the user
  to the new playlist page after creation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dylanjeffers dylanjeffers force-pushed the claude/trusting-antonelli-0dc3cc branch from 1a3da32 to 0d699e5 Compare May 15, 2026 18:10
@github-actions
Copy link
Copy Markdown
Contributor

🌐 Web preview ready

Preview URL: https://audius-web-preview-pr-14318.audius.workers.dev

Unique preview for this PR (deployed from this branch).
Workflow run

@dylanjeffers dylanjeffers merged commit 87badc2 into main May 20, 2026
14 checks passed
@dylanjeffers dylanjeffers deleted the claude/trusting-antonelli-0dc3cc branch May 20, 2026 03:45
dylanjeffers added a commit that referenced this pull request May 20, 2026
## Summary

Adds a **Duplicate Playlist** secondary action to the sidebar's `+`
(New) popup menu. Users paste any public Audius playlist URL, see a
preview of the source (title, description, cover art), and toggle
per-field switches to choose what to customize in the copy. The
duplicated playlist is created as private by default.

Stacks on top of #14318 (Create Playlist modal) — review/merge that
first.

**Scope:**
- Metadata-only duplication for v1: title, description, artwork. Tracks
are **not** copied in this PR — a follow-up will support full duplicate
including track contents. The modal surfaces this with a helper line so
users know to add tracks themselves.
- When the user keeps the source artwork, we pass the source's
`cover_art_sizes` CID through to the existing `createPlaylist` saga so
it reuses the cover instead of treating it as a new upload. No content
node re-upload required.

## Implementation
- New `DuplicatePlaylistModal` Redux modal slice (via existing
`createModal` helper) registered in modals types/reducers/parent state.
- New `DuplicatePlaylistModal` component using Harmony `Modal` +
`TextInput` + `Switch` + `TextArea` + `Artwork` + the existing
`UploadArtwork`.
- URL paste resolves through `getPathFromPlaylistUrl` →
`useCollectionByPermalink` to load the source collection.
- Wires "Duplicate Playlist" into `CreatePlaylistLibraryItemButton`
between Create Playlist and Create Folder.

## Test plan

- [ ] Sign in to the web app
- [ ] Left nav → `+` → **Duplicate Playlist**
- [ ] Paste a malformed URL → see inline "Enter a valid Audius playlist
URL"
- [ ] Paste a valid Audius playlist URL → preview card appears with the
source title, description, and artwork
- [ ] Submit with all three switches off → new playlist created with
`<Source Title> (Copy)`, the source description, and the source cover
art reused (no re-upload)
- [ ] Toggle "Customize title" → enter a custom name → that name wins
- [ ] Toggle "Customize description" → enter a custom description → that
description wins
- [ ] Toggle "Customize artwork" → upload a new image → custom image
wins
- [ ] Resulting playlist is private (Hidden) and the user is routed to
its edit page
- [ ] The "tracks not copied" note is visible in the modal

## Follow-ups
- Copy tracks from source to the duplicated playlist (probably via a new
`duplicatePlaylist` action + saga that chains `createPlaylist` then
`addTrackToPlaylist` per track).
- Paste-tracks-by-URL on the edit page (separate PR), which pairs
naturally with this once track copy lands.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant