@azuro-org/sdk
Version:
One-stop solution for building betting dApps on the Azuro Protocol.
58 lines (57 loc) • 2.46 kB
TypeScript
import { ConditionState, type ConditionDetailedData } from '@azuro-org/toolkit';
export type UseConditionsStateProps = {
conditionIds: string[];
initialStates?: Record<string, ConditionState>;
conditions?: never;
} | {
conditions: Pick<ConditionDetailedData, 'conditionId' | 'state' | 'hidden'>[];
initialStates?: never;
conditionIds?: never;
};
export type ConditionsStateData = {
states: Record<string, ConditionState>;
statesMap: Record<string, {
state: ConditionState;
hidden: boolean;
}>;
};
/**
* Watch real-time state updates for a list of conditions.
* Subscribes to condition updates via websocket and tracks state changes (Active, Stopped, Resolved, etc.).
* Requires `FeedSocketProvider` and `ConditionUpdatesProvider` (both are included in `AzuroSDKProvider`).
*
* Returns `data` - a map of condition IDs to their current state.
* Returns `conditionsMap` - a map `{ [conditionId]: { state: ConditionState, hidden: boolean } }` of conditions.
*
* The `hidden` field indicates whether a condition may be hidden from the game markets list.
* It starts as `true` for stopped secondary conditions in `ConditionDetailedData`.
* When a socket update arrives for a hidden condition, it is set back to `false` —
* meaning the condition is still alive and was only temporarily stopped by the provider.
*
* - Docs: https://gem.azuro.org/hub/apps/sdk/watch-hooks/useConditionsState
*
* @example
* import { useConditionState } from '@azuro-org/sdk'
* import { ConditionState, type ConditionDetailedData } from '@azuro-org/toolkit'
*
* // best approach for the list of game's markets
* const { data, conditionsMap, isFetching } = useConditionState({
* // Pick<ConditionDetailedData, 'conditionId' | 'state' | 'hidden'>[]
* conditions,
* })
*
* // OR if you have a condition ID list only, like in the betslip
* const { data, conditionsMap, isFetching } = useConditionState({
* conditionIds: [ '123...', '456...' ],
* // optional, if not provided, it will fetch the initial states from the API
* initialStates: [ ConditionState.Active, ConditionState.Stopped ],
* })
* */
export declare const useConditionsState: ({ conditionIds: _conditionIds, initialStates, conditions }: UseConditionsStateProps) => {
data: Record<string, ConditionState>;
conditionsMap: Record<string, {
state: ConditionState;
hidden: boolean;
}>;
isFetching: boolean;
};