react-magic-search-params
Version:
#️⃣ A React Hook for advanced, typed management of URL search parameters, providing built-in TypeScript autocomplete.
3 lines (2 loc) • 5.83 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var r=require("react-router-dom"),e=require("react");function t(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,n=Array(e);t<e;t++)n[t]=r[t];return n}function n(r,e){var n="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(n)return(n=n.call(r)).next.bind(n);if(Array.isArray(r)||(n=function(r,e){if(r){if("string"==typeof r)return t(r,e);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(r,e):void 0}}(r))||e&&r&&"number"==typeof r.length){n&&(r=n);var a=0;return function(){return a>=r.length?{done:!0}:{done:!1,value:r[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function a(){return(a=Object.assign?Object.assign.bind():function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var n in t)({}).hasOwnProperty.call(t,n)&&(r[n]=t[n])}return r}).apply(null,arguments)}exports.useMagicSearchParams=function(t){var o=t.mandatory,i=void 0===o?{}:o,c=t.optional,u=void 0===c?{}:c,s=t.defaultParams,l=void 0===s?{}:s,f=t.arraySerialization,v=void 0===f?"csv":f,y=t.forceParams,p=void 0===y?{}:y,d=t.omitParamsByValues,m=void 0===d?[]:d,g=r.useSearchParams(),b=g[0],A=g[1],h=e.useRef({}),O=e.useRef({}),j=e.useMemo((function(){return a({},i,u)}),[i,u]),P=e.useMemo((function(){return Array.from(Object.keys(j))}),[j]),k=e.useMemo((function(){return Object.keys(j).filter((function(r){return Array.isArray(j[r])}))}),[j]),S=function(r){console.log({PARAMS_RECIBIDOS_TRANSFORM:r});for(var e=new URLSearchParams,t=0,a=Object.keys(r);t<a.length;t++){var o=a[t];if(Array.isArray(j[o])){var i=r[o];switch(console.log({arrayValue:i}),v){case"csv":var c=i.join(",");e.set(o,c);break;case"repeat":for(var u,s=n(i);!(u=s()).done;)e.append(o,u.value);break;case"brackets":for(var l,f=n(i);!(l=f()).done;)e.append(o+"[]",l.value);break;default:var y=i.join(",");e.set(o,y)}}else e.set(o,r[o])}return e},w=function(r){var e=r.compareParams;return Object.entries(r.paramsForced).every((function(r){return e[r[0]]===r[1]}))};e.useEffect((function(){var r=Object.keys(l),e=Object.keys(p);0===r.length&&0===e.length||function(){var e=S(l).toString(),t=I(),n=S(t).toString(),o=S(p).toString();if(console.log({defaultParamsString:e}),w({paramsForced:p,compareParams:t})){var i=w({paramsForced:o,compareParams:l});if(r.length>0&&i){if(e===n)return;_({newParams:l})}}else _({newParams:a({},l,p)})}()}),[]);var M=function(r,e){if("number"==typeof j[e])return parseInt(r);if("boolean"==typeof j[e])return"true"===r;if(Array.isArray(j[e])){if("csv"===v)return b.getAll(e).join("").split(",");if("repeat"===v)return console.log({SEARCH_PARAMS:b.getAll(e)}),b.getAll(e);if("brackets"===v)return b.getAll(e+"[]")}return r},R=function(r,e){if(Array.isArray(j[r])){var t;if("brackets"===v){var n,a=b.getAll(r+"[]"),o=S((n={},n[r]=a,n)).toString();return decodeURIComponent(o)}if("csv"===v){var i,c=b.getAll(r),u=S((i={},i[r]=c,i)).toString();return decodeURIComponent(u)}var s=b.getAll(r);return S((t={},t[r]=s,t)).toString()}return e[r]},E=e.useMemo((function(){return"brackets"===v?function(r){for(var e,t={},a=n(r.entries());!(e=a()).done;){var o=e.value,i=o[0],c=o[1];if(i.endsWith("[]")){var u=i.replace("[]","");t[u]?t[u].push(c):t[u]=[c]}else t[i]?Array.isArray(t[i])?t[i].push(c):t[i]=[t[i],c]:t[i]=c}return t}(b):Object.fromEntries(b.entries())}),[b,v]),I=function(r){var e=(void 0===r?{}:r).convert,t=void 0===e||e;return Object.keys(E).reduce((function(r,e){return Object.prototype.hasOwnProperty.call(j,e)&&(r["brackets"===v?e.replace("[]",""):e]=!0===t?M(E[e],e):R(e,E)),r}),{})},C=function(r){var e,t=(void 0===r?{}:r).keepMandatoryParams,n=S(a({},i,(void 0===t||t)&&a({},(e=I({convert:k.length>0}),Object.keys(e).reduce((function(r,t){return Object.prototype.hasOwnProperty.call(i,t)&&(r[t]=e[t]),r}),{}))),p));A(n)},_=function(r){var e=void 0===r?{}:r,t=e.newParams,n=void 0===t?{}:t,o=e.keepParams,c=void 0===o?{}:o;if(0!==Object.keys(n).length||0!==Object.keys(c).length){var u,s=function(r,e){var t=a({},r);return 0===k.length||k.forEach((function(r){var n=[];switch(v){case"csv":n=(b.get(r)||"").split(",").map((function(r){return r.trim()})).filter(Boolean);break;case"repeat":var a=b.getAll(r);n=a.length>0?a:[];break;case"brackets":var o=b.getAll(r+"[]");n=o.length>0?o:[];break;default:var i;n=(null!=(i=b.get(r))?i:"").split(",").map((function(r){return r.trim()})).filter(Boolean)}if(void 0!==e[r]){var c,u=e[r];c="string"==typeof u?n.includes(u)?n.filter((function(r){return r!==u})):[].concat(n,[u]):Array.isArray(u)?Array.from(new Set([].concat(u))):n,t[r]=c}})),t}(function(r,e){var t=I(),n=Object.entries(r).filter((function(r){return!Array.isArray(j[r[0]])})),o=Object.assign(a({},t,Object.fromEntries(n),p)),c=Object.keys(o).reduce((function(r,t){return Object.prototype.hasOwnProperty.call(e,t)&&!1===e[t]||0==!!o[t]||m.includes(o[t])||(r[t]=o[t]),r}),{});return a({},i,c)}(n,c),n),l=(u=s,P.reduce((function(r,e){return Object.prototype.hasOwnProperty.call(u,e)&&(r[e]=u[e]),r}),{}));A(S(l))}else C()},B=e.useCallback((function(r,e){var t=String(r);h.current[t]=e}),[]);return e.useEffect((function(){for(var r=0,e=Object.entries(h.current);r<e.length;r++){var t,a,o=e[r],i=o[0],c=null!=(t=E[i])?t:null;if(c!==(null!=(a=O.current[i])?a:null))for(var u,s=n(o[1]);!(u=s()).done;)(0,u.value)();O.current[i]=c}}),[E]),{searchParams:b,updateParams:_,clearParams:C,getParams:I,getParam:function(r,e){var t=String(r);return!0===(null==e?void 0:e.convert)?M(b.get(t),t):R(t,E)},onChange:B}};
//# sourceMappingURL=react-magic-search-params.cjs.production.min.js.map