react-native-camera-kit/ios/ReactNativeCameraKit/RNCameraKitModule.mm
2024-08-06 11:35:56 +02:00

71 lines
2.7 KiB
Plaintext

#import <React/RCTBridge.h>
#import <React/RCTUIManager.h>
#import <React/RCTUIManagerUtils.h>
#import "RNCameraKitModule.h"
#ifdef RCT_NEW_ARCH_ENABLED
#import "CKCameraViewComponentView.h"
#endif // RCT_NEW_ARCH_ENABLED
#import "ReactNativeCameraKit-Swift.pre.h"
@implementation RNCameraKitModule
RCT_EXPORT_MODULE();
#ifdef RCT_NEW_ARCH_ENABLED
@synthesize viewRegistry_DEPRECATED = _viewRegistry_DEPRECATED;
#endif // RCT_NEW_ARCH_ENABLED
@synthesize bridge = _bridge;
- (dispatch_queue_t)methodQueue
{
// It seems that due to how UIBlocks work with uiManager, we need to call the methods there
// for the blocks to be dispatched before the batch is completed
return RCTGetUIManagerQueue();
}
- (void)withCamera:(nonnull NSNumber*)viewRef block:(void (^)(CKCameraView *))block reject:(RCTPromiseRejectBlock)reject methodName:(NSString *)methodName
{
#ifdef RCT_NEW_ARCH_ENABLED
[self.viewRegistry_DEPRECATED addUIBlock:^(RCTViewRegistry *viewRegistry) {
CKCameraViewComponentView *componentView = [self.viewRegistry_DEPRECATED viewForReactTag:viewRef];
CKCameraView *view = componentView.contentView;
#else
[self.bridge.uiManager
addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
CKCameraView *view = [uiManager viewForReactTag:viewRef];
#endif // RCT_NEW_ARCH_ENABLED
if (view != nil) {
block(view);
} else {
reject(methodName, [NSString stringWithFormat:@"Unknown reactTag: %@ in %@", viewRef, methodName], nil);
}
}];
}
RCT_EXPORT_METHOD(capture:(NSDictionary *)options tag:(nonnull NSNumber *)tag resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
[self withCamera:tag block:^(CKCameraView *view) {
[CKCameraManager captureWithCamera:view options:[NSDictionary new] resolve:resolve reject:reject];
} reject:reject methodName:@"capture"];
}
- (void)checkDeviceCameraAuthorizationStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
[CKCameraManager checkDeviceCameraAuthorizationStatus:resolve reject:reject];
}
- (void)requestDeviceCameraAuthorization:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
[CKCameraManager requestDeviceCameraAuthorization:resolve reject:reject];
}
// Thanks to this guard, we won't compile this code when we build for the old architecture.
#ifdef RCT_NEW_ARCH_ENABLED
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params
{
return std::make_shared<facebook::react::NativeCameraKitModuleSpecJSI>(params);
}
#endif // RCT_NEW_ARCH_ENABLED
@end