@pensasystems/pensa-react-native 0.1.0 → 0.1.2

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.
@@ -21,5 +21,5 @@ Pod::Spec.new do |s|
21
21
  s.dependency "React-Core"
22
22
  end
23
23
 
24
- s.dependency "PensaSdk", "~> 1.1.3"
24
+ s.dependency "PensaSdk"
25
25
  end
@@ -1,3 +1,4 @@
1
+
1
2
  buildscript {
2
3
  ext.getExtOrDefault = {name ->
3
4
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['PensaSdkReactNative_' + name]
@@ -83,7 +84,7 @@ def kotlin_version = getExtOrDefault("kotlinVersion")
83
84
 
84
85
  dependencies {
85
86
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
86
- implementation "com.pensasystems:pensasdk:1.0.22"
87
+ implementation "com.pensasystems:pensasdk:1.0.23"
87
88
  implementation "com.facebook.react:react-android"
88
89
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
89
90
  }
@@ -2,9 +2,10 @@ package com.pensasdkreactnative
2
2
 
3
3
  import com.facebook.react.bridge.ReactApplicationContext
4
4
  import com.pensasystems.pensasdk.listener.CantScanEventListener
5
+ import com.pensasystems.pensasdk.listener.CompletedScanWithGuidListener
5
6
  import com.pensasystems.pensasdk.listener.ScanUploadListener
6
7
 
7
- object PensaListeners : ScanUploadListener, CantScanEventListener {
8
+ object PensaListeners : ScanUploadListener, CantScanEventListener, CompletedScanWithGuidListener {
8
9
 
9
10
  private var emitter: PensaEventEmitterModule? = null
10
11
 
@@ -41,4 +42,12 @@ object PensaListeners : ScanUploadListener, CantScanEventListener {
41
42
  "reason" to cantScanReason
42
43
  ))
43
44
  }
45
+
46
+ override fun onScanCompletedWithGuid(guid: String?, tdlinxId: String, scanId: Int) {
47
+ emitter?.sendEvent("onScanCompletedWithGuid", mapOf(
48
+ "guid" to guid,
49
+ "tdlinxId" to tdlinxId,
50
+ "scanId" to scanId
51
+ ))
52
+ }
44
53
  }
@@ -43,6 +43,7 @@ class PensaSdkReactNativeModule(reactContext: ReactApplicationContext) :
43
43
  .enableLogging(isLoggingEnabled)
44
44
  .setScanUploadListener(PensaListeners)
45
45
  .setCantScanEventListener(PensaListeners)
46
+ .setCompletedScanWithGuidListener(PensaListeners)
46
47
  .build()
47
48
 
48
49
  PensaSdk.initPensa(
@@ -173,6 +174,22 @@ class PensaSdkReactNativeModule(reactContext: ReactApplicationContext) :
173
174
  }
174
175
  }
175
176
 
177
+ @ReactMethod
178
+ fun showStoreChecklistWithGuid(globalStoreId: String, guid: String, promise: Promise) {
179
+ val activity = reactApplicationContext.currentActivity
180
+ if (activity != null) {
181
+ PensaSdk.showStoreChecklistWithGuid(
182
+ context = activity,
183
+ globalStoreId = globalStoreId,
184
+ guid = guid,
185
+ onError = { error -> promise.reject("SHOW_STORE_CHECKLIST_WITH_GUID_FAILED", error) }
186
+ )
187
+ promise.resolve(null)
188
+ } else {
189
+ promise.reject("NO_ACTIVITY", "Current activity is null")
190
+ }
191
+ }
192
+
176
193
  @ReactMethod
177
194
  fun fetchScanStatuses(scanIds: ReadableArray, promise: Promise) {
178
195
  try {
@@ -215,41 +232,88 @@ class PensaSdkReactNativeModule(reactContext: ReactApplicationContext) :
215
232
  }
216
233
  }
217
234
 
235
+ @ReactMethod
236
+ fun fetchVisitScansStatus(guid: String, promise: Promise) {
237
+ try {
238
+ PensaSdk.fetchVisitScansStatus(
239
+ guid = guid,
240
+ onSuccess = { result ->
241
+ val scans = result.scans
242
+ val map = Arguments.createMap().apply {
243
+ result.guid?.let { putString("guid", it) }
244
+ result.visitStatus?.let { putString("visitStatus", it) }
245
+ if (scans == null) {
246
+ } else {
247
+ val scansArray = Arguments.createArray()
248
+ scans.forEach { scan ->
249
+ val uploadCompleted = scan.uploadCompleted
250
+ scansArray.pushMap(
251
+ Arguments.createMap().apply {
252
+ scan.created?.let { putString("created", it) }
253
+ scan.fastStatus?.let { putString("fastStatus", it) }
254
+ scan.scanId?.let { putInt("scanId", it) }
255
+ scan.status?.let { putString("status", it) }
256
+ when (uploadCompleted) {
257
+ null -> {}
258
+ else -> putBoolean("uploadCompleted", uploadCompleted)
259
+ }
260
+ }
261
+ )
262
+ }
263
+ putArray("scans", scansArray)
264
+ }
265
+ }
266
+
267
+ promise.resolve(map)
268
+ },
269
+ onError = { error ->
270
+ promise.reject("FETCH_VISIT_SCANS_STATUS_FAILED", error)
271
+ }
272
+ )
273
+ } catch (e: Exception) {
274
+ promise.reject("FETCH_VISIT_SCANS_STATUS_EXCEPTION", e)
275
+ }
276
+ }
277
+
218
278
  @ReactMethod
219
279
  fun fetchOnDemandReports(
220
- scanId: Int,
221
- projectId: Int?,
280
+ scanId: Double?,
281
+ guid: String?,
282
+ projectId: Double?,
222
283
  reportTypes: ReadableArray?,
223
284
  promise: Promise
224
285
  ) {
225
286
  try {
226
287
  val finalReportTypes = parseReportTypes(reportTypes)
288
+ val normalizedScanId = scanId?.toInt()
289
+ val normalizedProjectId = projectId?.toInt()
227
290
 
228
291
  PensaSdk.fetchOnDemandReports(
229
- scanId = scanId,
230
- projectId = projectId,
292
+ scanId = normalizedScanId,
293
+ guid = guid,
294
+ projectId = normalizedProjectId,
231
295
  reportTypes = finalReportTypes,
232
296
  onSuccess = { report ->
233
297
  val result = Arguments.createMap()
234
298
 
235
299
  fun toProductMap(p: com.pensasystems.pensasdk.model.PensaOnDemandProduct) =
236
300
  Arguments.createMap().apply {
237
- putString("brand", p.brand)
238
- p.brandId?.let { putInt("brandId", it) } ?: putNull("brandId")
301
+ p.brand?.let { putString("brand", it) }
302
+ p.brandId?.let { putInt("brandId", it) }
239
303
 
240
- putString("category", p.category)
241
- p.categoryId?.let { putInt("categoryId", it) } ?: putNull("categoryId")
304
+ p.category?.let { putString("category", it) }
305
+ p.categoryId?.let { putInt("categoryId", it) }
242
306
 
243
- p.expectedFacings?.let { putInt("expectedFacings", it) } ?: putNull("expectedFacings")
244
- p.facings?.let { putInt("facings", it) } ?: putNull("facings")
307
+ p.expectedFacings?.let { putInt("expectedFacings", it) }
308
+ p.facings?.let { putInt("facings", it) }
245
309
 
246
- putString("manufacturer", p.manufacturer)
247
- p.manufacturerId?.let { putInt("manufacturerId", it) } ?: putNull("manufacturerId")
310
+ p.manufacturer?.let { putString("manufacturer", it) }
311
+ p.manufacturerId?.let { putInt("manufacturerId", it) }
248
312
 
249
- putString("product", p.product)
250
- p.productId?.let { putInt("productId", it) } ?: putNull("productId")
313
+ p.product?.let { putString("product", it) }
314
+ p.productId?.let { putInt("productId", it) }
251
315
 
252
- putString("upc", p.upc)
316
+ p.upc?.let { putString("upc", it) }
253
317
  }
254
318
 
255
319
  fun toBucketMap(b: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket) =
@@ -259,38 +323,122 @@ class PensaSdkReactNativeModule(reactContext: ReactApplicationContext) :
259
323
  putArray("productList", arr)
260
324
  }
261
325
 
262
- fun putBucket(key: String, bucket: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?) {
263
- if (bucket == null) result.putNull(key) else result.putMap(key, toBucketMap(bucket))
326
+ fun putBucket(target: com.facebook.react.bridge.WritableMap, key: String, bucket: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?) {
327
+ if (bucket != null) target.putMap(key, toBucketMap(bucket))
264
328
  }
265
329
 
266
- // Fill only requested
267
- finalReportTypes.distinct().forEach { t ->
268
- when (t) {
269
- PensaReportType.FACINGS_SEEN -> putBucket("facingsSeen", report.facingsSeen)
270
- PensaReportType.FULL_FACINGS -> putBucket("fullFacings", report.fullFacings)
271
- PensaReportType.FULL_FACINGS_AND_PRODUCT_POSITIONS ->
272
- putBucket("fullFacingsAndProductPositions", report.fullFacingsAndProductPositions)
273
- PensaReportType.ITEMS_SEEN -> putBucket("itemsSeen", report.itemsSeen)
274
- PensaReportType.NEW_PRODUCTS -> putBucket("newProducts", report.newProducts)
275
- PensaReportType.NEW_PRODUCT_PACKAGING -> putBucket("newProductPackaging", report.newProductPackaging)
276
- PensaReportType.NO_OOS -> putBucket("noOos", report.noOos)
277
- PensaReportType.OOS -> putBucket("oos", report.oos)
278
- PensaReportType.PRODUCT_POSITIONS -> putBucket("productPositions", report.productPositions)
279
- PensaReportType.SCAN_FAILED -> putBucket("scanFailed", report.scanFailed)
280
- PensaReportType.SCAN_REJECTED -> putBucket("scanRejected", report.scanRejected)
281
- PensaReportType.SCAN_SKIPPED -> putBucket("scanSkipped", report.scanSkipped)
330
+ fun fillReportBuckets(
331
+ target: com.facebook.react.bridge.WritableMap,
332
+ facingsSeen: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
333
+ fullFacings: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
334
+ fullFacingsAndProductPositions: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
335
+ itemsSeen: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
336
+ newProducts: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
337
+ newProductPackaging: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
338
+ missingPriceTag: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
339
+ noOos: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
340
+ oos: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
341
+ productPositions: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
342
+ scanFailed: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
343
+ scanRejected: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
344
+ scanSkipped: com.pensasystems.pensasdk.model.PensaOnDemandReportBucket?,
345
+ ) {
346
+ finalReportTypes.distinct().forEach { t ->
347
+ when (t) {
348
+ PensaReportType.FACINGS_SEEN -> putBucket(target, "facingsSeen", facingsSeen)
349
+ PensaReportType.FULL_FACINGS -> putBucket(target, "fullFacings", fullFacings)
350
+ PensaReportType.FULL_FACINGS_AND_PRODUCT_POSITIONS ->
351
+ putBucket(target, "fullFacingsAndProductPositions", fullFacingsAndProductPositions)
352
+ PensaReportType.ITEMS_SEEN -> putBucket(target, "itemsSeen", itemsSeen)
353
+ PensaReportType.NEW_PRODUCTS -> putBucket(target, "newProducts", newProducts)
354
+ PensaReportType.NEW_PRODUCT_PACKAGING -> putBucket(target, "newProductPackaging", newProductPackaging)
355
+ PensaReportType.MISSING_PRICE_TAG -> putBucket(target, "missingPriceTag", missingPriceTag)
356
+ PensaReportType.NO_OOS -> putBucket(target, "noOos", noOos)
357
+ PensaReportType.OOS -> putBucket(target, "oos", oos)
358
+ PensaReportType.PRODUCT_POSITIONS -> putBucket(target, "productPositions", productPositions)
359
+ PensaReportType.SCAN_FAILED -> putBucket(target, "scanFailed", scanFailed)
360
+ PensaReportType.SCAN_REJECTED -> putBucket(target, "scanRejected", scanRejected)
361
+ PensaReportType.SCAN_SKIPPED -> putBucket(target, "scanSkipped", scanSkipped)
362
+ }
282
363
  }
283
364
  }
284
365
 
366
+ fillReportBuckets(
367
+ result,
368
+ report.facingsSeen,
369
+ report.fullFacings,
370
+ report.fullFacingsAndProductPositions,
371
+ report.itemsSeen,
372
+ report.newProducts,
373
+ report.newProductPackaging,
374
+ report.missingPriceTag,
375
+ report.noOos,
376
+ report.oos,
377
+ report.productPositions,
378
+ report.scanFailed,
379
+ report.scanRejected,
380
+ report.scanSkipped
381
+ )
382
+
285
383
  // Other fields
286
- report.projectId?.let { result.putInt("projectId", it) } ?: result.putNull("projectId")
287
- result.putString("projectName", report.projectName)
288
- report.projectReportId?.let { result.putInt("projectReportId", it) } ?: result.putNull("projectReportId")
289
- result.putString("projectReportName", report.projectReportName)
290
- result.putString("realogramSignedUrl", report.realogramSignedUrl)
291
- report.shelfId?.let { result.putInt("shelfId", it) } ?: result.putNull("shelfId")
292
- result.putString("shelfName", report.shelfName)
293
- result.putString("status", report.status)
384
+ report.projectId?.let { result.putInt("projectId", it) }
385
+ report.projectName?.let { result.putString("projectName", it) }
386
+ report.projectReportId?.let { result.putInt("projectReportId", it) }
387
+ report.projectReportName?.let { result.putString("projectReportName", it) }
388
+ report.realogramSignedUrl?.let { result.putString("realogramSignedUrl", it) }
389
+ report.shelfId?.let { result.putInt("shelfId", it) }
390
+ report.shelfName?.let { result.putString("shelfName", it) }
391
+ report.status?.let { result.putString("status", it) }
392
+ val scans = report.scans
393
+ if (scans != null) {
394
+ val scansArray = Arguments.createArray()
395
+ scans.forEach { scan ->
396
+ scansArray.pushMap(
397
+ Arguments.createMap().apply {
398
+ fillReportBuckets(
399
+ this,
400
+ scan.facingsSeen,
401
+ scan.fullFacings,
402
+ scan.fullFacingsAndProductPositions,
403
+ scan.itemsSeen,
404
+ scan.newProducts,
405
+ scan.newProductPackaging,
406
+ scan.missingPriceTag,
407
+ scan.noOos,
408
+ scan.oos,
409
+ scan.productPositions,
410
+ scan.scanFailed,
411
+ scan.scanRejected,
412
+ scan.scanSkipped
413
+ )
414
+ scan.projectId?.let { putInt("projectId", it) }
415
+ scan.projectName?.let { putString("projectName", it) }
416
+ scan.projectReportId?.let { putInt("projectReportId", it) }
417
+ scan.projectReportName?.let { putString("projectReportName", it) }
418
+ scan.realogramSignedUrl?.let { putString("realogramSignedUrl", it) }
419
+ scan.scanId?.let { putInt("scanId", it) }
420
+ scan.shelfId?.let { putInt("shelfId", it) }
421
+ scan.shelfName?.let { putString("shelfName", it) }
422
+ scan.status?.let { putString("status", it) }
423
+ }
424
+ )
425
+ }
426
+ result.putArray("scans", scansArray)
427
+ }
428
+
429
+ val visit = report.visit
430
+ if (visit != null) {
431
+ result.putMap(
432
+ "visit",
433
+ Arguments.createMap().apply {
434
+ visit.endTime?.let { putString("endTime", it) }
435
+ visit.identifier?.let { putString("identifier", it) }
436
+ visit.startTime?.let { putString("startTime", it) }
437
+ visit.storeName?.let { putString("storeName", it) }
438
+ visit.storeTdlinx?.let { putString("storeTdlinx", it) }
439
+ }
440
+ )
441
+ }
294
442
 
295
443
  promise.resolve(result)
296
444
  },
@@ -20,7 +20,8 @@ class PensaEventEmitter: RCTEventEmitter {
20
20
  "onScanUploadProgressUpdate",
21
21
  "onScanUploadCompleted",
22
22
  "onScanUploadFailed",
23
- "onCantScanReported"
23
+ "onCantScanReported",
24
+ "onScanCompletedWithGuid"
24
25
  ]
25
26
  }
26
27
  }
@@ -1,7 +1,7 @@
1
1
  import Foundation
2
2
  import PensaSdk
3
3
 
4
- class PensaListeners: NSObject, ScanUploadListener, CantScanEventListener {
4
+ class PensaListeners: NSObject, ScanUploadListener, CantScanEventListener, CompletedScanWithGuidListener {
5
5
 
6
6
  static let shared = PensaListeners()
7
7
 
@@ -34,4 +34,15 @@ class PensaListeners: NSObject, ScanUploadListener, CantScanEventListener {
34
34
  body: ["tdlinxId": tdlinxId, "scanAreaId": scanAreaId, "reason": cantScanReason]
35
35
  )
36
36
  }
37
+
38
+ func onScanCompletedWithGuid(guid: String?, tdlinxId: String, scanId: Int) {
39
+ PensaEventEmitter.shared?.sendEvent(
40
+ withName: "onScanCompletedWithGuid",
41
+ body: [
42
+ "guid": guid ?? NSNull(),
43
+ "tdlinxId": tdlinxId,
44
+ "scanId": scanId
45
+ ]
46
+ )
47
+ }
37
48
  }
@@ -37,12 +37,21 @@ RCT_EXTERN_METHOD(showStoreChecklist:(NSString *)globalStoreId
37
37
  withResolver:(RCTPromiseResolveBlock)resolve
38
38
  withRejecter:(RCTPromiseRejectBlock)reject)
39
39
 
40
+ RCT_EXTERN_METHOD(showStoreChecklistWithGuid:(NSString *)globalStoreId
41
+ guid:(NSString *)guid
42
+ withResolver:(RCTPromiseResolveBlock)resolve
43
+ withRejecter:(RCTPromiseRejectBlock)reject)
44
+
40
45
  RCT_EXTERN_METHOD(fetchScanStatuses:(NSArray *)scanIds
41
46
  withResolver:(RCTPromiseResolveBlock)resolve
42
47
  withRejecter:(RCTPromiseRejectBlock)reject)
43
48
 
49
+ RCT_EXTERN_METHOD(fetchVisitScansStatus:(NSString *)guid
50
+ withResolver:(RCTPromiseResolveBlock)resolve
51
+ withRejecter:(RCTPromiseRejectBlock)reject)
44
52
 
45
- RCT_EXTERN_METHOD(fetchOnDemandReports:(nonnull NSNumber *)scanId
53
+ RCT_EXTERN_METHOD(fetchOnDemandReports:(nullable NSNumber *)scanId
54
+ guid:(nullable NSString *)guid
46
55
  projectId:(nullable NSNumber *)projectId
47
56
  reportTypes:(nullable NSArray *)reportTypes
48
57
  withResolver:(RCTPromiseResolveBlock)resolve
@@ -27,6 +27,7 @@ class PensaSdkReactNative: NSObject {
27
27
  .setLoggingEnabled(loggingEnabled)
28
28
  .setScanUploadListener(PensaListeners.shared)
29
29
  .setCantScanEventListener(PensaListeners.shared)
30
+ .setCompletedScanWithGuidListener(PensaListeners.shared)
30
31
  .build()
31
32
 
32
33
  DispatchQueue.main.async {
@@ -119,6 +120,23 @@ class PensaSdkReactNative: NSObject {
119
120
  }
120
121
  }
121
122
 
123
+ @objc(showStoreChecklistWithGuid:guid:withResolver:withRejecter:)
124
+ func showStoreChecklistWithGuid(globalStoreId: NSString,
125
+ guid: NSString,
126
+ resolve: @escaping RCTPromiseResolveBlock,
127
+ reject: @escaping RCTPromiseRejectBlock) {
128
+ DispatchQueue.main.async {
129
+ Pensa.shared.showStoreChecklistWithGuid(
130
+ globalStoreId: globalStoreId as String,
131
+ guid: guid as String,
132
+ onError: { error in
133
+ reject("SHOW_STORE_CHECKLIST_WITH_GUID_FAILED", error.localizedDescription, error)
134
+ }
135
+ )
136
+ resolve(nil)
137
+ }
138
+ }
139
+
122
140
  @objc(fetchScanStatuses:withResolver:withRejecter:)
123
141
  func fetchScanStatuses(
124
142
  scanIds: [NSNumber],
@@ -161,16 +179,46 @@ class PensaSdkReactNative: NSObject {
161
179
  )
162
180
  }
163
181
 
164
- @objc(fetchOnDemandReports:projectId:reportTypes:withResolver:withRejecter:)
182
+ @objc(fetchVisitScansStatus:withResolver:withRejecter:)
183
+ func fetchVisitScansStatus(
184
+ guid: NSString,
185
+ resolve: @escaping RCTPromiseResolveBlock,
186
+ reject: @escaping RCTPromiseRejectBlock
187
+ ) {
188
+ Pensa.shared.fetchVisitScansStatus(
189
+ guid: guid as String,
190
+ onSuccess: { result in
191
+ let scans = result.scans?.map { scan in
192
+ var mapped: [String: Any] = [:]
193
+ if let created = scan.created { mapped["created"] = created }
194
+ if let fastStatus = scan.fastStatus { mapped["fastStatus"] = fastStatus }
195
+ if let scanId = scan.scanId { mapped["scanId"] = scanId }
196
+ if let status = scan.status { mapped["status"] = status }
197
+ if let uploadCompleted = scan.uploadCompleted { mapped["uploadCompleted"] = uploadCompleted }
198
+ return mapped
199
+ }
200
+
201
+ var response: [String: Any] = [:]
202
+ if let guidValue = result.guid { response["guid"] = guidValue }
203
+ if let scans = scans { response["scans"] = scans }
204
+ if let visitStatus = result.visitStatus { response["visitStatus"] = visitStatus }
205
+ resolve(response)
206
+ },
207
+ onError: { error in
208
+ reject("FETCH_VISIT_SCANS_STATUS_FAILED", error.localizedDescription, error)
209
+ }
210
+ )
211
+ }
212
+
213
+ @objc(fetchOnDemandReports:guid:projectId:reportTypes:withResolver:withRejecter:)
165
214
  func fetchOnDemandReports(
166
- scanId: NSNumber,
215
+ scanId: NSNumber?,
216
+ guid: NSString?,
167
217
  projectId: NSNumber?,
168
218
  reportTypes: NSArray?,
169
219
  resolve: @escaping RCTPromiseResolveBlock,
170
220
  reject: @escaping RCTPromiseRejectBlock
171
221
  ) {
172
- func rn(_ value: Any?) -> Any { value ?? NSNull() }
173
-
174
222
  let types: [PensaReportType] = {
175
223
  guard let arr = reportTypes as? [String], !arr.isEmpty else { return [.itemsSeen] }
176
224
  let mapped = arr.compactMap { PensaReportType(rawValue: $0) }
@@ -178,71 +226,141 @@ class PensaSdkReactNative: NSObject {
178
226
  }()
179
227
 
180
228
  Pensa.shared.fetchOnDemandReports(
181
- scanId: scanId.intValue,
229
+ scanId: scanId?.intValue,
230
+ guid: guid as String?,
182
231
  projectId: projectId?.intValue,
183
232
  reportTypes: types,
184
233
  onSuccess: { report in
185
234
 
186
- var result: [String: Any] = [
187
- "shelfId": rn(report.shelfId),
188
- "shelfName": rn(report.shelfName),
189
- "status": rn(report.status),
190
- "projectId": rn(report.projectId),
191
- "projectName": rn(report.projectName),
192
- "projectReportId": rn(report.projectReportId),
193
- "projectReportName": rn(report.projectReportName),
194
- "realogramSignedUrl": rn(report.realogramSignedUrl)
195
- ]
196
-
197
- func addBucket(_ key: String, _ bucket: PensaOnDemandReportBucket?) {
198
- guard let bucket = bucket else { return } // istenen tip yoksa hiç ekleme
235
+ var result: [String: Any] = [:]
236
+ if let shelfId = report.shelfId { result["shelfId"] = shelfId }
237
+ if let shelfName = report.shelfName { result["shelfName"] = shelfName }
238
+ if let status = report.status { result["status"] = status }
239
+ if let projectId = report.projectId { result["projectId"] = projectId }
240
+ if let projectName = report.projectName { result["projectName"] = projectName }
241
+ if let projectReportId = report.projectReportId { result["projectReportId"] = projectReportId }
242
+ if let projectReportName = report.projectReportName { result["projectReportName"] = projectReportName }
243
+ if let realogramSignedUrl = report.realogramSignedUrl { result["realogramSignedUrl"] = realogramSignedUrl }
244
+
245
+ func toProduct(_ product: PensaOnDemandProduct) -> [String: Any] {
246
+ var mapped: [String: Any] = [:]
247
+ if let brand = product.brand { mapped["brand"] = brand }
248
+ if let brandId = product.brandId { mapped["brandId"] = brandId }
249
+ if let category = product.category { mapped["category"] = category }
250
+ if let categoryId = product.categoryId { mapped["categoryId"] = categoryId }
251
+ if let expectedFacings = product.expectedFacings { mapped["expectedFacings"] = expectedFacings }
252
+ if let facings = product.facings { mapped["facings"] = facings }
253
+ if let manufacturer = product.manufacturer { mapped["manufacturer"] = manufacturer }
254
+ if let manufacturerId = product.manufacturerId { mapped["manufacturerId"] = manufacturerId }
255
+ if let productName = product.product { mapped["product"] = productName }
256
+ if let productId = product.productId { mapped["productId"] = productId }
257
+ if let upc = product.upc { mapped["upc"] = upc }
258
+ return mapped
259
+ }
260
+
261
+ func toBucket(_ bucket: PensaOnDemandReportBucket?) -> [String: Any]? {
262
+ guard let bucket = bucket else { return nil }
199
263
  let products: [[String: Any]] = bucket.productList.map { p in
200
- [
201
- "brand": rn(p.brand),
202
- "brandId": rn(p.brandId),
203
- "category": rn(p.category),
204
- "categoryId": rn(p.categoryId),
205
- "expectedFacings": rn(p.expectedFacings),
206
- "facings": rn(p.facings),
207
- "manufacturer": rn(p.manufacturer),
208
- "manufacturerId": rn(p.manufacturerId),
209
- "product": rn(p.product),
210
- "productId": rn(p.productId),
211
- "upc": rn(p.upc)
212
- ]
264
+ toProduct(p)
265
+ }
266
+ return ["productList": products]
267
+ }
268
+
269
+ func addBucket(_ target: inout [String: Any], _ key: String, _ bucket: PensaOnDemandReportBucket?) {
270
+ if let mapped = toBucket(bucket) {
271
+ target[key] = mapped
213
272
  }
214
- result[key] = ["productList": products]
215
273
  }
216
274
 
217
275
  for t in types {
218
276
  switch t {
219
277
  case .itemsSeen:
220
- addBucket("itemsSeen", report.itemsSeen?.report)
278
+ addBucket(&result, "itemsSeen", report.itemsSeen?.report)
221
279
  case .facingsSeen:
222
- addBucket("facingsSeen", report.facingsSeen?.report)
280
+ addBucket(&result, "facingsSeen", report.facingsSeen?.report)
223
281
  case .fullFacings:
224
- addBucket("fullFacings", report.fullFacings?.report)
282
+ addBucket(&result, "fullFacings", report.fullFacings?.report)
225
283
  case .fullFacingsAndProductPositions:
226
- addBucket("fullFacingsAndProductPositions", report.fullFacingsAndProductPositions?.report)
284
+ addBucket(&result, "fullFacingsAndProductPositions", report.fullFacingsAndProductPositions?.report)
227
285
  case .newProducts:
228
- addBucket("newProducts", report.newProducts?.report)
286
+ addBucket(&result, "newProducts", report.newProducts?.report)
229
287
  case .newProductPackaging:
230
- addBucket("newProductPackaging", report.newProductPackaging?.report)
288
+ addBucket(&result, "newProductPackaging", report.newProductPackaging?.report)
289
+ case .missingPriceTag:
290
+ addBucket(&result, "missingPriceTag", report.missingPriceTag?.report)
231
291
  case .noOos:
232
- addBucket("noOos", report.noOos?.report)
292
+ addBucket(&result, "noOos", report.noOos?.report)
233
293
  case .oos:
234
- addBucket("oos", report.oos?.report)
294
+ addBucket(&result, "oos", report.oos?.report)
235
295
  case .productPositions:
236
- addBucket("productPositions", report.productPositions?.report)
296
+ addBucket(&result, "productPositions", report.productPositions?.report)
237
297
  case .scanFailed:
238
- addBucket("scanFailed", report.scanFailed?.report)
298
+ addBucket(&result, "scanFailed", report.scanFailed?.report)
239
299
  case .scanRejected:
240
- addBucket("scanRejected", report.scanRejected?.report)
300
+ addBucket(&result, "scanRejected", report.scanRejected?.report)
241
301
  case .scanSkipped:
242
- addBucket("scanSkipped", report.scanSkipped?.report)
302
+ addBucket(&result, "scanSkipped", report.scanSkipped?.report)
243
303
  }
244
304
  }
245
305
 
306
+ if let scans = report.scans {
307
+ result["scans"] = scans.map { scan in
308
+ var scanResult: [String: Any] = [:]
309
+ if let projectId = scan.projectId { scanResult["projectId"] = projectId }
310
+ if let projectName = scan.projectName { scanResult["projectName"] = projectName }
311
+ if let projectReportId = scan.projectReportId { scanResult["projectReportId"] = projectReportId }
312
+ if let projectReportName = scan.projectReportName { scanResult["projectReportName"] = projectReportName }
313
+ if let realogramSignedUrl = scan.realogramSignedUrl { scanResult["realogramSignedUrl"] = realogramSignedUrl }
314
+ if let scanId = scan.scanId { scanResult["scanId"] = scanId }
315
+ if let shelfId = scan.shelfId { scanResult["shelfId"] = shelfId }
316
+ if let shelfName = scan.shelfName { scanResult["shelfName"] = shelfName }
317
+ if let status = scan.status { scanResult["status"] = status }
318
+
319
+ for t in types {
320
+ switch t {
321
+ case .itemsSeen:
322
+ addBucket(&scanResult, "itemsSeen", scan.itemsSeen?.report)
323
+ case .facingsSeen:
324
+ addBucket(&scanResult, "facingsSeen", scan.facingsSeen?.report)
325
+ case .fullFacings:
326
+ addBucket(&scanResult, "fullFacings", scan.fullFacings?.report)
327
+ case .fullFacingsAndProductPositions:
328
+ addBucket(&scanResult, "fullFacingsAndProductPositions", scan.fullFacingsAndProductPositions?.report)
329
+ case .newProducts:
330
+ addBucket(&scanResult, "newProducts", scan.newProducts?.report)
331
+ case .newProductPackaging:
332
+ addBucket(&scanResult, "newProductPackaging", scan.newProductPackaging?.report)
333
+ case .missingPriceTag:
334
+ addBucket(&scanResult, "missingPriceTag", scan.missingPriceTag?.report)
335
+ case .noOos:
336
+ addBucket(&scanResult, "noOos", scan.noOos?.report)
337
+ case .oos:
338
+ addBucket(&scanResult, "oos", scan.oos?.report)
339
+ case .productPositions:
340
+ addBucket(&scanResult, "productPositions", scan.productPositions?.report)
341
+ case .scanFailed:
342
+ addBucket(&scanResult, "scanFailed", scan.scanFailed?.report)
343
+ case .scanRejected:
344
+ addBucket(&scanResult, "scanRejected", scan.scanRejected?.report)
345
+ case .scanSkipped:
346
+ addBucket(&scanResult, "scanSkipped", scan.scanSkipped?.report)
347
+ }
348
+ }
349
+
350
+ return scanResult
351
+ }
352
+ }
353
+
354
+ if let visit = report.visit {
355
+ var mappedVisit: [String: Any] = [:]
356
+ if let endTime = visit.endTime { mappedVisit["endTime"] = endTime }
357
+ if let identifier = visit.identifier { mappedVisit["identifier"] = identifier }
358
+ if let startTime = visit.startTime { mappedVisit["startTime"] = startTime }
359
+ if let storeName = visit.storeName { mappedVisit["storeName"] = storeName }
360
+ if let storeTdlinx = visit.storeTdlinx { mappedVisit["storeTdlinx"] = storeTdlinx }
361
+ result["visit"] = mappedVisit
362
+ }
363
+
246
364
  resolve(result)
247
365
  },
248
366
  onError: { error in
@@ -38,12 +38,18 @@ export const showStockingScreen = () => {
38
38
  export const showStoreChecklist = (globalStoreId, guid, sectionKey) => {
39
39
  return PensaSdkReactNative.showStoreChecklist(globalStoreId, guid, sectionKey);
40
40
  };
41
+ export const showStoreChecklistWithGuid = (globalStoreId, guid) => {
42
+ return PensaSdkReactNative.showStoreChecklistWithGuid(globalStoreId, guid);
43
+ };
41
44
  export const fetchScanStatuses = scanIds => {
42
45
  return PensaSdkReactNative.fetchScanStatuses(scanIds);
43
46
  };
44
- export const fetchOnDemandReports = (scanId, projectId, reportTypes) => {
45
- const finalReportTypes = reportTypes && reportTypes.length > 0 ? reportTypes : [PensaReportType.ITEMS_SEEN];
46
- return PensaSdkReactNative.fetchOnDemandReports(scanId, projectId ?? null, finalReportTypes);
47
+ export function fetchOnDemandReports(params) {
48
+ const finalReportTypes = params.reportTypes && params.reportTypes.length > 0 ? params.reportTypes : [PensaReportType.ITEMS_SEEN];
49
+ return PensaSdkReactNative.fetchOnDemandReports(params.scanId ?? null, params.guid ?? null, params.projectId ?? null, finalReportTypes);
50
+ }
51
+ export const fetchVisitScansStatus = guid => {
52
+ return PensaSdkReactNative.fetchVisitScansStatus(guid);
47
53
  };
48
54
  export const fetchProductImageBase64 = productId => {
49
55
  return PensaSdkReactNative.fetchProductImageBase64(productId);
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","PensaReportType","LINKING_ERROR","select","ios","default","PensaSdkReactNative","Proxy","get","Error","initPensa","config","isPensaStarted","showShelfScans","showProductScans","showStoreSearchView","showStoresScreen","showScanArea","scanId","storeId","globalStoreId","showStockingScreen","showStoreChecklist","guid","sectionKey","fetchScanStatuses","scanIds","fetchOnDemandReports","projectId","reportTypes","finalReportTypes","length","ITEMS_SEEN","fetchProductImageBase64","productId","fetchShelves"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAMtD,SAASC,eAAe,QAAQ,YAAS;AAEzC,MAAMC,aAAa,GACjB,iFAAiF,GACjFF,QAAQ,CAACG,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,mBAAmB,GAAGP,aAAa,CAACO,mBAAmB,GACzDP,aAAa,CAACO,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,OAAO,MAAMC,iBAAiB,GAC5BC,OAAiB,IACc;EAC/B,OAAOpB,mBAAmB,CAACmB,iBAAiB,CAACC,OAAO,CAAC;AACvD,CAAC;AAED,OAAO,MAAMC,oBAAoB,GAAGA,CAClCT,MAAc,EACdU,SAAkB,EAClBC,WAA+B,KACE;EACjC,MAAMC,gBAAgB,GACpBD,WAAW,IAAIA,WAAW,CAACE,MAAM,GAAG,CAAC,GACjCF,WAAW,GACX,CAAC5B,eAAe,CAAC+B,UAAU,CAAC;EAElC,OAAO1B,mBAAmB,CAACqB,oBAAoB,CAC7CT,MAAM,EACNU,SAAS,IAAI,IAAI,EACjBE,gBACF,CAAC;AACH,CAAC;AAED,OAAO,MAAMG,uBAAuB,GAAIC,SAAiB,IAAsB;EAC7E,OAAO5B,mBAAmB,CAAC2B,uBAAuB,CAACC,SAAS,CAAC;AAC/D,CAAC;AAED,OAAO,MAAMC,YAAY,GACvBf,aAAqB,IACS;EAC9B,OAAOd,mBAAmB,CAAC6B,YAAY,CAACf,aAAa,CAAC;AACxD,CAAC;AAED,cAAc,aAAU;AACxB,cAAc,YAAS;AACvB,SAASnB,eAAe,QAAQ,YAAS","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","PensaReportType","LINKING_ERROR","select","ios","default","PensaSdkReactNative","Proxy","get","Error","initPensa","config","isPensaStarted","showShelfScans","showProductScans","showStoreSearchView","showStoresScreen","showScanArea","scanId","storeId","globalStoreId","showStockingScreen","showStoreChecklist","guid","sectionKey","showStoreChecklistWithGuid","fetchScanStatuses","scanIds","fetchOnDemandReports","params","finalReportTypes","reportTypes","length","ITEMS_SEEN","projectId","fetchVisitScansStatus","fetchProductImageBase64","productId","fetchShelves"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -7,6 +7,7 @@ export let PensaReportType = /*#__PURE__*/function (PensaReportType) {
7
7
  PensaReportType["ITEMS_SEEN"] = "ITEMS_SEEN";
8
8
  PensaReportType["NEW_PRODUCTS"] = "NEW_PRODUCTS";
9
9
  PensaReportType["NEW_PRODUCT_PACKAGING"] = "NEW_PRODUCT_PACKAGING";
10
+ PensaReportType["MISSING_PRICE_TAG"] = "MISSING_PRICE_TAG";
10
11
  PensaReportType["NO_OOS"] = "NO_OOS";
11
12
  PensaReportType["OOS"] = "OOS";
12
13
  PensaReportType["PRODUCT_POSITIONS"] = "PRODUCT_POSITIONS";
@@ -1 +1 @@
1
- {"version":3,"names":["PensaReportType"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAsFA,WAAYA,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["PensaReportType"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AA+IA,WAAYA,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { PensaOnDemandReport, PensaScanStatus, PensaShelfItem } from './types';
1
+ import type { PensaOnDemandReport, PensaScanStatus, PensaShelfItem, PensaVisitScansStatus } from './types';
2
2
  import { PensaReportType } from './types';
3
3
  export declare const initPensa: (config: {
4
4
  clientId: string;
@@ -13,8 +13,15 @@ export declare const showStoresScreen: () => Promise<void>;
13
13
  export declare const showScanArea: (scanId: number, storeId?: number, globalStoreId?: string) => Promise<void>;
14
14
  export declare const showStockingScreen: () => Promise<void>;
15
15
  export declare const showStoreChecklist: (globalStoreId: string, guid?: string, sectionKey?: string) => Promise<void>;
16
+ export declare const showStoreChecklistWithGuid: (globalStoreId: string, guid: string) => Promise<void>;
16
17
  export declare const fetchScanStatuses: (scanIds: number[]) => Promise<PensaScanStatus[]>;
17
- export declare const fetchOnDemandReports: (scanId: number, projectId?: number, reportTypes?: PensaReportType[]) => Promise<PensaOnDemandReport>;
18
+ export declare function fetchOnDemandReports(params: {
19
+ scanId?: number | null;
20
+ guid?: string | null;
21
+ projectId?: number | null;
22
+ reportTypes?: PensaReportType[];
23
+ }): Promise<PensaOnDemandReport>;
24
+ export declare const fetchVisitScansStatus: (guid: string) => Promise<PensaVisitScansStatus>;
18
25
  export declare const fetchProductImageBase64: (productId: number) => Promise<string>;
19
26
  export declare const fetchShelves: (globalStoreId: string) => Promise<PensaShelfItem[]>;
20
27
  export * from './events';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmB1C,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,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,eAAe,EAAE,CAE3B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,cAAc,eAAe,EAAE,KAC9B,OAAO,CAAC,mBAAmB,CAW7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAEzE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,eAAe,MAAM,KACpB,OAAO,CAAC,cAAc,EAAE,CAE1B,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAmB1C,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,eAAO,MAAM,0BAA0B,GACrC,eAAe,MAAM,EACrB,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAEd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EAAE,KAChB,OAAO,CAAC,eAAe,EAAE,CAE3B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAY/B;AAED,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,KACX,OAAO,CAAC,qBAAqB,CAE/B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAEzE,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,eAAe,MAAM,KACpB,OAAO,CAAC,cAAc,EAAE,CAE1B,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -17,11 +17,17 @@ export type OnCantScanReported = {
17
17
  scanAreaId: string;
18
18
  reason: string;
19
19
  };
20
+ export type OnScanCompletedWithGuid = {
21
+ guid: string | null;
22
+ tdlinxId: string;
23
+ scanId: number;
24
+ };
20
25
  export type PensaEventPayloads = {
21
26
  onScanUploadProgressUpdate: OnScanUploadProgressUpdate;
22
27
  onScanUploadCompleted: OnScanUploadCompleted;
23
28
  onScanUploadFailed: OnScanUploadFailed;
24
29
  onCantScanReported: OnCantScanReported;
30
+ onScanCompletedWithGuid: OnScanCompletedWithGuid;
25
31
  };
26
32
  export type PensaScanMetadata = {
27
33
  guid: string | null;
@@ -52,6 +58,37 @@ export type PensaOnDemandProduct = {
52
58
  export type PensaOnDemandReportBucket = {
53
59
  productList: PensaOnDemandProduct[];
54
60
  };
61
+ export type PensaOnDemandScan = {
62
+ facingsSeen: PensaOnDemandReportBucket | null;
63
+ fullFacings: PensaOnDemandReportBucket | null;
64
+ fullFacingsAndProductPositions: PensaOnDemandReportBucket | null;
65
+ itemsSeen: PensaOnDemandReportBucket | null;
66
+ newProducts: PensaOnDemandReportBucket | null;
67
+ newProductPackaging: PensaOnDemandReportBucket | null;
68
+ missingPriceTag: PensaOnDemandReportBucket | null;
69
+ noOos: PensaOnDemandReportBucket | null;
70
+ oos: PensaOnDemandReportBucket | null;
71
+ productPositions: PensaOnDemandReportBucket | null;
72
+ scanFailed: PensaOnDemandReportBucket | null;
73
+ scanRejected: PensaOnDemandReportBucket | null;
74
+ scanSkipped: PensaOnDemandReportBucket | null;
75
+ projectId: number | null;
76
+ projectName: string | null;
77
+ projectReportId: number | null;
78
+ projectReportName: string | null;
79
+ realogramSignedUrl: string | null;
80
+ scanId: number | null;
81
+ shelfId: number | null;
82
+ shelfName: string | null;
83
+ status: string | null;
84
+ };
85
+ export type PensaOnDemandVisit = {
86
+ endTime: string | null;
87
+ identifier: string | null;
88
+ startTime: string | null;
89
+ storeName: string | null;
90
+ storeTdlinx: string | null;
91
+ };
55
92
  export type PensaOnDemandReport = {
56
93
  facingsSeen: PensaOnDemandReportBucket | null;
57
94
  fullFacings: PensaOnDemandReportBucket | null;
@@ -59,6 +96,7 @@ export type PensaOnDemandReport = {
59
96
  itemsSeen: PensaOnDemandReportBucket | null;
60
97
  newProducts: PensaOnDemandReportBucket | null;
61
98
  newProductPackaging: PensaOnDemandReportBucket | null;
99
+ missingPriceTag: PensaOnDemandReportBucket | null;
62
100
  noOos: PensaOnDemandReportBucket | null;
63
101
  oos: PensaOnDemandReportBucket | null;
64
102
  productPositions: PensaOnDemandReportBucket | null;
@@ -73,6 +111,20 @@ export type PensaOnDemandReport = {
73
111
  shelfId: number | null;
74
112
  shelfName: string | null;
75
113
  status: string | null;
114
+ scans: PensaOnDemandScan[] | null;
115
+ visit: PensaOnDemandVisit | null;
116
+ };
117
+ export type PensaVisitScanItem = {
118
+ created: string | null;
119
+ fastStatus: string | null;
120
+ scanId: number | null;
121
+ status: string | null;
122
+ uploadCompleted: boolean | null;
123
+ };
124
+ export type PensaVisitScansStatus = {
125
+ guid: string | null;
126
+ scans: PensaVisitScanItem[] | null;
127
+ visitStatus: string | null;
76
128
  };
77
129
  export declare enum PensaReportType {
78
130
  FACINGS_SEEN = "FACINGS_SEEN",
@@ -81,6 +133,7 @@ export declare enum PensaReportType {
81
133
  ITEMS_SEEN = "ITEMS_SEEN",
82
134
  NEW_PRODUCTS = "NEW_PRODUCTS",
83
135
  NEW_PRODUCT_PACKAGING = "NEW_PRODUCT_PACKAGING",
136
+ MISSING_PRICE_TAG = "MISSING_PRICE_TAG",
84
137
  NO_OOS = "NO_OOS",
85
138
  OOS = "OOS",
86
139
  PRODUCT_POSITIONS = "PRODUCT_POSITIONS",
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pensasystems/pensa-react-native",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
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
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@ import type {
3
3
  PensaOnDemandReport,
4
4
  PensaScanStatus,
5
5
  PensaShelfItem,
6
+ PensaVisitScansStatus,
6
7
  } from './types';
7
8
  import { PensaReportType } from './types';
8
9
 
@@ -79,27 +80,42 @@ export const showStoreChecklist = (
79
80
  );
80
81
  };
81
82
 
83
+ export const showStoreChecklistWithGuid = (
84
+ globalStoreId: string,
85
+ guid: string
86
+ ): Promise<void> => {
87
+ return PensaSdkReactNative.showStoreChecklistWithGuid(globalStoreId, guid);
88
+ };
89
+
82
90
  export const fetchScanStatuses = (
83
91
  scanIds: number[]
84
92
  ): Promise<PensaScanStatus[]> => {
85
93
  return PensaSdkReactNative.fetchScanStatuses(scanIds);
86
94
  };
87
95
 
88
- export const fetchOnDemandReports = (
89
- scanId: number,
90
- projectId?: number,
91
- reportTypes?: PensaReportType[]
92
- ): Promise<PensaOnDemandReport> => {
96
+ export function fetchOnDemandReports(params: {
97
+ scanId?: number | null;
98
+ guid?: string | null;
99
+ projectId?: number | null;
100
+ reportTypes?: PensaReportType[];
101
+ }): Promise<PensaOnDemandReport> {
93
102
  const finalReportTypes =
94
- reportTypes && reportTypes.length > 0
95
- ? reportTypes
103
+ params.reportTypes && params.reportTypes.length > 0
104
+ ? params.reportTypes
96
105
  : [PensaReportType.ITEMS_SEEN];
97
106
 
98
107
  return PensaSdkReactNative.fetchOnDemandReports(
99
- scanId,
100
- projectId ?? null,
108
+ params.scanId ?? null,
109
+ params.guid ?? null,
110
+ params.projectId ?? null,
101
111
  finalReportTypes
102
112
  );
113
+ }
114
+
115
+ export const fetchVisitScansStatus = (
116
+ guid: string
117
+ ): Promise<PensaVisitScansStatus> => {
118
+ return PensaSdkReactNative.fetchVisitScansStatus(guid);
103
119
  };
104
120
 
105
121
  export const fetchProductImageBase64 = (productId: number): Promise<string> => {
package/src/types.ts CHANGED
@@ -21,11 +21,18 @@ export type OnCantScanReported = {
21
21
  reason: string;
22
22
  };
23
23
 
24
+ export type OnScanCompletedWithGuid = {
25
+ guid: string | null;
26
+ tdlinxId: string;
27
+ scanId: number;
28
+ };
29
+
24
30
  export type PensaEventPayloads = {
25
31
  onScanUploadProgressUpdate: OnScanUploadProgressUpdate;
26
32
  onScanUploadCompleted: OnScanUploadCompleted;
27
33
  onScanUploadFailed: OnScanUploadFailed;
28
34
  onCantScanReported: OnCantScanReported;
35
+ onScanCompletedWithGuid: OnScanCompletedWithGuid;
29
36
  };
30
37
 
31
38
  export type PensaScanMetadata = {
@@ -61,6 +68,39 @@ export type PensaOnDemandReportBucket = {
61
68
  productList: PensaOnDemandProduct[];
62
69
  };
63
70
 
71
+ export type PensaOnDemandScan = {
72
+ facingsSeen: PensaOnDemandReportBucket | null;
73
+ fullFacings: PensaOnDemandReportBucket | null;
74
+ fullFacingsAndProductPositions: PensaOnDemandReportBucket | null;
75
+ itemsSeen: PensaOnDemandReportBucket | null;
76
+ newProducts: PensaOnDemandReportBucket | null;
77
+ newProductPackaging: PensaOnDemandReportBucket | null;
78
+ missingPriceTag: PensaOnDemandReportBucket | null;
79
+ noOos: PensaOnDemandReportBucket | null;
80
+ oos: PensaOnDemandReportBucket | null;
81
+ productPositions: PensaOnDemandReportBucket | null;
82
+ scanFailed: PensaOnDemandReportBucket | null;
83
+ scanRejected: PensaOnDemandReportBucket | null;
84
+ scanSkipped: PensaOnDemandReportBucket | null;
85
+ projectId: number | null;
86
+ projectName: string | null;
87
+ projectReportId: number | null;
88
+ projectReportName: string | null;
89
+ realogramSignedUrl: string | null;
90
+ scanId: number | null;
91
+ shelfId: number | null;
92
+ shelfName: string | null;
93
+ status: string | null;
94
+ };
95
+
96
+ export type PensaOnDemandVisit = {
97
+ endTime: string | null;
98
+ identifier: string | null;
99
+ startTime: string | null;
100
+ storeName: string | null;
101
+ storeTdlinx: string | null;
102
+ };
103
+
64
104
  export type PensaOnDemandReport = {
65
105
  facingsSeen: PensaOnDemandReportBucket | null;
66
106
  fullFacings: PensaOnDemandReportBucket | null;
@@ -68,6 +108,7 @@ export type PensaOnDemandReport = {
68
108
  itemsSeen: PensaOnDemandReportBucket | null;
69
109
  newProducts: PensaOnDemandReportBucket | null;
70
110
  newProductPackaging: PensaOnDemandReportBucket | null;
111
+ missingPriceTag: PensaOnDemandReportBucket | null;
71
112
  noOos: PensaOnDemandReportBucket | null;
72
113
  oos: PensaOnDemandReportBucket | null;
73
114
  productPositions: PensaOnDemandReportBucket | null;
@@ -82,6 +123,22 @@ export type PensaOnDemandReport = {
82
123
  shelfId: number | null;
83
124
  shelfName: string | null;
84
125
  status: string | null;
126
+ scans: PensaOnDemandScan[] | null;
127
+ visit: PensaOnDemandVisit | null;
128
+ };
129
+
130
+ export type PensaVisitScanItem = {
131
+ created: string | null;
132
+ fastStatus: string | null;
133
+ scanId: number | null;
134
+ status: string | null;
135
+ uploadCompleted: boolean | null;
136
+ };
137
+
138
+ export type PensaVisitScansStatus = {
139
+ guid: string | null;
140
+ scans: PensaVisitScanItem[] | null;
141
+ visitStatus: string | null;
85
142
  };
86
143
 
87
144
  export enum PensaReportType {
@@ -91,6 +148,7 @@ export enum PensaReportType {
91
148
  ITEMS_SEEN = 'ITEMS_SEEN',
92
149
  NEW_PRODUCTS = 'NEW_PRODUCTS',
93
150
  NEW_PRODUCT_PACKAGING = 'NEW_PRODUCT_PACKAGING',
151
+ MISSING_PRICE_TAG = 'MISSING_PRICE_TAG',
94
152
  NO_OOS = 'NO_OOS',
95
153
  OOS = 'OOS',
96
154
  PRODUCT_POSITIONS = 'PRODUCT_POSITIONS',