synapse-react-client 4.0.38 → 4.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.js +1 -1
- package/dist/aridhia-queries/useAridhiaQuery.d.ts +6 -2
- package/dist/aridhia-queries/useAridhiaQuery.d.ts.map +1 -1
- package/dist/aridhia-queries/useAridhiaQuery.js +3 -0
- package/dist/aridhia-queries/useAridhiaQuery.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts +2 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +60 -37
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +12 -0
- package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -0
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js +56 -0
- package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -0
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.d.ts.map +1 -1
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js +38 -30
- package/dist/components/Aridhia/DarWizard/AridhiaDarWizard.js.map +1 -1
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js +15 -14
- package/dist/components/Aridhia/DarWizard/DarSubmittedPanel.js.map +1 -1
- package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts +11 -0
- package/dist/components/Aridhia/RdcaDapEligibilityDialog.d.ts.map +1 -0
- package/dist/components/Aridhia/RdcaDapEligibilityDialog.js +37 -0
- package/dist/components/Aridhia/RdcaDapEligibilityDialog.js.map +1 -0
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +2 -2
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
- package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts +10 -0
- package/dist/components/Aridhia/aridhiaFairPortalUrls.d.ts.map +1 -0
- package/dist/components/Aridhia/aridhiaFairPortalUrls.js +11 -0
- package/dist/components/Aridhia/aridhiaFairPortalUrls.js.map +1 -0
- package/dist/components/Aridhia/rdcaDapConstants.d.ts +3 -0
- package/dist/components/Aridhia/rdcaDapConstants.d.ts.map +1 -0
- package/dist/components/Aridhia/rdcaDapConstants.js +6 -0
- package/dist/components/Aridhia/rdcaDapConstants.js.map +1 -0
- package/dist/components/DataExplorer/DataExplorer.css +1 -1
- package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.js +50 -50
- package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
- package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.module.scss +29 -6
- package/dist/components/DataGrid/columns/DateTimeColumn.d.ts +16 -7
- package/dist/components/DataGrid/columns/DateTimeColumn.d.ts.map +1 -1
- package/dist/components/DataGrid/columns/DateTimeColumn.js +79 -57
- package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +11 -8
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +10 -0
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePicker.js +18 -0
- package/dist/components/DatePicker/DatePicker.js.map +1 -0
- package/dist/components/EntityCitation/EntityCitation.d.ts.map +1 -1
- package/dist/components/EntityCitation/EntityCitation.js +8 -5
- package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
- package/dist/components/HasAccess/AccessIcon.d.ts +3 -1
- package/dist/components/HasAccess/AccessIcon.d.ts.map +1 -1
- package/dist/components/HasAccess/AccessIcon.js +11 -1
- package/dist/components/HasAccess/AccessIcon.js.map +1 -1
- package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts +2 -1
- package/dist/components/PortalHomePageHeader/PortalHomePageHeader.d.ts.map +1 -1
- package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js +81 -53
- package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
- package/dist/components/ProjectInfo/ProjectInfo.d.ts.map +1 -1
- package/dist/components/ProjectInfo/ProjectInfo.js +3 -2
- package/dist/components/ProjectInfo/ProjectInfo.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.css +1 -0
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts +6 -0
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -0
- package/dist/components/QueryBuilder/FilterConditionRow.js +257 -0
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -0
- package/dist/components/QueryBuilder/FilterConditionRow.module.js +17 -0
- package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -0
- package/dist/components/QueryBuilder/FilterConditionRow.module.scss +106 -0
- package/dist/components/QueryBuilder/FilterGroupNode.css +1 -0
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts +7 -0
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -0
- package/dist/components/QueryBuilder/FilterGroupNode.js +100 -0
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -0
- package/dist/components/QueryBuilder/FilterGroupNode.module.js +15 -0
- package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -0
- package/dist/components/QueryBuilder/FilterGroupNode.module.scss +83 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts +21 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.js +138 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js +17 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +79 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +39 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js +19 -0
- package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -0
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts +14 -0
- package/dist/components/QueryBuilder/qbTreeToReadable.d.ts.map +1 -0
- package/dist/components/QueryBuilder/qbTreeToReadable.js +89 -0
- package/dist/components/QueryBuilder/qbTreeToReadable.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderId.d.ts +2 -0
- package/dist/components/QueryBuilder/queryBuilderId.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderId.js +9 -0
- package/dist/components/QueryBuilder/queryBuilderId.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +24 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.js +91 -0
- package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +58 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.js +200 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +3 -2
- package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderTranslation.js +82 -84
- package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
- package/dist/components/QueryBuilder/useQBCombinedSql.d.ts +11 -0
- package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -0
- package/dist/components/QueryBuilder/useQBCombinedSql.js +29 -0
- package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -0
- package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts +18 -0
- package/dist/components/QueryBuilder/useQBFacetSourceMetadata.d.ts.map +1 -0
- package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js +27 -0
- package/dist/components/QueryBuilder/useQBFacetSourceMetadata.js.map +1 -0
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +14 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +185 -120
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.d.ts +1 -0
- package/dist/components/RssFeedCards/RssFeedCards.d.ts.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js +11 -11
- package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.d.ts +7 -1
- package/dist/components/SynapseChat/SynapseChat.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js +76 -71
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts +3 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.d.ts.map +1 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.js +24 -13
- package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
- package/dist/components/SynapseChat/portalChatSessionStorage.d.ts +23 -0
- package/dist/components/SynapseChat/portalChatSessionStorage.d.ts.map +1 -0
- package/dist/components/SynapseChat/portalChatSessionStorage.js +29 -0
- package/dist/components/SynapseChat/portalChatSessionStorage.js.map +1 -0
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts +6 -0
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +92 -79
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts +3 -4
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js +2 -2
- package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js +9 -2
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
- package/dist/components/menu/ComplexMenu.js +1 -1
- package/dist/components/menu/ComplexMenu.js.map +1 -1
- package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/menu/DropdownMenu.js +4 -0
- package/dist/components/menu/DropdownMenu.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts +10 -0
- package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.d.ts.map +1 -0
- package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js +20 -0
- package/dist/features/entity/metadata-task/hooks/useMarkCurationTaskInProgress.js.map +1 -0
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +29 -20
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +16 -0
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -0
- package/dist/mocks/accessRequirement/mockFormTemplates.js +70 -0
- package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts +7 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.d.ts.map +1 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js +47 -0
- package/dist/mocks/accessRequirement/mockJsonSchemaAccessRequirements.js.map +1 -0
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +24 -0
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -0
- package/dist/mocks/accessRequirement/mockJsonSchemas.js +62 -0
- package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -0
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +18 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/aridhiaHandlers.js +39 -33
- package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts +5 -0
- package/dist/mocks/msw/handlers/formTemplateHandlers.d.ts.map +1 -0
- package/dist/mocks/msw/handlers/formTemplateHandlers.js +65 -0
- package/dist/mocks/msw/handlers/formTemplateHandlers.js.map +1 -0
- package/dist/mocks/msw/handlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers.js +49 -47
- package/dist/mocks/msw/handlers.js.map +1 -1
- package/dist/style/abstracts/_cssVariables.scss +7 -0
- package/dist/style/components/_query-wrapper-plot-nav.scss +9 -0
- package/dist/style/main.css +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +6 -1
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +17 -2
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/chat/useChat.d.ts.map +1 -1
- package/dist/synapse-queries/chat/useChat.js +2 -4
- package/dist/synapse-queries/chat/useChat.js.map +1 -1
- package/dist/synapse-queries/dataaccess/index.d.ts +2 -0
- package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +5 -3
- package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts +41 -0
- package/dist/synapse-queries/dataaccess/useFormTemplate.d.ts.map +1 -0
- package/dist/synapse-queries/dataaccess/useFormTemplate.js +63 -0
- package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -0
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts +21 -0
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts.map +1 -0
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js +34 -0
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js.map +1 -0
- package/dist/synapse-queries/index.js +190 -180
- package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +0 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/jsonschema/getType.d.ts.map +1 -1
- package/dist/utils/jsonschema/getType.js +4 -1
- package/dist/utils/jsonschema/getType.js.map +1 -1
- package/package.json +7 -7
|
@@ -4,105 +4,118 @@ import { useSynapseContext as t } from "../../../utils/context/SynapseContext.js
|
|
|
4
4
|
import "../../../utils/index.js";
|
|
5
5
|
import { useGetEntity as n } from "../../../synapse-queries/entity/useEntity.js";
|
|
6
6
|
import "../../../synapse-queries/index.js";
|
|
7
|
-
import
|
|
7
|
+
import r from "../../IconSvg/index.js";
|
|
8
8
|
import "../SynapseTableUtils.js";
|
|
9
|
-
import { useQueryContext as
|
|
9
|
+
import { useQueryContext as ee } from "../../QueryContext/QueryContext.js";
|
|
10
10
|
import "../../QueryContext/index.js";
|
|
11
|
-
import { useGetQueryMetadata as
|
|
12
|
-
import { useQueryVisualizationContext as
|
|
11
|
+
import { useGetQueryMetadata as te } from "../../QueryWrapper/useGetQueryMetadata.js";
|
|
12
|
+
import { useQueryVisualizationContext as ne } from "../../QueryVisualizationWrapper/QueryVisualizationContext.js";
|
|
13
13
|
import "../../QueryVisualizationWrapper/index.js";
|
|
14
|
-
import { isRowSelectionVisibleAtom as
|
|
15
|
-
import { SignInRequiredModal as
|
|
16
|
-
import
|
|
17
|
-
import { ElementWithTooltip as
|
|
18
|
-
import { getNumberOfResultsToInvokeAction as
|
|
19
|
-
import
|
|
20
|
-
import { CustomControlButton as
|
|
21
|
-
import { RowSelectionControls as
|
|
22
|
-
import { DownloadOptions as
|
|
23
|
-
import { ColumnSelection as
|
|
14
|
+
import { isRowSelectionVisibleAtom as re, useHasSelectedRowsAtomValue as i, useSelectedRowsAtomValue as a } from "../../QueryWrapper/TableRowSelectionState.js";
|
|
15
|
+
import { SignInRequiredModal as o } from "../../SignInRequiredModal/SignInRequiredModal.js";
|
|
16
|
+
import s from "../../MissingQueryResultsWarning/MissingQueryResultsWarning.js";
|
|
17
|
+
import { ElementWithTooltip as c } from "../../widgets/ElementWithTooltip.js";
|
|
18
|
+
import { getNumberOfResultsToInvokeAction as l, getNumberOfResultsToInvokeActionCopy as u } from "./TopLevelControlsUtils.js";
|
|
19
|
+
import d from "../export/ExportToAnalysisPlatformDialog.js";
|
|
20
|
+
import { CustomControlButton as f } from "../CustomControls/CustomControlButton.js";
|
|
21
|
+
import { RowSelectionControls as p } from "../RowSelection/RowSelectionControls.js";
|
|
22
|
+
import { DownloadOptions as m } from "../table-top/DownloadOptions.js";
|
|
23
|
+
import { ColumnSelection as h } from "../table-top/ColumnSelection.js";
|
|
24
24
|
import "../table-top/index.js";
|
|
25
|
-
import { useState as
|
|
26
|
-
import { cloneDeep as
|
|
27
|
-
import { Button as
|
|
28
|
-
import { Fragment as
|
|
29
|
-
import { useAtomValue as
|
|
25
|
+
import { useState as g } from "react";
|
|
26
|
+
import { cloneDeep as ie } from "lodash-es";
|
|
27
|
+
import { Button as _, Divider as ae, Tooltip as oe, Typography as se } from "@mui/material";
|
|
28
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
29
|
+
import { useAtomValue as x } from "jotai";
|
|
30
30
|
//#region src/components/SynapseTable/TopLevelControls/TopLevelControls.tsx
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
var S = "SendToAnalysisPlatformTopLevelControlButton", C = {
|
|
32
|
+
ml: 2,
|
|
33
|
+
fontWeight: 400,
|
|
34
|
+
fontSize: "14px",
|
|
35
|
+
textDecoration: "none !important"
|
|
36
|
+
}, w = (w) => {
|
|
37
|
+
let [T, E] = g(!1), { isAuthenticated: D } = t(), { name: O, showColumnSelection: k = !1, hideDownload: A = !1, hideAddToDownloadListMenuItem: j, hideProgrammaticOptionsMenuItem: M, hideVisualizationsControl: N = !1, hideFacetFilterControl: P = !1, hideQueryCount: F = !1, hideSqlEditorControl: I = !0, showQueryBuilderControl: L = !1, showQueryBuilder: R = !1, onToggleQueryBuilder: z, customControls: B, cavaticaConnectAccountURL: V, remount: H } = w, { entityId: U, versionNumber: ce, getCurrentQueryRequest: W, hasResettableFilters: G } = ee(), { data: K } = n(U, ce), { data: q } = te(), J = x(re), Y = a(), X = i(), { setShowSearchBar: le, columnsToShowInTable: Z, setColumnsToShowInTable: ue, enabledExternalAnalysisPlatforms: de, setIsShowingExportToAnalysisPlatformModal: fe, unitDescription: pe, setShowDownloadConfirmation: me, showCopyToClipboard: he, hideSearchBarControl: ge, setShowPlots: _e, setShowSqlEditor: ve, showFacetFilter: Q, setShowFacetFilter: ye } = ne(), be = de.length > 0, [xe, $] = g(!1), Se = (e) => {
|
|
38
|
+
let t = ie(Z);
|
|
39
|
+
t.includes(e) ? t = t.filter((t) => t !== e) : t.push(e), ue(t);
|
|
40
|
+
}, Ce = l(X, Y, q?.queryCount), we = u(G, X, Y, q?.queryCount, pe), Te = !F && q?.queryCount !== void 0 ? `(${q.queryCount.toLocaleString()})` : null;
|
|
41
|
+
return /* @__PURE__ */ y("div", {
|
|
37
42
|
className: "TopLevelControls",
|
|
38
43
|
"data-testid": "TopLevelControls",
|
|
39
|
-
children: /* @__PURE__ */
|
|
44
|
+
children: /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ b("div", {
|
|
40
45
|
className: "TopLevelControls__querycount",
|
|
41
|
-
children: [
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
children: [
|
|
47
|
+
O && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ b(se, {
|
|
48
|
+
variant: "sectionTitle",
|
|
49
|
+
role: "heading",
|
|
50
|
+
children: [
|
|
51
|
+
O,
|
|
52
|
+
" ",
|
|
53
|
+
Te
|
|
54
|
+
]
|
|
55
|
+
}), !F && K && /* @__PURE__ */ y(s, { entity: K })] }),
|
|
56
|
+
!P && /* @__PURE__ */ b(_, {
|
|
57
|
+
variant: "text",
|
|
58
|
+
onClick: () => ye((e) => !e),
|
|
59
|
+
startIcon: /* @__PURE__ */ y(r, {
|
|
60
|
+
icon: Q ? "close" : "filter",
|
|
61
|
+
wrap: !1
|
|
62
|
+
}),
|
|
63
|
+
sx: C,
|
|
64
|
+
children: [Q ? "Hide" : "Show", " filters"]
|
|
55
65
|
}),
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
L && z && /* @__PURE__ */ b(_, {
|
|
67
|
+
variant: "text",
|
|
68
|
+
onClick: z,
|
|
69
|
+
startIcon: /* @__PURE__ */ y(r, {
|
|
70
|
+
icon: R ? "close" : "filter",
|
|
71
|
+
wrap: !1
|
|
72
|
+
}),
|
|
73
|
+
sx: C,
|
|
74
|
+
children: [R ? "Hide" : "Show", " Query Builder"]
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
}), /* @__PURE__ */ b("div", {
|
|
65
78
|
className: "TopLevelControls__actions",
|
|
66
79
|
children: [
|
|
67
|
-
|
|
68
|
-
title: /* @__PURE__ */
|
|
80
|
+
be && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(oe, {
|
|
81
|
+
title: /* @__PURE__ */ b(v, { children: [
|
|
69
82
|
"This action will send a reference to",
|
|
70
83
|
" ",
|
|
71
84
|
X ? "each selected file" : "every file in the current table",
|
|
72
85
|
" ",
|
|
73
86
|
"to a chosen external analysis platform.",
|
|
74
87
|
" ",
|
|
75
|
-
!X && Q && /* @__PURE__ */
|
|
76
|
-
X && /* @__PURE__ */
|
|
88
|
+
!X && Q && /* @__PURE__ */ y(v, { children: "You can change what is sent by applying filters using the controls in the sidebar." }),
|
|
89
|
+
X && /* @__PURE__ */ y(v, { children: "You can change what is sent by selecting a different set of files." })
|
|
77
90
|
] }),
|
|
78
|
-
children: /* @__PURE__ */
|
|
91
|
+
children: /* @__PURE__ */ b(_, {
|
|
79
92
|
variant: "text",
|
|
80
|
-
disabled: !
|
|
81
|
-
onClick: () =>
|
|
82
|
-
id:
|
|
93
|
+
disabled: !Ce,
|
|
94
|
+
onClick: () => D ? fe(!0) : E(!0),
|
|
95
|
+
id: S,
|
|
83
96
|
children: [
|
|
84
97
|
"Send ",
|
|
85
|
-
|
|
98
|
+
we,
|
|
86
99
|
" to Analysis Platform"
|
|
87
100
|
]
|
|
88
101
|
})
|
|
89
|
-
}), /* @__PURE__ */
|
|
102
|
+
}), /* @__PURE__ */ y(ae, {
|
|
90
103
|
orientation: "vertical",
|
|
91
104
|
variant: "middle",
|
|
92
105
|
flexItem: !0
|
|
93
106
|
})] }),
|
|
94
|
-
|
|
95
|
-
onHide: () =>
|
|
107
|
+
T && /* @__PURE__ */ y(o, {
|
|
108
|
+
onHide: () => E(!1),
|
|
96
109
|
content: "You must be signed in to send results to an analysis platform."
|
|
97
110
|
}),
|
|
98
|
-
!
|
|
111
|
+
!ge && /* @__PURE__ */ y(c, {
|
|
99
112
|
tooltipText: "Show / Hide Search Bar",
|
|
100
|
-
callbackFn: () =>
|
|
113
|
+
callbackFn: () => le((e) => !e),
|
|
101
114
|
darkTheme: !0,
|
|
102
115
|
icon: "search"
|
|
103
116
|
}),
|
|
104
|
-
|
|
105
|
-
tooltipText:
|
|
117
|
+
he && /* @__PURE__ */ y(c, {
|
|
118
|
+
tooltipText: xe ? "Copied to clipboard" : "Copy this search to the clipboard",
|
|
106
119
|
callbackFn: () => {
|
|
107
120
|
e(window.location.href).then(() => {
|
|
108
121
|
$(!0), setTimeout(() => {
|
|
@@ -113,29 +126,29 @@ var E = "SendToAnalysisPlatformTopLevelControlButton", D = (D) => {
|
|
|
113
126
|
darkTheme: !0,
|
|
114
127
|
icon: "clipboard"
|
|
115
128
|
}),
|
|
116
|
-
!
|
|
129
|
+
!N && /* @__PURE__ */ y(c, {
|
|
117
130
|
tooltipText: "Show / Hide Visualizations",
|
|
118
|
-
callbackFn: () =>
|
|
131
|
+
callbackFn: () => _e((e) => !e),
|
|
119
132
|
darkTheme: !0,
|
|
120
133
|
icon: "chart"
|
|
121
134
|
}),
|
|
122
|
-
!
|
|
135
|
+
!A && /* @__PURE__ */ y(m, {
|
|
123
136
|
darkTheme: !0,
|
|
124
|
-
onDownloadFiles: () =>
|
|
125
|
-
hideAddToDownloadListMenuItem:
|
|
126
|
-
hideProgrammaticOptionsMenuItem:
|
|
137
|
+
onDownloadFiles: () => me(!0),
|
|
138
|
+
hideAddToDownloadListMenuItem: j,
|
|
139
|
+
hideProgrammaticOptionsMenuItem: M
|
|
127
140
|
}),
|
|
128
|
-
!
|
|
141
|
+
!I && /* @__PURE__ */ y(c, {
|
|
129
142
|
tooltipText: "Show / Hide the Advanced Query Editor",
|
|
130
|
-
callbackFn: () =>
|
|
143
|
+
callbackFn: () => ve((e) => !e),
|
|
131
144
|
darkTheme: !0,
|
|
132
145
|
icon: "sqleditor"
|
|
133
146
|
}),
|
|
134
|
-
J && /* @__PURE__ */
|
|
147
|
+
J && /* @__PURE__ */ y(p, {
|
|
135
148
|
customControls: B,
|
|
136
149
|
remount: H
|
|
137
150
|
}),
|
|
138
|
-
!J && B && B.length > 0 && /* @__PURE__ */
|
|
151
|
+
!J && B && B.length > 0 && /* @__PURE__ */ y(v, { children: B.map((e) => /* @__PURE__ */ y(f, {
|
|
139
152
|
variant: "text",
|
|
140
153
|
callbackData: {
|
|
141
154
|
tableId: U,
|
|
@@ -149,18 +162,18 @@ var E = "SendToAnalysisPlatformTopLevelControlButton", D = (D) => {
|
|
|
149
162
|
control: e,
|
|
150
163
|
startIcon: e.icon
|
|
151
164
|
}, e.buttonText)) }),
|
|
152
|
-
|
|
165
|
+
k && /* @__PURE__ */ y(h, {
|
|
153
166
|
headers: q?.selectColumns,
|
|
154
167
|
isColumnSelected: Z,
|
|
155
|
-
toggleColumnSelection:
|
|
168
|
+
toggleColumnSelection: Se,
|
|
156
169
|
darkTheme: !0
|
|
157
170
|
}),
|
|
158
|
-
/* @__PURE__ */
|
|
171
|
+
/* @__PURE__ */ y(d, { platformInstructionProps: { cavaticaConnectAccountURL: V } })
|
|
159
172
|
]
|
|
160
173
|
})] })
|
|
161
174
|
});
|
|
162
175
|
};
|
|
163
176
|
//#endregion
|
|
164
|
-
export {
|
|
177
|
+
export { w as default };
|
|
165
178
|
|
|
166
179
|
//# sourceMappingURL=TopLevelControls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopLevelControls.js","names":[],"sources":["../../../../src/components/SynapseTable/TopLevelControls/TopLevelControls.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SQL_EDITOR } from '@/utils/SynapseConstants'\nimport { Button, Divider, Tooltip, Typography } from '@mui/material'\nimport {\n QueryBundleRequest,\n QueryResultBundle,\n Row,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport { useAtomValue } from 'jotai'\nimport { cloneDeep } from 'lodash-es'\nimport { ReactNode, useState } from 'react'\nimport IconSvg from '../../IconSvg'\nimport MissingQueryResultsWarning from '../../MissingQueryResultsWarning/MissingQueryResultsWarning'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport {\n isRowSelectionVisibleAtom,\n useHasSelectedRowsAtomValue,\n useSelectedRowsAtomValue,\n} from '../../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { ElementWithTooltip } from '../../widgets/ElementWithTooltip'\nimport ExportToAnalysisPlatformDialog from '../export/ExportToAnalysisPlatformDialog'\nimport { RowSelectionControls } from '../RowSelection/RowSelectionControls'\nimport { ColumnSelection, DownloadOptions } from '../table-top'\nimport {\n getNumberOfResultsToInvokeAction,\n getNumberOfResultsToInvokeActionCopy,\n} from './TopLevelControlsUtils'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\nimport { CustomControlButton } from '../CustomControls/CustomControlButton'\nimport { useSynapseContext } from '@/utils'\nimport { SignInRequiredModal } from '@/components/SignInRequiredModal/SignInRequiredModal'\nimport { SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE } from '../SynapseTableUtils'\n\nconst SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID =\n 'SendToAnalysisPlatformTopLevelControlButton'\n\nexport type TopLevelControlsProps = {\n name?: string\n hideDownload?: boolean\n /** If true, the \"Add ... files to Download List\" option in the Download menu will be hidden */\n hideAddToDownloadListMenuItem?: boolean\n /** If true, the \"Programmatic Options\" option in the Download menu will be hidden */\n hideProgrammaticOptionsMenuItem?: boolean\n hideVisualizationsControl?: boolean\n hideFacetFilterControl?: boolean\n hideQueryCount?: boolean\n hideSqlEditorControl?: boolean\n customControls?: CustomControl[]\n showColumnSelection?: boolean\n cavaticaConnectAccountURL?: string\n remount?: () => void\n}\n\nexport type Control = {\n key: string\n icon: string\n tooltipText: string\n}\n\nexport type CustomControlCallbackData = {\n tableId: string\n queryMetadata: Omit<QueryResultBundle, 'queryResult'> | undefined\n selectedRows: Row[] | undefined\n refresh: () => void\n request?: QueryBundleRequest\n}\n\n// note, all custom controls should check for selected rows in the event (to support row selection)\nexport type CustomControl = {\n buttonText: string\n onClick: (event: CustomControlCallbackData) => void\n classNames?: string\n icon?: ReactNode\n buttonID?: string // optionally set the ID property of the element\n title?: string // optionally set the title for the custom control\n description?: string // optionally set the description for the custom control\n}\n\nconst TopLevelControls = (props: TopLevelControlsProps): React.ReactNode => {\n const [showLoginModal, setShowLoginModal] = useState(false)\n const { isAuthenticated } = useSynapseContext()\n\n const {\n name,\n showColumnSelection = false,\n hideDownload = false,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideVisualizationsControl = false,\n hideFacetFilterControl = false,\n hideQueryCount = false,\n hideSqlEditorControl = true,\n customControls,\n cavaticaConnectAccountURL,\n remount,\n } = props\n\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n hasResettableFilters,\n } = useQueryContext()\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n const { data: queryMetadata } = useGetQueryMetadata()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n const selectedRows = useSelectedRowsAtomValue()\n const hasSelectedRows = useHasSelectedRowsAtomValue()\n\n const {\n setShowSearchBar,\n columnsToShowInTable,\n setColumnsToShowInTable,\n enabledExternalAnalysisPlatforms,\n setIsShowingExportToAnalysisPlatformModal,\n unitDescription,\n setShowDownloadConfirmation,\n showCopyToClipboard,\n hideSearchBarControl,\n setShowPlots,\n setShowSqlEditor,\n showFacetFilter,\n setShowFacetFilter,\n } = useQueryVisualizationContext()\n\n const showExportToAnalysisPlatformButton =\n enabledExternalAnalysisPlatforms.length > 0\n\n const [hasRecentlyCopiedToClipboard, setHasRecentlyCopiedToClipboard] =\n useState(false)\n\n /**\n * Handles the toggle of a column select, this will cause the table to\n * either show the column or hide depending on the prior state of the column\n */\n const toggleColumnSelection = (columnName: string) => {\n let columnsToShowInTableCopy = cloneDeep(columnsToShowInTable)\n if (columnsToShowInTableCopy.includes(columnName)) {\n columnsToShowInTableCopy = columnsToShowInTableCopy.filter(\n el => el !== columnName,\n )\n } else {\n columnsToShowInTableCopy.push(columnName)\n }\n setColumnsToShowInTable(columnsToShowInTableCopy)\n }\n\n const numberOfResultsToInvokeAction = getNumberOfResultsToInvokeAction(\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n )\n const numberOfResultsToInvokeActionAsText =\n getNumberOfResultsToInvokeActionCopy(\n hasResettableFilters,\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n unitDescription,\n )\n\n const queryCountDisplay =\n !hideQueryCount && queryMetadata?.queryCount !== undefined\n ? `(${queryMetadata.queryCount.toLocaleString()})`\n : null\n\n return (\n <div className={`TopLevelControls`} data-testid=\"TopLevelControls\">\n <div>\n <div className=\"TopLevelControls__querycount\">\n {name && (\n <>\n <Typography variant=\"sectionTitle\" role=\"heading\">\n {name} {queryCountDisplay}\n </Typography>\n {!hideQueryCount && entity && (\n <MissingQueryResultsWarning entity={entity} />\n )}\n </>\n )}\n {!hideFacetFilterControl && (\n <Button\n variant={'text'}\n onClick={() => setShowFacetFilter(value => !value)}\n startIcon={\n <IconSvg\n icon={showFacetFilter ? 'close' : 'filter'}\n wrap={false}\n />\n }\n sx={{\n ml: 2,\n fontWeight: 400,\n fontSize: '14px',\n textDecoration: 'none !important',\n }}\n >\n {showFacetFilter ? 'Hide' : 'Show'} filters\n </Button>\n )}\n </div>\n <div className=\"TopLevelControls__actions\">\n {showExportToAnalysisPlatformButton && (\n <>\n <Tooltip\n title={\n <>\n This action will send a reference to{' '}\n {hasSelectedRows\n ? 'each selected file'\n : 'every file in the current table'}{' '}\n to a chosen external analysis platform.{' '}\n {!hasSelectedRows && showFacetFilter && (\n <>\n You can change what is sent by applying filters using\n the controls in the sidebar.\n </>\n )}\n {hasSelectedRows && (\n <>\n You can change what is sent by selecting a different set\n of files.\n </>\n )}\n </>\n }\n >\n <Button\n variant=\"text\"\n disabled={!numberOfResultsToInvokeAction}\n onClick={() => {\n return isAuthenticated\n ? setIsShowingExportToAnalysisPlatformModal(true)\n : setShowLoginModal(true)\n }}\n id={SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID}\n >\n Send {numberOfResultsToInvokeActionAsText} to Analysis\n Platform\n </Button>\n </Tooltip>\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\n </>\n )}\n {showLoginModal && (\n <SignInRequiredModal\n onHide={() => setShowLoginModal(false)}\n content={SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE}\n />\n )}\n {!hideSearchBarControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide Search Bar'}\n callbackFn={() => setShowSearchBar(value => !value)}\n darkTheme={true}\n icon={'search'}\n />\n )}\n {showCopyToClipboard && (\n <ElementWithTooltip\n tooltipText={\n hasRecentlyCopiedToClipboard\n ? 'Copied to clipboard'\n : 'Copy this search to the clipboard'\n }\n callbackFn={() => {\n copyStringToClipboard(window.location.href).then(() => {\n setHasRecentlyCopiedToClipboard(true)\n setTimeout(() => {\n setHasRecentlyCopiedToClipboard(false)\n }, 3000)\n })\n }}\n darkTheme={true}\n icon={'clipboard'}\n />\n )}\n {!hideVisualizationsControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide Visualizations'}\n callbackFn={() => setShowPlots(value => !value)}\n darkTheme={true}\n icon={'chart'}\n />\n )}\n {!hideDownload && (\n <DownloadOptions\n darkTheme={true}\n onDownloadFiles={() => setShowDownloadConfirmation(true)}\n hideAddToDownloadListMenuItem={hideAddToDownloadListMenuItem}\n hideProgrammaticOptionsMenuItem={hideProgrammaticOptionsMenuItem}\n />\n )}\n\n {!hideSqlEditorControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide the Advanced Query Editor'}\n callbackFn={() => setShowSqlEditor(value => !value)}\n darkTheme={true}\n icon={SQL_EDITOR}\n />\n )}\n\n {isRowSelectionVisible && (\n <RowSelectionControls\n customControls={customControls}\n remount={remount}\n />\n )}\n {!isRowSelectionVisible &&\n customControls &&\n customControls.length > 0 && (\n <>\n {customControls.map(customControl => {\n return (\n <CustomControlButton\n key={customControl.buttonText}\n variant=\"text\"\n callbackData={{\n tableId: entityId!,\n queryMetadata: queryMetadata,\n selectedRows,\n refresh: () => {\n if (remount) {\n remount()\n }\n },\n request: getCurrentQueryRequest(),\n }}\n control={customControl}\n startIcon={customControl.icon}\n />\n )\n })}\n </>\n )}\n {showColumnSelection && (\n <ColumnSelection\n headers={queryMetadata?.selectColumns}\n isColumnSelected={columnsToShowInTable}\n toggleColumnSelection={toggleColumnSelection}\n darkTheme={true}\n />\n )}\n <ExportToAnalysisPlatformDialog\n platformInstructionProps={{\n cavaticaConnectAccountURL: cavaticaConnectAccountURL,\n }}\n />\n </div>\n </div>\n </div>\n )\n}\n\nexport default TopLevelControls\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TopLevelControls.js","names":[],"sources":["../../../../src/components/SynapseTable/TopLevelControls/TopLevelControls.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SQL_EDITOR } from '@/utils/SynapseConstants'\nimport { Button, Divider, Tooltip, Typography } from '@mui/material'\nimport {\n QueryBundleRequest,\n QueryResultBundle,\n Row,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport { useAtomValue } from 'jotai'\nimport { cloneDeep } from 'lodash-es'\nimport { ReactNode, useState } from 'react'\nimport IconSvg from '../../IconSvg'\nimport MissingQueryResultsWarning from '../../MissingQueryResultsWarning/MissingQueryResultsWarning'\nimport { useQueryContext } from '../../QueryContext'\nimport { useQueryVisualizationContext } from '../../QueryVisualizationWrapper'\nimport {\n isRowSelectionVisibleAtom,\n useHasSelectedRowsAtomValue,\n useSelectedRowsAtomValue,\n} from '../../QueryWrapper/TableRowSelectionState'\nimport { useGetQueryMetadata } from '../../QueryWrapper/useGetQueryMetadata'\nimport { ElementWithTooltip } from '../../widgets/ElementWithTooltip'\nimport ExportToAnalysisPlatformDialog from '../export/ExportToAnalysisPlatformDialog'\nimport { RowSelectionControls } from '../RowSelection/RowSelectionControls'\nimport { ColumnSelection, DownloadOptions } from '../table-top'\nimport {\n getNumberOfResultsToInvokeAction,\n getNumberOfResultsToInvokeActionCopy,\n} from './TopLevelControlsUtils'\nimport { copyStringToClipboard } from '@/utils/functions/StringUtils'\nimport { CustomControlButton } from '../CustomControls/CustomControlButton'\nimport { useSynapseContext } from '@/utils'\nimport { SignInRequiredModal } from '@/components/SignInRequiredModal/SignInRequiredModal'\nimport { SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE } from '../SynapseTableUtils'\n\nconst SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID =\n 'SendToAnalysisPlatformTopLevelControlButton'\n\nconst FILTER_TOGGLE_BUTTON_SX = {\n ml: 2,\n fontWeight: 400,\n fontSize: '14px',\n textDecoration: 'none !important',\n} as const\n\nexport type TopLevelControlsProps = {\n name?: string\n hideDownload?: boolean\n /** If true, the \"Add ... files to Download List\" option in the Download menu will be hidden */\n hideAddToDownloadListMenuItem?: boolean\n /** If true, the \"Programmatic Options\" option in the Download menu will be hidden */\n hideProgrammaticOptionsMenuItem?: boolean\n hideVisualizationsControl?: boolean\n hideFacetFilterControl?: boolean\n hideQueryCount?: boolean\n hideSqlEditorControl?: boolean\n /** When true, shows a `Show / Hide Query Builder` toggle. */\n showQueryBuilderControl?: boolean\n /** Current QB visibility, driven by the parent. Required when `showQueryBuilderControl` is true. */\n showQueryBuilder?: boolean\n /** Callback invoked when the QB toggle is clicked. Required when `showQueryBuilderControl` is true. */\n onToggleQueryBuilder?: () => void\n customControls?: CustomControl[]\n showColumnSelection?: boolean\n cavaticaConnectAccountURL?: string\n remount?: () => void\n}\n\nexport type Control = {\n key: string\n icon: string\n tooltipText: string\n}\n\nexport type CustomControlCallbackData = {\n tableId: string\n queryMetadata: Omit<QueryResultBundle, 'queryResult'> | undefined\n selectedRows: Row[] | undefined\n refresh: () => void\n request?: QueryBundleRequest\n}\n\n// note, all custom controls should check for selected rows in the event (to support row selection)\nexport type CustomControl = {\n buttonText: string\n onClick: (event: CustomControlCallbackData) => void\n classNames?: string\n icon?: ReactNode\n buttonID?: string // optionally set the ID property of the element\n title?: string // optionally set the title for the custom control\n description?: string // optionally set the description for the custom control\n}\n\nconst TopLevelControls = (props: TopLevelControlsProps): React.ReactNode => {\n const [showLoginModal, setShowLoginModal] = useState(false)\n const { isAuthenticated } = useSynapseContext()\n\n const {\n name,\n showColumnSelection = false,\n hideDownload = false,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideVisualizationsControl = false,\n hideFacetFilterControl = false,\n hideQueryCount = false,\n hideSqlEditorControl = true,\n showQueryBuilderControl = false,\n showQueryBuilder = false,\n onToggleQueryBuilder,\n customControls,\n cavaticaConnectAccountURL,\n remount,\n } = props\n\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n hasResettableFilters,\n } = useQueryContext()\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n const { data: queryMetadata } = useGetQueryMetadata()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n const selectedRows = useSelectedRowsAtomValue()\n const hasSelectedRows = useHasSelectedRowsAtomValue()\n\n const {\n setShowSearchBar,\n columnsToShowInTable,\n setColumnsToShowInTable,\n enabledExternalAnalysisPlatforms,\n setIsShowingExportToAnalysisPlatformModal,\n unitDescription,\n setShowDownloadConfirmation,\n showCopyToClipboard,\n hideSearchBarControl,\n setShowPlots,\n setShowSqlEditor,\n showFacetFilter,\n setShowFacetFilter,\n } = useQueryVisualizationContext()\n\n const showExportToAnalysisPlatformButton =\n enabledExternalAnalysisPlatforms.length > 0\n\n const [hasRecentlyCopiedToClipboard, setHasRecentlyCopiedToClipboard] =\n useState(false)\n\n /**\n * Handles the toggle of a column select, this will cause the table to\n * either show the column or hide depending on the prior state of the column\n */\n const toggleColumnSelection = (columnName: string) => {\n let columnsToShowInTableCopy = cloneDeep(columnsToShowInTable)\n if (columnsToShowInTableCopy.includes(columnName)) {\n columnsToShowInTableCopy = columnsToShowInTableCopy.filter(\n el => el !== columnName,\n )\n } else {\n columnsToShowInTableCopy.push(columnName)\n }\n setColumnsToShowInTable(columnsToShowInTableCopy)\n }\n\n const numberOfResultsToInvokeAction = getNumberOfResultsToInvokeAction(\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n )\n const numberOfResultsToInvokeActionAsText =\n getNumberOfResultsToInvokeActionCopy(\n hasResettableFilters,\n hasSelectedRows,\n selectedRows,\n queryMetadata?.queryCount,\n unitDescription,\n )\n\n const queryCountDisplay =\n !hideQueryCount && queryMetadata?.queryCount !== undefined\n ? `(${queryMetadata.queryCount.toLocaleString()})`\n : null\n\n return (\n <div className={`TopLevelControls`} data-testid=\"TopLevelControls\">\n <div>\n <div className=\"TopLevelControls__querycount\">\n {name && (\n <>\n <Typography variant=\"sectionTitle\" role=\"heading\">\n {name} {queryCountDisplay}\n </Typography>\n {!hideQueryCount && entity && (\n <MissingQueryResultsWarning entity={entity} />\n )}\n </>\n )}\n {!hideFacetFilterControl && (\n <Button\n variant={'text'}\n onClick={() => setShowFacetFilter(value => !value)}\n startIcon={\n <IconSvg\n icon={showFacetFilter ? 'close' : 'filter'}\n wrap={false}\n />\n }\n sx={FILTER_TOGGLE_BUTTON_SX}\n >\n {showFacetFilter ? 'Hide' : 'Show'} filters\n </Button>\n )}\n {showQueryBuilderControl && onToggleQueryBuilder && (\n <Button\n variant={'text'}\n onClick={onToggleQueryBuilder}\n startIcon={\n <IconSvg\n icon={showQueryBuilder ? 'close' : 'filter'}\n wrap={false}\n />\n }\n sx={FILTER_TOGGLE_BUTTON_SX}\n >\n {showQueryBuilder ? 'Hide' : 'Show'} Query Builder\n </Button>\n )}\n </div>\n <div className=\"TopLevelControls__actions\">\n {showExportToAnalysisPlatformButton && (\n <>\n <Tooltip\n title={\n <>\n This action will send a reference to{' '}\n {hasSelectedRows\n ? 'each selected file'\n : 'every file in the current table'}{' '}\n to a chosen external analysis platform.{' '}\n {!hasSelectedRows && showFacetFilter && (\n <>\n You can change what is sent by applying filters using\n the controls in the sidebar.\n </>\n )}\n {hasSelectedRows && (\n <>\n You can change what is sent by selecting a different set\n of files.\n </>\n )}\n </>\n }\n >\n <Button\n variant=\"text\"\n disabled={!numberOfResultsToInvokeAction}\n onClick={() => {\n return isAuthenticated\n ? setIsShowingExportToAnalysisPlatformModal(true)\n : setShowLoginModal(true)\n }}\n id={SEND_TO_ANALYSIS_PLATFORM_BUTTON_ID}\n >\n Send {numberOfResultsToInvokeActionAsText} to Analysis\n Platform\n </Button>\n </Tooltip>\n <Divider orientation=\"vertical\" variant=\"middle\" flexItem />\n </>\n )}\n {showLoginModal && (\n <SignInRequiredModal\n onHide={() => setShowLoginModal(false)}\n content={SEND_TO_ANALYSIS_PLATFORM_SIGN_IN_MESSAGE}\n />\n )}\n {!hideSearchBarControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide Search Bar'}\n callbackFn={() => setShowSearchBar(value => !value)}\n darkTheme={true}\n icon={'search'}\n />\n )}\n {showCopyToClipboard && (\n <ElementWithTooltip\n tooltipText={\n hasRecentlyCopiedToClipboard\n ? 'Copied to clipboard'\n : 'Copy this search to the clipboard'\n }\n callbackFn={() => {\n copyStringToClipboard(window.location.href).then(() => {\n setHasRecentlyCopiedToClipboard(true)\n setTimeout(() => {\n setHasRecentlyCopiedToClipboard(false)\n }, 3000)\n })\n }}\n darkTheme={true}\n icon={'clipboard'}\n />\n )}\n {!hideVisualizationsControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide Visualizations'}\n callbackFn={() => setShowPlots(value => !value)}\n darkTheme={true}\n icon={'chart'}\n />\n )}\n {!hideDownload && (\n <DownloadOptions\n darkTheme={true}\n onDownloadFiles={() => setShowDownloadConfirmation(true)}\n hideAddToDownloadListMenuItem={hideAddToDownloadListMenuItem}\n hideProgrammaticOptionsMenuItem={hideProgrammaticOptionsMenuItem}\n />\n )}\n\n {!hideSqlEditorControl && (\n <ElementWithTooltip\n tooltipText={'Show / Hide the Advanced Query Editor'}\n callbackFn={() => setShowSqlEditor(value => !value)}\n darkTheme={true}\n icon={SQL_EDITOR}\n />\n )}\n\n {isRowSelectionVisible && (\n <RowSelectionControls\n customControls={customControls}\n remount={remount}\n />\n )}\n {!isRowSelectionVisible &&\n customControls &&\n customControls.length > 0 && (\n <>\n {customControls.map(customControl => {\n return (\n <CustomControlButton\n key={customControl.buttonText}\n variant=\"text\"\n callbackData={{\n tableId: entityId!,\n queryMetadata: queryMetadata,\n selectedRows,\n refresh: () => {\n if (remount) {\n remount()\n }\n },\n request: getCurrentQueryRequest(),\n }}\n control={customControl}\n startIcon={customControl.icon}\n />\n )\n })}\n </>\n )}\n {showColumnSelection && (\n <ColumnSelection\n headers={queryMetadata?.selectColumns}\n isColumnSelected={columnsToShowInTable}\n toggleColumnSelection={toggleColumnSelection}\n darkTheme={true}\n />\n )}\n <ExportToAnalysisPlatformDialog\n platformInstructionProps={{\n cavaticaConnectAccountURL: cavaticaConnectAccountURL,\n }}\n />\n </div>\n </div>\n </div>\n )\n}\n\nexport default TopLevelControls\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAM,IACJ,+CAEI,IAA0B;CAC9B,IAAI;CACJ,YAAY;CACZ,UAAU;CACV,gBAAgB;AAClB,GAkDM,KAAoB,MAAkD;CAC1E,IAAM,CAAC,GAAgB,KAAqB,EAAS,EAAK,GACpD,EAAE,uBAAoB,EAAkB,GAExC,EACJ,SACA,yBAAsB,IACtB,kBAAe,IACf,kCACA,oCACA,+BAA4B,IAC5B,4BAAyB,IACzB,oBAAiB,IACjB,0BAAuB,IACvB,6BAA0B,IAC1B,sBAAmB,IACnB,yBACA,mBACA,8BACA,eACE,GAEE,EACJ,aACA,mBACA,2BACA,4BACE,GAAgB,GACd,EAAE,MAAM,MAAW,EAAoB,GAAU,EAAa,GAC9D,EAAE,MAAM,MAAkB,GAAoB,GAC9C,IAAwB,EAAa,EAAyB,GAC9D,IAAe,EAAyB,GACxC,IAAkB,EAA4B,GAE9C,EACJ,sBACA,yBACA,6BACA,sCACA,+CACA,qBACA,iCACA,yBACA,0BACA,kBACA,sBACA,oBACA,2BACE,GAA6B,GAE3B,KACJ,GAAiC,SAAS,GAEtC,CAAC,IAA8B,KACnC,EAAS,EAAK,GAMV,MAAyB,MAAuB;EACpD,IAAI,IAA2B,GAAU,CAAoB;EAQ7D,AAPI,EAAyB,SAAS,CAAU,IAC9C,IAA2B,EAAyB,QAClD,MAAM,MAAO,CACf,IAEA,EAAyB,KAAK,CAAU,GAE1C,GAAwB,CAAwB;CAClD,GAEM,KAAgC,EACpC,GACA,GACA,GAAe,UACjB,GACM,KACJ,EACE,GACA,GACA,GACA,GAAe,YACf,EACF,GAEI,KACJ,CAAC,KAAkB,GAAe,eAAe,KAAA,IAC7C,IAAI,EAAc,WAAW,eAAe,EAAE,KAC9C;CAEN,OACE,kBAAC,OAAD;EAAK,WAAW;EAAoB,eAAY;YAC9C,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD;KAAY,SAAQ;KAAe,MAAK;eAAxC;MACG;MAAK;MAAE;KACE;QACX,CAAC,KAAkB,KAClB,kBAAC,GAAD,EAAoC,UAAS,CAAA,CAE/C,EAAA,CAAA;IAEH,CAAC,KACA,kBAAC,GAAD;KACE,SAAS;KACT,eAAe,IAAmB,MAAS,CAAC,CAAK;KACjD,WACE,kBAAC,GAAD;MACE,MAAM,IAAkB,UAAU;MAClC,MAAM;KACP,CAAA;KAEH,IAAI;eATN,CAWG,IAAkB,SAAS,QAAO,UAC7B;;IAET,KAA2B,KAC1B,kBAAC,GAAD;KACE,SAAS;KACT,SAAS;KACT,WACE,kBAAC,GAAD;MACE,MAAM,IAAmB,UAAU;MACnC,MAAM;KACP,CAAA;KAEH,IAAI;eATN,CAWG,IAAmB,SAAS,QAAO,gBAC9B;;GAEP;MACL,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG,MACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,IAAD;KACE,OACE,kBAAA,GAAA,EAAA,UAAA;MAAE;MACqC;MACpC,IACG,uBACA;MAAmC;MAAI;MACH;MACvC,CAAC,KAAmB,KACnB,kBAAA,GAAA,EAAA,UAAE,qFAGA,CAAA;MAEH,KACC,kBAAA,GAAA,EAAA,UAAE,qEAGA,CAAA;KAEJ,EAAA,CAAA;eAGJ,kBAAC,GAAD;MACE,SAAQ;MACR,UAAU,CAAC;MACX,eACS,IACH,GAA0C,EAAI,IAC9C,EAAkB,EAAI;MAE5B,IAAI;gBARN;OASC;OACO;OAAoC;MAEpC;;IACD,CAAA,GACT,kBAAC,IAAD;KAAS,aAAY;KAAW,SAAQ;KAAS,UAAA;IAAU,CAAA,CAC3D,EAAA,CAAA;IAEH,KACC,kBAAC,GAAD;KACE,cAAc,EAAkB,EAAK;KACrC,SAAA;IACD,CAAA;IAEF,CAAC,MACA,kBAAC,GAAD;KACE,aAAa;KACb,kBAAkB,IAAiB,MAAS,CAAC,CAAK;KAClD,WAAW;KACX,MAAM;IACP,CAAA;IAEF,MACC,kBAAC,GAAD;KACE,aACE,KACI,wBACA;KAEN,kBAAkB;MAChB,EAAsB,OAAO,SAAS,IAAI,EAAE,WAAW;OAErD,AADA,EAAgC,EAAI,GACpC,iBAAiB;QACf,EAAgC,EAAK;OACvC,GAAG,GAAI;MACT,CAAC;KACH;KACA,WAAW;KACX,MAAM;IACP,CAAA;IAEF,CAAC,KACA,kBAAC,GAAD;KACE,aAAa;KACb,kBAAkB,IAAa,MAAS,CAAC,CAAK;KAC9C,WAAW;KACX,MAAM;IACP,CAAA;IAEF,CAAC,KACA,kBAAC,GAAD;KACE,WAAW;KACX,uBAAuB,GAA4B,EAAI;KACxB;KACE;IAClC,CAAA;IAGF,CAAC,KACA,kBAAC,GAAD;KACE,aAAa;KACb,kBAAkB,IAAiB,MAAS,CAAC,CAAK;KAClD,WAAW;KACX,MAAA;IACD,CAAA;IAGF,KACC,kBAAC,GAAD;KACkB;KACP;IACV,CAAA;IAEF,CAAC,KACA,KACA,EAAe,SAAS,KACtB,kBAAA,GAAA,EAAA,UACG,EAAe,KAAI,MAEhB,kBAAC,GAAD;KAEE,SAAQ;KACR,cAAc;MACZ,SAAS;MACM;MACf;MACA,eAAe;OACb,AAAI,KACF,EAAQ;MAEZ;MACA,SAAS,EAAuB;KAClC;KACA,SAAS;KACT,WAAW,EAAc;IAC1B,GAfM,EAAc,UAepB,CAEJ,EACD,CAAA;IAEL,KACC,kBAAC,GAAD;KACE,SAAS,GAAe;KACxB,kBAAkB;KACK;KACvB,WAAW;IACZ,CAAA;IAEH,kBAAC,GAAD,EACE,0BAA0B,EACG,6BAC7B,EACD,CAAA;GACE;IACF,EAAA,CAAA;CACF,CAAA;AAET"}
|
package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Lists the requester's active eDUC signatures (routed / signed but not yet submitted).
|
|
3
3
|
*
|
|
4
|
-
* The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* with a "Show More" button.
|
|
4
|
+
* The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn`,
|
|
5
|
+
* pushing the `isEDuc: true` filter to the server so the walk skips non-eDUC requests. Status is
|
|
6
|
+
* still filtered client-side because the list endpoint has no server-side status filter.
|
|
8
7
|
*
|
|
9
8
|
* Renders nothing when the fully-loaded, filtered list is empty.
|
|
10
9
|
*/
|
package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InFlightEDucSignaturesTable.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"names":[],"mappings":"AA8IA
|
|
1
|
+
{"version":3,"file":"InFlightEDucSignaturesTable.d.ts","sourceRoot":"","sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"names":[],"mappings":"AA8IA;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,mDA6J1C"}
|
|
@@ -104,7 +104,7 @@ function F(e) {
|
|
|
104
104
|
];
|
|
105
105
|
}
|
|
106
106
|
function I() {
|
|
107
|
-
let { data: c, isLoading: l, error: u } = n(), [S, D] = p(), [O, M] = p(), { data: N, isFetching: P, error: I } = t(S ?? "", {
|
|
107
|
+
let { data: c, isLoading: l, error: u } = n({ isEDuc: !0 }), [S, D] = p(), [O, M] = p(), { data: N, isFetching: P, error: I } = t(S ?? "", {
|
|
108
108
|
enabled: !!S,
|
|
109
109
|
staleTime: Infinity
|
|
110
110
|
});
|
|
@@ -124,7 +124,7 @@ function I() {
|
|
|
124
124
|
},
|
|
125
125
|
onCancel: (e) => M(e),
|
|
126
126
|
modifyLoadingArId: z
|
|
127
|
-
}), [z]), V = f(() => (c ?? []).filter((e) => e.
|
|
127
|
+
}), [z]), V = f(() => (c ?? []).filter((e) => e.status !== void 0 && j.includes(e.status)), [c]), H = A({
|
|
128
128
|
data: V,
|
|
129
129
|
columns: B,
|
|
130
130
|
getCoreRowModel: k(),
|
package/dist/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InFlightEDucSignaturesTable.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"sourcesContent":["import AccessRequirementList, {\n RequestDataStep,\n} from '@/components/AccessRequirementList/AccessRequirementList'\nimport { SkeletonTable } from '@/components/Skeleton'\nimport ColumnHeader from '@/components/TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '@/components/TanStackTable/StyledTanStackTable'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport {\n useListAllUserDataAccessRequests,\n useVoidDataAccessRequestSignature,\n} from '@/synapse-queries'\nimport { useGetAccessRequirements } from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport {\n Alert,\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Link as MuiLink,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessRequestSummary,\n AccessRequestSummaryStatusEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link as RouterLink } from 'react-router'\nimport {\n USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH,\n USER_ACCESS_HISTORY_REQUEST_SUBPATH,\n} from './RouteConstants'\n\nconst IN_FLIGHT_STATUSES: readonly AccessRequestSummaryStatusEnum[] = [\n 'sent',\n 'delivered',\n 'completed',\n] as const\n\nconst STATUS_DISPLAY: Record<string, string> = {\n sent: 'Signatures pending',\n delivered: 'Signatures pending',\n completed: 'Ready to submit',\n}\n\nconst signatureDeepLink = (requestId: string) =>\n `/${USER_ACCESS_HISTORY_REQUEST_SUBPATH}/${requestId}/${USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH}`\n\nconst columnHelper = createColumnHelper<AccessRequestSummary>()\n\ntype ActionCallbacks = {\n onModify: (summary: AccessRequestSummary) => void\n onCancel: (summary: AccessRequestSummary) => void\n modifyLoadingArId: string | undefined\n}\n\nfunction buildColumns(actions: ActionCallbacks) {\n return [\n columnHelper.accessor('accessRequirementName', {\n header: props => <ColumnHeader {...props} title={'Request type'} />,\n enableSorting: false,\n enableColumnFilter: false,\n }),\n columnHelper.display({\n id: 'signatureProgress',\n header: props => <ColumnHeader {...props} title={'Signature progress'} />,\n enableSorting: false,\n cell: ctx => {\n const acquired = ctx.row.original.signaturesAcquired ?? 0\n const requested = ctx.row.original.signaturesRequested ?? 0\n return `${acquired} of ${requested}`\n },\n enableColumnFilter: false,\n size: 150,\n }),\n columnHelper.accessor('status', {\n header: props => <ColumnHeader {...props} title={'Current status'} />,\n enableSorting: false,\n cell: ctx => {\n const status = ctx.getValue()\n return status ? (STATUS_DISPLAY[status] ?? status) : ''\n },\n enableColumnFilter: false,\n size: 150,\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n enableSorting: false,\n enableColumnFilter: false,\n cell: ctx => {\n const summary = ctx.row.original\n const requestId = summary.requestId\n if (!requestId) return null\n const isModifyLoading =\n actions.modifyLoadingArId !== undefined &&\n actions.modifyLoadingArId === summary.accessRequirementId\n return (\n <Stack\n direction={'column'}\n sx={{ alignItems: 'flex-start', gap: 0.5 }}\n >\n <MuiLink component={RouterLink} to={signatureDeepLink(requestId)}>\n Review Signatures and Submit\n </MuiLink>\n <MuiLink\n component={'button'}\n type={'button'}\n onClick={() => actions.onModify(summary)}\n disabled={\n !summary.accessRequirementId ||\n actions.modifyLoadingArId !== undefined\n }\n sx={{ textAlign: 'left' }}\n >\n {isModifyLoading ? 'Loading…' : 'Modify Request'}\n </MuiLink>\n <MuiLink\n component={'button'}\n type={'button'}\n onClick={() => actions.onCancel(summary)}\n sx={{ textAlign: 'left' }}\n >\n Cancel Request\n </MuiLink>\n </Stack>\n )\n },\n size: 220,\n }),\n ]\n}\n\n/**\n * Lists the requester's active eDUC signatures (routed / signed but not yet submitted).\n *\n * The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn`\n * because filtering is done client-side pending PLFM-9907 (which will add an `isEDuc` server-side\n * filter). Once server-side filtering ships, callers can switch back to a per-page infinite query\n * with a \"Show More\" button.\n *\n * Renders nothing when the fully-loaded, filtered list is empty.\n */\nexport function InFlightEDucSignaturesTable() {\n const {\n data: summaries,\n isLoading,\n error,\n } = useListAllUserDataAccessRequests()\n\n const [modifyingArId, setModifyingArId] = useState<string | undefined>()\n const [cancellingSummary, setCancellingSummary] = useState<\n AccessRequestSummary | undefined\n >()\n\n const {\n data: modifyAccessRequirement,\n isFetching: isFetchingModifyAr,\n error: modifyArError,\n } = useGetAccessRequirements<ManagedACTAccessRequirement>(\n modifyingArId ?? '',\n { enabled: Boolean(modifyingArId), staleTime: Infinity },\n )\n\n // Bail out of the Modify flow if the AR fetch fails so the user isn't stuck on a disabled button.\n useEffect(() => {\n if (modifyArError && modifyingArId) {\n displayToast(\n `Sorry, we couldn't load your request. ${modifyArError.reason ?? ''}`.trim(),\n 'danger',\n )\n setModifyingArId(undefined)\n }\n }, [modifyArError, modifyingArId])\n\n const { mutate: voidSignature, isPending: isVoiding } =\n useVoidDataAccessRequestSignature({\n onSuccess: () => {\n displayToast('Your access request has been cancelled.', 'success')\n setCancellingSummary(undefined)\n },\n onError: e => {\n displayToast(\n `Sorry, we couldn't cancel your request. ${e.reason ?? ''}`.trim(),\n 'danger',\n )\n },\n })\n\n const modifyLoadingArId = isFetchingModifyAr ? modifyingArId : undefined\n\n const columns = useMemo(\n () =>\n buildColumns({\n onModify: summary => {\n if (summary.accessRequirementId) {\n setModifyingArId(summary.accessRequirementId)\n }\n },\n onCancel: summary => setCancellingSummary(summary),\n modifyLoadingArId,\n }),\n [modifyLoadingArId],\n )\n\n const rows = useMemo(\n () =>\n (summaries ?? []).filter(\n summary =>\n summary.isEDuc === true &&\n summary.status !== undefined &&\n (IN_FLIGHT_STATUSES as readonly string[]).includes(summary.status),\n ),\n [summaries],\n )\n\n const table = useReactTable({\n data: rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n if (error) {\n return (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn't load your in-flight eDUC signatures.\n </strong>\n <br />\n {error.reason}\n </Alert>\n )\n }\n\n if (isLoading) {\n return <SkeletonTable numCols={columns.length} fullWidthCells />\n }\n\n if (rows.length === 0) {\n return null\n }\n\n return (\n <Box>\n <Stack sx={{ gap: 2 }}>\n <Typography variant=\"headline1\" gutterBottom>\n In-flight eDUC signatures\n </Typography>\n <StyledTanStackTable table={table} fullWidth={true} />\n </Stack>\n {modifyAccessRequirement && (\n <AccessRequirementList\n renderAsModal\n onHide={() => setModifyingArId(undefined)}\n initialWizardEntry={{\n step: RequestDataStep.UPDATE_RESEARCH_PROJECT,\n managedACTAccessRequirement: modifyAccessRequirement,\n }}\n />\n )}\n <Dialog\n open={Boolean(cancellingSummary)}\n onClose={() => setCancellingSummary(undefined)}\n >\n <DialogTitle>Cancel request?</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Cancelling this request will void the electronic signature envelope\n for{' '}\n <strong>\n {cancellingSummary?.accessRequirementName ?? 'this request'}\n </strong>\n . Any signatures already collected will be discarded. You can start\n a new request at any time. This action cannot be undone.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant={'outlined'}\n onClick={() => setCancellingSummary(undefined)}\n disabled={isVoiding}\n >\n Keep Request\n </Button>\n <Button\n variant={'contained'}\n color={'error'}\n loading={isVoiding}\n onClick={() => {\n if (cancellingSummary?.requestId) {\n voidSignature(cancellingSummary.requestId)\n }\n }}\n >\n Cancel Request\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InFlightEDucSignaturesTable.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/InFlightEDucSignaturesTable.tsx"],"sourcesContent":["import AccessRequirementList, {\n RequestDataStep,\n} from '@/components/AccessRequirementList/AccessRequirementList'\nimport { SkeletonTable } from '@/components/Skeleton'\nimport ColumnHeader from '@/components/TanStackTable/ColumnHeader'\nimport StyledTanStackTable from '@/components/TanStackTable/StyledTanStackTable'\nimport { displayToast } from '@/components/ToastMessage/ToastMessage'\nimport {\n useListAllUserDataAccessRequests,\n useVoidDataAccessRequestSignature,\n} from '@/synapse-queries'\nimport { useGetAccessRequirements } from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport {\n Alert,\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Link as MuiLink,\n Stack,\n Typography,\n} from '@mui/material'\nimport {\n AccessRequestSummary,\n AccessRequestSummaryStatusEnum,\n} from '@sage-bionetworks/synapse-client'\nimport { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types'\nimport {\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link as RouterLink } from 'react-router'\nimport {\n USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH,\n USER_ACCESS_HISTORY_REQUEST_SUBPATH,\n} from './RouteConstants'\n\nconst IN_FLIGHT_STATUSES: readonly AccessRequestSummaryStatusEnum[] = [\n 'sent',\n 'delivered',\n 'completed',\n] as const\n\nconst STATUS_DISPLAY: Record<string, string> = {\n sent: 'Signatures pending',\n delivered: 'Signatures pending',\n completed: 'Ready to submit',\n}\n\nconst signatureDeepLink = (requestId: string) =>\n `/${USER_ACCESS_HISTORY_REQUEST_SUBPATH}/${requestId}/${USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH}`\n\nconst columnHelper = createColumnHelper<AccessRequestSummary>()\n\ntype ActionCallbacks = {\n onModify: (summary: AccessRequestSummary) => void\n onCancel: (summary: AccessRequestSummary) => void\n modifyLoadingArId: string | undefined\n}\n\nfunction buildColumns(actions: ActionCallbacks) {\n return [\n columnHelper.accessor('accessRequirementName', {\n header: props => <ColumnHeader {...props} title={'Request type'} />,\n enableSorting: false,\n enableColumnFilter: false,\n }),\n columnHelper.display({\n id: 'signatureProgress',\n header: props => <ColumnHeader {...props} title={'Signature progress'} />,\n enableSorting: false,\n cell: ctx => {\n const acquired = ctx.row.original.signaturesAcquired ?? 0\n const requested = ctx.row.original.signaturesRequested ?? 0\n return `${acquired} of ${requested}`\n },\n enableColumnFilter: false,\n size: 150,\n }),\n columnHelper.accessor('status', {\n header: props => <ColumnHeader {...props} title={'Current status'} />,\n enableSorting: false,\n cell: ctx => {\n const status = ctx.getValue()\n return status ? (STATUS_DISPLAY[status] ?? status) : ''\n },\n enableColumnFilter: false,\n size: 150,\n }),\n columnHelper.display({\n id: 'actions',\n header: props => <ColumnHeader {...props} title={'Actions'} />,\n enableSorting: false,\n enableColumnFilter: false,\n cell: ctx => {\n const summary = ctx.row.original\n const requestId = summary.requestId\n if (!requestId) return null\n const isModifyLoading =\n actions.modifyLoadingArId !== undefined &&\n actions.modifyLoadingArId === summary.accessRequirementId\n return (\n <Stack\n direction={'column'}\n sx={{ alignItems: 'flex-start', gap: 0.5 }}\n >\n <MuiLink component={RouterLink} to={signatureDeepLink(requestId)}>\n Review Signatures and Submit\n </MuiLink>\n <MuiLink\n component={'button'}\n type={'button'}\n onClick={() => actions.onModify(summary)}\n disabled={\n !summary.accessRequirementId ||\n actions.modifyLoadingArId !== undefined\n }\n sx={{ textAlign: 'left' }}\n >\n {isModifyLoading ? 'Loading…' : 'Modify Request'}\n </MuiLink>\n <MuiLink\n component={'button'}\n type={'button'}\n onClick={() => actions.onCancel(summary)}\n sx={{ textAlign: 'left' }}\n >\n Cancel Request\n </MuiLink>\n </Stack>\n )\n },\n size: 220,\n }),\n ]\n}\n\n/**\n * Lists the requester's active eDUC signatures (routed / signed but not yet submitted).\n *\n * The underlying query walks every page of `POST /dataAccessRequest/list` inside its `queryFn`,\n * pushing the `isEDuc: true` filter to the server so the walk skips non-eDUC requests. Status is\n * still filtered client-side because the list endpoint has no server-side status filter.\n *\n * Renders nothing when the fully-loaded, filtered list is empty.\n */\nexport function InFlightEDucSignaturesTable() {\n const {\n data: summaries,\n isLoading,\n error,\n } = useListAllUserDataAccessRequests({ isEDuc: true })\n\n const [modifyingArId, setModifyingArId] = useState<string | undefined>()\n const [cancellingSummary, setCancellingSummary] = useState<\n AccessRequestSummary | undefined\n >()\n\n const {\n data: modifyAccessRequirement,\n isFetching: isFetchingModifyAr,\n error: modifyArError,\n } = useGetAccessRequirements<ManagedACTAccessRequirement>(\n modifyingArId ?? '',\n { enabled: Boolean(modifyingArId), staleTime: Infinity },\n )\n\n // Bail out of the Modify flow if the AR fetch fails so the user isn't stuck on a disabled button.\n useEffect(() => {\n if (modifyArError && modifyingArId) {\n displayToast(\n `Sorry, we couldn't load your request. ${modifyArError.reason ?? ''}`.trim(),\n 'danger',\n )\n setModifyingArId(undefined)\n }\n }, [modifyArError, modifyingArId])\n\n const { mutate: voidSignature, isPending: isVoiding } =\n useVoidDataAccessRequestSignature({\n onSuccess: () => {\n displayToast('Your access request has been cancelled.', 'success')\n setCancellingSummary(undefined)\n },\n onError: e => {\n displayToast(\n `Sorry, we couldn't cancel your request. ${e.reason ?? ''}`.trim(),\n 'danger',\n )\n },\n })\n\n const modifyLoadingArId = isFetchingModifyAr ? modifyingArId : undefined\n\n const columns = useMemo(\n () =>\n buildColumns({\n onModify: summary => {\n if (summary.accessRequirementId) {\n setModifyingArId(summary.accessRequirementId)\n }\n },\n onCancel: summary => setCancellingSummary(summary),\n modifyLoadingArId,\n }),\n [modifyLoadingArId],\n )\n\n const rows = useMemo(\n () =>\n (summaries ?? []).filter(\n summary =>\n summary.status !== undefined &&\n (IN_FLIGHT_STATUSES as readonly string[]).includes(summary.status),\n ),\n [summaries],\n )\n\n const table = useReactTable({\n data: rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n columnResizeMode: 'onChange',\n })\n\n if (error) {\n return (\n <Alert severity={'error'}>\n <strong>\n Sorry, we couldn't load your in-flight eDUC signatures.\n </strong>\n <br />\n {error.reason}\n </Alert>\n )\n }\n\n if (isLoading) {\n return <SkeletonTable numCols={columns.length} fullWidthCells />\n }\n\n if (rows.length === 0) {\n return null\n }\n\n return (\n <Box>\n <Stack sx={{ gap: 2 }}>\n <Typography variant=\"headline1\" gutterBottom>\n In-flight eDUC signatures\n </Typography>\n <StyledTanStackTable table={table} fullWidth={true} />\n </Stack>\n {modifyAccessRequirement && (\n <AccessRequirementList\n renderAsModal\n onHide={() => setModifyingArId(undefined)}\n initialWizardEntry={{\n step: RequestDataStep.UPDATE_RESEARCH_PROJECT,\n managedACTAccessRequirement: modifyAccessRequirement,\n }}\n />\n )}\n <Dialog\n open={Boolean(cancellingSummary)}\n onClose={() => setCancellingSummary(undefined)}\n >\n <DialogTitle>Cancel request?</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Cancelling this request will void the electronic signature envelope\n for{' '}\n <strong>\n {cancellingSummary?.accessRequirementName ?? 'this request'}\n </strong>\n . Any signatures already collected will be discarded. You can start\n a new request at any time. This action cannot be undone.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant={'outlined'}\n onClick={() => setCancellingSummary(undefined)}\n disabled={isVoiding}\n >\n Keep Request\n </Button>\n <Button\n variant={'contained'}\n color={'error'}\n loading={isVoiding}\n onClick={() => {\n if (cancellingSummary?.requestId) {\n voidSignature(cancellingSummary.requestId)\n }\n }}\n >\n Cancel Request\n </Button>\n </DialogActions>\n </Dialog>\n </Box>\n )\n}\n"],"mappings":"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"}
|
package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js
CHANGED
|
@@ -22,7 +22,7 @@ function D() {
|
|
|
22
22
|
}) : /* @__PURE__ */ g(v, { to: "/" });
|
|
23
23
|
}
|
|
24
24
|
function O() {
|
|
25
|
-
let { requestId: e } = T(), a = w(), { data: o, isLoading: s } = n(), c = o?.find((t) => t.requestId === e), l = c?.accessRequirementId, { data: u, isLoading: d } = t(l ?? "", {
|
|
25
|
+
let { requestId: e } = T(), a = w(), { data: o, isLoading: s } = n({ isEDuc: !0 }), c = o?.find((t) => t.requestId === e), l = c?.accessRequirementId, { data: u, isLoading: d } = t(l ?? "", {
|
|
26
26
|
enabled: !!l,
|
|
27
27
|
staleTime: Infinity
|
|
28
28
|
});
|
package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAccessRequestHistoryPlace.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.tsx"],"sourcesContent":["import {\n BreadcrumbItem,\n Breadcrumbs,\n} from '@/components/Breadcrumbs/Breadcrumbs'\nimport { useListAllUserDataAccessRequests } from '@/synapse-queries'\nimport { useGetAccessRequirements } from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport { AuthenticationGuard } from '@/utils/AppUtils'\nimport { Box } from '@mui/material'\nimport { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types'\nimport { useMemo } from 'react'\nimport {\n createBrowserRouter,\n createMemoryRouter,\n Navigate,\n Outlet,\n RouteObject,\n RouterProvider,\n useLocation,\n useNavigate,\n useParams,\n} from 'react-router'\nimport { RouterProvider as DOMRouterProvider } from 'react-router/dom'\nimport AccessRequirementList, {\n RequestDataStep,\n} from '../../AccessRequirementList/AccessRequirementList'\nimport SubmissionPage from '../SubmissionPage/SubmissionPage'\nimport {\n REQUEST_ID_PARAM,\n SUBMISSION_ID_PARAM,\n USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH,\n USER_ACCESS_HISTORY_REQUEST_SUBPATH,\n USER_ACCESS_HISTORY_SUBMISSION_SUBPATH,\n} from './RouteConstants'\nimport { UserAccessRequestHistoryPage } from './UserAccessRequestHistoryPage'\n\ntype ReviewerDashboardProps = {\n /** Used to determine the base path for the component. Default is RequestHistory:default */\n routerBaseName?: string\n /** If true use a MemoryRouter, which prevents the browser URL from updating. For demo/test purposes only. */\n useMemoryRouter?: boolean\n}\n\nfunction UserSubmissionPageRouteRenderer() {\n const { submissionId } = useParams<{ [SUBMISSION_ID_PARAM]: string }>()\n if (!submissionId) {\n return <Navigate to=\"/\" />\n }\n return <SubmissionPage submissionId={submissionId} isReviewer={false} />\n}\n\n/**\n * Deep-link route element for `/request/:requestId/signature`. Rendered inside\n * `UserAccessRequestHistoryPage`'s `<Outlet />` so the page stays mounted while the dialog is open.\n * Looks up the request in the user's own access-request list, then mounts the signature-status\n * wizard step for the AR. Requests that don't belong to the user (or don't exist) redirect back\n * to the history index. The surrounding `AuthenticationGuard` handles unauthenticated visitors.\n */\nfunction RequestSignatureRouteRenderer() {\n const { requestId } = useParams<{ [REQUEST_ID_PARAM]: string }>()\n const navigate = useNavigate()\n\n const { data: summaries, isLoading: isLoadingSummaries } =\n useListAllUserDataAccessRequests()\n const summary = summaries?.find(s => s.requestId === requestId)\n const accessRequirementId = summary?.accessRequirementId\n\n const { data: accessRequirement, isLoading: isLoadingAr } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n accessRequirementId ?? '',\n { enabled: Boolean(accessRequirementId), staleTime: Infinity },\n )\n\n // Wait for the summary + AR to load before mounting the dialog. `UserAccessRequestHistoryPage`\n // renders its own skeletons in the meantime, so no visible spinner is needed here.\n if (isLoadingSummaries || (accessRequirementId && isLoadingAr)) {\n return null\n }\n\n // Summary not found in the user's own requests, or its access requirement failed to load.\n if (!summary || !accessRequirementId || !accessRequirement) {\n return <Navigate to=\"/\" replace />\n }\n\n return (\n <AccessRequirementList\n renderAsModal\n onHide={() => {\n void navigate('/')\n }}\n initialWizardEntry={{\n step: RequestDataStep.SIGNATURE_STATUS,\n managedACTAccessRequirement: accessRequirement,\n }}\n />\n )\n}\n\n/**\n * Layout for UserAccessRequestHistory pages. Includes header with title.\n * @constructor\n */\nfunction UserAccessRequestHistoryPageLayout() {\n return (\n <>\n <div className=\"pageHeader\">\n <div className=\"grid\">\n <h3 className=\"pageHeaderTitle\">Access Requests</h3>\n </div>\n </div>\n <Box sx={{ px: 5, py: 3 }}>\n <Outlet />\n </Box>\n </>\n )\n}\n\n/**\n * Breadcrumb layout for UserAccessRequestHistory pages. Displays breadcrumbs for navigation.\n */\nfunction UserAccessRequestHistoryBreadcrumbLayout() {\n const { submissionId } = useParams<{ [SUBMISSION_ID_PARAM]: string }>()\n const location = useLocation()\n\n const breadcrumbItems: BreadcrumbItem[] = [\n {\n text: 'Access Request History',\n to: '/',\n current: location.pathname === '/',\n },\n ]\n if (submissionId) {\n const submissionPath = `/${USER_ACCESS_HISTORY_SUBMISSION_SUBPATH}/${submissionId}`\n breadcrumbItems.push({\n text: `Request #${submissionId}`,\n to: submissionPath,\n current: location.pathname === submissionPath,\n })\n }\n\n return (\n <>\n <Breadcrumbs\n items={breadcrumbItems}\n sx={{\n mt: 2,\n mb: 4,\n ['& .MuiLink-root']: {\n color: 'text.secondary',\n letterSpacing: 0,\n '&:visited': {\n color: 'text.secondary',\n },\n },\n '& .MuiSvgIcon-root': {\n color: 'grey.500',\n },\n }}\n />\n <Outlet />\n </>\n )\n}\n\nconst routes: RouteObject[] = [\n {\n element: <UserAccessRequestHistoryPageLayout />,\n children: [\n {\n path: '/',\n children: [\n {\n // Keep the history page mounted across the index ↔ signature-deep-link transition.\n element: <UserAccessRequestHistoryPage />,\n children: [\n { index: true, element: null },\n {\n path: `${USER_ACCESS_HISTORY_REQUEST_SUBPATH}/:${REQUEST_ID_PARAM}/${USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH}`,\n element: (\n <AuthenticationGuard>\n <RequestSignatureRouteRenderer />\n </AuthenticationGuard>\n ),\n },\n ],\n },\n {\n // Do not display the breadcrumbs on the `index` page\n element: <UserAccessRequestHistoryBreadcrumbLayout />,\n children: [\n {\n path: `${USER_ACCESS_HISTORY_SUBMISSION_SUBPATH}`,\n children: [\n {\n path: `:${SUBMISSION_ID_PARAM}`,\n element: <UserSubmissionPageRouteRenderer />,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n]\n\n/**\n * Component that renders User Access Request history table & submission page. Handles routing internally.\n */\nexport function UserAccessRequestHistoryPlace(props: ReviewerDashboardProps) {\n const {\n routerBaseName = '/RequestHistory:default',\n useMemoryRouter = false,\n } = props\n\n const router = useMemo(() => {\n if (useMemoryRouter) {\n return createMemoryRouter(routes, {\n basename: routerBaseName,\n })\n } else {\n return createBrowserRouter(routes, {\n basename: routerBaseName,\n })\n }\n }, [useMemoryRouter, routerBaseName])\n\n if (useMemoryRouter) {\n return <RouterProvider router={router} />\n }\n\n return <DOMRouterProvider router={router} />\n}\n\nexport default UserAccessRequestHistoryPlace\n"],"mappings":";;;;;;;;;;;;;;;;AA0CA,SAAS,IAAkC;CACzC,IAAM,EAAE,oBAAiB,EAA6C;CAItE,OAHK,IAGE,kBAAC,GAAD;EAA8B;EAAc,YAAY;CAAQ,CAAA,IAF9D,kBAAC,GAAD,EAAU,IAAG,IAAK,CAAA;AAG7B;AASA,SAAS,IAAgC;CACvC,IAAM,EAAE,iBAAc,EAA0C,GAC1D,IAAW,EAAY,GAEvB,EAAE,MAAM,GAAW,WAAW,MAClC,EAAiC,
|
|
1
|
+
{"version":3,"file":"UserAccessRequestHistoryPlace.js","names":[],"sources":["../../../../src/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.tsx"],"sourcesContent":["import {\n BreadcrumbItem,\n Breadcrumbs,\n} from '@/components/Breadcrumbs/Breadcrumbs'\nimport { useListAllUserDataAccessRequests } from '@/synapse-queries'\nimport { useGetAccessRequirements } from '@/synapse-queries/dataaccess/useAccessRequirements'\nimport { AuthenticationGuard } from '@/utils/AppUtils'\nimport { Box } from '@mui/material'\nimport { ManagedACTAccessRequirement } from '@sage-bionetworks/synapse-types'\nimport { useMemo } from 'react'\nimport {\n createBrowserRouter,\n createMemoryRouter,\n Navigate,\n Outlet,\n RouteObject,\n RouterProvider,\n useLocation,\n useNavigate,\n useParams,\n} from 'react-router'\nimport { RouterProvider as DOMRouterProvider } from 'react-router/dom'\nimport AccessRequirementList, {\n RequestDataStep,\n} from '../../AccessRequirementList/AccessRequirementList'\nimport SubmissionPage from '../SubmissionPage/SubmissionPage'\nimport {\n REQUEST_ID_PARAM,\n SUBMISSION_ID_PARAM,\n USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH,\n USER_ACCESS_HISTORY_REQUEST_SUBPATH,\n USER_ACCESS_HISTORY_SUBMISSION_SUBPATH,\n} from './RouteConstants'\nimport { UserAccessRequestHistoryPage } from './UserAccessRequestHistoryPage'\n\ntype ReviewerDashboardProps = {\n /** Used to determine the base path for the component. Default is RequestHistory:default */\n routerBaseName?: string\n /** If true use a MemoryRouter, which prevents the browser URL from updating. For demo/test purposes only. */\n useMemoryRouter?: boolean\n}\n\nfunction UserSubmissionPageRouteRenderer() {\n const { submissionId } = useParams<{ [SUBMISSION_ID_PARAM]: string }>()\n if (!submissionId) {\n return <Navigate to=\"/\" />\n }\n return <SubmissionPage submissionId={submissionId} isReviewer={false} />\n}\n\n/**\n * Deep-link route element for `/request/:requestId/signature`. Rendered inside\n * `UserAccessRequestHistoryPage`'s `<Outlet />` so the page stays mounted while the dialog is open.\n * Looks up the request in the user's own access-request list, then mounts the signature-status\n * wizard step for the AR. Requests that don't belong to the user (or don't exist) redirect back\n * to the history index. The surrounding `AuthenticationGuard` handles unauthenticated visitors.\n */\nfunction RequestSignatureRouteRenderer() {\n const { requestId } = useParams<{ [REQUEST_ID_PARAM]: string }>()\n const navigate = useNavigate()\n\n const { data: summaries, isLoading: isLoadingSummaries } =\n useListAllUserDataAccessRequests({ isEDuc: true })\n const summary = summaries?.find(s => s.requestId === requestId)\n const accessRequirementId = summary?.accessRequirementId\n\n const { data: accessRequirement, isLoading: isLoadingAr } =\n useGetAccessRequirements<ManagedACTAccessRequirement>(\n accessRequirementId ?? '',\n { enabled: Boolean(accessRequirementId), staleTime: Infinity },\n )\n\n // Wait for the summary + AR to load before mounting the dialog. `UserAccessRequestHistoryPage`\n // renders its own skeletons in the meantime, so no visible spinner is needed here.\n if (isLoadingSummaries || (accessRequirementId && isLoadingAr)) {\n return null\n }\n\n // Summary not found in the user's own requests, or its access requirement failed to load.\n if (!summary || !accessRequirementId || !accessRequirement) {\n return <Navigate to=\"/\" replace />\n }\n\n return (\n <AccessRequirementList\n renderAsModal\n onHide={() => {\n void navigate('/')\n }}\n initialWizardEntry={{\n step: RequestDataStep.SIGNATURE_STATUS,\n managedACTAccessRequirement: accessRequirement,\n }}\n />\n )\n}\n\n/**\n * Layout for UserAccessRequestHistory pages. Includes header with title.\n * @constructor\n */\nfunction UserAccessRequestHistoryPageLayout() {\n return (\n <>\n <div className=\"pageHeader\">\n <div className=\"grid\">\n <h3 className=\"pageHeaderTitle\">Access Requests</h3>\n </div>\n </div>\n <Box sx={{ px: 5, py: 3 }}>\n <Outlet />\n </Box>\n </>\n )\n}\n\n/**\n * Breadcrumb layout for UserAccessRequestHistory pages. Displays breadcrumbs for navigation.\n */\nfunction UserAccessRequestHistoryBreadcrumbLayout() {\n const { submissionId } = useParams<{ [SUBMISSION_ID_PARAM]: string }>()\n const location = useLocation()\n\n const breadcrumbItems: BreadcrumbItem[] = [\n {\n text: 'Access Request History',\n to: '/',\n current: location.pathname === '/',\n },\n ]\n if (submissionId) {\n const submissionPath = `/${USER_ACCESS_HISTORY_SUBMISSION_SUBPATH}/${submissionId}`\n breadcrumbItems.push({\n text: `Request #${submissionId}`,\n to: submissionPath,\n current: location.pathname === submissionPath,\n })\n }\n\n return (\n <>\n <Breadcrumbs\n items={breadcrumbItems}\n sx={{\n mt: 2,\n mb: 4,\n ['& .MuiLink-root']: {\n color: 'text.secondary',\n letterSpacing: 0,\n '&:visited': {\n color: 'text.secondary',\n },\n },\n '& .MuiSvgIcon-root': {\n color: 'grey.500',\n },\n }}\n />\n <Outlet />\n </>\n )\n}\n\nconst routes: RouteObject[] = [\n {\n element: <UserAccessRequestHistoryPageLayout />,\n children: [\n {\n path: '/',\n children: [\n {\n // Keep the history page mounted across the index ↔ signature-deep-link transition.\n element: <UserAccessRequestHistoryPage />,\n children: [\n { index: true, element: null },\n {\n path: `${USER_ACCESS_HISTORY_REQUEST_SUBPATH}/:${REQUEST_ID_PARAM}/${USER_ACCESS_HISTORY_REQUEST_SIGNATURE_SUBPATH}`,\n element: (\n <AuthenticationGuard>\n <RequestSignatureRouteRenderer />\n </AuthenticationGuard>\n ),\n },\n ],\n },\n {\n // Do not display the breadcrumbs on the `index` page\n element: <UserAccessRequestHistoryBreadcrumbLayout />,\n children: [\n {\n path: `${USER_ACCESS_HISTORY_SUBMISSION_SUBPATH}`,\n children: [\n {\n path: `:${SUBMISSION_ID_PARAM}`,\n element: <UserSubmissionPageRouteRenderer />,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n]\n\n/**\n * Component that renders User Access Request history table & submission page. Handles routing internally.\n */\nexport function UserAccessRequestHistoryPlace(props: ReviewerDashboardProps) {\n const {\n routerBaseName = '/RequestHistory:default',\n useMemoryRouter = false,\n } = props\n\n const router = useMemo(() => {\n if (useMemoryRouter) {\n return createMemoryRouter(routes, {\n basename: routerBaseName,\n })\n } else {\n return createBrowserRouter(routes, {\n basename: routerBaseName,\n })\n }\n }, [useMemoryRouter, routerBaseName])\n\n if (useMemoryRouter) {\n return <RouterProvider router={router} />\n }\n\n return <DOMRouterProvider router={router} />\n}\n\nexport default UserAccessRequestHistoryPlace\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityActionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/action_menu/EntityActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAK/C,KAAK,gCAAgC,GAAG,UAAU,GAAG,SAAS,CAAA;AAE9D,KAAK,yCAAyC,GAAG;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAExE,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,gCAAgC,EAChC,yCAAyC,CAC1C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,eAAe,EAAE,CAAA;IAChC,mBAAmB,EAAE,eAAe,EAAE,EAAE,CAAA;IACxC,kBAAkB,EAAE,eAAe,EAAE,EAAE,CAAA;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,QAAQ,CAAA;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACvC,mBAAmB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC5C,kBAAkB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,sBAAsB,CAAA;IAE3C,iBAAiB,EAAE,oBAAoB,CAAA;IAEvC,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAMD,iBAAS,kBAAkB,CACzB,mBAAmB,EAAE,sBAAsB,EAC3C,MAAM,EAAE,sBAAsB,GAC7B,sBAAsB,CAmBxB;AAED;;;;;GAKG;AACH,iBAAS,4BAA4B,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,CAqBpB;AAED;;;;;;GAMG;AACH,iBAAS,sBAAsB,CAC7B,WAAW,EAAE,eAAe,EAAE,EAAE,EAChC,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,EAAE,CAYtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"EntityActionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/action_menu/EntityActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAK/C,KAAK,gCAAgC,GAAG,UAAU,GAAG,SAAS,CAAA;AAE9D,KAAK,yCAAyC,GAAG;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2BAA2B,CAAC,EAAE,OAAO,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAExE,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,gCAAgC,EAChC,yCAAyC,CAC1C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,eAAe,EAAE,CAAA;IAChC,mBAAmB,EAAE,eAAe,EAAE,EAAE,CAAA;IACxC,kBAAkB,EAAE,eAAe,EAAE,EAAE,CAAA;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,QAAQ,CAAA;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACvC,mBAAmB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC5C,kBAAkB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,sBAAsB,CAAA;IAE3C,iBAAiB,EAAE,oBAAoB,CAAA;IAEvC,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAMD,iBAAS,kBAAkB,CACzB,mBAAmB,EAAE,sBAAsB,EAC3C,MAAM,EAAE,sBAAsB,GAC7B,sBAAsB,CAmBxB;AAED;;;;;GAKG;AACH,iBAAS,4BAA4B,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,CAqBpB;AAED;;;;;;GAMG;AACH,iBAAS,sBAAsB,CAC7B,WAAW,EAAE,eAAe,EAAE,EAAE,EAChC,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,EAAE,CAYtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAqJpE;AAED,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAA"}
|
|
@@ -92,7 +92,9 @@ function c(o) {
|
|
|
92
92
|
"& .MuiButton-root": {
|
|
93
93
|
borderRadius: "6px",
|
|
94
94
|
fontWeight: 540,
|
|
95
|
-
padding: "
|
|
95
|
+
padding: "8px",
|
|
96
|
+
height: "28px",
|
|
97
|
+
"& svg": { fontSize: "16px" }
|
|
96
98
|
},
|
|
97
99
|
"& .MuiButton-outlined": {
|
|
98
100
|
...h,
|
|
@@ -110,7 +112,12 @@ function c(o) {
|
|
|
110
112
|
textDecoration: "none"
|
|
111
113
|
}
|
|
112
114
|
},
|
|
113
|
-
"& .MuiButton-root .MuiTypography-root": {
|
|
115
|
+
"& .MuiButton-root .MuiTypography-root": {
|
|
116
|
+
fontWeight: 540,
|
|
117
|
+
fontSize: "12px",
|
|
118
|
+
lineHeight: "12px",
|
|
119
|
+
letterSpacing: "-0.24px"
|
|
120
|
+
}
|
|
114
121
|
},
|
|
115
122
|
children: /* @__PURE__ */ r(t, {
|
|
116
123
|
iconButtons: f,
|