scandit-react-native-datacapture-id 8.2.1 → 8.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/android/build.gradle +29 -1
  2. package/android/generated/java/com/facebook/fbreact/specs/NativeScanditDataCaptureIdSpec.java +75 -0
  3. package/android/generated/jni/CMakeLists.txt +29 -0
  4. package/android/generated/jni/ScanditReactNativeDatacaptureIdSpec-generated.cpp +40 -0
  5. package/android/generated/jni/ScanditReactNativeDatacaptureIdSpec.h +31 -0
  6. package/android/generated/jni/react/renderer/components/ScanditReactNativeDatacaptureIdSpec/ScanditReactNativeDatacaptureIdSpecJSI-generated.cpp +33 -0
  7. package/android/generated/jni/react/renderer/components/ScanditReactNativeDatacaptureIdSpec/ScanditReactNativeDatacaptureIdSpecJSI.h +151 -0
  8. package/android/src/main/kotlin/com/scandit/datacapture/reactnative/id/{ScanditDataCaptureIdModule.kt → ScanditDataCaptureIdModuleBase.kt} +14 -31
  9. package/android/src/main/kotlin/com/scandit/datacapture/reactnative/id/ScanditDataCaptureIdPackage.kt +2 -15
  10. package/android/src/main/newArch/kotlin/com/scandit/datacapture/reactnative/id/ScanditDataCaptureIdModule.kt +53 -0
  11. package/android/src/main/oldArch/kotlin/com/scandit/datacapture/reactnative/id/ScanditDataCaptureIdModule.kt +63 -0
  12. package/dist/id.js +26 -12
  13. package/dist/id.js.map +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/tsconfig.tsbuildinfo +1 -1
  16. package/ios/Sources/NewArch/ScanditDataCaptureId.mm +95 -0
  17. package/ios/Sources/OldArch/ScanditDataCaptureId.mm +83 -0
  18. package/ios/Sources/ScanditDataCaptureId.h +25 -0
  19. package/ios/Sources/ScanditDataCaptureId.swift +51 -26
  20. package/ios/generated/ScanditReactNativeDatacaptureIdSpec/ScanditReactNativeDatacaptureIdSpec-generated.mm +53 -0
  21. package/ios/generated/ScanditReactNativeDatacaptureIdSpec/ScanditReactNativeDatacaptureIdSpec.h +103 -0
  22. package/ios/generated/ScanditReactNativeDatacaptureIdSpecJSI-generated.cpp +33 -0
  23. package/ios/generated/ScanditReactNativeDatacaptureIdSpecJSI.h +151 -0
  24. package/package.json +24 -11
  25. package/react-native.config.js +12 -0
  26. package/scandit-react-native-datacapture-id.podspec +17 -30
  27. package/specs/NativeScanditDataCaptureId.ts +29 -0
  28. package/ios/Sources/ScanditDataCaptureId.m +0 -9
@@ -3,6 +3,14 @@ import com.android.Version
3
3
  apply plugin: "com.android.library"
4
4
  apply plugin: "kotlin-android"
5
5
 
6
+ def isNewArchitectureEnabled() {
7
+ return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
8
+ }
9
+
10
+ if (isNewArchitectureEnabled()) {
11
+ apply plugin: "com.facebook.react"
12
+ }
13
+
6
14
  static def supportsNamespace() {
7
15
  def parsed = Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
8
16
  def major = parsed[0].toInteger()
@@ -51,6 +59,20 @@ android {
51
59
 
52
60
  compileSdkVersion safeExtGet("compileSdkVersion", 33)
53
61
 
62
+ sourceSets {
63
+ main {
64
+ if (supportsNamespace()) {
65
+ manifest.srcFile "src/main/AndroidManifestNew.xml" // no package on it
66
+ }
67
+ if (isNewArchitectureEnabled()) {
68
+ kotlin.srcDirs += ['src/main/newArch/kotlin']
69
+ java.srcDirs += ['generated/java']
70
+ } else {
71
+ kotlin.srcDirs += ['src/main/oldArch/kotlin']
72
+ }
73
+ }
74
+ }
75
+
54
76
  defaultConfig {
55
77
  minSdkVersion safeExtGet("minSdkVersion", 24)
56
78
  targetSdkVersion safeExtGet("targetSdkVersion", 33)
@@ -70,12 +92,18 @@ android {
70
92
  }
71
93
  }
72
94
 
95
+ if (isNewArchitectureEnabled()) {
96
+ react {
97
+ codegenJavaPackageName = "com.scandit.datacapture.reactnative.id"
98
+ }
99
+ }
100
+
73
101
  if (file( "${rootProject.projectDir}/build-test.gradle").exists()) {
74
102
  apply from: "${rootProject.projectDir}/build-test.gradle"
75
103
  }
76
104
 
77
105
  dependencies {
78
- def sdk_version = "8.2.1"
106
+ def sdk_version = "8.3.0-beta.1"
79
107
 
80
108
  println("Version of the native sdk used in this build: ${safeExtGet("global_sdk_version", sdk_version)}")
81
109
  api project(path: ":scandit-react-native-datacapture-core")
@@ -0,0 +1,75 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateModuleJavaSpec.js
9
+ *
10
+ * @nolint
11
+ */
12
+
13
+ package com.facebook.fbreact.specs;
14
+
15
+ import com.facebook.proguard.annotations.DoNotStrip;
16
+ import com.facebook.react.bridge.Promise;
17
+ import com.facebook.react.bridge.ReactApplicationContext;
18
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
19
+ import com.facebook.react.bridge.ReactMethod;
20
+ import com.facebook.react.bridge.ReadableMap;
21
+ import com.facebook.react.common.build.ReactBuildConfig;
22
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
23
+ import java.util.Arrays;
24
+ import java.util.HashSet;
25
+ import java.util.Map;
26
+ import java.util.Set;
27
+ import javax.annotation.Nonnull;
28
+ import javax.annotation.Nullable;
29
+
30
+ public abstract class NativeScanditDataCaptureIdSpec extends ReactContextBaseJavaModule implements TurboModule {
31
+ public static final String NAME = "ScanditDataCaptureId";
32
+
33
+ public NativeScanditDataCaptureIdSpec(ReactApplicationContext reactContext) {
34
+ super(reactContext);
35
+ }
36
+
37
+ @Override
38
+ public @Nonnull String getName() {
39
+ return NAME;
40
+ }
41
+
42
+ protected final void emitOnScanditEvent(ReadableMap value) {
43
+ mEventEmitterCallback.invoke("onScanditEvent", value);
44
+ }
45
+
46
+ protected abstract Map<String, Object> getTypedExportedConstants();
47
+
48
+ @Override
49
+ @DoNotStrip
50
+ public final @Nullable Map<String, Object> getConstants() {
51
+ Map<String, Object> constants = getTypedExportedConstants();
52
+ if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) {
53
+ Set<String> obligatoryFlowConstants = new HashSet<>(Arrays.asList(
54
+ "Defaults"
55
+ ));
56
+ Set<String> optionalFlowConstants = new HashSet<>();
57
+ Set<String> undeclaredConstants = new HashSet<>(constants.keySet());
58
+ undeclaredConstants.removeAll(obligatoryFlowConstants);
59
+ undeclaredConstants.removeAll(optionalFlowConstants);
60
+ if (!undeclaredConstants.isEmpty()) {
61
+ throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants));
62
+ }
63
+ undeclaredConstants = obligatoryFlowConstants;
64
+ undeclaredConstants.removeAll(constants.keySet());
65
+ if (!undeclaredConstants.isEmpty()) {
66
+ throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants));
67
+ }
68
+ }
69
+ return constants;
70
+ }
71
+
72
+ @ReactMethod
73
+ @DoNotStrip
74
+ public abstract void executeId(ReadableMap data, Promise promise);
75
+ }
@@ -0,0 +1,29 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ cmake_minimum_required(VERSION 3.13)
7
+ set(CMAKE_VERBOSE_MAKEFILE on)
8
+
9
+ file(GLOB react_codegen_SRCS CONFIGURE_DEPENDS *.cpp react/renderer/components/ScanditReactNativeDatacaptureIdSpec/*.cpp)
10
+
11
+ add_library(
12
+ react_codegen_ScanditReactNativeDatacaptureIdSpec
13
+ OBJECT
14
+ ${react_codegen_SRCS}
15
+ )
16
+
17
+ target_include_directories(react_codegen_ScanditReactNativeDatacaptureIdSpec PUBLIC . react/renderer/components/ScanditReactNativeDatacaptureIdSpec)
18
+
19
+ target_link_libraries(
20
+ react_codegen_ScanditReactNativeDatacaptureIdSpec
21
+ fbjni
22
+ jsi
23
+ # We need to link different libraries based on whether we are building rncore or not, that's necessary
24
+ # because we want to break a circular dependency between react_codegen_rncore and reactnative
25
+ reactnative
26
+ )
27
+
28
+ target_compile_reactnative_options(react_codegen_ScanditReactNativeDatacaptureIdSpec PRIVATE)
29
+ target_compile_options(react_codegen_ScanditReactNativeDatacaptureIdSpec PRIVATE -Wno-deprecated-declarations)
@@ -0,0 +1,40 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateModuleJniCpp.js
9
+ */
10
+
11
+ #include "ScanditReactNativeDatacaptureIdSpec.h"
12
+
13
+ namespace facebook::react {
14
+
15
+ static facebook::jsi::Value __hostFunction_NativeScanditDataCaptureIdSpecJSI_getConstants(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
16
+ static jmethodID cachedMethodId = nullptr;
17
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, ObjectKind, "getConstants", "()Ljava/util/Map;", args, count, cachedMethodId);
18
+ }
19
+
20
+ static facebook::jsi::Value __hostFunction_NativeScanditDataCaptureIdSpecJSI_executeId(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
21
+ static jmethodID cachedMethodId = nullptr;
22
+ return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, PromiseKind, "executeId", "(Lcom/facebook/react/bridge/ReadableMap;Lcom/facebook/react/bridge/Promise;)V", args, count, cachedMethodId);
23
+ }
24
+
25
+ NativeScanditDataCaptureIdSpecJSI::NativeScanditDataCaptureIdSpecJSI(const JavaTurboModule::InitParams &params)
26
+ : JavaTurboModule(params) {
27
+ methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeScanditDataCaptureIdSpecJSI_getConstants};
28
+ methodMap_["executeId"] = MethodMetadata {1, __hostFunction_NativeScanditDataCaptureIdSpecJSI_executeId};
29
+ eventEmitterMap_["onScanditEvent"] = std::make_shared<AsyncEventEmitter<folly::dynamic>>();
30
+ setEventEmitterCallback(params.instance);
31
+ }
32
+
33
+ std::shared_ptr<TurboModule> ScanditReactNativeDatacaptureIdSpec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params) {
34
+ if (moduleName == "ScanditDataCaptureId") {
35
+ return std::make_shared<NativeScanditDataCaptureIdSpecJSI>(params);
36
+ }
37
+ return nullptr;
38
+ }
39
+
40
+ } // namespace facebook::react
@@ -0,0 +1,31 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateModuleJniH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include <ReactCommon/JavaTurboModule.h>
14
+ #include <ReactCommon/TurboModule.h>
15
+ #include <jsi/jsi.h>
16
+
17
+ namespace facebook::react {
18
+
19
+ /**
20
+ * JNI C++ class for module 'NativeScanditDataCaptureId'
21
+ */
22
+ class JSI_EXPORT NativeScanditDataCaptureIdSpecJSI : public JavaTurboModule {
23
+ public:
24
+ NativeScanditDataCaptureIdSpecJSI(const JavaTurboModule::InitParams &params);
25
+ };
26
+
27
+
28
+ JSI_EXPORT
29
+ std::shared_ptr<TurboModule> ScanditReactNativeDatacaptureIdSpec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params);
30
+
31
+ } // namespace facebook::react
@@ -0,0 +1,33 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleCpp.js
8
+ */
9
+
10
+ #include "ScanditReactNativeDatacaptureIdSpecJSI.h"
11
+
12
+ namespace facebook::react {
13
+
14
+ static jsi::Value __hostFunction_NativeScanditDataCaptureIdCxxSpecJSI_getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
15
+ return static_cast<NativeScanditDataCaptureIdCxxSpecJSI *>(&turboModule)->getConstants(
16
+ rt
17
+ );
18
+ }
19
+ static jsi::Value __hostFunction_NativeScanditDataCaptureIdCxxSpecJSI_executeId(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
20
+ return static_cast<NativeScanditDataCaptureIdCxxSpecJSI *>(&turboModule)->executeId(
21
+ rt,
22
+ count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt)
23
+ );
24
+ }
25
+
26
+ NativeScanditDataCaptureIdCxxSpecJSI::NativeScanditDataCaptureIdCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker)
27
+ : TurboModule("ScanditDataCaptureId", jsInvoker) {
28
+ methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeScanditDataCaptureIdCxxSpecJSI_getConstants};
29
+ methodMap_["executeId"] = MethodMetadata {1, __hostFunction_NativeScanditDataCaptureIdCxxSpecJSI_executeId};
30
+ }
31
+
32
+
33
+ } // namespace facebook::react
@@ -0,0 +1,151 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleH.js
8
+ */
9
+
10
+ #pragma once
11
+
12
+ #include <ReactCommon/TurboModule.h>
13
+ #include <react/bridging/Bridging.h>
14
+
15
+ namespace facebook::react {
16
+
17
+
18
+
19
+ #pragma mark - NativeScanditDataCaptureIdScanditEventPayload
20
+
21
+ template <typename P0, typename P1, typename P2, typename P3>
22
+ struct NativeScanditDataCaptureIdScanditEventPayload {
23
+ P0 name;
24
+ P1 data;
25
+ P2 viewId;
26
+ P3 modeId;
27
+ bool operator==(const NativeScanditDataCaptureIdScanditEventPayload &other) const {
28
+ return name == other.name && data == other.data && viewId == other.viewId && modeId == other.modeId;
29
+ }
30
+ };
31
+
32
+ template <typename T>
33
+ struct NativeScanditDataCaptureIdScanditEventPayloadBridging {
34
+ static T types;
35
+
36
+ static T fromJs(
37
+ jsi::Runtime &rt,
38
+ const jsi::Object &value,
39
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
40
+ T result{
41
+ bridging::fromJs<decltype(types.name)>(rt, value.getProperty(rt, "name"), jsInvoker),
42
+ bridging::fromJs<decltype(types.data)>(rt, value.getProperty(rt, "data"), jsInvoker),
43
+ bridging::fromJs<decltype(types.viewId)>(rt, value.getProperty(rt, "viewId"), jsInvoker),
44
+ bridging::fromJs<decltype(types.modeId)>(rt, value.getProperty(rt, "modeId"), jsInvoker)};
45
+ return result;
46
+ }
47
+
48
+ #ifdef DEBUG
49
+ static jsi::String nameToJs(jsi::Runtime &rt, decltype(types.name) value) {
50
+ return bridging::toJs(rt, value);
51
+ }
52
+
53
+ static jsi::String dataToJs(jsi::Runtime &rt, decltype(types.data) value) {
54
+ return bridging::toJs(rt, value);
55
+ }
56
+
57
+ static double viewIdToJs(jsi::Runtime &rt, decltype(types.viewId) value) {
58
+ return bridging::toJs(rt, value);
59
+ }
60
+
61
+ static double modeIdToJs(jsi::Runtime &rt, decltype(types.modeId) value) {
62
+ return bridging::toJs(rt, value);
63
+ }
64
+ #endif
65
+
66
+ static jsi::Object toJs(
67
+ jsi::Runtime &rt,
68
+ const T &value,
69
+ const std::shared_ptr<CallInvoker> &jsInvoker) {
70
+ auto result = facebook::jsi::Object(rt);
71
+ result.setProperty(rt, "name", bridging::toJs(rt, value.name, jsInvoker));
72
+ result.setProperty(rt, "data", bridging::toJs(rt, value.data, jsInvoker));
73
+ if (value.viewId) {
74
+ result.setProperty(rt, "viewId", bridging::toJs(rt, value.viewId.value(), jsInvoker));
75
+ }
76
+ if (value.modeId) {
77
+ result.setProperty(rt, "modeId", bridging::toJs(rt, value.modeId.value(), jsInvoker));
78
+ }
79
+ return result;
80
+ }
81
+ };
82
+
83
+ class JSI_EXPORT NativeScanditDataCaptureIdCxxSpecJSI : public TurboModule {
84
+ protected:
85
+ NativeScanditDataCaptureIdCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);
86
+
87
+ public:
88
+ virtual jsi::Object getConstants(jsi::Runtime &rt) = 0;
89
+ virtual jsi::Value executeId(jsi::Runtime &rt, jsi::Object data) = 0;
90
+
91
+ };
92
+
93
+ template <typename T>
94
+ class JSI_EXPORT NativeScanditDataCaptureIdCxxSpec : public TurboModule {
95
+ public:
96
+ jsi::Value create(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
97
+ return delegate_.create(rt, propName);
98
+ }
99
+
100
+ std::vector<jsi::PropNameID> getPropertyNames(jsi::Runtime& runtime) override {
101
+ return delegate_.getPropertyNames(runtime);
102
+ }
103
+
104
+ static constexpr std::string_view kModuleName = "ScanditDataCaptureId";
105
+
106
+ protected:
107
+ NativeScanditDataCaptureIdCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
108
+ : TurboModule(std::string{NativeScanditDataCaptureIdCxxSpec::kModuleName}, jsInvoker),
109
+ delegate_(reinterpret_cast<T*>(this), jsInvoker) {}
110
+
111
+ template <typename OnScanditEventType> void emitOnScanditEvent(OnScanditEventType value) {
112
+ static_assert(bridging::supportsFromJs<OnScanditEventType, jsi::Object>, "value cannnot be converted to jsi::Object");
113
+ static_cast<AsyncEventEmitter<jsi::Value>&>(*delegate_.eventEmitterMap_["onScanditEvent"]).emit([jsInvoker = jsInvoker_, eventValue = value](jsi::Runtime& rt) -> jsi::Value {
114
+ return bridging::toJs(rt, eventValue, jsInvoker);
115
+ });
116
+ }
117
+
118
+ private:
119
+ class Delegate : public NativeScanditDataCaptureIdCxxSpecJSI {
120
+ public:
121
+ Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
122
+ NativeScanditDataCaptureIdCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {
123
+ eventEmitterMap_["onScanditEvent"] = std::make_shared<AsyncEventEmitter<jsi::Value>>();
124
+ }
125
+
126
+ jsi::Object getConstants(jsi::Runtime &rt) override {
127
+ static_assert(
128
+ bridging::getParameterCount(&T::getConstants) == 1,
129
+ "Expected getConstants(...) to have 1 parameters");
130
+
131
+ return bridging::callFromJs<jsi::Object>(
132
+ rt, &T::getConstants, jsInvoker_, instance_);
133
+ }
134
+ jsi::Value executeId(jsi::Runtime &rt, jsi::Object data) override {
135
+ static_assert(
136
+ bridging::getParameterCount(&T::executeId) == 2,
137
+ "Expected executeId(...) to have 2 parameters");
138
+
139
+ return bridging::callFromJs<jsi::Value>(
140
+ rt, &T::executeId, jsInvoker_, instance_, std::move(data));
141
+ }
142
+
143
+ private:
144
+ friend class NativeScanditDataCaptureIdCxxSpec;
145
+ T *instance_;
146
+ };
147
+
148
+ Delegate delegate_;
149
+ };
150
+
151
+ } // namespace facebook::react
@@ -7,11 +7,7 @@
7
7
  package com.scandit.datacapture.reactnative.id
8
8
 
9
9
  import com.facebook.react.bridge.Promise
10
- import com.facebook.react.bridge.ReactApplicationContext
11
- import com.facebook.react.bridge.ReactContextBaseJavaModule
12
- import com.facebook.react.bridge.ReactMethod
13
10
  import com.facebook.react.bridge.ReadableMap
14
- import com.facebook.react.module.annotations.ReactModule
15
11
  import com.scandit.datacapture.frameworks.core.CoreModule
16
12
  import com.scandit.datacapture.frameworks.core.FrameworkModule
17
13
  import com.scandit.datacapture.frameworks.core.locator.ServiceLocator
@@ -19,21 +15,27 @@ import com.scandit.datacapture.frameworks.id.IdCaptureModule
19
15
  import com.scandit.datacapture.reactnative.core.utils.ReactNativeMethodCall
20
16
  import com.scandit.datacapture.reactnative.core.utils.ReactNativeResult
21
17
 
22
- @ReactModule(name = ScanditDataCaptureIdModule.NAME)
23
- open class ScanditDataCaptureIdModule(
24
- reactContext: ReactApplicationContext,
18
+ /**
19
+ * Base implementation for the Scandit Data Capture ID module.
20
+ * Contains all shared business logic used by both old and new architecture modules.
21
+ */
22
+ class ScanditDataCaptureIdModuleBase(
25
23
  private val idCaptureModule: IdCaptureModule,
26
24
  private val serviceLocator: ServiceLocator<FrameworkModule>,
27
- ) : ReactContextBaseJavaModule(reactContext) {
25
+ ) {
26
+ companion object {
27
+ const val NAME = "ScanditDataCaptureId"
28
+ private const val DEFAULTS_KEY = "Defaults"
29
+ }
28
30
 
29
- override fun getName(): String = NAME
31
+ fun getDefaults(): MutableMap<String, Any> = mutableMapOf(
32
+ DEFAULTS_KEY to idCaptureModule.getDefaults()
33
+ )
30
34
 
31
- override fun invalidate() {
35
+ fun onInvalidate() {
32
36
  idCaptureModule.onDestroy()
33
- super.invalidate()
34
37
  }
35
38
 
36
- @ReactMethod
37
39
  fun executeId(data: ReadableMap, promise: Promise) {
38
40
  val coreModule = serviceLocator.resolve(
39
41
  CoreModule::class.java.simpleName
@@ -55,23 +57,4 @@ open class ScanditDataCaptureIdModule(
55
57
  )
56
58
  }
57
59
  }
58
-
59
- override fun getConstants(): MutableMap<String, Any> = mutableMapOf(
60
- DEFAULTS_KEY to idCaptureModule.getDefaults()
61
- )
62
-
63
- @ReactMethod
64
- fun addListener(@Suppress("UNUSED_PARAMETER") eventName: String?) {
65
- // Keep: Required for RN built in Event Emitter Calls.
66
- }
67
-
68
- @ReactMethod
69
- fun removeListeners(@Suppress("UNUSED_PARAMETER") count: Int?) {
70
- // Keep: Required for RN built in Event Emitter Calls.
71
- }
72
-
73
- companion object {
74
- const val NAME = "ScanditDataCaptureId"
75
- private const val DEFAULTS_KEY = "Defaults"
76
- }
77
60
  }
@@ -10,9 +10,7 @@ import com.facebook.react.bridge.NativeModule
10
10
  import com.facebook.react.bridge.ReactApplicationContext
11
11
  import com.facebook.react.uimanager.ViewManager
12
12
  import com.scandit.datacapture.frameworks.core.locator.DefaultServiceLocator
13
- import com.scandit.datacapture.frameworks.id.IdCaptureModule
14
13
  import com.scandit.datacapture.reactnative.core.ScanditReactPackageBase
15
- import com.scandit.datacapture.reactnative.core.utils.ReactNativeEventEmitter
16
14
 
17
15
  class ScanditDataCaptureIdPackage : ScanditReactPackageBase() {
18
16
  private val serviceLocator = DefaultServiceLocator.getInstance()
@@ -20,13 +18,9 @@ class ScanditDataCaptureIdPackage : ScanditReactPackageBase() {
20
18
  override fun createNativeModules(
21
19
  reactContext: ReactApplicationContext
22
20
  ): MutableList<NativeModule> {
23
- val idCaptureModule = getIdCaptureModule(reactContext)
21
+ // Module sets up its own IdCaptureModule in init
24
22
  return mutableListOf(
25
- ScanditDataCaptureIdModule(
26
- reactContext,
27
- idCaptureModule,
28
- serviceLocator
29
- )
23
+ ScanditDataCaptureIdModule(reactContext, serviceLocator)
30
24
  )
31
25
  }
32
26
 
@@ -36,11 +30,4 @@ class ScanditDataCaptureIdPackage : ScanditReactPackageBase() {
36
30
 
37
31
  override fun getModuleClasses(): List<Class<out NativeModule>> =
38
32
  listOf(ScanditDataCaptureIdModule::class.java)
39
-
40
- private fun getIdCaptureModule(reactContext: ReactApplicationContext): IdCaptureModule {
41
- val emitter = ReactNativeEventEmitter(reactContext)
42
- return IdCaptureModule(emitter).also {
43
- it.onCreate(reactContext)
44
- }
45
- }
46
33
  }
@@ -0,0 +1,53 @@
1
+ /*
2
+ * This file is part of the Scandit Data Capture SDK
3
+ *
4
+ * Copyright (C) 2021- Scandit AG. All rights reserved.
5
+ */
6
+
7
+ package com.scandit.datacapture.reactnative.id
8
+
9
+ import com.facebook.fbreact.specs.NativeScanditDataCaptureIdSpec
10
+ import com.facebook.react.bridge.Promise
11
+ import com.facebook.react.bridge.ReactApplicationContext
12
+ import com.facebook.react.bridge.ReadableMap
13
+ import com.facebook.react.module.annotations.ReactModule
14
+ import com.scandit.datacapture.frameworks.core.FrameworkModule
15
+ import com.scandit.datacapture.frameworks.core.locator.ServiceLocator
16
+ import com.scandit.datacapture.frameworks.id.IdCaptureModule
17
+ import com.scandit.datacapture.reactnative.core.utils.ReactNativeEventEmitter
18
+
19
+ @ReactModule(name = ScanditDataCaptureIdModuleBase.NAME)
20
+ class ScanditDataCaptureIdModule(
21
+ reactContext: ReactApplicationContext,
22
+ serviceLocator: ServiceLocator<FrameworkModule>,
23
+ ) : NativeScanditDataCaptureIdSpec(reactContext) {
24
+
25
+ private val moduleBase: ScanditDataCaptureIdModuleBase
26
+
27
+ init {
28
+ // Create emitter with JSI-based emit handler and set up IdCaptureModule
29
+ val emitter = ReactNativeEventEmitter { payload ->
30
+ emitOnScanditEvent(payload)
31
+ }
32
+ val idCaptureModule = IdCaptureModule(emitter).also {
33
+ it.onCreate(reactContext)
34
+ }
35
+ moduleBase = ScanditDataCaptureIdModuleBase(idCaptureModule, serviceLocator)
36
+ }
37
+
38
+ companion object {
39
+ const val NAME = ScanditDataCaptureIdModuleBase.NAME
40
+ }
41
+
42
+ override fun getName(): String = NAME
43
+
44
+ override fun getTypedExportedConstants(): MutableMap<String, Any> = moduleBase.getDefaults()
45
+
46
+ override fun invalidate() {
47
+ moduleBase.onInvalidate()
48
+ super.invalidate()
49
+ }
50
+
51
+ override fun executeId(data: ReadableMap, promise: Promise) =
52
+ moduleBase.executeId(data, promise)
53
+ }
@@ -0,0 +1,63 @@
1
+ /*
2
+ * This file is part of the Scandit Data Capture SDK
3
+ *
4
+ * Copyright (C) 2021- Scandit AG. All rights reserved.
5
+ */
6
+
7
+ package com.scandit.datacapture.reactnative.id
8
+
9
+ import com.facebook.react.bridge.Promise
10
+ import com.facebook.react.bridge.ReactApplicationContext
11
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
12
+ import com.facebook.react.bridge.ReactMethod
13
+ import com.facebook.react.bridge.ReadableMap
14
+ import com.facebook.react.module.annotations.ReactModule
15
+ import com.scandit.datacapture.frameworks.core.FrameworkModule
16
+ import com.scandit.datacapture.frameworks.core.locator.ServiceLocator
17
+ import com.scandit.datacapture.frameworks.id.IdCaptureModule
18
+ import com.scandit.datacapture.reactnative.core.utils.ReactNativeEventEmitter
19
+
20
+ @ReactModule(name = ScanditDataCaptureIdModuleBase.NAME)
21
+ class ScanditDataCaptureIdModule(
22
+ reactContext: ReactApplicationContext,
23
+ serviceLocator: ServiceLocator<FrameworkModule>,
24
+ ) : ReactContextBaseJavaModule(reactContext) {
25
+
26
+ private val moduleBase: ScanditDataCaptureIdModuleBase
27
+
28
+ init {
29
+ // Create emitter with bridge-based RCTDeviceEventEmitter and set up IdCaptureModule
30
+ val emitter = ReactNativeEventEmitter(reactContext)
31
+ val idCaptureModule = IdCaptureModule(emitter).also {
32
+ it.onCreate(reactContext)
33
+ }
34
+ moduleBase = ScanditDataCaptureIdModuleBase(idCaptureModule, serviceLocator)
35
+ }
36
+
37
+ companion object {
38
+ const val NAME = ScanditDataCaptureIdModuleBase.NAME
39
+ }
40
+
41
+ override fun getName(): String = NAME
42
+
43
+ override fun getConstants(): MutableMap<String, Any> = moduleBase.getDefaults()
44
+
45
+ override fun invalidate() {
46
+ moduleBase.onInvalidate()
47
+ super.invalidate()
48
+ }
49
+
50
+ @ReactMethod
51
+ fun executeId(data: ReadableMap, promise: Promise) =
52
+ moduleBase.executeId(data, promise)
53
+
54
+ @ReactMethod
55
+ fun addListener(@Suppress("UNUSED_PARAMETER") eventName: String?) {
56
+ // Keep: Required for RN built in Event Emitter Calls.
57
+ }
58
+
59
+ @ReactMethod
60
+ fun removeListeners(@Suppress("UNUSED_PARAMETER") count: Int?) {
61
+ // Keep: Required for RN built in Event Emitter Calls.
62
+ }
63
+ }