lbry-desktop/ui/js/selectors/rewards.js

94 lines
2.2 KiB
JavaScript

import { createSelector } from "reselect";
import { selectUser } from "selectors/user";
const _selectState = state => state.rewards || {};
export const selectRewardsByType = createSelector(
_selectState,
(state) => state.byRewardType || {}
)
export const selectRewards = createSelector(
selectRewardsByType,
(byType) => Object.values(byType) || []
)
export const selectIsRewardEligible = createSelector(
selectUser,
(user) => user.can_claim_rewards
)
export const selectClaimedRewards = createSelector(
selectRewards,
(rewards) => rewards.filter(reward => reward.transaction_id !== "")
)
export const selectClaimedRewardsByType = createSelector(
selectClaimedRewards,
(claimedRewards) => {
const byType = {}
claimedRewards.forEach(reward => byType[reward.reward_type] = reward)
return byType
}
)
export const selectFetchingRewards = createSelector(
_selectState,
(state) => !!state.fetching
)
export const selectHasClaimedReward = (state, props) => {
return !!selectClaimedRewardsByType[props.reward.reward_type]
}
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.reward_type]
}
export const makeSelectIsRewardClaimPending = () => {
return createSelector(
selectIsClaimRewardPending,
(isClaiming) => isClaiming
)
}
export const selectClaimErrorsByType = createSelector(
_selectState,
(state) => state.claimErrorsByType
)
const selectClaimRewardError = (state, props) => {
console.log(selectClaimErrorsByType(state, props));
return selectClaimErrorsByType(state, props)[props.reward.reward_type]
}
export const makeSelectClaimRewardError = () => {
return createSelector(
selectClaimRewardError,
(errorMessage) => errorMessage
)
}
const selectRewardByType = (state, props) => {
return selectRewardsByType(state)[props.reward_type]
}
export const makeSelectRewardByType = () => {
return createSelector(
selectRewardByType,
(reward) => reward
)
}