73 lines
2.5 KiB
JavaScript
73 lines
2.5 KiB
JavaScript
import * as REACTION_TYPES from 'constants/reactions';
|
|
import { createSelector } from 'reselect';
|
|
import { makeSelectClaimForUri } from 'redux/selectors/claims';
|
|
|
|
const selectState = (state) => state.reactions || {};
|
|
|
|
export const selectReactionsById = createSelector(selectState, (state) => state.reactionsById);
|
|
|
|
export const selectFetchingReactions = createSelector(selectState, (state) => state.fetchingReactions);
|
|
|
|
export const makeSelectReactionsForUri = (uri) =>
|
|
createSelector(makeSelectClaimForUri(uri), selectReactionsById, (claim, reactionsById) => {
|
|
return claim ? reactionsById[claim.claim_id] : {};
|
|
});
|
|
|
|
export const makeSelectMyReactionForUri = (uri) =>
|
|
createSelector(makeSelectClaimForUri(uri), makeSelectReactionsForUri(uri), (claim, reactions) => {
|
|
if (!claim || !reactions || reactions.my_reactions === null) {
|
|
return undefined;
|
|
}
|
|
const claimId = claim.claim_id;
|
|
|
|
const myReactions = reactions.my_reactions[claimId];
|
|
if (myReactions[REACTION_TYPES.LIKE]) {
|
|
return REACTION_TYPES.LIKE;
|
|
} else if (myReactions[REACTION_TYPES.DISLIKE]) {
|
|
return REACTION_TYPES.DISLIKE;
|
|
} else {
|
|
// Ignore other types of reactions for now
|
|
return undefined;
|
|
}
|
|
});
|
|
|
|
export const makeSelectLikeCountForUri = (uri) =>
|
|
createSelector(makeSelectClaimForUri(uri), makeSelectReactionsForUri(uri), (claim, reactions) => {
|
|
if (!claim || !reactions || reactions.my_reactions === null || reactions.others_reactions === null) {
|
|
return 0;
|
|
}
|
|
const claimId = claim.claim_id;
|
|
|
|
let count = 0;
|
|
if (reactions.others_reactions) {
|
|
const likeCount = reactions.others_reactions[claimId][REACTION_TYPES.LIKE] || 0;
|
|
|
|
count += likeCount;
|
|
}
|
|
if (reactions.my_reactions) {
|
|
const likeCount = reactions.my_reactions[claimId][REACTION_TYPES.LIKE] || 0;
|
|
count += likeCount;
|
|
}
|
|
|
|
return count;
|
|
});
|
|
|
|
export const makeSelectDislikeCountForUri = (uri) =>
|
|
createSelector(makeSelectClaimForUri(uri), makeSelectReactionsForUri(uri), (claim, reactions) => {
|
|
if (!claim || !reactions || reactions.my_reactions === null || reactions.others_reactions === null) {
|
|
return 0;
|
|
}
|
|
const claimId = claim.claim_id;
|
|
|
|
let count = 0;
|
|
if (reactions.others_reactions) {
|
|
const dislikeCount = reactions.others_reactions[claimId][REACTION_TYPES.DISLIKE] || 0;
|
|
count += dislikeCount;
|
|
}
|
|
if (reactions.my_reactions) {
|
|
const dislikeCount = reactions.my_reactions[claimId][REACTION_TYPES.DISLIKE] || 0;
|
|
count += dislikeCount;
|
|
}
|
|
|
|
return count;
|
|
});
|