react-native-scanbot-barcode-scanner-sdk 3.0.0-beta7 → 3.1.0-alpha3

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 (140) hide show
  1. package/RNScanbotBarcodeSDK.podspec +1 -1
  2. package/android/.gradle/6.1.1/executionHistory/executionHistory.bin +0 -0
  3. package/android/.gradle/6.1.1/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/6.1.1/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/6.1.1/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.1.1/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/6.1.1/gc.properties +0 -0
  8. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  9. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  10. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  11. package/android/.gradle/checksums/checksums.lock +0 -0
  12. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  13. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.idea/caches/build_file_checksums.ser +0 -0
  16. package/android/.idea/compiler.xml +6 -0
  17. package/android/.idea/gradle.xml +22 -0
  18. package/android/.idea/jarRepositories.xml +50 -0
  19. package/android/.idea/libraries/Gradle__androidx_activity_activity_1_2_3_aar.xml +16 -0
  20. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_2_0.xml +11 -0
  21. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_1_0_rc01_aar.xml +13 -0
  22. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_3_0_aar.xml +16 -0
  23. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_3_0_aar.xml +13 -0
  24. package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml +11 -0
  25. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml +13 -0
  26. package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +13 -0
  27. package/android/.idea/libraries/Gradle__androidx_camera_camera_camera2_1_0_0_aar.xml +16 -0
  28. package/android/.idea/libraries/Gradle__androidx_camera_camera_core_1_0_0_aar.xml +16 -0
  29. package/android/.idea/libraries/Gradle__androidx_camera_camera_lifecycle_1_0_0_aar.xml +13 -0
  30. package/android/.idea/libraries/Gradle__androidx_camera_camera_view_1_0_0_alpha24_aar.xml +16 -0
  31. package/android/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml +13 -0
  32. package/android/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml +11 -0
  33. package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml +11 -0
  34. package/android/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml +9 -0
  35. package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml +16 -0
  36. package/android/.idea/libraries/Gradle__androidx_core_core_1_5_0_aar.xml +16 -0
  37. package/android/.idea/libraries/Gradle__androidx_core_core_ktx_1_3_2_aar.xml +13 -0
  38. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +13 -0
  39. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +13 -0
  40. package/android/.idea/libraries/Gradle__androidx_databinding_viewbinding_4_2_1_aar.xml +13 -0
  41. package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +13 -0
  42. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +16 -0
  43. package/android/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml +13 -0
  44. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_3_4_aar.xml +16 -0
  45. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +13 -0
  46. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +13 -0
  47. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +13 -0
  48. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml +13 -0
  49. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_3_1.xml +11 -0
  50. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_1_0_aar.xml +13 -0
  51. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_3_1_aar.xml +13 -0
  52. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_3_1_aar.xml +13 -0
  53. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_3_1_aar.xml +13 -0
  54. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_3_1_aar.xml +13 -0
  55. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_3_1_aar.xml +13 -0
  56. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +13 -0
  57. package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +13 -0
  58. package/android/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml +16 -0
  59. package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +16 -0
  60. package/android/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_aar.xml +16 -0
  61. package/android/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_1_0_aar.xml +13 -0
  62. package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +13 -0
  63. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +16 -0
  64. package/android/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml +16 -0
  65. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml +13 -0
  66. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml +13 -0
  67. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_1_aar.xml +13 -0
  68. package/android/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml +16 -0
  69. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +13 -0
  70. package/android/.idea/libraries/Gradle__com_commonsware_cwac_camera_camera_0_6_41_aar.xml +11 -0
  71. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +15 -0
  72. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml +18 -0
  73. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +18 -0
  74. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +18 -0
  75. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +18 -0
  76. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +15 -0
  77. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +15 -0
  78. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +15 -0
  79. package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_11_2.xml +13 -0
  80. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_60_6_aar.xml +18 -0
  81. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_6_0_aar.xml +13 -0
  82. package/android/.idea/libraries/Gradle__com_google_android_material_material_1_3_0_aar.xml +16 -0
  83. package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +13 -0
  84. package/android/.idea/libraries/Gradle__com_google_code_gson_gson_2_8_6.xml +13 -0
  85. package/android/.idea/libraries/Gradle__com_google_dagger_dagger_2_35.xml +13 -0
  86. package/android/.idea/libraries/Gradle__com_google_guava_listenablefuture_1_0.xml +13 -0
  87. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_1.xml +13 -0
  88. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_1.xml +13 -0
  89. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +13 -0
  90. package/android/.idea/libraries/Gradle__commons_io_commons_io_2_4.xml +13 -0
  91. package/android/.idea/libraries/Gradle__io_reactivex_rxjava2_rxandroid_2_0_1_aar.xml +15 -0
  92. package/android/.idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_1_5.xml +13 -0
  93. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_barcode_scanner_sdk_3_0_1_aar.xml +11 -0
  94. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_barcode_scanner_sdk_ui_3_0_1_aar.xml +11 -0
  95. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_sdk_barcode_3_0_1_aar.xml +11 -0
  96. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_sdk_base_3_0_1_aar.xml +11 -0
  97. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_sdk_ui_barcode_3_0_1_aar.xml +11 -0
  98. package/android/.idea/libraries/Gradle__io_scanbot_scanbot_sdk_ui_base_3_0_1_aar.xml +11 -0
  99. package/android/.idea/libraries/Gradle__io_scanbot_sdk_barcode_assets_3_0_1_aar.xml +11 -0
  100. package/android/.idea/libraries/Gradle__io_scanbot_sdk_core_barcode_3_0_1_aar.xml +11 -0
  101. package/android/.idea/libraries/Gradle__io_scanbot_sdk_core_barcode_native_3_0_1_aar.xml +11 -0
  102. package/android/.idea/libraries/Gradle__io_scanbot_sdk_core_sap_3_0_1_aar.xml +11 -0
  103. package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +13 -0
  104. package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +13 -0
  105. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_20.xml +13 -0
  106. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_20.xml +13 -0
  107. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_20.xml +13 -0
  108. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_4_1.xml +13 -0
  109. package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_4_1.xml +13 -0
  110. package/android/.idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_1.xml +13 -0
  111. package/android/.idea/misc.xml +9 -0
  112. package/android/.idea/modules/android.iml +133 -0
  113. package/android/.idea/modules.xml +8 -0
  114. package/android/.idea/vcs.xml +6 -0
  115. package/android/.idea/workspace.xml +62 -0
  116. package/android/build.gradle +1 -1
  117. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/JSONUtils.java +74 -9
  118. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/ScanbotBarcodeSdkModule.java +2 -2
  119. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/ScanbotBarcodeSdkPackage.java +5 -1
  120. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/EventEmitter.java +55 -0
  121. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/barcodecameraview/ScanbotBarcodeCameraViewConfiguration.java +113 -0
  122. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/barcodecameraview/ScanbotBarcodeCameraViewFragment.java +246 -0
  123. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/barcodecameraview/ScanbotBarcodeCameraViewManager.java +160 -0
  124. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/common/ScanbotComponentFrameLayout.java +53 -0
  125. package/android/src/main/java/io/scanbot/barcodesdk/plugin/reactnative/components/common/ScanbotComponentRootView.java +159 -0
  126. package/android/src/main/res/layout/component_barcode_camera_view.xml +11 -0
  127. package/android/src/main/res/layout/fragment_barcode_scanner.xml +23 -0
  128. package/index.d.ts +4 -0
  129. package/index.js +3 -0
  130. package/ios/Components/BarcodeCameraView/RNScanbotBarcodeCameraView.h +54 -0
  131. package/ios/Components/BarcodeCameraView/RNScanbotBarcodeCameraView.m +235 -0
  132. package/ios/Components/BarcodeCameraView/RNScanbotBarcodeCameraViewManager.h +16 -0
  133. package/ios/Components/BarcodeCameraView/RNScanbotBarcodeCameraViewManager.m +30 -0
  134. package/ios/ScanbotBarcodeSdk.m +1 -1
  135. package/package.json +4 -1
  136. package/src/components/barcode-camera-view/scanbot-barcode-camera-view-types.tsx +115 -0
  137. package/src/components/barcode-camera-view/scanbot-barcode-camera-view.tsx +163 -0
  138. package/src/components/barcode-camera-view/scanbot-native-barcode-camera-view.tsx +6 -0
  139. package/src/configuration.ts +2 -2
  140. package/src/enum.ts +1 -1
@@ -0,0 +1,235 @@
1
+ //
2
+ // RNScanbotCameraView.m
3
+ // RNScanbotSDK
4
+ //
5
+ // Created by Marco Saia on 18.05.21.
6
+ //
7
+
8
+ #import "RNScanbotBarcodeCameraView.h"
9
+ #import "ObjectMapper.h"
10
+ #import "BarcodeMapping.h"
11
+
12
+ @import ScanbotBarcodeScannerSDK;
13
+ @import Foundation;
14
+
15
+ @implementation RNScanbotBarcodeCameraView {
16
+ SBSDKBarcodeScannerViewController* viewController;
17
+ RNScanbotCameraViewConfiguration* _cameraViewConfiguration;
18
+ CGFloat _userDefinedCameraZoomFactor;
19
+ }
20
+
21
+ - (instancetype)initWithFrame:(CGRect)frame {
22
+ self = [super initWithFrame:frame];
23
+ self.barcodes = [[NSMutableArray alloc] init];
24
+ self.shouldUseFinderView = false;
25
+ _cameraViewConfiguration = [[RNScanbotCameraViewConfiguration alloc] init];
26
+ _userDefinedCameraZoomFactor = -1;
27
+ return self;
28
+ }
29
+
30
+ - (void)layoutSubviews {
31
+ if (_cameraViewController) {
32
+ _cameraViewController.view.frame = [self bounds];
33
+ return;
34
+ }
35
+
36
+ __weak typeof(self) weakSelf = self;
37
+
38
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
39
+ [weakSelf createCameraViewController];
40
+ });
41
+ }
42
+
43
+ - (void)createCameraViewController {
44
+ UIViewController* parentViewController = [self getParentViewController];
45
+ if (!parentViewController) {
46
+ return;
47
+ }
48
+
49
+ if (!_cameraViewController) {
50
+ viewController = [[SBSDKBarcodeScannerViewController alloc] initWithParentViewController:parentViewController
51
+ parentView:self];
52
+ viewController.delegate = self;
53
+
54
+ _cameraViewController = viewController;
55
+ }
56
+
57
+ [self updateWithConfiguration];
58
+ }
59
+
60
+ - (void)setConfiguration:(NSDictionary *)configuration {
61
+ _configuration = configuration;
62
+ if (configuration == NULL) {
63
+ return;
64
+ }
65
+ RNScanbotCameraViewConfiguration* cameraViewConfiguration = [[RNScanbotCameraViewConfiguration alloc] init];
66
+
67
+ NSMutableDictionary* config = [configuration mutableCopy];
68
+ if ([config objectForKey:@"barcodeFormats"]) {
69
+ cameraViewConfiguration.barcodeFormats = extractBarcodeTypesFromConfiguration(config);
70
+ [config removeObjectForKey:@"barcodeFormats"];
71
+ }
72
+
73
+ @try {
74
+ [ObjectMapper populateInstance:cameraViewConfiguration fromDictionary:config];
75
+ } @catch (NSException *exception) {
76
+ NSLog(@"%@", [exception reason]);
77
+ return;
78
+ }
79
+
80
+ cameraViewConfiguration.msiPlesseyChecksumAlgorithm = extractPlesseyChecksumAlgorithmFromConfiguration(configuration);
81
+
82
+ _cameraViewConfiguration = cameraViewConfiguration;
83
+
84
+ if(viewController) {
85
+ [self updateWithConfiguration];
86
+ }
87
+ }
88
+
89
+ - (void)updateWithConfiguration {
90
+
91
+ // Non-Nullable Properties
92
+ viewController.viewFinderLineWidth = _cameraViewConfiguration.finderLineWidth;
93
+ viewController.viewFinderLineColor = _cameraViewConfiguration.finderLineColor;
94
+ viewController.viewFinderBackgroundColor = _cameraViewConfiguration.finderBackgroundColor;
95
+ viewController.viewFinderBackgroundColor = [viewController.viewFinderBackgroundColor colorWithAlphaComponent:_cameraViewConfiguration.finderBackgroundOpacity];
96
+ viewController.finderAspectRatio = _cameraViewConfiguration.finderAspectRatio;
97
+
98
+ CGFloat offset = _cameraViewConfiguration.finderVerticalOffset;
99
+ CGFloat padding = _cameraViewConfiguration.finderMinimumPadding;
100
+ viewController.finderMinimumInset = UIEdgeInsetsMake(padding + offset > 0 ? offset : 0,
101
+ padding,
102
+ padding + offset < 0 ? -1*offset : 0,
103
+ padding);
104
+
105
+ // Nullable Properties
106
+ if (_cameraViewConfiguration.shouldUseFinderView) {
107
+ viewController.shouldUseFinderFrame = [_cameraViewConfiguration.shouldUseFinderView boolValue];
108
+ }
109
+ if (_cameraViewConfiguration.barcodeFormats) {
110
+ viewController.acceptedBarcodeTypes = _cameraViewConfiguration.barcodeFormats;
111
+ }
112
+ if (_cameraViewConfiguration.acceptedDocumentFormats) {
113
+ viewController.acceptedDocumentTypes = _cameraViewConfiguration.acceptedDocumentFormats;
114
+ }
115
+ if (_cameraViewConfiguration.gs1DecodingEnabled) {
116
+ viewController.additionalDetectionParameters.enableGS1Decoding = [_cameraViewConfiguration.gs1DecodingEnabled boolValue];
117
+ }
118
+ if (_cameraViewConfiguration.maximumTextLength) {
119
+ viewController.additionalDetectionParameters.maximumTextLength = [_cameraViewConfiguration.maximumTextLength intValue];
120
+ }
121
+ if (_cameraViewConfiguration.minimumTextLength) {
122
+ viewController.additionalDetectionParameters.minimumTextLength = [_cameraViewConfiguration.minimumTextLength intValue];
123
+ }
124
+ if (_cameraViewConfiguration.msiPlesseyChecksumAlgorithm != -1) {
125
+ viewController.additionalDetectionParameters.msiPlesseyChecksumAlgorithm = _cameraViewConfiguration.msiPlesseyChecksumAlgorithm;
126
+ }
127
+ if (_cameraViewConfiguration.cameraZoomFactor) {
128
+ CGFloat value = [_cameraViewConfiguration.cameraZoomFactor floatValue];
129
+ if (value != _userDefinedCameraZoomFactor || _userDefinedCameraZoomFactor == -1) {
130
+ viewController.cameraZoomFactor = value;
131
+ _userDefinedCameraZoomFactor = value;
132
+ }
133
+ }
134
+ if (_cameraViewConfiguration.engineMode != -1) {
135
+ viewController.engineMode = _cameraViewConfiguration.engineMode;
136
+ }
137
+ if (_cameraViewConfiguration.flashEnabled) {
138
+ viewController.flashLightEnabled = [_cameraViewConfiguration.flashEnabled boolValue];
139
+ }
140
+ }
141
+
142
+ - (UIViewController* _Nullable)getParentViewController {
143
+ UIResponder* parentResponder = self;
144
+ while (parentResponder) {
145
+ parentResponder = parentResponder.nextResponder;
146
+ if (parentResponder && [parentResponder isKindOfClass:[UIViewController class]]) {
147
+ return (UIViewController*) parentResponder;
148
+ }
149
+ }
150
+ return NULL;
151
+ }
152
+
153
+ - (void)sendScanResults:(NSArray<SBSDKBarcodeScannerResult*>*) results {
154
+ if(!self.onBarcodeScannerResult) {
155
+ return;
156
+ }
157
+
158
+ if(!results || results.count == 0) {
159
+ return;
160
+ }
161
+
162
+ NSMutableArray* jsonBarcodes = [[NSMutableArray alloc] init];
163
+
164
+ for (SBSDKBarcodeScannerResult* result in results) {
165
+ [jsonBarcodes addObject:@{
166
+ @"text": result.rawTextString,
167
+ @"type": result.type.name
168
+ }];
169
+ }
170
+
171
+ NSDictionary* outResult = @{
172
+ @"result": @{
173
+ @"status": @"OK",
174
+ @"barcodes": jsonBarcodes
175
+ }
176
+ };
177
+
178
+ self.onBarcodeScannerResult(outResult);
179
+ }
180
+
181
+ // MARK: - SBSDKBarcodeScannerViewControllerDelegate
182
+
183
+ - (void)barcodeScannerController:(SBSDKBarcodeScannerViewController *)controller
184
+ didDetectBarcodes:(NSArray<SBSDKBarcodeScannerResult *> *)codes {
185
+ [self sendScanResults:codes];
186
+ }
187
+
188
+ - (BOOL)barcodeScannerControllerShouldDetectBarcodes:(SBSDKBarcodeScannerViewController *)controller {
189
+ return true;
190
+ }
191
+
192
+ - (NSArray*)hashedBarcodes {
193
+ NSMutableArray* outArray = [[NSMutableArray alloc] init];
194
+ for (NSDictionary* barcode in self.barcodes) {
195
+ NSString* hash = [RNScanbotBarcodeCameraView hashFromBarcode:barcode];
196
+ [outArray addObject:hash];
197
+ }
198
+ return outArray;
199
+ }
200
+
201
+ + (NSString*)hashFromBarcode: (NSDictionary* _Nonnull)barcode {
202
+ NSString* text = [barcode objectForKey:@"barcode"];
203
+ NSString* type = [barcode objectForKey:@"type"];
204
+ return [[NSString stringWithFormat:@"%@_%@", text, type] lowercaseString];
205
+ }
206
+
207
+ @end
208
+
209
+ @implementation RNScanbotCameraViewConfiguration
210
+
211
+ - (instancetype)init
212
+ {
213
+ self = [super init];
214
+ if (self) {
215
+ self.shouldUseFinderView = false;
216
+ self.finderLineWidth = 1.0;
217
+ self.finderLineColor = UIColor.whiteColor;
218
+ self.finderAspectRatio = [[SBSDKAspectRatio alloc] initWithWidth:1 andHeight:1];
219
+ self.finderBackgroundColor = UIColor.blackColor;
220
+ self.finderBackgroundOpacity = 0.6;
221
+ self.finderMinimumPadding = 32.0;
222
+ self.finderVerticalOffset = 0.0;
223
+ self.acceptedDocumentFormats = nil;
224
+ self.gs1DecodingEnabled = nil;
225
+ self.maximumTextLength = nil;
226
+ self.minimumTextLength = nil;
227
+ self.msiPlesseyChecksumAlgorithm = -1;
228
+ self.cameraZoomFactor = nil;
229
+ self.engineMode = -1;
230
+ self.flashEnabled = nil;
231
+ }
232
+ return self;
233
+ }
234
+
235
+ @end
@@ -0,0 +1,16 @@
1
+ //
2
+ // RNScanbotClassicComponents.h
3
+ // Pods
4
+ //
5
+ // Created by Marco Saia on 17.05.21.
6
+ //
7
+
8
+ #ifndef RNScanbotClassicComponents_h
9
+ #define RNScanbotClassicComponents_h
10
+
11
+ #import <React/RCTViewManager.h>
12
+
13
+ @interface RNScanbotBarcodeCameraViewManager: RCTViewManager
14
+ @end
15
+
16
+ #endif /* RNScanbotClassicComponents_h */
@@ -0,0 +1,30 @@
1
+ //
2
+ // RNScanbotClassicComponents.m
3
+ // RNScanbotSDK
4
+ //
5
+ // Created by Marco Saia on 17.05.21.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import "RNScanbotBarcodeCameraViewManager.h"
10
+ #import "RNScanbotBarcodeCameraView.h"
11
+ #import <React/RCTViewManager.h>
12
+
13
+ @import UIKit;
14
+ @import ScanbotBarcodeScannerSDK;
15
+
16
+ @implementation RNScanbotBarcodeCameraViewManager
17
+
18
+ RCT_EXPORT_MODULE(ScanbotBarcodeCameraView)
19
+
20
+ RCT_EXPORT_VIEW_PROPERTY(onBarcodeScannerResult, RCTBubblingEventBlock)
21
+ RCT_EXPORT_VIEW_PROPERTY(requestComponentReload, RCTBubblingEventBlock)
22
+ RCT_EXPORT_VIEW_PROPERTY(shouldUseFinderView, BOOL)
23
+ RCT_EXPORT_VIEW_PROPERTY(configuration, NSDictionary*)
24
+
25
+ - (UIView *) view
26
+ {
27
+ return [[RNScanbotBarcodeCameraView alloc] init];
28
+ }
29
+
30
+ @end
@@ -39,7 +39,7 @@ RCT_EXPORT_METHOD(initializeSdk:(NSDictionary *)configuration
39
39
  [ObjectMapper setEnumerationMapping:@{
40
40
  @"barcodeImageGenerationType": @{
41
41
  @"NONE": @(SBSDKBarcodeImageGenerationTypeNone),
42
- @"FROM_VIDEO_FRAME": @(SBSDKBarcodeImageGenerationTypeFromVideoFrame),
42
+ @"VIDEO_FRAME": @(SBSDKBarcodeImageGenerationTypeFromVideoFrame),
43
43
  @"CAPTURED_IMAGE" :@(SBSDKBarcodeImageGenerationTypeCapturedImage),
44
44
  },
45
45
  @"engineMode": @{
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "react-native-scanbot-barcode-scanner-sdk",
3
3
  "title": "Scanbot Barcode Scanner SDK for React Native",
4
- "version": "3.0.0-beta7",
4
+ "version": "3.1.0-alpha3",
5
5
  "description": "React Native plugin for the Scanbot Barcode Scanner SDK on Android and iOS",
6
6
  "main": "index.js",
7
7
  "files": [
8
8
  "src/*.js",
9
9
  "src/*.ts",
10
+ "src/components/**/*.ts",
11
+ "src/components/**/*.tsx",
12
+ "src/components/**/*.js",
10
13
  "android/**",
11
14
  "ios/**",
12
15
  "index.d.ts",
@@ -0,0 +1,115 @@
1
+ import {StyleProp, ViewStyle} from 'react-native';
2
+ import {
3
+ BarcodeDocumentFormat,
4
+ BarcodeFormat,
5
+ EngineMode,
6
+ MSIPlesseyChecksumAlgorithm,
7
+ } from '../../enum';
8
+ import {FinderAspectRatio} from '../../model';
9
+
10
+ export interface ScanbotBarcodeCameraViewProperties {
11
+ onBarcodeScannerResult?: (result: ScanbotBarcodeCameraViewResult) => void;
12
+ requestComponentReload?: () => void;
13
+ configuration?: ScanbotBarcodeCameraViewConfiguration;
14
+ style: StyleProp<ViewStyle>;
15
+ }
16
+
17
+ export interface ScanbotBarcodeCameraViewBarcode {
18
+ text: string;
19
+ type: string;
20
+ }
21
+
22
+ export type ScanbotBarcodeCameraViewResult = {
23
+ status: 'OK' | 'CANCELED';
24
+ barcodes: ScanbotBarcodeCameraViewBarcode[];
25
+ };
26
+
27
+ export interface ScanbotBarcodeCameraViewConfiguration {
28
+ /**
29
+ * The finder view is a rectangular overlay view that clips the camera view,
30
+ * so that the detection will focus just a specific area. You can specify
31
+ * the size and positioning, as well as other UI properties.
32
+ * Set this property to `true` if you want to use the Finder View, `false` otherwise (default: false)
33
+ */
34
+ shouldUseFinderView?: boolean;
35
+ /**
36
+ * The finder view rectangular overlay border width
37
+ */
38
+ finderLineWidth?: number;
39
+ /**
40
+ * The finder view rectangular overlay border color
41
+ */
42
+ finderLineColor?: string;
43
+ /**
44
+ * The overlay background color, around the finder view rectangle
45
+ */
46
+ finderBackgroundColor?: string;
47
+ /**
48
+ * The overlay background color opacity, around the finder view rectangle
49
+ */
50
+ finderBackgroundOpacity?: number;
51
+ /**
52
+ * The finder view rectangle aspect ratio
53
+ */
54
+ finderAspectRatio?: FinderAspectRatio;
55
+ /**
56
+ * The finder view minimum padding from the bounds of the screen
57
+ */
58
+ finderMinimumPadding?: number;
59
+ /**
60
+ * How many pixel units the finder view should be moved vertically;
61
+ *
62
+ * Positive values -> (UP); Negative values -> (DOWN)
63
+ */
64
+ finderVerticalOffset?: number;
65
+ /**
66
+ * Whether flash is toggled on or off.
67
+ */
68
+ flashEnabled?: boolean;
69
+ /**
70
+ * List of accepted Barcode Formats; any formats that are not included in this
71
+ * list will not be detected by the `BarcodeCameraView`. By default, the list
72
+ * includes all supported barcode types.
73
+ */
74
+ barcodeFormats?: BarcodeFormat[];
75
+ /**
76
+ * List of accepted Document Formats; any document formats that are not included
77
+ * in this list will be ignored by the `BarcodeCameraView`. By default, the list
78
+ * includes all supported document types.
79
+ */
80
+ acceptedDocumentFormats?: BarcodeDocumentFormat[];
81
+ /**
82
+ * The checksum algorithm for MSI Plessey barcodes.
83
+ * The default value is `Mod10'
84
+ */
85
+ msiPlesseyChecksumAlgorithm?: MSIPlesseyChecksumAlgorithm;
86
+ /**
87
+ * The engine mode of the barcode recognizer. Defaults to NEXT_GEN.
88
+ * To use legacy recognizer, please specify LEGACY
89
+ */
90
+ engineMode?: EngineMode;
91
+ /**
92
+ * The relative initial zoom level of the camera in the range [0,1], where 0 is zoomed out and 1 is zoomed in.
93
+ * The default value is 0.
94
+ */
95
+ cameraZoomFactor?: number;
96
+ /**
97
+ * When set to `true`, the scanner assumes that the barcode can be a GS1 barcode.
98
+ * Turn it off, if you don't want to see decoded FNC1 characters ("]C1" and ASCII char 29).
99
+ * The default value is `true`.
100
+ * NOTE: Currently works for CODE128 barcodes only.
101
+ */
102
+ gs1DecodingEnabled?: boolean;
103
+ /**
104
+ * Optional minimum required text length of the detected barcode.
105
+ * The default is 0 (setting is turned off).
106
+ * NOTE: This feature works on ITF barcodes only.
107
+ */
108
+ minimumTextLength?: number;
109
+ /**
110
+ * Optional maximum required text length of the detected barcode.
111
+ * The default is 0 (setting is turned off).
112
+ * NOTE: This feature works on ITF barcodes only.
113
+ */
114
+ maximumTextLength?: number;
115
+ }
@@ -0,0 +1,163 @@
1
+ import React from 'react';
2
+ import {Platform} from 'react-native';
3
+ import {Dimensions} from 'react-native';
4
+ import {ScanbotBarcodeCameraViewProperties} from './scanbot-barcode-camera-view-types';
5
+ import ScanbotNativeBarcodeCameraView from './scanbot-native-barcode-camera-view';
6
+
7
+ const Device = {
8
+ isPortrait: () => {
9
+ const dim = Dimensions.get('screen');
10
+ return dim.height >= dim.width;
11
+ },
12
+ isLandscape: () => {
13
+ const dim = Dimensions.get('screen');
14
+ return dim.width >= dim.height;
15
+ },
16
+ };
17
+
18
+ interface ScanbotBarcodeCameraViewState {
19
+ orientation: string;
20
+ }
21
+
22
+ type Properties = ScanbotBarcodeCameraViewProperties;
23
+ export class ScanbotBarcodeCameraView extends React.Component<Properties, {}> {
24
+ // String length of auto-generated component key
25
+ static UNIQUE_VIEW_KEY_LENGTH = 6;
26
+
27
+ // This attribute allows us to retrieve a key for the component depending on the current state.
28
+ // If the component has been invalidated, it returns a new key and the view gets recreated,
29
+ // otherwise it uses the last generated one
30
+ _cameraKey = '';
31
+ get cameraKey(): string {
32
+ if (!this.isDirty) {
33
+ return this._cameraKey;
34
+ }
35
+ this.isDirty = false;
36
+ this._cameraKey = ScanbotBarcodeCameraView.getRandomId(
37
+ ScanbotBarcodeCameraView.UNIQUE_VIEW_KEY_LENGTH,
38
+ );
39
+ return this._cameraKey;
40
+ }
41
+
42
+ // We keep track of the state of children components, so that we can re-render the component
43
+ // in some special cases (Android)
44
+ previousChildrenIds: string[] = [];
45
+ get childrenIds(): string[] {
46
+ const children = this.props.children
47
+ ? React.Children.map(this.props.children, child => child)
48
+ : [];
49
+
50
+ return children?.map((c: any) => `${c.type.name}-${c.key}`) ?? [];
51
+ }
52
+
53
+ // When true, a new component key will be generated on the next render,
54
+ // causing the component to be recreated
55
+ isDirty = true;
56
+
57
+ state: ScanbotBarcodeCameraViewState = {
58
+ orientation: Device.isPortrait() ? 'portrait' : 'landscape',
59
+ };
60
+
61
+ // Returns a random string ID of the given length
62
+ static getRandomId(
63
+ length: number = ScanbotBarcodeCameraView.UNIQUE_VIEW_KEY_LENGTH,
64
+ ): string {
65
+ let result = '';
66
+ const characters =
67
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
68
+ const charactersLength = characters.length;
69
+ for (let i = 0; i < length; i++) {
70
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
71
+ }
72
+ return result;
73
+ }
74
+
75
+ // Event Listener for orientation changes
76
+ orientationChangeHandler = () => {
77
+ this.isDirty = true;
78
+ this.setState({
79
+ orientation: Device.isPortrait() ? 'portrait' : 'landscape',
80
+ });
81
+ };
82
+
83
+ // Maps the native bridge callback event from the Barcode Scanner
84
+ _onBarcodeScannerResult = (event: any) => {
85
+ if (!this.props.onBarcodeScannerResult) {
86
+ return;
87
+ }
88
+
89
+ this.props.onBarcodeScannerResult(event.nativeEvent.result);
90
+ };
91
+
92
+ render() {
93
+ this.evaluateComponentState();
94
+
95
+ const style = this.preprocessStyle();
96
+ const props = this.preprocessProps();
97
+
98
+ return (
99
+ <ScanbotNativeBarcodeCameraView
100
+ {...props}
101
+ style={style}
102
+ key={this.cameraKey}
103
+ requestComponentReload={this._invalidate}
104
+ onBarcodeScannerResult={this._onBarcodeScannerResult}
105
+ />
106
+ );
107
+ }
108
+
109
+ componentDidMount() {
110
+ Dimensions.addEventListener('change', this.orientationChangeHandler);
111
+ this.previousChildrenIds = this.childrenIds;
112
+ }
113
+
114
+ componentWillUnmount() {
115
+ Dimensions.removeEventListener('change', this.orientationChangeHandler);
116
+ this.previousChildrenIds = [];
117
+ }
118
+
119
+ evaluateComponentState = () => {
120
+ // We want to force a re-layout every time new children are added or removed
121
+ // from the BarcodeCameraView on Android; this will allow the native code to
122
+ // re-compute the size of every view inside the layout
123
+ if (Platform.OS === 'android') {
124
+ const currentChildrenIds = this.childrenIds;
125
+
126
+ const invalidate = () => {
127
+ this._invalidate();
128
+ this.previousChildrenIds = currentChildrenIds;
129
+ };
130
+ if (currentChildrenIds.length !== this.previousChildrenIds.length) {
131
+ invalidate();
132
+ return;
133
+ }
134
+
135
+ for (let i = 0; i < this.previousChildrenIds.length; i++) {
136
+ const previous = this.previousChildrenIds[i];
137
+ const current = currentChildrenIds[i];
138
+ if (previous !== current) {
139
+ invalidate();
140
+ return;
141
+ }
142
+ }
143
+ }
144
+ };
145
+
146
+ preprocessStyle = () => {
147
+ const style = this.props.style as any;
148
+ const newStyle = {...style} || {};
149
+ // Override / Define styles here
150
+ return newStyle;
151
+ };
152
+
153
+ preprocessProps = () => {
154
+ const props = {...this.props};
155
+ delete props.style;
156
+ return props;
157
+ };
158
+
159
+ // Invalidates the component so that it gets recreated on the next render
160
+ _invalidate = () => {
161
+ this.isDirty = true;
162
+ };
163
+ }
@@ -0,0 +1,6 @@
1
+ import {requireNativeComponent} from 'react-native';
2
+ import {ScanbotBarcodeCameraViewProperties} from './scanbot-barcode-camera-view-types';
3
+
4
+ export default requireNativeComponent<ScanbotBarcodeCameraViewProperties>(
5
+ 'ScanbotBarcodeCameraView',
6
+ );
@@ -3,14 +3,14 @@
3
3
  Copyright (c) 2020 doo GmbH. All rights reserved.
4
4
  https://scanbot.io/sdk
5
5
  */
6
- import { FinderAspectRatio } from "./src/model";
6
+ import { FinderAspectRatio } from "./model";
7
7
  import {
8
8
  BarcodeDocumentFormat,
9
9
  BarcodeFormat,
10
10
  BarcodeImageGenerationType,
11
11
  UIInterfaceOrientationMask,
12
12
  EngineMode
13
- } from "./src/enum";
13
+ } from "./enum";
14
14
  import { MSIPlesseyChecksumAlgorithm } from "react-native-scanbot-barcode-scanner-sdk/src/enum";
15
15
 
16
16
  export interface BarcodeScannerConfiguration
package/src/enum.ts CHANGED
@@ -31,7 +31,7 @@ export type UIInterfaceOrientationMask =
31
31
 
32
32
  export type BarcodeImageGenerationType =
33
33
  "NONE"
34
- | "FROM_VIDEO_FRAME"
34
+ | "VIDEO_FRAME"
35
35
  | "CAPTURED_IMAGE";
36
36
 
37
37
  export type BarcodeDocumentFormat =