/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "RCTLogBox.h" #import #import #import #import #import #import #import "CoreModulesPlugins.h" #if RCT_DEV_MENU @interface RCTLogBox () @end @implementation RCTLogBox { RCTLogBoxView *_view; } @synthesize bridge = _bridge; RCT_EXPORT_MODULE() + (BOOL)requiresMainQueueSetup { return YES; } RCT_EXPORT_METHOD(show) { if (RCTRedBoxGetEnabled()) { __weak RCTLogBox *weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ __strong RCTLogBox *strongSelf = weakSelf; if (!strongSelf) { return; } if (strongSelf->_view) { [strongSelf->_view show]; return; } if (strongSelf->_bridge) { if (strongSelf->_bridge.valid) { strongSelf->_view = [[RCTLogBoxView alloc] initWithFrame:[UIScreen mainScreen].bounds bridge:strongSelf->_bridge]; [strongSelf->_view show]; } } else { NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:strongSelf, @"logbox", nil]; [[NSNotificationCenter defaultCenter] postNotificationName:@"CreateLogBoxSurface" object:nil userInfo:userInfo]; } }); } } RCT_EXPORT_METHOD(hide) { if (RCTRedBoxGetEnabled()) { __weak RCTLogBox *weakSelf = self; dispatch_async(dispatch_get_main_queue(), ^{ __strong RCTLogBox *strongSelf = weakSelf; if (!strongSelf) { return; } [strongSelf->_view setHidden:YES]; strongSelf->_view = nil; }); } } - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared(params); } - (void)setRCTLogBoxView:(RCTLogBoxView *)view { self->_view = view; } @end #else // Disabled @interface RCTLogBox () @end @implementation RCTLogBox + (NSString *)moduleName { return nil; } - (void)show { // noop } - (void)hide { // noop } - (std::shared_ptr)getTurboModule: (const facebook::react::ObjCTurboModule::InitParams &)params { return std::make_shared(params); } @end #endif Class RCTLogBoxCls(void) { return RCTLogBox.class; }