import formSerialize from “form-serialize” import KeyValueStore from “api-maker/key-value-store” import merge from “merge” import qs from “qs”
export default class Params {
static parse() { return qs.parse(window.location.search.substr(1)) } static change(given) { return merge.recursive(true, Params.parse(), given) } static changeParams(given) { var params = Params.change(given) var newParams = qs.stringify(params) var newPath = `${location.pathname}?${newParams}` AppHistory.push(newPath) } static async getCachedParams(paramName, args = {}) { var oldQuery = await KeyValueStore.get(paramName) var params = Params.parse() if (params && paramName in params) { return params[paramName] } else if (oldQuery) { return oldQuery } else { return args.default || {} } } static async setCachedParams(paramName, qParams) { return await KeyValueStore.set(paramName, qParams) } static serializeForm(form) { var hash = formSerialize(form, {empty: true, hash: true}) return Params.setUndefined(hash) } // This is used to set all empty values to 'undefined' which makes qs removed those elements from the query string static setUndefined(given) { if (Array.isArray(given)) { if (given.length == 0) return undefined return given.map(givenI => Params.setUndefined(givenI)) } else if (typeof given === "object") { if (Object.keys(given).length == 0) return undefined var newGiven = {} for(var key in given) { newGiven[key] = Params.setUndefined(given[key]) } return newGiven } else if (given === "") { return undefined } else { return given } }
}