@pensasystems/pensa-react-native 0.1.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.
- package/LICENSE +20 -0
- package/PensaSdkReactNative.podspec +25 -0
- package/README.md +279 -0
- package/android/build.gradle +90 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/pensasdkreactnative/PensaEventEmitterModule.kt +21 -0
- package/android/src/main/java/com/pensasdkreactnative/PensaListeners.kt +44 -0
- package/android/src/main/java/com/pensasdkreactnative/PensaSdkReactNativeModule.kt +172 -0
- package/android/src/main/java/com/pensasdkreactnative/PensaSdkReactNativePackage.kt +20 -0
- package/ios/PensaEventEmitter.swift +26 -0
- package/ios/PensaListeners.swift +37 -0
- package/ios/PensaSdkReactNative-Bridging-Header.h +43 -0
- package/ios/PensaSdkReactNative.mm +48 -0
- package/ios/PensaSdkReactNative.swift +121 -0
- package/ios/Podfile +35 -0
- package/lib/module/events.js +11 -0
- package/lib/module/events.js.map +1 -0
- package/lib/module/index.js +42 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/events.d.ts +7 -0
- package/lib/typescript/src/events.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +16 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +26 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +154 -0
- package/src/events.ts +16 -0
- package/src/index.tsx +77 -0
- package/src/types.ts +29 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import React
|
|
3
|
+
|
|
4
|
+
@objc(PensaEventEmitter)
|
|
5
|
+
class PensaEventEmitter: RCTEventEmitter {
|
|
6
|
+
|
|
7
|
+
static var shared: PensaEventEmitter?
|
|
8
|
+
|
|
9
|
+
override init() {
|
|
10
|
+
super.init()
|
|
11
|
+
PensaEventEmitter.shared = self
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
15
|
+
return true
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override func supportedEvents() -> [String] {
|
|
19
|
+
return [
|
|
20
|
+
"onScanUploadProgressUpdate",
|
|
21
|
+
"onScanUploadCompleted",
|
|
22
|
+
"onScanUploadFailed",
|
|
23
|
+
"onCantScanReported"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import PensaSdk
|
|
3
|
+
|
|
4
|
+
class PensaListeners: NSObject, ScanUploadListener, CantScanEventListener {
|
|
5
|
+
|
|
6
|
+
static let shared = PensaListeners()
|
|
7
|
+
|
|
8
|
+
private override init() {}
|
|
9
|
+
|
|
10
|
+
func onScanUploadProgressUpdate(tdlinxId: String, scanAreaId: String, progress: Double) {
|
|
11
|
+
PensaEventEmitter.shared?.sendEvent(
|
|
12
|
+
withName: "onScanUploadProgressUpdate",
|
|
13
|
+
body: ["tdlinxId": tdlinxId, "scanAreaId": scanAreaId, "progress": progress]
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func onScanUploadCompleted(tdlinxId: String, scanAreaId: String) {
|
|
18
|
+
PensaEventEmitter.shared?.sendEvent(
|
|
19
|
+
withName: "onScanUploadCompleted",
|
|
20
|
+
body: ["tdlinxId": tdlinxId, "scanAreaId": scanAreaId]
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
func onScanUploadFailed(tdlinxId: String, scanAreaId: String, error: Error) {
|
|
25
|
+
PensaEventEmitter.shared?.sendEvent(
|
|
26
|
+
withName: "onScanUploadFailed",
|
|
27
|
+
body: ["tdlinxId": tdlinxId, "scanAreaId": scanAreaId, "error": error.localizedDescription]
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func onCantScanReported(tdlinxId: String, scanAreaId: String, cantScanReason: String) {
|
|
32
|
+
PensaEventEmitter.shared?.sendEvent(
|
|
33
|
+
withName: "onCantScanReported",
|
|
34
|
+
body: ["tdlinxId": tdlinxId, "scanAreaId": scanAreaId, "reason": cantScanReason]
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(PensaSdkReactNative, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(initPensa:(NSDictionary *)config
|
|
7
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
8
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
9
|
+
|
|
10
|
+
RCT_EXTERN_METHOD(isPensaStarted:(RCTPromiseResolveBlock)resolve
|
|
11
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(showShelfScans:(RCTPromiseResolveBlock)resolve
|
|
14
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
15
|
+
|
|
16
|
+
RCT_EXTERN_METHOD(showProductScans:(RCTPromiseResolveBlock)resolve
|
|
17
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
18
|
+
|
|
19
|
+
RCT_EXTERN_METHOD(showStoreSearchView:(RCTPromiseResolveBlock)resolve
|
|
20
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
21
|
+
|
|
22
|
+
RCT_EXTERN_METHOD(showStoresScreen:(RCTPromiseResolveBlock)resolve
|
|
23
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
24
|
+
|
|
25
|
+
RCT_EXTERN_METHOD(showStockingScreen:(RCTPromiseResolveBlock)resolve
|
|
26
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
27
|
+
|
|
28
|
+
RCT_EXTERN_METHOD(showScanArea:(nonnull NSNumber *)scanId
|
|
29
|
+
storeId:(nullable NSNumber *)storeId
|
|
30
|
+
globalStoreId:(nullable NSString *)globalStoreId
|
|
31
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
32
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
33
|
+
|
|
34
|
+
RCT_EXTERN_METHOD(showStoreChecklist:(NSString *)globalStoreId
|
|
35
|
+
guid:(NSString * _Nullable)guid
|
|
36
|
+
sectionKey:(NSString * _Nullable)sectionKey
|
|
37
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
38
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
+
|
|
40
|
+
@end
|
|
41
|
+
|
|
42
|
+
@interface RCT_EXTERN_MODULE(PensaEventEmitter, RCTEventEmitter)
|
|
43
|
+
@end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(PensaSdkReactNative, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(initPensa:(NSDictionary *)config
|
|
7
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
8
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
9
|
+
|
|
10
|
+
RCT_EXTERN_METHOD(isPensaStarted:(RCTPromiseResolveBlock)resolve
|
|
11
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(showShelfScans:(RCTPromiseResolveBlock)resolve
|
|
14
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
15
|
+
|
|
16
|
+
RCT_EXTERN_METHOD(showProductScans:(RCTPromiseResolveBlock)resolve
|
|
17
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
18
|
+
|
|
19
|
+
RCT_EXTERN_METHOD(showStoreSearchView:(RCTPromiseResolveBlock)resolve
|
|
20
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
21
|
+
|
|
22
|
+
RCT_EXTERN_METHOD(showStoresScreen:(RCTPromiseResolveBlock)resolve
|
|
23
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
24
|
+
|
|
25
|
+
RCT_EXTERN_METHOD(showStockingScreen:(RCTPromiseResolveBlock)resolve
|
|
26
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
27
|
+
|
|
28
|
+
RCT_EXTERN_METHOD(showScanArea:(nonnull NSNumber *)scanId
|
|
29
|
+
storeId:(nullable NSNumber *)storeId
|
|
30
|
+
globalStoreId:(nullable NSString *)globalStoreId
|
|
31
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
32
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
33
|
+
|
|
34
|
+
RCT_EXTERN_METHOD(showStoreChecklist:(NSString *)globalStoreId
|
|
35
|
+
guid:(NSString * _Nullable)guid
|
|
36
|
+
sectionKey:(NSString * _Nullable)sectionKey
|
|
37
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
38
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
+
|
|
40
|
+
+ (BOOL)requiresMainQueueSetup
|
|
41
|
+
{
|
|
42
|
+
return NO;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@end
|
|
46
|
+
|
|
47
|
+
@interface RCT_EXTERN_MODULE(PensaEventEmitter, RCTEventEmitter)
|
|
48
|
+
@end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import PensaSdk
|
|
3
|
+
|
|
4
|
+
@objc(PensaSdkReactNative)
|
|
5
|
+
class PensaSdkReactNative: NSObject {
|
|
6
|
+
|
|
7
|
+
@objc
|
|
8
|
+
static func requiresMainQueueSetup() -> Bool {
|
|
9
|
+
return true
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@objc(initPensa:withResolver:withRejecter:)
|
|
13
|
+
func initPensa(config: NSDictionary,
|
|
14
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
15
|
+
reject: @escaping RCTPromiseRejectBlock) {
|
|
16
|
+
guard let clientId = config["clientId"] as? String,
|
|
17
|
+
let clientSecret = config["clientSecret"] as? String else {
|
|
18
|
+
reject("INVALID_CONFIG", "clientId and clientSecret are required", nil)
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
let loggingEnabled = config["isLoggingEnabled"] as? Bool ?? false
|
|
23
|
+
|
|
24
|
+
let configuration = PensaConfiguration.Builder()
|
|
25
|
+
.setClientId(clientId)
|
|
26
|
+
.setClientSecret(clientSecret)
|
|
27
|
+
.setLoggingEnabled(loggingEnabled)
|
|
28
|
+
.setScanUploadListener(PensaListeners.shared)
|
|
29
|
+
.setCantScanEventListener(PensaListeners.shared)
|
|
30
|
+
.build()
|
|
31
|
+
|
|
32
|
+
DispatchQueue.main.async {
|
|
33
|
+
Pensa.shared.initPensa(config: configuration) { error in
|
|
34
|
+
if let error = error {
|
|
35
|
+
reject("INIT_FAILED", error.localizedDescription, error)
|
|
36
|
+
} else {
|
|
37
|
+
resolve(nil)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@objc(isPensaStarted:withRejecter:)
|
|
44
|
+
func isPensaStarted(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
45
|
+
DispatchQueue.main.async {
|
|
46
|
+
resolve(Pensa.shared.isPensaStarted())
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@objc(showShelfScans:withRejecter:)
|
|
51
|
+
func showShelfScans(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
52
|
+
DispatchQueue.main.async {
|
|
53
|
+
Pensa.shared.showShelfScans()
|
|
54
|
+
resolve(nil)
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@objc(showProductScans:withRejecter:)
|
|
59
|
+
func showProductScans(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
60
|
+
DispatchQueue.main.async {
|
|
61
|
+
Pensa.shared.showProductScans()
|
|
62
|
+
resolve(nil)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@objc(showStoreSearchView:withRejecter:)
|
|
67
|
+
func showStoreSearchView(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
68
|
+
DispatchQueue.main.async {
|
|
69
|
+
Pensa.shared.showStoreSearchView()
|
|
70
|
+
resolve(nil)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@objc(showStoresScreen:withRejecter:)
|
|
75
|
+
func showStoresScreen(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
76
|
+
DispatchQueue.main.async {
|
|
77
|
+
Pensa.shared.showStoresScreen()
|
|
78
|
+
resolve(nil)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@objc(showStockingScreen:withRejecter:)
|
|
83
|
+
func showStockingScreen(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
84
|
+
DispatchQueue.main.async {
|
|
85
|
+
Pensa.shared.showStockingScreen()
|
|
86
|
+
resolve(nil)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@objc(showScanArea:storeId:globalStoreId:withResolver:withRejecter:)
|
|
91
|
+
func showScanArea(scanId: NSNumber,
|
|
92
|
+
storeId: NSNumber?,
|
|
93
|
+
globalStoreId: String?,
|
|
94
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
95
|
+
reject: @escaping RCTPromiseRejectBlock) {
|
|
96
|
+
DispatchQueue.main.async {
|
|
97
|
+
Pensa.shared.showScanArea(
|
|
98
|
+
scanId: scanId.intValue,
|
|
99
|
+
storeId: storeId?.intValue,
|
|
100
|
+
globalStoreId: globalStoreId
|
|
101
|
+
)
|
|
102
|
+
resolve(nil)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@objc(showStoreChecklist:guid:sectionKey:withResolver:withRejecter:)
|
|
107
|
+
func showStoreChecklist(globalStoreId: NSString,
|
|
108
|
+
guid: NSString?,
|
|
109
|
+
sectionKey: NSString?,
|
|
110
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
111
|
+
reject: @escaping RCTPromiseRejectBlock) {
|
|
112
|
+
DispatchQueue.main.async {
|
|
113
|
+
Pensa.shared.showStoreChecklist(
|
|
114
|
+
sectionKey: sectionKey as String?,
|
|
115
|
+
guid: guid as String?,
|
|
116
|
+
globalStoreId: globalStoreId as String
|
|
117
|
+
)
|
|
118
|
+
resolve(nil)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
package/ios/Podfile
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Resolve react_native_pods.rb with node to allow for hoisting
|
|
2
|
+
require Pod::Executable.execute_command('node', ['-p',
|
|
3
|
+
'require.resolve(
|
|
4
|
+
"react-native/scripts/react_native_pods.rb",
|
|
5
|
+
{paths: [process.argv[1]]},
|
|
6
|
+
)', __dir__]).strip
|
|
7
|
+
|
|
8
|
+
platform :ios, min_ios_version_supported
|
|
9
|
+
prepare_react_native_project!
|
|
10
|
+
|
|
11
|
+
linkage = ENV['USE_FRAMEWORKS']
|
|
12
|
+
if linkage != nil
|
|
13
|
+
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
|
|
14
|
+
use_frameworks! :linkage => linkage.to_sym
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
target 'PensaSdkReactNativeExample' do
|
|
18
|
+
config = use_native_modules!
|
|
19
|
+
|
|
20
|
+
use_react_native!(
|
|
21
|
+
:path => config[:reactNativePath],
|
|
22
|
+
# An absolute path to your application root.
|
|
23
|
+
:app_path => "#{Pod::Config.instance.installation_root}/.."
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
post_install do |installer|
|
|
27
|
+
# https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
|
|
28
|
+
react_native_post_install(
|
|
29
|
+
installer,
|
|
30
|
+
config[:reactNativePath],
|
|
31
|
+
:mac_catalyst_enabled => false,
|
|
32
|
+
# :ccache_enabled => true
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
4
|
+
const nativeEmitter = new NativeEventEmitter(NativeModules.PensaEventEmitter);
|
|
5
|
+
export const PensaEvents = {
|
|
6
|
+
addListener: (event, callback) => {
|
|
7
|
+
const sub = nativeEmitter.addListener(event, callback);
|
|
8
|
+
return () => sub.remove();
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativeModules","nativeEmitter","PensaEventEmitter","PensaEvents","addListener","event","callback","sub","remove"],"sourceRoot":"../../src","sources":["events.ts"],"mappings":";;AAAA,SAASA,kBAAkB,EAAEC,aAAa,QAAQ,cAAc;AAGhE,MAAMC,aAAa,GAAG,IAAIF,kBAAkB,CAACC,aAAa,CAACE,iBAAiB,CAAC;AAI7E,OAAO,MAAMC,WAAW,GAAG;EACzBC,WAAW,EAAEA,CACXC,KAAQ,EACRC,QAA+C,KAC5C;IACH,MAAMC,GAAG,GAAGN,aAAa,CAACG,WAAW,CAACC,KAAK,EAAEC,QAAQ,CAAC;IACtD,OAAO,MAAMC,GAAG,CAACC,MAAM,CAAC,CAAC;EAC3B;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NativeModules, Platform } from 'react-native';
|
|
4
|
+
const LINKING_ERROR = `The package 'pensa-sdk-react-native' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
|
|
5
|
+
ios: "- You have run 'pod install'\n",
|
|
6
|
+
default: ''
|
|
7
|
+
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
8
|
+
const PensaSdkReactNative = NativeModules.PensaSdkReactNative ? NativeModules.PensaSdkReactNative : new Proxy({}, {
|
|
9
|
+
get() {
|
|
10
|
+
throw new Error(LINKING_ERROR);
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
export const initPensa = config => {
|
|
14
|
+
return PensaSdkReactNative.initPensa(config);
|
|
15
|
+
};
|
|
16
|
+
export const isPensaStarted = () => {
|
|
17
|
+
return PensaSdkReactNative.isPensaStarted();
|
|
18
|
+
};
|
|
19
|
+
export const showShelfScans = () => {
|
|
20
|
+
return PensaSdkReactNative.showShelfScans();
|
|
21
|
+
};
|
|
22
|
+
export const showProductScans = () => {
|
|
23
|
+
return PensaSdkReactNative.showProductScans();
|
|
24
|
+
};
|
|
25
|
+
export const showStoreSearchView = () => {
|
|
26
|
+
return PensaSdkReactNative.showStoreSearchView();
|
|
27
|
+
};
|
|
28
|
+
export const showStoresScreen = () => {
|
|
29
|
+
return PensaSdkReactNative.showStoresScreen();
|
|
30
|
+
};
|
|
31
|
+
export const showScanArea = (scanId, storeId, globalStoreId) => {
|
|
32
|
+
return PensaSdkReactNative.showScanArea(scanId, storeId ?? null, globalStoreId ?? null);
|
|
33
|
+
};
|
|
34
|
+
export const showStockingScreen = () => {
|
|
35
|
+
return PensaSdkReactNative.showStockingScreen();
|
|
36
|
+
};
|
|
37
|
+
export const showStoreChecklist = (globalStoreId, guid, sectionKey) => {
|
|
38
|
+
return PensaSdkReactNative.showStoreChecklist(globalStoreId, guid, sectionKey);
|
|
39
|
+
};
|
|
40
|
+
export * from "./events.js";
|
|
41
|
+
export * from "./types.js";
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","PensaSdkReactNative","Proxy","get","Error","initPensa","config","isPensaStarted","showShelfScans","showProductScans","showStoreSearchView","showStoresScreen","showScanArea","scanId","storeId","globalStoreId","showStockingScreen","showStoreChecklist","guid","sectionKey"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,iFAAiF,GACjFD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,mBAAmB,GAAGN,aAAa,CAACM,mBAAmB,GACzDN,aAAa,CAACM,mBAAmB,GACjC,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,MAAMQ,SAAS,GAAIC,MAIzB,IAAoB;EACnB,OAAOL,mBAAmB,CAACI,SAAS,CAACC,MAAM,CAAC;AAC9C,CAAC;AAED,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAwB;EACpD,OAAON,mBAAmB,CAACM,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAqB;EACjD,OAAOP,mBAAmB,CAACO,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAqB;EACnD,OAAOR,mBAAmB,CAACQ,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAqB;EACtD,OAAOT,mBAAmB,CAACS,mBAAmB,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAqB;EACnD,OAAOV,mBAAmB,CAACU,gBAAgB,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAMC,YAAY,GAAGA,CAC1BC,MAAc,EACdC,OAAgB,EAChBC,aAAsB,KACJ;EAClB,OAAOd,mBAAmB,CAACW,YAAY,CACrCC,MAAM,EACNC,OAAO,IAAI,IAAI,EACfC,aAAa,IAAI,IACnB,CAAC;AACH,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAqB;EACrD,OAAOf,mBAAmB,CAACe,kBAAkB,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAGA,CAChCF,aAAqB,EACrBG,IAAa,EACbC,UAAmB,KACD;EAClB,OAAOlB,mBAAmB,CAACgB,kBAAkB,CAC3CF,aAAa,EACbG,IAAI,EACJC,UACF,CAAC;AACH,CAAC;AAED,cAAc,aAAU;AACxB,cAAc,YAAS","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PensaEventPayloads } from './types';
|
|
2
|
+
type PensaEvent = keyof PensaEventPayloads;
|
|
3
|
+
export declare const PensaEvents: {
|
|
4
|
+
addListener: <E extends PensaEvent>(event: E, callback: (data: PensaEventPayloads[E]) => void) => () => void;
|
|
5
|
+
};
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAIlD,KAAK,UAAU,GAAG,MAAM,kBAAkB,CAAC;AAE3C,eAAO,MAAM,WAAW;kBACR,CAAC,SAAS,UAAU,SACzB,CAAC,YACE,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI;CAKlD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const initPensa: (config: {
|
|
2
|
+
clientId: string;
|
|
3
|
+
clientSecret: string;
|
|
4
|
+
isLoggingEnabled?: boolean;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
export declare const isPensaStarted: () => Promise<boolean>;
|
|
7
|
+
export declare const showShelfScans: () => Promise<void>;
|
|
8
|
+
export declare const showProductScans: () => Promise<void>;
|
|
9
|
+
export declare const showStoreSearchView: () => Promise<void>;
|
|
10
|
+
export declare const showStoresScreen: () => Promise<void>;
|
|
11
|
+
export declare const showScanArea: (scanId: number, storeId?: number, globalStoreId?: string) => Promise<void>;
|
|
12
|
+
export declare const showStockingScreen: () => Promise<void>;
|
|
13
|
+
export declare const showStoreChecklist: (globalStoreId: string, guid?: string, sectionKey?: string) => Promise<void>;
|
|
14
|
+
export * from './events';
|
|
15
|
+
export * from './types';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAmBA,eAAO,MAAM,SAAS,GAAI,QAAQ;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,KAAG,OAAO,CAAC,IAAI,CAEf,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,OAAO,CAAC,OAAO,CAEhD,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,OAAO,CAAC,IAAI,CAE7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,OAAO,CAAC,IAAI,CAE/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,OAAO,CAAC,IAAI,CAElD,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,OAAO,CAAC,IAAI,CAE/C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,gBAAgB,MAAM,KACrB,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,CAAC,IAAI,CAEjD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,eAAe,MAAM,EACrB,OAAO,MAAM,EACb,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type OnScanUploadProgressUpdate = {
|
|
2
|
+
tdlinxId: string;
|
|
3
|
+
scanAreaId: string;
|
|
4
|
+
progress: number;
|
|
5
|
+
};
|
|
6
|
+
export type OnScanUploadCompleted = {
|
|
7
|
+
tdlinxId: string;
|
|
8
|
+
scanAreaId: string;
|
|
9
|
+
};
|
|
10
|
+
export type OnScanUploadFailed = {
|
|
11
|
+
tdlinxId: string;
|
|
12
|
+
scanAreaId: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
};
|
|
15
|
+
export type OnCantScanReported = {
|
|
16
|
+
tdlinxId: string;
|
|
17
|
+
scanAreaId: string;
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
export type PensaEventPayloads = {
|
|
21
|
+
onScanUploadProgressUpdate: OnScanUploadProgressUpdate;
|
|
22
|
+
onScanUploadCompleted: OnScanUploadCompleted;
|
|
23
|
+
onScanUploadFailed: OnScanUploadFailed;
|
|
24
|
+
onCantScanReported: OnCantScanReported;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,EAAE,kBAAkB,CAAC;CACxC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pensasystems/pensa-react-native",
|
|
3
|
+
"version": "0.1.0-beta.1",
|
|
4
|
+
"description": "The Pensa Mobile App SDK is a developer toolkit designed to simplify adding Pensa’s capabilities to your mobile applications. It provides pre-built libraries, tools, and APIs to accelerate development and integration, offering streamlined SDK integration, easy initialization, and comprehensive functionality. With the Pensa SDK, you can enhance your app’s features or seamlessly integrate with other services for a cohesive user experience.",
|
|
5
|
+
"source": "./src/index.tsx",
|
|
6
|
+
"main": "./lib/module/index.js",
|
|
7
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
11
|
+
"default": "./lib/module/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"lib",
|
|
18
|
+
"android",
|
|
19
|
+
"ios",
|
|
20
|
+
"cpp",
|
|
21
|
+
"*.podspec",
|
|
22
|
+
"react-native.config.js",
|
|
23
|
+
"!ios/build",
|
|
24
|
+
"!android/build",
|
|
25
|
+
"!android/gradle",
|
|
26
|
+
"!android/gradlew",
|
|
27
|
+
"!android/gradlew.bat",
|
|
28
|
+
"!android/local.properties",
|
|
29
|
+
"!**/__tests__",
|
|
30
|
+
"!**/__fixtures__",
|
|
31
|
+
"!**/__mocks__",
|
|
32
|
+
"!**/.*"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"example": "yarn workspace pensa-sdk-react-native-example",
|
|
36
|
+
"test": "jest",
|
|
37
|
+
"typecheck": "tsc",
|
|
38
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
39
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
40
|
+
"prepare": "bob build",
|
|
41
|
+
"release": "release-it"
|
|
42
|
+
},
|
|
43
|
+
"keywords": [
|
|
44
|
+
"react-native",
|
|
45
|
+
"ios",
|
|
46
|
+
"android"
|
|
47
|
+
],
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/Pensasystems/pensa-react-native-sdk.git"
|
|
51
|
+
},
|
|
52
|
+
"author": "PensaSystems <info@pensasystems.com> (https://pensasystems.com)",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/Pensasystems/pensa-react-native-sdk/issues"
|
|
56
|
+
},
|
|
57
|
+
"homepage": "https://github.com/Pensasystems/pensa-react-native-sdk#readme",
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"registry": "https://registry.npmjs.org/"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@commitlint/config-conventional": "^19.6.0",
|
|
63
|
+
"@eslint/compat": "^1.2.7",
|
|
64
|
+
"@eslint/eslintrc": "^3.3.0",
|
|
65
|
+
"@eslint/js": "^9.22.0",
|
|
66
|
+
"@evilmartians/lefthook": "^1.5.0",
|
|
67
|
+
"@react-native/eslint-config": "^0.78.0",
|
|
68
|
+
"@release-it/conventional-changelog": "^9.0.2",
|
|
69
|
+
"@types/jest": "^29.5.5",
|
|
70
|
+
"@types/react": "^19.0.0",
|
|
71
|
+
"commitlint": "^19.6.1",
|
|
72
|
+
"del-cli": "^5.1.0",
|
|
73
|
+
"eslint": "^9.22.0",
|
|
74
|
+
"eslint-config-prettier": "^10.1.1",
|
|
75
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
76
|
+
"jest": "^29.7.0",
|
|
77
|
+
"prettier": "^3.0.3",
|
|
78
|
+
"react": "19.0.0",
|
|
79
|
+
"react-native": "0.78.2",
|
|
80
|
+
"react-native-builder-bob": "^0.40.12",
|
|
81
|
+
"release-it": "^17.10.0",
|
|
82
|
+
"turbo": "^1.10.7",
|
|
83
|
+
"typescript": "^5.2.2"
|
|
84
|
+
},
|
|
85
|
+
"peerDependencies": {
|
|
86
|
+
"react": "*",
|
|
87
|
+
"react-native": "*"
|
|
88
|
+
},
|
|
89
|
+
"workspaces": [
|
|
90
|
+
"example"
|
|
91
|
+
],
|
|
92
|
+
"packageManager": "yarn@3.6.1",
|
|
93
|
+
"jest": {
|
|
94
|
+
"preset": "react-native",
|
|
95
|
+
"modulePathIgnorePatterns": [
|
|
96
|
+
"<rootDir>/example/node_modules",
|
|
97
|
+
"<rootDir>/lib/"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"commitlint": {
|
|
101
|
+
"extends": [
|
|
102
|
+
"@commitlint/config-conventional"
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
"release-it": {
|
|
106
|
+
"git": {
|
|
107
|
+
"commitMessage": "chore: release ${version}",
|
|
108
|
+
"tagName": "v${version}"
|
|
109
|
+
},
|
|
110
|
+
"npm": {
|
|
111
|
+
"publish": true
|
|
112
|
+
},
|
|
113
|
+
"github": {
|
|
114
|
+
"release": true
|
|
115
|
+
},
|
|
116
|
+
"plugins": {
|
|
117
|
+
"@release-it/conventional-changelog": {
|
|
118
|
+
"preset": {
|
|
119
|
+
"name": "angular"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"prettier": {
|
|
125
|
+
"quoteProps": "consistent",
|
|
126
|
+
"singleQuote": true,
|
|
127
|
+
"tabWidth": 2,
|
|
128
|
+
"trailingComma": "es5",
|
|
129
|
+
"useTabs": false
|
|
130
|
+
},
|
|
131
|
+
"react-native-builder-bob": {
|
|
132
|
+
"source": "src",
|
|
133
|
+
"output": "lib",
|
|
134
|
+
"targets": [
|
|
135
|
+
[
|
|
136
|
+
"module",
|
|
137
|
+
{
|
|
138
|
+
"esm": true
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
"typescript",
|
|
143
|
+
{
|
|
144
|
+
"project": "tsconfig.build.json"
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
"create-react-native-library": {
|
|
150
|
+
"type": "legacy-module",
|
|
151
|
+
"languages": "kotlin-swift",
|
|
152
|
+
"version": "0.49.8"
|
|
153
|
+
}
|
|
154
|
+
}
|
package/src/events.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
|
+
import type { PensaEventPayloads } from './types';
|
|
3
|
+
|
|
4
|
+
const nativeEmitter = new NativeEventEmitter(NativeModules.PensaEventEmitter);
|
|
5
|
+
|
|
6
|
+
type PensaEvent = keyof PensaEventPayloads;
|
|
7
|
+
|
|
8
|
+
export const PensaEvents = {
|
|
9
|
+
addListener: <E extends PensaEvent>(
|
|
10
|
+
event: E,
|
|
11
|
+
callback: (data: PensaEventPayloads[E]) => void
|
|
12
|
+
) => {
|
|
13
|
+
const sub = nativeEmitter.addListener(event, callback);
|
|
14
|
+
return () => sub.remove();
|
|
15
|
+
},
|
|
16
|
+
};
|