synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
160 lines (159 loc) • 4.3 kB
JavaScript
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