lbry-desktop/src/renderer/redux/selectors/subscriptions.js
2018-03-26 00:31:52 -07:00

52 lines
1.7 KiB
JavaScript

import { createSelector } from 'reselect';
import { selectAllClaimsByChannel, selectClaimsById } from './claims';
// get the entire subscriptions state
const selectState = state => state.subscriptions || {};
export const selectNotifications = createSelector(selectState, state => state.notifications);
// list of saved channel names and uris
export const selectSubscriptions = createSelector(selectState, state => state.subscriptions);
export const selectSubscriptionsFromClaims = createSelector(
selectAllClaimsByChannel,
selectClaimsById,
selectSubscriptions,
(channelIds, allClaims, savedSubscriptions) => {
// no claims loaded yet
if (!Object.keys(channelIds).length) {
return [];
}
const fetchedSubscriptions = [];
savedSubscriptions.forEach(subscription => {
let channelClaims = [];
// if subscribed channel has content
if (channelIds[subscription.uri] && channelIds[subscription.uri]['1']) {
// This will need to be more robust, we will want to be able to load more than the first page
const pageOneChannelIds = channelIds[subscription.uri]['1'];
// we have the channel ids and the corresponding claims
// loop over the list of ids and grab the claim
pageOneChannelIds.forEach(id => {
const grabbedClaim = allClaims[id];
channelClaims.push(grabbedClaim);
});
}
// all we really need is a uri for each claim
channelClaims = channelClaims.map(claim => `${claim.name}#${claim.claim_id}`);
fetchedSubscriptions.push({
claims: channelClaims,
channelName: subscription.channelName,
uri: subscription.uri,
});
});
return fetchedSubscriptions;
}
);