UNPKG

react-qif

Version:

Powerful filtering system for React.js applications

81 lines (80 loc) 1.73 kB
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 };