feat(mobile): playing icon + skip-deleted-on-tap + gray deleted index#14441
Merged
dylanjeffers merged 1 commit intoJun 2, 2026
Merged
Conversation
Two adjacent CollectionTile-in-lineup behaviors per design feedback: 1. **Speaker icon next to the title when actively playing.** Mirrors what TrackTile shows via LineupTileMetadata: a small IconVolumeLevel2 fills the line next to the title text while one of this collection's tracks is the currently-playing track AND the audio engine is actually playing (not paused). Same icon, same fill color (`useThemeColors().primary`), same `size='m'`. New `isPlaying = useSelector((state) => getPlaying(state) && isActive)` matches the derivation in LineupTileMetadata exactly. Restructured `styles.titleTouchable` to be a row container (`flexDirection: 'row', alignItems: 'center'`) and added `styles.titleText` (`flexShrink: 1`) so the title text shrinks to make room for the icon instead of pushing it off the tile. 2. **Don't try to play a deleted-by-artist track.** Previously `handlePress` fell back to `tracks[0]?.track_id` as the start track — if the first track had been deleted, the tile tap dispatched playback for an unplayable track. Now picks the current track only if it's one of ours AND not deleted, else the first non-deleted track; if every track in the collection is deleted, the tile tap is a no-op. 3. **Gray the index column on deleted rows.** `CollectionTileTrackList`'s `TrackItem` already grays the title, the "by <artist>" line, and the "[Deleted by Artist]" marker. The number column was still rendered in the regular subdued color, which read as "row partially deleted." Added `deleted && styles.deleted` to the index Text's style array so the whole row consistently grays out. The deleted-row tap itself was already a no-op for playback — the list-level Pressable only fires `handlePressTitle` (navigate to collection page). The real playability concern was at the tile-level tap handler, which (1) now covers. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #14440 — the original PR merged before this commit landed. Re-applying the three remaining behaviors on a fresh branch off main.
1. Speaker icon next to the title when actively playing
Mirrors what TrackTile shows via
LineupTileMetadata: a smallIconVolumeLevel2fills the line next to the title text while one of this collection's tracks is the currently-playing track AND the audio engine is actually playing (not paused).Same icon, same fill (
useThemeColors().primary), samesize='m'. Restructuredstyles.titleTouchableto be a row container (flexDirection: 'row', alignItems: 'center') and addedstyles.titleText: { flexShrink: 1 }so a long title shrinks instead of pushing the icon off-tile.2. Skip deleted-by-artist tracks on the tile-level tap
Previously
handlePressfell back totracks[0]?.track_idas the start track — if the first track was deleted, the tap dispatched playback for an unplayable track. Now:Picks the current track only if it's one of ours AND not deleted, else the first non-deleted track. If every track in the collection is deleted, the tile tap is a no-op.
The per-row tap was already a no-op for playback — the list-level
Pressableonly fireshandlePressTitle(navigate to the collection page), never a play action. The real playability concern was at the tile-level tap, which this covers.3. Gray the index column on deleted rows
CollectionTileTrackList'sTrackItemalready grayed the title, theby <artist>line, and the[Deleted by Artist]marker. The number column was still rendered in the regular subdued color, which read as "row partially deleted." Addeddeleted && styles.deletedto the index Text's style array so the whole row consistently grays out.Files
packages/mobile/src/components/lineup-tile/CollectionTile.tsx— icon + skip-deleted-on-tappackages/mobile/src/components/lineup-tile/CollectionTileTrackList.tsx— index gray-outNet diff: +55 / −5.
Verification
tsc --noEmitclean inpackages/mobile.🤖 Generated with Claude Code