react-qif
Version:
Powerful filtering system for React.js applications
81 lines (80 loc) • 1.73 kB
JavaScript
import { jsx as b } from "react/jsx-runtime";
import { createContext as P, useContext as v, useCallback as i, useState as O, useMemo as f } from "react";
import { useQueryStates as j } from "nuqs";
const p = P(null);
function J({
children: o,
instance: s
}) {
return /* @__PURE__ */ b(p.Provider, { value: s, children: o });
}
const N = () => {
const o = v(p);
if (!o)
throw new Error("useFiltersContext must be used within a FiltersProvider");
return o;
};
function Q(o) {
const { syncWithSearchParams: s = !0, parsers: u } = o, c = i(() => {
const t = {};
return Object.keys(u).forEach((e) => {
t[e] = u[e].defaultValue;
}), t;
}, [u]), [d, r] = j(u), [x, a] = O(c), n = f(
() => s ? d : x,
[s, d, x]
), m = i(() => {
const t = c();
s ? r((e) => ({ ...e, ...t })) : a(t);
}, [s, c, r]), h = i(
(t) => {
s ? r((e) => ({ ...e, ...t })) : a((e) => ({
...e,
...t
}));
},
[s, r]
), y = i(
(t, e) => {
s ? r((l) => ({ ...l, [t]: e })) : a((l) => ({
...l,
[t]: e
}));
},
[s, r]
), C = i(
(t) => n[t],
[n]
), S = i(
(t) => {
s ? r((e) => {
const { [t]: l, ...F } = e;
return F;
}) : a((e) => {
const { [t]: l, ...F } = e;
return F;
});
},
[s]
), g = f(() => c(), []), V = f(
() => JSON.stringify(n) === JSON.stringify(g),
[n, g]
);
return f(
() => ({
reset: m,
filters: n,
setValue: y,
getValue: C,
unregister: S,
isResetDisabled: V,
setFilters: h
}),
[n, h, y, C, m, S]
);
}
export {
J as FiltersProvider,
Q as useFilters,
N as useFiltersContext
};