@livelike/react-native
Version:
LiveLike React Native package
48 lines (43 loc) • 1.43 kB
text/typescript
import {
WidgetKind,
claimPredictionWidgetRewards,
hasDebugLogger,
} from '@livelike/javascript';
import { useEffect, useRef } from 'react';
import { widgetStoreActions } from '../store';
import { useWidgetInteractions } from './useWidgetInteractions';
export type UsePredictionClaimRewardEffectArg = {
widgetId: string;
widgetKind: WidgetKind;
};
/**
* @description `usePredictionClaimRewardEffect` hook claims the prediction reward
* whenever a prediction follow up based UI is rendered.
* Internally it calls claimPredictionWidgetRewards JS API.
*/
export function usePredictionClaimRewardEffect({ widgetId, widgetKind }) {
const claimedRef = useRef(null);
const widgetInteracions = useWidgetInteractions({ widgetId });
const widgetInteraction = widgetInteracions?.[0];
useEffect(() => {
if (claimedRef.current) {
claimedRef.current = false;
}
}, [widgetId, widgetKind]);
useEffect(() => {
if (claimedRef.current || !widgetInteraction) {
return;
}
claimPredictionWidgetRewards({ widgetId, widgetKind })
.then((res) => {
claimedRef.current = true;
widgetStoreActions.updateWidgetRewardsAction({
widgetId,
widgetRewards: res.rewards,
});
})
.catch((error) => {
hasDebugLogger() && console.error('Error while claiming reward', error);
});
}, [widgetId, widgetKind, widgetInteraction]);
}