v4: a playlist's editor has a URL, as a dump's has — it opened over the playlist's header as a state of the page, which a reload or a shared link lost, while a dump's editor is /@name/dumps/<slug>/edit. It is now /@name/playlists/<slug>/edit: Edit goes there, and Cancel or Save come back to the page in its place. Both paths render PlaylistDetail at the same place, so the playlist stays loaded, and a new slug keeps the view. Anyone who may not edit it gets the page, a guest the sign-in first. playlistPath takes the view, and parsePagePath reads it, so its link has no preview, as a dump editor's has none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-09 22:22:24 +00:00
parent 21f4db268e
commit 9a215b0cc5
10 changed files with 130 additions and 46 deletions

View File

@@ -27,7 +27,7 @@
* - `/@:username/*` is a user's (`UserRoutes`): their profile and its tabs,
* their dumps at `dumps/:slug` (`Dump`) and `dumps/:slug/edit` (`DumpEdit`,
* signed in only), and their playlists at `playlists/:slug`
* (`PlaylistDetail`).
* (`PlaylistDetail`), with its editor open at `playlists/:slug/edit`.
* - `/:categorySlug` and `/:categorySlug/:feedTab` are a dump category's feed
* (`Index`), with its `/follow/playlists` too.
* - Any other path is `NotFound`.
@@ -185,6 +185,7 @@ function UserRoutes() {
}
/>
<Route path="playlists/:slug" element={<PlaylistDetail />} />
<Route path="playlists/:slug/edit" element={<PlaylistDetail editing />} />
<Route path="*" element={<UserPublicProfile />} />
</Routes>
);