From 909d2e53d0714dc8d977c8b70215c338cf8ce6fc Mon Sep 17 00:00:00 2001 From: Daniele Volpi Date: Thu, 14 Jul 2016 12:17:43 +0200 Subject: [PATCH] added getBloodGlucoseSamples method and types mmol/L and mg/dL --- .../RCTAppleHealthKit+Methods_Results.m | 32 +++++++++++++++++++ RCTAppleHealthKit/RCTAppleHealthKit+Utils.m | 6 ++++ RCTAppleHealthKit/RCTAppleHealthKit.m | 6 ++++ constants.js | 2 ++ 4 files changed, 46 insertions(+) diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Results.m index d2e2c6a..43a5e85 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 cd7a5b6..2b51927 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 796c0a5..f016e75 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 b36f13f..81fafa7 100644 --- a/constants.js +++ b/constants.js @@ -47,6 +47,8 @@ const UNITS = { fahrenheit: 'fahrenheit', celsius: 'celsius', mmhg: 'mmhg', + mmolPerL: 'mmolPerL', + mgPerL: 'mgPerL', }; -- 2.26.2