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

511 lines (510 loc) 19.9 kB
import { jsx as t, jsxs as m, Fragment as z } from "react/jsx-runtime"; import ot from "./components/GridMenuButton/GridMenuButton.js"; import rt from "./components/UploadCsvToGridButton.js"; import it from "./components/ExportCsvFromGridButton.js"; import et from "./hooks/useGetSchemaForGrid.js"; import mt from "./MergeGridWithSourceTableButton.js"; import pt from "./utils/computeReplicaSelectionModel.js"; import nt from "./utils/modelRowsToGrid.js"; import "../../assets/icons/error_page/maintenance.svg.js"; import "../../assets/icons/error_page/no-access.svg.js"; import "../../assets/icons/error_page/unavailable.svg.js"; import "../../utils/PermissionLevelToAccessType.js"; import "../../utils/SynapseConstants.js"; import { forwardRef as st, useState as g, useRef as I, useImperativeHandle as ct, useEffect as E, useMemo as L, useCallback as d } from "react"; 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 "@sage-bionetworks/synapse-types"; import "../../utils/functions/EntityTypeUtils.js"; import "lodash-es"; import "@sage-bionetworks/synapse-client/util/synapseClientFetch"; import "../../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 { Stack as lt } from "@mui/material"; import "@sage-bionetworks/synapse-client"; import { useGetEntity as dt } from "../../synapse-queries/entity/useEntity.js"; import "../../utils/types/IsType.js"; import { useGetCurrentUserBundle as at } from "../../synapse-queries/user/useUserBundle.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 '../Plot/SynapsePlot.css';import '../FullWidthAlert/FullWidthAlert.css';import '../../style/components/_spinner.css';/* empty css */ import "react-router"; import "@mui/icons-material/Close"; import "../styled/StyledPopover.js"; import "../Markdown/MarkdownSynapse.js"; import { SmartToyTwoTone as ut } from "@mui/icons-material"; import "react-hot-toast"; import "react-transition-group"; /* empty css */ import "@sage-bionetworks/synapse-client/generated/models/DoiObjectType"; import "react-error-boundary"; import "../AccessTokenPage/AccessTokenCard/AccessTokenCard.js"; import "@mui/icons-material/ContentCopy"; import "../styled/StyledFormControl.js"; import "../../assets/icons/account-certified.svg.js"; import "../../assets/icons/account-enabled-mfa.svg.js"; import "../../assets/icons/account-validated.svg.js"; import "../../utils/functions/DateFormatter.js"; import "@react-hookz/web"; import "dayjs"; import "../../assets/ArcusBioIcon.svg.js"; import "@mui/material/SvgIcon"; import "../../assets/icons/AccessPending.svg.js"; import "../../assets/icons/AccessPendingCloud.svg.js"; import "../../assets/icons/FileWithShield.svg.js"; import "../../assets/icons/MultiFile.svg.js"; import "../../assets/icons/UnpackagableFile.svg.js"; import "../../assets/icons/bioChemicalPhysical.svg.js"; import "../../assets/icons/computationalTool.svg.js"; import "../../assets/icons/dataReuse.svg.js"; import "../../assets/icons/inSilicoModel.svg.js"; import "../../assets/icons/modelSystem.svg.js"; import "../../assets/mui_components/PackagableFile.svg.js"; import "../../assets/icons/spatialProfiling.svg.js"; import "../Authentication/AuthenticationMethodSelection.js"; import "mui-one-time-password-input"; import "../Authentication/TwoFactorEnrollmentForm.js"; import "../styled/LeftRightPanel.js"; import "../Authentication/RecoveryCodeGrid.js"; import "../GenericCard/GenericCardActionButton.js"; import "@mui/material/Link"; import "@mui/material/Skeleton"; import "@mui/material/Tooltip"; import "@mui/material/Typography"; import "../../assets/icons/chart2.svg.js"; import "../../assets/icons/Data2.svg.js"; import "../../assets/icons/DNA_Two.svg.js"; import "../../assets/icons/file.svg.js"; import "../../assets/icons/institution.svg.js"; import "../../assets/icons/mouse.svg.js"; import "../../assets/icons/organizations.svg.js"; import "../../assets/icons/person.svg.js"; import "../../assets/icons/study-active.svg.js"; import "../../assets/icons/study-complete.svg.js"; import "../../assets/icons/translational.svg.js"; import "../../assets/icons/tree_horizontal.svg.js"; import "../../assets/icons/standardDataModel.svg.js"; import "../../assets/icons/Challenge.svg.js"; import "react-intersection-observer"; import "@rjsf/utils"; import "../SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js"; import "@mui/material/TextField"; import "jsonpath-plus"; import "@mui/material/ListItem"; import "@mui/material/FormHelperText"; import "@mui/material/List"; import "../DateTimePicker/DateTimePicker.js"; import "../JsonSchemaForm/widgets/SelectWidget.js"; import "@rjsf/mui"; import "@rjsf/validator-ajv8"; import "../../utils/context/GlobalIsEditingContext.js"; import "../../assets/icons/DoubleQuotes.svg.js"; import "../EntityDownloadConfirmation/EntityDownloadConfirmation.js"; import "../QueryContext/QueryContext.js"; import "../QueryVisualizationWrapper/QueryVisualizationContext.js"; import "react-share"; import "../GenericCard/GenericCard.js"; import { SkeletonTable as ht } from "../Skeleton/SkeletonTable.js"; import "@mui/system"; import "../GenericCard/Linkify.js"; import "jotai"; import "lodash-es/noop"; import "../QueryWrapper/TableRowSelectionState.js"; import "../styled/WideButton.js"; import "pluralize"; import "react-select"; import "../AccessRequirementList/AccessRequirementList.js"; import "../DownloadCart/ActionRequiredCard/ActionRequiredCard.js"; import "../EntityAclEditor/EntityAclEditor.js"; import "../SynapseTable/SynapseTable.js"; import "../styled/StyledTableContainer.js"; import "@mui/icons-material/ExitToApp"; import "../ChallengeTeamWizard/CreateChallengeTeam.js"; import "../ChallengeTeamWizard/MembershipRequestForm.js"; import "@mui/x-data-grid"; import "@mui/material/InputBase"; import "@mui/icons-material/Search"; import "@mui/icons-material/AddCircleTwoTone"; import "../EntityFinder/details/configurations/EntityChildrenDetails.js"; import "../EntityFinder/details/view/DetailsView.js"; import "immutable"; import "../styled/LightTooltip.js"; import "../../assets/illustrations/challenges_illustration.svg.js"; import "../../assets/illustrations/cohort_builder_illustration.svg.js"; import "../../assets/illustrations/data_access_management_illustration.svg.js"; import "../../assets/illustrations/datasets_illustration.svg.js"; import "../../assets/illustrations/discussions_illustration.svg.js"; import "../../assets/illustrations/docker_illustration.svg.js"; import "../../assets/illustrations/favorites_illustration.svg.js"; import "../../assets/illustrations/files_illustration.svg.js"; import "../../assets/illustrations/following_illustration.svg.js"; import "../../assets/illustrations/projects_illustration.svg.js"; import "../../assets/illustrations/tables_illustration.svg.js"; import "../../assets/illustrations/teams_illustration.svg.js"; import "../../assets/illustrations/trash_can_illustration.svg.js"; import "../../assets/illustrations/wikis_illustration.svg.js"; import "../../assets/illustrations/donation_illustration.svg.js"; import "../../assets/illustrations/left_dot_blob_illustration.svg.js"; import "../../assets/illustrations/right_dot_blob_illustration.svg.js"; import "../../assets/illustrations/left_dot_blob_dark_illustration.svg.js"; import "../../assets/illustrations/right_dot_blob_dark_illustration.svg.js"; import "../../assets/illustrations/underconstruction_illustration.svg.js"; import "../DownloadCart/DownloadListTable.js"; import "@hyperjump/json-schema"; import "@hyperjump/json-schema/draft-07"; import "@hyperjump/json-schema/annotated-instance/experimental"; import "@hyperjump/json-schema/annotations/experimental"; import "@rjsf/core"; import "../EntityFinder/EntityFinder.js"; import "shortid"; import "../Evaluation/EvaluationRoundEditor.js"; import "react-switch"; import "../Plot/Plot.js"; import "../ColorGradient/ColorGradient.js"; import "@mui/x-date-pickers"; import "@mui/x-date-pickers/AdapterDayjs"; import "@mui/x-date-pickers/LocalizationProvider"; import "../FeaturedDataTabs/FacetPlotsCardGrid.js"; import "../Forum/ForumTable.js"; import "@mui/icons-material/NavigateNext"; import "@react-google-maps/api"; import "../Markdown/MarkdownUtils.js"; import "../OAuthClientManagement/OAuthManagement.js"; import "../OrientationBanner/OrientationBanner.js"; import "lodash-es/cloneDeep"; import "lodash-es/uniq"; import "lodash-es/countBy"; import "lodash-es/first"; import "lodash-es/orderBy"; import "../styled/LargeButton.js"; import "../../assets/illustrations/diagonalLinePattern.svg.js"; import "@upsetjs/react"; /* empty css */ import "reactflow"; import "../ProvenanceGraph/ProvenanceUtils.js"; import "reactflow/dist/style.css"; import "../download_list/DownloadDetails.js"; import "../WizardChoiceButton/WizardChoiceButton.js"; import "../SynapseTable/export/ExternalAnalysisPlatformsConstants.js"; import "../styled/InlineBadge.js"; import "../AccessRequirementAclEditor/AccessRequirementAclEditor.js"; import "../RssFeedCards/RssFeedCards.js"; import "../styled/InputSizedButton.js"; import "../SubsectionRowRenderer/SubsectionRowRenderer.js"; import "@apidevtools/json-schema-ref-parser"; import "json-rules-engine"; import "lodash-es/find"; import "lodash-es/findIndex"; import "lodash-es/get"; import "lodash-es/isUndefined"; import "lodash-es/keys"; import "lodash-es/pick"; import "lodash-es/remove"; import "lodash-es/set"; import "lodash-es/trimStart"; import "../SynapseForm/SynapseFormSubmissionGrid.js"; import "../SynapseChat/AccessLevelMenu.js"; import "react-draggable"; import "../TimelinePlot/phasesQueryResponseData.js"; import "../EntityHeaderTable/EntityHeaderTable.js"; import "../MuiContainer.js"; import s from "@mui/material/Grid"; import "@mui/icons-material/ArrowForwardIos"; import "../PortalAclEditor/PortalAclEditor.js"; import "../SynapseHomepageV2/HomepageStyles.js"; import { getSchemaPropertiesInfo as ft } from "../../utils/jsonschema/getSchemaPropertyInfo.js"; import { ClickableJsonCrdt as St } from "clickable-json"; import { GridAgentChat as gt } from "../SynapseChat/GridAgentChat.js"; import It from "./DataGrid.js"; import { useGridUndoRedo as Ct } from "./hooks/useGridUndoRedo.js"; import { StartGridSession as yt } from "./StartGridSession.js"; import { useDataGridWebSocket as Et } from "./useDataGridWebsocket.js"; import { applyModelChange as Rt } from "./utils/applyModelChange.js"; import { removeNoOpOperations as xt } from "./utils/DataGridUtils.js"; import { mapOperationsToModelChanges as Gt } from "./utils/mapOperationsToModelChanges.js"; import bt from "../AccessRequirementList/RequirementItem/CertificationRequirement.js"; import { ValidationAlert as vt } from "./components/ValidationAlert.js"; const Ye = st( ({ agentRegistrationId: B, showDebugInfo: R = !1 }, D) => { const [o, P] = g(null), [p, A] = g(null), [j, v] = g(!1), [F, w] = g( null ), a = I(null), u = I(null), { data: J, isLoading: W } = at(); ct( D, () => ({ initializeGrid: (r) => { a.current && a.current.handleStartSession(r); }, loadExistingSession: (r) => { a.current && a.current.handleLoadSession(r); } }), [] ); const { isConnected: n, websocketInstance: T, hasCompletedInitialSync: H, model: i, modelSnapshot: h, connect: k, presignedUrl: c, hasSufficientData: N } = Et(), C = I(null); E(() => { C.current = T; }, [T]); const x = I(null); E(() => { if (p == null || !o?.sessionId) { x.current = null; return; } const r = { replicaId: p, sessionId: o.sessionId }, e = x.current; e && e.replicaId === r.replicaId && e.sessionId === r.sessionId || (x.current = r, k(p, o.sessionId)); }, [p, o?.sessionId, k]), E(() => { i === null && (w(null), u.current && u.current.setActiveCell(null)); }, [i]); const G = et(o), { data: V } = dt( o?.sourceEntityId, void 0, { enabled: !!o?.sourceEntityId } ), _ = V?.concreteType === "org.sagebionetworks.repo.model.table.EntityView", b = L(() => ft(G ?? null), [G]), $ = n ? "Connected" : "Disconnected", f = L( () => h ? nt(i, h) : [], [i, h] ), y = d(() => { !n || !C.current || C.current.sendPatch(); }, [n, C]); E(() => { n && y(); }, [n, y]); const l = d( (r, e) => { e.forEach((S) => { Rt(r, S, b); }), y(); }, [y, b] ), q = d( (r) => { if (!i) { console.error("Model is not initialized"); return; } r.type === "DELETE" && u.current && u.current.setActiveCell(null), l(i, [r]); }, [i, l] ), { undoUI: Y, redoUI: K, addOperationsToUndoStack: M, clearRedoStack: O } = Ct(q), Q = d( (r, e) => { if (!i) { console.error("Model is not initialized"); return; } if (e = xt(r, f, e), e.length > 0) { O(), M(e, f, r); const S = Gt(e, r); l(i, S); } }, [ i, f, O, M, l ] ), X = d( (r) => { const { selection: e } = r; if (e != null && (w(e), i != null && p != null)) { const S = pt( e, i ); l(i, [ { type: "SET_SELECTION", replicaId: p.toString(), selection: S } ]); } }, [l, i, p] ), U = I(null), [, Z] = g({}), tt = d( (r, e) => { r !== null && (U.current = r, Z({})); }, [] ); return !W && !J?.isCertified ? /* @__PURE__ */ t(bt, {}) : /* @__PURE__ */ t("div", { children: /* @__PURE__ */ m(s, { container: !0, spacing: 2, children: [ /* @__PURE__ */ t(s, { size: { xs: 12, xl: 8 }, children: /* @__PURE__ */ t( yt, { ref: a, onSessionChange: P, onReplicaChange: A, show: R } ) }), /* @__PURE__ */ t(s, { size: { xs: 12, xl: 4 }, children: R && /* @__PURE__ */ m("div", { children: [ /* @__PURE__ */ m("p", { children: [ "Session ID: ", o?.sessionId || "No session created" ] }), /* @__PURE__ */ m("p", { children: [ "Replica ID: ", p || "No replica created" ] }), /* @__PURE__ */ m("p", { children: [ "Source Entity ID:", " ", o?.sourceEntityId || "No source entity" ] }), /* @__PURE__ */ m("p", { children: [ "JSON Schema $id:", " ", o?.gridJsonSchema$Id || "No schema attached to session" ] }), /* @__PURE__ */ m("p", { children: [ "Presigned URL:", " ", c ? c.substring(0, 30) + (c.length > 30 ? " ... " + c.substring(c.length - 10) : "") : "No URL generated" ] }), /* @__PURE__ */ m("p", { children: [ "WebSocket Status:", " ", /* @__PURE__ */ t("span", { style: { color: n ? "green" : "red" }, children: $ }) ] }) ] }) }), o && /* @__PURE__ */ m(z, { children: [ !N && /* @__PURE__ */ m(s, { size: 12, children: [ /* @__PURE__ */ t("h3", { children: "Setting up grid..." }), /* @__PURE__ */ m("div", { style: { marginBottom: "10px" }, children: [ !o && /* @__PURE__ */ t("p", { children: "Creating grid session..." }), o && !p && /* @__PURE__ */ t("p", { children: "Setting up real-time sync..." }), o && p && !c && /* @__PURE__ */ t("p", { children: "Establishing secure connection..." }), o && p && c && !n && /* @__PURE__ */ t("p", { children: "Connecting to server..." }), n && !H && /* @__PURE__ */ t("p", { children: "Loading table data..." }), /* @__PURE__ */ t(ht, { numRows: 4, numCols: 1 }) ] }) ] }), N && /* @__PURE__ */ m(z, { children: [ /* @__PURE__ */ t(s, { size: 12, children: /* @__PURE__ */ m( lt, { direction: "row", spacing: 1, sx: { justifyContent: "flex-end" }, children: [ Y, K, /* @__PURE__ */ t( ot, { variant: "outlined", onClick: () => v(!0), startIcon: /* @__PURE__ */ t(ut, {}), children: "Open chat" } ), /* @__PURE__ */ t( gt, { agentRegistrationId: B, open: j, onClose: () => v(!1), gridSessionId: o.sessionId, usersReplicaId: p, chatbotName: "Grid Assistant" } ), o.sourceEntityId && /* @__PURE__ */ t( rt, { sourceEntityId: o.sourceEntityId, gridSessionId: o.sessionId } ), o.sessionId && /* @__PURE__ */ t( it, { gridSessionId: o.sessionId, filename: "grid-" + (o.sourceEntityId || "export") } ), o.sourceEntityId && /* @__PURE__ */ t( mt, { sourceEntityId: o.sourceEntityId, gridSessionId: o.sessionId } ) ] } ) }), /* @__PURE__ */ t(s, { size: 12, children: /* @__PURE__ */ t( It, { gridRef: u, rowValues: f, columnNames: h?.columnNames ?? [], columnOrder: h?.columnOrder ?? [], schemaPropertiesInfo: b, entityIsView: _, jsonSchema: G, lastSelection: F, handleChange: Q, handleSelectionChange: X, onSelectedRowChange: tt } ) }), /* @__PURE__ */ t(s, { size: 12, children: /* @__PURE__ */ t( vt, { selectedRowIndex: U.current, rowValues: f } ) }) ] }), R && /* @__PURE__ */ m( s, { size: 12, style: { margin: "10px 0", padding: "10px", border: "1px solid #ccc", maxHeight: "400px", overflowY: "auto" }, children: [ /* @__PURE__ */ t("h3", { children: "Model" }), i ? /* @__PURE__ */ t(St, { model: i }) : "No model available" ] } ) ] }) ] }) }); } ); export { Ye as default }; //# sourceMappingURL=SynapseGrid.js.map