@kingstinct/react-native-healthkit
Version:
React Native bindings for HealthKit
282 lines (265 loc) • 10.9 kB
text/typescript
import { Platform } from 'react-native'
import useHealthkitAuthorization from './hooks/useHealthkitAuthorization'
import { useIsHealthDataAvailable } from './hooks/useIsHealthDataAvailable'
import useMostRecentCategorySample from './hooks/useMostRecentCategorySample'
import useMostRecentQuantitySample from './hooks/useMostRecentQuantitySample'
import useMostRecentWorkout from './hooks/useMostRecentWorkout'
import useSources from './hooks/useSources'
import useStatisticsForQuantity from './hooks/useStatisticsForQuantity'
import useSubscribeToCategorySamples from './hooks/useSubscribeToCategorySamples'
import useSubscribeToChanges from './hooks/useSubscribeToChanges'
import useSubscribeToQuantitySamples from './hooks/useSubscribeToQuantitySamples'
import {
CategoryTypes,
Characteristics,
Core,
CorrelationTypes,
Electrocardiograms,
HeartbeatSeries,
Medication,
QuantityTypes,
StateOfMind,
Workouts,
} from './modules'
import type { QuantityTypeIdentifier } from './types/QuantityTypeIdentifier'
import getMostRecentCategorySample from './utils/getMostRecentCategorySample'
import getMostRecentQuantitySample from './utils/getMostRecentQuantitySample'
import getMostRecentWorkout from './utils/getMostRecentWorkout'
import getPreferredUnit from './utils/getPreferredUnit'
import { subscribeToCategorySamples } from './utils/subscribeToCategorySamples'
import { subscribeToChanges } from './utils/subscribeToChanges'
import { subscribeToQuantitySamples } from './utils/subscribeToQuantitySamples'
export * from './types'
const currentMajorVersionIOS =
Platform.OS === 'ios' ? Number.parseInt(Platform.Version, 10) : 0
/**
* Quantity types that are not available before iOS 17
*/
type QuantityTypesIOS17Plus =
| 'HKQuantityTypeIdentifierCyclingCadence'
| 'HKQuantityTypeIdentifierCyclingFunctionalThresholdPower'
| 'HKQuantityTypeIdentifierCyclingPower'
| 'HKQuantityTypeIdentifierCyclingSpeed'
| 'HKQuantityTypeIdentifierPhysicalEffort'
| 'HKQuantityTypeIdentifierTimeInDaylight'
/**
* Available quantity types for iOS versions before iOS 17
*/
export type AvailableQuantityTypesBeforeIOS17 = Exclude<
QuantityTypeIdentifier,
QuantityTypesIOS17Plus
>
export {
getMostRecentCategorySample,
getMostRecentQuantitySample,
getMostRecentWorkout,
getPreferredUnit,
subscribeToCategorySamples,
subscribeToChanges,
subscribeToQuantitySamples,
useHealthkitAuthorization,
useIsHealthDataAvailable,
useMostRecentCategorySample,
useMostRecentQuantitySample,
useMostRecentWorkout,
useSources,
useStatisticsForQuantity,
useSubscribeToCategorySamples,
useSubscribeToChanges,
useSubscribeToQuantitySamples,
}
/**
* Available quantity types for iOS 17 and later (all quantity types)
*/
export type AvailableQuantityTypesIOS17Plus = QuantityTypeIdentifier
/**
* Get available quantity types based on iOS version
* @param majorVersionIOS - iOS major version number (defaults to current iOS version)
* @returns Available quantity types for the given iOS version
*/
export type AvailableQuantityTypes<
T extends number = typeof currentMajorVersionIOS,
> = T extends 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25
? AvailableQuantityTypesIOS17Plus
: AvailableQuantityTypesBeforeIOS17
// Named exports - all functions bound to their respective modules
export const authorizationStatusFor = Core.authorizationStatusFor.bind(Core)
export const requestPerObjectReadAuthorization =
Core.requestPerObjectReadAuthorization.bind(Core)
export const disableAllBackgroundDelivery =
Core.disableAllBackgroundDelivery.bind(Core)
export const disableBackgroundDelivery =
Core.disableBackgroundDelivery.bind(Core)
export const enableBackgroundDelivery = Core.enableBackgroundDelivery.bind(Core)
export const getBiologicalSex =
Characteristics.getBiologicalSex.bind(Characteristics)
export const getBloodType = Characteristics.getBloodType.bind(Characteristics)
export const getDateOfBirth =
Characteristics.getDateOfBirth.bind(Characteristics)
export const getFitzpatrickSkinType =
Characteristics.getFitzpatrickSkinType.bind(Characteristics)
export const getPreferredUnits = Core.getPreferredUnits.bind(Core)
export const getRequestStatusForAuthorization =
Core.getRequestStatusForAuthorization.bind(Core)
export const getWheelchairUse =
Characteristics.getWheelchairUse.bind(Characteristics)
export const isHealthDataAvailable = Core.isHealthDataAvailable.bind(Core)
export const isHealthDataAvailableAsync =
Core.isHealthDataAvailableAsync.bind(Core)
export const queryCategorySamples =
CategoryTypes.queryCategorySamples.bind(CategoryTypes)
export const queryCategorySamplesWithAnchor =
CategoryTypes.queryCategorySamplesWithAnchor.bind(CategoryTypes)
export const queryCorrelationSamples =
CorrelationTypes.queryCorrelationSamples.bind(CorrelationTypes)
export const queryCorrelationSamplesWithAnchor =
CorrelationTypes.queryCorrelationSamplesWithAnchor.bind(CorrelationTypes)
export const queryHeartbeatSeriesSamples =
HeartbeatSeries.queryHeartbeatSeriesSamples.bind(HeartbeatSeries)
export const queryHeartbeatSeriesSamplesWithAnchor =
HeartbeatSeries.queryHeartbeatSeriesSamplesWithAnchor.bind(HeartbeatSeries)
export const queryElectrocardiogramSamples =
Electrocardiograms.queryElectrocardiogramSamples.bind(Electrocardiograms)
export const queryElectrocardiogramSamplesWithAnchor =
Electrocardiograms.queryElectrocardiogramSamplesWithAnchor.bind(
Electrocardiograms,
)
export const queryQuantitySamples =
QuantityTypes.queryQuantitySamples.bind(QuantityTypes)
export const queryQuantitySamplesWithAnchor =
QuantityTypes.queryQuantitySamplesWithAnchor.bind(QuantityTypes)
export const queryStatisticsForQuantity =
QuantityTypes.queryStatisticsForQuantity.bind(QuantityTypes)
export const queryStatisticsCollectionForQuantity =
QuantityTypes.queryStatisticsCollectionForQuantity.bind(QuantityTypes)
export const queryStatisticsForQuantitySeparateBySource =
QuantityTypes.queryStatisticsForQuantitySeparateBySource.bind(QuantityTypes)
export const queryStatisticsCollectionForQuantitySeparateBySource =
QuantityTypes.queryStatisticsCollectionForQuantitySeparateBySource.bind(
QuantityTypes,
)
export const queryWorkoutSamples = Workouts.queryWorkoutSamples.bind(Workouts)
export const queryWorkoutSamplesWithAnchor =
Workouts.queryWorkoutSamplesWithAnchor.bind(Workouts)
export const querySources = Core.querySources.bind(Core)
export const requestAuthorization = Core.requestAuthorization.bind(Core)
export const deleteObjects = Core.deleteObjects.bind(Core)
export const saveCategorySample =
CategoryTypes.saveCategorySample.bind(CategoryTypes)
export const saveCorrelationSample =
CorrelationTypes.saveCorrelationSample.bind(CorrelationTypes)
export const saveQuantitySample =
QuantityTypes.saveQuantitySample.bind(QuantityTypes)
export const saveWorkoutSample = Workouts.saveWorkoutSample.bind(Workouts)
export const startWatchApp =
Workouts.startWatchAppWithWorkoutConfiguration.bind(Workouts)
export const isProtectedDataAvailable = Core.isProtectedDataAvailable.bind(Core)
export const queryStateOfMindSamples =
StateOfMind.queryStateOfMindSamples.bind(StateOfMind)
export const queryStateOfMindSamplesWithAnchor =
StateOfMind.queryStateOfMindSamplesWithAnchor.bind(StateOfMind)
export const saveStateOfMindSample =
StateOfMind.saveStateOfMindSample.bind(StateOfMind)
export const isQuantityCompatibleWithUnit =
QuantityTypes.isQuantityCompatibleWithUnit.bind(QuantityTypes)
export const isObjectTypeAvailable = Core.isObjectTypeAvailable.bind(Core)
export const isObjectTypeAvailableAsync =
Core.isObjectTypeAvailableAsync.bind(Core)
export const areObjectTypesAvailable = Core.areObjectTypesAvailable.bind(Core)
export const areObjectTypesAvailableAsync =
Core.areObjectTypesAvailableAsync.bind(Core)
export const requestMedicationsAuthorization =
Medication.requestMedicationsAuthorization.bind(Medication)
export const queryMedications = Medication.queryMedications.bind(Medication)
export const queryMedicationEvents =
Medication.queryMedicationEvents.bind(Medication)
export const queryMedicationEventsWithAnchor =
Medication.queryMedicationEventsWithAnchor.bind(Medication)
export const currentAppSource = Core.currentAppSource.bind(Core)
export const getBiologicalSexAsync =
Characteristics.getBiologicalSexAsync.bind(Characteristics)
export const getBloodTypeAsync =
Characteristics.getBloodTypeAsync.bind(Characteristics)
export const getDateOfBirthAsync =
Characteristics.getDateOfBirthAsync.bind(Characteristics)
export const getFitzpatrickSkinTypeAsync =
Characteristics.getFitzpatrickSkinTypeAsync.bind(Characteristics)
export const getWheelchairUseAsync =
Characteristics.getWheelchairUseAsync.bind(Characteristics)
export default {
authorizationStatusFor,
isObjectTypeAvailable,
isObjectTypeAvailableAsync,
areObjectTypesAvailable,
areObjectTypesAvailableAsync,
isQuantityCompatibleWithUnit,
disableAllBackgroundDelivery,
disableBackgroundDelivery,
enableBackgroundDelivery,
getBiologicalSex,
getBloodType,
getDateOfBirth,
getFitzpatrickSkinType,
getBiologicalSexAsync,
getBloodTypeAsync,
getDateOfBirthAsync,
getFitzpatrickSkinTypeAsync,
getWheelchairUseAsync,
getMostRecentCategorySample,
getMostRecentQuantitySample,
getMostRecentWorkout,
getPreferredUnits,
getPreferredUnit,
getRequestStatusForAuthorization,
getWheelchairUse,
isHealthDataAvailable,
isHealthDataAvailableAsync,
queryCategorySamples,
queryCategorySamplesWithAnchor,
queryCorrelationSamples,
queryCorrelationSamplesWithAnchor,
queryHeartbeatSeriesSamples,
queryHeartbeatSeriesSamplesWithAnchor,
queryElectrocardiogramSamples,
queryElectrocardiogramSamplesWithAnchor,
queryQuantitySamples,
queryQuantitySamplesWithAnchor,
queryStatisticsForQuantity,
queryStatisticsCollectionForQuantity,
queryStatisticsForQuantitySeparateBySource,
queryStatisticsCollectionForQuantitySeparateBySource,
queryWorkoutSamples,
queryWorkoutSamplesWithAnchor,
querySources,
requestAuthorization,
requestPerObjectReadAuthorization,
deleteObjects,
saveCategorySample,
saveCorrelationSample,
saveQuantitySample,
saveWorkoutSample,
subscribeToChanges,
subscribeToQuantitySamples,
startWatchApp,
isProtectedDataAvailable,
queryStateOfMindSamples,
queryStateOfMindSamplesWithAnchor,
saveStateOfMindSample,
requestMedicationsAuthorization,
currentAppSource,
queryMedicationEventsWithAnchor,
queryMedicationEvents,
queryMedications,
subscribeToCategorySamples,
useSubscribeToCategorySamples,
// hooks
useMostRecentCategorySample,
useMostRecentQuantitySample,
useMostRecentWorkout,
useSubscribeToChanges,
useSubscribeToQuantitySamples,
useHealthkitAuthorization,
useIsHealthDataAvailable,
useSources,
useStatisticsForQuantity,
}