From f97ec7b39034db3282670d7840f1990890211707 Mon Sep 17 00:00:00 2001 From: 6ea86b96 <6ea86b96@gmail.com> Date: Sun, 4 Jun 2017 18:53:26 +0700 Subject: [PATCH] Store claims by id in the state --- ui/js/reducers/claims.js | 40 +++++++++++++++++---------------------- ui/js/selectors/claims.js | 32 ++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/ui/js/reducers/claims.js b/ui/js/reducers/claims.js index c6c5801d4..a5f6d4d09 100644 --- a/ui/js/reducers/claims.js +++ b/ui/js/reducers/claims.js @@ -7,23 +7,19 @@ const defaultState = {}; reducers[types.RESOLVE_URI_COMPLETED] = function(state, action) { const { uri, certificate, claim } = action.data; - const newClaims = Object.assign({}, state.claimsByUri); + const byUri = Object.assign({}, state.claimsByUri); + const byId = Object.assign({}, state.byId); - newClaims[uri] = claim; - - //This needs a sanity boost... - if (certificate !== undefined && claim === undefined) { - const uriParts = lbryuri.parse(uri); - // newChannelClaims[uri] = certificate - if (claim === undefined) { - newClaims[uri] = certificate; - } + if (claim) { + byId[claim.claim_id] = claim; + byUri[uri] = claim.claim_id; } return Object.assign({}, state, { - claimsByUri: newClaims, + byId, + claimsByUri: byUri }); -}; +} reducers[types.RESOLVE_URI_CANCELED] = function(state, action) { const uri = action.data.uri; @@ -41,26 +37,24 @@ reducers[types.FETCH_CLAIM_LIST_MINE_STARTED] = function(state, action) { }; reducers[types.FETCH_CLAIM_LIST_MINE_COMPLETED] = function(state, action) { - const { claims } = action.data; + const { + claims, + } = action.data; const myClaims = new Set(state.myClaims); const byUri = Object.assign({}, state.claimsByUri); + const byId = Object.assign({}, state.byId); claims.forEach(claim => { - const uri = lbryuri.build({ - contentName: claim.name, - claimId: claim.claim_id, - claimSequence: claim.nout, - }); - myClaims.add(uri); - byUri[uri] = claim; - }); + myClaims.add(claim.claim_id); + byId[claim.claim_id] = claim; + }) return Object.assign({}, state, { isClaimListMinePending: false, myClaims: myClaims, - claimsByUri: byUri, + byId, }); -}; +} // reducers[types.FETCH_CHANNEL_CLAIMS_STARTED] = function(state, action) { // const { diff --git a/ui/js/selectors/claims.js b/ui/js/selectors/claims.js index 0a4c9b61a..567b7ef46 100644 --- a/ui/js/selectors/claims.js +++ b/ui/js/selectors/claims.js @@ -1,12 +1,30 @@ import { createSelector } from "reselect"; import lbryuri from "lbryuri"; -export const _selectState = state => state.claims || {}; +const _selectState = state => state.claims || {}; + +export const selectClaimsById = createSelector( + _selectState, + (state) => state.byId || {} +); export const selectClaimsByUri = createSelector( _selectState, - state => state.claimsByUri || {} -); + selectClaimsById, + (state, byId) => { + const byUri = state.claimsByUri || {}; + const claims = {}; + + Object.keys(byUri).forEach(uri => { + const claimId = byUri[uri]; + const claim = byId[claimId]; + + claims[uri] = claim; + }) + + return claims; + } +) export const selectAllClaimsByChannel = createSelector( _selectState, @@ -74,14 +92,14 @@ export const selectMyClaims = createSelector( export const selectMyClaimsOutpoints = createSelector( selectMyClaims, - selectClaimsByUri, - (claimIds, byUri) => { + selectClaimsById, + (claimIds, byId) => { const outpoints = []; claimIds.forEach(claimId => { - const claim = byUri[claimId]; + const claim = byId[claimId]; if (claim) outpoints.push(`${claim.txid}:${claim.nout}`); - }); + }) return outpoints; }