@kingstinct/react-native-healthkit
Version:
React Native bindings for HealthKit
31 lines (30 loc) • 1.4 kB
JavaScript
import { useCallback, useEffect, useRef, useState } from 'react';
import { Core } from '../modules';
/**
* @description Hook to retrieve the current authorization status for the given types, and request authorization if needed.
* @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1614152-requestauthorization Apple Docs - requestAuthorization}
* @see {@link https://developer.apple.com/documentation/healthkit/authorizing_access_to_health_data Apple Docs - Authorizing access to health data}
*/
export const useHealthkitAuthorization = (read, write) => {
const [status, setStatus] = useState(null);
const readMemo = useRef(read);
const writeMemo = useRef(write);
useEffect(() => {
readMemo.current = read;
writeMemo.current = write;
}, [read, write]);
const refreshAuthStatus = useCallback(async () => {
const auth = await Core.getRequestStatusForAuthorization(writeMemo.current ?? [], readMemo.current);
setStatus(auth);
return auth;
}, []);
const request = useCallback(async () => {
await Core.requestAuthorization(writeMemo.current ?? [], readMemo.current);
return refreshAuthStatus();
}, [refreshAuthStatus]);
useEffect(() => {
void refreshAuthStatus();
}, [refreshAuthStatus]);
return [status, request];
};
export default useHealthkitAuthorization;