@gen3/frontend 0.10.66 → 0.10.68

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.
Files changed (47) hide show
  1. package/dist/cjs/index.js +69 -147
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/dts/components/charts/Charts.d.ts +0 -1
  4. package/dist/dts/components/charts/Charts.d.ts.map +1 -1
  5. package/dist/dts/components/charts/Charts.js +5 -1
  6. package/dist/dts/components/charts/Charts.js.map +1 -1
  7. package/dist/dts/components/charts/echarts/PieChart.d.ts +1 -1
  8. package/dist/dts/components/charts/echarts/PieChart.d.ts.map +1 -1
  9. package/dist/dts/components/charts/echarts/PieChart.js +2 -5
  10. package/dist/dts/components/charts/echarts/PieChart.js.map +1 -1
  11. package/dist/dts/components/charts/types.d.ts +6 -0
  12. package/dist/dts/components/charts/types.d.ts.map +1 -1
  13. package/dist/dts/features/DataLibrary/selection/exportActions.d.ts.map +1 -1
  14. package/dist/dts/features/DataLibrary/selection/exportActions.js +0 -1
  15. package/dist/dts/features/DataLibrary/selection/exportActions.js.map +1 -1
  16. package/dist/dts/features/Discovery/Charts/ChartsPanel.d.ts +5 -2
  17. package/dist/dts/features/Discovery/Charts/ChartsPanel.d.ts.map +1 -1
  18. package/dist/dts/features/Discovery/Charts/ChartsPanel.js +6 -117
  19. package/dist/dts/features/Discovery/Charts/ChartsPanel.js.map +1 -1
  20. package/dist/dts/features/Discovery/DataLoaders/AggMDSServer/DataLoader.d.ts.map +1 -1
  21. package/dist/dts/features/Discovery/DataLoaders/AggMDSServer/DataLoader.js +1 -0
  22. package/dist/dts/features/Discovery/DataLoaders/AggMDSServer/DataLoader.js.map +1 -1
  23. package/dist/dts/features/Discovery/DataLoaders/MDSAllLocal/DataLoader.d.ts.map +1 -1
  24. package/dist/dts/features/Discovery/DataLoaders/MDSAllLocal/DataLoader.js +20 -14
  25. package/dist/dts/features/Discovery/DataLoaders/MDSAllLocal/DataLoader.js.map +1 -1
  26. package/dist/dts/features/Discovery/DataLoaders/utils.d.ts +2 -1
  27. package/dist/dts/features/Discovery/DataLoaders/utils.d.ts.map +1 -1
  28. package/dist/dts/features/Discovery/DataLoaders/utils.js +32 -0
  29. package/dist/dts/features/Discovery/DataLoaders/utils.js.map +1 -1
  30. package/dist/dts/features/Discovery/DiscoveryIndexPanel.d.ts.map +1 -1
  31. package/dist/dts/features/Discovery/DiscoveryIndexPanel.js +2 -2
  32. package/dist/dts/features/Discovery/DiscoveryIndexPanel.js.map +1 -1
  33. package/dist/dts/features/Discovery/Statistics/StatisticsRendererFactory.d.ts +1 -0
  34. package/dist/dts/features/Discovery/Statistics/StatisticsRendererFactory.d.ts.map +1 -1
  35. package/dist/dts/features/Discovery/Statistics/StatisticsRendererFactory.js +6 -3
  36. package/dist/dts/features/Discovery/Statistics/StatisticsRendererFactory.js.map +1 -1
  37. package/dist/dts/features/Discovery/Statistics/SummaryStatisticPanel.d.ts.map +1 -1
  38. package/dist/dts/features/Discovery/Statistics/SummaryStatisticPanel.js +3 -3
  39. package/dist/dts/features/Discovery/Statistics/SummaryStatisticPanel.js.map +1 -1
  40. package/dist/dts/features/Discovery/types.d.ts +6 -4
  41. package/dist/dts/features/Discovery/types.d.ts.map +1 -1
  42. package/dist/dts/features/Discovery/types.js.map +1 -1
  43. package/dist/esm/index.js +69 -147
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/index.d.ts +11 -3
  46. package/dist/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +2 -2
package/dist/cjs/index.js CHANGED
@@ -1692,7 +1692,7 @@ const ReactECharts = ({ option, style, settings, loading, theme })=>{
1692
1692
  };
1693
1693
 
1694
1694
  const filterMissing = (facetData)=>facetData.filter((d)=>d.key !== '_missing');
1695
- const processChartData$4 = (facetData, maxBins = 100)=>{
1695
+ const processChartData$5 = (facetData, maxBins = 100)=>{
1696
1696
  if (!facetData) {
1697
1697
  return [];
1698
1698
  }
@@ -1741,7 +1741,7 @@ const BarChart = ({ data })=>{
1741
1741
  series: [
1742
1742
  {
1743
1743
  type: 'bar',
1744
- data: processChartData$4(data)
1744
+ data: processChartData$5(data)
1745
1745
  }
1746
1746
  ]
1747
1747
  };
@@ -1756,7 +1756,7 @@ const BarChart = ({ data })=>{
1756
1756
  });
1757
1757
  };
1758
1758
 
1759
- const processChartData$3 = (facetData, maxBins = 100)=>{
1759
+ const processChartData$4 = (facetData, maxBins = 100)=>{
1760
1760
  if (!facetData) {
1761
1761
  return [];
1762
1762
  }
@@ -1767,13 +1767,9 @@ const processChartData$3 = (facetData, maxBins = 100)=>{
1767
1767
  }));
1768
1768
  return results;
1769
1769
  };
1770
- const PieChart = ({ data })=>{
1770
+ const PieChart = ({ data, label })=>{
1771
1771
  const chartDefinition = React.useMemo(()=>{
1772
1772
  return {
1773
- label: {
1774
- show: true,
1775
- fontSize: '14'
1776
- },
1777
1773
  emphasis: {
1778
1774
  label: {
1779
1775
  show: true,
@@ -1787,8 +1783,9 @@ const PieChart = ({ data })=>{
1787
1783
  {
1788
1784
  type: 'pie',
1789
1785
  radius: '60%',
1790
- data: processChartData$3(data),
1786
+ data: processChartData$4(data),
1791
1787
  label: {
1788
+ show: label?.show !== undefined ? label.show : true,
1792
1789
  fontSize: '14',
1793
1790
  fontWeight: 'bold',
1794
1791
  overflow: 'break'
@@ -1807,7 +1804,7 @@ const PieChart = ({ data })=>{
1807
1804
  });
1808
1805
  };
1809
1806
 
1810
- const processChartData$2 = (facetData, maxBins = 100)=>{
1807
+ const processChartData$3 = (facetData, maxBins = 100)=>{
1811
1808
  if (!facetData) {
1812
1809
  return [];
1813
1810
  }
@@ -1839,7 +1836,7 @@ const DonutChart = ({ data })=>{
1839
1836
  '30%',
1840
1837
  '60%'
1841
1838
  ],
1842
- data: processChartData$2(data),
1839
+ data: processChartData$3(data),
1843
1840
  label: {
1844
1841
  show: false,
1845
1842
  position: 'center'
@@ -1863,7 +1860,7 @@ const DonutChart = ({ data })=>{
1863
1860
 
1864
1861
  const ExtractDataCount = (d, _ = undefined)=>d.count;
1865
1862
  const ExtractDataPercent = (d, total)=>total ? Math.round((d.count / total * 100.0 + Number.EPSILON) * 100) / 100 : 0;
1866
- const processChartData$1 = (facetData, valueType = 'count', total, maxBins = 100)=>{
1863
+ const processChartData$2 = (facetData, valueType = 'count', total, maxBins = 100)=>{
1867
1864
  if (!facetData) {
1868
1865
  return [];
1869
1866
  }
@@ -1885,7 +1882,7 @@ const processChartData$1 = (facetData, valueType = 'count', total, maxBins = 100
1885
1882
  return results;
1886
1883
  };
1887
1884
  const HorizontalBarChart = ({ data, valueType, total })=>{
1888
- const chartData = processChartData$1(data, valueType, total);
1885
+ const chartData = processChartData$2(data, valueType, total);
1889
1886
  const chartDefinition = React.useMemo(()=>{
1890
1887
  return {
1891
1888
  tooltip: {
@@ -1981,7 +1978,8 @@ const chartColors = [
1981
1978
  const Charts = ({ charts, data, counts, isSuccess, numCols = DEFAULT_COLS, style = 'tile', showLegends = false })=>{
1982
1979
  const spans = computeRowSpan(Object.keys(charts).length, numCols);
1983
1980
  const chartCard = (field, indexNum)=>{
1984
- if (!(field in data)) {
1981
+ if (Object.keys(data).length === 0) return null;
1982
+ if (Object.keys(data).length > 0 && !(field in data)) {
1985
1983
  return /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
1986
1984
  message: `${field} not found in data`
1987
1985
  });
@@ -2026,7 +2024,8 @@ const Charts = ({ charts, data, counts, isSuccess, numCols = DEFAULT_COLS, style
2026
2024
  children: createChart(chart.chartType, {
2027
2025
  data: data === undefined ? [] : data,
2028
2026
  total: counts ?? 1,
2029
- valueType: chart.valueType ?? 'count'
2027
+ valueType: chart.valueType ?? 'count',
2028
+ label: chart.label
2030
2029
  })
2031
2030
  }, "modal-col-1"),
2032
2031
  /*#__PURE__*/ jsxRuntime.jsx(core$1.Grid.Col, {
@@ -2113,7 +2112,8 @@ const Charts = ({ charts, data, counts, isSuccess, numCols = DEFAULT_COLS, style
2113
2112
  createChart(charts[field].chartType, {
2114
2113
  data: data === undefined ? [] : data[field],
2115
2114
  total: counts ?? 1,
2116
- valueType: charts[field].valueType ?? 'count'
2115
+ valueType: charts[field].valueType ?? 'count',
2116
+ label: charts[field].label
2117
2117
  }),
2118
2118
  showLegends && /*#__PURE__*/ jsxRuntime.jsx(core$1.Card.Section, {
2119
2119
  inheritPadding: true,
@@ -2177,7 +2177,7 @@ const maxValuesToDisplay = 7;
2177
2177
  // from https://stackoverflow.com/questions/33053310/remove-value-from-object-without-mutation
2178
2178
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2179
2179
  const removeKey = (key, { [key]: _, ...rest })=>rest;
2180
- const processChartData = (facetData, selectedEnums, maxBins = 100)=>{
2180
+ const processChartData$1 = (facetData, selectedEnums, maxBins = 100)=>{
2181
2181
  const data = removeKey('_missing', facetData);
2182
2182
  const results = Object.keys(data).filter((d)=>!selectedEnums || selectedEnums.length === 0 ? d : selectedEnums.includes(d)).slice(0, maxBins).map((d)=>({
2183
2183
  x: processLabel(d),
@@ -2190,7 +2190,7 @@ const EnumFacetChart = ({ field, data, selectedEnums, isSuccess, height, showTit
2190
2190
  const { ref, width } = hooks.useElementSize();
2191
2191
  React.useEffect(()=>{
2192
2192
  if (isSuccess) {
2193
- const cd = processChartData(data, selectedEnums, maxBins);
2193
+ const cd = processChartData$1(data, selectedEnums, maxBins);
2194
2194
  setChartData(cd);
2195
2195
  } else {
2196
2196
  setChartData([]);
@@ -5095,19 +5095,20 @@ const ActionBar = ({ config })=>{
5095
5095
  });
5096
5096
  };
5097
5097
 
5098
- const defaultStatisticRenderer = ({ value, label, ...props })=>{
5099
- return /*#__PURE__*/ jsxRuntime.jsxs(core$1.Stack, {
5098
+ const defaultStatisticRenderer = ({ value, label, key, ...props })=>{
5099
+ return /*#__PURE__*/ React.createElement(core$1.Stack, {
5100
5100
  ...props,
5101
+ key: key,
5101
5102
  align: "center",
5102
5103
  children: [
5103
5104
  /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
5104
5105
  size: "2rem",
5105
- color: "accent",
5106
+ c: "accent",
5106
5107
  children: value
5107
5108
  }),
5108
5109
  /*#__PURE__*/ jsxRuntime.jsx(core$1.Text, {
5109
5110
  size: "sm",
5110
- color: "primary",
5111
+ c: "primary",
5111
5112
  className: "uppercase",
5112
5113
  children: label
5113
5114
  })
@@ -5137,7 +5138,7 @@ const BuildSummaryStatisticPanel = (summaries = [])=>{
5137
5138
  return element({
5138
5139
  value: summary.value ?? 'N/A',
5139
5140
  label: name,
5140
- key: `stats-item-${name}-${field}-${type}`
5141
+ key: `stats-item-${name}-${field}`
5141
5142
  });
5142
5143
  }
5143
5144
  });
@@ -5162,25 +5163,15 @@ const SummaryStatisticPanel = ({ summaries })=>{
5162
5163
  });
5163
5164
  };
5164
5165
 
5165
- const ChartsPanel = ({ config })=>{
5166
+ const ChartsPanel = ({ config, data })=>{
5166
5167
  const [showLegends, setShowLegends] = React.useState(config.showLegends?.enabled);
5167
- if (!(config?.charts && config.charts.length > 0)) {
5168
- console.error('Discovery Charts Section not setup properly');
5169
- return;
5170
- }
5171
- const chartsProperties = ()=>{
5172
- const chartDataTemp = {};
5173
- config?.charts?.forEach((chart, index)=>{
5174
- chartDataTemp[`testName${index}`] = {
5175
- //TODO use from data
5176
- title: chart.title,
5177
- chartType: chart.chartType,
5178
- valueType: chart.valueType,
5179
- dataLabels: chart.dataLabels
5180
- };
5168
+ if (!(config?.charts && Object.keys(config.charts).length > 0)) {
5169
+ return /*#__PURE__*/ jsxRuntime.jsx(core$1.Center, {
5170
+ children: /*#__PURE__*/ jsxRuntime.jsx(ErrorCard, {
5171
+ message: "Discovery Charts Section not setup properly"
5172
+ })
5181
5173
  });
5182
- return chartDataTemp;
5183
- };
5174
+ }
5184
5175
  return /*#__PURE__*/ jsxRuntime.jsx(core$1.Accordion, {
5185
5176
  unstyled: true,
5186
5177
  classNames: {
@@ -5221,105 +5212,8 @@ const ChartsPanel = ({ config })=>{
5221
5212
  children: /*#__PURE__*/ jsxRuntime.jsx(Charts, {
5222
5213
  showLegends: showLegends,
5223
5214
  style: "box",
5224
- charts: chartsProperties(),
5225
- data: {
5226
- testName0: [
5227
- {
5228
- key: 'a',
5229
- count: 11
5230
- },
5231
- {
5232
- key: 'b',
5233
- count: 9
5234
- },
5235
- {
5236
- key: 'c',
5237
- count: 3
5238
- },
5239
- {
5240
- key: 'd',
5241
- count: 1
5242
- },
5243
- {
5244
- key: 'e',
5245
- count: 0
5246
- }
5247
- ],
5248
- testName1: [
5249
- {
5250
- key: 'a',
5251
- count: 11
5252
- },
5253
- {
5254
- key: 'b',
5255
- count: 9
5256
- },
5257
- {
5258
- key: 'c',
5259
- count: 3
5260
- }
5261
- ],
5262
- testName2: [
5263
- {
5264
- key: 'a',
5265
- count: 11
5266
- },
5267
- {
5268
- key: 'b',
5269
- count: 9
5270
- },
5271
- {
5272
- key: 'c',
5273
- count: 3
5274
- }
5275
- ],
5276
- testName3: [
5277
- {
5278
- key: 'a',
5279
- count: 1
5280
- },
5281
- {
5282
- key: 'b',
5283
- count: 2
5284
- },
5285
- {
5286
- key: 'c',
5287
- count: 3
5288
- },
5289
- {
5290
- key: 'd',
5291
- count: 4
5292
- },
5293
- {
5294
- key: 'e',
5295
- count: 5
5296
- },
5297
- {
5298
- key: 'f',
5299
- count: 6
5300
- },
5301
- {
5302
- key: 'g',
5303
- count: 7
5304
- },
5305
- {
5306
- key: 'h',
5307
- count: 8
5308
- },
5309
- {
5310
- key: 'i',
5311
- count: 9
5312
- },
5313
- {
5314
- key: 'j',
5315
- count: 10
5316
- },
5317
- {
5318
- key: 'k',
5319
- count: 11
5320
- }
5321
- ]
5322
- },
5215
+ charts: config.charts,
5216
+ data: data,
5323
5217
  counts: 2,
5324
5218
  isSuccess: true,
5325
5219
  numCols: 4
@@ -5539,6 +5433,33 @@ const processAuthorizations = (data, config, authMapping)=>{
5539
5433
  };
5540
5434
  });
5541
5435
  };
5436
+ const processChartData = (data, pathsToProcess)=>{
5437
+ // Initialize results object
5438
+ const results = {};
5439
+ pathsToProcess.forEach((path)=>{
5440
+ // Use JSONPath to extract all values at the given path
5441
+ const values = jsonpathPlus.JSONPath({
5442
+ path: `$[*].${path}`,
5443
+ json: data,
5444
+ flatten: true
5445
+ });
5446
+ // Count occurrences of each value
5447
+ // add missing to count null values
5448
+ const counts = {};
5449
+ values.forEach((value)=>{
5450
+ if (value && value !== '') {
5451
+ counts[value] = (counts[value] || 0) + 1;
5452
+ }
5453
+ });
5454
+ // Convert to required format and sort by count
5455
+ // Store results using the path as key
5456
+ results[path] = Object.entries(counts).map(([key, count])=>({
5457
+ key,
5458
+ count
5459
+ })).sort((a, b)=>b.count - a.count);
5460
+ });
5461
+ return results;
5462
+ };
5542
5463
 
5543
5464
  // TODO remove after debugging
5544
5465
  // import { reactWhatChanged as RWC } from 'react-what-changed';
@@ -5802,6 +5723,7 @@ const useLoadAllData = ({ pagination, searchTerms, advancedSearchTerms, discover
5802
5723
  const dataGuidType = discoveryConfig?.guidType ?? guidType;
5803
5724
  const dataStudyField = discoveryConfig?.studyField ?? studyField;
5804
5725
  const [summaryStatistics, setSummaryStatistics] = React.useState([]);
5726
+ const [chartData, setChartData] = React.useState({});
5805
5727
  const { mdsData, isUninitialized, isFetching, isLoading, isSuccess, isError } = dataHook({
5806
5728
  studyField: dataStudyField,
5807
5729
  guidType: dataGuidType,
@@ -5832,14 +5754,12 @@ const useLoadAllData = ({ pagination, searchTerms, advancedSearchTerms, discover
5832
5754
  });
5833
5755
  React.useEffect(()=>{
5834
5756
  setSummaryStatistics(processAllSummaries(searchedData, discoveryConfig?.aggregations));
5757
+ if (discoveryConfig.features.chartsSection?.charts && searchedData.length > 0) setChartData(processChartData(searchedData, Object.keys(discoveryConfig.features.chartsSection.charts)));
5835
5758
  }, [
5836
5759
  searchedData,
5837
- discoveryConfig?.aggregations
5760
+ discoveryConfig?.aggregations,
5761
+ discoveryConfig.features.chartsSection?.charts
5838
5762
  ]);
5839
- // const { summaryStatistics } = useGetSummaryStatistics({
5840
- // data: searchedData,
5841
- // aggregationConfig: discoveryConfig?.aggregations,
5842
- // });
5843
5763
  return {
5844
5764
  data: manualSortingAndPagination ? paginatedData : searchedData,
5845
5765
  hits: searchedData.length ?? -1,
@@ -5847,6 +5767,7 @@ const useLoadAllData = ({ pagination, searchTerms, advancedSearchTerms, discover
5847
5767
  suggestions: suggestions,
5848
5768
  advancedSearchFilterValues,
5849
5769
  summaryStatistics,
5770
+ charts: chartData,
5850
5771
  dataRequestStatus: {
5851
5772
  isUninitialized,
5852
5773
  isFetching,
@@ -6386,6 +6307,7 @@ const useAggMDSServer = ({ pagination, searchTerms, advancedSearchTerms, discove
6386
6307
  hits: total,
6387
6308
  suggestions: [],
6388
6309
  summaryStatistics: [],
6310
+ charts: {},
6389
6311
  advancedSearchFilterValues: [],
6390
6312
  dataRequestStatus: {
6391
6313
  isUninitialized,
@@ -6525,7 +6447,7 @@ const DiscoveryIndexPanel = ({ discoveryConfig, indexSelector })=>{
6525
6447
  advancedSearchTerms
6526
6448
  ]);
6527
6449
  // Get all required data from the data hook. This includes the metadata, search suggestions, and results, pagination, etc.
6528
- const { data, hits, dataRequestStatus, advancedSearchFilterValues, suggestions, summaryStatistics } = dataHook({
6450
+ const { data, hits, dataRequestStatus, advancedSearchFilterValues, suggestions, summaryStatistics, charts: chartData } = dataHook({
6529
6451
  pagination: {
6530
6452
  offset: pagination.pageIndex * pagination.pageSize,
6531
6453
  pageSize: pagination.pageSize
@@ -6567,7 +6489,8 @@ const DiscoveryIndexPanel = ({ discoveryConfig, indexSelector })=>{
6567
6489
  children: discoveryConfig?.features?.pageTitle.text
6568
6490
  }) : null,
6569
6491
  discoveryConfig.features?.chartsSection?.enabled && /*#__PURE__*/ jsxRuntime.jsx(ChartsPanel, {
6570
- config: discoveryConfig.features?.chartsSection
6492
+ config: discoveryConfig.features?.chartsSection,
6493
+ data: chartData
6571
6494
  }),
6572
6495
  /*#__PURE__*/ jsxRuntime.jsxs("div", {
6573
6496
  className: "flex items-center p-2 mb-4 bg-base-max rounded-lg",
@@ -17960,7 +17883,6 @@ const sendExistingPFBToURL = async (validatedSelections, params, done = ()=>null
17960
17883
  onAbort: onAbort,
17961
17884
  signal: signal
17962
17885
  });
17963
- console.log('received presignedURL', presignedURL);
17964
17886
  // the PFB export target URL is a template URL that should have a {{PRESIGNED_URL}} template
17965
17887
  // variable in it.
17966
17888
  const signedURL = encodeURIComponent(presignedURL);