@lodev09/react-native-true-sheet 1.1.0 → 2.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/android/build.gradle +11 -18
- package/android/gradle.properties +5 -5
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetDialog.kt +31 -8
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetEvent.kt +22 -0
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +133 -53
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +11 -13
- package/android/src/main/java/com/lodev09/truesheet/core/RootSheetView.kt +4 -13
- package/ios/Extensions/UIView+pinTo.swift +5 -0
- package/ios/TrueSheetEvent.swift +48 -0
- package/ios/TrueSheetView.swift +109 -69
- package/ios/TrueSheetViewController.swift +96 -31
- package/ios/TrueSheetViewManager.m +3 -0
- package/lib/commonjs/TrueSheet.js +17 -2
- package/lib/commonjs/TrueSheet.js.map +1 -1
- package/lib/module/TrueSheet.js +17 -2
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/typescript/commonjs/src/TrueSheet.d.ts +8 -0
- package/lib/typescript/commonjs/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/TrueSheet.types.d.ts +33 -5
- package/lib/typescript/commonjs/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/module/src/TrueSheet.d.ts +8 -0
- package/lib/typescript/module/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/module/src/TrueSheet.types.d.ts +33 -5
- package/lib/typescript/module/src/TrueSheet.types.d.ts.map +1 -1
- package/package.json +8 -6
- package/react-native-true-sheet.podspec +1 -1
- package/src/TrueSheet.tsx +31 -10
- package/src/TrueSheet.types.ts +43 -5
- package/android/src/main/java/com/lodev09/truesheet/events/ContainerSizeChangeEvent.kt +0 -23
- package/android/src/main/java/com/lodev09/truesheet/events/DismissEvent.kt +0 -16
- package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -16
- package/android/src/main/java/com/lodev09/truesheet/events/PresentEvent.kt +0 -23
- package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -23
package/ios/TrueSheetView.swift
CHANGED
|
@@ -17,6 +17,9 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
17
17
|
@objc var onPresent: RCTDirectEventBlock?
|
|
18
18
|
@objc var onSizeChange: RCTDirectEventBlock?
|
|
19
19
|
@objc var onContainerSizeChange: RCTDirectEventBlock?
|
|
20
|
+
@objc var onDragBegin: RCTDirectEventBlock?
|
|
21
|
+
@objc var onDragChange: RCTDirectEventBlock?
|
|
22
|
+
@objc var onDragEnd: RCTDirectEventBlock?
|
|
20
23
|
|
|
21
24
|
// MARK: - React Properties
|
|
22
25
|
|
|
@@ -28,6 +31,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
28
31
|
private var isPresented = false
|
|
29
32
|
private var activeIndex: Int?
|
|
30
33
|
private var bridge: RCTBridge?
|
|
34
|
+
private var eventDispatcher: (any RCTEventDispatcherProtocol)?
|
|
31
35
|
private var viewController: TrueSheetViewController
|
|
32
36
|
|
|
33
37
|
private var touchHandler: RCTTouchHandler
|
|
@@ -37,17 +41,13 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
37
41
|
// MARK: - Content properties
|
|
38
42
|
|
|
39
43
|
private var containerView: UIView?
|
|
40
|
-
|
|
41
44
|
private var contentView: UIView?
|
|
42
45
|
private var footerView: UIView?
|
|
46
|
+
private var scrollView: UIView?
|
|
43
47
|
|
|
44
|
-
// Reference the bottom constraint to adjust during keyboard event
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// Reference height constraint during content updates
|
|
48
|
-
private var footerViewHeightConstraint: NSLayoutConstraint?
|
|
49
|
-
|
|
50
|
-
private var scrollableTag: NSNumber?
|
|
48
|
+
// Bottom: Reference the bottom constraint to adjust during keyboard event
|
|
49
|
+
// Height: Reference height constraint during content updates
|
|
50
|
+
private var footerConstraints: Constraints?
|
|
51
51
|
|
|
52
52
|
private var uiManager: RCTUIManager? {
|
|
53
53
|
guard let uiManager = bridge?.uiManager else { return nil }
|
|
@@ -58,6 +58,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
58
58
|
|
|
59
59
|
init(with bridge: RCTBridge) {
|
|
60
60
|
self.bridge = bridge
|
|
61
|
+
eventDispatcher = bridge.eventDispatcher()
|
|
61
62
|
|
|
62
63
|
viewController = TrueSheetViewController()
|
|
63
64
|
touchHandler = RCTTouchHandler(bridge: bridge)
|
|
@@ -96,12 +97,23 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
96
97
|
|
|
97
98
|
super.removeReactSubview(subview)
|
|
98
99
|
|
|
100
|
+
// Touch handler for Old Arch
|
|
99
101
|
touchHandler.detach(from: subview)
|
|
102
|
+
|
|
103
|
+
// Touch handler that works in New Arch
|
|
100
104
|
surfaceTouchHandler.detach(from: subview)
|
|
101
105
|
|
|
106
|
+
// Remove all constraints
|
|
107
|
+
// Fixes New Arch weird layout issue :/
|
|
108
|
+
containerView?.unpin()
|
|
109
|
+
footerView?.unpin()
|
|
110
|
+
contentView?.unpin()
|
|
111
|
+
scrollView?.unpin()
|
|
112
|
+
|
|
102
113
|
containerView = nil
|
|
103
114
|
contentView = nil
|
|
104
115
|
footerView = nil
|
|
116
|
+
scrollView = nil
|
|
105
117
|
}
|
|
106
118
|
|
|
107
119
|
override func didUpdateReactSubviews() {
|
|
@@ -126,8 +138,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
126
138
|
// Set footer constraints
|
|
127
139
|
if let footerView {
|
|
128
140
|
footerView.pinTo(view: viewController.view, from: [.left, .right, .bottom], with: 0) { constraints in
|
|
129
|
-
self.
|
|
130
|
-
self.footerViewHeightConstraint = constraints.height
|
|
141
|
+
self.footerConstraints = constraints
|
|
131
142
|
}
|
|
132
143
|
|
|
133
144
|
// Set initial footer height
|
|
@@ -141,16 +152,14 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
141
152
|
present(at: initialIndex, promise: nil, animated: initialIndexAnimated)
|
|
142
153
|
}
|
|
143
154
|
|
|
144
|
-
onMount
|
|
155
|
+
dispatchEvent(name: "onMount", block: onMount, data: nil)
|
|
145
156
|
}
|
|
146
157
|
}
|
|
147
158
|
|
|
148
159
|
// MARK: - ViewController delegate
|
|
149
160
|
|
|
150
161
|
func viewControllerKeyboardWillHide() {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
footerViewBottomConstraint.constant = 0
|
|
162
|
+
footerConstraints?.bottom?.constant = 0
|
|
154
163
|
|
|
155
164
|
UIView.animate(withDuration: 0.3) {
|
|
156
165
|
self.viewController.view.layoutIfNeeded()
|
|
@@ -158,9 +167,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
158
167
|
}
|
|
159
168
|
|
|
160
169
|
func viewControllerKeyboardWillShow(_ keyboardHeight: CGFloat) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
footerViewBottomConstraint.constant = -keyboardHeight
|
|
170
|
+
footerConstraints?.bottom?.constant = -keyboardHeight
|
|
164
171
|
|
|
165
172
|
UIView.animate(withDuration: 0.3) {
|
|
166
173
|
self.viewController.view.layoutIfNeeded()
|
|
@@ -169,24 +176,46 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
169
176
|
|
|
170
177
|
func viewControllerDidChangeWidth(_ width: CGFloat) {
|
|
171
178
|
// We only pass width to JS since height is handled by the constraints
|
|
172
|
-
onContainerSizeChange
|
|
179
|
+
dispatchEvent(name: "onContainerSizeChange", block: onContainerSizeChange, data: ["width": width])
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
func viewControllerDidDrag(_ state: UIGestureRecognizer.State, _ height: CGFloat) {
|
|
183
|
+
let sizeInfo = SizeInfo(index: activeIndex ?? 0, value: height)
|
|
184
|
+
|
|
185
|
+
switch state {
|
|
186
|
+
case .began:
|
|
187
|
+
dispatchEvent(name: "onDragBegin", block: onDragBegin, data: sizeInfoData(from: sizeInfo))
|
|
188
|
+
case .changed:
|
|
189
|
+
dispatchEvent(name: "onDragChange", block: onDragChange, data: sizeInfoData(from: sizeInfo))
|
|
190
|
+
case .ended, .cancelled:
|
|
191
|
+
dispatchEvent(name: "onDragEnd", block: onDragEnd, data: sizeInfoData(from: sizeInfo))
|
|
192
|
+
default:
|
|
193
|
+
Logger.info("Drag state is not supported")
|
|
194
|
+
}
|
|
173
195
|
}
|
|
174
196
|
|
|
175
197
|
func viewControllerWillAppear() {
|
|
176
|
-
|
|
198
|
+
guard let contentView, let scrollView, let containerView else {
|
|
199
|
+
return
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Add constraints to fix weirdness and support ScrollView
|
|
203
|
+
contentView.pinTo(view: containerView, constraints: nil)
|
|
204
|
+
scrollView.pinTo(view: contentView, constraints: nil)
|
|
177
205
|
}
|
|
178
206
|
|
|
179
207
|
func viewControllerDidDismiss() {
|
|
180
208
|
isPresented = false
|
|
181
209
|
activeIndex = nil
|
|
182
|
-
|
|
183
|
-
onDismiss?(nil)
|
|
210
|
+
dispatchEvent(name: "onDismiss", block: onDismiss, data: nil)
|
|
184
211
|
}
|
|
185
212
|
|
|
186
|
-
func
|
|
213
|
+
func viewControllerDidChangeSize(_ sizeInfo: SizeInfo?) {
|
|
214
|
+
guard let sizeInfo else { return }
|
|
215
|
+
|
|
187
216
|
if sizeInfo.index != activeIndex {
|
|
188
217
|
activeIndex = sizeInfo.index
|
|
189
|
-
onSizeChange
|
|
218
|
+
dispatchEvent(name: "onSizeChange", block: onSizeChange, data: sizeInfoData(from: sizeInfo))
|
|
190
219
|
}
|
|
191
220
|
}
|
|
192
221
|
|
|
@@ -209,29 +238,34 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
209
238
|
}
|
|
210
239
|
|
|
211
240
|
viewController.maxHeight = maxHeight
|
|
212
|
-
|
|
241
|
+
|
|
242
|
+
if #available(iOS 15.0, *) {
|
|
243
|
+
withPresentedSheet { _ in
|
|
244
|
+
viewController.setupSizes()
|
|
245
|
+
}
|
|
246
|
+
}
|
|
213
247
|
}
|
|
214
248
|
|
|
215
249
|
@objc
|
|
216
250
|
func setContentHeight(_ height: NSNumber) {
|
|
217
|
-
|
|
218
|
-
let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow })
|
|
219
|
-
let bottomInset = window?.safeAreaInsets.bottom ?? 0
|
|
220
|
-
|
|
221
|
-
let contentHeight = CGFloat(height.floatValue) - bottomInset
|
|
251
|
+
let contentHeight = CGFloat(height.floatValue)
|
|
222
252
|
guard viewController.contentHeight != contentHeight else {
|
|
223
253
|
return
|
|
224
254
|
}
|
|
225
255
|
|
|
226
256
|
viewController.contentHeight = contentHeight
|
|
227
|
-
|
|
257
|
+
|
|
258
|
+
if #available(iOS 15.0, *) {
|
|
259
|
+
withPresentedSheet { _ in
|
|
260
|
+
viewController.setupSizes()
|
|
261
|
+
}
|
|
262
|
+
}
|
|
228
263
|
}
|
|
229
264
|
|
|
230
265
|
@objc
|
|
231
266
|
func setFooterHeight(_ height: NSNumber) {
|
|
232
267
|
let footerHeight = CGFloat(height.floatValue)
|
|
233
|
-
guard let footerView,
|
|
234
|
-
viewController.footerHeight != footerHeight else {
|
|
268
|
+
guard let footerView, viewController.footerHeight != footerHeight else {
|
|
235
269
|
return
|
|
236
270
|
}
|
|
237
271
|
|
|
@@ -239,19 +273,28 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
239
273
|
|
|
240
274
|
if footerView.subviews.first != nil {
|
|
241
275
|
containerView?.bringSubviewToFront(footerView)
|
|
242
|
-
|
|
276
|
+
footerConstraints?.height?.constant = viewController.footerHeight
|
|
243
277
|
} else {
|
|
244
278
|
containerView?.sendSubviewToBack(footerView)
|
|
245
|
-
|
|
279
|
+
footerConstraints?.height?.constant = 0
|
|
246
280
|
}
|
|
247
281
|
|
|
248
|
-
|
|
282
|
+
if #available(iOS 15.0, *) {
|
|
283
|
+
withPresentedSheet { _ in
|
|
284
|
+
viewController.setupSizes()
|
|
285
|
+
}
|
|
286
|
+
}
|
|
249
287
|
}
|
|
250
288
|
|
|
251
289
|
@objc
|
|
252
290
|
func setSizes(_ sizes: [Any]) {
|
|
253
291
|
viewController.sizes = Array(sizes.prefix(3))
|
|
254
|
-
|
|
292
|
+
|
|
293
|
+
if #available(iOS 15.0, *) {
|
|
294
|
+
withPresentedSheet { _ in
|
|
295
|
+
viewController.setupSizes()
|
|
296
|
+
}
|
|
297
|
+
}
|
|
255
298
|
}
|
|
256
299
|
|
|
257
300
|
@objc
|
|
@@ -307,8 +350,8 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
307
350
|
viewController.dimmed = dimmed
|
|
308
351
|
|
|
309
352
|
if #available(iOS 15.0, *) {
|
|
310
|
-
withPresentedSheet {
|
|
311
|
-
viewController.setupDimmedBackground(
|
|
353
|
+
withPresentedSheet { _ in
|
|
354
|
+
viewController.setupDimmedBackground()
|
|
312
355
|
}
|
|
313
356
|
}
|
|
314
357
|
}
|
|
@@ -322,22 +365,22 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
322
365
|
viewController.dimmedIndex = index.intValue
|
|
323
366
|
|
|
324
367
|
if #available(iOS 15.0, *) {
|
|
325
|
-
withPresentedSheet {
|
|
326
|
-
viewController.setupDimmedBackground(
|
|
368
|
+
withPresentedSheet { _ in
|
|
369
|
+
viewController.setupDimmedBackground()
|
|
327
370
|
}
|
|
328
371
|
}
|
|
329
372
|
}
|
|
330
373
|
|
|
331
374
|
@objc
|
|
332
375
|
func setScrollableHandle(_ tag: NSNumber?) {
|
|
333
|
-
|
|
376
|
+
scrollView = uiManager?.view(forReactTag: tag)
|
|
334
377
|
}
|
|
335
378
|
|
|
336
379
|
// MARK: - Methods
|
|
337
380
|
|
|
338
|
-
private func sizeInfoData(from sizeInfo: SizeInfo?) -> [String: Any] {
|
|
381
|
+
private func sizeInfoData(from sizeInfo: SizeInfo?) -> [String: Any]? {
|
|
339
382
|
guard let sizeInfo else {
|
|
340
|
-
return
|
|
383
|
+
return nil
|
|
341
384
|
}
|
|
342
385
|
|
|
343
386
|
return ["index": sizeInfo.index, "value": sizeInfo.value]
|
|
@@ -355,25 +398,14 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
355
398
|
}
|
|
356
399
|
}
|
|
357
400
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
guard let contentView, let containerView, let scrollableTag else {
|
|
367
|
-
return
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
let scrollView = uiManager?.view(forReactTag: scrollableTag)
|
|
371
|
-
|
|
372
|
-
// Add constraints to fix weirdness and support ScrollView
|
|
373
|
-
if let scrollView {
|
|
374
|
-
contentView.pinTo(view: containerView, constraints: nil)
|
|
375
|
-
scrollView.pinTo(view: contentView, constraints: nil)
|
|
376
|
-
}
|
|
401
|
+
func dispatchEvent(name: String, block: RCTDirectEventBlock?, data: [String: Any]?) {
|
|
402
|
+
// eventDispatcher doesn't work in New Arch so we need to call it directly :/
|
|
403
|
+
// we needed eventDispatcher for Reanimated to work on old arch.
|
|
404
|
+
#if RCT_NEW_ARCH_ENABLED
|
|
405
|
+
block?(data)
|
|
406
|
+
#else
|
|
407
|
+
eventDispatcher?.send(TrueSheetEvent(viewTag: reactTag, name: name, data: data))
|
|
408
|
+
#endif
|
|
377
409
|
}
|
|
378
410
|
|
|
379
411
|
func dismiss(promise: Promise) {
|
|
@@ -400,19 +432,27 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
|
|
|
400
432
|
return
|
|
401
433
|
}
|
|
402
434
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
435
|
+
if isPresented {
|
|
436
|
+
withPresentedSheet { sheet in
|
|
437
|
+
sheet.selectedDetentIdentifier = viewController.detentIdentifierForIndex(index)
|
|
438
|
+
|
|
439
|
+
// Trigger onSizeChange event when size is changed while presenting
|
|
440
|
+
viewControllerDidChangeSize(self.viewController.currentSizeInfo)
|
|
407
441
|
promise?.resolve(nil)
|
|
408
|
-
}
|
|
442
|
+
}
|
|
443
|
+
} else {
|
|
444
|
+
viewController.prepareForPresentation(at: index) {
|
|
409
445
|
// Keep track of the active index
|
|
410
446
|
self.activeIndex = index
|
|
411
447
|
self.isPresented = true
|
|
412
448
|
|
|
413
449
|
rvc.present(self.viewController, animated: animated) {
|
|
414
|
-
|
|
415
|
-
|
|
450
|
+
if #available(iOS 15.0, *) {
|
|
451
|
+
self.viewController.observeDrag()
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
let data = self.sizeInfoData(from: self.viewController.currentSizeInfo)
|
|
455
|
+
self.dispatchEvent(name: "onPresent", block: self.onPresent, data: data)
|
|
416
456
|
promise?.resolve(nil)
|
|
417
457
|
}
|
|
418
458
|
}
|
|
@@ -18,10 +18,11 @@ struct SizeInfo {
|
|
|
18
18
|
protocol TrueSheetViewControllerDelegate: AnyObject {
|
|
19
19
|
func viewControllerDidChangeWidth(_ width: CGFloat)
|
|
20
20
|
func viewControllerDidDismiss()
|
|
21
|
-
func
|
|
21
|
+
func viewControllerDidChangeSize(_ sizeInfo: SizeInfo?)
|
|
22
22
|
func viewControllerWillAppear()
|
|
23
23
|
func viewControllerKeyboardWillShow(_ keyboardHeight: CGFloat)
|
|
24
24
|
func viewControllerKeyboardWillHide()
|
|
25
|
+
func viewControllerDidDrag(_ state: UIPanGestureRecognizer.State, _ height: CGFloat)
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
// MARK: - TrueSheetViewController
|
|
@@ -31,7 +32,11 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
31
32
|
|
|
32
33
|
weak var delegate: TrueSheetViewControllerDelegate?
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
/// The bottomInset of the sheet.
|
|
36
|
+
/// We will be excluding these on height calculation for conistency with scrollable content.
|
|
37
|
+
private var bottomInset: CGFloat
|
|
38
|
+
private var backgroundView: UIVisualEffectView
|
|
39
|
+
|
|
35
40
|
var lastViewWidth: CGFloat = 0
|
|
36
41
|
var detentValues: [String: SizeInfo] = [:]
|
|
37
42
|
|
|
@@ -49,11 +54,23 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
49
54
|
var dimmed = true
|
|
50
55
|
var dimmedIndex: Int? = 0
|
|
51
56
|
|
|
57
|
+
var currentSizeInfo: SizeInfo? {
|
|
58
|
+
guard #available(iOS 15.0, *), let sheet = sheetPresentationController,
|
|
59
|
+
let rawValue = sheet.selectedDetentIdentifier?.rawValue else {
|
|
60
|
+
return nil
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return detentValues[rawValue]
|
|
64
|
+
}
|
|
65
|
+
|
|
52
66
|
// MARK: - Setup
|
|
53
67
|
|
|
54
68
|
init() {
|
|
55
69
|
backgroundView = UIVisualEffectView()
|
|
56
70
|
|
|
71
|
+
let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow })
|
|
72
|
+
bottomInset = window?.safeAreaInsets.bottom ?? 0
|
|
73
|
+
|
|
57
74
|
super.init(nibName: nil, bundle: nil)
|
|
58
75
|
|
|
59
76
|
backgroundView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
|
@@ -76,7 +93,7 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
76
93
|
func sheetPresentationControllerDidChangeSelectedDetentIdentifier(_ sheet: UISheetPresentationController) {
|
|
77
94
|
if let rawValue = sheet.selectedDetentIdentifier?.rawValue,
|
|
78
95
|
let sizeInfo = detentValues[rawValue] {
|
|
79
|
-
delegate?.
|
|
96
|
+
delegate?.viewControllerDidChangeSize(sizeInfo)
|
|
80
97
|
}
|
|
81
98
|
}
|
|
82
99
|
|
|
@@ -96,6 +113,18 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
96
113
|
)
|
|
97
114
|
}
|
|
98
115
|
|
|
116
|
+
@objc
|
|
117
|
+
func handlePanGesture(_ gesture: UIPanGestureRecognizer) {
|
|
118
|
+
guard let view = gesture.view else { return }
|
|
119
|
+
|
|
120
|
+
// Calculate visible height
|
|
121
|
+
let screenHeight = UIScreen.main.bounds.height
|
|
122
|
+
let sheetY = view.frame.origin.y
|
|
123
|
+
let height = screenHeight - bottomInset - sheetY
|
|
124
|
+
|
|
125
|
+
delegate?.viewControllerDidDrag(gesture.state, height)
|
|
126
|
+
}
|
|
127
|
+
|
|
99
128
|
@objc
|
|
100
129
|
private func keyboardWillShow(_ notification: Notification) {
|
|
101
130
|
guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
|
|
@@ -146,7 +175,11 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
146
175
|
/// Setup dimmed sheet.
|
|
147
176
|
/// `dimmedIndex` will further customize the dimming behavior.
|
|
148
177
|
@available(iOS 15.0, *)
|
|
149
|
-
func setupDimmedBackground(
|
|
178
|
+
func setupDimmedBackground() {
|
|
179
|
+
guard let sheet = sheetPresentationController else {
|
|
180
|
+
return
|
|
181
|
+
}
|
|
182
|
+
|
|
150
183
|
if dimmed, dimmedIndex == 0 {
|
|
151
184
|
sheet.largestUndimmedDetentIdentifier = nil
|
|
152
185
|
} else {
|
|
@@ -162,49 +195,81 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
|
|
|
162
195
|
}
|
|
163
196
|
}
|
|
164
197
|
|
|
165
|
-
///
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
guard #available(iOS 15.0, *), let sheet = sheetPresentationController else {
|
|
170
|
-
completion?(defaultSizeInfo)
|
|
198
|
+
/// Setup sheet detents by sizes.
|
|
199
|
+
@available(iOS 15.0, *)
|
|
200
|
+
func setupSizes() {
|
|
201
|
+
guard let sheet = sheetPresentationController else {
|
|
171
202
|
return
|
|
172
203
|
}
|
|
173
204
|
|
|
205
|
+
// Configure detents
|
|
174
206
|
detentValues = [:]
|
|
175
|
-
|
|
176
207
|
var detents: [UISheetPresentationController.Detent] = []
|
|
177
208
|
|
|
178
209
|
for (index, size) in sizes.enumerated() {
|
|
179
|
-
|
|
210
|
+
// Exclude bottom safe area for consistency with a Scrollable content
|
|
211
|
+
let adjustedContentHeight = contentHeight - bottomInset
|
|
212
|
+
let detent = detentFor(size, with: adjustedContentHeight + footerHeight, with: maxHeight) { id, value in
|
|
180
213
|
self.detentValues[id] = SizeInfo(index: index, value: value)
|
|
181
214
|
}
|
|
182
215
|
|
|
183
216
|
detents.append(detent)
|
|
184
217
|
}
|
|
185
218
|
|
|
186
|
-
sheet.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
219
|
+
sheet.detents = detents
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/// Get the detent identifier for a given index
|
|
223
|
+
@available(iOS 15.0, *)
|
|
224
|
+
func detentIdentifierForIndex(_ index: Int) -> UISheetPresentationController.Detent.Identifier {
|
|
225
|
+
guard let sheet = sheetPresentationController else {
|
|
226
|
+
return .medium
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
var identifier = UISheetPresentationController.Detent.Identifier.medium
|
|
230
|
+
if sheet.detents.indices.contains(index) {
|
|
231
|
+
let detent = sheet.detents[index]
|
|
232
|
+
if #available(iOS 16.0, *) {
|
|
233
|
+
identifier = detent.identifier
|
|
234
|
+
} else if detent == .large() {
|
|
235
|
+
identifier = .large
|
|
202
236
|
}
|
|
237
|
+
}
|
|
203
238
|
|
|
204
|
-
|
|
239
|
+
return identifier
|
|
240
|
+
}
|
|
205
241
|
|
|
206
|
-
|
|
207
|
-
|
|
242
|
+
/// Observe while the sheet is being dragged.
|
|
243
|
+
@available(iOS 15.0, *)
|
|
244
|
+
func observeDrag() {
|
|
245
|
+
guard let sheet = sheetPresentationController,
|
|
246
|
+
let presentedView = sheet.presentedView else {
|
|
247
|
+
return
|
|
208
248
|
}
|
|
249
|
+
|
|
250
|
+
for recognizer in presentedView.gestureRecognizers ?? [] {
|
|
251
|
+
if let panGesture = recognizer as? UIPanGestureRecognizer {
|
|
252
|
+
panGesture.addTarget(self, action: #selector(handlePanGesture(_:)))
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/// Prepares the view controller for sheet presentation
|
|
258
|
+
func prepareForPresentation(at index: Int = 0, _ completion: (() -> Void)?) {
|
|
259
|
+
guard #available(iOS 15.0, *), let sheet = sheetPresentationController else {
|
|
260
|
+
completion?()
|
|
261
|
+
return
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
setupSizes()
|
|
265
|
+
setupDimmedBackground()
|
|
266
|
+
|
|
267
|
+
sheet.delegate = self
|
|
268
|
+
sheet.prefersEdgeAttachedInCompactHeight = true
|
|
269
|
+
sheet.prefersGrabberVisible = grabber
|
|
270
|
+
sheet.preferredCornerRadius = cornerRadius
|
|
271
|
+
sheet.selectedDetentIdentifier = detentIdentifierForIndex(index)
|
|
272
|
+
|
|
273
|
+
completion?()
|
|
209
274
|
}
|
|
210
275
|
}
|
|
@@ -27,6 +27,9 @@ RCT_EXPORT_VIEW_PROPERTY(onMount, RCTDirectEventBlock)
|
|
|
27
27
|
RCT_EXPORT_VIEW_PROPERTY(onPresent, RCTDirectEventBlock)
|
|
28
28
|
RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)
|
|
29
29
|
RCT_EXPORT_VIEW_PROPERTY(onSizeChange, RCTDirectEventBlock)
|
|
30
|
+
RCT_EXPORT_VIEW_PROPERTY(onDragBegin, RCTDirectEventBlock)
|
|
31
|
+
RCT_EXPORT_VIEW_PROPERTY(onDragChange, RCTDirectEventBlock)
|
|
32
|
+
RCT_EXPORT_VIEW_PROPERTY(onDragEnd, RCTDirectEventBlock)
|
|
30
33
|
RCT_EXPORT_VIEW_PROPERTY(onContainerSizeChange, RCTDirectEventBlock)
|
|
31
34
|
|
|
32
35
|
// Properties
|
|
@@ -32,6 +32,9 @@ class TrueSheet extends _react.PureComponent {
|
|
|
32
32
|
this.onDismiss = this.onDismiss.bind(this);
|
|
33
33
|
this.onPresent = this.onPresent.bind(this);
|
|
34
34
|
this.onSizeChange = this.onSizeChange.bind(this);
|
|
35
|
+
this.onDragBegin = this.onDragBegin.bind(this);
|
|
36
|
+
this.onDragChange = this.onDragChange.bind(this);
|
|
37
|
+
this.onDragEnd = this.onDragEnd.bind(this);
|
|
35
38
|
this.onContentLayout = this.onContentLayout.bind(this);
|
|
36
39
|
this.onFooterLayout = this.onFooterLayout.bind(this);
|
|
37
40
|
this.onContainerSizeChange = this.onContainerSizeChange.bind(this);
|
|
@@ -96,7 +99,7 @@ class TrueSheet extends _react.PureComponent {
|
|
|
96
99
|
});
|
|
97
100
|
}
|
|
98
101
|
onSizeChange(event) {
|
|
99
|
-
this.props.onSizeChange?.(event
|
|
102
|
+
this.props.onSizeChange?.(event);
|
|
100
103
|
}
|
|
101
104
|
onContainerSizeChange(event) {
|
|
102
105
|
this.setState({
|
|
@@ -105,7 +108,7 @@ class TrueSheet extends _react.PureComponent {
|
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
onPresent(event) {
|
|
108
|
-
this.props.onPresent?.(event
|
|
111
|
+
this.props.onPresent?.(event);
|
|
109
112
|
}
|
|
110
113
|
onFooterLayout(event) {
|
|
111
114
|
this.setState({
|
|
@@ -123,6 +126,15 @@ class TrueSheet extends _react.PureComponent {
|
|
|
123
126
|
onMount() {
|
|
124
127
|
this.props.onMount?.();
|
|
125
128
|
}
|
|
129
|
+
onDragBegin(event) {
|
|
130
|
+
this.props.onDragBegin?.(event);
|
|
131
|
+
}
|
|
132
|
+
onDragChange(event) {
|
|
133
|
+
this.props.onDragChange?.(event);
|
|
134
|
+
}
|
|
135
|
+
onDragEnd(event) {
|
|
136
|
+
this.props.onDragEnd?.(event);
|
|
137
|
+
}
|
|
126
138
|
|
|
127
139
|
/**
|
|
128
140
|
* Present the sheet. Optionally accepts a size `index`.
|
|
@@ -200,6 +212,9 @@ class TrueSheet extends _react.PureComponent {
|
|
|
200
212
|
onPresent: this.onPresent,
|
|
201
213
|
onDismiss: this.onDismiss,
|
|
202
214
|
onSizeChange: this.onSizeChange,
|
|
215
|
+
onDragBegin: this.onDragBegin,
|
|
216
|
+
onDragChange: this.onDragChange,
|
|
217
|
+
onDragEnd: this.onDragEnd,
|
|
203
218
|
onContainerSizeChange: this.onContainerSizeChange,
|
|
204
219
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
205
220
|
collapsable: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_TrueSheetModule","_TrueSheetGrabber","_TrueSheetFooter","_jsxRuntime","NATIVE_COMPONENT_NAME","LINKING_ERROR","Platform","select","ios","default","TrueSheetNativeView","requireNativeComponent","Error","TrueSheet","PureComponent","displayName","handles","constructor","props","ref","createRef","onMount","bind","onDismiss","onPresent","onSizeChange","onContentLayout","onFooterLayout","onContainerSizeChange","state","containerWidth","undefined","containerHeight","contentHeight","footerHeight","scrollableHandle","getHandle","name","handle","console","warn","present","index","TrueSheetModule","dismiss","resize","nodeHandle","findNodeHandle","current","updateState","scrollRef","setState","event","nativeEvent","width","height","layout","componentDidMount","sizes","length","componentDidUpdate","render","backgroundColor","dismissible","grabber","dimmed","initialIndexAnimated","edgeToEdge","keyboardMode","initialIndex","dimmedIndex","grabberProps","blurTint","cornerRadius","maxHeight","FooterComponent","style","contentContainerStyle","children","rest","jsx","$nativeSheet","background","processColor","jsxs","View","collapsable","overflow","android","onLayout","TrueSheetFooter","Component","OS","TrueSheetGrabber","visible","exports","position","left","zIndex"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_TrueSheetModule","_TrueSheetGrabber","_TrueSheetFooter","_jsxRuntime","NATIVE_COMPONENT_NAME","LINKING_ERROR","Platform","select","ios","default","TrueSheetNativeView","requireNativeComponent","Error","TrueSheet","PureComponent","displayName","handles","constructor","props","ref","createRef","onMount","bind","onDismiss","onPresent","onSizeChange","onDragBegin","onDragChange","onDragEnd","onContentLayout","onFooterLayout","onContainerSizeChange","state","containerWidth","undefined","containerHeight","contentHeight","footerHeight","scrollableHandle","getHandle","name","handle","console","warn","present","index","TrueSheetModule","dismiss","resize","nodeHandle","findNodeHandle","current","updateState","scrollRef","setState","event","nativeEvent","width","height","layout","componentDidMount","sizes","length","componentDidUpdate","render","backgroundColor","dismissible","grabber","dimmed","initialIndexAnimated","edgeToEdge","keyboardMode","initialIndex","dimmedIndex","grabberProps","blurTint","cornerRadius","maxHeight","FooterComponent","style","contentContainerStyle","children","rest","jsx","$nativeSheet","background","processColor","jsxs","View","collapsable","overflow","android","onLayout","TrueSheetFooter","Component","OS","TrueSheetGrabber","visible","exports","position","left","zIndex"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":"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","ignoreList":[]}
|