Skip to content

Commit 0cd8300

Browse files
shottahclaude
andcommitted
refactor: remove showReactions and showPreview props, enforce single-level nesting
- Remove showReactions prop - reactions now show automatically when array provided - Remove non-functional showPreview prop entirely - Enforce maximum menu nesting depth of 1 level (parent -> child only) - Add comprehensive test coverage for gesture handling and validation - Simplify example app with clear demonstrations of all features - Add tap passthrough examples showing TouchableOpacity works inside menu - Update TypeScript types and native modules (iOS/Android) - Delete unnecessary SECURITY_REVIEW.md and CHANGELOG.md files BREAKING CHANGE: showReactions and showPreview props removed, menu nesting limited to 1 level 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 83c35f1 commit 0cd8300

18 files changed

+813
-493
lines changed

CHANGELOG.md

Lines changed: 0 additions & 41 deletions
This file was deleted.

README.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ function MyComponent() {
7676
```tsx
7777
<ExpoFocusMenuView
7878
items={menuItems}
79-
showReactions={true}
8079
reactions={['👍', '❤️', '😂', '🔥', '💯']}
8180
onReactionPress={({ emoji, selected }) => {
8281
console.log(`Emoji ${emoji} was ${selected ? 'selected' : 'deselected'}`);
@@ -113,8 +112,6 @@ const menuItems = [
113112
```tsx
114113
<ExpoFocusMenuView
115114
items={menuItems}
116-
triggerMode="tap" // 'tap' or 'longPress' (default)
117-
showPreview={true} // Show content preview on menu
118115
hapticFeedback={true} // Enable haptic feedback
119116
onItemPress={handleItemPress}
120117
onMenuShow={() => console.log('Menu opened')}
@@ -133,11 +130,8 @@ const menuItems = [
133130
| `items` | `FocusMenuItem[]` | Array of menu items to display | Required |
134131
| `onItemPress` | `(itemId: string) => void` | Callback when menu item is selected | Required |
135132
| `children` | `ReactNode` | Content to wrap with menu | Required |
136-
| `triggerMode` | `'longPress' \| 'tap'` | How to trigger the menu | `'longPress'` |
137-
| `showPreview` | `boolean` | Show content preview in menu (iOS 13+) | `false` |
138133
| `hapticFeedback` | `boolean` | Enable haptic feedback | `false` |
139-
| `showReactions` | `boolean` | Show emoji reaction picker | `false` |
140-
| `reactions` | `string[]` | Custom emoji reactions | Default set |
134+
| `reactions` | `string[]` | Emoji reactions to display (none if omitted) | - |
141135
| `onReactionPress` | `(data: {emoji: string, selected: boolean}) => void` | Reaction selection callback | - |
142136
| `onMenuShow` | `() => void` | Menu shown callback | - |
143137
| `onMenuDismiss` | `() => void` | Menu dismissed callback | - |

SECURITY_REVIEW.md

Lines changed: 0 additions & 178 deletions
This file was deleted.

android/src/main/java/expo/modules/focusmenu/ExpoFocusMenuModule.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,10 @@ class ExpoFocusMenuModule : Module() {
5858
view.updateTriggerMode()
5959
}
6060

61-
Prop("showPreview") { view, show: Boolean ->
62-
view.showPreview = show
63-
}
64-
6561
Prop("hapticFeedback") { view, enabled: Boolean ->
6662
view.hapticFeedback = enabled
6763
}
6864

69-
Prop("showReactions") { view, show: Boolean ->
70-
view.showReactions = show
71-
}
72-
7365
Prop("reactions") { view, emojis: List<String>? ->
7466
view.reactions = emojis ?: emptyList()
7567
}

android/src/main/java/expo/modules/focusmenu/ExpoFocusMenuView.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import expo.modules.kotlin.views.ExpoView
2525
class ExpoFocusMenuView(context: Context, appContext: AppContext) : ExpoView(context, appContext) {
2626
companion object {
2727
private const val TAG = "ExpoFocusMenuView"
28-
private val DEFAULT_EMOJIS = listOf("😀", "😂", "❤️", "👍", "🔥", "💯", "😍", "🎉", "👏", "")
2928
}
3029

3130
// Event dispatchers
@@ -37,12 +36,10 @@ class ExpoFocusMenuView(context: Context, appContext: AppContext) : ExpoView(con
3736
// Properties from JS
3837
var menuItems: List<Map<String, Any>> = emptyList()
3938
var triggerMode: String = "longPress"
40-
var showPreview: Boolean = false
4139
var hapticFeedback: Boolean = false
42-
var showReactions: Boolean = false
43-
var reactions: List<String> = DEFAULT_EMOJIS
40+
var reactions: List<String> = emptyList()
4441
set(value) {
45-
field = value.ifEmpty { DEFAULT_EMOJIS }
42+
field = value
4643
// Log.d(TAG, "Reactions updated: ${field.size} items")
4744
emojiPickerAdapter?.updateEmojis(field)
4845
}
@@ -75,7 +72,7 @@ class ExpoFocusMenuView(context: Context, appContext: AppContext) : ExpoView(con
7572
setOnClickListener {
7673
if (hapticFeedback) provideHapticFeedback()
7774
showContextMenu()
78-
if (showReactions) showEmojiPicker()
75+
if (reactions.isNotEmpty()) showEmojiPicker()
7976
}
8077
setOnLongClickListener(null)
8178
}
@@ -84,7 +81,7 @@ class ExpoFocusMenuView(context: Context, appContext: AppContext) : ExpoView(con
8481
setOnLongClickListener {
8582
if (hapticFeedback) provideHapticFeedback()
8683
showContextMenu()
87-
if (showReactions) showEmojiPicker()
84+
if (reactions.isNotEmpty()) showEmojiPicker()
8885
true
8986
}
9087
}

0 commit comments

Comments
 (0)