import { createSelector } from "reselect"; import { selectUser } from "selectors/user"; const _selectState = state => state.rewards || {}; export const selectUnclaimedRewardsByType = createSelector( _selectState, state => state.unclaimedRewardsByType ); export const selectClaimedRewardsById = createSelector( _selectState, state => state.claimedRewardsById ); export const selectClaimedRewards = createSelector( selectClaimedRewardsById, byId => Object.values(byId) || [] ); export const selectUnclaimedRewards = createSelector( selectUnclaimedRewardsByType, byType => Object.values(byType) || [] ); export const selectIsRewardEligible = createSelector( selectUser, user => user.can_claim_rewards ); export const selectFetchingRewards = createSelector( _selectState, state => !!state.fetching ); export const selectUnclaimedRewardValue = createSelector( selectUnclaimedRewards, rewards => rewards.reduce((sum, reward) => { return sum + reward.reward_amount; }, 0) ); export const selectHasClaimedReward = (state, props) => { const reward = selectRewardsByType(state)[props.reward_type]; return reward && reward.transaction_id !== ""; }; export const makeSelectHasClaimedReward = () => { return createSelector(selectHasClaimedReward, claimed => claimed); }; export const selectClaimsPendingByType = createSelector( _selectState, state => state.claimPendingByType ); const selectIsClaimRewardPending = (state, props) => { return selectClaimsPendingByType(state, props)[props.reward_type]; }; export const makeSelectIsRewardClaimPending = () => { return createSelector(selectIsClaimRewardPending, isClaiming => isClaiming); }; export const selectClaimErrorsByType = createSelector( _selectState, state => state.claimErrorsByType ); const selectClaimRewardError = (state, props) => { return selectClaimErrorsByType(state, props)[props.reward_type]; }; export const makeSelectClaimRewardError = () => { return createSelector(selectClaimRewardError, errorMessage => errorMessage); }; const selectRewardByType = (state, props) => { return selectUnclaimedRewardsByType(state)[props.reward_type]; }; export const makeSelectRewardByType = () => { return createSelector(selectRewardByType, reward => reward); };