@lodev09/react-native-true-sheet 4.0.0-beta.28 → 4.0.0-beta.29
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.
|
@@ -22,8 +22,7 @@ using namespace facebook::react;
|
|
|
22
22
|
NSInteger _presenterScreenTag;
|
|
23
23
|
NSMutableSet<NSNumber *> *_screenTags;
|
|
24
24
|
__weak UIViewController *_presenterScreenController;
|
|
25
|
-
|
|
26
|
-
__weak UIWindow *_window;
|
|
25
|
+
NSHashTable<UIViewController *> *_parentScreenControllers;
|
|
27
26
|
BOOL _dismissedByNavigation;
|
|
28
27
|
BOOL _pendingInteractiveDismiss;
|
|
29
28
|
BOOL _pendingInteractiveAppear;
|
|
@@ -39,8 +38,7 @@ using namespace facebook::react;
|
|
|
39
38
|
_presenterScreenTag = 0;
|
|
40
39
|
_screenTags = [NSMutableSet new];
|
|
41
40
|
_presenterScreenController = nil;
|
|
42
|
-
|
|
43
|
-
_window = nil;
|
|
41
|
+
_parentScreenControllers = [NSHashTable weakObjectsHashTable];
|
|
44
42
|
}
|
|
45
43
|
return self;
|
|
46
44
|
}
|
|
@@ -143,8 +141,7 @@ using namespace facebook::react;
|
|
|
143
141
|
_presenterScreenTag = 0;
|
|
144
142
|
[_screenTags removeAllObjects];
|
|
145
143
|
_presenterScreenController = nil;
|
|
146
|
-
|
|
147
|
-
_window = view.window;
|
|
144
|
+
[_parentScreenControllers removeAllObjects];
|
|
148
145
|
|
|
149
146
|
Class screenViewClass = NSClassFromString(@"RNSScreenView");
|
|
150
147
|
if (!screenViewClass)
|
|
@@ -165,8 +162,8 @@ using namespace facebook::react;
|
|
|
165
162
|
if (!_presenterScreenController) {
|
|
166
163
|
_presenterScreenTag = current.tag;
|
|
167
164
|
_presenterScreenController = screenVC;
|
|
168
|
-
} else if (
|
|
169
|
-
|
|
165
|
+
} else if (screenVC) {
|
|
166
|
+
[_parentScreenControllers addObject:screenVC];
|
|
170
167
|
}
|
|
171
168
|
}
|
|
172
169
|
}
|
|
@@ -239,27 +236,16 @@ using namespace facebook::react;
|
|
|
239
236
|
}
|
|
240
237
|
|
|
241
238
|
- (BOOL)shouldDismissForScreenTag:(NSInteger)screenTag {
|
|
242
|
-
// For parent screens
|
|
243
|
-
//
|
|
239
|
+
// For parent screens, dismiss if one was popped or covered in its own stack. The presenter
|
|
240
|
+
// may already be detached (e.g. its nested stack unmounting), so it can't be checked here.
|
|
241
|
+
// Skip if all are still top (e.g. modal dismiss - sheet dismisses naturally)
|
|
244
242
|
if (screenTag != _presenterScreenTag) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return NO;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
if (!_parentScreenController) {
|
|
254
|
-
return NO;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// If presenter view is no longer in window, the nested stack is being removed
|
|
258
|
-
UIView *presenterView = [_window viewWithTag:_presenterScreenTag];
|
|
259
|
-
if (presenterView == nil || presenterView.window == nil) {
|
|
260
|
-
return YES;
|
|
243
|
+
for (UIViewController *screen in _parentScreenControllers) {
|
|
244
|
+
UINavigationController *nav = screen.navigationController;
|
|
245
|
+
if (nav && nav.topViewController != screen) {
|
|
246
|
+
return YES;
|
|
247
|
+
}
|
|
261
248
|
}
|
|
262
|
-
|
|
263
249
|
return NO;
|
|
264
250
|
}
|
|
265
251
|
|
package/package.json
CHANGED