UNPKG

@kingstinct/react-native-healthkit

Version:
31 lines (30 loc) 1.4 kB
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;