react-native-rook-sdk 1.3.1 → 2.0.0-beta.0

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 (85) hide show
  1. package/android/build.gradle +3 -2
  2. package/android/src/main/java/com/rooksdk/RookSdkModule.kt +66 -15
  3. package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +10 -5
  4. package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
  5. package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +54 -20
  6. package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +92 -2
  7. package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +157 -296
  8. package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +14 -0
  9. package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
  10. package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
  11. package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
  12. package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +25 -0
  13. package/lib/commonjs/hooks/index.js +7 -0
  14. package/lib/commonjs/hooks/index.js.map +1 -1
  15. package/lib/commonjs/hooks/useRookAppleHealthVariables.js +1 -0
  16. package/lib/commonjs/hooks/useRookAppleHealthVariables.js.map +1 -1
  17. package/lib/commonjs/hooks/useRookConfiguration.js +33 -14
  18. package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -1
  19. package/lib/commonjs/hooks/useRookDataSources.js +1 -0
  20. package/lib/commonjs/hooks/useRookDataSources.js.map +1 -1
  21. package/lib/commonjs/hooks/useRookPermissions.js +32 -5
  22. package/lib/commonjs/hooks/useRookPermissions.js.map +1 -1
  23. package/lib/commonjs/hooks/useRookSync.js +103 -25
  24. package/lib/commonjs/hooks/useRookSync.js.map +1 -1
  25. package/lib/commonjs/hooks/useRookVariables.js +69 -0
  26. package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
  27. package/lib/commonjs/index.js +17 -1
  28. package/lib/commonjs/index.js.map +1 -1
  29. package/lib/commonjs/modules/hook/useRookAutoSync.js +25 -2
  30. package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -1
  31. package/lib/commonjs/modules/utils/errors.js +1 -1
  32. package/lib/commonjs/modules/utils/errors.js.map +1 -1
  33. package/lib/commonjs/types/SDKSources.js +13 -0
  34. package/lib/commonjs/types/SDKSources.js.map +1 -0
  35. package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
  36. package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
  37. package/lib/commonjs/types/SyncTypes.js +4 -0
  38. package/lib/module/hooks/index.js +1 -0
  39. package/lib/module/hooks/index.js.map +1 -1
  40. package/lib/module/hooks/useRookAppleHealthVariables.js +1 -0
  41. package/lib/module/hooks/useRookAppleHealthVariables.js.map +1 -1
  42. package/lib/module/hooks/useRookConfiguration.js +33 -15
  43. package/lib/module/hooks/useRookConfiguration.js.map +1 -1
  44. package/lib/module/hooks/useRookDataSources.js +1 -0
  45. package/lib/module/hooks/useRookDataSources.js.map +1 -1
  46. package/lib/module/hooks/useRookPermissions.js +32 -5
  47. package/lib/module/hooks/useRookPermissions.js.map +1 -1
  48. package/lib/module/hooks/useRookSync.js +103 -25
  49. package/lib/module/hooks/useRookSync.js.map +1 -1
  50. package/lib/module/hooks/useRookVariables.js +61 -0
  51. package/lib/module/hooks/useRookVariables.js.map +1 -0
  52. package/lib/module/index.js +2 -0
  53. package/lib/module/index.js.map +1 -1
  54. package/lib/module/modules/hook/useRookAutoSync.js +25 -2
  55. package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
  56. package/lib/module/modules/utils/errors.js +1 -1
  57. package/lib/module/modules/utils/errors.js.map +1 -1
  58. package/lib/module/types/SDKSources.js +7 -0
  59. package/lib/module/types/SDKSources.js.map +1 -0
  60. package/lib/module/types/SamsungHealthPermissions.js +17 -0
  61. package/lib/module/types/SamsungHealthPermissions.js.map +1 -0
  62. package/lib/module/types/SyncTypes.js +1 -1
  63. package/lib/typescript/src/hooks/index.d.ts +1 -0
  64. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  65. package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts +1 -0
  66. package/lib/typescript/src/hooks/useRookAppleHealthVariables.d.ts.map +1 -1
  67. package/lib/typescript/src/hooks/useRookConfiguration.d.ts +8 -4
  68. package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
  69. package/lib/typescript/src/hooks/useRookDataSources.d.ts.map +1 -1
  70. package/lib/typescript/src/hooks/useRookPermissions.d.ts +9 -4
  71. package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
  72. package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
  73. package/lib/typescript/src/hooks/useRookVariables.d.ts +22 -0
  74. package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -0
  75. package/lib/typescript/src/index.d.ts +2 -0
  76. package/lib/typescript/src/index.d.ts.map +1 -1
  77. package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
  78. package/lib/typescript/src/types/SDKSources.d.ts +6 -0
  79. package/lib/typescript/src/types/SDKSources.d.ts.map +1 -0
  80. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +16 -0
  81. package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -0
  82. package/lib/typescript/src/types/SyncTypes.d.ts +15 -1
  83. package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/react-native-rook-sdk.podspec +1 -1
@@ -1,5 +1,3 @@
1
- package com.rooksdk.modules
2
-
3
1
  import android.annotation.SuppressLint
4
2
  import com.facebook.react.bridge.Arguments
5
3
  import com.facebook.react.bridge.Callback
@@ -9,18 +7,17 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
9
7
  import com.facebook.react.bridge.ReactMethod
10
8
  import com.facebook.react.bridge.ReadableMap
11
9
  import com.google.gson.Gson
12
- import com.rookmotion.rook.sdk.RookConfigurationManager
13
10
  import com.rookmotion.rook.sdk.RookContinuousUploadManager
14
11
  import com.rookmotion.rook.sdk.RookDataSources
15
- import com.rookmotion.rook.sdk.RookEventManager
16
- import com.rookmotion.rook.sdk.RookSummaryManager
17
12
  import com.rookmotion.rook.sdk.RookSyncManager
18
- import com.rookmotion.rook.sdk.domain.enums.SyncStatus
19
13
  import com.rookmotion.rook.sdk.domain.model.SyncStatusWithData
20
14
  import com.rooksdk.utils.DatasourcesUtils.dataSourcesToWritableArray
21
15
  import com.rooksdk.utils.DatasourcesUtils.mapToDataSourceType
22
16
  import com.rooksdk.utils.RookDateTime
17
+ import com.rooksdk.utils.SamsungAvailability
23
18
  import com.rooksdk.utils.StringToSyncType
19
+ import io.tryrook.sdk.samsung.RookSamsung
20
+ import io.tryrook.sdk.samsung.domain.model.SHSyncStatusWithData
24
21
  import kotlinx.coroutines.CoroutineScope
25
22
  import kotlinx.coroutines.Dispatchers
26
23
  import kotlinx.coroutines.SupervisorJob
@@ -28,7 +25,7 @@ import kotlinx.coroutines.launch
28
25
 
29
26
  class RookSyncModule(
30
27
  reactContext: ReactApplicationContext,
31
- rookConfigurationManager: RookConfigurationManager
28
+ private val rookSamsung: RookSamsung
32
29
  ): ReactContextBaseJavaModule(reactContext) {
33
30
 
34
31
  private val rookContinuousUploadManager by lazy {
@@ -39,14 +36,6 @@ class RookSyncModule(
39
36
  RookSyncManager(reactContext)
40
37
  }
41
38
 
42
- private val rookEventManager by lazy {
43
- RookEventManager(rookConfigurationManager)
44
- }
45
-
46
- private val rookSummaryManager by lazy {
47
- RookSummaryManager(rookConfigurationManager)
48
- }
49
-
50
39
  private val scope: CoroutineScope by lazy {
51
40
  CoroutineScope(SupervisorJob() + Dispatchers.Main)
52
41
  }
@@ -73,302 +62,50 @@ class RookSyncModule(
73
62
  }
74
63
  }
75
64
 
76
- // Sleep
77
- /**
78
- * Synchronizes the sleep summary data for the given date.
79
- * @param date The date for which to sync the data (in string format).
80
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
81
- */
82
- @ReactMethod
83
- fun syncSleepSummary(date: String, promise: Promise) {
84
- scope.launch {
85
- val result = rookSummaryManager.syncSleepSummary(RookDateTime.stringToLocalDate(date))
86
-
87
- result.fold({
88
- if (it == SyncStatus.SYNCED) promise.resolve(true)
89
- else promise.resolve(false)
90
- }, {
91
- promise.reject(it)
92
- })
93
- }
94
- }
95
-
96
- // Body
97
- /**
98
- * Synchronizes the body summary data for the given date.
99
- * @param date The date for which to sync the data (in string format).
100
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
101
- */
102
- @ReactMethod
103
- fun syncBodySummary(date: String, promise: Promise) {
104
- scope.launch {
105
- val result = rookSummaryManager.syncBodySummary(RookDateTime.stringToLocalDate(date))
106
-
107
- result.fold({
108
- if (it == SyncStatus.SYNCED) promise.resolve(true)
109
- else promise.resolve(false)
110
- }, {
111
- promise.reject(it)
112
- })
113
- }
114
- }
115
-
116
- // Physical
117
- /**
118
- * Synchronizes the physical summary data for the given date.
119
- * @param date The date for which to sync the data (in string format).
120
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
121
- */
122
- @ReactMethod
123
- fun syncPhysicalSummary(date: String, promise: Promise) {
124
- scope.launch {
125
- val result = rookSummaryManager.syncPhysicalSummary(RookDateTime.stringToLocalDate(date))
126
-
127
- result.fold({
128
- if (it == SyncStatus.SYNCED) promise.resolve(true)
129
- else promise.resolve(false)
130
- }, {
131
- promise.reject(it)
132
- })
133
- }
134
- }
135
-
136
- /**
137
- * Sync all failed summaries
138
- */
139
- @ReactMethod
140
- fun syncPendingSummaries(promise: Promise) {
141
- scope.launch {
142
- val result = rookSummaryManager.syncPendingSummaries()
143
-
144
- result.fold({
145
- promise.resolve(true)
146
- }, {
147
- promise.reject(it)
148
- })
149
- }
150
- }
151
-
152
- // MARK: - Events
153
- /**
154
- * Synchronizes the physical events data for the given date.
155
- * @param date The date for which to sync the data (in string format).
156
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
157
- */
158
- @ReactMethod
159
- fun syncPhysicalEvents(date: String, promise: Promise) {
160
- scope.launch {
161
- val result = rookEventManager.syncPhysicalEvents(RookDateTime.stringToLocalDate(date))
162
-
163
- result.fold({
164
- if (it == SyncStatus.SYNCED) promise.resolve(true)
165
- else promise.resolve(false)
166
- }, {
167
- promise.reject(it)
168
- })
169
- }
170
- }
171
-
172
- /**
173
- * Synchronizes the blood glucose events data for the given date.
174
- * @param date The date for which to sync the data (in string format).
175
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
176
- */
177
- @ReactMethod
178
- fun syncBloodGlucoseEvents(date: String, promise: Promise) {
179
- scope.launch {
180
- val result = rookEventManager.syncBloodGlucoseEvents(RookDateTime.stringToLocalDate(date))
181
-
182
- result.fold({
183
- if (it == SyncStatus.SYNCED) promise.resolve(true)
184
- else promise.resolve(false)
185
- }, {
186
- promise.reject(it)
187
- })
188
- }
189
- }
190
-
191
- /**
192
- * Synchronizes the blood pressure events data for the given date.
193
- * @param date The date for which to sync the data (in string format).
194
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
195
- */
196
- @ReactMethod
197
- fun syncBloodPressureEvents(date: String, promise: Promise) {
198
- scope.launch {
199
- val result = rookEventManager.syncBloodPressureEvents(RookDateTime.stringToLocalDate(date))
200
-
201
- result.fold({
202
- if (it == SyncStatus.SYNCED) promise.resolve(true)
203
- else promise.resolve(false)
204
- }, {
205
- promise.reject(it)
206
- })
207
- }
208
- }
209
-
210
- /**
211
- * Synchronizes the body metrics event data for the given date.
212
- * @param date The date for which to sync the data (in string format).
213
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
214
- */
215
- @ReactMethod
216
- fun syncBodyMetricsEvent(date: String, promise: Promise) {
217
- scope.launch {
218
- val result = rookEventManager.syncBodyMetricsEvents(RookDateTime.stringToLocalDate(date))
219
-
220
- result.fold({
221
- if (it == SyncStatus.SYNCED) promise.resolve(true)
222
- else promise.resolve(false)
223
- }, {
224
- promise.reject(it)
225
- })
226
- }
227
- }
228
-
229
- /**
230
- * Synchronizes the body heart Rate events data for the given date.
231
- * @param date The date for which to sync the data (in string format).
232
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
233
- */
234
- @ReactMethod
235
- fun syncBodyHeartRateEvent(date: String, promise: Promise) {
236
- scope.launch {
237
- val result = rookEventManager.syncBodyHeartRateEvents(RookDateTime.stringToLocalDate(date))
238
-
239
- result.fold({
240
- if (it == SyncStatus.SYNCED) promise.resolve(true)
241
- else promise.resolve(false)
242
- }, {
243
- promise.reject(it)
244
- })
245
- }
246
- }
247
-
248
- /**
249
- * Synchronizes the physical heart rate events data for the given date.
250
- * @param date The date for which to sync the data (in string format).
251
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
252
- */
253
- @ReactMethod
254
- fun syncPhysicalHeartRateEvent(date: String, promise: Promise) {
255
- scope.launch {
256
- val result = rookEventManager.syncPhysicalHeartRateEvents(RookDateTime.stringToLocalDate(date))
257
-
258
- result.fold({
259
- if (it == SyncStatus.SYNCED) promise.resolve(true)
260
- else promise.resolve(false)
261
- }, {
262
- promise.reject(it)
263
- })
264
- }
265
- }
266
-
267
- /**
268
- * Synchronizes the nutrition events data for the given date.
269
- * @param date The date for which to sync the data (in string format).
270
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
271
- */
272
- @ReactMethod
273
- fun syncNutritionEvents(date: String, promise: Promise) {
274
- scope.launch {
275
- val result = rookEventManager.syncNutritionEvents(RookDateTime.stringToLocalDate(date))
276
-
277
- result.fold({
278
- if (it == SyncStatus.SYNCED) promise.resolve(true)
279
- else promise.resolve(false)
280
- }, {
281
- promise.reject(it)
282
- })
283
- }
284
- }
285
-
286
- /**
287
- * Synchronizes the hydration events data for the given date.
288
- * @param date The date for which to sync the data (in string format).
289
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
290
- */
291
- @ReactMethod
292
- fun syncHydrationEvents(date: String, promise: Promise) {
293
- scope.launch {
294
- val result = rookEventManager.syncHydrationEvents(RookDateTime.stringToLocalDate(date))
295
-
296
- result.fold({
297
- if (it == SyncStatus.SYNCED) promise.resolve(true)
298
- else promise.resolve(false)
299
- }, {
300
- promise.reject(it)
301
- })
302
- }
303
- }
304
-
305
- /**
306
- * Synchronizes the physical oxygenation events data for the given date.
307
- * @param date The date for which to sync the data (in string format).
308
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
309
- */
310
65
  @ReactMethod
311
- fun syncPhysicalOxygenationEvent(date: String, promise: Promise) {
312
- scope.launch {
313
- val result = rookEventManager.syncPhysicalOxygenationEvents(RookDateTime.stringToLocalDate(date))
314
-
315
- result.fold({
316
- if (it == SyncStatus.SYNCED) promise.resolve(true)
317
- else promise.resolve(false)
318
- }, {
319
- promise.reject(it)
320
- })
321
- }
66
+ fun enableSamsungSync(promise: Promise) {
67
+ scope.launch {
68
+ rookSamsung.schedule(true)
69
+ promise.resolve(true)
70
+ }
322
71
  }
323
72
 
324
- /**
325
- * Synchronizes the body oxygenation events data for the given date.
326
- * @param date The date for which to sync the data (in string format).
327
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
328
- */
329
73
  @ReactMethod
330
- fun syncBodyOxygenationEvent(date: String, promise: Promise) {
74
+ fun isSamsungSyncEnabled(promise: Promise) {
331
75
  scope.launch {
332
- val result = rookEventManager.syncBodyOxygenationEvents(RookDateTime.stringToLocalDate(date))
333
-
334
- result.fold({
335
- if (it == SyncStatus.SYNCED) promise.resolve(true)
336
- else promise.resolve(false)
337
- }, {
338
- promise.reject(it)
339
- })
76
+ rookSamsung.isScheduled().fold(
77
+ {
78
+ promise.resolve(it)
79
+ },
80
+ {
81
+ promise.reject(it)
82
+ }
83
+ )
340
84
  }
341
85
  }
342
86
 
343
- /**
344
- * Synchronizes the sync temperature events data for the given date.
345
- * @param date The date for which to sync the data (in string format).
346
- * @param promise A promise object to handle the result (resolved on success, rejected on failure).
347
- */
348
87
  @ReactMethod
349
- fun syncTemperatureEvent(date: String, promise: Promise) {
88
+ fun disableSamsungSync(promise: Promise) {
350
89
  scope.launch {
351
- val result = rookEventManager.syncTemperatureEvents(RookDateTime.stringToLocalDate(date))
352
-
353
- result.fold({
354
- if (it == SyncStatus.SYNCED) promise.resolve(true)
355
- else promise.resolve(false)
356
- }, {
357
- promise.reject(it)
358
- })
90
+ rookSamsung.cancel()
91
+ promise.resolve(true)
359
92
  }
360
93
  }
361
94
 
362
- /**
363
- * Synchronizes all failed events
364
- */
365
95
  @ReactMethod
366
- fun syncPendingEvents(promise: Promise) {
96
+ fun syncTodaySamsungHealthStepsCount(promise: Promise) {
367
97
  scope.launch {
368
- val result = rookEventManager.syncPendingEvents()
98
+ rookSamsung.getTodayStepsCount().fold({
99
+ when (it) {
100
+ SHSyncStatusWithData.RecordsNotFound -> {
101
+ promise.reject("SamsungStepsCount", "Records Not Found")
102
+ }
369
103
 
370
- result.fold({
371
- promise.resolve(true)
104
+ is SHSyncStatusWithData.Synced -> {
105
+ val steps = it.data
106
+ promise.resolve(steps)
107
+ }
108
+ }
372
109
  }, {
373
110
  promise.reject(it)
374
111
  })
@@ -390,7 +127,7 @@ class RookSyncModule(
390
127
  {
391
128
  when (it) {
392
129
  SyncStatusWithData.RecordsNotFound -> {
393
- promise.reject("syncTodayHealthConnect", "Records Not Found")
130
+ promise.reject("HealthConnectStepsCount", "Records Not Found")
394
131
  }
395
132
 
396
133
  is SyncStatusWithData.Synced -> {
@@ -513,6 +250,33 @@ class RookSyncModule(
513
250
  }
514
251
  }
515
252
 
253
+ @ReactMethod
254
+ fun syncSHTodayCaloriesCount(promise: Promise) {
255
+ scope.launch {
256
+ rookSamsung.getTodayCaloriesCount().fold(
257
+ {
258
+ when (it) {
259
+ SHSyncStatusWithData.RecordsNotFound -> {
260
+ promise.reject("syncTodayHealthConnect", "Records Not Found")
261
+ }
262
+
263
+ is SHSyncStatusWithData.Synced -> {
264
+ val data = Arguments.createMap().apply {
265
+ putDouble("basal", it.data.basal)
266
+ putDouble("active", it.data.active)
267
+ }
268
+
269
+ promise.resolve(data)
270
+ }
271
+ }
272
+ },
273
+ {
274
+ promise.reject(it)
275
+ }
276
+ )
277
+ }
278
+ }
279
+
516
280
  /**
517
281
  * Synchronizes the calories count for the current day from Health Connect.
518
282
  * This method queries the Health Connect platform via the Rook SDK to retrieve
@@ -612,6 +376,103 @@ class RookSyncModule(
612
376
  }
613
377
  }
614
378
 
379
+ @ReactMethod
380
+ fun shSync(enableLogs: Boolean, callback: Callback) {
381
+ scope.launch {
382
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
383
+ val params = Arguments.createMap().apply {
384
+ putString("domain", "Samsung health is not available")
385
+ }
386
+
387
+ callback.invoke(params, false)
388
+ return@launch
389
+ }
390
+
391
+ rookSamsung.sync(enableLogs).fold(
392
+ {
393
+ callback(null, true)
394
+ }, {
395
+ val params = Arguments.createMap().apply {
396
+ putString("domain", it.localizedMessage ?: it.message)
397
+ }
398
+
399
+ callback.invoke(params, false)
400
+ }
401
+ )
402
+ }
403
+ }
404
+
405
+ @ReactMethod
406
+ fun shSyncByDate(date: String, callback: Callback) {
407
+ val localDate = RookDateTime.stringToLocalDate(date)
408
+
409
+ scope.launch {
410
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
411
+ val params = Arguments.createMap().apply {
412
+ putString("domain", "Samsung health is not available")
413
+ }
414
+
415
+ callback.invoke(params, false)
416
+ return@launch
417
+ }
418
+
419
+ rookSamsung.sync(localDate).fold({ result ->
420
+ callback.invoke(null, result)
421
+ }, {
422
+ val params = Arguments.createMap().apply {
423
+ putString("domain", it.localizedMessage ?: it.message)
424
+ }
425
+
426
+ callback.invoke(params, false)
427
+ })
428
+ }
429
+ }
430
+
431
+ @ReactMethod
432
+ fun shSyncByDefinition(summary: String, date: String, callback: Callback) {
433
+ val localDate = RookDateTime.stringToLocalDate(date)
434
+ val type = StringToSyncType.stringToSamsungPillar(summary)
435
+
436
+ scope.launch {
437
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
438
+ val params = Arguments.createMap().apply {
439
+ putString("domain", "Samsung health is not available")
440
+ }
441
+
442
+ callback.invoke(params, false)
443
+ return@launch
444
+ }
445
+
446
+ rookSamsung.sync(localDate, type).fold({ result ->
447
+ callback.invoke(null, result)
448
+ }, {
449
+ val params = Arguments.createMap().apply {
450
+ putString("domain", it.localizedMessage ?: it.message)
451
+ }
452
+
453
+ callback.invoke(params, false)
454
+ })
455
+ }
456
+ }
457
+
458
+ @ReactMethod
459
+ fun shSyncEvent(date: String, event: String, promise: Promise) {
460
+ val localDate = RookDateTime.stringToLocalDate(date)
461
+ val type = StringToSyncType.stringToSamsungEvent(event)
462
+
463
+ scope.launch {
464
+ if (!SamsungAvailability.isSamsungAvailable(rookSamsung)){
465
+ promise.reject(Throwable("Samsung health is not available"))
466
+ return@launch
467
+ }
468
+
469
+ rookSamsung.syncEvents(localDate, type).fold({ result ->
470
+ promise.resolve(result)
471
+ }, {
472
+ promise.reject(it)
473
+ })
474
+ }
475
+ }
615
476
  override fun getName(): String {
616
477
  return "RookSyncModule"
617
478
  }
@@ -1,6 +1,7 @@
1
1
  package com.rooksdk.utils
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.ReadableArray
4
5
  import com.facebook.react.bridge.WritableArray
5
6
  import com.rookmotion.rook.sdk.domain.enums.DataSourceType
6
7
  import com.rookmotion.rook.sdk.domain.model.DataSource
@@ -46,4 +47,17 @@ object DatasourcesUtils {
46
47
  return array
47
48
  }
48
49
 
50
+ fun readableArrayToSourceList(sources: ReadableArray): List<Source> {
51
+ val rawList = sources.toArrayList()
52
+
53
+ return rawList
54
+ .mapNotNull { it as? String }
55
+ .mapNotNull {
56
+ try {
57
+ Source.valueOf(it)
58
+ } catch (e: IllegalArgumentException) {
59
+ null
60
+ }
61
+ }
62
+ }
49
63
  }
@@ -0,0 +1,21 @@
1
+ package com.rooksdk.utils
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthPermission
5
+
6
+ object PermissionConversion {
7
+
8
+ fun parseSamsungPermissions(rawPermissions: ReadableArray): Set<SamsungHealthPermission> {
9
+ val rawList = rawPermissions.toArrayList()
10
+
11
+ return rawList
12
+ .mapNotNull { it as? String }
13
+ .mapNotNull {
14
+ try {
15
+ SamsungHealthPermission.valueOf(it)
16
+ } catch (e: IllegalArgumentException) {
17
+ null
18
+ }
19
+ }.toSet()
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ package com.rooksdk.utils
2
+
3
+ import io.tryrook.sdk.samsung.RookSamsung
4
+ import io.tryrook.sdk.samsung.domain.enums.SamsungHealthAvailability
5
+
6
+ object SamsungAvailability {
7
+ suspend fun getSamsungHealthAvailabilityOrDefault(rookSamsung: RookSamsung): SamsungHealthAvailability {
8
+ val result = rookSamsung.checkSamsungHealthAvailability()
9
+ val defaultValue = SamsungHealthAvailability.NOT_INSTALLED
10
+
11
+ return result.getOrDefault(defaultValue)
12
+ }
13
+ suspend fun isSamsungAvailable(rookSamsung: RookSamsung): Boolean {
14
+ val result = rookSamsung.checkSamsungHealthAvailability()
15
+ val defaultValue = SamsungHealthAvailability.NOT_INSTALLED
16
+
17
+ val availability = result.getOrDefault(defaultValue)
18
+
19
+ return availability == SamsungHealthAvailability.INSTALLED
20
+ }
21
+ }
@@ -0,0 +1,6 @@
1
+ package com.rooksdk.utils
2
+
3
+ enum class Source{
4
+ HEALTH_CONNECT,
5
+ SAMSUNG_HEALTH
6
+ }
@@ -1,6 +1,7 @@
1
1
  package com.rooksdk.utils
2
2
 
3
3
  import com.rookmotion.rook.sdk.domain.model.SyncType
4
+ import io.tryrook.sdk.samsung.domain.model.SHSyncType
4
5
 
5
6
  object StringToSyncType {
6
7
 
@@ -30,4 +31,28 @@ object StringToSyncType {
30
31
  }
31
32
  }
32
33
 
34
+ fun stringToSamsungPillar(value: String): SHSyncType.Summary {
35
+ return when(value.lowercase()) {
36
+ "sleep" -> SHSyncType.Summary.SLEEP
37
+ "body" -> SHSyncType.Summary.BODY
38
+ "physical" -> SHSyncType.Summary.PHYSICAL
39
+ else -> SHSyncType.Summary.BODY
40
+ }
41
+ }
42
+
43
+ fun stringToSamsungEvent(value: String): SHSyncType.Event {
44
+ return when (value.lowercase()) {
45
+ "activity" -> SHSyncType.Event.ACTIVITY
46
+ "blood_glucose" -> SHSyncType.Event.BLOOD_GLUCOSE
47
+ "blood_pressure" -> SHSyncType.Event.BLOOD_PRESSURE
48
+ "body_metrics" -> SHSyncType.Event.BODY_METRICS
49
+ "heart_rate" -> SHSyncType.Event.HEART_RATE
50
+ "hydration" -> SHSyncType.Event.HYDRATION
51
+ "nutrition" -> SHSyncType.Event.NUTRITION
52
+ "oxygenation" -> SHSyncType.Event.OXYGENATION
53
+ "steps" -> SHSyncType.Event.STEPS
54
+ "calories" -> SHSyncType.Event.CALORIES
55
+ else -> SHSyncType.Event.STEPS
56
+ }
57
+ }
33
58
  }
@@ -63,6 +63,12 @@ Object.defineProperty(exports, "useRookSync", {
63
63
  return _useRookSync.useRookSync;
64
64
  }
65
65
  });
66
+ Object.defineProperty(exports, "useRookVariables", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _useRookVariables.useRookVariables;
70
+ }
71
+ });
66
72
  var _useRookAndroidBackgroundSteps = require("./useRookAndroidBackgroundSteps");
67
73
  var _useRookAppleHealth = require("./useRookAppleHealth");
68
74
  var _useRookAppleHealthVariables = require("./useRookAppleHealthVariables");
@@ -73,4 +79,5 @@ var _useRookHealthConnect = require("./useRookHealthConnect");
73
79
  var _useRookPermissions = require("./useRookPermissions");
74
80
  var _useRookSummaries = require("./useRookSummaries");
75
81
  var _useRookSync = require("./useRookSync");
82
+ var _useRookVariables = require("./useRookVariables");
76
83
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_useRookAndroidBackgroundSteps","require","_useRookAppleHealth","_useRookAppleHealthVariables","_useRookConfiguration","_useRookDataSources","_useRookEvents","_useRookHealthConnect","_useRookPermissions","_useRookSummaries","_useRookSync"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,8BAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,4BAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AACA,IAAAM,qBAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAP,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AACA,IAAAS,YAAA,GAAAT,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_useRookAndroidBackgroundSteps","require","_useRookAppleHealth","_useRookAppleHealthVariables","_useRookConfiguration","_useRookDataSources","_useRookEvents","_useRookHealthConnect","_useRookPermissions","_useRookSummaries","_useRookSync","_useRookVariables"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,8BAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,4BAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AACA,IAAAM,qBAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAP,OAAA;AACA,IAAAQ,iBAAA,GAAAR,OAAA;AACA,IAAAS,YAAA,GAAAT,OAAA;AACA,IAAAU,iBAAA,GAAAV,OAAA","ignoreList":[]}
@@ -12,6 +12,7 @@ var _isRunningOniOS = require("../utils/isRunningOniOS");
12
12
  var _nativeModules = _interopRequireDefault(require("../utils/nativeModules"));
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
14
  /**
15
+ * @deprecated use instead useRookVariable
15
16
  * The `useRookAppleHealthVariable` hook returns an object with a `ready` boolean and an
16
17
  * asynchronous function `getTodaySteps` that retrieves the number of steps taken today.
17
18
  * @returns The `useRookVariable` hook is returning an object with two properties:
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_RookSyncGateContext","_getNativeModule","_interopRequireDefault","_isModuleReady","_isRunningOniOS","_nativeModules","e","__esModule","default","useRookAppleHealthVariables","rookSync","useRef","getNativeModule","nativeModules","ios","SYNC","state","ready","useRookSyncGateContext","getTodaySteps","isRunningOniOS","isModuleReady","result","current","exports"],"sourceRoot":"../../../src","sources":["hooks/useRookAppleHealthVariables.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAmD,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,2BAA2B,GAAGA,CAAA,KAAM;EAC/C,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAC,IAAAC,wBAAe,EAACC,sBAAa,CAACC,GAAG,CAACC,IAAI,CAAC,CAAC;EAChE,MAAM;IACJC,KAAK,EAAE;MAAEC;IAAM;EACjB,CAAC,GAAG,IAAAC,2CAAsB,EAAC,CAAC;;EAE5B;AACF;AACA;AACA;EACE,MAAMC,aAAa,GAAG,MAAAA,CAAA,KAA2B;IAC/C,IAAAC,8BAAc,EAAC,CAAC;IAChB,IAAAC,4BAAa,EAACJ,KAAK,CAAC;IAEpB,MAAMK,MAAM,GAAG,MAAMZ,QAAQ,CAACa,OAAO,CAACJ,aAAa,CAAC,CAAC;IACrD,OAAOG,MAAM;EACf,CAAC;EAED,OAAO;IACLL,KAAK;IACLE;EACF,CAAC;AACH,CAAC;AAACK,OAAA,CAAAf,2BAAA,GAAAA,2BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_RookSyncGateContext","_getNativeModule","_interopRequireDefault","_isModuleReady","_isRunningOniOS","_nativeModules","e","__esModule","default","useRookAppleHealthVariables","rookSync","useRef","getNativeModule","nativeModules","ios","SYNC","state","ready","useRookSyncGateContext","getTodaySteps","isRunningOniOS","isModuleReady","result","current","exports"],"sourceRoot":"../../../src","sources":["hooks/useRookAppleHealthVariables.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAmD,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,2BAA2B,GAAGA,CAAA,KAAM;EAC/C,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAC,IAAAC,wBAAe,EAACC,sBAAa,CAACC,GAAG,CAACC,IAAI,CAAC,CAAC;EAChE,MAAM;IACJC,KAAK,EAAE;MAAEC;IAAM;EACjB,CAAC,GAAG,IAAAC,2CAAsB,EAAC,CAAC;;EAE5B;AACF;AACA;AACA;EACE,MAAMC,aAAa,GAAG,MAAAA,CAAA,KAA2B;IAC/C,IAAAC,8BAAc,EAAC,CAAC;IAChB,IAAAC,4BAAa,EAACJ,KAAK,CAAC;IAEpB,MAAMK,MAAM,GAAG,MAAMZ,QAAQ,CAACa,OAAO,CAACJ,aAAa,CAAC,CAAC;IACrD,OAAOG,MAAM;EACf,CAAC;EAED,OAAO;IACLL,KAAK;IACLE;EACF,CAAC;AACH,CAAC;AAACK,OAAA,CAAAf,2BAAA,GAAAA,2BAAA","ignoreList":[]}