@lodev09/react-native-true-sheet 3.0.0-beta.9 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -6
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +29 -33
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +3 -1
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +48 -43
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +388 -89
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +22 -4
- package/android/src/main/java/com/lodev09/truesheet/core/RNScreensFragmentObserver.kt +0 -5
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDialogObserver.kt +67 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +44 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +94 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
- package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +37 -33
- package/android/src/main/res/anim/true_sheet_slide_in.xml +13 -0
- package/android/src/main/res/anim/true_sheet_slide_out.xml +13 -0
- package/android/src/main/res/values/styles.xml +13 -1
- package/ios/TrueSheetContainerView.mm +4 -0
- package/ios/TrueSheetContentView.h +2 -1
- package/ios/TrueSheetContentView.mm +91 -11
- package/ios/TrueSheetView.mm +65 -41
- package/ios/TrueSheetViewController.h +21 -10
- package/ios/TrueSheetViewController.mm +330 -165
- package/ios/core/TrueSheetBlurView.h +24 -0
- package/ios/{utils/ConversionUtil.mm → core/TrueSheetBlurView.mm} +65 -3
- package/ios/events/TrueSheetDragEvents.h +39 -0
- package/ios/events/TrueSheetDragEvents.mm +62 -0
- package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
- package/ios/events/TrueSheetFocusEvents.mm +49 -0
- package/ios/events/TrueSheetLifecycleEvents.h +40 -0
- package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
- package/ios/events/TrueSheetStateEvents.h +35 -0
- package/ios/events/TrueSheetStateEvents.mm +49 -0
- package/ios/utils/GestureUtil.h +7 -0
- package/ios/utils/GestureUtil.mm +12 -0
- package/lib/module/TrueSheet.js +65 -12
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/fabric/TrueSheetViewNativeComponent.ts +15 -5
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheet.js +13 -7
- package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
- package/lib/typescript/src/TrueSheet.d.ts +4 -0
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +55 -6
- package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +14 -5
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +0 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/TrueSheet.tsx +80 -10
- package/src/TrueSheet.types.ts +62 -6
- package/src/__mocks__/index.js +0 -5
- package/src/fabric/TrueSheetViewNativeComponent.ts +15 -5
- package/src/index.ts +0 -1
- package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
- package/src/reanimated/ReanimatedTrueSheetProvider.tsx +11 -3
- package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
- package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
- package/ios/events/OnDetentChangeEvent.h +0 -28
- package/ios/events/OnDetentChangeEvent.mm +0 -30
- package/ios/events/OnDidDismissEvent.h +0 -26
- package/ios/events/OnDidDismissEvent.mm +0 -25
- package/ios/events/OnDidPresentEvent.h +0 -28
- package/ios/events/OnDidPresentEvent.mm +0 -30
- package/ios/events/OnDragBeginEvent.h +0 -28
- package/ios/events/OnDragBeginEvent.mm +0 -30
- package/ios/events/OnDragChangeEvent.h +0 -28
- package/ios/events/OnDragChangeEvent.mm +0 -30
- package/ios/events/OnDragEndEvent.h +0 -28
- package/ios/events/OnDragEndEvent.mm +0 -30
- package/ios/events/OnMountEvent.h +0 -26
- package/ios/events/OnMountEvent.mm +0 -25
- package/ios/events/OnPositionChangeEvent.mm +0 -32
- package/ios/events/OnWillDismissEvent.h +0 -26
- package/ios/events/OnWillDismissEvent.mm +0 -25
- package/ios/events/OnWillPresentEvent.h +0 -28
- package/ios/events/OnWillPresentEvent.mm +0 -30
- package/ios/utils/ConversionUtil.h +0 -24
- package/lib/module/TrueSheetGrabber.js +0 -51
- package/lib/module/TrueSheetGrabber.js.map +0 -1
- package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
- package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
- package/src/TrueSheetGrabber.tsx +0 -82
package/README.md
CHANGED
|
@@ -10,11 +10,11 @@ The true native bottom sheet experience for your React Native Apps. 💩
|
|
|
10
10
|
## Features
|
|
11
11
|
|
|
12
12
|
* ⚡ **Powered by Fabric** - Built on React Native's new architecture for maximum performance
|
|
13
|
+
* 🚀 **Native** - Implemented in the native realm
|
|
13
14
|
* 🎯 **Type-safe** - Full TypeScript support with Codegen-generated native interfaces
|
|
14
|
-
* 🚀 **Blazing fast** - Direct C++ communication, no bridge overhead
|
|
15
|
-
* 🎨 **Native** - Implemented in the native realm
|
|
16
15
|
* ♿ **Accessible** - Native accessibility and screen reader support out of the box
|
|
17
|
-
* 🔄 **
|
|
16
|
+
* 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/props#events)
|
|
17
|
+
* 🪟 **Liquid Glass** - iOS 26+ Liquid Glass support out of the box. Featured in [Expo Blog](https://expo.dev/blog/how-to-create-apple-maps-style-liquid-glass-sheets)
|
|
18
18
|
|
|
19
19
|
## Installation
|
|
20
20
|
|
|
@@ -24,13 +24,20 @@ The true native bottom sheet experience for your React Native Apps. 💩
|
|
|
24
24
|
|
|
25
25
|
### Prerequisites
|
|
26
26
|
|
|
27
|
-
- React Native >= 0.
|
|
28
|
-
- New Architecture enabled (
|
|
27
|
+
- React Native >= 0.76 (Expo SDK 52+)
|
|
28
|
+
- New Architecture enabled (default in RN 0.76+)
|
|
29
29
|
|
|
30
|
-
###
|
|
30
|
+
### Expo
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
npx expo install @lodev09/react-native-true-sheet
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Bare React Native
|
|
31
37
|
|
|
32
38
|
```sh
|
|
33
39
|
yarn add @lodev09/react-native-true-sheet
|
|
40
|
+
cd ios && pod install
|
|
34
41
|
```
|
|
35
42
|
|
|
36
43
|
## Documentation
|
|
@@ -2,7 +2,6 @@ package com.lodev09.truesheet
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.view.View
|
|
5
|
-
import androidx.core.view.isNotEmpty
|
|
6
5
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
7
6
|
import com.facebook.react.views.view.ReactViewGroup
|
|
8
7
|
|
|
@@ -25,30 +24,9 @@ class TrueSheetContainerView(reactContext: ThemedReactContext) :
|
|
|
25
24
|
|
|
26
25
|
var delegate: TrueSheetContainerViewDelegate? = null
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
} else {
|
|
32
|
-
null
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
val headerView: TrueSheetHeaderView?
|
|
36
|
-
get() {
|
|
37
|
-
for (i in 0 until childCount) {
|
|
38
|
-
val child = getChildAt(i)
|
|
39
|
-
if (child is TrueSheetHeaderView) return child
|
|
40
|
-
}
|
|
41
|
-
return null
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
val footerView: TrueSheetFooterView?
|
|
45
|
-
get() {
|
|
46
|
-
for (i in 0 until childCount) {
|
|
47
|
-
val child = getChildAt(i)
|
|
48
|
-
if (child is TrueSheetFooterView) return child
|
|
49
|
-
}
|
|
50
|
-
return null
|
|
51
|
-
}
|
|
27
|
+
var contentView: TrueSheetContentView? = null
|
|
28
|
+
var headerView: TrueSheetHeaderView? = null
|
|
29
|
+
var footerView: TrueSheetFooterView? = null
|
|
52
30
|
|
|
53
31
|
var contentHeight: Int = 0
|
|
54
32
|
var headerHeight: Int = 0
|
|
@@ -64,24 +42,42 @@ class TrueSheetContainerView(reactContext: ThemedReactContext) :
|
|
|
64
42
|
super.addView(child, index)
|
|
65
43
|
|
|
66
44
|
when (child) {
|
|
67
|
-
is TrueSheetContentView ->
|
|
68
|
-
|
|
69
|
-
|
|
45
|
+
is TrueSheetContentView -> {
|
|
46
|
+
child.delegate = this
|
|
47
|
+
contentView = child
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
is TrueSheetHeaderView -> {
|
|
51
|
+
child.delegate = this
|
|
52
|
+
headerView = child
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
is TrueSheetFooterView -> {
|
|
56
|
+
child.delegate = this
|
|
57
|
+
footerView = child
|
|
58
|
+
}
|
|
70
59
|
}
|
|
71
60
|
}
|
|
72
61
|
|
|
73
62
|
override fun removeViewAt(index: Int) {
|
|
74
|
-
val view = getChildAt(index)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
63
|
+
when (val view = getChildAt(index)) {
|
|
64
|
+
is TrueSheetContentView -> {
|
|
65
|
+
view.delegate = null
|
|
66
|
+
contentView = null
|
|
67
|
+
contentViewDidChangeSize(0, 0)
|
|
68
|
+
}
|
|
78
69
|
|
|
79
70
|
is TrueSheetHeaderView -> {
|
|
80
71
|
view.delegate = null
|
|
72
|
+
headerView = null
|
|
81
73
|
headerViewDidChangeSize(0, 0)
|
|
82
74
|
}
|
|
83
75
|
|
|
84
|
-
is TrueSheetFooterView ->
|
|
76
|
+
is TrueSheetFooterView -> {
|
|
77
|
+
view.delegate = null
|
|
78
|
+
footerView = null
|
|
79
|
+
footerViewDidChangeSize(0, 0)
|
|
80
|
+
}
|
|
85
81
|
}
|
|
86
82
|
|
|
87
83
|
super.removeViewAt(index)
|
|
@@ -8,6 +8,7 @@ import com.facebook.react.bridge.ReactMethod
|
|
|
8
8
|
import com.facebook.react.module.annotations.ReactModule
|
|
9
9
|
import com.facebook.react.turbomodule.core.interfaces.TurboModule
|
|
10
10
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
11
|
+
import com.lodev09.truesheet.core.TrueSheetDialogObserver
|
|
11
12
|
import java.util.concurrent.ConcurrentHashMap
|
|
12
13
|
|
|
13
14
|
/**
|
|
@@ -27,10 +28,11 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
|
|
|
27
28
|
|
|
28
29
|
override fun invalidate() {
|
|
29
30
|
super.invalidate()
|
|
30
|
-
// Clear all registered views on module invalidation
|
|
31
|
+
// Clear all registered views and observer on module invalidation
|
|
31
32
|
synchronized(viewRegistry) {
|
|
32
33
|
viewRegistry.clear()
|
|
33
34
|
}
|
|
35
|
+
TrueSheetDialogObserver.clear()
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
/**
|
|
@@ -13,16 +13,8 @@ import com.facebook.react.uimanager.ThemedReactContext
|
|
|
13
13
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
14
14
|
import com.facebook.react.uimanager.events.EventDispatcher
|
|
15
15
|
import com.facebook.react.views.view.ReactViewGroup
|
|
16
|
-
import com.lodev09.truesheet.
|
|
17
|
-
import com.lodev09.truesheet.events
|
|
18
|
-
import com.lodev09.truesheet.events.DidPresentEvent
|
|
19
|
-
import com.lodev09.truesheet.events.DragBeginEvent
|
|
20
|
-
import com.lodev09.truesheet.events.DragChangeEvent
|
|
21
|
-
import com.lodev09.truesheet.events.DragEndEvent
|
|
22
|
-
import com.lodev09.truesheet.events.MountEvent
|
|
23
|
-
import com.lodev09.truesheet.events.PositionChangeEvent
|
|
24
|
-
import com.lodev09.truesheet.events.WillDismissEvent
|
|
25
|
-
import com.lodev09.truesheet.events.WillPresentEvent
|
|
16
|
+
import com.lodev09.truesheet.core.TrueSheetDialogObserver
|
|
17
|
+
import com.lodev09.truesheet.events.*
|
|
26
18
|
|
|
27
19
|
/**
|
|
28
20
|
* Main TrueSheet host view that manages the sheet dialog and dispatches events to JavaScript.
|
|
@@ -35,7 +27,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
35
27
|
TrueSheetViewControllerDelegate,
|
|
36
28
|
TrueSheetContainerViewDelegate {
|
|
37
29
|
|
|
38
|
-
|
|
30
|
+
internal val viewController: TrueSheetViewController = TrueSheetViewController(reactContext)
|
|
39
31
|
|
|
40
32
|
private val containerView: TrueSheetContainerView?
|
|
41
33
|
get() = viewController.getChildAt(0) as? TrueSheetContainerView
|
|
@@ -90,17 +82,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
90
82
|
TrueSheetModule.registerView(this, id)
|
|
91
83
|
}
|
|
92
84
|
|
|
93
|
-
override fun onDetachedFromWindow() {
|
|
94
|
-
super.onDetachedFromWindow()
|
|
95
|
-
|
|
96
|
-
// Don't unregister if we have active modals - we need the view for recovery
|
|
97
|
-
if (viewController.hasActiveModals()) {
|
|
98
|
-
return
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
onDropInstance()
|
|
102
|
-
}
|
|
103
|
-
|
|
104
85
|
/**
|
|
105
86
|
* Called by the manager after all properties are set.
|
|
106
87
|
* Reconfigures the sheet if it's currently presented.
|
|
@@ -151,6 +132,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
151
132
|
fun onDropInstance() {
|
|
152
133
|
reactContext.removeLifecycleEventListener(this)
|
|
153
134
|
TrueSheetModule.unregisterView(id)
|
|
135
|
+
TrueSheetDialogObserver.removeSheet(this)
|
|
154
136
|
|
|
155
137
|
if (viewController.isPresented) {
|
|
156
138
|
viewController.dismiss()
|
|
@@ -171,14 +153,14 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
171
153
|
|
|
172
154
|
// ==================== TrueSheetViewControllerDelegate Implementation ====================
|
|
173
155
|
|
|
174
|
-
override fun viewControllerWillPresent(index: Int, position: Float) {
|
|
156
|
+
override fun viewControllerWillPresent(index: Int, position: Float, detent: Float) {
|
|
175
157
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
176
|
-
eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position))
|
|
158
|
+
eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position, detent))
|
|
177
159
|
}
|
|
178
160
|
|
|
179
|
-
override fun viewControllerDidPresent(index: Int, position: Float) {
|
|
161
|
+
override fun viewControllerDidPresent(index: Int, position: Float, detent: Float) {
|
|
180
162
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
181
|
-
eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position))
|
|
163
|
+
eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position, detent))
|
|
182
164
|
|
|
183
165
|
// Enable touch event dispatching to React Native
|
|
184
166
|
viewController.eventDispatcher = eventDispatcher
|
|
@@ -194,40 +176,62 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
194
176
|
containerView?.footerView?.eventDispatcher = null
|
|
195
177
|
}
|
|
196
178
|
|
|
197
|
-
override fun viewControllerDidDismiss() {
|
|
179
|
+
override fun viewControllerDidDismiss(hadParent: Boolean) {
|
|
198
180
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
199
181
|
eventDispatcher?.dispatchEvent(DidDismissEvent(surfaceId, id))
|
|
182
|
+
|
|
183
|
+
TrueSheetDialogObserver.onSheetDidDismiss(this, hadParent)
|
|
200
184
|
}
|
|
201
185
|
|
|
202
|
-
override fun viewControllerDidChangeDetent(index: Int, position: Float) {
|
|
186
|
+
override fun viewControllerDidChangeDetent(index: Int, position: Float, detent: Float) {
|
|
203
187
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
204
|
-
eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position))
|
|
188
|
+
eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position, detent))
|
|
205
189
|
}
|
|
206
190
|
|
|
207
|
-
override fun viewControllerDidDragBegin(index: Int, position: Float) {
|
|
191
|
+
override fun viewControllerDidDragBegin(index: Int, position: Float, detent: Float) {
|
|
208
192
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
209
|
-
eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position))
|
|
193
|
+
eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position, detent))
|
|
210
194
|
}
|
|
211
195
|
|
|
212
|
-
override fun viewControllerDidDragChange(index: Int, position: Float) {
|
|
196
|
+
override fun viewControllerDidDragChange(index: Int, position: Float, detent: Float) {
|
|
213
197
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
214
|
-
eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position))
|
|
198
|
+
eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position, detent))
|
|
215
199
|
}
|
|
216
200
|
|
|
217
|
-
override fun viewControllerDidDragEnd(index: Int, position: Float) {
|
|
201
|
+
override fun viewControllerDidDragEnd(index: Int, position: Float, detent: Float) {
|
|
218
202
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
219
|
-
eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position))
|
|
203
|
+
eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position, detent))
|
|
220
204
|
}
|
|
221
205
|
|
|
222
|
-
override fun viewControllerDidChangePosition(index:
|
|
206
|
+
override fun viewControllerDidChangePosition(index: Float, position: Float, detent: Float, realtime: Boolean) {
|
|
223
207
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
224
|
-
eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position,
|
|
208
|
+
eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position, detent, realtime))
|
|
225
209
|
}
|
|
226
210
|
|
|
227
211
|
override fun viewControllerDidChangeSize(width: Int, height: Int) {
|
|
228
212
|
updateState(width, height)
|
|
229
213
|
}
|
|
230
214
|
|
|
215
|
+
override fun viewControllerWillFocus() {
|
|
216
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
217
|
+
eventDispatcher?.dispatchEvent(WillFocusEvent(surfaceId, id))
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
override fun viewControllerDidFocus() {
|
|
221
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
222
|
+
eventDispatcher?.dispatchEvent(FocusEvent(surfaceId, id))
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
override fun viewControllerWillBlur() {
|
|
226
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
227
|
+
eventDispatcher?.dispatchEvent(WillBlurEvent(surfaceId, id))
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
override fun viewControllerDidBlur() {
|
|
231
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
232
|
+
eventDispatcher?.dispatchEvent(BlurEvent(surfaceId, id))
|
|
233
|
+
}
|
|
234
|
+
|
|
231
235
|
// ==================== Property Setters (forward to controller) ====================
|
|
232
236
|
|
|
233
237
|
fun setMaxHeight(height: Int) {
|
|
@@ -269,6 +273,10 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
269
273
|
viewController.dismissible = dismissible
|
|
270
274
|
}
|
|
271
275
|
|
|
276
|
+
fun setDraggable(draggable: Boolean) {
|
|
277
|
+
viewController.draggable = draggable
|
|
278
|
+
}
|
|
279
|
+
|
|
272
280
|
fun setGrabber(grabber: Boolean) {
|
|
273
281
|
viewController.grabber = grabber
|
|
274
282
|
}
|
|
@@ -276,9 +284,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
276
284
|
fun setDetents(newDetents: MutableList<Double>) {
|
|
277
285
|
viewController.detents = newDetents
|
|
278
286
|
}
|
|
279
|
-
|
|
280
|
-
fun setBlurTint(tint: String?) {}
|
|
281
|
-
|
|
282
287
|
fun setEdgeToEdgeFullScreen(edgeToEdgeFullScreen: Boolean) {
|
|
283
288
|
viewController.edgeToEdgeFullScreen = edgeToEdgeFullScreen
|
|
284
289
|
}
|
|
@@ -303,6 +308,9 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
303
308
|
|
|
304
309
|
@UiThread
|
|
305
310
|
fun present(detentIndex: Int, animated: Boolean = true, promiseCallback: () -> Unit) {
|
|
311
|
+
if (!viewController.isPresented) {
|
|
312
|
+
viewController.parentSheetView = TrueSheetDialogObserver.onSheetWillPresent(this, detentIndex)
|
|
313
|
+
}
|
|
306
314
|
viewController.presentPromise = promiseCallback
|
|
307
315
|
viewController.present(detentIndex, animated)
|
|
308
316
|
}
|
|
@@ -336,9 +344,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
336
344
|
|
|
337
345
|
override fun containerViewHeaderDidChangeSize(width: Int, height: Int) {
|
|
338
346
|
updateSheetIfNeeded()
|
|
339
|
-
// Update state for scroll view behavior to work correctly with header
|
|
340
|
-
val sheetHeight = TrueSheetViewController.getEffectiveSheetHeight(viewController.height, height)
|
|
341
|
-
updateState(viewController.width, sheetHeight)
|
|
342
347
|
}
|
|
343
348
|
|
|
344
349
|
override fun containerViewFooterDidChangeSize(width: Int, height: Int) {
|