use-state-in-url
Version:
React hook to keep state in URL for deep linking
39 lines • 1.2 kB
JavaScript
export function parseSearch(search) {
const params = new Map();
const query = search.startsWith("?") ? search.slice(1) : search;
if (!query)
return params;
query.split("&").forEach(pair => {
const [key, value] = pair.split("=");
if (key)
params.set(key, value || "");
});
return params;
}
export function buildSearch(params) {
if (params.size === 0)
return "";
const pairs = Array.from(params.entries())
.map(([key, value]) => `${key}=${value}`);
return "?" + pairs.join("&");
}
export function isEqual(a, b) {
// Handle NaN case
if (Number.isNaN(a) && Number.isNaN(b))
return true;
if (a === b)
return true;
if (typeof a !== typeof b)
return false;
if (typeof a !== "object" || !a || !b)
return false;
// Differentiate between arrays and objects
const aIsArray = Array.isArray(a);
const bIsArray = Array.isArray(b);
if (aIsArray !== bIsArray)
return false;
const keys = Object.keys(a);
return keys.length === Object.keys(b).length &&
keys.every(key => isEqual(a[key], b[key]));
}
//# sourceMappingURL=urlUtils.js.map