mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add NativeModule Spec for ImagePickerIOS
Summary: This diff introduces NativeImagePickerIOS. Reviewed By: fkgozali Differential Revision: D16287452 fbshipit-source-id: 80a334887c2155e76ab13e7adffefde258de7cdb
This commit is contained in:
1 parent
9834d866df
commit
6e7b43806d
4 files changed
+222
-20
No files matched your search
@@ -986,6 +986,61 @@ namespace facebook {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@implementation RCTCxxConvert (NativeImagePickerIOS_SpecOpenCameraDialogConfig)
|
||||
+ (RCTManagedPointer *)JS_NativeImagePickerIOS_SpecOpenCameraDialogConfig:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeImagePickerIOS::SpecOpenCameraDialogConfig>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeImagePickerIOS_SpecOpenSelectDialogConfig)
|
||||
+ (RCTManagedPointer *)JS_NativeImagePickerIOS_SpecOpenSelectDialogConfig:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeImagePickerIOS::SpecOpenSelectDialogConfig>(json);
|
||||
}
|
||||
@end
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeImagePickerIOSSpecJSI_canRecordVideos(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "canRecordVideos", @selector(canRecordVideos:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeImagePickerIOSSpecJSI_canUseCamera(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "canUseCamera", @selector(canUseCamera:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeImagePickerIOSSpecJSI_openCameraDialog(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "openCameraDialog", @selector(openCameraDialog:successCallback:cancelCallback:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeImagePickerIOSSpecJSI_openSelectDialog(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "openSelectDialog", @selector(openSelectDialog:successCallback:cancelCallback:), args, count);
|
||||
}
|
||||
|
||||
|
||||
NativeImagePickerIOSSpecJSI::NativeImagePickerIOSSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<JSCallInvoker> jsInvoker)
|
||||
: ObjCTurboModule("ImagePickerIOS", instance, jsInvoker) {
|
||||
|
||||
methodMap_["canRecordVideos"] = MethodMetadata {1, __hostFunction_NativeImagePickerIOSSpecJSI_canRecordVideos};
|
||||
|
||||
|
||||
methodMap_["canUseCamera"] = MethodMetadata {1, __hostFunction_NativeImagePickerIOSSpecJSI_canUseCamera};
|
||||
|
||||
|
||||
methodMap_["openCameraDialog"] = MethodMetadata {3, __hostFunction_NativeImagePickerIOSSpecJSI_openCameraDialog};
|
||||
|
||||
setMethodArgConversionSelector(@"openCameraDialog", 0, @"JS_NativeImagePickerIOS_SpecOpenCameraDialogConfig:");
|
||||
|
||||
methodMap_["openSelectDialog"] = MethodMetadata {3, __hostFunction_NativeImagePickerIOSSpecJSI_openSelectDialog};
|
||||
|
||||
setMethodArgConversionSelector(@"openSelectDialog", 0, @"JS_NativeImagePickerIOS_SpecOpenSelectDialogConfig:");
|
||||
|
||||
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -1102,6 +1102,65 @@ namespace facebook {
|
||||
};
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
namespace JS {
|
||||
namespace NativeImagePickerIOS {
|
||||
struct SpecOpenCameraDialogConfig {
|
||||
bool unmirrorFrontFacingCamera() const;
|
||||
bool videoMode() const;
|
||||
|
||||
SpecOpenCameraDialogConfig(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeImagePickerIOS_SpecOpenCameraDialogConfig)
|
||||
+ (RCTManagedPointer *)JS_NativeImagePickerIOS_SpecOpenCameraDialogConfig:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeImagePickerIOS {
|
||||
struct SpecOpenSelectDialogConfig {
|
||||
bool showImages() const;
|
||||
bool showVideos() const;
|
||||
|
||||
SpecOpenSelectDialogConfig(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeImagePickerIOS_SpecOpenSelectDialogConfig)
|
||||
+ (RCTManagedPointer *)JS_NativeImagePickerIOS_SpecOpenSelectDialogConfig:(id)json;
|
||||
@end
|
||||
@protocol NativeImagePickerIOSSpec <RCTBridgeModule, RCTTurboModule>
|
||||
|
||||
- (void)canRecordVideos:(RCTResponseSenderBlock)callback;
|
||||
- (void)canUseCamera:(RCTResponseSenderBlock)callback;
|
||||
- (void)openCameraDialog:(JS::NativeImagePickerIOS::SpecOpenCameraDialogConfig &)config
|
||||
successCallback:(RCTResponseSenderBlock)successCallback
|
||||
cancelCallback:(RCTResponseSenderBlock)cancelCallback;
|
||||
- (void)openSelectDialog:(JS::NativeImagePickerIOS::SpecOpenSelectDialogConfig &)config
|
||||
successCallback:(RCTResponseSenderBlock)successCallback
|
||||
cancelCallback:(RCTResponseSenderBlock)cancelCallback;
|
||||
|
||||
@end
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
/**
|
||||
* ObjC++ class for module 'ImagePickerIOS'
|
||||
*/
|
||||
|
||||
class JSI_EXPORT NativeImagePickerIOSSpecJSI : public ObjCTurboModule {
|
||||
public:
|
||||
NativeImagePickerIOSSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<JSCallInvoker> jsInvoker);
|
||||
|
||||
};
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@protocol NativeJSCSamplingProfilerSpec <RCTBridgeModule, RCTTurboModule>
|
||||
|
||||
- (void)operationComplete:(double)token
|
||||
@@ -2395,6 +2454,26 @@ inline JS::NativeI18nManager::Constants::Builder::Builder(const Input i) : _fact
|
||||
inline JS::NativeI18nManager::Constants::Builder::Builder(Constants i) : _factory(^{
|
||||
return i.unsafeRawValue();
|
||||
}) {}
|
||||
inline bool JS::NativeImagePickerIOS::SpecOpenCameraDialogConfig::unmirrorFrontFacingCamera() const
|
||||
{
|
||||
id const p = _v[@"unmirrorFrontFacingCamera"];
|
||||
return RCTBridgingToBool(p);
|
||||
}
|
||||
inline bool JS::NativeImagePickerIOS::SpecOpenCameraDialogConfig::videoMode() const
|
||||
{
|
||||
id const p = _v[@"videoMode"];
|
||||
return RCTBridgingToBool(p);
|
||||
}
|
||||
inline bool JS::NativeImagePickerIOS::SpecOpenSelectDialogConfig::showImages() const
|
||||
{
|
||||
id const p = _v[@"showImages"];
|
||||
return RCTBridgingToBool(p);
|
||||
}
|
||||
inline bool JS::NativeImagePickerIOS::SpecOpenSelectDialogConfig::showVideos() const
|
||||
{
|
||||
id const p = _v[@"showVideos"];
|
||||
return RCTBridgingToBool(p);
|
||||
}
|
||||
inline JS::NativeJSDevSupport::Constants::Builder::Builder(const Input i) : _factory(^{
|
||||
NSMutableDictionary *d = [NSMutableDictionary new];
|
||||
auto ERROR_CODE_EXCEPTION = i.ERROR_CODE_EXCEPTION.get();
|
||||
|
||||
@@ -10,42 +10,72 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const RCTImagePicker = require('../BatchedBridge/NativeModules').ImagePickerIOS;
|
||||
import NativeImagePickerIOS from './NativeImagePickerIOS';
|
||||
import invariant from 'invariant';
|
||||
|
||||
const ImagePickerIOS = {
|
||||
canRecordVideos: function(callback: Function) {
|
||||
return RCTImagePicker.canRecordVideos(callback);
|
||||
canRecordVideos: function(callback: (result: boolean) => void) {
|
||||
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
|
||||
return NativeImagePickerIOS.canRecordVideos(callback);
|
||||
},
|
||||
canUseCamera: function(callback: Function) {
|
||||
return RCTImagePicker.canUseCamera(callback);
|
||||
canUseCamera: function(callback: (result: boolean) => void) {
|
||||
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
|
||||
return NativeImagePickerIOS.canUseCamera(callback);
|
||||
},
|
||||
openCameraDialog: function(
|
||||
config: Object,
|
||||
successCallback: Function,
|
||||
cancelCallback: Function,
|
||||
config: $ReadOnly<{|
|
||||
unmirrorFrontFacingCamera?: boolean,
|
||||
videoMode?: boolean,
|
||||
|}>,
|
||||
successCallback: (imageURL: string, height: number, width: number) => void,
|
||||
cancelCallback: () => void,
|
||||
) {
|
||||
config = {
|
||||
videoMode: false,
|
||||
...config,
|
||||
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
|
||||
|
||||
var newConfig = {
|
||||
videoMode: true,
|
||||
unmirrorFrontFacingCamera: false,
|
||||
};
|
||||
return RCTImagePicker.openCameraDialog(
|
||||
config,
|
||||
|
||||
if (config.videoMode != null) {
|
||||
newConfig.videoMode = config.videoMode;
|
||||
}
|
||||
|
||||
if (config.unmirrorFrontFacingCamera != null) {
|
||||
newConfig.unmirrorFrontFacingCamera = config.unmirrorFrontFacingCamera;
|
||||
}
|
||||
|
||||
return NativeImagePickerIOS.openCameraDialog(
|
||||
newConfig,
|
||||
successCallback,
|
||||
cancelCallback,
|
||||
);
|
||||
},
|
||||
openSelectDialog: function(
|
||||
config: Object,
|
||||
successCallback: Function,
|
||||
cancelCallback: Function,
|
||||
config: $ReadOnly<{|
|
||||
showImages?: boolean,
|
||||
showVideos?: boolean,
|
||||
|}>,
|
||||
successCallback: (imageURL: string, height: number, width: number) => void,
|
||||
cancelCallback: () => void,
|
||||
) {
|
||||
config = {
|
||||
invariant(NativeImagePickerIOS, 'ImagePickerIOS is not available');
|
||||
|
||||
var newConfig = {
|
||||
showImages: true,
|
||||
showVideos: false,
|
||||
...config,
|
||||
};
|
||||
return RCTImagePicker.openSelectDialog(
|
||||
config,
|
||||
|
||||
if (config.showImages != null) {
|
||||
newConfig.showImages = config.showImages;
|
||||
}
|
||||
|
||||
if (config.showVideos != null) {
|
||||
newConfig.showVideos = config.showVideos;
|
||||
}
|
||||
|
||||
return NativeImagePickerIOS.openSelectDialog(
|
||||
newConfig,
|
||||
successCallback,
|
||||
cancelCallback,
|
||||
);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../TurboModule/RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getConstants: () => {||};
|
||||
+canRecordVideos: (callback: (result: boolean) => void) => void;
|
||||
+canUseCamera: (callback: (result: boolean) => void) => void;
|
||||
+openCameraDialog: (
|
||||
config: {|
|
||||
unmirrorFrontFacingCamera: boolean,
|
||||
videoMode: boolean,
|
||||
|},
|
||||
successCallback: (imageURL: string, height: number, width: number) => void,
|
||||
cancelCallback: () => void,
|
||||
) => void;
|
||||
+openSelectDialog: (
|
||||
config: {|
|
||||
showImages: boolean,
|
||||
showVideos: boolean,
|
||||
|},
|
||||
successCallback: (imageURL: string, height: number, width: number) => void,
|
||||
cancelCallback: () => void,
|
||||
) => void;
|
||||
}
|
||||
|
||||
export default TurboModuleRegistry.get<Spec>('ImagePickerIOS');
|
||||
Reference in new issue
Block a user