From 5ff2491e7864f546ee925252529a7b6205b86de0 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Fri, 13 Sep 2019 15:52:52 -0400 Subject: [PATCH] improvements --- dist/bundle.es.js | 51 ++++++++++++++++++++--------------- src/constants/action_types.js | 2 +- src/index.js | 2 +- src/redux/actions/claims.js | 2 +- src/redux/actions/sync.js | 24 +++++++++-------- src/redux/reducers/claims.js | 23 ++++++++++------ src/redux/reducers/tags.js | 6 ++--- src/redux/selectors/claims.js | 13 +++++---- src/redux/selectors/tags.js | 1 - 9 files changed, 72 insertions(+), 52 deletions(-) diff --git a/dist/bundle.es.js b/dist/bundle.es.js index 0e5ee26..3a8a746 100644 --- a/dist/bundle.es.js +++ b/dist/bundle.es.js @@ -262,7 +262,7 @@ const TAG_DELETE = 'TAG_DELETE'; const TOGGLE_BLOCK_CHANNEL = 'TOGGLE_BLOCK_CHANNEL'; // Sync -const USER_SETTINGS_POPULATE = 'USER_SETTINGS_POPULATE'; +const USER_STATE_POPULATE = 'USER_STATE_POPULATE'; var action_types = /*#__PURE__*/Object.freeze({ WINDOW_FOCUSED: WINDOW_FOCUSED, @@ -469,7 +469,7 @@ var action_types = /*#__PURE__*/Object.freeze({ TAG_ADD: TAG_ADD, TAG_DELETE: TAG_DELETE, TOGGLE_BLOCK_CHANNEL: TOGGLE_BLOCK_CHANNEL, - USER_SETTINGS_POPULATE: USER_SETTINGS_POPULATE + USER_STATE_POPULATE: USER_STATE_POPULATE }); const CC_LICENSES = [{ @@ -1469,7 +1469,7 @@ const selectCurrentChannelPage = reselect.createSelector(selectState$2, state => const selectCreatingChannel = reselect.createSelector(selectState$2, state => state.creatingChannel); -const createChannelError = reselect.createSelector(selectState$2, state => state.createChannelError); +const selectCreateChannelError = reselect.createSelector(selectState$2, state => state.createChannelError); const selectClaimsByUri = reselect.createSelector(selectState$2, selectClaimsById, (state, byId) => { const byUri = state.claimsByUri || {}; @@ -1668,9 +1668,12 @@ const selectMyClaimsOutpoints = reselect.createSelector(selectMyClaims, myClaims const selectFetchingMyChannels = reselect.createSelector(selectState$2, state => state.fetchingMyChannels); const selectMyChannelClaims = reselect.createSelector(selectState$2, selectClaimsById, (state, byId) => { - const ids = state.myChannelClaims || []; - const claims = []; + const ids = state.myChannelClaims; + if (!ids) { + return ids; + } + const claims = []; ids.forEach(id => { if (byId[id]) { // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544 @@ -2454,7 +2457,7 @@ function doCreateChannel(name, amount, optionalParams) { }).catch(error => { dispatch({ type: CREATE_CHANNEL_FAILED, - data: error + data: error.message }); }); }; @@ -3556,8 +3559,8 @@ const doToggleBlockChannel = uri => ({ var _extends$5 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; function extractSettings(rawObj) { - if (rawObj && rawObj.version && rawObj.app) { - const { subscriptions, tags } = rawObj.app; + if (rawObj && rawObj.version === '0' && rawObj.shared) { + const { subscriptions, tags } = rawObj.shared; return _extends$5({}, subscriptions ? { subscriptions } : {}, tags ? { tags } : {}); } @@ -3567,7 +3570,7 @@ function extractSettings(rawObj) { function doPopulateUserSettings(settings) { return dispatch => { const { subscriptions, tags } = extractSettings(settings); - dispatch({ type: USER_SETTINGS_POPULATE, data: { subscriptions, tags } }); + dispatch({ type: USER_STATE_POPULATE, data: { subscriptions, tags } }); }; } @@ -3583,7 +3586,7 @@ const defaultState = { resolvingUris: [], // This should not be a Set // Storing sets in reducers can cause issues - myChannelClaims: new Set(), + myChannelClaims: undefined, fetchingMyChannels: false, abandoningById: {}, pendingById: {}, @@ -3716,13 +3719,20 @@ reducers[FETCH_CHANNEL_LIST_STARTED] = state => Object.assign({}, state, { fetch reducers[FETCH_CHANNEL_LIST_COMPLETED] = (state, action) => { const { claims } = action.data; - const myChannelClaims = new Set(state.myChannelClaims); - const byId = Object.assign({}, state.byId); - claims.forEach(claim => { - myChannelClaims.add(claim.claim_id); - byId[claim.claim_id] = claim; - }); + let myChannelClaims; + let byId = Object.assign({}, state.byId); + if (!claims.length) { + // $FlowFixMe + myChannelClaims = null; + } else { + myChannelClaims = new Set(state.myChannelClaims); + claims.forEach(claim => { + // $FlowFixMe + myChannelClaims.add(claim.claim_id); + byId[claim.claim_id] = claim; + }); + } return Object.assign({}, state, { byId, @@ -4512,14 +4522,14 @@ const tagsReducer = handleActions({ followedTags: newFollowedTags }); }, - [USER_SETTINGS_POPULATE]: (state, action) => { + [USER_STATE_POPULATE]: (state, action) => { const { tags } = action.data; let newTags; if (!tags) { - newTags = state.followedTags || DEFAULT_FOLLOWED_TAGS; + newTags = state.followedTags.length ? state.followedTags : DEFAULT_FOLLOWED_TAGS; } else { - if (!state.followedTags || !state.followedTags.length) { + if (!state.followedTags.length) { newTags = tags; } else { const map = {}; @@ -4890,7 +4900,6 @@ const selectFollowedTags = reselect.createSelector(selectFollowedTagsList, follo const selectUnfollowedTags = reselect.createSelector(selectKnownTagsByName, selectFollowedTagsList, (tagsByName, followedTags) => { const followedTagsSet = new Set(followedTags); let tagsToReturn = []; - Object.keys(tagsByName).forEach(key => { if (!followedTagsSet.has(key)) { const { name } = tagsByName[key]; @@ -4938,7 +4947,6 @@ exports.claimsReducer = claimsReducer; exports.commentReducer = commentReducer; exports.contentReducer = contentReducer; exports.convertToShareLink = convertToShareLink; -exports.createChannelError = createChannelError; exports.createNormalizedClaimSearchKey = createNormalizedClaimSearchKey; exports.creditsToString = creditsToString; exports.doAbandonClaim = doAbandonClaim; @@ -5072,6 +5080,7 @@ exports.selectClaimSearchByQuery = selectClaimSearchByQuery; exports.selectClaimSearchByQueryLastPageReached = selectClaimSearchByQueryLastPageReached; exports.selectClaimsById = selectClaimsById; exports.selectClaimsByUri = selectClaimsByUri; +exports.selectCreateChannelError = selectCreateChannelError; exports.selectCreatingChannel = selectCreatingChannel; exports.selectCurrentChannelPage = selectCurrentChannelPage; exports.selectDownloadedUris = selectDownloadedUris; diff --git a/src/constants/action_types.js b/src/constants/action_types.js index 22400e4..a852537 100644 --- a/src/constants/action_types.js +++ b/src/constants/action_types.js @@ -239,4 +239,4 @@ export const TAG_DELETE = 'TAG_DELETE'; export const TOGGLE_BLOCK_CHANNEL = 'TOGGLE_BLOCK_CHANNEL'; // Sync -export const USER_SETTINGS_POPULATE = 'USER_SETTINGS_POPULATE'; +export const USER_STATE_POPULATE = 'USER_STATE_POPULATE'; diff --git a/src/index.js b/src/index.js index 7cd7dc8..a954ee9 100644 --- a/src/index.js +++ b/src/index.js @@ -205,7 +205,7 @@ export { selectUpdatingChannel, selectUpdateChannelError, selectCreatingChannel, - createChannelError, + selectCreateChannelError, } from 'redux/selectors/claims'; export { makeSelectCommentsForUri } from 'redux/selectors/comments'; diff --git a/src/redux/actions/claims.js b/src/redux/actions/claims.js index c285e02..215daba 100644 --- a/src/redux/actions/claims.js +++ b/src/redux/actions/claims.js @@ -275,7 +275,7 @@ export function doCreateChannel(name: string, amount: number, optionalParams: an .catch(error => { dispatch({ type: ACTIONS.CREATE_CHANNEL_FAILED, - data: error, + data: error.message, }); }) ); diff --git a/src/redux/actions/sync.js b/src/redux/actions/sync.js index 2c0a95e..e0b13e4 100644 --- a/src/redux/actions/sync.js +++ b/src/redux/actions/sync.js @@ -1,15 +1,17 @@ // @flow import * as ACTIONS from 'constants/action_types'; -function extractSettings(rawObj: { - version: string, - app: {}, -}): { - subscriptions?: Array, - tags?: Array, -} { - if (rawObj && rawObj.version && rawObj.app) { - const { subscriptions, tags } = rawObj.app; +type v0Data = { + version: '0', + shared: { + subscriptions?: Array, + tags?: Array, + }, +}; + +function extractSettings(rawObj: v0Data) { + if (rawObj && rawObj.version === '0' && rawObj.shared) { + const { subscriptions, tags } = rawObj.shared; return { ...(subscriptions ? { subscriptions } : {}), ...(tags ? { tags } : {}), @@ -20,8 +22,8 @@ function extractSettings(rawObj: { } export function doPopulateUserSettings(settings: any) { - return dispatch => { + return (dispatch: Dispatch) => { const { subscriptions, tags } = extractSettings(settings); - dispatch({ type: ACTIONS.USER_SETTINGS_POPULATE, data: { subscriptions, tags } }); + dispatch({ type: ACTIONS.USER_STATE_POPULATE, data: { subscriptions, tags } }); }; } diff --git a/src/redux/reducers/claims.js b/src/redux/reducers/claims.js index d3eac46..cdac7d9 100644 --- a/src/redux/reducers/claims.js +++ b/src/redux/reducers/claims.js @@ -18,7 +18,7 @@ type State = { byId: { [string]: Claim }, resolvingUris: Array, pendingById: { [string]: Claim }, - myChannelClaims: Set, + myChannelClaims: ?Set, abandoningById: { [string]: boolean }, fetchingChannelClaims: { [string]: number }, fetchingMyChannels: boolean, @@ -46,7 +46,7 @@ const defaultState = { resolvingUris: [], // This should not be a Set // Storing sets in reducers can cause issues - myChannelClaims: new Set(), + myChannelClaims: undefined, fetchingMyChannels: false, abandoningById: {}, pendingById: {}, @@ -190,13 +190,20 @@ reducers[ACTIONS.FETCH_CHANNEL_LIST_STARTED] = (state: State): State => reducers[ACTIONS.FETCH_CHANNEL_LIST_COMPLETED] = (state: State, action: any): State => { const { claims }: { claims: Array } = action.data; - const myChannelClaims = new Set(state.myChannelClaims); - const byId = Object.assign({}, state.byId); - claims.forEach(claim => { - myChannelClaims.add(claim.claim_id); - byId[claim.claim_id] = claim; - }); + let myChannelClaims; + let byId = Object.assign({}, state.byId); + if (!claims.length) { + // $FlowFixMe + myChannelClaims = null; + } else { + myChannelClaims = new Set(state.myChannelClaims); + claims.forEach(claim => { + // $FlowFixMe + myChannelClaims.add(claim.claim_id); + byId[claim.claim_id] = claim; + }); + } return Object.assign({}, state, { byId, diff --git a/src/redux/reducers/tags.js b/src/redux/reducers/tags.js index 29480e1..187e751 100644 --- a/src/redux/reducers/tags.js +++ b/src/redux/reducers/tags.js @@ -65,7 +65,7 @@ export const tagsReducer = handleActions( followedTags: newFollowedTags, }; }, - [ACTIONS.USER_SETTINGS_POPULATE]: ( + [ACTIONS.USER_STATE_POPULATE]: ( state: TagState, action: { data: { tags: ?Array } } ) => { @@ -73,9 +73,9 @@ export const tagsReducer = handleActions( let newTags; if (!tags) { - newTags = state.followedTags || DEFAULT_FOLLOWED_TAGS; + newTags = state.followedTags.length ? state.followedTags : DEFAULT_FOLLOWED_TAGS; } else { - if (!state.followedTags || !state.followedTags.length) { + if (!state.followedTags.length) { newTags = tags; } else { const map = {}; diff --git a/src/redux/selectors/claims.js b/src/redux/selectors/claims.js index 429137a..7cff061 100644 --- a/src/redux/selectors/claims.js +++ b/src/redux/selectors/claims.js @@ -23,7 +23,7 @@ export const selectCreatingChannel = createSelector( state => state.creatingChannel ); -export const createChannelError = createSelector( +export const selectCreateChannelError = createSelector( selectState, state => state.createChannelError ); @@ -240,8 +240,8 @@ export const makeSelectDateForUri = (uri: string) => (claim.value.release_time ? claim.value.release_time * 1000 : claim.meta && claim.meta.creation_timestamp - ? claim.meta.creation_timestamp * 1000 - : null); + ? claim.meta.creation_timestamp * 1000 + : null); if (!timestamp) { return undefined; } @@ -360,9 +360,12 @@ export const selectMyChannelClaims = createSelector( selectState, selectClaimsById, (state, byId) => { - const ids = state.myChannelClaims || []; - const claims = []; + const ids = state.myChannelClaims; + if (!ids) { + return ids; + } + const claims = []; ids.forEach(id => { if (byId[id]) { // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544 diff --git a/src/redux/selectors/tags.js b/src/redux/selectors/tags.js index ff202b3..f46151b 100644 --- a/src/redux/selectors/tags.js +++ b/src/redux/selectors/tags.js @@ -27,7 +27,6 @@ export const selectUnfollowedTags = createSelector( (tagsByName: KnownTags, followedTags: Array): Array => { const followedTagsSet = new Set(followedTags); let tagsToReturn = []; - Object.keys(tagsByName).forEach(key => { if (!followedTagsSet.has(key)) { const { name } = tagsByName[key];