@kingstinct/react-native-healthkit
Version:
React Native bindings for HealthKit
40 lines (31 loc) • 989 B
text/typescript
import { useCallback, useEffect, useRef, useState } from 'react'
import type { WorkoutProxy } from '../specs/WorkoutProxy.nitro'
import getMostRecentWorkout from '../utils/getMostRecentWorkout'
import useSubscribeToChanges from './useSubscribeToChanges'
/**
* @returns the most recent workout sample.
*/
export function useMostRecentWorkout(options?: {
readonly energyUnit?: string
readonly distanceUnit?: string
}) {
const [workout, setWorkout] = useState<WorkoutProxy>()
const optionsRef = useRef(options)
useEffect(() => {
optionsRef.current = options
}, [options])
const update = useCallback(async () => {
setWorkout(
await getMostRecentWorkout({
energyUnit: optionsRef.current?.energyUnit,
distanceUnit: optionsRef.current?.distanceUnit,
}),
)
}, [])
useEffect(() => {
void update()
}, [update])
useSubscribeToChanges('HKWorkoutTypeIdentifier', update)
return workout
}
export default useMostRecentWorkout