diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m index d2e2c6a708f786a4701f4df7045ef3fa28ce961d..43a5e85c7ff5e6cf0a9b23b653de56079501a22c 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m @@ -4,7 +4,39 @@ @implementation RCTAppleHealthKit (Methods_Results) +- (void)results_getBloodGlucoseSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback +{ + HKQuantityType *bloodGlucoseType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodGlucose]; + HKUnit *mmoLPerL = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]] + + HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:mmoLPerL]; + NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit]; + BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false]; + NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil]; + NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]]; + if(startDate == nil){ + callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]); + return; + } + NSPredicate * predicate = [RCTAppleHealthKit predicateForSamplesBetweenDates:startDate endDate:endDate]; + + [self fetchQuantitySamplesOfType:bloodGlucoseType + unit:unit + predicate:predicate + ascending:ascending + limit:limit + completion:^(NSArray *results, NSError *error) { + if(results){ + callback(@[[NSNull null], results]); + return; + } else { + NSLog(@"error getting blood glucose samples: %@", error); + callback(@[RCTMakeError(@"error getting blood glucose samples", nil, nil)]); + return; + } + }]; +} @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m b/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m index cd7a5b6e5f0fc70ebc22354cd049423fb1d29ac1..2b51927c13a04bb4b9d1a83fbdb0f0a4dc20c33e 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m @@ -240,6 +240,12 @@ if([unitString isEqualToString:@"mmhg"]){ theUnit = [HKUnit millimeterOfMercuryUnit]; } + if([unitString isEqualToString:@"mmolPerL"]){ + theUnit = [[HKUnit moleUnitWithMetricPrefix:HKMetricPrefixMilli molarMass:HKUnitMolarMassBloodGlucose] unitDividedByUnit:[HKUnit literUnit]]; + } + if([unitString isEqualToString:@"mgPerL"]){ + theUnit = [HKUnit unitFromString:@"mg/dL"]; + } if(theUnit == nil){ theUnit = defaultValue; diff --git a/RCTAppleHealthKit/RCTAppleHealthKit.m b/RCTAppleHealthKit/RCTAppleHealthKit.m index 796c0a5c2ff6d872ed966fff59865721fa3bf328..f016e75b7f0045f07e3f40603024b1e8b498131c 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit.m @@ -15,6 +15,7 @@ #import "RCTAppleHealthKit+Methods_Fitness.h" #import "RCTAppleHealthKit+Methods_Characteristic.h" #import "RCTAppleHealthKit+Methods_Vitals.h" +#import "RCTAppleHealthKit+Methods_Results.h" @implementation RCTAppleHealthKit @@ -155,6 +156,11 @@ RCT_EXPORT_METHOD(getRespiratoryRateSamples:(NSDictionary *)input callback:(RCTR [self vitals_getRespiratoryRateSamples:input callback:callback]; } +RCT_EXPORT_METHOD(getBloodGlucoseSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) +{ + [self results_getBloodGlucoseSamples:input callback:callback]; +} + RCT_EXPORT_METHOD(getInfo:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) { diff --git a/constants.js b/constants.js index b36f13f27d991769114d417190687ed64c5518a1..81fafa7f4c53ee3f03b48a346c9cc19691078681 100644 --- a/constants.js +++ b/constants.js @@ -47,6 +47,8 @@ const UNITS = { fahrenheit: 'fahrenheit', celsius: 'celsius', mmhg: 'mmhg', + mmolPerL: 'mmolPerL', + mgPerL: 'mgPerL', };