feat: fix playlist cross-board climbs, shared MultiboardClimbList, playlist follows#879
Conversation
…aylist follows Playlists containing climbs from multiple board types now render correctly instead of showing "Not showing X climbs from other layouts". This brings playlists to feature parity with the setter page's multi-board support. Key changes: - Backend: Add all-boards mode to playlistClimbs resolver (omit boardName to query across all board types); fix board filter in setterClimbsFull to also filter by layoutId and size edges, not just boardType - Database: Add playlist_follows table for playlist follow feature - Frontend: Extract shared useBoardDetailsMap hook and MultiboardClimbList component used by both setter and playlist pages - Frontend: Refactor SetterClimbList to delegate rendering to shared component - Frontend: Rewrite PlaylistDetailContent for multi-board rendering with board filter, follow button, and no cross-layout filtering - Frontend: Refactor SessionDetailContent to use shared hook - Tests: Add playlist follow mutation tests and useBoardDetailsMap hook tests https://claude.ai/code/session_01YGdgG2kDYVJhhg4yHfLUYH
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Claude Review✅ Ready to merge - No significant issues found. This is a well-structured PR with good test coverage for the new playlist follow feature. Minor Notes
|
…ype input properly - Add missing followerCount and isFollowedByMe fields to noopCreatePlaylist fallback in use-playlists.ts - Update use-playlists.test.ts test fixtures to include the new required fields - Type playlistClimbs query input as GetPlaylistClimbsInput instead of Record<string, unknown> in playlist-detail-content.tsx https://claude.ai/code/session_01YGdgG2kDYVJhhg4yHfLUYH
Claude Review✅ Ready to merge - Minor issues noted below, but nothing blocking. Issues
Test Coverage
Documentation
|
…add query tests - Add FK constraint from playlist_follows.playlist_uuid → playlists.uuid with CASCADE delete to prevent orphaned follow records - Extract shared getPlaylistFollowStats() helper for batch-fetching followerCount and isFollowedByMe across playlist lists - Fix userPlaylists, allUserPlaylists, and single playlist query to use real follow stats instead of hardcoded followerCount: 0 - Fix updatePlaylist mutation to return actual followerCount after update - Add tests: getPlaylistFollowStats helper, playlistClimbs all-boards mode, specific-board mode, pagination, access control https://claude.ai/code/session_01YGdgG2kDYVJhhg4yHfLUYH
Claude Review✅ Ready to merge - Well-structured implementation with good test coverage. Minor performance consideration noted below. Performance Note
What looks good
|
Playlists containing climbs from multiple board types now render correctly
instead of showing "Not showing X climbs from other layouts". This brings
playlists to feature parity with the setter page's multi-board support.
Key changes:
to query across all board types); fix board filter in setterClimbsFull
to also filter by layoutId and size edges, not just boardType
component used by both setter and playlist pages
board filter, follow button, and no cross-layout filtering
https://claude.ai/code/session_01YGdgG2kDYVJhhg4yHfLUYH