diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h index a5b95085525cda6d88e578d68e57d760544e95b8..a1653a2ec2e5e7eb1d9d1bd587f81f36b516a2be 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h @@ -38,4 +38,10 @@ limit:(NSUInteger)lim completion:(void (^)(NSArray *, NSError *))completionHandler; + + +- (void)fetchSleepCategorySamplesForPredicate:(NSPredicate *)predicate + limit:(NSUInteger)lim + completion:(void (^)(NSArray *, NSError *))completion; + @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m index 7b8613442b5bdad140c774294eda9100157816fe..d29ca8660d6aa9cca63315f79a1591b9272c241a 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m @@ -106,6 +106,102 @@ } + + + + + + + +- (void)fetchSleepCategorySamplesForPredicate:(NSPredicate *)predicate + limit:(NSUInteger)lim + completion:(void (^)(NSArray *, NSError *))completion { + + + NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate + ascending:false]; + + + // declare the block + void (^handlerBlock)(HKSampleQuery *query, NSArray *results, NSError *error); + // create and assign the block + handlerBlock = ^(HKSampleQuery *query, NSArray *results, NSError *error) { + if (!results) { + if (completion) { + completion(nil, error); + } + return; + } + + if (completion) { + NSMutableArray *data = [NSMutableArray arrayWithCapacity:1]; + + dispatch_async(dispatch_get_main_queue(), ^{ + + for (HKCategorySample *sample in results) { + + HKCategoryType *catType = sample.categoryType; + NSInteger *val = sample.value; + + // HKQuantity *quantity = sample.quantity; + // double value = [quantity doubleValueForUnit:unit]; + + NSString *startDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.startDate]; + NSString *endDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.endDate]; + + NSDictionary *elem = @{ + @"value" : @(( (float) *val )), + @"catType" : catType.identifier, + @"startDate" : startDateString, + @"endDate" : endDateString, + }; + + [data addObject:elem]; + } + + completion(data, error); + }); + } + }; + + // HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType + // predicate:predicate + // limit:lim + // sortDescriptors:@[timeSortDescriptor] + // resultsHandler:handlerBlock]; + + HKCategoryType *categoryType = + [HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis]; + + // HKCategorySample *categorySample = + // [HKCategorySample categorySampleWithType:categoryType + // value:value + // startDate:startDate + // endDate:endDate]; + + + HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:categoryType + predicate:predicate + limit:lim + sortDescriptors:@[timeSortDescriptor] + resultsHandler:handlerBlock]; + + + [self.healthStore executeQuery:query]; +} + + + + + + + + + + + + + - (void)fetchCorrelationSamplesOfType:(HKQuantityType *)quantityType unit:(HKUnit *)unit predicate:(NSPredicate *)predicate