From 7b897b0c012b4a94f1ac48a205b5a7b3af0354e2 Mon Sep 17 00:00:00 2001 From: Burton Rodman Date: Tue, 24 Aug 2021 17:19:17 -0400 Subject: [PATCH] feat: implement onCameraReady event on Windows (#3324) * add onCameraReady event to InitializeAsync * changed null to nullptr * treat onCameraReady as a native event * register onCameraReady event constant Co-authored-by: Burton Rodman Co-authored-by: Ethan --- src/RNCamera.js | 2 +- windows/ReactNativeCameraCPP/ReactCameraConstants.h | 1 + windows/ReactNativeCameraCPP/ReactCameraView.cpp | 6 ++++++ windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/RNCamera.js b/src/RNCamera.js index b241b1960..67ae1aed7 100644 --- a/src/RNCamera.js +++ b/src/RNCamera.js @@ -848,7 +848,7 @@ export default class Camera extends React.Component { style={StyleSheet.absoluteFill} ref={this._setReference} onMountError={this._onMountError} - onCameraReady={this._onCameraReady} + onCameraReady={this._onObjectDetected(this._onCameraReady)} onAudioInterrupted={this._onAudioInterrupted} onAudioConnected={this._onAudioConnected} onGoogleVisionBarcodesDetected={this._onObjectDetected( diff --git a/windows/ReactNativeCameraCPP/ReactCameraConstants.h b/windows/ReactNativeCameraCPP/ReactCameraConstants.h index 0aa2a05b3..e9ef21bbd 100644 --- a/windows/ReactNativeCameraCPP/ReactCameraConstants.h +++ b/windows/ReactNativeCameraCPP/ReactCameraConstants.h @@ -8,6 +8,7 @@ #include "JSValue.h" #define BarcodeReadEvent L"onBarCodeRead" +#define CameraReadyEvent L"onCameraReady" namespace winrt::ReactNativeCameraCPP { class ReactCameraConstants { diff --git a/windows/ReactNativeCameraCPP/ReactCameraView.cpp b/windows/ReactNativeCameraCPP/ReactCameraView.cpp index d63eb9851..c984c4be1 100644 --- a/windows/ReactNativeCameraCPP/ReactCameraView.cpp +++ b/windows/ReactNativeCameraCPP/ReactCameraView.cpp @@ -714,6 +714,12 @@ IAsyncAction ReactCameraView::InitializeAsync() { }); m_isInitialized = true; + + auto control = this->get_strong().try_as(); + if (m_reactContext && control) { + m_reactContext.DispatchEvent(control, CameraReadyEvent, nullptr); + } + } } catch (winrt::hresult_error const &) { m_isInitialized = false; diff --git a/windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp b/windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp index 62e9fb3e9..fafe17e93 100644 --- a/windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp +++ b/windows/ReactNativeCameraCPP/ReactCameraViewManager.cpp @@ -89,6 +89,11 @@ ConstantProviderDelegate ReactCameraViewManager::ExportedCustomDirectEventTypeCo constantWriter.WriteObjectBegin(); WriteProperty(constantWriter, L"registrationName", BarcodeReadEvent); constantWriter.WriteObjectEnd(); + + constantWriter.WritePropertyName(CameraReadyEvent); + constantWriter.WriteObjectBegin(); + WriteProperty(constantWriter, L"registrationName", CameraReadyEvent); + constantWriter.WriteObjectEnd(); }; }