Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 70 additions & 66 deletions Constants/Permissions.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,69 +4,73 @@
* @type {Object}
*/
export const Permissions = {
ActiveEnergyBurned: "ActiveEnergyBurned",
AppleExerciseTime: "AppleExerciseTime",
BasalEnergyBurned: "BasalEnergyBurned",
BiologicalSex: "BiologicalSex",
BloodGlucose: "BloodGlucose",
BloodPressureDiastolic: "BloodPressureDiastolic",
BloodPressureSystolic: "BloodPressureSystolic",
BodyFatPercentage: "BodyFatPercentage",
BodyMass: "BodyMass",
BodyMassIndex: "BodyMassIndex",
BodyTemperature: "BodyTemperature",
DateOfBirth: "DateOfBirth",
Biotin: "Biotin",
Caffeine: "Caffeine",
Calcium: "Calcium",
Carbohydrates: "Carbohydrates",
Chloride: "Chloride",
Cholesterol: "Cholesterol",
Copper: "Copper",
EnergyConsumed: "EnergyConsumed",
FatMonounsaturated: "FatMonounsaturated",
FatPolyunsaturated: "FatPolyunsaturated",
FatSaturated: "FatSaturated",
FatTotal: "FatTotal",
Fiber: "Fiber",
Folate: "Folate",
Iodine: "Iodine",
Iron: "Iron",
Magnesium: "Magnesium",
Manganese: "Manganese",
Molybdenum: "Molybdenum",
Niacin: "Niacin",
PantothenicAcid: "PantothenicAcid",
Phosphorus: "Phosphorus",
Potassium: "Potassium",
Protein: "Protein",
Riboflavin: "Riboflavin",
Selenium: "Selenium",
Sodium: "Sodium",
Sugar: "Sugar",
Thiamin: "Thiamin",
VitaminA: "VitaminA",
VitaminB12: "VitaminB12",
VitaminB6: "VitaminB6",
VitaminC: "VitaminC",
VitaminD: "VitaminD",
VitaminE: "VitaminE",
VitaminK: "VitaminK",
Zinc: "Zinc",
Water: "Water",
DistanceCycling: "DistanceCycling",
DistanceSwimming: "DistanceSwimming",
DistanceWalkingRunning: "DistanceWalkingRunning",
FlightsClimbed: "FlightsClimbed",
HeartRate: "HeartRate",
Height: "Height",
LeanBodyMass: "LeanBodyMass",
MindfulSession: "MindfulSession",
NikeFuel: "NikeFuel",
RespiratoryRate: "RespiratoryRate",
SleepAnalysis: "SleepAnalysis",
StepCount: "StepCount",
Steps: "Steps",
Weight: "Weight",
Workout: "Workout"
}
ActiveEnergyBurned: 'ActiveEnergyBurned',
AppleExerciseTime: 'AppleExerciseTime',
BasalBodyTemperature: 'BasalBodyTemperature',
BasalEnergyBurned: 'BasalEnergyBurned',
BiologicalSex: 'BiologicalSex',
Biotin: 'Biotin',
BloodGlucose: 'BloodGlucose',
BloodPressureDiastolic: 'BloodPressureDiastolic',
BloodPressureSystolic: 'BloodPressureSystolic',
BodyFatPercentage: 'BodyFatPercentage',
BodyMass: 'BodyMass',
BodyMassIndex: 'BodyMassIndex',
BodyTemperature: 'BodyTemperature',
Caffeine: 'Caffeine',
Calcium: 'Calcium',
Carbohydrates: 'Carbohydrates',
Chloride: 'Chloride',
Cholesterol: 'Cholesterol',
Copper: 'Copper',
DateOfBirth: 'DateOfBirth',
DistanceCycling: 'DistanceCycling',
DistanceSwimming: 'DistanceSwimming',
DistanceWalkingRunning: 'DistanceWalkingRunning',
EnergyConsumed: 'EnergyConsumed',
FatMonounsaturated: 'FatMonounsaturated',
FatPolyunsaturated: 'FatPolyunsaturated',
FatSaturated: 'FatSaturated',
FatTotal: 'FatTotal',
Fiber: 'Fiber',
FlightsClimbed: 'FlightsClimbed',
Folate: 'Folate',
HeartRate: 'HeartRate',
Height: 'Height',
Iodine: 'Iodine',
Iron: 'Iron',
LeanBodyMass: 'LeanBodyMass',
Magnesium: 'Magnesium',
Manganese: 'Manganese',
MenstruationFlow: 'MenstruationFlow',
MindfulSession: 'MindfulSession',
Molybdenum: 'Molybdenum',
Niacin: 'Niacin',
NikeFuel: 'NikeFuel',
OvulationTestResult: 'OvulationTestResult',
PantothenicAcid: 'PantothenicAcid',
Phosphorus: 'Phosphorus',
Potassium: 'Potassium',
Protein: 'Protein',
RespiratoryRate: 'RespiratoryRate',
Riboflavin: 'Riboflavin',
Selenium: 'Selenium',
SexualActivity: 'SexualActivity',
SleepAnalysis: 'SleepAnalysis',
Sodium: 'Sodium',
StepCount: 'StepCount',
Steps: 'Steps',
Sugar: 'Sugar',
Thiamin: 'Thiamin',
VitaminA: 'VitaminA',
VitaminB12: 'VitaminB12',
VitaminB6: 'VitaminB6',
VitaminC: 'VitaminC',
VitaminD: 'VitaminD',
VitaminE: 'VitaminE',
VitaminK: 'VitaminK',
Water: 'Water',
Weight: 'Weight',
Workout: 'Workout',
Zinc: 'Zinc'
};
12 changes: 12 additions & 0 deletions RCTAppleHealthKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
61232F931E303758000A5026 /* RCTAppleHealthKit+Methods_Mindfulness.m in Sources */ = {isa = PBXBuildFile; fileRef = 61232F921E303758000A5026 /* RCTAppleHealthKit+Methods_Mindfulness.m */; };
64C42D4A1D351A8800A0A8F7 /* RCTAppleHealthKit+Methods_Vitals.m in Sources */ = {isa = PBXBuildFile; fileRef = 64C42D491D351A8800A0A8F7 /* RCTAppleHealthKit+Methods_Vitals.m */; };
64E0E73F1D37947B00EAB905 /* RCTAppleHealthKit+Methods_Results.m in Sources */ = {isa = PBXBuildFile; fileRef = 64E0E73E1D37947B00EAB905 /* RCTAppleHealthKit+Methods_Results.m */; };
B790AE8A22E5CCDE00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.m in Sources */ = {isa = PBXBuildFile; fileRef = B790AE8922E5CCDD00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.m */; };
B79BEDD622E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.m in Sources */ = {isa = PBXBuildFile; fileRef = B79BEDD422E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.m */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand Down Expand Up @@ -61,6 +63,10 @@
64C42D491D351A8800A0A8F7 /* RCTAppleHealthKit+Methods_Vitals.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Methods_Vitals.m"; sourceTree = "<group>"; };
64E0E73D1D37947B00EAB905 /* RCTAppleHealthKit+Methods_Results.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+Methods_Results.h"; sourceTree = "<group>"; };
64E0E73E1D37947B00EAB905 /* RCTAppleHealthKit+Methods_Results.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Methods_Results.m"; sourceTree = "<group>"; };
B790AE8822E5CCDD00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+Methods_ReproductiveHealth.h"; sourceTree = "<group>"; };
B790AE8922E5CCDD00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Methods_ReproductiveHealth.m"; sourceTree = "<group>"; };
B79BEDD422E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Methods_Dietary.m"; sourceTree = "<group>"; };
B79BEDD522E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+Methods_Dietary.h"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -93,6 +99,10 @@
3774C88F1D2092F20000B3F3 /* RCTAppleHealthKit */ = {
isa = PBXGroup;
children = (
B790AE8822E5CCDD00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.h */,
B790AE8922E5CCDD00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.m */,
B79BEDD522E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.h */,
B79BEDD422E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.m */,
58C81E6E1F84F6970005DD48 /* RCTAppleHealthKit+Methods_Activity.h */,
58C81E6D1F84F6970005DD48 /* RCTAppleHealthKit+Methods_Activity.m */,
61232F911E303758000A5026 /* RCTAppleHealthKit+Methods_Mindfulness.h */,
Expand Down Expand Up @@ -180,8 +190,10 @@
3774C89B1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m in Sources */,
3774C8A11D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m in Sources */,
37837E7D1DCFE270000201A0 /* RCTAppleHealthKit+Methods_Sleep.m in Sources */,
B790AE8A22E5CCDE00F333FF /* RCTAppleHealthKit+Methods_ReproductiveHealth.m in Sources */,
3774C8D41D20C6390000B3F3 /* RCTAppleHealthKit+Methods_Body.m in Sources */,
61232F931E303758000A5026 /* RCTAppleHealthKit+Methods_Mindfulness.m in Sources */,
B79BEDD622E5AAFA008B6A34 /* RCTAppleHealthKit+Methods_Dietary.m in Sources */,
64E0E73F1D37947B00EAB905 /* RCTAppleHealthKit+Methods_Results.m in Sources */,
64C42D4A1D351A8800A0A8F7 /* RCTAppleHealthKit+Methods_Vitals.m in Sources */,
3774C8931D2092F20000B3F3 /* RCTAppleHealthKit.m in Sources */,
Expand Down
10 changes: 10 additions & 0 deletions RCTAppleHealthKit/RCTAppleHealthKit+Methods_ReproductiveHealth.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#import "RCTAppleHealthKit.h"

@interface RCTAppleHealthKit (Methods_Vitals)

- (void)reproductiveHealth_getBasalBodyTemperatureSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)reproductiveHealth_getMenstruationFlowSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)reproductiveHealth_getOvulationTestResultSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;
- (void)reproductiveHealth_getSexualActivitySamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback;

@end
130 changes: 130 additions & 0 deletions RCTAppleHealthKit/RCTAppleHealthKit+Methods_ReproductiveHealth.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
#import "RCTAppleHealthKit+Methods_ReproductiveHealth.h"
#import "RCTAppleHealthKit+Queries.h"
#import "RCTAppleHealthKit+Utils.h"

@implementation RCTAppleHealthKit (Methods_Sleep)

- (void)reproductiveHealth_getBasalBodyTemperatureSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit degreeCelsiusUnit]];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];

if (startDate == nil) {
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}

HKQuantityType *sampleType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBasalBodyTemperature];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

[self fetchQuantitySamplesOfType:sampleType
unit:unit
predicate:predicate
ascending:ascending
limit:HKObjectQueryNoLimit
completion:^(NSArray *results, NSError *error) {
if(results){
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"error getting basal body temperature samples: %@", error);
callback(@[RCTMakeError(@"error getting basal body temperature samples", nil, nil)]);
return;
}
}];

}

- (void)reproductiveHealth_getMenstruationFlowSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit];

if (startDate == nil) {
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}

NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

[self fetchMenstruationFlowSamples:predicate
ascending:ascending
limit:limit
completion:^(NSArray *results, NSError *error) {
if (results) {
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"Error getting menstruation flow samples: %@", error);
callback(@[RCTMakeError(@"Error getting menstruation flow samples", error, nil)]);
return;
}
}];

}

- (void)reproductiveHealth_getOvulationTestResultSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit];

if (startDate == nil) {
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}

NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

[self fetchOvulationTestResultSamples:predicate
ascending:ascending
limit:limit
completion:^(NSArray *results, NSError *error) {
if (results) {
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"Error getting ovulation test result samples: %@", error);
callback(@[RCTMakeError(@"Error getting ovulation test result samples", error, nil)]);
return;
}
}];

}

- (void)reproductiveHealth_getSexualActivitySamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback
{
BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false];
NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]];
NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil];
NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit];

if (startDate == nil) {
callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]);
return;
}

NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

[self fetchSexualActivitySamples:predicate
ascending:ascending
limit:limit
completion:^(NSArray *results, NSError *error) {
if (results) {
callback(@[[NSNull null], results]);
return;
} else {
NSLog(@"Error getting sexual activity samples: %@", error);
callback(@[RCTMakeError(@"Error getting sexual activity samples", error, nil)]);
return;
}
}];

}

@end
Loading