@gen3/frontend 0.10.98 → 0.11.0
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/cjs/index.js +539 -664
- package/dist/cjs/index.js.map +1 -1
- package/dist/dts/api/staticNotebook/index.d.ts +4 -0
- package/dist/dts/api/staticNotebook/index.d.ts.map +1 -0
- package/dist/dts/api/staticNotebook/index.js +118 -0
- package/dist/dts/api/staticNotebook/index.js.map +1 -0
- package/dist/dts/api/staticNotebooks/index.d.ts +4 -0
- package/dist/dts/api/staticNotebooks/index.d.ts.map +1 -0
- package/dist/dts/api/staticNotebooks/index.js +118 -0
- package/dist/dts/api/staticNotebooks/index.js.map +1 -0
- package/dist/dts/components/Protected/ProtectedContent.d.ts.map +1 -1
- package/dist/dts/components/Protected/ProtectedContent.js +9 -4
- package/dist/dts/components/Protected/ProtectedContent.js.map +1 -1
- package/dist/dts/components/charts/CollapsableCharts.d.ts +3 -0
- package/dist/dts/components/charts/CollapsableCharts.d.ts.map +1 -1
- package/dist/dts/components/charts/CollapsableCharts.js +2 -2
- package/dist/dts/components/charts/CollapsableCharts.js.map +1 -1
- package/dist/dts/components/charts/index.d.ts +2 -1
- package/dist/dts/components/charts/index.d.ts.map +1 -1
- package/dist/dts/components/charts/index.js +2 -1
- package/dist/dts/components/charts/index.js.map +1 -1
- package/dist/dts/components/charts/types.d.ts +9 -0
- package/dist/dts/components/charts/types.d.ts.map +1 -1
- package/dist/dts/components/facets/FacetSelector.d.ts.map +1 -1
- package/dist/dts/components/facets/FacetSelector.js +7 -4
- package/dist/dts/components/facets/FacetSelector.js.map +1 -1
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.d.ts +11 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.d.ts.map +1 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.js +20 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.js.map +1 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.unit.test.d.ts +3 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.unit.test.d.ts.map +1 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.unit.test.js +78 -0
- package/dist/dts/features/Analysis/AnalysisBreadcrumbs.unit.test.js.map +1 -0
- package/dist/dts/features/Analysis/AnalysisCard.d.ts.map +1 -1
- package/dist/dts/features/Analysis/AnalysisCard.js +6 -4
- package/dist/dts/features/Analysis/AnalysisCard.js.map +1 -1
- package/dist/dts/features/Analysis/AnalysisCard.stories.d.ts +34 -0
- package/dist/dts/features/Analysis/AnalysisCard.stories.d.ts.map +1 -0
- package/dist/dts/features/Analysis/AnalysisCard.stories.js +25 -0
- package/dist/dts/features/Analysis/AnalysisCard.stories.js.map +1 -0
- package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +22 -10
- package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts.map +1 -1
- package/dist/dts/features/Analysis/AnalysisCenter.js +2 -2
- package/dist/dts/features/Analysis/AnalysisCenter.js.map +1 -1
- package/dist/dts/features/Analysis/AnalysisPanel.stories.d.ts +22 -0
- package/dist/dts/features/Analysis/AnalysisPanel.stories.d.ts.map +1 -0
- package/dist/dts/features/Analysis/AnalysisPanel.stories.js +28 -0
- package/dist/dts/features/Analysis/AnalysisPanel.stories.js.map +1 -0
- package/dist/dts/features/Analysis/AnalysisWorkspace.d.ts +29 -0
- package/dist/dts/features/Analysis/AnalysisWorkspace.d.ts.map +1 -0
- package/dist/dts/features/Analysis/AnalysisWorkspace.js +37 -0
- package/dist/dts/features/Analysis/AnalysisWorkspace.js.map +1 -0
- package/dist/dts/features/Analysis/TextDescription.js +1 -1
- package/dist/dts/features/Analysis/context.d.ts +29 -0
- package/dist/dts/features/Analysis/context.d.ts.map +1 -0
- package/dist/dts/features/Analysis/context.js +34 -0
- package/dist/dts/features/Analysis/context.js.map +1 -0
- package/dist/dts/features/Analysis/types.d.ts +6 -0
- package/dist/dts/features/Analysis/types.d.ts.map +1 -1
- package/dist/dts/features/Analysis/types.js.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortPanel.d.ts +22 -3
- package/dist/dts/features/CohortBuilder/CohortPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortPanel.js +47 -17
- package/dist/dts/features/CohortBuilder/CohortPanel.js.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.js.map +1 -1
- package/dist/dts/features/CohortBuilder/types.d.ts +2 -1
- package/dist/dts/features/CohortBuilder/types.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/types.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortDiscovery.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortDiscovery.js +10 -9
- package/dist/dts/features/CohortDiscovery/CohortDiscovery.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.js +1 -2
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.js +1 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/constants.d.ts +2 -0
- package/dist/dts/features/CohortDiscovery/constants.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/constants.js +4 -0
- package/dist/dts/features/CohortDiscovery/constants.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/queryApi.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/queryApi.js +2 -381
- package/dist/dts/features/CohortDiscovery/queryApi.js.map +1 -1
- package/dist/dts/features/Dictionary/types.d.ts +3 -3
- package/dist/dts/features/Dictionary/types.d.ts.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.js +2 -2
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.js.map +1 -1
- package/dist/dts/features/Discovery/types.d.ts +4 -16
- package/dist/dts/features/Discovery/types.d.ts.map +1 -1
- package/dist/dts/features/Discovery/types.js.map +1 -1
- package/dist/dts/features/Navigation/NavPageLayout.d.ts +3 -3
- package/dist/dts/features/Navigation/NavPageLayout.d.ts.map +1 -1
- package/dist/dts/features/Navigation/NavPageLayout.js +2 -2
- package/dist/dts/features/Navigation/NavPageLayout.js.map +1 -1
- package/dist/dts/features/Navigation/TopBar/TopBar.d.ts.map +1 -1
- package/dist/dts/features/Navigation/TopBar/TopBar.js +3 -2
- package/dist/dts/features/Navigation/TopBar/TopBar.js.map +1 -1
- package/dist/dts/features/Navigation/index.d.ts +2 -2
- package/dist/dts/features/Navigation/index.d.ts.map +1 -1
- package/dist/dts/features/Navigation/index.js +2 -1
- package/dist/dts/features/Navigation/index.js.map +1 -1
- package/dist/dts/features/Navigation/types.d.ts +7 -1
- package/dist/dts/features/Navigation/types.d.ts.map +1 -1
- package/dist/dts/features/Navigation/types.js +19 -1
- package/dist/dts/features/Navigation/types.js.map +1 -1
- package/dist/dts/features/StaticNotebook/StaticNotebook.d.ts +4 -0
- package/dist/dts/features/StaticNotebook/StaticNotebook.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/StaticNotebook.js +79 -0
- package/dist/dts/features/StaticNotebook/StaticNotebook.js.map +1 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.d.ts +6 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js +10 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js.map +1 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookViewer.d.ts +6 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookViewer.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookViewer.js +91 -0
- package/dist/dts/features/StaticNotebook/StaticNotebookViewer.js.map +1 -0
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.d.ts +4 -0
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js +129 -0
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js.map +1 -0
- package/dist/dts/features/StaticNotebook/constants.d.ts +4 -0
- package/dist/dts/features/StaticNotebook/constants.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/constants.js +5 -0
- package/dist/dts/features/StaticNotebook/constants.js.map +1 -0
- package/dist/dts/features/StaticNotebook/index.d.ts +4 -0
- package/dist/dts/features/StaticNotebook/index.d.ts.map +1 -0
- package/dist/dts/features/StaticNotebook/index.js +4 -0
- package/dist/dts/features/StaticNotebook/index.js.map +1 -0
- package/dist/dts/features/Study/index.d.ts +5 -1
- package/dist/dts/features/Study/index.d.ts.map +1 -1
- package/dist/dts/features/Study/index.js +5 -1
- package/dist/dts/features/Study/index.js.map +1 -1
- package/dist/dts/index.d.ts +3 -1
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/index.js +4 -2
- package/dist/dts/index.js.map +1 -1
- package/dist/dts/lib/common/staticProps.d.ts.map +1 -1
- package/dist/dts/lib/common/staticProps.js +28 -8
- package/dist/dts/lib/common/staticProps.js.map +1 -1
- package/dist/dts/lib/content/types.d.ts +2 -2
- package/dist/dts/lib/content/types.d.ts.map +1 -1
- package/dist/dts/lib/notebooks/index.d.ts +3 -0
- package/dist/dts/lib/notebooks/index.d.ts.map +1 -0
- package/dist/dts/lib/notebooks/index.js +96 -0
- package/dist/dts/lib/notebooks/index.js.map +1 -0
- package/dist/dts/pages/AiSearch/AiSearch.js +1 -1
- package/dist/dts/pages/AiSearch/AiSearch.js.map +1 -1
- package/dist/dts/pages/AiSearch/data.js +1 -1
- package/dist/dts/pages/AiSearch/data.js.map +1 -1
- package/dist/dts/pages/Analysis/Analysis.js +1 -1
- package/dist/dts/pages/Analysis/Analysis.js.map +1 -1
- package/dist/dts/pages/Crosswalk/Crosswalk.js +1 -1
- package/dist/dts/pages/Crosswalk/Crosswalk.js.map +1 -1
- package/dist/dts/pages/DataDictionary/DataDictionary.js +1 -1
- package/dist/dts/pages/DataDictionary/DataDictionary.js.map +1 -1
- package/dist/dts/pages/DataLibrary/DataLibrary.js +1 -1
- package/dist/dts/pages/DataLibrary/DataLibrary.js.map +1 -1
- package/dist/dts/pages/Discovery/Discovery.js +1 -1
- package/dist/dts/pages/Discovery/Discovery.js.map +1 -1
- package/dist/dts/pages/Explorer/Explorer.js +1 -1
- package/dist/dts/pages/Explorer/Explorer.js.map +1 -1
- package/dist/dts/pages/Explorer/data.d.ts.map +1 -1
- package/dist/dts/pages/Explorer/data.js +17 -4
- package/dist/dts/pages/Explorer/data.js.map +1 -1
- package/dist/dts/pages/Landing/Landing.js +1 -1
- package/dist/dts/pages/Landing/Landing.js.map +1 -1
- package/dist/dts/pages/Landing/about-us.js +1 -1
- package/dist/dts/pages/Landing/about-us.js.map +1 -1
- package/dist/dts/pages/Landing/contact.js +1 -1
- package/dist/dts/pages/Landing/contact.js.map +1 -1
- package/dist/dts/pages/Landing/resource.js +1 -1
- package/dist/dts/pages/Landing/resource.js.map +1 -1
- package/dist/dts/pages/Login/Login.js +1 -1
- package/dist/dts/pages/Login/Login.js.map +1 -1
- package/dist/dts/pages/NotebookLite/NotebookLite.js +1 -1
- package/dist/dts/pages/NotebookLite/NotebookLite.js.map +1 -1
- package/dist/dts/pages/Profile/Profile.js +1 -1
- package/dist/dts/pages/Profile/Profile.js.map +1 -1
- package/dist/dts/pages/Query/Query.js +1 -1
- package/dist/dts/pages/Query/Query.js.map +1 -1
- package/dist/dts/pages/Submission/Submission.js +1 -1
- package/dist/dts/pages/Submission/Submission.js.map +1 -1
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js +1 -1
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js.map +1 -1
- package/dist/dts/pages/Theme/Colors.js +1 -1
- package/dist/dts/pages/Theme/Colors.js.map +1 -1
- package/dist/dts/pages/Workspace/Workspace.js +1 -1
- package/dist/dts/pages/Workspace/Workspace.js.map +1 -1
- package/dist/dts/pages/Workspace/WorkspaceNoAccess.js +1 -1
- package/dist/dts/pages/Workspace/WorkspaceNoAccess.js.map +1 -1
- package/dist/dts/pages/admin/Workspace/WorkspaceNotebooks.js +1 -1
- package/dist/dts/pages/admin/Workspace/WorkspaceNotebooks.js.map +1 -1
- package/dist/dts/pages/admin/analysis/Analysis.js +1 -1
- package/dist/dts/pages/admin/analysis/Analysis.js.map +1 -1
- package/dist/dts/pages/admin/analysis/data.d.ts +1 -1
- package/dist/dts/pages/admin/authz/Authz.js +1 -1
- package/dist/dts/pages/admin/authz/Authz.js.map +1 -1
- package/dist/dts/pages/admin/authz/data.d.ts +1 -1
- package/dist/dts/types/icons.d.ts +2 -2
- package/dist/dts/types/icons.d.ts.map +1 -1
- package/dist/dts/types/icons.js +2 -2
- package/dist/dts/types/icons.js.map +1 -1
- package/dist/esm/index.js +532 -666
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +86 -23
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
package/dist/cjs/index.js
CHANGED
|
@@ -47,6 +47,7 @@ var lu = require('react-icons/lu');
|
|
|
47
47
|
require('universal-cookie');
|
|
48
48
|
var modals = require('@mantine/modals');
|
|
49
49
|
var GraphiQL = require('graphiql');
|
|
50
|
+
var router$1 = require('next/dist/client/router');
|
|
50
51
|
var fs = require('fs');
|
|
51
52
|
var path = require('path');
|
|
52
53
|
var react$1 = require('redux-persist/integration/react');
|
|
@@ -62,6 +63,7 @@ var filesize = require('filesize');
|
|
|
62
63
|
var dnd = require('@hello-pangea/dnd');
|
|
63
64
|
var plugin = require('tailwindcss/plugin');
|
|
64
65
|
var cookie = require('cookie');
|
|
66
|
+
var DOMPurify = require('isomorphic-dompurify');
|
|
65
67
|
|
|
66
68
|
function _interopNamespaceDefault(e) {
|
|
67
69
|
var n = Object.create(null);
|
|
@@ -2777,6 +2779,69 @@ const Charts = ({ charts, data, counts, isSuccess, numCols = DEFAULT_COLS, style
|
|
|
2777
2779
|
});
|
|
2778
2780
|
};
|
|
2779
2781
|
|
|
2782
|
+
const CollapsableCharts = ({ config, data })=>{
|
|
2783
|
+
const [showLegends, setShowLegends] = React.useState(config.showLegends?.enabled);
|
|
2784
|
+
if (!(config?.charts && Object.keys(config.charts).length > 0)) {
|
|
2785
|
+
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
|
|
2786
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
2787
|
+
message: "Charts Section not setup properly"
|
|
2788
|
+
})
|
|
2789
|
+
});
|
|
2790
|
+
}
|
|
2791
|
+
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Accordion, {
|
|
2792
|
+
unstyled: true,
|
|
2793
|
+
classNames: {
|
|
2794
|
+
root: 'mb-4 bg-base-max w-full rounded-lg',
|
|
2795
|
+
control: 'bg-secondary-lightest w-full px-4 py-2 rounded-lg data-active:rounded-b-none text-left group',
|
|
2796
|
+
label: 'pl-2 font-bold [text-shadow:_1px_0_#000]',
|
|
2797
|
+
chevron: 'rounded-full bg-secondary-dark text-white inline-block align-middle group-data-[active]:rotate-180 transition-all',
|
|
2798
|
+
panel: 'py-4'
|
|
2799
|
+
},
|
|
2800
|
+
chevronPosition: "left",
|
|
2801
|
+
defaultValue: "chartsAccordion",
|
|
2802
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Accordion.Item, {
|
|
2803
|
+
value: 'chartsAccordion',
|
|
2804
|
+
children: [
|
|
2805
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Accordion.Control, {
|
|
2806
|
+
children: config.title || ''
|
|
2807
|
+
}),
|
|
2808
|
+
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Accordion.Panel, {
|
|
2809
|
+
children: [
|
|
2810
|
+
config.showLegends?.enabled && config.showLegends?.showSwitch && /*#__PURE__*/ jsxRuntime.jsxs(React.Fragment, {
|
|
2811
|
+
children: [
|
|
2812
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Switch, {
|
|
2813
|
+
color: "accent",
|
|
2814
|
+
labelPosition: "left",
|
|
2815
|
+
label: "Show legends",
|
|
2816
|
+
size: "xs",
|
|
2817
|
+
px: "md",
|
|
2818
|
+
checked: showLegends,
|
|
2819
|
+
onChange: (event)=>setShowLegends(event.currentTarget.checked)
|
|
2820
|
+
}),
|
|
2821
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Divider, {
|
|
2822
|
+
my: "sm"
|
|
2823
|
+
})
|
|
2824
|
+
]
|
|
2825
|
+
}),
|
|
2826
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Box, {
|
|
2827
|
+
px: "md",
|
|
2828
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Charts, {
|
|
2829
|
+
showLegends: showLegends,
|
|
2830
|
+
style: "box",
|
|
2831
|
+
charts: config.charts,
|
|
2832
|
+
data: data,
|
|
2833
|
+
counts: 2,
|
|
2834
|
+
isSuccess: true,
|
|
2835
|
+
numCols: 4
|
|
2836
|
+
})
|
|
2837
|
+
})
|
|
2838
|
+
]
|
|
2839
|
+
})
|
|
2840
|
+
]
|
|
2841
|
+
})
|
|
2842
|
+
});
|
|
2843
|
+
};
|
|
2844
|
+
|
|
2780
2845
|
const ChartTitleBar = ({ divId, title, filename, jsonData })=>{
|
|
2781
2846
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
2782
2847
|
className: "flex justify-between items-center",
|
|
@@ -3324,7 +3389,7 @@ const useFieldNameToTitle = ()=>{
|
|
|
3324
3389
|
return fieldToTitle;
|
|
3325
3390
|
};
|
|
3326
3391
|
|
|
3327
|
-
const DEFAULT_VISIBLE_ITEMS = 6;
|
|
3392
|
+
const DEFAULT_VISIBLE_ITEMS$1 = 6;
|
|
3328
3393
|
const DEFAULT_MINIMUM = 0;
|
|
3329
3394
|
const DEFAULT_MAXIMUM = 100;
|
|
3330
3395
|
const BAD_DATA_MESSAGE = 'No data for this field';
|
|
@@ -3761,7 +3826,7 @@ const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false
|
|
|
3761
3826
|
}, [
|
|
3762
3827
|
enumFilters
|
|
3763
3828
|
]);
|
|
3764
|
-
const maxValuesToDisplay = DEFAULT_VISIBLE_ITEMS;
|
|
3829
|
+
const maxValuesToDisplay = DEFAULT_VISIBLE_ITEMS$1;
|
|
3765
3830
|
// update filters when checkbox is selected
|
|
3766
3831
|
const handleChange = (value, checked)=>{
|
|
3767
3832
|
setFacetChartData({
|
|
@@ -5004,6 +5069,7 @@ const CustomFacetGroup = ({ hooks, customFacetHooks, queryOptions, getFacetLabel
|
|
|
5004
5069
|
});
|
|
5005
5070
|
};
|
|
5006
5071
|
|
|
5072
|
+
const DEFAULT_VISIBLE_ITEMS = 16;
|
|
5007
5073
|
const FacetSelector = ({ category, facetName, hooks, width = 'w-full', description, fields, selectedFields, updateSelectedField, showSearch = true, showSettings = false, header = {
|
|
5008
5074
|
Panel: FacetHeader,
|
|
5009
5075
|
Label: FacetText,
|
|
@@ -5034,7 +5100,8 @@ const FacetSelector = ({ category, facetName, hooks, width = 'w-full', descripti
|
|
|
5034
5100
|
searchTerm,
|
|
5035
5101
|
fields
|
|
5036
5102
|
]);
|
|
5037
|
-
const remainingValues = filteredFields.length - DEFAULT_VISIBLE_ITEMS;
|
|
5103
|
+
const remainingValues = filteredFields.length - DEFAULT_VISIBLE_ITEMS * 2;
|
|
5104
|
+
const visibleFields = filteredFields.slice(0, !isGroupExpanded ? DEFAULT_VISIBLE_ITEMS : undefined);
|
|
5038
5105
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
5039
5106
|
className: `flex flex-col ${width ? width : 'mx-1'} bg-base-max relative border-base-light border-1 rounded-b-md transition`,
|
|
5040
5107
|
id: category,
|
|
@@ -5083,11 +5150,11 @@ const FacetSelector = ({ category, facetName, hooks, width = 'w-full', descripti
|
|
|
5083
5150
|
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
5084
5151
|
className: "card-face bg-base-max rounded-b-xs flex flex-col gap-y-1 justify-between",
|
|
5085
5152
|
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
5086
|
-
children:
|
|
5153
|
+
children: visibleFields.length == 0 ? /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
5087
5154
|
className: "mx-4 font-content text-sm",
|
|
5088
5155
|
children: BAD_DATA_MESSAGE
|
|
5089
|
-
}) :
|
|
5090
|
-
const label = core.fieldNameToTitle(facet.field);
|
|
5156
|
+
}) : visibleFields.map((facet)=>{
|
|
5157
|
+
const label = facet?.label ?? core.fieldNameToTitle(facet.field);
|
|
5091
5158
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
5092
5159
|
className: "flex justify-between items-center px-2 my-1",
|
|
5093
5160
|
children: [
|
|
@@ -5138,7 +5205,12 @@ const ProtectedContent = ({ children, referer })=>{
|
|
|
5138
5205
|
}
|
|
5139
5206
|
});
|
|
5140
5207
|
};
|
|
5141
|
-
const
|
|
5208
|
+
const delayRedirect = ()=>{
|
|
5209
|
+
setTimeout(()=>{
|
|
5210
|
+
onUnauthenticated();
|
|
5211
|
+
}, 2000);
|
|
5212
|
+
};
|
|
5213
|
+
const { status, pending } = useSession(true, delayRedirect);
|
|
5142
5214
|
if (status !== 'issued') {
|
|
5143
5215
|
// not logged in
|
|
5144
5216
|
if (pending) return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
@@ -5148,12 +5220,20 @@ const ProtectedContent = ({ children, referer })=>{
|
|
|
5148
5220
|
else return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
5149
5221
|
className: "w-full h-full relative",
|
|
5150
5222
|
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
|
|
5151
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
5152
|
-
|
|
5153
|
-
|
|
5154
|
-
|
|
5155
|
-
|
|
5156
|
-
|
|
5223
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Stack, {
|
|
5224
|
+
h: 300,
|
|
5225
|
+
align: "center",
|
|
5226
|
+
justify: "center",
|
|
5227
|
+
gap: "md",
|
|
5228
|
+
className: "mt-24",
|
|
5229
|
+
children: [
|
|
5230
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
5231
|
+
children: "You are not logged in and cannot access this protected content."
|
|
5232
|
+
}),
|
|
5233
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
5234
|
+
children: "You will be redirected to the login page in a few seconds.."
|
|
5235
|
+
})
|
|
5236
|
+
]
|
|
5157
5237
|
})
|
|
5158
5238
|
})
|
|
5159
5239
|
});
|
|
@@ -5471,7 +5551,7 @@ const LoginButton = ({ name = 'login', leftIcon = undefined, rightIcon = undefin
|
|
|
5471
5551
|
const processTopBarItems = (items, classNames, dividerClassname)=>{
|
|
5472
5552
|
return items.reduce((acc, item, index)=>{
|
|
5473
5553
|
const mergedClassnames = item?.classNames ? mergeDefaultTailwindClassnames(classNames, item.classNames) : classNames;
|
|
5474
|
-
acc.push(/*#__PURE__*/ jsxRuntime.jsxs(
|
|
5554
|
+
acc.push(/*#__PURE__*/ jsxRuntime.jsxs(React.Fragment, {
|
|
5475
5555
|
children: [
|
|
5476
5556
|
/*#__PURE__*/ jsxRuntime.jsx("a", {
|
|
5477
5557
|
className: "flex",
|
|
@@ -5483,7 +5563,7 @@ const processTopBarItems = (items, classNames, dividerClassname)=>{
|
|
|
5483
5563
|
rightIcon: item.rightIcon,
|
|
5484
5564
|
classNames: mergedClassnames
|
|
5485
5565
|
})
|
|
5486
|
-
}
|
|
5566
|
+
}),
|
|
5487
5567
|
/*#__PURE__*/ jsxRuntime.jsx(core$1.Divider, {
|
|
5488
5568
|
size: "md",
|
|
5489
5569
|
orientation: "vertical",
|
|
@@ -5492,7 +5572,7 @@ const processTopBarItems = (items, classNames, dividerClassname)=>{
|
|
|
5492
5572
|
}
|
|
5493
5573
|
})
|
|
5494
5574
|
]
|
|
5495
|
-
}));
|
|
5575
|
+
}, `${item.href}_${item.name}-topbar-item`));
|
|
5496
5576
|
return acc;
|
|
5497
5577
|
}, []);
|
|
5498
5578
|
};
|
|
@@ -5993,7 +6073,7 @@ const LeftSidePanel = ({ items = [], classNames = {} })=>{
|
|
|
5993
6073
|
});
|
|
5994
6074
|
};
|
|
5995
6075
|
|
|
5996
|
-
const NavPageLayout = ({ headerProps, footerProps, mainProps,
|
|
6076
|
+
const NavPageLayout = ({ headerProps, footerProps, mainProps, headerMetadata, children })=>{
|
|
5997
6077
|
const mainContentStyle = mainProps?.fixed ? 'flex-1 flex overflow-hidden relative' : 'flex grow relative';
|
|
5998
6078
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
5999
6079
|
className: "flex flex-col justify-between h-screen",
|
|
@@ -6001,24 +6081,24 @@ const NavPageLayout = ({ headerProps, footerProps, mainProps, headerData, childr
|
|
|
6001
6081
|
/*#__PURE__*/ jsxRuntime.jsxs(Head, {
|
|
6002
6082
|
children: [
|
|
6003
6083
|
/*#__PURE__*/ jsxRuntime.jsx("title", {
|
|
6004
|
-
children:
|
|
6084
|
+
children: headerMetadata.title
|
|
6005
6085
|
}),
|
|
6006
6086
|
/*#__PURE__*/ jsxRuntime.jsx("meta", {
|
|
6007
6087
|
property: "og:title",
|
|
6008
|
-
content:
|
|
6009
|
-
},
|
|
6088
|
+
content: headerMetadata.content
|
|
6089
|
+
}, headerMetadata.key)
|
|
6010
6090
|
]
|
|
6011
6091
|
}),
|
|
6012
6092
|
/*#__PURE__*/ jsxRuntime.jsxs(Header$1, {
|
|
6013
6093
|
...headerProps,
|
|
6014
6094
|
children: [
|
|
6015
6095
|
/*#__PURE__*/ jsxRuntime.jsx("title", {
|
|
6016
|
-
children:
|
|
6096
|
+
children: headerMetadata.title
|
|
6017
6097
|
}),
|
|
6018
6098
|
/*#__PURE__*/ jsxRuntime.jsx("meta", {
|
|
6019
6099
|
property: "og:title",
|
|
6020
|
-
content:
|
|
6021
|
-
},
|
|
6100
|
+
content: headerMetadata.content
|
|
6101
|
+
}, headerMetadata.key)
|
|
6022
6102
|
]
|
|
6023
6103
|
}),
|
|
6024
6104
|
headerProps.type === 'vertical' ? /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
@@ -6044,6 +6124,20 @@ const NavPageLayout = ({ headerProps, footerProps, mainProps, headerData, childr
|
|
|
6044
6124
|
});
|
|
6045
6125
|
};
|
|
6046
6126
|
|
|
6127
|
+
/**
|
|
6128
|
+
* Type guard to check if an object is of type HeaderMetadata
|
|
6129
|
+
* @param obj - The object to check
|
|
6130
|
+
* @returns True if the object is a valid HeaderMetadata
|
|
6131
|
+
*/ const isHeaderMetadata = (obj)=>{
|
|
6132
|
+
// Check if obj is a non-null object
|
|
6133
|
+
if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {
|
|
6134
|
+
return false;
|
|
6135
|
+
}
|
|
6136
|
+
const candidate = obj;
|
|
6137
|
+
// Check all required properties exist and are non-empty strings
|
|
6138
|
+
return typeof candidate.title === 'string' && candidate.title.trim().length > 0 && typeof candidate.content === 'string' && candidate.content.trim().length > 0 && typeof candidate.key === 'string' && candidate.key.trim().length > 0;
|
|
6139
|
+
};
|
|
6140
|
+
|
|
6047
6141
|
var classes = {"tableRow":"DiscoveryTable-module_tableRow__yFUJZ"};
|
|
6048
6142
|
|
|
6049
6143
|
const jsonPathAccessor$1 = (path)=>(row)=>{
|
|
@@ -7883,69 +7977,6 @@ const SummaryStatisticPanel = ({ summaries })=>{
|
|
|
7883
7977
|
});
|
|
7884
7978
|
};
|
|
7885
7979
|
|
|
7886
|
-
const ChartsPanel = ({ config, data })=>{
|
|
7887
|
-
const [showLegends, setShowLegends] = React.useState(config.showLegends?.enabled);
|
|
7888
|
-
if (!(config?.charts && Object.keys(config.charts).length > 0)) {
|
|
7889
|
-
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
|
|
7890
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
7891
|
-
message: "Discovery Charts Section not setup properly"
|
|
7892
|
-
})
|
|
7893
|
-
});
|
|
7894
|
-
}
|
|
7895
|
-
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Accordion, {
|
|
7896
|
-
unstyled: true,
|
|
7897
|
-
classNames: {
|
|
7898
|
-
root: 'mb-4 bg-base-max w-full rounded-lg',
|
|
7899
|
-
control: 'bg-secondary-lightest w-full px-4 py-2 rounded-lg data-active:rounded-b-none text-left group',
|
|
7900
|
-
label: 'pl-2 font-bold [text-shadow:_1px_0_#000]',
|
|
7901
|
-
chevron: 'rounded-full bg-secondary-dark text-white inline-block align-middle group-data-[active]:rotate-180 transition-all',
|
|
7902
|
-
panel: 'py-4'
|
|
7903
|
-
},
|
|
7904
|
-
chevronPosition: "left",
|
|
7905
|
-
defaultValue: "chartsAccordion",
|
|
7906
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Accordion.Item, {
|
|
7907
|
-
value: 'chartsAccordion',
|
|
7908
|
-
children: [
|
|
7909
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Accordion.Control, {
|
|
7910
|
-
children: config.title || ''
|
|
7911
|
-
}),
|
|
7912
|
-
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Accordion.Panel, {
|
|
7913
|
-
children: [
|
|
7914
|
-
config.showLegends?.enabled && config.showLegends?.showSwitch && /*#__PURE__*/ jsxRuntime.jsxs(React.Fragment, {
|
|
7915
|
-
children: [
|
|
7916
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Switch, {
|
|
7917
|
-
color: "accent",
|
|
7918
|
-
labelPosition: "left",
|
|
7919
|
-
label: "Show legends",
|
|
7920
|
-
size: "xs",
|
|
7921
|
-
px: "md",
|
|
7922
|
-
checked: showLegends,
|
|
7923
|
-
onChange: (event)=>setShowLegends(event.currentTarget.checked)
|
|
7924
|
-
}),
|
|
7925
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Divider, {
|
|
7926
|
-
my: "sm"
|
|
7927
|
-
})
|
|
7928
|
-
]
|
|
7929
|
-
}),
|
|
7930
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Box, {
|
|
7931
|
-
px: "md",
|
|
7932
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(Charts, {
|
|
7933
|
-
showLegends: showLegends,
|
|
7934
|
-
style: "box",
|
|
7935
|
-
charts: config.charts,
|
|
7936
|
-
data: data,
|
|
7937
|
-
counts: 2,
|
|
7938
|
-
isSuccess: true,
|
|
7939
|
-
numCols: 4
|
|
7940
|
-
})
|
|
7941
|
-
})
|
|
7942
|
-
]
|
|
7943
|
-
})
|
|
7944
|
-
]
|
|
7945
|
-
})
|
|
7946
|
-
});
|
|
7947
|
-
};
|
|
7948
|
-
|
|
7949
7980
|
const isSearchKV = (obj)=>{
|
|
7950
7981
|
return obj && obj.key && obj.value;
|
|
7951
7982
|
};
|
|
@@ -9286,7 +9317,7 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
9286
9317
|
size: "xl",
|
|
9287
9318
|
children: discoveryConfig?.features?.pageTitle.text
|
|
9288
9319
|
}) : null,
|
|
9289
|
-
discoveryConfig.features?.chartsSection?.enabled && /*#__PURE__*/ jsxRuntime.jsx(
|
|
9320
|
+
discoveryConfig.features?.chartsSection?.enabled && /*#__PURE__*/ jsxRuntime.jsx(CollapsableCharts, {
|
|
9290
9321
|
config: discoveryConfig.features?.chartsSection,
|
|
9291
9322
|
data: chartData
|
|
9292
9323
|
}),
|
|
@@ -12346,7 +12377,25 @@ const DropdownPanel = ({ index, filters, tabTitle, facetDefinitions, facetDataHo
|
|
|
12346
12377
|
};
|
|
12347
12378
|
|
|
12348
12379
|
const EmptyData = {};
|
|
12349
|
-
|
|
12380
|
+
/**
|
|
12381
|
+
* CohortPanel is a React component that provides an interactive interface for cohort exploration and filtering.
|
|
12382
|
+
* It integrates with data services and facilitates visualization, filtering, and analysis tasks.
|
|
12383
|
+
*
|
|
12384
|
+
* @param {Object} props The properties required to configure the CohortPanel component.
|
|
12385
|
+
* @param {Object} props.guppyConfig Configuration object for Guppy, including field mappings and data type information.
|
|
12386
|
+
* @param {Object} props.filters Configuration for filter tabs, including filter fields and layout.
|
|
12387
|
+
* @param {Object} [props.charts={}] Optional set of chart configuration objects for rendering summaries.
|
|
12388
|
+
* @param {Object} [props.chartsSection] Optional configuration for an additional section of charts.
|
|
12389
|
+
* @param {Object} props.table Reference to the table configuration or component for displaying data.
|
|
12390
|
+
* @param {string} props.tabTitle Title for the filter tab section.
|
|
12391
|
+
* @param {Object[]|undefined} props.dropdowns Dropdown menu configuration, allowing for additional filter options or actions.
|
|
12392
|
+
* @param {Object[]|undefined} props.buttons List of button configurations for actions such as downloads.
|
|
12393
|
+
* @param {boolean} props.loginForDownload Determines whether login is required to enable download functionality.
|
|
12394
|
+
* @param {boolean} [props.showAccessLevel=false] Indicates if the user access level should be displayed on the panel.
|
|
12395
|
+
*
|
|
12396
|
+
* @returns {JSX.Element} Returns a JSX element rendering the CohortPanel. This includes filter options,
|
|
12397
|
+
* summary charts, cohort manager, and data display components.
|
|
12398
|
+
*/ const CohortPanel = ({ guppyConfig, filters, charts = {}, chartsSection = undefined, table, tabTitle, dropdowns, buttons, loginForDownload, showAccessLevel = false })=>{
|
|
12350
12399
|
const isSm = hooks.useMediaQuery('(min-width: 639px)');
|
|
12351
12400
|
const isMd = hooks.useMediaQuery('(min-width: 1373px)');
|
|
12352
12401
|
const isXl = hooks.useMediaQuery('(min-width: 1600px)');
|
|
@@ -12371,7 +12420,10 @@ const CohortPanel = ({ guppyConfig, filters, charts = {}, table, tabTitle, dropd
|
|
|
12371
12420
|
});
|
|
12372
12421
|
const { data: chartData, isSuccess: isChartSuccess, isFetching: isChartFetching, isError: isChartError } = core.useGetAggsNoFilterSelfQuery({
|
|
12373
12422
|
type: index,
|
|
12374
|
-
fields:
|
|
12423
|
+
fields: [
|
|
12424
|
+
...Object.keys(chartsSection?.charts ?? {}),
|
|
12425
|
+
...Object.keys(charts)
|
|
12426
|
+
],
|
|
12375
12427
|
filters: cohortFilters,
|
|
12376
12428
|
accessibility: accessLevel
|
|
12377
12429
|
});
|
|
@@ -12477,7 +12529,8 @@ const CohortPanel = ({ guppyConfig, filters, charts = {}, table, tabTitle, dropd
|
|
|
12477
12529
|
const facetDefs = classifyFacets(data, index, guppyConfig?.fieldMapping ?? [], configFacetDefs ?? {}, sharedFiltersMap);
|
|
12478
12530
|
setFacetDefinitions(facetDefs);
|
|
12479
12531
|
// setup summary charts since nested fields can be listed by the split field name
|
|
12480
|
-
const
|
|
12532
|
+
const chartDefinitions = chartsSection?.charts ?? charts;
|
|
12533
|
+
const summaryCharts = Object.keys(chartDefinitions).reduce((acc, field)=>{
|
|
12481
12534
|
let chartField = field;
|
|
12482
12535
|
if (facetDefs?.[field] === undefined) {
|
|
12483
12536
|
const res = Object.values(facetDefs).filter((def)=>{
|
|
@@ -12489,7 +12542,7 @@ const CohortPanel = ({ guppyConfig, filters, charts = {}, table, tabTitle, dropd
|
|
|
12489
12542
|
}
|
|
12490
12543
|
return {
|
|
12491
12544
|
...acc,
|
|
12492
|
-
[chartField]:
|
|
12545
|
+
[chartField]: chartDefinitions[field]
|
|
12493
12546
|
};
|
|
12494
12547
|
}, {});
|
|
12495
12548
|
setSummaryCharts(summaryCharts);
|
|
@@ -12500,7 +12553,8 @@ const CohortPanel = ({ guppyConfig, filters, charts = {}, table, tabTitle, dropd
|
|
|
12500
12553
|
facetDefinitions,
|
|
12501
12554
|
index,
|
|
12502
12555
|
guppyConfig.fieldMapping,
|
|
12503
|
-
charts
|
|
12556
|
+
charts,
|
|
12557
|
+
chartsSection
|
|
12504
12558
|
]);
|
|
12505
12559
|
const { data: counts, isSuccess: isCountSuccess, isError } = core.useGetCountsQuery({
|
|
12506
12560
|
type: index,
|
|
@@ -12558,7 +12612,13 @@ const CohortPanel = ({ guppyConfig, filters, charts = {}, table, tabTitle, dropd
|
|
|
12558
12612
|
})
|
|
12559
12613
|
]
|
|
12560
12614
|
}),
|
|
12561
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
12615
|
+
chartsSection?.enabled ? /*#__PURE__*/ jsxRuntime.jsx(CollapsableCharts, {
|
|
12616
|
+
config: {
|
|
12617
|
+
...chartsSection,
|
|
12618
|
+
charts: summaryCharts
|
|
12619
|
+
},
|
|
12620
|
+
data: chartData ?? EmptyData
|
|
12621
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(Charts, {
|
|
12562
12622
|
charts: summaryCharts,
|
|
12563
12623
|
data: chartData ?? EmptyData,
|
|
12564
12624
|
counts: counts,
|
|
@@ -13759,11 +13819,11 @@ const TextDescription = ({ description })=>{
|
|
|
13759
13819
|
children: [
|
|
13760
13820
|
!extend ? /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
13761
13821
|
ref: textRef,
|
|
13762
|
-
size: "
|
|
13822
|
+
size: "sm",
|
|
13763
13823
|
lineClamp: 4,
|
|
13764
13824
|
children: description
|
|
13765
13825
|
}) : /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
13766
|
-
size: "
|
|
13826
|
+
size: "sm",
|
|
13767
13827
|
children: description
|
|
13768
13828
|
}),
|
|
13769
13829
|
isClamped && /*#__PURE__*/ jsxRuntime.jsx("button", {
|
|
@@ -13785,86 +13845,91 @@ const TextDescription = ({ description })=>{
|
|
|
13785
13845
|
};
|
|
13786
13846
|
|
|
13787
13847
|
const AnalysisCard = ({ title, description, type, icon, image, hasDemo, loginRequired, href, btnText })=>{
|
|
13788
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
13789
|
-
|
|
13790
|
-
|
|
13791
|
-
|
|
13792
|
-
|
|
13793
|
-
|
|
13794
|
-
|
|
13795
|
-
|
|
13796
|
-
|
|
13797
|
-
|
|
13798
|
-
|
|
13799
|
-
|
|
13800
|
-
|
|
13801
|
-
|
|
13802
|
-
|
|
13803
|
-
|
|
13804
|
-
|
|
13805
|
-
|
|
13806
|
-
|
|
13807
|
-
|
|
13808
|
-
|
|
13809
|
-
|
|
13810
|
-
|
|
13811
|
-
|
|
13812
|
-
|
|
13813
|
-
|
|
13814
|
-
|
|
13848
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Stack, {
|
|
13849
|
+
align: "stretch",
|
|
13850
|
+
justify: "space-between",
|
|
13851
|
+
className: "rounded-sm rounded-t-md bg-base-max p-0",
|
|
13852
|
+
children: [
|
|
13853
|
+
/*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13854
|
+
className: "h-full",
|
|
13855
|
+
children: [
|
|
13856
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13857
|
+
className: "p-0 rounded-sm h-1/2 h-max-1/2",
|
|
13858
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Image, {
|
|
13859
|
+
component: Image,
|
|
13860
|
+
src: `${image}`,
|
|
13861
|
+
alt: `${title} image`,
|
|
13862
|
+
height: 1000,
|
|
13863
|
+
width: 1000,
|
|
13864
|
+
radius: "md"
|
|
13865
|
+
})
|
|
13866
|
+
}),
|
|
13867
|
+
/*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13868
|
+
className: "flex -mt-5 relative z-10",
|
|
13869
|
+
children: [
|
|
13870
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13871
|
+
className: "p-0.5 rounded-sm bg-base-lightest ml-5 border-2 border-base w-1/5 h-1/5",
|
|
13872
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Image, {
|
|
13873
|
+
component: Image,
|
|
13874
|
+
src: `${icon}`,
|
|
13875
|
+
alt: `${title} logo`,
|
|
13876
|
+
width: 40,
|
|
13877
|
+
height: 40,
|
|
13878
|
+
radius: "lg"
|
|
13879
|
+
})
|
|
13880
|
+
}),
|
|
13881
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13882
|
+
className: "relative mb-0 ml-2",
|
|
13883
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
13884
|
+
className: "absolute bottom-0 left-0 text-xs text-gray-700 w-max",
|
|
13885
|
+
children: type === 'application' ? 'Application' : 'Jupyter Notebook'
|
|
13886
|
+
})
|
|
13815
13887
|
})
|
|
13816
|
-
|
|
13817
|
-
|
|
13818
|
-
|
|
13819
|
-
|
|
13820
|
-
|
|
13821
|
-
|
|
13888
|
+
]
|
|
13889
|
+
}),
|
|
13890
|
+
/*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13891
|
+
className: "flex flex-col mt-2 ml-2",
|
|
13892
|
+
children: [
|
|
13893
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13894
|
+
className: "text-sm font-black h-6",
|
|
13895
|
+
children: title
|
|
13896
|
+
}),
|
|
13897
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13898
|
+
className: "text-xs text-gray-400 h-6",
|
|
13899
|
+
children: loginRequired ? 'Login Required' : ' '
|
|
13900
|
+
}),
|
|
13901
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13902
|
+
className: "text-sm p-2 h-fit mt-2",
|
|
13903
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(TextDescription, {
|
|
13904
|
+
description: description
|
|
13905
|
+
})
|
|
13822
13906
|
})
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
|
|
13907
|
+
]
|
|
13908
|
+
})
|
|
13909
|
+
]
|
|
13910
|
+
}),
|
|
13911
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13912
|
+
className: "flex mb-4 rounded-b-md",
|
|
13913
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13914
|
+
className: "m-auto",
|
|
13828
13915
|
children: [
|
|
13829
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
13830
|
-
|
|
13831
|
-
|
|
13832
|
-
|
|
13833
|
-
|
|
13834
|
-
|
|
13835
|
-
|
|
13836
|
-
|
|
13837
|
-
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13838
|
-
className: "text-sm p-2 h-fit",
|
|
13839
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(TextDescription, {
|
|
13840
|
-
description: description
|
|
13841
|
-
})
|
|
13916
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.NavLink, {
|
|
13917
|
+
component: Link,
|
|
13918
|
+
href: href ?? '_blank',
|
|
13919
|
+
classNames: {
|
|
13920
|
+
root: 'bg-accent text-accent-contrast hover:bg-accent-darker p-2 rounded-sm',
|
|
13921
|
+
label: 'text-sm font-semibold'
|
|
13922
|
+
},
|
|
13923
|
+
label: btnText ? btnText : `Run ${type === 'application' ? 'App' : 'Notebook'}`
|
|
13842
13924
|
}),
|
|
13843
|
-
/*#__PURE__*/ jsxRuntime.jsx("
|
|
13844
|
-
className: "
|
|
13845
|
-
children:
|
|
13846
|
-
className: "m-auto",
|
|
13847
|
-
children: [
|
|
13848
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.NavLink, {
|
|
13849
|
-
component: Link,
|
|
13850
|
-
href: href ?? '_blank',
|
|
13851
|
-
classNames: {
|
|
13852
|
-
root: 'bg-accent text-accent-contrast hover:bg-accent-darker p-2 rounded-sm',
|
|
13853
|
-
label: 'text-sm font-semibold'
|
|
13854
|
-
},
|
|
13855
|
-
label: btnText ? btnText : `Run ${type === 'application' ? 'App' : 'Notebook'}`
|
|
13856
|
-
}),
|
|
13857
|
-
hasDemo && /*#__PURE__*/ jsxRuntime.jsx("button", {
|
|
13858
|
-
className: "ml-2 p-1.5 rounded-sm text-sm font-semibold",
|
|
13859
|
-
children: "Demo"
|
|
13860
|
-
})
|
|
13861
|
-
]
|
|
13862
|
-
})
|
|
13925
|
+
hasDemo && /*#__PURE__*/ jsxRuntime.jsx("button", {
|
|
13926
|
+
className: "ml-2 p-1.5 rounded-sm text-sm font-semibold",
|
|
13927
|
+
children: "Demo"
|
|
13863
13928
|
})
|
|
13864
13929
|
]
|
|
13865
13930
|
})
|
|
13866
|
-
|
|
13867
|
-
|
|
13931
|
+
})
|
|
13932
|
+
]
|
|
13868
13933
|
}, title);
|
|
13869
13934
|
};
|
|
13870
13935
|
|
|
@@ -13885,7 +13950,7 @@ const AnalysisCenter = ({ tools, showFilterAndSort = false })=>{
|
|
|
13885
13950
|
if (!keyword.length) return;
|
|
13886
13951
|
};
|
|
13887
13952
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13888
|
-
className: "w-full bg-base-
|
|
13953
|
+
className: "w-full bg-base-light p-4",
|
|
13889
13954
|
children: [
|
|
13890
13955
|
showFilterAndSort ? /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
13891
13956
|
className: "flex justify-between items-center w-7/8 mt-2 mx-2",
|
|
@@ -13935,7 +14000,7 @@ const AnalysisCenter = ({ tools, showFilterAndSort = false })=>{
|
|
|
13935
14000
|
}) : null,
|
|
13936
14001
|
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13937
14002
|
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13938
|
-
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 p-1 mx-4 overflow-y-
|
|
14003
|
+
className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 p-1 mx-4 overflow-y-auto",
|
|
13939
14004
|
children: tools.map(({ title, description, type, icon, image, hasDemo, loginRequired, href, btnText }, key)=>{
|
|
13940
14005
|
return /*#__PURE__*/ jsxRuntime.jsx(AnalysisCard, {
|
|
13941
14006
|
title,
|
|
@@ -14092,6 +14157,80 @@ const AnalysisCardCompact = ({ title, description, type = 'application', icon, h
|
|
|
14092
14157
|
});
|
|
14093
14158
|
};
|
|
14094
14159
|
|
|
14160
|
+
const GEN3_STATIC_NOTEBOOK_API = process.env.GEN3_STATIC_NOTEBOOK_API || `${core.GEN3_API}/api/staticNotebook`;
|
|
14161
|
+
const GEN3_STATIC_NOTEBOOK_DIR = process.env.GEN3_STATIC_NOTEBOOK_DIR || 'htmlNotebooks';
|
|
14162
|
+
const GEN3_STATIC_NOTEBOOK_PATH = process.env.GEN3_STATIC_NOTEBOOK_PATH || '/public';
|
|
14163
|
+
|
|
14164
|
+
const StaticNotebookViewer = ({ notebook })=>{
|
|
14165
|
+
const [htmlContent, setHtmlContent] = React.useState('');
|
|
14166
|
+
const [isError, setIsError] = React.useState(false);
|
|
14167
|
+
const [isLoading, setIsLoading] = React.useState(false);
|
|
14168
|
+
React.useEffect(()=>{
|
|
14169
|
+
async function fetchHtml() {
|
|
14170
|
+
const headers = new Headers();
|
|
14171
|
+
headers.set('Content-Type', 'application/json');
|
|
14172
|
+
setIsLoading(true);
|
|
14173
|
+
try {
|
|
14174
|
+
const response = await fetch(`${GEN3_STATIC_NOTEBOOK_API}?notebook=${notebook}`, {
|
|
14175
|
+
headers: headers
|
|
14176
|
+
});
|
|
14177
|
+
const json = await response.json();
|
|
14178
|
+
setHtmlContent(json.content);
|
|
14179
|
+
} catch (error) {
|
|
14180
|
+
if (error instanceof Error) {
|
|
14181
|
+
console.error(error.message);
|
|
14182
|
+
}
|
|
14183
|
+
setIsError(true);
|
|
14184
|
+
} finally{
|
|
14185
|
+
setIsLoading(false);
|
|
14186
|
+
}
|
|
14187
|
+
}
|
|
14188
|
+
fetchHtml();
|
|
14189
|
+
}, [
|
|
14190
|
+
notebook
|
|
14191
|
+
]);
|
|
14192
|
+
if (isError) {
|
|
14193
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14194
|
+
className: "flex w-full h-full",
|
|
14195
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
|
|
14196
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
14197
|
+
message: `Error loading notebook ${notebook}`
|
|
14198
|
+
})
|
|
14199
|
+
})
|
|
14200
|
+
});
|
|
14201
|
+
}
|
|
14202
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
14203
|
+
className: "flex w-full h-full",
|
|
14204
|
+
children: [
|
|
14205
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.LoadingOverlay, {
|
|
14206
|
+
visible: isLoading
|
|
14207
|
+
}),
|
|
14208
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14209
|
+
dangerouslySetInnerHTML: {
|
|
14210
|
+
__html: htmlContent
|
|
14211
|
+
}
|
|
14212
|
+
})
|
|
14213
|
+
]
|
|
14214
|
+
});
|
|
14215
|
+
};
|
|
14216
|
+
|
|
14217
|
+
const StaticNotebookIFrame = ({ notebook })=>{
|
|
14218
|
+
const router = router$1.useRouter();
|
|
14219
|
+
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14220
|
+
className: "flex w-full h-full",
|
|
14221
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14222
|
+
className: "flex justify-items-center w-full",
|
|
14223
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("iframe", {
|
|
14224
|
+
allow: "cross-origin",
|
|
14225
|
+
src: `${router.basePath}/${GEN3_STATIC_NOTEBOOK_DIR}/${notebook}`,
|
|
14226
|
+
width: "100%",
|
|
14227
|
+
height: "100%",
|
|
14228
|
+
title: "client notebook"
|
|
14229
|
+
})
|
|
14230
|
+
})
|
|
14231
|
+
});
|
|
14232
|
+
};
|
|
14233
|
+
|
|
14095
14234
|
const myGlob = (dir, filter)=>{
|
|
14096
14235
|
try {
|
|
14097
14236
|
const files = fs.readdirSync(dir);
|
|
@@ -14174,10 +14313,25 @@ var ContentSource$1 = ContentSource.getInstance();
|
|
|
14174
14313
|
let bannerConfigJSON = [];
|
|
14175
14314
|
try {
|
|
14176
14315
|
bannerConfigJSON = await ContentSource$1.getContentDatabase().get(`${core.GEN3_COMMONS_NAME}/banner.json`);
|
|
14177
|
-
} catch (
|
|
14316
|
+
} catch (error) {
|
|
14178
14317
|
console.warn('No banner config found at: ', `${core.GEN3_COMMONS_NAME}/banner.json`);
|
|
14179
14318
|
}
|
|
14180
14319
|
const { topBar, navigation, type = 'original' } = navigationConfigJSON;
|
|
14320
|
+
let headerMetadata = {
|
|
14321
|
+
title: 'Gen3 Frontend Framework Page',
|
|
14322
|
+
content: 'Gen3 Frontend Framework Page',
|
|
14323
|
+
key: 'gen3-common-page'
|
|
14324
|
+
};
|
|
14325
|
+
try {
|
|
14326
|
+
const loadedHeaderMetadata = await ContentSource$1.getContentDatabase().get(`${core.GEN3_COMMONS_NAME}/headerMetadata.json`);
|
|
14327
|
+
if (isHeaderMetadata(loadedHeaderMetadata)) {
|
|
14328
|
+
headerMetadata = loadedHeaderMetadata;
|
|
14329
|
+
} else {
|
|
14330
|
+
console.warn('headerMetadata is not a valid HeaderMetadata object');
|
|
14331
|
+
}
|
|
14332
|
+
} catch (error) {
|
|
14333
|
+
console.warn('No headerMetadata config found at: ', `${core.GEN3_COMMONS_NAME}/headerMetadata.json`);
|
|
14334
|
+
}
|
|
14181
14335
|
const headerProps = {
|
|
14182
14336
|
top: topBar,
|
|
14183
14337
|
navigation: navigation,
|
|
@@ -14188,11 +14342,7 @@ var ContentSource$1 = ContentSource.getInstance();
|
|
|
14188
14342
|
return {
|
|
14189
14343
|
headerProps,
|
|
14190
14344
|
footerProps,
|
|
14191
|
-
|
|
14192
|
-
title: 'Gen3 Frontend Framework Page',
|
|
14193
|
-
content: 'Gen3 Frontend Framework Page',
|
|
14194
|
-
key: 'gen3-common-page'
|
|
14195
|
-
}
|
|
14345
|
+
headerMetadata
|
|
14196
14346
|
};
|
|
14197
14347
|
};
|
|
14198
14348
|
|
|
@@ -15358,6 +15508,8 @@ const createFacetPanel = (facet, chartType, valueLabel, hooks)=>{
|
|
|
15358
15508
|
return null;
|
|
15359
15509
|
};
|
|
15360
15510
|
|
|
15511
|
+
const GEN3_COHORT_DISCOVERY_API = process.env.GEN3_COHORT_DISCOVERY_API || `${core.GEN3_API}/api/auth/analysis/cohortDiscovery`;
|
|
15512
|
+
|
|
15361
15513
|
const useGraphQLData = (url, body, skip)=>{
|
|
15362
15514
|
// Create a fetcher function that handles the GraphQL POST request
|
|
15363
15515
|
const fetcher = async (fetchUrl, fetchBody)=>{
|
|
@@ -15407,391 +15559,12 @@ const useGraphQLData = (url, body, skip)=>{
|
|
|
15407
15559
|
const useRoundedAggsQuery = ({ type, fields, filters, accessibility = core.Accessibility.ALL }, { skip } = {
|
|
15408
15560
|
skip: false
|
|
15409
15561
|
})=>{
|
|
15410
|
-
const response = useGraphQLData(
|
|
15562
|
+
const response = useGraphQLData(GEN3_COHORT_DISCOVERY_API, core.buildGetAggregationQuery(type, fields, filters, accessibility, false), skip);
|
|
15411
15563
|
return {
|
|
15412
15564
|
...response,
|
|
15413
15565
|
data: response?.data?.data ? core.processHistogramResponse(response?.data.data?._aggregation[type] ?? {}) : {}
|
|
15414
15566
|
};
|
|
15415
|
-
};
|
|
15416
|
-
//
|
|
15417
|
-
// import {
|
|
15418
|
-
// Accessibility,
|
|
15419
|
-
// convertFilterSetToGqlFilter,
|
|
15420
|
-
// FilterSet,
|
|
15421
|
-
// isFilterEmpty,
|
|
15422
|
-
// AggregationsData,
|
|
15423
|
-
// RawDataAndTotalCountsParams,
|
|
15424
|
-
// GraphQLQuery,
|
|
15425
|
-
// } from '@gen3/core';
|
|
15426
|
-
//
|
|
15427
|
-
// /*
|
|
15428
|
-
// returns all the fields for a given type
|
|
15429
|
-
// @param type: the type to get fields for
|
|
15430
|
-
// @returns: a list of fields for the given type
|
|
15431
|
-
// */
|
|
15432
|
-
//
|
|
15433
|
-
// interface AccessibleDataSliceParams {
|
|
15434
|
-
// type: string;
|
|
15435
|
-
// fields: ReadonlyArray<string>;
|
|
15436
|
-
// accessType: Accessibility;
|
|
15437
|
-
// }
|
|
15438
|
-
//
|
|
15439
|
-
// interface QueryAggsParams {
|
|
15440
|
-
// type: string;
|
|
15441
|
-
// fields: ReadonlyArray<string>;
|
|
15442
|
-
// filters: FilterSet;
|
|
15443
|
-
// accessibility?: Accessibility;
|
|
15444
|
-
// }
|
|
15445
|
-
//
|
|
15446
|
-
// interface QueryForSubAggsParams {
|
|
15447
|
-
// type: string;
|
|
15448
|
-
// mainField: string;
|
|
15449
|
-
// numericAggAsText: boolean;
|
|
15450
|
-
// termsFields?: ReadonlyArray<string>;
|
|
15451
|
-
// missingFields?: ReadonlyArray<string>;
|
|
15452
|
-
// gqlFilter?: FilterSet;
|
|
15453
|
-
// accessibility?: Accessibility;
|
|
15454
|
-
// }
|
|
15455
|
-
//
|
|
15456
|
-
// interface QueryCountsParams {
|
|
15457
|
-
// type: string;
|
|
15458
|
-
// filters: FilterSet;
|
|
15459
|
-
// accessibility?: Accessibility;
|
|
15460
|
-
// }
|
|
15461
|
-
//
|
|
15462
|
-
// interface QueryForFileCountSummaryParams {
|
|
15463
|
-
// type: string;
|
|
15464
|
-
// field: string;
|
|
15465
|
-
// filters: FilterSet;
|
|
15466
|
-
// accessibility?: Accessibility;
|
|
15467
|
-
// }
|
|
15468
|
-
//
|
|
15469
|
-
// /**
|
|
15470
|
-
// * The main endpoint used in templating Exploration page queries.
|
|
15471
|
-
// * Includes table, filter and aggregation query types and leverages guppyApi defined in ./gupplApi.ts
|
|
15472
|
-
// * Query templates support filters where applicable
|
|
15473
|
-
// *
|
|
15474
|
-
// * @param endpoints - Defines endpoints used in Exploration page:
|
|
15475
|
-
// * @param getAllFieldsForType - A mapping query that returns all property key names vertex types specified.
|
|
15476
|
-
// * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#mapping-query
|
|
15477
|
-
// * @param getAccessibleData - An aggregation histogram counts query that filters based on access type
|
|
15478
|
-
// * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#accessibility-argument-for-regular-tier-access-level
|
|
15479
|
-
// * @param getRawDataAndTotalCounts - Queries both _totalCount for selected vertex types and
|
|
15480
|
-
// * tabular results containing the raw data in the rows of selected vertex types
|
|
15481
|
-
// * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#1-total-count-aggregation
|
|
15482
|
-
// * @param getAggs - An aggregated histogram counts query which outputs vertex property frequencies
|
|
15483
|
-
// * @param getSubAggs - TODO: not sure what this one does. Looks like nested aggregation
|
|
15484
|
-
// * @param getCounts - Returns total counts of a vertex type
|
|
15485
|
-
// * @returns: A guppy API endpoint for templating queryable data displayed on the exploration page
|
|
15486
|
-
// */
|
|
15487
|
-
// const explorerApi = cohortDiscoveryApi.injectEndpoints({
|
|
15488
|
-
// endpoints: (builder) => ({
|
|
15489
|
-
// getAllFieldsForType: builder.query({
|
|
15490
|
-
// query: (type: { type: string }) => ({
|
|
15491
|
-
// query: `{ _mapping ${type} } }`,
|
|
15492
|
-
// }),
|
|
15493
|
-
// transformResponse: (response: Record<string, any>, _meta, params) => {
|
|
15494
|
-
// return response[params.type];
|
|
15495
|
-
// },
|
|
15496
|
-
// }),
|
|
15497
|
-
// getAccessibleData: builder.query({
|
|
15498
|
-
// query: ({ type, fields, accessType }: AccessibleDataSliceParams) => {
|
|
15499
|
-
// const fieldParts = fields.map(
|
|
15500
|
-
// (field) => `${field} { histogram { key count } }`,
|
|
15501
|
-
// );
|
|
15502
|
-
// },
|
|
15503
|
-
// }),
|
|
15504
|
-
// getRawDataAndTotalCounts: builder.query({
|
|
15505
|
-
// query: ({
|
|
15506
|
-
// type,
|
|
15507
|
-
// fields,
|
|
15508
|
-
// filters,
|
|
15509
|
-
// sort,
|
|
15510
|
-
// offset = 0,
|
|
15511
|
-
// size = 20,
|
|
15512
|
-
// accessibility = Accessibility.ALL,
|
|
15513
|
-
// format = undefined,
|
|
15514
|
-
// }: RawDataAndTotalCountsParams) => {
|
|
15515
|
-
// const gqlFilter = convertFilterSetToGqlFilter(filters);
|
|
15516
|
-
// const params = [
|
|
15517
|
-
// ...(sort ? ['$sort: JSON'] : []),
|
|
15518
|
-
// ...(gqlFilter ? ['$filter: JSON'] : []),
|
|
15519
|
-
// ...(format ? ['$format: Format'] : []),
|
|
15520
|
-
// ].join(',');
|
|
15521
|
-
// const queryLine = `query getRawDataAndTotalCounts (${params}) {`;
|
|
15522
|
-
//
|
|
15523
|
-
// const dataParams = [
|
|
15524
|
-
// ...(format ? ['format: $format'] : []),
|
|
15525
|
-
// ...(sort ? ['sort: $sort'] : []),
|
|
15526
|
-
// ...(gqlFilter ? ['filter: $filter'] : []),
|
|
15527
|
-
// ].join(',');
|
|
15528
|
-
// const dataTypeLine = `${type} (accessibility: ${accessibility}, offset: ${offset}, first: ${size},
|
|
15529
|
-
// ${dataParams}) {`;
|
|
15530
|
-
//
|
|
15531
|
-
// const typeAggsLine = `${type} (${
|
|
15532
|
-
// gqlFilter && 'filter: $filter,'
|
|
15533
|
-
// } accessibility: ${accessibility}) {`;
|
|
15534
|
-
//
|
|
15535
|
-
// const processedFields = fields.map((field) =>
|
|
15536
|
-
// rawDataQueryStrForEachField(field),
|
|
15537
|
-
// );
|
|
15538
|
-
//
|
|
15539
|
-
// const query = `${queryLine}
|
|
15540
|
-
// ${dataTypeLine}
|
|
15541
|
-
// ${processedFields.join(' ')}
|
|
15542
|
-
// }
|
|
15543
|
-
// _aggregation {
|
|
15544
|
-
// ${typeAggsLine}
|
|
15545
|
-
// _totalCount
|
|
15546
|
-
// }
|
|
15547
|
-
// }
|
|
15548
|
-
// }`;
|
|
15549
|
-
// const variables = {
|
|
15550
|
-
// ...(sort && { sort }),
|
|
15551
|
-
// ...(gqlFilter && { filter: gqlFilter }),
|
|
15552
|
-
// ...(format && { format }),
|
|
15553
|
-
// };
|
|
15554
|
-
// return { query, variables };
|
|
15555
|
-
// },
|
|
15556
|
-
// }),
|
|
15557
|
-
// getAggs: builder.query<AggregationsData, QueryAggsParams>({
|
|
15558
|
-
// query: ({
|
|
15559
|
-
// type,
|
|
15560
|
-
// fields,
|
|
15561
|
-
// filters,
|
|
15562
|
-
// accessibility = Accessibility.ALL,
|
|
15563
|
-
// }: QueryAggsParams) => {
|
|
15564
|
-
// const queryStart = isFilterEmpty(filters)
|
|
15565
|
-
// ? `
|
|
15566
|
-
// query getAggs {
|
|
15567
|
-
// _aggregation {
|
|
15568
|
-
// ${type} (accessibility: ${accessibility}) {`
|
|
15569
|
-
// : `query getAggs ($filter: JSON) {
|
|
15570
|
-
// _aggregation {
|
|
15571
|
-
// ${type} (filter: $filter, filterSelf: false, accessibility: ${accessibility}) {`;
|
|
15572
|
-
// const query = `${queryStart}
|
|
15573
|
-
// ${fields.map((field: string) =>
|
|
15574
|
-
// histogramQueryStrForEachField(field),
|
|
15575
|
-
// )}
|
|
15576
|
-
// }
|
|
15577
|
-
// }
|
|
15578
|
-
// }`;
|
|
15579
|
-
// const queryBody: GraphQLQuery = {
|
|
15580
|
-
// query: query,
|
|
15581
|
-
// variables: { filter: convertFilterSetToGqlFilter(filters) },
|
|
15582
|
-
// };
|
|
15583
|
-
// return queryBody;
|
|
15584
|
-
// },
|
|
15585
|
-
// }),
|
|
15586
|
-
// getAggsNoFilterSelf: builder.query<AggregationsData, QueryAggsParams>({
|
|
15587
|
-
// query: ({
|
|
15588
|
-
// type,
|
|
15589
|
-
// fields,
|
|
15590
|
-
// filters,
|
|
15591
|
-
// accessibility = Accessibility.ALL,
|
|
15592
|
-
// }: QueryAggsParams) => {
|
|
15593
|
-
// const queryStart = isFilterEmpty(filters)
|
|
15594
|
-
// ? `
|
|
15595
|
-
// query getAggs {
|
|
15596
|
-
// _aggregation {
|
|
15597
|
-
// ${type} (accessibility: ${accessibility}) {`
|
|
15598
|
-
// : `query getAggs ($filter: JSON) {
|
|
15599
|
-
// _aggregation {
|
|
15600
|
-
// ${type} (filter: $filter, filterSelf: true, accessibility: ${accessibility}) {`;
|
|
15601
|
-
// const query = `${queryStart}
|
|
15602
|
-
// ${fields.map((field: string) =>
|
|
15603
|
-
// histogramQueryStrForEachField(field),
|
|
15604
|
-
// )}
|
|
15605
|
-
// }
|
|
15606
|
-
// }
|
|
15607
|
-
// }`;
|
|
15608
|
-
// const queryBody: GraphQLQuery = {
|
|
15609
|
-
// query: query,
|
|
15610
|
-
// variables: { filter: convertFilterSetToGqlFilter(filters) },
|
|
15611
|
-
// };
|
|
15612
|
-
// return queryBody;
|
|
15613
|
-
// },
|
|
15614
|
-
// }),
|
|
15615
|
-
// getSubAggs: builder.query<AggregationsData, QueryForSubAggsParams>({
|
|
15616
|
-
// query: ({
|
|
15617
|
-
// type,
|
|
15618
|
-
// mainField,
|
|
15619
|
-
// termsFields = undefined,
|
|
15620
|
-
// missingFields = undefined,
|
|
15621
|
-
// numericAggAsText = false,
|
|
15622
|
-
// gqlFilter = undefined,
|
|
15623
|
-
// accessibility = Accessibility.ALL,
|
|
15624
|
-
// }: QueryForSubAggsParams) => {
|
|
15625
|
-
// const nestedAggFields = {
|
|
15626
|
-
// termsFields: termsFields,
|
|
15627
|
-
// missingFields: missingFields,
|
|
15628
|
-
// };
|
|
15629
|
-
//
|
|
15630
|
-
// const query = `query getSubAggs ( ${
|
|
15631
|
-
// gqlFilter ?? '$filter: JSON,'
|
|
15632
|
-
// } $nestedAggFields: JSON) {
|
|
15633
|
-
// _aggregation {
|
|
15634
|
-
// ${type} ( ${
|
|
15635
|
-
// gqlFilter ?? 'filter: $filter, filterSelf: false,'
|
|
15636
|
-
// } nestedAggFields: $nestedAggFields, accessibility: ${accessibility}) {
|
|
15637
|
-
// ${nestedHistogramQueryStrForEachField(mainField, numericAggAsText)}
|
|
15638
|
-
// }`;
|
|
15639
|
-
//
|
|
15640
|
-
// return {
|
|
15641
|
-
// query: query,
|
|
15642
|
-
// variables: {
|
|
15643
|
-
// ...(gqlFilter && {
|
|
15644
|
-
// filter: convertFilterSetToGqlFilter(gqlFilter),
|
|
15645
|
-
// }),
|
|
15646
|
-
// nestedAggFields: nestedAggFields,
|
|
15647
|
-
// },
|
|
15648
|
-
// };
|
|
15649
|
-
// },
|
|
15650
|
-
// }),
|
|
15651
|
-
// getCounts: builder.query<number, QueryCountsParams>({
|
|
15652
|
-
// query: ({
|
|
15653
|
-
// type,
|
|
15654
|
-
// filters,
|
|
15655
|
-
// accessibility = Accessibility.ALL,
|
|
15656
|
-
// }: QueryCountsParams) => {
|
|
15657
|
-
// const gqlFilters = convertFilterSetToGqlFilter(filters);
|
|
15658
|
-
// const queryLine = `query totalCounts ${
|
|
15659
|
-
// gqlFilters ? '($filter: JSON)' : ''
|
|
15660
|
-
// }{`;
|
|
15661
|
-
// const typeAggsLine = `${type} ${
|
|
15662
|
-
// gqlFilters ? '(filter: $filter, ' : '('
|
|
15663
|
-
// } accessibility: ${accessibility}) {`;
|
|
15664
|
-
//
|
|
15665
|
-
// const query = `${queryLine} _aggregation {
|
|
15666
|
-
// ${typeAggsLine}
|
|
15667
|
-
// _totalCount
|
|
15668
|
-
// }
|
|
15669
|
-
// }
|
|
15670
|
-
// }`;
|
|
15671
|
-
// return {
|
|
15672
|
-
// query: query,
|
|
15673
|
-
// variables: {
|
|
15674
|
-
// ...(gqlFilters && {
|
|
15675
|
-
// filter: gqlFilters,
|
|
15676
|
-
// }),
|
|
15677
|
-
// },
|
|
15678
|
-
// };
|
|
15679
|
-
// },
|
|
15680
|
-
// }),
|
|
15681
|
-
// getFieldCountSummary: builder.query<
|
|
15682
|
-
// Record<string, any>,
|
|
15683
|
-
// QueryForFileCountSummaryParams
|
|
15684
|
-
// >({
|
|
15685
|
-
// query: ({
|
|
15686
|
-
// type,
|
|
15687
|
-
// field,
|
|
15688
|
-
// filters,
|
|
15689
|
-
// accessibility = Accessibility.ALL,
|
|
15690
|
-
// }: QueryForFileCountSummaryParams) => {
|
|
15691
|
-
// const gqlFilters = convertFilterSetToGqlFilter(filters);
|
|
15692
|
-
// const query = `query summary ($filter: JSON) {
|
|
15693
|
-
// _aggregation {
|
|
15694
|
-
// ${type} (filter: $filter, accessibility: ${accessibility}) {
|
|
15695
|
-
// ${field} {
|
|
15696
|
-
// histogram {
|
|
15697
|
-
// sum,
|
|
15698
|
-
// }
|
|
15699
|
-
// }
|
|
15700
|
-
// }
|
|
15701
|
-
// }
|
|
15702
|
-
// }`;
|
|
15703
|
-
// return {
|
|
15704
|
-
// query: query,
|
|
15705
|
-
// variables: {
|
|
15706
|
-
// ...(gqlFilters && {
|
|
15707
|
-
// filter: gqlFilters,
|
|
15708
|
-
// }),
|
|
15709
|
-
// },
|
|
15710
|
-
// };
|
|
15711
|
-
// },
|
|
15712
|
-
// }),
|
|
15713
|
-
// getFieldsForIndex: builder.query({
|
|
15714
|
-
// query: (index: string) => {
|
|
15715
|
-
// return {
|
|
15716
|
-
// query: `{
|
|
15717
|
-
// _mapping { ${index} }
|
|
15718
|
-
// }`,
|
|
15719
|
-
// };
|
|
15720
|
-
// },
|
|
15721
|
-
// }),
|
|
15722
|
-
// }),
|
|
15723
|
-
// });
|
|
15724
|
-
//
|
|
15725
|
-
// // query for aggregate data
|
|
15726
|
-
// // convert the function below to typescript
|
|
15727
|
-
//
|
|
15728
|
-
// const histogramQueryStrForEachField = (field: string): string => {
|
|
15729
|
-
// const splittedFieldArray = field.split('.');
|
|
15730
|
-
// const splittedField = splittedFieldArray.shift();
|
|
15731
|
-
// if (splittedFieldArray.length === 0) {
|
|
15732
|
-
// return `
|
|
15733
|
-
// ${splittedField} {
|
|
15734
|
-
// histogram {
|
|
15735
|
-
// key
|
|
15736
|
-
// count
|
|
15737
|
-
// }
|
|
15738
|
-
// }`;
|
|
15739
|
-
// }
|
|
15740
|
-
// return `
|
|
15741
|
-
// ${splittedField} {
|
|
15742
|
-
// ${histogramQueryStrForEachField(splittedFieldArray.join('.'))}
|
|
15743
|
-
// }`;
|
|
15744
|
-
// };
|
|
15745
|
-
//
|
|
15746
|
-
// const nestedHistogramQueryStrForEachField = (
|
|
15747
|
-
// mainField: string,
|
|
15748
|
-
// numericAggAsText: boolean,
|
|
15749
|
-
// ) => `
|
|
15750
|
-
// ${mainField} {
|
|
15751
|
-
// ${numericAggAsText ? 'asTextHistogram' : 'histogram'} {
|
|
15752
|
-
// key
|
|
15753
|
-
// count
|
|
15754
|
-
// missingFields {
|
|
15755
|
-
// field
|
|
15756
|
-
// count
|
|
15757
|
-
// }
|
|
15758
|
-
// termsFields {
|
|
15759
|
-
// field
|
|
15760
|
-
// count
|
|
15761
|
-
// terms {
|
|
15762
|
-
// key
|
|
15763
|
-
// count
|
|
15764
|
-
// }
|
|
15765
|
-
// }
|
|
15766
|
-
// }
|
|
15767
|
-
// }`;
|
|
15768
|
-
//
|
|
15769
|
-
// export const rawDataQueryStrForEachField = (field: string): string => {
|
|
15770
|
-
// const splitFieldArray = field.split('.');
|
|
15771
|
-
// const splitField = splitFieldArray.shift();
|
|
15772
|
-
// if (splitFieldArray.length === 0) {
|
|
15773
|
-
// return `
|
|
15774
|
-
// ${splitField}
|
|
15775
|
-
// `;
|
|
15776
|
-
// }
|
|
15777
|
-
// return `
|
|
15778
|
-
// ${splitField} {
|
|
15779
|
-
// ${rawDataQueryStrForEachField(splitFieldArray.join('.'))}
|
|
15780
|
-
// }`;
|
|
15781
|
-
// };
|
|
15782
|
-
//
|
|
15783
|
-
// export const {
|
|
15784
|
-
// useGetRawDataAndTotalCountsQuery,
|
|
15785
|
-
// useGetAccessibleDataQuery,
|
|
15786
|
-
// useGetAllFieldsForTypeQuery,
|
|
15787
|
-
// useGetAggsQuery,
|
|
15788
|
-
// useGetAggsNoFilterSelfQuery,
|
|
15789
|
-
// useLazyGetAggsQuery,
|
|
15790
|
-
// useGetSubAggsQuery,
|
|
15791
|
-
// useGetCountsQuery,
|
|
15792
|
-
// useGetFieldCountSummaryQuery,
|
|
15793
|
-
// useGetFieldsForIndexQuery,
|
|
15794
|
-
// } = explorerApi;
|
|
15567
|
+
};
|
|
15795
15568
|
|
|
15796
15569
|
const NUM_COLS = 2; // TODO: add to config
|
|
15797
15570
|
/**
|
|
@@ -16992,13 +16765,11 @@ const RequestsTable = ()=>{
|
|
|
16992
16765
|
};
|
|
16993
16766
|
|
|
16994
16767
|
const RequestsPanel = ()=>{
|
|
16995
|
-
return /*#__PURE__*/ jsxRuntime.jsx(
|
|
16996
|
-
|
|
16997
|
-
|
|
16998
|
-
|
|
16999
|
-
|
|
17000
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(RequestsTable, {})
|
|
17001
|
-
})
|
|
16768
|
+
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Stack, {
|
|
16769
|
+
className: "w-100 m-2",
|
|
16770
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Group, {
|
|
16771
|
+
className: "w-100 bg-base-light p-4",
|
|
16772
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(RequestsTable, {})
|
|
17002
16773
|
})
|
|
17003
16774
|
});
|
|
17004
16775
|
};
|
|
@@ -17054,79 +16825,81 @@ const CohortDiscovery = (config)=>{
|
|
|
17054
16825
|
const indexResources = extractIndexResourceFromConfiguration(config);
|
|
17055
16826
|
useAppDispatch(loadCohortsFromStorage());
|
|
17056
16827
|
return /*#__PURE__*/ jsxRuntime.jsx(React.Fragment, {
|
|
17057
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
17058
|
-
|
|
17059
|
-
|
|
17060
|
-
|
|
17061
|
-
|
|
17062
|
-
children: [
|
|
17063
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Title, {
|
|
17064
|
-
order: 3,
|
|
17065
|
-
className: "absolute top-6 left-[154px]",
|
|
17066
|
-
children: "Cohort Discovery"
|
|
16828
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(ProtectedContent, {
|
|
16829
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(react$1.PersistGate, {
|
|
16830
|
+
persistor: persistor,
|
|
16831
|
+
loading: /*#__PURE__*/ jsxRuntime.jsx(core$1.Loader, {
|
|
16832
|
+
variant: "dots"
|
|
17067
16833
|
}),
|
|
17068
|
-
|
|
17069
|
-
|
|
17070
|
-
|
|
17071
|
-
|
|
17072
|
-
|
|
17073
|
-
|
|
17074
|
-
|
|
17075
|
-
|
|
17076
|
-
|
|
17077
|
-
|
|
17078
|
-
|
|
17079
|
-
|
|
17080
|
-
|
|
17081
|
-
|
|
17082
|
-
|
|
17083
|
-
|
|
17084
|
-
|
|
17085
|
-
|
|
17086
|
-
|
|
17087
|
-
|
|
17088
|
-
|
|
17089
|
-
|
|
17090
|
-
|
|
17091
|
-
|
|
17092
|
-
|
|
17093
|
-
|
|
17094
|
-
|
|
17095
|
-
|
|
17096
|
-
|
|
17097
|
-
|
|
17098
|
-
|
|
17099
|
-
|
|
17100
|
-
|
|
17101
|
-
|
|
17102
|
-
|
|
17103
|
-
|
|
17104
|
-
|
|
17105
|
-
|
|
17106
|
-
|
|
17107
|
-
|
|
17108
|
-
|
|
17109
|
-
|
|
17110
|
-
|
|
17111
|
-
|
|
17112
|
-
|
|
17113
|
-
|
|
17114
|
-
|
|
17115
|
-
|
|
17116
|
-
|
|
17117
|
-
|
|
17118
|
-
|
|
17119
|
-
|
|
17120
|
-
|
|
16834
|
+
children: [
|
|
16835
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Title, {
|
|
16836
|
+
order: 3,
|
|
16837
|
+
className: "absolute top-6 left-[154px]",
|
|
16838
|
+
children: "Cohort Discovery"
|
|
16839
|
+
}),
|
|
16840
|
+
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Tabs, {
|
|
16841
|
+
keepMounted: false,
|
|
16842
|
+
defaultValue: "build",
|
|
16843
|
+
orientation: "vertical",
|
|
16844
|
+
classNames: {
|
|
16845
|
+
root: 'w-full h-full',
|
|
16846
|
+
list: 'bg-base-light before:content-none pt-20',
|
|
16847
|
+
tab: 'border-0 border-l-4 rounded-none data-[active=true]:border-accent-warm data-[active=true]:bg-base-max text-center',
|
|
16848
|
+
tabLabel: 'w-full',
|
|
16849
|
+
panel: 'pt-16'
|
|
16850
|
+
},
|
|
16851
|
+
children: [
|
|
16852
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tabs.List, {
|
|
16853
|
+
children: Object.keys(config.leftNav).map((key)=>{
|
|
16854
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Tabs.Tab, {
|
|
16855
|
+
value: key,
|
|
16856
|
+
children: [
|
|
16857
|
+
/*#__PURE__*/ jsxRuntime.jsx(Image, {
|
|
16858
|
+
src: config.leftNav[key].image,
|
|
16859
|
+
alt: config.leftNav[key].imageAlt,
|
|
16860
|
+
width: 40,
|
|
16861
|
+
height: 40,
|
|
16862
|
+
className: "inline-block mb-1"
|
|
16863
|
+
}),
|
|
16864
|
+
/*#__PURE__*/ jsxRuntime.jsx("strong", {
|
|
16865
|
+
className: "block",
|
|
16866
|
+
children: config.leftNav[key].title
|
|
16867
|
+
})
|
|
16868
|
+
]
|
|
16869
|
+
}, key);
|
|
16870
|
+
})
|
|
16871
|
+
}),
|
|
16872
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tabs.Panel, {
|
|
16873
|
+
value: "build",
|
|
16874
|
+
children: config.dataIndexes.length === 1 ? /*#__PURE__*/ jsxRuntime.jsx(IndexPanel, {
|
|
16875
|
+
dataConfig: config.dataIndexes[0].dataConfig,
|
|
16876
|
+
tabTitle: config.dataIndexes[0].tabTitle,
|
|
16877
|
+
tabs: config.dataIndexes[0].tabs,
|
|
16878
|
+
emptySelection: config.emptySelection,
|
|
16879
|
+
resourceField: config.dataIndexes[0].resourceField,
|
|
16880
|
+
numColumns: config.dataIndexes[0].numColumns ?? 2,
|
|
16881
|
+
indexResources: indexResources,
|
|
16882
|
+
remoteSupportService: config.remoteSupportService
|
|
16883
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(TabbedIndex, {
|
|
16884
|
+
config: config,
|
|
16885
|
+
indexResources: indexResources
|
|
16886
|
+
})
|
|
16887
|
+
}),
|
|
16888
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tabs.Panel, {
|
|
16889
|
+
value: "saved",
|
|
16890
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(SavedCohortsPanel, {
|
|
16891
|
+
indexResources: indexResources,
|
|
16892
|
+
remoteSupportService: config.remoteSupportService
|
|
16893
|
+
})
|
|
16894
|
+
}),
|
|
16895
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tabs.Panel, {
|
|
16896
|
+
value: "request",
|
|
16897
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(RequestsPanel, {})
|
|
17121
16898
|
})
|
|
17122
|
-
|
|
17123
|
-
|
|
17124
|
-
|
|
17125
|
-
|
|
17126
|
-
})
|
|
17127
|
-
]
|
|
17128
|
-
})
|
|
17129
|
-
]
|
|
16899
|
+
]
|
|
16900
|
+
})
|
|
16901
|
+
]
|
|
16902
|
+
})
|
|
17130
16903
|
})
|
|
17131
16904
|
});
|
|
17132
16905
|
};
|
|
@@ -19592,7 +19365,7 @@ const DiscoveryPage = ({ headerProps, footerProps, discoveryConfig })=>{
|
|
|
19592
19365
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
19593
19366
|
headerProps,
|
|
19594
19367
|
footerProps,
|
|
19595
|
-
|
|
19368
|
+
headerMetadata: {
|
|
19596
19369
|
title: 'Gen3 Discovery Page',
|
|
19597
19370
|
content: 'Discovery Data',
|
|
19598
19371
|
key: 'gen3-discovery-page',
|
|
@@ -19648,7 +19421,7 @@ const QueryPage = ({ headerProps, footerProps, queryProps })=>{
|
|
|
19648
19421
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
19649
19422
|
headerProps,
|
|
19650
19423
|
footerProps,
|
|
19651
|
-
|
|
19424
|
+
headerMetadata: {
|
|
19652
19425
|
title: 'Gen3 Query Page',
|
|
19653
19426
|
content: 'Query page',
|
|
19654
19427
|
key: 'gen3-query-page',
|
|
@@ -19821,7 +19594,7 @@ const LandingPage = ({ headerProps, footerProps, landingPage })=>{
|
|
|
19821
19594
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
19822
19595
|
footerProps,
|
|
19823
19596
|
headerProps,
|
|
19824
|
-
|
|
19597
|
+
headerMetadata: {
|
|
19825
19598
|
title: 'Gen3 Home Page',
|
|
19826
19599
|
content: 'Home page',
|
|
19827
19600
|
key: 'gen3-home-page',
|
|
@@ -19862,7 +19635,7 @@ const ExplorerPage = ({ headerProps, footerProps, explorerConfig, headerMetadata
|
|
|
19862
19635
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
19863
19636
|
headerProps,
|
|
19864
19637
|
footerProps,
|
|
19865
|
-
|
|
19638
|
+
headerMetadata: {
|
|
19866
19639
|
title: 'Gen3 Explorer Page',
|
|
19867
19640
|
content: 'Explorer Page',
|
|
19868
19641
|
key: 'gen3-explorer-page',
|
|
@@ -19884,6 +19657,11 @@ var GuppyDataAccessMode = /*#__PURE__*/ function(GuppyDataAccessMode) {
|
|
|
19884
19657
|
return GuppyDataAccessMode;
|
|
19885
19658
|
}({});
|
|
19886
19659
|
|
|
19660
|
+
const DefaultHeaderMetadata = {
|
|
19661
|
+
title: 'Gen3 Explorer Page',
|
|
19662
|
+
content: 'Explorer Page',
|
|
19663
|
+
key: 'gen3-explorer-page'
|
|
19664
|
+
};
|
|
19887
19665
|
const GetSharedFieldMapping = async (cohortBuilderConfiguration)=>{
|
|
19888
19666
|
let sharedFiltersMap = null;
|
|
19889
19667
|
if (cohortBuilderConfiguration?.sharedFilters) {
|
|
@@ -19940,9 +19718,7 @@ const ExplorerPageGetServerSideProps = async ()=>{
|
|
|
19940
19718
|
props: {
|
|
19941
19719
|
...await getNavPageLayoutPropsFromConfig(),
|
|
19942
19720
|
explorerConfig: cohortBuilderConfiguration,
|
|
19943
|
-
headerMetadata:
|
|
19944
|
-
...cohortBuilderConfiguration?.headerMetadata
|
|
19945
|
-
}
|
|
19721
|
+
headerMetadata: cohortBuilderConfiguration?.headerMetadata ? cohortBuilderConfiguration.headerMetadata : DefaultHeaderMetadata
|
|
19946
19722
|
}
|
|
19947
19723
|
};
|
|
19948
19724
|
}
|
|
@@ -19953,7 +19729,7 @@ const ExplorerPageGetServerSideProps = async ()=>{
|
|
|
19953
19729
|
sharedFiltersMap: sharedFiltersMap,
|
|
19954
19730
|
tabsLayout: cohortBuilderConfiguration?.tabsLayout ?? 'left',
|
|
19955
19731
|
explorerConfig: cohortBuilderConfiguration.explorerConfig,
|
|
19956
|
-
headerMetadata: cohortBuilderConfiguration.headerMetadata,
|
|
19732
|
+
// headerMetadata: cohortBuilderConfiguration.headerMetadata,
|
|
19957
19733
|
accessControl: {
|
|
19958
19734
|
...DefaultAccessControlConfiguration,
|
|
19959
19735
|
...cohortBuilderConfiguration.accessControl ?? {}
|
|
@@ -19983,9 +19759,7 @@ const ExplorerPageGetServerSidePropsForConfigId = async (context)=>{
|
|
|
19983
19759
|
props: {
|
|
19984
19760
|
...await getNavPageLayoutPropsFromConfig(),
|
|
19985
19761
|
explorerConfig: cohortBuilderConfiguration,
|
|
19986
|
-
headerMetadata:
|
|
19987
|
-
...cohortBuilderConfiguration?.headerMetadata
|
|
19988
|
-
}
|
|
19762
|
+
headerMetadata: cohortBuilderConfiguration?.headerMetadata ? cohortBuilderConfiguration.headerMetadata : DefaultHeaderMetadata
|
|
19989
19763
|
}
|
|
19990
19764
|
};
|
|
19991
19765
|
}
|
|
@@ -19996,7 +19770,7 @@ const ExplorerPageGetServerSidePropsForConfigId = async (context)=>{
|
|
|
19996
19770
|
sharedFiltersMap: sharedFiltersMap,
|
|
19997
19771
|
tabsLayout: cohortBuilderConfiguration?.tabsLayout ?? 'left',
|
|
19998
19772
|
explorerConfig: cohortBuilderConfiguration.explorerConfig,
|
|
19999
|
-
headerMetadata: cohortBuilderConfiguration.headerMetadata,
|
|
19773
|
+
// headerMetadata: { ...(cohortBuilderConfiguration?.headerMetadata ? cohortBuilderConfiguration.headerMetadata : {}) },
|
|
20000
19774
|
accessControl: {
|
|
20001
19775
|
...DefaultAccessControlConfiguration,
|
|
20002
19776
|
...cohortBuilderConfiguration.accessControl ?? {}
|
|
@@ -20356,7 +20130,7 @@ const ColorThemePage = ({ headerProps, footerProps })=>{
|
|
|
20356
20130
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
20357
20131
|
headerProps,
|
|
20358
20132
|
footerProps,
|
|
20359
|
-
|
|
20133
|
+
headerMetadata: {
|
|
20360
20134
|
title: 'Gen3 Theme Page',
|
|
20361
20135
|
content: 'Theme page',
|
|
20362
20136
|
key: 'gen3-theme-page'
|
|
@@ -20934,7 +20708,7 @@ const ProfilePage = ({ headerProps, footerProps, profileConfig })=>{
|
|
|
20934
20708
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
20935
20709
|
headerProps,
|
|
20936
20710
|
footerProps,
|
|
20937
|
-
|
|
20711
|
+
headerMetadata: {
|
|
20938
20712
|
title: 'Gen3 Profile Page',
|
|
20939
20713
|
content: 'Profile page',
|
|
20940
20714
|
key: 'gen3-profile-page',
|
|
@@ -20962,7 +20736,7 @@ const LoginPage = ({ headerProps, footerProps, loginConfig })=>{
|
|
|
20962
20736
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
20963
20737
|
headerProps,
|
|
20964
20738
|
footerProps,
|
|
20965
|
-
|
|
20739
|
+
headerMetadata: {
|
|
20966
20740
|
title: 'Gen3 Login Page',
|
|
20967
20741
|
content: 'Login page',
|
|
20968
20742
|
key: 'gen3-login-page',
|
|
@@ -20993,7 +20767,7 @@ const DictionaryPage = ({ headerProps, footerProps, config })=>{
|
|
|
20993
20767
|
mainProps: {
|
|
20994
20768
|
fixed: true
|
|
20995
20769
|
},
|
|
20996
|
-
|
|
20770
|
+
headerMetadata: {
|
|
20997
20771
|
title: 'Gen3 DataDictionary Page',
|
|
20998
20772
|
content: 'Data Dictionary',
|
|
20999
20773
|
key: 'gen3-data-dictionary-page',
|
|
@@ -21718,7 +21492,7 @@ const AuthzPage = ({ headerProps, footerProps, authz })=>{
|
|
|
21718
21492
|
headerProps,
|
|
21719
21493
|
footerProps,
|
|
21720
21494
|
headerProps: headerProps,
|
|
21721
|
-
|
|
21495
|
+
headerMetadata: {
|
|
21722
21496
|
title: 'Gen3 Authz Editor Page',
|
|
21723
21497
|
content: 'Authz Editor page',
|
|
21724
21498
|
key: 'gen3-authz-editor-page'
|
|
@@ -22045,7 +21819,7 @@ const SubmissionPage = ({ submissionConfig, headerProps, footerProps })=>{
|
|
|
22045
21819
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
22046
21820
|
footerProps: footerProps,
|
|
22047
21821
|
headerProps: headerProps,
|
|
22048
|
-
|
|
21822
|
+
headerMetadata: {
|
|
22049
21823
|
title: 'Gen3 Submission Page',
|
|
22050
21824
|
content: 'Submission page',
|
|
22051
21825
|
key: 'gen3-submission-page'
|
|
@@ -22080,7 +21854,7 @@ const WorkspacePage = ({ headerProps, footerProps, workspaceProps })=>{
|
|
|
22080
21854
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
22081
21855
|
headerProps,
|
|
22082
21856
|
footerProps,
|
|
22083
|
-
|
|
21857
|
+
headerMetadata: {
|
|
22084
21858
|
title: 'Gen3 Workspace Page',
|
|
22085
21859
|
content: 'Workspace page',
|
|
22086
21860
|
key: 'gen3-workspace-page',
|
|
@@ -22097,7 +21871,7 @@ const WorkspaceNoAccessPage = ({ headerProps, footerProps })=>{
|
|
|
22097
21871
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
22098
21872
|
headerProps,
|
|
22099
21873
|
footerProps,
|
|
22100
|
-
|
|
21874
|
+
headerMetadata: {
|
|
22101
21875
|
title: 'Gen3 Workspace No Access Page',
|
|
22102
21876
|
content: 'Workspace no access page',
|
|
22103
21877
|
key: 'gen3-workspace-no-access-page'
|
|
@@ -22161,7 +21935,7 @@ const AnalysisPage = ({ headerProps, footerProps, tools, sections, classNames })
|
|
|
22161
21935
|
return /*#__PURE__*/ jsxRuntime.jsxs(NavPageLayout, {
|
|
22162
21936
|
headerProps,
|
|
22163
21937
|
footerProps,
|
|
22164
|
-
|
|
21938
|
+
headerMetadata: {
|
|
22165
21939
|
title: 'Gen3 Analysis Center',
|
|
22166
21940
|
content: 'Analysis Center',
|
|
22167
21941
|
key: 'gen3-analysis-center'
|
|
@@ -22811,7 +22585,7 @@ const AnalysisEditorPage = ({ headerProps, footerProps })=>{
|
|
|
22811
22585
|
headerProps,
|
|
22812
22586
|
footerProps,
|
|
22813
22587
|
headerProps: headerProps,
|
|
22814
|
-
|
|
22588
|
+
headerMetadata: {
|
|
22815
22589
|
title: 'Gen3 Analysis Editor Page',
|
|
22816
22590
|
content: 'Analysis Editor page',
|
|
22817
22591
|
key: 'gen3-analysis-editor-page'
|
|
@@ -22844,7 +22618,7 @@ const AISearchPage = ({ headerProps, footerProps })=>{
|
|
|
22844
22618
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
22845
22619
|
headerProps,
|
|
22846
22620
|
footerProps,
|
|
22847
|
-
|
|
22621
|
+
headerMetadata: {
|
|
22848
22622
|
title: 'Gen3 AI Search Page',
|
|
22849
22623
|
content: 'AI Search',
|
|
22850
22624
|
key: 'gen3-ai-search-page'
|
|
@@ -22874,7 +22648,7 @@ const AISearchPageGetServerSideProps = async ()=>{
|
|
|
22874
22648
|
navigation: {}
|
|
22875
22649
|
},
|
|
22876
22650
|
footerProps: {},
|
|
22877
|
-
|
|
22651
|
+
headerMetadata: {
|
|
22878
22652
|
title: 'Gen3 AI Search Page',
|
|
22879
22653
|
content: 'AI Search',
|
|
22880
22654
|
key: 'gen3-ai-search-page'
|
|
@@ -22889,7 +22663,7 @@ const NotebookLitePage = ({ headerProps, footerProps })=>{
|
|
|
22889
22663
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
22890
22664
|
footerProps,
|
|
22891
22665
|
headerProps,
|
|
22892
|
-
|
|
22666
|
+
headerMetadata: {
|
|
22893
22667
|
title: 'Gen3 Notebooks Lite Page',
|
|
22894
22668
|
content: 'Notebooks Lite',
|
|
22895
22669
|
key: 'gen3-notebooks-lite-page'
|
|
@@ -24954,7 +24728,7 @@ const DataLibraryPage = ({ headerProps, footerProps, config })=>{
|
|
|
24954
24728
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
24955
24729
|
headerProps,
|
|
24956
24730
|
footerProps,
|
|
24957
|
-
|
|
24731
|
+
headerMetadata: {
|
|
24958
24732
|
title: 'Gen3 DataLibrary Page',
|
|
24959
24733
|
content: 'DataLibrary Data',
|
|
24960
24734
|
key: 'gen3-data-library-page'
|
|
@@ -25246,7 +25020,7 @@ const CrosswalkPage = ({ headerProps, footerProps, config })=>{
|
|
|
25246
25020
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
25247
25021
|
headerProps,
|
|
25248
25022
|
footerProps,
|
|
25249
|
-
|
|
25023
|
+
headerMetadata: {
|
|
25250
25024
|
title: 'Gen3 Crosswalk Page',
|
|
25251
25025
|
content: 'Crosswalk Data',
|
|
25252
25026
|
key: 'gen3-crosswalk-page',
|
|
@@ -25297,7 +25071,7 @@ const TabbedCohortBuilderPage = ({ headerProps, footerProps, configuration })=>{
|
|
|
25297
25071
|
return /*#__PURE__*/ jsxRuntime.jsx(NavPageLayout, {
|
|
25298
25072
|
headerProps,
|
|
25299
25073
|
footerProps,
|
|
25300
|
-
|
|
25074
|
+
headerMetadata: {
|
|
25301
25075
|
title: 'Gen3 Tabbed Cohort Builder Page',
|
|
25302
25076
|
content: 'Tabbed Cohort Builder Page',
|
|
25303
25077
|
key: 'gen3-tabbed-cohort-builder-page'
|
|
@@ -25663,6 +25437,7 @@ async function analysisApiCohortDiscovery(req, res) {
|
|
|
25663
25437
|
const redactedData = core.roundHistogramResponse(data, COHORT_DISCOVERY_LIMIT);
|
|
25664
25438
|
res.status(200).json(redactedData);
|
|
25665
25439
|
} catch (error) {
|
|
25440
|
+
console.error('CohortDiscovery API', error);
|
|
25666
25441
|
if (error instanceof core.HTTPError) res.status(error.status).json({
|
|
25667
25442
|
error: 'HTTP Error',
|
|
25668
25443
|
details: error.message
|
|
@@ -25678,6 +25453,97 @@ async function analysisApiCohortDiscovery(req, res) {
|
|
|
25678
25453
|
}
|
|
25679
25454
|
}
|
|
25680
25455
|
|
|
25456
|
+
const staticNotebookAPI = async (req, res)=>{
|
|
25457
|
+
if (req.method === 'OPTIONS') {
|
|
25458
|
+
res.status(200).json({
|
|
25459
|
+
success: true
|
|
25460
|
+
});
|
|
25461
|
+
}
|
|
25462
|
+
if (req.method === 'GET') {
|
|
25463
|
+
try {
|
|
25464
|
+
// Validate that a notebook was provided
|
|
25465
|
+
const { notebook } = req.query;
|
|
25466
|
+
if (!notebook) {
|
|
25467
|
+
return res.status(400).json({
|
|
25468
|
+
error: 'notebook parameter is required'
|
|
25469
|
+
});
|
|
25470
|
+
}
|
|
25471
|
+
let filePath = '';
|
|
25472
|
+
if (lodash.isArray(notebook)) {
|
|
25473
|
+
filePath = notebook[0];
|
|
25474
|
+
} else {
|
|
25475
|
+
filePath = notebook;
|
|
25476
|
+
}
|
|
25477
|
+
// Security: Prevent directory traversal attacks
|
|
25478
|
+
const sanitizedPath = path.normalize(filePath).replace(/^(\.\.[/\\])+/, '');
|
|
25479
|
+
// Ensure the file is within the allowed directory and has .html extension
|
|
25480
|
+
if (!sanitizedPath.endsWith('.html')) {
|
|
25481
|
+
return Response.json({
|
|
25482
|
+
error: 'Only HTML files are allowed',
|
|
25483
|
+
success: false
|
|
25484
|
+
}, {
|
|
25485
|
+
status: 400
|
|
25486
|
+
});
|
|
25487
|
+
}
|
|
25488
|
+
// Construct the full file path within the data directory
|
|
25489
|
+
const fullPath = path.join(process.cwd(), GEN3_STATIC_NOTEBOOK_DIR, sanitizedPath);
|
|
25490
|
+
// Check if a file exists and is within the data directory
|
|
25491
|
+
const dataDir = path.join(process.cwd(), `${GEN3_STATIC_NOTEBOOK_PATH}/${GEN3_STATIC_NOTEBOOK_DIR}`);
|
|
25492
|
+
if (!fullPath.startsWith(dataDir)) {
|
|
25493
|
+
return res.status(403).json({
|
|
25494
|
+
error: 'File access denied',
|
|
25495
|
+
success: false
|
|
25496
|
+
});
|
|
25497
|
+
}
|
|
25498
|
+
const rawContent = fs.readFileSync(fullPath, 'utf8');
|
|
25499
|
+
const sanitizedContent = DOMPurify.sanitize(rawContent, {
|
|
25500
|
+
ALLOWED_TAGS: [
|
|
25501
|
+
'p',
|
|
25502
|
+
'br',
|
|
25503
|
+
'strong',
|
|
25504
|
+
'em',
|
|
25505
|
+
'h1',
|
|
25506
|
+
'h2',
|
|
25507
|
+
'h3',
|
|
25508
|
+
'ul',
|
|
25509
|
+
'ol',
|
|
25510
|
+
'li',
|
|
25511
|
+
'a',
|
|
25512
|
+
'img'
|
|
25513
|
+
],
|
|
25514
|
+
ALLOWED_ATTR: [
|
|
25515
|
+
'href',
|
|
25516
|
+
'title',
|
|
25517
|
+
'src',
|
|
25518
|
+
'alt',
|
|
25519
|
+
'target'
|
|
25520
|
+
]
|
|
25521
|
+
});
|
|
25522
|
+
res.status(200).json({
|
|
25523
|
+
content: sanitizedContent,
|
|
25524
|
+
success: true,
|
|
25525
|
+
filePath: sanitizedPath
|
|
25526
|
+
});
|
|
25527
|
+
} catch (error) {
|
|
25528
|
+
if (error.code === 'ENOENT') {
|
|
25529
|
+
res.status(404).json({
|
|
25530
|
+
error: 'Notebook not found. Please check the notebook name and try again.',
|
|
25531
|
+
success: false
|
|
25532
|
+
});
|
|
25533
|
+
} else {
|
|
25534
|
+
console.error('Error reading or sanitizing HTML file:', error);
|
|
25535
|
+
res.status(500).json({
|
|
25536
|
+
error: 'Error reading or sanitizing HTML file',
|
|
25537
|
+
success: false
|
|
25538
|
+
});
|
|
25539
|
+
}
|
|
25540
|
+
}
|
|
25541
|
+
}
|
|
25542
|
+
return res.status(405).json({
|
|
25543
|
+
error: 'Only GET|OPTION requests are allowed'
|
|
25544
|
+
});
|
|
25545
|
+
};
|
|
25546
|
+
|
|
25681
25547
|
exports.AISearchPageGetServerSideProps = AISearchPageGetServerSideProps;
|
|
25682
25548
|
exports.AccessLevel = AccessLevel;
|
|
25683
25549
|
exports.ActionBar = ActionBar;
|
|
@@ -25698,6 +25564,7 @@ exports.BaseModal = BaseModal;
|
|
|
25698
25564
|
exports.Charts = Charts;
|
|
25699
25565
|
exports.CohortBuilder = CohortBuilder;
|
|
25700
25566
|
exports.CohortManager = CohortManager$1;
|
|
25567
|
+
exports.CollapsableCharts = CollapsableCharts;
|
|
25701
25568
|
exports.CollapsableSidebar = CollapsableSidebar;
|
|
25702
25569
|
exports.ColorThemePage = ColorThemePage;
|
|
25703
25570
|
exports.ColorThemePageGetServerSideProps = ColorThemePageGetServerSideProps;
|
|
@@ -25709,7 +25576,7 @@ exports.Custom404Page = Custom404Page;
|
|
|
25709
25576
|
exports.DAYS_IN_YEAR = DAYS_IN_YEAR;
|
|
25710
25577
|
exports.DEFAULT_MAXIMUM = DEFAULT_MAXIMUM;
|
|
25711
25578
|
exports.DEFAULT_MINIMUM = DEFAULT_MINIMUM;
|
|
25712
|
-
exports.DEFAULT_VISIBLE_ITEMS = DEFAULT_VISIBLE_ITEMS;
|
|
25579
|
+
exports.DEFAULT_VISIBLE_ITEMS = DEFAULT_VISIBLE_ITEMS$1;
|
|
25713
25580
|
exports.DataLibraryPage = DataLibraryPage;
|
|
25714
25581
|
exports.DataLibraryPageGetServerSideProps = DataLibraryPageGetServerSideProps;
|
|
25715
25582
|
exports.DictionaryPage = DictionaryPage;
|
|
@@ -25774,7 +25641,13 @@ exports.ReactECharts = ReactECharts;
|
|
|
25774
25641
|
exports.ResourcesFilters = ResourcesFilters;
|
|
25775
25642
|
exports.SPECIAL_CASE_FIELDS = SPECIAL_CASE_FIELDS;
|
|
25776
25643
|
exports.SessionExpiredModal = SessionExpiredModal;
|
|
25644
|
+
exports.SinglePageStudyDetailsPanel = SinglePageStudyDetailsPanel;
|
|
25645
|
+
exports.StaticNotebookIFrame = StaticNotebookIFrame;
|
|
25646
|
+
exports.StaticNotebookViewer = StaticNotebookViewer;
|
|
25647
|
+
exports.StudyDetailsPanel = StudyDetailsPanel;
|
|
25777
25648
|
exports.StudyGroup = StudyGroup;
|
|
25649
|
+
exports.StudyGroupPanel = StudyGroupPanel;
|
|
25650
|
+
exports.StudyProvider = StudyProvider;
|
|
25778
25651
|
exports.SubmissionPage = SubmissionPage;
|
|
25779
25652
|
exports.SubmissionPageGetServerSideProps = SubmissionPageGetServerSideProps;
|
|
25780
25653
|
exports.TabbedCohortBuilder = TabbedCohortBuilder;
|
|
@@ -25820,6 +25693,7 @@ exports.getTagInfo = getTagInfo;
|
|
|
25820
25693
|
exports.hasOwnProperty = hasOwnProperty;
|
|
25821
25694
|
exports.isArrayOfString = isArrayOfString;
|
|
25822
25695
|
exports.isEnumFacetResponse = isEnumFacetResponse;
|
|
25696
|
+
exports.isHeaderMetadata = isHeaderMetadata;
|
|
25823
25697
|
exports.isPropertyKey = isPropertyKey;
|
|
25824
25698
|
exports.isTextTransform = isTextTransform$1;
|
|
25825
25699
|
exports.mapFacetSortToSortType = mapFacetSortToSortType;
|
|
@@ -25841,6 +25715,7 @@ exports.removeUnion = removeUnion;
|
|
|
25841
25715
|
exports.resourcePathFromProjectID = resourcePathFromProjectID;
|
|
25842
25716
|
exports.sessionLogout = sessionLogout;
|
|
25843
25717
|
exports.sessionToken = sessionToken;
|
|
25718
|
+
exports.staticNotebookAPI = staticNotebookAPI;
|
|
25844
25719
|
exports.stripTrailingSlash = stripTrailingSlash;
|
|
25845
25720
|
exports.toDisplayName = toDisplayName;
|
|
25846
25721
|
exports.truncateString = truncateString;
|