Skip to content

Replace Home long-press selection with an iOS context menu #45

Description

@kmch4n

Summary

On Home, long-pressing a video card silently enters bulk-selection mode. Replace that with an iOS-style context menu offering a thumbnail preview and quick actions (Favorite, Edit, Share, Delete, Select).

Scope corrected 2026-07-25. The original body named VideoCard and VideoCardCompact as the affected components. Only one card is involved, on one screen — details under "Actual surface".

Actual surface

Long-press is wired in exactly one place in the repo:

  • src/app/(tabs)/index/index.tsx:319onLongPress={() => handleVideoLongPress(item.id)}, which drives useSelectionMode (:166, handler at :183).

VideoCardCompact merely forwards an optional onLongPress prop (:25, :41, :98). Its other four consumers do not pass one, so they have no long-press behaviour to replace:

  • src/app/(tabs)/calendar/index.tsx:280
  • src/app/(tabs)/dashboard/index.tsx:184
  • src/app/(tabs)/search/index.tsx:97
  • src/app/settings/duplicate-candidates.tsx:144

VideoCard is not affected. Its props are { video, onPress } only (src/components/VideoCard.tsx:24) — it has no long-press path, and a repo-wide grep finds no importer at all, so it is unreferenced. Its removal is tracked separately and is not a prerequisite here.

So the change is confined to Home. Whether the other four surfaces should gain the same menu is a follow-up decision, not part of this issue.

Proposal

  • Wrap the Home card with a native iOS context menu. react-native-ios-context-menu is not currently a dependency (confirmed against package.json), so this adds one — weigh that against Expo SDK 55 / RN 0.83 compatibility before committing.
  • Menu items: Toggle Favorite, Edit (open video detail), Share (native share sheet), Delete, Select (enters the existing useSelectionMode flow).
  • Tap is unchanged — still opens video detail.
  • Android / Web keep the current long-press-to-select fallback.

Notes

  • Selection mode itself stays; it stops being the default long-press outcome and becomes a menu item, matching Photos.
  • Haptics must go through src/services/hapticsService.ts — direct expo-haptics imports are blocked by no-restricted-imports in eslint.config.js.
  • If the context-menu library turns out to be incompatible with the current SDK, an acceptable smaller outcome is to keep selection mode but give long-press a visible affordance.

Acceptance criteria

  • Long-press on a Home video card shows a context menu with at least Favorite / Edit / Delete / Select.
  • Tap still opens the video detail screen.
  • Bulk selection mode remains reachable via the Select action, and the rest of useSelectionMode is unchanged.
  • Calendar / dashboard / search / duplicate-candidates are visibly unaffected.
  • Web and Android do not crash and keep current behaviour.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:homeHome feed and primary video listenhancementNew feature or requestfeature-ideaUser-facing feature ideas and product explorationpriority:lowLow priority

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions