Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions app/components/UI/Rewards/hooks/useActivePointsBoosts.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useRef } from 'react';
import { useCallback, useMemo, useRef } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { selectRewardsSubscriptionId } from '../../../../selectors/rewards';
import {
Expand Down Expand Up @@ -71,16 +71,19 @@ export const useActivePointsBoosts = (): UseActivePointsBoostsReturn => {
}, [fetchActivePointsBoosts]),
);

// Listen for events that should trigger a refetch of active boosts
useInvalidateByRewardEvents(
[
'RewardsController:accountLinked',
'RewardsController:rewardClaimed',
'RewardsController:balanceUpdated',
],
fetchActivePointsBoosts,
const invalidateEvents = useMemo(
() =>
[
'RewardsController:accountLinked',
'RewardsController:rewardClaimed',
'RewardsController:balanceUpdated',
] as const,
[],
);

// Listen for events that should trigger a refetch of active boosts
useInvalidateByRewardEvents(invalidateEvents, fetchActivePointsBoosts);

return {
fetchActivePointsBoosts,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type RewardEvent = `RewardsController:${string}`;
* @param callback - The function to execute when any of the specified events are triggered.
*/
export const useInvalidateByRewardEvents = (
events: RewardEvent[],
events: readonly RewardEvent[],
callback: () => void,
): void => {
// Subscribe to events and clean up on unmount or when events change
Expand Down
22 changes: 16 additions & 6 deletions app/components/UI/Rewards/hooks/usePointsEvents.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useRef, useState, useEffect } from 'react';
import { useCallback, useMemo, useRef, useState, useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import Engine from '../../../../core/Engine/Engine';
import {
Expand Down Expand Up @@ -211,14 +211,24 @@ export const usePointsEvents = (
fetchPointsEvents({ isFirstPage: true });
}, [enabled, fetchPointsEvents, seasonId, subscriptionId]);

// Listen for reward claimed events to trigger refetch
useInvalidateByRewardEvents(
['RewardsController:accountLinked', 'RewardsController:rewardClaimed'],
refresh,
const refreshEvents = useMemo(
() =>
[
'RewardsController:accountLinked',
'RewardsController:rewardClaimed',
] as const,
[],
);
const updateEvents = useMemo(
() => ['RewardsController:pointsEventsUpdated'] as const,
[],
);

// Listen for reward claimed events to trigger refetch
useInvalidateByRewardEvents(refreshEvents, refresh);

useInvalidateByRewardEvents(
['RewardsController:pointsEventsUpdated'],
updateEvents,
// Don't force fresh when points events are updated; this event is only emitted when we've just fetched new points events
// otherwise we'll fetch the same points events again
refreshWithoutForceFresh,
Expand Down
21 changes: 12 additions & 9 deletions app/components/UI/Rewards/hooks/useReferralDetails.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useRef } from 'react';
import { useCallback, useMemo, useRef } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { selectRewardsSubscriptionId } from '../../../../selectors/rewards';
import { selectSeasonId } from '../../../../reducers/rewards/selectors';
Expand Down Expand Up @@ -64,15 +64,18 @@ export const useReferralDetails = (): {
}, [fetchReferralDetails]),
);

// Listen for events that should trigger a refetch of referral details
useInvalidateByRewardEvents(
[
'RewardsController:accountLinked',
'RewardsController:rewardClaimed',
'RewardsController:balanceUpdated',
],
fetchReferralDetails,
const invalidateEvents = useMemo(
() =>
[
'RewardsController:accountLinked',
'RewardsController:rewardClaimed',
'RewardsController:balanceUpdated',
] as const,
[],
);

// Listen for events that should trigger a refetch of referral details
useInvalidateByRewardEvents(invalidateEvents, fetchReferralDetails);

return { fetchReferralDetails };
};
Loading
Loading