use-state-in-url
Version:
React hook to keep state in URL for deep linking
56 lines • 1.56 kB
JavaScript
function tryParseJson(value) {
try {
return JSON.parse(value);
}
catch {
return {};
}
}
export const deserialize = (defaultValue, value) => {
const type = inferType(defaultValue);
switch (type) {
case "string":
return decodeURIComponent(value);
case "number":
return Number(value);
case "boolean":
return (value.toLowerCase() === "true");
case "object":
return tryParseJson(decodeURIComponent(value));
case "array":
return value.split(",").map(decodeURIComponent);
default:
return value;
}
};
export const serialize = (defaultValue, value) => {
const type = inferType(defaultValue);
switch (type) {
case "string":
return value;
case "number":
return String(value);
case "boolean":
return value ? "true" : "false";
case "object":
return encodeURIComponent(JSON.stringify(value));
case "array":
return value.join(",");
default:
return String(value);
}
};
export function inferType(value) {
if (typeof value === "string")
return "string";
if (typeof value === "number")
return "number";
if (typeof value === "boolean")
return "boolean";
if (Array.isArray(value))
return "array";
if (typeof value === "object" && value !== null)
return "object";
return "string";
}
//# sourceMappingURL=serializeParams.js.map