PHP 7.4.33
Preview: RCTModalHostViewManager.m Size: 3.87 KB
/var/www/uibuilder.cmshelp.dk/httpdocs/node_modules/react-native/React/Views/RCTModalHostViewManager.m
/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

#import "RCTModalHostViewManager.h"

#import "RCTBridge.h"
#import "RCTModalHostView.h"
#import "RCTModalHostViewController.h"
#import "RCTModalManager.h"
#import "RCTShadowView.h"
#import "RCTUtils.h"

@interface RCTModalHostShadowView : RCTShadowView

@end

@implementation RCTModalHostShadowView

- (void)insertReactSubview:(id<RCTComponent>)subview atIndex:(NSInteger)atIndex
{
  [super insertReactSubview:subview atIndex:atIndex];
  if ([subview isKindOfClass:[RCTShadowView class]]) {
    ((RCTShadowView *)subview).size = RCTScreenSize();
  }
}

@end

@interface RCTModalHostViewManager () <RCTModalHostViewInteractor>

@end

@implementation RCTModalHostViewManager {
  NSPointerArray *_hostViews;
}

RCT_EXPORT_MODULE()

- (UIView *)view
{
  RCTModalHostView *view = [[RCTModalHostView alloc] initWithBridge:self.bridge];
  view.delegate = self;
  if (!_hostViews) {
    _hostViews = [NSPointerArray weakObjectsPointerArray];
  }
  [_hostViews addPointer:(__bridge void *)view];
  return view;
}

- (void)presentModalHostView:(RCTModalHostView *)modalHostView
          withViewController:(RCTModalHostViewController *)viewController
                    animated:(BOOL)animated
{
  dispatch_block_t completionBlock = ^{
    if (modalHostView.onShow) {
      modalHostView.onShow(nil);
    }
  };
  dispatch_async(dispatch_get_main_queue(), ^{
    if (self->_presentationBlock) {
      self->_presentationBlock([modalHostView reactViewController], viewController, animated, completionBlock);
    } else {
      [[modalHostView reactViewController] presentViewController:viewController
                                                        animated:animated
                                                      completion:completionBlock];
    }
  });
}

- (void)dismissModalHostView:(RCTModalHostView *)modalHostView
          withViewController:(RCTModalHostViewController *)viewController
                    animated:(BOOL)animated
{
  dispatch_block_t completionBlock = ^{
    if (modalHostView.identifier) {
      [[self.bridge moduleForClass:[RCTModalManager class]] modalDismissed:modalHostView.identifier];
    }
  };
  dispatch_async(dispatch_get_main_queue(), ^{
    if (self->_dismissalBlock) {
      self->_dismissalBlock([modalHostView reactViewController], viewController, animated, completionBlock);
    } else if (viewController.presentingViewController) {
      [viewController.presentingViewController dismissViewControllerAnimated:animated completion:completionBlock];
    } else {
      // Make sure to call the completion block in case the presenting view controller is nil
      // In an internal app we have a use case where a modal presents another view without bein dismissed
      // This, somehow, invalidate the presenting view controller and the modal remains always visible.
      completionBlock();
    }
  });
}

- (RCTShadowView *)shadowView
{
  return [RCTModalHostShadowView new];
}

- (void)invalidate
{
  for (RCTModalHostView *hostView in _hostViews) {
    [hostView invalidate];
  }
  _hostViews = nil;
}

RCT_EXPORT_VIEW_PROPERTY(animationType, NSString)
RCT_EXPORT_VIEW_PROPERTY(presentationStyle, UIModalPresentationStyle)
RCT_EXPORT_VIEW_PROPERTY(transparent, BOOL)
RCT_EXPORT_VIEW_PROPERTY(statusBarTranslucent, BOOL)
RCT_EXPORT_VIEW_PROPERTY(hardwareAccelerated, BOOL)
RCT_EXPORT_VIEW_PROPERTY(animated, BOOL)
RCT_EXPORT_VIEW_PROPERTY(onShow, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(identifier, NSNumber)
RCT_EXPORT_VIEW_PROPERTY(supportedOrientations, NSArray)
RCT_EXPORT_VIEW_PROPERTY(onOrientationChange, RCTDirectEventBlock)
RCT_EXPORT_VIEW_PROPERTY(visible, BOOL)
RCT_EXPORT_VIEW_PROPERTY(onRequestClose, RCTDirectEventBlock)

// Fabric only
RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)

@end

Directory Contents

Dirs: 3 × Files: 59
Name Size Perms Modified Actions
- drwxr-xr-x 2025-03-28 11:04:43
Edit Download
- drwxr-xr-x 2025-03-28 11:04:43
Edit Download
- drwxr-xr-x 2025-03-28 11:04:43
Edit Download
283 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
444 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
418 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.51 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
446 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
880 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
332 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.01 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
20.67 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
372 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.74 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.80 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
20.24 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
463 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
640 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
380 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
5.49 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
306 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
683 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.52 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
286 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.96 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.70 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
18.54 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
2.29 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.57 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.78 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
6.86 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
446 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.85 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
997 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
3.87 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
399 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
670 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
400 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
880 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.09 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
387 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
429 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
1.06 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.92 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
8.82 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
26.60 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
389 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
377 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
276 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
1.75 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
453 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
5.11 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
37.36 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
4.64 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
28.90 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
376 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
500 B lrw-r--r-- 2025-03-28 11:04:43
Edit Download
397 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
2.09 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
459 B lrw-r--r-- 2025-03-28 11:04:41
Edit Download
4.44 KB lrw-r--r-- 2025-03-28 11:04:41
Edit Download
13.40 KB lrw-r--r-- 2025-03-28 11:04:43
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).