Skip to content

Commit

Permalink
refactor(reducers): use handleActions for header-data-reducer
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmason committed Sep 29, 2017
1 parent d0c0ea4 commit 20b8e3b
Showing 1 changed file with 33 additions and 84 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
// TODO refactor all this state to a sensible structure
// e.g. 'user' and 'context' can just be top-level items

import { handleActions } from 'redux-actions'
import {
DOCUMENT_SELECTED,
HEADER_DATA_FETCHED,
LOCALE_SELECTED,
STATS_FETCHED
} from '../actions/header-action-types'
import updateObject from 'immutability-helper'
import update from 'immutability-helper'
import {prepareLocales, prepareStats, prepareDocs} from '../utils/Util'
import { dashboardUrl, projectPageUrl } from '../api'

Expand Down Expand Up @@ -47,91 +47,40 @@ const gravatarUrl = (hash, size) => {
return `http://www.gravatar.com/avatar/${hash}?d=mm&ampr=g&amps=${size}`
}

export default (state = defaultState, action) => {
switch (action.type) {
case HEADER_DATA_FETCHED:
const docs = prepareDocs(action.payload.documents)
const locales = prepareLocales(action.payload.locales)
const versionSlug = action.payload.versionSlug
const projectSlug = action.payload.projectInfo.id
const projectName = action.payload.projectInfo.name
const name = action.payload.myInfo.name
// FIXME server is providing myInfo.imageUrl not gravatarHash
const gravatarHash = action.payload.myInfo.gravatarHash

return updateObject(state, {
user: {
name: {
$set: name
},
gravatarUrl: {
$set: gravatarUrl(gravatarHash, 72)
const headerDataReducer = handleActions({
[HEADER_DATA_FETCHED]: (state, { payload: {
documents, locales, versionSlug, projectInfo, myInfo } }) => {
const projectSlug = projectInfo.id
return update(state, {
user: {
name: {$set: myInfo.name},
// FIXME server is providing myInfo.imageUrl not gravatarHash
gravatarUrl: {$set: gravatarUrl(myInfo.gravatarHash, 72)},
dashboardUrl: { $set: dashboardUrl }
},
context: {
projectVersion: {
project: {
slug: {$set: projectSlug},
name: {$set: projectInfo.name}
},
dashboardUrl: {
$set: dashboardUrl
}

},
context: {
projectVersion: {
project: {
slug: {
$set: projectSlug
},
name: {
$set: projectName
}
},
version: {
$set: versionSlug
},
url: {
$set: projectPageUrl(projectSlug, versionSlug)
},
docs: {
$set: docs
},
locales: {
$set: locales
}
}
version: {$set: versionSlug},
url: {$set: projectPageUrl(projectSlug, versionSlug)},
docs: {$set: prepareDocs(documents)},
locales: {$set: prepareLocales(locales)}
}
})

case DOCUMENT_SELECTED:
}
})
},

return updateObject(state, {
context: {
selectedDoc: {
id: {
$set: action.payload
}
}
}
})
[DOCUMENT_SELECTED]: (state, { payload }) =>
update(state, { context: { selectedDoc: { id: {$set: payload} } } }),

case LOCALE_SELECTED:
return updateObject(state, {
context: {
selectedLocale: {
$set: action.payload
}
}
})
[LOCALE_SELECTED]: (state, { payload }) =>
update(state, { context: { selectedLocale: {$set: payload} } }),

case STATS_FETCHED:
const counts = prepareStats(action.payload)
return updateObject(state, {
context: {
selectedDoc: {
counts: {
$set: counts
}
}
}
})
[STATS_FETCHED]: (state, { payload }) => update(state, {
context: { selectedDoc: { counts: {$set: prepareStats(payload)} } } })
}, defaultState)

default:
return state
}
}
export default headerDataReducer

0 comments on commit 20b8e3b

Please sign in to comment.