Skip to content

fix(mobile): comment kebab menu doesn't open reliably#14344

Closed
dylanjeffers wants to merge 3 commits into
mainfrom
claude/laughing-herschel-05648a
Closed

fix(mobile): comment kebab menu doesn't open reliably#14344
dylanjeffers wants to merge 3 commits into
mainfrom
claude/laughing-herschel-05648a

Conversation

@dylanjeffers
Copy link
Copy Markdown
Contributor

Summary

Tapping the kebab (three-dot) menu on a comment in mobile was unreliable — sometimes nothing happened, and Edit/Delete were inaccessible. Two issues compounded:

  • handlePress toggled isOpen/isVisible from captured state. If the user swipe-closed the drawer and re-tapped the kebab while the slide-out animation was still in flight, the two booleans drifted out of sync. From then on, taps re-rendered the action drawer with isOpen=false so it never slid in. Now handlePress always sets both to true; closing is driven by the drawer's own onClose/onClosed callbacks.
  • A redundant inner <CommentSectionProvider entityId={entityId}> wrapped the action drawer inside the Portal. CommentSectionProvider short-circuits to null while its useTrack query rehydrates, which can swallow the drawer entirely. The rows close over the outer comment-section context, so the wrapper was dead weight — CommentDrawerHeader already portals its action drawer without it.

Fixes the same Edit / Delete / Pin / Mute / Flag entries that already work in the web overflow menu.

Test plan

  • On mobile, open a track's comments drawer and tap the kebab on your own comment → menu opens with Share, Mute This Thread, Edit, Delete (and Pin if you also own the track).
  • Tap Edit → drawer closes, footer composer focuses with the comment text prefilled.
  • Tap Delete → confirmation drawer shows; confirming removes the comment.
  • Tap the kebab on someone else's comment → menu opens with Share, Flag & Hide (or Flag & Remove / Mute User / Delete if you own the track).
  • Reproduce the previous bug path: open the kebab menu, swipe it closed, and re-tap the kebab while it's still animating out. Menu should reopen cleanly every time (previously it would get stuck and stop responding).
  • Repeat on iOS and Android.

🤖 Generated with Claude Code

dylanjeffers and others added 3 commits May 8, 2026 14:42
Instruments three key contest interactions following the existing
'Remix Contest:' event prefix and {remixContestId, trackId} property
shape used by the host/pick-winners events:

  - REMIX_CONTEST_VIEW: contest page/screen first resolves trackId+eventId
  - REMIX_CONTEST_ENTER: user taps Enter Contest / Upload Remix
  - REMIX_CONTEST_VIEW_SUBMISSIONS: user opens the submissions tab

Mobile submissions-tab firing uses useFocusedTab from
react-native-collapsible-tab-view because the contest tabs mount
eagerly (lazy: false) — a plain mount effect would fire even for
users who only view the Details tab.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…t sections

Bug 1 (web): Align static explore section visibility with SearchResults render
condition — hide sections when inputValue is set (during debounce window) in
addition to when showSearchResults is true, so Premium and other filters applied
via the filter pills always suppress unfiltered curated sections.

Bug 2 (web): Guard empty-state tile behind !isPending in AlbumResultsPage and
PlaylistResultsPage so the NoResultsTile is not shown while the query is still
in its initial loading phase, preventing a spurious empty-state flash when
combining "Downloads Available" + "Electronic" genre filters.

Bug 3 (mobile): Include category !== 'all' in the showSearch guard on the
explore screen so tapping a content-type pill (Tracks, Albums, etc.) immediately
shows the filtered SearchResults without requiring a second filter to be added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The handler toggled isOpen/isVisible from captured state, which let the
two booleans drift out of sync when the drawer was swipe-closed
mid-animation — from then on, taps re-rendered the drawer with
isOpen=false and it never slid back in. Always set both true on press
and let onClose/onClosed drive the close path.

Also remove a redundant CommentSectionProvider wrap inside the Portal:
the rows close over the outer section context, and the provider
short-circuits to null until its useTrack query rehydrates, which can
swallow the drawer entirely. CommentDrawerHeader already portals its
action drawer without this wrapper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 15, 2026

🦋 Changeset detected

Latest commit: 097e2f3

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@audius/mobile Patch

Not sure what this means? Click here to learn what changesets are.

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

@dylanjeffers
Copy link
Copy Markdown
Contributor Author

Closing as a duplicate of #14342, which has the same focused fix to CommentOverflowMenu.handlePress without the unrelated bundled changes (contest analytics, search/explore page tweaks) and without a .changeset/ file (we don't add changesets for packages/mobile-scoped PRs). The additional CommentSectionProvider Portal-wrapper cleanup from this PR is a separable concern — if it turns out to matter in practice, it can land as its own PR. Tracking the canonical fix on #14342.

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