synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
189 lines (188 loc) • 6.66 kB
JavaScript
import { jsx as s, jsxs as C } from "react/jsx-runtime";
import { isSingleNotSetValue as q, getCorrespondingColumnForFacet as T, facetObjectMatchesDefinition as v } from "../../../utils/functions/queryUtils.js";
import { groupBy as M, union as E, noop as N, sortBy as j } from "lodash-es";
import { Suspense as D, useMemo as F, useState as Q, useCallback as A } from "react";
import { useDeepCompareEffectNoCheck as B } from "use-deep-compare-effect";
import { useQueryContext as G } from "../../QueryContext/QueryContext.js";
import "@sage-bionetworks/synapse-types";
import "../../../utils/PermissionLevelToAccessType.js";
import "../../../utils/SynapseConstants.js";
import "../../../synapse-client/SynapseClient.js";
import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
import "@sage-bionetworks/synapse-client/util/SynapseClientError";
import "../../../utils/functions/EntityTypeUtils.js";
import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
import "../../../utils/context/SynapseContext.js";
import "@tanstack/react-query";
import "@tanstack/query-core";
import "lodash-es/isEmpty";
import "lodash-es/isEqual";
import "lodash-es/xorWith";
import "@mui/material";
import "@sage-bionetworks/synapse-client";
import "../../../utils/hooks/useCookiePreferences.js";
import "../../../utils/hooks/useSourceAppConfigs.js";
import "universal-cookie";
import "../../../utils/AppUtils/session/ApplicationSessionContext.js";
import "../../../utils/context/FullContextProvider.js";
import "../../../utils/context/DocumentMetadataContext.js";
import '../../../style/components/_spinner.css';/* empty css */
import "react-router";
import "../../../utils/types/IsType.js";
import { useSuspenseGetQueryMetadata as O } from "../../QueryWrapper/useGetQueryMetadata.js";
import { useQueryVisualizationContext as I } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
import { CombinedRangeFacetFilter as J } from "./CombinedRangeFacetFilter.js";
import { EnumFacetFilter as P } from "./EnumFacetFilter/EnumFacetFilter.js";
import { FacetChip as _ } from "./FacetChip.js";
import { FacetFilterHeader as z } from "./FacetFilterHeader.js";
import { FacetFilterControlsSkeleton as H } from "./FacetFilterSkeleton.js";
import { getDefaultShownFacetFilters as R } from "./FacetFilterUtils.js";
import L from "./JsonColumnFacetFilters.js";
import { RangeFacetFilter as W } from "./RangeFacetFilter.js";
const K = (t) => ({
concreteType: "org.sagebionetworks.repo.model.table.FacetColumnValuesRequest",
columnName: t.columnName,
facetValues: t.facetValues.filter((l) => l.isSelected).map((l) => l.value)
}), U = (t, l = []) => {
const i = l.findIndex(
(c) => v(c, t)
), m = t.concreteType === "org.sagebionetworks.repo.model.table.FacetColumnValuesRequest" && (!t.facetValues || !t.facetValues.length), o = t.concreteType === "org.sagebionetworks.repo.model.table.FacetColumnRangeRequest" && (!t.min || !t.max);
return i > -1 ? m || o ? l.splice(i, 1) : l[i] = t : l.push(t), l;
};
function Oe(t, l, i, m, o = !1) {
m ? l.facetValues.forEach((r) => {
r.value === m && (r.isSelected = o);
}) : l.facetValues.forEach((r) => {
r.isSelected = !1;
});
const c = K(l), f = U(
c,
t?.query?.selectedFacets
);
i(f);
}
function X(t) {
const { availableFacets: l, initialExpandedFacetControls: i } = t, { getCurrentQueryRequest: m, combineRangeFacetConfig: o } = G(), { getColumnDisplayName: c } = I(), f = F(
() => m(),
[m]
), { data: r } = O(), u = r.facets.filter(
(e) => (
// If availableFacets is configured, remove those that don't match.
l == null || l.includes(e.columnName)
)
).filter((e) => e.jsonPath == null).filter(
(e) => (
// Don't show facets if included in the combine range facet config, handled separately
o == null || o.maxFacetColumn !== e.columnName && o.minFacetColumn !== e.columnName
)
).filter(
(e) => (
// Don't show facets where there are no values
!q(e)
)
), h = o ? r.facets.filter(
(e) => o.maxFacetColumn === e.columnName || o.minFacetColumn === e.columnName
) : [], p = M(
r.facets.filter((e) => !!e.jsonPath),
"columnName"
), d = F(() => {
const e = [];
return u.forEach((n) => e.push(n.columnName)), o && e.push(o.label), p && Object.keys(p).forEach(
(n) => e.push(n)
), e;
}, [o, u, p]), [a, y] = Q(
R(
d,
f.query.selectedFacets
)
);
B(() => {
const e = E(
i ?? [],
Array.from(a)
);
y(
R(
d,
f.query.selectedFacets,
e
)
);
}, [u]);
const b = r.columnModels, S = A(
(e) => {
const n = new Set(a);
n.has(e) ? n.delete(e) : n.add(e), y(n);
},
[a]
), w = o ? b.find(
(e) => e.name === o.minFacetColumn
)?.columnType : void 0, x = F(
() => (u ?? []).filter((e) => a.has(e.columnName)),
[a, u]
), V = F(
() => Object.entries(p).filter(
([e]) => a.has(e)
),
[a, p]
);
return /* @__PURE__ */ C("div", { className: "FacetFilterControls", children: [
/* @__PURE__ */ C("div", { children: [
/* @__PURE__ */ s(
z,
{
label: "Available Filters",
hideCollapsible: !0,
isCollapsed: !1,
onClick: N
}
),
j(d).map((e) => /* @__PURE__ */ s(
_,
{
onClick: () => S(e),
isChecked: a.has(e),
children: c(e)
},
e
))
] }),
o && h.length >= 2 && /* @__PURE__ */ s(
J,
{
facetResults: h,
label: o.label,
columnType: w
}
),
x.map((e) => {
const n = T(e, b);
return /* @__PURE__ */ C("div", { className: "FacetFilterControls__facet", children: [
e.facetType === "enumeration" && n && /* @__PURE__ */ s(P, { containerAs: "Collapsible", facet: e }),
e.facetType === "range" && n && /* @__PURE__ */ s(W, { facetResult: e })
] }, e.columnName);
}),
V.map(([e, n]) => {
const g = r?.columnModels?.find(
(k) => k.name === e
);
return g && /* @__PURE__ */ s(
L,
{
columnModel: g,
facets: n
},
e
);
})
] });
}
function Ie(t) {
return /* @__PURE__ */ s(D, { fallback: /* @__PURE__ */ s(H, {}), children: /* @__PURE__ */ s(X, { ...t }) });
}
export {
Oe as applyChangesToValuesColumn,
Ie as default
};
//# sourceMappingURL=FacetFilterControls.js.map