11import { useEffect , useState } from 'react' ;
22import { useOpenFeatureClient } from './use-open-feature-client' ;
3- import type { ProviderStatus } from '@openfeature/web-sdk' ;
3+ import { ProviderStatus } from '@openfeature/web-sdk' ;
44import { ProviderEvents } from '@openfeature/web-sdk' ;
5+ import { ReactFlagEvaluationOptions } from '../common' ;
6+ import { DEFAULT_OPTIONS , useProviderOptions , normalizeOptions , suspendUntilReady } from '../common' ;
7+
8+ type Options = Pick < ReactFlagEvaluationOptions , 'suspendUntilReady' >
59
610/**
711 * Get the {@link ProviderStatus} for the OpenFeatureClient.
812 * @returns {ProviderStatus } status of the client for this scope
913 */
10- export function useOpenFeatureClientStatus ( ) : ProviderStatus {
14+ export function useOpenFeatureClientStatus ( options ?: Options ) {
1115 const client = useOpenFeatureClient ( ) ;
12- const [ status , setStatus ] = useState ( client . providerStatus ) ;
16+ const [ status , setStatus ] = useState < typeof ProviderStatus > ( client . providerStatus ) ;
1317
1418 useEffect ( ( ) => {
1519 const updateStatus = ( ) => setStatus ( client . providerStatus ) ;
@@ -28,6 +32,12 @@ export function useOpenFeatureClientStatus(): ProviderStatus {
2832 client . removeHandler ( ProviderEvents . Reconciling , updateStatus ) ;
2933 } ;
3034 } , [ client ] ) ;
35+ // highest priority > evaluation hook options > provider options > default options > lowest priority
36+ const defaultedOptions = { ...DEFAULT_OPTIONS , ...useProviderOptions ( ) , ...normalizeOptions ( options ) } ;
37+
38+ if ( defaultedOptions . suspendUntilReady && status === ProviderStatus . NOT_READY ) {
39+ suspendUntilReady ( client ) ;
40+ }
3141
3242 return status ;
3343}
0 commit comments