synapse-react-client 4.0.40 → 4.0.41
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.d.ts +1 -0
- package/dist/SWC.index.d.ts.map +1 -1
- package/dist/SWC.index.js +2 -1
- package/dist/SWC.index.js.map +1 -1
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts +1 -0
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.d.ts.map +1 -1
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js +12 -12
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js +51 -48
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Authentication/Constants.d.ts +4 -0
- package/dist/components/Authentication/Constants.d.ts.map +1 -1
- package/dist/components/Authentication/Constants.js +5 -2
- package/dist/components/Authentication/Constants.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.d.ts.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js +8 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js +4 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
- package/dist/components/Authentication/TOTPForm.js +20 -18
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.js +41 -12
- package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js +74 -71
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js +43 -46
- package/dist/components/DataGrid/components/ReorderColumnsDialog.js.map +1 -1
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts +11 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js +61 -0
- package/dist/components/FormTemplateEditor/ChoiceOptionsEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts +33 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js +187 -0
- package/dist/components/FormTemplateEditor/FieldDefinitionDrawer.js.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts +14 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js +83 -0
- package/dist/components/FormTemplateEditor/FormTemplatePreview.js.map +1 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts +13 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js +33 -0
- package/dist/components/FormTemplateEditor/JsonSchemaBodyEditor.js.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts +32 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.js +75 -0
- package/dist/components/FormTemplateEditor/formTemplateValidation.js.map +1 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts +25 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js +66 -0
- package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts +28 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js +39 -0
- package/dist/components/FormTemplateEditor/useSaveFormTemplate.js.map +1 -0
- package/dist/components/FormTemplateEditor/utils.d.ts +21 -0
- package/dist/components/FormTemplateEditor/utils.d.ts.map +1 -0
- package/dist/components/FormTemplateEditor/utils.js +27 -0
- package/dist/components/FormTemplateEditor/utils.js.map +1 -0
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts +1 -1
- package/dist/components/JsonSchemaForm/CustomFormContext.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.css +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.js.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.module.scss +6 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js +4 -0
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.css +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts +2 -0
- package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.js +112 -109
- package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.module.js +10 -11
- package/dist/components/QueryBuilder/FilterConditionRow.module.js.map +1 -1
- package/dist/components/QueryBuilder/FilterConditionRow.module.scss +0 -5
- package/dist/components/QueryBuilder/FilterGroupNode.css +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts +4 -0
- package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.js +85 -51
- package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.module.js +10 -9
- package/dist/components/QueryBuilder/FilterGroupNode.module.js.map +1 -1
- package/dist/components/QueryBuilder/FilterGroupNode.module.scss +9 -0
- package/dist/components/QueryBuilder/QBDragHandle.d.ts +10 -0
- package/dist/components/QueryBuilder/QBDragHandle.d.ts.map +1 -0
- package/dist/components/QueryBuilder/QBDragHandle.js +22 -0
- package/dist/components/QueryBuilder/QBDragHandle.js.map +1 -0
- package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
- package/dist/components/QueryBuilder/QueryBuilderControls.js +112 -107
- package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
- package/dist/components/QueryBuilder/qbTreeToReadable.js +11 -11
- package/dist/components/QueryBuilder/queryBuilderDnd.d.ts +27 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.d.ts.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.js +41 -0
- package/dist/components/QueryBuilder/queryBuilderDnd.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.css +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js +8 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.js.map +1 -0
- package/dist/components/QueryBuilder/queryBuilderDrag.module.scss +12 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts +13 -0
- package/dist/components/QueryBuilder/queryBuilderOperations.d.ts.map +1 -1
- package/dist/components/QueryBuilder/queryBuilderOperations.js +39 -36
- package/dist/components/QueryBuilder/queryBuilderOperations.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +46 -47
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +0 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +35 -36
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
- package/dist/components/styled/LeftRightPanel.d.ts.map +1 -1
- package/dist/components/styled/LeftRightPanel.js +19 -2
- package/dist/components/styled/LeftRightPanel.js.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts +2 -2
- package/dist/mocks/accessRequirement/mockFormTemplates.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockFormTemplates.js +7 -14
- package/dist/mocks/accessRequirement/mockFormTemplates.js.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts +4 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.d.ts.map +1 -1
- package/dist/mocks/accessRequirement/mockJsonSchemas.js +36 -15
- package/dist/mocks/accessRequirement/mockJsonSchemas.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +41 -14
- package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js +53 -44
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/chatHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/chatHandlers.js +19 -13
- package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts +2 -1
- package/dist/mocks/msw/handlers/schemaHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.js +13 -7
- package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.js +24 -18
- package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryHandlers.js +35 -16
- package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
- package/dist/synapse-queries/KeyFactory.d.ts +1 -2
- package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
- package/dist/synapse-queries/KeyFactory.js +2 -5
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/dataaccess/index.d.ts +0 -1
- package/dist/synapse-queries/dataaccess/index.d.ts.map +1 -1
- package/dist/synapse-queries/dataaccess/index.js +3 -4
- package/dist/synapse-queries/index.js +180 -184
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts +9 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.d.ts.map +1 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js +22 -0
- package/dist/synapse-queries/jsonschema/useCreateJsonSchema.js.map +1 -0
- package/dist/testutils/vitest.setup.js +18 -9
- package/dist/testutils/vitest.setup.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.d.ts +1 -0
- package/dist/utils/APIConstants.d.ts.map +1 -1
- package/dist/utils/APIConstants.js +2 -2
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/appendFinalQueryParamKey.d.ts.map +1 -1
- package/dist/utils/appendFinalQueryParamKey.js +4 -1
- package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.d.ts +1 -0
- 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/functions/ArrayUtils.d.ts +3 -0
- package/dist/utils/functions/ArrayUtils.d.ts.map +1 -1
- package/dist/utils/functions/ArrayUtils.js +7 -1
- package/dist/utils/functions/ArrayUtils.js.map +1 -1
- package/dist/utils/jsonschema/generateDataAccessSchema.d.ts +26 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.d.ts.map +1 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.js +28 -0
- package/dist/utils/jsonschema/generateDataAccessSchema.js.map +1 -0
- package/dist/utils/jsonschema/submissionContext.d.ts +86 -0
- package/dist/utils/jsonschema/submissionContext.d.ts.map +1 -0
- package/dist/utils/jsonschema/submissionContext.js +186 -0
- package/dist/utils/jsonschema/submissionContext.js.map +1 -0
- package/package.json +5 -3
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts +0 -6
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.d.ts.map +0 -1
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js +0 -32
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +0 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts +0 -9
- package/dist/components/entity/page/title_bar/TitleBarProperties.d.ts.map +0 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.js +0 -24
- package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +0 -1
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts +0 -21
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.d.ts.map +0 -1
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js +0 -34
- package/dist/synapse-queries/dataaccess/useGenerateDataAccessSchema.js.map +0 -1
|
@@ -35,16 +35,15 @@ import { CustomControls as T } from "../SynapseTable/CustomControls/CustomContro
|
|
|
35
35
|
import E from "../widgets/facet-nav/PlotsContainer.js";
|
|
36
36
|
import { defaultQBGroup as D, hasCompleteCondition as O } from "../QueryBuilder/queryBuilderOperations.js";
|
|
37
37
|
import { qbNodeToApiFilter as ee, selectedFacetsToQBGroup as te } from "../QueryBuilder/queryBuilderTranslation.js";
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import { useAtomValue as oe } from "jotai";
|
|
38
|
+
import { Suspense as k, createElement as A, lazy as j, useMemo as M, useState as N } from "react";
|
|
39
|
+
import { Box as ne } from "@mui/material";
|
|
40
|
+
import { jsx as P, jsxs as re } from "react/jsx-runtime";
|
|
41
|
+
import { useQuery as ie } from "@tanstack/react-query";
|
|
42
|
+
import { useAtomValue as ae } from "jotai";
|
|
44
43
|
//#region src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx
|
|
45
|
-
var
|
|
46
|
-
function
|
|
47
|
-
let { tableConfiguration: n, name: r, cardConfiguration: a, facetsToPlot: l, availableFacets: d, initialExpandedFacetControls: p, hideDownload: v, hideAddToDownloadListMenuItem: A, hideProgrammaticOptionsMenuItem: j, hideQueryCount:
|
|
44
|
+
var oe = j(() => import("../QueryBuilder/QueryBuilderControls.js").then((e) => ({ default: e.QueryBuilderControls }))), F = "isShowingFacetFilters", I = "isHidingFacetFilters", L = "hasSelectedRows";
|
|
45
|
+
function R(t) {
|
|
46
|
+
let { tableConfiguration: n, name: r, cardConfiguration: a, facetsToPlot: l, availableFacets: d, initialExpandedFacetControls: p, hideDownload: v, hideAddToDownloadListMenuItem: A, hideProgrammaticOptionsMenuItem: j, hideQueryCount: M, hideSqlEditorControl: R, hideVisualizationsControl: z, searchConfiguration: B, cavaticaConnectAccountURL: se, customControls: V, remount: H = () => {}, isFullTextSearchEnabled: ce, customPlots: le, initialLimit: ue, initialPlotTypeByFacetColumnName: de, hideTopLevelControls: U, showQueryBuilderControl: fe = !1, defaultShowQueryBuilder: pe = !1 } = t, W = c(), [me, he] = N(!1), [G, K] = N(pe), [q, J] = N(() => D()), [ge, Y] = N(!1), { hasFacetedSelectColumn: X, queryMetadataQueryOptions: _e } = W, { executeQueryRequest: Z } = W, { isLoading: ve, data: ye } = ie(_e), be = () => {
|
|
48
47
|
let t = W.currentQueryRequest.query.selectedFacets;
|
|
49
48
|
if (t && t.length > 0) {
|
|
50
49
|
let n = te(t, ye?.columnModels), r = ee(n);
|
|
@@ -77,81 +76,81 @@ function L(t) {
|
|
|
77
76
|
return;
|
|
78
77
|
}
|
|
79
78
|
Q();
|
|
80
|
-
}, Se =
|
|
81
|
-
return /* @__PURE__ */
|
|
79
|
+
}, Se = ae(f), $ = W.currentQueryRequest, Ce = $?.query.selectedFacets !== void 0 && $.query.selectedFacets.length > 0 || $?.query.additionalFilters !== void 0 && $?.query.additionalFilters.length > 0, we = x();
|
|
80
|
+
return /* @__PURE__ */ P(u, { children: (e) => {
|
|
82
81
|
if (e === void 0) throw Error("No queryVisualizationContext found when using QueryVisualizationContextConsumer");
|
|
83
|
-
return /* @__PURE__ */
|
|
84
|
-
className: `QueryWrapperPlotNav ${e.showFacetFilter && !G ?
|
|
82
|
+
return /* @__PURE__ */ P(ne, {
|
|
83
|
+
className: `QueryWrapperPlotNav ${e.showFacetFilter && !G ? F : I} ${Se ? L : ""} ${U ? "isHidingTopLevelControls" : ""} ${G ? "isShowingQueryBuilder" : ""}`,
|
|
85
84
|
sx: { "*": { cursor: ve ? "wait" : void 0 } },
|
|
86
|
-
children: /* @__PURE__ */
|
|
87
|
-
|
|
88
|
-
...
|
|
85
|
+
children: /* @__PURE__ */ re(g, { children: [
|
|
86
|
+
ce ? /* @__PURE__ */ P(S, { ftsConfig: B?.ftsConfig }) : /* @__PURE__ */ P(C, {
|
|
87
|
+
...B,
|
|
89
88
|
queryContext: W,
|
|
90
89
|
queryVisualizationContext: e
|
|
91
90
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
93
|
-
e.showDownloadConfirmation && /* @__PURE__ */
|
|
91
|
+
/* @__PURE__ */ P(h, {}),
|
|
92
|
+
e.showDownloadConfirmation && /* @__PURE__ */ P(s, {
|
|
94
93
|
addToDownloadListRequest: we,
|
|
95
94
|
onClose: () => e.setShowDownloadConfirmation(!1)
|
|
96
95
|
}),
|
|
97
|
-
!U && /* @__PURE__ */
|
|
96
|
+
!U && /* @__PURE__ */ P(i, { children: /* @__PURE__ */ P(w, {
|
|
98
97
|
showColumnSelection: n !== void 0,
|
|
99
98
|
name: r,
|
|
100
99
|
hideDownload: v,
|
|
101
100
|
hideAddToDownloadListMenuItem: A,
|
|
102
101
|
hideProgrammaticOptionsMenuItem: j,
|
|
103
|
-
hideQueryCount:
|
|
102
|
+
hideQueryCount: M,
|
|
104
103
|
hideFacetFilterControl: !X || G,
|
|
105
|
-
hideVisualizationsControl: !X ||
|
|
104
|
+
hideVisualizationsControl: !X || z,
|
|
106
105
|
hideSqlEditorControl: R,
|
|
107
|
-
cavaticaConnectAccountURL:
|
|
108
|
-
remount:
|
|
109
|
-
customControls:
|
|
106
|
+
cavaticaConnectAccountURL: se,
|
|
107
|
+
remount: H,
|
|
108
|
+
customControls: V,
|
|
110
109
|
showQueryBuilderControl: fe,
|
|
111
110
|
showQueryBuilder: G,
|
|
112
111
|
onToggleQueryBuilder: xe
|
|
113
112
|
}) }),
|
|
114
|
-
G ? /* @__PURE__ */
|
|
113
|
+
G ? /* @__PURE__ */ P(k, {
|
|
115
114
|
fallback: null,
|
|
116
|
-
children: /* @__PURE__ */
|
|
115
|
+
children: /* @__PURE__ */ P("div", {
|
|
117
116
|
className: "QueryBuilderControls",
|
|
118
|
-
children: /* @__PURE__ */
|
|
117
|
+
children: /* @__PURE__ */ P(oe, {
|
|
119
118
|
tree: q,
|
|
120
119
|
onTreeChange: J
|
|
121
120
|
})
|
|
122
121
|
})
|
|
123
|
-
}) : X && /* @__PURE__ */
|
|
122
|
+
}) : X && /* @__PURE__ */ P(b, {
|
|
124
123
|
availableFacets: d,
|
|
125
124
|
initialExpandedFacetControls: p
|
|
126
125
|
}),
|
|
127
|
-
/* @__PURE__ */
|
|
126
|
+
/* @__PURE__ */ P(k, {
|
|
128
127
|
fallback: null,
|
|
129
|
-
children: /* @__PURE__ */
|
|
128
|
+
children: /* @__PURE__ */ P(m, {
|
|
130
129
|
frontText: "",
|
|
131
130
|
endText: Ce ? "filtered by" : "",
|
|
132
131
|
hideIfUnfiltered: !0
|
|
133
132
|
})
|
|
134
133
|
}),
|
|
135
|
-
/* @__PURE__ */
|
|
136
|
-
customControls:
|
|
137
|
-
remount:
|
|
134
|
+
/* @__PURE__ */ P(T, {
|
|
135
|
+
customControls: V,
|
|
136
|
+
remount: H
|
|
138
137
|
}),
|
|
139
|
-
/* @__PURE__ */
|
|
138
|
+
/* @__PURE__ */ P(E, {
|
|
140
139
|
facetsToPlot: l,
|
|
141
|
-
customPlots:
|
|
140
|
+
customPlots: le,
|
|
142
141
|
initialPlotTypeByFacetColumnName: de
|
|
143
142
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ P(y, {
|
|
145
144
|
tableConfiguration: n,
|
|
146
145
|
hideDownload: v,
|
|
147
146
|
cardConfiguration: a,
|
|
148
|
-
initialLimit:
|
|
147
|
+
initialLimit: ue
|
|
149
148
|
}),
|
|
150
|
-
me && /* @__PURE__ */
|
|
149
|
+
me && /* @__PURE__ */ P(_, {
|
|
151
150
|
getLastQueryRequest: W?.getCurrentQueryRequest,
|
|
152
151
|
onClose: () => he(!1)
|
|
153
152
|
}),
|
|
154
|
-
/* @__PURE__ */
|
|
153
|
+
/* @__PURE__ */ P(o, {
|
|
155
154
|
open: ge,
|
|
156
155
|
title: "Hide Query Builder?",
|
|
157
156
|
content: "Hiding the Query Builder will clear the conditions you've built. This can't be undone.",
|
|
@@ -169,8 +168,8 @@ function L(t) {
|
|
|
169
168
|
});
|
|
170
169
|
} });
|
|
171
170
|
}
|
|
172
|
-
function
|
|
173
|
-
let { sql: i, tableConfiguration: o, isInfinite: s = !o, limit: c = 25, showLastUpdatedOn: u, unitDescription: f, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: g, enabledExternalAnalysisPlatforms: _ } = e, { entityId: y, versionNumber: b } = r(e.query?.sql ?? i ?? ""), x =
|
|
171
|
+
function z(e) {
|
|
172
|
+
let { sql: i, tableConfiguration: o, isInfinite: s = !o, limit: c = 25, showLastUpdatedOn: u, unitDescription: f, additionalFiltersSessionStorageKey: m, helpConfiguration: h, customPlots: g, enabledExternalAnalysisPlatforms: _ } = e, { entityId: y, versionNumber: b } = r(e.query?.sql ?? i ?? ""), x = M(() => e.query ? e.query : e.initQueryJson ? JSON.parse(e.initQueryJson) : {
|
|
174
173
|
sql: i,
|
|
175
174
|
additionalFilters: n(e.searchParams, e.sqlOperator, m),
|
|
176
175
|
limit: c,
|
|
@@ -183,7 +182,7 @@ function R(e) {
|
|
|
183
182
|
m,
|
|
184
183
|
i,
|
|
185
184
|
c
|
|
186
|
-
]), [S, C] =
|
|
185
|
+
]), [S, C] = N(1), w = () => {
|
|
187
186
|
C(S + 1);
|
|
188
187
|
}, { data: T } = a(y, b), E = {
|
|
189
188
|
entityId: y ?? "",
|
|
@@ -196,9 +195,9 @@ function R(e) {
|
|
|
196
195
|
initQueryRequest: E,
|
|
197
196
|
key: O,
|
|
198
197
|
isInfinite: s
|
|
199
|
-
}, /* @__PURE__ */
|
|
200
|
-
fallback: /* @__PURE__ */
|
|
201
|
-
children: /* @__PURE__ */
|
|
198
|
+
}, /* @__PURE__ */ P(k, {
|
|
199
|
+
fallback: /* @__PURE__ */ P(v, {}),
|
|
200
|
+
children: /* @__PURE__ */ P(d, {
|
|
202
201
|
unitDescription: f,
|
|
203
202
|
rgbIndex: e.rgbIndex,
|
|
204
203
|
columnAliases: e.columnAliases,
|
|
@@ -216,7 +215,7 @@ function R(e) {
|
|
|
216
215
|
noContentPlaceholderType: l.INTERACTIVE,
|
|
217
216
|
hasCustomPlots: Array.isArray(g) && g.length > 0,
|
|
218
217
|
enabledExternalAnalysisPlatforms: _,
|
|
219
|
-
children: /* @__PURE__ */
|
|
218
|
+
children: /* @__PURE__ */ P(R, {
|
|
220
219
|
...e,
|
|
221
220
|
isFullTextSearchEnabled: D,
|
|
222
221
|
remount: w
|
|
@@ -225,6 +224,6 @@ function R(e) {
|
|
|
225
224
|
}));
|
|
226
225
|
}
|
|
227
226
|
//#endregion
|
|
228
|
-
export {
|
|
227
|
+
export { L as HAS_SELECTED_ROWS_CSS, I as QUERY_FILTERS_COLLAPSED_CSS, F as QUERY_FILTERS_EXPANDED_CSS, R as QueryWrapperPlotNavContents, z as default };
|
|
229
228
|
|
|
230
229
|
//# sourceMappingURL=QueryWrapperPlotNav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { Suspense, useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport { QueryBuilderControls } from '../QueryBuilder/QueryBuilderControls'\nimport {\n defaultQBGroup,\n hasCompleteCondition,\n} from '../QueryBuilder/queryBuilderOperations'\nimport {\n qbNodeToApiFilter,\n selectedFacetsToQBGroup,\n} from '../QueryBuilder/queryBuilderTranslation'\nimport { QBGroup } from '../QueryBuilder/QueryBuilderTypes'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n initialLimit?: number\n hideTopLevelControls?: boolean\n /**\n * When true, shows a `Show / Hide Query Builder` toggle in `TopLevelControls`.\n * The QB and the facet nav are mutually exclusive — turning the QB on hides\n * the facet nav entirely.\n */\n showQueryBuilderControl?: boolean\n /**\n * When true, the QB is shown by default. When `showQueryBuilderControl` is\n * also true, the user can toggle it back off from `TopLevelControls`. When\n * `showQueryBuilderControl` is false the QB is permanently displayed with\n * no toggle button.\n */\n defaultShowQueryBuilder?: boolean\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n | 'lockTextMatchesQueryFilterPill'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\nexport type QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideAddToDownloadListMenuItem'\n | 'hideProgrammaticOptionsMenuItem'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotTypeByFacetColumnName'\n | 'hideTopLevelControls'\n | 'showQueryBuilderControl'\n | 'defaultShowQueryBuilder'\n> & {\n isFullTextSearchEnabled: boolean\n remount?: () => void\n}\n\nexport function QueryWrapperPlotNavContents(\n props: QueryWrapperPlotNavContentsProps,\n) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount = () => {},\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotTypeByFacetColumnName,\n hideTopLevelControls,\n showQueryBuilderControl = false,\n defaultShowQueryBuilder = false,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const [showQueryBuilder, setShowQueryBuilder] = useState(\n defaultShowQueryBuilder,\n )\n const [qbTree, setQbTree] = useState<QBGroup>(() => defaultQBGroup())\n const [isConfirmingHideQb, setIsConfirmingHideQb] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { executeQueryRequest } = queryContext\n const { isLoading: isLoadingQueryMetadata, data: queryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n // Facets ↔ QB transitions: switching FF → QB silently translates\n // selectedFacets into the QB tree and swaps them for a FilterGroup in\n // additionalFilters so results stay stable. Switching QB → FF prompts if\n // the QB has meaningful state (a completed condition or an applied filter),\n // since we can't losslessly reverse the translation.\n const enterQueryBuilder = () => {\n const selectedFacets = queryContext.currentQueryRequest.query.selectedFacets\n if (selectedFacets && selectedFacets.length > 0) {\n const translated = selectedFacetsToQBGroup(\n selectedFacets,\n queryMetadata?.columnModels,\n )\n const asFilter = qbNodeToApiFilter(translated)\n setQbTree(translated)\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n selectedFacets: undefined,\n additionalFilters: asFilter\n ? [\n ...(prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n ),\n asFilter,\n ]\n : prev.query.additionalFilters,\n },\n }))\n }\n setShowQueryBuilder(true)\n }\n\n const exitQueryBuilder = () => {\n setQbTree(defaultQBGroup())\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: prev.query.additionalFilters?.filter(\n f => !isFilterGroup(f),\n ),\n },\n }))\n setShowQueryBuilder(false)\n }\n\n const handleToggleQueryBuilder = () => {\n if (!showQueryBuilder) {\n enterQueryBuilder()\n return\n }\n const hasFilterGroupApplied =\n queryContext.currentQueryRequest.query.additionalFilters?.some(\n isFilterGroup,\n ) ?? false\n if (hasCompleteCondition(qbTree) || hasFilterGroupApplied) {\n setIsConfirmingHideQb(true)\n return\n }\n exitQueryBuilder()\n }\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter && !showQueryBuilder\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''} ${\n hideTopLevelControls ? 'isHidingTopLevelControls' : ''\n } ${showQueryBuilder ? 'isShowingQueryBuilder' : ''}`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n {!hideTopLevelControls && (\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideAddToDownloadListMenuItem={\n hideAddToDownloadListMenuItem\n }\n hideProgrammaticOptionsMenuItem={\n hideProgrammaticOptionsMenuItem\n }\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted || showQueryBuilder}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n showQueryBuilderControl={showQueryBuilderControl}\n showQueryBuilder={showQueryBuilder}\n onToggleQueryBuilder={handleToggleQueryBuilder}\n />\n </SynapseErrorBoundary>\n )}\n {showQueryBuilder ? (\n <Suspense fallback={null}>\n <div className=\"QueryBuilderControls\">\n <QueryBuilderControls\n tree={qbTree}\n onTreeChange={setQbTree}\n />\n </div>\n </Suspense>\n ) : (\n isFaceted && (\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n )\n )}\n {/* Isolated Suspense so that metadata loading does not hide the table */}\n <Suspense fallback={null}>\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n </Suspense>\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotTypeByFacetColumnName={\n initialPlotTypeByFacetColumnName\n }\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n <ConfirmationDialog\n open={isConfirmingHideQb}\n title=\"Hide Query Builder?\"\n content=\"Hiding the Query Builder will clear the conditions you've built. This can't be undone.\"\n confirmButtonProps={{\n children: 'Hide Query Builder',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n setIsConfirmingHideQb(false)\n exitQueryBuilder()\n }}\n onCancel={() => setIsConfirmingHideQb(false)}\n />\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </QueryWrapper>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperPlotNav.tsx"],"sourcesContent":["import { QueryOrDeprecatedSearchParams } from '@/components/CardContainerLogic/CardContainerLogic'\nimport AddToDownloadListConfirmationAlert from '@/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert'\nimport { useGetAddToDownloadListRequestForCurrentQuery } from '@/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery'\nimport { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { useGetEntity } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport {\n getAdditionalFilters,\n parseEntityIdAndVersionFromSqlStatement,\n} from '@/utils/functions'\nimport { isTable } from '@/utils/functions/EntityTypeUtils'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Box } from '@mui/material'\nimport { Query, QueryBundleRequest } from '@sage-bionetworks/synapse-types'\nimport { useQuery } from '@tanstack/react-query'\nimport { useAtomValue } from 'jotai'\nimport { lazy, Suspense, useMemo, useState } from 'react'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport { SynapseErrorBoundary } from '../error'\nimport FullTextSearch from '../FullTextSearch/FullTextSearch'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { QueryWrapperPlotNavCustomPlotParams } from '../Plot/SynapsePlot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryVisualizationContextConsumer,\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport { QueryWrapper, QueryWrapperProps } from '../QueryWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport { QueryWrapperErrorBoundary } from '../QueryWrapperErrorBoundary'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport SearchV2, { SearchV2Props } from '../SynapseTable/SearchV2'\nimport SqlEditor from '../SynapseTable/SqlEditor'\nimport TopLevelControls, {\n TopLevelControlsProps,\n CustomControl,\n} from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { CustomControls } from '../SynapseTable/CustomControls/CustomControls'\nimport TotalQueryResults from '../TotalQueryResults'\nimport PlotsContainer, {\n PlotsContainerProps,\n} from '../widgets/facet-nav/PlotsContainer'\nimport FacetFilterControls, {\n FacetFilterControlsProps,\n} from '../widgets/query-filter/FacetFilterControls'\nimport {\n defaultQBGroup,\n hasCompleteCondition,\n} from '../QueryBuilder/queryBuilderOperations'\nimport {\n qbNodeToApiFilter,\n selectedFacetsToQBGroup,\n} from '../QueryBuilder/queryBuilderTranslation'\nimport { QBGroup } from '../QueryBuilder/QueryBuilderTypes'\nimport { ConfirmationDialog } from '../ConfirmationDialog'\nimport { isFilterGroup } from '../../utils/types/IsType'\nimport { QueryWrapperSynapsePlotProps } from './QueryWrapperSynapsePlot'\nimport { RowSetView } from './RowSetView'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\n\n/**\n * The Query Builder is hidden on every tab that renders this nav until the\n * user opens it, and it pulls in a drag-and-drop library alongside its own\n * panel. Loading it on demand keeps all of that off the critical path for the\n * table and card views. It already renders inside a `Suspense` boundary, so\n * there is nothing else to coordinate.\n *\n * The QB tree helpers imported above stay eager — they are pure functions this\n * component calls from its own handlers, and none of them reach dnd-kit.\n */\nconst QueryBuilderControls = lazy(() =>\n import('../QueryBuilder/QueryBuilderControls').then(module => ({\n default: module.QueryBuilderControls,\n })),\n)\n\nexport const QUERY_FILTERS_EXPANDED_CSS: string = 'isShowingFacetFilters'\nexport const QUERY_FILTERS_COLLAPSED_CSS: string = 'isHidingFacetFilters'\n\nexport const HAS_SELECTED_ROWS_CSS: string = 'hasSelectedRows'\n\ntype QueryWrapperPlotNavOwnProps = {\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n /** Set to true when you want the query to be saved in the URL search parameters. If you are controlling the view (such as in PortalSearch), you'll want to set this to false */\n shouldDeepLink?: boolean\n /** If onQueryChange is set, the callback will be invoked when the Query changes */\n onQueryChange?: (newQueryJson: string) => void\n /** If onQueryResultBundleChange is set, the callback will be invoked when the QueryResultBundle changes */\n onQueryResultBundleChange?: (newQueryResultBundleJson: string) => void\n /** If initQueryJson is set, it will be the Query used in the initial QueryBundleRequest */\n initQueryJson?: string\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n searchConfiguration?: Omit<\n SearchV2Props,\n 'queryContext' | 'queryVisualizationContext'\n >\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n customPlots?: QueryWrapperSynapsePlotProps[]\n customControls?: CustomControl[]\n defaultColumn?: string\n defaultShowSearchBox?: boolean\n lockedColumn?: QueryWrapperProps['lockedColumn']\n initialLimit?: number\n hideTopLevelControls?: boolean\n /**\n * When true, shows a `Show / Hide Query Builder` toggle in `TopLevelControls`.\n * The QB and the facet nav are mutually exclusive — turning the QB on hides\n * the facet nav entirely.\n */\n showQueryBuilderControl?: boolean\n /**\n * When true, the QB is shown by default. When `showQueryBuilderControl` is\n * also true, the user can toggle it back off from `TopLevelControls`. When\n * `showQueryBuilderControl` is false the QB is permanently displayed with\n * no toggle button.\n */\n defaultShowQueryBuilder?: boolean\n} & Omit<TopLevelControlsProps, 'entityId'> &\n Pick<QueryWrapperPlotNavCustomPlotParams, 'onCustomPlotClick'> &\n Pick<\n QueryWrapperProps,\n | 'isRowSelectionVisible'\n | 'rowSelectionPrimaryKey'\n | 'isRowSelectionUIFloating'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n > &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'additionalFiltersSessionStorageKey'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideSearchBarControl'\n | 'hideVisualizationsControl'\n | 'enabledExternalAnalysisPlatforms'\n | 'lockTextMatchesQueryFilterPill'\n > &\n Pick<QueryContextType, 'combineRangeFacetConfig'>\n\nexport type QueryWrapperPlotNavProps = QueryOrDeprecatedSearchParams &\n PlotsContainerProps &\n QueryWrapperPlotNavOwnProps\n\nexport type QueryWrapperPlotNavContentsProps = Pick<\n QueryWrapperPlotNavProps,\n | 'tableConfiguration'\n | 'name'\n | 'cardConfiguration'\n | 'facetsToPlot'\n | 'availableFacets'\n | 'initialExpandedFacetControls'\n | 'hideDownload'\n | 'hideAddToDownloadListMenuItem'\n | 'hideProgrammaticOptionsMenuItem'\n | 'hideQueryCount'\n | 'hideSqlEditorControl'\n | 'hideVisualizationsControl'\n | 'searchConfiguration'\n | 'enabledExternalAnalysisPlatforms'\n | 'cavaticaConnectAccountURL'\n | 'customControls'\n | 'customPlots'\n | 'fileIdColumnName'\n | 'fileNameColumnName'\n | 'fileVersionColumnName'\n | 'initialLimit'\n | 'initialPlotTypeByFacetColumnName'\n | 'hideTopLevelControls'\n | 'showQueryBuilderControl'\n | 'defaultShowQueryBuilder'\n> & {\n isFullTextSearchEnabled: boolean\n remount?: () => void\n}\n\nexport function QueryWrapperPlotNavContents(\n props: QueryWrapperPlotNavContentsProps,\n) {\n const {\n tableConfiguration,\n name,\n cardConfiguration,\n facetsToPlot,\n availableFacets,\n initialExpandedFacetControls,\n hideDownload,\n hideAddToDownloadListMenuItem,\n hideProgrammaticOptionsMenuItem,\n hideQueryCount,\n hideSqlEditorControl,\n hideVisualizationsControl,\n searchConfiguration,\n cavaticaConnectAccountURL,\n customControls,\n remount = () => {},\n isFullTextSearchEnabled,\n customPlots,\n initialLimit,\n initialPlotTypeByFacetColumnName,\n hideTopLevelControls,\n showQueryBuilderControl = false,\n defaultShowQueryBuilder = false,\n } = props\n const queryContext = useQueryContext()\n const [showExportMetadata, setShowExportMetadata] = useState(false)\n const [showQueryBuilder, setShowQueryBuilder] = useState(\n defaultShowQueryBuilder,\n )\n const [qbTree, setQbTree] = useState<QBGroup>(() => defaultQBGroup())\n const [isConfirmingHideQb, setIsConfirmingHideQb] = useState(false)\n const { hasFacetedSelectColumn: isFaceted, queryMetadataQueryOptions } =\n queryContext\n const { executeQueryRequest } = queryContext\n const { isLoading: isLoadingQueryMetadata, data: queryMetadata } = useQuery(\n queryMetadataQueryOptions,\n )\n\n // Facets ↔ QB transitions: switching FF → QB silently translates\n // selectedFacets into the QB tree and swaps them for a FilterGroup in\n // additionalFilters so results stay stable. Switching QB → FF prompts if\n // the QB has meaningful state (a completed condition or an applied filter),\n // since we can't losslessly reverse the translation.\n const enterQueryBuilder = () => {\n const selectedFacets = queryContext.currentQueryRequest.query.selectedFacets\n if (selectedFacets && selectedFacets.length > 0) {\n const translated = selectedFacetsToQBGroup(\n selectedFacets,\n queryMetadata?.columnModels,\n )\n const asFilter = qbNodeToApiFilter(translated)\n setQbTree(translated)\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n selectedFacets: undefined,\n additionalFilters: asFilter\n ? [\n ...(prev.query.additionalFilters ?? []).filter(\n f => !isFilterGroup(f),\n ),\n asFilter,\n ]\n : prev.query.additionalFilters,\n },\n }))\n }\n setShowQueryBuilder(true)\n }\n\n const exitQueryBuilder = () => {\n setQbTree(defaultQBGroup())\n executeQueryRequest(prev => ({\n ...prev,\n query: {\n ...prev.query,\n additionalFilters: prev.query.additionalFilters?.filter(\n f => !isFilterGroup(f),\n ),\n },\n }))\n setShowQueryBuilder(false)\n }\n\n const handleToggleQueryBuilder = () => {\n if (!showQueryBuilder) {\n enterQueryBuilder()\n return\n }\n const hasFilterGroupApplied =\n queryContext.currentQueryRequest.query.additionalFilters?.some(\n isFilterGroup,\n ) ?? false\n if (hasCompleteCondition(qbTree) || hasFilterGroupApplied) {\n setIsConfirmingHideQb(true)\n return\n }\n exitQueryBuilder()\n }\n\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const currentQueryRequest = queryContext.currentQueryRequest\n\n const hasFacetsOrFilters =\n (currentQueryRequest?.query.selectedFacets !== undefined &&\n currentQueryRequest.query.selectedFacets.length > 0) ||\n (currentQueryRequest?.query.additionalFilters !== undefined &&\n currentQueryRequest?.query.additionalFilters.length > 0)\n\n const addToDownloadListRequest =\n useGetAddToDownloadListRequestForCurrentQuery()\n\n return (\n <QueryVisualizationContextConsumer>\n {queryVisualizationContext => {\n if (queryVisualizationContext === undefined) {\n throw new Error(\n 'No queryVisualizationContext found when using QueryVisualizationContextConsumer',\n )\n }\n\n return (\n <Box\n className={`QueryWrapperPlotNav ${\n queryVisualizationContext.showFacetFilter && !showQueryBuilder\n ? QUERY_FILTERS_EXPANDED_CSS\n : QUERY_FILTERS_COLLAPSED_CSS\n } ${isRowSelectionVisible ? HAS_SELECTED_ROWS_CSS : ''} ${\n hideTopLevelControls ? 'isHidingTopLevelControls' : ''\n } ${showQueryBuilder ? 'isShowingQueryBuilder' : ''}`}\n sx={{\n '*': {\n cursor: isLoadingQueryMetadata ? 'wait' : undefined,\n },\n }}\n >\n <QueryWrapperErrorBoundary>\n {isFullTextSearchEnabled ? (\n <FullTextSearch ftsConfig={searchConfiguration?.ftsConfig} />\n ) : (\n <SearchV2\n {...searchConfiguration}\n queryContext={queryContext}\n queryVisualizationContext={queryVisualizationContext}\n />\n )}\n <SqlEditor />\n {queryVisualizationContext.showDownloadConfirmation && (\n <AddToDownloadListConfirmationAlert\n addToDownloadListRequest={addToDownloadListRequest}\n onClose={() =>\n queryVisualizationContext.setShowDownloadConfirmation(false)\n }\n />\n )}\n {!hideTopLevelControls && (\n <SynapseErrorBoundary>\n <TopLevelControls\n showColumnSelection={tableConfiguration !== undefined}\n name={name}\n hideDownload={hideDownload}\n hideAddToDownloadListMenuItem={\n hideAddToDownloadListMenuItem\n }\n hideProgrammaticOptionsMenuItem={\n hideProgrammaticOptionsMenuItem\n }\n hideQueryCount={hideQueryCount}\n hideFacetFilterControl={!isFaceted || showQueryBuilder}\n hideVisualizationsControl={\n !isFaceted || hideVisualizationsControl\n }\n hideSqlEditorControl={hideSqlEditorControl}\n cavaticaConnectAccountURL={cavaticaConnectAccountURL}\n remount={remount}\n customControls={customControls}\n showQueryBuilderControl={showQueryBuilderControl}\n showQueryBuilder={showQueryBuilder}\n onToggleQueryBuilder={handleToggleQueryBuilder}\n />\n </SynapseErrorBoundary>\n )}\n {showQueryBuilder ? (\n <Suspense fallback={null}>\n <div className=\"QueryBuilderControls\">\n <QueryBuilderControls\n tree={qbTree}\n onTreeChange={setQbTree}\n />\n </div>\n </Suspense>\n ) : (\n isFaceted && (\n <FacetFilterControls\n availableFacets={availableFacets}\n initialExpandedFacetControls={initialExpandedFacetControls}\n />\n )\n )}\n {/* Isolated Suspense so that metadata loading does not hide the table */}\n <Suspense fallback={null}>\n <TotalQueryResults\n frontText={''}\n endText={hasFacetsOrFilters ? 'filtered by' : ''}\n hideIfUnfiltered={true}\n />\n </Suspense>\n <CustomControls\n customControls={customControls}\n remount={remount}\n />\n <PlotsContainer\n facetsToPlot={facetsToPlot}\n customPlots={customPlots}\n initialPlotTypeByFacetColumnName={\n initialPlotTypeByFacetColumnName\n }\n />\n <RowSetView\n tableConfiguration={tableConfiguration}\n hideDownload={hideDownload}\n cardConfiguration={cardConfiguration}\n initialLimit={initialLimit}\n />\n {showExportMetadata && (\n <ModalDownload\n getLastQueryRequest={queryContext?.getCurrentQueryRequest}\n onClose={() => setShowExportMetadata(false)}\n />\n )}\n <ConfirmationDialog\n open={isConfirmingHideQb}\n title=\"Hide Query Builder?\"\n content=\"Hiding the Query Builder will clear the conditions you've built. This can't be undone.\"\n confirmButtonProps={{\n children: 'Hide Query Builder',\n color: 'error',\n variant: 'contained',\n }}\n onConfirm={() => {\n setIsConfirmingHideQb(false)\n exitQueryBuilder()\n }}\n onCancel={() => setIsConfirmingHideQb(false)}\n />\n </QueryWrapperErrorBoundary>\n </Box>\n )\n }}\n </QueryVisualizationContextConsumer>\n )\n}\n\nexport default function QueryWrapperPlotNav(props: QueryWrapperPlotNavProps) {\n const {\n sql: deprecatedSql,\n tableConfiguration,\n isInfinite = !tableConfiguration,\n limit = DEFAULT_PAGE_SIZE,\n showLastUpdatedOn,\n unitDescription,\n additionalFiltersSessionStorageKey,\n helpConfiguration,\n customPlots,\n enabledExternalAnalysisPlatforms,\n } = props\n\n const sql = props.query?.sql ?? deprecatedSql ?? ''\n const { entityId, versionNumber } =\n parseEntityIdAndVersionFromSqlStatement(sql)\n\n const query: Query = useMemo(() => {\n if (props.query) {\n // use query if set\n return props.query\n } else if (props.initQueryJson) {\n // Otherwise use initQueryJson\n return JSON.parse(props.initQueryJson) as Query\n } else {\n // use the deprecated sql, searchParams, and sqlOperator\n const additionalFilters = getAdditionalFilters(\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n )\n return {\n sql: deprecatedSql!,\n additionalFilters,\n limit: limit,\n offset: 0,\n }\n }\n }, [\n props.query,\n props.initQueryJson,\n props.searchParams,\n props.sqlOperator,\n additionalFiltersSessionStorageKey,\n deprecatedSql,\n limit,\n ])\n\n const [componentKey, setComponentKey] = useState(1)\n const remount = () => {\n setComponentKey(componentKey + 1)\n }\n\n const { data: entity } = useGetEntity(entityId, versionNumber)\n const initQueryRequest: QueryBundleRequest = {\n entityId: entityId ?? '',\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS |\n SynapseConstants.BUNDLE_MASK_QUERY_COUNT |\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_MAX_ROWS_PER_PAGE |\n SynapseConstants.BUNDLE_MASK_QUERY_COLUMN_MODELS |\n SynapseConstants.BUNDLE_MASK_QUERY_FACETS |\n SynapseConstants.BUNDLE_MASK_SUM_FILES_SIZE_BYTES |\n SynapseConstants.BUNDLE_MASK_LAST_UPDATED_ON,\n query,\n }\n const isFullTextSearchEnabled =\n (entity && isTable(entity) && entity.isSearchEnabled) ?? false\n\n /**\n * Fully re-render the uncontrolled QueryWrapper component when the initial query changes. This eliminates a class of\n * bugs where our 'derived' state (the current query), which should be reset, is out of sync with props.\n *\n * See https://legacy.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html#recommendation-fully-uncontrolled-component-with-a-key\n */\n const queryWrapperKey = `${JSON.stringify(initQueryRequest)}-${componentKey}`\n\n return (\n <QueryWrapper\n {...props}\n initQueryRequest={initQueryRequest}\n key={queryWrapperKey}\n isInfinite={isInfinite}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n defaultShowSearchBar={\n (props.defaultShowSearchBox || isFullTextSearchEnabled) &&\n !props.hideSearchBarControl\n }\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n hideSearchBarControl={props.hideSearchBarControl}\n showLastUpdatedOn={showLastUpdatedOn}\n noContentPlaceholderType={NoContentPlaceholderType.INTERACTIVE}\n hasCustomPlots={Array.isArray(customPlots) && customPlots.length > 0}\n enabledExternalAnalysisPlatforms={enabledExternalAnalysisPlatforms}\n >\n <QueryWrapperPlotNavContents\n {...props}\n isFullTextSearchEnabled={isFullTextSearchEnabled}\n remount={remount}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </QueryWrapper>\n )\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ export type EntityPageTitleBarProps = {
|
|
|
3
3
|
entityId: string;
|
|
4
4
|
versionNumber?: number;
|
|
5
5
|
entityActionMenuProps?: EntityActionMenuProps;
|
|
6
|
-
onActMemberClickAddConditionsForUse: () => void;
|
|
7
6
|
};
|
|
8
7
|
/**
|
|
9
8
|
* The EntityPageTitleBar component is shown on every Entity page in Synapse, and shows an Entity's metadata and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPageTitleBar.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/title_bar/EntityPageTitleBar.tsx"],"names":[],"mappings":"AAMA,OAAyB,EACvB,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityPageTitleBar.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/title_bar/EntityPageTitleBar.tsx"],"names":[],"mappings":"AAMA,OAAyB,EACvB,qBAAqB,EACtB,MAAM,iCAAiC,CAAA;AAIxC,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC9C,CAAA;AAKD;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,2CAsHxE"}
|
|
@@ -6,21 +6,20 @@ import i from "../../../utils/ConditionalWrapper.js";
|
|
|
6
6
|
import a from "../../../favorites/FavoriteButton.js";
|
|
7
7
|
import o from "../action_menu/EntityActionMenu.js";
|
|
8
8
|
import { EntityTitleBarVersionInfo as s } from "./EntityTitleBarVersionInfo.js";
|
|
9
|
-
import c from "
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
9
|
+
import { CopyToClipboardString as c } from "../../../CopyToClipboardString/CopyToClipboardString.js";
|
|
10
|
+
import { Avatar as l, Box as u, Skeleton as d, Stack as f, Typography as p } from "@mui/material";
|
|
11
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
13
12
|
//#region src/components/entity/page/title_bar/EntityPageTitleBar.tsx
|
|
14
|
-
var
|
|
15
|
-
function
|
|
16
|
-
let { entityId:
|
|
17
|
-
return /* @__PURE__ */
|
|
13
|
+
var g = "#EAF0F5", _ = "#497097";
|
|
14
|
+
function v(v) {
|
|
15
|
+
let { entityId: y, versionNumber: b, entityActionMenuProps: x } = v, S = x?.actionConfiguration.SHOW_VERSION_HISTORY?.onClick, { data: C, isLoading: w } = t(y, b), T = C?.entity && e(C.entity) ? C.entity.repositoryName : C?.entity?.name;
|
|
16
|
+
return /* @__PURE__ */ m("div", { children: /* @__PURE__ */ m(u, {
|
|
18
17
|
sx: {
|
|
19
18
|
padding: "10px 16px",
|
|
20
|
-
backgroundColor:
|
|
19
|
+
backgroundColor: g,
|
|
21
20
|
borderRadius: "5px"
|
|
22
21
|
},
|
|
23
|
-
children: /* @__PURE__ */
|
|
22
|
+
children: /* @__PURE__ */ h(f, {
|
|
24
23
|
sx: {
|
|
25
24
|
flexDirection: {
|
|
26
25
|
xs: "column",
|
|
@@ -28,19 +27,19 @@ function y(y) {
|
|
|
28
27
|
},
|
|
29
28
|
alignItems: "center"
|
|
30
29
|
},
|
|
31
|
-
children: [/* @__PURE__ */
|
|
30
|
+
children: [/* @__PURE__ */ h(f, {
|
|
32
31
|
direction: "row",
|
|
33
32
|
sx: {
|
|
34
33
|
alignItems: "center",
|
|
35
34
|
flexGrow: 1
|
|
36
35
|
},
|
|
37
|
-
children: [/* @__PURE__ */
|
|
38
|
-
condition:
|
|
39
|
-
wrapper:
|
|
36
|
+
children: [/* @__PURE__ */ m(i, {
|
|
37
|
+
condition: w,
|
|
38
|
+
wrapper: d,
|
|
40
39
|
wrapperProps: { variant: "circular" },
|
|
41
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ m(l, {
|
|
42
41
|
sx: {
|
|
43
|
-
bgcolor:
|
|
42
|
+
bgcolor: _,
|
|
44
43
|
height: 68,
|
|
45
44
|
width: 68,
|
|
46
45
|
borderRadius: "3px",
|
|
@@ -50,46 +49,46 @@ function y(y) {
|
|
|
50
49
|
}
|
|
51
50
|
},
|
|
52
51
|
variant: "square",
|
|
53
|
-
children:
|
|
54
|
-
icon:
|
|
52
|
+
children: C?.entityType && /* @__PURE__ */ m(n, {
|
|
53
|
+
icon: C?.entityType ? r[C.entityType] : "file",
|
|
55
54
|
wrap: !1
|
|
56
55
|
})
|
|
57
56
|
})
|
|
58
|
-
}), /* @__PURE__ */
|
|
57
|
+
}), /* @__PURE__ */ h(u, {
|
|
59
58
|
sx: {
|
|
60
59
|
marginLeft: "10px",
|
|
61
60
|
flexGrow: 1
|
|
62
61
|
},
|
|
63
62
|
children: [
|
|
64
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ h(f, {
|
|
65
64
|
direction: "row",
|
|
66
65
|
sx: {
|
|
67
66
|
alignItems: "center",
|
|
68
67
|
gap: "3px"
|
|
69
68
|
},
|
|
70
|
-
children: [/* @__PURE__ */
|
|
71
|
-
condition:
|
|
72
|
-
wrapper:
|
|
73
|
-
children: /* @__PURE__ */
|
|
69
|
+
children: [/* @__PURE__ */ m(i, {
|
|
70
|
+
condition: w,
|
|
71
|
+
wrapper: d,
|
|
72
|
+
children: /* @__PURE__ */ m(p, {
|
|
74
73
|
variant: "headline2",
|
|
75
74
|
sx: {
|
|
76
75
|
color: "greyV2.950",
|
|
77
76
|
fontWeight: 540
|
|
78
77
|
},
|
|
79
|
-
children:
|
|
78
|
+
children: T ?? "Name not set"
|
|
80
79
|
})
|
|
81
|
-
}),
|
|
82
|
-
entityId:
|
|
80
|
+
}), C?.entity?.id && /* @__PURE__ */ m(a, {
|
|
81
|
+
entityId: C.entity.id,
|
|
83
82
|
iconColor: "greyV2.400"
|
|
84
83
|
})]
|
|
85
84
|
}),
|
|
86
|
-
/* @__PURE__ */
|
|
87
|
-
entityId:
|
|
88
|
-
versionNumber:
|
|
89
|
-
toggleShowVersionHistory:
|
|
85
|
+
/* @__PURE__ */ m(s, {
|
|
86
|
+
entityId: y,
|
|
87
|
+
versionNumber: b,
|
|
88
|
+
toggleShowVersionHistory: S
|
|
90
89
|
}),
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
-
value:
|
|
90
|
+
/* @__PURE__ */ m(c, {
|
|
91
|
+
value: y,
|
|
93
92
|
icon: "rounded",
|
|
94
93
|
sx: { "& .MuiTypography-root": {
|
|
95
94
|
color: "greyV2.800",
|
|
@@ -99,11 +98,11 @@ function y(y) {
|
|
|
99
98
|
})
|
|
100
99
|
]
|
|
101
100
|
})]
|
|
102
|
-
}),
|
|
101
|
+
}), x && /* @__PURE__ */ m(o, { ...x })]
|
|
103
102
|
})
|
|
104
|
-
})
|
|
103
|
+
}) });
|
|
105
104
|
}
|
|
106
105
|
//#endregion
|
|
107
|
-
export {
|
|
106
|
+
export { v as default };
|
|
108
107
|
|
|
109
108
|
//# sourceMappingURL=EntityPageTitleBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityPageTitleBar.js","names":[],"sources":["../../../../../src/components/entity/page/title_bar/EntityPageTitleBar.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport { useGetEntityBundle } from '@/synapse-queries'\nimport { isDockerRepository } from '@/utils/types/IsType'\nimport { Avatar, Box, Skeleton, Stack, Typography } from '@mui/material'\nimport FavoriteButton from '../../../favorites/FavoriteButton'\nimport IconSvg, { type2SvgIconName } from '../../../IconSvg/IconSvg'\nimport EntityActionMenu, {\n EntityActionMenuProps,\n} from '../action_menu/EntityActionMenu'\nimport { EntityTitleBarVersionInfo } from './EntityTitleBarVersionInfo'\nimport
|
|
1
|
+
{"version":3,"file":"EntityPageTitleBar.js","names":[],"sources":["../../../../../src/components/entity/page/title_bar/EntityPageTitleBar.tsx"],"sourcesContent":["import ConditionalWrapper from '@/components/utils/ConditionalWrapper'\nimport { useGetEntityBundle } from '@/synapse-queries'\nimport { isDockerRepository } from '@/utils/types/IsType'\nimport { Avatar, Box, Skeleton, Stack, Typography } from '@mui/material'\nimport FavoriteButton from '../../../favorites/FavoriteButton'\nimport IconSvg, { type2SvgIconName } from '../../../IconSvg/IconSvg'\nimport EntityActionMenu, {\n EntityActionMenuProps,\n} from '../action_menu/EntityActionMenu'\nimport { EntityTitleBarVersionInfo } from './EntityTitleBarVersionInfo'\nimport CopyToClipboardString from '@/components/CopyToClipboardString/CopyToClipboardString'\n\nexport type EntityPageTitleBarProps = {\n entityId: string\n versionNumber?: number\n /* Props that will be passed through to an EntityActionMenu component */\n entityActionMenuProps?: EntityActionMenuProps\n}\n\nconst TITLE_BAR_BACKGROUND_COLOR = '#EAF0F5'\nconst AVATAR_BACKGROUND_COLOR = '#497097'\n\n/**\n * The EntityPageTitleBar component is shown on every Entity page in Synapse, and shows an Entity's metadata and\n * provides controls to view and manipulate the Entity.\n */\nexport default function EntityPageTitleBar(props: EntityPageTitleBarProps) {\n const { entityId, versionNumber, entityActionMenuProps } = props\n\n const toggleShowVersionHistory =\n entityActionMenuProps?.actionConfiguration['SHOW_VERSION_HISTORY']?.onClick\n\n const { data: bundle, isLoading } = useGetEntityBundle(\n entityId,\n versionNumber,\n )\n\n const name =\n bundle?.entity && isDockerRepository(bundle.entity)\n ? bundle.entity.repositoryName\n : bundle?.entity?.name\n\n return (\n <div>\n <Box\n sx={{\n padding: '10px 16px',\n backgroundColor: TITLE_BAR_BACKGROUND_COLOR,\n borderRadius: '5px',\n }}\n >\n <Stack\n sx={{\n flexDirection: { xs: 'column', md: 'row' },\n alignItems: 'center',\n }}\n >\n <Stack\n direction={'row'}\n sx={{\n alignItems: 'center',\n flexGrow: 1,\n }}\n >\n <ConditionalWrapper\n condition={isLoading}\n wrapper={Skeleton}\n wrapperProps={{\n variant: 'circular',\n }}\n >\n <Avatar\n sx={{\n bgcolor: AVATAR_BACKGROUND_COLOR,\n height: 68,\n width: 68,\n borderRadius: '3px',\n svg: {\n height: '36px',\n width: '36px',\n },\n }}\n variant={'square'}\n >\n {bundle?.entityType && (\n <IconSvg\n icon={\n bundle?.entityType\n ? type2SvgIconName[bundle.entityType]\n : 'file'\n }\n wrap={false}\n />\n )}\n </Avatar>\n </ConditionalWrapper>\n <Box sx={{ marginLeft: '10px', flexGrow: 1 }}>\n <Stack\n direction={'row'}\n sx={{\n alignItems: 'center',\n gap: '3px',\n }}\n >\n <ConditionalWrapper condition={isLoading} wrapper={Skeleton}>\n <Typography\n variant={'headline2'}\n sx={{ color: 'greyV2.950', fontWeight: 540 }}\n >\n {name ?? 'Name not set'}\n </Typography>\n </ConditionalWrapper>\n {bundle?.entity?.id && (\n <FavoriteButton\n entityId={bundle.entity.id}\n iconColor={'greyV2.400'}\n />\n )}\n </Stack>\n <EntityTitleBarVersionInfo\n entityId={entityId}\n versionNumber={versionNumber}\n toggleShowVersionHistory={toggleShowVersionHistory}\n />\n <CopyToClipboardString\n value={entityId}\n icon=\"rounded\"\n sx={{\n '& .MuiTypography-root': {\n color: 'greyV2.800',\n fontWeight: 440,\n lineHeight: '20px',\n },\n }}\n />\n </Box>\n </Stack>\n {entityActionMenuProps && (\n <EntityActionMenu {...entityActionMenuProps} />\n )}\n </Stack>\n </Box>\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,IAAM,IAA6B,WAC7B,IAA0B;AAMhC,SAAwB,EAAmB,GAAgC;CACzE,IAAM,EAAE,aAAU,kBAAe,6BAA0B,GAErD,IACJ,GAAuB,oBAAoB,sBAAyB,SAEhE,EAAE,MAAM,GAAQ,iBAAc,EAClC,GACA,CACF,GAEM,IACJ,GAAQ,UAAU,EAAmB,EAAO,MAAM,IAC9C,EAAO,OAAO,iBACd,GAAQ,QAAQ;CAEtB,OACE,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;EACE,IAAI;GACF,SAAS;GACT,iBAAiB;GACjB,cAAc;EAChB;YAEA,kBAAC,GAAD;GACE,IAAI;IACF,eAAe;KAAE,IAAI;KAAU,IAAI;IAAM;IACzC,YAAY;GACd;aAJF,CAME,kBAAC,GAAD;IACE,WAAW;IACX,IAAI;KACF,YAAY;KACZ,UAAU;IACZ;cALF,CAOE,kBAAC,GAAD;KACE,WAAW;KACX,SAAS;KACT,cAAc,EACZ,SAAS,WACX;eAEA,kBAAC,GAAD;MACE,IAAI;OACF,SAAS;OACT,QAAQ;OACR,OAAO;OACP,cAAc;OACd,KAAK;QACH,QAAQ;QACR,OAAO;OACT;MACF;MACA,SAAS;gBAER,GAAQ,cACP,kBAAC,GAAD;OACE,MACE,GAAQ,aACJ,EAAiB,EAAO,cACxB;OAEN,MAAM;MACP,CAAA;KAEG,CAAA;IACU,CAAA,GACpB,kBAAC,GAAD;KAAK,IAAI;MAAE,YAAY;MAAQ,UAAU;KAAE;eAA3C;MACE,kBAAC,GAAD;OACE,WAAW;OACX,IAAI;QACF,YAAY;QACZ,KAAK;OACP;iBALF,CAOE,kBAAC,GAAD;QAAoB,WAAW;QAAW,SAAS;kBACjD,kBAAC,GAAD;SACE,SAAS;SACT,IAAI;UAAE,OAAO;UAAc,YAAY;SAAI;mBAE1C,KAAQ;QACC,CAAA;OACM,CAAA,GACnB,GAAQ,QAAQ,MACf,kBAAC,GAAD;QACE,UAAU,EAAO,OAAO;QACxB,WAAW;OACZ,CAAA,CAEE;;MACP,kBAAC,GAAD;OACY;OACK;OACW;MAC3B,CAAA;MACD,kBAAC,GAAD;OACE,OAAO;OACP,MAAK;OACL,IAAI,EACF,yBAAyB;QACvB,OAAO;QACP,YAAY;QACZ,YAAY;OACd,EACF;MACD,CAAA;KACE;MACA;OACN,KACC,kBAAC,GAAD,EAAkB,GAAI,EAAwB,CAAA,CAE3C;;CACJ,CAAA,EACF,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftRightPanel.d.ts","sourceRoot":"","sources":["../../../src/components/styled/LeftRightPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAS,UAAU,EAAU,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,QAAQ,CAWxD,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"LeftRightPanel.d.ts","sourceRoot":"","sources":["../../../src/components/styled/LeftRightPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAS,UAAU,EAAU,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,QAAQ,CAWxD,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAAC,UAAU,CAiC1D,CAAA;AAEH,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,SAAS,CAAA;IACtB,YAAY,EAAE,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EAAE,mBAAmB,2CASrB"}
|
|
@@ -9,12 +9,14 @@ var a = n(e, { label: "StyledOuterContainer" })(({ theme: e }) => ({
|
|
|
9
9
|
backgroundSize: "cover",
|
|
10
10
|
[e.breakpoints.down("md")]: { padding: 0 }
|
|
11
11
|
})), o = n(t, { label: "StyledInnerContainer" })(({ theme: e }) => ({
|
|
12
|
+
position: "relative",
|
|
12
13
|
width: "900px",
|
|
13
14
|
minHeight: "675px",
|
|
14
15
|
margin: "0 auto",
|
|
15
16
|
display: "flex",
|
|
16
17
|
overflow: "hidden",
|
|
17
18
|
[e.breakpoints.down("md")]: {
|
|
19
|
+
boxShadow: "none",
|
|
18
20
|
flexDirection: "column",
|
|
19
21
|
width: "100%",
|
|
20
22
|
minHeight: 0,
|
|
@@ -27,12 +29,27 @@ var a = n(e, { label: "StyledOuterContainer" })(({ theme: e }) => ({
|
|
|
27
29
|
[e.breakpoints.down("md")]: { width: "100%" }
|
|
28
30
|
},
|
|
29
31
|
"& > div:nth-of-type(1)": { backgroundColor: e.palette.background.paper },
|
|
30
|
-
"& > div:nth-of-type(2)": {
|
|
32
|
+
"& > div:nth-of-type(2)": {
|
|
33
|
+
backgroundColor: e.palette.grey[200],
|
|
34
|
+
[e.breakpoints.down("md")]: { backgroundColor: e.palette.background.paper }
|
|
35
|
+
}
|
|
31
36
|
}));
|
|
32
37
|
function s({ leftContent: t, rightContent: n, className: s }) {
|
|
33
38
|
return /* @__PURE__ */ r(a, {
|
|
34
39
|
className: s,
|
|
35
|
-
children: /* @__PURE__ */ i(o, { children: [/* @__PURE__ */ r(e, {
|
|
40
|
+
children: /* @__PURE__ */ i(o, { children: [/* @__PURE__ */ r(e, {
|
|
41
|
+
sx: { order: {
|
|
42
|
+
xs: 2,
|
|
43
|
+
md: 1
|
|
44
|
+
} },
|
|
45
|
+
children: t
|
|
46
|
+
}), /* @__PURE__ */ r(e, {
|
|
47
|
+
sx: { order: {
|
|
48
|
+
xs: 1,
|
|
49
|
+
md: 2
|
|
50
|
+
} },
|
|
51
|
+
children: n
|
|
52
|
+
})] })
|
|
36
53
|
});
|
|
37
54
|
}
|
|
38
55
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftRightPanel.js","names":[],"sources":["../../../src/components/styled/LeftRightPanel.tsx"],"sourcesContent":["import { Box, BoxProps, Paper, PaperProps, styled } from '@mui/material'\nimport { StyledComponent } from '@emotion/styled'\nimport { ReactNode } from 'react'\n\nexport const StyledOuterContainer: StyledComponent<BoxProps> = styled(Box, {\n label: 'StyledOuterContainer',\n})(({ theme }) => ({\n minHeight: '100vh',\n paddingTop: '50px',\n paddingBottom: '50px',\n background: theme.styledBackground,\n backgroundSize: 'cover',\n [theme.breakpoints.down('md')]: {\n padding: 0,\n },\n}))\n\n/**\n * Canonical 900px two-column card that stacks into a single column on\n * mobile. Layout-only: consumers supply their own panel padding.\n * `apps/SageAccountWeb` extends this (adding baked-in panel padding) rather\n * than redefining it -- see that app's `StyledComponents.ts` (SWC-7966).\n *\n * Below `md` the card grows with its content and the page scrolls normally.\n */\nexport const StyledInnerContainer: StyledComponent<PaperProps> = styled(Paper, {\n label: 'StyledInnerContainer',\n})(({ theme }) => ({\n width: '900px',\n minHeight: '675px',\n margin: '0 auto',\n display: 'flex',\n overflow: 'hidden',\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n width: '100%',\n minHeight: 0,\n height: 'auto',\n overflow: 'visible',\n },\n '& > div:nth-of-type(1), & > div:nth-of-type(2)': {\n borderRadius: 'inherit',\n width: '450px',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n },\n '& > div:nth-of-type(1)': {\n backgroundColor: theme.palette.background.paper,\n },\n '& > div:nth-of-type(2)': {\n backgroundColor: theme.palette.grey[200],\n },\n}))\n\ntype LeftRightPanelProps = {\n leftContent: ReactNode\n rightContent: ReactNode\n className?: string\n}\n\nexport function LeftRightPanel({\n leftContent,\n rightContent,\n className,\n}: LeftRightPanelProps) {\n return (\n <StyledOuterContainer className={className}>\n <StyledInnerContainer>\n <Box>{leftContent}</Box>\n <Box>{rightContent}</Box>\n </StyledInnerContainer>\n </StyledOuterContainer>\n )\n}\n"],"mappings":";;;AAIA,IAAa,IAAkD,EAAO,GAAK,EACzE,OAAO,uBACT,CAAC,GAAG,EAAE,gBAAa;CACjB,WAAW;CACX,YAAY;CACZ,eAAe;CACf,YAAY,EAAM;CAClB,gBAAgB;EACf,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,SAAS,EACX;AACF,EAAE,GAUW,IAAoD,EAAO,GAAO,EAC7E,OAAO,uBACT,CAAC,GAAG,EAAE,gBAAa;CACjB,OAAO;CACP,WAAW;CACX,QAAQ;CACR,SAAS;CACT,UAAU;EACT,EAAM,YAAY,KAAK,IAAI,IAAI;EAC9B,eAAe;EACf,OAAO;EACP,WAAW;EACX,QAAQ;EACR,UAAU;CACZ;CACA,kDAAkD;EAChD,cAAc;EACd,OAAO;GACN,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,OAAO,OACT;CACF;CACA,0BAA0B,EACxB,iBAAiB,EAAM,QAAQ,WAAW,MAC5C;CACA,0BAA0B
|
|
1
|
+
{"version":3,"file":"LeftRightPanel.js","names":[],"sources":["../../../src/components/styled/LeftRightPanel.tsx"],"sourcesContent":["import { Box, BoxProps, Paper, PaperProps, styled } from '@mui/material'\nimport { StyledComponent } from '@emotion/styled'\nimport { ReactNode } from 'react'\n\nexport const StyledOuterContainer: StyledComponent<BoxProps> = styled(Box, {\n label: 'StyledOuterContainer',\n})(({ theme }) => ({\n minHeight: '100vh',\n paddingTop: '50px',\n paddingBottom: '50px',\n background: theme.styledBackground,\n backgroundSize: 'cover',\n [theme.breakpoints.down('md')]: {\n padding: 0,\n },\n}))\n\n/**\n * Canonical 900px two-column card that stacks into a single column on\n * mobile. Layout-only: consumers supply their own panel padding.\n * `apps/SageAccountWeb` extends this (adding baked-in panel padding) rather\n * than redefining it -- see that app's `StyledComponents.ts` (SWC-7966).\n *\n * Below `md` the card grows with its content and the page scrolls normally.\n */\nexport const StyledInnerContainer: StyledComponent<PaperProps> = styled(Paper, {\n label: 'StyledInnerContainer',\n})(({ theme }) => ({\n position: 'relative',\n width: '900px',\n minHeight: '675px',\n margin: '0 auto',\n display: 'flex',\n overflow: 'hidden',\n [theme.breakpoints.down('md')]: {\n boxShadow: 'none',\n flexDirection: 'column',\n width: '100%',\n minHeight: 0,\n height: 'auto',\n overflow: 'visible',\n },\n '& > div:nth-of-type(1), & > div:nth-of-type(2)': {\n borderRadius: 'inherit',\n width: '450px',\n [theme.breakpoints.down('md')]: {\n width: '100%',\n },\n },\n '& > div:nth-of-type(1)': {\n backgroundColor: theme.palette.background.paper,\n },\n '& > div:nth-of-type(2)': {\n backgroundColor: theme.palette.grey[200],\n [theme.breakpoints.down('md')]: {\n backgroundColor: theme.palette.background.paper,\n },\n },\n}))\n\ntype LeftRightPanelProps = {\n leftContent: ReactNode\n rightContent: ReactNode\n className?: string\n}\n\nexport function LeftRightPanel({\n leftContent,\n rightContent,\n className,\n}: LeftRightPanelProps) {\n return (\n <StyledOuterContainer className={className}>\n <StyledInnerContainer>\n <Box sx={{ order: { xs: 2, md: 1 } }}>{leftContent}</Box>\n <Box sx={{ order: { xs: 1, md: 2 } }}>{rightContent}</Box>\n </StyledInnerContainer>\n </StyledOuterContainer>\n )\n}\n"],"mappings":";;;AAIA,IAAa,IAAkD,EAAO,GAAK,EACzE,OAAO,uBACT,CAAC,GAAG,EAAE,gBAAa;CACjB,WAAW;CACX,YAAY;CACZ,eAAe;CACf,YAAY,EAAM;CAClB,gBAAgB;EACf,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,SAAS,EACX;AACF,EAAE,GAUW,IAAoD,EAAO,GAAO,EAC7E,OAAO,uBACT,CAAC,GAAG,EAAE,gBAAa;CACjB,UAAU;CACV,OAAO;CACP,WAAW;CACX,QAAQ;CACR,SAAS;CACT,UAAU;EACT,EAAM,YAAY,KAAK,IAAI,IAAI;EAC9B,WAAW;EACX,eAAe;EACf,OAAO;EACP,WAAW;EACX,QAAQ;EACR,UAAU;CACZ;CACA,kDAAkD;EAChD,cAAc;EACd,OAAO;GACN,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,OAAO,OACT;CACF;CACA,0BAA0B,EACxB,iBAAiB,EAAM,QAAQ,WAAW,MAC5C;CACA,0BAA0B;EACxB,iBAAiB,EAAM,QAAQ,KAAK;GACnC,EAAM,YAAY,KAAK,IAAI,IAAI,EAC9B,iBAAiB,EAAM,QAAQ,WAAW,MAC5C;CACF;AACF,EAAE;AAQF,SAAgB,EAAe,EAC7B,gBACA,iBACA,gBACsB;CACtB,OACE,kBAAC,GAAD;EAAiC;YAC/B,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO;IAAE,IAAI;IAAG,IAAI;GAAE,EAAE;aAAI;EAAiB,CAAA,GACxD,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO;IAAE,IAAI;IAAG,IAAI;GAAE,EAAE;aAAI;EAAkB,CAAA,CACrC,EAAA,CAAA;CACF,CAAA;AAE1B"}
|
|
@@ -8,8 +8,8 @@ export declare const mockGenomicsTemplate: FormTemplate;
|
|
|
8
8
|
* Renders the Data Access schema as a 2-step form:
|
|
9
9
|
* Project Details → Compliance.
|
|
10
10
|
*
|
|
11
|
-
* Demonstrates a file-upload field with a downloadable template, and a
|
|
12
|
-
*
|
|
11
|
+
* Demonstrates a file-upload field with a downloadable template, and a Renewal-only field
|
|
12
|
+
* (`irbApprovalNumber`, gated in `mockClinicalSchema` via `x-synapse-submissionContext`).
|
|
13
13
|
*/
|
|
14
14
|
export declare const mockClinicalTemplate: FormTemplate;
|
|
15
15
|
export declare const mockFormTemplates: FormTemplate[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockFormTemplates.d.ts","sourceRoot":"","sources":["../../../src/mocks/accessRequirement/mockFormTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mockFormTemplates.d.ts","sourceRoot":"","sources":["../../../src/mocks/accessRequirement/mockFormTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAI/D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAmClC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAsClC,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,EAG3C,CAAA"}
|