react-native-rook-sdk 4.0.0-beta.2 → 4.1.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.
- package/LICENSE +1 -1
- package/README.md +3 -35
- package/android/build.gradle +45 -20
- package/android/gradle.properties +5 -5
- package/android/src/main/AndroidManifest.xml +2 -1
- package/android/src/main/AndroidManifestNew.xml +36 -0
- package/android/src/main/java/com/rooksdk/RookSdkModule.kt +263 -11
- package/android/src/main/java/com/rooksdk/RookSdkPackage.kt +42 -26
- package/android/src/main/java/com/rooksdk/broadcasts/AndroidPermissionsReceiverTransmitter.kt +65 -0
- package/android/src/main/java/com/rooksdk/broadcasts/HealthConnectPermissionsReceiverTransmitter.kt +70 -0
- package/android/src/main/java/com/rooksdk/broadcasts/SamsungHealthPermissionsReceiverTransmitter.kt +52 -0
- package/android/src/main/java/com/rooksdk/modules/RookBackgroundSyncModule.kt +99 -0
- package/android/src/main/java/com/rooksdk/modules/RookConfigurationModule.kt +182 -0
- package/android/src/main/java/com/rooksdk/modules/RookLocalData.kt +301 -0
- package/android/src/main/java/com/rooksdk/modules/RookPermissionsModule.kt +382 -0
- package/android/src/main/java/com/rooksdk/modules/RookSourcesModule.kt +102 -0
- package/android/src/main/java/com/rooksdk/modules/RookStepsModule.kt +189 -0
- package/android/src/main/java/com/rooksdk/modules/RookSyncModule.kt +551 -0
- package/android/src/main/java/com/rooksdk/utils/DatasourcesUtils.kt +34 -0
- package/android/src/main/java/com/rooksdk/utils/PermissionConversion.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/ReadableToWritable.kt +145 -0
- package/android/src/main/java/com/rooksdk/utils/RookDateTime.kt +26 -0
- package/android/src/main/java/com/rooksdk/utils/RookGsonBuilder.kt +17 -0
- package/android/src/main/java/com/rooksdk/utils/SamsungAvailability.kt +21 -0
- package/android/src/main/java/com/rooksdk/utils/Source.kt +6 -0
- package/android/src/main/java/com/rooksdk/utils/StringToSyncType.kt +41 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/InstantSerializer.kt +19 -0
- package/android/src/main/java/com/rooksdk/utils/serializers/LocalDateSerializer.kt +21 -0
- package/android/src/main/res/drawable/ic_health_connect.xml +19 -0
- package/android/src/main/res/values/themes.xml +3 -0
- package/ios/DateHelper.swift +4 -4
- package/ios/EncodableDataSource.swift +3 -2
- package/ios/EncodableDataSourceAuthorizer.swift +3 -2
- package/ios/{HearRateMapper.swift → EncodableHeartRate.swift} +3 -3
- package/ios/EncodableRookDataSource.swift +36 -0
- package/ios/EncodableSDKState.swift +94 -0
- package/ios/EncodableStatusDataSources.swift +47 -0
- package/ios/NutritionMapper.swift +114 -0
- package/ios/RookBackground.swift +8 -5
- package/ios/RookBackgroundModule.h +5 -0
- package/ios/RookBackgroundModule.mm +15 -0
- package/ios/RookConfiguration.swift +34 -24
- package/ios/RookConfigurationModule.h +5 -0
- package/ios/RookConfigurationModule.mm +22 -0
- package/ios/RookExternalModule.h +5 -0
- package/ios/RookExternalModule.m +31 -0
- package/ios/{RookData.swift → RookLocalData.swift} +70 -48
- package/ios/RookPermissions.swift +33 -5
- package/ios/RookPermissionsModule.h +5 -0
- package/ios/RookPermissionsModule.mm +20 -0
- package/ios/RookSdk.h +2 -14
- package/ios/RookSdk.mm +97 -546
- package/ios/RookSources.swift +54 -60
- package/ios/RookSourcesModule.h +5 -0
- package/ios/RookSourcesModule.mm +18 -0
- package/ios/RookSync.h +5 -0
- package/ios/RookSync.m +35 -0
- package/ios/RookSync.swift +78 -48
- package/ios/SwiftTest.swift +18 -0
- package/ios/react-native-rook-sdk-Bridging-Header.h +12 -0
- package/{src/context/RookSyncGateContext.ts → lib/commonjs/context/RookSyncGateContext.js} +13 -10
- package/lib/commonjs/context/RookSyncGateContext.js.map +1 -0
- package/lib/commonjs/context/RookSyncGateProvider.js +108 -0
- package/lib/commonjs/context/RookSyncGateProvider.js.map +1 -0
- package/{src/context/RookSyncGateReducer.ts → lib/commonjs/context/RookSyncGateReducer.js} +44 -13
- package/lib/commonjs/context/RookSyncGateReducer.js.map +1 -0
- package/lib/commonjs/context/RookSyncGateTypes.js +6 -0
- package/lib/commonjs/context/RookSyncGateTypes.js.map +1 -0
- package/lib/commonjs/context/index.js +14 -0
- package/lib/commonjs/context/index.js.map +1 -0
- package/lib/commonjs/hooks/index.js +83 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/{src/hooks/useRookAPISources.ts → lib/commonjs/hooks/useRookAPISources.js} +36 -40
- package/lib/commonjs/hooks/useRookAPISources.js.map +1 -0
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js +88 -0
- package/lib/commonjs/hooks/useRookAndroidBackgroundSteps.js.map +1 -0
- package/lib/commonjs/hooks/useRookAndroidStepCounter.js +56 -0
- package/lib/commonjs/hooks/useRookAndroidStepCounter.js.map +1 -0
- package/lib/commonjs/hooks/useRookAppleHealth.js +63 -0
- package/lib/commonjs/hooks/useRookAppleHealth.js.map +1 -0
- package/lib/commonjs/hooks/useRookConfiguration.js +113 -0
- package/lib/commonjs/hooks/useRookConfiguration.js.map +1 -0
- package/lib/commonjs/hooks/useRookData.js +116 -0
- package/lib/commonjs/hooks/useRookData.js.map +1 -0
- package/lib/commonjs/hooks/useRookHealthConnect.js +70 -0
- package/lib/commonjs/hooks/useRookHealthConnect.js.map +1 -0
- package/lib/commonjs/hooks/useRookPermissions.js +223 -0
- package/lib/commonjs/hooks/useRookPermissions.js.map +1 -0
- package/lib/commonjs/hooks/useRookSamsungHealth.js +54 -0
- package/lib/commonjs/hooks/useRookSamsungHealth.js.map +1 -0
- package/lib/commonjs/hooks/useRookSync.js +148 -0
- package/lib/commonjs/hooks/useRookSync.js.map +1 -0
- package/lib/commonjs/hooks/useRookVariables.js +93 -0
- package/lib/commonjs/hooks/useRookVariables.js.map +1 -0
- package/lib/commonjs/index.js +121 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/modules/hook/useRookAutoSync.js +261 -0
- package/lib/commonjs/modules/hook/useRookAutoSync.js.map +1 -0
- package/lib/commonjs/modules/types/sendMessageBroadcast.js +2 -0
- package/lib/commonjs/modules/types/sendMessageBroadcast.js.map +1 -0
- package/lib/commonjs/modules/utils/errors.js +12 -0
- package/lib/commonjs/modules/utils/errors.js.map +1 -0
- package/lib/commonjs/types/ActivityEvent.js +6 -0
- package/lib/commonjs/types/ActivityEvent.js.map +1 -0
- package/lib/commonjs/types/AppleHealthNutritionEvent.js +77 -0
- package/lib/commonjs/types/AppleHealthNutritionEvent.js.map +1 -0
- package/lib/commonjs/types/AppleHealthPermissions.js +57 -0
- package/lib/commonjs/types/AppleHealthPermissions.js.map +1 -0
- package/lib/commonjs/types/AuthorizedSources.js +6 -0
- package/lib/commonjs/types/AuthorizedSources.js.map +1 -0
- package/lib/commonjs/types/BodySummary.js +6 -0
- package/lib/{module/types/Rook.js.map → commonjs/types/BodySummary.js.map} +1 -1
- package/lib/commonjs/types/DataSource.js +16 -0
- package/lib/commonjs/types/DataSource.js.map +1 -0
- package/lib/commonjs/types/DiagnosticState.js +2 -0
- package/lib/commonjs/types/DiagnosticState.js.map +1 -0
- package/lib/commonjs/types/HCMealData.js +65 -0
- package/lib/commonjs/types/HCMealData.js.map +1 -0
- package/lib/commonjs/types/HeartRateEvent.js +2 -0
- package/lib/commonjs/types/HeartRateEvent.js.map +1 -0
- package/lib/commonjs/types/PermissionsType.js +2 -0
- package/lib/commonjs/types/PermissionsType.js.map +1 -0
- package/lib/commonjs/types/PhysicalSummary.js +6 -0
- package/lib/commonjs/types/PhysicalSummary.js.map +1 -0
- package/lib/commonjs/types/SDKSources.js +13 -0
- package/lib/commonjs/types/SDKSources.js.map +1 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js +23 -0
- package/lib/commonjs/types/SamsungHealthPermissions.js.map +1 -0
- package/lib/commonjs/types/SleepSummary.js +6 -0
- package/lib/commonjs/types/SleepSummary.js.map +1 -0
- package/lib/commonjs/types/SummaryTypes.js +2 -0
- package/lib/commonjs/types/SummaryTypes.js.map +1 -0
- package/lib/commonjs/types/SyncTypes.js +33 -0
- package/lib/commonjs/types/SyncTypes.js.map +1 -0
- package/lib/commonjs/types/WriteNutrition.js +18 -0
- package/lib/commonjs/types/WriteNutrition.js.map +1 -0
- package/lib/commonjs/utils/getNativeModule.js +29 -0
- package/lib/commonjs/utils/getNativeModule.js.map +1 -0
- package/lib/commonjs/utils/getRookModule.js +28 -0
- package/lib/commonjs/utils/getRookModule.js.map +1 -0
- package/{src/utils/isModuleReady.ts → lib/commonjs/utils/isModuleReady.js} +10 -4
- package/lib/commonjs/utils/isModuleReady.js.map +1 -0
- package/lib/commonjs/utils/isRunningOnAndroid.js +15 -0
- package/lib/commonjs/utils/isRunningOnAndroid.js.map +1 -0
- package/lib/commonjs/utils/isRunningOniOS.js +15 -0
- package/lib/commonjs/utils/isRunningOniOS.js.map +1 -0
- package/lib/commonjs/utils/isValidDate.js +41 -0
- package/lib/commonjs/utils/isValidDate.js.map +1 -0
- package/lib/commonjs/utils/nativeModules.js +29 -0
- package/lib/commonjs/utils/nativeModules.js.map +1 -0
- package/lib/commonjs/utils/packageInfo.js +13 -0
- package/lib/commonjs/utils/packageInfo.js.map +1 -0
- package/lib/module/context/RookSyncGateContext.js +0 -2
- package/lib/module/context/RookSyncGateContext.js.map +1 -1
- package/lib/module/context/RookSyncGateProvider.js +31 -22
- package/lib/module/context/RookSyncGateProvider.js.map +1 -1
- package/lib/module/context/RookSyncGateReducer.js +12 -4
- package/lib/module/context/RookSyncGateReducer.js.map +1 -1
- package/lib/module/context/RookSyncGateTypes.js +0 -2
- package/lib/module/context/index.js +2 -0
- package/lib/module/context/index.js.map +1 -0
- package/lib/module/hooks/index.js +12 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useRookAPISources.js +16 -10
- package/lib/module/hooks/useRookAPISources.js.map +1 -1
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js +12 -11
- package/lib/module/hooks/useRookAndroidBackgroundSteps.js.map +1 -1
- package/lib/module/hooks/useRookAndroidStepCounter.js +48 -0
- package/lib/module/hooks/useRookAndroidStepCounter.js.map +1 -0
- package/lib/module/hooks/useRookAppleHealth.js +10 -9
- package/lib/module/hooks/useRookAppleHealth.js.map +1 -1
- package/lib/module/hooks/useRookConfiguration.js +34 -10
- package/lib/module/hooks/useRookConfiguration.js.map +1 -1
- package/lib/module/hooks/useRookData.js +45 -31
- package/lib/module/hooks/useRookData.js.map +1 -1
- package/lib/module/hooks/useRookHealthConnect.js +10 -9
- package/lib/module/hooks/useRookHealthConnect.js.map +1 -1
- package/lib/module/hooks/useRookPermissions.js +63 -28
- package/lib/module/hooks/useRookPermissions.js.map +1 -1
- package/lib/module/hooks/useRookSamsungHealth.js +20 -8
- package/lib/module/hooks/useRookSamsungHealth.js.map +1 -1
- package/lib/module/hooks/useRookSync.js +32 -23
- package/lib/module/hooks/useRookSync.js.map +1 -1
- package/lib/module/hooks/useRookVariables.js +37 -19
- package/lib/module/hooks/useRookVariables.js.map +1 -1
- package/lib/module/index.js +10 -18
- package/lib/module/index.js.map +1 -1
- package/lib/module/modules/hook/useRookAutoSync.js +40 -27
- package/lib/module/modules/hook/useRookAutoSync.js.map +1 -1
- package/lib/module/modules/types/sendMessageBroadcast.js +1 -1
- package/lib/module/modules/utils/errors.js +0 -2
- package/lib/module/modules/utils/errors.js.map +1 -1
- package/lib/module/types/ActivityEvent.js +0 -2
- package/lib/module/types/AppleHealthNutritionEvent.js +70 -0
- package/lib/module/types/AppleHealthNutritionEvent.js.map +1 -0
- package/lib/module/types/AppleHealthPermissions.js +0 -2
- package/lib/module/types/AppleHealthPermissions.js.map +1 -1
- package/lib/module/types/AuthorizedSources.js +0 -2
- package/lib/module/types/BodySummary.js +0 -2
- package/lib/module/types/DataSource.js +0 -2
- package/lib/module/types/DataSource.js.map +1 -1
- package/lib/module/types/DiagnosticState.js +2 -0
- package/lib/module/types/DiagnosticState.js.map +1 -0
- package/lib/module/types/HCMealData.js +59 -0
- package/lib/module/types/HCMealData.js.map +1 -0
- package/lib/module/types/HeartRateEvent.js +1 -1
- package/lib/module/types/PermissionsType.js +1 -1
- package/lib/module/types/PhysicalSummary.js +0 -2
- package/lib/module/types/SDKSources.js +0 -2
- package/lib/module/types/SDKSources.js.map +1 -1
- package/lib/module/types/SamsungHealthPermissions.js +0 -3
- package/lib/module/types/SamsungHealthPermissions.js.map +1 -1
- package/lib/module/types/SleepSummary.js +0 -2
- package/lib/module/types/SummaryTypes.js +1 -1
- package/lib/module/types/SyncTypes.js +0 -2
- package/lib/module/types/SyncTypes.js.map +1 -1
- package/lib/module/types/WriteNutrition.js +12 -0
- package/lib/module/types/WriteNutrition.js.map +1 -0
- package/lib/module/utils/getNativeModule.js +23 -0
- package/lib/module/utils/getNativeModule.js.map +1 -0
- package/lib/module/utils/getRookModule.js +22 -0
- package/lib/module/utils/getRookModule.js.map +1 -0
- package/lib/module/utils/isModuleReady.js +0 -2
- package/lib/module/utils/isModuleReady.js.map +1 -1
- package/lib/module/utils/isRunningOnAndroid.js +0 -2
- package/lib/module/utils/isRunningOnAndroid.js.map +1 -1
- package/lib/module/utils/isRunningOniOS.js +0 -2
- package/lib/module/utils/isRunningOniOS.js.map +1 -1
- package/lib/module/utils/isValidDate.js +20 -2
- package/lib/module/utils/isValidDate.js.map +1 -1
- package/lib/module/utils/nativeModules.js +23 -0
- package/lib/module/utils/nativeModules.js.map +1 -0
- package/lib/module/utils/packageInfo.js +7 -0
- package/lib/module/utils/packageInfo.js.map +1 -0
- package/lib/typescript/src/context/RookSyncGateContext.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateProvider.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateReducer.d.ts.map +1 -1
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts +14 -4
- package/lib/typescript/src/context/RookSyncGateTypes.d.ts.map +1 -1
- package/lib/typescript/src/context/index.d.ts +2 -0
- package/lib/typescript/src/context/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +12 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRookAPISources.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAndroidBackgroundSteps.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts +9 -0
- package/lib/typescript/src/hooks/useRookAndroidStepCounter.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useRookAppleHealth.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts +3 -1
- package/lib/typescript/src/hooks/useRookConfiguration.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookData.d.ts +2 -2
- package/lib/typescript/src/hooks/useRookData.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookHealthConnect.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookPermissions.d.ts +6 -2
- package/lib/typescript/src/hooks/useRookPermissions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts +6 -0
- package/lib/typescript/src/hooks/useRookSamsungHealth.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookSync.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRookVariables.d.ts +2 -0
- package/lib/typescript/src/hooks/useRookVariables.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +8 -17
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/modules/hook/useRookAutoSync.d.ts.map +1 -1
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts +76 -0
- package/lib/typescript/src/types/AppleHealthNutritionEvent.d.ts.map +1 -0
- package/lib/typescript/src/types/AuthorizedSources.d.ts +0 -11
- package/lib/typescript/src/types/AuthorizedSources.d.ts.map +1 -1
- package/lib/typescript/src/types/DiagnosticState.d.ts +13 -0
- package/lib/typescript/src/types/DiagnosticState.d.ts.map +1 -0
- package/lib/typescript/src/types/HCMealData.d.ts +60 -0
- package/lib/typescript/src/types/HCMealData.d.ts.map +1 -0
- package/lib/typescript/src/types/HeartRateEvent.d.ts +2 -2
- package/lib/typescript/src/types/HeartRateEvent.d.ts.map +1 -1
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts +0 -1
- package/lib/typescript/src/types/SamsungHealthPermissions.d.ts.map +1 -1
- package/lib/typescript/src/types/SyncTypes.d.ts +1 -5
- package/lib/typescript/src/types/SyncTypes.d.ts.map +1 -1
- package/lib/typescript/src/types/WriteNutrition.d.ts +61 -0
- package/lib/typescript/src/types/WriteNutrition.d.ts.map +1 -0
- package/lib/typescript/src/utils/getNativeModule.d.ts +10 -0
- package/lib/typescript/src/utils/getNativeModule.d.ts.map +1 -0
- package/lib/typescript/src/utils/getRookModule.d.ts +9 -0
- package/lib/typescript/src/utils/getRookModule.d.ts.map +1 -0
- package/lib/typescript/src/utils/isModuleReady.d.ts.map +1 -1
- package/lib/typescript/src/utils/isValidDate.d.ts +8 -0
- package/lib/typescript/src/utils/isValidDate.d.ts.map +1 -1
- package/lib/typescript/src/utils/nativeModules.d.ts +24 -0
- package/lib/typescript/src/utils/nativeModules.d.ts.map +1 -0
- package/lib/typescript/src/utils/packageInfo.d.ts +6 -0
- package/lib/typescript/src/utils/packageInfo.d.ts.map +1 -0
- package/package.json +98 -94
- package/react-native-rook-sdk.podspec +45 -0
- package/RNRookSdk.podspec +0 -22
- package/ios/Encodable.swift +0 -25
- package/ios/RookEntry.swift +0 -61
- package/ios/RookSdk-Bridging-Header.h +0 -12
- package/ios/boost-boost_privacy-Bridging-Header.h +0 -4
- package/lib/module/NativeRookSdk.js +0 -13
- package/lib/module/NativeRookSdk.js.map +0 -1
- package/lib/module/package.json +0 -1
- package/lib/module/types/Rook.js +0 -2
- package/lib/typescript/package.json +0 -1
- package/lib/typescript/src/NativeRookSdk.d.ts +0 -116
- package/lib/typescript/src/NativeRookSdk.d.ts.map +0 -1
- package/lib/typescript/src/types/Rook.d.ts +0 -9
- package/lib/typescript/src/types/Rook.d.ts.map +0 -1
- package/src/NativeRookSdk.ts +0 -274
- package/src/context/RookSyncGateProvider.tsx +0 -78
- package/src/context/RookSyncGateTypes.ts +0 -34
- package/src/hooks/useRookAndroidBackgroundSteps.ts +0 -81
- package/src/hooks/useRookAppleHealth.ts +0 -55
- package/src/hooks/useRookConfiguration.ts +0 -82
- package/src/hooks/useRookData.ts +0 -122
- package/src/hooks/useRookHealthConnect.ts +0 -59
- package/src/hooks/useRookPermissions.ts +0 -224
- package/src/hooks/useRookSamsungHealth.ts +0 -37
- package/src/hooks/useRookSync.ts +0 -157
- package/src/hooks/useRookVariables.ts +0 -77
- package/src/index.tsx +0 -28
- package/src/modules/hook/useRookAutoSync.ts +0 -305
- package/src/modules/types/sendMessageBroadcast.ts +0 -5
- package/src/modules/utils/errors.ts +0 -9
- package/src/types/ActivityEvent.ts +0 -159
- package/src/types/AppleHealthPermissions.ts +0 -49
- package/src/types/AuthorizedSources.ts +0 -33
- package/src/types/BodySummary.ts +0 -116
- package/src/types/DataSource.ts +0 -16
- package/src/types/HeartRateEvent.ts +0 -26
- package/src/types/PermissionsType.ts +0 -9
- package/src/types/PhysicalSummary.ts +0 -84
- package/src/types/Rook.ts +0 -8
- package/src/types/SDKSources.ts +0 -5
- package/src/types/SamsungHealthPermissions.ts +0 -16
- package/src/types/SleepSummary.ts +0 -66
- package/src/types/SummaryTypes.ts +0 -70
- package/src/types/SyncTypes.ts +0 -63
- package/src/utils/isRunningOnAndroid.ts +0 -10
- package/src/utils/isRunningOniOS.ts +0 -10
- package/src/utils/isValidDate.ts +0 -15
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//
|
|
2
|
+
// NutritionMapper.swift
|
|
3
|
+
// react-native-rook-sdk
|
|
4
|
+
//
|
|
5
|
+
// Created by Javier Villanueva on 24/02/26.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import RookSDK
|
|
10
|
+
|
|
11
|
+
class NutritionMapper {
|
|
12
|
+
|
|
13
|
+
static func mapToNutritionInsertionEvent(data: [String: Any]) -> NutritionInsertionEvent? {
|
|
14
|
+
// Helper for Date parsing
|
|
15
|
+
let dateFormatter = ISO8601DateFormatter()
|
|
16
|
+
guard let dateString = data["date"] as? String,
|
|
17
|
+
let date = dateFormatter.date(from: dateString),
|
|
18
|
+
let name = data["name"] as? String,
|
|
19
|
+
let quantityMap = data["quantity"] as? [String: Any],
|
|
20
|
+
let amount = quantityMap["amount"] as? Double,
|
|
21
|
+
let unit = quantityMap["unit"] as? Int else {
|
|
22
|
+
return nil
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Range check helper: [0.0, 100,000.0] for large values, [0.0, 100.0] for small
|
|
26
|
+
func validate(_ value: Any?, max: Double = 100000.0) -> Double? {
|
|
27
|
+
guard let val = value as? Double else { return nil }
|
|
28
|
+
return (val >= 0.0 && val <= max) ? val : nil
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// 1. Quantity
|
|
32
|
+
let quantity = NutritionInsertionEventQuantity(unit: unit, amount: amount)
|
|
33
|
+
|
|
34
|
+
// 2. Energy & Water
|
|
35
|
+
let energyData = data["energyWaterData"] as? [String: Any]
|
|
36
|
+
let energyRelated = NutritionInsertionEnergyWaterDataRelated(
|
|
37
|
+
dietaryKiloCaloriesEnergyConsumed: validate(energyData?["dietaryKiloCaloriesEnergyConsumed"]),
|
|
38
|
+
dietaryMilliLiterWater: validate(energyData?["dietaryMilliLiterWater"])
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
// 3. Carbohydrates
|
|
42
|
+
let carbData = data["carbohydratesData"] as? [String: Any]
|
|
43
|
+
let carbRelated = NutritionCarbohydratesDataRelated(
|
|
44
|
+
dietaryGramCarbohydrates: validate(carbData?["dietaryGramCarbohydrates"]),
|
|
45
|
+
dietaryGramFiber: validate(carbData?["dietaryGramFiber"]),
|
|
46
|
+
dietaryGramSugar: validate(carbData?["dietaryGramSugar"])
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
// 4. Fats
|
|
50
|
+
let fatData = data["fatsData"] as? [String: Any]
|
|
51
|
+
let fatRelated = NutritionFatsDataRelated(
|
|
52
|
+
dietaryGramFatTotal: validate(fatData?["dietaryGramFatTotal"]),
|
|
53
|
+
dietaryGramFatSaturated: validate(fatData?["dietaryGramFatSaturated"]),
|
|
54
|
+
dietaryGramFatMonounsaturated: validate(fatData?["dietaryGramFatMonounsaturated"]),
|
|
55
|
+
dietaryGramFatPolyunsaturated: validate(fatData?["dietaryGramFatPolyunsaturated"])
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
// 5. Protein
|
|
59
|
+
let proteinData = data["proteinData"] as? [String: Any]
|
|
60
|
+
let proteinRelated = NutritionProteinDataRelated(
|
|
61
|
+
dietaryGramProtein: validate(proteinData?["dietaryGramProtein"]),
|
|
62
|
+
dietaryMilliGramCholesterol: validate(proteinData?["dietaryMilliGramCholesterol"])
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
// 6. Vitamins (Using 100.0 as limit for safety, adjust if needed)
|
|
66
|
+
let vitData = data["vitaminsData"] as? [String: Any]
|
|
67
|
+
let vitRelated = NutritionVitaminsDataRelated(
|
|
68
|
+
dietaryMicroGramVitaminA: validate(vitData?["dietaryMicroGramVitaminA"]),
|
|
69
|
+
dietaryMilliGramVitaminB6: validate(vitData?["dietaryMilliGramVitaminB6"]),
|
|
70
|
+
dietaryMicroGramVitaminB12: validate(vitData?["dietaryMicroGramVitaminB12"]),
|
|
71
|
+
dietaryMilliGramVitaminC: validate(vitData?["dietaryMilliGramVitaminC"]),
|
|
72
|
+
dietaryMicroGramVitaminD: validate(vitData?["dietaryMicroGramVitaminD"]),
|
|
73
|
+
dietaryMilliGramVitaminE: validate(vitData?["dietaryMilliGramVitaminE"]),
|
|
74
|
+
dietaryMicroGramVitaminK: validate(vitData?["dietaryMicroGramVitaminK"]),
|
|
75
|
+
dietaryMilliGramThiamin: validate(vitData?["dietaryMilliGramThiamin"]),
|
|
76
|
+
dietaryMilliGramRiboflavin: validate(vitData?["dietaryMilliGramRiboflavin"]),
|
|
77
|
+
dietaryMilliGramNiacin: validate(vitData?["dietaryMilliGramNiacin"]),
|
|
78
|
+
dietaryMilliGramPantothenicAcid: validate(vitData?["dietaryMilliGramPantothenicAcid"]),
|
|
79
|
+
dietaryMicroGramFolate: validate(vitData?["dietaryMicroGramFolate"]),
|
|
80
|
+
dietaryMicroGramBiotin: validate(vitData?["dietaryMicroGramBiotin"])
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
// 7. Minerals
|
|
84
|
+
let minData = data["mineralData"] as? [String: Any]
|
|
85
|
+
let minRelated = NutritionMineralDataRelated(
|
|
86
|
+
dietaryMilliGramsCalcium: validate(minData?["dietaryMilliGramsCalcium"]),
|
|
87
|
+
dietaryMilliGramsChloride: validate(minData?["dietaryMilliGramsChloride"]),
|
|
88
|
+
dietaryMilliGramsChromium: validate(minData?["dietaryMilliGramsChromium"]),
|
|
89
|
+
dietaryMilliGramsCopper: validate(minData?["dietaryMilliGramsCopper"]),
|
|
90
|
+
dietaryMilliGramsIodine: validate(minData?["dietaryMilliGramsIodine"]),
|
|
91
|
+
dietaryMilliGramsIron: validate(minData?["dietaryMilliGramsIron"]),
|
|
92
|
+
dietaryMilliGramsMagnesium: validate(minData?["dietaryMilliGramsMagnesium"]),
|
|
93
|
+
dietaryMilliGramsManganese: validate(minData?["dietaryMilliGramsManganese"]),
|
|
94
|
+
dietaryMilliGramsMolybdenum: validate(minData?["dietaryMilliGramsMolybdenum"]),
|
|
95
|
+
dietaryMilliGramsPhosphorus: validate(minData?["dietaryMilliGramsPhosphorus"]),
|
|
96
|
+
dietaryMilliGramsPotassium: validate(minData?["dietaryMilliGramsPotassium"]),
|
|
97
|
+
dietaryMilliGramsSelenium: validate(minData?["dietaryMilliGramsSelenium"]),
|
|
98
|
+
dietaryMilliGramsSodium: validate(minData?["dietaryMilliGramsSodium"]),
|
|
99
|
+
dietaryMilliGramsZinc: validate(minData?["dietaryMilliGramsZinc"])
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
return NutritionInsertionEvent(
|
|
103
|
+
name: name,
|
|
104
|
+
quantity: quantity,
|
|
105
|
+
date: date,
|
|
106
|
+
nutritionInsertionEnergyWaterDataRelated: energyRelated,
|
|
107
|
+
nutritionCarbohydratesDataRelated: carbRelated,
|
|
108
|
+
nutritionFatsDataRelated: fatRelated,
|
|
109
|
+
nutritionProteinDataRelated: proteinRelated,
|
|
110
|
+
nutritionVitaminsDataRelated: vitRelated,
|
|
111
|
+
nutritionMineralDataRelated: minRelated
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
}
|
package/ios/RookBackground.swift
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
2
|
+
// RookBackground.swift
|
|
3
|
+
// Pods
|
|
4
4
|
//
|
|
5
|
-
// Created by Javier Villanueva on
|
|
5
|
+
// Created by Javier Villanueva on 03/12/25.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import RookSDK
|
|
9
|
-
import React
|
|
10
9
|
|
|
11
|
-
@
|
|
10
|
+
@objc(RookBackground)
|
|
11
|
+
public class RookBackground: NSObject {
|
|
12
12
|
|
|
13
|
+
@objc(enableBackGroundUpdates:reject:)
|
|
13
14
|
public func enableBackGroundUpdates(
|
|
14
15
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
15
16
|
) {
|
|
@@ -17,6 +18,7 @@ import React
|
|
|
17
18
|
resolve(true)
|
|
18
19
|
}
|
|
19
20
|
|
|
21
|
+
@objc(disableBackGroundUpdates:reject:)
|
|
20
22
|
public func disableBackGroundUpdates(
|
|
21
23
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
22
24
|
){
|
|
@@ -24,6 +26,7 @@ import React
|
|
|
24
26
|
resolve(true)
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
@objc(isBackgroundUpdatesEnabled:reject:)
|
|
27
30
|
public func isBackgroundUpdatesEnabled(
|
|
28
31
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
29
32
|
) {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <React/RCTBridgeModule.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(RookBackground, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(enableBackGroundUpdates: (RCTPromiseResolveBlock)resolve
|
|
7
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
8
|
+
|
|
9
|
+
RCT_EXTERN_METHOD(disableBackGroundUpdates: (RCTPromiseResolveBlock)resolve
|
|
10
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
11
|
+
|
|
12
|
+
RCT_EXTERN_METHOD(isBackgroundUpdatesEnabled: (RCTPromiseResolveBlock)resolve
|
|
13
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
14
|
+
|
|
15
|
+
@end
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
2
|
+
// RookConfiguration.swift
|
|
3
|
+
// Pods
|
|
4
4
|
//
|
|
5
|
-
// Created by Javier Villanueva on
|
|
5
|
+
// Created by Javier Villanueva on 03/12/25.
|
|
6
6
|
//
|
|
7
|
-
|
|
8
|
-
import React
|
|
9
7
|
import RookSDK
|
|
10
8
|
|
|
11
|
-
@
|
|
9
|
+
@objc(RookConfiguration)
|
|
10
|
+
public class RookConfiguration: NSObject {
|
|
11
|
+
|
|
12
12
|
lazy var userManager: UserManager = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
return UserManager()
|
|
14
|
+
}()
|
|
15
|
+
|
|
16
|
+
@objc(getUserID:reject:)
|
|
16
17
|
public func getUserID(
|
|
17
18
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
18
19
|
) {
|
|
@@ -29,14 +30,13 @@ import RookSDK
|
|
|
29
30
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
30
31
|
}
|
|
31
32
|
} else {
|
|
32
|
-
|
|
33
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
34
|
-
}
|
|
33
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
|
-
|
|
38
|
+
|
|
39
|
+
@objc(updateUserID:resolve:reject:)
|
|
40
40
|
public func updateUserID(
|
|
41
41
|
_ userID: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
42
42
|
){
|
|
@@ -55,14 +55,13 @@ import RookSDK
|
|
|
55
55
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
56
56
|
}
|
|
57
57
|
} else {
|
|
58
|
-
|
|
59
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
60
|
-
}
|
|
58
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
|
-
|
|
63
|
+
|
|
64
|
+
@objc(removeUserFromRook:reject:)
|
|
66
65
|
public func removeUserFromRook(
|
|
67
66
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
68
67
|
) {
|
|
@@ -80,14 +79,13 @@ import RookSDK
|
|
|
80
79
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
81
80
|
}
|
|
82
81
|
} else {
|
|
83
|
-
|
|
84
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
85
|
-
}
|
|
82
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
86
83
|
}
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
}
|
|
90
|
-
|
|
87
|
+
|
|
88
|
+
@objc(syncUserTimeZone:reject:)
|
|
91
89
|
public func syncUserTimeZone(
|
|
92
90
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
93
91
|
){
|
|
@@ -106,11 +104,23 @@ import RookSDK
|
|
|
106
104
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
107
105
|
}
|
|
108
106
|
} else {
|
|
109
|
-
|
|
110
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
111
|
-
}
|
|
107
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
112
108
|
}
|
|
113
109
|
}
|
|
114
110
|
}
|
|
115
111
|
}
|
|
112
|
+
|
|
113
|
+
@objc(getDiagnosticState:reject:)
|
|
114
|
+
public func getDiagnosticState(
|
|
115
|
+
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
116
|
+
){
|
|
117
|
+
Task {
|
|
118
|
+
var result = await RookConnectConfigurationManager.shared.getDiagnosticState()
|
|
119
|
+
let dic = EncodableSDKState(result).toDictionary()
|
|
120
|
+
|
|
121
|
+
DispatchQueue.main.async {
|
|
122
|
+
resolve(dic)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
116
126
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <React/RCTBridgeModule.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(RookConfiguration, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(getUserID: (RCTPromiseResolveBlock)resolve
|
|
7
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
8
|
+
|
|
9
|
+
RCT_EXTERN_METHOD(updateUserID: (NSString *) userID
|
|
10
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
11
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(removeUserFromRook: (RCTPromiseResolveBlock)resolve
|
|
14
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
15
|
+
|
|
16
|
+
RCT_EXTERN_METHOD(syncUserTimeZone: (RCTPromiseResolveBlock)resolve
|
|
17
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
18
|
+
|
|
19
|
+
RCT_EXTERN_METHOD(getDiagnosticState: (RCTPromiseResolveBlock)resolve
|
|
20
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
21
|
+
|
|
22
|
+
@end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RookExternalModule.m
|
|
3
|
+
// react-native-rook-sdk
|
|
4
|
+
//
|
|
5
|
+
// Created by Javier Villanueva on 10/09/25.
|
|
6
|
+
//
|
|
7
|
+
#import <Foundation/Foundation.h>
|
|
8
|
+
#import <React/RCTBridgeModule.h>
|
|
9
|
+
|
|
10
|
+
@interface RCT_EXTERN_MODULE(RookLocalData, NSObject)
|
|
11
|
+
|
|
12
|
+
RCT_EXTERN_METHOD(getAppleHealthSleepSummary: (NSString *) date
|
|
13
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
14
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
15
|
+
|
|
16
|
+
RCT_EXTERN_METHOD(getAppleHealthPhysicalSummary: (NSString *) date
|
|
17
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
18
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
19
|
+
|
|
20
|
+
RCT_EXTERN_METHOD(getAppleHealthBodySummary: (NSString *) date
|
|
21
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
22
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
23
|
+
|
|
24
|
+
RCT_EXTERN_METHOD(getAppleHealthActivityEvents: (NSString *) date
|
|
25
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
26
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
27
|
+
|
|
28
|
+
RCT_EXTERN_METHOD(writeAppleHealthMealData: (NSDictionary *) data
|
|
29
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
30
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
31
|
+
@end
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
2
|
+
// RookLocalData.swift
|
|
3
|
+
// react-native-rook-sdk
|
|
4
4
|
//
|
|
5
|
-
// Created by Javier Villanueva on
|
|
5
|
+
// Created by Javier Villanueva on 10/09/25.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import RookSDK
|
|
9
|
-
import React
|
|
10
9
|
|
|
11
|
-
@
|
|
10
|
+
@objc(RookLocalData)
|
|
11
|
+
public class RookLocalData: NSObject {
|
|
12
12
|
|
|
13
13
|
lazy var summaryManager: RookSummaryManager = {
|
|
14
14
|
return RookSummaryManager()
|
|
@@ -18,20 +18,23 @@ import React
|
|
|
18
18
|
return RookEventsManager()
|
|
19
19
|
}()
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
func parseStringToDate(_ input: String) -> Date? {
|
|
22
|
+
let dateFormatter = DateFormatter()
|
|
23
|
+
dateFormatter.dateFormat = "yyyy-MM-dd"
|
|
24
|
+
return dateFormatter.date(from: input)
|
|
25
|
+
}
|
|
24
26
|
|
|
27
|
+
@objc(getAppleHealthSleepSummary:resolve:reject:)
|
|
25
28
|
public func getAppleHealthSleepSummary(
|
|
26
29
|
_ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
27
30
|
) {
|
|
28
31
|
Task {
|
|
29
32
|
do {
|
|
30
|
-
guard let parsed
|
|
31
|
-
reject("
|
|
33
|
+
guard let parsed = parseStringToDate(date) else {
|
|
34
|
+
reject("AppleHealthGetSleepSummaryError", "Invalid date format", nil)
|
|
32
35
|
return
|
|
33
36
|
}
|
|
34
|
-
|
|
37
|
+
|
|
35
38
|
let sleepSummaries = try await summaryManager.getSleepSummary(date: parsed)
|
|
36
39
|
let dic = sleepSummaries.map { $0.toDictionary() }
|
|
37
40
|
|
|
@@ -44,20 +47,19 @@ import React
|
|
|
44
47
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
45
48
|
}
|
|
46
49
|
} else {
|
|
47
|
-
|
|
48
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
49
|
-
}
|
|
50
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
@objc(getAppleHealthPhysicalSummary:resolve:reject:)
|
|
55
57
|
public func getAppleHealthPhysicalSummary(
|
|
56
58
|
_ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
57
59
|
) {
|
|
58
60
|
Task {
|
|
59
61
|
do {
|
|
60
|
-
guard let parsed =
|
|
62
|
+
guard let parsed = parseStringToDate(date) else {
|
|
61
63
|
reject("AppleHealthGetPhysicalSummaryError", "Invalid date format", nil)
|
|
62
64
|
return
|
|
63
65
|
}
|
|
@@ -75,20 +77,19 @@ import React
|
|
|
75
77
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
76
78
|
}
|
|
77
79
|
} else {
|
|
78
|
-
|
|
79
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
80
|
-
}
|
|
80
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
@objc(getAppleHealthBodySummary:resolve:reject:)
|
|
86
87
|
public func getAppleHealthBodySummary(
|
|
87
88
|
_ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
88
89
|
) {
|
|
89
90
|
Task {
|
|
90
91
|
do {
|
|
91
|
-
guard let parsed =
|
|
92
|
+
guard let parsed = parseStringToDate(date) else {
|
|
92
93
|
reject("AppleHealthGetBodySummaryError", "Invalid date format", nil)
|
|
93
94
|
return
|
|
94
95
|
}
|
|
@@ -105,20 +106,19 @@ import React
|
|
|
105
106
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
106
107
|
}
|
|
107
108
|
} else {
|
|
108
|
-
|
|
109
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
110
|
-
}
|
|
109
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
}
|
|
114
113
|
}
|
|
115
114
|
|
|
115
|
+
@objc(getAppleHealthActivityEvents:resolve:reject:)
|
|
116
116
|
public func getAppleHealthActivityEvents(
|
|
117
117
|
_ date: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
118
118
|
) {
|
|
119
119
|
Task {
|
|
120
120
|
do {
|
|
121
|
-
guard let parsed =
|
|
121
|
+
guard let parsed = parseStringToDate(date) else {
|
|
122
122
|
reject("AppleHealthGetActivityEventsError", "Invalid date format", nil)
|
|
123
123
|
return
|
|
124
124
|
}
|
|
@@ -136,35 +136,57 @@ import React
|
|
|
136
136
|
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
137
137
|
}
|
|
138
138
|
} else {
|
|
139
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@objc(writeAppleHealthMealData:resolve:reject:)
|
|
146
|
+
public func writeAppleHealthMealData(
|
|
147
|
+
_ data: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
148
|
+
){
|
|
149
|
+
guard let event = NutritionMapper.mapToNutritionInsertionEvent(data: data as! [String : Any]) else {
|
|
150
|
+
reject("1001", "Could not parse nutrition data", nil)
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
Task {
|
|
155
|
+
do {
|
|
156
|
+
|
|
157
|
+
let result = try await eventManager.writeNutritionEvent(event: event)
|
|
158
|
+
DispatchQueue.main.async {
|
|
159
|
+
resolve(result)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
} catch {
|
|
163
|
+
if let rookError: RookError = error as? RookError {
|
|
139
164
|
DispatchQueue.main.async {
|
|
140
|
-
reject(
|
|
165
|
+
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
141
166
|
}
|
|
167
|
+
} else {
|
|
168
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
142
169
|
}
|
|
143
170
|
}
|
|
144
171
|
}
|
|
145
172
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
extension Encodable {
|
|
176
|
+
func toDictionary() -> [String: Any] {
|
|
177
|
+
let encoder = JSONEncoder()
|
|
178
|
+
|
|
179
|
+
let dateFormatter = DateFormatter()
|
|
180
|
+
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
|
|
181
|
+
|
|
182
|
+
encoder.dateEncodingStrategy = .formatted(dateFormatter)
|
|
183
|
+
|
|
184
|
+
guard let data = try? encoder.encode(self),
|
|
185
|
+
let dictionary = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any]
|
|
186
|
+
else {
|
|
187
|
+
return [:]
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return dictionary
|
|
191
|
+
}
|
|
170
192
|
}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
//
|
|
2
2
|
// RookPermissions.swift
|
|
3
|
-
//
|
|
3
|
+
// react-native-rook-sdk
|
|
4
4
|
//
|
|
5
|
-
// Created by Javier Villanueva on
|
|
5
|
+
// Created by Javier Villanueva on 03/12/25.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
-
import React
|
|
9
8
|
import RookSDK
|
|
10
9
|
|
|
11
|
-
@
|
|
10
|
+
@objc(RookPermissions)
|
|
11
|
+
public class RookPermissions: NSObject {
|
|
12
|
+
|
|
12
13
|
lazy var permissionsManager: RookConnectPermissionsManager = {
|
|
13
14
|
return RookConnectPermissionsManager()
|
|
14
15
|
}()
|
|
15
16
|
|
|
17
|
+
@objc(checkPermissionsStatus:resolve:reject:)
|
|
16
18
|
public func checkPermissionsStatus(
|
|
17
19
|
_ type: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
18
20
|
) {
|
|
@@ -37,6 +39,7 @@ import RookSDK
|
|
|
37
39
|
}
|
|
38
40
|
}
|
|
39
41
|
|
|
42
|
+
@objc(requestAppleHealthPermissions:resolve:reject:)
|
|
40
43
|
public func requestAppleHealthPermissions(
|
|
41
44
|
_ permissions: [String]?, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
42
45
|
) {
|
|
@@ -61,7 +64,32 @@ import RookSDK
|
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
|
-
|
|
67
|
+
|
|
68
|
+
@objc(requestWriteNutritionPermission:reject:)
|
|
69
|
+
public func requestWriteNutritionPermission(
|
|
70
|
+
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
71
|
+
) {
|
|
72
|
+
Task {
|
|
73
|
+
do {
|
|
74
|
+
|
|
75
|
+
let result = try await permissionsManager.requestDietaryWritePermissions()
|
|
76
|
+
|
|
77
|
+
DispatchQueue.main.async {
|
|
78
|
+
resolve(result)
|
|
79
|
+
}
|
|
80
|
+
} catch {
|
|
81
|
+
if let rookError: RookError = error as? RookError {
|
|
82
|
+
DispatchQueue.main.async {
|
|
83
|
+
reject(String(rookError.code), rookError.errorDescription, error as NSError)
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
reject("1001", "An error ocurred with SDK try again", error as NSError)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@objc(openAppleHealthSettings:reject:)
|
|
65
93
|
public func openAppleHealthSettings(
|
|
66
94
|
_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock
|
|
67
95
|
){
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <React/RCTBridgeModule.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(RookPermissions, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(checkPermissionsStatus: (NSString *) type
|
|
7
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
8
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
9
|
+
|
|
10
|
+
RCT_EXTERN_METHOD(requestAppleHealthPermissions: (NSArray<NSString *>) type
|
|
11
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
12
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
13
|
+
|
|
14
|
+
RCT_EXTERN_METHOD(requestWriteNutritionPermission: (RCTPromiseResolveBlock)resolve
|
|
15
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
16
|
+
|
|
17
|
+
RCT_EXTERN_METHOD(openAppleHealthSettings: (RCTPromiseResolveBlock)resolve
|
|
18
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
19
|
+
|
|
20
|
+
@end
|
package/ios/RookSdk.h
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
+
#import <React/RCTEventEmitter.h>
|
|
1
2
|
#import <React/RCTBridgeModule.h>
|
|
2
|
-
#import <React/RCTInitializing.h>
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
#import <RookSdkSpec/RookSdkSpec.h>
|
|
6
|
-
#endif
|
|
7
|
-
|
|
8
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
9
|
-
|
|
10
|
-
// NEW ARCHITECTURE: Inherit from the generated Base class
|
|
11
|
-
@interface RNRookSdk : NativeRookSdkSpecBase <NativeRookSdkSpec, RCTInitializing>
|
|
12
|
-
#else
|
|
13
|
-
|
|
14
|
-
// OLD ARCHITECTURE: Inherit from NSObject and conform to RCTBridgeModule
|
|
15
|
-
@interface RNRookSdk : NSObject <RCTBridgeModule, RCTInitializing>
|
|
16
|
-
#endif
|
|
4
|
+
@interface RookSdk : RCTEventEmitter <RCTBridgeModule>
|
|
17
5
|
|
|
18
6
|
@end
|