@gen3/frontend 0.11.0 → 0.11.11

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 (94) hide show
  1. package/dist/cjs/index.js +167 -100
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/dts/components/Buttons/ActionButton.js +1 -1
  4. package/dist/dts/components/Buttons/ActionButton.js.map +1 -1
  5. package/dist/dts/components/Buttons/DownloadButtons/JSONObjectDownloadButton.js +1 -1
  6. package/dist/dts/components/Buttons/DownloadButtons/JSONObjectDownloadButton.js.map +1 -1
  7. package/dist/dts/components/Buttons/DropdownButtons/DropdownButton.js +1 -1
  8. package/dist/dts/components/Buttons/DropdownButtons/DropdownButton.js.map +1 -1
  9. package/dist/dts/components/Buttons/UploadJSONButton.js +1 -1
  10. package/dist/dts/components/Buttons/UploadJSONButton.js.map +1 -1
  11. package/dist/dts/components/Providers/Gen3Provider.js +1 -1
  12. package/dist/dts/components/Providers/Gen3Provider.js.map +1 -1
  13. package/dist/dts/components/charts/Charts.js +1 -1
  14. package/dist/dts/components/charts/Charts.js.map +1 -1
  15. package/dist/dts/components/charts/echarts/HorizontalBarChart.d.ts +1 -1
  16. package/dist/dts/components/charts/echarts/HorizontalBarChart.d.ts.map +1 -1
  17. package/dist/dts/components/charts/echarts/HorizontalBarChart.js +8 -4
  18. package/dist/dts/components/charts/echarts/HorizontalBarChart.js.map +1 -1
  19. package/dist/dts/components/counts/CountsValue.d.ts.map +1 -1
  20. package/dist/dts/components/counts/CountsValue.js +2 -2
  21. package/dist/dts/components/counts/CountsValue.js.map +1 -1
  22. package/dist/dts/components/facets/FacetControlsHeader.js +1 -1
  23. package/dist/dts/components/facets/FacetControlsHeader.js.map +1 -1
  24. package/dist/dts/components/facets/FacetEnumList.js +1 -1
  25. package/dist/dts/components/facets/FacetEnumList.js.map +1 -1
  26. package/dist/dts/components/facets/FacetTabs.js +1 -1
  27. package/dist/dts/components/facets/FacetTabs.js.map +1 -1
  28. package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +14 -14
  29. package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts.map +1 -1
  30. package/dist/dts/features/CohortBuilder/CohortSelector.js +1 -1
  31. package/dist/dts/features/CohortBuilder/CohortSelector.js.map +1 -1
  32. package/dist/dts/features/CohortBuilder/DownloadsPanel.js +1 -1
  33. package/dist/dts/features/CohortBuilder/DownloadsPanel.js.map +1 -1
  34. package/dist/dts/features/CohortBuilder/ExplorerTable/SubTables/ExpandingSubtable.js +1 -1
  35. package/dist/dts/features/CohortBuilder/ExplorerTable/SubTables/ExpandingSubtable.js.map +1 -1
  36. package/dist/dts/features/CohortBuilder/Panels/AccordianPanel.js +1 -1
  37. package/dist/dts/features/CohortBuilder/Panels/AccordianPanel.js.map +1 -1
  38. package/dist/dts/features/CohortBuilder/Panels/DropdownPanel.js +1 -1
  39. package/dist/dts/features/CohortBuilder/Panels/DropdownPanel.js.map +1 -1
  40. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.js +1 -1
  41. package/dist/dts/features/CohortBuilder/QueryExpression/QueryExpressionSection.js.map +1 -1
  42. package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.d.ts.map +1 -1
  43. package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.js +16 -9
  44. package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.js.map +1 -1
  45. package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.d.ts +9 -1
  46. package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.d.ts.map +1 -1
  47. package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.js +7 -9
  48. package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.js.map +1 -1
  49. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js +1 -1
  50. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js.map +1 -1
  51. package/dist/dts/features/CohortDiscovery/IndexPanel.js +5 -8
  52. package/dist/dts/features/CohortDiscovery/IndexPanel.js.map +1 -1
  53. package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js +1 -1
  54. package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js.map +1 -1
  55. package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.d.ts.map +1 -1
  56. package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.js.map +1 -1
  57. package/dist/dts/features/CohortDiscovery/queryApi.d.ts +10 -0
  58. package/dist/dts/features/CohortDiscovery/queryApi.d.ts.map +1 -1
  59. package/dist/dts/features/CohortDiscovery/queryApi.js +19 -2
  60. package/dist/dts/features/CohortDiscovery/queryApi.js.map +1 -1
  61. package/dist/dts/features/DataLibrary/DatasetAccordionControl.js +1 -1
  62. package/dist/dts/features/DataLibrary/DatasetAccordionControl.js.map +1 -1
  63. package/dist/dts/features/DataLibrary/SearchAndActions.js +1 -1
  64. package/dist/dts/features/DataLibrary/SearchAndActions.js.map +1 -1
  65. package/dist/dts/features/DataLibrary/modals/SelectedItemsModal.js +1 -1
  66. package/dist/dts/features/DataLibrary/modals/SelectedItemsModal.js.map +1 -1
  67. package/dist/dts/features/DataLibrary/tables/SelectedItemsTable.js +1 -1
  68. package/dist/dts/features/DataLibrary/tables/SelectedItemsTable.js.map +1 -1
  69. package/dist/dts/features/Dictionary/CategoryHeader.js +1 -1
  70. package/dist/dts/features/Dictionary/CategoryHeader.js.map +1 -1
  71. package/dist/dts/features/Discovery/types.d.ts +1 -0
  72. package/dist/dts/features/Discovery/types.d.ts.map +1 -1
  73. package/dist/dts/features/Discovery/types.js.map +1 -1
  74. package/dist/dts/features/Navigation/NavigationBarButton.d.ts.map +1 -1
  75. package/dist/dts/features/Navigation/NavigationBarButton.js +3 -3
  76. package/dist/dts/features/Navigation/NavigationBarButton.js.map +1 -1
  77. package/dist/dts/features/Navigation/TopBar/AccountButton.d.ts.map +1 -1
  78. package/dist/dts/features/Navigation/TopBar/AccountButton.js.map +1 -1
  79. package/dist/dts/features/Navigation/TopBar/IconButton.js +1 -1
  80. package/dist/dts/features/Navigation/TopBar/IconButton.js.map +1 -1
  81. package/dist/dts/features/Workspace/NotebookCard.js +1 -1
  82. package/dist/dts/features/Workspace/NotebookCard.js.map +1 -1
  83. package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.d.ts.map +1 -1
  84. package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js +4 -2
  85. package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js.map +1 -1
  86. package/dist/dts/utils/strings.d.ts +1 -0
  87. package/dist/dts/utils/strings.d.ts.map +1 -1
  88. package/dist/dts/utils/strings.js +29 -0
  89. package/dist/dts/utils/strings.js.map +1 -1
  90. package/dist/esm/index.js +168 -102
  91. package/dist/esm/index.js.map +1 -1
  92. package/dist/index.d.ts +3 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +5 -5
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { createContext, useState, useMemo, useEffect, useCallback, useContext, useRef, createElement, forwardRef, useReducer } from 'react';
4
- import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, isOperationWithField, selectShouldShareFilters, selectSharedFilters, updateCohortFilter as updateCohortFilter$1, selectIndexedFilterByName, isUnion, isOperatorWithFieldAndArrayOfOperands, extractEnumFilterValue, removeCohortFilter as removeCohortFilter$1, trimFirstFieldNameToTitle, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, DataLibraryStoreMode, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, setCohortFilter as setCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, selectAvailableCohorts, selectCurrentCohortId as selectCurrentCohortId$1, selectCohortFilters, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, setActiveCohort, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortName as selectCurrentCohortName$1, useGeneralGQLQuery, selectIndexFilters, useGetRawDataAndTotalCountsQuery, isJSONValue, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, Accessibility, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, setShouldShareFilters, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, usePrevious, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_API, GEN3_COMMONS_NAME, getTimestamp, createAppStore, buildGetAggregationQuery, processHistogramResponse, getRemoteSupportServiceRegistry, isHttpStatusError, MissingServiceConfigurationError, useLazyGetAggsNoFilterSelfQuery, useCreateRequestMutation, useUserRequestQuery, getGen3AppId, createGen3AppWithOwnStore, createAppApiForRTKQ, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, getFederatedLoginStatus, queryMultipleMDSRecords, GEN3_MANIFEST_API, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery, roundHistogramResponse } from '@gen3/core';
4
+ import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, isOperationWithField, selectShouldShareFilters, selectSharedFilters, updateCohortFilter as updateCohortFilter$1, selectIndexedFilterByName, isUnion, isOperatorWithFieldAndArrayOfOperands, extractEnumFilterValue, removeCohortFilter as removeCohortFilter$1, trimFirstFieldNameToTitle, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, DataLibraryStoreMode, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, setCohortFilter as setCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, selectAvailableCohorts, selectCurrentCohortId as selectCurrentCohortId$1, selectCohortFilters, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, setActiveCohort, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortName as selectCurrentCohortName$1, useGeneralGQLQuery, selectIndexFilters, useGetRawDataAndTotalCountsQuery, isJSONValue, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, Accessibility, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, setShouldShareFilters, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, usePrevious, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_API, GEN3_COMMONS_NAME, getTimestamp, createAppStore, getRemoteSupportServiceRegistry, isHttpStatusError, MissingServiceConfigurationError, useLazyGetAggsNoFilterSelfQuery, useCreateRequestMutation, buildGetAggregationQuery, processHistogramResponse, roundHistogramResponse, selectCSRFToken, useUserRequestQuery, getGen3AppId, createGen3AppWithOwnStore, createAppApiForRTKQ, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, getFederatedLoginStatus, queryMultipleMDSRecords, GEN3_MANIFEST_API, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery } from '@gen3/core';
5
5
  import { LoadingOverlay, Card, Group, Avatar, Text, Checkbox, Stack, Center, Loader, Tooltip, UnstyledButton, ThemeIcon, Box, Select, Button, Divider, Textarea, FileButton, Anchor, Modal, Grid, Table, ColorSwatch, useMantineTheme, Accordion, Switch, ActionIcon, Badge, TextInput, SegmentedControl, NumberInput, RangeSlider, MultiSelect, SimpleGrid, Highlight, MantineProvider, Tabs, Flex, Menu, Alert, Drawer, CopyButton, factory, useProps, getStyleObject, Paper, useCombobox, Combobox, ScrollArea, Autocomplete, Title, Transition, rem, Stepper, Image as Image$1, NavLink, List, createTheme, Pagination, FileInput, CloseButton } from '@mantine/core';
6
6
  import { useDeepCompareEffect, useDeepCompareMemo, useDeepCompareCallback } from 'use-deep-compare';
7
7
  import { useRouter } from 'next/router';
@@ -22,7 +22,7 @@ import { useCookies } from 'react-cookie';
22
22
  import FileSaver from 'file-saver';
23
23
  import { useClipboard, useResizeObserver, useDisclosure, useElementSize, useDidUpdate, mergeRefs, useReducedMotion, useMediaQuery, useFullscreen, useLocalStorage, useScrollIntoView, getHotkeyHandler } from '@mantine/hooks';
24
24
  import { defaultComposer } from 'default-composer';
25
- import { Icon, addCollection } from '@iconify/react';
25
+ import { Icon, addCollection } from '@iconify-icon/react';
26
26
  import { init, getInstanceByDom, graphic } from 'echarts';
27
27
  import { VictoryChart, VictoryTheme, VictoryAxis, VictoryStack, VictoryBar, Bar, VictoryTooltip, VictoryContainer } from 'victory';
28
28
  import { FaUndo, FaPlus, FaExternalLinkAlt, FaExclamationTriangle, FaExclamation, FaQuestion, FaUser, FaExclamationCircle, FaRegStopCircle, FaChartPie, FaCircle, FaCheck, FaVideo, FaRegQuestionCircle, FaGraduationCap, FaRedo, FaUpload, FaDownload } from 'react-icons/fa';
@@ -609,6 +609,27 @@ const toDisplayName = (field)=>{
609
609
  if (!fieldName) return 'NotSet';
610
610
  return fieldName.split('_').map((w)=>capitalize$1(w)).join(' ');
611
611
  };
612
+ /*
613
+ Function to convert counts to a string with units
614
+ For example: count = 100 units = 'cases' => '100 Cases'
615
+ Function should handle pluralization
616
+ */ const toCountsString = (counts, units)=>{
617
+ if (!counts) return `No ${capitalize$1(pluralize(units))}`;
618
+ // return a string with counts and units handling pluralization
619
+ const unitDisplay = counts === 1 ? units : pluralize(units);
620
+ return `${counts.toLocaleString()} ${capitalize$1(unitDisplay)}`;
621
+ };
622
+ // Helper function to handle basic pluralization
623
+ const pluralize = (word)=>{
624
+ // Handle special cases
625
+ if (word.endsWith('y')) {
626
+ return word.slice(0, -1) + 'ies';
627
+ } else if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z') || word.endsWith('ch') || word.endsWith('sh')) {
628
+ return word + 'es';
629
+ } else {
630
+ return word + 's';
631
+ }
632
+ };
612
633
 
613
634
  const isArrayOfString = (value)=>{
614
635
  return Array.isArray(value) && value.every((element)=>typeof element === 'string');
@@ -2476,10 +2497,11 @@ const HorizontalBarChart = ({ data, valueType, total, showLegendInChart = true }
2476
2497
  const chartDefinition = useMemo(()=>{
2477
2498
  return {
2478
2499
  tooltip: {
2479
- trigger: 'axis',
2480
- axisPointer: {
2481
- // Use axis to trigger tooltip
2482
- type: 'shadow'
2500
+ trigger: 'item',
2501
+ formatter: function(param) {
2502
+ const p = isArray(param) && param.length > 0 ? param[0] : param;
2503
+ const colorSquare = `<span style="display:inline-block; width:10px; height:10px; background-color:${p.color}; margin-right:5px;"></span>`;
2504
+ return `${colorSquare}${p.seriesName}: <b>${p.value}</b>`;
2483
2505
  }
2484
2506
  },
2485
2507
  legend: {
@@ -4822,7 +4844,7 @@ const FacetGroup = ({ facets, children })=>{
4822
4844
  const availableFields = facets.map((f)=>f.field);
4823
4845
  useScrollToHash(availableFields, false);
4824
4846
  return /*#__PURE__*/ jsx("div", {
4825
- className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 w-content gap-4 my-4 ml-2 w-full",
4847
+ className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 3xl:grid-cols-5 w-content gap-4 ml-2 w-full",
4826
4848
  "data-testid": "title-cohort-builder-facet-groups",
4827
4849
  children: children
4828
4850
  });
@@ -5688,11 +5710,10 @@ const NavigationLogo = ({ src, title, description, width, height, divider = fals
5688
5710
  * @param iconHeight - the height of the icon
5689
5711
  * @param classNames - the class names to use for root, label, icon/tooltip and arrow'
5690
5712
  * @param noBasePath - set to true to avoid prepending a basePath to the link
5691
- */ const NavigationBarButton = ({ tooltip, icon, href, name, iconHeight = '27px', classNames = {}, noBasePath = false })=>{
5713
+ */ const NavigationBarButton = ({ tooltip, icon, href, name, iconHeight = '32px', classNames = {}, noBasePath = false })=>{
5692
5714
  const classNamesDefaults = {
5693
- root: 'flex flex-col flex-nowrap px-3 py-2 pt-4 items-center align-center text-primary hover:text-accent opacity-80 hover:opacity-100',
5715
+ root: 'flex flex-col flex-nowrap px-3 py-2 pt-4 justify-between items-center align-center text-primary hover:text-accent opacity-80 hover:opacity-100',
5694
5716
  label: 'pt-1.5 body-typo font-heading text-sm text-nowrap',
5695
- icon: 'mt-0.5 ml-1',
5696
5717
  ...TooltipStyle
5697
5718
  };
5698
5719
  const mergedClassnames = mergeDefaultTailwindClassnames(classNamesDefaults, classNames);
@@ -11594,7 +11615,7 @@ const CountsValue = ({ label, isSuccess, counts })=>{
11594
11615
  p: "xs",
11595
11616
  withBorder: true,
11596
11617
  className: "bg-primary text-primary-contrast font-heading text-md font-semibold",
11597
- children: `${counts?.toLocaleString() ?? '...'} ${label}`
11618
+ children: toCountsString(counts, label)
11598
11619
  })
11599
11620
  ]
11600
11621
  });
@@ -12709,6 +12730,11 @@ const TabbedCohortBuilder = ({ index, tabsConfiguration })=>{
12709
12730
  filters: cohortFilters,
12710
12731
  accessibility: accessLevel
12711
12732
  });
12733
+ const { data: counts, isSuccess: isCountSuccess, isError } = useGetCountsQuery({
12734
+ type: index,
12735
+ filters: cohortFilters,
12736
+ accessibility: accessLevel
12737
+ });
12712
12738
  const [facetDefinitions, setFacetDefinitions] = useState({});
12713
12739
  useEffect(()=>{
12714
12740
  // Check if the router initiated the change
@@ -12846,25 +12872,42 @@ const TabbedCohortBuilder = ({ index, tabsConfiguration })=>{
12846
12872
  getRangeFacetData,
12847
12873
  index
12848
12874
  ]);
12849
- return /*#__PURE__*/ jsx(FacetTabs, {
12850
- activeTab: activeTab,
12851
- setActiveTab: setActiveTab,
12852
- facetDefinitions: facetDefinitions,
12853
- tabsConfig: tabsConfig,
12854
- usedFacets: cohortBuilderFilters,
12855
- hooks: facetDataHooks,
12856
- customFacetHooks: {
12857
- useCustomFacets,
12858
- useAvailableCustomFacets: (usedFacets, onlyFiltersWithValues, queryOptions)=>({
12859
- data: {},
12860
- isSuccess: true
12861
- }),
12862
- useAddCustomFilter: ()=>(filter)=>{},
12863
- useRemoveCustomFilter: ()=>(filter)=>{}
12875
+ return /*#__PURE__*/ jsxs(Stack, {
12876
+ gap: "xs",
12877
+ align: "stretch",
12878
+ classNames: {
12879
+ root: 'w-full'
12864
12880
  },
12865
- getFacetLabel: ()=>'Cases',
12866
- cardScrollMargin: calculateStickyHeaderHeight(),
12867
- useFieldNameToTitle: useFieldNameToTitle
12881
+ children: [
12882
+ /*#__PURE__*/ jsx(Group, {
12883
+ justify: "flex-end",
12884
+ children: /*#__PURE__*/ jsx(CountsValue, {
12885
+ label: index,
12886
+ counts: counts,
12887
+ isSuccess: isCountSuccess
12888
+ })
12889
+ }),
12890
+ /*#__PURE__*/ jsx(FacetTabs, {
12891
+ activeTab: activeTab,
12892
+ setActiveTab: setActiveTab,
12893
+ facetDefinitions: facetDefinitions,
12894
+ tabsConfig: tabsConfig,
12895
+ usedFacets: cohortBuilderFilters,
12896
+ hooks: facetDataHooks,
12897
+ customFacetHooks: {
12898
+ useCustomFacets,
12899
+ useAvailableCustomFacets: (usedFacets, onlyFiltersWithValues, queryOptions)=>({
12900
+ data: {},
12901
+ isSuccess: true
12902
+ }),
12903
+ useAddCustomFilter: ()=>(filter)=>{},
12904
+ useRemoveCustomFilter: ()=>(filter)=>{}
12905
+ },
12906
+ getFacetLabel: ()=>'Cases',
12907
+ cardScrollMargin: calculateStickyHeaderHeight(),
12908
+ useFieldNameToTitle: useFieldNameToTitle
12909
+ })
12910
+ ]
12868
12911
  });
12869
12912
  };
12870
12913
 
@@ -15488,85 +15531,26 @@ const createFacetPanel = (facet, chartType, valueLabel, hooks)=>{
15488
15531
  return null;
15489
15532
  };
15490
15533
 
15491
- const GEN3_COHORT_DISCOVERY_API = process.env.GEN3_COHORT_DISCOVERY_API || `${GEN3_API}/api/auth/analysis/cohortDiscovery`;
15492
-
15493
- const useGraphQLData = (url, body, skip)=>{
15494
- // Create a fetcher function that handles the GraphQL POST request
15495
- const fetcher = async (fetchUrl, fetchBody)=>{
15496
- const headers = new Headers({
15497
- Accept: 'application/json',
15498
- 'Content-Type': 'application/json'
15499
- });
15500
- if (process.env.NODE_ENV === 'development') {
15501
- // NOTE: This cookie can only be accessed from the client side
15502
- // in development mode. Otherwise, the cookie is set as httpOnly
15503
- const accessToken = getCookie('credentials_token');
15504
- if (accessToken) {
15505
- headers.set('Authorization', `Bearer ${accessToken}`);
15506
- }
15507
- }
15508
- const response = await fetch(fetchUrl, {
15509
- method: 'POST',
15510
- headers: headers,
15511
- body: JSON.stringify(fetchBody)
15512
- });
15513
- if (!response.ok) {
15514
- throw new Error(`Error ${response.status}: ${response.statusText}`);
15515
- }
15516
- return await response.json();
15517
- };
15518
- // Use SWR with the fetcher
15519
- const { data, error, isLoading, mutate } = useSWR(!skip ? [
15520
- url,
15521
- body
15522
- ] : null, ([fetchUrl, fetchBody])=>fetcher(fetchUrl, fetchBody), {
15523
- revalidateOnFocus: false
15524
- });
15525
- // Format error to match your ErrorDetails interface
15526
- const formattedError = error ? {
15527
- status: error.message.match(/\d+/)?.[0] || 'Unknown',
15528
- message: error.message
15529
- } : null;
15530
- return {
15531
- data,
15532
- isLoading,
15533
- isSuccess: !!data && !error,
15534
- isError: !!error,
15535
- error: formattedError,
15536
- mutate
15537
- };
15538
- };
15539
- const useRoundedAggsQuery = ({ type, fields, filters, accessibility = Accessibility.ALL }, { skip } = {
15540
- skip: false
15541
- })=>{
15542
- const response = useGraphQLData(GEN3_COHORT_DISCOVERY_API, buildGetAggregationQuery(type, fields, filters, accessibility, false), skip);
15543
- return {
15544
- ...response,
15545
- data: response?.data?.data ? processHistogramResponse(response?.data.data?._aggregation[type] ?? {}) : {}
15546
- };
15547
- };
15548
-
15549
15534
  const NUM_COLS = 2; // TODO: add to config
15550
15535
  /**
15551
15536
  * CartsAndFacetsPanel component
15552
15537
  *
15553
15538
  * @param {string} index - The index type used for querying data.
15539
+ * @param data
15540
+ * @param isLoading
15541
+ * @param isError
15542
+ * @param isSuccess
15554
15543
  * @param {Array} facets - The list of facets to be rendered.
15555
15544
  * @returns {JSX.Element} The rendered component showing facets.
15556
- */ const ChartsAndFacetsPanel = ({ index, facets })=>{
15545
+ */ const ChartsAndFacetsPanel = ({ index, data, isLoading, isError, isSuccess, facets })=>{
15557
15546
  const cohortFilters = useAppSelector((state)=>selectCurrentCohortIndexFilters(state, index));
15558
- const { data, isSuccess, isLoading: isAggsQueryFetching, isError: isAggsQueryError } = useRoundedAggsQuery({
15559
- type: index,
15560
- fields: facets.map((x)=>x.field),
15561
- filters: cohortFilters
15562
- });
15563
15547
  const getEnumFacetData = useDeepCompareCallback((field)=>{
15564
15548
  return {
15565
15549
  data: processBucketData(data?.[field]),
15566
15550
  enumFilters: field in cohortFilters.root ? extractEnumFilterValue(cohortFilters.root[field]) : undefined,
15567
15551
  isSuccess: isSuccess,
15568
- isFetching: isAggsQueryFetching,
15569
- isError: isAggsQueryError
15552
+ isFetching: isLoading,
15553
+ isError: isError
15570
15554
  };
15571
15555
  }, [
15572
15556
  cohortFilters,
@@ -16105,6 +16089,67 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16105
16089
  });
16106
16090
  };
16107
16091
 
16092
+ process.env.GEN3_COHORT_DISCOVERY_API || `${GEN3_API}/api/auth/analysis/cohortDiscovery`;
16093
+
16094
+ const useGraphQLData = (url, body, skip)=>{
16095
+ // Create a fetcher function that handles the GraphQL POST request
16096
+ const csrfToken = useCoreSelector((state)=>selectCSRFToken(state));
16097
+ const fetcher = async (fetchUrl, fetchBody)=>{
16098
+ const headers = new Headers({
16099
+ Accept: 'application/json',
16100
+ 'Content-Type': 'application/json',
16101
+ 'X-CSRF-Token': csrfToken ?? ''
16102
+ });
16103
+ if (process.env.NODE_ENV === 'development') {
16104
+ // NOTE: This cookie can only be accessed from the client side
16105
+ // in development mode. Otherwise, the cookie is set as httpOnly
16106
+ const accessToken = getCookie('credentials_token');
16107
+ if (accessToken) {
16108
+ headers.set('Authorization', `Bearer ${accessToken}`);
16109
+ }
16110
+ }
16111
+ const response = await fetch(fetchUrl, {
16112
+ method: 'POST',
16113
+ headers: headers,
16114
+ body: JSON.stringify(fetchBody)
16115
+ });
16116
+ if (!response.ok) {
16117
+ throw new Error(`Error ${response.status}: ${response.statusText}`);
16118
+ }
16119
+ return await response.json();
16120
+ };
16121
+ // Use SWR with the fetcher
16122
+ const { data, error, isLoading, mutate } = useSWR(!skip ? [
16123
+ url,
16124
+ body
16125
+ ] : null, ([fetchUrl, fetchBody])=>fetcher(fetchUrl, fetchBody), {
16126
+ revalidateOnFocus: false
16127
+ });
16128
+ // Format error to match your ErrorDetails interface
16129
+ const formattedError = error ? {
16130
+ status: error.message.match(/\d+/)?.[0] || 'Unknown',
16131
+ message: error.message
16132
+ } : null;
16133
+ return {
16134
+ data,
16135
+ isLoading,
16136
+ isSuccess: !!data && !error,
16137
+ isError: !!error,
16138
+ error: formattedError,
16139
+ mutate
16140
+ };
16141
+ };
16142
+ const COHORT_DISCOVERY_LIMIT$1 = process.env.NEXT_PUBLIC_GEN3_COHORT_DISCOVERY_LIMIT ? Number(process.env.NEXT_PUBLIC_GEN3_COHORT_DISCOVERY_LIMIT) : 100;
16143
+ const useUnsecureRoundedAggsQuery = ({ type, fields, filters, accessibility = Accessibility.ALL }, { skip } = {
16144
+ skip: false
16145
+ })=>{
16146
+ const response = useGraphQLData(`${GEN3_GUPPY_API}/graphql`, buildGetAggregationQuery(type, fields, filters, accessibility, false), skip);
16147
+ return {
16148
+ ...response,
16149
+ data: response?.data?.data ? processHistogramResponse(roundHistogramResponse(response?.data?.data._aggregation[type], COHORT_DISCOVERY_LIMIT$1)) : {}
16150
+ };
16151
+ };
16152
+
16108
16153
  const CohortQueryExpression = ({ index })=>{
16109
16154
  const currentCohortId = useAppSelector((state)=>selectCurrentCohortId(state));
16110
16155
  const currentCohortName = useAppSelector((state)=>selectCurrentCohortName(state));
@@ -16178,13 +16223,12 @@ const IndexPanel = ({ dataConfig, tabs, tabTitle, emptySelection, indexResources
16178
16223
  facetDefinitions
16179
16224
  ]);
16180
16225
  const cohortFilters = useAppSelector((state)=>selectCurrentCohortIndexFilters(state, index));
16181
- const queryFields = categories.length === 0 ? fields : activeFieldDefinitions.map((x)=>x.field);
16182
- const { data, isSuccess, isError: isAggsQueryError } = useRoundedAggsQuery({
16226
+ const { data, isSuccess, isLoading: isAggsQueryFetching, isError: isAggsQueryError } = useUnsecureRoundedAggsQuery({
16183
16227
  type: index,
16184
- fields: queryFields,
16228
+ fields: fields,
16185
16229
  filters: cohortFilters
16186
16230
  }, {
16187
- skip: queryFields.length === 0
16231
+ skip: fields.length === 0
16188
16232
  });
16189
16233
  const updateFields = useDeepCompareCallback((field, checked)=>{
16190
16234
  if (!checked) {
@@ -16270,6 +16314,10 @@ const IndexPanel = ({ dataConfig, tabs, tabTitle, emptySelection, indexResources
16270
16314
  remoteSupportService: remoteSupportService
16271
16315
  }),
16272
16316
  selectedFacets.length > 0 ? /*#__PURE__*/ jsx(ChartsAndFacetsPanel, {
16317
+ data: data,
16318
+ isLoading: isAggsQueryFetching,
16319
+ isError: isAggsQueryError,
16320
+ isSuccess: isSuccess,
16273
16321
  index: index,
16274
16322
  facets: activeFieldDefinitions
16275
16323
  }) : /*#__PURE__*/ jsx(Center, {
@@ -25056,8 +25104,26 @@ const TabbedCohortBuilderPage = ({ headerProps, footerProps, configuration })=>{
25056
25104
  content: 'Tabbed Cohort Builder Page',
25057
25105
  key: 'gen3-tabbed-cohort-builder-page'
25058
25106
  },
25059
- children: /*#__PURE__*/ jsx(TabbedCohortBuilder, {
25060
- ...configuration
25107
+ children: /*#__PURE__*/ jsxs(Stack, {
25108
+ align: "stretch",
25109
+ classNames: {
25110
+ root: 'w-full'
25111
+ },
25112
+ children: [
25113
+ /*#__PURE__*/ jsx("div", {
25114
+ className: "w-full flex-col flex gap-4 fixed bg-white z-10",
25115
+ children: /*#__PURE__*/ jsx(CohortManager$1, {
25116
+ index: configuration.index
25117
+ })
25118
+ }),
25119
+ /*#__PURE__*/ jsx("div", {
25120
+ className: "w-full mt-40 mr-4",
25121
+ children: /*#__PURE__*/ jsx(TabbedCohortBuilder, {
25122
+ ...configuration,
25123
+ index: configuration.index
25124
+ })
25125
+ })
25126
+ ]
25061
25127
  })
25062
25128
  });
25063
25129
  };
@@ -25524,5 +25590,5 @@ const staticNotebookAPI = async (req, res)=>{
25524
25590
  });
25525
25591
  };
25526
25592
 
25527
- export { AISearchPageGetServerSideProps, AccessLevel, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, BAD_DATA_MESSAGE, Banner, BaseModal, Charts, CohortBuilder, CohortManager$1 as CohortManager, CollapsableCharts, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DAYS_IN_YEAR, DEFAULT_MAXIMUM, DEFAULT_MINIMUM, DEFAULT_VISIBLE_ITEMS$1 as DEFAULT_VISIBLE_ITEMS, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, EnumFacet, EnumFacetChart, ErrorCard, ExactValueFacet, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FacetControlsHeader, FacetExpander, FacetSelector, FacetSortPanel, FacetTabs, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header$1 as Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, MultiSelectValueFacet, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryExpression, QueryExpressionContext, QueryExpressionSection, QueryPage, QueryPageGetServerSideProps, RangeFacet, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SessionExpiredModal, SinglePageStudyDetailsPanel, StaticNotebookIFrame, StaticNotebookViewer, StudyDetailsPanel, StudyGroup, StudyGroupPanel, StudyProvider, SubmissionPage, SubmissionPageGetServerSideProps, TabbedCohortBuilder, TabbedCohortBuilderPage, TabbedCohortBuilderPageGetServerSideProps, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, accessibleFieldName, addIntersectionToIncludes, addUnion, analysisApiCohortDiscovery, buildNested, capitalize, classifyFacets, compareKeysAscending, compareKeysDescending, computeRowSpan, convertMinutesToMilliseconds, convertPathsToTree, convertSecondsToMilliseconds, convertToStringArray, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, extractRangeValues, focusStyles, getAllFieldsFromFilterConfigs, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isEnumFacetResponse, isHeaderMetadata, isPropertyKey, isTextTransform$1 as isTextTransform, mapFacetSortToSortType, processBucketData, processLabel$1 as processLabel, processRangeData, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeIntersectionFromEnum, removeKey$1 as removeKey, removeUnion, resourcePathFromProjectID, sessionLogout, sessionToken, staticNotebookAPI, stripTrailingSlash, toDisplayName, truncateString, unixTimeToString, updateFacetEnum, useClearFilters$1 as useClearFilters, useDiscoveryContext, useExtractEnumFilterValues, useExtractRangeFilterValues, useFieldNameToTitle, useGetFacetFilters$1 as useGetFacetFilters, useUpdateFilters$1 as useUpdateFilters, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
25593
+ export { AISearchPageGetServerSideProps, AccessLevel, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, BAD_DATA_MESSAGE, Banner, BaseModal, Charts, CohortBuilder, CohortManager$1 as CohortManager, CollapsableCharts, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DAYS_IN_YEAR, DEFAULT_MAXIMUM, DEFAULT_MINIMUM, DEFAULT_VISIBLE_ITEMS$1 as DEFAULT_VISIBLE_ITEMS, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, EnumFacet, EnumFacetChart, ErrorCard, ExactValueFacet, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FacetControlsHeader, FacetExpander, FacetSelector, FacetSortPanel, FacetTabs, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header$1 as Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, MultiSelectValueFacet, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryExpression, QueryExpressionContext, QueryExpressionSection, QueryPage, QueryPageGetServerSideProps, RangeFacet, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SessionExpiredModal, SinglePageStudyDetailsPanel, StaticNotebookIFrame, StaticNotebookViewer, StudyDetailsPanel, StudyGroup, StudyGroupPanel, StudyProvider, SubmissionPage, SubmissionPageGetServerSideProps, TabbedCohortBuilder, TabbedCohortBuilderPage, TabbedCohortBuilderPageGetServerSideProps, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, accessibleFieldName, addIntersectionToIncludes, addUnion, analysisApiCohortDiscovery, buildNested, capitalize, classifyFacets, compareKeysAscending, compareKeysDescending, computeRowSpan, convertMinutesToMilliseconds, convertPathsToTree, convertSecondsToMilliseconds, convertToStringArray, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, extractRangeValues, focusStyles, getAllFieldsFromFilterConfigs, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isEnumFacetResponse, isHeaderMetadata, isPropertyKey, isTextTransform$1 as isTextTransform, mapFacetSortToSortType, processBucketData, processLabel$1 as processLabel, processRangeData, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeIntersectionFromEnum, removeKey$1 as removeKey, removeUnion, resourcePathFromProjectID, sessionLogout, sessionToken, staticNotebookAPI, stripTrailingSlash, toCountsString, toDisplayName, truncateString, unixTimeToString, updateFacetEnum, useClearFilters$1 as useClearFilters, useDiscoveryContext, useExtractEnumFilterValues, useExtractRangeFilterValues, useFieldNameToTitle, useGetFacetFilters$1 as useGetFacetFilters, useUpdateFilters$1 as useUpdateFilters, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
25528
25594
  //# sourceMappingURL=index.js.map