import { useContext, useCallback, useState } from 'react'; import { HackleContext } from '../components'; import { Decision, DEFAULT_VARIATION, DecisionReason } from '../models'; import { InputUtil } from '../utils'; export function useVariationDetail(experimentKey: number): Decision { const { hackle, userVersion } = useContext(HackleContext); const getVariationDetail = useCallback(() => { if (!hackle) { return Decision.of(DEFAULT_VARIATION, DecisionReason.SDK_NOT_READY); } return Decision.withReactNativeDecision( hackle.variationDetailSync(experimentKey) ); }, [experimentKey, hackle]); const [variationDetail, setVariationDetail] = useState(() => { if (!hackle) { return Decision.of(DEFAULT_VARIATION, DecisionReason.SDK_NOT_READY); } return getVariationDetail(); }); const currentInput = { key: experimentKey, userVersion, }; const [prevInput, setPrevInput] = useState(currentInput); if (!InputUtil.isInputEqual(prevInput, currentInput)) { setPrevInput(currentInput); setVariationDetail(getVariationDetail()); } return variationDetail; }