UNPKG

synapse-react-client

Version:

[![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synapse-react-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettie

160 lines (159 loc) 4.3 kB
import { useDebouncedEffect as l } from "@react-hookz/web"; import { cloneDeep as f, isEqual as g } from "lodash-es"; import { useState as i, useReducer as C, useMemo as x } from "react"; import { removeEmptyQueryParams as b, queryRequestsHaveSameTotalResults as d } from "../../functions/queryUtils.js"; import { goToPage as F, setPageSize as h, removeValueFromQueryFilter as k, removeQueryFilter as D, removeValueFromSelectedFacet as V, setRangeFacetValue as E, removeSelectedFacet as O, addValueToSelectedFacet as T, getQueryFromSetStateAction as P } from "./TableQueryReducerActions.js"; import { DEBOUNCE_DELAY_MS as A } from "./useImmutableTableQuery.js"; function _(n, q, m) { const [Q, R] = i(0), [a, s] = i(!1), [t, y] = C( (r, u) => { let e = r.nextQueryRequest; switch (u.type) { case "resetDebounce": return R((o) => o + 1), r; case "setQuery": { e = P( u, r.nextQueryRequest ); break; } case "addValueToSelectedFacet": { e = T( u, r.nextQueryRequest ); break; } case "removeSelectedFacet": { e = O( u, r.nextQueryRequest ); break; } case "setRangeFacetValue": { e = E( u, r.nextQueryRequest ); break; } case "removeValueFromSelectedFacet": { e = V( u, r.nextQueryRequest ); break; } case "removeQueryFilter": { e = D( u, r.nextQueryRequest ); break; } case "removeValueFromQueryFilter": { e = k( u, r.nextQueryRequest ); break; } case "setPageSize": { e = h( u, r.nextQueryRequest ); break; } case "goToPage": { e = F(u, r.nextQueryRequest); break; } case "resetQuery": { e = n; break; } case "cancelChanges": case "resetUncommittedChanges": { e = r.currentQueryRequest; break; } case "confirmChanges": case "commitChanges": { e = f(r.nextQueryRequest); break; } } e.query = b( e.query ); const c = q && !d( r.currentQueryRequest.query, e.query ); if ( // No commit cases: // If `noCommit` is explicitly specified in the commit options u.commitOptions && "noCommit" in u.commitOptions || // Or if the user is in the 'confirm' state (modal is shown) AND // the action is not the 'confirmChanges' or 'cancelChanges' action. c && u.type !== "confirmChanges" && u.type !== "cancelChanges" ) return { currentQueryRequest: r.currentQueryRequest, nextQueryRequest: e, isConfirmingChange: c }; if (u.commitOptions && "debounce" in u.commitOptions) return s(!0), { currentQueryRequest: r.currentQueryRequest, nextQueryRequest: e, isConfirmingChange: c }; if (s(!1), m && !g(r.currentQueryRequest, e)) { const o = JSON.stringify(e.query); m(o); } return { currentQueryRequest: e, nextQueryRequest: e, isConfirmingChange: !1 }; }, { currentQueryRequest: n, nextQueryRequest: n, isConfirmingChange: !1 } ); return l( () => { a && (y({ type: "commitChanges" }), s(!1)); }, // nextQueryRequest MUST be included in the dependencies to ensure the debounce resets when it changes [ t.nextQueryRequest, a, s, Q ], A ), x( () => ({ currentQueryRequest: t.currentQueryRequest, nextQueryRequest: t.nextQueryRequest, isConfirmingChange: t.isConfirmingChange, dispatch: y }), [ t.currentQueryRequest, t.isConfirmingChange, t.nextQueryRequest ] ); } export { _ as useTableQueryReducer }; //# sourceMappingURL=useTableQueryReducer.js.map