// @flow import { createSelector } from 'reselect'; import { selectMyClaims, selectPendingClaims } from 'lbry-redux'; const selectState = (state) => state.livestream || {}; // select non-pending claims without sources for given channel export const makeSelectLivestreamsForChannelId = (channelId: string) => createSelector(selectState, selectMyClaims, (livestreamState, myClaims = []) => { return myClaims .filter( (claim) => claim.value_type === 'stream' && claim.value && !claim.value.source && claim.confirmations > 0 && claim.signing_channel && claim.signing_channel.claim_id === channelId ) .sort((a, b) => b.timestamp - a.timestamp); // newest first }); export const selectFetchingLivestreams = createSelector(selectState, (state) => state.fetchingById); export const selectViewersById = createSelector(selectState, (state) => state.viewersById); export const makeSelectIsFetchingLivestreams = (channelId: string) => createSelector(selectFetchingLivestreams, (fetchingLivestreams) => Boolean(fetchingLivestreams[channelId])); export const makeSelectViewersForId = (channelId: string) => createSelector(selectViewersById, (viewers) => viewers[channelId]); export const makeSelectPendingLivestreamsForChannelId = (channelId: string) => createSelector(selectPendingClaims, (pendingClaims) => { return pendingClaims.filter( (claim) => claim.value_type === 'stream' && claim.value && !claim.value.source && claim.signing_channel && claim.signing_channel.claim_id === channelId ); });