add state query support

main
briandennis 7 years ago committed by Brian Dennis
parent 57dddd0b19
commit 89a80c3c2b

@ -46,20 +46,43 @@ const reverseMappings = mappings.map(mapping =>
}) })
) )
const serializeState = state => {
const stateString = encodeURIComponent(JSON.stringify(state))
return typeof window !== 'undefined'
? btoa(stateString)
: Buffer.from(stateString).toString('base64')
}
const deserializeState = serializedState => {
let stateString
if (typeof window !== 'undefined') {
stateString = atob(serializedState)
} else {
stateString = Buffer.from(serializedState, 'base64').toString()
}
return JSON.parse(decodeURIComponent(stateString))
}
const keysToQuery = keys => const keysToQuery = keys =>
`?${Object.keys(keys) `?${Object.keys(keys)
.map(key => `${key}=${keys[key]}`) .map(key => `${key}=${keys[key]}`)
.join('&')}` .join('&')}`
export const getQueryStringState = query => { export const getQueryStringState = query => {
const state = mapper.map(mappings, query) if (query.state) {
deserializeCode(state) return deserializeState(query.state)
} else {
const state = mapper.map(mappings, query)
deserializeCode(state)
Object.keys(state).forEach(key => { Object.keys(state).forEach(key => {
if (state[key] === '') state[key] = undefined if (state[key] === '') state[key] = undefined
}) })
return state return state
}
} }
export const updateQueryString = state => { export const updateQueryString = state => {

Loading…
Cancel
Save