@r/platform
Version:
A set of tools to enable easy universal rendering and page navigation on a React + Redux stack
39 lines (30 loc) • 1.07 kB
JavaScript
import merge from './modules/merge';
export const extractQuery = str => {
const [, rest] = str.split('?');
if (!(rest && rest.length)) { return {}; }
// discard the hash
const [query] = rest.split('#');
return query.split('&').reduce((prev, cur) => {
const [key, value] = cur.split('=');
return {
...prev,
[key]: decodeURIComponent(value),
};
}, {});
};
export const createQuery = dict => {
const qs = Object.keys(dict)
.filter(k => typeof dict[k] !== 'undefined')
.map(k => `${k}=${encodeURIComponent(dict[k])}`)
.join('&');
return `?${qs}`;
};
export const createHash = str => {
return `#${str}`;
};
export const urlFromPage = (page, mergePage) => {
const { url, queryParams={}, hashParams={} } = mergePage ? merge(page, mergePage) : page;
const queryString = Object.keys(queryParams).length ? createQuery(queryParams) : '';
const hashString = Object.keys(hashParams).length ? createHash(hashParams) : '';
return `${url}${queryString}${hashString}`;
};