synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
143 lines (142 loc) • 4.75 kB
JavaScript
import { jsx as d } from "react/jsx-runtime";
import { useState as f, useCallback as h, useMemo as I } from "react";
import L, { RestrictionUiType as t } from "./AccessIcon.js";
import { RestrictableObjectType as u, RestrictionLevel as A } from "@sage-bionetworks/synapse-types";
import "../../utils/PermissionLevelToAccessType.js";
import "../../utils/SynapseConstants.js";
import * as v from "../../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 { getEndpoint as g, BackendDestinationEnum as j } from "../../utils/functions/getEndpoint.js";
import "lodash-es";
import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
import { useSynapseContext as T } from "../../utils/context/SynapseContext.js";
import "use-deep-compare-effect";
import "@tanstack/react-query";
import "@tanstack/query-core";
import "lodash-es/isEmpty";
import "lodash-es/isEqual";
import "lodash-es/xorWith";
import "@mui/material";
import { useGetRestrictionInformation as R } from "../../synapse-queries/dataaccess/useRestrictionInformation.js";
import "@sage-bionetworks/synapse-client";
import F from "../../synapse-queries/entity/useEntityBundle.js";
import { isFileEntity as N, implementsExternalFileHandleInterface as w } from "../../utils/types/IsType.js";
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 D, { checkHasUnsupportedRequirement as O } from "../AccessRequirementList/AccessRequirementList.js";
function P(e, c) {
return F(e, void 0, void 0, {
...c,
select: (r) => {
if (!N(r.entity))
return !1;
const s = r.entity, i = r.fileHandles?.find(
(m) => m.id === s.dataFileHandleId
);
return i && w(i);
}
});
}
function U(e, c) {
const { isAuthenticated: r } = T(), { data: s } = R({
restrictableObjectType: u.ENTITY,
objectId: e
}), { data: o, isLoading: i } = P(e, {
enabled: c.enabled
});
if (s) {
if (c.enabled) {
if (i)
return;
if (o)
return t.AccessibleExternalFileHandle;
}
return s.hasUnmetAccessRequirement ? t.AccessBlockedByRestriction : s.userEntityPermissions.canDownload ? s.restrictionLevel !== A.OPEN ? t.AccessibleWithTerms : t.Accessible : r ? t.AccessBlockedByACL : t.AccessBlockedToAnonymous;
}
}
function C(e) {
switch (e) {
case t.Accessible:
return "Open Access";
case t.AccessibleWithTerms:
return "View Terms";
case t.AccessBlockedByRestriction:
return "Request Access";
case t.AccessBlockedByACL:
return "Access Denied";
case t.AccessBlockedToAnonymous:
return "Sign In Required";
case t.AccessibleExternalFileHandle:
return "External Access";
case void 0:
return "Loading...";
default:
return "";
}
}
function ye(e, c = !1, r, s = {}) {
const [o, i] = f(!1), [m, b] = f([]), { accessToken: p } = T(), { showExternalAccessIcon: E = !1 } = s, n = U(e, {
enabled: E
}), { data: a } = R({
restrictableObjectType: u.ENTITY,
objectId: e
}), y = C(n), q = /* @__PURE__ */ d(
L,
{
restrictionUiType: n,
wrap: c,
sx: { ...r }
}
), k = h(() => {
v.getAllAccessRequirements(p, e).then(
(l) => {
O(l) ? window.open(
`${g(
j.PORTAL_ENDPOINT
)}AccessRequirements:ID=${e}&TYPE=ENTITY`,
"_blank"
) : (b(l), i(!0));
}
);
}, [p, e]), x = I(() => {
if (!a || !n)
return !1;
const l = a.hasUnmetAccessRequirement, H = a.restrictionLevel;
return l || H !== A.OPEN || n === t.AccessBlockedToAnonymous;
}, [a, n]), B = o ? /* @__PURE__ */ d(
D,
{
subjectId: e,
subjectType: u.ENTITY,
accessRequirementFromProps: m,
renderAsModal: !0,
onHide: () => {
i(!1);
}
}
) : null;
return {
restrictionUiType: n,
accessText: y,
icon: q,
handleGetAccess: k,
isClickable: x,
accessRequirementDialog: B,
setDisplayAccessRequirement: i
};
}
export {
ye as default,
U as useGetRestrictionUiType,
ye as useHasAccess
};
//# sourceMappingURL=useHasAccess.js.map