@gen3/frontend 0.11.17 → 0.11.19
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 +627 -383
- package/dist/cjs/index.js.map +1 -1
- package/dist/dts/components/Content/TextContent.d.ts.map +1 -1
- package/dist/dts/components/Content/TextContent.js +7 -8
- package/dist/dts/components/Content/TextContent.js.map +1 -1
- package/dist/dts/components/Details/DetailsDrawer.d.ts +2 -2
- package/dist/dts/components/Details/DetailsDrawer.d.ts.map +1 -1
- package/dist/dts/components/Details/DetailsDrawer.js +2 -2
- package/dist/dts/components/Details/DetailsDrawer.js.map +1 -1
- package/dist/dts/components/Layout/TexturedSidePanel.js +1 -1
- package/dist/dts/components/Layout/TexturedSidePanel.js.map +1 -1
- package/dist/dts/components/Providers/Gen3Provider.d.ts +1 -1
- package/dist/dts/components/charts/Charts.d.ts.map +1 -1
- package/dist/dts/components/charts/Charts.js +14 -12
- package/dist/dts/components/charts/Charts.js.map +1 -1
- package/dist/dts/components/charts/utils.d.ts +16 -0
- package/dist/dts/components/charts/utils.d.ts.map +1 -1
- package/dist/dts/components/charts/utils.js +28 -1
- package/dist/dts/components/charts/utils.js.map +1 -1
- package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +4 -4
- package/dist/dts/features/CohortBuilder/CohortBuilder.d.ts +2 -1
- package/dist/dts/features/CohortBuilder/CohortBuilder.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortBuilder.js +5 -3
- package/dist/dts/features/CohortBuilder/CohortBuilder.js.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortPanel.js +24 -2
- package/dist/dts/features/CohortBuilder/CohortPanel.js.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.d.ts +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.js +58 -26
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.js.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/types.d.ts +5 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/types.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.js +63 -28
- package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.js.map +1 -1
- package/dist/dts/features/CohortBuilder/index.d.ts +1 -1
- package/dist/dts/features/CohortBuilder/index.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/index.js +1 -1
- package/dist/dts/features/CohortBuilder/index.js.map +1 -1
- package/dist/dts/features/CohortBuilder/types.d.ts +1 -0
- 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/CohortManagment/CohortManager.d.ts +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js +21 -14
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.js +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.d.ts +11 -10
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.js +9 -5
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.d.ts +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.js +21 -6
- package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js +1 -1
- package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/appApi.js +1 -1
- package/dist/dts/features/CohortDiscovery/appApi.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/constants.d.ts +2 -0
- package/dist/dts/features/CohortDiscovery/constants.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/constants.js +11 -0
- package/dist/dts/features/CohortDiscovery/constants.js.map +1 -1
- package/dist/dts/features/Dictionary/metadata/MetadataDictionary.d.ts.map +1 -1
- package/dist/dts/features/Dictionary/metadata/MetadataDictionary.js +2 -1
- package/dist/dts/features/Dictionary/metadata/MetadataDictionary.js.map +1 -1
- package/dist/dts/features/Dictionary/metadata/types.d.ts +1 -0
- package/dist/dts/features/Dictionary/metadata/types.d.ts.map +1 -1
- package/dist/dts/features/Discovery/Discovery.d.ts.map +1 -1
- package/dist/dts/features/Discovery/Discovery.js +3 -2
- package/dist/dts/features/Discovery/Discovery.js.map +1 -1
- package/dist/dts/features/Discovery/types.d.ts +1 -0
- 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/Footer/FooterColumn.d.ts.map +1 -1
- package/dist/dts/features/Navigation/Footer/FooterColumn.js +3 -0
- package/dist/dts/features/Navigation/Footer/FooterColumn.js.map +1 -1
- package/dist/dts/features/Navigation/Footer/types.d.ts +1 -0
- package/dist/dts/features/Navigation/Footer/types.d.ts.map +1 -1
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.d.ts.map +1 -1
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js +28 -1
- package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js.map +1 -1
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.d.ts.map +1 -1
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js +7 -0
- package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js.map +1 -1
- package/dist/dts/features/Study/StudyDetails/SinglePageStudyDetailsPanel.js +4 -4
- package/dist/dts/features/Study/StudyDetails/SinglePageStudyDetailsPanel.js.map +1 -1
- package/dist/dts/features/Study/StudyDetails/StudyItems.d.ts.map +1 -1
- package/dist/dts/features/Study/StudyDetails/StudyItems.js +9 -5
- package/dist/dts/features/Study/StudyDetails/StudyItems.js.map +1 -1
- package/dist/dts/lib/common/staticProps.d.ts.map +1 -1
- package/dist/dts/lib/common/staticProps.js +11 -23
- package/dist/dts/lib/common/staticProps.js.map +1 -1
- package/dist/dts/lib/content/filesystem.js +1 -1
- package/dist/dts/lib/content/filesystem.js.map +1 -1
- package/dist/dts/pages/Explorer/Explorer.d.ts.map +1 -1
- package/dist/dts/pages/Explorer/Explorer.js +4 -1
- package/dist/dts/pages/Explorer/Explorer.js.map +1 -1
- package/dist/esm/index.js +627 -384
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +203 -181
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/cjs/index.js
CHANGED
|
@@ -1305,11 +1305,11 @@ const LoginProvidersPanel = ({ handleLoginSelected })=>{
|
|
|
1305
1305
|
|
|
1306
1306
|
const TexturedSidePanel = ({ url })=>{
|
|
1307
1307
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
1308
|
-
"aria-
|
|
1308
|
+
"aria-hidden": "true",
|
|
1309
1309
|
style: {
|
|
1310
1310
|
backgroundImage: `url(${url})`
|
|
1311
1311
|
},
|
|
1312
|
-
className: "flex h-
|
|
1312
|
+
className: "bg-contain flex h-full w-full bg-repeat-y last:-scale-x-100"
|
|
1313
1313
|
});
|
|
1314
1314
|
};
|
|
1315
1315
|
|
|
@@ -1479,8 +1479,7 @@ function hashCode(str) {
|
|
|
1479
1479
|
className: className,
|
|
1480
1480
|
dangerouslySetInnerHTML: {
|
|
1481
1481
|
__html: textString
|
|
1482
|
-
}
|
|
1483
|
-
"aria-label": "HTML content"
|
|
1482
|
+
}
|
|
1484
1483
|
});
|
|
1485
1484
|
}
|
|
1486
1485
|
case "textArray":
|
|
@@ -1488,22 +1487,29 @@ function hashCode(str) {
|
|
|
1488
1487
|
const textArray = !Array.isArray(text) ? [
|
|
1489
1488
|
text
|
|
1490
1489
|
] : text;
|
|
1491
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
1490
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
1492
1491
|
className: className,
|
|
1493
1492
|
role: "list",
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1493
|
+
children: [
|
|
1494
|
+
/*#__PURE__*/ jsxRuntime.jsxs("style", {
|
|
1495
|
+
children: [
|
|
1496
|
+
"@source inline(",
|
|
1497
|
+
className,
|
|
1498
|
+
");"
|
|
1499
|
+
]
|
|
1500
|
+
}),
|
|
1501
|
+
textArray.map((item)=>/*#__PURE__*/ jsxRuntime.jsx("p", {
|
|
1502
|
+
className: "my-2",
|
|
1503
|
+
role: "listitem",
|
|
1504
|
+
children: item
|
|
1505
|
+
}, hashCode(item)))
|
|
1506
|
+
]
|
|
1500
1507
|
});
|
|
1501
1508
|
}
|
|
1502
1509
|
case "markdown":
|
|
1503
1510
|
{
|
|
1504
1511
|
const textString = Array.isArray(text) ? text.join('') : text;
|
|
1505
1512
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
1506
|
-
"aria-label": "Markdown content",
|
|
1507
1513
|
children: /*#__PURE__*/ jsxRuntime.jsx(Markdown, {
|
|
1508
1514
|
remarkPlugins: [
|
|
1509
1515
|
remarkGfm
|
|
@@ -1547,21 +1553,29 @@ function hashCode(str) {
|
|
|
1547
1553
|
const DEFAULT_STYLE = 'inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1';
|
|
1548
1554
|
const mergedClassname = className ? tailwindMerge.twMerge(DEFAULT_STYLE, className) : DEFAULT_STYLE;
|
|
1549
1555
|
const textString = Array.isArray(text) ? text.join('') : text;
|
|
1550
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
1556
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
1551
1557
|
className: mergedClassname,
|
|
1552
|
-
children:
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1558
|
+
children: [
|
|
1559
|
+
/*#__PURE__*/ jsxRuntime.jsxs("style", {
|
|
1560
|
+
children: [
|
|
1561
|
+
"@source inline(",
|
|
1562
|
+
className,
|
|
1563
|
+
");"
|
|
1564
|
+
]
|
|
1565
|
+
}),
|
|
1566
|
+
/*#__PURE__*/ jsxRuntime.jsxs("span", {
|
|
1567
|
+
children: [
|
|
1568
|
+
textString,
|
|
1569
|
+
email && /*#__PURE__*/ jsxRuntime.jsx(core$1.Anchor, {
|
|
1570
|
+
classNames: {
|
|
1571
|
+
root: mergedClassname
|
|
1572
|
+
},
|
|
1573
|
+
href: `mailto:${email}`,
|
|
1574
|
+
children: ` ${email}.`
|
|
1575
|
+
})
|
|
1576
|
+
]
|
|
1577
|
+
})
|
|
1578
|
+
]
|
|
1565
1579
|
});
|
|
1566
1580
|
}
|
|
1567
1581
|
case "textWithLink":
|
|
@@ -1572,35 +1586,50 @@ function hashCode(str) {
|
|
|
1572
1586
|
if (!link) {
|
|
1573
1587
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
1574
1588
|
className: mergedClassname,
|
|
1575
|
-
"aria-label": "No link defined",
|
|
1576
1589
|
children: "Link is not defined."
|
|
1577
1590
|
});
|
|
1578
1591
|
}
|
|
1579
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
1592
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
1580
1593
|
className: mergedClassname,
|
|
1581
|
-
children:
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
+
children: [
|
|
1595
|
+
/*#__PURE__*/ jsxRuntime.jsxs("style", {
|
|
1596
|
+
children: [
|
|
1597
|
+
"@source inline(",
|
|
1598
|
+
className,
|
|
1599
|
+
");"
|
|
1600
|
+
]
|
|
1601
|
+
}),
|
|
1602
|
+
/*#__PURE__*/ jsxRuntime.jsxs("span", {
|
|
1603
|
+
children: [
|
|
1604
|
+
textString,
|
|
1605
|
+
link && /*#__PURE__*/ jsxRuntime.jsx(core$1.Anchor, {
|
|
1606
|
+
classNames: {
|
|
1607
|
+
root: mergedClassname
|
|
1608
|
+
},
|
|
1609
|
+
href: link,
|
|
1610
|
+
children: ` ${linkText ?? link}.`
|
|
1611
|
+
})
|
|
1612
|
+
]
|
|
1613
|
+
})
|
|
1614
|
+
]
|
|
1594
1615
|
});
|
|
1595
1616
|
}
|
|
1596
1617
|
case "text":
|
|
1597
1618
|
default:
|
|
1598
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
1619
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
1599
1620
|
className: className,
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1621
|
+
children: [
|
|
1622
|
+
/*#__PURE__*/ jsxRuntime.jsxs("style", {
|
|
1623
|
+
children: [
|
|
1624
|
+
"@source inline(",
|
|
1625
|
+
className,
|
|
1626
|
+
");"
|
|
1627
|
+
]
|
|
1628
|
+
}),
|
|
1629
|
+
/*#__PURE__*/ jsxRuntime.jsx("p", {
|
|
1630
|
+
children: text.toString()
|
|
1631
|
+
})
|
|
1632
|
+
]
|
|
1604
1633
|
});
|
|
1605
1634
|
}
|
|
1606
1635
|
};
|
|
@@ -2094,7 +2123,6 @@ const Gen3ModalsProvider = ({ config, children })=>{
|
|
|
2094
2123
|
});
|
|
2095
2124
|
};
|
|
2096
2125
|
|
|
2097
|
-
// import { BinGuru } from 'binguru';
|
|
2098
2126
|
const capitalize = (original)=>{
|
|
2099
2127
|
if (original === undefined) {
|
|
2100
2128
|
throw new Error('capitalize: original is undefined');
|
|
@@ -2133,6 +2161,60 @@ const processRangeKeyLabel = (key)=>{
|
|
|
2133
2161
|
spans = spans.concat(new Array(numLastRow).fill(Math.floor(12 / numLastRow)));
|
|
2134
2162
|
return spans;
|
|
2135
2163
|
};
|
|
2164
|
+
/**
|
|
2165
|
+
* Filters the keys from the provided aggregation data based on a given list of keys to remove.
|
|
2166
|
+
*
|
|
2167
|
+
* This function processes an `AggregationsData` object by iterating through its properties.
|
|
2168
|
+
* It removes elements from the data that match any of the keys specified in the `keysToRemove` array.
|
|
2169
|
+
* The filtering applies specifically to elements with a valid `key` property of type == string.
|
|
2170
|
+
* If the `key` is empty or matches one of the `keysToRemove`, it is excluded from the resulting object.
|
|
2171
|
+
*
|
|
2172
|
+
* @param {AggregationsData} data - The aggregation data object to filter. Expected to have properties that
|
|
2173
|
+
* are arrays of items containing a `key` property.
|
|
2174
|
+
* @param {Array<string>} keysToRemove - Array of string keys that should be removed from the aggregation data.
|
|
2175
|
+
* @returns {AggregationsData} A new `AggregationsData` object with filtered entries,
|
|
2176
|
+
* omitting the specified keys.
|
|
2177
|
+
*/ const filterAggregationsDataKeys = (data, keysToRemove)=>{
|
|
2178
|
+
if (!data || typeof data !== 'object') {
|
|
2179
|
+
return {};
|
|
2180
|
+
}
|
|
2181
|
+
return Object.entries(data).reduce((acc, [key, chartData])=>{
|
|
2182
|
+
if (Array.isArray(chartData)) {
|
|
2183
|
+
acc[key] = chartData.filter((x)=>x && typeof x.key === 'string' && !keysToRemove.includes(x.key));
|
|
2184
|
+
}
|
|
2185
|
+
return acc;
|
|
2186
|
+
}, {});
|
|
2187
|
+
};
|
|
2188
|
+
|
|
2189
|
+
const OverflowTooltippedLabel = ({ children, label, className = 'flex-grow font-heading text-md pt-0.5' })=>{
|
|
2190
|
+
const [showTooltip, setShowTooltip] = React.useState(false);
|
|
2191
|
+
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Tooltip, {
|
|
2192
|
+
label: label,
|
|
2193
|
+
disabled: !showTooltip,
|
|
2194
|
+
position: "top-start",
|
|
2195
|
+
offset: 5,
|
|
2196
|
+
multiline: true,
|
|
2197
|
+
withArrow: true,
|
|
2198
|
+
arrowOffset: 20,
|
|
2199
|
+
classNames: {
|
|
2200
|
+
tooltip: 'bg-base-min bg-opacity-90 text-base-contrast-min shadow-lg font-content font-medium text-xs',
|
|
2201
|
+
arrow: 'bg-base-min bg-opacity-90'
|
|
2202
|
+
},
|
|
2203
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
2204
|
+
className: `${className} truncate ... `,
|
|
2205
|
+
ref: (el)=>{
|
|
2206
|
+
if (el) {
|
|
2207
|
+
if (el.clientWidth < el.scrollWidth) {
|
|
2208
|
+
setShowTooltip(true);
|
|
2209
|
+
} else {
|
|
2210
|
+
setShowTooltip(false);
|
|
2211
|
+
}
|
|
2212
|
+
}
|
|
2213
|
+
},
|
|
2214
|
+
children: children
|
|
2215
|
+
})
|
|
2216
|
+
});
|
|
2217
|
+
};
|
|
2136
2218
|
|
|
2137
2219
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2138
2220
|
function DefaultItemRenderer(_props) {
|
|
@@ -2620,16 +2702,25 @@ const LegendRows = ({ data })=>{
|
|
|
2620
2702
|
const limitedRows = moreThanMaxRows ? data.slice(0, MAX_LEGEND_ROWS) : data;
|
|
2621
2703
|
return limitedRows.map((element, elIndex)=>/*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
2622
2704
|
children: [
|
|
2623
|
-
/*#__PURE__*/ jsxRuntime.
|
|
2624
|
-
children:
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2705
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
2706
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
2707
|
+
className: "flex flex-nowrap items-center overflow-hidden",
|
|
2708
|
+
children: [
|
|
2709
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.ColorSwatch, {
|
|
2710
|
+
className: "inline-block mr-2 align-middle",
|
|
2711
|
+
size: "1em",
|
|
2712
|
+
radius: "xs",
|
|
2713
|
+
color: chartColors?.[elIndex % chartColors.length] || ''
|
|
2714
|
+
}),
|
|
2715
|
+
/*#__PURE__*/ jsxRuntime.jsx(OverflowTooltippedLabel, {
|
|
2716
|
+
label: element.key.toString(),
|
|
2717
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
2718
|
+
className: "text-sm font-medium font-content",
|
|
2719
|
+
children: element.key.toString()
|
|
2720
|
+
})
|
|
2721
|
+
})
|
|
2722
|
+
]
|
|
2723
|
+
})
|
|
2633
2724
|
}),
|
|
2634
2725
|
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
2635
2726
|
className: "text-right",
|
|
@@ -2667,25 +2758,35 @@ const LegendOverflow = ({ chart, data, chartTitle, counts })=>{
|
|
|
2667
2758
|
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Table, {
|
|
2668
2759
|
withRowBorders: false,
|
|
2669
2760
|
classNames: {
|
|
2670
|
-
table: '',
|
|
2761
|
+
table: 'w-full table-fixed',
|
|
2671
2762
|
td: 'p-1 leading-3'
|
|
2672
2763
|
},
|
|
2673
2764
|
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Tbody, {
|
|
2674
2765
|
children: data.map((element, elIndex)=>/*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
2766
|
+
className: `${elIndex === 0 ? 'overflow-hidden text-ellipsis whitespace-nowrap' : 'last:text-right'}`,
|
|
2675
2767
|
children: [
|
|
2676
|
-
/*#__PURE__*/ jsxRuntime.
|
|
2677
|
-
children:
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2768
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
2769
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
2770
|
+
className: "flex flex-nowrap items-center",
|
|
2771
|
+
children: [
|
|
2772
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.ColorSwatch, {
|
|
2773
|
+
className: "inline-block mr-2 align-middle",
|
|
2774
|
+
size: "1em",
|
|
2775
|
+
radius: "xs",
|
|
2776
|
+
color: chartColors?.[elIndex % chartColors.length] || ''
|
|
2777
|
+
}),
|
|
2778
|
+
/*#__PURE__*/ jsxRuntime.jsx(OverflowTooltippedLabel, {
|
|
2779
|
+
label: element.key.toString(),
|
|
2780
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("span", {
|
|
2781
|
+
className: "text-sm font-medium font-content",
|
|
2782
|
+
children: element.key.toString()
|
|
2783
|
+
})
|
|
2784
|
+
})
|
|
2785
|
+
]
|
|
2786
|
+
})
|
|
2686
2787
|
}),
|
|
2687
2788
|
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
2688
|
-
className: "text-right",
|
|
2789
|
+
className: "w-[10%] text-right",
|
|
2689
2790
|
children: element.count
|
|
2690
2791
|
})
|
|
2691
2792
|
]
|
|
@@ -2763,31 +2864,35 @@ const Charts = ({ charts, data, counts, isSuccess, numCols = DEFAULT_COLS, style
|
|
|
2763
2864
|
inheritPadding: true,
|
|
2764
2865
|
py: "xs",
|
|
2765
2866
|
withBorder: style === 'box',
|
|
2766
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2867
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
2868
|
+
className: "w-full",
|
|
2869
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Table, {
|
|
2870
|
+
withRowBorders: false,
|
|
2871
|
+
classNames: {
|
|
2872
|
+
table: 'w-full table-fixed',
|
|
2873
|
+
td: 'p-1 leading-3',
|
|
2874
|
+
th: 'p-1 leading-3 [text-shadow:_1px_0_#000]',
|
|
2875
|
+
thead: 'border-b',
|
|
2876
|
+
tbody: "before:content-[''] before:block before:p-1"
|
|
2877
|
+
},
|
|
2878
|
+
children: [
|
|
2879
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Thead, {
|
|
2880
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Tr, {
|
|
2881
|
+
children: dataKeys.map((el, i)=>/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Th, {
|
|
2882
|
+
className: `${i === 0 ? 'w-[90%] overflow-hidden text-ellipsis whitespace-nowrap' : 'last:text-right'}`,
|
|
2883
|
+
children: charts[field]?.dataLabels?.[el] || /*#__PURE__*/ jsxRuntime.jsx(React.Fragment, {
|
|
2884
|
+
children: " "
|
|
2885
|
+
})
|
|
2886
|
+
}, i))
|
|
2887
|
+
})
|
|
2888
|
+
}),
|
|
2889
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Tbody, {
|
|
2890
|
+
children: data === undefined ? '' : /*#__PURE__*/ jsxRuntime.jsx(LegendRows, {
|
|
2891
|
+
data: data[field]
|
|
2892
|
+
})
|
|
2788
2893
|
})
|
|
2789
|
-
|
|
2790
|
-
|
|
2894
|
+
]
|
|
2895
|
+
})
|
|
2791
2896
|
})
|
|
2792
2897
|
}),
|
|
2793
2898
|
showLegends && moreThanMaxRows && /*#__PURE__*/ jsxRuntime.jsx(core$1.Card.Section, {
|
|
@@ -3818,36 +3923,6 @@ flex items-start justify-between items-center flex-nowrap bg-secondary px-1.5 ro
|
|
|
3818
3923
|
});
|
|
3819
3924
|
};
|
|
3820
3925
|
|
|
3821
|
-
const OverflowTooltippedLabel = ({ children, label, className = 'flex-grow font-heading text-md pt-0.5' })=>{
|
|
3822
|
-
const [showTooltip, setShowTooltip] = React.useState(false);
|
|
3823
|
-
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Tooltip, {
|
|
3824
|
-
label: label,
|
|
3825
|
-
disabled: !showTooltip,
|
|
3826
|
-
position: "top-start",
|
|
3827
|
-
offset: 5,
|
|
3828
|
-
multiline: true,
|
|
3829
|
-
withArrow: true,
|
|
3830
|
-
arrowOffset: 20,
|
|
3831
|
-
classNames: {
|
|
3832
|
-
tooltip: 'bg-base-min bg-opacity-90 text-base-contrast-min shadow-lg font-content font-medium text-xs',
|
|
3833
|
-
arrow: 'bg-base-min bg-opacity-90'
|
|
3834
|
-
},
|
|
3835
|
-
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
3836
|
-
className: `${className} truncate ... `,
|
|
3837
|
-
ref: (el)=>{
|
|
3838
|
-
if (el) {
|
|
3839
|
-
if (el.clientWidth < el.scrollWidth) {
|
|
3840
|
-
setShowTooltip(true);
|
|
3841
|
-
} else {
|
|
3842
|
-
setShowTooltip(false);
|
|
3843
|
-
}
|
|
3844
|
-
}
|
|
3845
|
-
},
|
|
3846
|
-
children: children
|
|
3847
|
-
})
|
|
3848
|
-
});
|
|
3849
|
-
};
|
|
3850
|
-
|
|
3851
3926
|
const FacetEnumList = ({ field, facetName, hooks, valueLabel, isSettings = false, isFacetView = true, isSearching = false, showPercent = false, hideIfEmpty = false, showSorting = true, sort = 'value-dsc', moveValuesToBottom = [], excludeValues = [] })=>{
|
|
3852
3927
|
const [isGroupExpanded, setIsGroupExpanded] = React.useState(false);
|
|
3853
3928
|
const cardRef = React.useRef(null);
|
|
@@ -5744,6 +5819,20 @@ const FooterRowComponent = ({ item, rowClassname })=>{
|
|
|
5744
5819
|
case 'Icon':
|
|
5745
5820
|
{
|
|
5746
5821
|
const logo = item[itemType];
|
|
5822
|
+
if (logo.href) {
|
|
5823
|
+
return /*#__PURE__*/ jsxRuntime.jsx("a", {
|
|
5824
|
+
href: logo.href,
|
|
5825
|
+
target: "_blank",
|
|
5826
|
+
rel: "noopener noreferrer",
|
|
5827
|
+
className: className,
|
|
5828
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(Image, {
|
|
5829
|
+
src: `${logo.logo}`,
|
|
5830
|
+
width: logo.width,
|
|
5831
|
+
height: logo.height,
|
|
5832
|
+
alt: logo.description
|
|
5833
|
+
})
|
|
5834
|
+
}, `icons-${logo.logo}`);
|
|
5835
|
+
}
|
|
5747
5836
|
return /*#__PURE__*/ jsxRuntime.jsx(Image, {
|
|
5748
5837
|
src: `${logo.logo}`,
|
|
5749
5838
|
width: logo.width,
|
|
@@ -7179,10 +7268,16 @@ const createFieldRendererElement = (field, resource)=>{
|
|
|
7179
7268
|
json: resource,
|
|
7180
7269
|
path: field.field
|
|
7181
7270
|
});
|
|
7182
|
-
if (resourceFieldValue
|
|
7271
|
+
if (!lodash.isArray(resourceFieldValue) || resourceFieldValue.length == 0 || resourceFieldValue[0] === null) {
|
|
7183
7272
|
if (field.includeIfNotAvailable === false) return null;
|
|
7184
|
-
if (field.valueIfNotAvailable)
|
|
7185
|
-
|
|
7273
|
+
if (field.valueIfNotAvailable) {
|
|
7274
|
+
resourceFieldValue = field.valueIfNotAvailable;
|
|
7275
|
+
} else {
|
|
7276
|
+
resourceFieldValue = '';
|
|
7277
|
+
}
|
|
7278
|
+
} else {
|
|
7279
|
+
resourceFieldValue = resourceFieldValue[0];
|
|
7280
|
+
}
|
|
7186
7281
|
const label = field.includeLabel === undefined || field?.includeLabel ? field.name : undefined;
|
|
7187
7282
|
const studyFieldRenderer = StudyDetailsRenderer(field.contentType, field?.renderer ?? 'default');
|
|
7188
7283
|
switch(field.contentType){
|
|
@@ -7439,17 +7534,17 @@ const SinglePageStudyDetailsPanel = ({ data, studyConfig, authorization })=>{
|
|
|
7439
7534
|
children: "Study Details Panel not configured"
|
|
7440
7535
|
});
|
|
7441
7536
|
} else {
|
|
7442
|
-
return studyConfig?.fieldsToShow.map((
|
|
7537
|
+
return studyConfig?.fieldsToShow.map((fieldToShow)=>{
|
|
7443
7538
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
7444
|
-
className: `px-2 ${
|
|
7539
|
+
className: `px-2 ${fieldToShow.groupWidth == 'full' || fieldToShow.groupWidth === undefined ? 'w-full' : 'w-1/2'}`,
|
|
7445
7540
|
children: /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
7446
7541
|
className: "flex flex-col",
|
|
7447
7542
|
children: [
|
|
7448
|
-
|
|
7543
|
+
fieldToShow?.groupName ? /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
7449
7544
|
className: "text-lg font-bold",
|
|
7450
|
-
children:
|
|
7545
|
+
children: fieldToShow.groupName
|
|
7451
7546
|
}) : null,
|
|
7452
|
-
|
|
7547
|
+
fieldToShow.fields.map((field)=>{
|
|
7453
7548
|
const element = createFieldRendererElement(field, data);
|
|
7454
7549
|
if (element !== null) {
|
|
7455
7550
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
@@ -7460,7 +7555,7 @@ const SinglePageStudyDetailsPanel = ({ data, studyConfig, authorization })=>{
|
|
|
7460
7555
|
})
|
|
7461
7556
|
]
|
|
7462
7557
|
})
|
|
7463
|
-
}, `${
|
|
7558
|
+
}, `${fieldToShow.fields.join('-')}-details`);
|
|
7464
7559
|
});
|
|
7465
7560
|
}
|
|
7466
7561
|
}, [
|
|
@@ -11321,160 +11416,6 @@ const CohortManager$1 = ({ index })=>{
|
|
|
11321
11416
|
});
|
|
11322
11417
|
};
|
|
11323
11418
|
|
|
11324
|
-
function isQueryResponse(obj) {
|
|
11325
|
-
// Considering that the data property can be optional
|
|
11326
|
-
return typeof obj === 'object' && (obj.data === undefined || typeof obj.data === 'object');
|
|
11327
|
-
}
|
|
11328
|
-
const ExtractData = (data, index)=>{
|
|
11329
|
-
if (data === undefined || data === null) return {};
|
|
11330
|
-
if (data.data === undefined || data.data === null) return {};
|
|
11331
|
-
return Array.isArray(data.data[index]) && data.data[index].length > 0 ? data.data[index][0] : {};
|
|
11332
|
-
};
|
|
11333
|
-
const QueryRowDetailsPanel = ({ id, index, tableConfig, accessibility })=>{
|
|
11334
|
-
//const [queryGuppy, { data, isLoading, isError }] = useLazyGeneralGQLQuery();
|
|
11335
|
-
const idField = tableConfig.detailsConfig?.idField;
|
|
11336
|
-
const { data, isLoading, isError } = core.useGeneralGQLQuery({
|
|
11337
|
-
query: `query ($filter: JSON) {
|
|
11338
|
-
${index} (filter: $filter, accessibility: all) {
|
|
11339
|
-
${tableConfig.fields}
|
|
11340
|
-
}
|
|
11341
|
-
}`,
|
|
11342
|
-
variables: {
|
|
11343
|
-
filter: {
|
|
11344
|
-
AND: [
|
|
11345
|
-
{
|
|
11346
|
-
IN: {
|
|
11347
|
-
[idField ?? 0]: [
|
|
11348
|
-
id
|
|
11349
|
-
]
|
|
11350
|
-
}
|
|
11351
|
-
}
|
|
11352
|
-
]
|
|
11353
|
-
}
|
|
11354
|
-
}
|
|
11355
|
-
});
|
|
11356
|
-
if (!idField) {
|
|
11357
|
-
return /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
11358
|
-
message: 'idField not configure in Tables Details Config'
|
|
11359
|
-
});
|
|
11360
|
-
}
|
|
11361
|
-
if (isError) {
|
|
11362
|
-
return /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
11363
|
-
message: 'Error occurred while fetching data'
|
|
11364
|
-
});
|
|
11365
|
-
}
|
|
11366
|
-
const queryData = isQueryResponse(data) ? ExtractData(data, index) : {};
|
|
11367
|
-
const rows = Object.entries(queryData).map(([field, value])=>/*#__PURE__*/ jsxRuntime.jsxs("tr", {
|
|
11368
|
-
children: [
|
|
11369
|
-
/*#__PURE__*/ jsxRuntime.jsx("td", {
|
|
11370
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
11371
|
-
fw: "bold",
|
|
11372
|
-
children: field
|
|
11373
|
-
})
|
|
11374
|
-
}),
|
|
11375
|
-
/*#__PURE__*/ jsxRuntime.jsx("td", {
|
|
11376
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
11377
|
-
children: value ? value : ''
|
|
11378
|
-
})
|
|
11379
|
-
})
|
|
11380
|
-
]
|
|
11381
|
-
}, field));
|
|
11382
|
-
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Stack, {
|
|
11383
|
-
children: [
|
|
11384
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.LoadingOverlay, {
|
|
11385
|
-
visible: isLoading
|
|
11386
|
-
}),
|
|
11387
|
-
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Text, {
|
|
11388
|
-
c: "primary.4",
|
|
11389
|
-
children: [
|
|
11390
|
-
"Results for ",
|
|
11391
|
-
id
|
|
11392
|
-
]
|
|
11393
|
-
}),
|
|
11394
|
-
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Table, {
|
|
11395
|
-
withTableBorder: true,
|
|
11396
|
-
withColumnBorders: true,
|
|
11397
|
-
children: [
|
|
11398
|
-
/*#__PURE__*/ jsxRuntime.jsx("thead", {
|
|
11399
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs("tr", {
|
|
11400
|
-
children: [
|
|
11401
|
-
/*#__PURE__*/ jsxRuntime.jsx("th", {
|
|
11402
|
-
children: "Field"
|
|
11403
|
-
}),
|
|
11404
|
-
/*#__PURE__*/ jsxRuntime.jsx("th", {
|
|
11405
|
-
children: "Value"
|
|
11406
|
-
})
|
|
11407
|
-
]
|
|
11408
|
-
})
|
|
11409
|
-
}),
|
|
11410
|
-
/*#__PURE__*/ jsxRuntime.jsx("tbody", {
|
|
11411
|
-
children: rows
|
|
11412
|
-
})
|
|
11413
|
-
]
|
|
11414
|
-
})
|
|
11415
|
-
]
|
|
11416
|
-
});
|
|
11417
|
-
};
|
|
11418
|
-
|
|
11419
|
-
const RowTableDetailsPanel = ({ row })=>{
|
|
11420
|
-
const rowData = row?.original ?? {};
|
|
11421
|
-
const rows = Object.entries(rowData).map(([field, value])=>/*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
11422
|
-
children: [
|
|
11423
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
11424
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
11425
|
-
fw: "bold",
|
|
11426
|
-
children: field
|
|
11427
|
-
})
|
|
11428
|
-
}),
|
|
11429
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
11430
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
11431
|
-
children: value ? value : ''
|
|
11432
|
-
})
|
|
11433
|
-
})
|
|
11434
|
-
]
|
|
11435
|
-
}, field));
|
|
11436
|
-
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Table, {
|
|
11437
|
-
striped: true,
|
|
11438
|
-
highlightOnHover: true,
|
|
11439
|
-
withTableBorder: true,
|
|
11440
|
-
withColumnBorders: true,
|
|
11441
|
-
children: [
|
|
11442
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Thead, {
|
|
11443
|
-
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
11444
|
-
children: [
|
|
11445
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Th, {
|
|
11446
|
-
children: "Field"
|
|
11447
|
-
}),
|
|
11448
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Th, {
|
|
11449
|
-
children: "Value"
|
|
11450
|
-
})
|
|
11451
|
-
]
|
|
11452
|
-
})
|
|
11453
|
-
}),
|
|
11454
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Tbody, {
|
|
11455
|
-
children: rows
|
|
11456
|
-
})
|
|
11457
|
-
]
|
|
11458
|
-
});
|
|
11459
|
-
};
|
|
11460
|
-
|
|
11461
|
-
let instance$2;
|
|
11462
|
-
const DefaultRendererCatalog$1 = {
|
|
11463
|
-
tableDetails: {
|
|
11464
|
-
default: RowTableDetailsPanel,
|
|
11465
|
-
queryRowDetails: QueryRowDetailsPanel
|
|
11466
|
-
}
|
|
11467
|
-
};
|
|
11468
|
-
const ExplorerTableDetailsPanelFactory = ()=>{
|
|
11469
|
-
if (!instance$2) {
|
|
11470
|
-
instance$2 = new RenderFactoryTypedInstance();
|
|
11471
|
-
}
|
|
11472
|
-
return instance$2;
|
|
11473
|
-
};
|
|
11474
|
-
const registerCohortBuilderDefaultPreviewRenderers = ()=>{
|
|
11475
|
-
ExplorerTableDetailsPanelFactory().registerRendererCatalog(DefaultRendererCatalog$1);
|
|
11476
|
-
};
|
|
11477
|
-
|
|
11478
11419
|
const DEFAULT_PROPS = {
|
|
11479
11420
|
body: 'bg-base-max',
|
|
11480
11421
|
header: '!bg-primary !pb-9 !mb-9',
|
|
@@ -11518,6 +11459,48 @@ const DetailsModal = ({ title, id, row, classNames, panel, panelProps, onClose,
|
|
|
11518
11459
|
});
|
|
11519
11460
|
};
|
|
11520
11461
|
|
|
11462
|
+
const DetailsDrawer = ({ id, title, panel, panelProps })=>{
|
|
11463
|
+
const [opened, { open, close }] = hooks.useDisclosure(id !== undefined);
|
|
11464
|
+
React.useEffect(()=>{
|
|
11465
|
+
if (id !== undefined) open();
|
|
11466
|
+
else close();
|
|
11467
|
+
}, [
|
|
11468
|
+
close,
|
|
11469
|
+
id,
|
|
11470
|
+
open
|
|
11471
|
+
]);
|
|
11472
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Drawer.Root, {
|
|
11473
|
+
opened: opened,
|
|
11474
|
+
onClose: close,
|
|
11475
|
+
size: "50%",
|
|
11476
|
+
position: "right",
|
|
11477
|
+
children: [
|
|
11478
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Drawer.Overlay, {
|
|
11479
|
+
opacity: 0.5,
|
|
11480
|
+
blur: 4
|
|
11481
|
+
}),
|
|
11482
|
+
/*#__PURE__*/ jsxRuntime.jsxs(core$1.Drawer.Content, {
|
|
11483
|
+
children: [
|
|
11484
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Drawer.Header, {
|
|
11485
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Button, {
|
|
11486
|
+
leftSection: /*#__PURE__*/ jsxRuntime.jsx(md.MdKeyboardDoubleArrowLeft, {}),
|
|
11487
|
+
onClick: close,
|
|
11488
|
+
variant: "outline",
|
|
11489
|
+
children: "Back"
|
|
11490
|
+
})
|
|
11491
|
+
}),
|
|
11492
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Drawer.Body, {
|
|
11493
|
+
children: panel({
|
|
11494
|
+
id: id,
|
|
11495
|
+
...panelProps
|
|
11496
|
+
})
|
|
11497
|
+
})
|
|
11498
|
+
]
|
|
11499
|
+
})
|
|
11500
|
+
]
|
|
11501
|
+
});
|
|
11502
|
+
};
|
|
11503
|
+
|
|
11521
11504
|
// TODO need to type this
|
|
11522
11505
|
const RenderArrayCell = ({ cell })=>{
|
|
11523
11506
|
const value = cell.getValue();
|
|
@@ -11617,12 +11600,12 @@ const LinkCellFunctionCatalog = {
|
|
|
11617
11600
|
default: RenderLinkCell,
|
|
11618
11601
|
linkWithValueMap: RenderLinkCellUsingValueMap
|
|
11619
11602
|
};
|
|
11620
|
-
let instance$
|
|
11603
|
+
let instance$2;
|
|
11621
11604
|
const ExplorerTableCellRendererFactory = ()=>{
|
|
11622
|
-
if (!instance$
|
|
11623
|
-
instance$
|
|
11605
|
+
if (!instance$2) {
|
|
11606
|
+
instance$2 = new RenderFactoryTypedInstance();
|
|
11624
11607
|
}
|
|
11625
|
-
return instance$
|
|
11608
|
+
return instance$2;
|
|
11626
11609
|
};
|
|
11627
11610
|
// register default cell renderers
|
|
11628
11611
|
const registerExplorerDefaultCellRenderers = ()=>{
|
|
@@ -11889,6 +11872,91 @@ const SubtableStack = ({ subTables, data })=>{
|
|
|
11889
11872
|
});
|
|
11890
11873
|
};
|
|
11891
11874
|
|
|
11875
|
+
function isQueryResponse(obj) {
|
|
11876
|
+
// Considering that the data property can be optional
|
|
11877
|
+
return typeof obj === 'object' && (obj.data === undefined || typeof obj.data === 'object');
|
|
11878
|
+
}
|
|
11879
|
+
const ExtractData = (data, index, path)=>{
|
|
11880
|
+
if (data === undefined || data === null) return {};
|
|
11881
|
+
if (data.data === undefined || data.data === null) return {};
|
|
11882
|
+
if (!lodash.isArray(data.data[index])) return {};
|
|
11883
|
+
let rowData = data.data[index][0];
|
|
11884
|
+
if (path) {
|
|
11885
|
+
const tmp = jsonpathPlus.JSONPath({
|
|
11886
|
+
path: path,
|
|
11887
|
+
json: data.data[index][0]
|
|
11888
|
+
});
|
|
11889
|
+
if (!lodash.isArray(tmp)) {
|
|
11890
|
+
return {};
|
|
11891
|
+
}
|
|
11892
|
+
if (tmp.length > 0) {
|
|
11893
|
+
rowData = tmp[0];
|
|
11894
|
+
}
|
|
11895
|
+
}
|
|
11896
|
+
return rowData;
|
|
11897
|
+
};
|
|
11898
|
+
const QueryRowDetailsPanel = ({ id, index, tableConfig, accessibility })=>{
|
|
11899
|
+
//const [queryGuppy, { data, isLoading, isError }] = useLazyGeneralGQLQuery();
|
|
11900
|
+
const idField = tableConfig.detailsConfig?.idField;
|
|
11901
|
+
const simpleDetailsView = tableConfig.detailsConfig?.simpleDetailsView;
|
|
11902
|
+
const { setStudyDetails } = useStudyContext();
|
|
11903
|
+
const [opened, { open, close }] = hooks.useDisclosure(false);
|
|
11904
|
+
const { data, isError, isFetching } = core.useGetRawDataAndTotalCountsQuery({
|
|
11905
|
+
type: index,
|
|
11906
|
+
fields: tableConfig.fields,
|
|
11907
|
+
filters: {
|
|
11908
|
+
mode: 'and',
|
|
11909
|
+
root: {
|
|
11910
|
+
[idField]: buildNested(idField, {
|
|
11911
|
+
operator: '=',
|
|
11912
|
+
field: idField,
|
|
11913
|
+
operand: id
|
|
11914
|
+
})
|
|
11915
|
+
}
|
|
11916
|
+
},
|
|
11917
|
+
offset: 0,
|
|
11918
|
+
size: 1,
|
|
11919
|
+
accessibility: accessibility
|
|
11920
|
+
}, {
|
|
11921
|
+
skip: !idField || !id
|
|
11922
|
+
});
|
|
11923
|
+
const queryData = React.useMemo(()=>isQueryResponse(data) ? ExtractData(data, index, tableConfig?.detailsConfig?.dataPath) : {}, [
|
|
11924
|
+
data,
|
|
11925
|
+
index,
|
|
11926
|
+
tableConfig?.detailsConfig?.dataPath
|
|
11927
|
+
]);
|
|
11928
|
+
React.useEffect(()=>{
|
|
11929
|
+
setStudyDetails(queryData);
|
|
11930
|
+
}, [
|
|
11931
|
+
queryData,
|
|
11932
|
+
setStudyDetails
|
|
11933
|
+
]);
|
|
11934
|
+
if (!idField) {
|
|
11935
|
+
return /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
11936
|
+
message: 'idField not configure in Tables Details Config'
|
|
11937
|
+
});
|
|
11938
|
+
}
|
|
11939
|
+
if (isError) {
|
|
11940
|
+
return /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
|
|
11941
|
+
message: 'Error occurred while fetching data'
|
|
11942
|
+
});
|
|
11943
|
+
}
|
|
11944
|
+
// Inital attempt at using Study Details component
|
|
11945
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Stack, {
|
|
11946
|
+
children: [
|
|
11947
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.LoadingOverlay, {
|
|
11948
|
+
visible: isFetching
|
|
11949
|
+
}),
|
|
11950
|
+
simpleDetailsView ? /*#__PURE__*/ jsxRuntime.jsx(SinglePageStudyDetailsPanel, {
|
|
11951
|
+
data: queryData ?? {},
|
|
11952
|
+
studyConfig: simpleDetailsView
|
|
11953
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
11954
|
+
children: "Study Details Panel not configured"
|
|
11955
|
+
})
|
|
11956
|
+
]
|
|
11957
|
+
});
|
|
11958
|
+
};
|
|
11959
|
+
|
|
11892
11960
|
const DEFAULT_PAGE_LIMIT_LABEL = 'Rows per Page (Limited to 10,0000):';
|
|
11893
11961
|
const DEFAULT_PAGE_LIMIT = 10000;
|
|
11894
11962
|
/**
|
|
@@ -11903,13 +11971,19 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
11903
11971
|
pageIndex: 0,
|
|
11904
11972
|
pageSize: 10
|
|
11905
11973
|
});
|
|
11906
|
-
const DetailsComponent = DetailsModal;
|
|
11974
|
+
const DetailsComponent = React.useMemo(()=>tableConfig?.detailsConfig?.panelContainer === 'drawer' ? DetailsDrawer : DetailsModal, []);
|
|
11907
11975
|
const [sorting, setSorting] = React.useState([]);
|
|
11908
11976
|
const [rowSelection, setRowSelection] = React.useState({});
|
|
11909
11977
|
const [selectedRow, setSelectedRow] = React.useState(undefined);
|
|
11910
|
-
const DetailsPanel =
|
|
11911
|
-
|
|
11912
|
-
|
|
11978
|
+
// const DetailsPanel = useMemo(
|
|
11979
|
+
// () =>
|
|
11980
|
+
// ExplorerTableDetailsPanelFactory().getRenderer(
|
|
11981
|
+
// 'tableDetails',
|
|
11982
|
+
// tableConfig?.detailsConfig?.panel ?? 'default',
|
|
11983
|
+
// ),
|
|
11984
|
+
// [tableConfig?.detailsConfig?.panel],
|
|
11985
|
+
// );
|
|
11986
|
+
const DetailsPanel = React.useMemo(()=>QueryRowDetailsPanel, []);
|
|
11913
11987
|
const tableColumns = useDeepCompare.useDeepCompareMemo(()=>{
|
|
11914
11988
|
return createTableColumns(tableConfig);
|
|
11915
11989
|
}, [
|
|
@@ -11922,7 +11996,18 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
11922
11996
|
const getRowId = React.useCallback((tableConfig)=>{
|
|
11923
11997
|
const { detailsConfig } = tableConfig || {};
|
|
11924
11998
|
const idField = detailsConfig?.idField;
|
|
11925
|
-
|
|
11999
|
+
if (!idField) return undefined;
|
|
12000
|
+
return (originalRow)=>{
|
|
12001
|
+
const id = jsonpathPlus.JSONPath({
|
|
12002
|
+
json: originalRow,
|
|
12003
|
+
path: idField
|
|
12004
|
+
});
|
|
12005
|
+
if (id.length > 0) {
|
|
12006
|
+
return id[0];
|
|
12007
|
+
} else {
|
|
12008
|
+
return undefined;
|
|
12009
|
+
}
|
|
12010
|
+
};
|
|
11926
12011
|
}, []);
|
|
11927
12012
|
const cohortFilters = core.useCoreSelector((state)=>core.selectIndexFilters(state, index));
|
|
11928
12013
|
const { data, isLoading, isError, isFetching } = core.useGetRawDataAndTotalCountsQuery({
|
|
@@ -11979,6 +12064,12 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
11979
12064
|
onPaginationChange: setPagination,
|
|
11980
12065
|
onSortingChange: setSorting,
|
|
11981
12066
|
enableTopToolbar: false,
|
|
12067
|
+
enableExpandAll: false,
|
|
12068
|
+
displayColumnDefOptions: {
|
|
12069
|
+
'mrt-row-expand': {
|
|
12070
|
+
enableHiding: true
|
|
12071
|
+
}
|
|
12072
|
+
},
|
|
11982
12073
|
enableExpanding: !!tableConfig?.detailsConfig,
|
|
11983
12074
|
getRowId: getRowId(tableConfig),
|
|
11984
12075
|
rowCount: totalRowCount,
|
|
@@ -11988,6 +12079,16 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
11988
12079
|
localization: {
|
|
11989
12080
|
rowsPerPage: limitLabel
|
|
11990
12081
|
},
|
|
12082
|
+
// mantineExpandAllButtonProps: {
|
|
12083
|
+
// style: {
|
|
12084
|
+
// visibility: 'hidden',
|
|
12085
|
+
// },
|
|
12086
|
+
// },
|
|
12087
|
+
// mantineExpandButtonProps: {
|
|
12088
|
+
// style: {
|
|
12089
|
+
// visibility: 'hidden',
|
|
12090
|
+
// },
|
|
12091
|
+
// },
|
|
11991
12092
|
mantineTableProps: {
|
|
11992
12093
|
style: {
|
|
11993
12094
|
backgroundColor: 'var(--mantine-color-base-1)',
|
|
@@ -12019,7 +12120,10 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
12019
12120
|
showProgressBars: isFetching,
|
|
12020
12121
|
showAlertBanner: isError,
|
|
12021
12122
|
density: 'xs',
|
|
12022
|
-
rowSelection: rowSelection
|
|
12123
|
+
rowSelection: rowSelection,
|
|
12124
|
+
columnVisibility: {
|
|
12125
|
+
'mrt-row-expand': false
|
|
12126
|
+
}
|
|
12023
12127
|
},
|
|
12024
12128
|
mantineTableBodyRowProps: tableConfig.detailsConfig?.mode === 'click' ? ({ row })=>({
|
|
12025
12129
|
onClick: ()=>{
|
|
@@ -12051,29 +12155,31 @@ const DEFAULT_PAGE_LIMIT = 10000;
|
|
|
12051
12155
|
} else return null;
|
|
12052
12156
|
} : undefined
|
|
12053
12157
|
});
|
|
12054
|
-
return /*#__PURE__*/ jsxRuntime.
|
|
12055
|
-
children:
|
|
12056
|
-
|
|
12057
|
-
|
|
12058
|
-
|
|
12059
|
-
|
|
12060
|
-
|
|
12061
|
-
|
|
12062
|
-
|
|
12063
|
-
|
|
12064
|
-
|
|
12065
|
-
|
|
12066
|
-
|
|
12067
|
-
|
|
12068
|
-
|
|
12069
|
-
|
|
12070
|
-
|
|
12071
|
-
|
|
12072
|
-
|
|
12073
|
-
|
|
12158
|
+
return /*#__PURE__*/ jsxRuntime.jsx(React.Fragment, {
|
|
12159
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(StudyProvider, {
|
|
12160
|
+
children: [
|
|
12161
|
+
/*#__PURE__*/ jsxRuntime.jsx(DetailsComponent, {
|
|
12162
|
+
title: tableConfig?.detailsConfig?.title,
|
|
12163
|
+
id: Object.keys(rowSelection).length > 0 ? Object.keys(rowSelection).at(0) : undefined,
|
|
12164
|
+
row: selectedRow,
|
|
12165
|
+
onClose: ()=>setRowSelection({}),
|
|
12166
|
+
panel: DetailsPanel,
|
|
12167
|
+
classNames: tableConfig?.detailsConfig?.classNames,
|
|
12168
|
+
panelProps: {
|
|
12169
|
+
index,
|
|
12170
|
+
tableConfig,
|
|
12171
|
+
...tableConfig?.detailsConfig?.params ?? {},
|
|
12172
|
+
accessibility
|
|
12173
|
+
}
|
|
12174
|
+
}),
|
|
12175
|
+
/*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
12176
|
+
className: "inline-block overflow-x-scroll",
|
|
12177
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(mantineReactTable.MantineReactTable, {
|
|
12178
|
+
table: table
|
|
12179
|
+
})
|
|
12074
12180
|
})
|
|
12075
|
-
|
|
12076
|
-
|
|
12181
|
+
]
|
|
12182
|
+
})
|
|
12077
12183
|
});
|
|
12078
12184
|
};
|
|
12079
12185
|
|
|
@@ -12748,6 +12854,25 @@ const EmptyData = {};
|
|
|
12748
12854
|
}, {
|
|
12749
12855
|
skip: chartKeys.length === 0
|
|
12750
12856
|
});
|
|
12857
|
+
const cleanChartData = useDeepCompare.useDeepCompareMemo(()=>{
|
|
12858
|
+
if (isChartSuccess && chartData) {
|
|
12859
|
+
const cleanedData = {};
|
|
12860
|
+
Object.keys(summaryCharts).forEach((key)=>{
|
|
12861
|
+
// remove empty keys
|
|
12862
|
+
cleanedData[key] = chartData[key].filter((x)=>typeof x.key !== 'string' ? true : x.key !== '');
|
|
12863
|
+
const facetDef = facetDefinitions?.[key];
|
|
12864
|
+
if (facetDef?.excludeValues) {
|
|
12865
|
+
cleanedData[key] = cleanedData[key].filter((x)=>typeof x.key !== 'string' ? true : facetDef?.excludeValues?.includes(String(x.key)) === false);
|
|
12866
|
+
}
|
|
12867
|
+
});
|
|
12868
|
+
return cleanedData;
|
|
12869
|
+
}
|
|
12870
|
+
return chartData;
|
|
12871
|
+
}, [
|
|
12872
|
+
chartData,
|
|
12873
|
+
isChartSuccess,
|
|
12874
|
+
summaryCharts
|
|
12875
|
+
]);
|
|
12751
12876
|
const getEnumFacetData = useDeepCompare.useDeepCompareCallback((field)=>{
|
|
12752
12877
|
let filters = undefined;
|
|
12753
12878
|
let combineMode = 'or';
|
|
@@ -12888,7 +13013,7 @@ const EmptyData = {};
|
|
|
12888
13013
|
}); // TODO: replace with configurable message
|
|
12889
13014
|
}
|
|
12890
13015
|
return /*#__PURE__*/ jsxRuntime.jsxs("div", {
|
|
12891
|
-
className: "flex flex-col mt-3 relative px-4 bg-base-
|
|
13016
|
+
className: "flex flex-col mt-3 relative px-4 bg-base-lightest w-full",
|
|
12892
13017
|
children: [
|
|
12893
13018
|
/*#__PURE__*/ jsxRuntime.jsx(CohortManager$1, {
|
|
12894
13019
|
index: index
|
|
@@ -12938,24 +13063,21 @@ const EmptyData = {};
|
|
|
12938
13063
|
...chartsSection,
|
|
12939
13064
|
charts: summaryCharts
|
|
12940
13065
|
},
|
|
12941
|
-
data:
|
|
13066
|
+
data: cleanChartData ?? EmptyData,
|
|
12942
13067
|
isSuccess: isChartSuccess
|
|
12943
13068
|
}) : /*#__PURE__*/ jsxRuntime.jsx(Charts, {
|
|
12944
13069
|
charts: summaryCharts,
|
|
12945
|
-
data:
|
|
13070
|
+
data: cleanChartData ?? EmptyData,
|
|
12946
13071
|
counts: counts,
|
|
12947
13072
|
isSuccess: isChartSuccess,
|
|
12948
13073
|
numCols: numCols
|
|
12949
13074
|
}),
|
|
12950
13075
|
table?.enabled && /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
12951
13076
|
className: "mt-2 flex flex-col",
|
|
12952
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(
|
|
12953
|
-
|
|
12954
|
-
|
|
12955
|
-
|
|
12956
|
-
tableConfig: table,
|
|
12957
|
-
accessibility: accessLevel
|
|
12958
|
-
})
|
|
13077
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(ExplorerTable, {
|
|
13078
|
+
index: index,
|
|
13079
|
+
tableConfig: table,
|
|
13080
|
+
accessibility: accessLevel
|
|
12959
13081
|
})
|
|
12960
13082
|
})
|
|
12961
13083
|
]
|
|
@@ -12990,16 +13112,20 @@ const TabsLayoutToComponentProp = (tabsLayout)=>{
|
|
|
12990
13112
|
}
|
|
12991
13113
|
};
|
|
12992
13114
|
|
|
12993
|
-
const
|
|
13115
|
+
const useGetCurrentCohort = ()=>{
|
|
13116
|
+
return core.useCoreSelector((state)=>core.selectCurrentCohortId(state));
|
|
13117
|
+
};
|
|
13118
|
+
const CohortBuilder$1 = ({ explorerConfig, sharedFiltersMap = null, tabsLayout = 'left' })=>{
|
|
12994
13119
|
const dispatch = core.useCoreDispatch();
|
|
12995
13120
|
dispatch(core.setSharedFilters(sharedFiltersMap ?? {}));
|
|
12996
13121
|
const configuration = useDeepCompare.useDeepCompareMemo(()=>explorerConfig, [
|
|
12997
13122
|
explorerConfig
|
|
12998
13123
|
]);
|
|
12999
13124
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
13000
|
-
className: "w-full",
|
|
13125
|
+
className: "w-full mt-2",
|
|
13001
13126
|
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Tabs, {
|
|
13002
13127
|
color: "primary.4",
|
|
13128
|
+
variant: explorerConfig[0]?.tabType,
|
|
13003
13129
|
keepMounted: true,
|
|
13004
13130
|
defaultValue: explorerConfig[0].tabTitle,
|
|
13005
13131
|
children: [
|
|
@@ -13030,6 +13156,71 @@ const CohortBuilder = ({ explorerConfig, sharedFiltersMap = null, tabsLayout = '
|
|
|
13030
13156
|
});
|
|
13031
13157
|
};
|
|
13032
13158
|
|
|
13159
|
+
var CohortBuilder$2 = /*#__PURE__*/Object.freeze({
|
|
13160
|
+
__proto__: null,
|
|
13161
|
+
default: CohortBuilder$1,
|
|
13162
|
+
useGetCurrentCohort: useGetCurrentCohort
|
|
13163
|
+
});
|
|
13164
|
+
|
|
13165
|
+
const RowTableDetailsPanel = ({ row })=>{
|
|
13166
|
+
const rowData = row?.original ?? {};
|
|
13167
|
+
const rows = Object.entries(rowData).map(([field, value])=>/*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
13168
|
+
children: [
|
|
13169
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
13170
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
13171
|
+
fw: "bold",
|
|
13172
|
+
children: field
|
|
13173
|
+
})
|
|
13174
|
+
}),
|
|
13175
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Td, {
|
|
13176
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
|
|
13177
|
+
children: value ? value : ''
|
|
13178
|
+
})
|
|
13179
|
+
})
|
|
13180
|
+
]
|
|
13181
|
+
}, field));
|
|
13182
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Table, {
|
|
13183
|
+
striped: true,
|
|
13184
|
+
highlightOnHover: true,
|
|
13185
|
+
withTableBorder: true,
|
|
13186
|
+
withColumnBorders: true,
|
|
13187
|
+
children: [
|
|
13188
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Thead, {
|
|
13189
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Table.Tr, {
|
|
13190
|
+
children: [
|
|
13191
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Th, {
|
|
13192
|
+
children: "Field"
|
|
13193
|
+
}),
|
|
13194
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Th, {
|
|
13195
|
+
children: "Value"
|
|
13196
|
+
})
|
|
13197
|
+
]
|
|
13198
|
+
})
|
|
13199
|
+
}),
|
|
13200
|
+
/*#__PURE__*/ jsxRuntime.jsx(core$1.Table.Tbody, {
|
|
13201
|
+
children: rows
|
|
13202
|
+
})
|
|
13203
|
+
]
|
|
13204
|
+
});
|
|
13205
|
+
};
|
|
13206
|
+
|
|
13207
|
+
let instance$1;
|
|
13208
|
+
const DefaultRendererCatalog$1 = {
|
|
13209
|
+
tableDetails: {
|
|
13210
|
+
default: RowTableDetailsPanel,
|
|
13211
|
+
queryRowDetails: QueryRowDetailsPanel
|
|
13212
|
+
}
|
|
13213
|
+
};
|
|
13214
|
+
const ExplorerTableDetailsPanelFactory = ()=>{
|
|
13215
|
+
if (!instance$1) {
|
|
13216
|
+
instance$1 = new RenderFactoryTypedInstance();
|
|
13217
|
+
}
|
|
13218
|
+
return instance$1;
|
|
13219
|
+
};
|
|
13220
|
+
const registerCohortBuilderDefaultPreviewRenderers = ()=>{
|
|
13221
|
+
ExplorerTableDetailsPanelFactory().registerRendererCatalog(DefaultRendererCatalog$1);
|
|
13222
|
+
};
|
|
13223
|
+
|
|
13033
13224
|
const useCustomFacets = ()=>({
|
|
13034
13225
|
data: [],
|
|
13035
13226
|
isSuccess: true
|
|
@@ -14534,12 +14725,39 @@ const StaticNotebookViewer = ({ notebook })=>{
|
|
|
14534
14725
|
|
|
14535
14726
|
const StaticNotebookIFrame = ({ notebook })=>{
|
|
14536
14727
|
const router = router$1.useRouter();
|
|
14728
|
+
const iframeRef = React.useRef(null);
|
|
14729
|
+
React.useEffect(()=>{
|
|
14730
|
+
const iframe = iframeRef.current;
|
|
14731
|
+
const handleLoad = ()=>{
|
|
14732
|
+
try {
|
|
14733
|
+
// Access iframe document
|
|
14734
|
+
if (iframe) {
|
|
14735
|
+
const iframeDoc = iframe.contentDocument || iframe?.contentWindow?.document;
|
|
14736
|
+
// Find all anchor tags and add target="_blank"
|
|
14737
|
+
const links = iframeDoc?.querySelectorAll('a');
|
|
14738
|
+
links?.forEach((link)=>{
|
|
14739
|
+
link.setAttribute('target', '_blank');
|
|
14740
|
+
link.setAttribute('rel', 'noreferrer');
|
|
14741
|
+
});
|
|
14742
|
+
}
|
|
14743
|
+
} catch (error) {
|
|
14744
|
+
console.error('Cannot access iframe content:', error);
|
|
14745
|
+
}
|
|
14746
|
+
};
|
|
14747
|
+
if (iframe) {
|
|
14748
|
+
iframe.addEventListener('load', handleLoad);
|
|
14749
|
+
return ()=>iframe.removeEventListener('load', handleLoad);
|
|
14750
|
+
}
|
|
14751
|
+
}, []);
|
|
14537
14752
|
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14538
14753
|
className: "flex w-full h-full",
|
|
14539
14754
|
children: /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
14540
14755
|
className: "flex justify-items-center w-full",
|
|
14541
14756
|
children: /*#__PURE__*/ jsxRuntime.jsx("iframe", {
|
|
14542
|
-
|
|
14757
|
+
ref: iframeRef,
|
|
14758
|
+
sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox",
|
|
14759
|
+
referrerPolicy: "strict-origin-when-cross-origin",
|
|
14760
|
+
allow: "geolocation 'none'; microphone 'none'; camera 'none'",
|
|
14543
14761
|
src: `${router.basePath}/${GEN3_STATIC_NOTEBOOK_DIR}/${notebook}`,
|
|
14544
14762
|
width: "100%",
|
|
14545
14763
|
height: "100%",
|
|
@@ -14573,7 +14791,7 @@ class FilesystemContent {
|
|
|
14573
14791
|
try {
|
|
14574
14792
|
const files = myGlob(path.join(this.rootPath, filepath), filter);
|
|
14575
14793
|
return Promise.all(files.map((file)=>this.get(path.join(filepath, file))));
|
|
14576
|
-
} catch (
|
|
14794
|
+
} catch (_err) {
|
|
14577
14795
|
throw new Error(`getAllCannot process ${path.join(this.rootPath, filepath)}/${filter}`);
|
|
14578
14796
|
}
|
|
14579
14797
|
}
|
|
@@ -14628,12 +14846,18 @@ var ContentSource$1 = ContentSource.getInstance();
|
|
|
14628
14846
|
* @returns A Promise resolving to an object containing header and footer props.
|
|
14629
14847
|
*/ const getNavPageLayoutPropsFromConfig = async ()=>{
|
|
14630
14848
|
const navigationConfigJSON = await ContentSource$1.getContentDatabase().get(`${core.GEN3_COMMONS_NAME}/navigation.json`);
|
|
14631
|
-
|
|
14632
|
-
|
|
14633
|
-
|
|
14634
|
-
|
|
14635
|
-
|
|
14636
|
-
|
|
14849
|
+
const bannerConfigJSON = [];
|
|
14850
|
+
// TODO: enable later
|
|
14851
|
+
// try {
|
|
14852
|
+
// bannerConfigJSON = await ContentSource.getContentDatabase().get(
|
|
14853
|
+
// `${GEN3_COMMONS_NAME}/banner.json`,
|
|
14854
|
+
// );
|
|
14855
|
+
// } catch (error: unknown) {
|
|
14856
|
+
// console.warn(
|
|
14857
|
+
// 'No banner config found at: ',
|
|
14858
|
+
// `${GEN3_COMMONS_NAME}/banner.json`,
|
|
14859
|
+
// );
|
|
14860
|
+
// }
|
|
14637
14861
|
const { topBar, navigation, type = 'original' } = navigationConfigJSON;
|
|
14638
14862
|
let headerMetadata = {
|
|
14639
14863
|
title: 'Gen3 Frontend Framework Page',
|
|
@@ -15219,8 +15443,9 @@ const cohortsAdapter = toolkit.createEntityAdapter({
|
|
|
15219
15443
|
const DEFAULT_COHORT_NAME = 'Default';
|
|
15220
15444
|
const loadCohortsFromStorage = toolkit.createAsyncThunk('cohorts/loadFromStorage', async ()=>{
|
|
15221
15445
|
try {
|
|
15222
|
-
const
|
|
15223
|
-
return Object
|
|
15446
|
+
const results = await cohortStorage.getAllCohorts();
|
|
15447
|
+
if (results.data) return Object.values(results.data);
|
|
15448
|
+
else return [];
|
|
15224
15449
|
} catch (error) {
|
|
15225
15450
|
console.error('Failed to load cohorts:', error);
|
|
15226
15451
|
return [];
|
|
@@ -15262,11 +15487,13 @@ const deleteCohortFromStorage = toolkit.createAsyncThunk('cohorts/deleteFromStor
|
|
|
15262
15487
|
return cohortId;
|
|
15263
15488
|
});
|
|
15264
15489
|
const emptyInitialState = cohortsAdapter.getInitialState({
|
|
15265
|
-
currentCohortId: '
|
|
15490
|
+
currentCohortId: 'uninitialized',
|
|
15266
15491
|
loading: false,
|
|
15492
|
+
uninitialized: true,
|
|
15267
15493
|
error: null,
|
|
15268
15494
|
autoSaveInProgress: []
|
|
15269
15495
|
});
|
|
15496
|
+
// const initialState = emptyInitialState;
|
|
15270
15497
|
const initialState = cohortsAdapter.addOne(emptyInitialState, createDefaultCohort());
|
|
15271
15498
|
const updateAutoSave = (cohortId, state)=>{
|
|
15272
15499
|
// Add to auto-save queue if not already present
|
|
@@ -15447,16 +15674,24 @@ const cohortManagerSlice = toolkit.createSlice({
|
|
|
15447
15674
|
extraReducers: (builder)=>{
|
|
15448
15675
|
builder.addCase(loadCohortsFromStorage.pending, (state)=>{
|
|
15449
15676
|
state.loading = true;
|
|
15677
|
+
state.uninitialized = false;
|
|
15450
15678
|
state.error = null;
|
|
15679
|
+
console.log('loadCohortsFromStorage.pending');
|
|
15451
15680
|
}).addCase(loadCohortsFromStorage.fulfilled, (state, action)=>{
|
|
15452
15681
|
state.loading = false;
|
|
15682
|
+
console.log('loadCohortsFromStorage.fulfilled', action.payload);
|
|
15453
15683
|
if (action.payload.length > 0) {
|
|
15454
|
-
if (Object.keys(state.entities).length
|
|
15455
|
-
cohortsAdapter.
|
|
15684
|
+
if (Object.keys(state.entities).length >= 0) {
|
|
15685
|
+
cohortsAdapter.removeAll(state);
|
|
15456
15686
|
}
|
|
15457
15687
|
cohortsAdapter.addMany(state, action.payload);
|
|
15458
15688
|
const sortedCohorts = action.payload.sort((a, b)=>b.modifiedDatetime.localeCompare(a.modifiedDatetime));
|
|
15459
15689
|
state.currentCohortId = sortedCohorts[0].id;
|
|
15690
|
+
} else {
|
|
15691
|
+
// No cohorts in storage, create default cohort
|
|
15692
|
+
const defaultCohort = createDefaultCohort();
|
|
15693
|
+
cohortsAdapter.addOne(state, defaultCohort);
|
|
15694
|
+
state.currentCohortId = defaultCohort.id;
|
|
15460
15695
|
}
|
|
15461
15696
|
}).addCase(loadCohortsFromStorage.rejected, (state, action)=>{
|
|
15462
15697
|
state.loading = false;
|
|
@@ -15513,6 +15748,7 @@ const cohortManagerReducer = cohortManagerSlice.reducer;
|
|
|
15513
15748
|
const getCurrentCohort = (state)=>{
|
|
15514
15749
|
const cohort = state.entities[state.currentCohortId];
|
|
15515
15750
|
if (!cohort) {
|
|
15751
|
+
console.log('creating default cohort');
|
|
15516
15752
|
return createDefaultCohort();
|
|
15517
15753
|
}
|
|
15518
15754
|
return cohort;
|
|
@@ -15622,7 +15858,6 @@ const reducers = redux.combineReducers({
|
|
|
15622
15858
|
filtersExpandedState: filtersExpandedReducer,
|
|
15623
15859
|
facetDefinitionState: facetDefinitionsReducer,
|
|
15624
15860
|
cohorts: cohortManagerReducer,
|
|
15625
|
-
// savedCohorts: saveCohortPersistenceReducer,
|
|
15626
15861
|
dataAccessRequests: dataAccessRequestsReducer
|
|
15627
15862
|
});
|
|
15628
15863
|
const persistedReducers = reduxPersist.persistReducer(persistConfig, reducers);
|
|
@@ -15633,6 +15868,10 @@ const { id, AppStore, AppContext, useAppSelector, useAppDispatch } = core.create
|
|
|
15633
15868
|
version: '0.0.1'
|
|
15634
15869
|
});
|
|
15635
15870
|
|
|
15871
|
+
process.env.GEN3_COHORT_DISCOVERY_API || `${core.GEN3_API}/api/auth/analysis/cohortDiscovery`;
|
|
15872
|
+
const UninitializeCohort = {
|
|
15873
|
+
filters: {}};
|
|
15874
|
+
|
|
15636
15875
|
// Selectors
|
|
15637
15876
|
const { selectAll: selectAllCohorts, selectTotal: selectTotalCohorts, selectById: selectCohortById, selectIds: selectCohortIds } = cohortsAdapter.getSelectors((state)=>state.cohorts);
|
|
15638
15877
|
const selectCurrentCohortId = (state)=>state.cohorts.currentCohortId;
|
|
@@ -15640,7 +15879,7 @@ const selectCurrentCohort = (state)=>{
|
|
|
15640
15879
|
const { currentCohortId, entities } = state.cohorts;
|
|
15641
15880
|
const cohort = entities[currentCohortId];
|
|
15642
15881
|
if (!cohort) {
|
|
15643
|
-
return
|
|
15882
|
+
return null;
|
|
15644
15883
|
}
|
|
15645
15884
|
return cohort;
|
|
15646
15885
|
};
|
|
@@ -15662,15 +15901,15 @@ toolkit.createSelector([
|
|
|
15662
15901
|
], (autoSaveArray, cohortId)=>autoSaveArray.includes(cohortId));
|
|
15663
15902
|
const selectCurrentCohortName = toolkit.createSelector([
|
|
15664
15903
|
selectCurrentCohort
|
|
15665
|
-
], (cohort)=>cohort
|
|
15904
|
+
], (cohort)=>cohort?.name ?? 'No Cohort Defined');
|
|
15666
15905
|
const selectCurrentCohortFilters = toolkit.createSelector([
|
|
15667
15906
|
selectCurrentCohort
|
|
15668
|
-
], (cohort)=>cohort.filters);
|
|
15907
|
+
], (cohort)=>cohort ? cohort.filters : UninitializeCohort.filters);
|
|
15669
15908
|
const selectCurrentCohortIndexFilters = toolkit.createSelector([
|
|
15670
15909
|
selectCurrentCohort,
|
|
15671
15910
|
(state, index)=>index
|
|
15672
15911
|
], (cohort, index)=>{
|
|
15673
|
-
return cohort
|
|
15912
|
+
return cohort?.filters?.[index] ?? EmptyFilterSet;
|
|
15674
15913
|
});
|
|
15675
15914
|
toolkit.createSelector([
|
|
15676
15915
|
selectAllCohorts,
|
|
@@ -15682,7 +15921,6 @@ toolkit.createSelector([
|
|
|
15682
15921
|
const trimmedName = params.name.trim().toLowerCase();
|
|
15683
15922
|
return cohorts.some((cohort)=>cohort.id !== params.excludeId && cohort.name.trim().toLowerCase() === trimmedName);
|
|
15684
15923
|
});
|
|
15685
|
-
const selectCohortManagerLoading = (state)=>state.cohorts.loading;
|
|
15686
15924
|
const selectCohortIdToNameMap = toolkit.createSelector([
|
|
15687
15925
|
selectAllCohorts
|
|
15688
15926
|
], (cohorts)=>{
|
|
@@ -16149,14 +16387,12 @@ const submitCohortRequestAction = async (cohort, values, user, indexResources, r
|
|
|
16149
16387
|
}
|
|
16150
16388
|
};
|
|
16151
16389
|
|
|
16152
|
-
const
|
|
16153
|
-
const
|
|
16390
|
+
const CohortManagerPanel = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
16391
|
+
const appDispatch = useAppDispatch();
|
|
16154
16392
|
const [isEditing, setIsEditing] = React.useState(false);
|
|
16155
16393
|
const [editingLabel, setEditingLabel] = React.useState('');
|
|
16156
16394
|
const allCohorts = useAppSelector(selectAllCohorts);
|
|
16157
16395
|
const currentCohort = useAppSelector(selectCurrentCohort);
|
|
16158
|
-
const loading = useAppSelector(selectCohortManagerLoading);
|
|
16159
|
-
const appDispatch = useAppDispatch();
|
|
16160
16396
|
const [getGetAggs] = core.useLazyGetAggsNoFilterSelfQuery();
|
|
16161
16397
|
const [requestQuery] = core.useCreateRequestMutation();
|
|
16162
16398
|
const user = core.useCoreSelector(core.selectUserDetails);
|
|
@@ -16173,7 +16409,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16173
16409
|
};
|
|
16174
16410
|
const saveEdit = ()=>{
|
|
16175
16411
|
if (editingLabel.trim() === '' || !currentCohort.name) return;
|
|
16176
|
-
|
|
16412
|
+
appDispatch(updateCohortName({
|
|
16177
16413
|
id: currentCohort.id,
|
|
16178
16414
|
name: editingLabel
|
|
16179
16415
|
}));
|
|
@@ -16181,7 +16417,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16181
16417
|
setEditingLabel('');
|
|
16182
16418
|
};
|
|
16183
16419
|
const handleCreateNew = ()=>{
|
|
16184
|
-
|
|
16420
|
+
appDispatch(createNewCohort({
|
|
16185
16421
|
name: 'New Cohort'
|
|
16186
16422
|
}));
|
|
16187
16423
|
};
|
|
@@ -16193,22 +16429,26 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16193
16429
|
}, [
|
|
16194
16430
|
allCohorts
|
|
16195
16431
|
]);
|
|
16432
|
+
useDeepCompare.useDeepCompareEffect(()=>{
|
|
16433
|
+
if (!currentCohort) {
|
|
16434
|
+
appDispatch(setCurrentCohortId(allCohorts[0].id));
|
|
16435
|
+
}
|
|
16436
|
+
}, [
|
|
16437
|
+
allCohorts,
|
|
16438
|
+
currentCohort,
|
|
16439
|
+
setCurrentCohortId
|
|
16440
|
+
]);
|
|
16196
16441
|
const onSelectCohort = React.useCallback((_value, option)=>{
|
|
16197
16442
|
if (option) {
|
|
16198
|
-
|
|
16443
|
+
appDispatch(setCurrentCohortId(option.value));
|
|
16199
16444
|
}
|
|
16200
16445
|
}, [
|
|
16201
|
-
|
|
16446
|
+
appDispatch
|
|
16202
16447
|
]);
|
|
16203
16448
|
const handleCohortAccessRequest = async (cohortId, values)=>{
|
|
16204
16449
|
const cohort = allCohorts.find((obj)=>obj.id === cohortId);
|
|
16205
16450
|
if (cohort) await submitCohortRequestAction(cohort, values, user, indexResources, remoteSupportService, appDispatch, getGetAggs, requestQuery);
|
|
16206
16451
|
};
|
|
16207
|
-
if (loading) {
|
|
16208
|
-
return /*#__PURE__*/ jsxRuntime.jsx("div", {
|
|
16209
|
-
children: "Loading cohorts..."
|
|
16210
|
-
});
|
|
16211
|
-
}
|
|
16212
16452
|
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Group, {
|
|
16213
16453
|
gap: "xs",
|
|
16214
16454
|
className: "flex pt-4 pl-2",
|
|
@@ -16266,7 +16506,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16266
16506
|
onClick: saveEdit,
|
|
16267
16507
|
"data-testid": "completeCohortRenameButton",
|
|
16268
16508
|
"aria-label": "Complete rename cohort",
|
|
16269
|
-
disabled: editingLabel.trim() === '' || editingLabel.trim() === currentCohort
|
|
16509
|
+
disabled: editingLabel.trim() === '' || editingLabel.trim() === currentCohort?.name,
|
|
16270
16510
|
size: `compact-${size}`,
|
|
16271
16511
|
children: /*#__PURE__*/ jsxRuntime.jsx(react.Icon, {
|
|
16272
16512
|
icon: "gen3:check",
|
|
@@ -16341,7 +16581,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16341
16581
|
color: theme.colors.accent[4]
|
|
16342
16582
|
},
|
|
16343
16583
|
onConfirm: ()=>{
|
|
16344
|
-
|
|
16584
|
+
appDispatch(removeCohort(currentCohort.id));
|
|
16345
16585
|
}
|
|
16346
16586
|
});
|
|
16347
16587
|
},
|
|
@@ -16383,8 +16623,15 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
|
16383
16623
|
]
|
|
16384
16624
|
});
|
|
16385
16625
|
};
|
|
16386
|
-
|
|
16387
|
-
|
|
16626
|
+
const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
|
|
16627
|
+
// TODO: initialize and load cohorts from cohort storage
|
|
16628
|
+
// as right now the redux-persist is handling cohorts
|
|
16629
|
+
return /*#__PURE__*/ jsxRuntime.jsx(CohortManagerPanel, {
|
|
16630
|
+
indexResources: indexResources,
|
|
16631
|
+
remoteSupportService: remoteSupportService,
|
|
16632
|
+
size: size
|
|
16633
|
+
});
|
|
16634
|
+
};
|
|
16388
16635
|
|
|
16389
16636
|
const useGraphQLData = (url, body, skip)=>{
|
|
16390
16637
|
// Create a fetcher function that handles the GraphQL POST request
|
|
@@ -16853,22 +17100,6 @@ const SavedCohortsTable = ({ indexResources, remoteSupportService, size = 'md' }
|
|
|
16853
17100
|
})
|
|
16854
17101
|
})
|
|
16855
17102
|
}),
|
|
16856
|
-
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tooltip, {
|
|
16857
|
-
label: "Select Cohort",
|
|
16858
|
-
withArrow: true,
|
|
16859
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(core$1.ActionIcon, {
|
|
16860
|
-
color: "accent.4",
|
|
16861
|
-
variant: "transparent",
|
|
16862
|
-
"aria-label": "Select cohort",
|
|
16863
|
-
onClick: ()=>{},
|
|
16864
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(react.Icon, {
|
|
16865
|
-
icon: "gen3:cohort",
|
|
16866
|
-
height: iconSize,
|
|
16867
|
-
width: iconSize,
|
|
16868
|
-
color: theme.colors.secondary[4]
|
|
16869
|
-
})
|
|
16870
|
-
})
|
|
16871
|
-
}),
|
|
16872
17103
|
/*#__PURE__*/ jsxRuntime.jsx(core$1.Tooltip, {
|
|
16873
17104
|
label: "Delete Cohort",
|
|
16874
17105
|
withArrow: true,
|
|
@@ -19396,6 +19627,7 @@ const MetadataDictionary = ({ schemas })=>{
|
|
|
19396
19627
|
}
|
|
19397
19628
|
return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Tabs, {
|
|
19398
19629
|
defaultValue: schemas[0].schemaID,
|
|
19630
|
+
variant: schemas[0]?.tabType,
|
|
19399
19631
|
className: "w-full",
|
|
19400
19632
|
keepMounted: false,
|
|
19401
19633
|
children: [
|
|
@@ -19735,6 +19967,7 @@ const Discovery = ({ discoveryConfig })=>{
|
|
|
19735
19967
|
children: /*#__PURE__*/ jsxRuntime.jsxs(core$1.Tabs, {
|
|
19736
19968
|
className: "w-full",
|
|
19737
19969
|
defaultValue: metadataIndex,
|
|
19970
|
+
variant: discoveryConfig.metadataConfig[0]?.tabType,
|
|
19738
19971
|
onChange: (v)=>{
|
|
19739
19972
|
setMetadataIndex(v ?? '0');
|
|
19740
19973
|
},
|
|
@@ -20036,6 +20269,9 @@ const LandingPageGetServerSideProps = async ()=>{
|
|
|
20036
20269
|
};
|
|
20037
20270
|
};
|
|
20038
20271
|
|
|
20272
|
+
const CohortBuilder = dynamic(()=>Promise.resolve().then(function () { return CohortBuilder$2; }), {
|
|
20273
|
+
ssr: false
|
|
20274
|
+
});
|
|
20039
20275
|
const ExplorerPage = ({ headerProps, footerProps, explorerConfig, headerMetadata, tabsLayout, sharedFiltersMap })=>{
|
|
20040
20276
|
if (explorerConfig === undefined) {
|
|
20041
20277
|
return /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
|
|
@@ -25933,6 +26169,13 @@ const staticNotebookAPI = async (req, res)=>{
|
|
|
25933
26169
|
});
|
|
25934
26170
|
}
|
|
25935
26171
|
const rawContent = fs.readFileSync(fullPath, 'utf8');
|
|
26172
|
+
DOMPurify.addHook('afterSanitizeAttributes', function(node) {
|
|
26173
|
+
if (node.tagName === 'a' || node.tagName === 'A') {
|
|
26174
|
+
// Check for anchor tags and target attribute
|
|
26175
|
+
node.setAttribute('target', '_blank');
|
|
26176
|
+
node.setAttribute('rel', 'noopener'); // Prevent window.opener vulnerability
|
|
26177
|
+
}
|
|
26178
|
+
});
|
|
25936
26179
|
const sanitizedContent = DOMPurify.sanitize(rawContent, {
|
|
25937
26180
|
ALLOWED_TAGS: [
|
|
25938
26181
|
'p',
|
|
@@ -26000,7 +26243,7 @@ exports.BAD_DATA_MESSAGE = BAD_DATA_MESSAGE;
|
|
|
26000
26243
|
exports.Banner = Banner;
|
|
26001
26244
|
exports.BaseModal = BaseModal;
|
|
26002
26245
|
exports.Charts = Charts;
|
|
26003
|
-
exports.CohortBuilder = CohortBuilder;
|
|
26246
|
+
exports.CohortBuilder = CohortBuilder$1;
|
|
26004
26247
|
exports.CohortManager = CohortManager$1;
|
|
26005
26248
|
exports.CollapsableCharts = CollapsableCharts;
|
|
26006
26249
|
exports.CollapsableSidebar = CollapsableSidebar;
|
|
@@ -26127,6 +26370,7 @@ exports.credentialsLogin = credentialsLogin;
|
|
|
26127
26370
|
exports.credentialsLogout = credentialsLogout;
|
|
26128
26371
|
exports.extractObjectKey = extractObjectKey;
|
|
26129
26372
|
exports.extractRangeValues = extractRangeValues;
|
|
26373
|
+
exports.filterAggregationsDataKeys = filterAggregationsDataKeys;
|
|
26130
26374
|
exports.focusStyles = focusStyles;
|
|
26131
26375
|
exports.getAllFieldsFromFilterConfigs = getAllFieldsFromFilterConfigs;
|
|
26132
26376
|
exports.getCurrentUnixTimestamp = getCurrentUnixTimestamp;
|