@gen3/frontend 0.12.15 → 0.12.16

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 (55) hide show
  1. package/dist/dts/components/Providers/Gen3Provider.d.ts +1 -1
  2. package/dist/dts/components/charts/ChartRendererFactory.d.ts.map +1 -1
  3. package/dist/dts/components/charts/ChartRendererFactory.js +4 -0
  4. package/dist/dts/components/charts/ChartRendererFactory.js.map +1 -1
  5. package/dist/dts/components/charts/echarts/BarChart.d.ts.map +1 -1
  6. package/dist/dts/components/charts/echarts/BarChart.js +1 -3
  7. package/dist/dts/components/charts/echarts/BarChart.js.map +1 -1
  8. package/dist/dts/components/charts/echarts/ReactECharts.d.ts +1 -1
  9. package/dist/dts/components/charts/echarts/ReactECharts.d.ts.map +1 -1
  10. package/dist/dts/components/charts/echarts/ReactECharts.js +4 -4
  11. package/dist/dts/components/charts/echarts/ReactECharts.js.map +1 -1
  12. package/dist/dts/components/charts/echarts/VerticalBarChart.d.ts +1 -8
  13. package/dist/dts/components/charts/echarts/VerticalBarChart.d.ts.map +1 -1
  14. package/dist/dts/components/charts/echarts/VerticalBarChart.js +139 -53
  15. package/dist/dts/components/charts/echarts/VerticalBarChart.js.map +1 -1
  16. package/dist/dts/components/charts/echarts/utils.d.ts +4 -0
  17. package/dist/dts/components/charts/echarts/utils.d.ts.map +1 -0
  18. package/dist/dts/components/charts/echarts/utils.js +29 -0
  19. package/dist/dts/components/charts/echarts/utils.js.map +1 -0
  20. package/dist/dts/components/charts/index.d.ts.map +1 -1
  21. package/dist/dts/components/charts/index.js.map +1 -1
  22. package/dist/dts/components/charts/utils.d.ts +2 -1
  23. package/dist/dts/components/charts/utils.d.ts.map +1 -1
  24. package/dist/dts/components/charts/utils.js +6 -0
  25. package/dist/dts/components/charts/utils.js.map +1 -1
  26. package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +20 -20
  27. package/dist/dts/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.d.ts +1 -1
  28. package/dist/dts/features/CohortSimilarity/cohortSimilarityApi.d.ts +6 -6
  29. package/dist/dts/features/admin/services/hooks.d.ts +1 -0
  30. package/dist/dts/features/admin/services/hooks.d.ts.map +1 -0
  31. package/dist/dts/features/admin/services/hooks.js +25 -0
  32. package/dist/dts/features/admin/services/hooks.js.map +1 -0
  33. package/dist/index/cjs/QueryPanel-Da5JK7Ga.js +24 -0
  34. package/dist/index/cjs/QueryPanel-Da5JK7Ga.js.map +1 -0
  35. package/dist/index/cjs/index-DCfNzojE.js +31324 -0
  36. package/dist/index/cjs/index-DCfNzojE.js.map +1 -0
  37. package/dist/index/cjs/index.js +2 -1
  38. package/dist/index/cjs/index.js.map +1 -1
  39. package/dist/index/esm/QueryPanel-wfUocCA8.js +22 -0
  40. package/dist/index/esm/QueryPanel-wfUocCA8.js.map +1 -0
  41. package/dist/index/esm/index-BeazPh8g.js +31081 -0
  42. package/dist/index/esm/index-BeazPh8g.js.map +1 -0
  43. package/dist/index/esm/index.js +1 -1
  44. package/dist/index.d.ts +5 -4
  45. package/dist/pages/cjs/CohortBuilder-CQ3wAVa6.js +482 -0
  46. package/dist/pages/cjs/CohortBuilder-CQ3wAVa6.js.map +1 -0
  47. package/dist/pages/cjs/index-C5HDy13M.js +23138 -0
  48. package/dist/pages/cjs/index-C5HDy13M.js.map +1 -0
  49. package/dist/pages/cjs/index.js +1 -1
  50. package/dist/pages/esm/CohortBuilder-DDeZAsU7.js +479 -0
  51. package/dist/pages/esm/CohortBuilder-DDeZAsU7.js.map +1 -0
  52. package/dist/pages/esm/index-DHgPpe2x.js +23056 -0
  53. package/dist/pages/esm/index-DHgPpe2x.js.map +1 -0
  54. package/dist/pages/esm/index.js +1 -1
  55. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C5HDy13M.js","sources":["../../../src/pages/403/Custom403Page.tsx","../../../src/pages/404/Custom404Page.tsx","../../../src/features/Navigation/types.ts","../../../src/features/Navigation/utils.ts","../../../src/utils/mergeDefaultTailwindClassnames.ts","../../../src/utils/values.ts","../../../src/features/Navigation/Footer/FooterColumn.tsx","../../../src/features/Navigation/Footer/Footer.tsx","../../../src/features/Navigation/Gen3Link.tsx","../../../src/components/Login/types.ts","../../../src/features/DataLibrary/types.ts","../../../src/features/Navigation/style.ts","../../../src/features/Navigation/TopBar/IconButton.tsx","../../../src/features/Navigation/TopBar/AccountButton.tsx","../../../src/utils/time.ts","../../../src/utils/focusStyle.ts","../../../src/utils/strings.ts","../../../src/utils/isType.ts","../../../src/utils/access.ts","../../../src/utils/validators.ts","../../../src/components/Providers/ResourceMonitor.tsx","../../../src/lib/session/session.tsx","../../../src/features/Navigation/TopBar/LoginButton.tsx","../../../src/features/Navigation/TopBar/TopBar.tsx","../../../src/features/Navigation/HoverLink.tsx","../../../src/features/Navigation/NavigationLogo.tsx","../../../src/features/Navigation/NavigationBarButton.tsx","../../../src/components/AuthorizedRoutes/ProtectedRoutesProvider.tsx","../../../src/features/Navigation/NavigationBar.tsx","../../../src/features/Navigation/Banner.tsx","../../../src/components/Login/LoginButton.tsx","../../../src/features/Navigation/ActionMenu.tsx","../../../src/features/Navigation/HorizontalClean/HorizontalNavigationBar.tsx","../../../src/features/Navigation/Header.tsx","../../../src/features/Navigation/Vertical/LeftSidePanel.tsx","../../../src/features/Navigation/NavPageLayout.tsx","../../../src/features/Discovery/Search/AiSearch.tsx","../../../src/pages/AISearch/AISearchPage.tsx","../../../src/lib/content/filesystem.ts","../../../src/lib/content/ContentDatabase.ts","../../../src/lib/content/constants.ts","../../../src/lib/content/index.ts","../../../src/lib/common/staticProps.ts","../../../src/pages/AISearch/data.ts","../../../src/features/Analysis/TextDescription.tsx","../../../src/features/Analysis/AnalysisCard.tsx","../../../src/features/Analysis/AnalysisCenter.tsx","../../../src/features/Analysis/AnalysisPanel.tsx","../../../src/features/Analysis/AnalysisCardCore.tsx","../../../src/features/Analysis/AnalysisCardCollapsible.tsx","../../../src/features/Analysis/AnalysisCenterWithSections.tsx","../../../src/components/MessageCards/CardContainer.tsx","../../../src/components/MessageCards/MessageCard.tsx","../../../src/components/MessageCards/ErrorCard.tsx","../../../src/components/MessageCards/MessagePage.tsx","../../../src/pages/Analysis/AnalysisPage.tsx","../../../src/pages/Analysis/data.ts","../../../src/components/Tables/TableIcons.tsx","../../../src/features/Crosswalk/CrosswalkTable.tsx","../../../src/features/Crosswalk/CrosswalkPanel.tsx","../../../src/pages/Crosswalk/CrosswalkPage.tsx","../../../src/pages/Crosswalk/data.ts","../../../src/features/Dictionary/utils.ts","../../../src/features/Dictionary/ViewSelector.tsx","../../../src/features/Dictionary/ResultList.tsx","../../../src/features/Dictionary/ResultCard.tsx","../../../src/features/Dictionary/constants.ts","../../../src/features/Dictionary/DictionaryProvider.tsx","../../../src/features/Dictionary/TableSearch.tsx","../../../src/features/Dictionary/CategoryHeader.tsx","../../../src/features/Dictionary/CategoryAccordionLabel.tsx","../../../src/features/Dictionary/PropertiesTable.tsx","../../../src/features/Dictionary/CategoryPanel.tsx","../../../src/components/charts/echarts/ReactECharts.tsx","../../../src/features/Dictionary/graphViewDataUtils.ts","../../../src/features/Dictionary/GraphView.tsx","../../../src/features/Dictionary/Dictionary.tsx","../../../src/features/Dictionary/DictionaryWithContext.tsx","../../../src/pages/DataDictionary/DataDictionaryPage.tsx","../../../src/pages/DataDictionary/data.ts","../../../src/features/DataLibrary/selection/utils.ts","../../../src/features/DataLibrary/selection/SelectionContext.tsx","../../../src/utils/sizes.ts","../../../src/features/DataLibrary/SearchAndActions.tsx","../../../src/features/DataLibrary/modals/utils.ts","../../../src/features/DataLibrary/tables/SelectedItemsTable.tsx","../../../src/features/DataLibrary/selection/selectedItemActions.ts","../../../src/features/DataLibrary/selection/exportActions.ts","../../../src/types/constants.ts","../../../src/features/DataLibrary/selection/actions/exportToManifest.ts","../../../src/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/providerErrorNotification.tsx","../../../src/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/utils.ts","../../../src/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportMetadataToWorkspace.tsx","../../../src/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportDataListsToWorkspace.tsx","../../../src/features/DataLibrary/selection/registeredActions.ts","../../../src/features/DataLibrary/modals/SelectedItemsModal.tsx","../../../src/features/DataLibrary/selection/selection.ts","../../../src/features/DataLibrary/EmptyList.tsx","../../../src/utils/date.ts","../../../src/features/DataLibrary/DatasetAccordionControl.tsx","../../../src/features/DataLibrary/tables/tableSettings.ts","../../../src/features/DataLibrary/tables/AdditionalDataTable.tsx","../../../src/features/DataLibrary/tables/FilesTable.tsx","../../../src/components/OverflowTooltippedLabel.tsx","../../../src/features/CohortBuilder/QueryExpression/QueryRepresentationLabel.tsx","../../../src/features/CohortBuilder/QueryExpression/QueryExpressionsExpandedContext.tsx","../../../src/features/CohortBuilder/QueryExpression/QueryExpressionContext.tsx","../../../src/features/CohortBuilder/QueryExpression/QueryRepresentation.tsx","../../../src/features/CohortBuilder/style.ts","../../../src/components/Buttons/DownloadButtons/JSONObjectDownloadButton.tsx","../../../src/components/Buttons/UploadJSONButton.tsx","../../../src/features/CohortBuilder/CohortSelector.tsx","../../../src/features/CohortBuilder/QueryExpression/QueryExpressionSection.tsx","../../../src/features/DataLibrary/QueryDetails.tsx","../../../src/features/DataLibrary/tables/DatasetContentsTable.tsx","../../../src/features/DataLibrary/DatalistAccordionItem.tsx","../../../src/features/DataLibrary/DataLibraryLists.tsx","../../../src/features/DataLibrary/DataLibrary.tsx","../../../src/pages/DataLibrary/DataLibraryPage.tsx","../../../src/pages/DataLibrary/data.ts","../../../src/features/Discovery/utils.ts","../../../src/features/Discovery/TableRenderers/CellRendererFactory.tsx","../../../src/features/Discovery/TableRenderers/RowRenderers.tsx","../../../src/features/Discovery/TableRenderers/RowRendererFactory.tsx","../../../src/features/Discovery/DiscoveryProvider.tsx","../../../src/features/Study/StudyProvider.tsx","../../../src/features/Study/utils.ts","../../../src/features/Study/TableRenderers/CellRenderers.tsx","../../../src/features/Study/StudyDetails/RendererFactory.tsx","../../../src/features/Study/StudyDetails/StudyItems.tsx","../../../src/features/Study/StudyDetails/StudyGroup.tsx","../../../src/features/Study/StudyDetails/StudyGroupPanel.tsx","../../../src/features/Study/StudyDetails/StudyDetailsPanel.tsx","../../../src/features/Study/StudyDetails/DetailsAuthorizationIcon.tsx","../../../src/features/Study/StudyPage/DownloadLinksPanel.tsx","../../../src/features/Study/StudyDetails/SinglePageStudyDetailsPanel.tsx","../../../src/features/Study/StudyDetails/StudyDetails.tsx","../../../src/features/Discovery/DiscoveryTable.tsx","../../../src/components/CollapsableSidebar/use-collapsable-sidebar.ts","../../../src/components/CollapsableSidebar/CollapsableSidebar.tsx","../../../src/features/Discovery/Search/SearchFilters.tsx","../../../src/features/Discovery/Search/types.ts","../../../src/features/Discovery/Search/AdvancedSearch.tsx","../../../src/features/Discovery/Search/AdvancedSearchPanel.tsx","../../../src/features/Discovery/ActionBar/DataLibraryActionButton.tsx","../../../src/features/Discovery/ActionBar/DownloadManifestButton.tsx","../../../src/features/Discovery/ActionBar/AddToDataLibraryComboButton.tsx","../../../src/features/Discovery/ActionBar/AddToDataLibrary.tsx","../../../src/features/Discovery/ActionBar/ActionBar.tsx","../../../src/utils/RendererFactory.tsx","../../../src/features/Discovery/Statistics/StatisticsRendererFactory.tsx","../../../src/features/Discovery/Statistics/SummaryStatisticPanel.tsx","../../../src/components/charts/utils.ts","../../../src/components/charts/echarts/utils.ts","../../../src/components/charts/echarts/BarChart.tsx","../../../src/components/charts/echarts/PieChart.tsx","../../../src/components/charts/echarts/DonutChart.tsx","../../../src/components/charts/echarts/HorizontalBarChart.tsx","../../../src/components/charts/echarts/VerticalBarChart.tsx","../../../src/components/charts/ChartRendererFactory.ts","../../../src/components/charts/createChart.tsx","../../../src/components/charts/Charts.tsx","../../../src/components/charts/CollapsableCharts.tsx","../../../src/components/charts/ChartTitleBar.tsx","../../../src/utils/removeKey.ts","../../../src/components/charts/EnumFacetChart.tsx","../../../src/features/Discovery/types.ts","../../../src/features/Discovery/DataLoaders/MDSAllLocal/filterByAdvSearch.ts","../../../src/features/Discovery/Search/utils.ts","../../../src/features/authorization/utils.ts","../../../src/features/Discovery/constants.ts","../../../src/features/Discovery/DataLoaders/utils.ts","../../../src/features/Discovery/DataLoaders/MDSAllLocal/DataLoader.ts","../../../src/features/Discovery/Search/SearchInputWithSuggestions.tsx","../../../src/features/Discovery/DataLoaders/AggMDSServer/DataLoader.ts","../../../src/features/Discovery/DataLoaders/IndexedMetadata/DataLoader.ts","../../../src/features/Discovery/DataLoaders/AggMetaMDSProxy/DataLoader.tsx","../../../src/features/Discovery/DataLoaders/registeredDataLoaders.ts","../../../src/features/Discovery/DiscoveryIndexPanel.tsx","../../../src/components/MessagePanel.tsx","../../../src/features/Discovery/Discovery.tsx","../../../src/features/Discovery/TableRenderers/DataAccessCellRenderers.tsx","../../../src/components/DataItems/TruncatedStringWithTooltip.tsx","../../../src/features/Discovery/TableRenderers/CellRenderers.tsx","../../../src/pages/Discovery/DiscoveryPage.tsx","../../../src/pages/Discovery/data.ts","../../../src/pages/Explorer/ExplorerPage.tsx","../../../src/features/CohortBuilder/types.ts","../../../src/pages/Explorer/data.ts","../../../src/components/Buttons/Gen3Button.tsx","../../../src/utils/hash.ts","../../../src/components/Content/TextContent.tsx","../../../src/components/Content/LandingPageContent.tsx","../../../src/pages/Landing/LandingPage.tsx","../../../src/pages/Landing/data.ts","../../../src/components/Layout/TexturedSidePanel.tsx","../../../src/components/Login/LoginProvidersPanel.tsx","../../../src/components/Login/CredentialsLogin.tsx","../../../src/components/Login/utils.ts","../../../src/components/Login/LoginPanel.tsx","../../../src/pages/Login/LoginPage.tsx","../../../src/pages/Login/data.ts","../../../src/pages/NotebookLite/NotebookLitePage.tsx","../../../src/pages/NotebookLite/data.ts","../../../src/pages/Profile/data.ts","../../../src/components/Modals/BaseModal.tsx","../../../src/components/Modals/CreateCredentialsAPIKeyModal.tsx","../../../src/components/Profile/CredentialsTable.tsx","../../../src/components/Profile/Credentials.tsx","../../../src/components/Profile/ResourcesProvider.tsx","../../../src/components/Profile/ProfileProvider.tsx","../../../src/components/Profile/ResourcesFilters.tsx","../../../src/components/Profile/utils.tsx","../../../src/components/Profile/ResourcesTable.tsx","../../../src/components/Profile/ResourcesPanel.tsx","../../../src/components/Profile/ExternalProviderCard.tsx","../../../src/components/Profile/ExternalProvidersPanel.tsx","../../../src/features/Profile/Profile.tsx","../../../src/pages/Profile/ProfilePage.tsx","../../../src/pages/Query/QueryPage.tsx","../../../src/pages/Query/data.ts","../../../src/pages/Repository/data.ts","../../../src/components/facets/utils.ts","../../../src/components/facets/hooks.ts","../../../src/components/facets/constants.ts","../../../src/components/SegmentedControl.tsx","../../../src/components/facets/FacetExpander.tsx","../../../src/components/facets/NumericRangeFacet/utils.ts","../../../src/components/facets/NumericRangeFacet/FromTo.tsx","../../../src/components/facets/FacetSortPanel.tsx","../../../src/components/facets/NumericRangeFacet/RangeValueSelector.tsx","../../../src/components/facets/NumericRangeFacet/RangeInputWithPrefixedRanges.tsx","../../../src/components/facets/NumericRangeFacet/DaysOrYears.tsx","../../../src/components/facets/NumericRangeFacet/Year.tsx","../../../src/components/facets/NumericRangeFacet/Years.tsx","../../../src/components/facets/NumericRangeFacet/PercentRange.tsx","../../../src/components/facets/NumericRangeFacet/NumericRangePanel.tsx","../../../src/components/facets/components.ts","../../../src/components/facets/FacetControlsHeader.tsx","../../../src/components/facets/NumericRangeFacet/index.tsx","../../../src/components/facets/FacetEnumList.tsx","../../../src/components/facets/EnumFacet.tsx","../../../src/components/facets/RangeFacet.tsx","../../../src/components/facets/ToggleFacet.tsx","../../../src/components/facets/MultiSelectValueFacet.tsx","../../../src/components/facets/ExactValueFacet.tsx","../../../src/features/CohortBuilder/QueryExpression/FilterBadge.tsx","../../../src/components/facets/UploadFacet.tsx","../../../src/components/facets/createFacetCard.tsx","../../../src/components/facets/FiltersPanel.tsx","../../../src/features/CohortBuilder/AccessLevel.tsx","../../../src/components/facets/Panels/DropdownPanel.tsx","../../../src/utils/useScrollToHash.ts","../../../src/components/facets/createFacetCards.tsx","../../../src/components/facets/FacetSelectionModal.tsx","../../../src/components/facets/FacetTabs.tsx","../../../src/components/Details/DetailsModal.tsx","../../../src/components/Details/DetailsDrawer.tsx","../../../src/features/CohortBuilder/ExplorerTable/ExplorerTableCellRenderers.tsx","../../../src/components/Tables/utils.ts","../../../src/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.tsx","../../../src/features/CohortBuilder/ExplorerTable/utils.tsx","../../../src/features/CohortBuilder/ExplorerTable/SubTables/ExplorerTableSubtable.tsx","../../../src/features/CohortBuilder/ExplorerTable/SubTables/ExpandingSubtable.tsx","../../../src/features/CohortBuilder/ExplorerTable/SubTables/SubtableStack.tsx","../../../src/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.tsx","../../../src/components/Tables/ColumnOrdering.tsx","../../../src/components/Tables/TableHeader.tsx","../../../src/features/CohortBuilder/ExplorerTable/context.tsx","../../../src/features/cart/updateCart.tsx","../../../src/features/CohortBuilder/ExplorerTable/ExplorerTable.tsx","../../../src/components/counts/CountsValue.tsx","../../../src/utils/download.tsx","../../../src/features/CohortBuilder/downloads/downloadActionHook.tsx","../../../src/features/CohortBuilder/downloads/ActionButton.tsx","../../../src/features/CohortBuilder/downloads/CohortActionButton.tsx","../../../src/features/CohortBuilder/downloads/actions/utils.ts","../../../src/features/CohortBuilder/downloads/actions/downloadToFile.tsx","../../../src/features/CohortBuilder/downloads/actions/downloadManifest.ts","../../../src/features/CohortBuilder/downloads/actions/addCohortToDataLibrary.ts","../../../src/features/CohortBuilder/downloads/actions/registeredActions.ts","../../../src/features/CohortBuilder/downloads/CohortDropdownActionButton.tsx","../../../src/features/CohortBuilder/downloads/actions/extractDataSelectionFromCohort.ts","../../../src/features/CohortBuilder/downloads/CohortDataLibraryListButton.tsx","../../../src/features/CohortBuilder/DownloadsPanel.tsx","../../../src/features/CohortBuilder/hooks.ts","../../../src/features/CohortBuilder/QueryExpression/QueryExpression.tsx","../../../src/features/CohortBuilder/CohortManager/CohortManager.tsx","../../../src/features/CohortBuilder/TabbedCohortBuilder.tsx","../../../src/features/CohortBuilder/Repository/hooks.ts","../../../src/features/CohortBuilder/Repository/Stats.tsx","../../../src/features/CohortBuilder/Repository/FileFacetPanel.tsx","../../../src/features/CohortBuilder/Repository/RepositoryPanel.tsx","../../../src/features/CohortBuilder/Repository/Repository.tsx","../../../src/pages/Repository/RepositoryPage.tsx","../../../src/features/Submission/utils.ts","../../../src/features/Submission/Tables/ProjectTable.tsx","../../../src/features/Submission/Tables/SubmissionsTable.tsx","../../../src/features/Submission/SubmissionPanel.tsx","../../../src/pages/Submission/SubmissionPage.tsx","../../../src/pages/Submission/data.ts","../../../src/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.tsx","../../../src/pages/TabbedCohortBuilder/data.ts","../../../src/features/Theme/ColorTheme.tsx","../../../src/pages/Theme/ColorThemePage.tsx","../../../src/pages/Theme/data.ts","../../../src/pages/Workspace/WorkspaceNoAccess.Page.tsx","../../../src/features/Workspace/WorkspaceProvider.tsx","../../../src/features/Workspace/types.ts","../../../src/features/Workspace/WorkspaceStatusProvider.tsx","../../../src/features/Workspace/NotebookCard.tsx","../../../src/features/Workspace/WorkspacePanel.tsx","../../../src/features/Workspace/WorkspaceNotebook.tsx","../../../src/features/Workspace/ExternalLogins/ExternalLoginsStatus.tsx","../../../src/features/Workspace/utils.ts","../../../src/features/Workspace/PaymentPanel/PaymentPanel.tsx","../../../src/features/Workspace/calculateLaunchSteps.ts","../../../src/features/Workspace/WorkspaceLaunchProgress.tsx","../../../src/features/Workspace/StatusAndControls.tsx","../../../src/features/Workspace/WorkspaceNotebookPanelWithControls.tsx","../../../src/features/Workspace/Workspace.tsx","../../../src/pages/Workspace/WorkspacePage.tsx","../../../src/pages/Workspace/data.ts"],"sourcesContent":["import React from 'react';\nimport { NextPage } from 'next';\nimport Head from 'next/head';\nimport Link from 'next/link';\n\nconst Custom403Page: NextPage = () => {\n return (\n <React.Fragment>\n <Head>\n <title>Not Authorized</title>\n <meta\n property=\"og:title\"\n content=\"Gen3 403\"\n key=\"gen3-not-authorized\"\n />\n </Head>\n <div className=\"flex flex-col justify-center items-center h-full p-8 gap-2\">\n <h1 className=\"text-2xl\">Not Authorized</h1>\n <span>Your account is authenticated, but it is not authorized to access this page.\n If you believe this is an error, contact your administrator or support.</span>\n <Link href=\"/\" className=\"text-primary underline\">\n Click here to go to the Portal&apos;s home page.\n </Link>\n </div>\n </React.Fragment>\n );\n};\n\nexport default Custom403Page;\n","import React from 'react';\nimport { NextPage } from 'next';\nimport Head from 'next/head';\nimport Link from 'next/link';\n\nconst Custom404Page: NextPage = () => {\n return (\n <React.Fragment>\n <Head>\n <title>Page Not Found</title>\n <meta\n property=\"og:title\"\n content=\"Gen3 404\"\n key=\"gen3-page-not-found\"\n />\n </Head>\n <div className=\"flex flex-col justify-center items-center h-full p-8 gap-2\">\n <h1 className=\"text-2xl\">Page Not Found</h1>\n <span>Sorry, we couldn&apos;t find the page you were looking for.</span>\n <Link href=\"/\" className=\"text-primary underline\">\n Click here to go to the Portal&apos;s home page.\n </Link>\n </div>\n </React.Fragment>\n );\n};\n\nexport default Custom404Page;\n","import { ComponentType, ReactElement } from 'react';\nimport { StylingOverrideWithMergeControl } from '../../types';\nimport { TopBarProps } from './TopBar/types';\nimport { FooterProps } from './Footer/types';\n\nexport interface NavigationButtonProps {\n icon: string;\n tooltip: string;\n href: string;\n noBasePath?: boolean;\n name: string;\n iconHeight?: string;\n classNames?: StylingOverrideWithMergeControl;\n}\n\nexport enum LinkAuthStatus {\n Authorized = 'authorized',\n Unauthorized = 'unauthorized',\n Pending = 'pending',\n LoginRequired = 'loginRequired',\n}\n\nexport interface NavigationButtonWithAuthStatus extends NavigationButtonProps {\n authStatus: LinkAuthStatus;\n}\n\nexport interface NavigationBarLogo {\n readonly src: string;\n readonly title?: string;\n readonly description: string;\n readonly width?: number;\n readonly height?: number;\n readonly noBasePath?: boolean;\n readonly divider?: boolean;\n readonly classNames?: StylingOverrideWithMergeControl;\n}\n\nexport interface NavigationProps {\n readonly logo?: NavigationBarLogo;\n readonly items?: NavigationButtonProps[];\n readonly title?: string;\n readonly loginIcon?: ReactElement | string;\n readonly classNames?: StylingOverrideWithMergeControl;\n readonly hideUnauthorizedLinks?: boolean;\n}\n\nexport interface HeaderMetadata {\n title: string;\n content: string;\n key: string;\n}\n\n/**\n * Type guard to check if an object is of type HeaderMetadata\n * @param obj - The object to check\n * @returns True if the object is a valid HeaderMetadata\n */\nexport const isHeaderMetadata = (obj: unknown): obj is HeaderMetadata => {\n // Check if obj is a non-null object\n if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {\n return false;\n }\n\n const candidate = obj as Record<string, unknown>;\n\n // Check all required properties exist and are non-empty strings\n return (\n typeof candidate.title === 'string' &&\n candidate.title.trim().length > 0 &&\n typeof candidate.content === 'string' &&\n candidate.content.trim().length > 0 &&\n typeof candidate.key === 'string' &&\n candidate.key.trim().length > 0\n );\n};\n\n/**\n * Sitewide props that can be passed to Pages\n */\ninterface CommonsData {\n contactEmail?: string;\n}\n\nexport type BannerLevelCategories = 'INFO' | 'WARNING' | 'ERROR';\n\nexport interface BannerProps {\n readonly message: string;\n readonly level: BannerLevelCategories;\n readonly dismissible: boolean;\n readonly isExternalLink: boolean;\n readonly id: number;\n}\n\nexport interface HeaderProps {\n topBar: TopBarProps;\n navigation: NavigationProps;\n banners?: Array<BannerProps>;\n type?: 'horizontal' | 'vertical' | 'original';\n readonly siteProps?: CommonsData;\n}\n\nexport interface MainContentProps {\n fixed: boolean;\n}\n\nexport interface NameAndIcon {\n readonly name?: string;\n readonly iconSize?: string;\n readonly rightIcon?: string;\n readonly leftIcon?: string;\n readonly classNames?: StylingOverrideWithMergeControl;\n}\n\nexport interface NavPageLayoutProps {\n headerProps: Readonly<HeaderProps>;\n footerProps: Readonly<FooterProps>;\n mainProps?: Partial<MainContentProps>;\n headerMetadata: HeaderMetadata;\n CustomHeaderComponent?: ComponentType<HeaderProps>;\n CustomFooterComponent?: ComponentType<FooterProps>;\n}\n","import { AuthorizedRoutesConfig } from '../../lib/authz/type';\nimport { LinkAuthStatus } from './types';\n\nexport const extractClassName = (\n key: string,\n classNames: Record<string, string>,\n): string => {\n if (typeof classNames === 'object' && key in classNames) {\n return classNames[key];\n }\n return '';\n};\nexport const checkRouteAccess = (\n pathname: string,\n resources: string[],\n routesConfig: AuthorizedRoutesConfig,\n loggedIn: boolean,\n pending: boolean,\n): LinkAuthStatus => {\n const rule = routesConfig.routes[pathname] || routesConfig.routes['*'];\n if (!rule) {\n // Not configured: public page\n return LinkAuthStatus.Authorized;\n }\n\n const loginRequired = rule.loginRequired ?? true;\n\n // If no authzResources, then login-only is enough\n if (!loginRequired) {\n return LinkAuthStatus.Authorized;\n }\n\n const hasAuthzResources = Array.isArray(rule.authz) && rule.authz.length > 0;\n\n // If login is required and user is not logged in → not allowed\n if (loginRequired && !loggedIn) {\n return LinkAuthStatus.LoginRequired;\n }\n\n // If a session is loading and the page might require login, we must wait.\n if (pending && loginRequired) {\n return LinkAuthStatus.LoginRequired;\n }\n\n // If no authzResources, then login-only is enough\n if (!hasAuthzResources) {\n return LinkAuthStatus.Authorized;\n }\n\n // if login is pending...\n if (pending) {\n return LinkAuthStatus.Pending;\n }\n\n // Authz enabled and authzResources defined → check membership\n const allowed = rule.authz!.some((needed: any) => resources.includes(needed));\n\n if (allowed) {\n return LinkAuthStatus.Authorized;\n } else {\n return LinkAuthStatus.Unauthorized;\n }\n};\n","import { twMerge } from 'tailwind-merge';\nimport {\n StylingOverrideWithMergeControl,\n StylingMergeMode,\n StylingOverride,\n} from '../types';\n\n/**\n * Merges default and user values for Tailwind classnames.\n *\n * @param {StylingOverride} defaultValues - The default values for the classnames.\n * @param {StylingOverride} userValues - The user-defined values for the classnames.\n * @param {StylingMergeMode} mode - Whether to merge or replace the default and user values. Default is merge.\n * @returns {StylingOverride} - The merged default and user values for the classnames.\n */\nexport const mergeDefaultTailwindClassnames = (\n defaultValues: StylingOverride,\n { mode = 'merge', ...userValues }: StylingOverrideWithMergeControl,\n): StylingOverride => {\n const defaultKeys = Object.keys(defaultValues);\n const mergedValues = { ...defaultValues };\n\n if (mode === 'merge') {\n defaultKeys.forEach((key) => {\n if (userValues[key]) {\n mergedValues[key] = twMerge(defaultValues[key], userValues[key]);\n }\n });\n }\n\n if (mode === 'replace') {\n defaultKeys.forEach((key) => {\n if (userValues[key]) {\n mergedValues[key] = userValues[key];\n }\n });\n }\n return mergedValues;\n};\n\nexport const mergeTailwindClassnameWithDefault = (\n userValues: string | undefined,\n defaultValues: string,\n): string => (userValues ? twMerge(defaultValues, userValues) : defaultValues);\n","import { JSONObject } from '@gen3/core';\nimport { toString } from 'lodash';\n\nexport const isPropertyKey = (value: unknown): value is PropertyKey => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'symbol'\n );\n};\nexport const hasOwnProperty = <X extends object, Y extends PropertyKey>(\n obj?: X,\n prop?: Y,\n): obj is X & Record<Y, unknown> => {\n if (obj === undefined) return false;\n if (prop === undefined) return false;\n return Object.hasOwnProperty.call(obj, prop);\n};\nexport const getParamsValueAsString = (params?: JSONObject, key?: string) => {\n return params &&\n key &&\n key !== '' &&\n isPropertyKey(key) &&\n hasOwnProperty(params, key)\n ? toString(params[key])\n : undefined;\n};\n\nexport const extractObjectKey = <T extends object>(\n obj: T,\n): keyof T | undefined => {\n const keys = Object.keys(obj) as Array<keyof T>;\n return keys.length > 0 ? keys[0] : undefined;\n};\n","import React from 'react';\nimport Image from 'next/image';\nimport {\n FooterColumnProps,\n FooterRow,\n FooterLink,\n FooterLogo,\n FooterText,\n FooterLinks,\n FooterSectionProps,\n} from './types';\nimport {\n mergeDefaultTailwindClassnames,\n mergeTailwindClassnameWithDefault,\n} from '../../../utils/mergeDefaultTailwindClassnames';\nimport { extractClassName } from '../utils';\nimport { extractObjectKey } from '../../../utils/values';\n\ninterface FooterRowComponentProps {\n item: Record<string, FooterRow>;\n rowClassname?: string;\n}\n\n// Component for rendering a single row in the column\n// TODO: replace with a renderer factory\nconst FooterRowComponent: React.FC<FooterRowComponentProps> = ({\n item,\n rowClassname,\n}) => {\n const itemType = extractObjectKey(item);\n if (!itemType) return null;\n\n const className = item[itemType].className ?? rowClassname;\n\n switch (itemType) {\n case 'Label': {\n const text = item[itemType] as FooterText;\n return <p className={className}> {text.text}</p>;\n }\n\n case 'Link': {\n const link = item[itemType] as FooterLink;\n return (\n <React.Fragment key={link.href}>\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={className}\n >\n {link.text ? link.text : link.href}\n </a>\n </React.Fragment>\n );\n }\n\n case 'Links': {\n const links = item[itemType] as FooterLinks;\n const mergedClassname = mergeTailwindClassnameWithDefault(\n className,\n 'flex space-x-1',\n );\n\n return (\n <div className={mergedClassname}>\n {links?.links.map((link, i) => {\n return (\n <React.Fragment key={link.href}>\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={link?.className}\n >\n {link.text ? link.text : link.href}\n </a>\n {i !== links?.links.length - 1 && (\n <span className=\"mx-1\">|</span>\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n case 'Icon': {\n const logo = item[itemType] as FooterLogo;\n if (logo.href) {\n return (\n <a\n key={`icons-${logo.logo}`}\n href={logo.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={className}\n >\n <Image\n src={`${logo.logo}`}\n width={logo.width}\n height={logo.height}\n alt={logo.description}\n />\n </a>\n );\n }\n return (\n <Image\n key={`icons-${logo.logo}`}\n src={`${logo.logo}`}\n width={logo.width}\n height={logo.height}\n alt={logo.description}\n className={className}\n />\n );\n }\n case 'Section': {\n const section = item[itemType] as FooterSectionProps;\n return <FooterSection columns={section.columns} className={className} />;\n }\n\n default:\n return null;\n }\n};\n\nconst FooterColumnTwDefaultStyles = {\n root: 'flex flex-col px-2 justify-start',\n heading: 'font-bold text-xl text-white font-heading',\n rowItem: '',\n};\n\nconst FooterColumn: React.FC<FooterColumnProps> = ({\n heading,\n rows,\n classNames = {},\n}: FooterColumnProps) => {\n const mergedClassNames = mergeDefaultTailwindClassnames(\n FooterColumnTwDefaultStyles,\n classNames,\n );\n\n const rowClassname = extractClassName('rowItem', mergedClassNames);\n return (\n <div className={extractClassName('root', mergedClassNames)}>\n {heading && (\n <h1 className={extractClassName('heading', mergedClassNames)}>\n {heading}\n </h1>\n )}\n\n {rows?.map((item, index) => {\n return (\n <FooterRowComponent\n key={`footer-row-${index}`}\n item={item}\n rowClassname={rowClassname}\n />\n );\n })}\n </div>\n );\n};\n\nconst FooterSection: React.FC<FooterSectionProps> = ({\n columns,\n className = undefined,\n}: FooterSectionProps) => {\n return (\n <div className={`${className ?? 'flex items-center justify-center'}`}>\n {columns?.map((col, index) => (\n <FooterColumn key={`column-${index}`} {...col} />\n ))}\n </div>\n );\n};\n\nexport default React.memo(FooterSection);\n","import React from 'react';\nimport { extractClassName } from '../utils';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { FooterProps } from './types';\nimport FooterSection from './FooterColumn';\n\nconst Footer = ({\n rightSection,\n leftSection,\n classNames = {},\n}: FooterProps) => {\n const classNamesDefaults = {\n root: 'bg-primary-lighter text-primary-contrast p-4 shadow-sm',\n layout: 'flex items-center justify-between',\n };\n\n const mergedClassNames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n return (\n <footer>\n <div className={extractClassName('root', mergedClassNames)}>\n <div className={extractClassName('layout', mergedClassNames)}>\n {leftSection && <FooterSection {...leftSection} />}\n {rightSection && <FooterSection {...rightSection} />}\n </div>\n </div>\n </footer>\n );\n};\n\nexport default Footer;\n","import React from 'react';\nimport Link from 'next/link';\nimport { PropsWithChildren } from 'react';\nimport { FaExternalLinkAlt } from 'react-icons/fa';\n\ninterface ClassProps {\n readonly className?: string;\n}\n\ninterface Gen3LinkProps extends ClassProps {\n readonly href: string;\n readonly linkType?: string;\n readonly text: string;\n readonly showExternalIcon?: boolean;\n}\n\nconst Gen3Link = ({\n className,\n href,\n linkType,\n text,\n showExternalIcon = false,\n}: PropsWithChildren<Gen3LinkProps>) => {\n const portalBasename =\n process.env.NEXT_PUBLIC_PORTAL_BASENAME &&\n process.env.NEXT_PUBLIC_PORTAL_BASENAME !== '/'\n ? process.env.NEXT_PUBLIC_PORTAL_BASENAME\n : '';\n if (linkType === 'gen3ff') {\n return (\n <span className={className}>\n <Link href={href}>{text}</Link>\n </span>\n );\n } else if (linkType === 'portal') {\n return (\n <a\n className={className}\n href={`${portalBasename}${href}`}\n target=\"_parent\"\n >\n {text}\n </a>\n );\n }\n // external link\n return (\n <a className={className} href={href} target=\"_blank\" rel=\"noreferrer\">\n {showExternalIcon ? (\n <FaExternalLinkAlt className=\"pr-1\" title=\"External Link\" />\n ) : null}\n {text}\n </a>\n );\n};\n\nexport default Gen3Link;\n","import { TextContentProps } from '../Content/TextContent';\nimport { Gen3AppConfigData } from '../../lib/content/types';\n\nexport interface Gen3LoginPanelConfig {\n title: string; // Main title for Login page\n subtitle: string; // a sub title\n text: string; // text string below the login buttons\n contact: string; // contact message\n email: string;\n image: string;\n className: string;\n}\n\nexport interface LoginConfig\n extends Partial<Gen3LoginPanelConfig>,\n Gen3AppConfigData {\n topContent?: ReadonlyArray<TextContentProps>;\n bottomContent?: ReadonlyArray<TextContentProps>;\n showCredentialsLogin?: boolean;\n}\n\nexport interface LoginSelectedProps {\n readonly handleLoginSelected: (_url: string) => void;\n}\n\nexport enum LoginButtonVisibility {\n Hidden = 'hide',\n Visible = 'visible',\n LogoutOnly = 'logoutOnly',\n}\n","import {\n AdditionalDataItem,\n CohortItem,\n FileItem,\n DataLibraryStoreMode,\n} from '@gen3/core';\nimport { DataLibraryActionsConfig } from './selection/types';\n\nexport interface DatasetContents {\n id: string;\n name?: string;\n queries: Array<CohortItem>;\n files: Array<FileItem>;\n additionalData: Array<AdditionalDataItem>;\n}\n\nexport type DatalistMembers = Record<string, DatasetContents>;\nexport type DataItemSelectedState = 'checked' | 'unchecked' | 'indeterminate';\n\n/**\n * Used to represent a selected file item\n */\nexport interface FileItemWithParentDatasetNameAndID extends FileItem {\n datasetName: string;\n datasetId: string;\n}\n\nexport interface TableColumnsConfig {\n label: string;\n accessor: string;\n width?: string | number;\n}\n\nexport interface DataLibraryConfig {\n storageMode: DataLibraryStoreMode;\n requiresLogin?: boolean;\n size?: string;\n actions: DataLibraryActionsConfig;\n fileTable?: {\n columns: TableColumnsConfig[];\n };\n selectionTable?: {\n columns: TableColumnsConfig[];\n };\n}\n\nexport type SelectableItem = CohortItem | FileItemWithParentDatasetNameAndID;\n\nexport interface ValidCohortItem extends CohortItem {\n valid?: boolean;\n errors?: string[];\n}\n\nexport interface ValidFileItemWithParentDatasetNameAndID\n extends FileItemWithParentDatasetNameAndID {\n valid?: boolean;\n errors?: string[];\n}\n\nexport type ValidatedSelectedItem =\n | ValidCohortItem\n | ValidFileItemWithParentDatasetNameAndID;\n\n/**\n * Type guard for ValidFileItemWithParentDatasetNameAndID\n * Checks if the object has the properties that define this interface\n */\nexport const isValidFileItemWithParentDatasetNameAndID = (\n item: unknown,\n): item is ValidFileItemWithParentDatasetNameAndID => {\n if (!item || typeof item !== 'object') {\n return false;\n }\n\n const fileItem = item as Partial<ValidFileItemWithParentDatasetNameAndID>;\n\n // Check required properties from FileItemWithParentDatasetNameAndID\n if (\n typeof fileItem.datasetName !== 'string' ||\n typeof fileItem.datasetId !== 'string'\n ) {\n return false;\n }\n\n // We can assume it's a FileItem if it has the required properties from parent interfaces\n // Additional checks could be added if FileItem has required properties\n\n return true;\n};\n\nexport const MantineSizeToString: Record<string, string> = {\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n 'xl-2': 'xl-2',\n};\n\nexport const IconSize: Record<string, number> = {\n xs: 14,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n 'xl-2': 36,\n};\n\nexport const FontSize: Record<string, string> = {\n xs: 'var(--mantine-font-size-xs)',\n sm: 'var(--mantine-font-size-sm)',\n md: 'var(--mantine-font-size-md)',\n lg: 'var(--mantine-font-size-lg)',\n xl: 'var(--mantine-font-size-xl)',\n 'xl-2': 'var(--mantine-font-size-2xl)',\n};\n","export const TooltipStyle = {\n tooltip:\n 'bg-base-darker text-base-contrast-darker text-sm border-1 border-base-darker',\n arrow: 'bg-base-darker ',\n};\n","import React from 'react';\nimport { NameAndIcon } from '../types';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { IconSize } from '../../DataLibrary/types';\nimport { extractClassName } from '../utils';\nimport { Icon } from '@iconify-icon/react';\nimport { Tooltip } from '@mantine/core';\nimport { TooltipStyle } from '../style';\n\nexport interface TopIconButtonProps extends NameAndIcon {\n tooltip?: string;\n clickHandler?: () => void;\n ariaLabel?: string;\n component?: React.ReactElement;\n}\n\nexport interface TopIconButtonPropsWithLink extends TopIconButtonProps {\n href: string;\n newWindow?: boolean;\n}\n\nexport const IconButton = ({\n name,\n leftIcon = undefined,\n rightIcon = undefined,\n iconSize = 'md',\n tooltip = undefined,\n classNames = {},\n clickHandler = undefined,\n ariaLabel = undefined,\n}: TopIconButtonProps) => {\n const classNamesDefaults = {\n root: `flex items-center align-middle px-2 my-2`,\n button:\n 'flex flex-nowrap items-center align-middle border-b-2 hover:border-accent border-transparent',\n leftIcon: 'text-secondary-contrast-lighter pr-1',\n label: 'font-content text-secondary-contrast-lighter block',\n rightIcon: 'text-secondary-contrast-lighter pl-1',\n };\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n // get the icon size otherwise use the value of iconsSize as a string value: e.g. 2em\n const iconSz = IconSize[iconSize] ?? iconSize;\n\n return (\n <div className={extractClassName('root', mergedClassnames)}>\n <Tooltip\n label={tooltip}\n position=\"bottom\"\n withArrow\n multiline\n color=\"base\"\n disabled={tooltip === undefined}\n classNames={TooltipStyle}\n >\n <div\n className={extractClassName('button', mergedClassnames)}\n role=\"button\"\n aria-label={ariaLabel ?? name}\n onClick={(event) => clickHandler && clickHandler()}\n >\n {leftIcon ? (\n <Icon\n icon={leftIcon}\n width={iconSz}\n height={iconSz}\n className={extractClassName('leftIcon', mergedClassnames)}\n />\n ) : null}\n <p className={extractClassName('label', mergedClassnames)}>{name}</p>\n {rightIcon && rightIcon.length > 0 ? (\n <Icon\n width={iconSz}\n height={iconSz}\n icon={rightIcon}\n className={extractClassName('rightIcon', mergedClassnames)}\n />\n ) : null}\n </div>\n </Tooltip>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { IconSize } from '../../DataLibrary/types';\nimport { useRouter } from 'next/router';\nimport {\n type CoreState,\n isAuthenticated,\n selectUserAuthStatus,\n selectUserDetails,\n useCoreSelector,\n} from '@gen3/core';\nimport { IconButton, TopIconButtonProps } from './IconButton';\n\ntype TopBarAccountButtonProps = Omit<TopIconButtonProps, 'name'>;\n\nexport const AccountButton = ({\n leftIcon = undefined,\n rightIcon = undefined,\n iconSize = 'md',\n classNames = {},\n tooltip = 'See account profile',\n}: TopBarAccountButtonProps) => {\n const classNamesDefaults = {\n root: `flex items-center align-middle px-2 my-2`,\n button:\n 'flex flex-nowrap items-center align-middle border-b-2 hover:border-accent border-transparent',\n leftIcon: 'text-secondary-contrast-lighter pr-1',\n label: 'font-content text-secondary-contrast-lighter block',\n rightIcon: 'text-secondary-contrast-lighter pl-1',\n };\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const router = useRouter();\n\n const handleSelected = async () => {\n await router.push('/Profile');\n };\n\n const userInfo = useCoreSelector((state: CoreState) =>\n selectUserDetails(state),\n );\n\n const userStatus = useCoreSelector((state: CoreState) =>\n selectUserAuthStatus(state),\n );\n \n const [authenticated, setAuthenticated] = useState(false);\n\n useEffect(() => {\n if (userStatus === 'pending') {\n return\n }\n const tempIsAuth = isAuthenticated(userStatus);\n if (tempIsAuth != authenticated) {\n setAuthenticated(tempIsAuth);\n }\n }, [userStatus]);\n\n if (!authenticated) return null;\n\n // get the icon size otherwise use the value of iconsSize as a string value: e.g. 2em\n const iconSz = IconSize[iconSize] ?? iconSize;\n const displayName =\n userInfo?.email ||\n userInfo?.preferred_username ||\n userInfo?.username;\n\n return (\n <IconButton\n name={displayName ?? 'Profile'}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n iconSize={iconSize}\n classNames={mergedClassnames}\n clickHandler={handleSelected}\n tooltip={tooltip}\n />\n );\n};\n","/**\n * @returns {number} time in seconds since Unix epoch.\n */\nexport function getCurrentUnixTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * convert unix timestamp to date time string\n * @param {number} unixTime\n * @returns {string} date time string\n */\nexport function unixTimeToString(unixTime: number): string {\n return new Date(unixTime * 1000).toLocaleString();\n}\n\n/**\n * Converts a given duration in minutes to its equivalent in milliseconds.\n *\n * @param {number} minutes - The time duration in minutes to be converted.\n * @returns {number} The equivalent duration in milliseconds.\n */\nexport const convertMinutesToMilliseconds = (minutes: number) =>\n minutes * 60 * 1000;\n\n/**\n * Converts a given time in seconds to milliseconds.\n *\n * @param {number} seconds - The time in seconds to be converted.\n * @returns {number} The equivalent time in milliseconds.\n */\nexport const convertSecondsToMilliseconds = (seconds: number) => seconds * 1000;\n\n// Using the built-in Date object\nconst getCurrentTimestamp = (): number => {\n return Date.now(); // Returns milliseconds since Unix epoch\n};\n\n// Get a readable timestamp for logging/display\nexport const getFormattedTimestamp = (): string => {\n return new Date().toISOString();\n};\n\n// Compare two timestamps and get difference in milliseconds\nconst getTimeDifferenceMs = (\n startTime: number,\n endTime: number = Date.now(),\n): number => {\n return endTime - startTime;\n};\n\n// Check if time difference is greater than specified minutes\nexport const isTimeGreaterThan = (\n startTime: number,\n minutes: number,\n): boolean => {\n const diffMs = getTimeDifferenceMs(startTime);\n const diffMinutes = diffMs / (1000 * 60);\n return diffMinutes > minutes;\n};\n\n// Get human-readable duration\nconst getReadableDuration = (milliseconds: number): string => {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n};\n\n// Example usage:\nexport const measureExecutionTime = async (func: () => Promise<any>) => {\n const startTime = getCurrentTimestamp();\n await func();\n const duration = getTimeDifferenceMs(startTime);\n return getReadableDuration(duration);\n};\n\n// Performance monitoring with high-resolution timestamps\nexport const getHighResolutionTimestamp = (): number => {\n return performance.now(); // More precise than Date.now() for performance measurements\n};\nconst SecondsToMilliseconds = (seconds: number) => seconds * 1000;\nexport const MinutesToMilliseconds = (minutes: number) => minutes * 60 * 1000;\n","export const focusStyles =\n 'focus-visible:outline-none focus-visible:ring-offset-2 focus:ring-offset-white rounded-md focus-visible:ring-inset focus-visible:ring-2 focus-visible:ring-focusColor';\n","import { capitalize } from 'lodash';\nimport { NodeCountConfiguration } from '../features/CohortBuilder/types';\n\nexport const stripTrailingSlash = (str: string): string => {\n return str.endsWith('/') ? str.slice(0, -1) : str;\n};\n\nexport const SPECIAL_CASE_FIELDS = {\n icd_10_code: 'ICD-10 Code',\n};\n\nexport const toDisplayName = (field: string): string => {\n const parsed = field.split('.');\n const fieldName = parsed.at(-1);\n\n if (!fieldName) return 'NotSet';\n\n return fieldName\n .split('_')\n .map((w) => capitalize(w))\n .join(' ');\n};\n\n/*\n Function to convert counts to a string with units\n For example, count = 100 units = 'cases' => '100 Cases'\n Function should handle pluralization\n */\nexport const toCountsString = (\n counts: number | undefined,\n units: string,\n configuration?: NodeCountConfiguration,\n): string => {\n if (configuration) {\n if (!counts) return `No ${configuration.none}`;\n if (counts === 1) return `${counts.toLocaleString()} ${configuration.one}`;\n return `${counts.toLocaleString()} ${configuration.multiple}`;\n }\n\n if (!counts) return `No ${capitalize(pluralize(units))}`;\n // return a string with counts and units handling pluralization\n const unitDisplay = counts === 1 ? units : pluralize(units);\n return `${counts.toLocaleString()} ${capitalize(unitDisplay)}`;\n};\n\n// Helper function to handle basic pluralization\nconst pluralize = (word: string): string => {\n // Handle special cases\n if (word.endsWith('y')) {\n return word.slice(0, -1) + 'ies';\n } else if (\n word.endsWith('s') ||\n word.endsWith('x') ||\n word.endsWith('z') ||\n word.endsWith('ch') ||\n word.endsWith('sh')\n ) {\n return word + 'es';\n } else {\n return word + 's';\n }\n};\n","import { CSSProperties } from 'react';\n\nexport const isArrayOfString = (value: any): value is Array<string> => {\n return (\n Array.isArray(value) &&\n value.every((element) => typeof element === 'string')\n );\n};\n\n// Define the valid textTransform values\nconst validTextTransforms: Array<CSSProperties['textTransform']> = [\n 'none',\n 'capitalize',\n 'uppercase',\n 'lowercase',\n 'full-width',\n 'full-size-kana',\n 'inherit',\n 'initial',\n 'revert',\n 'unset',\n];\n\n// Type guard function\nexport const isTextTransform = (\n value: any,\n): value is CSSProperties['textTransform'] => {\n return validTextTransforms.includes(value);\n};\n","import {\n JSONValue,\n} from '@gen3/core';\n\nexport const accessibleFieldName = '__accessible';\n\nexport enum AccessLevel {\n ACCESSIBLE = 1,\n UNACCESSIBLE = 2,\n WAITING = 3,\n NOT_AVAILABLE = 4,\n OTHER = 5,\n MIXED = 6,\n}\n","export const validateObjectHasRequiredFields = (\n obj: any,\n requiredFields: string[],\n) => requiredFields.every((field) => obj[field] !== undefined);\n","import { useEffect, useState } from 'react';\nimport {\n isTimeGreaterThan,\n RequestedWorkspaceStatus,\n selectRequestedWorkspaceStatus,\n selectRequestedWorkspaceStatusTimestamp,\n setActiveWorkspaceStatus,\n setRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n useGetWorkspacePayModelsQuery,\n useGetWorkspaceStatusQuery,\n useTerminateWorkspaceMutation,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { notifications } from '@mantine/notifications';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { convertSecondsToMilliseconds } from '../../utils'; // TODO add to config\n\nenum NotificationStatus {\n Info,\n Warn,\n Error,\n}\n\nconst notifyUser = (\n title: string,\n message: string,\n status = NotificationStatus.Info,\n) => {\n const NotificationMap: Record<NotificationStatus, string> = {\n [NotificationStatus.Info]: 'utility.1',\n [NotificationStatus.Warn]: 'utility.2',\n [NotificationStatus.Error]: 'utility.4',\n };\n\n notifications.show({\n title,\n message,\n color: NotificationMap[status],\n position: 'top-center',\n });\n};\n\n// TODO: convert to seconds/minutes for readability\nconst WorkspacePollingInterval: Record<WorkspaceStatus, number> = {\n [WorkspaceStatus.NotFound]: 0,\n [WorkspaceStatus.Launching]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Terminating]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Running]: convertSecondsToMilliseconds(300),\n [WorkspaceStatus.Stopped]: convertSecondsToMilliseconds(5),\n [WorkspaceStatus.Errored]: convertSecondsToMilliseconds(10),\n [WorkspaceStatus.StatusError]: 0,\n};\n\n// TODO: convert to seconds/minutes for readability\nconst PaymentPollingInterval: Record<WorkspaceStatus, number> = {\n 'Not Found': 0,\n Launching: convertSecondsToMilliseconds(120), // 2 minutes\n Terminating: 0,\n Running: convertSecondsToMilliseconds(900), // 15 minutes\n Stopped: 0,\n Errored: 0,\n 'Status Error': 0,\n};\n\nconst workspaceShutdownAlertLimit = 30000; // 5 minutes: 5 * 60 * 1000 TODO Figure how to configure this\n\n/**\n * Monitors resource usage.\n * Currently, it handles workspace, payment and idle status\n */\n\nexport const useWorkspaceResourceMonitor = (monitorWorkspace: boolean) => {\n const [pollingInterval, setPollingInterval] = useState<number>(0);\n const [paymentPollingInterval, setPaymentPollingInterval] =\n useState<number>(0);\n const {\n data: workspaceStatusData,\n isError: isWorkspaceStatusError,\n error: workspaceStatusError,\n } = useGetWorkspaceStatusQuery(undefined, monitorWorkspace ? {\n pollingInterval: pollingInterval,\n refetchOnMountOrArgChange: 1800,\n refetchOnFocus: true,\n } : {\n skip: true,\n });\n\n const {\n data: paymentModelData,\n isError: isPaymentModelError,\n error: paymentModelError,\n } = useGetWorkspacePayModelsQuery(undefined, monitorWorkspace ? {\n pollingInterval: paymentPollingInterval,\n refetchOnMountOrArgChange: true,\n } : { skip: true });\n const [terminateWorkspace] = useTerminateWorkspaceMutation();\n const requestedStatus = useCoreSelector(selectRequestedWorkspaceStatus); // trigger to start/stop workspaces\n const requestedStatusTimestamp = useCoreSelector(\n selectRequestedWorkspaceStatusTimestamp,\n );\n const dispatch = useCoreDispatch();\n\n useEffect(() => {\n if (isWorkspaceStatusError) {\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.StatusError));\n setPollingInterval(0); // stop polling\n setPaymentPollingInterval(0);\n }\n }, [isWorkspaceStatusError, dispatch]);\n useEffect(() => {\n if (isPaymentModelError) {\n console.error('Payment model error: ', paymentModelError.toString());\n }\n if (paymentModelData?.noPayModel) {\n console.warn('No payment model defined');\n }\n }, [paymentModelData, isPaymentModelError, paymentModelError]);\n // update the polling based on the requested state\n useEffect(() => {\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Launching]);\n }\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Terminating]);\n }\n }, [requestedStatus]);\n useEffect(() => {\n if (workspaceStatusData?.status) {\n setPaymentPollingInterval(\n PaymentPollingInterval[workspaceStatusData.status],\n );\n }\n }, [workspaceStatusData?.status]);\n\n useDeepCompareEffect(() => {\n if (!workspaceStatusData) return;\n\n // Check if the workspace is running.\n // If so: need to check workspace idle if set\n // and ensure the pay model is queried\n if (workspaceStatusData.status === WorkspaceStatus.Running) {\n const { idleTimeLimit, lastActivityTime } = workspaceStatusData;\n // in some state other than idle\n if (!idleTimeLimit || idleTimeLimit <= 0) {\n // Workspace is running, but no idle limit set.\n // Continue to poll to ensure we detect if it crashes or stops.\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset));\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.Running)); // workspace is running\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.Running]);\n return;\n }\n\n if (idleTimeLimit && idleTimeLimit > 0 && lastActivityTime > 0) {\n const remainingWorkspaceKernelLife =\n idleTimeLimit - (Date.now() - lastActivityTime);\n\n if (remainingWorkspaceKernelLife <= 0) {\n // kernel has died due to inactivity\n // so terminate\n (async () => {\n try {\n await terminateWorkspace().unwrap();\n } catch (error) {\n const errorMessage =\n (error as Error).message || 'Unknown error occurred';\n console.error('Workspace termination failed: ', errorMessage);\n notifyUser(\n 'Workspace Error',\n `Failed to terminate workspace: ${errorMessage}`,\n NotificationStatus.Error,\n );\n }\n })();\n dispatch(\n setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate),\n );\n setPollingInterval(\n WorkspacePollingInterval[WorkspaceStatus.Terminating],\n );\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n notifyUser(\n 'Workspace Shutdown',\n 'Workspace has been idle for too long. Shutting workspace down',\n NotificationStatus.Error,\n );\n return;\n }\n if (remainingWorkspaceKernelLife <= workspaceShutdownAlertLimit) {\n notifyUser(\n 'Workspace Warning',\n 'Workspace has been idle for too long. Will shutdown soon',\n NotificationStatus.Warn,\n );\n }\n }\n\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if the workspace is running then requested status has been met\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset));\n }\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n return;\n }\n\n dispatch(setActiveWorkspaceStatus(workspaceStatusData.status));\n setPollingInterval(WorkspacePollingInterval[workspaceStatusData.status]);\n return;\n }\n\n if (workspaceStatusData.status === WorkspaceStatus.NotFound) {\n // NotFound means pod is not running\n // either starting up\n // or finally terminated.\n if (requestedStatus === RequestedWorkspaceStatus.Launch) {\n // if the workspace becomes idle to too long after a Launch request switch to\n // Unset and NotFound.\n return;\n } else {\n // both requested status and workspace pod status are the same, so stop all polling\n setPollingInterval(WorkspacePollingInterval[WorkspaceStatus.NotFound]);\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n if (requestedStatus === RequestedWorkspaceStatus.Terminate) {\n // Cleanup termination after terminated\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset));\n }\n }\n return;\n }\n\n // if here, update active workspace status and polling interval\n dispatch(setActiveWorkspaceStatus(workspaceStatusData.status));\n setPollingInterval(WorkspacePollingInterval[workspaceStatusData.status]);\n }, [dispatch, workspaceStatusData, requestedStatus]);\n\n useEffect(() => {\n if (\n requestedStatus === RequestedWorkspaceStatus.Launch &&\n isTimeGreaterThan(requestedStatusTimestamp, 8)\n ) {\n terminateWorkspace();\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate));\n notifyUser(\n 'Workspace Startup',\n 'Workspace failed to start. Shutting down',\n NotificationStatus.Error,\n );\n }\n }, [requestedStatus, requestedStatusTimestamp, terminateWorkspace, dispatch, workspaceStatusData]);\n};\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useRouter } from 'next/router';\nimport { getCookie } from 'cookies-next';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { useManageSession } from './hooks';\nimport { showNotification } from '@mantine/notifications';\nimport { Session, SessionProviderProps } from './types';\nimport { isUserOnPage } from './utils';\nimport {\n type CoreState,\n GEN3_FENCE_API,\n GEN3_REDIRECT_URL,\n Modals,\n selectUserAuthStatus,\n showModal,\n useCoreDispatch,\n useCoreSelector,\n useGetCSRFQuery,\n useLazyFetchUserDetailsQuery,\n} from '@gen3/core';\n\nimport { Center, Loader } from '@mantine/core';\nimport { useThrottledCallback } from '@mantine/hooks';\n\nimport { MinutesToMilliseconds } from '../../utils';\nimport { useWorkspaceResourceMonitor } from '../../components/Providers/ResourceMonitor';\n\nconst ACTIVITY_CHANNEL = 'gen3-user-activity';\n\nexport const logoutSession = async () => {\n // logged in using credentials then execute credentials logout first\n const accessToken = getCookie('credentials_token');\n if (accessToken) {\n await fetch('/api/auth/credentialsLogout');\n }\n\n await fetch(`${GEN3_FENCE_API}/logout?next=${GEN3_REDIRECT_URL}/`, {\n cache: 'no-store',\n });\n};\n\nfunction useOnline() {\n const [isOnline, setIsOnline] = useState(\n typeof navigator !== 'undefined' ? navigator.onLine : false,\n );\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n}\n\nexport const SessionContext = React.createContext<Session | undefined>(\n undefined,\n);\n\n/**\n * Wwe eventually want to use the session token to determine if the user is logged in\n * as opposed to the user status since that check will happen on the server using httpOnly cookies\n * and verification of the session token\n */\nexport const getSession = async () => {\n try {\n const res = await fetch('/api/auth/sessionToken', { cache: 'no-store' });\n if (res.status === 200) {\n return await res.json();\n }\n } catch (error) {\n return { status: 'error' };\n }\n};\n\nexport const useSession = (\n required = false,\n onUnauthenticated?: () => void,\n) => {\n const router = useRouter();\n const session = useContext(SessionContext);\n if (!session) {\n throw new Error(\n '[gen3]: `useSession` must be wrapped in a <SessionProvider />',\n );\n }\n\n if (required && !session.pending && session.status !== 'issued') {\n if (onUnauthenticated) {\n onUnauthenticated();\n } else {\n if (typeof window === 'undefined')\n // route not available on SSR\n return session;\n router.push('Login');\n }\n }\n return session;\n};\n\nexport const useIsAuthenticated = () => {\n const session = useSession();\n return {\n isAuthenticated: session.status === 'issued',\n user: session.userContext,\n };\n};\n\nconst refreshSession = (\n getUserDetails: () => void,\n mostRecentSessionRefreshTimestamp: number,\n updateSessionRefreshTimestamp: (arg0: number) => void,\n): void => {\n const timeSinceLastSessionUpdate =\n Date.now() - mostRecentSessionRefreshTimestamp;\n // don't hit Fence to refresh tokens too frequently\n if (timeSinceLastSessionUpdate < UPDATE_SESSION_LIMIT) {\n return;\n }\n\n // hitting Fence endpoint refreshes the token\n updateSessionRefreshTimestamp(Date.now());\n getUserDetails();\n};\n\ntype IntervalFunction = () => unknown | void;\n\nconst useInterval = (callback: IntervalFunction, delay: number | null) => {\n const savedCallback = useRef<IntervalFunction | null>(null);\n\n useEffect(() => {\n if (delay === null) return;\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return;\n function tick() {\n if (savedCallback.current !== null) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n};\n\nconst UPDATE_SESSION_LIMIT = MinutesToMilliseconds(5);\n\n/**\n * SessionProvider creates a React context which keeps track of wether the user is authenticated\n * and if their session is stale and logs them out if they do not preform an action in an alotted amount of time\n * @param children - Pass in a child session if one exists\n * @param session - Pass in a cached session if one exists\n * @param updateSessionTime - Interval of time between fetching session token\n * @param inactiveTimeLimit - Amount of time user is allowed to be inactive before getting logged out if user is tabbed away from page\n * @param workspaceInactivityTimeLimit - Amount of time user is allowed to be inactive if user is tabbed into the site\n * @param logoutInactiveUsers - Whether to log out users that are determined to be inactive or not\n * @returns a Session context that can be used to keep track of user session activity\n */\nexport const SessionProvider = ({\n children,\n updateSessionTime = 5,\n inactiveTimeLimit = 20,\n workspaceInactivityTimeLimit = 0,\n logoutInactiveUsers = true,\n monitorWorkspace = true,\n}: SessionProviderProps) => {\n const router = useRouter();\n const coreDispatch = useCoreDispatch();\n\n const { isSuccess: isGetCSRFSuccess, isError: isGetCSRFError } =\n useGetCSRFQuery();\n useWorkspaceResourceMonitor(monitorWorkspace); // monitor workspaces if any are running or configured\n\n const [getUserDetails] = useLazyFetchUserDetailsQuery(); // Fetch user details\n const userStatus = useCoreSelector((state: CoreState) =>\n selectUserAuthStatus(state),\n );\n\n const [mostRecentActivityTimestamp, setMostRecentActivityTimestamp] =\n useState(Date.now());\n\n const broadcastChannelRef = useRef<BroadcastChannel | null>(null);\n\n // Initialize BroadcastChannel for cross-tab communication\n // any user event on one tab or window will update mostRecentActivityTimestamp\n useEffect(() => {\n if (typeof window !== 'undefined') {\n broadcastChannelRef.current = new BroadcastChannel(ACTIVITY_CHANNEL);\n\n // Listen for activity updates from other tabs\n const handleActivityMessage = (event: MessageEvent) => {\n if (event.data.type === 'activity-update') {\n setMostRecentActivityTimestamp(event.data.timestamp);\n }\n };\n\n broadcastChannelRef.current.addEventListener(\n 'message',\n handleActivityMessage,\n );\n\n return () => {\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.removeEventListener(\n 'message',\n handleActivityMessage,\n );\n broadcastChannelRef.current.close();\n }\n };\n }\n }, []);\n\n const [\n mostRecentSessionRefreshTimestamp,\n setMostRecentSessionRefreshTimestamp,\n ] = useState(Date.now());\n\n const inactiveTimeLimitMilliseconds =\n MinutesToMilliseconds(inactiveTimeLimit);\n\n const workspaceInactivityTimeLimitMilliseconds = MinutesToMilliseconds(\n workspaceInactivityTimeLimit,\n );\n const updateSessionIntervalMilliseconds =\n MinutesToMilliseconds(updateSessionTime);\n\n // update session status using the user status\n\n const sessionInfo = useManageSession(userStatus);\n\n // for now, we are using the user status to determine if the user is logged in\n const updateSession = useCallback(() => {\n const updateSessionWithUserStatus = async () => {\n await getUserDetails();\n };\n\n updateSessionWithUserStatus();\n }, [getUserDetails]);\n\n const endSession = useCallback(async () => {\n logoutSession()\n .then(() => {\n getUserDetails();\n })\n .catch((e) => {\n showNotification({\n title: 'Logout Error',\n message: `error logging in ${e.message}`,\n });\n })\n .finally(() => {\n router.push(`${GEN3_REDIRECT_URL}`); // TODO replace with config option\n });\n }, [getUserDetails, router]);\n\n /**\n * Checkes if user session has ended\n */\n const isSessionActive = useThrottledCallback(() => {\n //Check session token, this call updates info \n getUserDetails().then((obj)=>{\n //check to make sure logged out useres are logged out\n if (obj?.data?.loginStatus != 'authenticated' && userStatus === 'authenticated') {\n coreDispatch(showModal({ modal: Modals.SessionExpireModal }));\n }\n });\n }, 5000); // set the time between api calls\n\n /**\n * Update session value every updateSessionInterval seconds\n */\n useEffect(() => {\n updateSession();\n\n if (updateSessionIntervalMilliseconds <= 0) return; // do not poll if updateSessionInterval is 0\n\n const updateUserActivity = () => {\n const timestamp = Date.now();\n setMostRecentActivityTimestamp(timestamp);\n\n if (broadcastChannelRef.current) {\n broadcastChannelRef.current.postMessage({\n type: 'activity-update',\n timestamp,\n });\n }\n // check session token to keep this in sync\n isSessionActive();\n };\n\n window.addEventListener('mousedown', updateUserActivity);\n window.addEventListener('keypress', updateUserActivity);\n window.addEventListener('updateUserActivity', updateUserActivity);\n window.addEventListener('scroll', updateUserActivity);\n window.addEventListener('click', updateUserActivity);\n window.addEventListener('touchstart', updateUserActivity);\n\n return () => {\n window.removeEventListener('mousedown', updateUserActivity);\n window.removeEventListener('keypress', updateUserActivity);\n window.removeEventListener('updateUserActivity', updateUserActivity);\n window.removeEventListener('scroll', updateUserActivity);\n window.removeEventListener('click', updateUserActivity);\n window.removeEventListener('touchstart', updateUserActivity);\n };\n }, []); // only call on mount/dismount\n\n useInterval(\n () => {\n if (sessionInfo.status != 'issued') return; // no need to update session if user is not logged in\n if (isUserOnPage('Login') /* || this.popupShown */) return;\n\n const timeSinceLastActivity = Date.now() - mostRecentActivityTimestamp;\n\n if (logoutInactiveUsers) {\n if (\n timeSinceLastActivity >= inactiveTimeLimitMilliseconds &&\n !isUserOnPage('Workspace')\n ) {\n coreDispatch(showModal({ modal: Modals.SessionExpireModal }));\n endSession();\n return;\n }\n if (\n workspaceInactivityTimeLimitMilliseconds > 0 &&\n timeSinceLastActivity >= workspaceInactivityTimeLimitMilliseconds &&\n isUserOnPage('Workspace')\n ) {\n coreDispatch(showModal({ modal: Modals.SessionExpireModal }));\n endSession();\n return;\n }\n }\n // fetching a userState will renew the session\n refreshSession(\n getUserDetails,\n mostRecentSessionRefreshTimestamp,\n (ts: number) => setMostRecentSessionRefreshTimestamp(ts),\n );\n updateSession();\n },\n updateSessionIntervalMilliseconds > 0\n ? updateSessionIntervalMilliseconds\n : null,\n );\n\n const value: Session = useDeepCompareMemo(() => {\n return {\n ...sessionInfo,\n updateSession,\n endSession,\n };\n }, [sessionInfo, updateSession, endSession]);\n\n if (isGetCSRFError) {\n return (\n <Center h=\"100vh\">\n {`Error from the commons services. They do not seem to be running`}\n </Center>\n );\n }\n\n if (isGetCSRFSuccess)\n return (\n <SessionContext.Provider value={value}>\n {children}\n </SessionContext.Provider>\n );\n else\n return (\n <Center h=\"100vh\">\n <Loader />\n </Center>\n );\n};\n","import React, { useContext, useState, useEffect } from 'react';\nimport { NameAndIcon } from '../types';\nimport { NextRouter, useRouter } from 'next/router';\nimport { usePathname } from 'next/navigation';\nimport { SessionContext } from '../../../lib/session/session';\nimport {\n type CoreState,\n isAuthenticated,\n selectUserAuthStatus,\n useCoreSelector,\n} from '@gen3/core';\nimport { LoginButtonVisibility } from '../../../components/Login/types';\nimport { IconButton } from './IconButton';\n\nconst handleSelected = async (\n isAuthenticated: boolean,\n router: NextRouter,\n referrer: string,\n endSession?: () => void,\n externalLoginUrl?: string,\n) => {\n if (!isAuthenticated)\n await router.push(externalLoginUrl || `/Login?redirect=${referrer}`);\n else {\n if (endSession) endSession();\n }\n};\n\nexport interface TopBarLoginButtonProps extends NameAndIcon {\n readonly href: string;\n readonly tooltip?: string;\n visibility: LoginButtonVisibility;\n externalLoginUrl?: string;\n}\n\nexport const LoginButton = ({\n name = 'login',\n leftIcon = undefined,\n rightIcon = undefined,\n tooltip = 'Login to your account',\n visibility,\n externalLoginUrl,\n iconSize = 'md',\n classNames = {},\n}: Partial<TopBarLoginButtonProps>) => {\n const router = useRouter();\n const pathname = usePathname();\n\n const { endSession } = useContext(SessionContext) ?? {\n endSession: undefined,\n };\n\n const userStatus = useCoreSelector((state: CoreState) =>\n selectUserAuthStatus(state),\n );\n\n const [authenticated, setAuthenticated] = useState(false);\n\n useEffect(() => {\n if (userStatus === 'pending') {\n return\n }\n const tempIsAuth = isAuthenticated(userStatus);\n if (tempIsAuth != authenticated) {\n setAuthenticated(tempIsAuth);\n }\n }, [userStatus]);\n\n if (visibility === LoginButtonVisibility.LogoutOnly && !authenticated)\n return null;\n\n return (\n <IconButton\n name={authenticated ? 'Logout' : 'Login'}\n leftIcon={leftIcon}\n rightIcon={authenticated ? 'gen3:logout' : 'gen3:login'}\n iconSize={iconSize}\n classNames={classNames}\n clickHandler={() =>\n handleSelected(\n authenticated,\n router,\n pathname,\n endSession,\n externalLoginUrl,\n )\n }\n />\n );\n};\n","import React, { ReactElement } from 'react';\nimport { Divider } from '@mantine/core';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { extractClassName } from '../utils';\nimport { LoginButtonVisibility } from '../../../components/Login/types';\nimport { StylingOverrideWithMergeControl } from '../../../types';\nimport { IconButton, TopIconButtonPropsWithLink } from './IconButton';\nimport { AccountButton } from './AccountButton';\nimport { LoginButton } from './LoginButton';\nimport { TopBarProps } from './types';\n\nconst processTopBarItems = (\n items: TopIconButtonPropsWithLink[],\n classNames: StylingOverrideWithMergeControl,\n dividerClassname: string,\n): ReactElement[] => {\n return items.reduce(\n (acc: ReactElement[], item: TopIconButtonPropsWithLink) => {\n const mergedClassnames = item?.classNames\n ? mergeDefaultTailwindClassnames(classNames, item.classNames)\n : classNames;\n\n const Custom = item.component;\n acc.push(\n <React.Fragment key={`${item.href}_${item.name}-topbar-item`}>\n <a\n className=\"flex\"\n href={item.href}\n target={item.newWindow === true ? '_blank' : undefined}\n rel={item.newWindow === true ? 'noreferrer' : undefined}\n >\n {Custom ? (\n Custom\n ) : (\n <IconButton\n name={item.name}\n iconSize={item.iconSize}\n leftIcon={item.leftIcon}\n rightIcon={item.rightIcon}\n classNames={mergedClassnames}\n />\n )}\n </a>\n <Divider\n size=\"md\"\n orientation=\"vertical\"\n classNames={{ root: dividerClassname }}\n />\n </React.Fragment>,\n );\n return acc;\n },\n [],\n );\n};\n\nconst TopBar = ({\n items,\n loginButtonVisibility = LoginButtonVisibility.Hidden,\n externalLoginUrl,\n classNames = {},\n itemClassnames = {},\n}: TopBarProps) => {\n const classNamesDefaults = {\n root: 'flex justify-end items-center align-middle w-100 bg-secondary-lighter',\n login: 'font-content hover:border-accent',\n divider: 'border-accent my-2',\n };\n\n const itemClassnameDefaults = {\n root: `flex items-center align-middle px-2 my-2`,\n button:\n 'flex flex-nowrap items-center align-middle border-b-2 hover:border-accent border-transparent',\n leftIcon: 'text-secondary-contrast-lighter pr-1',\n label: 'font-content text-secondary-contrast-lighter block',\n rightIcon: 'text-secondary-contrast-lighter pl-1',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const mergedItemClassnames = mergeDefaultTailwindClassnames(\n itemClassnameDefaults,\n itemClassnames,\n );\n\n return (\n <div>\n <header className={extractClassName('root', mergedClassnames)}>\n <div\n role=\"navigation\"\n aria-label=\"top most navigation\"\n className=\"flex items-center align-middle\"\n >\n {processTopBarItems(\n items,\n mergedItemClassnames,\n extractClassName('divider', mergedClassnames),\n )}\n {loginButtonVisibility != LoginButtonVisibility.Hidden ? (\n <>\n <span className=\"flex items-center align-middle [&>*:only-child]:hidden\">\n <AccountButton classNames={mergedItemClassnames} />\n <Divider\n size=\"md\"\n classNames={{\n root: extractClassName('divider', mergedClassnames),\n }}\n orientation=\"vertical\"\n />\n </span>\n <LoginButton\n visibility={loginButtonVisibility}\n externalLoginUrl={externalLoginUrl}\n classNames={mergedItemClassnames}\n />\n </>\n ) : null}\n </div>\n </header>\n </div>\n );\n};\n\nexport default TopBar;\n","import React from 'react';\nimport Link from 'next/link';\n\ninterface ClassProps {\n readonly className?: string;\n}\n\ninterface HoverLinkProps extends ClassProps {\n children?: React.ReactNode;\n href: string;\n noBasePath?: boolean;\n}\n\n/**\n * Component representing a hoverable link.\n *\n * @param {Object} props - The properties of the HoverLink component.\n * @param {string} props.className - The class name for the wrapping span element.\n * @param {string} props.href - The URL of the link.\n * @param {ReactNode} props.children - The content of the link.\n * @returns {ReactElement} - The rendered HoverLink component.\n */\nconst HoverLink = ({\n className,\n href,\n noBasePath,\n children,\n}: HoverLinkProps) => {\n if (noBasePath)\n return (\n <span className={className}>\n <a href={href}>{children}</a>\n </span>\n );\n\n return (\n <span className={className}>\n <Link href={href} passHref>\n {children}\n </Link>\n </span>\n );\n};\n\nexport default HoverLink;\n","import { NavigationBarLogo } from './types';\nimport HoverLink from './HoverLink';\nimport Image from 'next/image';\nimport React from 'react';\nimport { extractClassName } from './utils';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\n\nconst NavigationLogo = ({\n src,\n title,\n description,\n width,\n height,\n divider = false,\n noBasePath = undefined,\n classNames = {},\n}: NavigationBarLogo) => {\n const classNamesDefaults = {\n root: 'relative flex py-0 justify-start items-center align-middle font-heading font-bold tracking-wide text-xl ml-[5px] mr-[20px]',\n link: 'relative object-contain',\n logo: 'px-3',\n title: 'border-solid border-base-darker ml-1 mr-3',\n divider:\n 'border-solid border-gen3-smoke border-l-1 ml-[2px] mr-[7px] h-[64px] w-1',\n titleLink:\n 'font-heading text-md pt-2 text-ink-dark hover:text-ink-darkest hover:border-accent hover:border-b-3',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n return (\n <div\n className={extractClassName('root', mergedClassnames)}\n role=\"navigation\"\n >\n <HoverLink\n className={extractClassName('link', mergedClassnames)}\n href=\"/\"\n noBasePath={noBasePath}\n >\n <Image\n className={extractClassName('logo', mergedClassnames)}\n width={width ?? undefined}\n height={height ?? undefined}\n fill={!width && !height}\n src={`${src}`}\n alt={description ?? title ?? 'link back to homepage'}\n />\n </HoverLink>\n {divider && (\n <div className={extractClassName('divider', mergedClassnames)} />\n )}\n {title && (\n <div\n className={extractClassName('title', mergedClassnames)}\n role=\"navigation\"\n >\n <HoverLink\n className={extractClassName('titleLink', mergedClassnames)}\n href={'/'}\n >\n {title}\n </HoverLink>\n </div>\n )}\n </div>\n );\n};\n\nexport default NavigationLogo;\n","import React from 'react';\nimport { Icon } from '@iconify-icon/react';\nimport { Tooltip, UnstyledButton } from '@mantine/core';\nimport { extractClassName } from './utils';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\nimport { TooltipStyle } from './style';\n\nimport { useRouter } from 'next/router';\nimport { LinkAuthStatus, NavigationButtonWithAuthStatus } from './types';\n\nconst AuthTooltips: Record<LinkAuthStatus, string> = {\n loginRequired: 'Login required to access this page',\n pending: 'Checking your access…',\n unauthorized: 'You are logged in but not authorized to access this page',\n authorized: 'You are authorized to access this page',\n};\n\n/**\n * NavigationBarButton: a button for the navigation bar\n * @param tooltip - the tooltip text to display\n * @param icon - the icon to display\n * @param href - the href to link to\n * @param name - the name of the button\n * @param iconHeight - the height of the icon\n * @param classNames - the class names to use for root, label, icon/tooltip and arrow'\n * @param noBasePath - set to true to avoid prepending a basePath to the link\n * @param authStatus - the status of the user's authorization to access this page.\n */\nconst NavigationBarButton = ({\n tooltip,\n icon,\n href,\n name,\n iconHeight = '32px',\n classNames = {},\n noBasePath = false,\n authStatus,\n}: NavigationButtonWithAuthStatus) => {\n const classNamesDefaults = {\n root: 'flex flex-col nowrap px-3 py-2 pt-4 justify-between items-center align-center text-primary hover:text-accent opacity-80 hover:opacity-100 data-disabled:opacity-35 data-disabled:hover:text-primary data-disabled:hover:opacity-35',\n label: 'pt-1.5 body-typo font-heading text-sm text-nowrap',\n icon: 'data-disabled:opacity-50',\n ...TooltipStyle,\n };\n const router = useRouter();\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const handleClick = () => {\n if (authStatus !== 'authorized') {\n // Optional: open a modal / toast instead of doing nothing\n return;\n }\n router.push(href);\n };\n\n const tooltipText =\n authStatus !== 'authorized' ? AuthTooltips[authStatus] : tooltip;\n\n return (\n <React.Fragment>\n <Tooltip\n label={tooltipText}\n disabled={!tooltip}\n multiline\n position=\"bottom\"\n arrowSize={8}\n withArrow\n zIndex={1000}\n w={220}\n >\n {noBasePath ? (\n <div\n className={extractClassName('root', mergedClassnames)}\n role=\"navigation\"\n data-disabled={authStatus !== 'authorized' ? true : undefined}\n >\n <UnstyledButton\n onClick={handleClick}\n classNames={{\n root: 'flex flex-col nowrap',\n }}\n >\n <Icon\n height={iconHeight}\n icon={icon}\n className={extractClassName('icon', mergedClassnames)}\n />\n <p className={extractClassName('label', mergedClassnames)}>\n {name}\n </p>\n </UnstyledButton>\n </div>\n ) : (\n <div\n role=\"navigation\"\n className={extractClassName('root', mergedClassnames)}\n data-disabled={authStatus !== 'authorized' ? true : undefined}\n >\n <UnstyledButton\n onClick={handleClick}\n classNames={{\n root: 'flex flex-col nowrap',\n }}\n >\n <Icon\n height={iconHeight}\n icon={icon}\n className={extractClassName('icon', mergedClassnames)}\n />\n <p className={extractClassName('label', mergedClassnames)}>\n {name}\n </p>\n </UnstyledButton>\n </div>\n )}\n </Tooltip>\n </React.Fragment>\n );\n};\n\nexport default NavigationBarButton;\n","import React, { createContext, ReactNode, useContext, useMemo } from 'react';\nimport { AuthorizedRoutesConfig, RouteConfig } from '../../lib/authz/type';\n\nexport const DefaultRouteConfig: RouteConfig = {\n '/DataLibrary': {\n loginRequired: true,\n authz: ['/frontend/DataLibrary'],\n },\n '/Workspace': {\n loginRequired: true,\n authz: ['/workspaces'],\n },\n '/Profile': {\n loginRequired: true,\n },\n '/Login': {\n loginRequired: false,\n },\n '*': {\n loginRequired: false,\n },\n};\n\nconst ProtectedRoutesContext = createContext<AuthorizedRoutesConfig>({\n routes: DefaultRouteConfig,\n});\n\ninterface ProtectedRoutesProviderProps {\n config: AuthorizedRoutesConfig;\n children?: ReactNode | undefined;\n}\nconst ProtectedRoutesProvider = ({\n config,\n children,\n}: ProtectedRoutesProviderProps) => {\n const value = useMemo(() => ({ ...config }), [config]);\n\n return (\n <ProtectedRoutesContext.Provider value={value}>\n {children}\n </ProtectedRoutesContext.Provider>\n );\n};\nexport default ProtectedRoutesProvider;\nexport const useProtectedRoutesContext = () =>\n useContext(ProtectedRoutesContext);\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { useRouter } from 'next/router';\nimport {\n LinkAuthStatus,\n NavigationButtonProps,\n NavigationProps,\n} from './types';\nimport { LoadingOverlay } from '@mantine/core';\nimport NavigationLogo from './NavigationLogo';\nimport NavigationBarButton from './NavigationBarButton';\nimport { checkRouteAccess, extractClassName } from './utils';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\n\nimport { useSession } from '../../lib/session/session';\nimport { useProtectedRoutesContext } from '../../components/AuthorizedRoutes/ProtectedRoutesProvider';\nimport { useGetAuthzResourcesQuery } from '@gen3/core';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\n\ninterface NavigationBarItemProps {\n item: NavigationButtonProps;\n current: string;\n mergedClassnames: Record<string, string>;\n index: number;\n authStatus: LinkAuthStatus;\n}\n\nconst NavigationBarItem = ({\n item,\n current,\n mergedClassnames,\n authStatus,\n}: NavigationBarItemProps) => {\n const selectedStyle =\n current === item.href ? 'border-accent border-b-4 border-b-accent' : '';\n\n return (\n <div\n className={`first:border-l-1 border-r-1 flex-1 border-base-dark ${selectedStyle} ${extractClassName(\n 'buttons',\n mergedClassnames,\n )}`}\n >\n <LoadingOverlay visible={authStatus === LinkAuthStatus.Pending} />\n <NavigationBarButton\n tooltip={item.tooltip}\n icon={item.icon}\n href={item.href}\n name={item.name}\n classNames={item.classNames}\n noBasePath={item?.noBasePath}\n authStatus={authStatus}\n />\n </div>\n );\n};\n\n/**\n * NavigationBar component\n * @param logo - The logo object\n * @param {Array} items - The array of navigation items\n * @param {Object} classNames - The custom class names for different elements of the NavigationBar\n * @param {boolean} hideUnauthorizedLinks - Hist navigation items that the user is not authorized to access. Defaults to false.\n * @returns {ReactElement} The rendered NavigationBar component\n */\nconst NavigationBar = ({\n logo = undefined,\n title = undefined,\n items = [],\n classNames = {},\n hideUnauthorizedLinks = false,\n}: NavigationProps): ReactElement => {\n const classNamesDefaults = {\n root: 'flex bg-base-max border-b-1 border-base-dark',\n navigationPanel: 'font-heading',\n logoAndTitlePanel: 'flex justify-center items-center align-middle',\n buttons: '',\n login:\n 'pl-1 mr-6 bg-base-max text-base-contrast opacity-80 hover:opacity-100',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const { status, pending } = useSession(false); // no redirect side-effects here\n const loggedIn = useDeepCompareMemo(() => {\n return status === 'issued';\n }, [status]);\n const routesConfig = useProtectedRoutesContext();\n const {\n data: resources,\n error: authzResourceError,\n isFetching: isAuthzResourcesFetching,\n isError: isAuthzResourcesError,\n refetch,\n } = useGetAuthzResourcesQuery();\n\n useDeepCompareEffect(() => {\n if (!pending) refetch();\n }, [status, pending]);\n\n const router = useRouter();\n const [current, setCurrent] = useState(router.pathname);\n useEffect(() => {\n setCurrent(router.asPath);\n }, [router.asPath]);\n\n const itemsToRenderSetup = () => {\n return items.map((x, index) => {\n const linkAuthStatus = checkRouteAccess(\n x.href,\n resources?.resources ?? [],\n routesConfig,\n loggedIn,\n pending || isAuthzResourcesFetching,\n );\n if (\n hideUnauthorizedLinks &&\n linkAuthStatus !== LinkAuthStatus.Authorized\n ) {\n return null;\n }\n return (\n <NavigationBarItem\n key={`${x.name}-${index}`}\n item={x}\n index={index}\n current={current}\n mergedClassnames={mergedClassnames}\n authStatus={linkAuthStatus}\n />\n );\n });\n }\n\n const [itemsToRender, setItemsToRender] = useState(itemsToRenderSetup);\n useEffect(() => {\n if (!isAuthzResourcesFetching) {\n setItemsToRender(itemsToRenderSetup());\n }\n }, [isAuthzResourcesFetching]);\n\n return (\n <div\n role=\"navigation\"\n aria-label=\"main site navigation\"\n className={extractClassName('root', mergedClassnames)}\n >\n <div className={extractClassName('logoAndTitlePanel', mergedClassnames)}>\n {logo && <NavigationLogo {...{ ...logo }} />}\n </div>\n <div className=\"flex flex-grow\">{/* middle section of header */}</div>\n <div\n className={`flex flex-grow nowrap ${extractClassName(\n 'navigationPanel',\n mergedClassnames,\n )}`}\n >\n {itemsToRender}\n </div>\n </div>\n );\n};\n\nexport default NavigationBar;\n","import React from 'react';\nimport {\n FaExclamation as WarningIcon,\n FaExclamationTriangle as ErrorIcon,\n FaExternalLinkAlt,\n FaQuestion as InfoIcon,\n} from 'react-icons/fa';\nimport Markdown from 'react-markdown';\nimport { BannerProps } from './types';\n\nconst backgroundColor = {\n INFO: 'bg-utility-info',\n WARNING: 'bg-utility-warning',\n ERROR: 'bg-utility-error',\n MESSAGE: 'bg-utility-warning',\n};\n\nconst textColor = {\n INFO: 'text-utility-contrast-info',\n WARNING: 'text-utility-contrast-warning',\n ERROR: 'text-utility-contrast-error',\n MESSAGE: 'text-utility-contrast-warning',\n};\n\nconst icon = {\n INFO: <InfoIcon className=\"text-utility-contrast-info\" title=\"Info icon.\" />,\n WARNING: (\n <WarningIcon\n className=\"text-utility-contrast-warning\"\n title=\"Warning icon.\"\n />\n ),\n ERROR: (\n <ErrorIcon className=\"text-utility-contrast-error\" title=\"Error icon.\" />\n ),\n};\n\nexport const Banner: React.FC<BannerProps> = ({\n message,\n level,\n isExternalLink,\n}: BannerProps) => {\n const linkTarget = isExternalLink ? '_blank' : '_self';\n return (\n <div\n className={`w-full p-1 flex justify-between ${backgroundColor[level]}`}\n >\n <div className=\"flex items-center m-auto\">\n {icon[level]}\n <span className={`pl-4 ${textColor[level]}`}>\n <Markdown\n components={{\n a: ({ children, ...props }) => (\n <a\n className=\"underline\"\n {...props}\n target={linkTarget}\n rel=\"noreferrer\"\n >\n {children}\n {isExternalLink && (\n <FaExternalLinkAlt\n className=\"pl-1 inline-block\"\n title=\"External Link\"\n />\n )}\n </a>\n ),\n }}\n >\n {message}\n </Markdown>\n </span>\n </div>\n </div>\n );\n};\n","import React, { useContext } from 'react';\nimport { Tooltip, UnstyledButton } from '@mantine/core';\nimport { NextRouter, useRouter } from 'next/router';\nimport { usePathname } from 'next/navigation';\nimport { MdLogin as LoginIcon } from 'react-icons/md';\nimport { SessionContext } from '../../lib/session/session';\nimport {\n type CoreState,\n isAuthenticated,\n selectUserAuthStatus,\n useCoreSelector,\n} from '@gen3/core';\nimport { TooltipStyle } from '../../features/Navigation/style';\nimport { LoginButtonVisibility } from './types';\nimport { mergeTailwindClassnameWithDefault } from '../../utils/mergeDefaultTailwindClassnames';\n\nconst handleSelected = async (\n isAuthenticated: boolean,\n router: NextRouter,\n referrer: string,\n endSession?: () => void,\n externalLoginUrl?: string,\n) => {\n if (!isAuthenticated)\n await router.push(externalLoginUrl || `Login?redirect=${referrer}`);\n else {\n if (endSession) endSession();\n }\n};\n\ninterface LoginButtonProps {\n readonly icon?: React.ReactElement | string;\n readonly hideText?: boolean;\n className?: string;\n tooltip?: string;\n visibility: LoginButtonVisibility;\n externalLoginUrl?: string;\n}\n\nconst LoginButton = ({\n icon = <LoginIcon className=\"pl-1\" size={'1.55rem'} />,\n hideText = false,\n className = undefined,\n tooltip,\n visibility,\n externalLoginUrl,\n}: LoginButtonProps) => {\n const router = useRouter();\n\n const pathname = usePathname();\n\n const { endSession } = useContext(SessionContext) ?? {\n endSession: undefined,\n };\n\n const userStatus = useCoreSelector((state: CoreState) =>\n selectUserAuthStatus(state),\n );\n const authenticated = isAuthenticated(userStatus);\n\n if (visibility === LoginButtonVisibility.LogoutOnly && !authenticated)\n return null;\n\n const mergedClassname = mergeTailwindClassnameWithDefault(\n className,\n 'flex flex-nowrap items-center font-content text-secondary-contrast-lighter align-middle border-b-2 hover:border-accent border-transparent mx-2',\n );\n\n return (\n <Tooltip\n label={tooltip}\n position=\"bottom\"\n withArrow\n multiline\n color=\"base\"\n disabled={tooltip === undefined}\n classNames={TooltipStyle}\n >\n <UnstyledButton\n onClick={() =>\n handleSelected(\n authenticated,\n router,\n pathname,\n endSession,\n externalLoginUrl,\n )\n }\n >\n <div className={mergedClassname}>\n {!hideText ? (authenticated ? 'Logout' : 'Login') : null}\n {icon}\n </div>\n </UnstyledButton>\n </Tooltip>\n );\n};\n\nexport default LoginButton;\n","import React from 'react';\nimport { Menu, Text, Tooltip } from '@mantine/core';\nimport { PiDotsThreeCircleThin as DotsIcon } from 'react-icons/pi';\nimport Link from 'next/link';\nimport { TooltipStyle } from './style';\nimport { TopIconButtonPropsWithLink } from './TopBar/IconButton';\n\ninterface ActionMenuProps {\n items: TopIconButtonPropsWithLink[];\n}\n\nconst ActionMenu = ({ items }: ActionMenuProps) => {\n return (\n <React.Fragment>\n <Menu>\n <Menu.Target>\n <Tooltip\n label={'Action Menu'}\n multiline\n color=\"base\"\n classNames={TooltipStyle}\n position=\"bottom\"\n withArrow\n >\n <button>\n <DotsIcon size={'3.15rem'} />\n </button>\n </Tooltip>\n </Menu.Target>\n <Menu.Dropdown>\n {items.map((x, index) => {\n return (\n <Menu.Item key={`${x.name}-${index}`}>\n {x.newWindow === true ? (\n <Link\n href={x.href}\n target=\"_blank\"\n >\n <Text>{x.name}</Text>\n </Link>\n ) : (\n <Link href={x.href}>\n <Text>{x.name}</Text>\n </Link>\n )}\n </Menu.Item>\n );\n })}\n </Menu.Dropdown>\n </Menu>\n </React.Fragment>\n );\n};\n\nexport default ActionMenu;\n","import React, { ReactElement } from 'react';\n\nimport { LinkAuthStatus, NavigationProps } from '../types';\nimport NavigationBarButton from '../NavigationBarButton';\nimport NavigationLogo from '../NavigationLogo';\nimport LoginButton from '../../../components/Login/LoginButton';\nimport { AiOutlineLogin as LoginIcon } from 'react-icons/ai';\nimport { checkRouteAccess, extractClassName } from '../utils';\nimport ActionMenu from '../ActionMenu';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { LoginButtonVisibility } from '../../../components/Login/types';\nimport { TopBarProps } from '../TopBar/types';\nimport { useSession } from '../../../lib/session/session';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\nimport { useProtectedRoutesContext } from '../../../components/AuthorizedRoutes/ProtectedRoutesProvider';\nimport { useGetAuthzResourcesQuery } from '@gen3/core';\n\nexport interface HorizontalNavigationBarProps extends NavigationProps {\n readonly actions: TopBarProps;\n loginIcon?: ReactElement | string;\n}\n\nconst HorizontalNavigationBar = ({\n actions,\n items,\n logo = undefined,\n loginIcon = <LoginIcon size={'3.15rem'} />,\n classNames = {},\n hideUnauthorizedLinks = false,\n}: HorizontalNavigationBarProps) => {\n const classNamesDefaults = {\n root: 'py-3 border-b-1 border-base-light shadow-sm',\n navigationPanel: 'font-heading font-bold tracking-wide text-xl space-x-4',\n login:\n 'pl-1 mr-6 bg-base-max text-base-contrast opacity-80 hover:opacity-100',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const { status, pending } = useSession(false); // no redirect side-effects here\n const loggedIn = useDeepCompareMemo(() => status === 'issued', [status]);\n const routesConfig = useProtectedRoutesContext();\n const {\n data: resources,\n error: authzResourceError,\n isFetching: isAuthzResourcesFetching,\n isError: isAuthzResourcesError,\n refetch,\n } = useGetAuthzResourcesQuery();\n\n useDeepCompareEffect(() => {\n if (loggedIn && !isAuthzResourcesFetching && !isAuthzResourcesError) {\n refetch();\n }\n }, [loggedIn, isAuthzResourcesFetching, isAuthzResourcesError, refetch]);\n\n return (\n <div\n className={`flex justify-between ${extractClassName(\n 'root',\n mergedClassnames,\n )}`}\n >\n <div\n className={`flex justify-center items-center align-middle ${extractClassName(\n 'logo',\n mergedClassnames,\n )}`}\n >\n {logo && <NavigationLogo {...{ ...logo }} />}\n </div>\n <div\n className={`flex justify-center items-center align-middle ${extractClassName(\n 'navigationPanel',\n mergedClassnames,\n )}`}\n >\n {items?.map((x, index) => {\n const linkAuthStatus = checkRouteAccess(\n x.href,\n resources?.resources ?? [],\n routesConfig,\n loggedIn,\n pending || isAuthzResourcesFetching,\n );\n if (\n hideUnauthorizedLinks &&\n linkAuthStatus !== LinkAuthStatus.Authorized\n ) {\n return null;\n }\n\n return (\n <div key={`${x.name}-${index}`}>\n <NavigationBarButton\n tooltip={x.tooltip}\n icon={x.icon}\n href={x.href}\n name={x.name}\n classNames={x.classNames}\n authStatus={LinkAuthStatus.Authorized}\n />\n </div>\n );\n })}\n </div>\n <div />\n <div className=\"flex items-center align-middle mr-3\">\n {actions.loginButtonVisibility === LoginButtonVisibility.Visible ? (\n <LoginButton\n icon={loginIcon}\n hideText\n className={`${extractClassName('login', mergedClassnames)}`}\n tooltip={'Login to the commons'}\n visibility={actions?.loginButtonVisibility}\n />\n ) : null}\n <ActionMenu items={actions.items} />\n </div>\n </div>\n );\n};\n\nexport default HorizontalNavigationBar;\n","import React from 'react';\nimport TopBar from './TopBar/TopBar';\nimport NavigationBar from './NavigationBar';\nimport { Banner } from './Banner';\nimport { HeaderProps } from './types';\nimport HorizontalNavigationBar from './HorizontalClean/HorizontalNavigationBar';\n\n/**\n * Header component.\n *\n * @param {object} props - The properties for the Header component.\n * @param {object} props.topBar - The top bar items and configuration.\n * @param {object} props.navigation - The navigation bar items and configuration.\n * @param {string} props.type - The type of header to render. Default value is 'original'.\n * @returns {JSX.Element} - The rendered Header component.\n */\nconst Header = ({\n topBar,\n navigation,\n banners,\n type = 'original',\n}: HeaderProps) => {\n return type === 'horizontal' ? (\n <div className=\"w-full\">\n {banners?.map((banner) => (\n <Banner {...banner} key={banner.id} />\n ))}\n <HorizontalNavigationBar\n logo={navigation.logo}\n title={navigation.title}\n items={navigation.items}\n classNames={{ ...navigation.classNames }}\n actions={topBar}\n />\n </div>\n ) : type === 'vertical' ? (\n <div>\n {banners?.map((banner) => (\n <Banner {...banner} key={banner.id} />\n ))}\n <HorizontalNavigationBar\n logo={navigation.logo}\n title={navigation.title}\n classNames={{ ...navigation.classNames }}\n actions={topBar}\n />\n </div>\n ) : (\n <div className=\"w-full\">\n <TopBar\n items={topBar.items}\n loginButtonVisibility={topBar?.loginButtonVisibility}\n externalLoginUrl={topBar?.externalLoginUrl}\n classNames={{ ...topBar.classNames }}\n itemClassnames={{ ...topBar.itemClassnames }}\n />\n {banners?.map((banner) => (\n <Banner {...banner} key={banner.id} />\n ))}\n <NavigationBar\n logo={navigation.logo}\n title={navigation.title}\n items={navigation.items}\n classNames={navigation?.classNames}\n hideUnauthorizedLinks={navigation?.hideUnauthorizedLinks}\n />\n </div>\n );\n};\n\nexport default Header;\n","import { checkRouteAccess, extractClassName } from '../utils';\nimport NavigationBarButton from '../NavigationBarButton';\nimport React from 'react';\nimport { LinkAuthStatus, NavigationProps } from '../types';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { useSession } from '../../../lib/session/session';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\nimport { useProtectedRoutesContext } from '../../../components/AuthorizedRoutes/ProtectedRoutesProvider';\nimport { useGetAuthzResourcesQuery } from '@gen3/core';\n\ntype LeftSidePanelProps = Pick<\n NavigationProps,\n 'items' | 'classNames' | 'hideUnauthorizedLinks'\n>;\n\nconst LeftSidePanel = ({\n items = [],\n classNames = {},\n hideUnauthorizedLinks = false,\n}: LeftSidePanelProps) => {\n const classNamesDefaults = {\n navigationPanel: 'w-32 bg-base-light border-r-2 border-base',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const { status, pending } = useSession(false); // no redirect side-effects here\n const loggedIn = useDeepCompareMemo(() => status === 'issued', [status]);\n const routesConfig = useProtectedRoutesContext();\n const {\n data: resources,\n error: authzResourceError,\n isFetching: isAuthzResourcesFetching,\n isError: isAuthzResourcesError,\n refetch,\n } = useGetAuthzResourcesQuery();\n\n useDeepCompareEffect(() => {\n if (loggedIn && !isAuthzResourcesFetching && !isAuthzResourcesError) {\n refetch();\n }\n }, [loggedIn, isAuthzResourcesFetching, isAuthzResourcesError, refetch]);\n return (\n <div\n className={`flex flex-col justify-start items-center align-middle ${extractClassName(\n 'navigationPanel',\n mergedClassnames,\n )}`}\n >\n {items.map((x, index) => {\n const linkAuthStatus = checkRouteAccess(\n x.href,\n resources?.resources ?? [],\n routesConfig,\n loggedIn,\n pending || isAuthzResourcesFetching,\n );\n if (\n hideUnauthorizedLinks &&\n linkAuthStatus !== LinkAuthStatus.Authorized\n ) {\n return null;\n }\n return (\n <div key={`${x.name}-${index}`}>\n <NavigationBarButton\n tooltip={x.tooltip}\n icon={x.icon}\n href={x.href}\n name={x.name}\n classNames={x.classNames}\n authStatus={LinkAuthStatus.Authorized}\n />\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default LeftSidePanel;\n","import React, { PropsWithChildren } from 'react';\nimport Head from 'next/head';\nimport Footer from './Footer/Footer';\nimport Header from './Header';\nimport { NavPageLayoutProps } from './types';\nimport LeftSidePanel from './Vertical/LeftSidePanel';\n\nconst NavPageLayout = ({\n headerProps,\n footerProps,\n mainProps,\n headerMetadata,\n CustomHeaderComponent,\n CustomFooterComponent,\n children,\n}: PropsWithChildren<NavPageLayoutProps>) => {\n const mainContentStyle = mainProps?.fixed\n ? 'flex-1 flex overflow-hidden relative'\n : 'flex grow relative';\n return (\n <div className=\"flex flex-col justify-between h-screen\">\n <Head>\n <title>{headerMetadata.title}</title>\n <meta\n property=\"og:title\"\n content={headerMetadata.content}\n key={headerMetadata.key}\n />\n </Head>\n {CustomHeaderComponent ? (\n <CustomHeaderComponent {...headerProps} />\n ) : (\n <Header {...headerProps}>\n <title>{headerMetadata.title}</title>\n <meta\n property=\"og:title\"\n content={headerMetadata.content}\n key={headerMetadata.key}\n />\n </Header>\n )}\n {headerProps.type === 'vertical' ? (\n <div className=\"flex grow\">\n <LeftSidePanel\n items={headerProps.navigation.items}\n classNames={headerProps.navigation.classNames}\n />\n <main className={mainContentStyle}>{children}</main>\n </div>\n ) : (\n <main className={mainContentStyle}>{children}</main>\n )}\n {CustomFooterComponent ? (\n <CustomFooterComponent {...footerProps} />\n ) : (\n <Footer {...footerProps} />\n )}\n </div>\n );\n};\n\nexport default NavPageLayout;\n","import React, { useState, useEffect } from 'react';\nimport { MdClose as CloseIcon, MdInfo } from 'react-icons/md';\nimport { PiSparkleFill, PiTrash } from 'react-icons/pi';\nimport {\n TextInput,\n Loader,\n Tabs,\n Button,\n UnstyledButton,\n Title,\n Divider,\n Tooltip,\n Table,\n} from '@mantine/core';\nimport { useAskQuestionMutation, AiSearchResponse } from '@gen3/core';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport { useDeepCompareCallback } from 'use-deep-compare';\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query/react';\n\ninterface AiSearchProps {\n placeholder?: string;\n uidForStorage?: string;\n}\ninterface HistoryObj {\n [key: string]: {\n loadingStarted: number;\n loadingEnded?: number;\n result?: AiSearchResponse;\n };\n}\n/**\n * AiSearch is an ai chatbot presenting as a searchbar\n * @param uidForStorage - optional id used to store search results Defaults to 'aiSearch'\n * @param placeholder - optional Defaults to 'e.g. Is there any data with subjects diagnosed with lung disease?'\n */\nconst AiSearch = ({\n placeholder = 'e.g. Is there any data with subjects diagnosed with lung disease?',\n uidForStorage = 'aiSearch',\n}: AiSearchProps) => {\n const [searchTerm, setSearchTerm] = useState('');\n const [searchTermOnSubmit, setSearchTermOnSubmit] = useState('');\n const [aiSearchHistory, setAiSearchHistory] = useState<HistoryObj>({});\n const [resultAreaDisplayed, setResultAreaDisplayed] = useState(false);\n const [showLoading, setShowLoading] = useState(false);\n const [historyTableRows, setHistoryTableRows] = useState<[] | JSX.Element[]>(\n [],\n );\n const [aiResponseDisplayed, setAiResponseDisplayed] = useState<\n AiSearchResponse | undefined\n >();\n const [activeTab, setActiveTab] = useState<string | null>('search');\n const [\n askQuestion,\n { isLoading: apiIsLoading, data: aiResponse, error: aiError },\n // This is the destructured mutation result\n ] = useAskQuestionMutation();\n\n const askAi = () => {\n if (!searchTerm) {\n return;\n }\n setSearchTermOnSubmit(searchTerm);\n\n //check if value has been searched for before\n if (aiSearchHistory[searchTerm]) {\n //if yes check if completed\n if (aiSearchHistory[searchTerm].result?.query) {\n //if yes return those results\n setAiResponseDisplayed(aiSearchHistory[searchTerm].result);\n setShowLoading(false);\n return;\n }\n //if no check time it was started and check if apiIsLoading\n if (\n apiIsLoading &&\n aiSearchHistory[searchTerm].loadingStarted < Date.now() + 60000\n ) {\n //wait longer\n return;\n }\n //otherwise do the api call again\n }\n\n //save search term\n setAiSearchHistory((searchHistory) => ({\n ...searchHistory,\n [searchTerm]: { loadingStarted: Date.now() },\n }));\n\n //make API Call\n setShowLoading(true);\n askQuestion({\n query: searchTerm,\n });\n //clear old data\n setAiResponseDisplayed(undefined);\n //display loading/results area\n setResultAreaDisplayed(true);\n };\n useEffect(() => {\n //when api returns data show to user and store\n if (!aiResponse?.query) {\n return;\n }\n //if response matches current ask set setAiResponseDisplayed\n if (aiResponse?.query === searchTermOnSubmit) {\n setAiResponseDisplayed(aiResponse);\n setShowLoading(false);\n }\n\n //update Search History\n setAiSearchHistory((searchHistory) => {\n const currentQuery = searchHistory[aiResponse.query];\n currentQuery.loadingEnded = Date.now();\n currentQuery.result = aiResponse;\n return { ...searchHistory };\n });\n }, [aiResponse, searchTermOnSubmit]);\n\n useEffect(() => {\n //on load read session storage\n setAiSearchHistory(\n JSON.parse(sessionStorage.getItem(uidForStorage) || '{}'),\n );\n }, [uidForStorage]);\n\n useEffect(() => {\n //when aiSearchHistory changes save to session storage\n if (aiSearchHistory) {\n sessionStorage.setItem(uidForStorage, JSON.stringify(aiSearchHistory));\n }\n }, [uidForStorage, aiSearchHistory]);\n\n useEffect(() => {\n //if error show to user\n if (aiError) {\n const errorStatus = (aiError as FetchBaseQueryError).status;\n switch (errorStatus) {\n case 401:\n setAiResponseDisplayed({\n topic: 'error',\n conversationId: 'error',\n documents: [],\n query: searchTermOnSubmit,\n response: 'Login required. Please login and try again',\n });\n break;\n case 403:\n setAiResponseDisplayed({\n topic: 'error',\n conversationId: 'error',\n documents: [],\n query: searchTermOnSubmit,\n response:\n 'You do not have permission to access AISearch. Please contact your administrator',\n });\n break;\n default:\n setAiResponseDisplayed({\n topic: 'error',\n conversationId: 'error',\n documents: [],\n query: searchTermOnSubmit,\n response: 'Something went wrong please refresh and try again',\n });\n }\n\n setShowLoading(false);\n }\n }, [aiError, searchTermOnSubmit]);\n\n const setCurrentSearch = useDeepCompareCallback(\n (searchTerm: string) => {\n //set search to item\n setAiResponseDisplayed(aiSearchHistory[searchTerm].result);\n setSearchTerm(searchTerm);\n setShowLoading(false);\n setResultAreaDisplayed(true);\n\n //change tab to search tab\n setActiveTab('search');\n },\n [aiSearchHistory],\n );\n\n const removeSearchHistory = (searchTerm: string) => {\n setAiSearchHistory((searchHistory) => {\n delete searchHistory[searchTerm];\n return { ...searchHistory };\n });\n };\n\n useEffect(() => {\n //update history table\n if (aiSearchHistory) {\n setHistoryTableRows(\n Object.keys(aiSearchHistory).map((searchTerm, index) => {\n const rowInfo = aiSearchHistory[searchTerm];\n return (\n <tr key={index}>\n <td>\n <button\n className=\"w-full text-left\"\n onClick={() => {\n setCurrentSearch(searchTerm);\n }}\n >\n {new Date(rowInfo.loadingStarted).toLocaleDateString()}\n </button>\n </td>\n <td>\n <button\n className=\"w-full text-left\"\n onClick={() => {\n setCurrentSearch(searchTerm);\n }}\n >\n {searchTerm}\n </button>\n </td>\n <td className=\"text-right\">\n <Tooltip\n label=\"Delete\"\n position=\"bottom\"\n withArrow\n arrowSize={6}\n >\n <button\n className=\"text-red-600 hover:text-white hover:bg-red-600\"\n onClick={() => {\n removeSearchHistory(searchTerm);\n }}\n >\n <PiTrash aria-label=\"Delete\" />\n </button>\n </Tooltip>\n </td>\n </tr>\n );\n }),\n );\n }\n }, [aiSearchHistory, setCurrentSearch]);\n\n return (\n <Tabs\n color=\"orange.8\"\n className=\"w-full\"\n classNames={{\n tab: 'data-[active=true]:font-bold !text-[16px]',\n }}\n value={activeTab}\n onChange={setActiveTab}\n >\n <Tabs.List>\n <Tooltip\n label=\"AI is a powerful tool, but we cannot guarantee the accuracy of any responses. Feel free to copy and paste perceived dataset names or descriptions from the AI response into the real search bar to try and find any datasets the AI is referring to.\"\n position=\"bottom\"\n withArrow\n arrowSize={6}\n multiline\n w={300}\n >\n <Tabs.Tab\n value=\"search\"\n rightSection={\n <MdInfo className=\"text-[#C7501A]\" aria-label=\"info icon\" />\n }\n >\n Ask AI About Available Data\n </Tabs.Tab>\n </Tooltip>\n <Tooltip\n label=\"Your history is only saved temporarily on this device.\"\n position=\"bottom\"\n withArrow\n arrowSize={6}\n multiline\n w={300}\n >\n <Tabs.Tab\n value=\"history\"\n rightSection={\n <MdInfo className=\"text-[#C7501A]\" aria-label=\"info icon\" />\n }\n >\n Search History\n </Tabs.Tab>\n </Tooltip>\n </Tabs.List>\n\n <Tabs.Panel value=\"search\" pt=\"xs\">\n <div className=\"relative\">\n <TextInput\n placeholder={placeholder || 'Search...'}\n value={searchTerm}\n onChange={(event) => {\n setSearchTerm(event.target.value);\n }}\n onKeyUp={(e) => e.key === 'Enter' && askAi()}\n classNames={{\n root: '',\n input: `!pr-[250px] ${resultAreaDisplayed && '!rounded-b-none !border-blue-600 !border-b-0'}`,\n }}\n size=\"lg\"\n />\n <div className=\"absolute right-0 top-0 flex items-center\">\n {searchTerm.length > 0 && (\n <UnstyledButton\n className=\"!bg-gray-100 inline-flex text-[#525252] !p-1 rounded-full mr-2\"\n onClick={() => {\n setSearchTerm('');\n setSearchTermOnSubmit('');\n if (showLoading) {\n setResultAreaDisplayed(false);\n setShowLoading(false);\n }\n }}\n >\n Clear <CloseIcon aria-hidden />\n </UnstyledButton>\n )}\n <Button\n color=\"blue.8\"\n type=\"submit\"\n className=\"m-1\"\n size=\"md\"\n leftSection={<PiSparkleFill aria-hidden />}\n onClick={askAi}\n >\n Ask AI\n </Button>\n </div>\n </div>\n <div aria-live=\"polite\">\n {resultAreaDisplayed && (\n <div className=\"border border-blue-600 rounded-b bg-gray-100 py-6\">\n {showLoading ? (\n <div className=\"text-center\">\n <Loader color=\"orange.8\" className=\"inline-block mb-4\" />\n <div>\n AI response is loading. If you&apos;d like to cancel this\n search, press the &quot;Clear&quot; button.\n </div>\n </div>\n ) : (\n <div className=\"px-4\">\n <Title order={5} className=\"pb-2\">\n AI Response\n </Title>\n <div className=\"border-l-2 border-blue-600 pl-4 py-1\">\n {/** TODO interpret code and add expand */}\n {aiResponseDisplayed?.response ? (\n <Markdown\n remarkPlugins={[remarkGfm]}\n components={{\n // define some formatting for the ai response\n p(props: any) {\n const { node, ...rest } = props;\n return (\n <p\n className=\"text-lg text-primary-contrast my-1\"\n {...rest}\n />\n );\n },\n ol(props: any) {\n const { node, ...rest } = props;\n return (\n <ol\n className=\"list-disc list-inside my-1\"\n {...rest}\n />\n );\n },\n ul(props: any) {\n const { node, ...rest } = props;\n return (\n <ul\n className=\"list-disc list-inside my-1\"\n {...rest}\n />\n );\n },\n li(props: any) {\n const { node, ...rest } = props;\n return <li className=\"text-md\" {...rest} />;\n },\n }}\n >\n {aiResponseDisplayed?.response}\n </Markdown>\n ) : (\n 'Something went wrong please refresh and try again'\n )}\n </div>\n <Divider my=\"sm\" />\n <Title order={5} className=\"pb-2\">\n Referenced Sources\n </Title>\n {aiResponseDisplayed?.documents &&\n aiResponseDisplayed.documents.length > 0 ? (\n <ul className=\"border-l-2 border-blue-600 pl-4 py-1\">\n {aiResponseDisplayed?.documents.map(\n (\n document: AiSearchResponse['documents'][0],\n i: number,\n ) => {\n return (\n <li\n key={i}\n className=\"inline-block after:content-[','] pr-2 last:after:content-none\"\n >\n {document.metadata.source}\n </li>\n );\n },\n )}\n </ul>\n ) : (\n <div className=\"border-l-2 border-blue-600 pl-4 py-1\">\n No referenced sources available.\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </Tabs.Panel>\n\n <Tabs.Panel value=\"history\" pt=\"xs\">\n {historyTableRows.length > 0 ? (\n <Table highlightOnHover>\n <thead>\n <tr>\n <th className=\"w-24\">Date</th>\n <th>Search Input</th>\n <th className=\"w-32\">Clear History</th>\n </tr>\n </thead>\n <tbody>{historyTableRows}</tbody>\n </Table>\n ) : (\n <Title order={5} className=\"p-2\">\n No search history at this time\n </Title>\n )}\n </Tabs.Panel>\n </Tabs>\n );\n};\n\nexport default AiSearch;\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport type { NavPageLayoutProps } from '../../features/Navigation';\nimport AiSearch from '../../features/Discovery/Search/AiSearch';\n\nconst AISearchPage = ({\n headerProps,\n footerProps,\n}: NavPageLayoutProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 AI Search Page',\n content: 'AI Search',\n key: 'gen3-ai-search-page',\n }}\n >\n <div className=\"p-5 w-full\">\n <AiSearch />\n </div>\n </NavPageLayout>\n );\n};\n\nexport default AISearchPage;\n","import { ContentSourceInterface } from './types';\nimport fs from 'fs';\nimport path from 'path';\n\nconst myGlob = (dir: string, filter: string) => {\n try {\n const files = fs.readdirSync(dir);\n return files.filter((file) => file.search(filter) !== -1);\n } catch (error: any) {\n console.log('myGlob error', error, dir);\n }\n return [];\n};\n\nexport class FilesystemContent implements ContentSourceInterface {\n rootPath: string;\n constructor({ rootPath }: { rootPath?: string }) {\n this.rootPath = rootPath || '';\n }\n\n public async get<T extends Record<string, any>>(\n filepath: string,\n ): Promise<T> {\n try {\n return await JSON.parse(\n fs.readFileSync(path.join(this.rootPath, filepath)).toString('utf8'),\n );\n } catch (err: unknown) {\n throw new Error(`Cannot process ${path.join(this.rootPath, filepath)} `);\n }\n }\n public async getAll<T extends Record<string, any>>(\n filepath: string,\n filter: string,\n ): Promise<Array<T>> {\n try {\n const files = myGlob(path.join(this.rootPath, filepath), filter);\n return Promise.all(\n files.map((file) => this.get<T>(path.join(filepath, file))),\n );\n } catch (_err: unknown) {\n throw new Error(\n `getAllCannot process ${path.join(this.rootPath, filepath)}/${filter}`,\n );\n }\n }\n}\n","import { ContentSourceInterface } from './types';\n\n/**\n * The Content management \"datastore\" which is an abstracted interface to\n * some persistent storage of content needed for Gen3's content management system\n */\n\nexport interface CreateDatabase {\n store: ContentSourceInterface;\n}\n\nexport class ContentDatabase {\n public store: ContentSourceInterface;\n\n constructor(public config: CreateDatabase) {\n this.store = config.store;\n }\n\n public async get<T extends Record<string, any>>(\n filepath: string,\n ): Promise<T> {\n return this.store.get(filepath);\n }\n\n public async getAll<T extends Record<string, any>>(\n filepath: string,\n filter: string,\n ): Promise<Array<T>> {\n // Array<Promise<T>>\n return this.store.getAll(filepath, filter);\n }\n}\n","export const GEN3_FRONTEND_CONFIGURATION_ROOT =\n process.env.GEN3_FRONTEND_CONFIGURATION_ROOT || './config/';\n","import { FilesystemContent } from './filesystem';\nimport { ContentDatabase } from './ContentDatabase';\nimport { GEN3_FRONTEND_CONFIGURATION_ROOT } from './constants';\n\nexport class ContentSource {\n private static instance: ContentSource | null = null;\n private contentDatabase: ContentDatabase;\n\n private constructor() {\n const config = {\n store: new FilesystemContent({\n rootPath: GEN3_FRONTEND_CONFIGURATION_ROOT,\n }),\n };\n this.contentDatabase = new ContentDatabase(config);\n }\n\n public static getInstance(): ContentSource {\n if (!ContentSource.instance) {\n ContentSource.instance = new ContentSource();\n }\n return ContentSource.instance;\n }\n\n // Add methods to access the ContentDatabase functionality\n // For example:\n public getContentDatabase(): ContentDatabase {\n return this.contentDatabase;\n }\n\n // ✅ Compatibility helper: allow `ContentSource.getContentDatabase()`\n public static getContentDatabase(): ContentDatabase {\n return ContentSource.getInstance().getContentDatabase();\n }\n}\n\n// Export a singleton instance\nexport default ContentSource.getInstance();\n","import {\n type BannerProps,\n type FooterProps,\n type HeaderMetadata,\n type HeaderProps,\n isHeaderMetadata,\n type NavigationProps,\n type NavPageLayoutProps,\n type TopBarProps,\n} from '../../features/Navigation';\nimport ContentSource from '../content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\n/**\n * Retrieves navigation page layout properties from configuration.\n * Note: GEN3_COMMONS_NAME depends on siteConfig.json value in the data commons package\n * @returns A Promise resolving to an object containing header and footer props.\n */\nexport const getNavPageLayoutPropsFromConfig =\n async (): Promise<NavPageLayoutProps> => {\n let navigationConfigJSON: HeaderProps = {\n topBar: { items: [] },\n navigation: {\n items: [\n {\n name: 'Site navigation is not configured',\n icon: '',\n tooltip: '',\n href: '',\n },\n ],\n },\n type: 'original',\n };\n\n try {\n navigationConfigJSON = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/navigation.json`,\n );\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(error.message);\n } else {\n console.error(\n `Error occurred while getting navigation configuration: ${GEN3_COMMONS_NAME}/navigation.json`,\n );\n }\n }\n\n const bannerConfigJSON: Array<BannerProps> = [];\n // TODO: enable later\n // try {\n // bannerConfigJSON = await ContentSource.getContentDatabase().get(\n // `${GEN3_COMMONS_NAME}/banner.json`,\n // );\n // } catch (error: unknown) {\n // console.warn(\n // 'No banner config found at: ',\n // `${GEN3_COMMONS_NAME}/banner.json`,\n // );\n // }\n const { topBar, navigation, type = 'original' } = navigationConfigJSON;\n\n let headerMetadata: HeaderMetadata = {\n title: 'Gen3 Frontend Framework Page',\n content: 'Gen3 Frontend Framework Page',\n key: 'gen3-common-page',\n };\n\n try {\n const loadedHeaderMetadata = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/headerMetadata.json`,\n );\n\n if (isHeaderMetadata(loadedHeaderMetadata)) {\n headerMetadata = loadedHeaderMetadata;\n } else {\n console.warn('headerMetadata is not a valid HeaderMetadata object');\n }\n } catch (error: unknown) {\n console.warn(\n 'No headerMetadata config found at: ',\n `${GEN3_COMMONS_NAME}/headerMetadata.json`,\n );\n }\n\n const headerProps: HeaderProps = {\n topBar: topBar as unknown as TopBarProps,\n navigation: navigation as unknown as NavigationProps,\n banners: bannerConfigJSON,\n type,\n };\n\n let footerProps: FooterProps = {};\n try {\n footerProps = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/footer.json`,\n );\n } catch (error: unknown) {\n if (error instanceof Error) {\n console.error(error.message);\n } else {\n console.error(\n `Error occurred while getting footer configuration: ${GEN3_COMMONS_NAME}/footer.json`,\n );\n }\n }\n\n return {\n headerProps,\n footerProps,\n headerMetadata,\n };\n };\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport type { NavPageLayoutProps } from '../../features/Navigation';\n\nexport const AISearchPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n try {\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n headerProps: {\n topBar: {\n items: [],\n },\n navigation: {},\n },\n footerProps: {},\n headerMetadata: {\n title: 'Gen3 AI Search Page',\n content: 'AI Search',\n key: 'gen3-ai-search-page',\n },\n },\n };\n }\n};\n","import React, { ReactElement } from 'react';\nimport { Spoiler } from '@mantine/core';\nimport {\n MdKeyboardArrowDown as DownArrowIcon,\n MdKeyboardArrowUp as UpArrowIcon,\n} from 'react-icons/md';\n\ninterface TextDescriptionProps {\n description: string;\n}\n\nconst TextDescription = ({\n description,\n}: TextDescriptionProps): ReactElement => {\n return (\n <Spoiler\n classNames={{ control: 'text-sm font-semibold' }}\n maxHeight={80}\n showLabel={\n <span>\n Extend Text <DownArrowIcon className=\"inline\" />\n </span>\n }\n hideLabel={\n <span>\n Collapse Text <UpArrowIcon className=\"inline\" />\n </span>\n }\n >\n {description}\n </Spoiler>\n );\n};\nexport default TextDescription;\n","import React from 'react';\nimport { Image, NavLink, Stack } from '@mantine/core';\nimport TextDescription from './TextDescription';\nimport Link from 'next/link';\nimport { AnalysisToolConfiguration } from './types';\nimport NextImage from 'next/image';\n\nconst AnalysisCard: React.FC<AnalysisToolConfiguration> = ({\n title,\n description,\n type,\n icon,\n image,\n hasDemo,\n loginRequired,\n href,\n demoHref,\n btnText,\n}) => {\n return (\n <Stack\n key={title}\n align=\"stretch\"\n justify=\"space-between\"\n className=\"rounded-sm rounded-t-md bg-base-max p-0 h-full\"\n >\n <div className=\"relative h-4/5\">\n <div className=\"p-0 h-max-1/3 h-1/3 flex justify-center items-start relative overflow-hidden\">\n <Image\n src={`${image}`}\n alt={''}\n w=\"auto\"\n classNames={{\n root: 'rounded-tl-lg rounded-tr-lg',\n }}\n />\n </div>\n <div className=\"flex -mt-5 relative z-10\">\n <div className=\"p-0.5 bg-base-lightest ml-5 border-2 border-base h-1/6 w-1/6 max-h-24 max-w-24\">\n <Image\n component={NextImage}\n src={`${icon}`}\n alt=\"\"\n width={40}\n height={40}\n radius=\"lg\"\n />\n </div>\n <div className=\"relative mb-0 ml-2\">\n <span className=\"absolute bottom-0 left-0 text-sm font-normal text-gray-700 w-max capitalize\">\n {type}\n </span>\n </div>\n </div>\n <div className=\"flex flex-col mt-2 ml-2\">\n <div className=\"w-full justify-start text-base-contrast-max sm:text-lg md:text-xl lg:text-2xl font-bold leading-6\">\n {title}\n </div>\n <div className=\"text-xs text-gray-400 h-6\">\n {loginRequired ? 'Login Required' : ' '}\n </div>\n <div className=\"sm:text-xs text-sm font-normal p-2\">\n <TextDescription description={description} />\n </div>\n </div>\n </div>\n <div className=\"m-auto\">\n <div className=\"flex mb-4 rounded-b-md mx-4 flex-nowrap justify-between gap-x-2\">\n <NavLink\n component={Link}\n href={href ?? '_blank'}\n classNames={{\n root: 'bg-accent text-accent-contrast text-nowrap text-center hover:bg-accent-darker p-2 rounded',\n label: 'text-sm font-semibold px-2',\n }}\n label={\n btnText\n ? btnText\n : `Run ${type === 'application' ? 'App' : 'Notebook'}`\n }\n />\n {hasDemo && (\n <NavLink\n component={Link}\n href={demoHref ?? '_blank'}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n classNames={{\n root: 'bg-accent text-accent-contrast text-nowrap text-center hover:bg-accent-darker p-2 rounded',\n label: 'text-sm font-semibold px-2',\n }}\n label=\"Demo\"\n />\n )}\n </div>\n </div>\n </Stack>\n );\n};\n\nexport default AnalysisCard;\n","import React, { ReactElement, useState } from 'react';\nimport { AnalysisCenterConfiguration } from './types';\nimport { Select, TextInput } from '@mantine/core';\nimport AnalysisCard from './AnalysisCard';\n\nconst AnalysisCenter = ({\n tools,\n showFilterAndSort = false,\n}: AnalysisCenterConfiguration): ReactElement => {\n const [cards, setCards] = useState({\n type: '' as string,\n access: '' as string,\n search: '',\n });\n\n const handleCardsFilter = (\n filterType: 'type' | 'access',\n selected: string | null,\n ) => {\n if (!selected?.length) return;\n setCards((c) => ({\n ...c,\n [filterType]: selected,\n }));\n };\n\n const handleCardsSearch = (keyword: string) => {\n if (!keyword.length) return;\n };\n\n return (\n <div className=\"w-full bg-base-light p-4\">\n {showFilterAndSort ? (\n <div className=\"flex justify-between items-center w-7/8 mt-2 mx-2\">\n {/* // todo: for both dropdowns add downwards orange carrot */}\n <div className=\"flex space-x-4\">\n <Select\n // todo: data opts\n data={[]}\n value={cards.type}\n comboboxProps={{\n transitionProps: {\n transition: 'pop-top-left',\n duration: 50,\n timingFunction: 'ease',\n },\n }}\n placeholder=\"Filter by type\"\n onChange={(value) => handleCardsFilter('type', value)}\n />\n <Select\n // todo: data opts\n data={[]}\n value={cards.access}\n comboboxProps={{\n transitionProps: {\n transition: 'pop-top-left',\n duration: 50,\n timingFunction: 'ease',\n },\n }}\n placeholder=\"Filter by access\"\n onChange={(value) => handleCardsFilter('access', value)}\n />\n </div>\n <div>\n {/* // todo: increase width of this */}\n <TextInput\n placeholder=\"Search in Analysis Center\"\n value={cards.search}\n size=\"md\"\n onChange={(event) => handleCardsSearch(event.currentTarget.value)}\n />\n </div>\n </div>\n ) : null}\n <div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6 p-1 mx-4 overflow-y-auto\">\n {tools.map(\n (\n {\n title,\n description,\n type,\n icon,\n image,\n hasDemo,\n loginRequired,\n href,\n btnText,\n demoHref,\n },\n key,\n ) => {\n return (\n <AnalysisCard\n key={title}\n {...{\n title,\n description,\n type,\n icon,\n image,\n hasDemo,\n loginRequired,\n href,\n cardType: 'regular',\n btnText,\n demoHref,\n }}\n />\n );\n },\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default AnalysisCenter;\n","import React from 'react';\nimport AnalysisCenter from './AnalysisCenter';\nimport { AnalysisCenterConfiguration } from './types';\n\nconst AnalysisPanel: React.FC<AnalysisCenterConfiguration> = ({ tools }) => {\n return <AnalysisCenter tools={tools} />;\n};\n\nexport default AnalysisPanel;\n","import React from \"react\";\nimport { Grid, Text, Image } from \"@mantine/core\";\nimport {\n MdPlayArrow as PlayIcon,\n} from \"react-icons/md\";\nimport Link from \"next/link\";\nimport NextImage from \"next/image\";\nimport { AnalysisToolConfiguration } from \"./types\";\n\nconst CoreToolCard: React.FC<AnalysisToolConfiguration> = ({\n title,\n description,\n icon,\n href,\n appId,\n}) => {\n return (\n <Link\n href={{\n pathname: href,\n query: {\n app: appId,\n },\n }}\n className=\"group\"\n >\n <Grid\n classNames={{\n root: \"h-full\",\n inner:\n \"border-secondary-darkest border h-full w-full m-0 rounded-md p-0\",\n }}\n >\n <Grid.Col span={2} className=\"self-center relative\">\n <Image\n component={NextImage}\n src={`${icon}`}\n alt={`${title} logo`}\n w={48}\n h={48}\n width={48}\n height={48}\n />\n </Grid.Col>\n <Grid.Col span={8} className=\"text-base-content-darkest\">\n <Text size=\"sm\" className=\"font-heading font-bold\">\n {title}\n </Text>\n <Text size=\"xs\" className=\"font-content leading-5\">\n {description}\n </Text>\n </Grid.Col>\n <Grid.Col span={2} className=\"flex justify-end p-0 m-0\">\n <div className=\"bg-secondary w-12 h-full p-0 group-hover:bg-secondary-darker group-focus:bg-secondary-darker rounded-none rounded-r flex justify-center items-center\">\n <PlayIcon size={30} color=\"white\" />\n </div>\n </Grid.Col>\n </Grid>\n </Link>\n );\n};\n\nexport default CoreToolCard;\n","import React from 'react';\nimport { Button, Card, Divider, Image, Loader, Tooltip } from '@mantine/core';\nimport { useElementSize } from '@mantine/hooks';\nimport {\n MdArrowDropDown as ArrowDropDownIcon,\n MdInfo as InfoIcon,\n MdKeyboardArrowUp as UpArrowIcon,\n MdPlayArrow as PlayIcon,\n} from 'react-icons/md';\nimport Link from 'next/link';\nimport NextImage from 'next/image';\nimport { AnalysisToolConfiguration } from './types';\n\ntype AnalysisCardCollapsibleProps = AnalysisToolConfiguration & {\n readonly descriptionVisible: boolean;\n readonly setDescriptionVisible: () => void;\n readonly useCountHook: () => {\n data: number;\n isSuccess: boolean;\n isFetching: boolean;\n };\n};\n\nconst AnalysisCardCollapsible: React.FC<AnalysisCardCollapsibleProps> = ({\n descriptionVisible,\n setDescriptionVisible,\n title,\n description,\n icon,\n appId,\n href,\n useCountHook,\n hasDemo,\n noDataTooltip,\n hideCounts,\n}) => {\n const cohortCounts = useCountHook();\n const caseCounts = cohortCounts?.data || 0;\n\n const inactive = caseCounts === 0 || cohortCounts.isFetching;\n const { ref: descRef, height: descHeight } = useElementSize();\n\n return (\n <Card\n data-testid={`${title}-tool`}\n p={6}\n className={`bg-base-max border-secondary-darkest overflow-visible border ${\n inactive ? '' : 'border-t-6'\n }\n `}\n aria-label={`${title} Tool`}\n >\n {/* Spacer so that the cards are the same height without setting an explicit height for the later transition */}\n {inactive && <div className=\"h-1\" />}\n <div className=\"flex justify-between mb-1\">\n <Image\n component={NextImage}\n src={`${icon}`}\n alt={`${title} logo`}\n width={48}\n height={48}\n w={48}\n h={48}\n />\n <div className=\"flex flex-col\">\n <Link\n href={{\n pathname: href,\n query: {\n app: appId,\n },\n }}\n data-testid={`button-${title}`}\n className={`\n flex\n justify-center\n items-center\n bg-secondary\n hover:bg-secondary-dark\n hover:border-secondary-dark\n focus:bg-secondary-dark\n focus:border-secondary-dark\n mb-1\n w-[50px]\n ${inactive ? 'opacity-50 pointer-events-none' : ''}\n rounded\n h-5\n `}\n aria-disabled={inactive}\n aria-label={title}\n >\n <PlayIcon size={16} color=\"white\" />\n </Link>\n\n {hasDemo ? (\n <Link\n href={{\n pathname: href,\n query: {\n app: appId,\n demoMode: true,\n },\n }}\n data-testid={`button-${title} Demo`}\n className={`\n flex\n justify-center\n items-center\n hover:bg-secondary-dark\n hover:border-secondary-dark\n hover:text-primary-content-max\n focus:bg-secondary-dark\n focus:border-secondary-dark\n focus:text-primary-content-max\n mb-1\n w-[50px]\n rounded\n h-5\n text-xs\n text-secondary\n p-0\n border\n border-secondary\n font-semibold\n `}\n >\n Demo\n </Link>\n ) : null}\n </div>\n </div>\n <Divider variant=\"dotted\" aria-hidden=\"true\" color=\"accent.4\" />\n <div className=\"flex flex-col items-center text-xs\">\n <Button\n data-testid=\"select-description-tool\"\n onClick={() => setDescriptionVisible()}\n variant=\"white\"\n size=\"xs\"\n rightSection={\n descriptionVisible ? (\n <UpArrowIcon size={16} aria-hidden=\"true\" />\n ) : (\n <ArrowDropDownIcon size={16} aria-hidden=\"true\" />\n )\n }\n classNames={{\n root: 'text-secondary-darkest font-bold bg-transparent',\n section: 'ml-0',\n }}\n aria-expanded={descriptionVisible}\n >\n {title}\n </Button>\n <div\n data-testid=\"text-description-tool\"\n style={{ height: descriptionVisible ? descHeight : 0 }}\n className=\"transition-[height] duration-300 bg-accent-lightest overflow-hidden w-full mb-1\"\n aria-hidden={!descriptionVisible}\n >\n <div\n className={`${\n descriptionVisible ? 'opacity-100' : 'opacity-0'\n } transition-opacity`}\n ref={descRef}\n >\n <p className=\"p-2 font-content\">{description}</p>\n </div>\n </div>\n {hideCounts ? (\n <div className=\"h-4\" />\n ) : cohortCounts ? (\n <div\n data-testid=\"text-case-count-tool\"\n className=\"flex items-center text-secondary-darkest\"\n >\n {cohortCounts.isFetching ? (\n <span className=\"flex mr-2 items-center\">\n <Loader color=\"gray\" size=\"xs\" className=\"mr-2\" /> Cases\n </span>\n ) : cohortCounts.isSuccess ? (\n <span>{`${caseCounts.toLocaleString()} Cases`}</span>\n ) : (\n <span className=\"flex mr-2 items-center text-utility-error\">\n 0 Cases\n </span>\n )}\n {caseCounts === 0 && (\n <Tooltip label={noDataTooltip} withArrow w={200} multiline>\n <div>\n <InfoIcon className=\"inline-block ml-1\" />\n </div>\n </Tooltip>\n )}\n </div>\n ) : (\n <span>\n <Loader color=\"gray\" size=\"xs\" className=\"mr-2\" />\n </span>\n )}\n </div>\n </Card>\n );\n};\n\nexport default AnalysisCardCollapsible;\n","import React, { ReactElement, useMemo, useState } from 'react';\nimport { Divider, Stack, Text } from '@mantine/core';\nimport { AnalysisCenterWithSectionsConfiguration } from './types';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\nimport AnaylsisCardCore from './AnalysisCardCore';\nimport AnalysisCardCollapsible from './AnalysisCardCollapsible';\n\n/**\n * AnalysisPanelWithSections component.\n *\n * This React functional component renders a panel that organizes tools into sections. Each section\n * includes a title, a divider, and a grid of tool cards. The component supports customizable styling\n * for global and section-specific classNames.\n *\n * @type {React.FC<AnalysisCenterWithSectionsConfiguration>}\n *\n * @param {Object} props - The component properties.\n * @param {Array} props.sections - The array of sections to display in the panel. Each section includes\n * a label, an optional classNames object for custom styling, and an array of tools.\n * @param {Object} [props.classNames] - An optional object of global classNames used for styling\n * components within the panel. These can be overridden on a per-section basis.\n *\n * @returns {ReactElement} A React element that renders the analysis panel with sections.\n */\nconst AnalysisCenterWithSections: React.FC<\n AnalysisCenterWithSectionsConfiguration\n> = ({ sections, classNames }): ReactElement => {\n const rootClassNamesDefaults = {\n title: 'font-header font-bold text-2xl uppercase mt-2',\n divider: 'text-accent w-[70px] border-accent mb-4',\n };\n const mergedGlobalClassnames = mergeDefaultTailwindClassnames(\n rootClassNamesDefaults,\n classNames ?? {},\n );\n\n const [activeAnalysisCard, setActiveAnalysisCard] = useState<string | null>(\n null,\n );\n\n const sectionPanels = useMemo(\n () =>\n sections.map((section, section_idx) => {\n const sectionClassnames = mergeDefaultTailwindClassnames(\n mergedGlobalClassnames,\n section.classNames ?? {},\n );\n\n return (\n <Stack key={section.label} gap=\"xs\">\n <Text\n color=\"primary.4\"\n classNames={{ root: sectionClassnames['title'] }}\n >\n {section.label}\n </Text>\n <Divider\n size=\"lg\"\n classNames={{ root: sectionClassnames['divider'] }}\n />\n <div className=\"flex flex-wrap gap-4 items-stretch\">\n {section.tools.map((tool, idx) => {\n if (section.core) {\n\n return (\n <div key={tool.title} className=\"w-1/4\">\n <AnaylsisCardCore {...tool} key={tool.title} />\n </div>\n )\n } else {\n return (\n <div key={tool.title} className=\"max-w-[12em]\">\n <AnalysisCardCollapsible\n {...tool}\n descriptionVisible={activeAnalysisCard === `${section_idx}-${idx}`}\n setDescriptionVisible={() =>\n setActiveAnalysisCard(\n `${section_idx}-${idx}` === activeAnalysisCard\n ? null\n : `${section_idx}-${idx}`,\n )\n }\n useCountHook={() => ({\n data: 1000,\n isFetching: false,\n isSuccess: true,\n })}\n />\n </div>\n );\n }\n })}\n</div>\n </Stack>\n );\n }),\n [sections, activeAnalysisCard, mergedGlobalClassnames],\n );\n\n return <Stack gap=\"xl\">{sectionPanels}</Stack>;\n};\nexport default AnalysisCenterWithSections;\n","import React, { ReactElement, ReactNode } from 'react';\nimport { Card, Group } from '@mantine/core';\n\ninterface CardContainerProps {\n children: ReactNode;\n width?: string;\n}\n\nconst CardContainer: React.FunctionComponent<CardContainerProps> = ({\n children,\n width = 'w-1/2',\n}: CardContainerProps): ReactElement => (\n <div className={`flex justify-center pt-2 items-center m-2 ${width ?? ''}`}>\n <Card\n shadow=\"xs\"\n p=\"md\"\n className=\"bg-base-lightest border-2 border-base-lighter\"\n >\n <Group align=\"center\" wrap=\"nowrap\">\n {children}\n </Group>\n </Card>\n </div>\n);\n\nexport default CardContainer;\n","import React, { ReactElement } from 'react';\nimport { Text, ThemeIcon } from '@mantine/core';\nimport CardContainer from './CardContainer';\n\nexport interface MessageTextProps {\n message: string;\n}\n\ninterface MessageTextColorProps extends MessageTextProps {\n color: string;\n}\n\nconst MessageText: React.FunctionComponent<MessageTextColorProps> = ({\n message,\n color,\n}: MessageTextColorProps): ReactElement => (\n <Text c={color} size=\"md\" fw={500}>\n {message}\n </Text>\n);\n\ninterface MessageCardProps {\n message: string;\n icon?: ReactElement;\n color?: string;\n size?: string | number;\n width?: string;\n}\n\nconst MessageCard: React.FunctionComponent<MessageCardProps> = ({\n message,\n icon,\n size = 'lg',\n color = 'utility.5',\n width = 'w-1/2',\n}: MessageCardProps): ReactElement => (\n <CardContainer width={width}>\n <ThemeIcon color={color} variant=\"outline\" radius=\"xl\" size={size}>\n {icon}\n </ThemeIcon>\n <MessageText message={message} color={color} />{' '}\n </CardContainer>\n);\n\nexport default MessageCard;\n","import React, { ReactElement } from 'react';\nimport { BsExclamationTriangle as IconAlertTriangle } from 'react-icons/bs';\nimport MessageCard, { type MessageTextProps } from './MessageCard';\n\nconst ErrorCard: React.FunctionComponent<MessageTextProps> = ({\n message,\n}: MessageTextProps): ReactElement => (\n <MessageCard\n message={message}\n icon={<IconAlertTriangle size={24} />}\n color=\"utility.3\"\n />\n);\n\nexport default ErrorCard;\n","import React from 'react';\n\ninterface MessagePageProps {\n children: React.ReactNode;\n}\nconst MessagePage = ({ children }: MessagePageProps) => {\n // place children in center of div that is 1/2 the visible height\n return (\n <div className=\"flex justify-center items-center w-full h-vh\">\n {children}\n </div>\n );\n};\n\nexport default MessagePage;\n","import React from 'react';\nimport { Center } from '@mantine/core';\nimport { NavPageLayout } from '../../features/Navigation';\nimport AnalysisPanel from '../../features/Analysis/AnalysisPanel';\nimport AnalysisCenterWithSections from '../../features/Analysis/AnalysisCenterWithSections';\nimport { AnalysisPageLayoutProps } from './types';\nimport { ErrorCard } from '../../components/MessageCards';\n\nconst AnalysisPage = ({\n headerProps,\n footerProps,\n tools,\n sections,\n classNames,\n}: AnalysisPageLayoutProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Analysis Center',\n content: 'Analysis Center',\n key: 'gen3-analysis-center',\n }}\n >\n {!tools && !sections && (\n <Center className=\"mt-20\">\n <ErrorCard message=\"No tools or sections found\" />\n </Center>\n )}\n {tools && <AnalysisPanel tools={tools} />}\n {sections && (\n <AnalysisCenterWithSections\n sections={sections}\n classNames={classNames}\n />\n )}\n </NavPageLayout>\n );\n};\n\nexport default AnalysisPage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { AnalysisPageLayoutProps } from './types';\nimport {\n AnalysisCenterConfiguration,\n AnalysisCenterWithSectionsConfiguration,\n} from '../../features/Analysis/types';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nexport const AnalysisPageGetServerSideProps: GetServerSideProps<\n AnalysisPageLayoutProps\n> = async () => {\n try {\n const analysisConfig:\n | AnalysisCenterConfiguration\n | AnalysisCenterWithSectionsConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/analysisTools.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n ...analysisConfig,\n },\n };\n } catch (err) {\n console.warn(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n },\n };\n }\n};\n","import React from 'react';\nimport { MRT_Icons } from 'mantine-react-table';\nimport {\n TiArrowUnsorted as Unsorted,\n TiArrowSortedDown as SortDsc,\n TiArrowSortedUp as SortAsc,\n} from 'react-icons/ti';\n\nimport { FiMoreVertical as ColumnMenu } from 'react-icons/fi';\n\nexport const TableIcons: Partial<MRT_Icons> = {\n IconArrowsSort: (props: any) => (\n <Unsorted {...props} className=\"text-accent\" />\n ),\n IconSortAscending: (props: any) => (\n <SortAsc {...props} className=\"text-accent\" />\n ),\n IconSortDescending: (props: any) => (\n <SortDsc {...props} className=\"text-accent\" />\n ),\n IconDotsVertical: (props: any) => (\n <ColumnMenu {...props} className=\"text-accent\" />\n ),\n};\n","import { MantineReactTable, useMantineReactTable } from 'mantine-react-table';\nimport { CrosswalkMapping } from './types';\nimport React, { useMemo } from 'react';\nimport { Text } from '@mantine/core';\nimport { TableIcons } from '../../components/Tables/TableIcons';\n\ninterface CrosswalkTableProps {\n mapping: CrosswalkMapping;\n data: Array<any>;\n isFetching: boolean;\n isSuccess: boolean;\n isError: boolean;\n tableMessage: string;\n showSubmittedIdInTable: boolean;\n}\n\nconst CrosswalkTable = ({\n mapping,\n data,\n isFetching,\n isError,\n tableMessage,\n showSubmittedIdInTable,\n}: CrosswalkTableProps) => {\n const cols = useMemo(() => {\n return [\n ...(showSubmittedIdInTable\n ? [\n {\n accessorKey: 'from',\n header: mapping.source.label,\n },\n ]\n : []),\n\n ...mapping.external.map((columnDef, idx) => {\n return {\n accessorKey: `to.${mapping.external[idx].id}`,\n header: columnDef.label,\n };\n }),\n ];\n }, []);\n\n const table = useMantineReactTable({\n columns: cols as any[],\n data: data,\n manualSorting: false,\n manualPagination: false,\n paginateExpandedRows: false,\n rowCount: data.length,\n enableTopToolbar: false,\n icons: TableIcons,\n enableStickyHeader: true,\n state: {\n isLoading: isFetching,\n showProgressBars: isFetching,\n showAlertBanner: isError,\n columnVisibility: {\n 'mrt-row-expand': false,\n },\n },\n layoutMode: 'semantic',\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-table-3)',\n color: 'var(--mantine-color-table-9)',\n textAlign: 'center',\n padding: 'var(--mantine-spacing-md)',\n fontWeight: 600,\n fontSize: 'var(--mantine-font-size-sm)',\n textTransform: 'uppercase',\n },\n },\n // mantineTableContainerProps: ({ table }) => {\n // return {\n // sx: {\n // maxHeight: 'calc(100vh - 560px) !important;',\n // },\n // };\n // },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-1)',\n },\n },\n renderEmptyRowsFallback: () => {\n return (\n <div className=\"flex justify-center items-center content-center h-96 w-full\">\n <Text>{tableMessage}</Text>\n </div>\n );\n },\n });\n\n return (\n <div className=\"grow w-auto inline-block overflow-x-auto\">\n <MantineReactTable table={table} />\n </div>\n );\n};\n\nexport default CrosswalkTable;\n","import React, { useState, useEffect } from 'react';\nimport { Group, Stack, Button, Textarea, Tooltip } from '@mantine/core';\nimport { useClipboard } from '@mantine/hooks';\nimport { useLazyGetCrosswalkDataQuery, CrosswalkInfo } from '@gen3/core';\nimport { type CrosswalkConfig, CrosswalkMapping } from './types';\nimport CrosswalkTable from './CrosswalkTable';\n\nconst MIN_ROWS = 22;\n\n/**\n *\n */\nconst buildCSVData = (\n data: Array<CrosswalkInfo>,\n mapping: CrosswalkMapping,\n includeSourceId?: boolean,\n) => {\n const results = [\n // add the header\n includeSourceId\n ? `${mapping.source.label},${mapping.external\n .map((x) => x.label)\n .join(',')}`\n : mapping.external.map((x) => x.label).join(','),\n // add data\n ...data.map((x) => {\n const rest = mapping.external.map((columnDef) => x.to[columnDef.id]);\n return includeSourceId ? `${x.from},${rest.join(',')}` : rest.join(',');\n }),\n ].join('\\n');\n return results;\n};\n\nconst downloadData = (data: string) => {\n const csvData = encodeURI(`data:text/csv;charset=utf-8,${data}`);\n const link = document.createElement('a');\n link.href = csvData;\n link.download = 'crosswalk_data.csv';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\nconst CrosswalkPanel = ({\n mapping,\n showSubmittedIdInTable,\n idEntryPlaceholderText,\n}: CrosswalkConfig) => {\n const [query, setQuery] = useState<string>('');\n const [sourceIds, setSourceIds] = useState<string>('');\n const clipboard = useClipboard({ timeout: 500 });\n\n const [tableMessage, setTableMessage] = useState<string>('');\n\n const [getMapping, { data, isFetching, isError, isSuccess }] =\n useLazyGetCrosswalkDataQuery();\n\n const clear = () => {\n setSourceIds('');\n setQuery('');\n getMapping({\n ids: [],\n toPaths: mapping.external.map((x) => ({\n id: x.id,\n dataPath: x.dataPath,\n })),\n });\n };\n\n useEffect(() => {\n if (query.length == 0) {\n setTableMessage('No crosswalk ids submitted');\n return;\n }\n if (isError) {\n setTableMessage('Error returned from crosswalk service');\n }\n\n if (isSuccess && data && data.length == 0) {\n setTableMessage('No results found');\n }\n }, [query, isError, isSuccess, data?.length]);\n\n const onSubmit = () => {\n getMapping({\n ids: sourceIds.split(/,|\\r?\\n|\\r|\\n/g),\n toPaths: mapping.external.map((x) => ({\n id: x.id,\n dataPath: x.dataPath,\n })),\n });\n setQuery(sourceIds);\n };\n\n const updateIdQuery = (values: string) => {\n setSourceIds(values);\n };\n\n return (\n <Group\n wrap=\"nowrap\"\n className=\"w-full items-start justify-start bg-base-lightest\"\n align=\"stretch\"\n >\n <Stack align=\"stretch\" justify=\"flex-start\" className=\"p-2 w-1/4 h-full\">\n <Group wrap=\"nowrap\">\n <Tooltip label=\"Submit IDs to crosswalk service\">\n <Button\n size=\"md\"\n color=\"secondary.4\"\n disabled={sourceIds.length == 0}\n onClick={() => onSubmit()}\n >\n Submit\n </Button>\n </Tooltip>\n <Tooltip label=\"Clear all Ids\">\n <Button\n size=\"md\"\n color=\"secondary.4\"\n disabled={sourceIds.length == 0}\n onClick={() => clear()}\n >\n Clear\n </Button>\n </Tooltip>\n </Group>\n <Textarea\n placeholder={idEntryPlaceholderText}\n radius=\"md\"\n size=\"md\"\n required\n value={sourceIds}\n minRows={MIN_ROWS}\n onChange={(event) => updateIdQuery(event.currentTarget.value)}\n classNames={{\n root: 'h-full',\n wrapper: 'h-full',\n }}\n styles={{\n input: { height: '100%' },\n }}\n />\n </Stack>\n <Stack\n align=\"stretch\"\n justify=\"flex-start\"\n className=\"w-full p-2 border-0\"\n >\n <Group justify=\"flex-end\">\n <Tooltip label=\"Copy mapping to clipboard\">\n <Button\n variant=\"outline\"\n size=\"md\"\n color={clipboard.copied ? 'accent.4' : 'accent-warm.4'}\n onClick={() => {\n if (data)\n clipboard.copy(\n buildCSVData(data, mapping, showSubmittedIdInTable),\n );\n }}\n disabled={!data || data.length == 0}\n >\n Copy\n </Button>\n </Tooltip>\n <Tooltip label=\"Download mapping\">\n <Button\n variant=\"outline\"\n size=\"md\"\n onClick={() => {\n if (data)\n downloadData(\n buildCSVData(data, mapping, showSubmittedIdInTable),\n );\n }}\n disabled={!data || data.length == 0}\n >\n Download\n </Button>\n </Tooltip>\n </Group>\n <CrosswalkTable\n mapping={mapping}\n data={data ?? []}\n isFetching={isFetching}\n isSuccess={isSuccess}\n isError={isError}\n tableMessage={tableMessage}\n showSubmittedIdInTable={showSubmittedIdInTable ?? false}\n />\n </Stack>\n </Group>\n );\n};\n\nexport default CrosswalkPanel;\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { CrosswalkPanel } from '../../features/Crosswalk';\nimport { CrosswalkPageLayoutProps } from './types';\n\nconst CrosswalkPage = ({\n headerProps,\n footerProps,\n config,\n}: CrosswalkPageLayoutProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Crosswalk Page',\n content: 'Crosswalk Data',\n key: 'gen3-crosswalk-page',\n ...(config?.headerMetadata ? config.headerMetadata : {}),\n }}\n >\n <CrosswalkPanel {...config} />\n </NavPageLayout>\n );\n};\n\nexport default CrosswalkPage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport {\n type CrosswalkConfig,\n type CrosswalkName,\n} from '../../features/Crosswalk';\nimport { type NavPageLayoutProps } from '../../features/Navigation';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\ninterface InitialCrosswalkInfo extends CrosswalkName {\n dataPath: string;\n}\n\nexport interface InitialCrosswalkConfig\n extends Omit<CrosswalkConfig, 'mapping'> {\n mapping: {\n source: CrosswalkName;\n external: Array<InitialCrosswalkInfo>;\n };\n}\n\nexport const CrosswalkPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n try {\n const initialConfig: InitialCrosswalkConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/crosswalk.json`,\n );\n const regex = /->/g;\n const processedConfig = {\n showSubmittedIdInTable: initialConfig.showSubmittedIdInTable,\n idEntryPlaceholderText:\n initialConfig?.idEntryPlaceholderText ||\n 'Enter IDs, one per line.\\nExample:\\nD334343\\nC343433',\n mapping: {\n source: initialConfig.mapping.source,\n external: initialConfig.mapping.external.map((entry) => ({\n ...entry,\n dataPath: entry.dataPath\n .split(regex)\n .map((x) => JSON.stringify([x]))\n .join('.'), // To Support JSONPath when a key is a URL\n })),\n },\n };\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: processedConfig,\n },\n };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Unknown error in crosswalk config';\n console.error(errorMessage);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: undefined,\n },\n };\n }\n};\n","import {\n DictionaryCategory,\n MatchingSearchResult,\n DataDictionary,\n DictionaryEntry,\n DictionaryProperty,\n} from './types';\nimport { capitalize } from 'lodash';\n\nexport const categoryFilter = (id: string, dictionary: Record<string, any>) =>\n id.charAt(0) !== '_' &&\n id === dictionary[id].id &&\n dictionary[id].category &&\n dictionary[id].id &&\n dictionary[id].category?.toLowerCase() !== 'internal';\n\nexport const categoryReduce = (categories: any, dictionary: DataDictionary) => {\n return categories\n .map((id: string) => dictionary[id])\n .reduce((d: DictionaryCategory<any>, property: Record<string, string>) => {\n d[property.category] ??= [];\n d[property.category].push(property);\n return d;\n }, {}) as DictionaryCategory<any>;\n};\n\nexport const parseDictionaryNodes = (dictionary: DataDictionary) =>\n Object.keys(dictionary)\n .filter((id) => id.charAt(0) !== '_' && id === dictionary[id].id)\n .map((id) => {\n const originNode = dictionary[id];\n return originNode;\n })\n .filter((node) => node.category && node.id);\n\nexport const getPropertyCount = (\n categories: string[],\n dictionary: DataDictionary,\n) => {\n return categories\n .map((n) => Object.keys(dictionary[n].properties)?.length ?? {})\n .reduce((acc: any, curr: any) => acc + curr);\n};\n\n/**\n * Converts snake_case string to label format.\n *\n * @param {string} snakeCase - The snake_case string to convert.\n * @returns {string} - The resulting label format string.\n */\nexport const snakeCaseToLabel = (snakeCase?: string): string => {\n if (typeof snakeCase !== 'string' || !snakeCase) {\n return 'undefined';\n }\n const words = snakeCase.split('_').filter((word) => word.length > 0);\n return words\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n};\n\nexport const snakeSplit = (snake: string) => {\n return snake\n .split('_')\n .map((name) => capitalize(name))\n .join(' ');\n};\n\nexport const SearchPathToPropertyIdString = (item: MatchingSearchResult) =>\n `${item.node}-${item.category}-${item.property}`;\n\n/**\n * Function to convert PropertyId string to SearchPath\n *\n * @param {string} id - The PropertyId string in the format \"node-category-property\"\n * @returns {MatchingSearchResult} - The corresponding SearchPath object\n *\n * @typedef {object} MatchingSearchResult\n * @property {string} node - The node value extracted from the PropertyId string\n * @property {string} category - The category value extracted from the PropertyId string\n * @property {string} property - The property value extracted from the PropertyId string\n */\nexport const PropertyIdStringToSearchPath = (\n id: string,\n): MatchingSearchResult => {\n const [node, category, property] = id.split('-');\n return { node, category, property };\n};\n\n/**\n * Concatenate the node and category properties of a MatchingSearchResult object.\n *\n * @param {MatchingSearchResult} item - The item containing the node and category properties.\n * @returns {string} - The concatenated string of the node and category.\n */\nexport const toNodeCategory = (item: MatchingSearchResult): string =>\n `${item.node}-${item.category}`;\n\n/**\n * Filters out system properties from the given DataDictionary node.\n *\n * @param {DataDictionary} node - The DataDictionary node to filter properties from.\n * @returns {Object} - The filtered properties object.\n */\nexport const excludeSystemProperties = (\n node: DictionaryEntry,\n): Record<string, DictionaryProperty> => {\n const properties =\n node.properties &&\n Object.keys(node.properties)\n .filter((key) =>\n node.systemProperties ? !node.systemProperties.includes(key) : true,\n )\n .reduce((acc, key) => {\n if (!node.properties) return acc;\n acc[key] = node.properties[key];\n return acc;\n }, {} as Record<string, DictionaryProperty>);\n return properties ?? {};\n};\n\n/**\n * Returns a modified dictionary by excluding system properties from each node's properties.\n *\n * @param {Object} dictionary - The original data dictionary.\n * @returns {DictionaryEntry} - The modified data dictionary with system properties excluded.\n */\nexport const getDictionaryWithExcludeSystemProperties = (\n dictionary: DataDictionary,\n): Record<string, DictionaryEntry> => {\n const ret = Object.keys(dictionary)\n .map((nodeID) => {\n const node = dictionary[nodeID];\n if (!node.properties) return node;\n return {\n ...node,\n properties: excludeSystemProperties(node),\n };\n })\n .reduce((acc, node) => {\n if (!node?.id) return acc;\n acc[node.id] = node;\n return acc;\n }, {} as Record<string, DictionaryEntry>);\n return ret;\n};\n\nexport const removeUnusedFieldsFromDictionaryObject = (\n obj: Record<string, any>,\n) => {\n return Object.keys(obj).reduce((acc, key) => {\n if (categoryFilter(key, obj)) {\n acc[key] = obj[key];\n }\n return acc;\n }, {} as DataDictionary);\n};\n","import React from 'react';\nimport { ViewType } from './types';\n\nconst SelectedStyle = (selected: boolean): string => {\n return `${\n selected\n ? 'bg-primary text-primary-contrast'\n : 'bg-base-max text-base-contrast-max'\n } text-md py-2 px-10 first:rounded-tl-md first:rounded-bl-md last:rounded-tr-md last:rounded-br-md border-2 border-primary`;\n};\n\ninterface ViewSelectorProps {\n view: ViewType;\n setView: (_: ViewType) => void;\n}\nconst ViewSelector = ({ view, setView }: ViewSelectorProps) => {\n return (\n <div className=\"flex justify-center border-b-2 border-0 border-base-light py-10\">\n <button\n className={SelectedStyle(view === 'table')}\n onClick={() => setView('table')}\n >\n Table View\n </button>\n <button\n className={SelectedStyle(view === 'graph')}\n onClick={() => setView('graph')}\n >\n Graph View\n </button>\n </div>\n );\n};\n\nexport default ViewSelector;\n","import React from 'react';\nimport { UnstyledButton, Text, Highlight } from '@mantine/core';\nimport { MatchingSearchResult } from './types';\nimport { snakeSplit } from './utils';\n\ninterface ResultListProps {\n matches?: MatchingSearchResult[];\n term: string;\n expanded: boolean;\n selectItem: (_: MatchingSearchResult) => void;\n}\nconst ResultList = ({\n matches,\n term,\n expanded,\n selectItem,\n}: ResultListProps) => {\n return (\n <div>\n {matches?.length && (\n <div\n className={`flex flex-col border border-solid border-base-light rounded-t-sm ${\n matches.length < 4 || (!expanded && matches.length > 4)\n ? 'rounded-b-sm'\n : 'border-b-0'\n }`}\n >\n <div className=\"p-2 border-b-2 border-base-light text-md font-bold bg-primary-max text-primary-contrast-max rounded-t-sm\">\n {term}\n </div>\n {matches.map(\n (\n { node, category, property }: MatchingSearchResult,\n key: number,\n ) => {\n return (\n <div key={key} className=\"flex w-full p-0.5 pl-2 justify-start\">\n <UnstyledButton\n className=\"w-full py-1.5\"\n onClick={() => {\n selectItem({\n node,\n category,\n property,\n });\n }}\n >\n <Text size=\"sm\" truncate=\"end\" className=\"w-full\">\n <Highlight\n component=\"div\"\n highlight={term}\n truncate=\"end\"\n className=\"w-full hover:bg-accent-lighter hover:text-accent-contrast-lighter p-1\"\n >\n {`${snakeSplit(node)} > ${snakeSplit(\n category,\n )} > ${property}`}\n </Highlight>\n </Text>\n </UnstyledButton>\n </div>\n );\n },\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport default ResultList;\n","import React, { useState } from 'react';\nimport {\n MdKeyboardArrowDown as DownArrowIcon,\n MdKeyboardArrowUp as UpArrowIcon,\n} from 'react-icons/md';\nimport ResultList from './ResultList';\n\nimport { MatchingSearchResult } from './types';\n\nconst MAX_UNEXPANDED_ITEMS = 4;\n\ninterface ResultCardProps {\n term: string;\n matches?: MatchingSearchResult[];\n selectItem: (_: MatchingSearchResult) => void;\n}\n\nconst ResultCard = ({ term, matches, selectItem }: ResultCardProps) => {\n const [expanded, setExpanded] = useState(false);\n return (\n <div>\n {expanded ? (\n <ResultList\n key={term}\n matches={matches}\n term={term}\n expanded={expanded}\n selectItem={selectItem}\n />\n ) : (\n <ResultList\n key={term}\n matches={matches?.slice(0, MAX_UNEXPANDED_ITEMS)}\n term={term}\n expanded={expanded}\n selectItem={selectItem}\n />\n )}\n {matches && matches?.length > MAX_UNEXPANDED_ITEMS ? (\n <div className=\"flex w-full items-center border-2 border-solid border-base-light border-t-0 rounded-b-md\">\n {expanded ? (\n <button\n className=\"border-none py-1\"\n onClick={() => setExpanded(false)}\n >\n <div className=\"flex font-bold text-sm\">\n <UpArrowIcon size={20} />\n Show Less\n </div>\n </button>\n ) : (\n <button\n className=\"border-none py-1\"\n onClick={() => setExpanded(true)}\n >\n <div className=\"flex font-bold text-sm\">\n <DownArrowIcon size={20} />\n {matches.length - MAX_UNEXPANDED_ITEMS} More\n </div>\n </button>\n )}\n </div>\n ) : (\n <></>\n )}\n </div>\n );\n};\n\nexport default ResultCard;\n","export const MAX_SEARCH_HISTORY = 10;\nexport const KEY_FOR_SEARCH_HISTORY = 'dictionary-search';\nexport const ACCORDION_TRANSITION_DURATION = 0;\n","import React, { createContext, useMemo, useState, ReactNode } from 'react';\nimport {\n DictionaryProps,\n DictionaryEntry,\n DictionarySearchDocument,\n DataDictionary,\n} from './types';\nimport { JSONObject } from '@gen3/core';\nimport {\n categoryFilter,\n categoryReduce,\n getDictionaryWithExcludeSystemProperties,\n} from './utils';\nimport { KEY_FOR_SEARCH_HISTORY, MAX_SEARCH_HISTORY } from './constants';\n\ninterface DictionaryProviderValue extends DictionaryProps {\n setPropertyDetails: React.Dispatch<React.SetStateAction<JSONObject>>;\n propertyDetails: JSONObject;\n categories: any;\n documents: Array<DictionarySearchDocument>;\n visibleCategories: string[];\n dictionary: DataDictionary;\n}\n\nconst DictionaryContext = createContext<DictionaryProviderValue>({\n config: {\n showGraph: false,\n showDownloads: false,\n historyStorageId: KEY_FOR_SEARCH_HISTORY,\n maxHistoryItems: MAX_SEARCH_HISTORY,\n },\n dictionary: {},\n setPropertyDetails: () => null,\n propertyDetails: {} as JSONObject,\n categories: [],\n documents: [],\n visibleCategories: [],\n});\n\nconst useDictionaryContext = () => {\n const context = React.useContext(DictionaryContext);\n if (context === undefined) {\n throw Error(\n 'Discovery must be used must be used inside of a DiscoveryContext',\n );\n }\n return context;\n};\n\ninterface DictionaryProviderProps extends DictionaryProps {\n children: ReactNode;\n dictionary: DataDictionary;\n}\n\nconst DictionaryProvider = ({\n children,\n config,\n dictionary,\n}: DictionaryProviderProps) => {\n const [propertyDetails, setPropertyDetails] = useState<JSONObject>({});\n\n const processedDictionary =\n getDictionaryWithExcludeSystemProperties(dictionary);\n\n const categories = useMemo(() => {\n const filtered = Object.keys(processedDictionary);\n const displayedCategories = categoryReduce(filtered, processedDictionary);\n return displayedCategories;\n }, []);\n\n const visibleCategories = useMemo(\n () =>\n Object.keys(processedDictionary).filter((id) =>\n categoryFilter(id, processedDictionary),\n ),\n [processedDictionary],\n );\n\n const documents = useMemo<Array<DictionarySearchDocument>>(() => {\n if (Object.keys(categories).length === 0)\n return [] as Array<DictionarySearchDocument>;\n\n if (Object.keys(categories).length) {\n return (\n Object.keys(categories)\n .map((c) => {\n return categories[c];\n })\n .flatMap((array) => {\n return array.map((d: any) => {\n return Object.keys(d?.properties).map((key) => {\n const { description, type, term, anyOf } = d['properties'][key];\n return {\n rootCategory: d.category,\n category: d.id,\n id: `${d.category}-${d.id}-${key}`,\n property: key,\n description:\n description ??\n term?.description ??\n anyOf?.[1]?.properties?.id?.term?.description ??\n '',\n type: type ?? anyOf?.[0]?.type ?? '', // TODO add additional types\n };\n });\n });\n }) || []\n ).reduce((acc: DictionaryEntry[], curr: DictionaryEntry[]) => {\n return [...acc, ...curr];\n }, [] as Array<DictionarySearchDocument>);\n }\n }, []);\n\n return (\n <DictionaryContext.Provider\n value={{\n dictionary: processedDictionary,\n config,\n setPropertyDetails,\n propertyDetails,\n categories,\n documents,\n visibleCategories,\n }}\n >\n {children}\n </DictionaryContext.Provider>\n );\n};\nexport { useDictionaryContext, DictionaryProvider as default };\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Autocomplete, AutocompleteProps, Button, Group, Stack, } from '@mantine/core';\nimport { MdClose as CloseIcon, MdSearch as SearchIcon } from 'react-icons/md';\nimport ResultCard from './ResultCard';\nimport { useMiniSearch } from 'react-minisearch';\nimport MiniSearch from 'minisearch';\nimport { DictionarySearchDocument, MatchingSearchResult } from './types';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\nimport { useDictionaryContext } from './DictionaryProvider';\nimport { useLocalStorage } from '@mantine/hooks';\nimport { KEY_FOR_SEARCH_HISTORY, MAX_SEARCH_HISTORY } from './constants';\n\nconst getSearchResults = (\n searchResults: Array<DictionarySearchDocument>,\n): Array<MatchingSearchResult> => {\n const matches: Array<MatchingSearchResult> = [];\n searchResults.forEach((r) => {\n matches.push({\n node: r.rootCategory,\n category: r.category,\n property: r.property,\n });\n });\n return matches.sort((a, b) => {\n if (a.node < b.node) return -1;\n if (a.node > b.node) return 1;\n if (a.category < b.category) return -1;\n if (a.category > b.category) return 1;\n if (a.property < b.property) return -1;\n if (a.property > b.property) return 1;\n return 0;\n });\n};\n\ninterface SearchMatches {\n node: string;\n category: string;\n property: string;\n}\n\ninterface DictionarySearchHistoryObj {\n [key: string]: {\n matches?: SearchMatches[];\n term: string;\n datetime: string;\n };\n}\n\ninterface TableSearchProps {\n selectItem: (_: MatchingSearchResult) => void;\n}\n\nconst TableSearch = ({ selectItem }: TableSearchProps): ReactElement => {\n const { documents, config } = useDictionaryContext();\n const [dictionarySearchResults, setDictionarySearchResults] = useState(\n {} as any,\n );\n const [searchTerm, setSearchTerm] = useState('');\n const [dictionaryTableRows, setDictionaryTableRows] = useState<\n [] | ReactElement[]\n >([]);\n\n const [\n dictionarySearchHistory,\n setDictionarySearchHistory,\n removeDictionarySearchHistory,\n ] = useLocalStorage<DictionarySearchHistoryObj>({\n key: config?.historyStorageId ?? KEY_FOR_SEARCH_HISTORY,\n defaultValue: {},\n });\n\n const {\n search,\n autoSuggest,\n suggestions,\n searchResults,\n clearSearch,\n clearSuggestions,\n } = useMiniSearch(documents, {\n fields: ['description', 'type', 'property'],\n idField: 'id',\n storeFields: ['id'],\n searchOptions: {\n processTerm: MiniSearch.getDefault('processTerm'),\n },\n });\n\n useEffect(() => {\n if (searchTerm.length > 1) {\n search(searchTerm, { combineWith: 'AND' });\n autoSuggest(searchTerm);\n }\n }, [searchTerm, autoSuggest, search]);\n\n useEffect(() => {\n if (searchTerm === '') {\n setDictionarySearchResults({});\n clearSearch();\n clearSuggestions();\n }\n }, [clearSearch, clearSuggestions, searchTerm]);\n\n useEffect(() => {\n if (\n dictionarySearchResults?.term?.length &&\n !Object.keys(dictionarySearchHistory).includes(\n dictionarySearchResults?.term,\n ) &&\n dictionarySearchResults?.matches?.length\n ) {\n let searchHistoryArray = Object.entries(dictionarySearchHistory);\n searchHistoryArray.push([\n dictionarySearchResults?.term,\n {\n term: dictionarySearchResults.term,\n matches: dictionarySearchResults.matches,\n datetime: new Date().toLocaleString(),\n },\n ]);\n searchHistoryArray.sort(\n (a, b) => Date.parse(b[1].datetime) - Date.parse(a[1].datetime),\n );\n // Trim the array to the last 10 items\n searchHistoryArray = searchHistoryArray.slice(\n 0,\n config?.maxHistoryItems ?? MAX_SEARCH_HISTORY,\n );\n // Convert the array back to an object\n const newSearchHistory = Object.fromEntries(searchHistoryArray);\n setDictionarySearchHistory(newSearchHistory);\n }\n }, [\n config?.maxHistoryItems,\n dictionarySearchHistory,\n dictionarySearchResults,\n setDictionarySearchHistory,\n ]);\n\n useDeepCompareEffect(() => {\n if (dictionarySearchHistory) {\n setDictionaryTableRows(\n Object.keys(dictionarySearchHistory).map((d) => {\n return (\n <div key={`dictionary-table-row-${d}`} className=\"my-2\">\n <ResultCard\n term={d}\n matches={dictionarySearchHistory[d]?.matches}\n selectItem={selectItem}\n />\n </div>\n );\n }),\n );\n }\n }, [dictionarySearchHistory]);\n\n const suggestedData = useDeepCompareMemo(\n () =>\n (suggestions || [])?.map(({ suggestion }) => {\n return { value: suggestion };\n }),\n [suggestions],\n );\n\n const renderSuggestedItem: AutocompleteProps['renderOption'] = ({\n option,\n }) => {\n return (\n <div\n className={`h-inherit w-inherit hover:cursor-pointer hover:bg-gray-100 border-0 p-1 ${\n (suggestions || [])\n .map(({ suggestion }) => suggestion)\n .indexOf(option.value) !== 0 && 'border-t-0'\n }`}\n >\n <button\n className=\"border-0\"\n onClick={() => setSearchTerm(option.value)}\n >\n {option.value}\n </button>\n </div>\n );\n };\n\n return (\n <>\n <Stack justify=\"flex-start\" className=\"mt-2\">\n <Autocomplete\n // TODO: replace for v7\n data={suggestedData}\n renderOption={renderSuggestedItem}\n leftSection={<SearchIcon size={24} className=\"text-accent\" />}\n placeholder={'Search in Dictionary'}\n data-testid=\"dictionary-textbox-search-bar\"\n aria-label=\"Dictionary Search Input\"\n value={searchTerm}\n onChange={(value) => {\n setSearchTerm(value as string);\n }}\n onOptionSubmit={(item) => {\n setDictionarySearchResults({\n term: item,\n matches: getSearchResults(searchResults ?? []),\n });\n }}\n classNames={{\n input: 'focus:border-2 focus:border-primary text-sm',\n }}\n size=\"sm\"\n rightSection={\n searchTerm.length > 0 && (\n <CloseIcon\n onClick={() => {\n setSearchTerm('');\n clearSearch();\n clearSuggestions();\n }}\n className=\"cursor-pointer\"\n />\n )\n }\n />\n </Stack>\n\n <Stack justify=\"flex-start\" className=\"mt-2\">\n <span className=\"font-semibold text-sm \">Search Results</span>\n {dictionarySearchResults?.matches?.length > 0 ? (\n <ResultCard\n term={dictionarySearchResults?.term}\n matches={dictionarySearchResults?.matches}\n selectItem={selectItem}\n />\n ) : (\n <span className=\"text-xs items-center\">\n Try a different search query\n </span>\n )}\n </Stack>\n <Stack justify=\"flex-start\" gap=\"xs\" className=\"mt-1\">\n <Group justify=\"space-between\" align=\"center\">\n <span className=\"flex flex-col font-semibold text-sm\">\n Search History\n </span>\n <Button\n variant=\"outline\"\n color=\"accent.4\"\n radius=\"md\"\n onClick={() => removeDictionarySearchHistory()}\n >\n Clear All\n </Button>\n </Group>\n\n {dictionaryTableRows?.length ? (\n <React.Fragment>{dictionaryTableRows}</React.Fragment>\n ) : (\n <React.Fragment></React.Fragment>\n )}\n </Stack>\n </>\n );\n};\n\nexport default TableSearch;\n","import React, { forwardRef, ReactElement } from 'react';\nimport { snakeCaseToLabel } from './utils';\nimport { Avatar } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\n\nconst getIcon = (category: string) => {\n const iconName = `gen3:dictionary-icon-${category.replace('_', '-')}`;\n return (\n <Icon color=\"primary-contrast.4\" icon={iconName} height={24} width={24} />\n );\n};\n\ninterface CategoryHeaderProps {\n category: string;\n}\nconst CategoryHeader = ({ category }: CategoryHeaderProps) => {\n return (\n <h3\n className=\"flex text-secondary-contrast-darker font-bold font-size-md bg-secondary-darker mb-0 justify-between h-16 uppercase\"\n id={category}\n >\n <div className=\"flex items-center ml-4\">\n <Avatar\n variant=\"light\"\n size=\"sm\"\n color=\"accent.4\"\n radius=\"xl\"\n style={{ '--avatar-bg': 'var(--mantine-color-accent-0' }}\n >\n {getIcon(category)}\n </Avatar>\n <div className=\"ml-4\">{snakeCaseToLabel(category)}</div>\n </div>\n </h3>\n );\n};\n\nCategoryHeader.displayName = 'CategoryHeader';\n\nexport default CategoryHeader;\n","import React from 'react';\nimport { Group, Button, UnstyledButton, Text } from '@mantine/core';\n\ninterface CategoryLabelProps {\n label: string;\n description: string;\n}\n\nconst CategoryAccordionLabel = ({ label, description }: CategoryLabelProps) => {\n return (\n <Group\n wrap=\"nowrap\"\n className=\"odd:text-base-contrast-lightest even:bg-base-contrast-max\"\n >\n <Text className=\"min-w-40 max-w-40\" fw={600}>\n {label}\n </Text>\n <Text size=\"sm\" className=\"opacity-95\">\n {description}\n </Text>\n </Group>\n );\n};\n\nexport default CategoryAccordionLabel;\n","import React, { useMemo, useState } from 'react';\nimport { capitalize } from 'lodash';\nimport {\n MantineReactTable,\n MRT_Cell,\n MRT_Row,\n MRT_ColumnDef,\n useMantineReactTable,\n MRT_RowSelectionState,\n} from 'mantine-react-table';\nimport { DictionaryProperty } from './types';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { List } from '@mantine/core';\nimport { FaCircle as DiscIcon } from 'react-icons/fa';\n\ninterface PropertyTableRowData {\n property: string;\n type: string[];\n required: string;\n description: string;\n property_id: string;\n}\n\ninterface PropertiesTableProps {\n properties: Record<string, DictionaryProperty>;\n required?: string[];\n category: string;\n subCategory: string;\n selectedProperty: string;\n appendRef: (id: string, el: HTMLSpanElement | null) => void;\n}\n\nconst PropertiesTable = ({\n properties,\n required,\n category,\n subCategory,\n selectedProperty,\n appendRef,\n}: PropertiesTableProps) => {\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n\n useDeepCompareEffect(() => {\n if (selectedProperty) {\n setRowSelection({ [selectedProperty]: true });\n } else setRowSelection({});\n }, [selectedProperty]);\n\n const columns = useMemo<Array<MRT_ColumnDef<PropertyTableRowData>>>(() => {\n return [\n /** TODO: add line to match design\n {\n id: 'decorator',\n header: '',\n Cell: ({ cell, row }: { cell: MRT_Cell; row: MRT_Row }) => {\n return <LineCell />;\n },\n },\n */\n {\n accessorKey: 'property',\n header: 'Property',\n size: 75,\n Cell: ({\n cell,\n row,\n }: {\n cell: MRT_Cell<PropertyTableRowData>;\n row: MRT_Row<PropertyTableRowData>;\n }) => {\n const itemId = `${category}-${subCategory}-${row.original.property_id}`;\n return (\n <span ref={(el) => appendRef(itemId, el)} id={itemId}>\n {cell.getValue<string>()}\n </span>\n );\n },\n },\n {\n accessorKey: 'type',\n header: 'Type',\n size: 90,\n Cell: ({\n cell,\n row,\n }: {\n cell: MRT_Cell<PropertyTableRowData>;\n row: MRT_Row<PropertyTableRowData>;\n }) => {\n return (\n <List\n size=\"sm\"\n spacing=\"xs\"\n center\n classNames={{\n itemWrapper: 'flex items-center',\n }}\n icon={<DiscIcon size=\"0.5rem\" />}\n id={`${category}-${subCategory}-${row.original.property_id}-list`}\n >\n {cell.getValue<string[]>().map((type, index) => (\n <List.Item key={`${row.original.property_id}-${type}-${index}`}>\n {type}\n </List.Item>\n ))}\n </List>\n );\n },\n },\n {\n accessorKey: 'required',\n header: 'Required',\n size: 60,\n },\n {\n accessorKey: 'description',\n header: 'Description',\n },\n ];\n }, []);\n\n const tableData = useMemo(() => {\n const keys = properties ? Object.keys(properties ?? {}) : [];\n return keys.length\n ? keys.map((k) => {\n if (!properties || !Object.keys(properties).includes(k))\n return {\n property: '',\n type: [],\n required: 'No',\n description: '',\n property_id: k,\n } as PropertyTableRowData;\n const row = properties[k];\n return {\n property_id: k,\n property: k\n .split('_')\n .map((name) => capitalize(name))\n .join(' '),\n type: Object.keys(row).includes('anyOf')\n ? row.anyOf?.map(({ type }) => type)\n : Object.keys(row).includes('oneOf')\n ? row.oneOf?.map(({ type }) => type)\n : Object.keys(row).includes('enum')\n ? row.enum\n : [row.type],\n required: required?.includes(k) ? 'Required' : 'No',\n description:\n row?.description ?? row?.term?.description ?? 'No Description',\n } as PropertyTableRowData;\n })\n : ([] as PropertyTableRowData[]);\n }, []);\n const table = useMantineReactTable<PropertyTableRowData>({\n columns,\n data: tableData,\n enablePagination: false,\n enableBottomToolbar: false,\n enableTopToolbar: false,\n enableRowSelection: false,\n getRowId: (originalRow: PropertyTableRowData) => originalRow.property_id,\n mantineTableBodyRowProps: ({ row }) => {\n // highlights the left border of the selected row in the table\n if (Object.keys(rowSelection).includes(row.original.property_id))\n return {\n style: {\n borderLeftWidth: '8px',\n borderLeftColor: 'var(--mantine-color-accent-5)',\n },\n };\n else return {};\n },\n state: { rowSelection },\n mantineTableHeadRowProps: {\n style: {\n '--mrt-base-background-color': 'var(--mantine-color-accent-cool-3)',\n },\n },\n mantineTableHeadCellProps: {\n style: {\n color: 'var(--mantine-color-accent-contrast-cool-3)',\n },\n },\n // mantineTableProps: {\n // style: {\n // borderSpacing: '0rem 0rem',\n // borderCollapse: 'separate',\n // tableLayout: 'fixed',\n // },\n // },\n });\n\n return <MantineReactTable table={table} />;\n};\n\nexport default React.memo(PropertiesTable);\n","import React, { useEffect, useRef, useState, MutableRefObject } from 'react';\nimport CategoryHeader from './CategoryHeader';\nimport { Accordion, Button, Group } from '@mantine/core';\nimport CategoryAccordionLabel from './CategoryAccordionLabel';\nimport PropertiesTable from './PropertiesTable';\nimport { useDictionaryContext } from './DictionaryProvider';\nimport { DictionaryCategory } from './types';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { MdDownload as DownloadIcon } from 'react-icons/md';\nimport { ACCORDION_TRANSITION_DURATION } from './constants';\nimport { PropertyIdStringToSearchPath, toNodeCategory } from './utils';\n\ninterface CategoryPanel {\n category: string;\n selectedId: string;\n scrollToSelection: (ref: HTMLSpanElement) => void;\n}\n\nconst CategoryPanel = ({\n category,\n selectedId,\n scrollToSelection,\n}: CategoryPanel) => {\n const { dictionary, categories, config } = useDictionaryContext();\n const categoryInfo: Array<DictionaryCategory<string>> = categories[category];\n const [value, setValue] = useState<string | null>(selectedId);\n // const { scrollIntoView, targetRef, } =\n // useScrollIntoView<HTMLSpanElement>({\n // offset: 60,\n // });\n const selectedItems = PropertyIdStringToSearchPath(selectedId);\n const itemRefs = useRef<Record<string, HTMLSpanElement | null>>({});\n\n const appendRef = (id: string, el: HTMLSpanElement | null) => {\n itemRefs.current[id] = el;\n };\n\n // set up a timeout to give the ref time to be rendered in it's final position withing the\n // page.\n useEffect(() => {\n const scrollToItem = (id: string) => {\n if (!itemRefs.current || itemRefs.current[id] == null) return;\n const elm = itemRefs.current[id];\n if (elm !== null) {\n scrollToSelection(elm);\n }\n };\n\n if (\n value !== null &&\n value == toNodeCategory(selectedItems) &&\n selectedItems.property.length > 0\n ) {\n const timer = setTimeout(() => {\n scrollToItem(selectedId);\n }, 5); // Adjust the delay based on your accordion animation duration\n return () => clearTimeout(timer);\n }\n }, [scrollToSelection, selectedId, selectedItems, value]);\n\n useDeepCompareEffect(() => {\n if (category == selectedItems.node)\n // set value only if this is the same root category\n setValue(`${selectedItems.node}-${selectedItems.category}`);\n else setValue(null);\n }, [selectedItems]);\n\n return (\n <div className=\"mt-2\" key={`dictionary-entry-${category}`}>\n <CategoryHeader category={category} />\n <Accordion\n chevronPosition=\"left\"\n value={value}\n onChange={setValue}\n variant=\"contained\"\n transitionDuration={ACCORDION_TRANSITION_DURATION}\n styles={{\n chevron: {\n transform: 'rotate(-90deg)',\n '&[dataRotate]': {\n transform: 'rotate(0deg)',\n },\n },\n }}\n >\n {categoryInfo.map(({ title, description, id }) => {\n return (\n <Accordion.Item\n value={`${category}-${id}`}\n key={`${category}-${id}`}\n className=\"odd:bg-base-lightest even:bg-base-max\"\n >\n <Group\n wrap=\"nowrap\"\n className={\n `${category}-${id}` === value\n ? 'border-accent border-l-4'\n : ''\n }\n >\n <Accordion.Control>\n <CategoryAccordionLabel\n label={title}\n description={description}\n />\n </Accordion.Control>\n {config?.showDownloads ? (\n <Group wrap=\"nowrap\" className=\"ml-auto\">\n <Button leftSection={<DownloadIcon />}>TSV</Button>\n <Button leftSection={<DownloadIcon />}>JSON</Button>\n </Group>\n ) : null}\n </Group>\n <Accordion.Panel>\n <div className=\"ml-2\">\n <div className=\"flex flex-col mt-2\">\n <PropertiesTable\n properties={dictionary[id].properties ?? {}}\n required={dictionary[id].required}\n category={category}\n subCategory={id}\n selectedProperty={selectedItems.property}\n appendRef={appendRef}\n />\n </div>\n </div>\n </Accordion.Panel>\n </Accordion.Item>\n );\n })}\n </Accordion>\n </div>\n );\n};\n\nexport default React.memo(CategoryPanel, (prevProps, nextProps) => {\n const selectedItems = PropertyIdStringToSearchPath(nextProps.selectedId);\n // only rerender when selectedItem is for this panel's\n // category and it has changed.\n return (\n prevProps.category === nextProps.category &&\n selectedItems.node === prevProps.category &&\n prevProps.selectedId === nextProps.selectedId &&\n prevProps.scrollToSelection === nextProps.scrollToSelection\n );\n});\n","import type { CSSProperties } from 'react';\nimport React, { useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport type { ECharts, EChartsOption, SetOptionOpts } from 'echarts';\nimport { getInstanceByDom, init } from 'echarts';\nimport { useResizeObserver } from '@mantine/hooks';\n\nexport interface ReactEChartsProps {\n option: EChartsOption;\n style?: CSSProperties;\n settings?: SetOptionOpts;\n loading?: boolean;\n theme?: 'light' | 'dark' | 'gen3';\n events?: { [key: string]: (e: any) => void };\n}\n\nconst ReactECharts = ({\n option,\n style,\n settings,\n loading,\n theme = 'gen3',\n events,\n}: ReactEChartsProps): JSX.Element => {\n const [chartRoot, setChartRoot] = useState<ECharts | undefined>(undefined);\n const [chartRef, rect] = useResizeObserver();\n useDeepCompareEffect(() => {\n // Initialize chart\n let chart: ECharts | undefined;\n if (chartRoot === undefined && chartRef.current !== null) {\n chart = init(chartRef.current, theme);\n }\n setChartRoot(chart);\n }, [theme]);\n\n useDeepCompareEffect(() => {\n // Update chart if theme, options, or settings change\n if (chartRef.current !== null) {\n const chart = getInstanceByDom(chartRef.current);\n chart?.setOption(option, settings);\n }\n }, [option, settings, theme]);\n\n useDeepCompareEffect(() => {\n // Update chart\n if (chartRef.current !== null) {\n const chart = getInstanceByDom(chartRef.current);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n loading === true ? chart?.showLoading() : chart?.hideLoading();\n\n // Bind events\n if (events) {\n Object.keys(events).forEach((eventName) => {\n chart?.off(eventName);\n chart?.on(eventName, events[eventName]);\n });\n }\n }\n }, [loading]);\n\n useDeepCompareEffect(() => {\n if (chartRoot && rect.height && rect.width) {\n chartRoot.resize();\n }\n }, [rect]);\n\n return (\n <div\n role=\"figure\"\n aria-label=\"Data Chart\"\n ref={chartRef}\n style={{ width: '100%', height: '100%', ...style }}\n />\n );\n};\n\nexport default ReactECharts;\n","\n\ninterface linkProps {\n name: string;\n target_type: string;\n subgroup?: Array<any>;\n target?: any;\n}\ninterface nodeLinkListProps extends linkProps {\n source: nodeExtendedProps, \n target: nodeExtendedProps, \n exists: number;\n}\ninterface nodeProps {\n id: string;\n title: string;\n type: string;\n category: string;\n links?: Array<linkProps>;\n}\ninterface nodeExtendedProps extends nodeProps {\n name: string;\n count: number;\n}\n\ninterface nodeExtendedPropsLinksRequiered extends nodeExtendedProps {\n links: Array<linkProps>;\n}\ninterface createNodesAndEdgesProps {\n dictionary: {\n [key: string]: nodeProps;\n };\n counts_search?: { [key: string]: number };\n links_search?: { [key: string]: number };\n}\n\ninterface nameEdgesInProps {\n [key: string]: nodeLinkListProps[];\n}\ninterface nodesByIdProps {\n [key: string]: nodeExtendedProps;\n}\n\n/**\n * Get subgroup links from link\n * @param {object} link - array of links\n * @param {object} nameToNode - key (node name) value (node object) map\n * @param {string} sourceId - source id for subgroup links\n * This function traverse links recursively and return all nested subgroup lnks\n */\nconst getSubgroupLinks = (link: nodeLinkListProps, nameToNode: {\n [key: string]: nodeProps;\n}, sourceId: string) => {\n let subgroupLinks: nodeLinkListProps[] = [];\n if (link.subgroup) {\n link.subgroup.forEach((sgLink) => {\n if (sgLink.subgroup) {\n subgroupLinks = subgroupLinks.concat(getSubgroupLinks(sgLink, nameToNode, sourceId));\n } else {\n subgroupLinks.push({\n source: nameToNode[sourceId],\n target: nameToNode[sgLink.target_type],\n exists: 1,\n ...sgLink,\n });\n }\n });\n }\n return subgroupLinks;\n};\n\n\n/**\n * Given a data dictionary that defines a set of nodes\n * and edges, returns the nodes and edges in correct format\n *\n * @method createNodesAndEdges\n * @param props: Object (normally taken from redux state) that includes dictionary\n * property defining the dictionary as well as other optional properties\n * such as counts_search and links_search (created by getCounts) with\n * information about the number of each type (node) and link (between\n * nodes with a link's source and target types) that actually\n * exist in the data\n * @param createAll: Include all nodes and edges or only those that are populated in\n * counts_search and links_search\n * @param nodesToHide: Array of nodes to hide from graph\n * @returns { nodes, edges } Object containing nodes and edges\n */\nexport function createNodesAndEdges(props: createNodesAndEdgesProps, createAll: boolean, nodesToHide = ['program']) {\n const { dictionary } = props;\n const nodes = Object.keys(dictionary).filter(\n (key) => !key.startsWith('_') && dictionary[key].type === 'object'\n && dictionary[key].category !== 'internal' && !nodesToHide.includes(key),\n ).map(\n (key) => {\n let count = 0;\n if (props.counts_search) {\n count = props.counts_search[`_${key}_count`];\n }\n return {\n name: dictionary[key].title,\n count,\n ...dictionary[key],\n };\n },\n ).filter(\n (node) => createAll || node.count !== 0,\n );\n\n const nameToNode = nodes.reduce((db: createNodesAndEdgesProps['dictionary'], node) => { db[node.id] = node; return db; }, {});\n\n const hideDb = nodesToHide.reduce((db: {[key: string]: boolean}, name) => { db[name] = true; return db; }, {});\n\n const edges = nodes.filter((node): node is nodeExtendedPropsLinksRequiered => node.links !== undefined && node.links.length > 0)\n .reduce( // add each node's links to the edge list\n (list: nodeLinkListProps[], node) => {\n const newLinks = node.links.map(\n (link) => ({\n source: node, target: nameToNode[link.target_type], exists: 1, ...link,\n }),\n );\n return list.concat(newLinks);\n }, [])\n .reduce( // add link subgroups to the edge list\n (list: nodeLinkListProps[], link) => {\n let result = list;\n if (link.target) { // \"subgroup\" link entries in dictionary are not links themselves ...\n result.push(link);\n }\n if (link.subgroup) {\n const sgLinks = getSubgroupLinks(link, nameToNode, link.source.id);\n result = result.concat(sgLinks);\n }\n return result;\n }, [])\n .filter(\n // target type exist and is not in hide list\n (link) => (link.target && link.target.id in nameToNode && !(link.target.id in hideDb)))\n .map(\n (link) => {\n // decorate each link with its \"exists\" count if available\n // (number of instances of link between source and target types in the data)\n const res = link;\n res.exists = props.links_search\n ? props.links_search[`${res.source.id}_${res.name}_to_${res.target.id}_link`]\n : 0;\n return res;\n })\n .filter(\n // filter out if no instances of this link exists and createAll is not specified\n (link) => createAll || link.exists || link.exists === undefined,\n );\n return {\n nodes,\n edges,\n };\n};\n\n/**\n * Find the root of the given graph (no edges out)\n * @method findRoot\n * @param nodes\n * @param edges\n * @return {string} rootName or null if no root\n */\nexport function findRoot(nodes: nodeExtendedProps[], edges: nodeLinkListProps[]) {\n const couldBeRoot = edges.reduce(\n (db, edge) => {\n // At some point the d3 force layout converts\n // edge.source and edge.target into node references ...\n const sourceName = typeof edge.source === 'object' ? edge.source.id : edge.source;\n if (db[sourceName]) {\n db[sourceName] = false;\n }\n return db;\n },\n // initialize emptyDb - any node could be the root\n nodes.reduce((emptyDb: {[key: string]: boolean}, node) => { \n const res = emptyDb; \n res[node.id] = true; \n return res; \n }, {}),\n );\n const rootNode = nodes.find((n) => couldBeRoot[n.id]);\n return rootNode ? rootNode.id : null;\n}\n\n/**\n * Recursive helper function for getTreeHierarchy\n * Returns the hierarchy of the tree in the form of a map\n * Each (key, value) consists of (node, node's descendants including the node itself)\n * @method getTreeHierarchyHelper\n * @param root\n * @param name2EdgesIn\n * @param hierarchy\n * @return {map}\n */\nfunction getTreeHierarchyHelper(node: string, name2EdgesIn: nameEdgesInProps, hierarchy: Map<any, any>) {\n const descendants = new Set();\n descendants.add(node);\n hierarchy.set(node, descendants);\n name2EdgesIn[node].forEach((edge) => {\n const sourceName = typeof edge.source === 'object' ? edge.source.id : edge.source;\n if (!hierarchy.get(sourceName)) { // don't want to visit node again\n hierarchy = getTreeHierarchyHelper(sourceName, name2EdgesIn, hierarchy);\n descendants.add(sourceName);\n hierarchy.get(sourceName).forEach((n: any) => {\n descendants.add(n);\n });\n }\n });\n hierarchy.set(node, descendants);\n return hierarchy;\n}\n\n/**\n * Returns the hierarchy of the tree in the form of a map\n * Each (key, value) consists of (node, node's descendants including the node itself)\n * @method getTreeHierarchy\n * @param root\n * @param name2EdgesIn\n * @return {map}\n */\nexport function getTreeHierarchy(root: string, name2EdgesIn: nameEdgesInProps) {\n return getTreeHierarchyHelper(root, name2EdgesIn, new Map());\n}\n\n/**\n * Arrange nodes in dictionary graph breadth first, and build level database.\n * If a node links to multiple parents, then place it under the highest parent ...\n * Exported for testing.\n *\n * @param {Array} nodes\n * @param {Array} edges\n * @return { nodesBreadthFirst, treeLevel2Names, name2Level } where\n * nodesBreadthFirst is array of node names, and\n * treeLevel2Names is an array of arrays of node names,\n * and name2Level is a mapping of node name to level\n */\nexport function nodesBreadthFirst(nodes: nodeExtendedProps[], edges: nodeLinkListProps[]) {\n const result: {\n bfOrder: string[],\n treeLevel2Names: Array<string[]>,\n name2Level: {[key: string]: number},\n } = {\n bfOrder: [],\n treeLevel2Names: [],\n name2Level: {},\n };\n\n // mapping of node name to edges that point into that node\n const name2EdgesIn = edges.reduce(\n (db: nameEdgesInProps, edge: nodeLinkListProps) => {\n // At some point the d3 force layout converts edge.source\n // and edge.target into node references ...\n const targetName = typeof edge.target === 'object' ? edge.target.id : edge.target;\n if (db[targetName]) {\n db[targetName].push(edge);\n } else {\n console.error(`Edge points to unknown node: ${targetName}`);\n }\n return db;\n },\n // initialize emptyDb - include nodes that have no incoming edges (leaves)\n nodes.reduce((emptyDb: {[key: string]: []}, node: nodeExtendedProps) => { \n const res = emptyDb; \n res[node.id] = []; \n return res; \n }, {}),\n );\n\n // root node has no edges coming out of it, just edges coming in\n const root = findRoot(nodes, edges);\n if (!root) {\n console.log('Could not find root of given graph');\n return result;\n }\n\n const processedNodes = new Set(); // account for nodes that link to multiple other nodes\n let queue = [];\n queue.push({ query: root, level: 0 });\n\n // just 2b safe - could be user gives us a graph without a 'project'\n if (!name2EdgesIn[root]) {\n name2EdgesIn[root] = [];\n }\n\n const name2ActualLvl: {[key: string]: number} = {};\n const hierarchy = getTreeHierarchy(root, name2EdgesIn);\n // Run through this once to determine the actual level of each node\n for (let head = 0; head < queue.length; head += 1) {\n const { query, level } = queue[head]; // breadth first\n // set to topmost level if multiple\n if (name2ActualLvl[query] === undefined) {\n name2ActualLvl[query] = level;\n }\n name2EdgesIn[query].forEach((edge) => {\n // At some point the d3 force layout converts edge.source\n // and edge.target into node references ...\n const sourceName = typeof edge.source === 'object' ? edge.source.id : edge.source;\n if (name2EdgesIn[sourceName]) {\n const isAncestor = hierarchy.get(sourceName).has(query);\n // only push node if it is not an ancestor of the current node, or else --> cycle\n if (!isAncestor) {\n queue.push({ query: sourceName, level: level + 1 });\n }\n } else {\n console.log(`Edge comes from unknown node ${sourceName}`);\n }\n },\n );\n }\n\n // Reset and run for real\n queue = [];\n queue.push({ query: root, level: 0 });\n\n // queue.shift is O(n), so just keep pushing, and move the head\n for (let head = 0; head < queue.length; head += 1) {\n const { query, level } = queue[head]; // breadth first\n result.bfOrder.push(query);\n processedNodes.add(query);\n if (result.treeLevel2Names.length <= level) {\n result.treeLevel2Names.push([]);\n }\n result.treeLevel2Names[level].push(query);\n result.name2Level[query] = level;\n name2EdgesIn[query].forEach(\n (edge) => {\n // At some point the d3 force layout converts edge.source\n // and edge.target into node references ...\n const sourceName = typeof edge.source === 'object' ? edge.source.id : edge.source;\n if (name2EdgesIn[sourceName]) {\n if (!processedNodes.has(sourceName) && name2ActualLvl[sourceName] === (level + 1)) {\n //\n // edge source has not yet been processed via another link from the source\n // to a node higher in the graph\n //\n processedNodes.add(sourceName); // don't double-queue a node\n queue.push({ query: sourceName, level: level + 1 });\n }\n } else {\n console.log(`Edge comes from unknown node ${sourceName}`);\n }\n },\n );\n }\n return result;\n}\n\n\nconst placeNodesOnGraph = (treeLevel2Names: string[][], nodesById: nodesByIdProps)=> {\n let currentX = 0;\n let currentY = 0;\n const xSpacing = 200;\n const ySpacing = 100;\n\n const positions: {\n id: string;\n name: string; \n x: number; \n y: number \n }[] = [];\n\n treeLevel2Names.forEach((level) => {\n // find longest name in level\n const longestName = level.reduce((longest, id) => { \n const nameLength = nodesById[id].name.length; \n return nameLength > longest ? nameLength : longest; \n }, 0);\n level.forEach((id) => {\n positions.push({\n id: id,\n name: nodesById[id].name,\n x: currentX,\n y: currentY,\n });\n currentY += ySpacing;\n });\n currentY = 0;\n currentX += (longestName * 30) + xSpacing;\n });\n\n return positions;\n};\n\nconst linksForGraph = (edges: nodeLinkListProps[])=> {\n return edges.map((edge) => {\n return {\n source: edge.source.id,\n target: edge.target.id,\n };\n });\n};\n\n//TODO posably get this from somewhere else\n // object of nodes by ID for easy lookup\nconst getNodesById = (nodes: nodeExtendedProps[]) => {\n return nodes.reduce((db: nodesByIdProps, node: nodeExtendedProps) => { \n db[node.id] = node; \n return db; \n }, {});\n};\n\nexport const formatDataForGraph = (categories: any) => {\n //TODO cash all this unchanging data\n const { nodes, edges } = createNodesAndEdges({\n dictionary: categories,\n }, true, []);\n const nodeTree = nodesBreadthFirst(nodes, edges);\n console.log('nodes edges', nodes, edges);\n console.log('nodesBreadthFirst', nodeTree);\n const nodesById = getNodesById(nodes);\n const graphData = placeNodesOnGraph(nodeTree.treeLevel2Names, nodesById);\n console.log('placeNodesOnGraph', graphData);\n const graphLinks = linksForGraph(edges);\n console.log('linksForGraph', graphLinks);\n return {\n data: graphData,\n links: graphLinks,\n };\n};\n","import React, { useMemo, useState } from 'react';\nimport ReactECharts, { ReactEChartsProps } from '../../components/charts/echarts/ReactECharts';\nimport type { GraphSeriesOption } from 'echarts';\nimport { formatDataForGraph } from './graphViewDataUtils';\nimport { DataDictionary } from './types';\n\ninterface GraphViewType {\n categories: string;\n dictionary: DataDictionary,\n selectedId: string;\n}\n\nconst GraphView = ({\n categories,\n dictionary,\n selectedId,\n}: GraphViewType) => {\n const [zoomLevel, setZoomLevel] = useState(1);\n const dataAndLinks = formatDataForGraph(dictionary);\n console.log('GraphView dictionary', dictionary);\n console.log('GraphView categories', categories);\n console.log('GraphView selectedId', selectedId);\n interface GraphReactEChartsProps extends ReactEChartsProps {\n option: {\n series: GraphSeriesOption[];\n };\n }\n\n //TODO list\n //position labels\n //line strait up and down\n //curves at end of line \n //positioning of nodes\n //positioning of lines\n //icones\n //icon images\n //line color\n //lines that curve back in last row\n //hover upstreem only emphasis\n\n const chartDefinition = useMemo((): ReactEChartsProps['option'] => {\n return {\n tooltip: {\n trigger: 'item',\n triggerOn: 'mousemove'\n },\n toolbox: {\n show: true,\n left: 16,\n top: 16,\n orient: 'vertical',\n itemSize: 30,\n iconStyle: {\n borderWidth: 0,\n opacity: 0.8,\n },\n emphasis: {\n iconStyle: {\n opacity: 1,\n color: '#3283c8',\n }\n },\n feature: {\n restore: { \n show: true, \n title: 'Reset',\n icon: 'image://data:image/gif;base64,R0lGODlhHgAeAKEAADKDyP///zKDyDKDyCH5BAEKAAIALAAAAAAeAB4AAAJChI+py+0Powm02irP3TRPfnkAJjZkuZxooq5a57Jw/AY00sY5lO+PjwKWhCKix5hBSpQRJm+2BFmKUueoCr1pt5ICADs=',\n },\n myZoomIn: {\n show: true,\n title: 'Zoom In',\n icon: 'image://data:image/gif;base64,R0lGODlhHgAeAKEAADKDyP///zKDyDKDyCH5BAEKAAIALAAAAAAeAB4AAAJAhI+py+0PIww0yFnvq1Y37n1ZuICkYp5Iqhps+27cTNfdauc0qvcU79NpYiciyRhCepTDUcvlfDIvU0n1ic2GCgA7',\n onclick: (params: GraphReactEChartsProps) => {\n const series = params?.option?.series;\n const zoom = series && series[0] ? series[0].zoom : 1;\n\n setZoomLevel((zoom || 1) + 0.1);\n }\n },\n myZoomOut: {\n show: true,\n title: 'Zoom Out',\n icon: 'image://data:image/gif;base64,R0lGODlhHgAeAKEAADKDyP///zKDyDKDyCH5BAEKAAIALAAAAAAeAB4AAAIohI+py+0Po5y02ouz3rz7PwXiSJbmqJzqmq4u2b4vSNf2jef6zvd1AQA7',\n onclick: (params: GraphReactEChartsProps) => {\n const series = params?.option?.series;\n const zoom = series && series[0] ? series[0].zoom : 1;\n\n setZoomLevel((zoom || 1) - 0.1);\n }\n },\n },\n },\n //https://echarts.apache.org/en/option.html#legend\n series: {\n type: 'graph',\n roam: true,\n zoom: zoomLevel,\n nodeScaleRatio: 1 as 0.6,//Temp type fix untill its fixed in echarts\n label: {\n show: true,\n position: 'right',\n align: 'left',\n verticalAlign: 'middle',\n backgroundColor: 'white',\n fontSize: 12 * zoomLevel, //have label size increase with zoom\n },\n symbol: 'circle', //TODO make image\n symbolSize: 15,\n symbolOffset: ['-50%', 0],\n emphasis: {\n focus: 'adjacency'\n },\n edgeSymbol: ['circle', 'circle'],\n edgeSymbolSize: 6 * zoomLevel, //have edge size increase with zoom\n lineStyle: {\n opacity: 0.9,\n width: 2,\n curveness: 0,\n cap: 'square',\n },\n\n //https://echarts.apache.org/en/option.html#series-tree.data\n data: dataAndLinks.data,\n links: dataAndLinks.links,\n\n top: 100,\n left: 100,\n\n }\n };\n }, [dataAndLinks, zoomLevel]);\n//TODO: import real data\n//TODO: connections between nodes\n//TODO: ZOOM IN AND OUT AND MOVE AROUND controls? \n return (\n <div className=\"w-full h-full min-h-[800px]\">\n <ReactECharts option={chartDefinition} events={{\n graphroam: function () {\n //getting zoom from event does not work, so get it from chart options\n const thisApi = this._api as unknown as { getOption: () => any };\n const thisOptions: GraphReactEChartsProps['option'] = thisApi.getOption();\n const seriesGraph = thisOptions?.series && thisOptions.series[0];\n const seriesGraphZoom = seriesGraph?.zoom;\n if (seriesGraphZoom){\n setZoomLevel(seriesGraphZoom);\n }\n },\n }} />\n </div>\n );\n};\n\nexport default GraphView;\n","import React, { MutableRefObject, useCallback, useState } from 'react';\nimport { MatchingSearchResult, ViewType } from './types';\nimport { getPropertyCount, SearchPathToPropertyIdString } from './utils';\nimport ViewSelector from './ViewSelector';\nimport TableSearch from './TableSearch';\nimport { useDictionaryContext } from './DictionaryProvider';\nimport CategoryPanel from './CategoryPanel';\nimport GraphView from './GraphView';\nimport { useScrollIntoView } from '@mantine/hooks';\nimport { Tabs } from '@mantine/core';\n\nconst Dictionary = () => {\n const [selectedId, setSelectedId] = useState('');\n const [view, setView] = useState<ViewType>('table');\n const { dictionary, categories, visibleCategories, config } =\n useDictionaryContext();\n\n const { scrollIntoView, targetRef, scrollableRef } = useScrollIntoView<\n HTMLSpanElement,\n HTMLDivElement\n >({\n offset: 60,\n });\n\n const scrollTo = useCallback((item: MatchingSearchResult) => {\n setSelectedId(() => SearchPathToPropertyIdString(item));\n }, []);\n\n const scrollToSelection = useCallback(\n (itemRef: HTMLSpanElement) => {\n // @ts-expect-error need to refactor this\n (targetRef.current as MutableRefObject<HTMLDivElement>) = itemRef;\n scrollIntoView();\n },\n [scrollIntoView, targetRef],\n );\n const categoryPanelTable =\n Object.keys(categories).length &&\n Object.keys(categories).map((category) => (\n <CategoryPanel\n key={category}\n category={category}\n selectedId={selectedId}\n scrollToSelection={scrollToSelection}\n />\n ));\n\n return (\n <>\n <div className=\"w-1/4 overflow-auto p-4\">\n <div className=\"h-full\">\n {config?.showGraph ? (\n <ViewSelector view={view} setView={setView} />\n ) : null}\n <span>\n The current commons dictionary has{' '}\n <span className=\"font-bold\">{visibleCategories.length}</span> nodes\n and{' '}\n <span className=\"font-bold\">\n {getPropertyCount(visibleCategories, dictionary)}\n </span>{' '}\n properties\n </span>\n <TableSearch selectItem={scrollTo} />\n </div>\n </div>\n <div\n className=\"w-3/4 overflow-auto bg-base-lighter\"\n ref={scrollableRef}\n >\n <div className=\"h-full\">\n {config?.showGraph ? (\n <Tabs value={view} keepMounted={false} className=\"h-full\">\n <Tabs.Panel value=\"table\" className=\"p-4\">{categoryPanelTable}</Tabs.Panel>\n <Tabs.Panel value=\"graph\" className=\"h-full\">\n <GraphView\n categories={categories}\n dictionary={dictionary}\n selectedId={selectedId}\n />\n </Tabs.Panel>\n </Tabs>\n ) : (\n categoryPanelTable\n )}\n </div>\n </div>\n </>\n );\n};\n\nexport default React.memo(Dictionary);\n","import React, { useEffect, useState } from 'react';\nimport { useGetDictionaryQuery } from '@gen3/core';\nimport { Loader, Text } from '@mantine/core';\nimport Dictionary from './Dictionary';\nimport { DictionaryProps, DataDictionary } from './types';\nimport DictionaryProvider from './DictionaryProvider';\nimport { removeUnusedFieldsFromDictionaryObject } from './utils';\n\nconst DictionaryWithContext = ({ config }: DictionaryProps) => {\n const { data, isFetching, isUninitialized, isLoading, isError, isSuccess } =\n useGetDictionaryQuery();\n const [dictionary, setDictionary] = useState<DataDictionary>({});\n\n useEffect(() => {\n if (isSuccess) {\n const dictionary = removeUnusedFieldsFromDictionaryObject(\n data as unknown as Record<string, any>,\n );\n setDictionary(dictionary);\n }\n }, [data, isSuccess]);\n\n if (\n isLoading ||\n isFetching ||\n isUninitialized ||\n Object.keys(dictionary).length === 0\n ) {\n return (\n <div className=\"flex w-full py-24 relative justify-center\">\n <Loader variant=\"dots\" />{' '}\n </div>\n );\n }\n\n if (isError) {\n return (\n <div className=\"flex w-full py-24 h-100 relative justify-center\">\n <Text size={'xl'}>Error loading discovery data</Text>\n </div>\n );\n }\n\n return (\n <DictionaryProvider config={config} dictionary={dictionary}>\n <Dictionary />\n </DictionaryProvider>\n );\n};\n\nexport default DictionaryWithContext;\n","import React from 'react';\nimport { DictionaryWithContext } from '../../features/Dictionary';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { DictionaryPageProps } from './types';\n\nconst DictionaryPage = ({\n headerProps,\n footerProps,\n config,\n}: DictionaryPageProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps, mainProps: { fixed: true } }}\n headerMetadata={{\n title: 'Gen3 DataDictionary Page',\n content: 'Data Dictionary',\n key: 'gen3-data-dictionary-page',\n ...(config?.headerMetadata ? config.headerMetadata : {}),\n }}\n >\n <DictionaryWithContext config={config} />\n </NavPageLayout>\n );\n};\n\nexport default DictionaryPage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { NavPageLayoutProps } from '../../features/Navigation';\nimport { DictionaryConfig } from '../../features/Dictionary';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { KEY_FOR_SEARCH_HISTORY, MAX_SEARCH_HISTORY, } from '../../features/Dictionary/constants';\n\nexport const DictionaryPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n try {\n const dictionaryConfig: DictionaryConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/dictionary.json`,\n );\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: dictionaryConfig,\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: {\n showGraph: false,\n showDownloads: false,\n historyStorageId: KEY_FOR_SEARCH_HISTORY,\n maxHistoryItems: MAX_SEARCH_HISTORY,\n },\n },\n };\n }\n};\n","import { DataLibrarySelectionState } from './SelectionContext';\nimport {\n CohortItem,\n DataLibrary,\n FileItem,\n isCohortItem,\n isFileItem,\n ManifestItem,\n} from '@gen3/core';\nimport {\n FileItemWithParentDatasetNameAndID,\n isValidFileItemWithParentDatasetNameAndID,\n ValidatedSelectedItem,\n} from '../types';\n\nexport const getDataLibraryItem = (\n dataLibrary: DataLibrary,\n listId: string,\n dataId: string,\n fileId?: string,\n) => {\n if (!(listId in dataLibrary)) return undefined;\n if (!(dataId in dataLibrary[listId].items)) return undefined;\n\n const datasetOrCohort = dataLibrary[listId].items[dataId];\n const { name } = datasetOrCohort;\n if (isCohortItem(datasetOrCohort)) {\n return {\n ...datasetOrCohort,\n datasetId: dataId,\n datasetName: name,\n } as CohortItem & { datasetId: string; datasetName: string };\n } else {\n if (!fileId) return undefined;\n if (!(fileId in datasetOrCohort.members)) return undefined;\n\n if (isFileItem(datasetOrCohort.members[fileId])) {\n return {\n datasetName: name,\n datasetId: dataId,\n ...(datasetOrCohort.members[fileId] as FileItem),\n } as FileItemWithParentDatasetNameAndID;\n }\n return undefined;\n }\n};\n\nexport interface SelectionPath {\n listId: string;\n memberId: string;\n objectId?: string;\n}\n\nexport const getSelectionPaths = (\n selections: DataLibrarySelectionState,\n): SelectionPath[] => {\n const paths: SelectionPath[] = [];\n\n for (const [listId, listMembers] of Object.entries(selections)) {\n for (const [memberId, member] of Object.entries(listMembers)) {\n if (Object.keys(member.objectIds).length === 0) {\n // If there are no objectIds, add a path with undefined objectId\n paths.push({\n listId,\n memberId,\n });\n } else {\n for (const [objectId, isSelected] of Object.entries(member.objectIds)) {\n if (isSelected) {\n paths.push({\n listId,\n memberId,\n objectId,\n });\n }\n }\n }\n }\n }\n return paths;\n};\n\nexport const getSelectedItemsFromDataLibrary = (\n selections: DataLibrarySelectionState,\n dataLibrary: DataLibrary,\n) => {\n const selectedPaths = getSelectionPaths(selections);\n const uniqueItems = new Map<\n string,\n CohortItem | FileItemWithParentDatasetNameAndID\n >();\n\n selectedPaths.forEach((path) => {\n const item = getDataLibraryItem(\n dataLibrary,\n path.listId,\n path.memberId,\n path.objectId,\n );\n\n if (item) {\n const key = getUniqueItemKey(item);\n uniqueItems.set(key, item);\n }\n });\n\n return Array.from(uniqueItems.values());\n};\n\nconst getUniqueItemKey = (\n item: CohortItem | FileItemWithParentDatasetNameAndID,\n): string => {\n if (isCohortItem(item)) {\n // For CohortItems\n return `cohort_${item.datasetId}`;\n } else {\n // For FileItems\n return `file_${item.datasetId}_${item.id}`;\n }\n};\n\nexport const selectionToManifest = (\n dataLibrarySelections: ReadonlyArray<ValidatedSelectedItem>,\n exportAllFields: boolean = false,\n) => {\n return dataLibrarySelections.reduce((acc, item) => {\n if (isValidFileItemWithParentDatasetNameAndID(item)) {\n acc.push({\n object_id: item.id,\n ...(item.name ? { file_name: item.name } : {}),\n ...(item.size ? { file_size: Number(item.size) } : {}),\n dataset_id: item.datasetId,\n });\n }\n\n return acc;\n }, [] as Array<ManifestItem>);\n};\n\nexport const extractDatasetIds = (\n dataLibrarySelections: ReadonlyArray<ValidatedSelectedItem>,\n) => {\n const metadataIds = dataLibrarySelections.reduce((acc, item) => {\n if (isFileItem(item)) {\n acc.add(item.datasetId);\n }\n return acc;\n }, new Set<string>() as Set<string>);\n return Array.from(metadataIds);\n};\n","import React, {\n createContext,\n useContext,\n useReducer,\n Dispatch,\n useState,\n} from 'react';\nimport { getSelectedItemsFromDataLibrary } from './utils';\nimport { DataLibrary, CohortItem } from '@gen3/core';\nimport { FileItemWithParentDatasetNameAndID } from '../types';\n// Define types\ntype ListId = string;\n\nexport type SelectedMembers = Record<string, boolean>;\n\ninterface DatasetListMember {\n id: string;\n objectIds: SelectedMembers;\n}\n\nexport type ListMembers = Record<string, DatasetListMember>;\n\nexport interface DataLibrarySelectionState {\n [key: ListId]: ListMembers;\n}\n\ntype Action =\n | {\n type: 'UPDATE_DATA_LIBRARY_SELECTION';\n payload: { listId: ListId; members: ListMembers };\n }\n | {\n type: 'UPDATE_DATALIST_MEMBER_SELECTION';\n payload: { listId: ListId; memberId: string; selection: SelectedMembers };\n }\n | { type: 'CLEAR_DATA_LIBRARY_SELECTION' }\n | { type: 'DELETE_DATA_LIBRARY_LIST'; payload: { listId: string } }\n | {\n type: 'DELETE_DATA_LIBRARY_LIST_MEMBER';\n payload: { listId: string; memberId: string };\n };\n\ninterface DataLibraryContextType {\n selections: DataLibrarySelectionState;\n gatheredItems: Array<CohortItem | FileItemWithParentDatasetNameAndID>;\n updateSelections: (listId: ListId, members: ListMembers) => void;\n updateListMemberSelections: (\n listId: ListId,\n memberId: string,\n selection: SelectedMembers,\n ) => void;\n clearSelections: () => void;\n removeList: (itemId: string) => void;\n removeListMember: (listId: ListId, memberId: string) => void;\n gatherSelectedItems: (dataLibrary: DataLibrary) => void;\n dispatch: Dispatch<Action>;\n}\n\n// Create the context\nconst DataLibrarySelectionContext = createContext<\n DataLibraryContextType | undefined\n>(undefined);\n\n// Reducer function\nexport const dataLibrarySelectionReducer = (\n selections: DataLibrarySelectionState,\n action: Action,\n): DataLibrarySelectionState => {\n switch (action.type) {\n case 'UPDATE_DATA_LIBRARY_SELECTION':\n return {\n ...selections,\n [action.payload.listId]: action.payload.members,\n };\n case 'UPDATE_DATALIST_MEMBER_SELECTION':\n if (Object.keys(action.payload.selection).length === 0) {\n // need to remove the dataset\n const {\n [action.payload.listId]: {\n [action.payload.memberId]: _unused,\n ...restState\n },\n } = selections;\n\n if (Object.keys(restState).length === 0) {\n const { [action.payload.listId]: _unused2, ...restList } = selections;\n return restList;\n }\n return {\n ...selections,\n [action.payload.listId]: {\n ...restState,\n },\n };\n }\n\n return {\n ...selections,\n [action.payload.listId]: {\n ...selections[action.payload.listId],\n [action.payload.memberId]: {\n id: action.payload.memberId,\n objectIds: action.payload.selection,\n },\n },\n };\n case 'DELETE_DATA_LIBRARY_LIST': {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [action.payload.listId]: _unused, ...restState } = selections;\n return restState;\n }\n case 'DELETE_DATA_LIBRARY_LIST_MEMBER': {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n if (!(action.payload.listId in selections)) return selections;\n const {\n [action.payload.listId]: {\n [action.payload.memberId]: _unused,\n ...restState\n },\n } = selections;\n return {\n ...selections,\n [action.payload.listId]: {\n ...restState,\n },\n };\n }\n case 'CLEAR_DATA_LIBRARY_SELECTION':\n return {};\n default:\n return selections;\n }\n};\n\n// Provider component\nexport const DataLibrarySelectionProvider: React.FC<{\n children: React.ReactNode;\n}> = ({ children }) => {\n const [selections, dispatch] = useReducer(dataLibrarySelectionReducer, {});\n const [gatheredItems, setGatheredItems] = useState<\n Array<CohortItem | FileItemWithParentDatasetNameAndID>\n >([]);\n\n const updateSelections = (listId: ListId, members: ListMembers) => {\n dispatch(updateDataLibrarySelection(listId, members));\n };\n\n const updateListMemberSelections = (\n listId: ListId,\n memberId: string,\n selection: SelectedMembers,\n ) => {\n dispatch(updateDataLibraryListMemberSelection(listId, memberId, selection));\n };\n\n const clearSelections = () => {\n dispatch(clearDataLibrarySelection());\n };\n\n const removeList = (listId: ListId) => {\n dispatch(removeDataLibrarySelection(listId));\n };\n\n const removeListMember = (listId: ListId, memberId: string) => {\n dispatch(removeDataLibraryMemberSelection(listId, memberId));\n };\n\n const gatherSelectedItems = (dataLibrary?: DataLibrary) => {\n if (dataLibrary) {\n const gatheredItems = getSelectedItemsFromDataLibrary(\n selections,\n dataLibrary,\n );\n setGatheredItems(gatheredItems);\n }\n };\n\n return (\n <DataLibrarySelectionContext.Provider\n value={{\n selections,\n gatheredItems,\n dispatch,\n updateSelections,\n updateListMemberSelections,\n clearSelections,\n removeList,\n removeListMember,\n gatherSelectedItems,\n }}\n >\n {children}\n </DataLibrarySelectionContext.Provider>\n );\n};\n\n// Custom hook for using the data library\nexport const useDataLibrarySelection = (): DataLibraryContextType => {\n const context = useContext(DataLibrarySelectionContext);\n if (!context) {\n throw new Error('useDataLibrary must be used within a DataLibraryProvider');\n }\n return context;\n};\n\nexport const updateDataLibrarySelection = (\n listId: ListId,\n members: ListMembers,\n): Action => ({\n type: 'UPDATE_DATA_LIBRARY_SELECTION',\n payload: { listId, members },\n});\n\nexport const updateDataLibraryListMemberSelection = (\n listId: ListId,\n memberId: string,\n selection: SelectedMembers,\n): Action => ({\n type: 'UPDATE_DATALIST_MEMBER_SELECTION',\n payload: { listId, memberId, selection },\n});\n\nexport const clearDataLibrarySelection = (): Action => ({\n type: 'CLEAR_DATA_LIBRARY_SELECTION',\n});\n\nexport const removeDataLibrarySelection = (listId: ListId): Action => ({\n type: 'DELETE_DATA_LIBRARY_LIST',\n payload: { listId },\n});\n\nexport const removeDataLibraryMemberSelection = (\n listId: ListId,\n memberId: string,\n): Action => ({\n type: 'DELETE_DATA_LIBRARY_LIST_MEMBER',\n payload: { listId, memberId },\n});\n\nexport const getNumberOfDataSetItemsSelected = (\n selections: DataLibrarySelectionState,\n listId: string,\n itemId: string,\n) => {\n return Object.keys(selections?.[listId]?.[itemId]?.objectIds ?? {}).length;\n};\n\nexport const getNumberOfSelectedItemsInList = (\n selections: DataLibrarySelectionState,\n listId: string,\n): number => {\n if (!(listId in selections)) return -1; // return -1 indicating there is no listId in selection\n\n return Object.keys(selections[listId]).reduce((count: number, datasetId) => {\n try {\n return (\n count + getNumberOfDataSetItemsSelected(selections, listId, datasetId)\n );\n } catch (error) {\n console.error(\n `Failed to get number of selected items for dataset ${datasetId} in list ${listId}:`,\n error,\n );\n return count;\n }\n }, 0);\n};\n\n// Selector function\nexport const selectDataLibrarySelectedItems = (\n selections: DataLibrarySelectionState,\n listId: ListId,\n): ListMembers => selections[listId] || [];\n\nexport const isListInSelection = (\n listId: ListId,\n selections: DataLibrarySelectionState,\n) => listId in selections;\n","export const MantineSizeToString: Record<string, string> = {\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n 'xl-2': 'xl-2',\n};\nexport const IconSize: Record<string, number> = {\n xs: 14,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 32,\n 'xl-2': 36,\n};\nexport const FontSize: Record<string, string> = {\n xs: 'var(--mantine-font-size-xs)',\n sm: 'var(--mantine-font-size-sm)',\n md: 'var(--mantine-font-size-md)',\n lg: 'var(--mantine-font-size-lg)',\n xl: 'var(--mantine-font-size-xl)',\n 'xl-2': 'var(--mantine-font-size-2xl)',\n};\n","import React from 'react';\nimport { ActionIcon, Button, Group, Tooltip } from '@mantine/core';\nimport { MdAdd as PlusIcon } from 'react-icons/md';\nimport { DatasetOrCohort, StorageOperationResults } from '@gen3/core';\nimport { Icon } from '@iconify-icon/react';\nimport { useDataLibrarySelection } from './selection/SelectionContext';\nimport { IconSize } from '../../utils/sizes';\n\ninterface SearchAndActionsProps {\n createList: (\n items: DatasetOrCohort,\n name?: string,\n ) => Promise<StorageOperationResults>;\n gatherData: () => void;\n size?: string;\n enableCreateNewList?: boolean;\n enableDownloadManifest?: boolean;\n}\n\nconst SearchAndActions: React.FC<SearchAndActionsProps> = ({\n createList,\n gatherData,\n size = 'sm',\n enableCreateNewList = false,\n enableDownloadManifest = false,\n}) => {\n const { selections, clearSelections } = useDataLibrarySelection();\n const retrieveDisabled = Object.keys(selections).length === 0;\n const iconSize = IconSize[size] || IconSize['sm'];\n return (\n <div className=\"flex justify-between p-2 bg-primary-dark text-primary-contrast-dark\">\n <Group>\n <Tooltip label=\"Retrieve selections\">\n <Button\n disabled={retrieveDisabled}\n // disabled={Object.keys(selections).length === 0}\n size={`compact-${size}`}\n variant=\"outline\"\n onClick={() => gatherData()}\n aria-label=\"Retrieve Selected Data\"\n classNames={{ root: 'bg-base-max hover:bg-base-light' }}\n >\n Retrieve Selected\n </Button>\n </Tooltip>\n <Tooltip label=\"Clear selections\">\n <ActionIcon\n disabled={retrieveDisabled}\n variant=\"outline\"\n size={size}\n onClick={() => {\n clearSelections();\n }}\n color=\"accent-contrast.4\"\n aria-label=\"clear selections\"\n >\n <Icon icon=\"gen3:clear-list\" width={iconSize} height={iconSize} />\n </ActionIcon>\n </Tooltip>\n\n {enableCreateNewList && (\n <Tooltip label=\"Create a new empty list\">\n <Button\n hidden={true}\n size=\"compact-md\"\n variant=\"outline\"\n onClick={() => createList({})} // add an empty object to represent an empty list\n aria-label=\"create a new list\"\n classNames={{ root: 'bg-base-max hover:bg-base-light' }}\n >\n <PlusIcon size=\"1.5em\" />\n </Button>\n </Tooltip>\n )}\n {enableCreateNewList && (\n <Tooltip label=\"Download Manifest of selected items\">\n <Button\n size=\"compact-md\"\n variant=\"outline\"\n aria-label=\"Download Manifest of Selected Items\"\n classNames={{ root: 'bg-base-max hover:bg-base-light' }}\n >\n <Icon icon=\"gen3:download-alt\" height={24} width={24} />\n </Button>\n </Tooltip>\n )}\n </Group>\n {/* --- // TODO: support search\n <TextInput\n variant=\"filled\"\n placeholder=\"Search...\"\n leftSection={<SearchIcon size=\"1.45em\" />}\n />\n --- */}\n </div>\n );\n};\n\nexport default SearchAndActions;\n","export const HTTPUserFriendlyErrorMessages: Record<number, string> = {\n // 4xx Client Errors\n 400: 'Sorry, there was a problem with your request. Please check the information you provided and try again.',\n 401: 'Please sign in to access this content. If you need to create an account, please contact support.',\n 402: 'This feature requires payment to continue. Please update your subscription.',\n 403: \"You don't have permission to access this. If you think this is a mistake, please contact support.\",\n 404: \"We couldn't find what you're looking for. The link might be broken or the content may have been moved.\",\n 405: 'This action is not supported. Please try a different approach.',\n 406: \"Your browser sent a request that this server couldn't understand. Try updating your browser.\",\n 407: 'Please authenticate with the network proxy first.',\n 408: 'The request took too long to complete. Please check your internet connection and try again.',\n 409: 'There was a conflict with your request. Someone might have modified the same content.',\n 410: 'This content has been permanently removed and is no longer available.',\n 411: 'There was a technical problem with your request. Please try again.',\n 412: \"Some conditions for this request weren't met. Please try again.\",\n 413: \"The file you're trying to upload is too large. Please choose a smaller file.\",\n 414: 'The web address is too long. Please try a shorter URL.',\n 415: 'This type of file is not supported. Please try a different format.',\n 416: 'The requested content range is not available.',\n 417: \"Your request couldn't be completed as expected. Please try again.\",\n 418: 'Unusual error occurred. Please try again or contact support if the problem persists.',\n 421: 'Your request was sent to the wrong server. Please try again.',\n 422: \"We couldn't process your request. Please check the information and try again.\",\n 423: 'This resource is temporarily locked. Please try again in a few moments.',\n 424: 'The request failed because it depends on another request that failed.',\n 425: 'Your request was processed too early. Please try again in a moment.',\n 426: 'You need to upgrade your browser or app to continue.',\n 428: \"Some required conditions weren't met. Please check all requirements and try again.\",\n 429: \"You've made too many requests. Please wait a while before trying again.\",\n 431: 'Request failed because the headers are too large. Please simplify your request.',\n 451: 'This content is not available for legal reasons.',\n\n // 5xx Server Errors\n 500: 'Something went wrong with the service. Please try again later.',\n 501: \"This feature isn't available yet. Check back later.\",\n 502: \"We're having trouble connecting to our servers. Please try again in a few minutes.\",\n 503: \"Our service is temporarily unavailable. We're working to restore it as quickly as possible.\",\n 504: 'The server took too long to respond. Please try again later.',\n 505: \"Your browser's HTTP version isn't supported. Please try updating your browser.\",\n 506: 'We encountered a configuration error.',\n 507: \"We're out of storage space.\",\n 508: 'We detected an infinite loop in our servers.',\n 510: 'This server requires additional extensions to process your request.',\n 511: 'Please sign in to the network before continuing.',\n};\n","import React, { useMemo } from 'react';\nimport {\n MantineReactTable,\n MRT_RowSelectionState,\n MRT_Updater,\n MRT_Cell,\n useMantineReactTable,\n MRT_Row,\n} from 'mantine-react-table';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { Text, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { isCohortItem } from '@gen3/core';\nimport { TableIcons } from '../../../components/Tables/TableIcons';\nimport { ValidatedSelectedItem } from '../types';\n\nimport { IconSize } from '../../../utils/sizes';\n\ninterface SelectedItemsTableHeaderProps {\n numberOfItems: number;\n numberOfWarnings: number;\n size?: string;\n}\n\nconst SelectedItemsTableHeader: React.FC<SelectedItemsTableHeaderProps> = ({\n numberOfItems,\n numberOfWarnings,\n size = 'sm',\n}) => {\n const iconSize = IconSize[size] || IconSize['sm'];\n return (\n <div className=\"flex items-center bg-primary px-4 py-2 mt-2 min-h-10 text-heading\">\n {numberOfItems > 0 && (\n <div className=\"flex items-center flex-nowrap overflow-ellipsis text-primary-contrast\">\n <Text fw={600} size={size} className=\"mr-1 \">\n {numberOfItems}\n </Text>\n <Text fw={400} size={size} className=\"mr-1 text-primary-contrast\">\n selected\n </Text>\n </div>\n )}\n {numberOfItems > 0 && numberOfWarnings > 0 && (\n <Icon\n icon=\"gen3:dot\"\n className=\"text-primary-contrast\"\n width={iconSize}\n height={iconSize}\n />\n )}\n {numberOfWarnings > 0 && (\n <div className=\"flex items-center flex-nowrap overflow-ellipsis\">\n <Icon\n icon=\"gen3:warning\"\n width={iconSize}\n height={iconSize}\n className=\"text-utility-warning m-1\"\n ></Icon>\n <Text\n fw={600}\n size={size}\n className=\"mr-1 text-primary-contrast-lighter\"\n >\n {numberOfWarnings}\n </Text>\n <Text\n fw={400}\n size={size}\n className=\"text-primary-contrast-lighter\"\n >{`${numberOfWarnings == 1 ? 'warning' : 'warnings'}`}</Text>\n </div>\n )}\n </div>\n );\n};\n\ninterface SelectedItemsTableRow {\n datasetName: string;\n datasetId: string;\n type: string;\n size?: string;\n name?: string;\n description?: string;\n valid?: boolean;\n messages?: string[];\n}\n\ninterface SelectedItemsTableProps {\n validatedItems: ReadonlyArray<ValidatedSelectedItem>;\n rowSelection: MRT_RowSelectionState;\n setRowSelection: React.Dispatch<React.SetStateAction<MRT_RowSelectionState>>;\n size?: string;\n}\n\nconst SelectedItemsTable: React.FC<SelectedItemsTableProps> = ({\n validatedItems,\n rowSelection,\n setRowSelection,\n size = 'sm',\n}) => {\n const handleRowSelectionChange = (\n updater: MRT_Updater<MRT_RowSelectionState>,\n ) => {\n let value = {};\n setRowSelection((prevSelection) => {\n value = updater instanceof Function ? updater(prevSelection) : updater;\n return value;\n });\n };\n\n const iconSize = IconSize[size] || IconSize['sm'];\n\n const columns = useMemo(\n () => [\n {\n accessorKey: 'valid',\n enableHiding: true,\n size: 40,\n maxSize: 50,\n header: 'Valid',\n Cell: ({ row }: { row: MRT_Row<SelectedItemsTableRow> }) => {\n if (row.original.valid === undefined) return <span />;\n if (!row.original.valid) {\n return (\n <Tooltip\n label={row.original?.messages?.join('\\n') ?? 'Unknown Error'}\n >\n <Icon\n icon=\"gen3:warning\"\n width={iconSize}\n height={iconSize}\n className=\"text-utility-warning text-xl\"\n >\n <Text fw={400} size={size}>\n {row.original?.messages?.length}\n </Text>\n </Icon>\n </Tooltip>\n );\n } else {\n return (\n <Icon\n icon=\"gen3:check-fill\"\n width={iconSize}\n height={iconSize}\n className=\"text-utility-success\"\n />\n );\n }\n },\n },\n {\n accessorKey: 'id',\n header: 'Id',\n size: 150,\n maxSize: 250,\n },\n {\n accessorKey: 'description',\n header: 'Description',\n size: 100,\n maxSize: 150,\n Cell: ({ cell }: { cell: MRT_Cell<SelectedItemsTableRow> }) => {\n return (\n <Text fw={400} size={size} lineClamp={2} truncate=\"end\">\n {cell.getValue<string>() ?? 'N/A'}\n </Text>\n );\n },\n },\n {\n accessorKey: 'type',\n header: 'Type',\n },\n {\n accessorKey: 'size',\n header: 'Size',\n },\n {\n accessorKey: 'datasetId',\n header: 'Dataset ID',\n },\n ],\n [iconSize, size],\n );\n\n const tableRows = useDeepCompareMemo(() => {\n let hasInvalidRows = false;\n const rows = validatedItems.map((item) => {\n if (!item.valid) hasInvalidRows = true;\n if (isCohortItem(item)) {\n return {\n id: item.id,\n name: item.name,\n description: item.description,\n type: item.itemType as string,\n size: undefined,\n datasetName: item.name,\n datasetId: item.datasetId,\n valid: item.valid,\n messages: item?.errorMessages,\n } as SelectedItemsTableRow;\n }\n\n return {\n id: item.id,\n name: item.name,\n description: item.description,\n type: item.type,\n size: item.size,\n datasetId: item.datasetId,\n datasetName: item.datasetName,\n valid: item.valid,\n messages: item?.errorMessages,\n } as SelectedItemsTableRow;\n });\n\n return {\n rows,\n hasInvalidRows,\n };\n }, [validatedItems]);\n\n const table = useMantineReactTable<SelectedItemsTableRow>({\n columns,\n data: tableRows.rows,\n icons: TableIcons,\n enableTopToolbar: false,\n enableRowSelection: true,\n enableBottomToolbar: tableRows.rows.length > 10,\n enablePagination: tableRows.rows.length > 10,\n enableRowActions: false,\n enableColumnResizing: true,\n enableGrouping: true,\n enableStickyHeader: true,\n enableStickyFooter: true,\n enableHiding: true,\n onRowSelectionChange: handleRowSelectionChange,\n state: { rowSelection },\n initialState: {\n density: 'xs',\n grouping: ['datasetId'],\n columnPinning: {\n left: ['mrt-row-select', 'mrt-row-expand'],\n right: ['mrt-row-actions'],\n },\n },\n layoutMode: 'semantic',\n mantineDetailPanelProps: {\n style: {\n boxShadow: '0 -2px 0px 0px var(--table-border-color) inset',\n },\n },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-1)',\n '--mrt-striped-row-background-color': 'var(--mantine-color-base-3)',\n },\n },\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-table-1)',\n color: 'var(--mantine-color-table-contrast-1)',\n textAlign: 'center',\n padding: '0.25rem 0.5rem 0.25rem 0.5rem',\n fontWeight: 600,\n fontSize: `var(--mantine-font-size-${size})`,\n },\n },\n });\n\n return (\n <div className=\"flex flex-col ml-8\">\n <SelectedItemsTableHeader\n numberOfItems={Object.keys(rowSelection).length}\n numberOfWarnings={\n tableRows.rows.filter((x) => x.valid === false).length\n }\n size={size}\n />\n <div className=\"mt-2\">\n <MantineReactTable table={table} />\n </div>\n </div>\n );\n};\n\nexport default SelectedItemsTable;\n","import { CohortItem } from '@gen3/core';\nimport { FileItemWithParentDatasetNameAndID, SelectableItem } from '../types';\nimport {\n DataLibraryActionConfig,\n DataLibraryActionsConfig,\n GroupRule,\n ItemRule,\n} from './types';\n\nexport type SelectableItems = Array<SelectableItem>;\n\nconst isArrayField = (value: unknown): value is Array<unknown> =>\n Array.isArray(value);\n\nconst isNumeric = (value: unknown): value is number =>\n typeof value === 'number' && !isNaN(value);\n\nexport const evaluateItemRule = (\n rule: ItemRule,\n item: SelectableItem,\n): boolean => {\n switch (rule.operator) {\n case 'equals':\n case 'not': {\n const fieldValue = item[rule.field];\n return rule.operator === 'equals'\n ? fieldValue === rule.value\n : fieldValue !== rule.value;\n }\n case 'includes':\n case 'excludes': {\n const fieldValue = item[rule.field];\n if (!isArrayField(fieldValue)) return false;\n\n return rule.operator === 'includes'\n ? fieldValue.includes(rule.value)\n : !fieldValue.includes(rule.value);\n }\n case 'greater':\n case 'less': {\n const fieldValue = item[rule.field];\n if (isNumeric(fieldValue) && isNumeric(rule.value))\n return rule.operator === 'greater'\n ? fieldValue > rule.value\n : fieldValue < rule.value;\n return false;\n }\n default:\n return false;\n }\n};\n\nconst evaluateGroupRule = (\n rule: GroupRule,\n items: SelectableItems,\n): boolean => {\n switch (rule.operator) {\n case 'count': {\n const fieldValue = items.map((item) => item[rule.field]);\n return fieldValue.length === rule.total;\n }\n case 'greater': {\n const fieldValue = items.map((item) => item[rule.field]);\n return fieldValue.length > (rule.total as number);\n }\n }\n};\n\n/**\n * Retrieves an action configuration from a set of actions by its unique identifier.\n *\n * @param {ActionsConfig} actions - An array of action configurations.\n * @param {string} id - The unique identifier of the desired action configuration.\n * @returns {DataLibraryActionConfig | undefined} The action configuration with the matching identifier, or undefined if not found.\n */\nexport const getActionById = (\n actions: DataLibraryActionsConfig,\n id?: string,\n): DataLibraryActionConfig | undefined => {\n if (!id) return undefined;\n return actions.find((action) => action.id === id);\n};\n\nexport const doesItemFailRule = (\n item: CohortItem | FileItemWithParentDatasetNameAndID,\n action: DataLibraryActionConfig,\n): string[] => {\n return (\n action?.itemRules?.reduce((acc: string[], rule) => {\n if (!evaluateItemRule(rule, item)) {\n acc.push(rule.errorMessage);\n }\n return acc;\n }, []) ?? []\n );\n};\n\nexport const doesGroupFailRule = (\n items: Array<SelectableItem>,\n action: DataLibraryActionConfig,\n): string[] => {\n return (\n action?.groupRules?.reduce((acc: string[], rule) => {\n if (!evaluateGroupRule(rule, items)) {\n acc.push(rule.errorMessage);\n }\n return acc;\n }, []) ?? []\n );\n};\n","import {\n fetchFencePresignedURL,\n FileItem,\n HTTPError,\n isFileItem,\n} from '@gen3/core';\nimport { notifications } from '@mantine/notifications';\nimport { HTTPUserFriendlyErrorMessages } from '../modals/utils';\nimport { DataActionFunction } from './types';\n\nconst PRESIGNED_URL_TEMPLATE_VARIABLE = '{{PRESIGNED_URL}}';\ninterface SendExistingPFBToURLParameters {\n targetURLTemplate: string;\n}\n\nconst isSendExistingPFBToURLParameters = (\n value: unknown,\n): value is SendExistingPFBToURLParameters => {\n if (!value || typeof value !== 'object') {\n return false;\n }\n const candidate = value as Record<string, unknown>;\n return (\n 'targetURLTemplate' in candidate &&\n typeof candidate.targetURLTemplate === 'string'\n );\n};\n\nexport const sendExistingPFBToURL: DataActionFunction = async (\n validatedSelections,\n params,\n onDone = () => null,\n onError = () => null,\n onAbort = () => null,\n signal = undefined,\n) => {\n if (!isSendExistingPFBToURLParameters(params)) {\n console.error('Invalid parameters for sendPFBToURL action:', params);\n return;\n }\n const { targetURLTemplate } = params;\n const selections = validatedSelections.filter((item) => item.valid);\n if (selections.length !== 1 || !isFileItem(selections[0])) {\n notifications.show({\n id: 'data-library-send-existing-pfb-to-url-validate-length',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Action Error',\n message: 'Invalid data passed to send PFB to URL',\n color: 'red',\n loading: false,\n });\n return;\n }\n const { guid, id } = selections[0] as FileItem;\n\n // get the pre-signed URL for the selected PFB\n try {\n const presignedURL = await fetchFencePresignedURL({\n guid: guid ?? id, //TODO: fix this to use id only\n onAbort: onAbort,\n signal: signal,\n });\n\n // the PFB export target URL is a template URL that should have a {{PRESIGNED_URL}} template\n // variable in it.\n const signedURL = encodeURIComponent(presignedURL);\n const targetURL = targetURLTemplate.replace(\n PRESIGNED_URL_TEMPLATE_VARIABLE,\n signedURL,\n );\n return new Promise<void>(() => {\n if (window) window.open(targetURL, '_blank', 'noopener,noreferrer');\n if (onDone) onDone(targetURL);\n });\n } catch (error: unknown) {\n if (error instanceof HTTPError) {\n notifications.show({\n id: 'data-library-send-existing-pfb-to-url-validate-length',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Action Error',\n message:\n error.status in HTTPUserFriendlyErrorMessages\n ? HTTPUserFriendlyErrorMessages[error.status]\n : 'An error has occurred to prevent exporting PFB',\n color: 'red',\n loading: false,\n });\n }\n if (error instanceof Error) {\n if (error.name == 'AbortError') {\n onAbort?.();\n }\n\n return new Promise<void>(() => {\n onError?.(error as Error);\n });\n }\n }\n};\n","export const MANIFEST_FILENAME = 'manifest.json';\nexport const LG_BREAKPOINT = 1024;\nexport const XL_BREAKPOINT = 1280;\n","import FileSaver from 'file-saver';\nimport { DataActionFunction } from '../types';\nimport { selectionToManifest } from '../utils';\nimport { MANIFEST_FILENAME } from '../../../../types/constants';\n\nexport const exportToManifest: DataActionFunction = async (\n validatedSelections,\n params,\n onDone = () => null,\n onError = () => null,\n onAbort = () => null,\n signal = undefined,\n) => {\n const manifest = selectionToManifest(validatedSelections); // TODO md5sum? commons_name?\n try {\n const blob = new Blob([JSON.stringify(manifest, null, 2)], {\n type: 'text/json',\n });\n FileSaver.saveAs(blob, MANIFEST_FILENAME);\n onDone?.();\n } catch (error: unknown) {\n if (error instanceof Error) {\n onError?.(error);\n } else onError?.(new Error('unknown error saving file'));\n }\n};\n","import React from 'react';\nimport { ExternalProvider } from '@gen3/core';\nimport { Stack, Table, Text } from '@mantine/core';\n\ninterface ProviderErrorNotificationProps {\n message: string;\n providers: Array<ExternalProvider>;\n}\nexport const ProvidersErrorPanel: React.FC<ProviderErrorNotificationProps> = ({\n message,\n providers,\n}) => {\n return (\n <Stack>\n <Text>{message}</Text>\n <Table>\n <thead>\n <tr>\n <th>Provider</th>\n <th>URL</th>\n </tr>\n </thead>\n <tbody>\n {providers.map((provider) => (\n <tr key={provider.name}>\n <Text>{provider.name}</Text>\n <Text>{provider.base_url}</Text>\n </tr>\n ))}\n </tbody>\n </Table>\n </Stack>\n );\n};\n","import { cloneDeep, get, unset } from 'lodash';\n\nexport const removeKeys = (obj: object, keysToRemove: Array<string>) => {\n keysToRemove.forEach((key) => {\n if (key.includes('.')) {\n const [firstKey, ...nestedKeys] = key.split('.');\n const nestedObj = get(obj, firstKey);\n unset(nestedObj, nestedKeys.join('.'));\n } else {\n unset(obj, key);\n }\n });\n return obj;\n};\n/**\n * Processes and assembles metadata by cloning objects, removing specified keys, and optionally accessing a defined metadata root.\n *\n * @param {Array<string>} keysToRemove - A list of keys to remove from each object in the selected resources after cloning.\n * @param {Array<Record<string, unknown>>} selectedResources - An array of resource objects to process and format.\n * @param {string} metadataRoot - The root key that holds the metadata in the objects. If present, this root is used as a starting point.\n * @returns {Array<Record<string, unknown>>} A new array of processed objects with the specified keys removed and metadata root applied when applicable.\n */\nexport const assembleMetadata = (\n selectedResources: Array<Record<string, unknown>>,\n metadataRoot: string,\n keysToRemove?: Array<string>,\n) => {\n return selectedResources.map((obj) => {\n const clonedObj = cloneDeep(\n !obj[metadataRoot] ? obj : (obj[metadataRoot] as typeof obj),\n );\n // if there are keysToRemove, remove them\n if (keysToRemove) {\n return removeKeys(clonedObj, keysToRemove);\n }\n // Otherwise just return the cloned object\n return clonedObj;\n });\n};\n","import React from 'react';\nimport { DataActionFunction } from '../../types';\nimport { extractDatasetIds, selectionToManifest } from '../../utils';\nimport {\n fetchJSONDataFromURL,\n GEN3_MANIFEST_API,\n getFederatedLoginStatus,\n HttpMethod,\n queryMultipleMDSRecords,\n} from '@gen3/core';\nimport { Stack } from '@mantine/core';\nimport { modals } from '@mantine/modals';\nimport { ProvidersErrorPanel } from './providerErrorNotification';\nimport { assembleMetadata } from './utils';\n\ninterface ExportMetadataToWorkspaceParameters {\n keysToRemove: Array<string>;\n metadataRoot: string;\n useAggMDS: boolean;\n verifyExternalLogins: boolean;\n}\n\nexport const exportMetadataToWorkspace: DataActionFunction = async (\n validatedSelections,\n params?: Partial<ExportMetadataToWorkspaceParameters>,\n onDone = () => null,\n onError = () => null,\n onAbort = () => null,\n signal = undefined,\n) => {\n // first need to get file manifest\n try {\n const fileManifest = selectionToManifest(validatedSelections);\n\n if (params?.verifyExternalLogins) {\n const results = await getFederatedLoginStatus(fileManifest);\n\n const {\n error: providersError,\n providersToAuthenticate,\n missingProviders,\n } = results;\n if (providersError) {\n onError?.(providersError);\n return;\n }\n if (\n providersToAuthenticate &&\n providersToAuthenticate?.length > 0 &&\n missingProviders &&\n missingProviders?.length > 0\n ) {\n modals.open({\n id: 'export-discovery-to-workspace-providers-to-authenticate-modal',\n title: 'Error: Export to Workspace',\n withCloseButton: true,\n children: (\n <Stack>\n <ProvidersErrorPanel\n message=\"The following providers need to be authenticated\"\n providers={providersToAuthenticate}\n />\n <ProvidersErrorPanel\n message=\"The following providers need to be authenticated\"\n providers={providersToAuthenticate}\n />\n </Stack>\n ),\n });\n return;\n }\n if (providersToAuthenticate && providersToAuthenticate?.length > 0) {\n modals.open({\n id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',\n title: 'Error: Export to Workspace',\n withCloseButton: true,\n children: (\n <ProvidersErrorPanel\n message=\"The following providers need to be authenticated\"\n providers={providersToAuthenticate}\n />\n ),\n });\n return;\n } else {\n if (missingProviders && missingProviders?.length > 0) {\n modals.open({\n id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',\n title: 'Error: Export to Workspace',\n withCloseButton: true,\n children: (\n <ProvidersErrorPanel\n message=\"The following providers are missing\"\n providers={missingProviders}\n />\n ),\n });\n return;\n }\n }\n }\n\n // next get the metadata from the dataset id\n const metadataIds = extractDatasetIds(validatedSelections);\n const metadata = await queryMultipleMDSRecords(\n metadataIds,\n params?.useAggMDS,\n signal,\n );\n\n const metadataObjects = Object.values(metadata).map(\n (metadataObj) => metadataObj as Record<string, unknown>,\n );\n\n const filteredMetadata = assembleMetadata(\n metadataObjects,\n params?.metadataRoot ?? 'gen3_discovery',\n params?.keysToRemove,\n );\n\n // save the metadata\n await fetchJSONDataFromURL(\n `${GEN3_MANIFEST_API}/metadata`,\n true,\n 'POST' as HttpMethod,\n JSON.stringify(filteredMetadata),\n signal,\n );\n\n // save files manifest\n await fetchJSONDataFromURL(\n `${GEN3_MANIFEST_API}/`,\n true,\n 'POST' as HttpMethod,\n JSON.stringify(fileManifest),\n signal,\n );\n\n onDone?.();\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.name == 'AbortError') {\n onAbort?.();\n }\n } else onError?.(new Error('unknown error'));\n }\n};\n","import { DataActionFunction } from '../../types';\nimport {\n fetchJSONDataFromURL,\n GEN3_MANIFEST_API,\n HttpMethod,\n ManifestItem,\n} from '@gen3/core';\nimport { isValidFileItemWithParentDatasetNameAndID } from '../../../types';\n\ninterface ExportDataListToWorkspaceParameters {\n keysToRemove: Array<string>;\n}\n\nconst omitKeys = <T extends Record<string, unknown>>(\n obj: T,\n keys: readonly string[] = [],\n): Omit<T, string> => {\n if (!keys.length) return obj;\n\n const toRemove = new Set(keys);\n return Object.fromEntries(\n Object.entries(obj).filter(([k]) => !toRemove.has(k)),\n ) as Omit<T, string>;\n};\n\nexport const exportDataListToWorkspace: DataActionFunction = async (\n validatedSelections,\n params?: Partial<ExportDataListToWorkspaceParameters>,\n onDone = () => null,\n onError = () => null,\n onAbort = () => null,\n signal = undefined,\n) => {\n // first need to get file manifest\n\n const { keysToRemove } = params || {};\n\n try {\n const fileManifest = validatedSelections.reduce((acc, item) => {\n if (isValidFileItemWithParentDatasetNameAndID(item)) {\n const manifestItem: ManifestItem = {\n object_id: item.id,\n ...(item.name ? { file_name: item.name } : {}),\n ...(item.size ? { file_size: Number(item.size) } : {}),\n dataset_id: item.datasetId,\n ...item,\n };\n\n acc.push(\n omitKeys(\n manifestItem as Record<string, unknown>,\n keysToRemove,\n ) as ManifestItem,\n );\n }\n return acc;\n }, [] as Array<ManifestItem>);\n\n // save files manifest\n await fetchJSONDataFromURL(\n `${GEN3_MANIFEST_API}/`,\n true,\n 'POST' as HttpMethod,\n JSON.stringify(fileManifest),\n signal,\n );\n\n onDone?.();\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.name == 'AbortError') {\n onAbort?.();\n }\n onError?.(error);\n } else onError?.(new Error('unknown error'));\n }\n};\n","import { sendExistingPFBToURL } from './exportActions';\nimport { exportToManifest } from './actions/exportToManifest';\nimport { DataActionFunction } from './types';\nimport { exportMetadataToWorkspace } from './actions/exportDatasetsToWorkspace/exportMetadataToWorkspace';\nimport { exportDataListToWorkspace } from './actions/exportDatasetsToWorkspace/exportDataListsToWorkspace';\n\n// create a factory for the action creators\n\nexport interface ActionCreatorFactoryItem {\n readonly action: DataActionFunction;\n}\n\nconst registeredDataLibraryActions: Record<string, ActionCreatorFactoryItem> =\n {};\n\nexport const NullAction: DataActionFunction = (): Promise<void> => {\n return new Promise<void>((done) => {\n if (done) done();\n });\n};\n\nexport const registerAction = (\n actionName: string,\n action: ActionCreatorFactoryItem,\n) => {\n registeredDataLibraryActions[actionName] = action;\n};\n\nexport const findAction = (\n actionName?: string,\n): ActionCreatorFactoryItem | undefined => {\n if (actionName === undefined) {\n console.error('DataLibrary: findAction: no name provided');\n return undefined;\n }\n\n if (!(actionName in registeredDataLibraryActions)) {\n console.error('getButtonAction: no action found for', actionName);\n return undefined;\n }\n return registeredDataLibraryActions[actionName];\n};\n\nexport const registerDefaultDataLibraryActions = () => {\n registerAction('export-pfb-to-url', {\n action: sendExistingPFBToURL,\n });\n registerAction('export-from-discovery-to-manifest', {\n action: exportToManifest,\n });\n registerAction('export-from-discovery-to-workspace', {\n action: exportMetadataToWorkspace,\n });\n registerAction('export-from-files-to-workspace', {\n action: exportMetadataToWorkspace,\n });\n registerAction('export-datalist-to-workspace', {\n action: exportDataListToWorkspace,\n });\n};\n\nregisterDefaultDataLibraryActions();\n","import React, { useCallback, useMemo, useState } from 'react';\nimport {\n Button,\n ComboboxItem,\n Group,\n Modal,\n ModalProps,\n Select,\n Stack,\n Text,\n} from '@mantine/core';\nimport { notifications } from '@mantine/notifications';\nimport { Icon } from '@iconify-icon/react';\nimport { HTTPError } from '@gen3/core';\nimport { HTTPUserFriendlyErrorMessages } from './utils';\n\nimport SelectedItemsTable from '../tables/SelectedItemsTable';\nimport {\n doesGroupFailRule,\n doesItemFailRule,\n getActionById,\n} from '../selection/selectedItemActions';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { useDataLibrarySelection } from '../selection/SelectionContext';\nimport { MRT_RowSelectionState } from 'mantine-react-table';\nimport { ValidatedSelectedItem } from '../types';\nimport {\n DataLibraryActionConfig,\n DataLibraryActionsConfig,\n} from '../selection/types';\nimport {\n ActionCreatorFactoryItem,\n findAction,\n NullAction,\n} from '../selection/registeredActions';\n\nconst ModalHeader = () => {\n return (\n <div className=\"flex justify-between items-center mx-1\">\n <Text fw={600} className=\"text-heading\" c=\"secondary-contrast.5\">\n Retrieve Data\n </Text>\n </div>\n );\n};\n\nconst bindAction = (action: DataLibraryActionConfig) => {\n const actionFunction = findAction(action.actionFunction);\n if (!actionFunction) {\n return NullAction;\n }\n return actionFunction.action;\n};\n\ninterface SelectedItemsModelProps extends ModalProps {\n actions: DataLibraryActionsConfig;\n}\n\ninterface ActionFunctionWithParams extends ActionCreatorFactoryItem {\n parameters?: Record<string, any>;\n}\n\nconst SelectedItemsModal: React.FC<SelectedItemsModelProps> = (props) => {\n const [value, setValue] = useState<ComboboxItem | null>(null);\n const { actions } = props;\n const { gatheredItems } = useDataLibrarySelection();\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n const [actionFunction, setActionFunction] =\n useState<ActionFunctionWithParams>({ action: NullAction });\n const [actionConfig, setActionConfig] =\n useState<DataLibraryActionConfig | null>(null);\n const [isRunning, setIsRunning] = useState(false);\n\n const destinations = useMemo(() => {\n return actions.map((action) => {\n return { label: action.label, value: action.id };\n });\n }, [actions]);\n\n const onError = (error: HTTPError | Error) => {\n setIsRunning(false);\n console.warn('Error running action:', error);\n if (error instanceof HTTPError) {\n notifications.show({\n id: 'data-library-selection-action-error',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Action Error',\n message: HTTPUserFriendlyErrorMessages[error.status],\n color: 'red',\n icon: <Icon icon=\"gen3:error-outline\" />,\n loading: false,\n });\n }\n };\n\n const onDone = (arg?: string) => {\n setIsRunning(false);\n notifications.show({\n id: 'data-library-selection-action-done',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Submission Complete',\n message: actionConfig\n ? `${actionConfig.label} completed successfully`\n : 'Completed successfully',\n loading: false,\n });\n };\n\n const setSelectionAction = useCallback(\n (actionId: string) => {\n const actionConfig = getActionById(actions, actionId);\n if (actionConfig) {\n setActionConfig(actionConfig);\n const action = bindAction(actionConfig);\n if (action)\n setActionFunction({\n action: action,\n parameters: actionConfig.parameters,\n });\n return;\n }\n setActionFunction({ action: NullAction });\n },\n [actions],\n );\n\n const validatedLibrarySelections =\n useDeepCompareMemo((): ReadonlyArray<ValidatedSelectedItem> => {\n // get the action\n const action = getActionById(actions, value?.value);\n // if there are no actions then everything is valid\n if (!action)\n return gatheredItems.map((item) => {\n return { ...item, valid: undefined };\n });\n // get all selected items\n const selectedActionItems = gatheredItems.filter((_, index) =>\n Object.hasOwn(rowSelection, index),\n );\n // apply group rules of action if any fail then add error message and set flag\n const groupFailsRule = doesGroupFailRule(selectedActionItems, action);\n const validItems = gatheredItems.map((item, index) => {\n if (rowSelection[index]) {\n // if selected then validate item rules\n const itemFailsRule = doesItemFailRule(item, action);\n\n const itemAndGroupTestMessages = [\n ...itemFailsRule,\n ...groupFailsRule,\n ];\n if (itemAndGroupTestMessages.length > 0)\n return {\n ...item,\n valid: false,\n errorMessages: itemAndGroupTestMessages,\n };\n\n // defaults return true\n return { ...item, valid: true };\n } // no selection so all items are valid\n else return { ...item, valid: undefined };\n });\n\n return validItems;\n }, [gatheredItems, rowSelection, actions, value]);\n\n const actionButtonDisabled =\n actionFunction.action === NullAction ||\n validatedLibrarySelections.length === 0 ||\n validatedLibrarySelections.some((x) => x.valid === false);\n\n return (\n <Modal\n {...props}\n closeOnEscape\n centered\n withinPortal={false}\n title={<ModalHeader />}\n classNames={{\n header: 'm-0 p-2 min-h-10 bg-secondary',\n content: 'scroll-smooth',\n }}\n overlayProps={{ opacity: 0.5 }}\n >\n <Stack>\n <SelectedItemsTable\n validatedItems={validatedLibrarySelections}\n rowSelection={rowSelection}\n setRowSelection={setRowSelection}\n />\n <Group justify=\"space-between\">\n <Group>\n <Text fw={600}>Destination:</Text>\n <Select\n data={destinations}\n value={value ? value.value : null}\n onChange={(value, option) => {\n setValue(option);\n if (value) setSelectionAction(value);\n else setActionFunction({ action: NullAction });\n }}\n />\n </Group>\n <Button\n loading={isRunning}\n rightSection={\n actionConfig?.rightIcon ? (\n <Icon icon={actionConfig?.rightIcon} />\n ) : undefined\n }\n disabled={actionButtonDisabled}\n onClick={async () => {\n setIsRunning(true);\n await actionFunction.action(\n validatedLibrarySelections,\n actionFunction.parameters,\n onDone,\n onError,\n );\n }}\n >\n {actionConfig ? actionConfig.buttonLabel : 'Submit'}\n </Button>\n </Group>\n </Stack>\n </Modal>\n );\n};\n\nexport default SelectedItemsModal;\n","import { ListMembers, SelectedMembers } from './SelectionContext';\nimport { DatalistMembers, DatasetContents } from '../types';\nimport {\n CohortItem,\n Datalist,\n isCohortItem,\n isFileItem,\n DataLibraryDataset,\n} from '@gen3/core';\n\n/**\n * Extracts and consolidates GUIDs and IDs from dataset contents into a single object.\n *\n * @param {DatasetContents} dataset - The dataset containing files and queries to extract IDs from.\n * @returns {SelectedMembers} An object where each key is a unique identifier from the dataset,\n * with a boolean value set to true.\n */\nconst getObjectIds = (dataset: DatasetContents): SelectedMembers => {\n return [\n ...dataset.files.map((file) => file.id),\n ...dataset.queries.map((query) => query.id),\n ].reduce((acc: SelectedMembers, key) => {\n acc[key] = true;\n return acc;\n }, {});\n};\n\n/**\n * Function that generates a mapping of dataset IDs to their respective member objects.\n *\n * @param {Array<string>} datasetIds - Array of dataset IDs to be processed.\n * @param {DatalistMembers} datasetContents - Object containing details about dataset members.\n * @returns {ListMembers} - An object mapping each dataset ID to its respective member objects.\n */\nexport const selectAllDatasetMembers = (\n datasetIds: Array<string>,\n datasetContents: DatalistMembers,\n): ListMembers => {\n return datasetIds.reduce((acc: ListMembers, datasetId) => {\n acc[datasetId] = {\n id: datasetId,\n objectIds: getObjectIds(datasetContents[datasetId]),\n };\n return acc;\n }, {});\n};\n\n/**\n * Retrieves the members of a given dataset or cohort.\n *\n * This function takes either a dataset or a cohort item and returns an\n * object representing the selected members. In the case of a cohort item,\n * it returns an object with the cohort's ID set to true. For a dataset,\n * it iterates through the dataset items and sets the keys of file items\n * to true in the returned object.\n *\n * @param {DataLibraryDataset | CohortItem} dataSetOrCohort - The dataset or cohort item to process.\n * @returns {SelectedMembers} An object representing the selected members.\n */\nexport const getDatasetMembers = (\n dataSetOrCohort: DataLibraryDataset | CohortItem,\n): SelectedMembers => {\n if (isCohortItem(dataSetOrCohort)) {\n return { [dataSetOrCohort.id]: true };\n }\n return Object.entries(dataSetOrCohort.members).reduce(\n (acc: SelectedMembers, [key, item]) => {\n if (isFileItem(item)) acc[key] = true;\n return acc;\n },\n {},\n );\n};\n\n/**\n * Selects all list items from the provided data list and transforms them into a ListMembers structure.\n *\n * @param {Datalist} members - The data list containing items to be transformed.\n * @return {ListMembers} - Transformed structure containing the selected list items with dataset IDs and their corresponding object IDs.\n */\nexport const selectAllListItems = (members: Datalist): ListMembers => {\n return Object.entries(members.items).reduce(\n (acc: ListMembers, [datasetId, datasetContents]) => {\n if (isCohortItem(datasetContents)) {\n acc[datasetId] = {\n id: datasetId,\n objectIds: { [datasetId]: true },\n };\n } else\n acc[datasetId] = {\n id: datasetId,\n objectIds: getDatasetMembers(datasetContents),\n };\n\n return acc;\n },\n {},\n );\n};\n","import React from 'react';\nimport { Group, ThemeIcon, Text } from '@mantine/core';\nimport { IoMdInformationCircleOutline as InformIcon } from 'react-icons/io';\n\nconst EmptyList: React.FC = () => {\n return (\n <Group gap=\"xs\" classNames={{ root: 'w-100' }}>\n <span className=\"text-utility-warning\">\n <InformIcon size=\"1.5rem\" />\n </span>\n <Text fw={600}>list is empty</Text>\n </Group>\n );\n};\n\nexport default EmptyList;\n","/**\n * Converts a date into a string of YYYY-MM-DD padding 0 for months and days \\< 10.\n * Note the use of UTC to ensure the GMT timezone.\n * @param d - date to convert\n */\nexport const convertDateToString = (d: Date | null): string | undefined => {\n if (d === null) return undefined;\n return `${d.getUTCFullYear()}-${(d.getUTCMonth() + 1) //UTC Months start at 0\n .toString()\n .padStart(2, '0')}-${d.getUTCDate().toString().padStart(2, '0')}`;\n};\n\n// https://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript\n/**\n * Returns a formatted timestamp string based on the provided date or the current date.\n *\n * @param options - An object containing the following optional parameters:\n * @param options.date - A Date object to format. If not provided, uses the current date.\n * @param options.includeTimes - Boolean to include time in the output. Defaults to false.\n * @returns A timestamp in the format 'YYYY-MM-DD' if includeTimes is false, or 'YYYY-MM-DD.HHMMSS' if true.\n * If date is null it returns undefined\n *\n * Uses the Swedish (\"sv-SE\") locale for consistent formatting (YYYY-MM-DD HH:MM:SS).\n * Explicitly sets the time zone to the system's local time zone.\n */\nexport function getFormattedTimestamp(\n options: {\n date?: Date | null;\n includeTimes?: boolean;\n } = {},\n): string | undefined {\n const { date = new Date(), includeTimes = false } = options;\n if (date === null) return undefined;\n\n const formatOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n if (includeTimes) {\n Object.assign(formatOptions, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n }\n\n const formattedDate = date.toLocaleString('sv-SE', formatOptions);\n\n if (includeTimes) {\n return formattedDate.replace(' ', '.').replace(/[:]/g, '');\n } else {\n return formattedDate;\n }\n}\n\n/**\n * Formats a given date string into a specific format.\n *\n * @param {string} datestr - The date string to be formatted.\n * @returns {string} The formatted date string.\n * @throws {Error} Throws an error if the provided date string is invalid or the format is incorrect.\n *\n * The function parses the provided date string into a timestamp.\n */\nexport const formatDate = (datestr: string): string => {\n const timestamp = Date.parse(datestr);\n if (isNaN(timestamp)) {\n throw new Error('Invalid date string');\n }\n\n const date = new Date(timestamp);\n\n const parts = new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n timeZone: 'UTC',\n })\n .formatToParts(date)\n .filter((p) => p.type !== 'literal') // Filter out literal types like spaces and commas\n .map((p) => p.value);\n\n if (parts.length !== 6) throw new Error('format date wrong length');\n\n const day = parts.slice(0, 3).join('-');\n const time = parts.slice(3).join(':');\n return `${day} ${time}`;\n};\n","import React, { useState } from 'react';\nimport {\n Accordion,\n AccordionControlProps,\n ActionIcon,\n Checkbox,\n CloseButton,\n Text,\n TextInput,\n Tooltip,\n useMantineTheme,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { getHotkeyHandler } from '@mantine/hooks';\nimport { DataItemSelectedState } from './types';\nimport EmptyList from './EmptyList';\nimport { IconSize } from '../../utils/sizes';\nimport { formatDate } from '../../utils/date';\nimport { StorageOperationResults } from '@gen3/core';\n\ninterface DatasetAccordionControlProps extends AccordionControlProps {\n listName: string;\n numberOfItems: number;\n updatedTime: string;\n createdTime: string;\n updateHandler: (\n update: Record<string, any>,\n ) => Promise<StorageOperationResults>;\n deleteListHandler: () => Promise<StorageOperationResults>;\n selectListHandler: (checked: boolean) => void;\n selectedState: DataItemSelectedState;\n size?: string;\n}\n\nexport const DatasetAccordionControl = ({\n listName,\n numberOfItems,\n updatedTime,\n createdTime,\n updateHandler,\n deleteListHandler,\n selectListHandler,\n selectedState,\n size = 'sm',\n ...props\n}: DatasetAccordionControlProps): JSX.Element => {\n const [value, setValue] = useState<string | undefined>(undefined);\n const handleUpdateName = () => {\n updateHandler({ name: value });\n setValue(undefined);\n };\n const theme = useMantineTheme();\n const iconSize = IconSize[size] || IconSize['sm'];\n return (\n <div className=\"flex justify-start w-full items-center px-4 group-data-[active]:bg-secondary-lightest\">\n <div className=\"flex items-center w-1/4\">\n <Checkbox\n size={size}\n onChange={(event) => {\n selectListHandler(event.currentTarget.checked);\n event.stopPropagation();\n }}\n checked={selectedState == 'checked'}\n indeterminate={selectedState == 'indeterminate'}\n />\n <Accordion.Control {...props} className=\"w-4 mr-3\" />\n {value ? (\n <TextInput\n size={size}\n classNames={{ root: 'ml-2', input: 'font-bold' }}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={getHotkeyHandler([['Enter', handleUpdateName]])}\n rightSection={\n <CloseButton\n aria-label=\"Clear input\"\n onClick={() => setValue(undefined)}\n style={{ display: value ? undefined : 'none' }}\n />\n }\n />\n ) : (\n <div className=\"flex items-center justify-end\">\n <Text\n fw={600}\n className=\"ml-2 w-100 py-2 mr-2\"\n aria-label={listName}\n size={size}\n >\n {listName}\n </Text>\n <Tooltip label=\"Change name of list\">\n <ActionIcon\n color=\"accent.4\"\n variant=\"transparent\"\n aria-label=\"Change datalist name\"\n onClick={() => setValue(listName)}\n >\n <Icon\n icon=\"gen3:edit\"\n height={iconSize}\n width={iconSize}\n color={theme.colors.accent[4]}\n />\n </ActionIcon>\n </Tooltip>\n </div>\n )}\n </div>\n <div className=\"flex items-center ml-auto space-x-2\">\n {numberOfItems === 0 && <EmptyList />}\n <div className=\"flex items-center space-x-2\">\n <Text fw={600} c=\"base-contrast.2\" tt=\"uppercase\" size={size}>\n Created:\n </Text>\n <Text fw={500} c=\"base-contrast.2\" size={size}>\n {formatDate(createdTime)}\n </Text>\n\n <Icon\n icon=\"gen3:dot\"\n height={iconSize}\n width={iconSize}\n color={theme.colors.accent[4]}\n />\n\n <Text fw={600} c=\"base-contrast.2\" tt=\"uppercase\" size={size}>\n Updated:\n </Text>\n <Text fw={500} c=\"base-contrast.2\" size={size}>\n {formatDate(updatedTime)}\n </Text>\n </div>\n <Tooltip\n label={`Delete list ${listName}. Will not delete the actual dataset`}\n >\n <ActionIcon\n color=\"accent.4\"\n variant=\"transparent\"\n aria-label=\"delete list\"\n onClick={() => deleteListHandler()}\n >\n <Icon\n icon=\"gen3:delete\"\n height={iconSize}\n width={iconSize}\n color={theme.colors.primary[5]}\n />\n </ActionIcon>\n </Tooltip>\n </div>\n </div>\n );\n};\n","import { MRT_TableOptions } from 'mantine-react-table';\nimport { TableIcons } from '../../../components/Tables/TableIcons';\n\nexport const commonTableSettings = (\n size: string = 'sm',\n): Partial<MRT_TableOptions<any>> => {\n return {\n enableColumnResizing: false,\n icons: TableIcons,\n enableTopToolbar: false,\n enableColumnFilters: false,\n enableColumnActions: false,\n enableRowActions: true,\n enableColumnOrdering: false,\n enableFacetedValues: true,\n enableGrouping: false,\n enableColumnPinning: false,\n enableRowSelection: true,\n enablePagination: false,\n enableSelectAll: false,\n enableExpandAll: false,\n\n displayColumnDefOptions: {\n 'mrt-row-select': {\n size: 5,\n header: '',\n },\n 'mrt-row-expand': {\n size: 5,\n header: '',\n },\n 'mrt-row-actions': {\n header: '',\n },\n },\n\n initialState: {\n density: 'xs',\n columnPinning: {\n left: ['mrt-row-select', 'mrt-row-expand'],\n right: ['mrt-row-actions'],\n },\n },\n layoutMode: 'semantic',\n mantineDetailPanelProps: {\n style: {\n boxShadow: '0 -2px 0px 0px var(--table-border-color) inset',\n },\n },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-1)',\n '--mrt-striped-row-background-color': 'var(--mantine-color-base-3)',\n fontSize: `var(--mantine-font-size-${size})`,\n },\n },\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-table-1)',\n color: 'var(--mantine-color-table-contrast-1)',\n textAlign: 'center',\n fontWeight: 600,\n fontSize: `var(--mantine-font-size-${size})`,\n textTransform: 'uppercase',\n },\n },\n };\n};\n","import { MantineReactTable, useMantineReactTable } from 'mantine-react-table';\nimport { commonTableSettings } from './tableSettings';\nimport { Text } from '@mantine/core';\nimport React from 'react';\n\nconst columns = [\n {\n accessorKey: 'name',\n header: 'Name',\n },\n {\n accessorKey: 'description',\n header: 'Description',\n },\n {\n accessorKey: 'documentation',\n header: 'Documentation',\n },\n];\n\ninterface AdditionalDataTableTableProps {\n data: any;\n header: string;\n size?: string;\n}\n\nconst AdditionalDataTableTable = ({\n data,\n header,\n size = 'sm',\n}: AdditionalDataTableTableProps) => {\n const table = useMantineReactTable({\n columns,\n data: data,\n ...commonTableSettings(size),\n enableRowActions: false,\n enableRowSelection: false,\n enableBottomToolbar: data.length > 10,\n enablePagination: data.length > 10,\n });\n\n return (\n <div className=\"flex flex-col w-inherit gap-y-1\">\n <Text fw={600} fs=\"md\" c=\"secondary.5\" tt=\"uppercase\">\n {header}\n </Text>\n <MantineReactTable table={table} />\n </div>\n );\n};\n\nexport default AdditionalDataTableTable;\n","import {\n MantineReactTable,\n MRT_RowSelectionState,\n MRT_Updater,\n useMantineReactTable,\n} from 'mantine-react-table';\nimport React, { useEffect, useState } from 'react';\nimport { FileItem } from '@gen3/core';\nimport { Button, Text, Tooltip } from '@mantine/core';\nimport { commonTableSettings } from './tableSettings';\nimport { useDataLibrarySelection } from '../selection/SelectionContext';\nimport { MdOutlineRemoveCircle as RemoveIcon } from 'react-icons/md';\n\ninterface FilesTableProps {\n datasetId: string;\n listId: string;\n data: Array<FileItem>;\n header: string;\n size?: string;\n}\n\nconst columns = [\n {\n accessorKey: 'name',\n header: 'Name',\n },\n {\n accessorKey: 'description',\n header: 'Description',\n },\n {\n accessorKey: 'type',\n header: 'Type',\n },\n {\n accessorKey: 'size',\n header: 'Size',\n },\n];\n\nconst FilesTable = ({\n listId,\n datasetId,\n data,\n header,\n size = 'sm',\n}: FilesTableProps) => {\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n\n const { selections, updateListMemberSelections } = useDataLibrarySelection();\n\n useEffect(() => {\n const sel = selections?.[listId]?.[datasetId]?.objectIds ?? {};\n setRowSelection(sel);\n }, [listId, datasetId, selections]);\n\n const handleRowSelectionChange = (\n updater: MRT_Updater<MRT_RowSelectionState>,\n ) => {\n let value = {};\n setRowSelection((prevSelection) => {\n value = updater instanceof Function ? updater(prevSelection) : updater;\n return value;\n });\n updateListMemberSelections(listId, datasetId, value);\n };\n\n const table = useMantineReactTable({\n columns,\n data: data,\n ...commonTableSettings(size),\n enableBottomToolbar: data.length > 10,\n enablePagination: data.length > 10,\n enableRowActions: true,\n enableHiding: true,\n getRowId: (originalRow) => originalRow.id,\n onRowSelectionChange: handleRowSelectionChange,\n state: { rowSelection },\n });\n\n return (\n <div className=\"flex flex-col gap-y-1\">\n <Text fw={600} fs={size} c=\"secondary.5\" tt=\"uppercase\">\n {header}\n </Text>\n <MantineReactTable table={table} />\n </div>\n );\n};\n\nexport default FilesTable;\n","import React, { ReactNode, useState } from 'react';\nimport { Tooltip } from '@mantine/core';\n\ntype OverflowTooltippedLabelProps = {\n children: ReactNode;\n label: string;\n className?: string;\n};\n\nconst OverflowTooltippedLabel = ({\n children,\n label,\n className = 'flex-grow font-heading text-md pt-0.5',\n}: OverflowTooltippedLabelProps): JSX.Element => {\n const [showTooltip, setShowTooltip] = useState(false);\n\n return (\n <Tooltip\n label={label}\n disabled={!showTooltip}\n position=\"top-start\"\n offset={5}\n multiline\n withArrow\n arrowOffset={20}\n classNames={{\n tooltip:\n 'bg-base-min bg-opacity-90 text-base-contrast-min shadow-lg font-content font-medium text-xs',\n arrow: 'bg-base-min bg-opacity-90',\n }}\n >\n <div\n className={`${className} truncate ... `}\n ref={(el) => {\n if (el) {\n if (el.clientWidth < el.scrollWidth) {\n setShowTooltip(true);\n } else {\n setShowTooltip(false);\n }\n }\n }}\n >\n {children}\n </div>\n </Tooltip>\n );\n};\n\nexport default OverflowTooltippedLabel;\n","import React from 'react';\n\ninterface QueryRepresentationLabelProps {\n readonly value: string | number;\n}\n\nconst QueryRepresentationLabel = (\n { value} : QueryRepresentationLabelProps ) => {\n return <React.Fragment>{value}</React.Fragment>;\n};\n\nexport default QueryRepresentationLabel;\n","import React from 'react';\n\nexport interface CollapsedStateReducerAction {\n type: 'expand' | 'collapse' | 'clear' | 'init' | 'expandAll' | 'collapseAll';\n cohortId: string;\n field?: string;\n}\n\nexport const QueryExpressionsExpandedContext = React.createContext<\n [Record<string, boolean>, (action: CollapsedStateReducerAction) => void]\n>([{}, () => null]);\n","import React from \"react\";\nimport {\n clearCohortFilters,\n FilterSet,\n Operation,\n removeCohortFilter,\n setCohortFilter,\n updateCohortFilter,\n useCoreDispatch,\n} from \"@gen3/core\";\n\nexport interface QueryExpressionHooks {\n useClearCohortFilters: () => (index: string) => void;\n useUpdateFilters: () => (\n index: string,\n field: string,\n filter: Operation,\n ) => void;\n useRemoveFilter: () => (index: string, field: string) => void;\n useSetCohortFilters: () => (index: string, filters: FilterSet) => void;\n useGetFilters: (index: string) => FilterSet;\n}\n\nexport interface QueryExpressionContextProps extends QueryExpressionHooks {\n displayOnly: boolean;\n cohortName: string;\n cohortId: string | null;\n shouldShowSummary?: (field: string, count: number) => boolean;\n}\n\nexport const QueryExpressionContext =\n React.createContext<QueryExpressionContextProps>({\n displayOnly: false,\n cohortId: null,\n cohortName: \"default\",\n shouldShowSummary: () => false,\n useClearCohortFilters: () => {\n const dispatch = useCoreDispatch();\n return (index: string) => dispatch(clearCohortFilters({ index }));\n },\n useRemoveFilter: () => {\n const dispatch = useCoreDispatch();\n return (index: string, field: string) =>\n dispatch(\n removeCohortFilter({\n index: index,\n field: field,\n }),\n );\n },\n useUpdateFilters: () => {\n const dispatch = useCoreDispatch();\n return (index: string, field: string, filter: Operation) =>\n dispatch(\n updateCohortFilter({\n index,\n field: field,\n filter: filter,\n }),\n );\n },\n useSetCohortFilters: () => {\n const dispatch = useCoreDispatch();\n return (index: string, filters: FilterSet) =>\n dispatch(\n setCohortFilter({\n index,\n filters: filters,\n }),\n );\n },\n useGetFilters: () => {\n return { mode: \"and\", root: {} } as FilterSet;\n },\n });\n","import React, { PropsWithChildren, ReactElement, useContext } from \"react\";\nimport { get, isArray } from \"lodash\";\nimport {\n buildNestedFilterForOperation,\n Equals,\n ExcludeIfAny,\n Excludes,\n Exists,\n fieldNameToTitle,\n GreaterThan,\n GreaterThanOrEquals,\n handleOperation,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n Missing,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n Union,\n} from \"@gen3/core\";\nimport { ActionIcon, Badge, Divider, Group } from \"@mantine/core\";\nimport {\n MdClose as ClearIcon,\n MdOutlineArrowBack as LeftArrow,\n MdOutlineArrowForward as RightArrow,\n} from \"react-icons/md\";\nimport tw from \"tailwind-styled-components\";\nimport OverflowTooltippedLabel from \"../../../components/OverflowTooltippedLabel\";\nimport QueryRepresentationLabel from \"./QueryRepresentationLabel\";\nimport { QueryExpressionsExpandedContext } from \"./QueryExpressionsExpandedContext\";\nimport { useDeepCompareEffect } from \"use-deep-compare\";\nimport { QueryExpressionContext } from \"./QueryExpressionContext\";\n\nconst RemoveButton = ({ value }: { value: string }) => (\n <ActionIcon\n size=\"xs\"\n color=\"base.0\"\n radius=\"xl\"\n variant=\"transparent\"\n aria-label={`remove ${value}`}\n pl={0}\n pr={0}\n >\n <ClearIcon size={12} aria-hidden=\"true\" />\n </ActionIcon>\n);\nconst QueryRepresentationText = tw.div`\nflex truncate ... px-2 py-1 bg-base-max h-full\n`;\n\nconst QueryFieldLabel = tw.div`\nbg-accent-cool-lightest\ntext-base-darkest\nuppercase\npx-2 pl-1\nborder-primary-darkest\nborder-r-[1.5px]\nflex\nitems-center\n`;\n\nconst QueryItemContainer = tw.div`\nflex\nitems-center\nfont-heading\nshadow-md\nfont-medium\ntext-sm\nborder-[1.5px]\nmr-1\nmb-2\nborder-secondary-darkest\nw-inherit\n`;\n\nconst QueryContainer = tw.div`\nflex\nflex-row\nitems-stretch\nh-full\nbg-base-max\n`;\n\ntype RangeOperation =\n | LessThan\n | LessThanOrEquals\n | GreaterThanOrEquals\n | GreaterThan;\n\ntype ValueOperation = RangeOperation | Equals | NotEquals;\ntype ComparisonOperation = RangeOperation | Equals | NotEquals;\nexport type SetOperation = Includes | Excludes | ExcludeIfAny;\n\nexport const isRangeOperation = (x?: Operation): x is RangeOperation => {\n return (\n x !== undefined &&\n \"operator\" in x &&\n [\">=\", \">\", \"<\", \"<=\"].includes(x.operator)\n );\n};\n\nexport const isValueOperation = (x: Operation): x is ValueOperation => {\n return \"field\" in x;\n};\n\nexport const isNestedFilter = (x: Operation): x is NestedFilter => {\n return \"path\" in x;\n};\n\ninterface IncludeExcludeQueryElementProps\n extends Pick<\n Includes | Excludes | ExcludeIfAny,\n \"field\" | \"operator\" | \"operands\"\n > {\n index: string;\n path?: string;\n displayOnly?: boolean;\n}\n\nconst IncludeExcludeQueryElement = ({\n index,\n field,\n path,\n operator,\n operands,\n displayOnly = false,\n}: IncludeExcludeQueryElementProps) => {\n const [queryExpressionsExpanded, setQueryExpressionsExpanded] = useContext(\n QueryExpressionsExpandedContext,\n );\n\n const {\n cohortId: currentCohortId,\n useRemoveFilter,\n useUpdateFilters,\n shouldShowSummary,\n } = useContext(QueryExpressionContext);\n\n const removeCohortFilter = useRemoveFilter();\n const updateCohortFilter = useUpdateFilters();\n useDeepCompareEffect(() => {\n if (currentCohortId && get(queryExpressionsExpanded, field) === undefined) {\n setQueryExpressionsExpanded({\n type: \"expand\",\n cohortId: currentCohortId,\n field,\n });\n }\n }, [\n field,\n currentCohortId,\n queryExpressionsExpanded,\n setQueryExpressionsExpanded,\n ]);\n\n const expanded = get(queryExpressionsExpanded, field, true);\n const fieldName = fieldNameToTitle(field);\n const operandsArray = isArray(operands) ? operands : [operands];\n\n const showSummaryView = shouldShowSummary\n ? shouldShowSummary(field, operandsArray.length)\n : false;\n\n const getSummaryLabel = () => {\n const count = operandsArray.length.toLocaleString();\n const entityName = fieldNameToTitle(field).toLowerCase();\n return `${count} input ${entityName}s`;\n };\n\n const fieldToUpdate = path && path != \".\" ? [path, field].join(\".\") : field;\n\n return (\n <QueryContainer>\n <QueryFieldLabel>{fieldName}</QueryFieldLabel>\n <ActionIcon\n variant=\"transparent\"\n size=\"xs\"\n onClick={() => {\n if (currentCohortId)\n setQueryExpressionsExpanded({\n type: expanded ? \"collapse\" : \"expand\",\n cohortId: currentCohortId,\n field,\n });\n }}\n color=\"accent\"\n className=\"ml-1 my-auto hover:bg-accent-darker hover:bg-primary]\"\n aria-label={expanded ? `collapse ${fieldName}` : `expand ${fieldName}`}\n aria-expanded={expanded}\n >\n {expanded ? <LeftArrow /> : <RightArrow />}\n </ActionIcon>\n <Divider\n orientation=\"vertical\"\n size=\"xs\"\n className=\"m-1\"\n color=\"base.2\"\n />\n {!expanded ? (\n <b className=\"text-primary-darkest px-2 py-1 flex items-center\">\n {operands.length}\n </b>\n ) : (\n <QueryRepresentationText>\n {showSummaryView ? (\n <Badge\n variant=\"filled\"\n color=\"accent.5\"\n size=\"md\"\n className={`normal-case items-center pr-3 cursor-pointer hover:bg-accent-darker pl-2 ${displayOnly ? \"pr-3\" : \"pr-0\"}`}\n rightSection={!displayOnly && <RemoveButton value=\"all\" />}\n onClick={() => {\n if (displayOnly) return;\n\n if (currentCohortId) {\n setQueryExpressionsExpanded({\n type: \"clear\",\n cohortId: currentCohortId,\n field: fieldToUpdate,\n });\n removeCohortFilter(index, fieldToUpdate);\n }\n }}\n >\n <OverflowTooltippedLabel\n label={getSummaryLabel()}\n className=\"flex-grow text-md font-content\"\n >\n {getSummaryLabel()}\n </OverflowTooltippedLabel>\n </Badge>\n ) : (\n <Group gap=\"xs\">\n {operandsArray.map((x: string | number, i) => {\n const value = x.toString();\n return (\n <Badge\n key={`query-rep-${field}-${value}-${i}`}\n data-testid={`query-rep-${field}-${value}-${i}`}\n variant=\"filled\"\n color=\"accent.5\"\n size=\"md\"\n className={`normal-case items-center max-w-[162px] cursor-pointer hover:bg-accent-darker pl-2 ${displayOnly ? \"pr-3\" : \"pr-0\"}`}\n rightSection={\n !displayOnly && <RemoveButton value={value} />\n }\n onClick={() => {\n if (displayOnly) return;\n const newOperands = operandsArray.filter((o) => o !== x);\n\n if (currentCohortId && newOperands.length === 0) {\n setQueryExpressionsExpanded({\n type: \"clear\",\n cohortId: currentCohortId,\n field: fieldToUpdate,\n });\n\n removeCohortFilter(index, fieldToUpdate);\n } else {\n updateCohortFilter(\n index,\n fieldToUpdate,\n buildNestedFilterForOperation(fieldToUpdate, {\n operator: operator,\n field: field,\n operands: newOperands,\n }),\n );\n }\n }}\n >\n <OverflowTooltippedLabel\n label={value}\n className=\"flex-grow text-md font-content\"\n >\n <QueryRepresentationLabel value={value.toString()} />\n </OverflowTooltippedLabel>\n </Badge>\n );\n })}\n </Group>\n )}\n </QueryRepresentationText>\n )}\n </QueryContainer>\n );\n};\n\ninterface ComparisonElementProps {\n index: string;\n filter: ValueOperation;\n showLabel?: boolean;\n displayOnly?: boolean;\n}\n\nconst ComparisonElement = ({\n index,\n filter,\n showLabel = true,\n displayOnly = false,\n}: ComparisonElementProps) => {\n const { useUpdateFilters } = useContext(QueryExpressionContext);\n const updateCohortFilter = useUpdateFilters();\n\n // fix the code below\n const handleKeepMember = (keep: ValueOperation) => {\n updateCohortFilter(index, keep.field, keep);\n };\n\n return (\n <React.Fragment>\n {showLabel ? (\n <QueryFieldLabel>{fieldNameToTitle(filter.field)}</QueryFieldLabel>\n ) : null}\n <div className=\"flex flex-row items-center\">\n <button\n className=\"h-[25px] w-[25px] mx-2 rounded-[50%] bg-accent-cool-lightest text-accent-cool-lightest-contrast\"\n onClick={() => {\n if (displayOnly) return;\n handleKeepMember(filter);\n }}\n >\n {filter.operator}\n </button>\n <QueryRepresentationText>{filter.operand}</QueryRepresentationText>\n </div>\n </React.Fragment>\n );\n};\n\nconst ExistsElement = ({ field, operator }: Exists | Missing) => {\n return (\n <div className=\"flex flex-row items-center\">\n {fieldNameToTitle(field)} is\n <span className=\"px-1 underline\">{operator}</span>\n </div>\n );\n};\n\ninterface ClosedRangeQueryElementProps {\n readonly index: string;\n readonly lower: ComparisonOperation;\n readonly upper: ComparisonOperation;\n readonly op?: \"and\";\n}\n\nexport const ClosedRangeQueryElement = ({\n index,\n lower,\n upper,\n op = \"and\",\n}: PropsWithChildren<ClosedRangeQueryElementProps>) => {\n const { field } = lower; // As this is a Range the field for both lower and upper will be the same\n\n return (\n <React.Fragment>\n <QueryElement field={field} index={index}>\n <QueryContainer>\n <ComparisonElement filter={lower} index={index} />\n <div className=\"flex items-center\">\n <span className={\"uppercase text-accent-contrast-max font-bold\"}>\n {op}\n </span>\n </div>\n <ComparisonElement filter={upper} showLabel={false} index={index} />\n </QueryContainer>\n </QueryElement>\n </React.Fragment>\n );\n};\n\ninterface QueryElementProps {\n index: string;\n field: string;\n children?: React.ReactNode;\n path?: string;\n displayOnly?: boolean;\n}\n\nexport const QueryElement = ({\n index,\n field,\n path,\n children,\n displayOnly = false,\n}: QueryElementProps) => {\n const [, setQueryExpressionsExpanded] = useContext(\n QueryExpressionsExpandedContext,\n );\n\n const { cohortId: currentCohortId, useRemoveFilter } = useContext(\n QueryExpressionContext,\n );\n\n const removeCohortFilter = useRemoveFilter();\n\n // const currentCohortId = useCoreSelector((state: CoreState) =>\n // selectCurrentCohortId(state),\n // );\n\n const fieldToUpdate = path && path != \".\" ? [path, field].join(\".\") : field;\n\n const handleRemoveFilter = () => {\n removeCohortFilter(index, fieldToUpdate);\n if (currentCohortId)\n setQueryExpressionsExpanded({\n type: \"clear\",\n cohortId: currentCohortId,\n field: fieldToUpdate,\n });\n };\n\n return (\n <QueryItemContainer>\n {children}\n {/* ---\n // TODO: enable facet dropdown\n <button onClick={handlePopupFacet}>\n <DropDownIcon size=\"1.5em\" onClick={handlePopupFacet} />\n </button>\n -- */}\n {!displayOnly && (\n <button\n className=\"bg-accent-vivid p-0 m-0 h-full rounded-r-sm text-white hover:bg-accent-darker\"\n onClick={handleRemoveFilter}\n aria-label={`remove ${fieldNameToTitle(field)}`}\n >\n <ClearIcon size=\"1.5em\" className=\"px-1\" />\n </button>\n )}\n </QueryItemContainer>\n );\n};\n\n/**\n * Processes a Filter into a component representation\n */\nclass CohortFilterToComponent implements OperationHandler<ReactElement> {\n private readonly index: string;\n private readonly path?: string;\n private readonly displayOnly?: boolean;\n\n constructor(index: string, path = \".\", displayOnly = false) {\n this.index = index;\n this.path = path;\n this.displayOnly = displayOnly;\n }\n\n handleIncludes = (f: Includes) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <IncludeExcludeQueryElement\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleExcludes = (f: Excludes) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <IncludeExcludeQueryElement\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleEquals = (f: Equals) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleNotEquals = (f: NotEquals) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleLessThan = (f: LessThan) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleLessThanOrEquals = (f: LessThanOrEquals) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleGreaterThan = (f: GreaterThan) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleGreaterThanOrEquals = (f: GreaterThanOrEquals) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ComparisonElement\n filter={f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n handleExists = (f: Exists) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ExistsElement {...f} />\n </QueryElement>\n );\n handleMissing = (f: Missing) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <ExistsElement {...f} />\n </QueryElement>\n );\n handleExcludeIfAny = (f: ExcludeIfAny) => (\n <QueryElement\n key={f.field}\n {...f}\n index={this.index}\n path={this.path}\n displayOnly={this.displayOnly}\n >\n <IncludeExcludeQueryElement\n {...f}\n index={this.index}\n displayOnly={this.displayOnly}\n />\n </QueryElement>\n );\n\n handleIntersection = (f: Intersection) => {\n if (f.operands.length < 1) return null as unknown as ReactElement;\n\n // special case of ranges combined with AND\n if (\n f.operands.length == 2 &&\n isRangeOperation(f.operands[0]) &&\n isRangeOperation(f.operands[1])\n ) {\n return (\n <ClosedRangeQueryElement\n index={this.index}\n key={(f.operands[0] as ComparisonOperation).field}\n lower={f.operands[0] as ComparisonOperation}\n upper={f.operands[1] as ComparisonOperation}\n />\n );\n }\n // TODO: handle deeper nesting\n return null as unknown as ReactElement;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n handleUnion = (_f: Union) => {\n return <div>Union</div>;\n };\n handleNestedFilter = (op: NestedFilter) => {\n if (isNestedFilter(op.operand)) {\n const newOp = {\n ...op.operand,\n path: [op.path, op.operand.path].join(\".\"),\n } as NestedFilter;\n return convertFilterToComponent(\n newOp,\n this.index,\n [op.path, op.operand.path].join(\".\"),\n this.displayOnly,\n );\n } else {\n return convertFilterToComponent(\n op.operand,\n this.index,\n op.path,\n this.displayOnly,\n );\n }\n };\n}\n\nexport const convertFilterToComponent = (\n filter: Operation,\n index: string,\n path = \".\",\n displayOnly = false,\n): ReactElement => {\n const handler: OperationHandler<ReactElement> = new CohortFilterToComponent(\n index,\n path,\n displayOnly,\n );\n return handleOperation(handler, filter);\n};\n","export const SecondaryTabStyle =\n 'flex flex-row items-center bg-base-max text-primary border font-medium ' +\n 'border-solid border-primary hover:bg-secondary-darker ' +\n 'hover:text-secondary-content-lightest rounded-md first:border-r-0 ' +\n 'last:border-l-0 first:rounded-r-none last:rounded-l-none ' +\n 'hover:border-secondary data-active:bg-secondary ' +\n 'data-active:text-secondary-content-max';\n\nexport const getCombinedClassesExpandCollapseQuery = (\n allQueryExpressionsCollapsed: boolean,\n) => {\n const baseClasses =\n 'flex gap-0 items-center border-1 border-base-max rounded-md';\n const dynamicClasses = allQueryExpressionsCollapsed\n ? 'text-primary bg-base-max'\n : 'text-base-max bg-transparent';\n const disabledClasses = 'disabled:opacity-50';\n const enabledHoverClasses =\n 'enabled:hover:bg-primary-darkest enabled:hover:text-primary-content-lightest enabled:hover:border-primary-darkest';\n return `${dynamicClasses} ${disabledClasses} ${enabledHoverClasses} ${baseClasses}`;\n};\n\nexport const getCombinedClassesForRowCollapse = (\n filtersSectionCollapsed: boolean,\n) => {\n const baseClasses = 'border-1 border-white rounded-md flex items-center';\n const dynamicClasses = !filtersSectionCollapsed\n ? 'text-primary bg-base-max'\n : 'text-base-max bg-transparent';\n const disabledClasses =\n 'disabled:opacity-50 disabled:bg-base-max disabled:text-primary';\n const enabledHoverClasses =\n 'enabled:hover:bg-primary-darkest enabled:hover:text-primary-content-lightest enabled:hover:border-primary-darkest';\n return `${disabledClasses} ${enabledHoverClasses} ${baseClasses} ${dynamicClasses}`;\n};\n","import React, { useState } from 'react';\nimport { Button, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\n\ninterface JsonFileSaverProps {\n getData: () => object;\n filename?: string;\n label?: string;\n tooltip?: string;\n icon?: string;\n disabled?: boolean;\n}\n\nconst JSONObjectDownloadButton: React.FC<JsonFileSaverProps> = ({\n getData,\n filename = 'data.json',\n icon = 'gen3:download',\n disabled = false,\n tooltip,\n}) => {\n const [isDownloading, setIsDownloading] = useState(false);\n\n const saveToJSONFile = async () => {\n setIsDownloading(true);\n\n try {\n const data = getData();\n // Create blob from JSON data\n const blob = new Blob([JSON.stringify(data, null, 2)], {\n type: 'application/json',\n });\n\n // Create URL for the blob\n const url = URL.createObjectURL(blob);\n\n // Create temporary link element\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n\n // Append to document, click, and cleanup\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Error saving file:', error);\n } finally {\n setIsDownloading(false);\n }\n };\n\n return (\n <Tooltip label={tooltip} disabled={!tooltip}>\n <Button\n variant=\"outline\"\n onClick={saveToJSONFile}\n disabled={isDownloading || disabled}\n loading={isDownloading}\n classNames={{ root: 'bg-base-max' }}\n className=\"flex items-center gap-2\"\n >\n <Icon icon={icon} height=\"1.5rem\"></Icon>\n </Button>\n </Tooltip>\n );\n};\n\nexport default JSONObjectDownloadButton;\nJSONObjectDownloadButton.displayName = 'JSONObjectDownloadButton';\n","import React, { useState } from 'react';\nimport { Button, FileButton, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\n\ninterface UploadJSONButtonProps {\n handleFileChange: (data: string) => void;\n icon?: string;\n tooltip?: string;\n}\n\nconst UploadJSONButton: React.FC<UploadJSONButtonProps> = ({\n handleFileChange,\n tooltip,\n icon = 'gen3:upload',\n}) => {\n const [file, setFile] = useState<File | null>(null);\n const [processingFile, setProcessingFile] = useState(false);\n\n return (\n <FileButton\n onChange={async (file) => {\n if (file !== null) {\n setProcessingFile(true);\n const contents = await file.text();\n handleFileChange(contents);\n setProcessingFile(false);\n }\n }}\n accept=\"application/json\"\n >\n {(props) => (\n <Tooltip label={tooltip} disabled={!tooltip}>\n <Button\n {...props}\n loading={processingFile}\n variant=\"outline\"\n classNames={{ root: 'bg-base-max' }}\n >\n <Icon icon={icon} height=\"1.5rem\"></Icon>\n </Button>\n </Tooltip>\n )}\n </FileButton>\n );\n};\n\nexport default UploadJSONButton;\n","import React from 'react';\nimport { Group, Select, Tooltip } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport JSONObjectDownloadButton from '../../components/Buttons/DownloadButtons/JSONObjectDownloadButton';\nimport {\n type Cohort,\n type IndexedFilterSet,\n selectAvailableCohorts,\n selectCohortFilters,\n selectCurrentCohortId,\n selectCurrentCohortModified,\n selectCurrentCohortSaved,\n setCohortIndexFilters,\n setCurrentCohortId,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { useDeepCompareCallback, useDeepCompareMemo } from 'use-deep-compare';\nimport UploadJSONButton from '../../components/Buttons/UploadJSONButton';\n\nexport const UnsavedIcon = ({ label }: { label: string }): JSX.Element => (\n <Tooltip label={label} withArrow>\n <span className=\"leading-0 pointer-events-auto\">\n <Icon icon=\"gen3:cohort-unsaved\" aria-hidden=\"true\" height=\"1.5rem\" />\n </span>\n </Tooltip>\n);\n\ninterface CohortSelectorProps {\n showSelectedCohorts?: boolean;\n}\n\nconst CohortSelector: React.FC<CohortSelectorProps> = ({\n showSelectedCohorts = true,\n}) => {\n const coreDispatch = useCoreDispatch();\n const cohorts = useCoreSelector(selectAvailableCohorts);\n const currentCohortId = useCoreSelector(selectCurrentCohortId);\n const filters: IndexedFilterSet = useCoreSelector(selectCohortFilters);\n const currentCohortModified = useCoreSelector(selectCurrentCohortModified);\n const currentCohortSaved = useCoreSelector(selectCurrentCohortSaved);\n const cohortStatusMessage = currentCohortSaved\n ? 'Changes not saved'\n : 'Cohort not saved';\n const isSavedUnchanged = currentCohortSaved && !currentCohortModified;\n\n const getData = useDeepCompareCallback(() => {\n return filters;\n }, [filters]);\n\n const setCohort = useDeepCompareCallback(\n (data: string) => {\n const jsonForm = JSON.parse(data);\n coreDispatch(\n setCohortIndexFilters({ filters: jsonForm as IndexedFilterSet }),\n );\n },\n [coreDispatch],\n );\n\n const handleCohortChange = useDeepCompareCallback(\n (id: string) => {\n coreDispatch(setCurrentCohortId(id));\n },\n [coreDispatch],\n );\n\n const cohortList = useDeepCompareMemo(\n () =>\n cohorts\n .sort((a: Cohort, b: Cohort) =>\n a.modifiedDatetime <= b.modifiedDatetime ? 1 : -1,\n )\n .map((x) => ({\n value: x.id,\n label: x.name,\n isSavedUnchanged: x.saved && !x.modified,\n cohortStatusMessage: x.saved\n ? 'Changes not saved'\n : 'Cohort not saved',\n })),\n [cohorts],\n );\n\n return (\n <Group>\n <Select\n data={cohortList}\n searchable\n clearable={false}\n value={currentCohortId}\n onChange={(id) => {\n if (id !== null) {\n handleCohortChange(id);\n }\n }}\n classNames={{\n root: 'border-secondary-darkest w-56 md:w-80 z-[290]',\n input:\n 'text-heading font-medium text-primary-darkest rounded-l-none h-[50px] border-primary border-l-2',\n option:\n 'text-heading font-normal text-primary-darkest data-selected:bg-primary-lighter hover:bg-accent-lightest hover:text-accent-contrast-lightest my-0.5',\n }}\n aria-label=\"Select cohort\"\n data-testid=\"switchButton\"\n rightSection={\n <div className=\"flex gap-1 items-center\">\n {!isSavedUnchanged && <UnsavedIcon label={cohortStatusMessage} />}\n <Icon\n icon=\"gen3:caret-down\"\n height=\"1.5rem\"\n className=\"text-primary\"\n />\n </div>\n }\n rightSectionWidth={!isSavedUnchanged ? 45 : 30}\n styles={{ section: { pointerEvents: 'none' } }}\n />\n <JSONObjectDownloadButton\n getData={getData}\n filename=\"cohort.json\"\n tooltip=\"Export Cohort\"\n />\n <UploadJSONButton handleFileChange={setCohort} tooltip=\"Import Cohort\" />\n </Group>\n );\n};\n\nexport default CohortSelector;\n","import React, { useContext, useReducer, useRef, useState } from 'react';\nimport { Button, Tooltip } from '@mantine/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport {\n MdKeyboardArrowDown as DownArrowIcon,\n MdKeyboardArrowUp as UpArrowIcon,\n} from 'react-icons/md';\nimport { Icon } from '@iconify-icon/react';\nimport tw from 'tailwind-styled-components';\nimport { omit } from 'lodash';\nimport { FilterSet, Operation } from '@gen3/core';\nimport OverflowTooltippedLabel from '../../../components/OverflowTooltippedLabel';\nimport { convertFilterToComponent } from './QueryRepresentation';\nimport {\n CollapsedStateReducerAction,\n QueryExpressionsExpandedContext,\n} from './QueryExpressionsExpandedContext';\n\nimport { QueryExpressionContext } from './QueryExpressionContext';\n\nimport {\n getCombinedClassesExpandCollapseQuery,\n getCombinedClassesForRowCollapse,\n} from '../style';\nimport CohortSelector from '../CohortSelector';\n\nconst QueryExpressionContainer = tw.div`\n flex\n items-center\n bg-base-min\n shadow-[0_-2px_6px_0_rgba(0,0,0,0.16)]\n border-secondary-darkest\n border-1\n border-l-4\n my-4\n mx-3\n`;\n\nconst MAX_HEIGHT_QE_SECTION = 120;\nconst MIN_HEIGHT_QE_SECTION = 75;\n\nconst reducer = (\n state: Record<string, Record<string, boolean>>,\n action: CollapsedStateReducerAction,\n) => {\n switch (action.type) {\n case 'init':\n return {\n ...state,\n [action.cohortId]: {},\n };\n case 'expand':\n if (action.field) {\n return {\n ...state,\n [action.cohortId]: {\n ...state[action.cohortId],\n [action.field]: true,\n },\n };\n } else\n return {\n ...state,\n [action.cohortId]: { ...state[action.cohortId] },\n };\n case 'collapse':\n if (action.field)\n return {\n ...state,\n [action.cohortId]: {\n ...state[action.cohortId],\n [action.field]: false,\n },\n };\n else\n return {\n ...state,\n [action.cohortId]: { ...state[action.cohortId] },\n };\n case 'expandAll':\n return {\n ...state,\n [action.cohortId]: Object.fromEntries(\n Object.keys(state[action.cohortId]).map((q) => [q, true]),\n ),\n };\n case 'collapseAll':\n return {\n ...state,\n [action.cohortId]: Object.fromEntries(\n Object.keys(state[action.cohortId]).map((q) => [q, false]),\n ),\n };\n case 'clear':\n if (!action.field) {\n return { ...state, [action.cohortId]: {} };\n } else {\n return {\n ...state,\n [action.cohortId]: omit(state[action.cohortId], action.field),\n };\n }\n }\n};\n\ninterface QueryExpressionHooks {\n useClearCohortFilters: () => (index: string) => void;\n useUpdateFilters: () => (\n index: string,\n field: string,\n filter: Operation,\n ) => void;\n useRemoveFilter: () => (index: string, field: string) => void;\n useSetCohortFilters: () => (index: string, filters: FilterSet) => void;\n}\n\ninterface QueryExpressionSectionProps {\n index: string;\n showImportExport?: boolean;\n displayOnly?: boolean;\n showTitle?: boolean;\n}\n\nconst QueryExpressionSection: React.FC<QueryExpressionSectionProps> = ({\n index,\n showImportExport = false,\n displayOnly = false,\n showTitle = true,\n}: Readonly<QueryExpressionSectionProps>) => {\n const [expandedState, setExpandedState] = useReducer(reducer, {});\n const [filtersSectionCollapsed, setFiltersSectionCollapsed] = useState(true);\n const filtersRef = useRef<HTMLDivElement>(null);\n const [QESectionHeight, setQESectionHeight] = useState(0);\n\n const { cohortName, cohortId, useClearCohortFilters, useGetFilters } =\n useContext(QueryExpressionContext);\n const clearCohortFilters = useClearCohortFilters();\n const filters = useGetFilters(index);\n useDeepCompareEffect(() => {\n if (filtersRef.current) {\n const height = filtersRef.current.scrollHeight;\n setQESectionHeight(\n height > MAX_HEIGHT_QE_SECTION\n ? MAX_HEIGHT_QE_SECTION\n : height === 0\n ? MIN_HEIGHT_QE_SECTION\n : height,\n );\n }\n }, [expandedState, filters, filtersRef]);\n\n const clearAllFilters = () => {\n clearCohortFilters(index);\n if (cohortId)\n setExpandedState({\n type: 'clear',\n cohortId: cohortId,\n field: 'unset',\n });\n };\n const allQueryExpressionsCollapsed = Object.values(\n (cohortId && expandedState?.[cohortId]) || {},\n ).every((q) => !q);\n\n const noFilters = Object.keys(filters?.root || {}).length === 0;\n\n useDeepCompareEffect(() => {\n if (cohortId && expandedState?.[cohortId] === undefined) {\n setExpandedState({\n type: 'init',\n cohortId: cohortId,\n field: 'unset',\n });\n }\n }, [cohortId, expandedState]);\n\n return (\n <QueryExpressionContainer>\n <QueryExpressionsExpandedContext.Provider\n value={[cohortId ? expandedState[cohortId] : {}, setExpandedState]}\n >\n <div className=\"flex flex-col w-full bg-primary-lighter\">\n <div\n data-testid=\"text-cohort-filters-top-row\"\n className=\"flex flex-row py-2 items-center border-secondary-darkest border-b-1\"\n >\n {showTitle && (\n <OverflowTooltippedLabel\n label={cohortName}\n className=\"font-bold text-secondary-contrast-darkest ml-3 max-w-[260px]\"\n >\n {cohortName}\n </OverflowTooltippedLabel>\n )}\n <React.Fragment>\n {!displayOnly && (\n <button\n data-testid=\"button-clear-all-cohort-filters\"\n className={`text-sm font-montserrat ml-2 px-1 hover:bg-primary-darkest hover:text-primary-content-lightest hover:rounded-md ${\n noFilters\n ? 'hidden'\n : 'cursor-pointer text-secondary-contrast-darkest'\n }`}\n onClick={clearAllFilters}\n disabled={noFilters}\n >\n Clear All\n </button>\n )}\n <div className=\"display flex gap-2 ml-auto mr-3\">\n {showImportExport && <CohortSelector />}\n <Tooltip\n label={\n noFilters\n ? 'No values to expand/collapse'\n : allQueryExpressionsCollapsed\n ? 'Expand all values'\n : 'Collapse all values'\n }\n >\n <Button\n data-testid=\"button-expand-collapse-cohort-queries\"\n color=\"white\"\n onClick={() => {\n if (cohortId) {\n if (allQueryExpressionsCollapsed)\n setExpandedState({\n type: 'expandAll',\n cohortId: cohortId,\n });\n else\n setExpandedState({\n type: 'collapseAll',\n cohortId: cohortId,\n });\n }\n }}\n aria-label=\"Expand/collapse all queries\"\n aria-expanded={!allQueryExpressionsCollapsed}\n className={getCombinedClassesExpandCollapseQuery(\n allQueryExpressionsCollapsed,\n )}\n disabled={noFilters}\n >\n {allQueryExpressionsCollapsed ? (\n <Icon\n icon=\"gen3:chevron-expand\"\n aria-hidden=\"true\"\n height=\"1.5rem\"\n >\n {' '}\n </Icon>\n ) : (\n <Icon\n icon=\"gen3:chevron-contract\"\n aria-hidden=\"true\"\n height=\"1.5rem\"\n >\n {' '}\n </Icon>\n )}\n </Button>\n </Tooltip>\n\n <Tooltip\n label={\n noFilters ||\n (filtersRef.current != null &&\n filtersRef?.current?.scrollHeight <=\n MAX_HEIGHT_QE_SECTION)\n ? 'All rows are already displayed'\n : filtersSectionCollapsed\n ? 'Display all rows'\n : 'Display fewer rows'\n }\n >\n <Button\n data-testid=\"button-expand-collapse-cohort-filters-section\"\n color=\"white\"\n onClick={() =>\n setFiltersSectionCollapsed(!filtersSectionCollapsed)\n }\n aria-label=\"Expand/collapse filters section\"\n aria-expanded={!filtersSectionCollapsed}\n disabled={\n noFilters ||\n (filtersRef.current != null &&\n filtersRef?.current?.scrollHeight <=\n MAX_HEIGHT_QE_SECTION)\n }\n className={getCombinedClassesForRowCollapse(\n filtersSectionCollapsed,\n )}\n >\n {filtersSectionCollapsed ? (\n <React.Fragment>\n <DownArrowIcon size={30} aria-hidden=\"true\" />\n </React.Fragment>\n ) : (\n <React.Fragment>\n <UpArrowIcon size={30} aria-hidden=\"true\" />\n </React.Fragment>\n )}\n </Button>\n </Tooltip>\n </div>\n </React.Fragment>\n </div>\n <div\n data-testid=\"text-cohort-filters\"\n className=\"flex flex-wrap bg-base-max w-full p-2 overflow-x-hidden\"\n style={\n filtersSectionCollapsed\n ? { maxHeight: `${QESectionHeight}px`, overflowY: 'scroll' }\n : undefined\n }\n ref={filtersRef}\n >\n {noFilters ? (\n <p\n data-testid=\"text-no-active-cohort-filter\"\n className=\"flex items-center font-content h-10\"\n >\n No filters currently applied.\n </p>\n ) : (\n Object.keys(filters.root).map((k) => {\n return convertFilterToComponent(\n filters.root[k],\n index,\n '.',\n displayOnly,\n );\n })\n )}\n </div>\n </div>\n </QueryExpressionsExpandedContext.Provider>\n </QueryExpressionContainer>\n );\n};\n\nexport default QueryExpressionSection;\n","import React from 'react';\nimport {\n CohortItem,\n isFilterSet,\n extractIndexFromDataLibraryCohort,\n} from '@gen3/core';\nimport { Group, Text } from '@mantine/core';\nimport { ErrorCard } from '../../components/MessageCards';\nimport QueryExpressionSection from '../CohortBuilder/QueryExpression/QueryExpressionSection';\n\ninterface LabeledTextProps {\n label: string;\n text: string;\n}\n\nconst LabeledText: React.FC<LabeledTextProps> = ({ label, text }) => {\n return (\n <div className=\"flex p-1 space-x-2\">\n <Text fw={600}>{label}:</Text>\n <Text fw={400}> {text}</Text>\n </div>\n );\n};\n\nconst QueryDetails: React.FC<CohortItem> = ({\n name,\n schemaVersion,\n data,\n id,\n}) => {\n if (!data) {\n return <ErrorCard message=\"No cohort query\" />;\n }\n\n const index = extractIndexFromDataLibraryCohort(data);\n\n if (!index) {\n return <ErrorCard message=\"Not able to extract index from cohort query\" />;\n }\n\n return (\n <div className=\"flex flex-col\">\n <Group\n classNames={{\n root: 'p-2 bg-base-lighter rounded-t-lg border-2 border-b-0 border-base-light',\n }}\n >\n <Text fw={700}>{name}</Text>\n <LabeledText label=\"Index:\" text={index} />\n <LabeledText label=\"Schema Version:\" text={schemaVersion} />\n <LabeledText label=\"ID:\" text={id} />\n </Group>\n <div className=\"p-2 overflow-scroll w-full bg-base-lighter rounded-b-lg border-2 border-t-0 border-base-light\">\n {isFilterSet(data) ? (\n <QueryExpressionSection\n index={index}\n displayOnly={true}\n showTitle={false}\n ></QueryExpressionSection>\n ) : (\n <Text fw={400}>{JSON.stringify(data, null, 2)}</Text>\n )}\n </div>\n </div>\n );\n};\n\nexport default QueryDetails;\n","import React, { useState } from 'react';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\nimport {\n MantineReactTable,\n MRT_RowSelectionState,\n MRT_Updater,\n useMantineReactTable,\n} from 'mantine-react-table';\nimport { Button, Stack, Text, Tooltip } from '@mantine/core';\nimport { MdOutlineRemoveCircle as RemoveIcon } from 'react-icons/md';\nimport AdditionalDataTable from './AdditionalDataTable';\nimport { DatalistMembers } from '../types';\nimport { commonTableSettings } from './tableSettings';\nimport {\n getNumberOfDataSetItemsSelected,\n useDataLibrarySelection,\n} from '../selection/SelectionContext';\nimport { selectAllDatasetMembers } from '../selection/selection';\nimport FilesTable from './FilesTable';\nimport EmptyList from '../EmptyList';\nimport QueryDetails from '../QueryDetails';\n\n/**\n * Component that manages a List items, which are composed of Dataset and/or Cohorts\n */\nconst columns = [\n {\n accessorKey: 'name',\n header: 'Name',\n },\n {\n accessorKey: 'id',\n header: 'Id',\n },\n {\n accessorKey: 'numFiles',\n header: '# Files',\n },\n {\n accessorKey: 'isAddDataSource',\n header: 'Additional Data Sources',\n },\n];\n\nexport interface ListsTableProps {\n listId: string;\n data: DatalistMembers;\n removeList: (itemId: string) => void;\n size: string;\n}\n\nconst DataSetContentsTable = ({\n listId,\n data,\n removeList,\n size = 'sm',\n}: ListsTableProps) => {\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n\n const { selections, updateSelections } = useDataLibrarySelection();\n\n // build the rows\n const rows = useDeepCompareMemo(\n () =>\n Object.keys(data).map((key) => {\n return {\n name: data[key].name,\n id: data[key].id,\n numFiles: data[key]?.files.length || 0,\n numItems:\n (data[key]?.files.length || 0) + (data[key]?.queries.length || 0),\n isAddDataSource:\n data[key]?.additionalData.length !== 0 ? 'True' : 'False',\n isCohort: data[key]?.queries.length !== 0 ? 'True' : 'False',\n };\n }),\n [data],\n );\n\n /**\n * Handles the change in row selection.\n *\n * @param {MRT_Updater<MRT_RowSelectionState>} updater - A function or value\n * that provides the new state of row selection. If a function is provided,\n * it will be called with the previous selection state.\n *\n * This function updates the state of selected rows by transforming the\n * updater's value. It generates a mapping of selected members for each\n * dataset, containing the dataset ID and an object representing the selected\n * object IDs. It then updates the selections for a given list and filters\n * the values to indicate whether each dataset has any selected objects.\n */\n const handleRowSelectionChange = (\n updater: MRT_Updater<MRT_RowSelectionState>,\n ) => {\n setRowSelection((prevSelection) => {\n const value =\n updater instanceof Function ? updater(prevSelection) : updater;\n\n const members = selectAllDatasetMembers(Object.keys(value), data);\n updateSelections(listId, members);\n return Object.keys(members).reduce(\n (acc: Record<string, boolean>, key) => {\n acc[key] = Object.keys(members[key].objectIds).length > 0;\n return acc;\n },\n {},\n );\n });\n };\n\n useDeepCompareEffect(() => {\n if (!selections[listId]) {\n // not found in selections, unselect all\n setRowSelection({});\n return;\n }\n\n const filteredValues = Object.keys(selections[listId]).reduce(\n (acc: Record<string, boolean>, key) => {\n const objectIds = selections[listId][key]?.objectIds;\n if (!objectIds) {\n console.warn(\n `Object IDs for key ${key} in list ${listId} are not available`,\n );\n return acc;\n }\n acc[key] = Object.keys(objectIds).length > 0;\n return acc;\n },\n {},\n );\n setRowSelection(filteredValues);\n }, [setRowSelection, selections, listId]);\n\n const table = useMantineReactTable({\n columns: columns,\n data: rows,\n ...commonTableSettings(size),\n getRowId: (originalRow) => originalRow.id,\n onRowSelectionChange: handleRowSelectionChange,\n enableSelectAll: false,\n enableBottomToolbar: rows.length > 10,\n enablePagination: rows.length > 10,\n enableRowSelection: true,\n state: { rowSelection },\n renderEmptyRowsFallback: () => <EmptyList />,\n defaultColumn: {\n minSize: 2,\n },\n displayColumnDefOptions: {\n 'mrt-row-select': {\n size: 5,\n maxSize: 5,\n header: '',\n },\n 'mrt-row-expand': {\n size: 5,\n maxSize: 5,\n header: '',\n },\n 'mrt-row-actions': {\n size: 10,\n header: '',\n },\n },\n mantineSelectCheckboxProps: ({ row }) => {\n const selectedCount = getNumberOfDataSetItemsSelected(\n selections,\n listId,\n row.id,\n );\n const isIndeterminate =\n selectedCount > 0 && selectedCount != row.original.numItems;\n return {\n indeterminate: isIndeterminate,\n ...(isIndeterminate ? { checked: false } : {}),\n };\n },\n renderRowActions: ({ row }) => {\n return (\n <Tooltip\n label={\n row.original.isCohort === 'True'\n ? 'Remove cohort from list'\n : 'Remove dataset from list'\n }\n >\n <Button\n variant=\"transparent\"\n aria-label={`remove ${row.original.isCohort === 'True' ? 'cohort' : 'dataset'} ${row.original.name} from list`}\n onClick={() => {\n removeList(row.id);\n }}\n >\n <RemoveIcon size=\"1.5rem\" />\n {row.original.itemType}\n </Button>\n </Tooltip>\n );\n },\n\n mantineDetailPanelProps: {\n style: {\n padding: '0px',\n margin: '0px',\n },\n },\n renderDetailPanel: ({ row }) => {\n const rowData = data[row.id];\n return (\n <div className=\"flex flex-col w-full gap-y-4 pr-4\">\n {rowData?.files.length > 0 && (\n <FilesTable\n header={'Files'}\n datasetId={rowData.id}\n listId={listId}\n data={rowData?.files}\n />\n )}\n {rowData?.additionalData.length > 0 && (\n <AdditionalDataTable\n header={'Additional Data'}\n data={rowData?.additionalData}\n />\n )}\n <Stack>\n {rowData?.queries.map((query) => (\n <QueryDetails header=\"Queries\" {...query} key={query.id} />\n ))}\n </Stack>\n </div>\n );\n },\n });\n\n return (\n <div className=\"flex flex-col w-full mr-8\">\n <MantineReactTable table={table} />\n </div>\n );\n};\n\nexport default DataSetContentsTable;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { DataItemSelectedState, DatasetContents } from './types';\nimport {\n AdditionalDataItem,\n CohortItem,\n Datalist,\n FileItem,\n getNumberOfItemsInDatalist,\n isAdditionalDataItem,\n isCohortItem,\n isFileItem,\n DataListUpdate,\n StorageOperationResults,\n} from '@gen3/core';\nimport {\n getNumberOfSelectedItemsInList,\n isListInSelection,\n useDataLibrarySelection,\n} from './selection/SelectionContext';\nimport { selectAllListItems } from './selection/selection';\nimport { Accordion, LoadingOverlay } from '@mantine/core';\nimport { DatasetAccordionControl } from './DatasetAccordionControl';\nimport DataSetContentsTable from './tables/DatasetContentsTable';\n\ninterface DatalistAccordionProps {\n dataList: Datalist;\n updateListInDataLibrary: (\n payload: DataListUpdate,\n ) => Promise<StorageOperationResults>;\n deleteListFromDataLibrary: (id: string) => Promise<StorageOperationResults>;\n isUpdating: string | null;\n size?: string;\n}\n\n/**\n * Renders an accordion item with data list details.\n *\n * @param {Object} dataListAccordionItemParams - Parameters for the DataListAccordionItem.\n * @param {Object} dataListAccordionItemParams.dataList - The data list to be displayed in the accordion item.\n *\n * @return {JSX.Element} A rendered accordion item component with controls for data list updates and deletions.\n */\nexport const DatalistAccordionItem: React.FC<DatalistAccordionProps> = ({\n dataList,\n updateListInDataLibrary,\n deleteListFromDataLibrary,\n isUpdating,\n size = 'sm',\n}) => {\n const [selectedState, setSelectedState] =\n useState<DataItemSelectedState>('unchecked');\n\n const { id: listId, name: listName } = dataList;\n const numberOfItemsInList = useMemo(() => {\n return getNumberOfItemsInDatalist(dataList);\n }, [dataList]);\n\n const { selections, updateSelections, removeListMember, removeList } =\n useDataLibrarySelection();\n\n const updateList = async (update: Record<string, any>) => {\n return await updateListInDataLibrary({\n ...{ name: listName, items: dataList.items },\n ...update,\n id: listId,\n });\n };\n\n const tableRowData = useMemo(\n () =>\n Object.entries(dataList.items).reduce(\n (acc: Record<string, DatasetContents>, [datasetId, dataItem]) => {\n const [queries, files, additionalData] = [\n [] as CohortItem[],\n [] as FileItem[],\n [] as AdditionalDataItem[],\n ];\n\n if (isCohortItem(dataItem)) {\n queries.push({\n ...(dataItem as CohortItem),\n description: '',\n index: dataItem.index,\n id: datasetId,\n });\n } else {\n // handle RegisteredDataListEntry\n Object.entries(dataItem.members).forEach(([itemId, item]) => {\n if (isFileItem(item)) {\n files.push({\n ...item,\n id: itemId,\n });\n } else if (isAdditionalDataItem(item)) {\n additionalData.push(item);\n } else {\n console.warn('DataLibrary: unknown item', item);\n }\n });\n }\n // return the\n acc[datasetId] = {\n id: datasetId,\n name: dataItem.name,\n queries: queries,\n files: files,\n additionalData: additionalData,\n };\n return acc;\n },\n {},\n ),\n [dataList],\n );\n\n useEffect(() => {\n // list is not in selection\n if (!isListInSelection(listId, selections)) {\n setSelectedState('unchecked');\n return;\n }\n\n const numberOfSelectedItemsInList = getNumberOfSelectedItemsInList(\n selections,\n listId,\n );\n\n // everything in the list is selected\n if (numberOfSelectedItemsInList == numberOfItemsInList) {\n setSelectedState('checked');\n return;\n }\n\n // list is not in selections\n if (numberOfSelectedItemsInList === 0) {\n setSelectedState('unchecked');\n return;\n }\n\n // some checked items\n if (numberOfSelectedItemsInList < numberOfItemsInList)\n setSelectedState('indeterminate');\n }, [listId, numberOfItemsInList, selections]);\n\n const removeItemFromList = async (itemId: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [itemId]: _removedKey, ...newObject } = dataList.items;\n await updateListInDataLibrary({\n id: listId,\n name: dataList.name,\n items: newObject,\n });\n // update selections\n removeListMember(listId, itemId);\n };\n\n const handleSelectList = (checked: boolean) => {\n if (!checked) {\n removeList(listId);\n return;\n }\n\n const selectAllDatasets = selectAllListItems(\n dataList, // gets the ids of all the dataset members of list\n );\n updateSelections(listId, selectAllDatasets); // select all the datasets in the list\n };\n\n return (\n <Accordion.Item\n value={listName}\n key={listName}\n className=\"group\"\n pos=\"relative\"\n >\n <LoadingOverlay visible={isUpdating === listId} />\n <DatasetAccordionControl\n listName={listName}\n numberOfItems={numberOfItemsInList}\n updatedTime={dataList.updated_time}\n createdTime={dataList.created_time}\n updateHandler={updateList}\n deleteListHandler={() => deleteListFromDataLibrary(listId)}\n selectListHandler={handleSelectList}\n selectedState={selectedState}\n size={size}\n />\n <Accordion.Panel>\n <DataSetContentsTable\n listId={listId}\n data={tableRowData}\n removeList={removeItemFromList}\n size={size}\n />\n </Accordion.Panel>\n </Accordion.Item>\n );\n};\n","import React from 'react';\nimport { Accordion, Center, LoadingOverlay } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { notifications } from '@mantine/notifications';\nimport { useDataLibrary } from '@gen3/core';\nimport SearchAndActions from './SearchAndActions';\nimport { useDataLibrarySelection } from './selection/SelectionContext';\nimport SelectedItemsModal from './modals/SelectedItemsModal';\nimport { DatalistAccordionItem } from './DatalistAccordionItem';\nimport { DataLibraryConfig } from './types';\nimport { ErrorCard } from '../../components/MessageCards';\nimport { useIsAuthenticated } from '../../lib/session/session';\nimport { useDeepCompareEffect } from 'use-deep-compare';\n\nconst DataLibraryLists: React.FC<DataLibraryConfig> = ({\n storageMode,\n requiresLogin = true,\n actions,\n size,\n}) => {\n const {\n dataLibrary,\n isLoading,\n isUpdating,\n error: dataLibraryError,\n addListToDataLibrary,\n updateListInDataLibrary,\n deleteListFromDataLibrary,\n } = useDataLibrary({ storageMode });\n\n const { isAuthenticated } = useIsAuthenticated();\n const [selectedItemsOpen, { open, close }] = useDisclosure(false);\n const { gatherSelectedItems } = useDataLibrarySelection();\n\n const gatherData = () => {\n gatherSelectedItems(dataLibrary);\n open();\n };\n\n // Use useEffect to show notifications only when error changes\n useDeepCompareEffect(() => {\n if (dataLibraryError?.isError && dataLibraryError?.status !== 401) {\n notifications.show({\n position: 'top-center',\n color: 'red',\n title: 'Data Library Error',\n message: dataLibraryError?.message,\n autoClose: 2000,\n });\n }\n }, [dataLibraryError]);\n\n // Handle 401 error with UI rendering\n if (dataLibraryError?.isError && dataLibraryError?.status === 401) {\n let message = 'You are not authorized to access the library.';\n if (requiresLogin) {\n if (!isAuthenticated)\n message = 'Data Library requires login. Please log in to continue.';\n else\n message =\n 'You are not authorized to access the library. Please contact your site administrator.';\n }\n\n return (\n <div className=\"flex flex-col w-full ml-2\">\n <Center>\n <ErrorCard message={message} />\n </Center>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col w-full ml-2\">\n <SelectedItemsModal\n opened={selectedItemsOpen}\n onClose={close}\n size=\"auto\"\n actions={actions}\n />\n <SearchAndActions\n createList={addListToDataLibrary}\n gatherData={gatherData}\n />\n <div className=\"flex items-center\">\n <LoadingOverlay visible={isLoading} />\n <Accordion\n chevronPosition=\"left\"\n classNames={{\n root: 'w-full',\n control: 'data-active:bg-secondary-lightest',\n }}\n >\n {dataLibrary &&\n Object.values(dataLibrary).map((datalist) => {\n return (\n <DatalistAccordionItem\n dataList={datalist}\n key={datalist.id}\n size={size}\n isUpdating={isUpdating}\n updateListInDataLibrary={updateListInDataLibrary}\n deleteListFromDataLibrary={deleteListFromDataLibrary}\n />\n );\n })}\n </Accordion>\n </div>\n </div>\n );\n};\n\nexport default DataLibraryLists;\n","import React from 'react';\nimport { DataLibrarySelectionProvider } from './selection/SelectionContext';\nimport DataLibraryLists from './DataLibraryLists';\nimport { DataLibraryConfig } from './types';\n\nconst DataLibrary = (config: DataLibraryConfig) => {\n return (\n <DataLibrarySelectionProvider>\n <DataLibraryLists {...config} />\n </DataLibrarySelectionProvider>\n );\n};\n\nexport default DataLibrary;\n","import React from 'react';\nimport { NavPageLayout, NavPageLayoutProps } from '../../features/Navigation';\nimport {\n DataLibrary,\n type DataLibraryConfig,\n} from '../../features/DataLibrary';\n\ninterface DataLibraryPageProps extends NavPageLayoutProps {\n config: DataLibraryConfig;\n}\n\nconst DataLibraryPage = ({\n headerProps,\n footerProps,\n config,\n}: DataLibraryPageProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 DataLibrary Page',\n content: 'DataLibrary Data',\n key: 'gen3-data-library-page',\n }}\n >\n <DataLibrary {...config} />\n </NavPageLayout>\n );\n};\n\nexport default DataLibraryPage;\n","import { GetServerSideProps } from 'next';\nimport type { NavPageLayoutProps } from '../../features/Navigation';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { DataLibraryStoreMode, GEN3_COMMONS_NAME } from '@gen3/core';\nimport { DataLibraryConfig } from '../../features/DataLibrary';\n\nexport const DataLibraryPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n try {\n const datalibraryConfig: DataLibraryConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/dataLibrary.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: datalibraryConfig,\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n config: {\n storageMode: DataLibraryStoreMode.ApiOnly,\n actions: [],\n },\n },\n };\n }\n};\n","import { JSONPath } from 'jsonpath-plus';\nimport { JSONObject } from '@gen3/core';\nimport { DiscoveryIndexConfig } from './types';\nimport { AccessLevel } from '../../utils';\n\nexport const jsonPathAccessor = (path: string) => (row: JSONObject) => {\n // TODO: add logging if path is not found\n return JSONPath({ json: row, path: path });\n};\n\nexport const getManualSortingAndPagination = (config: DiscoveryIndexConfig) => {\n const defaultFeature = 'client';\n const sortingAndPagination =\n config?.features?.dataLoader?.sortingAndPagination ?? defaultFeature;\n return sortingAndPagination === 'server';\n};\n\n/**\n * Converts a numeric value to its equivalent AccessLevel enum value\n * @param value - The numeric value to convert (1-6)\n * @returns The corresponding AccessLevel enum value or undefined if not found\n */\nexport const getAccessLevelFromNumber = (\n value?: number,\n): AccessLevel | undefined => {\n if (value === undefined) return undefined;\n switch (value) {\n case AccessLevel.ACCESSIBLE:\n return AccessLevel.ACCESSIBLE;\n case AccessLevel.UNACCESSIBLE:\n return AccessLevel.UNACCESSIBLE;\n case AccessLevel.WAITING:\n return AccessLevel.WAITING;\n case AccessLevel.NOT_AVAILABLE:\n return AccessLevel.NOT_AVAILABLE;\n case AccessLevel.OTHER:\n return AccessLevel.OTHER;\n case AccessLevel.MIXED:\n return AccessLevel.MIXED;\n default:\n return undefined;\n }\n};\n","import React, { ReactElement } from 'react';\nimport { Text } from '@mantine/core';\nimport { JSONObject } from '@gen3/core';\nimport { CellRendererFunction } from './types';\nimport { toString } from 'lodash';\n\nconst defaultCellRenderer: CellRendererFunction = (\n value,\n params?: JSONObject,\n): ReactElement => {\n if (value === undefined || value === null || toString(value) === '') {\n return (\n <Text>\n {`${\n params && params?.valueIfNotAvailable\n ? params?.valueIfNotAvailable\n : ''\n }`}{' '}\n </Text>\n );\n }\n return <Text>{toString(value)}</Text>;\n};\n\nexport interface CellRendererFunctionCatalogEntry {\n [key: string]: CellRendererFunction;\n}\n\nexport class DiscoveryCellRendererFactory {\n private static instance: DiscoveryCellRendererFactory;\n private cellRendererCatalog: Record<\n string,\n CellRendererFunctionCatalogEntry\n > = {};\n\n private constructor() {\n this.cellRendererCatalog = {};\n }\n\n static getInstance(): DiscoveryCellRendererFactory {\n if (!DiscoveryCellRendererFactory.instance) {\n DiscoveryCellRendererFactory.instance =\n new DiscoveryCellRendererFactory();\n }\n return DiscoveryCellRendererFactory.instance;\n }\n\n static getCellRenderer(\n type: string,\n functionName: string,\n ): CellRendererFunction {\n return (\n DiscoveryCellRendererFactory.getInstance().cellRendererCatalog[type][\n functionName\n ] ?? defaultCellRenderer\n );\n }\n\n static registerCellRenderer(\n type: string,\n functionName: string,\n func: CellRendererFunction,\n ): void {\n if (\n DiscoveryCellRendererFactory.getInstance().cellRendererCatalog[type] ===\n undefined\n ) {\n DiscoveryCellRendererFactory.getInstance().cellRendererCatalog[type] = {};\n }\n DiscoveryCellRendererFactory.getInstance().cellRendererCatalog[type][\n functionName\n ] = func;\n }\n\n static registerCellRendererCatalog(\n catalog: Record<string, CellRendererFunctionCatalogEntry>,\n ): void {\n Object.keys(catalog).forEach((type) => {\n Object.entries(catalog[type]).forEach(([name, func]) => {\n DiscoveryCellRendererFactory.registerCellRenderer(type, name, func);\n });\n });\n }\n}\n\n/**\n * Retrieve the cell renderer function for the given type and function name\n * @param type\n * @param functionName\n * @param params\n */\nexport const DiscoveryTableCellRenderer = (\n type = 'string',\n functionName = 'default',\n params: JSONObject = {},\n): CellRendererFunction => {\n if (!type) {\n return defaultCellRenderer;\n }\n const func = DiscoveryCellRendererFactory.getCellRenderer(type, functionName);\n if (!func) {\n return defaultCellRenderer;\n }\n return (cellProps): ReactElement => func(cellProps, params);\n};\n","import { MRT_Row } from 'mantine-react-table';\nimport { StudyDetailsField } from '../../Study/types';\nimport React, { ReactElement } from 'react';\nimport { Box, Text } from '@mantine/core';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport interface RowRenderFunctionParams<TData extends Record<string, any> = Record<string, any>> {\n row: MRT_Row<TData>;\n}\n\nexport interface RowRendererRegisteredFunctionParams extends RowRenderFunctionParams {\n studyPreviewConfig?: StudyDetailsField;\n}\n\nconst StringRowRenderer = (\n { row }: RowRenderFunctionParams,\n studyPreviewConfig?: StudyDetailsField,\n): ReactElement => {\n if (!studyPreviewConfig) {\n return <React.Fragment></React.Fragment>;\n }\n const value = JSONPath({\n json: row.original,\n path: studyPreviewConfig.field ?? '',\n });\n\n return (\n <Box\n display={'flex'}\n w={'100%'}\n >\n <Text size=\"xs\" lineClamp={2}>\n {value}\n </Text>\n </Box>\n );\n};\n\nexport const Gen3DiscoveryStandardRowPreviewRenderers = {\n string: {\n default: StringRowRenderer,\n },\n};\n\nexport const defaultRowRenderer = StringRowRenderer;\n","import { ReactElement } from 'react';\nimport {\n type RowRenderFunctionParams,\n defaultRowRenderer,\n Gen3DiscoveryStandardRowPreviewRenderers,\n} from './RowRenderers';\nimport { StudyDetailsField } from '../../Study/types';\n\n// TODO Tighten up the typing here\nexport type RowRendererFunction = (\n props: RowRenderFunctionParams,\n studyPreviewConfig?: StudyDetailsField,\n) => ReactElement;\n\nexport interface RowRendererFunctionCatalogEntry {\n [key: string]: RowRendererFunction;\n}\n\nexport class DiscoveryRowRendererFactory {\n private static instance: DiscoveryRowRendererFactory;\n private RowRendererCatalog: Record<string, RowRendererFunctionCatalogEntry> =\n {};\n\n private constructor() {\n this.RowRendererCatalog = {};\n }\n\n static getInstance(): DiscoveryRowRendererFactory {\n if (!DiscoveryRowRendererFactory.instance) {\n DiscoveryRowRendererFactory.instance = new DiscoveryRowRendererFactory();\n }\n return DiscoveryRowRendererFactory.instance;\n }\n\n static getRowRenderer(\n type: string,\n functionName: string,\n ): RowRendererFunction {\n if (\n !(type in DiscoveryRowRendererFactory.getInstance().RowRendererCatalog)\n ) {\n console.warn('No row renderer found for type: ', type);\n return defaultRowRenderer;\n }\n\n return (\n DiscoveryRowRendererFactory.getInstance().RowRendererCatalog[type][\n functionName\n ] ?? defaultRowRenderer\n );\n }\n\n static registerRowRenderer(\n type: string,\n functionName: string,\n func: RowRendererFunction,\n ): void {\n if (\n DiscoveryRowRendererFactory.getInstance().RowRendererCatalog[type] ===\n undefined\n ) {\n DiscoveryRowRendererFactory.getInstance().RowRendererCatalog[type] = {};\n }\n DiscoveryRowRendererFactory.getInstance().RowRendererCatalog[type][\n functionName\n ] = func;\n }\n\n static registerRowRendererCatalog(\n catalog: Record<string, RowRendererFunctionCatalogEntry>,\n ): void {\n Object.keys(catalog).forEach((type) => {\n Object.entries(catalog[type]).forEach(([name, func]) => {\n DiscoveryRowRendererFactory.registerRowRenderer(type, name, func);\n });\n });\n }\n}\n\n/**\n * Retrieve the Row renderer function for the given type and function name\n * @param studyPreviewConfig\n */\nexport const DiscoveryTableRowRenderer = (\n studyPreviewConfig?: StudyDetailsField,\n): RowRendererFunction => {\n if (!studyPreviewConfig?.contentType) {\n return (row): ReactElement => defaultRowRenderer(row, studyPreviewConfig);\n }\n const func = DiscoveryRowRendererFactory.getRowRenderer(\n studyPreviewConfig?.contentType,\n studyPreviewConfig?.renderer ?? 'default',\n );\n if (!func) {\n throw new Error(\n `No row renderer found for given config (contentType: ${studyPreviewConfig?.contentType}, detailRenderer: ${studyPreviewConfig?.renderer ?? 'default'}`,\n );\n }\n return (row): ReactElement => func(row, studyPreviewConfig);\n};\n\nexport const registerDiscoveryDefaultStudyPreviewRenderers = () => {\n DiscoveryRowRendererFactory.registerRowRendererCatalog(\n Gen3DiscoveryStandardRowPreviewRenderers,\n );\n};\n","import React, { createContext } from 'react';\nimport { DiscoveryIndexConfig } from './types';\nimport { JSONObject } from '@gen3/core';\n\ninterface DiscoveryProviderValue {\n discoveryConfig: DiscoveryIndexConfig;\n}\n\nconst DiscoveryContext = createContext<DiscoveryProviderValue>({\n discoveryConfig: {} as DiscoveryIndexConfig,\n});\n\nconst useDiscoveryContext = () => {\n const context = React.useContext(DiscoveryContext);\n if (context === undefined) {\n throw Error(\n 'Discovery must be used must be used inside of a DiscoveryContext',\n );\n }\n return context;\n};\n\nconst DiscoveryProvider = ({\n children,\n discoveryIndexConfig,\n}: {\n children: React.ReactNode;\n discoveryIndexConfig: DiscoveryIndexConfig;\n}) => {\n\n return (\n <DiscoveryContext.Provider\n value={{\n discoveryConfig: discoveryIndexConfig,\n }}\n >\n {children}\n </DiscoveryContext.Provider>\n );\n};\n\nexport { useDiscoveryContext, DiscoveryProvider as default };\n","import React, { createContext } from 'react';\nimport { JSONObject } from '@gen3/core';\n\ninterface StudyProviderValue {\n setStudyDetails: React.Dispatch<React.SetStateAction<JSONObject>>;\n studyDetails: JSONObject;\n}\n\nconst StudyContext = createContext<StudyProviderValue>({\n setStudyDetails: () => null,\n studyDetails: {} as JSONObject,\n});\n\nconst useStudyContext = () => {\n const context = React.useContext(StudyContext);\n if (context === undefined) {\n throw Error(\n 'Study must be used must be used inside of a StudyContext',\n );\n }\n return context;\n};\n\nconst StudyProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const [studyDetails, setStudyDetails] = React.useState<JSONObject>({});\n\n return (\n <StudyContext.Provider\n value={{\n setStudyDetails,\n studyDetails,\n }}\n >\n {children}\n </StudyContext.Provider>\n );\n};\n\nexport { useStudyContext, StudyProvider as default };\n","import { JSONObject } from '@gen3/core';\nimport { TagData, TagsConfig } from './types';\n\n// function given a Object and key as input will check if the key is present in the object\n// if present return the value of the key else return undefined\nexport const getStringValueFromJSONObject = (\n objectData?: JSONObject,\n key?: string,\n): string | undefined => {\n return key && objectData ? (objectData[key] as string) : undefined;\n};\n\nexport interface TagInfo {\n color: string;\n display: boolean;\n label: string;\n}\n\nexport const getTagInfo = (\n tagData: TagData,\n tagsConfig?: TagsConfig,\n): TagInfo => {\n if (tagData.category === undefined) {\n return {\n color: 'darkgray',\n display: tagsConfig?.showUnknownTags ?? false,\n label: tagData.name,\n };\n }\n const categoryConfig = tagsConfig?.tagCategories.find(\n (category) => category.name === tagData.category,\n );\n if (categoryConfig === undefined)\n return {\n color: 'gray',\n display: tagsConfig?.showUnknownTags ?? false,\n label: tagData.name,\n };\n return {\n color: categoryConfig.color,\n display: categoryConfig?.display ? true : categoryConfig.display,\n label: categoryConfig?.displayName ?? tagData.name,\n };\n};\n","import React from 'react';\nimport { getTagInfo } from '../utils';\nimport { TagData } from '../types';\nimport { CellRendererFunction, CellRenderFunctionProps } from './types';\nimport { Badge } from '@mantine/core';\n\n// TODO Fix below\n// eslint-disable-next-line react/prop-types\nexport const RenderTagsCell: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n const content = value as TagData[];\n return (\n <div className=\"flex space-x-1 space-y-4\">\n {content.map((x: TagData) => {\n const { color, display, label } = getTagInfo(x);\n if (!display) return null;\n return (\n <Badge\n key={x.name}\n role=\"button\"\n size=\"lg\"\n radius=\"sm\"\n variant=\"filled\"\n tabIndex={0}\n aria-label={x.name}\n style={{\n backgroundColor: color,\n borderColor: color,\n color: 'white',\n }}\n >\n {label}\n </Badge>\n );\n })}\n </div>\n );\n};\n","import React, { ReactElement } from 'react';\nimport { JSONValue } from '@gen3/core';\n\nexport type FieldRendererFunction = (\n fieldValue: JSONValue,\n fieldLabel?: string,\n params?: Record<string, any>, //TODO - define the type of params\n) => JSX.Element;\n\nconst defaultStudyFieldRenderer = (\n fieldValue: JSONValue,\n fieldLabel?: string,\n): ReactElement => {\n return (\n <div className=\"flex w-full justify-between px-1 no-wrap'\">\n {fieldLabel ? <span>{fieldLabel}</span> : null};\n <span>{fieldValue as string}</span>;\n </div>\n );\n};\n\nexport type FieldRendererFunctionMap = Record<string, FieldRendererFunction>;\n\nexport class StudyFieldRendererFactory {\n private static instance: StudyFieldRendererFactory;\n private fieldRendererCatalog: Record<string, FieldRendererFunctionMap> = {};\n\n private constructor() {\n this.fieldRendererCatalog = {};\n }\n\n static getInstance(): StudyFieldRendererFactory {\n if (!StudyFieldRendererFactory.instance) {\n StudyFieldRendererFactory.instance = new StudyFieldRendererFactory();\n }\n return StudyFieldRendererFactory.instance;\n }\n\n static getRenderer(\n type: string,\n functionName: string,\n ): FieldRendererFunction {\n if (\n !(type in StudyFieldRendererFactory.getInstance().fieldRendererCatalog)\n ) {\n console.log('No field renderer found for type: ', type);\n return defaultStudyFieldRenderer;\n }\n return (\n StudyFieldRendererFactory.getInstance().fieldRendererCatalog[type][\n functionName\n ] ?? defaultStudyFieldRenderer\n );\n }\n\n static registerFieldRenderer(\n type: string,\n functionName: string,\n func: FieldRendererFunction,\n ): void {\n if (\n StudyFieldRendererFactory.getInstance().fieldRendererCatalog[type] ===\n undefined\n ) {\n StudyFieldRendererFactory.getInstance().fieldRendererCatalog[type] = {};\n }\n StudyFieldRendererFactory.getInstance().fieldRendererCatalog[type][\n functionName\n ] = func;\n }\n\n static registerFieldRendererCatalog(\n catalog: Record<string, FieldRendererFunctionMap>,\n ): void {\n Object.keys(catalog).map((type) => {\n Object.entries(catalog[type]).map(([name, func]) => {\n StudyFieldRendererFactory.registerFieldRenderer(type, name, func);\n });\n });\n }\n}\n\n/**\n * Retrieve the renderer function for the given type and function name\n * @param type\n * @param functionName\n */\nexport const StudyDetailsRenderer = (\n type = 'string',\n functionName = 'default',\n): FieldRendererFunction => {\n if (!type) {\n return defaultStudyFieldRenderer;\n }\n const func = StudyFieldRendererFactory.getRenderer(type, functionName);\n return (arg1, arg2, arg3): ReactElement => func(arg1, arg2, arg3);\n};\n","import React, { ReactElement } from 'react';\nimport Link from 'next/link';\nimport { isArray, toString } from 'lodash';\nimport { JSONPath } from 'jsonpath-plus';\nimport { Alert, Text } from '@mantine/core';\nimport {\n StudyResource,\n StudyDetailsField,\n StudyTabTagField,\n} from '../types';\nimport { accessibleFieldName, AccessLevel } from '../../../utils';\nimport { RenderTagsCell } from '../TableRenderers/CellRenderers';\nimport {\n StudyFieldRendererFactory,\n FieldRendererFunction,\n FieldRendererFunctionMap,\n StudyDetailsRenderer,\n} from './RendererFactory';\nimport { JSONValue } from '@gen3/core';\n\n/**\n * Converts a JSON value into a React element.\n *\n * @param {JSONValue} value - The JSON value to convert.\n * @returns {ReactElement} The React element representing the JSON value.\n */\nconst jsonValueToElement = (value: JSONValue): ReactElement => {\n if (typeof value === 'string') {\n // if JSONValue is a string, display it inside a span\n return <span>{value}</span>;\n } else if (typeof value === 'boolean') {\n // if JSONValue is a boolean, display it inside a span\n return <span>{value.toString()}</span>;\n } else if (typeof value === 'number') {\n // if JSONValue is a number, display it inside a span\n return <span>{value}</span>;\n } else if (Array.isArray(value)) {\n // if JSONValue is an array, map each item into a list element and wrap them in a ul\n return (\n <ul>\n {value.map((v, i) => (\n <li key={i}>{jsonValueToElement(v)}</li>\n ))}\n </ul>\n );\n } else if (typeof value === 'object' && value !== null) {\n // if JSONValue is an object (excluding null), display each property in its own line,\n // using a recursive call to display the value of each property\n return (\n <ul>\n {Object.entries(value).map(([k, v], i) => (\n <li key={i}>\n <strong>{k}:</strong> {jsonValueToElement(v)}\n </li>\n ))}\n </ul>\n );\n } else {\n // if JSONValue is null, or otherwise unhandled, return an empty fragment\n return <React.Fragment />;\n }\n};\n\n/**\n * Default style for discovery field.\n */\nconst discoveryFieldStyle = 'flex w-full justify-between px-1 no-wrap';\n\n/**\n * Renders a block of text.\n *\n * @param {JSONValue} fieldValue - The value to render.\n * @returns {ReactElement} The rendered block of text.\n */\nconst blockTextField = (fieldValue: JSONValue): ReactElement => (\n <div className={discoveryFieldStyle}>{jsonValueToElement(fieldValue)}</div>\n);\n\n/**\n * Renders a label for a field. If the label text is undefined, returns an empty fragment.\n * @param labelText - the label text to render.\n */\nconst label = (labelText?: string): ReactElement =>\n labelText ? (\n <Text\n tt=\"uppercase\"\n fw=\"500\"\n className=\"p-0.75 whitespace-pre-wrap break-words\"\n >\n {labelText}\n </Text>\n ) : (\n <React.Fragment />\n );\n\n/**\n * Renders a text field component.\n *\n * @param {string} fieldValue - The value to be displayed in the text field.\n * @returns {React.Element} - The rendered text field component.\n */\nconst textField = (fieldValue: JSONValue, style = ''): ReactElement => (\n <span\n className={`text-left overflow-hidden p-0.75 whitespace-pre-wrap break-words ${style}`}\n >\n {toString(fieldValue)}\n </span>\n);\n\n/**\n * Represents a link field component that generates a hyperlink with an optional text label.\n *\n * @param linkValue - The target URL for the hyperlink.\n * @param linkText - The optional text label for the hyperlink. If not provided, the linkValue will be used as the label.\n * @returns A JSX element containing the generated hyperlink.\n */\nconst linkFieldWithOptionalLabel = (\n linkValue: string,\n linkText?: string,\n): ReactElement => (\n <Link href={linkValue} target=\"_blank\" rel=\"noreferrer\">\n {linkText ?? linkValue}\n </Link>\n);\n\nconst linkFieldOnly = (linkValue: string, _?: string) => (\n <Link href={linkValue} target=\"_blank\" rel=\"noreferrer\">\n {linkValue}\n </Link>\n);\n\n/**\n * Represents a link field component that generates a hyperlink with an optional text label.\n *\n * @param linkValue - The target URL for the hyperlink.\n * @returns A JSX element containing the generated hyperlink.\n */\nconst linkField = (linkValue: string) => (\n <Link href={linkValue} target=\"_blank\" rel=\"noreferrer\">\n <Text color=\"utility.0\" className=\"underline\">\n {linkValue}\n </Text>\n </Link>\n);\n\nconst subHeading = (text: string) => (\n <h3 className=\"discovery-subheading\">{text}</h3>\n);\n\nconst labeledSingleLinkField = (\n linkValue: JSONValue,\n labelText?: string,\n parans?: Record<string, any>,\n) =>\n typeof linkValue !== 'string' ? (\n <React.Fragment />\n ) : (\n <div className={discoveryFieldStyle} key={labelText}>\n {label(labelText)} {linkField(linkValue)}\n </div>\n );\n\nconst labeledNumberField = (fieldValue: JSONValue, labelText?: string) => {\n if (typeof fieldValue !== 'number' && typeof fieldValue !== 'string')\n return <React.Fragment />;\n return (\n <div className={discoveryFieldStyle} key={labelText}>\n {label(labelText)} {fieldValue?.toLocaleString()}\n </div>\n );\n};\n\nconst labeledMultipleLinkField = (value: JSONValue, labelText?: string) => {\n const linksText = isArray(value) ? value : [toString(value)];\n return linksText.length ? (\n <div>\n {[\n // labeled first field\n <div className={discoveryFieldStyle} key={labelText}>\n {label(labelText)} {linkField(linksText[0] as string)}\n </div>,\n // unlabeled subsequent fields\n ...linksText.slice(1).map((linkText, i) => (\n <div className={discoveryFieldStyle} key={`${linkText}-${i}`}>\n {label(labelText)}\n {linkField(linkText as string)}\n </div>\n )),\n ]}\n </div>\n ) : (\n <React.Fragment />\n );\n};\n\ninterface LinkWithTitle {\n title: string;\n link: string;\n}\n\nconst unlabeledMultipleLinkField = (\n fieldData: JSONValue,\n fieldName?: string,\n) => {\n if (!isArray(fieldData) || fieldData.length === 0) return <React.Fragment />;\n const links = fieldData[0] as unknown as LinkWithTitle[];\n\n return (\n <div className=\"flex flex-col\" key={`${fieldName}-links`}>\n {links.map((link) => labeledSingleLinkField(link.link, link.title))}\n </div>\n );\n};\n\nconst labeledSingleTextField: FieldRendererFunction = (\n fieldValue: JSONValue,\n fieldLabel?: string,\n params?: Record<string, any>,\n) => {\n let stringFieldValue = '';\n if (typeof fieldValue === 'number') {\n stringFieldValue = fieldValue.toLocaleString();\n } else if (typeof fieldValue !== 'string') return <React.Fragment />;\n\n stringFieldValue = fieldValue as string;\n return (\n <div\n className={discoveryFieldStyle}\n key={`study-details-${fieldLabel}-${stringFieldValue}`}\n >\n {label(fieldLabel)} {textField(stringFieldValue, params?.style ?? '')}\n </div>\n );\n};\n\nconst labeledYearOfBirthRestricted: FieldRendererFunction = (\n fieldValue: JSONValue,\n fieldLabel?: string,\n) => {\n let stringFieldValue = '';\n if (typeof fieldValue === 'number') {\n stringFieldValue = fieldValue.toLocaleString();\n } else if (typeof fieldValue !== 'string') return <React.Fragment />;\n\n stringFieldValue = fieldValue as string;\n\n let displayContent;\n if (\n typeof stringFieldValue === 'string' &&\n !isNaN(Number(stringFieldValue)) &&\n Number(stringFieldValue) < 1935\n ) {\n displayContent = '1935';\n } else if (isArray(stringFieldValue)) {\n displayContent = stringFieldValue\n .map((item) => {\n if (\n typeof item === 'string' &&\n !isNaN(Number(item)) &&\n Number(item) < 1935\n ) {\n return '1935';\n }\n return item;\n })\n .join(', ');\n } else {\n displayContent = stringFieldValue;\n }\n\n return (\n <div\n className={discoveryFieldStyle}\n key={`study-details-${fieldLabel}-${displayContent}`}\n >\n {label(fieldLabel)} {textField(displayContent)}\n </div>\n );\n};\n\nconst labeledParagraph: FieldRendererFunction = (\n fieldValue: JSONValue,\n fieldLabel?: string,\n) => {\n if (typeof fieldValue !== 'string') return <React.Fragment />;\n\n const stringFieldValue = fieldValue as string;\n return (\n <div\n className={`${discoveryFieldStyle}`}\n key={`study-details-${fieldLabel}-${stringFieldValue}`}\n >\n {fieldLabel ? (\n <Text\n tt=\"uppercase\"\n fw=\"500\"\n className=\"p-0.75 mr-4 whitespace-pre-wrap break-words\"\n >\n {fieldLabel}\n </Text>\n ) : (\n <React.Fragment />\n )}\n\n <div>\n <Text className=\"pl-4 text-left p-0.75 whitespace-pre-wrap break-words\">\n {toString(fieldValue)}\n </Text>\n </div>\n </div>\n );\n};\n\nconst labeledMultipleTextField: FieldRendererFunction = (\n fieldsText: JSONValue,\n labelText?: string,\n): ReactElement => {\n return isArray(fieldsText) && fieldsText?.length ? (\n <div>\n {[\n // labeled first field\n <div className={discoveryFieldStyle} key={`study-details-${labelText}`}>\n {label(labelText ?? '')} {textField(fieldsText[0] as string)}\n </div>,\n // unlabeled subsequent fields\n ...fieldsText.slice(1).map((text, i) => (\n <div className={discoveryFieldStyle} key={`${text}-${i}`}>\n <div />\n {textField(text)}\n </div>\n )),\n ]}\n </div>\n ) : (\n <React.Fragment />\n );\n};\n\nconst accessDescriptor: FieldRendererFunction = (\n resource: JSONValue,\n _: string | undefined,\n) => {\n if (\n resource === null ||\n typeof resource !== 'object' ||\n !(accessibleFieldName in resource)\n ) {\n return <React.Fragment />;\n }\n\n if (resource[accessibleFieldName] === AccessLevel.ACCESSIBLE) {\n return <Alert color=\"green\">You have access to this study.</Alert>;\n }\n if (resource[accessibleFieldName] === AccessLevel.UNACCESSIBLE) {\n return <Alert color=\"red\">You do not have access to this study.</Alert>;\n }\n return (\n <Alert color=\"yellow\">\n This study does not include data access authorization details.\n </Alert>\n );\n};\n\nconst formatResourceValuesWhenNestedArray = (\n resourceFieldValue: string[],\n): string | string[] => {\n if (\n Array.isArray(resourceFieldValue) &&\n Array.isArray(resourceFieldValue[0])\n ) {\n return resourceFieldValue[0].join(', ');\n }\n return resourceFieldValue;\n};\n\nconst renderDetailTags: FieldRendererFunction = (\n fieldValue: JSONValue,\n _label: string | undefined,\n fieldConfig?: Record<string, any>,\n): ReactElement => {\n //TODO - fix this type\n const resource = fieldValue as StudyResource;\n\n if (fieldConfig === undefined) {\n return <React.Fragment />;\n }\n if (fieldConfig?.categories === undefined) {\n return <React.Fragment />;\n }\n\n if (fieldConfig.contentType === 'tags') {\n const tags = fieldConfig.categories\n ? (resource.tags || []).filter((tag) =>\n fieldConfig.categories?.includes(tag.category),\n )\n : resource.tags;\n\n return (\n <div key={`detail-tag-${fieldConfig.field}`}>\n {RenderTagsCell({ value: tags })}\n </div>\n );\n }\n return <React.Fragment />;\n};\n\nexport const createFieldRendererElement = (\n field: StudyDetailsField | StudyTabTagField,\n resource: JSONValue,\n): ReactElement | null => {\n // determine the value of the field\n let resourceFieldValue =\n field.field && JSONPath({ json: resource, path: field.field });\n\n if (!isArray(resourceFieldValue) || resourceFieldValue.length == 0 || resourceFieldValue[0] === null) {\n if (field.includeIfNotAvailable === false) return null;\n if (field.valueIfNotAvailable) {\n resourceFieldValue = field.valueIfNotAvailable as JSONValue;\n } else {\n resourceFieldValue = '';\n }\n } else {\n resourceFieldValue = resourceFieldValue[0];\n }\n\n const label =\n field.includeLabel === undefined || field?.includeLabel\n ? field.name\n : undefined;\n\n const studyFieldRenderer = StudyDetailsRenderer(\n field.contentType,\n field?.renderer ?? 'default',\n );\n switch (field.contentType) {\n case 'accessDescriptor': {\n return studyFieldRenderer(resource, label, field.params);\n }\n case 'tags': {\n return studyFieldRenderer(resource, label, { ...field.params, ...field });\n }\n default:\n if (\n resourceFieldValue &&\n isArray(resourceFieldValue) &&\n resourceFieldValue.length > 0 &&\n resourceFieldValue[0].length !== 0 &&\n resourceFieldValue.every((val: unknown) => typeof val === 'string')\n ) {\n resourceFieldValue =\n formatResourceValuesWhenNestedArray(resourceFieldValue);\n return studyFieldRenderer(resourceFieldValue, label, field.params);\n } else if (\n resourceFieldValue !== undefined ||\n resourceFieldValue !== null\n )\n return studyFieldRenderer(resourceFieldValue, label, field.params);\n }\n\n return null;\n};\n\nconst DefaultGen3StudyDetailsFieldsRenderers: Record<\n string,\n FieldRendererFunctionMap\n> = {\n text: { default: labeledSingleTextField },\n string: {\n default: labeledSingleTextField,\n yearOfBirthRestricted: labeledYearOfBirthRestricted,\n },\n link: { default: labeledSingleLinkField },\n textList: { default: labeledMultipleTextField },\n linkList: {\n default: labeledMultipleLinkField,\n linkWithTitle: unlabeledMultipleLinkField,\n },\n block: { default: blockTextField },\n accessDescriptor: { default: accessDescriptor },\n tags: { default: renderDetailTags },\n number: { default: labeledNumberField },\n paragraphs: { default: labeledParagraph },\n};\n\nStudyFieldRendererFactory.registerFieldRendererCatalog(\n DefaultGen3StudyDetailsFieldsRenderers,\n);\n","import React, { useMemo } from 'react';\nimport { StudyTabGroup } from '../types';\nimport { Text } from '@mantine/core';\nimport { JSONObject } from '@gen3/core';\nimport { createFieldRendererElement } from './StudyItems';\nimport { JSONPath } from 'jsonpath-plus';\n\ninterface StudyTabGroupProps extends StudyTabGroup {\n readonly data: JSONObject;\n}\n\nconst StudyGroup = ({ data, header, fields }: StudyTabGroupProps) => {\n const groupHasContent = useMemo(\n () =>\n fields.some((field) => {\n // TDDO: handle ifFieldIsNotAvailable\n if (!field.field) {\n return false;\n }\n const resourceFieldValue = JSONPath({\n json: data,\n path: field.field,\n });\n return (\n resourceFieldValue &&\n resourceFieldValue.length > 0 &&\n resourceFieldValue[0].length !== 0\n );\n }),\n [fields, data],\n );\n\n if (!groupHasContent) {\n return null;\n }\n\n return (\n <div className=\" flex flex-col\">\n <div className=\"bg-accent-lightest w-full p-1 mb-4\">\n <Text color=\"primary\" fw={700} >{header}</Text>\n </div>\n <div\n className=\"p-4\">\n {fields.map((field) => {\n return createFieldRendererElement(field, data as any);\n })}\n </div>\n </div>\n );\n};\n\nexport default StudyGroup;\n","import React from 'react';\nimport { StudyTabGroup } from '../types';\nimport { JSONObject } from '@gen3/core';\nimport StudyGroup from './StudyGroup';\n\ninterface StudyGroupPanelProps {\n readonly groups: StudyTabGroup[];\n readonly data: JSONObject;\n}\n\nconst StudyGroupPanel = ({ data, groups }: StudyGroupPanelProps) => {\n\n return (\n <div className=\"flex flex-col my-2 w-full\">\n {groups.map(({ header, fields }) => {\n return (\n <StudyGroup\n data={data}\n header={header}\n fields={fields}\n key={`${header}-study-group`}\n />\n );\n })}\n </div>\n );\n};\n\nexport default StudyGroupPanel;\n","import React, { ReactElement } from 'react';\nimport { Text, Tabs } from '@mantine/core';\nimport { JSONObject } from '@gen3/core';\nimport { StudyDetailView } from '../types';\nimport StudyGroupPanel from './StudyGroupPanel';\nimport { JSONPath } from 'jsonpath-plus';\n\ninterface StudyDetailsPanelProps {\n readonly data: JSONObject;\n readonly studyConfig: StudyDetailView;\n}\n\nconst StudyDetailsPanel = ({\n data,\n studyConfig,\n}: StudyDetailsPanelProps): ReactElement => {\n\n const headerText = JSONPath({\n json: data,\n path: studyConfig?.header?.field ?? '',\n });\n return (\n <div>\n <Text size=\"lg\" w={700} className=\"mb-4\">\n {headerText}\n </Text>\n <Tabs defaultValue={studyConfig?.tabs?.[0]?.tabName}>\n <Tabs.List>\n {studyConfig?.tabs.map((tab) => {\n return (\n <Tabs.Tab value={tab.tabName} key={`${tab.tabName}-details-tab`}>\n {tab.tabName}\n </Tabs.Tab>\n );\n })}\n </Tabs.List>\n {studyConfig?.tabs.map((tab) => {\n return (\n <Tabs.Panel value={tab.tabName} key={`${tab.tabName}-details-tab-panel` }>\n <StudyGroupPanel data={data} groups={tab.groups} />\n </Tabs.Panel>\n );\n })}\n </Tabs>\n </div>\n );\n};\n\nexport default StudyDetailsPanel;\n","import React from 'react';\nimport { JSONObject } from '@gen3/core';\nimport { accessibleFieldName, AccessLevel, DataAuthorization } from '../../../utils';\n\ninterface DetailsAccessProps {\n readonly studyData: JSONObject;\n dataAccess: DataAuthorization;\n}\n\nconst DetailsAuthorizationIcon = ({\n studyData,\n dataAccess,\n}: DetailsAccessProps) => {\n const accessStyle = 'flex w-full items-center rounded-sm border-2 py-3 px-1';\n return (\n <div className=\"flex mb-2\">\n {dataAccess.enabled &&\n studyData[accessibleFieldName] &&\n studyData[accessibleFieldName] === AccessLevel.ACCESSIBLE ? (\n <div\n className={`${accessStyle} bg-green-100 border-green-500 text-black pl-2`}\n >\n You have access to this data.\n </div>\n ) : (\n <div\n className={`${accessStyle} bg-yellow-100 border-yellow-500 text-black pl-2`}\n >\n You do not have access to this data.\n </div>\n )}\n </div>\n );\n};\n\nexport default DetailsAuthorizationIcon;\n","import React, { useMemo } from 'react';\nimport { DataDownloadLinks, DownloadLinkFields } from '../types';\nimport { GEN3_FENCE_API, JSONObject } from '@gen3/core';\nimport { Accordion, Button, Group, Stack, Text } from '@mantine/core';\nimport { FiDownload as DownloadIcon } from 'react-icons/fi';\n\nconst extractFieldData = (\n data: JSONObject,\n fieldsMap: DownloadLinkFields,\n): Record<string, string | undefined> => {\n const result: Record<string, string | undefined> = {};\n Object.keys(fieldsMap).forEach((key) => {\n const value = fieldsMap[key as keyof DownloadLinkFields];\n if (value in data && typeof data[value] === 'string') {\n result[key] = data[value] as string;\n } else {\n result[key] = undefined;\n }\n });\n return result;\n};\n\ninterface DataDownloadLinksProps {\n readonly studyData: JSONObject;\n readonly downloadLinks?: DataDownloadLinks;\n readonly downloadLinkFields?: DownloadLinkFields;\n}\n\nconst DownloadLinksPanel = ({\n studyData,\n downloadLinks,\n downloadLinkFields = {\n titleField: 'title',\n descriptionField: 'description',\n idField: 'guid',\n },\n}: DataDownloadLinksProps) => {\n const downloadEntries = useMemo(() => {\n if (!downloadLinks || !studyData[downloadLinks.field]) return undefined;\n const studyDownloadLinks = studyData[downloadLinks.field] as JSONObject[];\n return studyDownloadLinks.map((data: JSONObject) =>\n extractFieldData(data, downloadLinkFields),\n );\n }, [studyData, downloadLinks, downloadLinkFields]);\n\n return (\n <Accordion>\n <Accordion.Item value=\"downloadLinks\">\n <Accordion.Control>\n <Text>{downloadLinks?.name || 'Data Download Links'}</Text>\n </Accordion.Control>\n <Accordion.Panel>\n <Stack>\n {downloadEntries &&\n downloadEntries.map(\n (entry: Record<string, string | undefined>) => {\n // minimum required fields are title and id\n if (\n entry['titleField'] === undefined ||\n entry['idField'] === undefined\n ) {\n return null;\n }\n const id = entry[downloadLinkFields.idField];\n return (\n <Group justify=\"space-between\" key={id} gap=\"md\">\n <Text>{entry['titleField'] || ''}</Text>\n <Button\n component=\"a\"\n href={`${GEN3_FENCE_API}/data/${id}?expires_in=900&redirect`}\n target=\"_blank\"\n rel=\"noreferrer\"\n type=\"text\"\n leftSection={<DownloadIcon />}\n data-disabled={!id}\n >\n Download File\n </Button>\n </Group>\n );\n },\n )}\n </Stack>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n );\n};\n\nexport default DownloadLinksPanel;\n","/**\n * Non tabbed version of the StudyDetailsPanel\n */\nimport React, { ReactElement } from 'react';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { JSONObject, JSONValue } from '@gen3/core';\nimport { StudyPageConfig } from '../types';\nimport { DataAuthorization } from '../../../utils';\nimport DetailsAuthorizationIcon from './DetailsAuthorizationIcon';\nimport { JSONPath } from 'jsonpath-plus';\nimport { toString } from 'lodash';\nimport { createFieldRendererElement } from './StudyItems';\nimport DownloadLinksPanel from '../StudyPage/DownloadLinksPanel';\n\nconst StudyTitle = ({\n title,\n className = 'font-header text-lg font-semibold',\n}: {\n title: string;\n className?: string;\n}): ReactElement => {\n return (\n <div>\n <h1 className={className}>{title}</h1>\n </div>\n );\n};\n\ninterface SinglePageStudyDetailsPanelProps {\n readonly data: JSONObject;\n readonly studyConfig?: StudyPageConfig;\n readonly authorization?: DataAuthorization;\n}\n\nconst SinglePageStudyDetailsPanel = ({\n data,\n studyConfig,\n authorization,\n}: SinglePageStudyDetailsPanelProps): ReactElement => {\n let headerText = '';\n if (studyConfig?.header?.field) {\n const res: JSONObject = JSONPath({\n path: studyConfig.header.field,\n json: data,\n });\n headerText = res.length ? toString(res[0]) : '';\n }\n\n const elements = useDeepCompareMemo(() => {\n if (studyConfig === undefined || studyConfig === null) {\n return <div>Study Details Panel not configured</div>;\n } else {\n return studyConfig?.fieldsToShow.map((fieldToShow) => {\n return (\n <div\n key={`${fieldToShow.fields.join('-')}-details`}\n className={`px-2 ${\n fieldToShow.groupWidth == 'full' || fieldToShow.groupWidth === undefined\n ? 'w-full'\n : 'w-1/2'\n }`}\n >\n <div className=\"flex flex-col\">\n {fieldToShow?.groupName ? (\n <div className=\"text-lg font-bold\">{fieldToShow.groupName}</div>\n ) : null}\n {fieldToShow.fields.map((field) => {\n const element = createFieldRendererElement(\n field,\n data as JSONValue,\n );\n if (element !== null) {\n return (\n <div\n key={`item-${field.field}`}\n className={`flex w-full bg-base-lightest my-1 justify-between rounded-md py-1.5 px-1 text-sm ${\n field?.classNames?.['root'] ?? ''\n }`}\n >\n {element}\n </div>\n );\n }\n })}\n </div>\n </div>\n );\n });\n }\n }, [studyConfig, data]);\n\n return (\n <div className=\"flex flex-col\">\n <StudyTitle\n title={headerText}\n className={studyConfig?.header?.className}\n />\n {authorization !== undefined && authorization?.enabled ? (\n <DetailsAuthorizationIcon studyData={data} dataAccess={authorization} />\n ) : (\n false\n )}\n <div className=\"flex flex-wrap w-full\">{elements}</div>\n {studyConfig?.downloadLinks && (\n <DownloadLinksPanel\n studyData={data}\n downloadLinks={studyConfig?.downloadLinks}\n />\n )}\n </div>\n );\n};\n\nexport default SinglePageStudyDetailsPanel;\n","import { Button, CopyButton, Drawer } from '@mantine/core';\nimport StudyDetailsPanel from './StudyDetailsPanel';\nimport React, { useEffect } from 'react';\nimport { useDisclosure } from '@mantine/hooks';\nimport { MdKeyboardDoubleArrowLeft as BackIcon } from 'react-icons/md';\nimport SinglePageStudyDetailsPanel from './SinglePageStudyDetailsPanel';\nimport { useStudyContext } from '../StudyProvider';\nimport { StudyDetailView, StudyPageConfig } from '../types';\nimport { DataAuthorization } from '../../../utils';\n\nconst StudyDetails = ({\n index,\n detailView,\n simpleDetailsView,\n authz\n}: {\n index: string,\n detailView: StudyDetailView,\n simpleDetailsView?: StudyPageConfig,\n authz: DataAuthorization\n}) => {\n const { studyDetails } = useStudyContext();\n const [opened, { open, close }] = useDisclosure(false);\n let permalink = 'Discovery/notfound';\n\n if (studyDetails) {\n const studyId = studyDetails[index];\n const pagePath = `/discovery/${encodeURIComponent(\n typeof studyId == 'string' ? 'string' : 'unknown',\n )}`;\n permalink = `/${pagePath}`;\n }\n\n useEffect(() => {\n if (Object.keys(studyDetails).length > 0) {\n open();\n }\n }, [studyDetails, open]);\n\n if (!studyDetails) {\n return null;\n }\n\n return (\n <Drawer.Root opened={opened} onClose={close} size=\"50%\" position=\"right\">\n <Drawer.Overlay opacity={0.5} blur={4} />\n <Drawer.Content>\n <Drawer.Header>\n <Button leftSection={<BackIcon />} onClick={close} variant=\"outline\">\n {' '}\n Back{' '}\n </Button>\n <CopyButton value={permalink}>\n {({ copied, copy }) => (\n <Button color={copied ? 'primary' : 'secondary'} onClick={copy}>\n {copied ? 'Copied Permalink' : 'Permalink'}\n </Button>\n )}\n </CopyButton>\n </Drawer.Header>\n <Drawer.Body>\n {detailView ?\n <StudyDetailsPanel\n data={studyDetails ?? {}}\n studyConfig={detailView}\n /> : simpleDetailsView ?\n <SinglePageStudyDetailsPanel data={studyDetails ?? {}} studyConfig={simpleDetailsView} authorization={authz} /> :\n <div>Study Details Panel not configured</div>}\n </Drawer.Body>\n </Drawer.Content>\n </Drawer.Root>\n );\n};\n\nexport default StudyDetails;\n","import React, { useState } from 'react';\nimport {\n MantineReactTable,\n MRT_Cell,\n type MRT_PaginationState,\n MRT_Row,\n MRT_RowData,\n type MRT_RowSelectionState,\n type MRT_SortingState,\n useMantineReactTable,\n} from 'mantine-react-table';\nimport { Loader, Text } from '@mantine/core';\nimport { useDeepCompareEffect, useDeepCompareMemo } from 'use-deep-compare';\nimport { getManualSortingAndPagination, jsonPathAccessor } from './utils';\nimport { DiscoveryTableCellRenderer } from './TableRenderers/CellRendererFactory';\nimport { DiscoveryTableRowRenderer } from './TableRenderers/RowRendererFactory';\nimport { useDiscoveryContext } from './DiscoveryProvider';\nimport { useStudyContext } from '../Study/StudyProvider';\nimport StudyDetails from '../Study/StudyDetails/StudyDetails';\nimport { CellRendererFunction } from './TableRenderers/types';\nimport { JSONObject } from '@gen3/core';\nimport { TableIcons } from '../../components/Tables/TableIcons';\nimport {\n OnChangeFn,\n PaginationState,\n SortingState,\n} from '@tanstack/table-core';\nimport {\n DataRequestStatus,\n RowSelectCompareFunctions,\n SelectableRowConfiguration,\n} from './types';\nimport { LoadingOverlay } from '@mantine/core';\n\nconst CompareFn = (\n fieldValue: string,\n cmpOp: RowSelectCompareFunctions,\n value?: string | number,\n) => {\n switch (cmpOp) {\n case 'alwaysTrue':\n return true;\n case 'arrayNotEmpty':\n return Array.isArray(fieldValue) && fieldValue.length > 0;\n }\n};\n\nconst isSelectable = (\n row: MRT_RowData,\n config?: SelectableRowConfiguration,\n) => {\n if (!config) return false;\n if (!Object.hasOwn(row.original, config.field)) return false;\n const fieldValue = row.original[config.field];\n return CompareFn(fieldValue, config.comparer, config.value);\n};\n\nconst extractCellValue =\n (func: CellRendererFunction) =>\n ({ cell, row }: { cell: MRT_Cell<JSONObject>; row: MRT_Row<MRT_RowData> }) =>\n func({ value: cell.getValue() as never, cell, row });\n\ninterface DiscoveryTableProps {\n data: Array<Record<string, any>>;\n hits: number;\n dataRequestStatus: DataRequestStatus;\n pagination: MRT_PaginationState;\n sorting: MRT_SortingState;\n setPagination: OnChangeFn<PaginationState>;\n setSorting: OnChangeFn<SortingState>;\n setSelection: (selection: Array<string>) => void;\n}\n\nconst DiscoveryTable = ({\n data,\n hits,\n dataRequestStatus,\n setSorting,\n setPagination,\n setSelection,\n pagination,\n sorting,\n}: DiscoveryTableProps) => {\n const { discoveryConfig: config } = useDiscoveryContext();\n const { setStudyDetails } = useStudyContext();\n const { isLoading, isError, isFetching } = dataRequestStatus;\n const manualSortingAndPagination = getManualSortingAndPagination(config);\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({}); //ts type available\n\n const cols = useDeepCompareMemo(() => {\n const studyColumns = config.studyColumns ?? [];\n return studyColumns.map((columnDef, idx) => {\n return {\n key: `${columnDef.field}-${idx}`,\n field: columnDef.field,\n accessorKey: columnDef.field,\n header: columnDef.name,\n accessorFn: jsonPathAccessor(columnDef.field),\n Cell: columnDef?.contentType\n ? extractCellValue(\n DiscoveryTableCellRenderer(\n columnDef?.contentType,\n columnDef?.cellRenderFunction ?? 'default',\n {\n ...(columnDef?.params ?? {}),\n valueIfNotAvailable: columnDef?.valueIfNotAvailable ?? '',\n },\n ),\n )\n : extractCellValue(\n DiscoveryTableCellRenderer(\n 'string',\n columnDef?.cellRenderFunction ?? 'default',\n {\n ...(columnDef?.params ?? {}),\n valueIfNotAvailable: columnDef?.valueIfNotAvailable ?? '',\n },\n ),\n ),\n };\n });\n }, [config.studyColumns]);\n\n const checkIfRowIsSelectable = (row: MRT_RowData) => {\n if (config.tableConfig?.selectableRows) return true;\n if (config.tableConfig?.selectableRowConfiguration) {\n return isSelectable(row, config.tableConfig.selectableRowConfiguration);\n }\n return false;\n };\n\n const table = useMantineReactTable({\n columns: cols as any[],\n data: data ?? [],\n manualSorting: manualSortingAndPagination,\n manualPagination: manualSortingAndPagination,\n paginateExpandedRows: false,\n ...(manualSortingAndPagination\n ? {\n onPaginationChange: setPagination,\n onSortingChange: setSorting,\n }\n : {}),\n enableRowSelection: checkIfRowIsSelectable,\n rowCount: hits,\n icons: TableIcons,\n enableTopToolbar: false,\n enableColumnFilters: false,\n enableColumnActions: false,\n enableStickyHeader: true,\n enableStickyFooter: true,\n getRowId: (originalRow) =>\n config?.minimalFieldMapping?.uid &&\n config.minimalFieldMapping.uid in originalRow\n ? originalRow[config.minimalFieldMapping.uid]\n : (originalRow?.id ?? undefined),\n // TODO: keep this to explore later\n // mantineTableContainerProps: ({ table }) => {\n // return {\n // sx: {\n // maxHeight: 'calc(100vh - 560px) !important;',\n // },\n // };\n // },\n renderDetailPanel: config.studyPreviewField\n ? DiscoveryTableRowRenderer(config.studyPreviewField)\n : undefined,\n onRowSelectionChange: setRowSelection,\n state: {\n rowSelection,\n isLoading,\n ...(manualSortingAndPagination\n ? {\n pagination,\n sorting,\n }\n : {}),\n showProgressBars: isFetching,\n showAlertBanner: isError,\n expanded: config.tableConfig?.expandableRows === true ? true : undefined,\n columnVisibility: {\n 'mrt-row-expand': false,\n },\n },\n layoutMode: 'semantic',\n mantineDetailPanelProps: {\n style: {\n boxShadow: '0 -2px 0px 0px var(--table-border-color) inset',\n },\n },\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-table-1)',\n color: 'var(--mantine-color-table-contrast-1)',\n textAlign: 'center',\n padding: 'var(--mantine-spacing-md)',\n fontWeight: 600,\n fontSize: 'var(--mantine-font-size-sm)',\n textTransform: 'uppercase',\n },\n },\n mantineTableBodyRowProps: ({ row }) => ({\n onClick: () => {\n setStudyDetails(() => {\n return { ...row.original };\n });\n },\n style: {\n borderWidth: 0,\n fontSize: 'var(--mantine-font-size-sm)',\n },\n }),\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-1)',\n '--mrt-striped-row-background-color': 'var(--mantine-color-base-3)',\n },\n },\n });\n\n useDeepCompareEffect(() => {\n //fetch data based on row selection state or something\n\n setSelection(rowSelection ? Object.keys(rowSelection) : []);\n }, [rowSelection, setSelection]);\n\n if (dataRequestStatus.isLoading) {\n return (\n <div className=\"flex w-full py-24 relative justify-center\">\n <Loader variant=\"dots\" />\n </div>\n );\n }\n if (dataRequestStatus.isError) {\n return (\n <div className=\"flex w-full py-24 h-100 relative justify-center\">\n <Text size={'xl'}>Error loading discovery data</Text>\n </div>\n );\n }\n return (\n <React.Fragment>\n <StudyDetails\n index={config?.minimalFieldMapping?.uid ?? 'unknown'}\n detailView={config.detailView}\n simpleDetailsView={config.simpleDetailsView}\n authz={config.features.authorization}\n />\n <div className=\"grow w-auto inline-block overflow-x-scroll\">\n <LoadingOverlay visible={dataRequestStatus.isLoading} />\n <MantineReactTable table={table} />\n </div>\n </React.Fragment>\n );\n};\n\nexport default DiscoveryTable;\n","import { useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { mergeRefs, useDidUpdate } from '@mantine/hooks';\nimport { CSSProperties } from '@mantine/core';\n\nfunction getAutoWidthDuration(width: number | string) {\n if (!width || typeof width === 'string') {\n return 0;\n }\n const constant = width / 36;\n return Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10);\n}\n\nexport function getElementWidth(\n el: React.RefObject<HTMLElement> | { current?: { scrollWidth: number } },\n) {\n return el?.current ? el.current.scrollWidth : 'auto';\n}\n\nconst raf = typeof window !== 'undefined' && window.requestAnimationFrame;\n\ninterface UseCollapsableSidebar {\n opened: boolean;\n transitionDuration?: number;\n transitionTimingFunction?: string;\n onTransitionEnd?: () => void;\n}\n\ninterface GetCollapseProps {\n [key: string]: unknown;\n style?: CSSProperties;\n onTransitionEnd?: (e: TransitionEvent) => void;\n refKey?: string;\n ref?: React.ForwardedRef<HTMLDivElement>;\n}\n\nexport function useCollapsableSidebar({\n transitionDuration,\n transitionTimingFunction = 'ease',\n onTransitionEnd = () => null,\n opened,\n}: UseCollapsableSidebar): (props: GetCollapseProps) => Record<string, any> {\n const el = useRef<HTMLElement | null>(null);\n const collapsedWidth = 0;\n const collapsedStyles = {\n display: 'none',\n width: 0,\n overflow: 'hidden',\n };\n const [styles, setStylesRaw] = useState<CSSProperties>(\n opened ? {} : collapsedStyles,\n );\n const setStyles = (\n newStyles: object | ((oldStyles: object) => object),\n ): void => {\n flushSync(() => setStylesRaw(newStyles));\n };\n\n const mergeStyles = (newStyles: object): void => {\n setStyles((oldStyles) => ({ ...oldStyles, ...newStyles }));\n };\n\n function getTransitionStyles(width: number | string): {\n transition: string;\n } {\n const _duration = transitionDuration || getAutoWidthDuration(width);\n return {\n transition: `width ${_duration}ms ${transitionTimingFunction}, opacity ${_duration}ms ${transitionTimingFunction}`,\n };\n }\n\n useDidUpdate(() => {\n if (typeof raf === 'function') {\n if (opened) {\n raf(() => {\n mergeStyles({\n willChange: 'width',\n display: 'block',\n overflow: 'hidden',\n });\n raf(() => {\n const width = getElementWidth(el);\n mergeStyles({ ...getTransitionStyles(width), width });\n });\n });\n } else {\n raf(() => {\n const width = getElementWidth(el);\n mergeStyles({\n ...getTransitionStyles(width),\n willChange: 'width',\n width,\n });\n raf(() => mergeStyles({ width: collapsedWidth, overflow: 'hidden' }));\n });\n }\n }\n }, [opened]);\n\n const handleTransitionEnd = (e: React.TransitionEvent): void => {\n if (e.target !== el.current || e.propertyName !== 'width') {\n return;\n }\n\n if (opened) {\n const width = getElementWidth(el);\n\n if (width === styles.width) {\n setStyles({});\n } else {\n mergeStyles({ width });\n }\n\n onTransitionEnd();\n } else if (styles.width === collapsedWidth) {\n setStyles(collapsedStyles);\n onTransitionEnd();\n }\n };\n\n function getCollapseProps({\n style = {},\n refKey = 'ref',\n ...rest\n }: GetCollapseProps = {}) {\n const theirRef: any = rest[refKey];\n return {\n 'aria-hidden': !opened,\n ...rest,\n [refKey]: mergeRefs(el, theirRef),\n onTransitionEnd: handleTransitionEnd,\n style: { boxSizing: 'border-box', ...style, ...styles },\n };\n }\n\n return getCollapseProps;\n}\n","import React from 'react';\nimport { useReducedMotion } from '@mantine/hooks';\nimport {\n Box,\n BoxProps,\n Factory,\n factory,\n getStyleObject,\n useMantineTheme,\n useProps,\n} from '@mantine/core';\nimport { useCollapsableSidebar } from './use-collapsable-sidebar';\n\nexport interface CollapsableSidebarProps\n extends BoxProps,\n Omit<React.ComponentPropsWithoutRef<'div'>, keyof BoxProps> {\n /** Opened state */\n in: boolean;\n\n /** Called each time transition ends */\n onTransitionEnd?: () => void;\n\n /** Transition duration in ms, `200` by default */\n transitionDuration?: number;\n\n /** Transition timing function, default value is `ease` */\n transitionTimingFunction?: string;\n\n /** Determines whether opacity should be animated, `true` by default */\n animateOpacity?: boolean;\n}\n\nexport type CollapseSidebarFactory = Factory<{\n props: CollapsableSidebarProps;\n ref: HTMLDivElement;\n}>;\n\nconst defaultProps: Partial<CollapsableSidebarProps> = {\n transitionDuration: 200,\n transitionTimingFunction: 'ease',\n animateOpacity: true,\n};\n\nexport const CollapsableSidebar = factory<CollapseSidebarFactory>(\n (props, ref) => {\n const {\n children,\n in: opened,\n transitionDuration,\n transitionTimingFunction,\n style,\n onTransitionEnd,\n animateOpacity,\n ...others\n } = useProps('Collapse', defaultProps, props);\n\n const theme = useMantineTheme();\n const shouldReduceMotion = useReducedMotion();\n const reduceMotion = theme.respectReducedMotion\n ? shouldReduceMotion\n : false;\n const duration = reduceMotion ? 0 : transitionDuration;\n\n const getCollapseProps = useCollapsableSidebar({\n opened,\n transitionDuration: duration,\n transitionTimingFunction,\n onTransitionEnd,\n });\n\n if (duration === 0) {\n return opened ? <Box {...others}>{children}</Box> : null;\n }\n\n return (\n <Box\n {...getCollapseProps({\n style: {\n opacity: opened || !animateOpacity ? 1 : 0,\n transition: animateOpacity\n ? `opacity ${duration}ms ${transitionTimingFunction}`\n : 'none',\n ...getStyleObject(style, theme),\n },\n ref,\n ...others,\n })}\n >\n {children}\n </Box>\n );\n },\n);\n\nCollapsableSidebar.displayName = '@gen3/frontend/CollapsableSidebar';\n","import React from 'react';\nimport { Checkbox, Paper } from '@mantine/core';\nimport { KeyValueSearchFilter } from '../types';\nimport { SearchFilterState } from './types';\n\ninterface SearchFiltersProps {\n readonly values: string[];\n readonly filter: KeyValueSearchFilter;\n filterState: SearchFilterState;\n setFilterState: React.Dispatch<React.SetStateAction<SearchFilterState>>;\n}\n\nconst SearchFilters = ({\n values,\n filter,\n filterState,\n setFilterState,\n}: SearchFiltersProps) => {\n const { key } = filter;\n return (\n <div className=\"flex flex-col\">\n <Paper>\n {values.map((value) => {\n const valueDisplayName =\n filter.valueDisplayNames && filter.valueDisplayNames[value]\n ? filter.valueDisplayNames[value]\n : value;\n return (\n <Checkbox\n key={`${key}-${value}`}\n checked={filterState[key] && filterState[key][value]}\n label={valueDisplayName}\n onChange={(ev) => {\n const newFilterState = { ...filterState };\n if (!newFilterState[key]) {\n newFilterState[key] = {};\n }\n if (ev.target.checked) {\n newFilterState[key][value] = true;\n } else {\n delete newFilterState[key][value];\n if (Object.keys(newFilterState[key]).length === 0) {\n delete newFilterState[key];\n }\n }\n setFilterState(newFilterState);\n }}\n ></Checkbox>\n );\n })}\n </Paper>\n </div>\n );\n};\n\nexport default SearchFilters;\n","export type SearchFilterState = Record<string, Record<string, boolean>>;\nexport enum SearchCombination {\n and = 'AND',\n or = 'OR',\n}\n\nexport interface AdvancedSearchTerms {\n operation: SearchCombination;\n filters: SearchFilterState;\n}\n\nexport enum AccessSortDirection {\n ASCENDING = 'sort ascending',\n DESCENDING = 'sort descending',\n NONE = 'cancel sorting',\n}\n\nexport type SetAdvancedSearchFiltersFn = (params: AdvancedSearchTerms) => void;\n\nexport interface SearchInputProps {\n searchChanged: (searchTerm: string) => void;\n clearSearch?: () => void;\n placeholder?: string;\n label?: string;\n}\n","import React, { useEffect, useState } from 'react';\nimport { KeyValueSearchFilter } from '../types';\nimport { Accordion, Button, SegmentedControl } from '@mantine/core';\nimport { MdUndo as UndoIcon } from 'react-icons/md';\nimport SearchFilters from './SearchFilters';\nimport {\n SearchCombination,\n SearchFilterState,\n SetAdvancedSearchFiltersFn,\n} from './types';\n\nexport interface AdvancedSearchProps {\n advSearchFilters: ReadonlyArray<KeyValueSearchFilter>;\n setAdvancedSearchFilters: SetAdvancedSearchFiltersFn;\n opened: boolean;\n}\n\nconst AdvancedSearch = ({\n advSearchFilters,\n setAdvancedSearchFilters,\n}: AdvancedSearchProps) => {\n const [searchCombination, setSearchCombination] = useState<SearchCombination>(\n SearchCombination.and,\n );\n const [filterState, setFilterState] = useState<SearchFilterState>({});\n\n useEffect(() => {\n setAdvancedSearchFilters({\n operation: searchCombination,\n filters: filterState,\n });\n }, [searchCombination, filterState, setAdvancedSearchFilters]);\n\n return (\n <React.Fragment>\n <div className=\"flex flex-col\">\n <div className=\"flex flex-row justify-between items-center\">\n <SegmentedControl\n data={[\n { label: 'AND', value: SearchCombination.and },\n { label: 'OR', value: SearchCombination.or },\n ]}\n value={searchCombination}\n size=\"sm\"\n color=\"accent\"\n onChange={(value: string) =>\n setSearchCombination(value as SearchCombination)\n }\n />\n <Button\n size=\"sm\"\n disabled={Object.keys(filterState).length === 0}\n onClick={() => {\n setFilterState({});\n setSearchCombination(SearchCombination.and);\n }}\n leftSection={<UndoIcon />}\n className=\"ml-2\"\n >\n Reset Filters\n </Button>\n </div>\n\n <Accordion className=\"mt-2\" radius=\"sm\" multiple>\n {advSearchFilters.map((filter) => {\n const { key, keyDisplayName, valueDisplayNames } = filter;\n const values = valueDisplayNames\n ? Object.values(valueDisplayNames)\n : [];\n return (\n <Accordion.Item\n value={key}\n key={`discovery-advancedSearch-accordion-${key}`}\n >\n <Accordion.Control key={key}>\n {' '}\n {keyDisplayName || key}\n </Accordion.Control>\n <Accordion.Panel>\n <SearchFilters\n values={values}\n filter={filter}\n filterState={filterState}\n setFilterState={setFilterState}\n />\n </Accordion.Panel>\n </Accordion.Item>\n );\n })}\n </Accordion>\n </div>\n </React.Fragment>\n );\n};\n\nexport default AdvancedSearch;\n","import React from 'react';\nimport { CollapsableSidebar } from '../../../components/CollapsableSidebar';\nimport AdvancedSearch, { AdvancedSearchProps } from './AdvancedSearch';\n\nconst AdvancedSearchPanel = (props: AdvancedSearchProps) => {\n const { opened } = props;\n return (\n <React.Fragment>\n <CollapsableSidebar in={opened}>\n <AdvancedSearch {...props} />\n </CollapsableSidebar>\n </React.Fragment>\n );\n};\n\nexport default AdvancedSearchPanel;\n","import React, { ReactNode, forwardRef } from 'react';\nimport { Button, ButtonProps, Tooltip, Loader } from '@mantine/core';\nimport { FiDownload as DownloadIcon } from 'react-icons/fi';\nimport { useIsUserLoggedIn } from '@gen3/core';\n\nexport interface ExportActionButtonProps {\n label?: string;\n icon?: ReactNode;\n disabled?: boolean;\n tooltip?: string;\n active?: boolean;\n showIcon?: boolean;\n loginRequired?: boolean;\n onClick?: (items: Record<string, any> | Array<any>) => void;\n}\n\nconst DataLibraryActionButton = forwardRef<\n HTMLButtonElement,\n ExportActionButtonProps & ButtonProps\n>(\n (\n {\n label = undefined,\n icon = undefined,\n disabled = false,\n tooltip = undefined,\n onClick = () => null,\n active = false,\n showIcon = true,\n loginRequired = false,\n ...buttonProps\n }: ExportActionButtonProps & ButtonProps,\n ref,\n ) => {\n // TODO Test what idp was used to login and restrict actions to that idp or all or none\n const requiresLogin = !useIsUserLoggedIn() && loginRequired;\n\n const buttonIcon = active ? (\n <Loader size=\"sm\" className=\"p-1\" />\n ) : (\n <DownloadIcon title=\"download\" size={16} />\n );\n\n return (\n <Tooltip disabled={!tooltip} label={tooltip}>\n <Button\n ref={ref}\n onClick={onClick}\n disabled={disabled || requiresLogin}\n leftSection={showIcon ? buttonIcon : undefined}\n {...buttonProps}\n >\n {label}\n </Button>\n </Tooltip>\n );\n },\n);\n\nDataLibraryActionButton.displayName = 'DataLibraryActionButton';\n\nexport default DataLibraryActionButton;\n","import React from 'react';\nimport DataLibraryActionButton from './DataLibraryActionButton';\nimport FileSaver from 'file-saver';\nimport { GEN3_DOMAIN } from '@gen3/core';\nimport { ExportActionButtonProps, ExportActionProps } from './types';\nimport { FiDownload as DownloadIcon } from 'react-icons/fi';\nimport { notifications } from '@mantine/notifications';\nimport { useIsAuthenticated } from '../../../lib/session/session';\nimport { MANIFEST_FILENAME } from '../../../types/constants';\n\n/**\n * Determines the disabled state and the reason for disabling based on authentication status,\n * selection count, and requirement for login.\n *\n * @param {boolean} isAuthenticated - Indicates whether the user is authenticated.\n * @param {number} numSelected - The number of items selected for the operation.\n * @param {boolean} requiresLogin - Specifies whether login is required to perform the operation.\n * @returns {Object} An object containing the following properties:\n * - {boolean} disabled - True if the action should be disabled, false otherwise.\n * - {string} [disabledReason] - The reason why the action is disabled (if applicable).\n */\nconst getDisabledState = (\n isAuthenticated: boolean,\n numSelected: number,\n requiresLogin: boolean,\n) => {\n const LOGIN_REQUIRED_MSG = 'You must be logged in to download a manifest';\n const NO_SELECTION_MSG =\n 'You must select at least one study to download a manifest';\n\n if (requiresLogin && !isAuthenticated) {\n return {\n disabled: true,\n disabledReason: LOGIN_REQUIRED_MSG,\n };\n }\n\n if (numSelected === 0) {\n return {\n disabled: true,\n disabledReason: NO_SELECTION_MSG,\n };\n }\n\n return { disabled: false }; // Default enabled state.\n};\n\nconst handleDownloadManifestClick = <\n T extends Record<string, any> = Record<string, any>,\n>({\n exportDataFields,\n selectedResources,\n}: ExportActionProps<T>) => {\n const { dataObjectField } = exportDataFields;\n if (dataObjectField === undefined) {\n notifications.show({\n title: 'Error notification',\n message:\n 'Missing required configuration field `config.features.export.manifestFieldName',\n });\n return;\n }\n\n // combine manifests from all selected studies\n const manifest: Array<T> = [];\n\n selectedResources.forEach((study) => {\n if (study[dataObjectField]) {\n const studyDataObject = study[dataObjectField];\n if ('commons_url' in study && !GEN3_DOMAIN?.includes(study.commons_url)) {\n // PlanX addition to allow hostname based DRS in manifest download clients\n // like FUSE\n manifest.push(\n ...studyDataObject.map((x: Record<string, unknown>) => ({\n ...x,\n commons_url: 'commons_url' in x ? x.commons_url : study.commons_url,\n })),\n );\n } else {\n manifest.push(...studyDataObject);\n }\n }\n });\n // download the manifest\n\n if (manifest.length === 0) {\n notifications.show({\n title: 'Export warning',\n message:\n 'None of the selected studies have any data objects. Please select a different study or select a different data object field.',\n });\n return;\n }\n const blob = new Blob([JSON.stringify(manifest, null, 2)], {\n type: 'text/json',\n });\n FileSaver.saveAs(blob, MANIFEST_FILENAME);\n};\n\nconst DownloadManifestButton = ({\n buttonConfig,\n selectedResources,\n exportDataFields,\n}: ExportActionButtonProps) => {\n const { isAuthenticated } = useIsAuthenticated();\n const { disabled, disabledReason } = getDisabledState(\n isAuthenticated,\n selectedResources.length,\n buttonConfig?.requiresLogin ?? false,\n );\n return (\n <DataLibraryActionButton\n data-testid=\"download-manifest-button\"\n label={buttonConfig?.label ?? 'Download Manifest'}\n icon={<DownloadIcon />}\n disabled={disabled}\n tooltip={\n disabledReason ??\n buttonConfig?.tooltip ??\n 'Download Manifest of selected studies'\n }\n onClick={() => {\n handleDownloadManifestClick({\n selectedResources: selectedResources,\n exportDataFields: exportDataFields,\n });\n }}\n />\n );\n};\n\nexport default DownloadManifestButton;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n ActionIcon,\n Badge,\n Button,\n Combobox,\n LoadingOverlay,\n ScrollArea,\n TextInput,\n Tooltip,\n useCombobox,\n} from '@mantine/core';\nimport { notifications } from '@mantine/notifications';\nimport {\n type CoreState,\n type DataLibrary,\n DataLibraryStoreMode,\n DatasetOrCohort,\n isAuthenticated,\n selectUserAuthStatus,\n StorageOperationResults,\n useCoreSelector,\n useDataLibrary,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { mergeDefaultTailwindClassnames } from '../../../utils/mergeDefaultTailwindClassnames';\nimport { StylingOverride } from '../../../types';\nimport { ActionButtonConfig } from '../../../components/Buttons/types';\nimport { useRouter } from 'next/router';\nimport { Icon } from '@iconify-icon/react';\nimport { extractClassName } from '../../Navigation/utils';\n\nconst STATUS_TO_MESSAGE: Record<number, string> = {\n 401: 'Please log in to save to data library',\n 404: 'Cannot query data library. Please try again later.',\n 409: 'Selections are already saved to the list.',\n};\n\nconst getNumberOfDatasets = (selected: DatasetOrCohort) =>\n Object.keys(selected).length;\n\nconst isListDifferent = (items: DatasetOrCohort, newItems: DatasetOrCohort) => {\n // test if the new items are different from the current items in the list\n const newNumberOfDatasets = getNumberOfDatasets(newItems);\n const currentNumberOfDatasets = getNumberOfDatasets(items);\n if (newNumberOfDatasets !== currentNumberOfDatasets) return true;\n return Object.keys(newItems).some(\n (key) => newItems[key].id !== items[key].id,\n );\n};\n\ntype SelectOptions = Record<string, string>;\n\nconst extractIdToLabel = (data: DataLibrary): SelectOptions =>\n !data\n ? {}\n : Object.keys(data).reduce((acc: SelectOptions, id) => {\n acc[id] = data[id].name;\n return acc;\n }, {});\n\nconst buildErrorMessage = (error: StorageOperationResults): string => {\n if (STATUS_TO_MESSAGE?.[error.status]) return STATUS_TO_MESSAGE[error.status];\n return 'Error saving to data library. Please try again later.';\n};\nconst createTooltipLabel = (\n error: StorageOperationResults | null,\n isLoggedIn: boolean,\n requiresLogin: boolean | undefined,\n numSelected: number,\n currentListName: string | undefined,\n) => {\n if (!isLoggedIn && requiresLogin)\n return 'Please log in to save to data library';\n if (numSelected === 0)\n return 'Please select at least one study to save to data library';\n if (!currentListName) return 'Please select or create a list';\n if (error) return buildErrorMessage(error);\n return 'Add selections to list';\n};\n\nexport interface AddToDataLibraryComboButtonProps {\n items: DatasetOrCohort;\n buttonConfig: ActionButtonConfig;\n classNames?: StylingOverride;\n dataLibraryStoreMode?: DataLibraryStoreMode;\n isItemsLoading?: boolean;\n}\n\nconst AddToDataLibraryComboButton = <T extends Record<any, any>>({\n buttonConfig,\n items,\n dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly,\n classNames = {},\n isItemsLoading = false,\n}: AddToDataLibraryComboButtonProps) => {\n const [selectItems, setSelectItems] = useState<SelectOptions>({});\n const [currentList, setCurrentList] = useState<string | null>(null);\n const [error, setError] = useState<StorageOperationResults | null>(null);\n const [currentListName, setCurrentListName] = useState<string>('');\n const combobox = useCombobox({\n onDropdownClose: () => combobox.resetSelectedOption(),\n onDropdownOpen: () => {\n setError(null);\n },\n });\n\n const router = useRouter();\n\n const gotoDataLibrary = () => {\n router.push('/DataLibrary');\n };\n\n const numItems = Object.keys(items).length;\n const userStatus = useCoreSelector((state: CoreState) =>\n selectUserAuthStatus(state),\n );\n\n const requiresLogin =\n (buttonConfig?.requiresLogin ? buttonConfig?.requiresLogin : false) ||\n dataLibraryStoreMode === DataLibraryStoreMode.ApiOnly;\n\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n\n useEffect(() => {\n if (userStatus === 'pending') {\n return\n }\n const tempIsAuth = isAuthenticated(userStatus);\n if (tempIsAuth != isLoggedIn) {\n setIsLoggedIn(tempIsAuth);\n }\n }, [userStatus]);\n\n const isDisabled =\n error !== null ||\n numItems === 0 ||\n !currentListName ||\n (requiresLogin && !isLoggedIn);\n const tooltipLabel = createTooltipLabel(\n error,\n isLoggedIn,\n requiresLogin,\n numItems,\n currentListName,\n );\n const classNamesDefaults = {\n root: 'flex items-center justify-start',\n icon: 'rounded-s-none',\n input: 'w-full rounded-e-none',\n };\n\n const mergedClassnames = mergeDefaultTailwindClassnames(\n classNamesDefaults,\n classNames,\n );\n\n const {\n dataLibrary,\n updateListInDataLibrary,\n addListToDataLibrary,\n isLoading,\n isUpdating,\n error: dataLibraryError,\n } = useDataLibrary({ storageMode: dataLibraryStoreMode });\n\n const numLists = Object.keys(dataLibrary ?? {}).length;\n\n const saveToList = (\n listname: string,\n listId: string | undefined = undefined,\n ) => {\n if (numItems === 0) return;\n\n if (Object.keys(items).length === 0) {\n notifications.show({\n id: 'update-datalibrary-no-items-to-update-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `No data objects selected to save to list ${listname}.`,\n loading: false,\n });\n return;\n }\n\n if (listId) {\n // updating list\n\n const isDifferent = isListDifferent(dataLibrary[listId].items, items);\n if (!isDifferent) {\n notifications.show({\n id: 'update-datalibrary-list-no-changes-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `No changes to list ${listname}.`,\n loading: isUpdating !== null,\n });\n return;\n }\n\n updateListInDataLibrary({\n id: listId,\n name: listname,\n items: { ...dataLibrary[listId].items, ...items },\n }).then((results) => {\n if (results.isError) {\n notifications.show({\n id: 'update-datalibrary-list-error-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `Error saving to list ${listname}: ${results.message}`,\n loading: isUpdating !== null,\n });\n } else\n notifications.show({\n id: 'update-datalibrary-list-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `${Object.values(items).length} datasets saved to list ${listname}.`,\n loading: isUpdating !== null,\n });\n });\n } else {\n addListToDataLibrary(items, listname).then((results) => {\n if (results.isError) {\n notifications.show({\n id: 'update-datalibrary-list-error-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `Error saving to list ${listname}: ${results.message}`,\n loading: isUpdating !== null,\n });\n setCurrentListName('');\n setCurrentList(null);\n } else {\n notifications.show({\n id: 'update-datalibrary-list-notification',\n position: 'top-center',\n withCloseButton: true,\n autoClose: 5000,\n title: 'Save to list',\n message: `${Object.values(items).length} datasets saved to list ${listname}.`,\n loading: isLoading || !!isUpdating,\n });\n }\n });\n }\n };\n\n const exactOptionMatch = Object.values(selectItems).some(\n (listName) => listName === currentListName,\n );\n const filteredOptions = exactOptionMatch\n ? selectItems\n : Object.entries(selectItems).reduce((acc, [listId, listName]) => {\n if (\n listName.toLowerCase().includes(currentListName.toLowerCase().trim())\n ) {\n acc[listId] = listName;\n }\n return acc;\n }, {} as SelectOptions);\n\n const options = useMemo(\n () =>\n Object.entries(filteredOptions).map(([listId, listName]) => (\n <Combobox.Option value={listId} key={listId}>\n {listName}\n </Combobox.Option>\n )),\n [filteredOptions],\n );\n\n useEffect(() => {\n if (options.length === 0) setCurrentList(null);\n }, [options]);\n\n useDeepCompareEffect(() => {\n if (dataLibrary)\n if (!dataLibraryError) {\n const listItems = extractIdToLabel(dataLibrary);\n setSelectItems(listItems);\n } else {\n setError(dataLibraryError);\n }\n }, [dataLibrary, dataLibraryError]);\n\n return (\n <div data-testid=\"add-to-data-library\" className={mergedClassnames.root}>\n <Combobox\n onOptionSubmit={(selectedValue) => {\n setCurrentList(selectedValue);\n setCurrentListName(selectItems[selectedValue]);\n combobox.closeDropdown();\n }}\n store={combobox}\n withinPortal={false}\n >\n <Combobox.Target>\n <TextInput\n placeholder={numLists > 0 ? 'Select/Search' : 'Create List'}\n value={currentListName ?? ''}\n classNames={{ input: mergedClassnames.input }}\n onChange={(event) => {\n setCurrentListName(event.currentTarget.value);\n combobox.openDropdown();\n combobox.updateSelectedOptionIndex();\n }}\n onClick={() => combobox.openDropdown()}\n onFocus={() => combobox.openDropdown()}\n onBlur={() => combobox.closeDropdown()}\n rightSection={<Combobox.Chevron />}\n />\n </Combobox.Target>\n\n <Combobox.Dropdown>\n <Combobox.Options>\n <ScrollArea.Autosize mah={200} type=\"scroll\">\n {options.length === 0 ? (\n <Combobox.Empty>Click button to create new list</Combobox.Empty>\n ) : (\n options\n )}\n </ScrollArea.Autosize>\n </Combobox.Options>\n </Combobox.Dropdown>\n </Combobox>\n <Tooltip label=\"Open Datalibrary\">\n <ActionIcon\n size=\"lg\"\n onClick={gotoDataLibrary}\n color=\"secondary.4\"\n className={extractClassName('icon', mergedClassnames)}\n >\n <Icon\n icon=\"gen3:external-link\"\n width={24}\n height={24}\n className={extractClassName('icon', mergedClassnames)}\n />\n </ActionIcon>\n </Tooltip>\n <Tooltip label={tooltipLabel}>\n <Button\n color=\"secondary.4\"\n classNames={{ root: 'w-1/3 ml-2' }}\n loading={isLoading || !!isUpdating}\n disabled={isDisabled}\n onClick={() => {\n if (currentList) {\n saveToList(selectItems[currentList], currentList);\n } else {\n saveToList(currentListName, undefined);\n }\n }}\n >\n {numLists === 0 ||\n (options.length === 0 && currentListName.length > 0)\n ? 'New List'\n : 'Add to List'}\n </Button>\n </Tooltip>\n <div className=\"flex items-center relative\">\n <LoadingOverlay\n loaderProps={{ color: 'accent.4', size: 'sm' }}\n visible={isLoading || isItemsLoading || !!isUpdating}\n />\n <Badge\n className=\"ml-2 max-w-48\"\n variant=\"light\"\n color=\"secondary.4\"\n size=\"xl\"\n radius=\"md\"\n fullWidth\n >\n <span\n className=\"flex items-center justify-center gap-1\"\n data-testid=\"num-items-badge\"\n >\n {numItems} Datasets\n </span>\n </Badge>\n </div>\n </div>\n );\n};\n\nexport default AddToDataLibraryComboButton;\n","import React, { useMemo } from 'react';\nimport {\n buildListItemsGroupedByDataset,\n DataLibraryStoreMode,\n extractFileDatasetsInRecords,\n} from '@gen3/core';\nimport { ExportActionProps } from './types';\nimport { StylingOverride } from '../../../types';\nimport { ActionButtonConfig } from '../../../components/Buttons/types';\nimport AddToDataLibraryComboButton from './AddToDataLibraryComboButton';\n\nexport interface AddToDataLibraryButtonProps<\n T extends Record<string, any> = Record<string, any>,\n> extends ExportActionProps<T> {\n buttonConfig: ActionButtonConfig;\n classNames?: StylingOverride;\n}\n\nconst AddToDataLibrary = <T extends Record<any, any>>({\n buttonConfig,\n selectedResources,\n exportDataFields,\n dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly,\n classNames = {},\n}: AddToDataLibraryButtonProps<T>) => {\n const items = useMemo(\n () =>\n buildListItemsGroupedByDataset(\n extractFileDatasetsInRecords(selectedResources, exportDataFields),\n ),\n [selectedResources, exportDataFields],\n );\n\n return (\n <AddToDataLibraryComboButton\n items={items}\n buttonConfig={buttonConfig}\n dataLibraryStoreMode={dataLibraryStoreMode}\n classNames={classNames}\n />\n );\n};\n\nexport default AddToDataLibrary;\n","import React from 'react';\nimport { ExportFromDiscoveryActions } from '../types';\nimport { ExportActionButtonProps } from './types';\nimport DownloadManifestButton from './DownloadManifestButton';\nimport AddToDataLibrary from './AddToDataLibrary';\nimport { DataLibraryStoreMode } from '@gen3/core';\n\nconst createActionButton = ({\n buttonConfig,\n selectedResources,\n exportDataFields,\n verifyExternalLogins,\n dataLibraryStoreMode,\n}: ExportActionButtonProps) => {\n return {\n manifest: (\n <DownloadManifestButton\n buttonConfig={buttonConfig}\n selectedResources={selectedResources}\n exportDataFields={exportDataFields}\n key={buttonConfig.type}\n />\n ),\n addToDataLibrary: (\n <AddToDataLibrary\n buttonConfig={buttonConfig}\n selectedResources={selectedResources}\n exportDataFields={exportDataFields}\n key={buttonConfig.type}\n verifyExternalLogins={verifyExternalLogins}\n dataLibraryStoreMode={dataLibraryStoreMode}\n />\n ),\n }[buttonConfig.type as string];\n};\n\ninterface ActionBarProps extends ExportFromDiscoveryActions {\n selectedResources: any[];\n}\n\nconst ActionBar: React.FC<ActionBarProps> = ({\n buttons,\n selectedResources,\n exportDataFields,\n verifyExternalLogins,\n dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly,\n}) => {\n return (\n <div className=\"flex items-center justify-end py-1 px-2 mb-1 w-full gap-x-1.5 \">\n {buttons?.map((button) => {\n return createActionButton({\n buttonConfig: button,\n selectedResources,\n exportDataFields,\n verifyExternalLogins,\n dataLibraryStoreMode,\n });\n })}\n </div>\n );\n};\n\nexport default ActionBar;\n","import React, { ReactNode } from 'react';\n\nexport type RendererFunction<T> = (props: T, ...params: any[]) => ReactNode;\n\nexport interface RendererFunctionCatalogEntry<T> {\n [key: string]: RendererFunction<T>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function DefaultItemRenderer<T>(_props: T): ReactNode {\n return <span>DefaultRenderer</span>;\n}\n\ninterface RendererFactoryInterface<T> {\n getRenderer(type: string, functionName: string): RendererFunction<T>;\n registerRenderer(\n type: string,\n functionName: string,\n func: RendererFunction<T>,\n ): void;\n registerRendererCatalog(\n catalog: Record<string, RendererFunctionCatalogEntry<T>>,\n ): void;\n}\n\nexport class RenderFactoryTypedInstance<T>\n implements RendererFactoryInterface<T>\n{\n private catalog: Record<string, RendererFunctionCatalogEntry<T>>;\n private defaultRenderer: RendererFunction<T>;\n\n constructor() {\n this.catalog = {};\n this.defaultRenderer = DefaultItemRenderer;\n }\n\n /**\n * Sets the default renderer function for the specified type.\n *\n * @param {RendererFunction<T>} func - The renderer function to set as the default.\n * @return {void}\n */\n setDefaultRenderer(func: RendererFunction<T>): void {\n this.defaultRenderer = func;\n }\n\n getRenderer(type: string, functionName: string): RendererFunction<T> {\n if (!this.rendererExists(type, functionName)) {\n console.warn(\n '[RenderFactory] Renderer function not found for type: ',\n type,\n ' and function name: ',\n functionName,\n '. Using default renderer instead.',\n );\n return DefaultItemRenderer;\n }\n\n return this.catalog[type][functionName];\n }\n\n /**\n * Check if a renderer exists for a given type and function name\n * @param type\n * @param functionName\n * @returns boolean indicating if the renderer exists\n */\n rendererExists(type: string, functionName: string): boolean {\n return type in this.catalog && functionName in this.catalog[type];\n }\n\n /**\n * Registers a renderer function for a given type and function name.\n *\n * @param {string} type - The type of the renderer function.\n * @param {string} functionName - The name of the renderer function.\n * @param {RendererFunction<T>} func - The renderer function to register.\n * @returns {boolean} - True if the registration is successful, false otherwise.\n * @throws {Error} - If any of the input parameters are missing or if the renderer function already exists.\n */\n registerRenderer(\n type: string,\n functionName: string,\n func: RendererFunction<T>,\n ): boolean {\n if (type && functionName && func) {\n try {\n if (!this.catalog[type]) {\n this.catalog[type] = {};\n }\n if (!this.catalog[type][functionName]) {\n this.catalog[type][functionName] = func;\n } else {\n throw new Error(\n `Renderer function ${functionName} already exists for type ${type}`,\n );\n }\n return true;\n } catch (error) {\n console.error(\n `Error registering renderer ${functionName} for type ${type}: ${error}`,\n );\n return false;\n }\n } else {\n throw new Error('Invalid input parameters');\n }\n }\n\n /**\n * Registers a renderer catalog.\n *\n * @param {Record<string, RendererFunctionCatalogEntry<T>>} catalog - The catalog object containing the renderers.\n * @returns {boolean} - True if the catalog was registered successfully, otherwise false.\n */\n registerRendererCatalog(\n catalog: Record<string, RendererFunctionCatalogEntry<T>>,\n ): boolean {\n if (catalog) {\n Object.keys(catalog).forEach((type) => {\n if (catalog[type]) {\n Object.entries(catalog[type]).forEach(([name, func]) => {\n if (typeof func === 'function') {\n try {\n this.registerRenderer(type, name, func);\n } catch (error) {\n new Error(\n `Error registering renderer ${name} for type ${type}: ${error}`,\n );\n return false;\n }\n }\n });\n }\n });\n return true;\n }\n return false;\n }\n}\n","import React from 'react';\nimport { RenderFactoryTypedInstance } from '../../../utils/RendererFactory';\nimport { Stack, StackProps, Text } from '@mantine/core';\n\ninterface StatisticRendererProps extends StackProps {\n value: any;\n label: string;\n key: string;\n}\n\nconst defaultStatisticRenderer = ({\n value,\n label,\n key,\n ...props\n}: StatisticRendererProps) => {\n return (\n <Stack {...props} key={key} align=\"center\">\n <Text size=\"2rem\" c=\"accent\">\n {value}\n </Text>\n <Text size=\"sm\" c=\"primary\" className=\"uppercase\">\n {label}\n </Text>\n </Stack>\n );\n};\n\nconst DefaultRendererCatalog = {\n string: {\n default: defaultStatisticRenderer,\n },\n};\n\nlet instance: RenderFactoryTypedInstance<StatisticRendererProps>;\n\nconst StatisticRendererFactory =\n (): RenderFactoryTypedInstance<StatisticRendererProps> => {\n if (!instance) {\n instance = new RenderFactoryTypedInstance<StatisticRendererProps>();\n instance.registerRendererCatalog(DefaultRendererCatalog);\n }\n return instance;\n };\n\nexport default StatisticRendererFactory;\n","import React from 'react';\nimport { SummaryStatistics } from './types';\nimport StatisticRendererFactory from './StatisticsRendererFactory';\n\nconst BuildSummaryStatisticPanel = (summaries: SummaryStatistics = []) => {\n return summaries.map((summary) => {\n const { name, field, type } = summary;\n if (name && field && type) {\n // TODO replace 'default' with a real value\n const element = StatisticRendererFactory().getRenderer(\n 'string',\n 'default',\n );\n\n return element({\n value: summary.value ?? 'N/A',\n label: name,\n key: `stats-item-${name}-${field}`,\n });\n }\n });\n};\n\ninterface SummaryStatisticPanelProps {\n summaries: SummaryStatistics;\n}\n\nconst columns = [\n 'grid-cols-0',\n 'grid-cols-1',\n 'grid-cols-2',\n 'grid-cols-3',\n 'grid-cols-4',\n 'grid-cols-5',\n 'grid-cols-6',\n 'grid-cols-7',\n 'grid-cols-8',\n 'grid-cols-9',\n 'grid-cols-10',\n];\n\nconst SummaryStatisticPanel = ({ summaries }: SummaryStatisticPanelProps) => {\n return (\n <div\n className={`grid ${columns[summaries.length]} grow shrink-0 divide-x-2 divide-accent`}\n >\n {BuildSummaryStatisticPanel(summaries)}\n </div>\n );\n};\n\nexport default SummaryStatisticPanel;\n","import { AggregationsData, HistogramData } from '@gen3/core';\n\nexport const capitalize = (original: string): string => {\n if (original === undefined) {\n throw new Error('capitalize: original is undefined');\n }\n if (original.length === 0) {\n return original;\n }\n return original\n .split(' ')\n .map((word) => `${word.charAt(0).toUpperCase()}${word.slice(1)}`)\n .join(' ');\n};\n\nexport const truncateString = (str: string, n: number): string => {\n if (str.length > n) {\n return str.substring(0, n) + '...';\n } else {\n return str;\n }\n};\n\n// from https://stackoverflow.com/questions/33053310/remove-value-from-object-without-mutation\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const removeKey = (key: any, { [key]: _, ...rest }) => rest;\n\nexport const processLabel = (label: string): string => {\n return capitalize(label);\n};\n\nexport const createLabelFromHistogramData = (\n histogramData: HistogramData,\n): string => {\n if (typeof histogramData.key === 'string')\n return capitalize(histogramData.key);\n\n const [start, end] = histogramData.key;\n return `${start}-${end}`;\n};\n\nexport const processRangeKeyLabel = (key: [number, number]): string => {\n return `${key[0]}-${key[1]}`;\n};\n\n/**\n * Computes the row span for each item in the charts object.\n *\n * @param { number } numItems - The charts object containing summary charts.\n * @param {number} [numCols=2] - The number of columns per row.\n * @returns {number[]} - An array of row spans for each item in the charts object.\n */\nexport const computeRowSpan = (\n numItems: number,\n numCols: number = 2,\n): Array<number> => {\n // compute the row span for the last row\n const numLastRow = numItems % numCols;\n\n let spans = new Array(numItems - numLastRow).fill(Math.floor(12 / numCols));\n spans = spans.concat(new Array(numLastRow).fill(Math.floor(12 / numLastRow)));\n return spans;\n};\n\n/**\n * Filters the keys from the provided aggregation data based on a given list of keys to remove.\n *\n * This function processes an `AggregationsData` object by iterating through its properties.\n * It removes elements from the data that match any of the keys specified in the `keysToRemove` array.\n * The filtering applies specifically to elements with a valid `key` property of type == string.\n * If the `key` is empty or matches one of the `keysToRemove`, it is excluded from the resulting object.\n *\n * @param {AggregationsData} data - The aggregation data object to filter. Expected to have properties that\n * are arrays of items containing a `key` property.\n * @param {Array<string>} keysToRemove - Array of string keys that should be removed from the aggregation data.\n * @returns {AggregationsData} A new `AggregationsData` object with filtered entries,\n * omitting the specified keys.\n */\nexport const filterAggregationsDataKeys = (\n data: AggregationsData,\n keysToRemove: Array<string>,\n) => {\n if (!data || typeof data !== 'object') {\n return {} as AggregationsData;\n }\n\n return Object.entries(data).reduce(\n (acc: AggregationsData, [key, chartData]) => {\n if (Array.isArray(chartData)) {\n acc[key] = chartData.filter(\n (x) =>\n x && typeof x.key === 'string' && !keysToRemove.includes(x.key),\n );\n }\n return acc;\n },\n {} as AggregationsData,\n );\n};\n","import { registerTheme } from 'echarts';\n\nexport const filterMissing = (facetData: any) =>\n facetData.filter((d: any) => d.key !== '_missing');\n\nexport const chartColors = [\n '#0173B2',\n '#DE8F05',\n '#029E73',\n '#CC78BC',\n '#CA9161',\n '#949494',\n '#ECE133',\n '#56B4E9',\n '#D55E00',\n '#F0E442',\n];\n\nexport const registerEchartsTheme = () => {\n const defaultTheme = {\n color: chartColors,\n backgroundColor: '#ffffff',\n textStyle: {\n fontFamily: 'Inter, system-ui, sans-serif',\n fontSize: 12,\n },\n };\n\n // 2) Register it once at app startup\n registerTheme('gen3', defaultTheme);\n};\n","import React, { useMemo } from 'react';\nimport { processLabel, truncateString } from '../utils';\nimport { ChartProps } from '../types';\nimport ReactECharts, { ReactEChartsProps } from './ReactECharts';\nimport { HistogramDataArray } from '@gen3/core';\nimport type { EChartsOption } from 'echarts';\nimport { graphic } from 'echarts';\nimport { CallbackDataParams } from 'echarts/types/dist/shared';\nimport { isArray } from 'lodash';\nimport { filterMissing } from './utils';\n\ninterface BarChartData {\n value: number;\n name: string;\n}\n\nconst processChartData = (\n facetData: HistogramDataArray,\n maxBins = 100,\n): BarChartData[] => {\n if (!facetData) {\n return [];\n }\n const data = filterMissing(facetData);\n\n if (data.length === 0) return [];\n\n // get max value in data\n\n let max = Math.max(...data.map((d: any) => d.count));\n if (max < 0) {\n max = 1;\n }\n\n const results = data.slice(0, maxBins).map((d: any) => {\n if (d.count >= 0)\n return { value: d.count, name: truncateString(processLabel(d.key), 35) };\n\n // handle redacted data\n return {\n value: max,\n groupId: 'redacted',\n name: truncateString(processLabel(d.key), 35),\n itemStyle: {\n opacity: 0.5,\n color: new graphic.LinearGradient(0, 0, 0, 1, [\n { offset: 0, color: '#0264ff00' },\n { offset: 1, color: '#0264ff' },\n ]),\n decal: {\n symbolSize: 1.15,\n dashArrayX: [2, 1],\n dashArrayY: [2, 1],\n },\n },\n };\n });\n return results;\n};\n\nconst processAxis = (facetData: HistogramDataArray, maxBins = 100) => {\n const data = filterMissing(facetData);\n const categories = data\n .slice(0, maxBins)\n .map((d: any) => truncateString(processLabel(d.key), 35));\n return {\n yAxis: [\n {\n type: 'value',\n },\n ],\n xAxis: [\n {\n type: 'category',\n data: categories,\n },\n ],\n } as EChartsOption;\n};\n\nconst BarChart = ({ data }: ChartProps) => {\n const chartDefinition = useMemo((): ReactEChartsProps['option'] => {\n return {\n grid: [\n //TODO: make this configurable\n {\n show: false,\n left: '1%',\n top: 10,\n right: '1%',\n bottom: 7,\n containLabel: true,\n },\n ],\n tooltip: {\n trigger: 'item',\n formatter: function (param) {\n const p: CallbackDataParams =\n isArray(param) && param.length > 0\n ? param[0]\n : (param as CallbackDataParams);\n\n const colorSquare = `<span style=\"display:inline-block; width:10px; height:10px; background-color:${p.color}; margin-right:5px;\"></span>`;\n\n if ((p.data as any).groupId === 'redacted')\n return `${p.name}: <b>hidden</b`;\n\n return `${colorSquare}${p.name}: <b>${p.value}</b>`;\n\n // if ((p.data as any).groupId === 'redacted') return `${p.name} Hidden`;\n //return `${p.name} ${p.value}`;\n },\n },\n ...processAxis(data),\n series: [{ type: 'bar', data: processChartData(data) }],\n };\n }, [data]);\n\n return (\n <div className=\"w-full h-64\">\n <ReactECharts option={chartDefinition} />\n </div>\n );\n};\n\nexport default BarChart;\n","import React, { useMemo } from 'react';\nimport { processLabel, truncateString } from '../utils';\nimport ReactECharts, { ReactEChartsProps } from './ReactECharts';\nimport { ChartProps } from '../types';\n\ninterface PieChartData {\n value: number;\n name: string;\n}\n\nconst processChartData = (\n facetData: Record<string, any>,\n maxBins = 100,\n): PieChartData[] => {\n if (!facetData) {\n return [];\n }\n\n const data = facetData.filter((d: any) => d.key !== '_missing');\n\n const results = data.slice(0, maxBins).map((d: any) => ({\n value: d.count,\n name: truncateString(processLabel(d.key), 35),\n }));\n return results;\n};\n\nconst PieChart = ({ data, label, showLegendInChart }: ChartProps) => {\n const chartDefinition = useMemo((): ReactEChartsProps['option'] => {\n return {\n emphasis: {\n label: {\n show: true,\n fontSize: '14',\n },\n },\n tooltip: {\n trigger: 'item',\n },\n legend: showLegendInChart ? {\n top: '5%',\n left: 'center',\n height: '40%',\n type: 'scroll',\n orient: 'vertical',\n } : undefined,\n series: [\n {\n type: 'pie',\n top: showLegendInChart ?'45%': '2%',\n radius: '85%',\n data: processChartData(data),\n label: {\n show: label?.show,\n },\n },\n ],\n };\n }, [data]);\n\n return (\n <div className=\"w-full h-64\">\n <ReactECharts option={chartDefinition} />\n </div>\n );\n};\n\nexport default PieChart;\n","import React, { useMemo } from 'react';\nimport { processLabel, truncateString } from '../utils';\nimport ReactECharts, { ReactEChartsProps } from './ReactECharts';\nimport { HistogramDataArray, HistogramData } from '@gen3/core';\nimport { ChartProps } from '../types';\n\ninterface DonutChartData {\n value: number;\n name: string;\n}\n\nconst processChartData = (\n facetData: HistogramDataArray,\n maxBins = 100,\n): DonutChartData[] => {\n if (!facetData) {\n return [];\n }\n const data = facetData.filter((d: HistogramData) => d.key !== '_missing');\n\n const results = data.slice(0, maxBins).map((d: any) => ({\n value: d.count,\n name: truncateString(processLabel(d.key), 35),\n }));\n return results;\n};\n\nconst DonutChart = ({ data }: ChartProps) => {\n const chartDefinition = useMemo((): ReactEChartsProps['option'] => {\n return {\n legend: {\n type: 'scroll',\n orient: 'vertical',\n align: 'right',\n right: 10,\n top: 20,\n bottom: 20,\n },\n tooltip: {\n trigger: 'item',\n },\n series: [\n {\n type: 'pie',\n radius: ['30%', '60%'],\n data: processChartData(data),\n label: {\n show: false,\n position: 'center',\n },\n labelLine: {\n show: false,\n },\n },\n ],\n };\n }, [data]);\n\n return (\n <div className=\"w-full h-64\">\n <ReactECharts option={chartDefinition} />\n </div>\n );\n};\n\nexport default DonutChart;\n","import React from 'react';\nimport { processLabel, truncateString } from '../utils';\nimport { ChartProps } from '../types';\nimport ReactECharts, { ReactEChartsProps } from './ReactECharts';\nimport { HistogramData, HistogramDataArray } from '@gen3/core';\nimport { CallbackDataParams } from 'echarts/types/dist/shared';\nimport { isArray } from 'lodash';\nimport { useDeepCompareMemo } from 'use-deep-compare';\n\ninterface BarChartData {\n data: number[];\n name: string;\n type: 'bar';\n stack: string;\n label: {\n show: boolean;\n };\n}\n\nconst ExtractDataCount = (\n d: HistogramData,\n _: number | undefined = undefined,\n): number => d.count;\nconst ExtractDataPercent = (d: HistogramData, total?: number): number =>\n total\n ? Math.round(((d.count / total) * 100.0 + Number.EPSILON) * 100) / 100\n : 0;\n\nconst processChartData = (\n facetData: HistogramDataArray,\n valueType = 'count',\n total?: number,\n maxBins = 100,\n): BarChartData[] => {\n if (!facetData) {\n return [];\n }\n const data = facetData.filter((d: any) => d.key !== '_missing');\n\n const dataExtractor =\n valueType === 'count' ? ExtractDataCount : ExtractDataPercent;\n\n const results = data.slice(0, maxBins).map((d: any) => ({\n // TODO: fix type of d\n data: [dataExtractor(d, total)] as number[],\n name: truncateString(processLabel(d.key), 35),\n type: 'bar' as const,\n stack: 'value',\n label: {\n show: true,\n moveOverlap: true,\n },\n }));\n return results;\n};\n\nconst HorizontalBarChart = ({\n data,\n valueType,\n total,\n showLegendInChart = true,\n}: ChartProps) => {\n const chartData = processChartData(data, valueType, total);\n\n const chartDefinition =\n useDeepCompareMemo((): ReactEChartsProps['option'] => {\n return {\n tooltip: {\n trigger: 'item',\n confine: true,\n formatter: function (param) {\n const p: CallbackDataParams =\n isArray(param) && param.length > 0\n ? param[0]\n : (param as CallbackDataParams);\n\n const colorSquare = `<span style=\"display:inline-block; width:10px; height:10px; background-color:${p.color}; margin-right:5px;\"></span>`;\n return `${colorSquare}${p.seriesName}: <b>${p.value}</b>`;\n },\n },\n legend: {\n orient: 'vertical',\n left: '73%',\n type: 'scroll',\n right: 15,\n show: showLegendInChart,\n },\n grid: {\n left: '0%',\n right: showLegendInChart ? '30%' : '3%',\n bottom: '25%',\n containLabel: true,\n height: '50%',\n },\n xAxis: {\n type: 'value',\n max: 'dataMax',\n axisLine: {\n lineStyle: {\n color: '--mantine-color-base-9',\n },\n },\n },\n yAxis: {\n type: 'category',\n data: [''],\n },\n series: chartData,\n };\n }, [chartData, showLegendInChart]);\n\n return (\n <div className=\"w-full h-64\">\n <ReactECharts\n option={chartDefinition}\n settings={{\n notMerge: true,\n lazyUpdate: false,\n }}\n />\n </div>\n );\n};\n\nexport default HorizontalBarChart;\n","import React from 'react';\nimport { Pagination, Table } from '@mantine/core';\nimport { createLabelFromHistogramData } from '../utils';\nimport { ChartProps } from '../types';\nimport ReactECharts, { ReactEChartsProps } from './ReactECharts';\nimport { HistogramData, HistogramDataArray } from '@gen3/core';\nimport { CallbackDataParams } from 'echarts/types/dist/shared';\nimport { isArray } from 'lodash';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { chartColors, filterMissing } from './utils';\n\n// Colors aligned to facet bins by index (dataIndex).\nconst BIN_COLORS = chartColors;\n\ntype BarItem = {\n name: string;\n value: number;\n itemStyle: { color: string };\n};\n\ninterface VerticalBarChartData {\n items: BarItem[];\n categories: string[];\n}\n\nconst ExtractDataCount = (\n d: HistogramData,\n _: number | undefined = undefined,\n): number => d.count;\n\nconst ExtractDataPercent = (d: HistogramData, total?: number): number =>\n total\n ? Math.round(((d.count / total) * 100.0 + Number.EPSILON) * 100) / 100\n : 0;\n\nconst processChartData = (\n facetData: HistogramDataArray,\n valueType = 'count',\n total?: number,\n colors: string[] = BIN_COLORS,\n): VerticalBarChartData => {\n if (!facetData) {\n return {\n items: [],\n categories: [],\n };\n }\n\n const data = filterMissing(facetData);\n const dataExtractor =\n valueType === 'count' ? ExtractDataCount : ExtractDataPercent;\n\n const categories = data.map((d: HistogramData) =>\n createLabelFromHistogramData(d),\n );\n\n const items: BarItem[] = data.map((d: HistogramData, idx: number) => {\n const name = createLabelFromHistogramData(d);\n const value = dataExtractor(d, total);\n const color = colors[idx % Math.max(colors.length, 1)] ?? '#999999';\n\n return {\n name,\n value,\n itemStyle: { color },\n };\n });\n\n return { items, categories };\n};\n\nconst VerticalBarChart = ({\n data,\n valueType,\n total,\n showLegendInChart = true,\n}: ChartProps) => {\n const chartData = useDeepCompareMemo(\n () => processChartData(data, valueType, total),\n [data, valueType, total],\n );\n\n const [hiddenItems, setHiddenItems] = React.useState<Set<string>>(\n () => new Set(),\n );\n\n const toggleLegendItem = (name: string) => {\n setHiddenItems((prev) => {\n const next = new Set(prev);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n return next;\n });\n };\n\n const visibleItems = useDeepCompareMemo(() => {\n return chartData.items.map((item) =>\n hiddenItems.has(item.name) ? { ...item, value: null } : item,\n );\n }, [chartData.items, hiddenItems]);\n\n const [page, setPage] = React.useState(1);\n const pageSize = 6;\n\n const pageCount = Math.max(1, Math.ceil(chartData.items.length / pageSize));\n\n const pagedItems = React.useMemo(() => {\n const start = (page - 1) * pageSize;\n return chartData.items.slice(start, start + pageSize);\n }, [chartData.items, page, pageSize]);\n\n React.useEffect(() => {\n if (page > pageCount) setPage(pageCount);\n }, [page, pageCount]);\n\n const chartDefinition =\n useDeepCompareMemo((): ReactEChartsProps['option'] => {\n return {\n tooltip: {\n trigger: 'item',\n confine: true,\n formatter: function (param) {\n const p: CallbackDataParams =\n isArray(param) && param.length > 0\n ? param[0]\n : (param as CallbackDataParams);\n\n const colorSquare = `<span style=\"display:inline-block; width:10px; height:10px; background-color:${p.color}; margin-right:5px;\"></span>`;\n return `${colorSquare}${p.name}: <b>${p.value}</b>`;\n },\n },\n toolbox: {\n show: false,\n feature: {\n mark: { show: true },\n dataView: { show: true, readOnly: false },\n restore: { show: true },\n saveAsImage: { show: true },\n },\n },\n grid: {\n left: '0%',\n right: '3%',\n bottom: '25%',\n containLabel: true,\n height: '80%',\n },\n yAxis: [\n {\n type: 'value',\n max: 'dataMax',\n axisLine: {\n lineStyle: {\n color: '--mantine-color-base-9',\n },\n },\n },\n ],\n xAxis: [\n {\n type: 'category',\n data: chartData.categories,\n axisTick: { alignWithLabel: true },\n },\n ],\n dataZoom: [\n {\n xAxisIndex: [0],\n filterMode: 'filter',\n type: 'slider',\n },\n {\n show: false,\n yAxisIndex: 0,\n filterMode: 'filter',\n },\n ],\n series: [\n {\n type: 'bar',\n data: visibleItems,\n barMinWidth: 2,\n barCategoryGap: '10%',\n emphasis: { focus: 'series' },\n label: { show: false },\n },\n ],\n };\n }, [chartData.categories, visibleItems]);\n\n return (\n <div className=\"w-full h-64 flex gap-4\">\n <div className=\"flex-1 min-w-0\">\n <ReactECharts\n option={chartDefinition}\n settings={{\n notMerge: true,\n lazyUpdate: false,\n }}\n />\n </div>\n\n {showLegendInChart && (\n <div className=\"w-1/4 overflow-hidden flex flex-col\">\n <div className=\"text-md font-bold mb-2\">Legend</div>\n\n <div className=\"border overflow-hidden\">\n <Table striped highlightOnHover withRowBorders={true}>\n <Table.Tbody>\n {pagedItems.map((item) => {\n const isHidden = hiddenItems.has(item.name);\n return (\n <Table.Tr key={item.name}>\n <Table.Td>\n <button\n type=\"button\"\n onClick={() => toggleLegendItem(item.name)}\n title={isHidden ? 'Show bar' : 'Hide bar'}\n className=\"flex items-center gap-2\"\n >\n <span\n className=\"inline-block h-3 w-3 rounded-sm\"\n style={{\n backgroundColor: item.itemStyle.color,\n opacity: isHidden ? 0.3 : 1,\n }}\n />\n <span className=\"sr-only\">{item.name}</span>\n </button>\n </Table.Td>\n <Table.Td>\n <button\n type=\"button\"\n onClick={() => toggleLegendItem(item.name)}\n className={isHidden ? 'line-through opacity-60' : ''}\n >\n {item.name}\n </button>\n </Table.Td>\n <Table.Td className=\"text-right\">\n {isHidden ? '—' : item.value}\n </Table.Td>\n </Table.Tr>\n );\n })}\n </Table.Tbody>\n </Table>\n </div>\n\n <div className=\"mt-2 flex items-center justify-between text-sm\">\n <Pagination\n value={page}\n onChange={setPage}\n total={pageCount}\n size=\"sm\"\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default VerticalBarChart;\n","import { RenderFactoryTypedInstance } from '../../utils/RendererFactory';\nimport { ChartProps } from './types';\nimport BarChart from './echarts/BarChart';\nimport PieChart from './echarts/PieChart';\nimport DonutChart from './echarts/DonutChart';\nimport HorizontalBarChart from './echarts/HorizontalBarChart';\nimport VerticalBarChart from './echarts/VerticalBarChart';\nimport { registerEchartsTheme } from './echarts/utils';\n\nconst DefaultChartCatalog = {\n chart: {\n bar: BarChart,\n horizontalStacked: HorizontalBarChart,\n fullPie: PieChart,\n donut: DonutChart,\n verticalBarChart: VerticalBarChart,\n },\n};\n\nlet instance: RenderFactoryTypedInstance<ChartProps> | undefined = undefined;\n\nconst ChartRendererFactory = (): RenderFactoryTypedInstance<ChartProps> => {\n if (!instance) {\n instance = new RenderFactoryTypedInstance<ChartProps>();\n instance.registerRendererCatalog(DefaultChartCatalog);\n registerEchartsTheme();\n }\n return instance;\n};\n\nexport default ChartRendererFactory;\n","import React from 'react';\nimport { ChartProps } from './types';\nimport ChartRendererFactory from './ChartRendererFactory';\n\n/** createChart selects which type of chart element to create depending on the\n * values in the exploration page config file.\n */\nexport const createChart = (\n type: string,\n chartProps: ChartProps,\n parameters?: Record<string, any>,\n): React.ReactNode => {\n // TODO: add default chart chart for missing chart type\n const element = ChartRendererFactory().getRenderer('chart', type);\n return element(\n {\n total: chartProps.total,\n valueType: chartProps.valueType,\n label: chartProps.label,\n data: chartProps.data,\n showLegendInChart: chartProps.showLegendInChart,\n },\n parameters,\n );\n};\n","import React from 'react';\nimport {\n AggregationsData,\n fieldNameToTitle,\n HistogramDataArray,\n} from '@gen3/core';\nimport { Icon } from '@iconify-icon/react';\nimport OverflowTooltippedLabel from '../OverflowTooltippedLabel';\n\nimport { useDisclosure } from '@mantine/hooks';\nimport {\n Button,\n Card,\n ColorSwatch,\n Grid,\n Group,\n LoadingOverlay,\n Modal,\n Table,\n Text,\n useMantineTheme,\n} from '@mantine/core';\n\nimport { createChart } from './createChart';\nimport { SummaryChart } from './types';\n\nimport { computeRowSpan } from './utils';\nimport ErrorCard from '../../components/MessageCards/ErrorCard';\n\nconst DEFAULT_COLS = 3;\nconst MAX_LEGEND_ROWS = 4;\n\ninterface ChartsProps {\n charts: Record<string, SummaryChart>;\n counts?: number;\n data: AggregationsData;\n isSuccess: boolean;\n isError?: boolean;\n isFetching?: boolean;\n numCols?: number;\n style?: 'tile' | 'box';\n showLegends?: boolean;\n}\n//Colors grabbed from echarts src/model/globalDefault.ts\nconst chartColors = [\n '#5470c6',\n '#91cc75',\n '#fac858',\n '#ee6666',\n '#73c0de',\n '#3ba272',\n '#fc8452',\n '#9a60b4',\n '#ea7ccc',\n];\n\nconst LegendRows = ({ data }: { data: HistogramDataArray }) => {\n const moreThanMaxRows = (data && data?.length > MAX_LEGEND_ROWS) ?? false;\n const limitedRows = moreThanMaxRows ? data.slice(0, MAX_LEGEND_ROWS) : data;\n\n return limitedRows.map((element, elIndex) => (\n <Table.Tr key={elIndex}>\n <Table.Td>\n <div className=\"flex flex-nowrap items-center overflow-hidden\">\n <ColorSwatch\n className=\"inline-block mr-2 align-middle\"\n size=\"1em\"\n radius=\"xs\"\n color={chartColors?.[elIndex % chartColors.length] || ''}\n />\n <OverflowTooltippedLabel label={element.key.toString()}>\n <span className=\"text-sm font-medium font-content\">\n {element.key.toString()}\n </span>\n </OverflowTooltippedLabel>\n </div>\n </Table.Td>\n <Table.Td className=\"text-right\">{element.count}</Table.Td>\n </Table.Tr>\n ));\n};\n\nconst LegendOverflow = ({\n chart,\n data,\n chartTitle,\n counts,\n}: {\n chart: SummaryChart;\n data: HistogramDataArray;\n chartTitle: string;\n counts: number;\n}) => {\n const [openedMoreRows, { open: openMoreRows, close: closeMoreRows }] =\n useDisclosure(false);\n const theme = useMantineTheme();\n\n if (!data) return null;\n return (\n <React.Fragment>\n <Modal\n opened={openedMoreRows}\n onClose={closeMoreRows}\n title={chartTitle}\n size=\"xl\"\n >\n <Grid>\n <Grid.Col span={6} key=\"modal-col-1\">\n {createChart(chart.chartType, {\n data: data === undefined ? [] : data,\n total: counts ?? 1,\n valueType: chart.valueType ?? 'count',\n label: chart.label,\n showLegendInChart: chart.showLegendInChart,\n })}\n </Grid.Col>\n <Grid.Col span={6} key=\"modal-col-2\">\n <div className=\"border-solid border-[1px] border-[var(--mantine-color-gray-3)] h-full p-1\">\n <Table\n withRowBorders={false}\n classNames={{\n table: 'w-full table-fixed',\n td: 'p-1 leading-3',\n }}\n >\n <Table.Tbody>\n {data.map((element, elIndex) => (\n <Table.Tr key={elIndex}>\n <Table.Td>\n <div className=\"flex flex-nowrap items-center\">\n <ColorSwatch\n className=\"inline-block mr-2 align-middle\"\n size=\"1em\"\n radius=\"xs\"\n color={\n chartColors?.[elIndex % chartColors.length] || ''\n }\n />\n <OverflowTooltippedLabel\n label={element.key.toString()}\n >\n <span className=\"text-sm font-medium font-content\">\n {element.key.toString()}\n </span>\n </OverflowTooltippedLabel>\n </div>\n </Table.Td>\n <Table.Td className=\"w-[10%] text-right\">\n {element.count}\n </Table.Td>\n </Table.Tr>\n ))}\n </Table.Tbody>\n </Table>\n </div>\n </Grid.Col>\n </Grid>\n </Modal>\n <Button\n variant=\"subtle\"\n onClick={openMoreRows}\n leftSection={\n <Icon\n icon=\"gen3:open-in-modal\"\n height={24}\n width={24}\n color={theme.colors.accent[5]}\n />\n }\n className=\"text-black hover:text-black\"\n >\n {data.length - MAX_LEGEND_ROWS} more\n </Button>\n </React.Fragment>\n );\n};\n\n//The Charts component maps the data from ChartsProps into a grid of createChart() ReactNodes\nconst Charts = ({\n charts,\n data,\n counts,\n isError,\n isFetching,\n numCols = DEFAULT_COLS,\n style = 'tile',\n showLegends = false,\n}: ChartsProps) => {\n const spans = computeRowSpan(Object.keys(charts).length, numCols);\n\n if (isError) return null;\n\n const chartCard = (field: string, indexNum: number) => {\n if (Object.keys(data).length === 0) return null;\n\n if (Object.keys(data).length > 0 && !(field in data)) {\n return <ErrorCard message={`${field} not found in data`} />;\n }\n\n const dataKeys =\n field in data && data?.[field].length > 0\n ? Object.keys(data[field][0])\n : [];\n\n const chartTitle = charts[field].title ?? fieldNameToTitle(field);\n\n const numberOfDataItems = data?.[field] && data[field].length;\n const moreThanMaxRows = numberOfDataItems > MAX_LEGEND_ROWS;\n\n return (\n <Grid.Col span={spans[indexNum]} key={`${indexNum}-charts-${field}-col`}>\n <Card shadow=\"md\" withBorder={style === 'box'} className=\"h-full\">\n <Card.Section inheritPadding py=\"xs\" withBorder={style === 'box'}>\n <Group justify=\"space-between\">\n <Text\n fw={900}\n className={`${style === 'box' ? 'font-bold [text-shadow:_1px_0_#000]' : ''}`}\n >\n {chartTitle}\n </Text>\n {/* // TODO: handle close/hide chart\n <ActionIcon>\n <CloseIcon size=\"1rem\" />\n </ActionIcon>\n */}\n </Group>\n </Card.Section>\n <LoadingOverlay visible={isFetching} />\n {createChart(charts[field].chartType, {\n data: data === undefined ? [] : data[field],\n total: counts ?? 1,\n valueType: charts[field].valueType ?? 'count',\n label: charts[field].label,\n showLegendInChart: charts[field].showLegendInChart,\n })}\n {numberOfDataItems > 0 && showLegends && (\n <Card.Section inheritPadding py=\"xs\" withBorder={style === 'box'}>\n <div className=\"w-full\">\n <Table\n withRowBorders={false}\n classNames={{\n table: 'w-full table-fixed',\n td: 'p-1 leading-3',\n th: 'p-1 leading-3 [text-shadow:_1px_0_#000]',\n thead: 'border-b',\n tbody: \"before:content-[''] before:block before:p-1\",\n }}\n >\n <Table.Thead>\n <Table.Tr>\n {dataKeys.map((el, i) => (\n <Table.Th key={i}>\n {charts[field]?.dataLabels?.[el] || (\n <React.Fragment>&nbsp;</React.Fragment>\n )}\n </Table.Th>\n ))}\n </Table.Tr>\n </Table.Thead>\n <Table.Tbody>\n {data === undefined ? (\n ''\n ) : (\n <LegendRows data={data[field]} />\n )}\n </Table.Tbody>\n </Table>\n </div>\n </Card.Section>\n )}\n {showLegends && moreThanMaxRows && (\n <Card.Section\n inheritPadding\n withBorder={style === 'box'}\n className=\"text-right p-1\"\n >\n <LegendOverflow\n chart={charts[field]}\n data={data[field]}\n chartTitle={chartTitle}\n counts={counts ?? 0}\n />\n </Card.Section>\n )}\n </Card>\n </Grid.Col>\n );\n };\n\n return (\n <Grid className=\"w-full\">\n {data && Object.keys(charts)?.map(chartCard)}\n </Grid>\n );\n};\n\nexport default Charts;\n","import React, { useState } from 'react';\nimport { Accordion, Box, Center, Divider, Switch } from '@mantine/core';\nimport Charts from './Charts';\nimport { CollapsableChartsPanelConfiguration } from './types';\nimport { AggregationsData } from '@gen3/core';\nimport { ErrorCard } from '../../components/MessageCards';\n\ninterface ChartsPanelProps {\n config: CollapsableChartsPanelConfiguration;\n data: AggregationsData;\n isFetching?: boolean;\n isSuccess: boolean;\n isError?: boolean;\n}\n\nconst CollapsableCharts = ({\n config,\n data,\n isError,\n isFetching,\n isSuccess,\n}: ChartsPanelProps) => {\n const [showLegends, setShowLegends] = useState(config.showLegends?.enabled);\n\n if (!(config?.charts && Object.keys(config.charts).length > 0)) {\n return (\n <Center>\n <ErrorCard message=\"Charts Section not setup properly\" />\n </Center>\n );\n }\n\n return (\n <Accordion\n unstyled\n classNames={{\n root: 'mb-4 bg-base-max w-full rounded-lg',\n control:\n 'bg-secondary-lightest w-full px-4 py-2 rounded-lg data-active:rounded-b-none text-left group',\n label: 'pl-2 font-bold [text-shadow:_1px_0_#000]',\n chevron:\n 'rounded-full bg-secondary-dark text-white inline-block align-middle group-data-[active]:rotate-180 transition-all',\n panel: 'py-4',\n }}\n chevronPosition=\"left\"\n defaultValue=\"chartsAccordion\"\n >\n <Accordion.Item value={'chartsAccordion'}>\n <Accordion.Control>{config.title || ''}</Accordion.Control>\n <Accordion.Panel>\n {config.showLegends?.enabled && config.showLegends?.showSwitch && (\n <React.Fragment>\n <Switch\n color=\"accent\"\n labelPosition=\"left\"\n label=\"Show legends\"\n size=\"xs\"\n px=\"md\"\n checked={showLegends}\n onChange={(event) =>\n setShowLegends(event.currentTarget.checked)\n }\n />\n <Divider my=\"sm\" />\n </React.Fragment>\n )}\n <Box px=\"md\">\n <Charts\n showLegends={showLegends}\n style=\"box\"\n charts={config.charts}\n data={data}\n counts={2}\n isSuccess={isSuccess}\n numCols={4}\n />\n </Box>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n );\n};\n\nexport default CollapsableCharts;\n","import React, { ReactNode } from 'react';\nimport { JSONArray } from '@gen3/core';\n\nexport interface ChartTitleBarProps {\n readonly title?: ReactNode;\n readonly filename: string;\n readonly divId: string;\n readonly jsonData?: JSONArray;\n}\n\nconst ChartTitleBar: React.FC<ChartTitleBarProps> = ({\n divId,\n title,\n filename,\n jsonData,\n}: ChartTitleBarProps) => {\n return <div className=\"flex justify-between items-center\">{title}</div>;\n};\n\nexport default ChartTitleBar;\n","// from https://stackoverflow.com/questions/33053310/remove-value-from-object-without-mutation\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const removeKey = (\n key: string | number,\n { [key]: _, ...rest },\n): Record<string | number, any> => rest;\n","/**\n * A BarChart for Enumerated Facets. The as the chart is wrapped from EnumFacet it does not\n * require the Core Data hooks.\n */\nimport React, { useEffect, useState } from 'react';\nimport { Box, Loader, Tooltip, useMantineTheme } from '@mantine/core';\nimport { useElementSize } from '@mantine/hooks';\nimport {\n Bar,\n VictoryAxis,\n VictoryBar,\n VictoryChart,\n VictoryContainer,\n VictoryStack,\n VictoryTheme,\n VictoryTooltip,\n} from 'victory';\nimport ChartTitleBar from './ChartTitleBar';\nimport { capitalize } from './utils';\nimport { EnumFilterValue, fieldNameToTitle } from '@gen3/core';\nimport { removeKey } from '../../utils/removeKey';\n\nconst maxValuesToDisplay = 7;\n\ninterface FacetChartProps {\n readonly field: string;\n readonly data: Record<string, number>;\n readonly selectedEnums: EnumFilterValue;\n readonly isSuccess: boolean;\n readonly height?: number;\n readonly showTitle?: boolean;\n readonly maxBins?: number;\n readonly valueLabel?: string;\n}\n\nconst processChartData = (\n facetData: Record<string | number, any>,\n selectedEnums: EnumFilterValue,\n maxBins = 100,\n) => {\n const data = removeKey('_missing', facetData);\n\n const results = Object.keys(data)\n .filter((d: string | number) =>\n !selectedEnums || selectedEnums.length === 0\n ? d\n : selectedEnums.includes(d),\n )\n .slice(0, maxBins)\n .map((d) => ({\n x: processLabel(d),\n y: data[d],\n }));\n return results.reverse();\n};\n\nexport const EnumFacetChart: React.FC<FacetChartProps> = ({\n field,\n data,\n selectedEnums,\n isSuccess,\n height,\n showTitle = true,\n maxBins = maxValuesToDisplay,\n valueLabel = 'Cases',\n}: FacetChartProps) => {\n const [chart_data, setChartData] = useState<{ x: string; y: any }[]>([]);\n const { ref, width } = useElementSize();\n\n useEffect(() => {\n if (isSuccess) {\n const cd = processChartData(data, selectedEnums, maxBins);\n setChartData(cd);\n } else {\n setChartData([]);\n }\n }, [data, selectedEnums, field, isSuccess, maxBins]);\n\n // Create unique ID for this chart\n const chartDivId = `${field}_${Math.floor(Math.random() * 100)}`;\n\n return (\n <div ref={ref}>\n {showTitle ? (\n <ChartTitleBar\n title={fieldNameToTitle(field)}\n divId={chartDivId}\n filename={field}\n />\n ) : null}\n\n {isSuccess && chart_data && chart_data.length > 0 ? (\n <EnumBarChart\n data={chart_data}\n height={height}\n width={width * 2.2}\n label={`# of ${valueLabel}`}\n unitLabel={valueLabel}\n />\n ) : (\n <div className=\"flex flex-row items-center justify-center w-100\">\n <Loader color=\"chart\" size={60} />\n </div>\n )}\n </div>\n );\n};\n\nexport const processLabel = (label: string): string => {\n const tokens = label.split(' ');\n const capitalizedTokens = tokens.map((s) => capitalize(s));\n return capitalizedTokens.join(' ');\n};\n\ninterface EnumBarChartTooltipProps {\n readonly x?: number;\n readonly y?: number;\n readonly datum?: {\n y: number;\n x: string;\n };\n readonly unitLabel?: string;\n}\n\nconst EnumBarChartTooltip: React.FC<EnumBarChartTooltipProps> = ({\n x,\n y,\n datum,\n unitLabel = 'Cases',\n}: EnumBarChartTooltipProps) => {\n const theme = useMantineTheme();\n return (\n <g style={{ pointerEvents: 'none' }}>\n <foreignObject x={x} y={y}>\n <Tooltip\n label={\n <React.Fragment>\n <b>{datum?.x}</b>\n <p>\n {datum?.y.toLocaleString()} {unitLabel}\n </p>\n </React.Fragment>\n }\n withArrow\n opened\n withinPortal\n arrowSize={10}\n style={{\n fontSize: 12,\n backgroundColor: theme.colors.accent[1],\n color: theme.colors.base[9],\n }}\n >\n <Box></Box>\n </Tooltip>\n </foreignObject>\n </g>\n );\n};\n\ninterface EnumBarChartVictoryLabelProps {\n readonly x?: number;\n readonly y?: number;\n readonly text?: string;\n}\n\nconst EnumBarChartVictoryLabel: React.FC<EnumBarChartVictoryLabelProps> = ({\n x = 0,\n y = 0,\n text,\n}: EnumBarChartVictoryLabelProps) => {\n return (\n <foreignObject x={0} y={y - 26} width={'100%'} height=\"25\">\n <div\n style={{\n paddingTop: 2,\n paddingLeft: x + 12,\n paddingRight: 45,\n width: '100%',\n height: '100%',\n position: 'relative',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 23,\n fontFamily: 'Noto Sans, sans-serif',\n }}\n >\n {text}\n </div>\n </foreignObject>\n );\n};\n\ninterface EnumBarChartData {\n x: string;\n y: number;\n}\n\ninterface BarChartProps {\n readonly data: EnumBarChartData[];\n readonly width?: number;\n readonly height?: number;\n readonly label: string;\n readonly unitLabel?: string;\n}\n\nconst EnumBarChart: React.FC<BarChartProps> = ({\n data,\n height,\n width,\n label,\n unitLabel,\n}: BarChartProps) => {\n const max = Math.max(...data.map((d) => d.y));\n const formatter = Intl.NumberFormat('en', { notation: 'compact' });\n const theme = useMantineTheme();\n\n return (\n <VictoryChart\n domainPadding={[data.length === 2 ? 100 : 28, 0]}\n theme={VictoryTheme.material}\n width={width}\n height={height}\n containerComponent={<VictoryContainer role=\"figure\" />}\n >\n <VictoryAxis\n tickLabelComponent={<EnumBarChartVictoryLabel />}\n style={{\n grid: { stroke: 'none' },\n ticks: { size: 0 },\n axis: { strokeWidth: 0 },\n }}\n />\n\n <VictoryAxis\n dependentAxis\n style={{\n grid: { stroke: 'none' },\n axisLabel: { padding: 30, fontSize: 20, fontWeight: 'bold' },\n tickLabels: { fontSize: 18 },\n }}\n tickCount={3}\n tickFormat={(t) => formatter.format(t)}\n label={label}\n crossAxis={false}\n />\n\n <VictoryStack>\n <VictoryBar\n horizontal\n labels={() => ''}\n labelComponent={\n <VictoryTooltip\n flyoutComponent={<EnumBarChartTooltip unitLabel={unitLabel} />}\n />\n }\n style={{\n data: {\n fill: theme.colors.chart[6],\n stroke: theme.colors.chart[6],\n strokeWidth: 1,\n width: 22,\n },\n }}\n alignment=\"end\"\n data={data}\n x=\"x\"\n y=\"y\"\n dataComponent={\n <Bar\n tabIndex={0}\n ariaLabel={({ datum }) => `x: ${datum.x}, y: ${datum.y}`}\n // https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/issues/756 https://www.w3.org/TR/graphics-aria-1.0/#graphics-symbol\n // eslint-disable-next-line\n role=\"graphics-symbol\"\n />\n }\n />\n <VictoryBar\n data={data.map((d) => ({ x: d.x, y: max - d.y }))}\n x=\"x\"\n y=\"y\"\n style={{\n data: {\n fill: theme.colors.base[1],\n stroke: theme.colors.base[7],\n strokeWidth: 1,\n width: 22,\n },\n }}\n alignment=\"end\"\n />\n </VictoryStack>\n </VictoryChart>\n );\n};\n","import {\n type AggregationsData,\n DataLibraryStoreMode,\n type ExportDatasetFields,\n JSONObject,\n type MetadataPaginationParams,\n} from '@gen3/core';\n\nimport { SummaryStatistics, SummaryStatisticsConfig } from './Statistics/types';\nimport { AdvancedSearchTerms, SearchCombination } from './Search/types';\nimport { CollapsableChartsPanelConfiguration } from '../../components/charts/types';\nimport {\n StudyColumn,\n StudyDetailsField,\n StudyDetailView,\n StudyPageConfig,\n TagsConfig,\n} from '../Study/types';\nimport { DataAuthorization } from '../../utils';\nimport { Gen3AppConfigData } from '../../lib/content/types';\n\ninterface KeywordSearch {\n keywords?: string[];\n operator: SearchCombination;\n}\n\nexport interface SearchTerms {\n keyword: KeywordSearch;\n advancedSearchTerms: AdvancedSearchTerms;\n selectedTags?: Record<string, boolean>;\n}\n\nexport interface DiscoveryDataLoaderProps extends Record<string, any> {\n pagination: MetadataPaginationParams;\n searchTerms: SearchTerms;\n discoveryConfig: DiscoveryIndexConfig;\n}\n\nexport interface DataRequestStatus {\n isFetching: boolean;\n isLoading: boolean;\n isUninitialized: boolean;\n isSuccess: boolean;\n isError: boolean;\n}\n\nexport interface DiscoverDataHookResponse {\n data: Array<JSONObject>;\n hits: number;\n advancedSearchFilterValues: ReadonlyArray<KeyValueSearchFilter>;\n dataRequestStatus: DataRequestStatus;\n summaryStatistics: SummaryStatistics; // counts and sums\n charts: AggregationsData; // bucket counts for charts\n suggestions: Array<string>;\n clearSearch?: () => void;\n}\n\nexport type DiscoveryTableDataHook = (\n dataHookArgs: DiscoveryDataLoaderProps,\n ...args: any[]\n) => DiscoverDataHookResponse;\n\nexport interface KeyValueSearchFilter {\n key: string;\n keyDisplayName?: string;\n valueDisplayNames?: Record<string, string>;\n}\n\nexport interface AdvancedSearchFilters {\n enabled: boolean;\n field: string;\n displayName: string;\n filters: ReadonlyArray<KeyValueSearchFilter>;\n}\n\nexport interface SearchKV {\n key: string;\n value: any;\n}\n\nexport const isSearchKV = (obj: any): obj is SearchKV => {\n return obj && obj.key && obj.value;\n};\n\nexport const isSearchKVArray = (obj: any): obj is SearchKV[] => {\n return obj && Array.isArray(obj) && obj.every(isSearchKV);\n};\n\nexport type DiscoveryContentTypes =\n | string\n | 'string'\n | 'number'\n | 'date'\n | 'array'\n | 'link'\n | 'boolean'\n | 'paragraphs';\n\nexport interface MinimalFieldMapping {\n authzField: string;\n tagsListFieldName: string;\n dataAvailabilityField: string;\n uid: string;\n}\n\nexport type RowSelectCompareFunctions = 'arrayNotEmpty' | 'alwaysTrue';\n\nexport interface SelectableRowConfiguration {\n field: string;\n comparer: RowSelectCompareFunctions;\n value?: string | number;\n}\n\ninterface DiscoveryTableConfig {\n selectableRows?: boolean;\n selectableRowConfiguration?: SelectableRowConfiguration;\n expandableRows?: boolean;\n expandingRowRenderFunction?: string;\n}\n\ninterface DiscoveryPageTitle {\n enabled: boolean;\n text: string;\n}\n\nexport interface ActionButtonConfig {\n label?: string; // label for the action button\n icon?: string; // optional icon for the action button\n requiresLogin?: boolean; // set to true if the action requires login\n tooltip?: string; // tooltip text\n disabled?: boolean;\n}\n\nexport type ActionButtonType =\n | 'manifest'\n | 'zip'\n | 'download'\n | 'link'\n | 'externalLink'\n | 'addToDataLibrary';\n\nexport interface ExportSelectionActionButton extends ActionButtonConfig {\n type: ActionButtonType;\n}\n\nexport interface SearchBar {\n enabled: boolean;\n inputSubtitle: string;\n placeholder?: string;\n searchableTextFields: Array<string>;\n}\n\ninterface TagSearchDropdown {\n enabled?: boolean;\n collapsibleButtonText?: string;\n}\n\nexport interface SearchConfig {\n searchBar?: SearchBar;\n tagSearchDropdown?: TagSearchDropdown;\n}\n\nexport interface ExportFromDiscoveryActions {\n buttons: ExportSelectionActionButton[];\n enabled?: boolean;\n verifyExternalLogins?: boolean;\n dataLibraryStoreMode?: DataLibraryStoreMode;\n exportDataFields: ExportDatasetFields;\n}\n\nexport interface AccessFilters {\n [accessLevel: number]: boolean;\n}\n\ninterface DiscoveryIndex {\n indexName: string;\n}\n\ninterface DataLoader {\n dataFetchFunction?: string;\n dataFetchArgs?: JSONObject;\n sortingAndPagination?: 'client' | 'server';\n}\n\n// TODO: Type the rest of the config\nexport interface DiscoveryIndexConfig {\n guidType?: string;\n studyField?: string;\n maxStudies?: number;\n label?: string;\n tabType?: 'pills' | 'outline';\n features: {\n advSearchFilters?: AdvancedSearchFilters;\n aiSearch?: boolean;\n pageTitle: DiscoveryPageTitle;\n exportFromDiscovery?: ExportFromDiscoveryActions;\n search?: SearchConfig;\n authorization: DataAuthorization;\n dataLoader?: DataLoader;\n chartsSection?: CollapsableChartsPanelConfiguration;\n };\n aggregations: SummaryStatisticsConfig[];\n tags: TagsConfig;\n tableConfig: DiscoveryTableConfig;\n studyColumns: StudyColumn[];\n studyPreviewField?: StudyDetailsField;\n simpleDetailsView?: StudyPageConfig;\n detailView: StudyDetailView;\n minimalFieldMapping: MinimalFieldMapping;\n}\n\nexport interface DiscoveryConfig extends Gen3AppConfigData {\n metadataConfig: Array<DiscoveryIndexConfig>;\n}\n\nconst ARBORIST_READ_PRIV = 'read';\n","import { JSONObject } from '@gen3/core';\nimport { AdvancedSearchTerms } from '../../Search/types';\nimport { DiscoveryIndexConfig, isSearchKVArray } from '../../types';\n\n/**\n *\n * @param studies\n * @param advancedSearchTerms\n * @param config\n */\nconst filterByAdvSearch = (\n studies: JSONObject[],\n advancedSearchTerms: AdvancedSearchTerms,\n config: DiscoveryIndexConfig,\n): JSONObject[] => {\n // leave if advanced search filters are not enabled\n\n if (\n config.features?.advSearchFilters === undefined ||\n !config.features.advSearchFilters.enabled\n ) {\n return studies;\n }\n\n // if no filters active, show all studies\n const noFiltersActive = Object.values(advancedSearchTerms.filters).every(\n (selectedValues) => {\n if (Object.values(selectedValues).length === 0) {\n return true;\n }\n return Object.values(selectedValues).every((selected) => !selected);\n },\n );\n\n if (noFiltersActive) {\n return studies;\n }\n\n // Combine within filters as AND\n if (advancedSearchTerms.operation === 'AND') {\n return studies.filter((study) =>\n Object.keys(advancedSearchTerms.filters).every((filterName) => {\n const filterValues = Object.keys(\n advancedSearchTerms.filters[filterName],\n );\n // Handle the edge case where no values in this filter are selected\n if (filterValues.length === 0) {\n return true;\n }\n\n if (config.features?.advSearchFilters?.field === undefined) {\n return false;\n }\n\n const studyFilters = study[config.features.advSearchFilters.field];\n if (!isSearchKVArray(studyFilters)) {\n return false;\n }\n\n if (!studyFilters || !studyFilters.length) {\n return false;\n }\n\n const studyFilterValues = studyFilters\n .filter(({ key }) => key === filterName)\n .map(({ value }) => value);\n return filterValues.every((value) => studyFilterValues.includes(value));\n }),\n );\n }\n\n // Combine within filters as OR\n return studies.filter((study) =>\n Object.keys(advancedSearchTerms.filters).some((filterName) => {\n const filterValues = Object.keys(advancedSearchTerms.filters[filterName]);\n // Handle the edge case where no values in this filter are selected\n if (filterValues.length === 0) {\n return true;\n }\n\n if (config.features?.advSearchFilters?.field === undefined) {\n return false;\n }\n\n const studyFilters = study[config.features.advSearchFilters?.field];\n\n if (!isSearchKVArray(studyFilters)) {\n return false;\n }\n\n if (!studyFilters || !studyFilters.length) {\n return false;\n }\n\n return studyFilters.some(\n ({ key, value }) => key === filterName && filterValues.includes(value),\n );\n }),\n );\n};\n\nexport default filterByAdvSearch;\n","import { JSONObject, JSONValue } from '@gen3/core';\nimport { SearchKV, SearchTerms } from '../types';\n\nexport const getFilterValuesByKey = (\n key: string,\n studies: JSONObject[],\n filtersField?: string,\n uidField?: string,\n) => {\n const invalidResults = [] as string[];\n if (!studies) {\n return invalidResults;\n }\n\n if (!filtersField) {\n throw new Error(\n 'Misconfiguration error: missing required configuration property `discoveryConfig.features.advSearchFilters.field`',\n );\n }\n\n if (!uidField) {\n throw new Error(\n 'Misconfiguration error: missing required configuration property `discoveryConfig.features.advSearchFilters.field`',\n );\n }\n\n const filterValuesMap: Record<string, JSONValue> = {};\n studies.forEach((study) => {\n const studyFilters: SearchKV[] =\n (study[filtersField] as unknown as SearchKV[]) ?? [];\n\n if (!studyFilters) {\n // eslint-disable-next-line no-console\n console.warn(\n `Warning: expected to find property '${filtersField}' in study metadata for study ${\n study[uidField] ?? 'unknown'\n }, but could not find it! This study will not be filterable by the advanced search filters.`,\n );\n return invalidResults;\n }\n try {\n studyFilters.forEach((filterValue: SearchKV) => {\n if (filterValue.key === key) {\n filterValuesMap[filterValue.value] = true;\n }\n });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n // eslint-disable-next-line no-console\n console.error(\n `The above error appeared in study ${study[uidField] ?? 'unknown'}`,\n );\n }\n });\n return Object.keys(filterValuesMap);\n};\n// function to check if search terms are empty\nexport const hasSearchTerms = (searchTerms: SearchTerms): boolean => {\n return (\n (searchTerms &&\n searchTerms.keyword.keywords &&\n searchTerms.keyword.keywords.length > 0) &&\n searchTerms.keyword.keywords[0] != '' ||\n (searchTerms.advancedSearchTerms &&\n searchTerms.advancedSearchTerms.filters &&\n Object.values(searchTerms.advancedSearchTerms.filters).some(\n (selectedValues) => {\n return (\n selectedValues &&\n Object.values(selectedValues).some((selected) => selected)\n );\n },\n ))\n );\n};\n","\nimport { type AuthzMapping } from '@gen3/core';\n\nexport const userHasMethodForServiceOnResource = (method: string, service : string, resourcePath: string, userAuthMapping : AuthzMapping = {}) => {\n const actions = userAuthMapping[resourcePath];\n // accommodate for '*' logic\n // if we need to check for a specific service/method pair for a resource,\n // e.g.: {service: sheepdog, method: update}\n // then this function should return true if the user has either of\n // the following pair for this policy\n // 1. {service: sheepdog, method: update}\n // 2. {service: sheepdog, method: *}\n // 3. {service: *, method: update}\n // 4. {service: *, method: *}\n return actions !== undefined && actions.some((x) => ((x.service === service || x.service === '*') && (x.method === method || x.method === '*')));\n};\n","export const METADATA_ITEM_AUTHORIZATION_FIELD = '__accessible';\n","import uniq from 'lodash/uniq';\nimport sum from 'lodash/sum';\nimport { JSONPath } from 'jsonpath-plus';\nimport {\n type ResourceAuthzMapping,\n type JSONObject,\n type AggregationsData,\n} from '@gen3/core';\nimport { SummaryStatisticsConfig } from '../Statistics';\nimport { SummaryStatistics } from '../Statistics/types';\nimport {\n AdvancedSearchFilters,\n DiscoveryIndexConfig,\n KeyValueSearchFilter,\n} from '../types';\nimport { AccessLevel } from '../../../utils';\nimport { userHasMethodForServiceOnResource } from '../../authorization/utils';\nimport { METADATA_ITEM_AUTHORIZATION_FIELD } from '../constants';\nimport { getFilterValuesByKey } from '../Search/utils';\n\n/**\n * Parses a single value into a number\n * @param item - Value to convert\n * @returns Numeric representation of the value\n */\nconst parseNumericValue = (item: unknown): number => {\n const DEFAULT_VALUE = 0;\n\n // Handle undefined values\n if (item === undefined) {\n return DEFAULT_VALUE;\n }\n\n // Numbers can be used directly\n if (typeof item === 'number' && !Number.isNaN(item)) {\n return item;\n }\n\n // Parse string representations of numbers\n if (typeof item === 'string') {\n const parsedValue = parseInt(item, 10);\n return Number.isNaN(parsedValue) ? DEFAULT_VALUE : parsedValue;\n }\n\n // Recursively handle arrays by summing their numeric values\n if (Array.isArray(item)) {\n return convertToNumbers(item).reduce((acc, val) => acc + val, 0);\n }\n\n // Return default for any other types\n return DEFAULT_VALUE;\n};\n\n/**\n * Converts various types of values to numbers\n * @param fields - Array of values to convert\n * @returns Array of numbers, with non-numeric values converted to 0\n */\nconst convertToNumbers = <T>(fields: T[]): number[] => {\n return fields.map(parseNumericValue);\n};\n\n/**\n * Process a summary statistic using the provided data and summary config\n * @param {JSONObject }data\n * @param {SummaryStatisticsConfig} summary config from Discovery Config\n */\nexport const processSummary = (\n data: JSONObject[],\n summary: SummaryStatisticsConfig,\n): string => {\n const { field, type } = summary;\n let fields = JSONPath({ path: `$..${field}`, json: data });\n // Replace any undefined fields with value 0\n fields = fields.map((item: string | number) =>\n typeof item === 'undefined' ? 0 : item,\n );\n switch (type) {\n case 'sum': {\n // parse any string representation of an integer\n fields = convertToNumbers(fields);\n return sum(fields).toLocaleString();\n }\n case 'count':\n return uniq(fields).length.toLocaleString();\n default:\n throw new Error(\n `Misconfiguration error: Unrecognized aggregation type ${type}. Check the 'aggregations' block of the Discovery page config.`,\n );\n }\n};\n\nexport const processAllSummaries = (\n data: JSONObject[],\n summaries: SummaryStatisticsConfig[],\n) => {\n if (!Array.isArray(data)) {\n throw new Error('Invalid input: data must be an array.');\n }\n if (!Array.isArray(summaries)) {\n throw new Error('Invalid input: summaries must be an array.');\n }\n\n return summaries.reduce((acc, summary) => {\n return [\n ...acc,\n {\n ...summary,\n value: processSummary(data, summary),\n },\n ];\n }, [] as SummaryStatistics);\n};\n\nexport const processAuthorizations = (\n data: Array<JSONObject>,\n config: DiscoveryIndexConfig,\n userAuthMapping: ResourceAuthzMapping,\n): Array<JSONObject> => {\n const { enabled } = config.features.authorization;\n\n if (!enabled) {\n return data;\n }\n\n if (!userAuthMapping) {\n throw new Error(\n 'Arborist must be enabled for the Discovery page to work if authorization is enabled in the Discovery page. Set `useArboristUI: true` in the portal config.',\n );\n }\n\n const hostnameWithSubdomain = window.location.hostname; // TODO: replace this with useRouter\n\n // mark studies as accessible or inaccessible to user\n const { authzField, dataAvailabilityField } = config.minimalFieldMapping;\n const { supportedValues, isMesh } = config.features.authorization;\n\n const studiesWithAccessibleField = data.map((study) => {\n let accessible: AccessLevel = AccessLevel.NOT_AVAILABLE;\n if (\n supportedValues?.unaccessible?.enabled &&\n dataAvailabilityField &&\n study[dataAvailabilityField] === 'unaccessible'\n ) {\n accessible = AccessLevel.UNACCESSIBLE;\n } else if (\n supportedValues?.notAvailable?.enabled &&\n dataAvailabilityField &&\n study[dataAvailabilityField] === 'not_available'\n ) {\n accessible = AccessLevel.NOT_AVAILABLE;\n } else if (supportedValues?.waiting?.enabled && !study[authzField]) {\n accessible = AccessLevel.WAITING;\n } else {\n let authMapping = {};\n if (isMesh) {\n let commonsURL = study.commons_url as string; // TODO: configure this value\n if (commonsURL && commonsURL.startsWith('http')) {\n commonsURL = new URL(commonsURL).hostname;\n }\n authMapping =\n userAuthMapping[commonsURL || hostnameWithSubdomain] || {};\n } else {\n authMapping = Object.values(userAuthMapping)[0];\n }\n // TODO: This needs to be configurable GFF-294\n const isAuthorized =\n userHasMethodForServiceOnResource(\n 'read',\n '*',\n study[authzField] as string,\n authMapping,\n ) ||\n userHasMethodForServiceOnResource(\n 'read',\n 'peregrine',\n study[authzField] as string,\n authMapping,\n ) ||\n userHasMethodForServiceOnResource(\n 'read',\n 'guppy',\n study[authzField] as string,\n authMapping,\n ) ||\n userHasMethodForServiceOnResource(\n 'read-storage',\n 'fence',\n study[authzField] as string,\n authMapping,\n );\n if (supportedValues?.accessible?.enabled && isAuthorized) {\n if (\n supportedValues?.mixed?.enabled &&\n dataAvailabilityField &&\n study[dataAvailabilityField] === 'mixed_availability'\n ) {\n accessible = AccessLevel.MIXED;\n } else {\n accessible = AccessLevel.ACCESSIBLE;\n }\n } else if (supportedValues?.unaccessible?.enabled && !isAuthorized) {\n accessible = AccessLevel.UNACCESSIBLE;\n } else {\n accessible = AccessLevel.OTHER;\n }\n }\n return {\n ...study,\n [METADATA_ITEM_AUTHORIZATION_FIELD]: accessible,\n };\n });\n return studiesWithAccessibleField;\n};\n\nexport const processChartData = (\n data: JSONObject[],\n pathsToProcess: string[],\n) => {\n // Initialize results object\n const results: AggregationsData = {};\n\n pathsToProcess.forEach((path) => {\n // Use JSONPath to extract all values at the given path\n const values = JSONPath({\n path: `$[*].${path}`,\n json: data,\n flatten: true,\n });\n\n // Count occurrences of each value\n // add missing to count null values\n const counts: { [key: string]: number } = {};\n values.forEach((value: any) => {\n if (value && value !== '') {\n counts[value] = (counts[value] || 0) + 1;\n }\n });\n\n // Convert to required format and sort by count\n // Store results using the path as key\n results[path] = Object.entries(counts)\n .map(([key, count]) => ({\n key,\n count,\n }))\n .sort((a, b) => b.count - a.count);\n });\n\n return results;\n};\n\nexport const processAdvancedSearchTerms = (\n advSearchFilters: AdvancedSearchFilters,\n data: JSONObject[],\n uidField: string,\n): ReadonlyArray<KeyValueSearchFilter> => {\n return advSearchFilters.filters.map((filter) => {\n const { key, keyDisplayName } = filter;\n const values = getFilterValuesByKey(\n key,\n data,\n advSearchFilters.field,\n uidField,\n );\n return {\n key,\n keyDisplayName,\n valueDisplayNames: values.reduce(\n (acc, cur) => {\n acc[cur] = cur;\n return acc;\n },\n {} as Record<string, string>,\n ),\n };\n });\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { JSONPath } from 'jsonpath-plus';\nimport {\n AggregationsData,\n CoreState,\n JSONObject,\n MetadataPaginationParams,\n selectAuthzMappingData,\n useCoreSelector,\n useGetAggMDSQuery,\n useGetMDSQuery,\n} from '@gen3/core';\nimport { useMiniSearch } from 'react-minisearch';\nimport MiniSearch, { Suggestion } from 'minisearch';\nimport {\n AdvancedSearchFilters,\n DiscoverDataHookResponse,\n DiscoveryDataLoaderProps,\n KeyValueSearchFilter,\n SearchTerms,\n} from '../../types';\nimport filterByAdvSearch from './filterByAdvSearch';\nimport { getFilterValuesByKey, hasSearchTerms } from '../../Search/utils';\nimport {\n processAdvancedSearchTerms,\n processAllSummaries,\n processAuthorizations,\n processChartData,\n} from '../utils';\nimport { SummaryStatisticsConfig } from '../../Statistics';\nimport { SummaryStatistics } from '../../Statistics/types';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { GetDataProps, GetDataResponse, MetadataDataHook } from '../types';\nimport { getManualSortingAndPagination } from '../../utils';\n\n// TODO remove after debugging\n// import { reactWhatChanged as RWC } from 'react-what-changed';\n\nconst buildMiniSearchKeywordQuery = (terms: SearchTerms) => {\n const keywords = terms.keyword.keywords?.filter((x) => x.length > 0) ?? [];\n // TODO See if minisearch can handle this\n // const res = keywords.join(\" \");\n // const res = {\n // combineWith: 'AND',\n // queries: keywords ?? [],\n // };\n\n return keywords[0];\n\n // TODO: see if minisearch can handle this\n // const a = {\n // combineWith: 'AND',\n // queries: Object.keys(terms.advancedSearchTerms.filters).map((field) => {\n // const filter = terms.advancedSearchTerms.filters[field];\n // return {\n // combineWith: 'AND',\n // queries: Object.entries(filter).reduce((acc, [term, selected]) => {\n // if (selected) acc.push({ term, fields: [`advancedSearch.${field}`], combineWith: 'AND' });\n // return acc;\n // }, [] as QueryType[]),\n // };\n // }),\n // };\n};\n\nconst extractValue = (document: JSONObject, field: string) => {\n // TODO See if miniSearch can handle the for advanced search\n // if (field.startsWith('advancedSearch.')) {\n // if (isSearchKVArray(document['advancedSearch'])) {\n // const key = field.split('.')[-1];\n // const result = document['advancedSearch'].filter(x => x.key === key);\n // return result.reduce((acc, cur) => {\n // acc.push(cur.value);\n // return acc;\n // }, [] as string[]).join(\" \");\n //\n // }\n\n const result = JSONPath({ path: field, json: document });\n return result?.length ? result[0] : undefined;\n};\n\nconst suffixes = (term: string, minLength: number): string[] => {\n if (term == null) {\n return [];\n }\n\n const tokens: string[] = [];\n\n for (let i = 0; i <= term.length - minLength; i++) {\n tokens.push(term.slice(i));\n }\n\n return tokens;\n};\n\nconst useGetMDSData = ({\n guidType = 'unregistered_discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n discoveryConfig,\n}: Partial<GetDataProps>): GetDataResponse => {\n const [mdsData, setMDSData] = useState<Array<JSONObject>>([]);\n const [isError, setIsError] = useState(false);\n\n const {\n data,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError: queryIsError,\n } = useGetMDSQuery({\n guidType: guidType,\n studyField: studyField,\n offset: 0,\n pageSize: maxStudies,\n });\n\n const authMapping = useCoreSelector((state: CoreState) =>\n selectAuthzMappingData(state),\n );\n\n useEffect(() => {\n if (data && isSuccess) {\n const studyData = Object.values(data.data).reduce(\n (acc: JSONObject[], cur: JSONObject) => {\n return cur[studyField]\n ? [...acc, cur[studyField] as JSONObject]\n : acc;\n },\n [],\n );\n\n if (discoveryConfig?.features?.authorization?.enabled) {\n setMDSData(\n processAuthorizations(studyData, discoveryConfig, {\n default: authMapping,\n }),\n );\n } else setMDSData(studyData);\n }\n }, [authMapping, data, discoveryConfig, isSuccess, studyField]);\n\n useEffect(() => {\n if (queryIsError) {\n setIsError(true);\n }\n }, [queryIsError]);\n\n return {\n mdsData,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n };\n};\n\nconst useGetAggMDSData = ({\n guidType = 'unregistered_discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n discoveryConfig,\n}: Partial<GetDataProps>): GetDataResponse => {\n const [mdsData, setMDSData] = useState<Array<JSONObject>>([]);\n const [isError, setIsError] = useState(false);\n\n const {\n data,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError: queryIsError,\n } = useGetAggMDSQuery({\n guidType: guidType,\n studyField: studyField,\n offset: 0,\n pageSize: maxStudies,\n });\n\n const authMapping = useCoreSelector((state: CoreState) =>\n selectAuthzMappingData(state),\n );\n useEffect(() => {\n if (data && isSuccess) {\n if (discoveryConfig?.features?.authorization.enabled) {\n setMDSData(\n processAuthorizations(data.data, discoveryConfig, {\n default: authMapping,\n }),\n );\n } else setMDSData(data.data);\n }\n }, [authMapping, data, discoveryConfig, isSuccess, studyField]);\n\n useEffect(() => {\n if (queryIsError) {\n setIsError(true);\n }\n }, [queryIsError]);\n\n return {\n mdsData,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n };\n};\n\ninterface SearchMetadataProps {\n discoveryConfig: any;\n searchTerms: SearchTerms;\n mdsData: JSONObject[];\n isSuccess: boolean;\n}\n\nconst useSearchMetadata = ({\n discoveryConfig,\n searchTerms,\n mdsData,\n isSuccess,\n}: SearchMetadataProps) => {\n const searchOverFields =\n discoveryConfig?.features?.search?.searchBar?.searchableTextFields || [];\n const uidField = discoveryConfig?.minimalFieldMapping?.uid || 'guid';\n\n const [searchedData, setSearchedData] = useState<Array<JSONObject>>([]);\n const [suggestions, setSuggestions] = useState<Array<string>>([]);\n const {\n search,\n autoSuggest,\n searchResults,\n suggestions: miniSearchSuggestions,\n addAll,\n removeAll,\n clearSearch,\n clearSuggestions,\n } = useMiniSearch([], {\n fields: searchOverFields,\n storeFields: [uidField],\n idField: uidField,\n tokenize: (string, _fieldName) => string.split(' '),\n extractField: extractValue,\n // processTerm: (term) => suffixes(term, 3),\n searchOptions: {\n processTerm: MiniSearch.getDefault('processTerm'),\n },\n });\n\n const isSearching = hasSearchTerms(searchTerms);\n\n const clearSearchTerms = useCallback(() => {\n clearSearch();\n clearSuggestions();\n }, [clearSearch, clearSuggestions]);\n\n useDeepCompareEffect(() => {\n // we have the data, so set it and build the search index and get the advanced search filter values\n if (mdsData && isSuccess && mdsData.length > 0) {\n removeAll();\n // check if an id is missing\n const dataWithIds = mdsData.reduce((acc, cur) => {\n if (!cur[uidField])\n acc.push({\n ...cur,\n [uidField]: Math.random().toString(36).substring(7),\n });\n else acc.push(cur);\n return acc;\n }, [] as JSONObject[]);\n addAll(dataWithIds);\n }\n }, [addAll, isSuccess, mdsData, removeAll, uidField]);\n\n useEffect(() => {\n if (mdsData && isSearching) {\n const searchQuery = buildMiniSearchKeywordQuery(searchTerms);\n if (searchQuery) {\n search(searchQuery);\n autoSuggest(searchQuery);\n }\n }\n }, [autoSuggest, isSearching, mdsData, search, searchTerms]);\n\n useDeepCompareEffect(() => {\n const filterKeywordSearchResults = () => {\n return searchResults ? searchResults : mdsData;\n };\n\n const filterAdvancedSearchResults = (input: JSONObject[]): JSONObject[] => {\n return filterByAdvSearch(\n input,\n searchTerms.advancedSearchTerms,\n discoveryConfig,\n );\n };\n\n setSearchedData(filterAdvancedSearchResults(filterKeywordSearchResults()));\n\n setSuggestions(() => {\n return (\n miniSearchSuggestions?.map(\n (suggestion: Suggestion) => suggestion.suggestion,\n ) ?? []\n );\n });\n }, [\n discoveryConfig,\n mdsData,\n miniSearchSuggestions,\n searchResults,\n searchTerms.advancedSearchTerms,\n ]);\n\n return {\n searchedData: isSearching ? searchedData : mdsData,\n clearSearchTerms: clearSearchTerms,\n suggestions: suggestions,\n };\n};\n\ninterface PaginationHookProps {\n data: JSONObject[];\n pagination: MetadataPaginationParams;\n}\n\nconst usePagination = ({ data, pagination }: PaginationHookProps) => {\n const [paginatedData, setPaginatedData] = useState<JSONObject[]>([]);\n\n useEffect(() => {\n const updatePaginatedData = () => {\n setPaginatedData(\n data.slice(pagination.offset, pagination.offset + pagination.pageSize),\n );\n };\n\n updatePaginatedData();\n }, [data, pagination.offset, pagination.pageSize]);\n\n return {\n paginatedData,\n };\n};\n\ninterface AdvancedSearchFilterValuesHookProps {\n data: JSONObject[];\n advancedSearchFilters: AdvancedSearchFilters;\n uidField: string;\n}\n\nconst useGetAdvancedSearchFilterValues = ({\n data,\n advancedSearchFilters,\n uidField,\n}: AdvancedSearchFilterValuesHookProps) => {\n const [advancedSearchFilterValues, setAdvancedSearchFilterValues] = useState<\n ReadonlyArray<KeyValueSearchFilter>\n >([]);\n\n useEffect(() => {\n if (data) {\n setAdvancedSearchFilterValues(\n processAdvancedSearchTerms(advancedSearchFilters, data, uidField),\n );\n }\n }, [advancedSearchFilters, data, uidField]);\n\n return {\n advancedSearchFilterValues,\n };\n};\n\ninterface SummaryStatisticsHookProps {\n data: JSONObject[];\n aggregationConfig: SummaryStatisticsConfig[];\n}\n\nconst useGetSummaryStatistics = ({\n data,\n aggregationConfig,\n}: SummaryStatisticsHookProps) => {\n const [summaryStatistics, setSummaryStatistics] = useState<SummaryStatistics>(\n [],\n );\n\n useEffect(() => {\n setSummaryStatistics(processAllSummaries(data, aggregationConfig));\n }, [data, aggregationConfig]);\n\n return {\n summaryStatistics,\n };\n};\n\nexport const useLoadAllData = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n dataHook,\n}: DiscoveryDataLoaderProps & {\n dataHook: MetadataDataHook;\n}): DiscoverDataHookResponse => {\n const uidField = discoveryConfig?.minimalFieldMapping?.uid || 'guid';\n const dataGuidType = discoveryConfig?.guidType ?? guidType;\n const dataStudyField = discoveryConfig?.studyField ?? studyField;\n const [summaryStatistics, setSummaryStatistics] = useState<SummaryStatistics>(\n [],\n );\n const [chartData, setChartData] = useState<AggregationsData>({});\n\n const {\n mdsData,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n } = dataHook({\n studyField: dataStudyField,\n guidType: dataGuidType,\n maxStudies,\n discoveryConfig,\n });\n\n const manualSortingAndPagination =\n getManualSortingAndPagination(discoveryConfig);\n\n const { advancedSearchFilterValues } = useGetAdvancedSearchFilterValues({\n data: mdsData,\n advancedSearchFilters: discoveryConfig.features?.advSearchFilters ?? {\n enabled: false,\n field: '',\n displayName: '',\n filters: [],\n },\n uidField,\n });\n\n const { searchedData, clearSearchTerms, suggestions } = useSearchMetadata({\n discoveryConfig,\n searchTerms,\n\n mdsData,\n isSuccess,\n });\n\n // TODO: determine if this is even needed\n const { paginatedData } = usePagination({\n data: searchedData,\n pagination,\n });\n\n useEffect(() => {\n setSummaryStatistics(\n processAllSummaries(searchedData, discoveryConfig?.aggregations),\n );\n if (\n discoveryConfig.features.chartsSection?.charts &&\n searchedData.length > 0\n )\n setChartData(\n processChartData(\n searchedData,\n Object.keys(discoveryConfig.features.chartsSection.charts),\n ),\n );\n }, [\n searchedData,\n discoveryConfig?.aggregations,\n discoveryConfig.features.chartsSection?.charts,\n ]);\n\n return {\n data: manualSortingAndPagination ? paginatedData : searchedData,\n hits: searchedData.length ?? -1,\n clearSearch: clearSearchTerms,\n suggestions: suggestions,\n advancedSearchFilterValues,\n summaryStatistics,\n charts: chartData,\n dataRequestStatus: {\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n },\n };\n};\n\nexport const useLoadAllMDSData = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n}: DiscoveryDataLoaderProps) =>\n useLoadAllData({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType,\n maxStudies,\n studyField,\n dataHook: useGetMDSData,\n });\n\nexport const useLoadAllAggMDSData = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n}: DiscoveryDataLoaderProps) =>\n useLoadAllData({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType,\n maxStudies,\n studyField,\n dataHook: useGetAggMDSData,\n });\n","import React, { useState } from 'react';\nimport { MdSearch as SearchIcon, MdClose as CloseIcon } from 'react-icons/md';\nimport { Autocomplete } from '@mantine/core';\nimport { SearchInputProps } from './types';\n\ninterface SearchInputWithAutoSuggestProps extends SearchInputProps {\n suggestions: string[];\n limit?: number;\n searchBarTerms: string[];\n setSearchBarTerms: React.Dispatch<React.SetStateAction<string[]>>;\n}\n\nconst SearchInputWithSuggestions = ({\n searchBarTerms,\n setSearchBarTerms,\n searchChanged,\n placeholder,\n label,\n suggestions,\n clearSearch = () => null,\n}: SearchInputWithAutoSuggestProps) => {\n return (\n <div className=\"relative\">\n <Autocomplete\n data={suggestions}\n label={label}\n leftSection={<SearchIcon size={24} />}\n placeholder={placeholder || 'Search...'}\n data-testid=\"discovery-textbox-search-bar\"\n aria-label=\"DiscoverySearch Input\"\n value={searchBarTerms.join(' ')}\n onChange={(value) => {\n searchChanged(value);\n setSearchBarTerms(value.split(' '));\n }}\n classNames={{\n input: 'focus:border-2 focus:border-primary text-sm',\n }}\n size=\"sm\"\n rightSection={\n searchBarTerms.length > 0 && (\n <CloseIcon\n onClick={() => {\n setSearchBarTerms([]);\n searchChanged('');\n clearSearch();\n }}\n className=\"cursor-pointer\"\n data-testid=\"search-input-clear-search\"\n />\n )\n }\n />\n </div>\n );\n};\n\nexport default SearchInputWithSuggestions;\n","import { useEffect, useState } from 'react';\n\nimport {\n JSONObject,\n MetadataPaginationParams,\n useGetAggMDSQuery,\n} from '@gen3/core';\nimport {\n AdvancedSearchFilters,\n DiscoverDataHookResponse,\n DiscoveryDataLoaderProps,\n KeyValueSearchFilter,\n SearchTerms,\n} from '../../types';\n\nimport { getFilterValuesByKey, hasSearchTerms } from '../../Search/utils';\n\n// TODO remove after debugging\n// import { reactWhatChanged as RWC } from 'react-what-changed';\n\ninterface QueryType {\n term: string;\n fields: string[];\n combineWith: 'AND' | 'OR';\n}\n\nconst processAdvancedSearchTerms = (\n advSearchFilters: AdvancedSearchFilters,\n data: JSONObject[],\n uidField: string,\n): ReadonlyArray<KeyValueSearchFilter> => {\n return advSearchFilters.filters.map((filter) => {\n const { key, keyDisplayName } = filter;\n const values = getFilterValuesByKey(\n key,\n data,\n advSearchFilters.field,\n uidField,\n );\n return {\n key,\n keyDisplayName,\n valueDisplayNames: values.reduce(\n (acc, cur) => {\n acc[cur] = cur;\n return acc;\n },\n {} as Record<string, string>,\n ),\n };\n });\n};\n\ninterface GetDataProps {\n offset: number;\n guidType: string;\n pageSize: number;\n studyField: string;\n}\n\nconst useGetData = ({\n offset = 0,\n pageSize = 10,\n guidType = 'discovery_metadata',\n studyField = 'gen3_discovery',\n}: Partial<GetDataProps>) => {\n const [mdsData, setMDSData] = useState<Array<JSONObject>>([]);\n const [isError, setIsError] = useState(false);\n const [total, setTotal] = useState(0);\n\n const {\n data,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError: queryIsError,\n } = useGetAggMDSQuery({\n guidType: guidType,\n studyField: studyField,\n offset: offset,\n pageSize: pageSize,\n });\n\n useEffect(() => {\n if (data && isSuccess) {\n setMDSData(data.data);\n setTotal(data.hits);\n }\n }, [data, isSuccess]);\n\n useEffect(() => {\n if (queryIsError) {\n setIsError(true);\n }\n }, [queryIsError]);\n\n return {\n mdsData,\n total,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n };\n};\n\ninterface SearchMetadataProps {\n discoveryConfig: any;\n searchTerms: SearchTerms;\n mdsData: JSONObject[];\n isSuccess: boolean;\n}\n\ninterface PaginationHookProps {\n data: JSONObject[];\n pagination: MetadataPaginationParams;\n}\n\ninterface AdvancedSearchFilterValuesHookProps {\n data: JSONObject[];\n advancedSearchFilters: AdvancedSearchFilters;\n uidField: string;\n}\n\nexport const useAggMDSServer = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n}: DiscoveryDataLoaderProps): DiscoverDataHookResponse => {\n const uidField = discoveryConfig?.minimalFieldMapping?.uid || 'guid';\n const dataGuidType = discoveryConfig?.guidType ?? guidType;\n const dataStudyField = discoveryConfig?.studyField ?? studyField;\n const {\n mdsData,\n total,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n } = useGetData({\n ...pagination,\n studyField: dataStudyField,\n guidType: dataGuidType,\n });\n\n return {\n data: mdsData,\n hits: total,\n suggestions: [],\n summaryStatistics: [],\n charts: {},\n advancedSearchFilterValues: [],\n dataRequestStatus: {\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n },\n };\n};\n","import { useEffect, useState } from 'react';\nimport { GetDataProps, GetDataResponse } from '../types';\nimport { processAuthorizations } from '../utils';\nimport {\n useCoreSelector,\n useGetIndexAggMDSQuery,\n selectAuthzMappingData,\n CoreState,\n type JSONObject,\n type IndexedMetadataFilters,\n} from '@gen3/core';\nimport { DiscoveryDataLoaderProps, DiscoveryIndexConfig } from '../../types';\nimport { isArrayOfString } from '../../../../utils/isType';\nimport { useLoadAllData } from '../MDSAllLocal/DataLoader';\n\nconst extractIndexArrayFromConfig = (\n config?: DiscoveryIndexConfig,\n): Array<string> => {\n if (!config) {\n // throw an error or return default value\n return [];\n }\n const dataFetchArgs = config.features?.dataLoader?.dataFetchArgs;\n\n if (!dataFetchArgs?.indexKeys) return [];\n\n if (isArrayOfString(dataFetchArgs.indexKeys)) {\n return dataFetchArgs.indexKeys;\n }\n\n return [];\n};\n\nconst extractFilterEmptyFromConfig = (\n config?: DiscoveryIndexConfig,\n): IndexedMetadataFilters | undefined => {\n if (!config) {\n // throw an error or return default value\n return undefined;\n }\n if (config.features?.dataLoader?.dataFetchArgs?.hasEnoughData) {\n return config.features.dataLoader.dataFetchArgs\n .hasEnoughData as unknown as IndexedMetadataFilters;\n }\n return undefined;\n};\n\nconst useGetIndexedMDSData = ({\n guidType = 'unregistered_discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n discoveryConfig,\n}: Partial<GetDataProps>): GetDataResponse => {\n const [mdsData, setMDSData] = useState<Array<JSONObject>>([]);\n const [isError, setIsError] = useState(false);\n\n const indexKeys = extractIndexArrayFromConfig(discoveryConfig);\n const {\n data,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError: queryIsError,\n } = useGetIndexAggMDSQuery({\n guidType: guidType,\n studyField: studyField,\n offset: 0,\n pageSize: maxStudies,\n indexKeys: indexKeys,\n filterEmpty: extractFilterEmptyFromConfig(discoveryConfig),\n });\n\n const authMapping = useCoreSelector((state: CoreState) =>\n selectAuthzMappingData(state),\n );\n\n useEffect(() => {\n if (data && isSuccess) {\n const studyData = data.data;\n if (discoveryConfig?.features?.authorization.enabled) {\n setMDSData(\n processAuthorizations(studyData, discoveryConfig, {\n default: authMapping,\n }),\n );\n } else setMDSData(studyData);\n } else setMDSData([]);\n }, [authMapping, data, discoveryConfig, isSuccess, studyField]);\n\n useEffect(() => {\n if (queryIsError) {\n setIsError(true);\n }\n }, [queryIsError]);\n\n return {\n mdsData,\n isUninitialized,\n isFetching,\n isLoading,\n isSuccess,\n isError,\n };\n};\n\nexport const useLoadAllIndexedAggMDSData = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n}: DiscoveryDataLoaderProps) =>\n useLoadAllData({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n guidType,\n maxStudies,\n studyField,\n dataHook: useGetIndexedMDSData,\n });\n","import { useEffect, useState } from 'react';\nimport {\n DiscoverDataHookResponse,\n DiscoveryDataLoaderProps,\n} from '../../types';\nimport { useDeepCompareEffect } from 'use-deep-compare';\n\nimport { JSONObject } from '@gen3/core';\nimport { processAdvancedSearchTerms, processAllSummaries } from '../utils';\n\ninterface ProxyData {\n displayedData: JSONObject[];\n hits: number;\n suggestions: string[];\n}\n\nexport const useAggMetaMDSProxy = ({\n pagination,\n searchTerms,\n advancedSearchTerms,\n discoveryConfig,\n sorting,\n guidType = 'discovery_metadata',\n maxStudies = 10000,\n studyField = 'gen3_discovery',\n}: DiscoveryDataLoaderProps): DiscoverDataHookResponse => {\n const [data, setData] = useState<ProxyData>({\n displayedData: [],\n hits: 0,\n suggestions: [],\n });\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const uidField = discoveryConfig?.minimalFieldMapping?.uid || 'guid';\n const apiUrl = 'http://localhost:3000/api/discovery';\n\n const params = {\n discoveryConfig: discoveryConfig,\n pagination: pagination,\n searchTerms: searchTerms,\n sorting: sorting,\n selectedFieldsForSearchIndexing: [],\n /*\n TODO: Example param\n selectedFieldsForSearchIndexing: [\n 'study_metadata.minimal_info.study_name',\n ],\n */\n selectedTags: {},\n /*\n TODO: Example param\n selectedTags: {\n SPARC: true,\n Dataverse: true,\n },\n */\n };\n\n useDeepCompareEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n try {\n const response = await fetch(apiUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(params),\n });\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const jsonData = await response.json();\n setData(jsonData);\n } catch (err) {\n setError(true);\n console.error(err);\n } finally {\n setLoading(false);\n }\n };\n fetchData();\n }, [searchTerms, pagination, sorting]);\n\n let advancedSearchFilterValues = [] as any;\n const advancedSearchFilters = discoveryConfig.features?.advSearchFilters ?? {\n enabled: false,\n field: '',\n displayName: '',\n filters: [],\n };\n advancedSearchFilterValues = processAdvancedSearchTerms(\n advancedSearchFilters,\n data.displayedData,\n uidField,\n );\n\n const summaryStatistics = processAllSummaries(\n data.displayedData,\n discoveryConfig?.aggregations,\n );\n // update value count to reflect total number of studies\n summaryStatistics[0].value = data.hits;\n\n return {\n data: data.displayedData,\n hits: data.hits,\n suggestions: data.suggestions,\n summaryStatistics: summaryStatistics,\n charts: {},\n advancedSearchFilterValues: advancedSearchFilterValues,\n dataRequestStatus: {\n isUninitialized: false,\n isFetching: loading,\n isLoading: loading,\n isSuccess: error,\n isError: error,\n },\n };\n};\n","// build a factor function that returns a DataLoader for each type of data\n//\n\nimport { DiscoverDataHookResponse, DiscoveryDataLoaderProps } from '../types';\nimport { useAggMDSServer } from './AggMDSServer/DataLoader';\nimport {\n useLoadAllAggMDSData,\n useLoadAllMDSData,\n} from './MDSAllLocal/DataLoader';\nimport { useLoadAllIndexedAggMDSData } from './IndexedMetadata/DataLoader';\nimport { useAggMetaMDSProxy } from './AggMetaMDSProxy/DataLoader';\n\nexport type DiscoveryDataLoader = (\n _: DiscoveryDataLoaderProps,\n) => DiscoverDataHookResponse;\n\nconst discoveryDataLoaders: Record<string, DiscoveryDataLoader> = {};\n\nexport const registerDiscoveryDataLoader = (\n name: string,\n dataLoader: DiscoveryDataLoader,\n) => {\n discoveryDataLoaders[name] = dataLoader;\n};\n\nexport const getDiscoveryDataLoader = (\n name?: string,\n): DiscoveryDataLoader | undefined => {\n if (name === undefined) {\n console.error('getDiscoveryDataLoader: no name provided');\n return undefined;\n }\n\n if (!(name in discoveryDataLoaders)) {\n console.error('getDiscoveryDataLoader: no data loader found for', name);\n return undefined;\n }\n return discoveryDataLoaders[name];\n};\n\nexport const getDiscoveryDataLoaders = (): string[] => {\n return Object.keys(discoveryDataLoaders);\n};\n\nexport const registerDefaultDiscoveryDataLoaders = () => {\n registerDiscoveryDataLoader('AggMDSServer', useAggMDSServer);\n registerDiscoveryDataLoader('MDSAllLocal', useLoadAllMDSData);\n registerDiscoveryDataLoader('AggMDSAllLocal', useLoadAllAggMDSData);\n registerDiscoveryDataLoader(\n 'IndexedAggMDSAllLocal',\n useLoadAllIndexedAggMDSData,\n );\n registerDiscoveryDataLoader('AggMetaMDSProxy', useAggMetaMDSProxy);\n};\n\nregisterDefaultDiscoveryDataLoaders();\n","import React, { ReactNode, useMemo, useRef, useState } from 'react';\nimport { DiscoveryIndexConfig } from './types';\nimport DiscoveryTable from './DiscoveryTable';\nimport DiscoveryProvider from './DiscoveryProvider';\nimport { Button, Text } from '@mantine/core';\nimport AdvancedSearchPanel from './Search/AdvancedSearchPanel';\nimport { MRT_PaginationState, MRT_SortingState } from 'mantine-react-table';\nimport { useDisclosure } from '@mantine/hooks';\nimport ActionBar from './ActionBar/ActionBar';\nimport SummaryStatisticPanel from './Statistics/SummaryStatisticPanel';\nimport { CollapsableCharts } from '../../components/charts';\nimport { useLoadAllMDSData } from './DataLoaders/MDSAllLocal/DataLoader';\nimport { AdvancedSearchTerms, SearchCombination } from './Search/types';\nimport SearchInputWithSuggestions from './Search/SearchInputWithSuggestions';\nimport AiSearch from './Search/AiSearch';\nimport { getDiscoveryDataLoader } from './DataLoaders/registeredDataLoaders';\nimport StudyProvider from '../Study/StudyProvider';\nimport { useDeepCompareMemo } from 'use-deep-compare';\n\nexport interface DiscoveryIndexPanelProps {\n discoveryConfig: DiscoveryIndexConfig;\n indexSelector: ReactNode | null;\n}\n\n/**\n * DiscoveryIndexPanel is a React functional component that renders a discovery panel interface.\n * It includes features such as search, sorting, filtering, charts, export functionality, and a discovery table.\n * The component uses hooks for handling state, API data loading, and interface interactions.\n *\n * @param {Object} props - The properties object passed to the component.\n * @param {Object} props.discoveryConfig - Configuration object for setting up the discovery panel.\n * @param {Object} props.discoveryConfig.features - Defines enabled features (e.g., search, charts, export).\n * @param {Object} props.discoveryConfig.minimalFieldMapping - Field mapping configuration, such as `uid`.\n * @param {JSX.Element} props.indexSelector - React component for selecting an index in the discovery panel.\n *\n * @return {JSX.Element} A fully featured discovery interface including search functionality, a table, charts, filters, and more.\n */\nconst DiscoveryIndexPanel = ({\n discoveryConfig,\n indexSelector,\n}: DiscoveryIndexPanelProps) => {\n const dataHook = useMemo(\n () =>\n getDiscoveryDataLoader(\n discoveryConfig?.features?.dataLoader?.dataFetchFunction,\n ) ?? useLoadAllMDSData,\n [discoveryConfig?.features?.dataLoader?.dataFetchFunction],\n );\n const [pagination, setPagination] = useState<MRT_PaginationState>({\n pageIndex: 0,\n pageSize: 10,\n });\n\n const parentDivRef = useRef<HTMLDivElement>(null);\n const [searchBarTerms, setSearchBarTerms] = useState<string[]>([]);\n const [selections, setSelections] = useState<string[]>([]); // table selections\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n const [advancedSearchTerms, setAdvancedSearchTerms] =\n useState<AdvancedSearchTerms>({\n operation: SearchCombination.and,\n filters: {},\n });\n\n const searchParam = useDeepCompareMemo(() => {\n return {\n keyword: {\n operator: SearchCombination.and,\n keywords: searchBarTerms,\n },\n advancedSearchTerms: advancedSearchTerms,\n };\n }, [searchBarTerms, advancedSearchTerms]);\n\n // Get all required data from the data hook. This includes the metadata, search suggestions, and results, pagination, etc.\n const {\n data,\n hits,\n dataRequestStatus,\n advancedSearchFilterValues,\n suggestions,\n summaryStatistics,\n charts: chartData,\n } = dataHook({\n pagination: {\n offset: pagination.pageIndex * pagination.pageSize,\n pageSize: pagination.pageSize,\n },\n searchTerms: searchParam,\n discoveryConfig,\n sorting,\n });\n\n const selectedRecords = useMemo(() => {\n const uidField = discoveryConfig?.minimalFieldMapping?.uid ?? 'guid';\n const filterSelectedMembers = (data: Array<Record<string, any>>) =>\n data?.filter(\n (member) => uidField in member && selections.includes(member[uidField]),\n );\n return filterSelectedMembers(data);\n }, [data, discoveryConfig?.minimalFieldMapping?.uid, selections]);\n\n const [showAdvancedSearch, { toggle: toggleAdvancedSearch }] =\n useDisclosure(false);\n\n return (\n <div className=\"flex flex-col items-center p-4 w-full bg-base-lightest\">\n <DiscoveryProvider discoveryIndexConfig={discoveryConfig}>\n <StudyProvider>\n <div className=\"w-full\">\n {discoveryConfig.features?.pageTitle &&\n discoveryConfig?.features?.pageTitle.enabled ? (\n <Text size=\"xl\">{discoveryConfig?.features?.pageTitle.text}</Text>\n ) : null}\n {discoveryConfig.features?.chartsSection?.enabled && (\n <CollapsableCharts\n config={discoveryConfig.features?.chartsSection}\n data={chartData}\n isSuccess={dataRequestStatus.isSuccess}\n />\n )}\n <div className=\"flex items-center p-2 mb-4 bg-base-max rounded-lg\">\n {indexSelector}\n <SummaryStatisticPanel summaries={summaryStatistics} />\n <div className=\"w-3/4 flex flex-col\">\n <SearchInputWithSuggestions\n searchBarTerms={searchBarTerms}\n setSearchBarTerms={setSearchBarTerms}\n suggestions={suggestions}\n clearSearch={() => {\n setSearchBarTerms([]);\n }}\n searchChanged={(v) => setSearchBarTerms(v.split(' '))}\n placeholder={\n discoveryConfig?.features?.search?.searchBar?.placeholder ??\n 'Search...'\n }\n label={\n discoveryConfig?.features?.search?.searchBar?.inputSubtitle\n }\n />\n </div>\n </div>\n {discoveryConfig?.features?.aiSearch && (\n <div className=\"mb-4\">\n <div className=\"flex w-full bg-base-max p-4 rounded-lg\">\n <AiSearch />\n </div>\n </div>\n )}\n <div className=\"flex flex-row\">\n {discoveryConfig?.features?.advSearchFilters?.enabled ? (\n <Button onClick={toggleAdvancedSearch} color=\"accent\">\n Filters\n </Button>\n ) : (\n false\n )}\n {discoveryConfig?.features?.exportFromDiscovery?.enabled ? (\n <ActionBar\n buttons={discoveryConfig.features.exportFromDiscovery.buttons}\n exportDataFields={\n discoveryConfig.features.exportFromDiscovery\n .exportDataFields\n }\n selectedResources={selectedRecords}\n verifyExternalLogins={\n discoveryConfig.features.exportFromDiscovery\n .verifyExternalLogins\n }\n dataLibraryStoreMode={\n discoveryConfig.features.exportFromDiscovery\n .dataLibraryStoreMode\n }\n />\n ) : null}\n </div>\n <div className=\"flex justify-start\">\n {discoveryConfig?.features?.advSearchFilters?.enabled ? (\n <AdvancedSearchPanel\n advSearchFilters={advancedSearchFilterValues}\n opened={showAdvancedSearch}\n setAdvancedSearchFilters={setAdvancedSearchTerms}\n />\n ) : (\n false\n )}\n <div\n className=\"flex w-full grow-0 bg-base-max border-1 border-base-lighter p-4 rounded-md\"\n ref={parentDivRef}\n >\n <DiscoveryTable\n data={data}\n hits={hits}\n dataRequestStatus={dataRequestStatus}\n setPagination={setPagination}\n setSorting={setSorting}\n setSelection={setSelections}\n pagination={pagination}\n sorting={sorting}\n />\n </div>\n </div>\n </div>\n </StudyProvider>\n </DiscoveryProvider>\n </div>\n );\n};\n\nexport default DiscoveryIndexPanel;\n","import React from 'react';\nimport { Paper, Text } from '@mantine/core';\n\ninterface Message {\n message: string;\n code?: string;\n isError?: boolean;\n}\n\nconst MessagePanel = ({ message, isError = false }: Message) => {\n return (\n <div className=\"relative w-full flex flex-col\">\n <Paper shadow=\"md\" radius=\"lg\" p=\"md\">\n <div className=\"w-1/2 mx-auto text-center mt-4 bg-base-lightest hover:bg-base-lighter p-4 border-bg-base-light border-r-8\">\n <Text\n size=\"lg\"\n fw=\"bold\"\n color={isError ? 'red' : 'primary-contrast'}\n >\n {message}\n </Text>\n </div>\n </Paper>\n </div>\n );\n};\n\n\nexport default MessagePanel;\n","import React, { useMemo, useState } from 'react';\nimport { Select, Tabs } from '@mantine/core';\nimport { DiscoveryConfig, DiscoveryIndexConfig } from './types';\nimport DiscoveryIndexPanel from './DiscoveryIndexPanel';\nimport MessagePanel from '../../components/MessagePanel';\n\nconst extractLabel = (c: DiscoveryIndexConfig, idx: number) =>\n c.label ?? c.features?.pageTitle?.text ?? `Index ${idx.toString()}`;\n\nexport interface DiscoveryProps {\n discoveryConfig: DiscoveryConfig;\n}\n\nconst Discovery = ({ discoveryConfig }: DiscoveryProps) => {\n const [metadataIndex, setMetadataIndex] = useState<string>('0');\n\n const menuItems = useMemo(() => {\n return discoveryConfig.metadataConfig.map((n, idx) => {\n return { value: idx.toString(), label: extractLabel(n, idx) };\n });\n }, [discoveryConfig.metadataConfig]);\n\n if (menuItems.length === 0) {\n return <MessagePanel message=\"No discovery configuration\" />;\n }\n\n if (menuItems.length === 1) {\n // no need for tabs\n return (\n <DiscoveryIndexPanel\n discoveryConfig={discoveryConfig.metadataConfig[0]}\n indexSelector={null}\n />\n );\n }\n\n return (\n <div className=\"flex flex-col items-center p-4 w-full bg-base-lightest\">\n <Tabs\n className=\"w-full\"\n defaultValue={metadataIndex}\n variant={discoveryConfig.metadataConfig[0]?.tabType}\n onChange={(v: string | null) => {\n setMetadataIndex(v ?? '0');\n }}\n >\n <Tabs.List>\n {menuItems.map((item) => (\n <Tabs.Tab key={item.value} value={item.value}>\n {item.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n {menuItems.map((item, i) => (\n <Tabs.Panel value={item.value} key={item.value}>\n <DiscoveryIndexPanel\n discoveryConfig={\n discoveryConfig.metadataConfig[Number.parseInt(item.value)]\n }\n indexSelector={\n menuItems.length < 0 ? (\n <Select\n label=\"Metadata:\"\n data={menuItems}\n value={metadataIndex}\n onChange={(v: string | null) => {\n setMetadataIndex(v ?? '0');\n }}\n />\n ) : null\n }\n />\n </Tabs.Panel>\n ))}\n </Tabs>\n </div>\n );\n};\n\nexport default Discovery;\n","import React from 'react';\nimport { CellRenderFunctionProps } from './types';\nimport { AccessLevel } from '../../../utils';\nimport { Divider, Group, Text, Tooltip } from '@mantine/core';\nimport {\n LuCircleSlash as NotAvailableIcon,\n LuClock as PendingIcon,\n LuLock as LockedIcon,\n LuLockOpen as UnlockedIcon,\n} from 'react-icons/lu';\nimport { getAccessLevelFromNumber } from '../utils';\nimport { isArray } from 'lodash';\nimport { useDiscoveryContext } from '../DiscoveryProvider';\n\nconst buildTooltip = (mainMessage: string, secondaryMessage?: string) => {\n return (\n <div className=\"flex flex-col\">\n <Text size=\"sm\"> {mainMessage} </Text>\n {secondaryMessage ? (\n <div className=\"flex flex-col items-start my-1\">\n <Divider />\n <Text size=\"xs\">{secondaryMessage}</Text>\n </div>\n ) : null}\n </div>\n );\n};\n\nexport const DataAccessCellRenderer = ({\n cell,\n row,\n}: CellRenderFunctionProps) => {\n const { discoveryConfig: config } = useDiscoveryContext();\n const authzField = config.minimalFieldMapping?.authzField || 'authz';\n let value = cell?.getValue<number>();\n const authorization = (row?.original?.[authzField] as string) || undefined;\n const dataObjectField =\n config.features.exportFromDiscovery?.exportDataFields.dataObjectField;\n if (isArray(value)) value = value[0];\n const accessLevel = getAccessLevelFromNumber(value);\n\n const numFileObjects =\n dataObjectField && row?.original?.[dataObjectField]\n ? row?.original?.[dataObjectField]\n : 0;\n\n if (numFileObjects === 0) {\n return (\n <Tooltip label={buildTooltip('No data attached to this study')}>\n <NotAvailableIcon className=\"text-utility-error\"></NotAvailableIcon>\n </Tooltip>\n );\n }\n if (!accessLevel) {\n return (\n <Tooltip label={buildTooltip('Unable to determine access level')}>\n <NotAvailableIcon className=\"text-utility-error\"></NotAvailableIcon>\n </Tooltip>\n );\n }\n\n if (accessLevel === AccessLevel.WAITING) {\n return (\n <Tooltip label={buildTooltip('Data are not yet available')}>\n <PendingIcon className=\"text-utility-warning\"></PendingIcon>\n </Tooltip>\n );\n }\n if (accessLevel === AccessLevel.MIXED) {\n return (\n <Tooltip label={buildTooltip('You have mixed acccess')}>\n <Group>\n <LockedIcon className=\"text-utility-warning\"></LockedIcon>\n <UnlockedIcon className=\"text-utility-warning\"></UnlockedIcon>\n </Group>\n </Tooltip>\n );\n }\n\n if (accessLevel === AccessLevel.NOT_AVAILABLE) {\n return (\n <Tooltip label={buildTooltip('No data is shared')}>\n <NotAvailableIcon className=\"text-utility-error\"></NotAvailableIcon>\n </Tooltip>\n );\n }\n if (accessLevel === AccessLevel.ACCESSIBLE) {\n return (\n <Tooltip\n label={buildTooltip(\n 'You have access to this study',\n `read access to ${authorization}`,\n )}\n >\n <div>\n <UnlockedIcon className=\"text-utility-success\"></UnlockedIcon>\n </div>\n </Tooltip>\n );\n }\n if (accessLevel === AccessLevel.UNACCESSIBLE) {\n return (\n <Tooltip\n label={buildTooltip(\n 'You currently do not have access to this study',\n `you need read access to ${authorization}`,\n )}\n >\n <div>\n <LockedIcon className=\"text-utility-error\"></LockedIcon>\n </div>\n </Tooltip>\n );\n }\n return <React.Fragment />;\n};\n","import { Text, Tooltip } from '@mantine/core';\nimport { isArray } from 'lodash';\nimport React from 'react';\nimport { DataItemRendererFunction, DataItemRenderFunctionProps } from './types';\nimport { isTextTransform } from '../../utils';\n\nexport const TruncatedStringWithTooltip: DataItemRendererFunction = ({\n value,\n params,\n}: DataItemRenderFunctionProps) => {\n let limit = 15;\n if (\n typeof params?.maxLength === 'string' &&\n !isNaN(Number(params?.maxLength))\n ) {\n limit = parseInt(params?.maxLength, 10);\n } else if (typeof params?.maxLength === 'number') {\n limit = params?.maxLength;\n }\n\n const ttValue = isTextTransform(params?.transform)\n ? params?.transform\n : undefined;\n const valueIfNotAvailable = params?.valueIfNotAvailable ?? '';\n const content = value as string | string[];\n\n if (\n content === undefined ||\n content === null ||\n (isArray(content) && content.length === 0)\n ) {\n return <Text>{`${valueIfNotAvailable}`}</Text>;\n }\n\n if (content === '') {\n return <Text>{`${valueIfNotAvailable}`} </Text>;\n }\n const contentString = isArray(content) ? content.join(', ') : content;\n const truncated =\n contentString.length > limit\n ? `${contentString.slice(0, limit)}...`\n : contentString;\n return (\n <Tooltip label={content}>\n <Text tt={ttValue}>{truncated}</Text>\n </Tooltip>\n );\n};\n","import { isArray, toString } from 'lodash';\nimport React, { CSSProperties } from 'react';\nimport { Badge, Text } from '@mantine/core';\nimport Link from 'next/link';\nimport { Icon } from '@iconify-icon/react';\nimport { DiscoveryCellRendererFactory } from './CellRendererFactory';\nimport { getTagInfo } from '../../Study/utils';\nimport { TagData } from '../../Study/types';\nimport { useDiscoveryContext } from '../DiscoveryProvider';\nimport { CellRendererFunction, CellRenderFunctionProps } from './types';\nimport { DataAccessCellRenderer } from './DataAccessCellRenderers';\nimport { TruncatedStringWithTooltip } from '../../../components/DataItems/TruncatedStringWithTooltip';\nimport { JSONObject } from '@gen3/core';\n\nimport { getParamsValueAsString } from '../../../utils/values';\n\nconst TruncatedStringWithTooltipCellRenderer: CellRendererFunction = (\n { value }: CellRenderFunctionProps,\n params?: JSONObject,\n) => {\n return <TruncatedStringWithTooltip value={value} params={params} />;\n};\n\n// TODO need to type this\nexport const RenderArrayCell: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n if (isArray(value)) {\n return (\n <div className=\"w-64 flex flex-wrap gap-0.5\">\n {value.map((x, index) => (\n <Badge\n variant=\"outline\"\n classNames={{ root: 'basis-1/3' }}\n color=\"accent-light\"\n key={`${x}-value-${index}`}\n >\n {x}\n </Badge>\n ))}\n </div>\n );\n }\n return <span>value</span>;\n};\n\n// Define the valid textTransform values\nconst validTextTransforms: Array<CSSProperties['textTransform']> = [\n 'none',\n 'capitalize',\n 'uppercase',\n 'lowercase',\n 'full-width',\n 'full-size-kana',\n 'inherit',\n 'initial',\n 'revert',\n 'unset',\n];\n\n// Type guard function\nconst isTextTransform = (\n value: any,\n): value is CSSProperties['textTransform'] => {\n return validTextTransforms.includes(value);\n};\n\nexport const RenderArrayCellNegativePositive: CellRendererFunction = ({\n value,\n cell,\n}: CellRenderFunctionProps) => {\n if (isArray(value)) {\n return (\n <div className=\"w-64 flex flex-wrap gap-0.5\">\n {value.map((x, index) => (\n <Badge\n variant=\"filled\"\n color={x === 'Positive' ? 'green' : 'gray'}\n classNames={{ root: 'basis-1/3' }}\n key={`${cell?.id ?? 'cell'}-value-${index}`}\n >\n {x}\n </Badge>\n ))}\n </div>\n );\n }\n // TODO: This is a hack to get around the fact that the data is not typed\n return <span>{value as any}</span>;\n};\n\nexport const RenderLinkCell: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n const content = value as string;\n return (\n <Link\n href={content}\n onClick={(ev) => ev.stopPropagation()}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {content}\n </Link>\n );\n};\n\nconst RenderYearOfBirthRestricted: CellRendererFunction = (\n { value }: CellRenderFunctionProps,\n params?: JSONObject,\n) => {\n const ttValue = isTextTransform(params?.transform)\n ? params?.transform\n : undefined;\n const valueIfNotAvailable = params?.valueIfNotAvailable || '';\n const content = value as string | string[];\n if (content === undefined || content === null) {\n return <Text>{`${valueIfNotAvailable}`} </Text>;\n }\n if (content == '') {\n return <Text>{`${valueIfNotAvailable}`} </Text>;\n }\n\n // Check if the content is a string and represents a year less than 1935\n let displayContent;\n if (\n typeof content === 'string' &&\n !Number.isNaN(Number(content)) &&\n Number(content) < 1935\n ) {\n displayContent = '1935';\n } else if (isArray(content)) {\n displayContent = content\n .map((item) => {\n if (\n typeof item === 'string' &&\n !Number.isNaN(Number(item)) &&\n Number(item) < 1935\n ) {\n return '1935';\n }\n return item;\n })\n .join(', ');\n } else {\n displayContent = content;\n }\n\n return <Text tt={ttValue}>{displayContent}</Text>;\n};\n\n// given a field name, extract the value from the row using the type guards above\n\nexport const RenderLinkWithURL: CellRendererFunction = (\n { value, cell }: CellRenderFunctionProps,\n\n params?: JSONObject,\n) => {\n const content = toString(value);\n if (!content) {\n return (\n <Text>{`${\n getParamsValueAsString(params, 'valueIfNotAvailable') ?? ''\n }`}</Text>\n );\n }\n const ttValue = isTextTransform(params?.transform)\n ? params?.transform\n : undefined;\n const rowData = getParamsValueAsString(\n cell?.row?.original,\n toString(params?.['hrefValueFromField']),\n );\n if (rowData) {\n return (\n <a\n href={`http://${rowData}`}\n onClick={(ev) => ev.stopPropagation()}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Text c=\"utility.0\" tt={ttValue}>\n {content}\n </Text>\n </a>\n );\n }\n return (\n <a\n href={`http://${content}`}\n onClick={(ev) => ev.stopPropagation()}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Text c=\"utility.0\" tt={ttValue}>\n {content}\n </Text>\n </a>\n );\n};\n\nconst RenderStringCell: CellRendererFunction = (\n { value }: CellRenderFunctionProps,\n params?: JSONObject,\n) => {\n const ttValue = isTextTransform(params?.transform)\n ? params?.transform\n : undefined;\n const valueIfNotAvailable = params?.valueIfNotAvailable || '';\n const content = value as string | string[];\n if (content === undefined || content === null) {\n return <Text>{`${valueIfNotAvailable}`} </Text>;\n }\n if (content == '') {\n return <Text>{`${valueIfNotAvailable}`} </Text>;\n }\n return (\n <Text tt={ttValue}>{isArray(content) ? content.join(', ') : content}</Text>\n );\n};\n\nconst RenderNumberCell: CellRendererFunction = (\n { value }: CellRenderFunctionProps,\n params?: JSONObject,\n) => {\n const isContentEmpty = value === undefined || value === null;\n const paramsValueIfNotAvailable = params?.valueIfNotAvailable || '';\n const content = value as number | number[];\n\n if (isContentEmpty) {\n return <Text>{`${paramsValueIfNotAvailable}`}</Text>;\n }\n\n let stringValue = '';\n // check if content is an array of all numbers\n if (isArray(content) && content.every((item) => typeof item === 'number')) {\n stringValue = content.map((v) => (v ? v.toLocaleString() : '')).join('; ');\n } else {\n stringValue = content.toLocaleString();\n }\n\n return <Text>{stringValue}</Text>;\n};\n\nconst RenderParagraphsCell: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n const content = value as string | string[];\n return (\n <React.Fragment>\n {isArray(content)\n ? content\n .join('\\n')\n .split('\\n')\n .map((paragraph, i) => <p key={i}>{paragraph}</p>)\n : content.split('\\n').map((paragraph, i) => <p key={i}>{paragraph}</p>)}\n </React.Fragment>\n );\n};\n\nconst RenderIfArrayHasData: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n const content = value as string | string[];\n if (isArray(content) && content.length > 0) {\n return (\n <Icon\n icon=\"gen3:checked-filled\"\n height={22}\n width={22}\n className=\"text-utility-success\"\n />\n );\n }\n return (\n <Icon\n icon=\"gen3:cancel-filled\"\n height={22}\n width={22}\n className=\"text-utility-error\"\n />\n );\n};\n\n// TODO Fix below\n// eslint-disable-next-line react/prop-types\nexport const DiscoveryRenderTagsCell: CellRendererFunction = ({\n value,\n}: CellRenderFunctionProps) => {\n const content = value as TagData[];\n const { discoveryConfig: config } = useDiscoveryContext();\n return (\n <div className=\"flex space-x-1 space-y-4\">\n {content.map((x: TagData) => {\n const { color, display, label } = getTagInfo(x, config.tags);\n if (!display) return null;\n return (\n <Badge\n key={x.name}\n role=\"button\"\n size=\"lg\"\n radius=\"sm\"\n variant=\"filled\"\n tabIndex={0}\n aria-label={x.name}\n style={{\n backgroundColor: color,\n borderColor: color,\n color: 'white',\n }}\n >\n {label}\n </Badge>\n );\n })}\n </div>\n );\n};\n\nexport const Gen3DiscoveryStandardCellRenderers = {\n array: {\n NegativePositive: RenderArrayCellNegativePositive,\n HasData: RenderIfArrayHasData,\n default: RenderArrayCell,\n },\n string: {\n default: RenderStringCell,\n yearOfBirthRestricted: RenderYearOfBirthRestricted,\n truncated: TruncatedStringWithTooltipCellRenderer,\n },\n number: {\n default: RenderNumberCell,\n },\n paragraphs: {\n default: RenderParagraphsCell,\n },\n tags: {\n default: DiscoveryRenderTagsCell,\n },\n link: {\n default: RenderLinkCell,\n withURL: RenderLinkWithURL,\n },\n dataAccess: {\n default: DataAccessCellRenderer,\n },\n};\n\nexport const registerDiscoveryDefaultCellRenderers = () => {\n DiscoveryCellRendererFactory.registerCellRendererCatalog(\n Gen3DiscoveryStandardCellRenderers,\n );\n};\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport Discovery from '../../features/Discovery/Discovery';\nimport { DiscoveryPageProps } from './types';\nimport {\n registerDiscoveryDefaultCellRenderers,\n registerDiscoveryDefaultStudyPreviewRenderers,\n} from '../../features/Discovery';\nimport { Center } from '@mantine/core';\n\nregisterDiscoveryDefaultCellRenderers();\nregisterDiscoveryDefaultStudyPreviewRenderers();\n\nconst DiscoveryPage = ({\n headerProps,\n footerProps,\n discoveryConfig,\n}: DiscoveryPageProps): JSX.Element => {\n if (discoveryConfig === undefined) {\n return (\n <Center maw={400} h={100} mx=\"auto\">\n <div>Discovery config is not defined. Page disabled</div>\n </Center>\n );\n }\n\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Discovery Page',\n content: 'Discovery Data',\n key: 'gen3-discovery-page',\n ...(discoveryConfig?.headerMetadata\n ? discoveryConfig.headerMetadata\n : {}),\n }}\n >\n <Discovery discoveryConfig={discoveryConfig} />\n </NavPageLayout>\n );\n};\n\nexport default DiscoveryPage;\n","import { GetServerSideProps } from 'next';\nimport { DataLibraryStoreMode, GEN3_COMMONS_NAME } from '@gen3/core';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { type DiscoveryConfig } from '../../features/Discovery';\nimport type { NavPageLayoutProps } from '../../features/Navigation';\nimport { DataLibraryConfig } from '../../features/DataLibrary';\n\nexport const DiscoveryPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n try {\n const discoveryConfig: DiscoveryConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/discovery.json`,\n );\n // need data library config for export from discovery using the DataLibrary\n const datalibraryConfig: DataLibraryConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/dataLibrary.json`,\n );\n\n discoveryConfig.metadataConfig?.forEach((index) => {\n if (index.features.exportFromDiscovery)\n index.features.exportFromDiscovery.dataLibraryStoreMode =\n datalibraryConfig?.storageMode ?? DataLibraryStoreMode.ApiOnly;\n });\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n discoveryConfig: discoveryConfig,\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n discoveryConfig: [],\n },\n };\n }\n};\n","import React from 'react';\nimport dynamic from 'next/dynamic';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { ExplorerPageProps } from './types';\nimport { Center } from '@mantine/core';\n\nconst CohortBuilder = dynamic(\n () => import('../../features/CohortBuilder/CohortBuilder'),\n {\n ssr: false,\n },\n);\n\nconst ExplorerPage = ({\n headerProps,\n footerProps,\n explorerConfig,\n headerMetadata,\n tabsLayout,\n sharedFiltersMap,\n}: ExplorerPageProps): JSX.Element => {\n if (explorerConfig === undefined) {\n return (\n <Center maw={400} h={100} mx=\"auto\">\n <div>Explorer config is not defined. Page disabled</div>\n </Center>\n );\n }\n\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Explorer Page',\n content: 'Explorer Page',\n key: 'gen3-explorer-page',\n ...(headerMetadata ? headerMetadata : {}),\n }}\n >\n <CohortBuilder\n tabsLayout={tabsLayout}\n explorerConfig={explorerConfig}\n sharedFiltersMap={sharedFiltersMap}\n />\n </NavPageLayout>\n );\n};\n\nexport default ExplorerPage;\n","// set of interfaces which follows the current explorer configuration\n\nimport {\n CollapsableChartsPanelConfiguration,\n SummaryChart,\n} from '../../components/charts';\nimport { SummaryTable } from './ExplorerTable/types';\nimport { FacetSortType, FieldToName } from '../../components/facets/types';\nimport { DownloadButtonProps } from '../../components/Buttons/DropdownButtons';\nimport { Dispatch, SetStateAction } from 'react';\nimport { FacetDefinition, Modals, SharedFieldMapping } from '@gen3/core';\nimport { StylingOverride } from '../../types/styling';\nimport { Gen3AppConfigData } from '../../lib/content/types';\n\nexport interface TabConfig {\n title: string;\n fields: ReadonlyArray<string>; // list of fields\n fieldsConfig: Record<string, FacetDefinition>; // extra/override configuration\n classNames?: StylingOverride;\n defaultSort?: FacetSortType;\n}\n\nexport interface TabsConfig {\n readonly tabs: ReadonlyArray<TabConfig>;\n}\n\nexport interface ManifestFieldsConfig {\n resourceIndexType: string;\n resourceIdField: string;\n referenceIdFieldInResourceIndex: string;\n referenceIdFieldInDataIndex: string;\n}\n\nexport interface NodeCountConfiguration {\n none: string;\n one: string;\n multiple: string;\n}\n\nexport interface DataTypeConfig {\n dataType: string;\n nodeCountTitle?: string;\n nodeCountConfiguration?: NodeCountConfiguration;\n accessibleFieldCheckList?: string[];\n accessibleValidationField?: string;\n tierAccessLevel?: 'libre' | 'regular' | 'private'; // TODO See if guppy can serve this\n tierAccessLimit?: number; // TODO: same\n indexPrefix?: string;\n}\n\nexport interface DataTypeConfigWithManifest extends DataTypeConfig {\n manifestMapping?: ManifestFieldsConfig;\n fieldMapping?: ReadonlyArray<FieldToName>; // TODO: depreciate this field and use FacetDefinition instead\n}\n\nexport interface DownloadButtonConfig extends DownloadButtonProps {\n dropdownId?: string;\n}\n\nexport interface DropdownButtonsConfig {\n readonly title: string;\n}\n\nexport interface DropdownsWithButtonsProps extends DropdownButtonsConfig {\n dropdownItems: ReadonlyArray<DownloadButtonProps>;\n}\n\nexport interface CohortPanelConfiguration {\n guppyConfig: DataTypeConfigWithManifest; // guppy config\n tabTitle: string; // title of the tab\n tabType?: 'pills' | 'outline';\n chartsSection?: CollapsableChartsPanelConfiguration; // grid of charts within an accordion\n charts?: Record<string, SummaryChart>; // grid of charts\n table?: SummaryTable; // table configuration\n filters?: TabsConfig; // filters for the fields\n dropdowns?: Record<string, DropdownsWithButtonsProps>; // dropdown menu of action buttons\n buttons?: ReadonlyArray<DownloadButtonConfig>; // row of action buttons\n loginForDownload?: boolean; // login required for download\n sharedFiltersMap?: SharedFieldMapping;\n}\n\nexport interface SharedFieldConfiguration {\n defined?: SharedFieldMapping;\n autoCreate?: boolean;\n}\n\nexport enum GuppyDataAccessMode {\n REGULAR = 'regular',\n LIBRE = 'libre',\n PRIVATE = 'private',\n}\n\nexport interface AccessControlConfiguration {\n dataMode: GuppyDataAccessMode;\n tierLimit?: number;\n showAccessLevelControl?: boolean;\n}\n\nexport interface CohortBuilderConfiguration extends Gen3AppConfigData {\n tabsLayout?: 'left' | 'right' | 'center'; // top level tabs layout\n sharedFilters?: SharedFieldConfiguration; // enabled for sharing filters across indexes for denormalized data.\n explorerConfig: Array<CohortPanelConfiguration>;\n accessControl?: AccessControlConfiguration;\n enableCohortManager?: boolean;\n}\n\nexport interface CohortBuilderProps extends Omit<\n CohortBuilderConfiguration,\n 'sharedFilters'\n> {\n sharedFiltersMap: SharedFieldMapping | null;\n}\n\nexport enum DownloadFileFormats {\n JSON = 'JSON',\n CSV = 'CSV',\n TSV = 'TSV',\n DATA = 'DATA',\n UNDEFINED = 'UNDEFINED',\n}\n\nexport type ActionButtonFunction = (\n done?: () => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n onCompleted?: (data: any) => void,\n) => Promise<void>;\n\nexport type ActionButtonWithArgsFunction = (\n params: Record<string, any>,\n done?: () => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n onCompleted?: (data: any) => void,\n) => Promise<void>;\n\nexport interface DownloadButtonPropsWithAction extends Omit<\n DownloadButtonProps,\n 'action' | 'actionArgs'\n> {\n actionFunction: ActionButtonWithArgsFunction;\n actionArgs: Record<string, any>;\n}\n\nexport interface GuppyActionButtonProps {\n disabled?: boolean;\n inactiveText: string;\n activeText: string;\n customStyle?: string;\n showLoading?: boolean;\n showIcon?: boolean;\n preventClickEvent?: boolean;\n onClick?: () => void;\n setActive?: Dispatch<SetStateAction<boolean>>;\n active?: boolean;\n Modal403?: Modals;\n Modal400?: Modals;\n tooltipText?: string;\n done?: () => void;\n actionFunction: ActionButtonWithArgsFunction;\n actionArgs: Record<string, any>;\n customErrorMessage?: string;\n hideNotification?: boolean;\n}\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport {\n CohortBuilderConfiguration,\n CohortBuilderProps,\n CohortPanelConfiguration,\n} from '../../features/CohortBuilder';\nimport {\n fetchJSONDataFromURL,\n GEN3_COMMONS_NAME,\n GEN3_GUPPY_API,\n groupSharedFields,\n HttpMethod,\n SharedFieldMapping,\n} from '@gen3/core';\nimport { isArray } from 'lodash';\nimport type { NavPageLayoutProps } from '../../features/Navigation';\nimport {\n AccessControlConfiguration,\n GuppyDataAccessMode,\n} from '../../features/CohortBuilder/types';\n\nconst DefaultHeaderMetadata = {\n title: 'Gen3 Explorer Page',\n content: 'Explorer Page',\n key: 'gen3-explorer-page',\n};\n\nconst GetSharedFieldMapping = async (\n cohortBuilderConfiguration: CohortBuilderConfiguration,\n) => {\n let sharedFiltersMap: SharedFieldMapping | null = null;\n\n if (cohortBuilderConfiguration?.sharedFilters) {\n // have shared filters defined\n if (cohortBuilderConfiguration?.sharedFilters?.autoCreate) {\n // create shared filter from Gen3 graphql mapping\n const indices = cohortBuilderConfiguration?.explorerConfig.map(\n (tab) => tab.guppyConfig.dataType,\n );\n\n try {\n const data = await fetchJSONDataFromURL<any>(\n `${GEN3_GUPPY_API}/graphql`,\n true,\n HttpMethod.POST,\n { query: `{ _mapping { ${indices.join(' ')} }}`, variables: {} },\n );\n if ('_mapping' in data.data) {\n sharedFiltersMap = groupSharedFields(data.data['_mapping']);\n }\n } catch (err: unknown) {\n if (err instanceof Error) {\n console.warn('Unable to get mapping data from guppy:', err);\n }\n }\n }\n if (cohortBuilderConfiguration?.sharedFilters?.defined) {\n sharedFiltersMap = cohortBuilderConfiguration?.sharedFilters?.defined; // manually defined mapping\n }\n if (sharedFiltersMap) {\n const indexToAlias = Object.values(\n cohortBuilderConfiguration?.explorerConfig,\n ).reduce(\n (acc: Record<string, string>, panel: CohortPanelConfiguration) => {\n acc[panel.guppyConfig.dataType] = panel.tabTitle;\n return acc;\n },\n {},\n );\n\n const updatedSharedFiltersMap: SharedFieldMapping = {};\n for (const [field, values] of Object.entries(sharedFiltersMap)) {\n updatedSharedFiltersMap[field] = values.map((x) => ({\n ...x,\n indexAlias: indexToAlias[x.index],\n }));\n }\n sharedFiltersMap = updatedSharedFiltersMap;\n }\n }\n\n return sharedFiltersMap;\n};\n\nconst DefaultAccessControlConfiguration: AccessControlConfiguration = {\n dataMode: GuppyDataAccessMode.REGULAR,\n tierLimit: -1,\n showAccessLevelControl: false,\n};\n\nexport const ExplorerPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps | CohortBuilderProps\n> = async () => {\n try {\n const cohortBuilderConfiguration: CohortBuilderConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/explorer.json`,\n );\n\n if (isArray(cohortBuilderConfiguration)) {\n // older config layout\n // TODO: remove this\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n explorerConfig: cohortBuilderConfiguration,\n headerMetadata: cohortBuilderConfiguration?.headerMetadata\n ? cohortBuilderConfiguration.headerMetadata\n : DefaultHeaderMetadata,\n },\n };\n }\n\n const sharedFiltersMap = await GetSharedFieldMapping(\n cohortBuilderConfiguration,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n sharedFiltersMap: sharedFiltersMap,\n tabsLayout: cohortBuilderConfiguration?.tabsLayout ?? 'left',\n explorerConfig: cohortBuilderConfiguration.explorerConfig,\n // headerMetadata: cohortBuilderConfiguration.headerMetadata,\n accessControl: {\n ...DefaultAccessControlConfiguration,\n ...(cohortBuilderConfiguration.accessControl ?? {}),\n },\n },\n };\n } catch (err: unknown) {\n if (err instanceof Error) {\n console.warn('Explorer config cannot be read', err);\n }\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n explorerConfig: undefined,\n },\n };\n }\n};\n\nexport const ExplorerPageGetServerSidePropsForConfigId: GetServerSideProps<\n NavPageLayoutProps | CohortBuilderProps\n> = async (context) => {\n const configId = context.query.configId as string;\n try {\n const cohortBuilderConfiguration: CohortBuilderConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/explorer/${configId}.json`,\n );\n\n if (isArray(cohortBuilderConfiguration)) {\n // older config layout\n // TODO: remove this\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n explorerConfig: cohortBuilderConfiguration,\n headerMetadata: cohortBuilderConfiguration?.headerMetadata\n ? cohortBuilderConfiguration.headerMetadata\n : DefaultHeaderMetadata,\n },\n };\n }\n\n const sharedFiltersMap = await GetSharedFieldMapping(\n cohortBuilderConfiguration,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n sharedFiltersMap: sharedFiltersMap,\n tabsLayout: cohortBuilderConfiguration?.tabsLayout ?? 'left',\n explorerConfig: cohortBuilderConfiguration.explorerConfig,\n // headerMetadata: { ...(cohortBuilderConfiguration?.headerMetadata ? cohortBuilderConfiguration.headerMetadata : {}) },\n accessControl: {\n ...DefaultAccessControlConfiguration,\n ...(cohortBuilderConfiguration.accessControl ?? {}),\n },\n },\n };\n } catch (err: unknown) {\n if (err instanceof Error) {\n console.warn('Explorer config cannot be read', err);\n }\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n explorerConfig: undefined,\n },\n };\n }\n};\n","import tw from 'tailwind-styled-components';\n\ninterface Gen3ButtonProps {\n colors: string;\n}\n\nexport const Gen3Button = tw.div<Gen3ButtonProps>`\ninline-block\ntext-center\npx-2\npy-2\ntext-accent-contrast-lighter\nleading-[1.5]\nfont-semibold\nuppercase\nborder-4\nborder-solid\nborder-transparent\nrounded-[7px]\n${(p) => `bg-${p.colors}`}\n${(p) => `hover:bg-${p.colors}-max`}\n`;\n\nexport const Gen3ButtonReverse = tw.div<Gen3ButtonProps>`\nbg-base-max\ntext-accent-contrast\nborder-accent-lighter\ninline-block\ntext-center\npx-2\npy-2\ntext-base\nleading-[1.5]\nfont-semibold\nuppercase\nborder-4\nborder-solid\nrounded-[7px]\n`;\n","// separate function for hashing logic\nfunction hashString(str: string) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n return hash;\n}\n\n// hash function for a string\nexport function hashCode(str: string) {\n if (str === null || str === '') {\n return 0;\n }\n return hashString(str);\n}\n","import React from 'react';\nimport Markdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { hashCode } from '../../utils/hash';\nimport { twMerge } from 'tailwind-merge';\nimport { Anchor } from '@mantine/core';\n\n/**\n * Enum representing various content types for text-based data.\n *\n * Each content type corresponds to a specific format or structure of textual content.\n */\nexport enum ContentType {\n Text = 'text', // a text string\n TextArray = 'textArray', // a array of text, each is a paragraph\n Html = 'html', // text content is HTML\n Markdown = 'markdown', // text content is Markdown\n TextWithEmail = 'textWithEmail', // text is a string and the email field is appended to it\n TextWithLink = 'textWithLink', // test followed by a link\n}\n\n/**\n * Interface representing the properties for rendering text content.\n */\nexport interface TextContentProps {\n readonly text: string | string[]; // text to show. Arrays of text will be inside of a html paragraph (i.e <p>) tag\n readonly className?: string; // tailwind based styling to apply to the text content\n readonly type?: ContentType; // type of content (see ContentType)\n readonly email?: string; // email used for type = textWithEmail\n readonly link?: string; // link used for type = textWithLink\n readonly linkText?: string; // optional text for link\n}\n\n/**\n * Renders textual content dynamically based on the provided type and additional properties.\n *\n * The `TextContent` function creates a user interface element conditioned on the type of input content, such as plain text, HTML, Markdown, text arrays, text with email links, or text with hyperlinks. It also provides default styling and customizable CSS class support.\n *\n * @param {Object} props - Properties for rendering the TextContent component.\n * @param {string | string[]} props.text - The content to be displayed. It can be a single string or an array of strings.\n * @param {string} [props.className='inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1'] - Custom CSS classes to apply for styling. Defaults to a predefined inline style.\n * @param {ContentType} [props.type=ContentType.Text] - Specifies the type of content being passed. Determines how the content will be rendered.\n * @param {string} [props.email] - Optional email address to be rendered as a clickable \"mailto\" link when type is `ContentType.TextWithEmail`.\n * @param {string} [props.link] - Optional URL to be rendered as a clickable hyperlink when type is `ContentType.TextWithLink`.\n * @param {string} [props.linkText] - Optional link text to display instead of the raw URL when type is `ContentType.TextWithLink`.\n * @returns {JSX.Element} A JSX element that renders the content dynamically based on the input type and properties.\n */\nconst TextContent = ({\n text,\n className = 'inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1',\n type = ContentType.Text,\n email = undefined,\n link = undefined,\n linkText = undefined,\n}: TextContentProps) => {\n switch (type) {\n case ContentType.Html: {\n const textString = Array.isArray(text) ? text.join('') : text;\n return (\n <p\n className={className}\n dangerouslySetInnerHTML={{ __html: textString }}\n />\n );\n }\n case ContentType.TextArray: {\n const textArray = !Array.isArray(text) ? [text] : text;\n return (\n <div className={className} role=\"list\">\n <style>\n {/* making sure tailwind loads imported classes */}\n @source inline({className});\n </style>\n {textArray.map((item) => (\n <p className=\"my-2\" key={hashCode(item)} role=\"listitem\">\n {item}\n </p>\n ))}\n </div>\n );\n }\n case ContentType.Markdown: {\n const textString = Array.isArray(text) ? text.join('') : text;\n return (\n <div>\n <Markdown\n remarkPlugins={[remarkGfm]}\n components={{\n p(props: any) {\n const { _node, ...rest } = props;\n return <p className=\"text-lg my-1\" {...rest} />;\n },\n ol(props: any) {\n const { _node, ...rest } = props;\n return <ol className=\"list-disc list-inside my-1\" {...rest} />;\n },\n ul(props: any) {\n const { _node, ...rest } = props;\n return <ul className=\"list-disc list-inside my-1\" {...rest} />;\n },\n li(props: any) {\n const { _node, ...rest } = props;\n return <li className=\"text-md\" {...rest} />;\n },\n }}\n >\n {textString}\n </Markdown>\n </div>\n );\n }\n case ContentType.TextWithEmail: {\n const DEFAULT_STYLE =\n 'inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1';\n const mergedClassname = className\n ? twMerge(DEFAULT_STYLE, className)\n : DEFAULT_STYLE;\n const textString = Array.isArray(text) ? text.join('') : text;\n return (\n <div className={mergedClassname}>\n <style>\n {/* making sure tailwind loads imported classes */}\n @source inline({className});\n </style>\n <span>\n {textString}\n {email && (\n <Anchor\n classNames={{ root: mergedClassname }}\n href={`mailto:${email}`}\n >\n {` ${email}.`}\n </Anchor>\n )}\n </span>\n </div>\n );\n }\n case ContentType.TextWithLink: {\n const DEFAULT_STYLE =\n 'inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1';\n const mergedClassname = className\n ? twMerge(DEFAULT_STYLE, className)\n : DEFAULT_STYLE;\n const textString = Array.isArray(text) ? text.join('') : text;\n if (!link) {\n return (\n <div className={mergedClassname}>\n Link is not defined.\n </div>\n );\n }\n\n return (\n <div className={mergedClassname}>\n <style>\n {/* making sure tailwind loads imported classes */}\n @source inline({className});\n </style>\n <span>\n {textString}\n {link && (\n <Anchor\n classNames={{ root: mergedClassname }}\n href={link}\n >\n {` ${linkText ?? link}.`}\n </Anchor>\n )}\n </span>\n </div>\n );\n }\n case ContentType.Text:\n default:\n return (\n <div className={className}>\n <style>\n {/* making sure tailwind loads imported classes */}\n @source inline({className});\n </style>\n <p>{text.toString()}</p>\n </div>\n );\n }\n};\nexport default TextContent;\n","import * as React from 'react';\nimport Image from 'next/image';\n\nimport { Title, TitleOrder } from '@mantine/core';\nimport { IconType } from 'react-icons';\nimport { Gen3Button, Gen3ButtonReverse } from '../Buttons/Gen3Button';\n\nimport { MdFormatQuote, MdGroup, MdOutlineBarChart, MdOutlineSearch, } from 'react-icons/md';\nimport { FaGraduationCap, FaRegQuestionCircle, FaVideo } from 'react-icons/fa';\nimport Gen3Link from '../../features/Navigation/Gen3Link';\nimport TextContent, { ContentType } from './TextContent';\nimport { Gen3AppConfigData } from '../../lib/content/types';\n\nexport interface LandingPageContentProp {\n content: LandingPageProps;\n}\n\nexport interface leftRightProps {\n readonly text?: string;\n readonly type?: ContentType;\n readonly link?: {\n readonly href: string;\n readonly text: string;\n readonly linkType?: string;\n };\n readonly image?: {\n readonly src: string;\n readonly alt: string;\n };\n}\nexport interface LandingPageProps extends Gen3AppConfigData {\n readonly topTitle?: string;\n readonly body?: ReadonlyArray<{\n readonly title?: {\n readonly text: string;\n readonly level: TitleOrder;\n };\n readonly splitarea?: {\n readonly left: leftRightProps[];\n readonly right: leftRightProps[];\n };\n readonly break?: string;\n readonly cardsArea?: {\n readonly title: string;\n readonly cards: ReadonlyArray<{\n readonly icon: keyof IconType;\n readonly bodyText: string;\n readonly btnText: string;\n readonly href: string;\n readonly linkType?: string;\n }>;\n };\n readonly quoteArea?: {\n readonly quote: string;\n readonly author: string;\n };\n }>;\n}\n\n/**\n * Landing Page contents. Edit this component to change the composition of the landing page.\n * @param content - Refer to LandingPageProps interface above. Loaded from config file\n * located at sampleCommons/config/{commons}/landingPage.json\n */\nconst LandingPageContent = ({ content }: LandingPageContentProp) => {\n return (\n <div className=\"sm:mt-8 2xl:mt-10 w-full bg-base-max\">\n {content?.body?.map((component, index) => {\n if (component.title) {\n return (\n <Title\n key={index}\n className={`mb-5 pl-20 pb-2 ${\n index % 2 === 0 ? 'text-primary' : 'text-primary-lighter'\n }`}\n order={component.title.level}\n >\n {/* TODO: verify this color is correct */}\n <span\n className={`${\n index % 2 === 0 ? 'text-primary' : 'text-primary-lighter'\n }}`}\n ></span>\n {component.title.text}\n </Title>\n );\n }\n if (component.splitarea) {\n const splitareaJsx = (area: leftRightProps[]) =>\n area.map((obj, index) => {\n if (obj.text) {\n return (\n <TextContent\n text={obj.text}\n key={index}\n type={obj?.type ?? ContentType.Html}\n className=\"prose sm:prose-base 2xl:prose-lg mb-5 !mt-0\"\n />\n );\n }\n if (obj.link) {\n return (\n <Gen3Button\n colors=\"accent-lighter\"\n className=\"mb-5 mr-5 text-accent-contrast-lighter\"\n key={index}\n >\n <Gen3Link\n className=\"flex items-center\"\n href={obj.link.href}\n linkType={obj.link.linkType}\n text={obj.link.text}\n showExternalIcon\n />\n </Gen3Button>\n );\n }\n if (obj.image) {\n return (\n <div key={index} className=\"h-full relative\">\n <Image src={obj.image.src} alt={obj.image.alt} fill />\n </div>\n );\n }\n });\n return (\n <div key={index} className=\"flex mx-20\">\n <div className=\"basis-1/2 pr-10\">\n {splitareaJsx(component.splitarea.left)}\n </div>\n <div className=\"basis-1/2\">\n {splitareaJsx(component.splitarea.right)}\n </div>\n </div>\n );\n }\n if (component.break) {\n return <hr key={index} className=\"border sm:my-10 2xl:my-12\" />;\n }\n if (component.cardsArea) {\n const allowedIcons = {\n FaGraduationCap: FaGraduationCap,\n FaRegQuestionCircle: FaRegQuestionCircle,\n FaVideo: FaVideo,\n MdOutlineSearch: MdOutlineSearch,\n MdOutlineBarChart: MdOutlineBarChart,\n MdGroup: MdGroup,\n };\n return (\n <div key={index} className=\"text-center\">\n <Title className=\"my-5\" order={3}>\n {component.cardsArea.title}\n </Title>\n <ul className=\"gap-4 mx-20 !p-0 flex\">\n {component.cardsArea.cards.map((card, index) => (\n <li\n key={index}\n className=\"border shadow-lg !p-5 w-1/5 flex flex-col justify-between items-center mx-5\"\n >\n {React.createElement(allowedIcons[card.icon], {\n title: `${card.btnText} icon`,\n className: 'inline-block text-7xl text-accent-lighter',\n })}\n <p className=\"block text-primary leading-6 mb-2\">\n {card.bodyText}\n </p>\n <Gen3ButtonReverse\n colors=\"accent-lighter\"\n className=\"mb-5 mr-5 text-base-contrast-lighter\"\n key={index}\n >\n <Gen3Link\n href={card.href}\n linkType={card.linkType}\n text={card.btnText}\n />\n </Gen3ButtonReverse>\n </li>\n ))}\n </ul>\n </div>\n );\n }\n if (component.quoteArea) {\n return (\n <div\n key={index}\n className=\"bg-secondary-lightest sm:p-16 2xl:p-20 text-center sm:mt-16 2xl:mt-20\"\n >\n <div className=\"sm:text-3xl 2xl:text-4xl\">\n {component.quoteArea.author ? (\n <MdFormatQuote\n title=\"quotation mark\"\n className=\"inline rotate-180 text-5xl mb-2\"\n />\n ) : null}\n {component.quoteArea.quote}\n {component.quoteArea.author ? (\n <MdFormatQuote\n title=\"quotation mark\"\n className=\"inline text-5xl mt-2\"\n />\n ) : null}\n </div>\n <div>{component.quoteArea.author}</div>\n </div>\n );\n }\n return null;\n })}\n </div>\n );\n};\n\nexport default LandingPageContent;\n","import React from 'react';\n\n// if we want to use MDX\n// import LandingPageMDX from \"../../content/landing.mdx\"\nimport LandingPageContent, {\n LandingPageProps,\n} from '../../components/Content/LandingPageContent';\nimport NavPageLayout from '../../features/Navigation/NavPageLayout';\nimport { NavPageLayoutProps } from '../../features/Navigation';\n\ninterface Props extends NavPageLayoutProps {\n landingPage: LandingPageProps;\n}\n\nconst LandingPage = ({ headerProps, footerProps, landingPage }: Props) => {\n return (\n <NavPageLayout\n {...{ footerProps, headerProps }}\n headerMetadata={{\n title: 'Gen3 Home Page',\n content: 'Home page',\n key: 'gen3-home-page',\n ...(landingPage?.headerMetadata ? landingPage.headerMetadata : {}),\n }}\n >\n <div className=\"flex justify-items-center w-full\">\n <LandingPageContent content={landingPage} />\n </div>\n </NavPageLayout>\n );\n};\n\nexport default LandingPage;\n","// should move this thing into _app.tsx and make a dedicated layout component after https://github.com/vercel/next.js/discussions/10949 is addressed\nimport { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nexport const LandingPageGetServerSideProps: GetServerSideProps = async () => {\n const navPageLayoutProps = await getNavPageLayoutPropsFromConfig();\n const landingPage = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/landingPage.json`,\n );\n return {\n props: {\n ...navPageLayoutProps,\n landingPage,\n },\n };\n};\n","import React from 'react';\n\ninterface TexturedSidePanelProps {\n readonly url?: string;\n}\nconst TexturedSidePanel = ({ url }: TexturedSidePanelProps) => {\n return (\n <div\n aria-hidden=\"true\"\n style={{ backgroundImage: `url(${url})` }}\n className=\"bg-contain flex h-full w-full bg-repeat-y last:-scale-x-100\"\n ></div>\n );\n};\n\nexport default TexturedSidePanel;\n","import React, { useState } from 'react';\nimport {\n Box,\n Button,\n Center,\n LoadingOverlay,\n Select,\n Stack,\n} from '@mantine/core';\nimport {\n type Gen3LoginProvider,\n type NameUrl,\n useGetLoginProvidersQuery,\n} from '@gen3/core';\nimport { LoginSelectedProps } from './types';\nimport { ErrorCard } from '../MessageCards';\n\ninterface LoginProviderItemProps extends LoginSelectedProps {\n readonly provider: Gen3LoginProvider;\n}\n\nconst LoginProviderMultipleItems = ({\n provider,\n handleLoginSelected,\n}: LoginProviderItemProps) => {\n const [value, setValue] = useState<string | null>(null);\n return (\n <div\n className=\"flex flex-col w-full font-medium hover:text-accent-light hover:font-bold\"\n key={`${provider.name}-login-item`}\n >\n <Select\n data={provider.urls.map((item: NameUrl) => ({\n value: item.url,\n label: item.name,\n }))}\n classNames={{\n root: 'w-full',\n // item: 'font-medium hover:text-accent-light hover:font-bold',\n }}\n onChange={setValue}\n value={value}\n searchable\n label={provider.name}\n placeholder=\"Select a login provider\"\n size=\"sm\"\n clearable\n aria-label=\"Select a login provider\"\n />\n <Button\n fullWidth\n key={provider.name}\n color=\"accent.3\"\n disabled={!value}\n classNames={{ root: 'data-disabled:bg-accent-lightest' }}\n onClick={() => value && handleLoginSelected(value)}\n >\n {' '}\n {provider.name}\n </Button>\n </div>\n );\n};\n\nconst LoginProviderSingleItem = ({\n provider,\n handleLoginSelected,\n}: LoginProviderItemProps) => {\n return (\n <Button\n fullWidth\n key={provider.name}\n color=\"accent.3\"\n onClick={() => handleLoginSelected(provider.urls[0].url)}\n >\n {' '}\n {provider.name}{' '}\n </Button>\n );\n};\n\nconst LoginProvidersPanel = ({ handleLoginSelected }: LoginSelectedProps) => {\n const { data, isSuccess, isError, isLoading, isFetching } =\n useGetLoginProvidersQuery();\n\n if (isError) {\n return (\n <Center>\n <ErrorCard message={'request to authentication service failed'} />\n </Center>\n );\n }\n\n if (isLoading || isFetching) {\n return <LoadingOverlay visible={!isSuccess} />;\n }\n\n if (isSuccess && !data) {\n return (\n <Center>\n <ErrorCard message={'no logins defined'} />\n </Center>\n );\n }\n\n return (\n <Box className=\"flex flex-col items-center justify-center\">\n <Stack align=\"center\" className=\"w-1/3\">\n {data && data.default_provider.urls.length > 1 ? (\n <LoginProviderMultipleItems\n provider={data.default_provider}\n handleLoginSelected={handleLoginSelected}\n />\n ) : (\n data && (\n <LoginProviderSingleItem\n provider={data.default_provider}\n handleLoginSelected={handleLoginSelected}\n />\n )\n )}\n {data?.providers\n .filter((x: any) => x.name !== data.default_provider.name)\n .map((x: Gen3LoginProvider) =>\n x.urls.length > 1 ? (\n <LoginProviderMultipleItems\n key={x.name}\n provider={x}\n handleLoginSelected={handleLoginSelected}\n />\n ) : (\n <LoginProviderSingleItem\n key={x.name}\n provider={x}\n handleLoginSelected={handleLoginSelected}\n />\n ),\n )}\n </Stack>\n </Box>\n );\n};\n\nexport default LoginProvidersPanel;\n","import React, { useContext, useCallback, useEffect, useState } from 'react';\nimport {\n Box,\n Button,\n Divider,\n FileButton,\n Group,\n Text,\n Textarea,\n} from '@mantine/core';\nimport { notifications } from '@mantine/notifications';\nimport { MdClose as CloseIcon } from 'react-icons/md';\nimport { SessionContext } from '../../lib/session/session';\nimport { useRouter } from 'next/router';\n\nconst CREDENTIALS_LOGIN_ERROR = 'Credentials Login Error';\nconst FORMAT_ERROR = 'Format Error';\nconst INVALID_JSON_MESSAGE = 'JSON is not valid';\n\ninterface CredentialsLoginProps {\n handleLogin: () => void;\n}\n\n/**\n * Reads the content of a given file and executes a callback with the file's text content.\n *\n * @param {File} file - The file to be read.\n * @param {function(string): void} callback - A callback function that is invoked with the file content as a string.\n */\nconst readFileContent = (file: File, callback: (content: string) => void) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n if (event.target?.result) callback(event.target.result as string);\n };\n reader.readAsText(file);\n};\n\nconst CredentialsLogin = ({ handleLogin }: CredentialsLoginProps) => {\n const sessionContext = useContext(SessionContext);\n const [credentials, setCredentials] = useState<string | null>(null);\n const [selectedFile, setSelectedFile] = useState<File | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const { basePath } = useRouter();\n\n useEffect(() => {\n if (selectedFile) {\n readFileContent(selectedFile, setCredentials);\n }\n }, [selectedFile]);\n\n const handleCredentialsLogin = useCallback(\n async (credentials: string) => {\n setIsLoading(true);\n const updateSession = sessionContext?.updateSession ?? (() => null);\n const loginEndpoint = basePath\n ? `/${basePath}/api/auth/credentialsLogin`\n : '/api/auth/credentialsLogin';\n try {\n const parsedCredentials = JSON.parse(credentials);\n const response = await fetch(loginEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(parsedCredentials),\n });\n\n if (!response.ok) {\n notifications.show({\n title: CREDENTIALS_LOGIN_ERROR,\n message: response.statusText,\n });\n } else {\n updateSession();\n handleLogin();\n }\n } catch (error) {\n if (error instanceof Error) {\n notifications.show({\n title: FORMAT_ERROR,\n message: INVALID_JSON_MESSAGE,\n });\n }\n } finally {\n setIsLoading(false);\n }\n },\n [handleLogin, sessionContext?.updateSession, basePath],\n );\n\n return (\n <Box className=\"flex flex-col items-center justify-center my-2\">\n <Divider\n color=\"black\"\n size=\"md\"\n className=\"w-1/3\"\n label={\n <Text size=\"md\" c=\"primary.4\">\n Authorize with credentials\n </Text>\n }\n labelPosition=\"center\"\n />\n <Group>\n <Textarea\n value={credentials ?? ''}\n onChange={(e) => setCredentials(e.target.value)}\n classNames={{ input: 'focus:border-2 focus:border-primary text-sm' }}\n size=\"sm\"\n rightSection={\n credentials &&\n credentials.length > 0 && (\n <CloseIcon\n onClick={() => setCredentials('')}\n className=\"cursor-pointer\"\n data-testid=\"search-input-clear-search\"\n />\n )\n }\n />\n <FileButton onChange={setSelectedFile} accept=\"application/json\">\n {(props) => <Button {...props}>Upload File</Button>}\n </FileButton>\n <Button\n color=\"primary.5\"\n loading={isLoading}\n onClick={() => handleCredentialsLogin(credentials ?? '')}\n disabled={!credentials}\n >\n Authorize\n </Button>\n </Group>\n </Box>\n );\n};\n\nexport default CredentialsLogin;\n","/**\n * Determines the correct separator to append additional parameters to a URL\n * @param {string} url - The URL to examine\n * @returns {string} - Either '?' or '&' depending on whether the URL already has parameters\n */\nexport const getUrlSeparator = (url: string) => {\n // Check if the URL already contains a question mark\n return url.includes('?') ? '&' : '?';\n};\n\n/**\n * Adds a parameter to a URL using the correct separator\n * @param {string} url - The URL to add the parameter to\n * @param {string} paramName - The parameter name\n * @param {string} paramValue - The parameter value\n * @returns {string} - The URL with the added parameter\n */\nexport const appendParameterToUrl = (\n url: string,\n paramName: string,\n paramValue: string,\n) => {\n if (!url || !paramName) {\n return url;\n }\n\n // Extract hash fragment if present\n const [baseUrl, hash] = url.split('#');\n const hashFragment = hash ? `#${hash}` : '';\n\n // Determine separator and append parameter\n const separator = getUrlSeparator(baseUrl);\n const encodedParamName = encodeURIComponent(paramName);\n const encodedParamValue = encodeURIComponent(paramValue);\n\n // Construct the final URL with parameter and hash fragment\n return `${baseUrl}${separator}${encodedParamName}=${encodedParamValue}${hashFragment}`;\n};\n","import React, { useCallback } from 'react';\nimport { useRouter } from 'next/router';\nimport { showNotification } from '@mantine/notifications';\nimport { Center, Stack } from '@mantine/core';\nimport TexturedSidePanel from '../Layout/TexturedSidePanel';\nimport LoginProvidersPanel from './LoginProvidersPanel';\nimport CredentialsLogin from './CredentialsLogin';\nimport TextContent from '../Content/TextContent';\nimport { LoginConfig } from './types';\nimport { GEN3_REDIRECT_URL } from '@gen3/core';\nimport { appendParameterToUrl } from './utils';\n\nconst filterRedirect = (redirect: string | string[] | undefined) => {\n let redirectPath = '';\n if (Array.isArray(redirect)) {\n redirectPath = redirect[0];\n } else {\n redirectPath = redirect ?? '/';\n }\n // do not go back to /Login as a redirect\n if (redirect?.includes('Login'))\n redirectPath = '/';\n\n if (!GEN3_REDIRECT_URL) {\n return redirectPath;\n }\n\n // Remove trailing slash from base URL and leading slash from path\n const baseUrl = GEN3_REDIRECT_URL.replace(/\\/+$/, '');\n const cleanPath = redirectPath.replace(/^\\/+/, '');\n\n // Join with a single slash, ensuring we don't create double slashes\n return cleanPath ? `${baseUrl}/${cleanPath}` : baseUrl;\n};\n\nconst LoginPanel = (loginConfig: LoginConfig) => {\n const { image, topContent, bottomContent } = loginConfig;\n\n const router = useRouter();\n const {\n query: { referer: refererQuery, redirect: redirectQuery },\n } = router;\n\n const referer = redirectQuery || refererQuery; // either referer or redirect query param\n\n const handleFenceLoginSelected = useCallback(\n async (loginURL: string) => {\n router\n .push(\n `${appendParameterToUrl(loginURL, 'redirect', filterRedirect(referer))}`,\n )\n .catch((e) => {\n showNotification({\n title: 'Login Error',\n message: `error logging in ${e.message}`,\n });\n });\n },\n [referer, router],\n );\n\n const handleCredentialsLogin = useCallback(async () => {\n const redirect = filterRedirect(referer);\n router.push(redirect).catch((e) => {\n showNotification({\n title: 'Login Error',\n message: `error logging in ${e.message}`,\n });\n });\n }, [referer, router]);\n\n return (\n <div className=\"grid grid-cols-6 w-full\">\n <TexturedSidePanel url={image} />\n <div className=\"relative col-span-4 mt-24 flex-col justify-center sm:prose-base lg:prose-lg xl:prose-xl 2xl:prose-xl w-full first:captialize first:font-bold\">\n {topContent?.map((content, index) => (\n <TextContent {...content} key={index} />\n ))}\n\n <LoginProvidersPanel handleLoginSelected={handleFenceLoginSelected} />\n\n {loginConfig?.showCredentialsLogin &&\n process.env.NODE_ENV === 'development' && (\n <CredentialsLogin handleLogin={handleCredentialsLogin} />\n )}\n <Center>\n <Stack>\n {bottomContent?.map((content, index) => (\n <TextContent {...content} key={`bottomContent-${index}`} />\n ))}\n </Stack>\n </Center>\n </div>\n <TexturedSidePanel url={image} />\n </div>\n );\n};\n\nexport default LoginPanel;\n","import { NavPageLayout } from '../../features/Navigation';\nimport LoginPanel from '../../components/Login/LoginPanel';\nimport React from 'react';\nimport { LoginPageLayoutProps } from './types';\n\nconst LoginPage = ({\n headerProps,\n footerProps,\n loginConfig,\n}: LoginPageLayoutProps) => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Login Page',\n content: 'Login page',\n key: 'gen3-login-page',\n ...(loginConfig?.headerMetadata ? loginConfig.headerMetadata : {}),\n }}\n >\n <LoginPanel {...loginConfig} />\n </NavPageLayout>\n );\n};\n\nexport default LoginPage;\n","import { GetServerSideProps } from 'next';\nimport { NavPageLayoutProps } from '../../features/Navigation';\nimport ContentSource from '../../lib/content';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { LoginConfig } from '../../components/Login';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nexport const LoginPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n const loginConfig: LoginConfig = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/login.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n ...{ loginConfig: loginConfig },\n },\n };\n};\n","import React from 'react';\nimport { useRouter } from 'next/router';\n\nimport NavPageLayout from '../../features/Navigation/NavPageLayout';\nimport { NavPageLayoutProps } from '../../features/Navigation';\n\nconst NotebookLitePage = ({ headerProps, footerProps }: NavPageLayoutProps) => {\n const router = useRouter();\n return (\n <NavPageLayout\n {...{ footerProps, headerProps }}\n headerMetadata={{\n title: 'Gen3 Notebooks Lite Page',\n content: 'Notebooks Lite',\n key: 'gen3-notebooks-lite-page',\n }}\n >\n <div className=\"flex justify-items-center w-full\">\n <iframe\n allow=\"cross-origin\"\n src={`${router.basePath}/jupyter/index.html`}\n width=\"100%\"\n height=\"100%\"\n title=\"client notebook\"\n ></iframe>\n </div>\n </NavPageLayout>\n );\n};\n\nexport default NotebookLitePage;\n","// should move this thing into _app.tsx and make a dedicated layout component after https://github.com/vercel/next.js/discussions/10949 is addressed\nimport { GetStaticProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\n\nexport const NotebookLitePageGetStaticProps: GetStaticProps = async () => {\n const navPageLayoutProps = await getNavPageLayoutPropsFromConfig();\n return {\n props: {\n ...navPageLayoutProps,\n },\n };\n};\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { type NavPageLayoutProps } from '../../features/Navigation';\nimport { QueryProps } from '../Query/types';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nexport const ProfilePageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n const profileConfig: QueryProps =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/profile.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n ...{ profileConfig: profileConfig },\n },\n };\n};\n","import React, { ReactNode } from 'react';\nimport { hideModal, useCoreDispatch, CoreDispatch } from '@gen3/core';\nimport { Button, Modal } from '@mantine/core';\n\ninterface ButtonOptions {\n onClick?: () => void;\n hideModalOnClick?: boolean;\n title: string;\n dataTestId: string;\n}\n\nconst isButtonOptions = (\n button: ButtonOptions | JSX.Element,\n): button is ButtonOptions => {\n return typeof button === 'object' && 'title' in button;\n};\n\n/**\n * Creates a generalized modal that can be used for a wide variety of purposes.\n * @param buttons - Mantine button options\n * @param dispatch - Dispatch hook to be used for state tracking\n */\nconst renderButtons = (\n buttons: Array<ButtonOptions | JSX.Element>,\n dispatch: CoreDispatch,\n): JSX.Element => {\n return (\n <div className=\"flex justify-end mt-2.5 gap-2\">\n {buttons.map((button) => {\n if (isButtonOptions(button)) {\n const { onClick, title, hideModalOnClick, dataTestId } = button;\n\n return (\n <Button\n data-testid={dataTestId}\n key={title}\n onClick={() => {\n if (onClick) {\n onClick();\n\n if (hideModalOnClick) {\n dispatch(hideModal());\n }\n } else {\n dispatch(hideModal());\n }\n }}\n className=\"!bg-primary hover:!bg-primary-darker\"\n >\n {title}\n </Button>\n );\n } else return button;\n })}\n </div>\n );\n};\n\ninterface Props {\n openModal: boolean;\n title: ReactNode;\n size?: string | number;\n children: ReactNode;\n leftButtons?: Array<ButtonOptions | JSX.Element>;\n buttons?: Array<ButtonOptions | JSX.Element>;\n withCloseButton?: boolean;\n onClose?: () => void;\n closeOnClickOutside?: boolean;\n closeOnEscape?: boolean;\n}\n\n/**\n * Creates a generalized modal that can be used for a wide variety of purposes.\n * @param openModal - Determines whether modal/drawer is opened\n * @param title - Modal title\n * @param size - Controls width of the content area, 'md' by default\n * @param children - Modal content\n * @param leftButtons - Mantine button component args for renderButtons component\n * @param buttons - Mantine button component args for renderButtons component\n * @param withCloseButton - Determines whether the close button should be rendered, true by default\n * @param onClose - Called when modal/drawer is closed\n * @param closeOnClickOutside - Determines whether the modal/drawer should be closed when user clicks on the overlay, true by default\n * @param closeOnEscape - Determines whether onClose should be called when user presses the escape key, true by default\n * @see https://mantine.dev/core/modal/\n * @returns a mantine modal with a built in button for closing the modal\n */\nexport const BaseModal = ({\n openModal,\n title,\n size,\n children,\n leftButtons,\n buttons,\n withCloseButton,\n onClose,\n closeOnClickOutside,\n closeOnEscape,\n}: Props) => {\n const dispatch = useCoreDispatch();\n return (\n <Modal\n opened={openModal}\n title={title}\n zIndex={400}\n onClose={() => {\n dispatch(hideModal());\n if (onClose) {\n onClose();\n }\n }}\n // TODO\n // styles={(theme) => ({\n // header: {\n // fontWeight: 600,\n // paddingBottom: '2.5em',\n // marginBottom: '2em',\n // backgroundColor: theme.colors.primary[4],\n // color: theme.colors['primary-contrast'][4],\n // },\n // close: {\n // color: 'base-darker',\n // }\n // })\n // }\n // styles={(theme) => ({\n // header: {\n // fontWeight: 600,\n // paddingBottom: '2.5em',\n // marginBottom: '2em',\n // backgroundColor: theme.colors.primary[4],\n // color: theme.colors['primary-contrast'][4],\n // },\n // close: {\n // color: 'base-darker',\n // },\n // })}\n // styles={(theme) => ({\n // header: {\n // fontWeight: 600,\n // paddingBottom: '2.5em',\n // marginBottom: '2em',\n // backgroundColor: theme.colors.primary[4],\n // color: theme.colors['primary-contrast'][4],\n // },\n // close: {\n // color: 'base-darker',\n // },\n // })}\n withinPortal={false}\n withCloseButton={withCloseButton ?? true}\n closeOnClickOutside={closeOnClickOutside ?? true}\n closeOnEscape={closeOnEscape ?? true}\n size={size}\n >\n {children}\n <div className=\"flex justify-between items-center\">\n {leftButtons && renderButtons(leftButtons, dispatch)}\n {buttons && renderButtons(buttons, dispatch)}\n </div>\n </Modal>\n );\n};\n","import React from 'react';\nimport { Text } from '@mantine/core';\nimport { BaseModal } from './BaseModal';\nimport FileSaver from 'file-saver';\nimport { APICredentials } from '../Profile/types';\nimport { LoadingOverlay } from '@mantine/core';\nimport { useClipboard } from '@mantine/hooks';\n\nexport const saveToFile = (\n savingStr: string,\n filename = 'credentials.json',\n) => {\n const blob = new Blob([savingStr], { type: 'text/json' });\n FileSaver.saveAs(blob, filename);\n};\n\ninterface CreateCredentialsAPIKeyModalProps {\n openModal: boolean;\n credentials: APICredentials;\n}\n\n/**\n * Creates a specialized modal that is a parto of the Credentials component on the profile page\n * @param openModal - State tracking to keep track of wether the modal should be shown or hidden\n * @param credentials - The new fence credential that is to be shown in the modal\n */\nexport const CreateCredentialsAPIKeyModal = ({\n openModal,\n credentials,\n}: CreateCredentialsAPIKeyModalProps): JSX.Element => {\n const clipboard = useClipboard({ timeout: 500 });\n const copyToClipboard = (credentials: APICredentials) => {\n clipboard.copy(JSON.stringify(credentials));\n };\n\n return (\n <BaseModal\n title={\n <Text size=\"lg\" className=\"font-medium font-heading\">\n Created API Key\n </Text>\n }\n openModal={openModal}\n size=\"60%\"\n leftButtons={[\n {\n title: 'Close',\n hideModalOnClick: true,\n dataTestId: 'button-create-api-key-close',\n },\n ]}\n buttons={[\n {\n title: 'Download',\n hideModalOnClick: false,\n dataTestId: 'button-create-api-key-download',\n onClick: () => {\n saveToFile(JSON.stringify(credentials), 'credentials.json');\n },\n },\n {\n title: 'Copy',\n hideModalOnClick: false,\n dataTestId: 'button-create-api-key-copy',\n onClick: () => {\n copyToClipboard(credentials);\n },\n },\n ]}\n withCloseButton={true}\n closeOnClickOutside={false}\n closeOnEscape={false}\n >\n <div className=\"flex flex-col border-y border-y-base-darker py-4 space-y-4 font-content\">\n {\n credentials.api_key === '' && <LoadingOverlay visible={true} /> // pragma: allowlist-secret;\n }\n <p>\n This key is only shown once. Please copy or save it and store it in a\n safe place.\n </p>\n <div>\n <strong>Key ID:</strong> {credentials.key_id}\n </div>\n <div>\n <strong>API Key:</strong> {credentials.api_key.replace(/./g, '*')}\n </div>\n </div>\n </BaseModal>\n );\n};\n","import React, { useMemo } from 'react';\nimport { ActionIcon, Box, Table } from '@mantine/core';\nimport {\n useGetCredentialsQuery,\n useRemoveCredentialMutation,\n type APIKey,\n useGetCSRFQuery,\n} from '@gen3/core';\nimport { MdDelete as DeleteIcon } from 'react-icons/md';\nimport { LuRefreshCw as RefreshIcon } from 'react-icons/lu';\nimport { unixTimeToString } from '../../utils';\nimport { TableIcons } from '../../components/Tables/TableIcons';\n\nconst SOON_IN_DAYS = 86400 * 5;\n\nimport {\n MantineReactTable,\n MRT_ColumnDef,\n MRT_Cell,\n useMantineReactTable,\n} from 'mantine-react-table';\n\nconst getStatus = (expiration: number, now: number) => {\n if (expiration < now) return 'Expired';\n else if (expiration - now < SOON_IN_DAYS) return 'Expiring Soon';\n return 'Active';\n};\n\ninterface APIKeyStatus {\n actions: 'delete' | 'refreshDelete';\n expiration: number;\n key: string;\n status: string;\n}\n\n/**\n * Defines a Credentials Table that lists all credentials for a logged in user\n * with the ability to delete a given credential using useRemoveCredentialMutation() hook\n * @returns {JSX.Element} The JSX element representing the credentials table.\n */\nconst CredentialsTable = () => {\n const { data: csrfToken, isFetching: isCSRFFetching} = useGetCSRFQuery();\n const { data: credentials } = useGetCredentialsQuery();\n const [removeCredential] = useRemoveCredentialMutation();\n\n const columns = useMemo(() => {\n return [\n {\n accessorKey: 'key',\n header: 'API Key',\n },\n {\n accessorKey: 'status',\n header: 'Status',\n },\n {\n accessorKey: 'expiration',\n header: 'Expiration Date',\n accessorFn: (apiKey: APIKeyStatus) => // pragma: allowlist secret\n unixTimeToString(\n // pragma: allowlist-secret\n apiKey.expiration,\n ),\n },\n {\n accessorKey: 'actions',\n header: 'Actions',\n Cell: ({ row }: MRT_Cell<APIKeyStatus>) => (\n <div className=\"flex items-center\">\n <ActionIcon\n onClick={() =>\n removeCredential({\n csrfToken: csrfToken?.csrfToken,\n id: row.original.key,\n })\n }\n >\n <DeleteIcon />\n </ActionIcon>\n </div>\n ),\n },\n ] as MRT_ColumnDef<APIKeyStatus>[];\n }, [csrfToken, removeCredential]);\n\n const currentTimeInSeconds = Math.floor(Date.now() / 1000);\n\n const rows = useMemo(() => {\n return credentials\n ? credentials.reduce((acc: APIKeyStatus[], c: APIKey) => {\n const status = getStatus(c.exp, currentTimeInSeconds);\n return acc.concat({\n key: c.jti,\n expiration: c.exp,\n status: status,\n actions: status === 'Active' ? 'delete' : 'refreshDelete',\n });\n }, [] as APIKeyStatus[])\n : [];\n }, [credentials, currentTimeInSeconds]);\n\n const table = useMantineReactTable<APIKeyStatus>({\n columns,\n data: rows,\n paginationDisplayMode: 'pages',\n positionToolbarAlertBanner: 'bottom',\n enableTopToolbar: false,\n mantineSearchTextInputProps: {\n placeholder: 'Search API Keys',\n },\n icons: TableIcons,\n state: { isLoading: isCSRFFetching },\n });\n\n return <MantineReactTable table={table} />;\n};\n\nexport default CredentialsTable;\n","import React, { useEffect, useState } from 'react';\nimport {\n useCoreDispatch,\n showModal,\n Modals,\n useCoreSelector,\n selectCurrentModal,\n APIKey,\n} from '@gen3/core';\nimport { Button, LoadingOverlay, Stack } from '@mantine/core';\nimport { CreateCredentialsAPIKeyModal } from '../Modals';\nimport { APICredentials } from './types';\n\nimport {\n useGetCredentialsQuery,\n useAddNewCredentialMutation,\n useGetCSRFQuery,\n} from '@gen3/core';\n\nimport CredentialsTable from './CredentialsTable';\n\n/**\n * Defines a Credentials Component containing a create credential button\n * and a table that shows all current credentials for logged in user.\n * It also retrieves CSRF token and creates a modal that shows the newly\n * created API key coming from fence.\n * @returns {JSX.Element} The JSX element representing the credentials section.\n */\nconst Credentials = () => {\n // useGetCSRFQuery hook returns a user's JWT token from the default gen3 core API\n const { data: csrfToken } = useGetCSRFQuery();\n const { isLoading } = useGetCredentialsQuery();\n const [addNewCredential, { isLoading: isNewLoading, isSuccess }] =\n useAddNewCredentialMutation();\n const modal = useCoreSelector((state) => selectCurrentModal(state));\n const [newCredential, setCredentials] = useState<APICredentials>({\n api_key: '', // pragma: allowlist-secret;\n key_id: '',\n });\n\n const coreDispatch = useCoreDispatch();\n return (\n <React.Fragment>\n {modal === Modals.CreateCredentialsAPIKeyModal && (\n <CreateCredentialsAPIKeyModal openModal credentials={newCredential} />\n )}\n <div className=\"flex flex-col w-full p-2 relative\">\n <div className=\"flex mb-2\">\n <Button\n color=\"accent.4\"\n onClick={async () => {\n if (csrfToken) {\n await addNewCredential(csrfToken.csrfToken)\n .unwrap()\n .then((credentials) => {\n coreDispatch(\n showModal({ modal: Modals.CreateCredentialsAPIKeyModal }),\n );\n setCredentials(credentials);\n });\n }\n }}\n >\n Create an API Key\n </Button>\n </div>\n <LoadingOverlay visible={isLoading || isNewLoading} />\n <CredentialsTable />\n </div>\n </React.Fragment>\n );\n};\n\nexport default Credentials;\n","import React, {\n createContext,\n PropsWithChildren,\n useState,\n} from 'react';\nimport {\n useDeepCompareEffect,\n useDeepCompareMemo\n} from 'use-deep-compare';\nimport {\n AuthzMapping, type CoreState,\n ServiceAndMethod,\n useCoreSelector,\n useGetAuthzMappingsQuery,\n UserProfile,\n selectUserDetails\n} from '@gen3/core';\n\ninterface ServicesAndMethodsTypes {\n services: string[];\n methods: string[];\n}\n\ninterface ServicesAndMethodsTypesAsSets {\n services: Set<string>;\n methods: Set<string>;\n}\n\ninterface ResourcesProviderValue {\n userProfile?: Partial<UserProfile>;\n authzMapping?: AuthzMapping;\n servicesAndMethods: ServicesAndMethodsTypes;\n}\n\nconst ResourcesContext = createContext<ResourcesProviderValue>({\n authzMapping: {} as AuthzMapping,\n userProfile: {} as UserProfile,\n servicesAndMethods: { services: [], methods: [] } as ServicesAndMethodsTypes,\n});\n\n// Creates a React context hook from AuthzMapping and UserProfile APIs\nexport const useResourcesContext = () => {\n const context = React.useContext(ResourcesContext);\n if (context === undefined) {\n throw Error(\n 'Resources must be used must be used inside of a ResourcesContext',\n );\n }\n return context;\n};\n\n/**\n * ResourcesProvider fetches permissions data via the authzApi and caches this data\n * for use in other components\n * @param children - List all the API keys for the current user\n * @returns: A provider element that can pass data to other child elements.\n */\nconst ResourcesProvider = ({ children }: PropsWithChildren) => {\n const userProfile = useCoreSelector((state: CoreState) => selectUserDetails(state));\n const { data: authzMapping = {}, isLoading: isAuthZLoading } =\n useGetAuthzMappingsQuery();\n\n const [userProfileState, setUserProfileState] = useState<\n Partial<UserProfile>\n >({});\n const [authzMappingState, setAuthzMappingState] = useState<AuthzMapping>({});\n\n useDeepCompareEffect(() => {\n setUserProfileState(userProfile);\n }, [userProfile]);\n\n useDeepCompareEffect(() => {\n setAuthzMappingState(authzMapping);\n }, [authzMapping]);\n\n const servicesAndMethods = useDeepCompareMemo(() => {\n if (isAuthZLoading) return { services: [], methods: [] };\n if (!authzMappingState) return { services: [], methods: [] };\n const results = Object.values<ServiceAndMethod[]>(authzMappingState).reduce(\n (acc, resource) => {\n return resource.reduce((acc: ServicesAndMethodsTypesAsSets, entry) => {\n acc.services.add(entry.service);\n acc.methods.add(entry.method);\n return acc;\n }, acc);\n },\n {\n services: new Set<string>(),\n methods: new Set<string>(),\n } as ServicesAndMethodsTypesAsSets,\n );\n return {\n services: Array.from(results.services),\n methods: Array.from(results.methods),\n };\n }, [authzMappingState, isAuthZLoading]);\n\n return (\n <ResourcesContext.Provider\n value={{\n userProfile: userProfileState,\n authzMapping: authzMappingState,\n servicesAndMethods,\n }}\n >\n {children}\n </ResourcesContext.Provider>\n );\n};\n\nexport default ResourcesProvider;\n","import React, { createContext } from 'react';\nimport { ProfileConfig } from './types';\n\ninterface ProfileProviderValue {\n profileConfig: ProfileConfig;\n}\n\nconst ProfileContext = createContext<ProfileProviderValue>({\n profileConfig: {} as ProfileConfig,\n});\n\nconst useProfileContext = () => {\n const context = React.useContext(ProfileContext);\n if (context === undefined) {\n throw Error(\n 'Profile must be used must be used inside of a ProfileContext',\n );\n }\n return context;\n};\n\nconst ProfileProvider = ({\n children,\n profileConfig,\n}: {\n children: React.ReactNode;\n profileConfig: ProfileConfig;\n}) => {\n return (\n <ProfileContext.Provider value={{ profileConfig }}>\n {children}\n </ProfileContext.Provider>\n );\n};\n\nexport { useProfileContext, ProfileProvider as default };\n","import React, { useMemo } from 'react';\nimport { Stack, Checkbox, Text } from '@mantine/core';\nimport { useResourcesContext } from './ResourcesProvider';\nimport { useProfileContext } from './ProfileProvider';\n\ninterface ResourcesFiltersProps {\n setFilters: (filters: string[]) => void;\n selectedFilters: string[];\n}\n\n/**\n * ResourcesFilters creates a checkbox filter component from cached arborist data\n * and servicesAndMethods, useProfileContext context hooks.\n * @returns: A resourceFilter component for sorting permissions\n * chart on profile page by relevant microservices\n */\nconst ResourcesFilters = ({\n selectedFilters,\n setFilters,\n}: ResourcesFiltersProps) => {\n const { servicesAndMethods } = useResourcesContext();\n const { profileConfig } = useProfileContext();\n\n const checkboxes = useMemo(() => {\n const serviceColors = profileConfig?.resourceTable?.serviceColors ?? {};\n return servicesAndMethods.services.map((filter: string) => (\n <Checkbox\n className=\"m-2\"\n color={\n filter in serviceColors ? serviceColors[filter].color : 'primary'\n }\n key={filter}\n value={filter}\n label={filter}\n />\n ));\n }, [\n profileConfig?.resourceTable?.serviceColors,\n servicesAndMethods.services,\n ]);\n\n return (\n <div className=\"basis-1/4 mr-4 min-w-fit\">\n <div className=\"flex flex-col border-1 bg-base-max border-base-light\">\n <div className=\"bg-secondary-lighter border-base-lighter border-1 w-full py-1 px-2\">\n <Text size=\"sm\" fw={600}>\n Filter by Service\n </Text>\n </div>\n <Checkbox.Group\n value={selectedFilters}\n onChange={setFilters}\n classNames={{\n label: 'bg-secondary-lighter border-base-lighter border-1 w-full',\n }}\n >\n <Stack mt=\"xs\">{checkboxes}</Stack>\n </Checkbox.Group>\n </div>\n </div>\n );\n};\n\nexport default ResourcesFilters;\n","import { ServiceAndMethod } from '@gen3/core';\n\nexport const convertToRecordMethodToResource = (\n entries: ServiceAndMethod[],\n filters: string[],\n) => {\n return entries.reduce(\n (acc: Record<string, string[]>, entry: ServiceAndMethod) => {\n if (filters.length > 0 && !filters.includes(entry.service)) return acc;\n if (!(entry.method in acc)) {\n acc[entry.method] = [entry.service];\n } else acc[entry.method].push(entry.service);\n return acc;\n },\n {} as Record<string, string[]>,\n );\n};\n","import React, { useMemo } from \"react\";\nimport { Badge } from \"@mantine/core\";\nimport { TableIcons } from \"../../components/Tables/TableIcons\";\n\nimport {\n MantineReactTable,\n MRT_Cell,\n MRT_ColumnDef,\n useMantineReactTable,\n} from \"mantine-react-table\";\nimport { useResourcesContext } from \"./ResourcesProvider\";\nimport { useProfileContext } from \"./ProfileProvider\";\nimport { ServiceColorAndLabel } from \"./types\";\nimport { convertToRecordMethodToResource } from \"./utils\";\n\ninterface ItemResource {\n resource: string;\n methods: Record<string, string[]>;\n}\n\ninterface ResourceBadgeProps {\n resource: string;\n serviceBadgeStyle: Record<string, ServiceColorAndLabel>;\n defaultColor?: string;\n}\n\nconst ResourceBadge = ({\n resource,\n serviceBadgeStyle,\n defaultColor = \"primary\",\n}: ResourceBadgeProps): JSX.Element => {\n const { color, label } =\n resource in serviceBadgeStyle\n ? serviceBadgeStyle[resource]\n : { color: defaultColor, label: resource };\n\n return (\n <Badge variant=\"filled\" color={color} aria-label={label}>\n {label}\n </Badge>\n );\n};\n\ninterface ResourcesTableProps {\n filters: string[];\n}\n\n/**\n * ResourcesTable function creates a mantine-react-table'\n * to display user permissions from the useResourcesContext\n * and the useProfileContext context hooks\n *\n * @param filters - filters passed in from filters panel.\n * @returns A resources table for viewing methods, services that user has access to\n * on specified resource paths.\n */\nconst ResourcesTable = ({ filters }: ResourcesTableProps) => {\n const { userProfile, servicesAndMethods } = useResourcesContext();\n const { profileConfig } = useProfileContext();\n let rows: ItemResource[] = [];\n\n rows = useMemo(() => {\n return Object.entries(userProfile?.authz ?? {})\n .map(([key, authz]) => {\n const methods = convertToRecordMethodToResource(authz, filters);\n return {\n resource: key,\n methods: methods,\n };\n })\n .filter((row) => Object.keys(row.methods).length > 0);\n }, [filters, userProfile?.authz]);\n\n const columns = useMemo(() => {\n return [\n {\n header: \"Resource(s)\",\n accessorKey: \"resource\",\n Cell: ({ row }: MRT_Cell<ItemResource>) => (\n <div>{row.original.resource}</div>\n ),\n mantineTableHeadCellProps: {\n align: \"left\",\n },\n mantineTableBodyCellProps: {\n align: \"left\",\n },\n },\n ...servicesAndMethods.methods.map((method) => {\n return {\n header: method,\n accessor: \"methods\",\n size: 150,\n Cell: ({ row }: MRT_Cell<ItemResource>) => {\n return (\n <div className=\"flex flex-col space-y-1\">\n {method in row.original.methods ? (\n row.original.methods[method].map((resource) => (\n <ResourceBadge\n key={resource}\n resource={resource}\n serviceBadgeStyle={\n profileConfig?.resourceTable?.serviceColors ?? {}\n }\n />\n ))\n ) : (\n <span className=\"w-4 h-4\"></span>\n )}\n </div>\n );\n },\n };\n }),\n ] as unknown as MRT_ColumnDef<ItemResource>[];\n }, [profileConfig?.resourceTable?.serviceColors, servicesAndMethods.methods]);\n\n const table = useMantineReactTable<ItemResource>({\n columns,\n data: rows,\n enableColumnResizing: true,\n enableTopToolbar: false,\n layoutMode: \"grid\",\n icons: TableIcons,\n //Disables the default flex-grow behavior of the table cells\n mantineTableHeadRowProps: {\n style: {\n \"--mrt-base-background-color\": \"var(--mantine-color-secondary-2)\",\n borderColor: \"var(--mantine-color-secondary-2)\",\n borderWidth: \"1px\",\n boxShadow: \"none\",\n align: \"center\",\n fontSize: \"var(--mantine-font-size-sm)\",\n fontWeight: 600,\n color: \"var(--mantine-color-secondary-contrast-2)\",\n },\n },\n mantineTableHeadCellProps: {\n align: \"center\",\n },\n mantineTableBodyCellProps: {\n align: \"center\",\n },\n paginationDisplayMode: \"pages\",\n positionToolbarAlertBanner: \"bottom\",\n });\n\n return (\n <div className=\"w-full\">\n <MantineReactTable table={table} />\n </div>\n );\n};\n\nexport default ResourcesTable;\n","import React, { useState } from 'react';\nimport ResourcesFilters from './ResourcesFilters';\nimport ResourcesTable from './ResourcesTable';\nimport ResourcesProvider from './ResourcesProvider';\n\n/**\n * ResourcesPanel gets filters from ResourcesFilters panel and passes those\n * filters into useState setFilters hook to be used as the filters variable in the\n * ResourcesTable on the profile page\n */\nexport const ResourcesPanel = () => {\n const [filters, setFilters] = useState<string[]>([]);\n // Todo add project access Table other table types Resources vs Services Resources vs Methods\n return (\n <ResourcesProvider>\n <div className=\"flex\">\n <ResourcesFilters setFilters={setFilters} selectedFilters={filters} />\n <ResourcesTable filters={filters} />\n </div>\n </ResourcesProvider>\n );\n};\n","import React, { HTMLAttributes, useEffect } from 'react';\nimport { Card, Text, Stack, Button, Center } from '@mantine/core';\nimport { type ExternalProvider, type NamedURL } from '@gen3/core';\nimport {\n IoMdRefresh as ReloadIcon,\n IoMdLogIn as LoginIcon,\n} from 'react-icons/io';\nimport Link from 'next/link';\nimport { useDisclosure } from '@mantine/hooks';\nimport {\n QueryActionCreatorResult,\n QueryDefinition,\n} from '@reduxjs/toolkit/query';\n\n/**\n * Open a new window for authentication.\n * @param url - URL to open\n * @param title - Title of the window\n * @param refetch - refetch the external status if successful\n */\nconst openAuthWindow = (\n url: string,\n title: string,\n refetch: () => QueryActionCreatorResult<\n QueryDefinition<any, any, any, any, string>\n >,\n): Promise<unknown> => {\n const pollInterval = 500;\n return new Promise((resolve, reject) => {\n if (window.navigator.cookieEnabled) {\n const width = Math.max(1024, window.innerWidth / 2);\n const height = Math.max(1024, window.innerHeight / 2);\n const dualScreenLeft = window.screenLeft ?? window.screenX;\n const dualScreenTop = window.screenTop ?? window.screenY;\n const left = dualScreenLeft + (window.innerWidth - width) / 2;\n const top = dualScreenTop + (window.innerHeight - height) / 2;\n const win = window.open(\n url,\n title,\n `width=${width},height=${height},left=${left},top=${top}`,\n );\n\n if (!win) {\n reject('Popup blocked');\n return;\n }\n win?.focus();\n\n const loginAttempt = () => {\n if (win.closed) {\n clearInterval(interval);\n reject('window closed manually');\n }\n try {\n if (\n win.document.URL.includes(location.origin) &&\n !win.document.URL.includes('auth')\n ) {\n win.close();\n clearInterval(interval);\n if (win.document.URL.includes('error=401')) {\n reject('login_error');\n return;\n }\n refetch();\n resolve('success');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_err: unknown) {\n // We just want to catch it and not reject it. Rejecting the promise leads to unexpected behavior\n // where the logged-in status isn't reflected immediately as the program moves ahead w/o users\n // having a chance to log in, requiring a manual screen refresh to update. By catching errors\n // instead of rejecting, we avoid the issue where browser complains about cross origin\n // and ensure a smoother user experience where the promise chain continues until we login and we\n // avoid pre-maturely triggering calls which fetches user info.\n }\n };\n const interval = setInterval(loginAttempt, pollInterval);\n } else {\n reject('No cookies enabled');\n }\n });\n};\n\ninterface ExternalProviderCardProps extends HTMLAttributes<HTMLDivElement> {\n provider: ExternalProvider;\n refetch: () => QueryActionCreatorResult<\n QueryDefinition<any, any, any, any, string>\n >;\n}\n\nconst ExternalProviderCard: React.FunctionComponent<\n ExternalProviderCardProps\n> = ({ provider, refetch }) => {\n const [loading, handler] = useDisclosure();\n return (\n <Card withBorder radius=\"sm\">\n <Card.Section withBorder inheritPadding py=\"xs\">\n <Center>\n <Text truncate size=\"lg\" fw={700} color=\"primary.4\">\n <span aria-label=\"provider-name\">{provider.name} </span>\n </Text>\n </Center>\n </Card.Section>\n <Card.Section inheritPadding py=\"md\">\n <Stack gap=\"md\">\n <div className=\"flex flex-nowrap justify-between items-center\">\n <Text>IDP</Text>\n <Text truncate aria-label=\"provider-idp\">\n {provider.idp}\n </Text>\n </div>\n <div className=\"flex flex-nowrap justify-between items-center\">\n <Text truncate>Provider URL</Text>\n <Link href={provider.base_url} target=\"_blank\" rel=\"noreferrer\">\n <Text truncate color=\"utility.0\" aria-label=\"provider-base-url\">\n {provider.base_url}\n </Text>\n </Link>\n </div>\n <div className=\"flex flex-nowrap justify-between items-center\">\n <Text truncate>Status</Text>\n <Text truncate aria-label=\"provider-status\">\n {provider.refresh_token_expiration\n ? `Expires in ${provider.refresh_token_expiration}`\n : 'Not authorized'}\n </Text>\n </div>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding p=\"sm\">\n {provider.urls.map((providerUrl: NamedURL, i: number) => (\n <Button\n variant=\"outline\"\n fullWidth\n size=\"md\"\n color=\"accent\"\n disabled={loading}\n key={`${providerUrl.url}-${i}`}\n onClick={async () => {\n const queryChar = providerUrl.url.includes('?') ? '&' : '?';\n handler.open();\n openAuthWindow(\n `${providerUrl.url}${queryChar}redirect=${window.location.pathname}`,\n provider.name,\n refetch,\n ).finally(() => {\n handler.close();\n });\n }}\n aria-label={`provider-button-${provider.name}`}\n leftSection={\n provider.refresh_token_expiration ? (\n <ReloadIcon\n size=\"1.5rem\"\n className=\"text-accent data-disabled:opacity-50\"\n />\n ) : (\n <LoginIcon\n size=\"1.5rem\"\n className=\"text-accent disabled:text-accent/50\"\n />\n )\n }\n >\n <span aria-hidden={true}>\n {provider.refresh_token_expiration\n ? `Refresh ${providerUrl.name}`\n : `Authorize ${providerUrl.name}`}\n </span>\n </Button>\n ))}\n </Card.Section>\n </Card>\n );\n};\n\nexport default ExternalProviderCard;\n","import React, { useMemo } from 'react';\nimport { useGetExternalLoginsQuery, type ExternalProvider } from '@gen3/core';\n\nimport ExternalProviderCard from './ExternalProviderCard';\nimport { LoadingOverlay } from '@mantine/core';\n\nconst ExternalProvidersPanel = () => {\n const {\n data: externalProviders,\n isLoading,\n isError,\n isSuccess,\n refetch,\n } = useGetExternalLoginsQuery();\n\n const providerCards = useMemo(\n () =>\n externalProviders\n ? externalProviders.providers.map((provider: ExternalProvider) => (\n <ExternalProviderCard\n key={provider.base_url}\n provider={provider}\n refetch={refetch}\n />\n ))\n : null,\n [externalProviders],\n );\n\n return (\n <div className=\"mt-6 relative\">\n <LoadingOverlay visible={isLoading} />\n {isError && <div role=\"alert\">Error loading external providers</div>}\n {isSuccess && (\n <div\n className=\"mt-4 grid gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4\"\n role=\"listbox\"\n >\n {providerCards}\n </div>\n )}\n </div>\n );\n};\n\nexport default ExternalProvidersPanel;\n","import React from 'react';\nimport Credentials from '../../components/Profile/Credentials';\nimport { Accordion } from '@mantine/core';\nimport { ResourcesPanel } from '../../components/Profile/ResourcesPanel';\nimport { ProfileConfig, ProfileProvider } from '../../components/Profile';\nimport ExternalProvidersPanel from '../../components/Profile/ExternalProvidersPanel';\nimport { PiCaretCircleDownFill as Caret } from 'react-icons/pi';\n\nexport interface ProfileProps {\n profileConfig: ProfileConfig;\n}\n\nconst Profile = ({ profileConfig }: ProfileProps) => {\n return (\n <ProfileProvider profileConfig={profileConfig}>\n <div className=\"flex flex-col w-full m-2\">\n <Accordion\n multiple\n variant=\"separated\"\n chevronPosition=\"left\"\n chevron={<Caret color=\"primary.4\" size=\"1.75rem\" />}\n defaultValue={[\n ...['apiKeys', 'resources'],\n ...(profileConfig?.hasExternalLogins ? ['externalLogins'] : []),\n ]}\n classNames={{\n label: 'text-secondary-contrast-lighter font-heading font-bold',\n }}\n >\n {profileConfig?.hasExternalLogins && (\n <Accordion.Item value=\"externalLogins\">\n <div className=\"bg-secondary-lighter\">\n <Accordion.Control>\n Link Account from External Data Resources\n </Accordion.Control>\n </div>\n <Accordion.Panel>\n <ExternalProvidersPanel />\n </Accordion.Panel>\n </Accordion.Item>\n )}\n <Accordion.Item value=\"apiKeys\">\n <div className=\"bg-secondary-lighter\">\n <Accordion.Control>Current API Keys</Accordion.Control>\n </div>\n <Accordion.Panel>\n <Credentials />\n </Accordion.Panel>\n </Accordion.Item>\n <Accordion.Item value=\"resources\">\n <div className=\"bg-secondary-lighter\">\n <Accordion.Control>Resources</Accordion.Control>\n </div>\n <Accordion.Panel>\n <ResourcesPanel />\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n </div>\n </ProfileProvider>\n );\n};\n\nexport default Profile;\n","import React from 'react';\nimport { NavPageLayout, NavPageLayoutProps } from '../../features/Navigation';\nimport { Profile } from '../../features/Profile';\nimport { ProfileConfig } from '../../components/Profile';\n\ninterface Props extends NavPageLayoutProps {\n profileConfig: ProfileConfig;\n}\n\nconst ProfilePage = ({ headerProps, footerProps, profileConfig }: Props) => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Profile Page',\n content: 'Profile page',\n key: 'gen3-profile-page',\n ...(profileConfig?.headerMetadata ? profileConfig.headerMetadata : {}),\n }}\n >\n <Profile profileConfig={profileConfig} />\n </NavPageLayout>\n );\n};\n\nexport default ProfilePage;\n","import React from 'react';\nimport dynamic from 'next/dynamic';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { QueryPageLayoutProps } from './types';\n\nconst QueryPanel = dynamic(() => import('../../features/Query/QueryPanel'), {\n ssr: false,\n});\n\nconst QueryPage = ({\n headerProps,\n footerProps,\n queryProps,\n}: QueryPageLayoutProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Query Page',\n content: 'Query page',\n key: 'gen3-query-page',\n ...(queryProps?.headerMetadata ? queryProps.headerMetadata : {}),\n }}\n >\n <QueryPanel graphQLEndpoint={queryProps.graphQLEndpoint} />\n </NavPageLayout>\n );\n};\n\nexport default QueryPage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { type QueryProps } from './types';\nimport { type NavPageLayoutProps } from '../../features/Navigation';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nexport const QueryPageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n const queryProps: QueryProps = await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/query.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n queryProps: queryProps,\n },\n };\n};\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { RepositoryConfiguration } from '../../features/CohortBuilder/Repository';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\n\nimport {\n AccessControlConfiguration,\n GuppyDataAccessMode,\n} from '../../features/CohortBuilder/types';\nimport { RepositoryPageProps } from './types';\n\nconst DefaultHeaderMetadata = {\n title: 'Gen3 Repository Page',\n content: 'Repository Page',\n key: 'gen3-repository-page',\n};\n\nconst DefaultAccessControlConfiguration: AccessControlConfiguration = {\n dataMode: GuppyDataAccessMode.REGULAR,\n tierLimit: -1,\n showAccessLevelControl: false,\n};\n\nexport const RepositoryPageGetServerSideProps: GetServerSideProps<\n RepositoryPageProps\n> = async () => {\n try {\n const repositoryConfiguration: RepositoryConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/repository.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n\n configuration: repositoryConfiguration,\n // headerMetadata: cohortBuilderConfiguration.headerMetadata,\n accessControl: {\n ...DefaultAccessControlConfiguration,\n },\n },\n };\n } catch (err: unknown) {\n if (err instanceof Error) {\n console.warn('Explorer config cannot be read', err);\n }\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: undefined,\n },\n };\n }\n};\n","import {\n AggregationsData,\n buildNestedFilterForOperation,\n CombineMode,\n CoreState,\n EnumFilterValue,\n extractEnumFilterValue,\n FacetDefinition,\n fieldNameToTitle,\n HistogramData,\n HistogramDataArray,\n Includes,\n IndexAndField,\n Intersection,\n isOperationWithField,\n isOperatorWithFieldAndArrayOfOperands,\n isUnion,\n NumericFromTo,\n Operation,\n OperatorWithFieldAndArrayOfOperands,\n selectIndexedFilterByName,\n selectSharedFilters,\n selectShouldShareFilters,\n SharedFieldMapping,\n updateCohortFilter,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport {\n ClearFacetFunction,\n FacetSortType,\n FieldToName,\n FromToRange,\n SortType,\n UpdateFacetFilterFunction,\n} from './types';\nimport { isArray } from 'lodash';\nimport { TabConfig } from '../../features/CohortBuilder/types';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const getAllFieldsFromFilterConfigs = (\n filterTabConfigs: ReadonlyArray<TabConfig>,\n) =>\n filterTabConfigs.reduce((acc, cur) => acc.concat(cur.fields), [] as string[]);\n\ninterface ExplorerResultsData {\n [key: string]: Record<string, any>;\n}\n\nexport const getByPath = (obj: unknown, path: string) => {\n if (!obj) return undefined;\n const segments = path.split('.').filter(Boolean);\n return segments.reduce<any>((acc, key) => {\n if (acc && typeof acc === 'object' && key in (acc as any)) {\n return (acc as any)[key];\n }\n return undefined;\n }, obj as any);\n};\n\nexport const processBucketData = (\n data?: HistogramDataArray,\n): Record<string, number> => {\n if (!data) return {};\n\n return data.reduce(\n (acc: Record<string, number>, curr: HistogramData) => {\n if (isArray(curr.key)) return acc; // remove this line if you want to support array keys\n acc[curr.key] = curr.count;\n return acc;\n },\n {} as Record<string, number>,\n );\n};\n\nexport const processRangeData = (\n data?: HistogramDataArray,\n): Record<string, number> => {\n if (!data) return {};\n\n return data.reduce(\n (acc: Record<string, number>, curr: HistogramData) => {\n // TODO handle this better when keys are undefined\n acc[`${curr.key?.[0]?.toString()}-${curr.key?.[1]?.toString()}`] =\n curr.count;\n return acc;\n },\n {} as Record<string, number>,\n );\n};\n\nexport const processDefinedRangeData = (\n data: Record<string, any>,\n ranges: ReadonlyArray<NumericFromTo>,\n field: string,\n index: string,\n indexPrefix: string = '',\n): Record<string, number> => {\n if (!data) return {};\n\n const valueData = JSONPath({\n json: data,\n path: '$..count',\n resultType: 'value',\n });\n\n const pointerData = JSONPath({\n json: data,\n path: '$..count',\n resultType: 'pointer',\n });\n\n const buckets = pointerData.reduce(\n (acc: Record<string, number>, pointer: string, index: number) => {\n const parts = pointer.split('/');\n if (parts.length < 4) return acc;\n const key = parts[3];\n acc[key] = valueData[index];\n\n return acc;\n },\n {},\n );\n\n return buckets;\n};\n\n/**\n * Update the facet filter for an enumeration facet\n * @param fieldName - the name of the field\n * @param values - the values to filter on\n * @param updateFacetFilters - the function to update the facet filters\n * @param clearFilters\n */\nexport const updateFacetEnum = (\n fieldName: string,\n values: EnumFilterValue,\n updateFacetFilters: UpdateFacetFilterFunction,\n clearFilters: ClearFacetFunction,\n combineMode: CombineMode = 'or',\n): void => {\n if (values === undefined) return;\n if (values.length > 0) {\n // TODO: Assuming Includes by default but this might change to Include|Excludes\n updateFacetFilters(\n fieldName,\n combineMode === 'and'\n ? addIntersectionToIncludes({\n operator: 'in',\n field: fieldName,\n operands: values,\n } as Includes)\n : ({\n operator: 'in',\n field: fieldName,\n operands: values,\n } as Includes),\n );\n }\n // no values remove the filter\n else {\n clearFilters(fieldName);\n }\n};\n\n// Process facets to determine if they are enum, exact, or range\nexport const classifyFacets = (\n data: AggregationsData,\n index: string,\n fieldMapping: ReadonlyArray<FieldToName> = [],\n facetDefinitionsFromConfig: Record<string, FacetDefinition> = {},\n sharedFieldMapping?: SharedFieldMapping,\n): Record<string, FacetDefinition> => {\n if (typeof data !== 'object' || data === null) return {};\n\n // otherwise enum facet\n return Object.entries(data as AggregationsData).reduce(\n (\n acc: Record<string, FacetDefinition>,\n [fieldKey, value]: [string, HistogramDataArray],\n ) => {\n if (!value) return acc; // return if no data, which prevents an application crash\n const dataField = fieldKey.split('.')?.slice(-1)[0] ?? fieldKey;\n // check if range facet\n const type =\n value.length === 1 && isArray(value[0].key) ? 'range' : 'enum';\n const facetName =\n fieldMapping.find((x) => x.field === fieldKey)?.name ??\n fieldNameToTitle(fieldKey);\n\n const facetDef = facetDefinitionsFromConfig[fieldKey] ?? {};\n\n return {\n ...acc,\n [fieldKey]: {\n field: fieldKey,\n dataField: dataField, // get the last part of the nested field name\n // this is to maintain compatibility with gitops but should be deprecated\n type: facetDef.type ?? type,\n index: index,\n description: facetDef.description ?? 'Not Available',\n label: facetDef.label ?? facetName,\n // assumption is that the initial data has the min and max values\n sharedWithIndices:\n (sharedFieldMapping &&\n fieldKey in sharedFieldMapping &&\n sharedFieldMapping[fieldKey].filter((x) => x.index !== index)) ??\n undefined,\n moveValuesToBottom: facetDef?.moveValuesToBottom,\n excludeValues: facetDef?.excludeValues,\n range: facetDef?.range\n ? { minimum: facetDef.range?.minimum ?? Math.floor(Number(value[0].key[0])),\n maximum: facetDef?.range?.maximum ?? Math.floor((Number(value[0].key[1])))} // prefer config-defined range (if any)\n : type === 'range' // if computed type is range use that\n ? {\n minimum: Math.floor(Number(value[0].key[0])),\n maximum: Math.ceil(Number(value[0].key[1])),\n }\n : undefined,\n } as FacetDefinition,\n };\n },\n {} as Record<string, FacetDefinition>,\n );\n};\n\n/**\n * Update Guppy filters: process nested fields and have the final\n * leaf be filtered\n * @param index\n */\nexport const useUpdateFilters = (index: string) => {\n const dispatch = useCoreDispatch();\n // update the filter for this facet\n\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) => selectSharedFilters(state));\n\n return (field: string, filter: Operation) => {\n if (shouldShareFilters && field in sharedFilters) {\n sharedFilters[field].forEach((x: IndexAndField) => {\n dispatch(\n updateCohortFilter({\n index: x.index,\n field: x.field,\n filter: buildNestedFilterForOperation(x.field, filter),\n }),\n );\n });\n } else {\n dispatch(\n updateCohortFilter({\n index: index,\n field: field,\n filter: buildNestedFilterForOperation(field, filter),\n }),\n );\n }\n };\n};\n\n/**\n * Process any filter but do not nest enve if field is delimited with '.'\n * leaf be filtered\n * @param index\n */\nexport const useUpdateFiltersFlat = (index: string) => {\n const dispatch = useCoreDispatch();\n // update the filter for this facet\n\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) => selectSharedFilters(state));\n\n return (field: string, filter: Operation) => {\n if (shouldShareFilters && field in sharedFilters) {\n sharedFilters[field].forEach((x: IndexAndField) => {\n dispatch(\n updateCohortFilter({\n index: x.index,\n field: x.field,\n filter: filter,\n }),\n );\n });\n } else {\n dispatch(\n updateCohortFilter({\n index: index,\n field: field,\n filter: filter,\n }),\n );\n }\n };\n};\n\nexport const useGetFacetFilters = (index: string, field: string): Operation => {\n return (\n useCoreSelector((state: CoreState) =>\n selectIndexedFilterByName(state, index, field),\n ) ?? {\n operator: 'and',\n operands: [],\n }\n );\n};\n\n/**\n * Given an operation, determine if range is open or closed and extract\n * the range values and operands as a NumericRange\n * @param filter - operation to test\n */\nexport const extractRangeValues = <T extends string | number>(\n filter?: Operation,\n): FromToRange<T> | undefined => {\n if (filter !== undefined) {\n switch (filter.operator) {\n case '>':\n case '>=':\n return {\n from: filter.operand as T,\n fromOp: filter.operator,\n };\n case '<':\n case '<=':\n return {\n to: filter.operand as T,\n toOp: filter.operator,\n };\n case 'and': {\n const a = extractRangeValues<T>(filter.operands[0]);\n const b = extractRangeValues<T>(filter.operands[1]);\n return a && b ? { ...a, ...b } : (a ?? b ?? undefined);\n }\n default:\n return undefined;\n }\n } else {\n return undefined;\n }\n};\n\nexport const convertToStringArray = (\n inputArray: (string | number)[],\n): string[] => inputArray.map(String);\n\n/**\n * This function creates a new operation by combining the provided filter\n * with an 'and' logical operator. The resulting operation contains the filter\n * as its sole operand initially.\n *\n * @param {Operation} filter - The operation to be added as the first operand.\n * @returns {Operation} A new operation object with an 'and' operator and the given filter as its operand.\n */\nexport const addUnion = (filter: Operation): Operation => {\n return {\n operator: 'and',\n operands: [filter],\n };\n};\n\n/**\n * Removes a union operation and returns the sole operand if the union\n * operation contains only one operand. If the union operation has multiple\n * operands or if the input is not a union, returns undefined.\n *\n * @param {Operation} filter - The operation to evaluate and possibly modify, expected to be a union.\n * @returns {Operation | undefined} The sole operand of the union if it contains only one, or undefined otherwise.\n */\nexport const removeUnion = (filter: Operation): Operation | undefined => {\n if (isUnion(filter) && filter.operands.length === 1) {\n return filter.operands[0];\n }\n return undefined;\n};\n\n/**\n * Represents a function that adds an intersection filter operation.\n *\n * @param {Operation} filter - The filter operation to be intersected with.\n * @returns {Operation} An object representing a new operation that combines\n * the provided filter with an \"and\" logical operator.\n */\nexport const addIntersectionToIncludes = (filter: Includes): Operation => {\n if (!isOperatorWithFieldAndArrayOfOperands(filter)) return filter;\n\n const values: EnumFilterValue = extractEnumFilterValue(filter);\n\n // if (!values || values.length === 0) return filter;\n\n return {\n operator: 'and',\n operands: values.map((x) => {\n return {\n operator: filter.operator,\n operands: [x],\n field: filter.field,\n } as Includes;\n }),\n };\n};\n\n/**\n * Removes the intersection from a filter operation if the intersection contains only one operand.\n *\n * @param {Operation} filter - The filter operation to be evaluated.\n * @returns {Operation|undefined} The single operand of the intersection if the intersection has only one operand, otherwise undefined.\n */\nexport const removeIntersectionFromEnum = (\n filter: Intersection,\n): OperatorWithFieldAndArrayOfOperands | undefined => {\n if (filter.operands.length === 0) return undefined;\n if (!filter.operands.every((x) => isOperationWithField(x))) return undefined;\n\n const values = filter.operands.reduce(\n (acc, x) => {\n extractEnumFilterValue(x).map((y) => acc.push(y));\n return acc;\n },\n [] as Array<string | number>,\n );\n return {\n operator: filter.operands[0].operator,\n field: filter.operands[0].field,\n operands: values,\n } as OperatorWithFieldAndArrayOfOperands;\n};\n\n/**\n * Maps a facet sort type to a corresponding sort type.\n *\n * @param {FacetSortType} facetSort - The facet sort type represented as a string in the format \"type-direction\".\n * @returns {SortType} - The mapped sort type object containing type and direction.\n */\nexport const mapFacetSortToSortType = (facetSort: FacetSortType): SortType => {\n // Default fallback values\n const defaultSort: SortType = {\n type: 'value',\n direction: 'dsc',\n };\n\n // Validate input\n if (!facetSort) {\n console.warn(\n `Invalid facetSort: expected string, got ${typeof facetSort}. Using default.`,\n );\n return defaultSort;\n }\n\n const parts = facetSort.split('-');\n\n // Check if we have exactly 2 parts\n if (parts.length !== 2) {\n console.warn(\n `Invalid facetSort format: expected 'type-direction', got '${facetSort}'. Using default.`,\n );\n return defaultSort;\n }\n\n const [type, direction] = facetSort.split('-');\n return {\n type: type === 'label' ? 'alpha' : 'value',\n direction: direction as 'asc' | 'dsc',\n };\n};\n\nexport const compareKeysAscending = (\n a: string | number,\n b: string | number,\n): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a - b;\n }\n // If only one value is a number, move numbers to one end\n // (in this case, numbers will come before strings)\n if (typeof a === 'number') return -1;\n if (typeof b === 'number') return 1;\n // If both are strings, sort alphabetically\n return a.localeCompare(b);\n};\nexport const compareKeysDescending = (\n a: string | number,\n b: string | number,\n): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return b - a;\n }\n // If only one value is a number, move numbers to one end\n // (in this case, numbers will come before strings)\n if (typeof a === 'number') return 1;\n if (typeof b === 'number') return -1;\n // If both are strings, sort alphabetically\n return b.localeCompare(a);\n};\n","import { useCallback } from 'react';\nimport {\n CoreState,\n type EnumFilterValue,\n extractEnumFilterValue,\n fieldNameToTitle,\n removeCohortFilter,\n selectIndexedFilterByName,\n selectSharedFilters,\n selectShouldShareFilters,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\n\nimport { FromToRange } from './types';\nimport { extractRangeValues } from './utils';\n\n// Core ClearFilters hook\nexport const useClearFilters = (index: string) => {\n const dispatch = useCoreDispatch();\n\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) => selectSharedFilters(state));\n\n return (field: string) => {\n if (shouldShareFilters && field in sharedFilters) {\n sharedFilters[field].forEach((x) => {\n dispatch(removeCohortFilter({ index: x.index, field: x.field }));\n });\n } else dispatch(removeCohortFilter({ index, field }));\n };\n};\n\n/**\n * Selector for the facet values (if any) from the current cohort\n * @param index - index of filter\n * @param field - field name to find filter for\n * @return Value of Filters or undefined\n */\nexport const useExtractEnumFilterValues = (\n index: string,\n field: string,\n): EnumFilterValue => {\n const filter = useCoreSelector((state: CoreState) =>\n selectIndexedFilterByName(state, index, field),\n );\n return filter ? extractEnumFilterValue(filter) : [];\n};\n\nexport const useExtractRangeFilterValues = (\n index: string,\n field: string,\n): FromToRange<string | number> | undefined => {\n const filter = useCoreSelector((state: CoreState) =>\n selectIndexedFilterByName(state, index, field),\n );\n return filter ? extractRangeValues(filter) : undefined;\n};\n\nexport const useFieldNameToTitle = () => {\n const fieldToTitle = useCallback((field: string, sections?: number) => {\n return field === 'genes.gene_id'\n ? 'Mutated Gene'\n : fieldNameToTitle(field, sections);\n }, []);\n\n return fieldToTitle;\n};\n","export const DEFAULT_VISIBLE_ITEMS = 6;\nconst RANGE_DECIMAL_PRECISION = 1;\n\nexport const DEFAULT_MINIMUM = 0;\nexport const DEFAULT_MAXIMUM = 100;\n\nexport const BAD_DATA_MESSAGE = 'No data for this field';\n\nexport const DAYS_IN_YEAR = 365.25;\n","import React from 'react';\nimport {\n SegmentedControl as MantineSegmentedControl,\n SegmentedControlProps as MantineSegmentedControlProps,\n} from '@mantine/core';\n\ntype SegmentedControlProps = MantineSegmentedControlProps & {\n readonly padding?: number;\n};\n\nconst SegmentedControl: React.FC<SegmentedControlProps> = (props) => {\n return (\n <MantineSegmentedControl\n classNames={{\n root: 'bg-base-max h-fit p-0',\n indicator: 'opacity-0',\n control:\n 'z-0 rounded-none border-0 [&:nth-child(2)>label]:rounded-l-md [&:last-child>label]:rounded-r-md [&:last-child>label]:border-r-1',\n label: `${\n props?.padding ? `p-${props.padding}` : 'p-0'\n } text-primary font-semibold data-active:text-base-max data-active:bg-primary data-disabled:bg-base-lightest data-disabled:text-base-lighter\n border-1 border-r-0 !border-primary rounded-none data-disabled:!border-base-lighter`,\n }}\n {...props}\n />\n );\n};\n\nexport default SegmentedControl;\n","import React from 'react';\nimport {\n MdAddCircle as MoreIcon,\n MdRemoveCircle as LessIcon,\n} from 'react-icons/md';\nimport tw from 'tailwind-styled-components';\n\nexport const ExpanderLabel = tw.div`\ntext-accent-content-darker\np-1\nfont-bold\ncursor-pointer\ntext-xs\nfont-content\n`;\n\ninterface FacetExpanderProps {\n readonly remainingValues: number;\n readonly isGroupExpanded: boolean;\n readonly onShowChanged: (v: boolean) => void;\n}\n\n/**\n * Component which manages the compact/expanded state of a FacetCard\n * @param remainingValues - number of remaining values when compact \"show 4\"\n * @param isGroupExpanded - true if expanded, false if compact\n * @param onShowChanged - callback to call when the expand/compact button is clicked\n */\nconst FacetExpander: React.FC<FacetExpanderProps> = ({\n remainingValues,\n isGroupExpanded,\n onShowChanged,\n}: FacetExpanderProps) => {\n return (\n <div\n className={`mt-3 flex flex-row justify-end ${\n remainingValues > 0 && 'border-t-2'\n } p-1.5`}\n >\n {remainingValues > 0 && !isGroupExpanded ? (\n <button\n onClick={() => onShowChanged(!isGroupExpanded)}\n data-testid=\"plus-icon\"\n >\n <div className=\"flex flex-row flex-nowrap items-center \">\n <MoreIcon\n className=\"text-accent\"\n key=\"show-more\"\n size=\"1rem\"\n aria-hidden=\"true\"\n />\n <ExpanderLabel>{remainingValues} more</ExpanderLabel>\n </div>\n </button>\n ) : isGroupExpanded ? (\n <button\n onClick={() => onShowChanged(!isGroupExpanded)}\n data-testid=\"minus-icon\"\n >\n <div className=\"flex flex-row flex-nowrap items-center\">\n <LessIcon\n className=\"text-accent\"\n key=\"show-less\"\n size=\"1rem\"\n onClick={() => onShowChanged(!isGroupExpanded)}\n aria-hidden=\"true\"\n />\n <ExpanderLabel>show less</ExpanderLabel>\n </div>\n </button>\n ) : null}\n </div>\n );\n};\n\nexport default FacetExpander;\n","import { ClearFacetFunction, EnumOperandValue, FromToRange, UpdateFacetFilterFunction, } from '../types';\nimport { GreaterThan, GreaterThanOrEquals, LessThan, LessThanOrEquals, NumericFromTo, Operation, } from '@gen3/core';\nimport { NumericUnits, RangeBucketElement } from './types';\nimport { DAYS_IN_YEAR } from '../constants';\n\nexport const DEFAULT_VISIBLE_ITEMS = 6;\nconst RANGE_DECIMAL_PRECISION = 1;\n\nexport const symmetricalRound = (x: number): number =>\n x < 0 ? Math.round(Math.abs(x)) * -1 : Math.round(x);\n\nexport const getLowerAgeYears = (days: number): number =>\n symmetricalRound(days / DAYS_IN_YEAR);\nexport const getLowerAgeFromYears = (years: number): number =>\n symmetricalRound(years * DAYS_IN_YEAR);\n\nexport const buildRangeOperator = <T extends string | number>(\n field: string,\n rangeData: FromToRange<T>,\n): Operation | undefined => {\n // couple of different cases\n // * no from/to return undefined\n if (rangeData.from === undefined && rangeData.to === undefined)\n return undefined;\n\n const fromOperation: GreaterThan | GreaterThanOrEquals | undefined =\n rangeData.from !== undefined && rangeData.fromOp !== undefined\n ? {\n field: field,\n operator: rangeData.fromOp,\n operand: rangeData.from,\n }\n : undefined;\n const toOperation: LessThan | LessThanOrEquals | undefined =\n rangeData.to !== undefined && rangeData.toOp !== undefined\n ? {\n field: field,\n operator: rangeData.toOp,\n operand: rangeData.to,\n }\n : undefined;\n\n if (fromOperation && toOperation)\n return { operator: 'and', operands: [fromOperation, toOperation] };\n if (fromOperation) return fromOperation;\n return toOperation;\n};\n\n/**\n * Given an operation, determine if range is open or closed and extract\n * the range values and operands as a NumericRange\n * @param filter - operation to test\n */\nexport const extractRangeValues = <T extends string | number>(\n filter?: Operation,\n): FromToRange<T> | undefined => {\n if (filter !== undefined) {\n switch (filter.operator) {\n case '>':\n case '>=':\n return {\n from:\n typeof filter.operand === 'number' ||\n typeof filter.operand === 'string'\n ? (filter.operand as T)\n : undefined,\n fromOp: filter.operator,\n };\n case '<':\n case '<=':\n return {\n to:\n typeof filter.operand === 'number' ||\n typeof filter.operand === 'string'\n ? (filter.operand as T)\n : undefined,\n toOp: filter.operator,\n };\n case 'and': {\n const a = extractRangeValues<T>(filter.operands[0]);\n const b = extractRangeValues<T>(filter.operands[1]);\n return { ...a, ...b };\n }\n default:\n return undefined;\n }\n } else {\n return undefined;\n }\n};\n\nexport const updateFacetEnum = (\n fieldName: string,\n values: EnumOperandValue,\n updateFacetFilters: UpdateFacetFilterFunction,\n clearFilters: ClearFacetFunction,\n): void => {\n if (values === undefined) return;\n if (values.length > 0) {\n // TODO: Assuming Includes by default but this might change to Include|Excludes\n updateFacetFilters(fieldName, {\n operator: 'in',\n field: fieldName,\n operands: values,\n });\n }\n // no values remove the filter\n else {\n clearFilters(fieldName);\n }\n};\n\n/**\n * returns the range [from to] for a \"bucket\"\n * @param x - current bucket index\n * @param units - custom units for this range: \"years\" or \"days\"\n * @param minimum - starting value of range must be in years\n */\nconst buildDayYearRangeBucket = (\n x: number,\n units: string,\n minimum: number,\n queryInYears: boolean = false,\n): RangeBucketElement => {\n const from = minimum + x * 10; // in years\n const to = minimum + (x + 1) * 10;\n const fromDays = symmetricalRound(from * DAYS_IN_YEAR);\n const toDays = symmetricalRound(to * DAYS_IN_YEAR);\n const fromLabel = (units === 'years' ? from : fromDays).toFixed(0);\n const toLabel = (units === 'years' ? to : toDays).toFixed(0);\n return {\n queryKey: `range_${x}`,\n from: queryInYears ? from : fromDays,\n to: queryInYears ? to : toDays,\n key: `${(queryInYears ? from : fromDays).toFixed(\n RANGE_DECIMAL_PRECISION,\n )}-${(queryInYears ? to : toDays).toFixed(RANGE_DECIMAL_PRECISION)}`,\n label: `\\u2265 ${Number(fromLabel)?.toLocaleString()} to < ${Number(\n toLabel,\n )?.toLocaleString()} ${units}`,\n };\n};\n\n/**\n * returns 10 value range from to for a \"bucket\"\n * @param x - current bucket index\n * @param units - string to append to label\n * @param minimum - staring value of range\n * @param fractionDigits - number of values to the right of the decimal point\n */\nconst build10UnitRange = (\n x: number,\n units: string,\n minimum: number,\n): RangeBucketElement => {\n const from = minimum + x * 10;\n const to = minimum + (x + 1) * 10;\n return {\n queryKey: `range_${x}`,\n from: from,\n to: to,\n key: `${from.toFixed(RANGE_DECIMAL_PRECISION)}-${to.toFixed(\n RANGE_DECIMAL_PRECISION,\n )}`,\n label: `\\u2265 ${from} to < ${to} ${units}`,\n };\n};\n\n/**\n * Builds a Dictionary like object contain the range and label for each \"bucket\" in the range\n * @param numBuckets - number of buckets to create\n * @param units - units such as days or percent\n * @param minimum - start value of range\n * @param rangeFunction - function to compute range boundaries\n */\nconst buildRanges = (\n numBuckets: number,\n units: string,\n minimum: number,\n queryInYears: boolean,\n rangeFunction: (\n index: number,\n units: string,\n startValue: number,\n conversion: boolean,\n ) => RangeBucketElement,\n): Record<string, RangeBucketElement> => {\n // build the range for the useRangeFacet call\n return [...Array(numBuckets)]\n .map((_x, i) => {\n return rangeFunction(i, units, minimum, queryInYears);\n })\n .reduce(\n (r, x) => {\n r[x.key] = x;\n return r;\n },\n {} as Record<string, RangeBucketElement>,\n );\n};\n/**\n * Builds a Dictionary like object contain the range and label for each \"bucket\" in the range\n * @param numBuckets - number of buckets to create\n * @param units - units such as days or percent\n * @param minimum - start value of range\n * @param conversion - if this is a conversion of a year value to days\n */\nexport const buildRangeBuckets = (\n numBuckets: number,\n units: NumericUnits,\n minimum: number,\n queryInYears: boolean,\n): [Record<string, RangeBucketElement>, ReadonlyArray<NumericFromTo>] => {\n const RangeBuilder = {\n days: {\n builder: buildDayYearRangeBucket,\n label: 'days',\n startRange: symmetricalRound(minimum / DAYS_IN_YEAR), // convert to years\n },\n years: {\n builder: buildDayYearRangeBucket,\n label: 'years',\n startRange: symmetricalRound(minimum / DAYS_IN_YEAR), // convert to years\n },\n percent: {\n builder: build10UnitRange,\n label: '%',\n startRange: minimum, // no conversion\n },\n year: {\n builder: build10UnitRange,\n label: '',\n startRange: minimum, // no conversion\n },\n };\n\n const bucketEntries = buildRanges(\n numBuckets,\n RangeBuilder[units].label,\n RangeBuilder[units].startRange,\n queryInYears,\n RangeBuilder[units].builder,\n );\n // build ranges for continuous range query\n const r = Object.keys(bucketEntries).map((x) => {\n return { from: bucketEntries[x].from, to: bucketEntries[x].to };\n });\n return [bucketEntries, r];\n};\n\nexport const adjustYearsToDaysIfUnitsAreYears = (\n value: number,\n units: string,\n queryInYears: boolean,\n): number | undefined =>\n units == 'years' && !queryInYears ? getLowerAgeFromYears(value) : value;\n\nexport const adjustDaysToYearsIfUnitsAreYears = (\n value: number,\n units: string,\n queryInYears: boolean,\n): number | undefined => {\n return units === 'years' && !queryInYears ? getLowerAgeYears(value) : value;\n};\n\nexport const leapThenPair = (years: number, days: number): number[] =>\n days === 365 ? [years + 1, 0] : [years, days];\n\nexport const ageInYearsAndDaysFromDays = (ageInDays: number): number[] =>\n leapThenPair(\n Math.floor(ageInDays / DAYS_IN_YEAR),\n Math.ceil(ageInDays % DAYS_IN_YEAR),\n );\n\n// https://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript\n/**\n * Returns a formatted timestamp string based on the provided date or the current date.\n *\n * @param options - An object containing the following optional parameters:\n * @param date - A Date object to format. If not provided, uses the current date.\n * @param includeTimes - Boolean to include time in the output. Defaults to false.\n * @returns A timestamp in the format 'YYYY-MM-DD' if includeTimes is false, or 'YYYY-MM-DD.HHMMSS' if true.\n * If date is null it returns undefined\n *\n * Uses the Swedish (\"sv-SE\") locale for consistent formatting (YYYY-MM-DD HH:MM:SS).\n * Explicitly sets the time zone to the system's local time zone.\n */\nexport function getFormattedTimestamp(\n options: {\n date?: Date | null;\n includeTimes?: boolean;\n } = {},\n): string | undefined {\n const { date = new Date(), includeTimes = false } = options;\n if (date === null) return undefined;\n\n const formatOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n };\n\n if (includeTimes) {\n Object.assign(formatOptions, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n }\n\n const formattedDate = date.toLocaleString('sv-SE', formatOptions);\n\n if (includeTimes) {\n return formattedDate.replace(' ', '.').replace(/[:]/g, '');\n } else {\n return formattedDate;\n }\n}\n\n/**\n * Given a range compute the key if possibly matches a predefined range\n * otherwise classify as \"custom\"\n * @param range - Range to classify\n * @param precision - number of values after .\n */\nexport const classifyRangeType = (\n range?: FromToRange<number>,\n precision = 1,\n): string => {\n if (range === undefined) return 'custom';\n if (\n range.fromOp == '>=' &&\n range.toOp == '<' &&\n range.from !== undefined &&\n range.to !== undefined\n )\n // builds a range \"key\"\n return `${range.from.toFixed(precision)}-${range.to.toFixed(precision)}`;\n\n return 'custom';\n};\n\nexport const buildRangeLabelsAndValues = (\n bucketRanges: Record<string, any>,\n rangeData?: Record<string, string | number>,\n showZero = true,\n) => {\n\n return Object.entries(bucketRanges).reduce(\n (b, [x, val], index: number) => {\n const count = rangeData?.[val.queryKey];\n if (!showZero && !count) return b;\n\n b[x] = {\n ...bucketRanges[x],\n queryKey: `range_${index}`,\n key: x,\n value: count,\n valueLabel: count ? `${count.toLocaleString()}` : undefined,\n };\n return b;\n },\n {} as Record<string, RangeBucketElement>,\n );\n};\n","import React, { useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { NumberInput, Radio } from '@mantine/core';\nimport { useForm } from '@mantine/form';\nimport SegmentedControl from '../..//SegmentedControl';\nimport {\n ClearFacetHook,\n FromToRange,\n RangeFromOp,\n RangeToOp,\n UpdateFacetFilterHook,\n} from '../types';\nimport {\n adjustDaysToYearsIfUnitsAreYears,\n adjustYearsToDaysIfUnitsAreYears,\n buildRangeOperator,\n getLowerAgeYears,\n} from './utils';\nimport { WarningMessageIcon, WarningTriangleIcon } from '../../../types/icons';\nimport { DAYS_IN_YEAR } from '../constants';\n\ninterface FromToProps {\n readonly minimum: number;\n readonly maximum: number;\n readonly units?: string;\n readonly field: string;\n readonly useClearFilter: ClearFacetHook;\n readonly useUpdateFacetFilters: UpdateFacetFilterHook;\n readonly values?: FromToRange<number>;\n readonly changedCallback?: () => void;\n readonly clearValues?: boolean;\n readonly rangeDatatype?: string;\n readonly radioSelected?: boolean;\n readonly onSelectRadio?: () => void;\n}\n\nconst WARNING_DAYS = Math.floor(90 * DAYS_IN_YEAR);\n\nconst applyButtonClasses = `\n flex\n flex-row\n subpixel-antialiased\n rounded-md\n border-1\n border-primary\n text-primary\n font-montserrat\n font-medium\n text-sm\n transition\n w-full\n justify-center\n align-center\n py-1\n bg-base-max\n hover:bg-primary\n hover:text-base-max\n`;\n\ninterface WarningOrErrorProps {\n hasErrors: boolean;\n isWarning: boolean;\n lowerUnitRange: number;\n upperUnitRange: number;\n}\n\nconst WarningOrError: React.FC<WarningOrErrorProps> = ({\n hasErrors,\n isWarning,\n lowerUnitRange,\n upperUnitRange,\n}: WarningOrErrorProps) => (\n <div className=\"flex flex-col gap-1 my-1 text-xs\">\n {hasErrors ? (\n <div className=\"text-utility-error flex gap-2\">\n <div>\n <WarningMessageIcon size=\"1rem\" />\n </div>\n <span>\n Please enter a number between {lowerUnitRange} and {upperUnitRange}.\n </span>\n </div>\n ) : null}\n {isWarning ? (\n <div className=\"bg-utility-warning border-utility-warning flex gap-2 p-1\">\n <div>\n <WarningTriangleIcon size=\"1rem\" />\n </div>\n <span>\n {`For health information privacy concerns, individuals over 89 will all appear as 90 years old. For more information, `}\n <a\n href=\"https://gdc.cancer.gov/about-gdc/gdc-faqs#collapsible-item-618-question\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n className=\"underline\"\n >\n click here\n </a>\n .\n </span>\n </div>\n ) : null}\n </div>\n);\n\n/**\n * A Component which manages a range. The From/To values are managed by a numeric text entry\n * @param field - field for this range\n * @param minimum - range minimum value\n * @param maximum - range maximum value\n * @param values - the current value of the range\n * @param changedCallback - function called when FromTo values change\n * @param units - string representation of unit: \"days\" | \"years\" | \"year\", \"percent\" | \"numeric\"\n * @param useClearFilter - hook to clear (e.x. reset) field (facet) filters\n * @param clearValues - prop set to true to clear FromTo input fields\n * @param useUpdateFacetFilters - hook to update facet filters with new values\n */\nconst FromTo: React.FC<FromToProps> = ({\n field,\n useClearFilter,\n useUpdateFacetFilters,\n minimum,\n maximum,\n values,\n changedCallback = () => null,\n units = '',\n clearValues = undefined,\n rangeDatatype = undefined,\n radioSelected = false,\n onSelectRadio = undefined,\n}: FromToProps) => {\n const [isWarning, setIsWarning] = useState(false);\n const clearFilter = useClearFilter();\n const updateFacetFilters = useUpdateFacetFilters();\n const unitsLabel = '%' != units ? ` ${units}` : '%';\n const queryInYears = rangeDatatype === 'age_in_years';\n const lowerUnitRange =\n units !== 'years' || queryInYears ? minimum : getLowerAgeYears(minimum);\n const upperUnitRange =\n units !== 'years' || queryInYears ? maximum : getLowerAgeYears(maximum);\n\n const form = useForm({\n initialValues: {\n fromOp: values?.fromOp ?? '>=',\n fromValue:\n values?.from !== undefined\n ? adjustDaysToYearsIfUnitsAreYears(values.from, units, queryInYears)\n : undefined,\n toOp: values?.toOp ?? '<',\n toValue:\n values?.to !== undefined\n ? adjustDaysToYearsIfUnitsAreYears(values.to, units, queryInYears)\n : undefined,\n },\n validate: {\n fromValue: (value: number | undefined) => {\n if (\n value !== undefined &&\n (value < lowerUnitRange || value > upperUnitRange)\n ) {\n return true;\n }\n\n return false;\n },\n toValue: (value: number | undefined) => {\n if (\n value !== undefined &&\n (value < lowerUnitRange || value > upperUnitRange)\n ) {\n return true;\n }\n\n return false;\n },\n },\n });\n\n useDeepCompareEffect(() => {\n form.setValues({\n fromOp: values?.fromOp ?? '>=',\n fromValue:\n values?.from !== undefined\n ? adjustDaysToYearsIfUnitsAreYears(values.from, units, queryInYears)\n : undefined,\n toOp: values?.toOp ?? '<',\n toValue:\n values?.to !== undefined\n ? adjustDaysToYearsIfUnitsAreYears(values.to, units, queryInYears)\n : undefined,\n });\n // https://github.com/mantinedev/mantine/issues/5338\n }, [values, units]);\n\n useDeepCompareEffect(() => {\n if (clearValues) {\n form.reset();\n }\n // https://github.com/mantinedev/mantine/issues/5338\n }, [clearValues]);\n\n useDeepCompareEffect(() => {\n const fromValueInDays =\n form.values.fromValue !== undefined\n ? adjustYearsToDaysIfUnitsAreYears(\n form.values.fromValue,\n units,\n queryInYears,\n )\n : undefined;\n const toValueInDays =\n form.values.toValue !== undefined\n ? adjustYearsToDaysIfUnitsAreYears(\n form.values.toValue,\n units,\n queryInYears,\n )\n : undefined;\n if (['diagnoses.age_at_diagnosis'].includes(field)) {\n setIsWarning(\n (toValueInDays !== undefined && toValueInDays >= WARNING_DAYS) ||\n (fromValueInDays !== undefined && fromValueInDays >= WARNING_DAYS),\n );\n }\n }, [field, form.values.toValue, form.values.fromValue, units, queryInYears]);\n\n /**\n * Handle Apply button which will add/update/remove a range filter to the field.\n * In the case of units == years the value is converted to days as needed\n * for the filters\n */\n const handleApply = () => {\n if (form.validate().hasErrors) return;\n const data = {\n fromOp: form.values.fromOp as RangeFromOp,\n from:\n form.values.fromValue !== undefined\n ? adjustYearsToDaysIfUnitsAreYears(\n form.values.fromValue,\n units,\n queryInYears,\n )\n : undefined,\n toOp: form.values.toOp as RangeToOp,\n to:\n form.values.toValue !== undefined\n ? adjustYearsToDaysIfUnitsAreYears(\n form.values.toValue,\n units,\n queryInYears,\n )\n : undefined,\n };\n const rangeFilters = buildRangeOperator(field, data);\n if (rangeFilters === undefined) {\n clearFilter(field);\n } else {\n updateFacetFilters(field, rangeFilters);\n }\n };\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"flex gap-2 justify-items-stretch items-center\">\n {onSelectRadio !== undefined && (\n <Radio\n aria-label=\"custom range\"\n id={`${field}_custom`}\n name={`${field}_range_selection`}\n checked={radioSelected}\n onChange={onSelectRadio}\n color=\"accent\"\n />\n )}\n <div className=\"flex flex-col grow mb-1 text-base-contrast-max bg-base-lightest rounded-md p-2\">\n <fieldset className=\"flex flex-col gap-y-1 text-sm\">\n <legend className=\"sr-only\">Numeric from/to filters</legend>\n <div className=\"flex gap-2 justify-end font-content\">\n <div className=\" flex items-center justify-end font-bold font-montserrat h-8 w-16\">\n From\n </div>\n <div className={`flex flex-nowrap gap-2 grow`}>\n <SegmentedControl\n size=\"sm\"\n className=\"w-16 h-10\"\n value={form.values.fromOp}\n onChange={(value) => {\n form.setFieldValue('fromOp', value as RangeFromOp);\n changedCallback();\n }}\n data={[\n { label: '\\u2265', value: '>=' },\n { label: '>', value: '>' },\n ]}\n aria-label=\"select greater and equal or greater than\"\n padding={1.5}\n />\n <NumberInput\n {...form.getInputProps('fromValue')}\n value={form.values.fromValue ?? ''}\n data-testid=\"textbox-input-from-value\"\n className=\"text-sm grow\"\n placeholder={`Min: ${lowerUnitRange}${unitsLabel} `}\n // units are always days\n onChange={(value) => {\n if (value === '') {\n form.setFieldValue('fromValue', undefined);\n } else {\n form.setFieldValue('fromValue', Number(value));\n }\n changedCallback();\n }}\n error={form?.errors?.fromValue}\n hideControls\n aria-label=\"input from value\"\n />\n </div>\n </div>\n <div className=\"flex gap-2 justify-end font-content pt-1\">\n <div className=\" flex items-center justify-end font-bold font-montserrat h-8 w-16\">\n To\n </div>\n <div className={`flex flex-nowrap gap-2 grow`}>\n <SegmentedControl\n size=\"sm\"\n className=\"w-16 h-10\"\n value={form.values.toOp}\n onChange={(value) => {\n form.setFieldValue('toOp', value as RangeToOp);\n changedCallback();\n }}\n data={[\n { label: '\\u2264', value: '<=' },\n { label: '<', value: '<' },\n ]}\n aria-label=\"select less or less than and equal\"\n padding={1.5}\n />\n <NumberInput\n {...form.getInputProps('toValue')}\n value={form.values.toValue ?? ''}\n data-testid=\"textbox-input-to-value\"\n className=\"text-sm grow\"\n placeholder={`Max: ${upperUnitRange}${unitsLabel} `}\n onChange={(value) => {\n if (value === '') {\n form.setFieldValue('toValue', undefined);\n } else {\n form.setFieldValue('toValue', Number(value));\n }\n changedCallback();\n }}\n error={form?.errors?.toValue}\n hideControls\n aria-label=\"input to value\"\n />\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n {Object.keys(form.errors).length > 0 || isWarning ? (\n <WarningOrError\n hasErrors={Object.keys(form.errors).length > 0}\n isWarning={isWarning}\n lowerUnitRange={lowerUnitRange}\n upperUnitRange={upperUnitRange}\n />\n ) : null}\n <div className=\"flex items-stretch w-100 pt-1\">\n <button className={applyButtonClasses} onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n );\n};\n\nexport default FromTo;\n","import { Button } from '@mantine/core';\nimport {\n PiCaretUpDownFill as Selector,\n PiCaretDownFill as SortDesIcon,\n PiCaretUpFill as SortAscIcon,\n} from 'react-icons/pi';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { SortType } from './types';\n\ninterface FacetSortPanelProps {\n sortType: SortType;\n valueLabel: string;\n setSort: (sort: SortType) => void;\n field: string;\n}\n\nconst sortTypeToAriaDescription = (\n sortTypeAndDirection: SortType,\n valueLabel: string,\n field: string,\n) => {\n if (sortTypeAndDirection.type === 'alpha') {\n return sortTypeAndDirection.direction === 'asc'\n ? `The ${field} names are now sorted alphabetically ascending`\n : `The ${field} names are now sorted alphabetically descending`;\n } else {\n return sortTypeAndDirection.direction === 'asc'\n ? `The ${field} ${valueLabel} are now sorted numerically ascending`\n : `The ${field} ${valueLabel} are now sorted numerically descending`;\n }\n};\n\n/**\n * FacetCards \"sort\" header supporting sort by A-Z or by Value both ascending and descending\n * @param sortType - current sort type\n * @param valueLabel - Value labels, typically \"case\" \"file\"\n * @param setSort - sets the sort type and direction\n * @param field - specifies the facet table name\n */\nconst FacetSortPanel: React.FC<FacetSortPanelProps> = ({\n sortType,\n valueLabel,\n setSort,\n field,\n}: FacetSortPanelProps) => {\n const liveRegionRef = useRef<any>(null);\n const [sortingStatus, setSortingStatus] = useState('');\n useEffect(() => {\n if (sortingStatus && liveRegionRef?.current) {\n liveRegionRef.current.textContent = sortingStatus;\n }\n }, [sortingStatus]);\n\n const [NameSortIcon, nameIconSize] =\n sortType.type === 'alpha'\n ? sortType.direction === 'asc'\n ? [SortAscIcon, '0.75rem']\n : [SortDesIcon, '0.75rem']\n : [Selector, '1rem'];\n\n const [ValueSortIcon, valueIconSize] =\n sortType.type === 'value'\n ? sortType.direction === 'asc'\n ? [SortAscIcon, '0.75rem']\n : [SortDesIcon, '0.75rem']\n : [Selector, '1rem'];\n\n return (\n <div className=\"flex flex-row items-center justify-between flex-wrap py-1 px-2 mb-1 border-b-2\">\n <Button\n className=\"pl-0 ml-0 api-hovered:accent\"\n variant=\"transparent\"\n size=\"compact-xs\"\n color=\"base-contrast.5\"\n onClick={() => {\n const direction =\n sortType.type === 'alpha' && sortType.direction === 'asc'\n ? 'dsc'\n : 'asc';\n const sortObj: SortType = {\n type: 'alpha',\n direction,\n };\n setSort(sortObj);\n setSortingStatus(sortTypeToAriaDescription(sortObj, 'Name', field));\n }}\n rightSection={<NameSortIcon size={nameIconSize} aria-hidden=\"true\" />}\n aria-label=\"Sort name alphabetically\"\n >\n Name\n </Button>\n <Button\n className=\"pr-0 mr-0\"\n variant=\"transparent\"\n size=\"compact-xs\"\n color=\"base-contrast.5\"\n onClick={() => {\n const direction =\n sortType.type === 'value' && sortType.direction === 'asc'\n ? 'dsc'\n : 'asc';\n const sortObj: SortType = {\n type: 'value',\n direction,\n };\n setSort(sortObj);\n setSortingStatus(\n sortTypeToAriaDescription(sortObj, valueLabel, field),\n );\n }}\n rightSection={<ValueSortIcon size={valueIconSize} aria-hidden=\"true\" />}\n aria-label={`Sort ${valueLabel} numerically`}\n >\n {valueLabel}\n </Button>\n\n <span\n id={`${field}-liveRegion`}\n aria-live=\"polite\"\n ref={liveRegionRef}\n className=\"sr-only\"\n />\n </div>\n );\n};\n\nexport default FacetSortPanel;\n","import React, { useState } from 'react';\nimport { Radio } from '@mantine/core';\nimport FacetSortPanel from '../FacetSortPanel';\nimport { FromToRange, SortType, UpdateFacetFilterFunction } from '../types';\nimport { RangeBucketElement } from './types';\nimport { buildRangeOperator } from './utils';\n\ninterface RangeValueSelectorProps {\n readonly itemsToShow: number;\n readonly field: string;\n readonly valueLabel?: string;\n readonly rangeLabelsAndValues: Record<string, RangeBucketElement>;\n selected: string;\n setSelected: (value: string) => void;\n useUpdateFacetFilters: () => UpdateFacetFilterFunction;\n}\n\n/**\n * Create a list of radio buttons where each line\n * represents bucket for a range \\> \"from\" \\<= \"to\"\n * @param field - facet managed by this component\n * @param valueLabel - string representing the datatype of values (e.g. \"Cases\")\n * @param selected - which range, if any, is selected\n * @param setSelected - function to handle selected range\n * @param rangeLabelsAndValues - list of range keys, labels and values\n * @param itemsToShow - number of ranges to render\n * @param useUpdateFacetFilters - hook to update facet filters with new values\n */\nconst RangeValueSelector: React.FC<RangeValueSelectorProps> = ({\n field,\n valueLabel,\n selected,\n setSelected,\n rangeLabelsAndValues,\n itemsToShow,\n useUpdateFacetFilters,\n}: RangeValueSelectorProps) => {\n const updateFilters = useUpdateFacetFilters();\n\n // toggle to handle sorting by value vs. label\n const [sortType, setSortType] = useState<SortType>({\n type: 'alpha',\n direction: 'dsc',\n });\n\n // process when range is selected\n const handleSelection = (rangeKey: string) => {\n const data: FromToRange<number> = {\n from: rangeLabelsAndValues[rangeKey].from,\n to: rangeLabelsAndValues[rangeKey].to,\n fromOp: '>=',\n toOp: '<',\n };\n const rangeFilters = buildRangeOperator(field, data);\n\n if (rangeFilters) {\n updateFilters(field, rangeFilters);\n }\n setSelected(rangeKey);\n };\n\n if (rangeLabelsAndValues === undefined) return null;\n\n return (\n <div className=\"flex flex-col px-1\">\n {Object.keys(rangeLabelsAndValues).length > 1 ? (\n <>\n {valueLabel && (\n <FacetSortPanel\n sortType={sortType}\n valueLabel={valueLabel}\n setSort={setSortType}\n field={field}\n />\n )}\n </>\n ) : null}\n <fieldset className=\"mt-1\">\n <legend className=\"sr-only\">Numeric range filters</legend>\n {Object.keys(rangeLabelsAndValues)\n .slice(0, itemsToShow)\n .sort(\n sortType.type === 'value'\n ? (a, b) =>\n sortType.direction === 'dsc'\n ? (rangeLabelsAndValues[b].value || 0) -\n (rangeLabelsAndValues[a].value || 0)\n : (rangeLabelsAndValues[a].value || 0) -\n (rangeLabelsAndValues[b].value || 0)\n : (a, b) =>\n sortType.direction === 'dsc'\n ? rangeLabelsAndValues[b].from -\n rangeLabelsAndValues[a].from\n : rangeLabelsAndValues[a].from -\n rangeLabelsAndValues[b].from,\n )\n .map((rangeKey, i) => {\n return (\n <div\n key={`${field}_${rangeKey}`}\n className=\"flex justify-start items-center gap-2 form-check mb-1 font-content text-sm\"\n >\n <Radio\n id={`${field}_${rangeKey}_${i}`}\n name={`${field}_range_selection`}\n aria-label={rangeLabelsAndValues[rangeKey].valueLabel}\n value={rangeKey}\n checked={rangeKey === selected}\n color=\"accent\"\n onChange={() => handleSelection(rangeKey)}\n data-testid={`checkbox-${rangeLabelsAndValues[rangeKey].label}`}\n />\n <span>{rangeLabelsAndValues[rangeKey].label}</span>\n <span\n data-testid={`text-${rangeLabelsAndValues[rangeKey].label}`}\n className=\"ml-auto\"\n >\n {rangeLabelsAndValues[rangeKey].valueLabel}\n </span>\n </div>\n );\n })}\n </fieldset>\n </div>\n );\n};\n\nexport default RangeValueSelector;\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { LoadingOverlay } from '@mantine/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport FacetExpander from '../FacetExpander';\nimport {\n buildRangeBuckets,\n buildRangeLabelsAndValues,\n classifyRangeType,\n DEFAULT_VISIBLE_ITEMS,\n extractRangeValues,\n} from './utils';\nimport FromTo from './FromTo';\nimport RangeValueSelector from './RangeValueSelector';\nimport { BAD_DATA_MESSAGE } from '../constants';\nimport { NumericFacetProps, NumericUnits } from './types';\n\ntype RangeInputWithPrefixedRangesProps = NumericFacetProps & {\n readonly numBuckets: number;\n readonly units: NumericUnits;\n readonly showZero?: boolean;\n readonly isFacetView?: boolean;\n readonly setHasData?: (hasData: boolean) => void;\n};\n\nconst RangeInputWithPrefixedRanges: React.FC<\n RangeInputWithPrefixedRangesProps\n> = ({\n field,\n hooks,\n units,\n numBuckets,\n minimum = 0,\n maximum = 0,\n valueLabel,\n rangeDatatype,\n showZero = false,\n clearValues = undefined,\n isFacetView = true,\n setHasData = () => null,\n queryOptions,\n Chart,\n}) => {\n const [isGroupExpanded, setIsGroupExpanded] = useState(false); // handles the expanded group\n\n // get the current filter for this facet\n const filter = hooks.useGetFacetFilters(field);\n // const totalCount = hooks.useTotalCounts(queryOptions);\n\n // giving the filter value, extract the From/To values and\n // build it's key\n const [filterValues, filterKey] = useMemo(() => {\n const values = extractRangeValues<number>(filter);\n const key = classifyRangeType(values);\n return [values, key];\n }, [filter]);\n\n const queryInYears = rangeDatatype === 'age_in_years';\n // build the range for the useRangeFacet and the facet query\n const [bucketRanges, ranges] = useMemo(() => {\n return buildRangeBuckets(numBuckets, units, minimum, queryInYears);\n }, [minimum, numBuckets, units, queryInYears]);\n\n const [isCustom, setIsCustom] = useState(filterKey === 'custom'); // in custom Range Mode\n const [selectedRange, setSelectedRange] = useState(filterKey); // the current selected range\n\n const {\n data: rangeData,\n isSuccess = false,\n isFetching,\n error,\n } = hooks.useGetFacetData(field, ranges);\n const rangeLabelsAndValues = buildRangeLabelsAndValues(\n bucketRanges,\n rangeData,\n showZero,\n );\n const chartData = useMemo(\n () =>\n Object.fromEntries(\n Object.values(rangeLabelsAndValues).map((range) => [\n range.label,\n range.value || 0,\n ]),\n ),\n [rangeLabelsAndValues],\n );\n\n const resetToCustom = useCallback(() => {\n if (!isCustom) {\n setIsCustom(true);\n setSelectedRange('custom');\n }\n }, [isCustom]);\n\n useEffect(() => {\n if (!isCustom)\n if (Object.keys(rangeLabelsAndValues).includes(filterKey))\n setSelectedRange(filterKey);\n else resetToCustom();\n }, [filterKey, isCustom, rangeLabelsAndValues, resetToCustom]);\n\n const totalBuckets = Object.keys(rangeLabelsAndValues).length;\n const bucketsToShow = isGroupExpanded ? totalBuckets : DEFAULT_VISIBLE_ITEMS;\n const remainingValues = totalBuckets - bucketsToShow;\n const numberOfBarsToDisplay = isGroupExpanded\n ? Math.min(16, totalBuckets)\n : Math.min(DEFAULT_VISIBLE_ITEMS, totalBuckets);\n\n const onShowModeChanged = () => {\n setIsGroupExpanded(!isGroupExpanded);\n };\n\n // informs the parent component if there is data or no data\n // only used by the DaysOrYears component\n useDeepCompareEffect(() => {\n if (error) {\n setHasData(false);\n } else if (isSuccess && filterValues === undefined && totalBuckets === 0) {\n setHasData(false);\n } else {\n setHasData(true);\n }\n }, [filterValues, isSuccess, setHasData, totalBuckets, error]);\n\n if (error) {\n return <div className=\"m-4 font-content pb-2\">{BAD_DATA_MESSAGE}</div>;\n }\n\n // If no data and no filter values, show the no data message\n // otherwise this facet has some filters set and the custom range\n // should be shown\n if (isSuccess && filterValues === undefined && totalBuckets === 0) {\n return <div className=\"mx-4 font-content pb-2\">{BAD_DATA_MESSAGE}</div>;\n }\n\n return (\n <>\n <LoadingOverlay data-testid=\"loading-spinner\" visible={isFetching} />\n <div className=\"flex flex-col space-y-2 mt-1\">\n <FromTo\n minimum={minimum}\n maximum={maximum}\n values={filterValues}\n field={`${field}`}\n units={units}\n changedCallback={resetToCustom}\n {...hooks}\n clearValues={clearValues}\n rangeDatatype={rangeDatatype}\n radioSelected={selectedRange === 'custom'}\n onSelectRadio={() => {\n setSelectedRange('custom');\n setIsCustom(true);\n }}\n />\n </div>\n <div\n className={\n isFacetView\n ? `flip-card h-full `\n : `flip-card flip-card-flipped h-full`\n }\n >\n <div\n className={`flex flex-col border-t-2 card-face bg-base-max ${\n !isFacetView ? 'invisible' : ''\n }`}\n >\n {totalBuckets == 0 ? (\n <div className=\"mx-4 font-content\">{BAD_DATA_MESSAGE}</div>\n ) : isSuccess ? (\n <RangeValueSelector\n field={`${field}`}\n valueLabel={valueLabel}\n itemsToShow={bucketsToShow}\n rangeLabelsAndValues={rangeLabelsAndValues}\n selected={selectedRange}\n useUpdateFacetFilters={hooks.useUpdateFacetFilters}\n setSelected={(value) => {\n setIsCustom(false); // no longer a customRange\n // this is the only way user interaction\n // can set this to False\n setSelectedRange(value);\n }}\n />\n ) : null}\n {\n <FacetExpander\n remainingValues={remainingValues}\n isGroupExpanded={isGroupExpanded}\n onShowChanged={onShowModeChanged}\n />\n }\n </div>\n <div\n className={`card-face card-back rounded-b-md bg-base-max h-full pb-1 ${\n isFacetView ? 'invisible' : ''\n }`}\n >\n {!isFacetView && totalBuckets > 0 && Chart !== undefined && (\n <Chart\n field={field}\n data={chartData}\n selectedEnums={[]}\n showTitle={false}\n isSuccess={isSuccess}\n valueLabel={valueLabel}\n maxBins={numberOfBarsToDisplay}\n height={\n (numberOfBarsToDisplay == 1\n ? 110\n : numberOfBarsToDisplay == 2\n ? 220\n : numberOfBarsToDisplay == 3\n ? 240\n : numberOfBarsToDisplay * 65 + 10) -\n (isGroupExpanded ? 15 : 0)\n }\n />\n )}\n </div>\n </div>\n </>\n );\n};\n\nexport default RangeInputWithPrefixedRanges;\n","import React, { useState } from 'react';\nimport SegmentedControl from '../..//SegmentedControl';\nimport RangeInputWithPrefixedRanges from './RangeInputWithPrefixedRanges';\nimport { NumericFacetProps, NumericUnits } from './types';\n\nconst DaysOrYears: React.FC<NumericFacetProps> = ({\n field,\n rangeDatatype,\n hooks,\n valueLabel,\n clearValues,\n isFacetView,\n minimum,\n maximum,\n queryOptions,\n Chart,\n}) => {\n const [units, setUnits] = useState('years');\n // no data if true means the Day/Year SegmentedControl should not be rendered.\n // TODO: this is not ideal and perhaps should be refactored\n const [hasData, setHasData] = useState(true);\n const numBuckets = 18;\n\n return (\n <div className=\"flex flex-col w-100 space-y-2 px-2 mt-1 \">\n {hasData && (\n <div className=\"flex flex-col items-stretch w-100 mt-1\">\n <SegmentedControl\n data={[\n { label: 'Days', value: 'days' },\n { label: 'Years', value: 'years' },\n ]}\n value={units}\n color=\"primary\"\n onChange={setUnits}\n padding={2}\n />\n </div>\n )}\n\n <RangeInputWithPrefixedRanges\n units={units as NumericUnits}\n rangeDatatype={rangeDatatype}\n hooks={{ ...hooks }}\n minimum={minimum ?? -32873}\n maximum={maximum ?? 32873}\n numBuckets={numBuckets}\n field={field}\n valueLabel={valueLabel}\n clearValues={clearValues}\n isFacetView={isFacetView}\n setHasData={(value) => setHasData(value)}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n </div>\n );\n};\n\nexport default DaysOrYears;\n","import React from \"react\";\nimport RangeInputWithPrefixedRanges from \"./RangeInputWithPrefixedRanges\";\nimport { NumericFacetProps } from \"./types\";\n\n// Calendar Year\nconst Year: React.FC<NumericFacetProps> = ({\n field,\n hooks,\n valueLabel,\n clearValues,\n minimum = undefined,\n maximum = undefined,\n isFacetView,\n queryOptions,\n Chart,\n}) => {\n const adjMinimum = minimum != undefined ? minimum : 1900;\n const adjMaximum = maximum != undefined ? maximum : 2050;\n const numBuckets = Math.round((adjMaximum - adjMinimum) / 10);\n\n return (\n <div className=\"flex flex-col w-100 space-y-2 px-2 mt-1 \">\n <RangeInputWithPrefixedRanges\n hooks={{ ...hooks }}\n units=\"year\"\n valueLabel={valueLabel}\n minimum={adjMinimum}\n maximum={adjMaximum}\n numBuckets={numBuckets}\n field={field}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n </div>\n );\n};\n\nexport default Year;\n","import React from 'react';\nimport { getLowerAgeYears } from './utils';\nimport RangeInputWithPrefixedRanges from './RangeInputWithPrefixedRanges';\nimport { NumericFacetProps } from './types';\n\nconst Years: React.FC<NumericFacetProps> = ({\n field,\n valueLabel,\n rangeDatatype,\n hooks,\n clearValues,\n minimum = undefined,\n maximum = undefined,\n isFacetView,\n queryOptions,\n Chart,\n}: NumericFacetProps) => {\n // minimum and maximum values if not undefined are in days so need to convert it to years\n const adjMinimum = minimum != undefined ? getLowerAgeYears(minimum) : 0;\n const adjMaximum = maximum != undefined ? getLowerAgeYears(maximum) : 89;\n const numBuckets = Math.round((adjMaximum - adjMinimum) / 10);\n\n return (\n <div className=\"flex flex-col w-100 space-y-2 px-1 mt-1 \">\n <RangeInputWithPrefixedRanges\n valueLabel={valueLabel}\n hooks={{ ...hooks }}\n rangeDatatype={rangeDatatype}\n units=\"years\"\n minimum={adjMinimum}\n maximum={adjMaximum}\n numBuckets={numBuckets}\n field={field}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n </div>\n );\n};\n\nexport default Years;\n","import React from \"react\";\nimport RangeInputWithPrefixedRanges from \"./RangeInputWithPrefixedRanges\";\nimport { NumericFacetProps } from \"./types\";\n\nconst PercentRange: React.FC<NumericFacetProps> = ({\n field,\n valueLabel,\n hooks,\n clearValues,\n minimum = undefined,\n maximum = undefined,\n isFacetView,\n queryOptions,\n Chart,\n}) => {\n const adjMinimum = minimum != undefined ? minimum : 0;\n const adjMaximum = maximum != undefined ? maximum : 100;\n const numBuckets = Math.round((adjMaximum - adjMinimum) / 10);\n\n return (\n <div className=\"flex flex-col w-100 space-y-2 px-2 mt-2\">\n <RangeInputWithPrefixedRanges\n valueLabel={valueLabel}\n hooks={hooks}\n units=\"percent\"\n minimum={adjMinimum}\n maximum={adjMaximum}\n numBuckets={numBuckets}\n field={field}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n </div>\n );\n};\n\nexport default PercentRange;\n","import React from 'react';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { extractRangeValues } from '../utils';\nimport FromTo from './FromTo';\nimport { NumericFacetProps } from './types';\n\nimport { classifyRangeType } from './utils';\n\nconst NumericRangePanel: React.FC<NumericFacetProps> = ({\n field,\n hooks,\n clearValues,\n minimum = undefined,\n maximum = undefined,\n}) => {\n const adjMinimum = minimum != undefined ? minimum : 0;\n const adjMaximum = maximum != undefined ? maximum : 999999;\n\n const filter = hooks.useGetFacetFilters(field);\n const [filterValues] = useDeepCompareMemo(() => {\n const values = extractRangeValues<number>(filter);\n const key = classifyRangeType(values);\n return [values, key];\n }, [filter]);\n\n return (\n <div className=\"px-2 my-2\">\n <FromTo\n field={field}\n minimum={adjMinimum}\n maximum={adjMaximum}\n values={filterValues}\n {...hooks}\n clearValues={clearValues}\n />\n </div>\n );\n};\n\nexport default NumericRangePanel;\n","import tw from 'tailwind-styled-components';\n\nexport const FacetIconButton = tw.button`\ntext-base-max\nfont-bold\npy-2\npx-1\nrounded\ninline-flex\nitems-center\nhover:text-primary-lightest\n`;\n\nexport const controlsIconStyle =\n 'text-secondary-contrast hover:text-secondary-lighter';\n\nexport const FacetText = tw.div`\ntext-secondary-contrast font-heading font-semibold text-sm break-words\n`;\n\nexport const FacetHeader = tw.div`\nflex items-start justify-between items-center flex-nowrap bg-secondary px-1.5 rounded-t-md\n`;\n","import React, { useEffect } from 'react';\nimport { ActionIcon, Badge, Text, Tooltip } from '@mantine/core';\nimport {\n MdFlip as FlipIcon,\n MdSearch as SearchIcon,\n MdClose as CloseIcon,\n MdExpandLess as ExpandLessIcon,\n MdExpandMore as ExpandMoreIcon,\n} from 'react-icons/md';\nimport { FaUndo as UndoIcon } from 'react-icons/fa';\nimport { fieldNameToTitle } from '@gen3/core';\nimport {\n FacetIconButton,\n controlsIconStyle,\n FacetText,\n FacetHeader,\n} from './components';\nimport { FacetCardProps, FacetCommonHooks } from './types';\nimport { Icon } from '@iconify-icon/react';\n\ntype FacetHeaderProps = Pick<\n FacetCardProps<FacetCommonHooks>,\n | 'field'\n | 'description'\n | 'hooks'\n | 'facetName'\n | 'showSearch'\n | 'showFlip'\n | 'dismissCallback'\n | 'isFacetView'\n | 'header'\n | 'sharedWithIndices'\n> & {\n showSettings?: boolean;\n showClearSelection?: boolean;\n toggleFlip?: () => void;\n toggleSearch?: () => void;\n toggleSettings?: () => void;\n};\n\n/**\n * Component for the common controls on the header of different type facet cards\n * @param field - filter this FacetCard manages\n * @param description - describes information about the facet\n * @param hooks - object defining the hooks required by this facet component\n * @param facetName - name of the Facet in human-readable form\n * @param showSettings - show filter settings AND/OR\n * @param showSearch - if the search icon show be displayed\n * @param showFlip - if the flip icon should be displayed\n * @param showClearSelection - if the clear selection icon should be displayed\n * @param isFacetView - if the facet selection view (and not the chart view) is displayed\n * @param toggleSettings - toggle is setting button is visible\n * @param toggleFlip - function to switch the facet/chart view\n * @param toggleSearch - function to switch if the search bart is displayed\n * @param dismissCallback - if facet can be removed, supply a function which will ensure the \"dismiss\" control will be visible\n * @param sharedWithIndices\n * @param header - object containing the display components to use for the header\n */\nconst FacetControlsHeader = ({\n field,\n description,\n hooks,\n facetName,\n showSettings = true,\n showSearch = false,\n showFlip = false,\n showClearSelection = true,\n isFacetView = false,\n toggleSettings = undefined,\n toggleFlip = undefined,\n toggleSearch = undefined,\n dismissCallback = undefined,\n sharedWithIndices = undefined,\n header = {\n Panel: FacetHeader,\n Label: FacetText,\n iconStyle: controlsIconStyle,\n },\n}: FacetHeaderProps) => {\n const clearFilters = hooks.useClearFilter();\n const isFilterExpanded =\n hooks?.useFilterExpanded && hooks.useFilterExpanded(field);\n const toggleExpandFilter =\n hooks?.useToggleExpandFilter && hooks.useToggleExpandFilter();\n\n useEffect(() => {\n // Initialize filter as expanded\n if (isFilterExpanded === undefined && toggleExpandFilter) {\n toggleExpandFilter(field, true);\n }\n }, [field, isFilterExpanded, toggleExpandFilter]);\n\n return (\n <header.Panel>\n <div className=\"flex flex-row items-center\">\n {toggleExpandFilter && (\n <Tooltip label={isFilterExpanded ? 'Collapse card' : 'Expand card'}>\n <ActionIcon\n variant=\"subtle\"\n onClick={() => {\n toggleExpandFilter(field, !isFilterExpanded);\n }}\n aria-expanded={isFilterExpanded}\n aria-label={isFilterExpanded ? 'Collapse card' : 'Expand card'}\n >\n {isFilterExpanded ? (\n <ExpandLessIcon\n size=\"3em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n ) : (\n <ExpandMoreIcon\n size=\"3em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n )}\n </ActionIcon>\n </Tooltip>\n )}\n {sharedWithIndices && (\n <Tooltip\n transitionProps={{ duration: 200, transition: 'fade' }}\n label={\n <div className=\"flex items-center gap-x-2\">\n <Text className=\"mr-2\">Shared with:</Text>\n {sharedWithIndices.map((x) => (\n <Badge\n variant=\"outline\"\n radius=\"sm\"\n color=\"accent.3\"\n key={x.index}\n >\n {x.indexAlias}\n </Badge>\n ))}{' '}\n </div>\n }\n >\n <Icon\n icon=\"gen3:share\"\n className={`${header.iconStyle} mx-0.5 mr-2`}\n width={9}\n height={9}\n />\n </Tooltip>\n )}\n <Tooltip\n label={description}\n position=\"top\"\n multiline\n w={220}\n withArrow\n transitionProps={{ duration: 200, transition: 'fade' }}\n disabled={!description}\n >\n <header.Label>\n {facetName ? facetName : fieldNameToTitle(field)}\n </header.Label>\n </Tooltip>\n </div>\n <div className=\"flex flex-row\">\n {showSettings ? (\n <Tooltip label=\"Filter Settings\">\n <FacetIconButton\n onClick={() => {\n if (toggleExpandFilter) toggleExpandFilter(field, true);\n if (toggleSettings) toggleSettings();\n }}\n aria-label=\"Search\"\n className={header.iconStyle}\n >\n <Icon\n width={12}\n height={12}\n icon=\"gen3:settings\"\n aria-hidden=\"true\"\n />\n </FacetIconButton>\n </Tooltip>\n ) : null}\n {showSearch ? (\n <Tooltip label=\"Search values\">\n <FacetIconButton\n onClick={() => {\n if (toggleExpandFilter) toggleExpandFilter(field, true);\n if (toggleSearch) toggleSearch();\n }}\n aria-label=\"Search\"\n >\n <SearchIcon\n size=\"1.45em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n </FacetIconButton>\n </Tooltip>\n ) : null}\n {showFlip ? (\n <Tooltip label={isFacetView ? 'Chart view' : 'Selection view'}>\n <FacetIconButton\n onClick={() => {\n if (toggleExpandFilter) toggleExpandFilter(field, true);\n if (toggleFlip) toggleFlip();\n }}\n aria-pressed={!isFacetView}\n aria-label={isFacetView ? 'Chart view' : 'Selection view'}\n >\n <FlipIcon\n size=\"1.45em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n </FacetIconButton>\n </Tooltip>\n ) : null}\n {showClearSelection && (\n <Tooltip label=\"Clear selection\">\n <FacetIconButton\n onClick={() => clearFilters(field)}\n aria-label=\"clear selection\"\n >\n <UndoIcon\n size=\"1.0em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n </FacetIconButton>\n </Tooltip>\n )}\n {dismissCallback ? (\n <Tooltip label=\"Remove the facet\">\n <FacetIconButton\n onClick={() => {\n dismissCallback(field);\n }}\n aria-label=\"Remove the facet\"\n >\n <CloseIcon\n size=\"1.25em\"\n className={header.iconStyle}\n aria-hidden=\"true\"\n />\n </FacetIconButton>\n </Tooltip>\n ) : null}\n </div>\n </header.Panel>\n );\n};\n\nexport default FacetControlsHeader;\n","import React, { useEffect, useState } from 'react';\nimport DaysOrYears from './DaysOrYears';\nimport Year from './Year';\nimport Years from './Years';\nimport PercentRange from './PercentRange';\nimport NumericRangePanel from './NumericRangePanel';\nimport FacetControlsHeader from '../FacetControlsHeader';\nimport { NumericFacetCardProps } from '../types';\n\nconst cardScrollMargin = '10px'; // TODO add support from GDC\n\n/**\n * A component which manages a numeric range facet\n * @param field - field for this facet\n * @param hooks - hooks to manage facet\n * @param rangeDatatype - the datatype of the range\n * @param description - description of the facet\n * @param valueLabel - string representing the datatype of values (e.g. \"Cases\")\n * @param minimum - minimum value for the range\n * @param maximum - maximum value for the range\n * @param facetName - name of the facet\n * @param dismissCallback - function to call when facet is dismissed\n * @param queryOptions - info to pass back to data fetching hooks about this facet\n * @param Chart - Component for rendering a Chart view of the data\n */\n\nconst NumericRangeFacet: React.FC<NumericFacetCardProps> = ({\n field,\n hooks,\n rangeDatatype,\n description,\n valueLabel,\n minimum = undefined,\n maximum = undefined,\n facetName,\n dismissCallback = undefined,\n queryOptions,\n Chart,\n}) => {\n const [isFacetView, setIsFacetView] = useState(true);\n const isFilterExpanded =\n hooks?.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n const hash = window?.location?.hash.split('#')?.[1];\n const cardSelected = hash !== undefined && hash === field;\n\n const toggleFlip = () => {\n setIsFacetView(!isFacetView);\n };\n\n const [clearValues, setClearValues] = useState(false);\n\n useEffect(() => {\n if (clearValues) {\n setClearValues(false);\n }\n }, [clearValues]);\n\n return (\n <div\n className={`flex flex-col mx-0 bg-base-max relative border-base-lighter border-1 rounded-md text-xs transition ${\n cardSelected ? 'animate-border-highlight ' : ''\n }`}\n id={field}\n style={{\n scrollMarginTop: cardScrollMargin,\n }}\n >\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName as string}\n dismissCallback={dismissCallback}\n isFacetView={isFacetView}\n toggleFlip={toggleFlip}\n showFlip={rangeDatatype !== 'range' && Chart !== undefined}\n />\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n {\n {\n age: (\n <DaysOrYears\n valueLabel={valueLabel}\n field={field}\n rangeDatatype={rangeDatatype}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n age_in_years: (\n <Years\n valueLabel={valueLabel}\n field={field}\n rangeDatatype={rangeDatatype}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n year: (\n <Year\n valueLabel={valueLabel}\n field={field}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n years: (\n <Years\n valueLabel={valueLabel}\n field={field}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n days: (\n <DaysOrYears\n valueLabel={valueLabel}\n field={field}\n rangeDatatype={rangeDatatype}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n percent: (\n <PercentRange\n valueLabel={valueLabel}\n field={field}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n Chart={Chart}\n />\n ),\n range: (\n <NumericRangePanel\n valueLabel={valueLabel}\n field={field}\n hooks={{ ...hooks }}\n minimum={minimum}\n maximum={maximum}\n clearValues={clearValues}\n isFacetView={isFacetView}\n queryOptions={queryOptions}\n />\n ),\n }[rangeDatatype as string]\n }\n </div>\n </div>\n );\n};\n\nexport default NumericRangeFacet;\n","import { BAD_DATA_MESSAGE, DEFAULT_VISIBLE_ITEMS } from './constants';\nimport {\n ActionIcon,\n Checkbox,\n LoadingOverlay,\n SegmentedControl,\n TextInput,\n Tooltip,\n useMantineTheme,\n} from '@mantine/core';\nimport { CloseIcon, LockOutlineIcon } from '../../types/icons';\nimport FacetSortPanel from './FacetSortPanel';\nimport { type CombineMode, fieldNameToTitle } from '@gen3/core';\nimport OverflowTooltippedLabel from '../OverflowTooltippedLabel';\nimport FacetExpander from './FacetExpander';\nimport { EnumFacetChart } from '../charts';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { EnumFacetDataHooks, FacetSortType, SortType } from './types';\nimport {\n compareKeysAscending,\n compareKeysDescending,\n mapFacetSortToSortType,\n updateFacetEnum,\n} from './utils';\nimport { useDeepCompareCallback, useDeepCompareEffect } from 'use-deep-compare';\nimport { Icon } from '@iconify-icon/react';\n\ninterface FacetEnumListProps {\n field: string;\n facetName?: string;\n valueLabel: string;\n hooks: EnumFacetDataHooks;\n isSettings?: boolean;\n isSearching?: boolean;\n isFacetView?: boolean;\n showPercent?: boolean;\n hideIfEmpty?: boolean;\n showSorting?: boolean;\n sort?: FacetSortType;\n moveValuesToBottom?: Array<string>;\n excludeValues?: Array<string>;\n}\n\nconst FacetEnumList: React.FC<FacetEnumListProps> = ({\n field,\n facetName,\n hooks,\n valueLabel,\n isSettings = false,\n isFacetView = true,\n isSearching = false,\n showPercent = false,\n hideIfEmpty = false,\n showSorting = true,\n sort = 'value-dsc',\n moveValuesToBottom = [],\n excludeValues = [],\n}) => {\n const [isGroupExpanded, setIsGroupExpanded] = useState(false);\n const cardRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const settingRef = useRef<HTMLDivElement>(null);\n const [searchTerm, setSearchTerm] = useState('');\n // const [combineMode, setCombineMode] = useState<'or' | 'and'>('or');\n\n const { data, enumFilters, combineMode, isSuccess, error } =\n hooks.useGetFacetData(field);\n const [selectedEnums, setSelectedEnums] = useState(enumFilters ?? []);\n const totalCount = hooks?.useTotalCounts ? hooks.useTotalCounts() : 1;\n const clearFilters = hooks.useClearFilter();\n const updateFacetFilters = hooks.useUpdateFacetFilters();\n const isFilterExpanded =\n hooks?.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n const [sortedData, setSortedData] = useState<\n Array<[string | number, number]>\n >([]);\n const [sortType, setSortType] = useState<SortType>(\n mapFacetSortToSortType(sort),\n );\n const theme = useMantineTheme();\n\n const updateVisibleValues = hooks?.updateVisibleValues;\n\n useEffect(() => {\n if (isSearching) {\n searchInputRef?.current?.focus();\n } else if (searchTerm.length > 0) {\n setSearchTerm('');\n }\n }, [isSearching, searchTerm]);\n\n useEffect(() => {\n if (isSettings) {\n settingRef?.current?.focus();\n }\n }, [settingRef, isSettings]);\n\n useDeepCompareEffect(() => {\n setSelectedEnums(enumFilters ?? []);\n }, [enumFilters]);\n\n const maxValuesToDisplay = DEFAULT_VISIBLE_ITEMS;\n\n // update filters when checkbox is selected\n const handleChange = (value: string, checked: boolean) => {\n setFacetChartData({\n ...facetChartData,\n isSuccess: false,\n });\n if (checked) {\n const updated = selectedEnums ? [...selectedEnums, value] : [value];\n updateFacetEnum(\n field,\n updated,\n updateFacetFilters,\n clearFilters,\n combineMode,\n );\n } else {\n const updated = selectedEnums?.filter((x) => x !== value);\n updateFacetEnum(\n field,\n updated ?? [],\n updateFacetFilters,\n clearFilters,\n combineMode,\n );\n }\n };\n\n const handleCombineModeChange = (mode: CombineMode) => {\n updateFacetEnum(\n field,\n selectedEnums ?? [],\n updateFacetFilters,\n clearFilters,\n mode,\n );\n };\n\n const [facetChartData, setFacetChartData] = useState<{\n filteredData: [string | number, number][];\n filteredDataObj: Record<string | number, number>;\n remainingValues: number;\n numberOfBarsToDisplay: number;\n isSuccess: boolean;\n height: number;\n cardStyle: string;\n }>({\n filteredData: [],\n filteredDataObj: {},\n remainingValues: 0,\n numberOfBarsToDisplay: maxValuesToDisplay,\n isSuccess: false,\n height: 150,\n cardStyle: 'overflow-hidden h-auto',\n });\n\n const calcCardStyle = useDeepCompareCallback(\n (remainingValues: number) => {\n if (isGroupExpanded) {\n const cardHeight =\n remainingValues > 16\n ? 96\n : remainingValues > 0\n ? Math.min(96, remainingValues * 5 + 40)\n : 24;\n return `flex-none h-${cardHeight} overflow-y-scroll pl-3`;\n } else {\n return 'overflow-hidden h-auto mr-3 pl-3';\n }\n },\n [isGroupExpanded],\n );\n\n const calcNumberOfBarsToDisplay = useDeepCompareCallback(\n (visibleItems: number) => {\n const totalNumberOfBars = enumFilters ? enumFilters.length : visibleItems;\n return isGroupExpanded\n ? Math.min(16, totalNumberOfBars)\n : Math.min(maxValuesToDisplay, totalNumberOfBars);\n },\n [isGroupExpanded, enumFilters, maxValuesToDisplay],\n );\n\n useDeepCompareEffect(() => {\n if (isSuccess && data) {\n // get all the data except the missing and empty values\n const tempFilteredData = Object.entries(data)\n .filter((entry) => entry[0] !== '_missing' && entry[0] !== '')\n .filter((entry) =>\n searchTerm === ''\n ? entry\n : entry[0].toLowerCase().includes(searchTerm.toLowerCase().trim()),\n );\n\n // it is possible that the selected enums are not in the data as their counts are 0\n // therefore we need to add them to the data\n const selectedEnumNotInData = selectedEnums\n ? selectedEnums.reduce(\n (acc, curr) => {\n if (!tempFilteredData.find((x) => x[0] === curr)) {\n acc.push([curr, 0]); // count will be 0\n }\n return acc;\n },\n [] as Array<[string | number, number]>,\n )\n : [];\n\n const allData = [...tempFilteredData, ...selectedEnumNotInData];\n // remove any enum in excludeValues\n const filteredData = allData.filter(\n (x) => !excludeValues?.includes(x[0].toString()),\n );\n\n const remainingValues =\n filteredData.length + selectedEnumNotInData.length - maxValuesToDisplay;\n const cardStyle = calcCardStyle(remainingValues);\n const numberOfBarsToDisplay = calcNumberOfBarsToDisplay(\n tempFilteredData.length + selectedEnumNotInData.length,\n );\n\n setFacetChartData((prevFacetChartData) => ({\n ...prevFacetChartData,\n filteredData: filteredData, // merge any selected enums that are not in the data\n filteredDataObj: Object.fromEntries(filteredData),\n remainingValues,\n numberOfBarsToDisplay,\n isSuccess: true,\n height:\n numberOfBarsToDisplay == 1\n ? 150\n : numberOfBarsToDisplay == 2\n ? 220\n : numberOfBarsToDisplay == 3\n ? 240\n : numberOfBarsToDisplay * 65 + 10,\n cardStyle: cardStyle,\n }));\n } else {\n setFacetChartData((prevFacetChartData) => ({\n ...prevFacetChartData,\n filteredDataObj: {},\n isSuccess: false,\n }));\n }\n }, [\n data,\n isSuccess,\n maxValuesToDisplay,\n searchTerm,\n calcCardStyle,\n calcNumberOfBarsToDisplay,\n selectedEnums,\n ]);\n\n useDeepCompareEffect(() => {\n if (facetChartData.filteredData && facetChartData.filteredData.length > 0) {\n const obj = [\n ...facetChartData.filteredData\n .filter((x) => !moveValuesToBottom.includes(x[0].toString()))\n .sort(\n sortType.type === 'value'\n ? ([, a], [, b]) => (sortType.direction === 'dsc' ? b - a : a - b)\n : ([a], [b]) =>\n sortType.direction === 'dsc'\n ? compareKeysDescending(a, b)\n : compareKeysAscending(a, b),\n ),\n ...facetChartData.filteredData.filter((x) =>\n moveValuesToBottom.includes(x[0].toString()),\n ),\n ].slice(0, !isGroupExpanded ? maxValuesToDisplay : undefined);\n setSortedData(obj);\n if (updateVisibleValues) updateVisibleValues(obj);\n }\n }, [\n facetChartData.filteredData,\n sortType,\n isGroupExpanded,\n maxValuesToDisplay,\n ]);\n\n if (facetChartData.filteredData.length == 0 && hideIfEmpty) {\n return null; // nothing to render if visibleItems == 0\n }\n\n return (\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n {' '}\n {isSuccess && error ? (\n <div className=\"m-4 font-content pb-2\">{BAD_DATA_MESSAGE}</div>\n ) : (\n <>\n {isSearching && (\n <TextInput\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n aria-label={'search values'}\n ref={searchInputRef}\n className=\"p-2\"\n rightSection={\n searchTerm.length > 0 ? (\n <ActionIcon\n onClick={() => {\n setSearchTerm('');\n searchInputRef.current?.focus();\n }}\n aria-label={'clear search'}\n >\n <CloseIcon />\n </ActionIcon>\n ) : undefined\n }\n />\n )}\n {isSettings && (\n <div className=\"flex w-full justify-center\">\n <div className=\"flex items-center space-x-1 mt-1\">\n <SegmentedControl\n classNames={{\n root: 'border-1 border-accent rounded-l-md rounded-r-md',\n control: 'p-0 m-0',\n indicator: 'bg-accent text-accent-contrast',\n }}\n ref={settingRef}\n value={combineMode}\n onChange={(value: string) => {\n handleCombineModeChange(value as 'and' | 'or');\n }}\n data={[\n { label: 'AND', value: 'and' },\n { label: 'OR', value: 'or' },\n ]}\n />\n <Tooltip label=\"Combine filters with AND or OR 2\">\n <Icon\n icon=\"gen3:info\"\n height={12}\n width={12}\n color={theme.colors.accent[4]}\n />\n </Tooltip>\n </div>\n </div>\n )}\n <div\n className={\n isFacetView\n ? 'flip-card h-full '\n : 'flip-card flip-card-flipped h-full'\n }\n ref={cardRef}\n >\n <div\n className={`card-face bg-base-max rounded-b-md flex flex-col justify-between ${\n !isFacetView ? 'invisible' : ''\n }`}\n >\n <div>\n {showSorting ? (\n <FacetSortPanel\n sortType={sortType}\n valueLabel={valueLabel}\n setSort={setSortType}\n field={facetName ? facetName : fieldNameToTitle(field)}\n />\n ) : (\n false\n )}\n\n <div\n className={facetChartData.cardStyle}\n role=\"group\"\n aria-label=\"Filter values\"\n >\n <LoadingOverlay\n visible={!isSuccess}\n data-testid=\"loading-spinner\"\n />\n {facetChartData.filteredData.length == 0 ? (\n <div className=\"mx-4 font-content text-sm\">\n {BAD_DATA_MESSAGE}\n </div>\n ) : isSuccess ? (\n !sortedData || sortedData.length === 0 ? (\n <div className=\"mx-4\">No results found</div>\n ) : (\n sortedData.map(([value, count]) => {\n return (\n <div\n key={`${field}-${value}`}\n className=\"flex flex-row items-center gap-x-1\"\n >\n <div className=\"flex-none\">\n <Checkbox\n data-testid={`checkbox-${value}`}\n value={value}\n size=\"sm\"\n color=\"accent.4\"\n onChange={(e) =>\n handleChange(\n e.currentTarget.value,\n e.currentTarget.checked,\n )\n }\n aria-label={`${value}`}\n classNames={{\n input: 'hover:bg-accent-darker',\n label: 'text-sm font-normal font-content',\n }}\n checked={\n selectedEnums && selectedEnums.includes(value)\n }\n />\n </div>\n <OverflowTooltippedLabel label={value.toString()}>\n <span className=\"text-sm font-normal font-content\">\n {value}\n </span>\n </OverflowTooltippedLabel>\n <div className=\"flex-none text-right w-14 text-sm font-normal font-content\">\n {count < 0 ? (\n <LockOutlineIcon\n size=\"1.1em\"\n className=\"ml-auto\"\n />\n ) : (\n count.toLocaleString()\n )}\n </div>\n {showPercent ? (\n <div className=\"flex-none text-right w-18 text-sm font-normal font-content\">\n (\n {count < 0 ? (\n <LockOutlineIcon\n size=\"1.1em\"\n className=\"ml-auto\"\n />\n ) : (\n (\n ((count as number) / totalCount) *\n 100\n ).toFixed(2)\n )}\n %)\n </div>\n ) : null}\n </div>\n );\n })\n )\n ) : (\n <div>\n {\n // uninitialized, loading, error animated bars\n Array.from(Array(maxValuesToDisplay)).map(\n (_, index) => {\n return (\n <div\n key={`${field}-${index}`}\n className=\"flex flex-row items-center px-2\"\n >\n <div className=\"flex-none\">\n <Checkbox\n size=\"xs\"\n radius=\"xs\"\n className=\"bg-base-lightest text-primary-contrast-lightest hover:bg-base-darkest hover:text-base-contrast-darkest\"\n />\n </div>\n <div className=\"flex-grow h-3.5 align-center justify-center mt-1 ml-1 mr-8 bg-base-light rounded-b-sm animate-pulse\" />\n <div className=\"flex-none h-3.5 align-center justify-center mt-1 w-10 bg-base-light rounded-b-sm animate-pulse\" />\n </div>\n );\n },\n )\n }\n </div>\n )}\n </div>\n </div>\n {facetChartData.remainingValues > 0 ? (\n <FacetExpander\n remainingValues={facetChartData.remainingValues}\n isGroupExpanded={isGroupExpanded}\n onShowChanged={setIsGroupExpanded}\n />\n ) : null}\n </div>\n <div\n className={`card-face card-back rounded-b-md bg-base-max h-full pb-1 ${\n isFacetView ? 'invisible' : ''\n }`}\n >\n {facetChartData.filteredData.length === 0 ? (\n <div className=\"mx-4\">No results found</div>\n ) : (\n !isFacetView && (\n <EnumFacetChart\n field={field}\n data={facetChartData.filteredDataObj}\n selectedEnums={selectedEnums}\n isSuccess={facetChartData.isSuccess}\n showTitle={false}\n valueLabel={valueLabel}\n maxBins={facetChartData.numberOfBarsToDisplay}\n height={facetChartData.height}\n />\n )\n )}\n </div>\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport default FacetEnumList;\n","import React, { useState } from 'react';\nimport FacetControlsHeader from './FacetControlsHeader';\nimport FacetEnumList from './FacetEnumList';\n\nimport { controlsIconStyle, FacetHeader, FacetText } from './components';\n\nimport { EnumFacetDataHooks, FacetCardProps } from './types';\n\nconst EnumFacet = ({\n field,\n hooks,\n valueLabel,\n description,\n facetName,\n showPercent = true,\n hideIfEmpty = true,\n showSearch = true,\n showFlip = false,\n showSettings = false, // TODO: change to true with support for combine ops is completed\n startShowingData = true,\n dismissCallback = undefined,\n width = undefined,\n sharedWithIndices = undefined,\n moveValuesToBottom = [],\n excludeValues = [],\n header = {\n Panel: FacetHeader,\n Label: FacetText,\n iconStyle: controlsIconStyle,\n },\n}: FacetCardProps<EnumFacetDataHooks>) => {\n const [isSettings, setIsSettings] = useState(false);\n const [isSearching, setIsSearching] = useState(false);\n const [isFacetView, setIsFacetView] = useState(startShowingData);\n const isFilterExpanded =\n hooks.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n const toggleSearch = () => {\n setIsSearching((isSearching) => !isSearching);\n };\n\n const toggleSettings = () => {\n setIsSettings((isSettings) => !isSettings);\n };\n\n const toggleFlip = () => {\n setIsFacetView((isFacetView) => !isFacetView);\n };\n\n return (\n <div\n className={`flex flex-col ${\n width ? width : 'mx-1'\n } bg-base-max relative border-base-light border-1 rounded-md text-xs transition`}\n id={field}\n >\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName}\n showSearch={showSearch}\n showFlip={showFlip}\n showSettings={showSettings}\n isFacetView={isFacetView}\n toggleFlip={toggleFlip}\n toggleSearch={toggleSearch}\n toggleSettings={toggleSettings}\n dismissCallback={dismissCallback}\n sharedWithIndices={sharedWithIndices}\n header={header}\n />\n\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n <FacetEnumList\n field={field}\n facetName={facetName}\n valueLabel={valueLabel}\n hooks={hooks}\n isSettings={isSettings}\n isFacetView={isFacetView}\n isSearching={isSearching}\n hideIfEmpty={hideIfEmpty}\n showPercent={showPercent}\n moveValuesToBottom={moveValuesToBottom}\n excludeValues={excludeValues}\n />\n </div>\n </div>\n );\n};\n\nexport default EnumFacet;\n","import React, { useCallback } from 'react';\nimport {\n FacetCardProps,\n FromToRangeValues,\n RangeFacetDataHooks,\n} from './types';\nimport { DEFAULT_MAXIMUM, DEFAULT_MINIMUM } from './constants';\n\nimport { LoadingOverlay, NumberInput, RangeSlider, Text } from '@mantine/core';\nimport { controlsIconStyle, FacetHeader, FacetText } from './components';\n\nimport { Intersection } from '@gen3/core';\nimport FacetControlsHeader from './FacetControlsHeader';\n\nconst createBucket = (\n field: string,\n lower: number,\n upper: number,\n): Intersection => ({\n operator: 'and',\n operands: [\n {\n field,\n operator: '>=',\n operand: lower,\n },\n {\n field,\n operator: '<=',\n operand: upper,\n },\n ],\n});\n\nexport interface RangeFacetCardProps\n extends FacetCardProps<RangeFacetDataHooks> {\n minimum?: number;\n maximum?: number;\n}\n\nconst RangeFacet = ({\n field,\n hooks,\n valueLabel,\n description,\n facetName,\n minimum = DEFAULT_MINIMUM,\n maximum = DEFAULT_MAXIMUM,\n showSearch = false,\n showFlip = false,\n showSettings = false,\n dismissCallback = undefined,\n width = undefined,\n header = {\n Panel: FacetHeader,\n Label: FacetText,\n iconStyle: controlsIconStyle,\n },\n}: RangeFacetCardProps) => {\n const { data, rangeFilters, isSuccess } = hooks.useGetFacetData(field);\n const [minMaxValue, setMinMaxValue] = React.useState<\n FromToRangeValues<number>\n >({\n from: minimum,\n to: maximum,\n });\n\n const clearRangeFilterFromCohort = hooks.useClearFilter();\n const clearFilters = useCallback(() => {\n setMinMaxValue({\n from: minimum,\n to: maximum,\n });\n clearRangeFilterFromCohort(field);\n }, [clearRangeFilterFromCohort, field, maximum, minimum]);\n\n const updateRangeFilter = hooks.useUpdateFacetFilters();\n const updateFilters = useCallback(\n (from: number, to: number) => {\n updateRangeFilter(field, createBucket(field, from, to));\n setMinMaxValue({\n from: from,\n to: to,\n });\n },\n [field, updateRangeFilter],\n );\n\n const isFilterExpanded =\n hooks.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n\n return (\n <div\n className={`flex flex-col ${\n width ? width : 'mx-1'\n } bg-base-max relative border-base-lighter border-1 rounded-md text-xs transition`}\n id={field}\n >\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName}\n showSearch={showSearch}\n showSettings={showSettings}\n showFlip={showFlip}\n dismissCallback={dismissCallback}\n header={header}\n />\n <div className=\"card-face bg-base-max\">\n <div className=\"overflow-hidden px-3.5 h-auto\">\n <LoadingOverlay visible={!isSuccess} />\n <div\n className={`flex flex-col gap-y-2 pb-2 ${showFilters ? 'h-full' : 'h-0 invisible'}`}\n >\n <div className=\"flex gap-x-4 items-center\">\n <NumberInput\n label=\"Min\"\n placeholder=\"min\"\n size=\"sm\"\n value={rangeFilters ? rangeFilters.from : minMaxValue.from}\n onChange={(value: number | string) => {\n updateFilters(\n value === '' ? minimum : (value as any),\n minMaxValue.to ?? DEFAULT_MAXIMUM,\n );\n }}\n />\n <Text size=\"xl\" className=\"mt-4\">\n -\n </Text>\n <NumberInput\n label=\"Max\"\n placeholder=\"max\"\n size=\"sm\"\n value={rangeFilters ? rangeFilters.to : minMaxValue.to}\n onChange={(value) => {\n updateFilters(\n minMaxValue.from ?? minimum,\n value ? Number(value) : maximum,\n );\n }}\n />\n {\n // TODO: add updated counts\n /*\n <div className=\"bg-gray mt-4 border-1\">\n {isSuccess && data && Object.values(data).length > 0\n ? Object.values(data)[0]\n : '...'}\n </div>\n */\n }\n </div>\n <RangeSlider\n mt=\"md\"\n color=\"accent.5\"\n thumbSize={20}\n value={[minMaxValue.from ?? minimum, minMaxValue.to ?? maximum]}\n min={minimum}\n max={maximum}\n onChange={(value) => {\n updateFilters(value[0], value[1]);\n }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default RangeFacet;\n","import React, { useMemo } from 'react';\nimport { LoadingOverlay, Switch } from '@mantine/core';\nimport { Includes } from '@gen3/core';\nimport { FacetCardProps, ToggleFacetDataHooks } from './types';\nimport { updateFacetEnum } from './utils';\nimport FacetControlsHeader from './FacetControlsHeader';\n\nconst extractToggleValue = (values?: ReadonlyArray<string | number>): boolean =>\n values !== undefined && values.length > 0 && values.includes('true');\n\n/**\n * Facet card for boolean fields\n * @param field - field to facet on\n * @param hooks - hooks to use for the facet\n * @param description - description of the facet\n * @param valueLabel - label for the value\n * @param facetName - name of the facet\n * @param dismissCallback - callback to call when the facet is dismissed\n */\n\nconst ToggleFacet: React.FC<FacetCardProps<ToggleFacetDataHooks>> = ({\n field,\n hooks,\n description,\n valueLabel,\n facetName,\n dismissCallback = undefined,\n}) => {\n const clearFilters = hooks.useClearFilter();\n const updateFacetFilters = hooks.useUpdateFacetFilters();\n const isFilterExpanded =\n hooks?.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n\n const { data, isSuccess } = hooks.useGetFacetData(field);\n const enumFilters = hooks.useGetFacetFilters(field);\n\n const toggleValue = useMemo(\n () =>\n extractToggleValue(\n enumFilters ? (enumFilters as Includes)?.operands : [],\n ),\n [enumFilters],\n );\n\n const setValue = (bValue: boolean) => {\n if (bValue)\n updateFacetEnum(field, ['true'], updateFacetFilters, clearFilters);\n else clearFilters(field);\n };\n\n return (\n <div className=\"flex flex-col mx-0 bg-base-max relative border-base-lighter border-1 rounded-b-md transition text-sm\">\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName}\n dismissCallback={dismissCallback}\n showClearSelection={false}\n />\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n <div className=\"flex items-center justify-end flex-wrap p-1 mb-1 border-b-2\">\n <p className=\"px-2 font-semibold text-xs mr-5\">{valueLabel}</p>\n </div>\n <div className=\"w-full \">\n <div className=\"flex flex-nowrap justify-between items-center p-2 \">\n <LoadingOverlay\n data-testid=\"loading-spinner\"\n visible={!isSuccess}\n />\n <Switch\n label={\n data === undefined || Object.keys(data).length == 0\n ? 'No data for this field'\n : data['1'].toLocaleString('en-US')\n }\n color=\"accent\"\n checked={toggleValue}\n onChange={(event) => setValue(event.currentTarget.checked)}\n aria-label={facetName}\n data-testid=\"toggle-facet-value\"\n classNames={{\n root: 'w-full',\n body: 'flex justify-between items-center',\n label: 'text-sm font-content',\n }}\n wrapperProps={{ 'data-testid': 'toggle-area' }}\n />\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ToggleFacet;\n","import React, { useMemo, useState } from 'react';\nimport { EnumFacetResponse, FacetCardProps, FacetDataHooks } from './types';\nimport { ActionIcon, MultiSelect } from '@mantine/core';\nimport { controlsIconStyle, FacetHeader, FacetText } from './components';\nimport { Excludes, Includes, Operation, trimFirstFieldNameToTitle, } from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { updateFacetEnum } from './utils';\nimport FacetControlsHeader from './FacetControlsHeader';\nimport { useDisclosure } from '@mantine/hooks';\nimport { Icon } from '@iconify-icon/react';\n\nexport interface ExactValueProps extends Omit<\n FacetCardProps<FacetDataHooks<'enum'>>,\n 'showSearch' | 'showFlip' | 'showPercent' | 'valueLabel'\n> {\n placeHolder?: string;\n}\n\nconst instanceOfIncludesExcludes = (op: Operation): op is Includes | Excludes =>\n ['in'].includes(op.operator); // TODO: Guppy does not support excludes\n\ninterface OperandsObject {\n operands: unknown[];\n}\n\nconst isOperandsObject = (obj: unknown): obj is OperandsObject => {\n return (\n !!obj && // Ensure obj is not null or undefined\n typeof obj === 'object' &&\n 'operands' in obj &&\n Array.isArray((obj as OperandsObject).operands)\n );\n};\n\nconst isFacetEmpty = (op: object | null): boolean => {\n return isOperandsObject(op) && op.operands.length === 0;\n};\n\n/**\n * Extracts the operands if the operation isIncludes or Excludes. Returns an empty Array\n * if the filter is not the correct type.\n * @param operation - filters to extract values from\n */\nconst extractValues = (\n operation?: Operation,\n): ReadonlyArray<string | number> => {\n if (operation && instanceOfIncludesExcludes(operation)) {\n return operation.operands;\n }\n return [] as ReadonlyArray<string>;\n};\n\n/**\n * Exact value facet component\n * @param field - field to facet on\n * @param description - description of the facet\n * @param facetName - name of the facet\n * @param dismissCallback - callback function to dismiss the facet\n * @param width - width of the facet\n * @param hooks - hooks to use for the facet\n * @param header - header components\n * @category Facets\n */\nconst MultiSelectValueFacet: React.FC<ExactValueProps> = ({\n field,\n description,\n facetName = undefined,\n dismissCallback = undefined,\n width = undefined,\n showSettings = false, // TODO: change to true with support for combine ops is completed\n hooks,\n header = {\n Panel: FacetHeader,\n Label: FacetText,\n iconStyle: controlsIconStyle,\n },\n}: ExactValueProps) => {\n const [selectedValues, setSelectedValues] = useState<string[]>([]); // Handle the state of the TextInput\n const clearFilters = hooks.useClearFilter();\n const updateFacetFilters = hooks.useUpdateFacetFilters();\n const facetTitle = facetName\n ? facetName\n : trimFirstFieldNameToTitle(field, true);\n const facetValue = hooks.useGetFacetFilters(field);\n const facetDataValues = hooks.useGetFacetData(field) as EnumFacetResponse;\n const isFilterExpanded =\n hooks.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n const [dropdownOpened, { toggle }] = useDisclosure();\n\n const dataValues = useMemo(() => {\n if (facetDataValues?.data) {\n return Object.keys(facetDataValues.data).map((key) => {\n return {\n value: key,\n label: key,\n };\n });\n }\n return [];\n }, [facetDataValues?.data]);\n\n useDeepCompareEffect(() => {\n if (!facetValue || isFacetEmpty(facetValue)) {\n setSelectedValues([]);\n } else if (instanceOfIncludesExcludes(facetValue)) {\n const filters = facetValue.operands.map((x: number | string) =>\n x.toString(),\n );\n setSelectedValues(filters);\n }\n }, [facetValue]);\n\n useDeepCompareEffect(() => {\n const setValues = (values: string[]) => {\n updateFacetEnum(field, values, updateFacetFilters, clearFilters);\n };\n\n setValues(selectedValues);\n }, [selectedValues]);\n\n return (\n <div\n className={`flex flex-col ${\n width ? width : 'mx-0'\n } bg-base-max relative border-base-lighter border-1 rounded-md text-xs transition`}\n >\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName}\n dismissCallback={dismissCallback}\n header={header}\n showSettings={showSettings}\n />\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n <div className=\"flex flex-nowrap items-center p-2\">\n <MultiSelect\n data-testid=\"multiselect-add-filter-value\"\n placeholder='Add value'\n styles={{\n root: {\n marginTop: 0,\n }}}\n classNames={{\n root: 'grow',\n input: 'border-r-0 rounded-r-none py-1 mt-0 text-sm',\n }}\n comboboxProps={{ shadow: 'md' }}\n aria-label=\"enter value to add filter\"\n value={selectedValues}\n onChange={setSelectedValues}\n searchable\n data={dataValues}\n hidePickedOptions\n withScrollArea={true}\n dropdownOpened={dropdownOpened}\n />\n <ActionIcon\n variant=\"filled\" aria-label={`toggle dropdown for ${facetTitle} facet`}\n className=\"bg-accent text-accent-contrast border-base-min border-1 ml-2\"\n onClick={toggle}>\n <Icon icon=\"gen3:chevron-down\" aria-label=\"close dropdown for facet\" className={dropdownOpened ? '' : '-rotate-90'}/>\n </ActionIcon>\n </div>\n </div>\n </div>\n );\n};\n\nexport default MultiSelectValueFacet;\n","import React, { useMemo, useState } from 'react';\nimport { FacetCardProps, FacetHooks } from './types';\nimport { ActionIcon, Badge, Group, TextInput } from '@mantine/core';\nimport { controlsIconStyle, FacetHeader, FacetText } from './components';\nimport { MdClose as CloseIcon } from 'react-icons/md';\nimport { FaPlus as PlusIcon } from 'react-icons/fa';\nimport {\n EnumFilterValue,\n Excludes,\n Includes,\n Operation,\n trimFirstFieldNameToTitle,\n} from '@gen3/core';\nimport FacetControlsHeader from './FacetControlsHeader';\n\ntype ExactValueProps = Omit<\n FacetCardProps<FacetHooks>,\n 'showSearch' | 'showFlip' | 'showPercent' | 'valueLabel'\n>;\n\nconst instanceOfIncludesExcludes = (op: Operation): op is Includes | Excludes =>\n ['in'].includes(op.operator); // TODO: Guppy does not support excludes\n\n/**\n * Extracts the operands if the operation isIncludes or Excludes. Returns an empty Array\n * if filter is not the correct type.\n * @param operation - filters to extract values from\n */\nconst extractValues = (\n operation?: Operation,\n): ReadonlyArray<string | number> => {\n if (operation && instanceOfIncludesExcludes(operation)) {\n return operation.operands;\n }\n return [] as ReadonlyArray<string>;\n};\n\n/**\n * Exact value facet component\n * @param field - field to facet on\n * @param description - description of the facet\n * @param facetName - name of the facet\n * @param dismissCallback - callback function to dismiss the facet\n * @param width - width of the facet\n * @param hooks - hooks to use for the facet\n * @param header - header components\n * @category Facets\n */\nconst ExactValueFacet: React.FC<ExactValueProps> = ({\n field,\n description,\n facetName = undefined,\n dismissCallback = undefined,\n width = undefined,\n hooks,\n header = {\n Panel: FacetHeader,\n Label: FacetText,\n iconStyle: controlsIconStyle,\n },\n}: ExactValueProps) => {\n const [textValue, setTextValue] = useState(''); // Handle the state of the TextInput\n const clearFilters = hooks.useClearFilter();\n const updateFacetFilters = hooks.useUpdateFacetFilters();\n const facetTitle = facetName\n ? facetName\n : trimFirstFieldNameToTitle(field, true);\n const facetValue = hooks.useGetFacetFilters(field);\n const textValues = useMemo(() => extractValues(facetValue), [facetValue]);\n const isFilterExpanded =\n hooks.useFilterExpanded && hooks.useFilterExpanded(field);\n const showFilters = isFilterExpanded === undefined || isFilterExpanded;\n\n const setValues = (values: EnumFilterValue) => {\n if (values.length > 0) {\n if (facetValue && instanceOfIncludesExcludes(facetValue)) {\n // updating facet value\n updateFacetFilters(field, {\n ...facetValue,\n operands: values,\n });\n }\n if (facetValue === undefined) {\n // TODO: Assuming Includes by default but this might change to Include|Excludes\n updateFacetFilters(field, {\n operator: 'in',\n field: field,\n operands: values,\n });\n }\n }\n // no values remove the filter\n else {\n clearFilters(field);\n }\n };\n\n const addValue = (s: string | number) => {\n if (s === '') return;\n if (textValues.includes(s)) return;\n setTextValue('');\n setValues([...textValues, s]);\n };\n\n const removeButton = (x: string | number) => {\n return (\n <ActionIcon\n size=\"xs\"\n color=\"white\"\n radius=\"xl\"\n variant=\"transparent\"\n onClick={() => setValues(textValues.filter((i) => i !== x))}\n >\n <CloseIcon size={10} aria-label=\"remove value from filter\" />\n </ActionIcon>\n );\n };\n\n return (\n <div\n className={`flex flex-col ${\n width ? width : 'mx-0'\n } bg-base-max relative border-base-lighter border-1 rounded-md text-xs transition`}\n >\n <FacetControlsHeader\n field={field}\n description={description}\n hooks={hooks}\n facetName={facetName}\n dismissCallback={dismissCallback}\n header={header}\n />\n <div\n className={showFilters ? 'h-full' : 'h-0 invisible'}\n aria-hidden={!showFilters}\n >\n <div className=\"flex flex-nowrap items-center p-2\">\n <TextInput\n data-testid=\"textbox-add-filter-value\"\n size=\"sm\"\n placeholder={`Enter ${facetTitle}`}\n classNames={{\n root: 'grow',\n input: 'border-r-0 rounded-r-none py-1',\n }}\n aria-label=\"enter value to add filter\"\n value={textValue}\n onChange={(event) => setTextValue(event.currentTarget.value)}\n />\n <ActionIcon\n size=\"lg\"\n aria-label=\"add string value\"\n className=\"bg-accent text-accent-contrast border-base-min border-1 rounded-l-none h-[30px]\"\n onClick={() => {\n if (textValue.length > 0) addValue(textValue.trim());\n }}\n >\n <PlusIcon />\n </ActionIcon>\n </div>\n {/* h-96 is max height for the content of ExactValueFacet, EnumFacet, UploadFacet */}\n <Group\n gap=\"xs\"\n className=\"px-2 py-2 max-h-96 overflow-y-auto\"\n data-testid=\"values group\"\n >\n {textValues.map((x) => (\n <Badge\n size=\"sm\"\n variant=\"filled\"\n color=\"accent\"\n key={x}\n rightSection={removeButton(x)}\n >\n {x}\n </Badge>\n ))}\n </Group>\n </div>\n </div>\n );\n};\n\nexport default ExactValueFacet;\n","import React, { useContext } from 'react';\nimport { Operation } from '@gen3/core';\nimport { ActionIcon, Badge } from '@mantine/core';\nimport OverflowTooltippedLabel from '../../../components/OverflowTooltippedLabel';\nimport { QueryExpressionsExpandedContext } from './QueryExpressionsExpandedContext';\nimport { MdClose as CloseIcon } from 'react-icons/md';\n\nconst RemoveButton = ({ label }: { label: string }) => (\n <ActionIcon\n size=\"xs\"\n color=\"white\"\n radius=\"xl\"\n variant=\"transparent\"\n aria-label={`remove ${label}`}\n >\n <CloseIcon size={10} aria-hidden=\"true\" />\n </ActionIcon>\n);\n\ninterface FilterBadgeProps {\n field: string;\n value: string;\n customTestid: string;\n operands: readonly (string | number)[];\n operator: 'includes' | 'excludes' | 'excludeifany';\n hooks: {\n useSelectCurrentCohort?: () => any;\n useClearFilter: () => (field: string) => void;\n useUpdateFilter: () => (field: string, operation: Operation) => void;\n };\n}\nconst FilterBadge: React.FC<FilterBadgeProps> = ({\n field,\n value,\n customTestid,\n hooks,\n operands,\n operator,\n}: FilterBadgeProps) => {\n const [, setQueryExpressionsExpanded] = useContext(\n QueryExpressionsExpandedContext,\n );\n const { useSelectCurrentCohort = () => undefined } = hooks;\n const currentCohort = useSelectCurrentCohort();\n const updateFilter = hooks.useUpdateFilter();\n const removeFilter = hooks.useClearFilter();\n\n const handleOnClick = () => {\n const newOperands = operands.filter((o) => o !== value);\n\n if (newOperands.length === 0) {\n if (currentCohort && setQueryExpressionsExpanded) {\n setQueryExpressionsExpanded({\n type: 'clear',\n cohortId: currentCohort.id,\n field,\n });\n }\n removeFilter(field);\n } else {\n updateFilter(field, {\n operator,\n field,\n operands: newOperands,\n });\n }\n };\n\n return (\n <Badge\n data-testid={customTestid}\n variant=\"filled\"\n color=\"primary\"\n size=\"md\"\n className=\"normal-case items-center max-w-[162px] cursor-pointer pl-1.5 pr-0 hover:bg-primary-lighter\"\n rightSection={<RemoveButton label={value} />}\n onClick={handleOnClick}\n >\n <OverflowTooltippedLabel\n label={value}\n className=\"flex-grow text-md font-content-noto\"\n >\n {value}\n </OverflowTooltippedLabel>\n </Badge>\n );\n};\n\nexport default FilterBadge;\n","import React from 'react';\nimport { Button, Tooltip } from '@mantine/core';\nimport FilterBadge from '../../features/CohortBuilder/QueryExpression/FilterBadge';\nimport FacetControlsHeader from './FacetControlsHeader';\nimport { FacetCardProps, UploadFacetDataHooks } from './types';\n\n/**\n * Facet card component for fields were a user can upload a list of values\n */\nconst UploadFacet: React.FC<FacetCardProps<UploadFacetDataHooks>> = ({\n field,\n facetName,\n facetBtnToolTip,\n hooks,\n}) => {\n const hash = window?.location?.hash.split('#')?.[1];\n const cardSelected = hash !== undefined && hash === field;\n const openModal = hooks.useOpenUploadModal();\n\n const { noData, items } = hooks.useFilterItems(field);\n const useClearUploadFilter = () => {\n const clearFilter = hooks.useClearFilter();\n return (field: string) => clearFilter(field);\n };\n\n const renderBadges = (items: string[], itemField: string) => {\n return items.map((item, index) => (\n <FilterBadge\n key={`query-rep-${itemField}-${item}-${index}`}\n field={itemField}\n value={item}\n customTestid={`query-rep-${itemField}-${item}-${index}`}\n operands={items}\n operator=\"includes\"\n hooks={{\n useClearFilter: useClearUploadFilter,\n useUpdateFilter: hooks.useUpdateFacetFilters,\n }}\n />\n ));\n };\n\n return (\n <div\n className={`flex flex-col mx-0 bg-base-max border-base-lighter border-1 rounded-b-md text-xs transition ${\n cardSelected ? 'animate-border-highlight ' : undefined\n }`}\n id={field}\n >\n <FacetControlsHeader\n field={field}\n hooks={{ ...hooks, useClearFilter: useClearUploadFilter }}\n facetName={facetName}\n />\n <div className=\"p-4\">\n <div className=\"flex justify-center\">\n <Tooltip\n disabled={!facetBtnToolTip}\n label={facetBtnToolTip}\n multiline\n w={220}\n withArrow\n transitionProps={{ duration: 200, transition: 'fade' }}\n >\n <Button\n variant=\"outline\"\n fullWidth\n onClick={() => openModal(field)}\n data-testid={`button-${facetName}`}\n >\n Upload\n </Button>\n </Tooltip>\n </div>\n {/* h-96 is max height for the content of ExactValueFacet, EnumFacet, UploadFacet */}\n <div className=\"mt-2 max-h-96 overflow-y-auto\">\n {noData ? null : (\n <div className=\"flex flex-wrap gap-1\">\n {renderBadges(items as string[], field)}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default UploadFacet;\n","import React from 'react';\nimport {\n EnumChartProps,\n EnumFacetDataHooks,\n FacetHooks,\n FacetValueLabel,\n QueryOptions,\n ToggleFacetDataHooks,\n UploadFacetDataHooks,\n} from './types';\nimport EnumFacet from './EnumFacet';\nimport RangeFacet from './RangeFacet';\nimport ToggleFacet from './ToggleFacet';\nimport MultiSelectValueFacet from './MultiSelectValueFacet';\nimport ExactValueFacet from './ExactValueFacet';\nimport { FacetDefinition } from '@gen3/core';\nimport UploadFacet from './UploadFacet';\nimport NumericRangeFacet from './NumericRangeFacet';\n\nexport interface CreateFacetCardProps {\n facetDefinition: FacetDefinition;\n hooks: FacetHooks;\n idPrefix: string;\n valueLabel: FacetValueLabel;\n dismissCallback?: (field: string) => void;\n hideIfEmpty?: boolean;\n width?: string;\n showPercent?: boolean;\n queryOptions?: QueryOptions;\n facetNameFormatter: (field: string) => string;\n cardScrollMargin?: number;\n Chart?: React.FC<EnumChartProps>;\n}\n\nexport const createFacetCard = ({\n facetDefinition,\n valueLabel,\n hooks: dataFunctions,\n facetNameFormatter,\n idPrefix,\n hideIfEmpty = false,\n width,\n showPercent = false,\n queryOptions,\n}: CreateFacetCardProps): React.ReactNode => {\n const { field, type, description, label } = facetDefinition;\n const facetLabel = label ?? facetNameFormatter(facetDefinition.field);\n const valueTypeLabel =\n valueLabel === undefined || typeof valueLabel === 'string'\n ? valueLabel\n : valueLabel(facetDefinition, queryOptions);\n\n return (\n <div key={`${idPrefix}-facet-${field}`}>\n {\n {\n enum: (\n <EnumFacet\n key={`${idPrefix}-enum-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions as EnumFacetDataHooks}\n showPercent={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n moveValuesToBottom={facetDefinition?.moveValuesToBottom ?? []}\n excludeValues={facetDefinition?.excludeValues ?? []}\n />\n ),\n range: (\n <RangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n />\n ),\n age: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"age\"\n />\n ),\n age_in_years: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"age_in_years\"\n />\n ),\n years: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"years\"\n />\n ),\n year: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"year\"\n />\n ),\n days: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"days\"\n />\n ),\n percent: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"percent\"\n />\n ),\n numeric_range: (\n <NumericRangeFacet\n key={`${idPrefix}-range-${field}`}\n valueLabel={valueTypeLabel}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n minimum={facetDefinition.range?.minimum}\n maximum={facetDefinition.range?.maximum}\n showSettings={showPercent}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n rangeDatatype=\"range\"\n />\n ),\n exact: (\n <ExactValueFacet\n key={`${idPrefix}-exact-${field}`}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n />\n ),\n multiselect: (\n <MultiSelectValueFacet\n key={`${idPrefix}-multiselect-${field}`}\n field={field}\n facetName={facetLabel}\n description={description}\n hideIfEmpty={hideIfEmpty}\n width={width}\n hooks={dataFunctions}\n sharedWithIndices={facetDefinition?.sharedWithIndices}\n />\n ),\n upload: (\n <UploadFacet\n key={`${idPrefix}-upload-${field}`}\n field={field}\n valueLabel={valueTypeLabel}\n hooks={dataFunctions as UploadFacetDataHooks}\n />\n ),\n toggle: (\n <ToggleFacet\n key={`${idPrefix}-toggle-${field}`}\n field={field}\n valueLabel={valueTypeLabel}\n hideIfEmpty={hideIfEmpty}\n showPercent={showPercent}\n hooks={{\n ...(dataFunctions as ToggleFacetDataHooks),\n }}\n facetName={facetLabel}\n description={description}\n />\n ),\n }[type as string]\n }\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { FacetDefinition, FacetType, fieldNameToTitle } from '@gen3/core';\nimport { createFacetCard } from './createFacetCard';\nimport { FacetHooks, FacetValueLabel } from './types';\nimport { useResizeObserver } from '@mantine/hooks';\n\ninterface FiltersPanelProps<T extends FacetType = FacetType> {\n dataFunctions: Record<T, FacetHooks>;\n fields: ReadonlyArray<FacetDefinition>;\n valueLabel: FacetValueLabel;\n}\n\nconst FiltersPanel = <T extends FacetType = FacetType>({\n fields,\n dataFunctions,\n valueLabel,\n}: FiltersPanelProps<T>): JSX.Element => {\n const [ref, rect] = useResizeObserver();\n const maxHeight = useMemo(() => {\n const calcHeight = ref?.current?.getBoundingClientRect().top;\n return !calcHeight || isNaN(calcHeight) ? undefined : calcHeight;\n }, [ref]);\n\n return (\n <div\n data-testid=\"filters-facets\"\n className=\"flex flex-col max-h-screen overflow-y-auto gap-y-4\n border-t-1 border-b-1 rounded-md\"\n ref={ref}\n style={{ maxHeight: maxHeight }}\n >\n {fields.map((facetDefinition) => {\n if (facetDefinition?.type === undefined) {\n console.warn('Facet definition missing type', facetDefinition);\n return null;\n }\n if (!(facetDefinition.type in dataFunctions)) {\n return null;\n }\n\n return createFacetCard({\n facetDefinition,\n valueLabel,\n hooks: dataFunctions[facetDefinition.type as T],\n facetNameFormatter: fieldNameToTitle,\n idPrefix: 'filters-panel',\n showPercent: false,\n });\n })}\n </div>\n );\n};\n\nexport default FiltersPanel;\n","import React from 'react';\nimport { SegmentedControl, useMantineTheme } from '@mantine/core';\nimport { Accessibility } from '@gen3/core';\n\nconst AccessData = [\n { value: Accessibility.ALL, label: 'All' },\n { value: Accessibility.ACCESSIBLE, label: 'Accessible' },\n { value: Accessibility.UNACCESSIBLE, label: 'Not Accessible' },\n];\n\nexport interface AccessLevelControlProps {\n onChange: (value: Accessibility) => void;\n accessLevel: Accessibility;\n}\n\nconst AccessLevelControl = ({\n onChange,\n accessLevel,\n}: AccessLevelControlProps) => {\n const theme = useMantineTheme();\n return (\n <SegmentedControl\n color={theme.colors.accent[5]}\n data={AccessData}\n value={accessLevel}\n onChange={(val) => {\n const accessibilityValue =\n AccessData.find((item) => item.value === val)?.value ||\n Accessibility.ALL;\n onChange(accessibilityValue);\n }}\n />\n );\n};\n\nexport default AccessLevelControl;\n","import React, { useState } from 'react';\nimport {\n Group,\n Select,\n Stack,\n Switch,\n Text,\n Tooltip,\n useMantineTheme,\n} from '@mantine/core';\nimport { modals } from '@mantine/modals';\nimport { Icon } from '@iconify-icon/react';\nimport type { TabConfig } from '../../../features/CohortBuilder/types';\nimport FiltersPanel from '../FiltersPanel';\nimport {\n Accessibility,\n FacetDefinition,\n FacetType,\n selectSharedFilters,\n selectShouldShareFilters,\n setShouldShareFilters,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { TabbablePanelProps } from './types';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport AccessLevel from '../../../features/CohortBuilder/AccessLevel';\nimport { FacetValueLabel } from '../types';\n\nexport const DropdownPanel = <T extends FacetType = FacetType>({\n filters,\n tabTitle,\n facetDefinitions,\n facetDataHooks,\n allFiltersCollapsed,\n toggleAllFiltersExpanded,\n clearAllFilters,\n onAccessChange = (value: Accessibility) => null,\n accessLevel = Accessibility.ALL,\n showAccessLevel = false,\n valueLabel = undefined as FacetValueLabel | undefined,\n}: TabbablePanelProps<T>) => {\n const [value, setValue] = useState<string | null>('0');\n\n const sharedFilters = useCoreSelector((state) => selectSharedFilters(state));\n\n const shareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n\n const theme = useMantineTheme();\n const coreDispatch = useCoreDispatch();\n\n const items = useDeepCompareMemo(\n () =>\n filters.tabs.map((tab: TabConfig, idx) => {\n return { label: tab.title, value: idx.toString() };\n }),\n [filters.tabs],\n );\n\n const fields = filters.tabs[Number(value)].fields.reduce((acc, field) => {\n return [...acc, facetDefinitions[field]];\n }, [] as FacetDefinition[]);\n\n const handleSharedFiltersChange = (value: boolean) => {\n modals.openConfirmModal({\n title: 'Confirm change of shared filters mode',\n children: (\n <Text size=\"sm\">\n {value\n ? 'Switching to Shared Filters mode will apply all selected filters across all indices.'\n : 'Switching to Unshared Filters mode will stop syncing filters but will not remove them.'}\n </Text>\n ),\n labels: { confirm: 'Confirm', cancel: 'Cancel' },\n onConfirm: () => coreDispatch(setShouldShareFilters(value)),\n });\n };\n\n return (\n <Stack align=\"flex-start\" gap=\"xs\">\n <Group justify=\"space-between\" className=\"w-full\">\n <Text size=\"xl\" fw={800}>\n Filters\n </Text>\n <Group justify=\"flex-end\" gap=\"xs\">\n <Tooltip\n label={`${allFiltersCollapsed ? 'Expand' : 'Collapse'} all filter panels`}\n >\n <button\n className=\"text-primary text-sm font-normal\"\n onClick={() => toggleAllFiltersExpanded(allFiltersCollapsed)}\n >\n {allFiltersCollapsed ? 'Expand All' : 'Collapse All'}\n </button>\n </Tooltip>\n <Tooltip label=\"Clear all selected filters\">\n <button\n className=\"text-primary text-sm font-normal\"\n onClick={clearAllFilters}\n >\n Clear All\n </button>\n </Tooltip>\n </Group>\n </Group>\n {showAccessLevel ? (\n <AccessLevel onChange={onAccessChange} accessLevel={accessLevel} />\n ) : null}\n\n <div className=\"bg-base-max py-4 px-2 w-full\">\n {Object.keys(sharedFilters).length > 0 && (\n <Group gap=\"xs\" justify=\"space-between\">\n <div className=\"flex items-center space-x-1\">\n <Icon\n icon=\"gen3:share\"\n height={16}\n width={16}\n color={theme.colors.accent[4]}\n />\n <Text size=\"sm\">Set the shared filters for all</Text>\n <Tooltip\n label=\"If enabled any filter set on this tab will be applied to every tab where occurs.\"\n position=\"top\"\n withArrow\n >\n <Icon\n icon=\"gen3:info\"\n height={12}\n width={12}\n color={theme.colors.accent[4]}\n />\n </Tooltip>\n </div>\n <Switch\n checked={shareFilters}\n onChange={(event) =>\n handleSharedFiltersChange(event.currentTarget.checked)\n }\n />\n </Group>\n )}\n {filters.tabs.length > 1 && (\n <Select\n classNames={{\n options: 'border-1 border-base-dark',\n option: 'hover:bg-primary-lightest',\n root: 'mb-2',\n }}\n withCheckIcon={false}\n data={items}\n value={value === null ? '0' : value}\n onChange={setValue}\n />\n )}\n {Object.keys(facetDefinitions).length > 0 ? (\n <FiltersPanel\n fields={fields}\n dataFunctions={facetDataHooks}\n valueLabel={valueLabel ?? tabTitle}\n />\n ) : null}\n </div>\n </Stack>\n );\n};\n\nexport default DropdownPanel;\n","import { useEffect } from 'react';\n\n/**\n * Scrolls to hash in url when component mounts and removes hash from url when component unmounts\n * @param valid_hashes - what hashes in url should trigger scroll\n * @param removeHash - whether to remove hash from url when component unmounts\n */\nconst useScrollToHash = (\n valid_hashes: string[],\n removeHash: boolean = true,\n) => {\n useEffect(() => {\n const hash = window?.location?.hash.split('#')?.[1];\n if (hash && valid_hashes.includes(hash)) {\n const hashElement = document.getElementById(hash);\n if (hashElement) {\n setTimeout(\n () =>\n hashElement.scrollIntoView({ block: 'center', behavior: 'smooth' }),\n 500,\n );\n }\n }\n // Remove hash when component unmounts\n return () => (removeHash ? history.replaceState(null, '', ' ') : undefined);\n }, []);\n};\n\nexport default useScrollToHash;\n","import { createFacetCard, CreateFacetCardProps } from './createFacetCard';\nimport { FacetHooks } from './types';\nimport { FacetDefinition, FacetType } from '@gen3/core';\n\ninterface CreateFacetCardsProps\n extends Omit<CreateFacetCardProps, 'facetDefinition' | 'hooks'> {\n facets: FacetDefinition[];\n hooks: Record<FacetType, FacetHooks>;\n}\n\nexport const createFacetCards = ({\n facets,\n hooks,\n facetNameFormatter,\n idPrefix,\n valueLabel,\n dismissCallback,\n hideIfEmpty,\n Chart,\n showPercent,\n}: CreateFacetCardsProps) => {\n return facets.map((facetDefinition) => {\n return createFacetCard({\n facetDefinition,\n valueLabel,\n hooks: hooks[facetDefinition.type],\n facetNameFormatter,\n idPrefix,\n dismissCallback,\n hideIfEmpty,\n Chart,\n showPercent,\n });\n });\n};\n\nexport default createFacetCards;\n","import React, { useEffect, useState } from 'react';\nimport {\n Checkbox,\n Group,\n Highlight,\n LoadingOverlay,\n SimpleGrid,\n Stack,\n TextInput,\n UnstyledButton,\n} from '@mantine/core';\nimport { QueryOptions } from './types';\nimport { FacetDefinition as FacetCardDefinition } from '@gen3/core';\n\ninterface FacetListProps {\n readonly data?: Record<string, FacetCardDefinition>; // Facets to display\n readonly searchString?: string; // current search string (used to highlight matches)\n readonly handleFilterSelected: (field: string) => void; // called when a Facet is picked.\n}\n\n/**\n * A Facet Filter List which is used to display and select a facet to add\n * to an application\n *\n */\nconst FacetList: React.FC<FacetListProps> = ({\n data,\n searchString = '',\n handleFilterSelected,\n}: FacetListProps) => {\n return (\n <Stack style={{ height: '50vh', overflow: 'scroll' }}>\n <SimpleGrid cols={1} spacing={1}>\n {data\n ? Object.values(data).map((x, index) => {\n return (\n <Stack\n key={x.field}\n className={`${\n index % 2 == 0\n ? 'bg-[var(--mantine-color-gray-0)]'\n : 'bg-[var(--mantine-color-gray-2)]'\n } hover:bg-[var(--mantine-color-blue-1)]`}\n >\n <button\n data-testid={`button-${x.label ?? x.field}`}\n onClick={() => handleFilterSelected(x.field)}\n className=\"text-left\"\n >\n <Highlight\n size=\"sm\"\n highlight={searchString}\n className=\"font-bold\"\n >\n {x.label ?? x.field}\n </Highlight>\n {x.description ? (\n <Highlight\n size=\"xs\"\n highlight={searchString}\n className=\"font-content\"\n >\n {x.description}\n </Highlight>\n ) : null}\n </button>\n </Stack>\n );\n })\n : null}\n </SimpleGrid>\n </Stack>\n );\n};\n\ninterface FacetSelectionProps {\n readonly facets: Record<string, FacetCardDefinition>;\n readonly handleFilterSelected: (_: string) => void;\n readonly handleFilteredWithValuesChanged: (_: boolean) => void;\n}\n\nconst FacetSelectionPanel = ({\n facets,\n handleFilterSelected,\n handleFilteredWithValuesChanged,\n}: FacetSelectionProps) => {\n const [searchString, setSearchString] = useState('');\n const [filteredData, setFilteredData] = useState<\n Record<string, FacetCardDefinition> | undefined\n >(undefined);\n\n useEffect(() => {\n if (!facets) return;\n if (searchString && searchString.length > 1) {\n const s = Object.values(facets)\n .filter((y) => {\n return searchString\n ? y.field?.includes(searchString.trim()) ||\n y.description?.includes(searchString.trim())\n : true;\n })\n .reduce((res: Record<string, FacetCardDefinition>, value) => {\n return { ...res, [value.field]: value };\n }, {});\n setFilteredData(s);\n } else {\n setFilteredData(facets);\n }\n }, [facets, searchString]);\n\n return (\n <div className=\"flex flex-col\" data-testid=\"section-file-filter-search\">\n <TextInput\n data-autofocus\n label=\"Search for a property\"\n data-testid=\"textbox-search-for-a-property\"\n placeholder=\"search\"\n value={searchString}\n rightSection={\n searchString?.length > 0 ? (\n <UnstyledButton\n className=\"opacity-100\"\n onClick={() => setSearchString('')}\n aria-label=\"Clear Search\"\n >\n x\n </UnstyledButton>\n ) : null\n }\n onChange={(evt) => setSearchString(evt.target.value)}\n type=\"search\"\n />\n <Group justify=\"space-between\">\n <p role=\"status\">\n {filteredData ? Object.values(filteredData).length : ''} properties\n </p>\n <Checkbox\n label=\"Only show properties with values\"\n onChange={(event) =>\n handleFilteredWithValuesChanged(event.currentTarget.checked)\n }\n aria-label=\"show only properties with values\"\n />\n </Group>\n <div data-testid=\"list-file-filters\">\n <LoadingOverlay\n data-testid=\"loading-spinner\"\n visible={facets === undefined}\n />\n <FacetList\n data={filteredData}\n handleFilterSelected={handleFilterSelected}\n searchString={searchString.length > 1 ? searchString : ''}\n />\n </div>\n </div>\n );\n};\n\ninterface FacetSelectionModalProps {\n readonly usedFacets: readonly string[];\n readonly useAvailableCustomFacets: (\n usedFacets: readonly string[],\n onlyFiltersWithValues: boolean,\n queryOptions?: QueryOptions,\n ) => {\n data: Record<string, FacetCardDefinition>;\n };\n readonly handleFilterSelected: (field: string) => void;\n readonly queryOptions?: QueryOptions;\n}\n\n/**\n * Top Level Facet Selection Panel. This component handles getting the available Facets using the supplied selector (useFacetSelector)\n * If a user picks a facet it will call handleFilterSelected\n * passing the full name of the selected Facet\n * @param usedFacets - list of facets that have already been selected\n * @param useAvailableCustomFacets - hook to retrieve list of filter currently in use, those filters are not shown in the list\n * @param handleFilterSelected - function which handled when a filter is selected\n * @param queryOptions - info to pass back to data fetching hooks about this facet\n */\nconst FacetSelectionModal = ({\n usedFacets,\n useAvailableCustomFacets,\n handleFilterSelected,\n queryOptions,\n}: FacetSelectionModalProps): JSX.Element => {\n const [onlyFiltersWithValues, setOnlyFiltersWithValues] = useState(false);\n const { data: currentFacets } = useAvailableCustomFacets(\n usedFacets,\n onlyFiltersWithValues,\n queryOptions,\n );\n\n return (\n <FacetSelectionPanel\n facets={currentFacets}\n handleFilterSelected={handleFilterSelected}\n handleFilteredWithValuesChanged={setOnlyFiltersWithValues}\n />\n );\n};\n\nexport default FacetSelectionModal;\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Button,\n Flex,\n LoadingOverlay,\n MantineProvider,\n Modal,\n Stack,\n Tabs,\n TabsProps,\n Text,\n useMantineTheme,\n} from '@mantine/core';\nimport useScrollToHash from '../../utils/useScrollToHash';\nimport { AddFacetIcon, AddIcon } from '../../types/icons';\nimport createFacetCards from './createFacetCards';\nimport FacetSelection from './FacetSelectionModal';\nimport {\n CohortBuilderCategoryConfig,\n CustomFacetHooks,\n EnumChartProps,\n FacetHooks,\n FacetValueLabel,\n QueryOptions,\n} from './types';\nimport { FacetDefinition, FacetType } from '@gen3/core';\nimport { StylingOverrideWithMergeControl } from '../../types';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\n\nconst DefaultTableStyle = {\n tab: 'pl-0 data-active:pl-4 ml-4 data-active:text-secondary data-active:border-primary-darkest data-active:border-accent-vivid data-active:border-l-4 data-active:bg-base-max data-active:font-bold sm:w-44 md:w-60 lg:w-80 text-primary-content-darkest font-medium hover:pl-4 hover:bg-accent-vivid hover:text-primary-contrast-min my-1',\n list: 'flex flex-col bg-primary-lightest text-primary-contrast-dark w-60 md:w-72 lg:w-80 py-4',\n tabLabel: 'text-left',\n root: 'bg-base-max',\n};\n\nconst StyledFacetTabs = (props: TabsProps) => {\n return (\n <Tabs\n unstyled\n styles={(theme) => ({\n tab: {\n padding: `${theme.spacing.xs} ${theme.spacing.md}`,\n cursor: 'pointer',\n fontSize: theme.fontSizes.md,\n fontFamily: theme.fontFamily,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n borderTopLeftRadius: theme.radius.sm,\n borderBottomLeftRadius: theme.radius.sm,\n\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n },\n root: {\n display: 'flex',\n flexDirection: 'row',\n backgroundColor: theme.colors.base?.[0],\n },\n panel: {\n backgroundColor: theme.colors.base?.[0],\n width: '100%',\n },\n tabIcon: {\n marginRight: theme.spacing.xs,\n display: 'flex',\n alignItems: 'center',\n },\n })}\n {...props}\n />\n );\n};\n\ntype FacetGroupProps = {\n readonly children?: React.ReactNode;\n readonly facets: FacetDefinition[];\n readonly hooks?: FacetHooks;\n readonly queryOptions?: QueryOptions;\n};\n\nexport const FacetGroup: React.FC<FacetGroupProps> = ({\n facets,\n children,\n}: FacetGroupProps) => {\n // TODO: implement this\n // const { usePopulateFacetData = () => {} } = hooks;\n // usePopulateFacetData(facets, queryOptions);\n\n const availableFields = facets.map((f) => f.field);\n useScrollToHash(availableFields, false);\n\n return (\n <div\n 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 mt-6 px-2 w-full\"\n data-testid=\"title-cohort-builder-facet-groups\"\n >\n {children}\n </div>\n );\n};\n\ninterface CustomFacetGroupProps {\n readonly customFacetHooks: CustomFacetHooks;\n readonly usedFacets: string[];\n readonly queryOptions?: QueryOptions;\n readonly getFacetLabel: FacetValueLabel;\n readonly useFieldNameToTitle: () => (\n field: string,\n sections?: number,\n ) => string;\n readonly cardScrollMargin?: number;\n readonly Chart?: React.FC<any>;\n hooks: Record<FacetType, FacetHooks>;\n}\n\nconst CustomFacetGroup: React.FC<CustomFacetGroupProps> = ({\n hooks,\n customFacetHooks,\n queryOptions,\n getFacetLabel,\n cardScrollMargin,\n Chart,\n usedFacets,\n useFieldNameToTitle,\n}) => {\n const [opened, setOpened] = useState(false);\n const { data: customFacetDefinitions, isSuccess } =\n customFacetHooks.useCustomFacets();\n const addCustomFilter = customFacetHooks.useAddCustomFilter();\n const removeCustomFilter = customFacetHooks.useRemoveCustomFilter();\n const fieldNameToTitle = useFieldNameToTitle();\n // const { usePopulateFacetData = () => {} } = hooks;\n\n const handleFilterSelected = (filter: string) => {\n setOpened(false);\n addCustomFilter(filter);\n };\n\n // usePopulateFacetData(customFacetDefinitions, queryOptions);\n\n // handle the case where there are no custom filters\n return (\n <div className=\"flex flex-col w-full h-full bg-base-max pr-6\">\n <LoadingOverlay data-testid=\"loading-spinner\" visible={!isSuccess} />\n <Modal\n data-testid=\"modal-cohort-builder-add-custom-filter\"\n size=\"xl\"\n opened={opened}\n onClose={() => setOpened(false)}\n title=\"Add a Custom Filter\"\n >\n <div className=\"p-4\">\n <FacetSelection\n usedFacets={usedFacets}\n useAvailableCustomFacets={customFacetHooks.useAvailableCustomFacets}\n handleFilterSelected={handleFilterSelected}\n queryOptions={queryOptions}\n />\n </div>\n </Modal>\n <div className=\"w-full\">\n {customFacetDefinitions.length == 0 ? (\n <Flex justify=\"center\" align=\"center\" className=\"h-full\">\n <Stack\n align=\"center\"\n justify=\"center\"\n className=\"h-64 bg-base-lightest w-1/2 border-2 border-dotted m-6\"\n >\n <AddFacetIcon className=\"text-primary-content\" size=\"3em\" />\n <Text size=\"md\" className=\"text-primary-content-darker font-bold\">\n No custom filters added\n </Text>\n <Button\n data-testid=\"button-cohort-builder-add-a-custom-filter\"\n variant=\"outline\"\n onClick={() => setOpened(true)}\n aria-label=\"Add a Custom Filter\"\n className=\"bg-base-max text-primary border-primary\"\n >\n Add a Custom Filter\n </Button>\n </Stack>\n </Flex>\n ) : (\n <FacetGroup\n facets={customFacetDefinitions}\n queryOptions={queryOptions}\n >\n <Button\n data-testid=\"button-cohort-builder-add-a-custom-filter\"\n variant=\"outline\"\n className=\"h-48 bg-base-max flex justify-center align-middle items-center border-base-darker b-2 border-dotted\"\n onClick={() => setOpened(true)}\n >\n <AddIcon className=\"text-primary-contrast-lightest\" size=\"2em\" />\n <Text\n size=\"md\"\n className=\"text-primary-contrast-lightest font-bold\"\n >\n Add a Custom Filter\n </Text>\n </Button>\n {createFacetCards({\n facets: customFacetDefinitions,\n hooks,\n idPrefix: 'cohort-builder',\n valueLabel: getFacetLabel,\n facetNameFormatter: (field: string) => fieldNameToTitle(field, 2),\n queryOptions,\n dismissCallback: removeCustomFilter,\n cardScrollMargin,\n Chart,\n })}\n </FacetGroup>\n )}\n </div>\n </div>\n );\n};\n\ntype FacetTabProps = {\n readonly activeTab: string | null | undefined;\n readonly setActiveTab: (tab: string | null) => void;\n hooks: Record<FacetType, FacetHooks>;\n readonly facetDefinitions: Record<string, FacetDefinition>;\n readonly tabsConfig: Record<string, CohortBuilderCategoryConfig>;\n readonly usedFacets: string[];\n readonly customFacetHooks?: CustomFacetHooks;\n readonly getFacetLabel: FacetValueLabel;\n readonly cardScrollMargin?: number;\n readonly Chart?: React.FC<EnumChartProps>;\n readonly useFieldNameToTitle: () => (\n field: string,\n sections?: number,\n ) => string;\n classNames?: StylingOverrideWithMergeControl;\n};\n\n/**\n * Component for rendering a tabbed facet selection view\n * @param activeTab - which tab is currently active\n * @param setActiveTab - function to set the active tab\n * @param hooks - Hooks for retrieving data, modifying cohort, etc. for the various facet types\n * @param facetDefinitions - Description of facets and their properties\n * @param tabsConfig - Configuration for tab sections, which fields they contain and any additional fields needed to query data for that tab\n * @param usedFacets\n * @param customFacetHooks - Hooks for custom facet selection\n * @param getFacetLabel - String or Callback for determining the data label\n * @param cardScrollMargin - Scroll margin for cards, used for positioning cards on the page when scrolled to\n * @param useFieldNameToTitle - will use built in hook for facet names\n * @param Chart - Component for rendering a Chart view of the data\n */\n\nexport const FacetTabs: React.FC<FacetTabProps> = ({\n activeTab,\n setActiveTab,\n hooks,\n facetDefinitions,\n tabsConfig,\n usedFacets,\n customFacetHooks,\n getFacetLabel,\n cardScrollMargin,\n useFieldNameToTitle,\n Chart,\n classNames = {},\n}) => {\n const fieldNameToTitle = useFieldNameToTitle();\n const theme = useMantineTheme();\n\n const searchParams = new URLSearchParams(window.location.search);\n const liveRegionRef = useRef<HTMLSpanElement>(null);\n\n const hash = window?.location?.hash.split('#')?.[1];\n const searchTermParam = searchParams.get('search');\n\n const tabStyling = useMemo(\n () => mergeDefaultTailwindClassnames(DefaultTableStyle, classNames),\n [classNames],\n );\n\n useEffect(() => {\n if (hash && searchTermParam) {\n const facetName = fieldNameToTitle(hash);\n if (liveRegionRef.current) {\n liveRegionRef.current.textContent = `Search applied. Focused on ${facetName}`;\n }\n }\n }, [hash, searchTermParam, fieldNameToTitle]);\n\n const firstEntry = Object.values(tabsConfig)[0];\n const firstFacetList = firstEntry?.facets\n .map((field) => facetDefinitions[field])\n .filter((facet) => facet);\n\n return (\n <MantineProvider theme={theme}>\n <div className=\"w-full mr-8\">\n <span\n id=\"facetTab-liveRegion\"\n aria-live=\"assertive\"\n ref={liveRegionRef}\n className=\"sr-only\"\n />\n {Object.entries(tabsConfig).length === 1 ? (\n Object.keys(tabsConfig)[0] === 'custom' && customFacetHooks ? (\n <CustomFacetGroup\n hooks={hooks}\n queryOptions={firstEntry.queryOptions}\n getFacetLabel={getFacetLabel}\n customFacetHooks={customFacetHooks}\n cardScrollMargin={cardScrollMargin}\n Chart={Chart}\n usedFacets={usedFacets}\n useFieldNameToTitle={useFieldNameToTitle}\n />\n ) : (\n <FacetGroup\n facets={firstFacetList}\n queryOptions={firstEntry.queryOptions}\n >\n {createFacetCards({\n facets: firstFacetList,\n facetNameFormatter: (field: string) => fieldNameToTitle(field),\n hooks,\n idPrefix: 'cohort-builder',\n valueLabel: getFacetLabel,\n cardScrollMargin,\n Chart,\n })}\n </FacetGroup>\n )\n ) : (\n <StyledFacetTabs\n orientation=\"vertical\"\n value={activeTab}\n onChange={setActiveTab}\n keepMounted={false}\n classNames={tabStyling}\n >\n <Tabs.List>\n {Object.entries(tabsConfig).map(\n ([key, tabEntry]: [string, CohortBuilderCategoryConfig]) => {\n return (\n <Tabs.Tab\n key={key}\n value={key}\n data-testid={\n 'button-cohort-builder-' +\n tabEntry.label\n .toLowerCase()\n .replaceAll('_', '-')\n .replaceAll(' ', '-')\n }\n >\n {tabEntry.label}\n </Tabs.Tab>\n );\n },\n )}\n </Tabs.List>\n {Object.entries(tabsConfig).map(\n ([key, tabEntry]: [string, CohortBuilderCategoryConfig]) => {\n const facetList =\n key === 'custom'\n ? []\n : tabEntry.facets\n .map((field) => facetDefinitions[field])\n .filter((facet) => facet);\n return (\n <Tabs.Panel key={key} value={key}>\n {key === 'custom' && customFacetHooks ? (\n <CustomFacetGroup\n hooks={hooks}\n queryOptions={tabEntry.queryOptions}\n getFacetLabel={getFacetLabel}\n customFacetHooks={customFacetHooks}\n cardScrollMargin={cardScrollMargin}\n Chart={Chart}\n usedFacets={usedFacets}\n useFieldNameToTitle={useFieldNameToTitle}\n />\n ) : (\n <FacetGroup\n facets={facetList}\n queryOptions={tabEntry.queryOptions}\n >\n {createFacetCards({\n facets: facetList,\n facetNameFormatter: (field: string) =>\n fieldNameToTitle(field),\n hooks,\n idPrefix: 'cohort-builder',\n valueLabel: getFacetLabel,\n queryOptions: tabEntry.queryOptions,\n cardScrollMargin,\n Chart,\n })}\n </FacetGroup>\n )}\n </Tabs.Panel>\n );\n },\n )}\n </StyledFacetTabs>\n )}\n </div>\n </MantineProvider>\n );\n};\n\nexport default FacetTabs;\n","import React from 'react';\nimport { useDisclosure } from '@mantine/hooks';\nimport { Modal } from '@mantine/core';\nimport { DetailsComponentProps, DetailsPanelComponentProps } from './types';\nimport { useEffect, useMemo } from 'react';\nimport { mergeDefaultTailwindClassnames } from '../../utils/mergeDefaultTailwindClassnames';\n\nconst DEFAULT_PROPS = {\n body: 'bg-base-max',\n header: '!bg-primary !pb-9 !mb-9',\n title: '!text-primary-contrast !font-bold',\n close: '!bg-base-darker',\n};\n\nexport const DetailsModal = <\n T extends DetailsPanelComponentProps = DetailsPanelComponentProps,\n>({\n title,\n id,\n row,\n classNames,\n panel,\n panelProps,\n onClose,\n withCloseButton = true,\n closeOnClickOutside = true,\n closeOnEscape = true,\n size = 'auto',\n}: DetailsComponentProps<T>) => {\n const [opened, { open, close }] = useDisclosure(id !== undefined);\n\n const styling = useMemo(\n () => mergeDefaultTailwindClassnames(DEFAULT_PROPS, classNames ?? {}),\n [classNames],\n );\n\n useEffect(() => {\n if (id !== undefined) open();\n else close();\n }, [close, id, open]);\n\n return (\n <Modal\n opened={opened}\n onClose={() => {\n close();\n if (onClose) onClose(id);\n }}\n title={title}\n withinPortal={true}\n withCloseButton={withCloseButton}\n closeOnClickOutside={closeOnClickOutside}\n closeOnEscape={closeOnEscape}\n size={size}\n yOffset=\"3vh\"\n classNames={styling}\n xOffset={0}\n >\n {panel({ id, onClose, row, ...panelProps })}\n </Modal>\n );\n};\n\nexport default DetailsModal;\n","import React, { useEffect } from 'react';\nimport { Button, Drawer } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport { MdKeyboardDoubleArrowLeft as BackIcon } from 'react-icons/md';\nimport { DetailsComponentProps, DetailsPanelComponentProps } from './types';\n\nconst DetailsDrawer = <\n T extends DetailsPanelComponentProps = DetailsPanelComponentProps,\n>({\n id,\n title,\n panel,\n panelProps,\n}: DetailsComponentProps<T>) => {\n const [opened, { open, close }] = useDisclosure(id !== undefined);\n\n useEffect(() => {\n if (id !== undefined) open();\n else close();\n }, [close, id, open]);\n\n return (\n <Drawer.Root opened={opened} onClose={close} size=\"50%\" position=\"right\">\n <Drawer.Overlay opacity={0.5} blur={4} />\n <Drawer.Content>\n <Drawer.Header>\n <Button leftSection={<BackIcon />} onClick={close} variant=\"outline\">\n Back\n </Button>\n </Drawer.Header>\n <Drawer.Body>{panel({ id: id, ...panelProps })}</Drawer.Body>\n </Drawer.Content>\n </Drawer.Root>\n );\n};\n\nexport default DetailsDrawer;\n","import React, { ReactNode } from 'react';\nimport { RenderFactoryTypedInstance } from '../../../utils/RendererFactory';\nimport { Icon } from '@iconify-icon/react';\nimport Link from 'next/link';\nimport { filesize } from 'filesize';\nimport { isArray } from 'lodash';\nimport { Badge, Text } from '@mantine/core';\nimport { CellRendererFunction, CellRendererFunctionProps } from './types';\nimport {\n OpenControlledAccessCellRenderer,\n ProjectAccessCellRenderer,\n} from './AccessCellRenderers';\n\nexport interface CellRendererFunctionCatalogEntry {\n [key: string]: CellRendererFunction;\n}\n\nexport const RenderArrayCellSimple: CellRendererFunction = ({\n cell,\n}: CellRendererFunctionProps, defaultIfEmpty: string = '') => {\n const value = cell.getValue();\n if (isArray(value)) {\n const tempValue = value.map((x) => (x == null ? defaultIfEmpty : x));\n return (\n <span>\n {tempValue.join(', ')}\n </span>\n );\n }\n return (<span>{value? value as string: defaultIfEmpty}</span>);\n};\n\n// TODO need to type this\nexport const RenderArrayCell: CellRendererFunction = ({\n cell,\n}: CellRendererFunctionProps) => {\n const value = cell.getValue();\n if (isArray(value)) {\n return (\n <div className=\"w-64 flex flex-wrap gap-0.5\">\n {value.map((x, index) => (\n <Badge\n variant=\"outline\"\n classNames={{ root: 'basis-1/3' }}\n color=\"accent-light\"\n key={`${cell.id}-value-${index}`}\n >\n {x}\n </Badge>\n ))}\n </div>\n );\n }\n return <span>value</span>;\n};\n\nexport const RenderArrayCellNegativePositive = ({\n cell,\n}: CellRendererFunctionProps) => {\n const value = cell.getValue();\n if (isArray(value)) {\n return (\n <div className=\"w-64 flex flex-wrap gap-0.5\">\n {value.map((x, index) => (\n <Badge\n variant=\"filled\"\n color={x === 'Positive' ? 'green' : 'gray'}\n classNames={{ root: 'basis-1/3' }}\n key={`${cell.id}-value-${index}`}\n >\n {x}\n </Badge>\n ))}\n </div>\n );\n }\n return <span>value</span>;\n};\n\nconst ValueCellRenderer = ({ cell }: CellRendererFunctionProps) => {\n return <span>{cell.getValue() as ReactNode}</span>;\n};\n\nconst FilesizeRenderer = ({ cell }: CellRendererFunctionProps) => {\n const value = cell.getValue();\n\n if (value == null) return <span>---</span>;\n\n // Handle numbers\n if (typeof value === 'number') {\n return Number.isFinite(value) ? (\n <span>{filesize(value)}</span>\n ) : (\n <span>---</span>\n );\n }\n\n // Handle bigints if present\n if (typeof value === 'bigint') {\n return <span>{filesize(value)}</span>;\n }\n\n // Handle numeric strings\n if (typeof value === 'string') {\n const n = Number(value.trim());\n return Number.isFinite(n) ? <span>{filesize(n)}</span> : <span>---</span>;\n }\n\n // Unsupported type\n return <span>---</span>;\n};\n\nconst ArrayCellFunctionCatalog = {\n NegativePositive: RenderArrayCellNegativePositive,\n default: RenderArrayCell,\n simple: RenderArrayCellSimple,\n};\n\nconst RenderLinkCell = (\n { cell }: CellRendererFunctionProps,\n ...args: Array<Record<string, unknown>>\n) => {\n return (\n <a\n href={`${args[0].baseURL}${cell.getValue()}`}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Text c=\"blue\" td=\"underline\" fw={700}>\n {' '}\n {cell.getValue() as ReactNode}{' '}\n </Text>\n </a>\n );\n};\n\ninterface RenderNextLinkCellWithIconParams {\n baseURL?: string;\n icon?: string;\n size?: string;\n iconHeight?: string;\n linkField?: string; // field to use for link instead of cell value\n classNames?: {\n icon?: string;\n text?: string;\n };\n}\n\nconst isRenderNextLinkCellWithIconParams = (\n value: unknown,\n): value is RenderNextLinkCellWithIconParams => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n\n return (\n (obj.baseURL === undefined || typeof obj.baseURL === 'string') &&\n (obj.icon === undefined || typeof obj.icon === 'string') &&\n (obj.size === undefined || typeof obj.size === 'string') &&\n (obj.linkField === undefined || typeof obj.linkField === 'string')\n );\n};\n\nconst RenderLinkCellWithIcon = (\n { cell }: CellRendererFunctionProps,\n ...args: Array<Record<string, any>>\n) => {\n let baseURL = '';\n let icon: string | null = null;\n let size = 'sm';\n let iconHeight = '1em';\n let linkField: string | undefined = undefined;\n let classNames: Partial<{\n icon: string;\n text: string;\n }> = {\n icon: '',\n text: '',\n };\n\n const params = args[0];\n if (isRenderNextLinkCellWithIconParams(params)) {\n baseURL = params.baseURL ?? baseURL;\n if (params.icon) {\n icon = params.icon;\n }\n size = params.size ?? size;\n iconHeight = params.iconHeight ?? iconHeight;\n linkField = params.linkField ?? undefined;\n classNames = params?.classNames ?? {\n icon: '',\n text: '',\n };\n }\n\n let linkURL = `${baseURL}${cell.getValue()}`;\n if (linkField) {\n const value = cell.row.original[linkField];\n if (typeof value === 'string') {\n linkURL = `${baseURL}${value}`;\n }\n }\n\n return (\n <Link href={linkURL} target=\"_blank\" rel=\"noreferrer\">\n <div className=\"flex items-center gap-1\">\n {icon && <Icon height={iconHeight} icon={icon} />}\n <Text fw={700} size={size} classNames={{ root: classNames?.text }}>\n {cell.getValue() as ReactNode}\n </Text>\n </div>\n </Link>\n );\n};\n\nconst RenderLinkCellUsingValueMap = (\n { cell }: CellRendererFunctionProps,\n ...args: Array<Record<string, unknown>>\n) => {\n let href = null;\n if (\n typeof args[0] === 'object' &&\n Object.keys(args[0]).includes('valueToURL')\n ) {\n const linkMap = args[0].valueToURL as Record<string, string>;\n href = linkMap[cell.getValue() as string] ?? null;\n }\n if (!href) return <Text fw={700}> {cell.getValue() as ReactNode} </Text>;\n\n return (\n <a href={`${href}`} target=\"_blank\" rel=\"noreferrer\">\n <Text c=\"blue\" td=\"underline\" fw={700}>\n {' '}\n {cell.getValue() as ReactNode}{' '}\n </Text>\n </a>\n );\n};\n\nconst LinkCellFunctionCatalog = {\n default: RenderLinkCell,\n linkWithValueMap: RenderLinkCellUsingValueMap,\n linkWithIcon: RenderLinkCellWithIcon,\n};\n\nlet instance: RenderFactoryTypedInstance<CellRendererFunctionProps>;\n\nexport const ExplorerTableCellRendererFactory =\n (): RenderFactoryTypedInstance<CellRendererFunctionProps> => {\n if (!instance) {\n instance = new RenderFactoryTypedInstance<CellRendererFunctionProps>();\n }\n return instance;\n };\n\n// register default cell renderers\nexport const registerExplorerDefaultCellRenderers = () => {\n ExplorerTableCellRendererFactory().registerRendererCatalog({\n value: {\n default: ValueCellRenderer,\n\n filesize: FilesizeRenderer,\n },\n });\n ExplorerTableCellRendererFactory().registerRendererCatalog({\n access: {\n projectAccess: ProjectAccessCellRenderer,\n openControlledAccess: OpenControlledAccessCellRenderer,\n },\n });\n ExplorerTableCellRendererFactory().registerRendererCatalog({\n array: ArrayCellFunctionCatalog,\n });\n ExplorerTableCellRendererFactory().registerRendererCatalog({\n link: LinkCellFunctionCatalog,\n });\n};\n","import { humanify, JSONObject } from '@gen3/core';\nimport { JSONPath } from 'jsonpath-plus';\nimport { saveAs } from 'file-saver';\nimport {\n MRT_Column,\n MRT_ColumnOrderState,\n MRT_RowData,\n MRT_VisibilityState,\n} from 'mantine-react-table';\n\nexport const jsonPathAccessor = (path: string) => (row: JSONObject) => {\n return JSONPath({ json: row, path: path });\n};\n\nexport function downloadTSV<TData extends MRT_RowData>({\n tableData,\n columns,\n columnOrder,\n columnVisibility,\n fileName,\n option,\n}: {\n tableData: TData[];\n columns: MRT_Column<TData>[];\n columnOrder?: MRT_ColumnOrderState;\n columnVisibility?: MRT_VisibilityState;\n fileName: string;\n option?: {\n // should be ids of the column\n blacklist?: string[];\n overwrite?: Record<\n string, // should be id of the column\n {\n header?: string;\n composer?: (data: TData) => void;\n }\n >;\n };\n}): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n try {\n // Filter columns based on blackList and columnVisibility\n const filteredColumns = columns.filter((column) => {\n const columnId = column.id;\n return (\n !option?.blacklist?.includes(columnId) &&\n !(columnVisibility?.[columnId] === false)\n );\n });\n\n // Sort columns based on columnOrder\n const sortedColumns = (columnOrder || columns.map((column) => column.id))\n ?.map((columnId) => {\n const foundColumn = filteredColumns.find(\n (column) => column.id === columnId,\n );\n return foundColumn ? foundColumn : null;\n })\n .filter((column) => column !== null);\n\n const header = sortedColumns\n .map((column) =>\n typeof column?.header === 'string'\n ? column.header\n : humanify({ term: column.id }),\n )\n .join('\\t');\n\n const body = (tableData || [])\n .map((datum) =>\n sortedColumns\n .map((column) => {\n const composer = option?.overwrite?.[column.id]?.composer;\n return composer ? composer(datum) : datum?.[column.id];\n })\n .join('\\t'),\n )\n .join('\\n');\n\n const tsv = [header, body].join('\\n');\n const blob = new Blob([tsv], { type: 'text/tsv' });\n\n saveAs(blob, fileName);\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n","import React from 'react';\nimport { isArray } from 'lodash';\nimport { JSONObject } from '@gen3/core';\nimport { CellRendererFunction, CellRendererFunctionProps } from './types';\n\nexport const ArrayCellRenderer = (\n cellRenderFunction: CellRendererFunction,\n props: CellRendererFunctionProps<JSONObject>,\n ...args: any[]\n) => {\n const { cell } = props;\n const value = cell.getValue();\n if (isArray(value)) {\n return (\n <div className=\"w-64 flex flex-wrap gap-0.5\">\n {value.map((x) => cellRenderFunction({ ...props, cell: x }, args))}\n </div>\n );\n } else {\n return cellRenderFunction(props, args);\n }\n};\n","import { fieldNameToTitle } from '@gen3/core';\nimport {\n CellRendererFunctionProps,\n ColumnDefinition,\n ExplorerColumn,\n ExplorerTableColumnMRT,\n SummaryTableColumn,\n TableColumnsAndFields,\n} from './types';\nimport { type MRT_Column } from 'mantine-react-table';\nimport { ExplorerTableCellRendererFactory, RenderArrayCellSimple, } from './ExplorerTableCellRenderers';\nimport { jsonPathAccessor } from '../../../components/Tables/utils';\nimport { ArrayCellRenderer } from './ArrayCellRenderer';\n\nexport const convertGuppyTableConfig = (\n config: ReadonlyArray<SummaryTableColumn>,\n): ColumnDefinition[] => {\n // convert the config to the format that guppy table expects\n return config.map((column: SummaryTableColumn) => {\n return {\n header: column.title ?? fieldNameToTitle(column.field),\n accessorKey: column.field,\n };\n });\n};\n\nexport const isRecordAny = (obj: unknown): obj is Record<string, any> => {\n if (Array.isArray(obj)) return false;\n\n return obj !== null && typeof obj === 'object';\n};\n\nexport const createTableColumns = (tableConfig: TableColumnsAndFields) => {\n const tableColumns = tableConfig.fields.map((field) => {\n const columnDef = tableConfig?.columns?.[field];\n\n const cellRendererFunc = columnDef?.type\n ? ExplorerTableCellRendererFactory().getRenderer(\n columnDef?.type,\n columnDef?.cellRenderFunction ?? 'default',\n )\n : undefined;\n\n const cellRendererFuncParams =\n columnDef?.params && isRecordAny(columnDef?.params)\n ? columnDef?.params\n : {};\n return {\n id: field,\n field: field,\n accessorKey: field as never,\n header: columnDef?.title ?? fieldNameToTitle(field),\n accessorFn: columnDef?.accessorPath\n ? jsonPathAccessor(columnDef.accessorPath)\n : undefined,\n Cell:\n cellRendererFunc && columnDef?.params\n ? (cell: CellRendererFunctionProps) =>\n cellRendererFunc(cell, cellRendererFuncParams)\n : cellRendererFunc\n ? cellRendererFunc\n : (cell: CellRendererFunctionProps) =>\n RenderArrayCellSimple(cell, tableConfig?.defaultIfEmpty),\n\n size: columnDef?.width,\n enableSorting: columnDef?.sortable ?? undefined,\n visible: columnDef?.visible ?? true,\n lockVisible: columnDef?.lockVisible ?? false,\n };\n });\n\n const lockedVisibility = tableConfig.fields.reduce(\n (acc, field) => {\n const columnDef = tableConfig?.columns?.[field];\n if (columnDef && columnDef?.lockVisible) {\n acc[field] = columnDef?.visible ?? true; // assume visible by default\n }\n return acc;\n },\n { 'mrt-row-actions': true } as Record<string, boolean>,\n );\n\n return {\n tableColumns: tableColumns,\n lockedVisibility: lockedVisibility,\n };\n};\n\nexport const createArrayTableColumns = (\n root: string,\n tableConfig: TableColumnsAndFields,\n): ExplorerTableColumnMRT[] => {\n return tableConfig.fields.map((field) => {\n const columnDef = tableConfig?.columns?.[field];\n\n const cellRendererFunc = columnDef?.type\n ? ExplorerTableCellRendererFactory().getRenderer(\n columnDef?.type,\n columnDef?.cellRenderFunction ?? 'default',\n )\n : undefined;\n\n const cellRendererFuncParams =\n columnDef?.params && isRecordAny(columnDef?.params)\n ? columnDef?.params\n : {};\n return {\n id: field,\n field: field,\n accessorKey: field as never,\n header: columnDef?.title ?? fieldNameToTitle(field),\n accessorFn: columnDef?.accessorPath\n ? jsonPathAccessor(columnDef.accessorPath)\n : undefined,\n Cell:\n cellRendererFunc && columnDef?.params\n ? (cell: CellRendererFunctionProps) =>\n ArrayCellRenderer(cellRendererFunc, cell, cellRendererFuncParams)\n : cellRendererFunc\n ? (cell: CellRendererFunctionProps) =>\n ArrayCellRenderer(cellRendererFunc, cell)\n : (cell: CellRendererFunctionProps) =>\n RenderArrayCellSimple(cell, tableConfig?.defaultIfEmpty),\n\n size: columnDef?.width,\n enableSorting: columnDef?.sortable ?? undefined,\n };\n }, [] as MRT_Column<ExplorerColumn>[]);\n};\n","import React, { useEffect, useRef } from 'react';\nimport { MantineReactTable, useMantineReactTable } from 'mantine-react-table';\nimport { JSONObject } from '@gen3/core';\nimport type { ExplorerTableSubTableProps } from './types';\nimport { TableIcons } from '../../../../components/Tables/TableIcons';\n\nconst ExplorerTableSubTable = ({\n columns,\n data,\n setHeaderHeight = () => {},\n}: ExplorerTableSubTableProps) => {\n const table = useMantineReactTable<JSONObject>({\n columns: columns,\n data: data ?? [],\n enablePagination: false,\n enableTableFooter: false,\n enableTopToolbar: false,\n enableBottomToolbar: false,\n enableColumnResizing: false,\n enableColumnActions: false,\n icons: TableIcons,\n layoutMode: 'grid-no-grow',\n defaultColumn: {\n minSize: 300,\n maxSize: 1000,\n size: 360,\n },\n mantinePaperProps: {\n className: 'border-accent-max rounded-none',\n },\n mantineTableProps: {\n className: 'relative z-[1]',\n },\n mantineTableHeadCellProps: {\n className: 'border-r border-accent-max bg-secondary-lightest font-color-secondary-contrast-lightest',\n },\n mantineTableBodyCellProps: {\n className: 'border-r border-accent-max',\n },\n });\n\n useEffect(() => {\n // Function to measure the header height\n const updateHeaderHeight = () => {\n if (table.refs.tableHeadRef.current) {\n // Get the height of the header cell\n const height =\n table.refs.tableHeadRef.current.getBoundingClientRect().height;\n setHeaderHeight(height);\n }\n };\n\n // Initial measurement\n updateHeaderHeight();\n\n // Set up a resize observer to handle dynamic changes\n const resizeObserver = new ResizeObserver(updateHeaderHeight);\n\n if (table.refs.tableHeadRef.current) {\n resizeObserver.observe(table.refs.tableHeadRef.current);\n }\n\n // Clean up\n return () => {\n if (table.refs.tableHeadRef.current) {\n resizeObserver.unobserve(table.refs.tableHeadRef.current);\n }\n };\n }, [table.refs.tableHeadRef, setHeaderHeight]);\n\n return <MantineReactTable table={table} />;\n};\n\nexport default ExplorerTableSubTable;\n","import React, { useState, useId } from 'react';\nimport { ActionIcon, useMantineTheme } from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport { ExpandingSubTableProps } from './types';\nimport ExplorerTableSubtable from './ExplorerTableSubtable';\nimport { JSONObject, JSONValue } from '@gen3/core';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport { createArrayTableColumns, createTableColumns } from '../utils';\n\ninterface HeaderProps {\n label: string;\n className?: string;\n}\n\nconst Header = ({ label, className }: HeaderProps) => {\n return (\n <div className=\"flex items-center bg-primary px-4 h-10 w-full text-primary-contrast font-bold\">\n {label}\n </div>\n );\n};\n\nconst ExpandingSubtable = ({ config, data }: ExpandingSubTableProps) => {\n const [expanded, setExpanded] = useState(false);\n const [headerHeight, setHeaderHeight] = useState(0);\n\n const theme = useMantineTheme();\n\n const { tableColumns: expandedTableColumns } = useDeepCompareMemo(() => {\n return createTableColumns(config);\n }, [config]);\n\n const compressedTableColumns = useDeepCompareMemo(() => {\n return createArrayTableColumns(config.root, config);\n }, [config]);\n\n const expand = () => {\n setExpanded((prevState) => !prevState);\n };\n\n let tableData = data;\n if (!expanded) {\n // convert data from Array<Record<string, JSONValue>> to Record<string, Array<JSONValue>>\n tableData = [\n data\n ? data.reduce(\n (acc: Record<string, Array<JSONValue>>, row) => {\n config.fields.forEach((field) => {\n acc[field].push(row[field]);\n });\n return acc;\n },\n config.fields.reduce(\n (rec, f) => {\n rec[f] = [];\n return rec;\n },\n {} as Record<string, Array<JSONObject>>,\n ),\n )\n : {},\n ];\n }\n const id = useId();\n\n return (\n <div className=\"flex flex-col mb-5\">\n <Header label={config.label} />\n <div className=\"flex flex-nowrap w-full bg-white\">\n <div className=\"flex flex-col border border-r-0 border-accent-max\">\n <div\n className=\"bg-secondary-lightest\"\n style={{\n minHeight: `${headerHeight}px`,\n }}\n ></div>\n <ActionIcon\n variant=\"transparent\"\n aria-label={`${expanded? 'Collapse' : 'Expand'} ${config.label} table`}\n aria-controls={`${id}-table`}\n id={`${id}-control`}\n onClick={expand}\n className=\"my-auto h-full hover:bg-secondary-max\"\n >\n <Icon\n icon={expanded ? 'gen3:changefrom' : 'gen3:changeto'}\n color={theme.colors.accent[4]}\n />\n </ActionIcon>\n </div>\n <div\n className=\"w-full overflow-x-auto\"\n id={`${id}-table`}\n aria-labelledby={`${id}-control`}>\n {expanded ? (\n <ExplorerTableSubtable\n columns={expandedTableColumns}\n data={tableData}\n setHeaderHeight={setHeaderHeight}\n />\n ) : (\n <ExplorerTableSubtable\n columns={compressedTableColumns}\n data={tableData}\n setHeaderHeight={setHeaderHeight}\n />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ExpandingSubtable;\n","import React, { useMemo, ReactElement } from 'react';\nimport type { FieldSubtable } from '../types';\nimport ExpandingSubtable from './ExpandingSubtable';\nimport { JSONObject } from '@gen3/core';\n\ninterface SubtableStackProps {\n subTables: ReadonlyArray<FieldSubtable>;\n data: JSONObject;\n}\n\nconst SubtableStack = ({ subTables, data }: SubtableStackProps) => {\n const items = useMemo(\n () =>\n subTables.reduce((acc: ReactElement[], config: FieldSubtable) => {\n if (!(config.root in data)) return acc;\n acc.push(\n <ExpandingSubtable\n config={config}\n data={data[config.root] as JSONObject[]}\n />,\n );\n return acc;\n }, []),\n [data, subTables],\n );\n\n return <div className=\"flex flex-col\">{items}</div>;\n};\n\nexport default SubtableStack;\n","import React, { useEffect, useMemo } from 'react';\nimport { LoadingOverlay, Stack } from '@mantine/core';\nimport { useDisclosure } from '@mantine/hooks';\nimport {\n buildNestedFilterForOperation,\n useGetRawDataAndTotalCountsQuery,\n} from '@gen3/core';\nimport ErrorCard from '../../../../components/MessageCards/ErrorCard';\nimport { TableDetailsPanelProps } from './types';\n\nimport { JSONPath } from 'jsonpath-plus';\nimport { isArray } from 'lodash';\nimport { useStudyContext } from '../../../Study/StudyProvider';\nimport { SinglePageStudyDetailsPanel } from '../../../Study';\n\ninterface QueryResponse {\n data?: Record<string, Array<any>>;\n}\n\nfunction isQueryResponse(obj: any): obj is QueryResponse {\n // Considering that the data property can be optional\n return (\n typeof obj === 'object' &&\n (obj.data === undefined || typeof obj.data === 'object')\n );\n}\n\nconst ExtractData = (\n data: QueryResponse,\n index: string,\n path?: string,\n): Record<string, any> => {\n if (data === undefined || data === null) return {};\n if (data.data === undefined || data.data === null) return {};\n\n if (!isArray(data.data[index])) return {};\n\n let rowData = data.data[index][0];\n if (path) {\n const tmp = JSONPath({ path: path, json: data.data[index][0] });\n if (!isArray(tmp)) {\n return {};\n }\n if (tmp.length > 0) {\n rowData = tmp[0];\n }\n }\n\n return rowData;\n};\n\nexport const QueryRowDetailsPanel = ({\n id,\n index,\n tableConfig,\n accessibility,\n}: TableDetailsPanelProps) => {\n //const [queryGuppy, { data, isLoading, isError }] = useLazyGeneralGQLQuery();\n const idField = tableConfig.detailsConfig?.idField;\n const simpleDetailsView = tableConfig.detailsConfig?.simpleDetailsView;\n const { setStudyDetails } = useStudyContext();\n const [opened, { open, close }] = useDisclosure(false);\n\n const { data, isError, isFetching } = useGetRawDataAndTotalCountsQuery(\n {\n type: index,\n fields: tableConfig.fields as string[],\n filters: {\n mode: 'and',\n root: {\n [idField as string]: buildNestedFilterForOperation(\n idField as string,\n {\n operator: '=',\n field: idField as string,\n operand: id as string,\n },\n ),\n },\n },\n offset: 0,\n size: 1,\n accessibility: accessibility,\n },\n {\n skip: !idField || !id, // if no ide do not send request\n },\n );\n\n const queryData = useMemo(\n () =>\n isQueryResponse(data)\n ? ExtractData(data, index, tableConfig?.detailsConfig?.dataPath)\n : {},\n [data, index, tableConfig?.detailsConfig?.dataPath],\n );\n\n useEffect(() => {\n setStudyDetails(queryData);\n }, [queryData, setStudyDetails]);\n\n if (!idField) {\n return (\n <ErrorCard message={'idField not configure in Tables Details Config'} />\n );\n }\n\n if (isError) {\n return <ErrorCard message={'Error occurred while fetching data'} />;\n }\n\n // Inital attempt at using Study Details component\n\n return (\n <Stack>\n <LoadingOverlay visible={isFetching} />\n {simpleDetailsView ? (\n <SinglePageStudyDetailsPanel\n data={queryData ?? {}}\n studyConfig={simpleDetailsView}\n />\n ) : (\n <div>Study Details Panel not configured</div>\n )}\n </Stack>\n );\n};\n\nexport default QueryRowDetailsPanel;\n","import React, { Dispatch, SetStateAction, useState } from 'react';\nimport {\n ActionIcon,\n Divider,\n Menu,\n Switch,\n TextInput,\n Tooltip,\n} from '@mantine/core';\nimport {\n MRT_Column,\n MRT_ColumnOrderState,\n MRT_RowData,\n MRT_TableInstance,\n} from 'mantine-react-table';\nimport { isEqual } from 'lodash';\nimport { humanify } from '@gen3/core';\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n restrictToParentElement,\n restrictToVerticalAxis,\n restrictToWindowEdges,\n} from '@dnd-kit/modifiers';\nimport {\n DragIcon,\n ListIcon,\n SearchIcon,\n UndoIcon,\n XIcon,\n} from '../../types/icons';\n\nfunction ColumnOrdering<TData extends MRT_RowData>({\n table,\n handleColumnOrderingReset,\n columnOrder,\n setColumnOrder,\n noColumnOrdering = ['mrt-row-actions'],\n}: {\n table: MRT_TableInstance<TData>;\n handleColumnOrderingReset: () => void;\n columnOrder: MRT_ColumnOrderState;\n setColumnOrder: Dispatch<SetStateAction<MRT_ColumnOrderState>>;\n noColumnOrdering?: string[];\n}): JSX.Element {\n const [showColumnMenu, setShowColumnMenu] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n\n const isBackToDefaults =\n isEqual(table.initialState.columnOrder, columnOrder) &&\n isEqual(\n table.initialState.columnVisibility,\n Object.fromEntries(\n Object.entries(table.getState().columnVisibility).filter(\n ([, value]) => !value,\n ),\n ),\n );\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: { distance: 5 },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event;\n\n if (active?.id && over?.id && active?.id !== over?.id) {\n setColumnOrder((items) => {\n const oldIndex = items.indexOf(active?.id as string);\n const newIndex = items.indexOf(over?.id as string);\n\n return arrayMove(items, oldIndex, newIndex);\n });\n }\n };\n\n return (\n <Menu\n position=\"bottom-end\"\n middlewares={{ shift: false, flip: false }}\n onChange={setShowColumnMenu}\n offset={0}\n zIndex={400}\n withinPortal={true}\n >\n <Tooltip label=\"Customize Columns\" disabled={showColumnMenu}>\n <Menu.Target>\n <ActionIcon\n variant=\"outline\"\n size=\"lg\"\n aria-label=\"Customize Columns\"\n color=\"primary\"\n data-testid=\"button-column-selector-box\"\n className={`${\n showColumnMenu && 'border-2 border-primary'\n } hover:bg-primary hover:text-base-max`}\n >\n {!showColumnMenu ? (\n <ListIcon size=\"1.5rem\" aria-hidden=\"true\" />\n ) : (\n <XIcon size=\"2rem\" aria-hidden=\"true\" />\n )}\n </ActionIcon>\n </Menu.Target>\n </Tooltip>\n\n <Menu.Dropdown\n className=\"bg-base-max border-2 border-primary p-2 rounded-md\"\n data-testid=\"column-selector-popover-modal\"\n >\n <div className=\"flex justify-between items-center\">\n <span className=\"font-bold text-primary-darkest tracking-normal\">\n Customize Columns\n </span>\n\n <Tooltip\n label=\"Restore defaults\"\n disabled={isBackToDefaults}\n zIndex={400}\n >\n <span>\n <ActionIcon\n onClick={handleColumnOrderingReset}\n className={isBackToDefaults ? 'invisible' : 'border-0'}\n data-testid=\"restore-default-icon\"\n aria-label=\"restore default column ordering\"\n >\n <UndoIcon size=\"1rem\" />\n </ActionIcon>\n </span>\n </Tooltip>\n </div>\n <Divider color=\"base.2\" className=\"mt-1\" />\n <TextInput\n value={searchValue}\n onChange={(event) => setSearchValue(event.currentTarget.value.trim())}\n placeholder=\"Filter Columns\"\n aria-label=\"Search input for columns\"\n leftSection={<SearchIcon aria-hidden=\"true\" />}\n className=\"mb-2 mt-4\"\n data-testid=\"textbox-column-selector\"\n />\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[\n restrictToVerticalAxis,\n restrictToWindowEdges,\n restrictToParentElement,\n ]}\n >\n <SortableContext\n items={table.getAllLeafColumns()}\n strategy={verticalListSortingStrategy}\n >\n <List\n columns={table.getAllLeafColumns()}\n searchValue={searchValue}\n noColumnOrdering={noColumnOrdering}\n />\n </SortableContext>\n </DndContext>\n </Menu.Dropdown>\n </Menu>\n );\n}\n\nfunction List<TData extends MRT_RowData>({\n columns,\n searchValue,\n noColumnOrdering = [],\n}: {\n columns: MRT_Column<TData, unknown>[];\n searchValue: string;\n noColumnOrdering?: string[];\n}) {\n return (\n <ul>\n {columns\n .filter((column) => {\n if (!noColumnOrdering.includes(column.id)) {\n return humanify({ term: column.id })\n .toLowerCase()\n .includes(searchValue.toLowerCase());\n } else {\n return column.id;\n }\n })\n .map((column, index) => {\n return !noColumnOrdering.includes(column.id) ? (\n <DraggableColumnItem\n key={column.id}\n column={column}\n isNotLast={index < columns.length - 1}\n />\n ) : (\n <li className=\"hide\" key={column.id} />\n );\n })}\n </ul>\n );\n}\n\nfunction DraggableColumnItem<TData extends MRT_RowData>({\n column,\n isNotLast,\n}: {\n column: MRT_Column<TData, unknown>;\n isNotLast: boolean;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition } =\n useSortable({ id: column.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <li\n ref={setNodeRef}\n style={style}\n {...listeners}\n className={` ${isNotLast ? 'mb-2' : ''}`}\n data-testid={`column-selector-row-${column.id}`}\n >\n <div\n {...attributes}\n role={undefined}\n className=\"flex gap-2 items-center bg-nci-violet-lightest px-1 py-1.5 h-6 cursor-move\"\n >\n <DragIcon size=\"1rem\" className=\"text-primary\" />\n <Switch\n labelPosition=\"left\"\n label={\n typeof column?.columnDef?.header === 'string'\n ? column.columnDef.header\n : humanify({ term: column.id })\n }\n classNames={{\n root: 'w-full',\n body: 'grow flex justify-between',\n label: 'text-xs font-medium tracking-normal',\n }}\n color=\"accent\"\n checked={column.getIsVisible()}\n onChange={() => column.toggleVisibility()}\n onKeyDown={(e) => {\n if (e.code === 'Space') {\n e.preventDefault();\n column.toggleVisibility();\n }\n }}\n size=\"xs\"\n data-testid=\"switch-toggle\"\n />\n </div>\n </li>\n );\n}\n\nexport default ColumnOrdering;\n","import React, { ChangeEvent, useEffect, useRef, useState } from 'react';\nimport { ActionIcon, TextInput, Tooltip } from '@mantine/core';\nimport { MRT_RowData, MRT_TableInstance } from 'mantine-react-table';\n\nimport ColumnOrdering from './ColumnOrdering';\nimport { useViewportSize } from '@mantine/hooks';\nimport { XL_BREAKPOINT } from '../../types/constants';\nimport { CloseIcon, SearchIcon } from '../../types/icons';\nimport { HandleTableSearchOrPaginationChange } from './types';\n\ninterface TableHeaderProps<TData extends MRT_RowData> {\n additionalControls?: React.ReactNode;\n tableTotalDetail?: React.ReactNode;\n tableTitle?: React.ReactNode;\n search?: {\n enabled: boolean;\n placeholder?: string;\n defaultSearchTerm?: string;\n tooltip?: string;\n };\n showControls?: boolean;\n handleChange: HandleTableSearchOrPaginationChange;\n table: MRT_TableInstance<TData>;\n columnOrder: string[];\n setColumnOrder: (order: string[]) => void;\n baseZIndex?: number;\n customBreakpoint?: number;\n noColumnOrdering?: string[];\n}\n\nconst TitleWrapper: React.FC<{ title: React.ReactNode }> = ({ title }) => (\n <div className=\"uppercase text-lg text-left ml-0 lg:ml-auto gap-x-2\">\n {title}\n </div>\n);\n\nconst TotalDetailWrapper: React.FC<{\n detail: React.ReactNode;\n className?: string;\n}> = ({ detail, className = '' }) => (\n <div\n className={`self-center uppercase text-lg text-left ml-0 lg:ml-auto ${className}`}\n >\n {detail}\n </div>\n);\n\nconst TooltipWrapper: React.FC<{\n children: React.ReactNode;\n tooltip: string;\n searchFocused: boolean;\n baseZIndex: number;\n}> = ({ children, tooltip, searchFocused, baseZIndex }) => (\n <Tooltip\n multiline\n label={tooltip}\n position=\"bottom-start\"\n offset={0}\n opened={searchFocused}\n zIndex={baseZIndex + 1} // needs to be higher z-index when in a modal\n classNames={{\n tooltip:\n 'w-72 border border-base-lighter absolute bg-white p-2 text-nci-gray text-sm overflow-wrap break-all rounded-b rounded-t-none font-content',\n }}\n >\n {children}\n </Tooltip>\n);\n\nconst SearchInput: React.FC<{\n searchTerm: string;\n searchFocused: boolean;\n onClear: () => void;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onFocus: () => void;\n onBlur: () => void;\n placeholder?: string;\n tooltip?: string;\n baseZIndex?: number;\n}> = ({\n searchTerm,\n placeholder,\n tooltip,\n searchFocused,\n baseZIndex,\n onClear,\n onChange,\n onFocus,\n onBlur,\n}) => {\n const TooltipContainer = tooltip ? TooltipWrapper : React.Fragment;\n\n return (\n <TooltipContainer\n tooltip={tooltip as string}\n baseZIndex={baseZIndex as number}\n searchFocused={searchFocused}\n >\n <TextInput\n leftSection={<SearchIcon size={24} aria-hidden=\"true\" />}\n data-testid=\"textbox-table-search-bar\"\n placeholder={placeholder ?? 'Search'}\n aria-label=\"Table Search Input\"\n size=\"sm\"\n rightSection={\n searchTerm.length > 0 && (\n <ActionIcon onClick={onClear} className=\"border-0\">\n <CloseIcon aria-label=\"clear search\" />\n </ActionIcon>\n )\n }\n value={searchTerm}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n classNames={{\n input: `border-base-lighter focus:border-2 focus:border-primary${\n tooltip ? ' focus:rounded-b-none' : ''\n }`,\n wrapper: 'xl:w-72',\n }}\n />\n </TooltipContainer>\n );\n};\n\nfunction TableHeader<TData extends MRT_RowData>({\n additionalControls,\n tableTotalDetail,\n tableTitle,\n search,\n showControls,\n handleChange,\n table,\n columnOrder,\n setColumnOrder,\n baseZIndex,\n customBreakpoint,\n noColumnOrdering,\n}: TableHeaderProps<TData>) {\n const [searchTerm, setSearchTerm] = useState(search?.defaultSearchTerm ?? '');\n const [searchFocused, setSearchFocused] = useState(false);\n const inputRef = useRef(null as any); // updated apr 10 25 to get build to work\n const timeoutRef = useRef(null as any); // updated apr 10 25 to get build to work\n const shouldShowControls = search?.enabled || showControls;\n const { width } = useViewportSize();\n\n useEffect(() => {\n if (search?.defaultSearchTerm) {\n inputRef.current?.focus();\n }\n }, [search?.defaultSearchTerm]);\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newSearchTerm = e.target.value;\n setSearchTerm(newSearchTerm);\n\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n\n timeoutRef.current = setTimeout(() => {\n handleChange({ newSearch: newSearchTerm.trim() });\n }, 400);\n };\n\n const handleClearClick = () => {\n setSearchTerm('');\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n handleChange({ newSearch: '' });\n };\n\n const renderSearchAndControls = () => (\n <div className=\"flex items-center gap-2\" data-testid=\"table-options-menu\">\n {search?.enabled && (\n <SearchInput\n searchTerm={searchTerm}\n placeholder={search?.placeholder}\n tooltip={search?.tooltip}\n searchFocused={searchFocused}\n baseZIndex={baseZIndex}\n onClear={handleClearClick}\n onChange={handleInputChange}\n onFocus={() => setSearchFocused(true)}\n onBlur={() => setSearchFocused(false)}\n />\n )}\n {showControls && (\n <ColumnOrdering\n table={table}\n handleColumnOrderingReset={() => {\n table.resetColumnVisibility();\n table.resetColumnOrder();\n }}\n columnOrder={columnOrder}\n setColumnOrder={setColumnOrder as any}\n noColumnOrdering={noColumnOrdering}\n />\n )}\n </div>\n );\n\n const breakpoint = customBreakpoint ?? XL_BREAKPOINT;\n let detailClass = '';\n\n if (tableTitle !== undefined) {\n if (width >= breakpoint && shouldShowControls) {\n detailClass = 'ml-auto';\n }\n } else {\n if (width >= breakpoint && additionalControls) {\n detailClass = 'ml-auto';\n } else {\n detailClass = 'order-first basis-full grow-0 shrink-0 -mb-2';\n }\n }\n\n return (\n <div\n className={`flex flex-wrap gap-4 items-center mb-2 ${\n !additionalControls && !tableTitle ? 'justify-end' : 'justify-between'\n }`}\n >\n {tableTitle && (\n <div\n className={\n additionalControls || (shouldShowControls && width < breakpoint)\n ? 'basis-full grow-0 shrink-0 -mb-2'\n : ''\n }\n >\n <TitleWrapper title={tableTitle} />\n </div>\n )}\n {additionalControls && additionalControls}\n {tableTotalDetail && (\n <div className={detailClass}>\n <TotalDetailWrapper detail={tableTotalDetail} />\n </div>\n )}\n {shouldShowControls && renderSearchAndControls()}\n </div>\n );\n}\n\nexport default TableHeader;\n","import { createContext } from 'react';\n\n// Provides the bottom X position so components can align themselves with the table\n\nfunction emptyFn() {}\n\nexport const TableXPositionContext = createContext<{\n xPosition?: number;\n setXPosition: (xPosition: number) => void;\n}>({ xPosition: undefined, setXPosition: emptyFn });\n","import { ActionIcon, Button } from '@mantine/core';\nimport { cleanNotifications, showNotification } from '@mantine/notifications';\nimport { focusStyles } from '../../utils';\nimport {\n addItemsToCart,\n CART_LIMIT,\n CartItem,\n CoreDispatch,\n removeItemsFromCart,\n selectCart,\n selectCartItem,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport React, { useEffect } from 'react';\nimport { CartIcon, TrashIcon, UndoIcon } from '../../types/icons';\n\ninterface OverLimitNotificationProps {\n readonly numItemsInCart: number;\n}\nconst OverLimitNotification: React.FC<OverLimitNotificationProps> = ({\n numItemsInCart,\n}: OverLimitNotificationProps) => (\n <>\n <p>\n The cart is limited to {CART_LIMIT.toLocaleString()} items and currently\n contains {numItemsInCart.toLocaleString()}{' '}\n {numItemsInCart === 1 ? 'item' : 'items'}.\n </p>\n <p>\n Please add fewer items and/or first remove some items from the cart before\n adding more.\n </p>\n </>\n);\n\ninterface UndoButtonProps {\n readonly action: () => void;\n}\nconst UndoButton: React.FC<UndoButtonProps> = ({ action }: UndoButtonProps) => {\n return (\n <Button\n variant={'white'}\n onClick={action}\n leftSection={<UndoIcon aria-hidden=\"true\" />}\n >\n <span className=\"underline\">Undo</span>\n </Button>\n );\n};\n\ninterface AddNotificationProps {\n readonly items: CartItem[];\n readonly currentCart: CartItem[];\n dispatch: CoreDispatch;\n}\nconst AddNotification: React.FC<AddNotificationProps> = ({\n items,\n currentCart,\n dispatch,\n}: AddNotificationProps) => {\n const itemsToAdd = items?.filter(\n (f) => !currentCart?.map((c) => c.id).includes(f.id),\n );\n\n const newCart = [...currentCart, ...itemsToAdd];\n\n const alreadyInCart = items?.filter((f) => {\n return currentCart?.map((c) => {\n return c.id.includes(f.id);\n });\n });\n\n useEffect(() => {\n if (itemsToAdd.length > 0) {\n dispatch(addItemsToCart(itemsToAdd));\n }\n }, [itemsToAdd, dispatch]);\n\n if (items.length === 1) {\n if (itemsToAdd.length === 1) {\n return (\n <>\n <p>Added {items[0].file_name} to the cart.</p>\n <UndoButton\n action={() => removeFromCart(itemsToAdd, newCart, dispatch)}\n />\n </>\n );\n } else {\n return (\n <>{items[0].file_name} was already in the cart and was not added.</>\n );\n }\n } else {\n if (alreadyInCart.length === 0) {\n return (\n <>\n <p>\n Added {itemsToAdd.length}{' '}\n {itemsToAdd.length === 1 ? 'file' : 'items'} to the cart.\n </p>\n <UndoButton\n action={() => removeFromCart(itemsToAdd, newCart, dispatch)}\n />\n </>\n );\n } else {\n return (\n <>\n <p>\n Added {itemsToAdd.length}{' '}\n {itemsToAdd.length === 1 ? 'file' : 'items'} to the cart.\n </p>\n <p>\n {alreadyInCart.length}{' '}\n {alreadyInCart.length === 1 ? 'file was' : 'items were'} already in\n the cart and {alreadyInCart.length === 1 ? 'was' : 'were'} not\n added.\n </p>\n {itemsToAdd.length !== 0 && (\n <UndoButton\n action={() => removeFromCart(itemsToAdd, newCart, dispatch)}\n />\n )}\n </>\n );\n }\n }\n};\n\ninterface RemoveNotificationProps {\n items: readonly CartItem[];\n readonly currentCart: CartItem[];\n dispatch: CoreDispatch;\n}\nconst RemoveNotification: React.FC<RemoveNotificationProps> = ({\n items,\n currentCart,\n dispatch,\n}: RemoveNotificationProps) => {\n const itemsToRemove = items?.filter((f) =>\n currentCart?.map((CartItem) => CartItem.id).includes(f.id),\n );\n\n const newCart = items?.filter((f) => !itemsToRemove.includes(f));\n\n if (itemsToRemove.length === 1) {\n return (\n <>\n <p>Removed {itemsToRemove[0].file_name} from the cart.</p>\n <UndoButton\n action={() => addToCart(itemsToRemove, newCart, dispatch)}\n />\n </>\n );\n } else {\n return (\n <>\n <p>Removed {itemsToRemove.length} items from the cart.</p>\n {itemsToRemove.length !== 0 && (\n <UndoButton\n action={() => addToCart(itemsToRemove, newCart, dispatch)}\n />\n )}\n </>\n );\n }\n};\n\nexport const removeFromCart = (\n items: readonly CartItem[],\n currentCart: CartItem[],\n dispatch: CoreDispatch,\n): void => {\n cleanNotifications();\n showNotification({\n message: (\n <RemoveNotification\n items={items}\n currentCart={currentCart}\n dispatch={dispatch}\n />\n ),\n classNames: {\n description: 'flex flex-col content-center text-center',\n },\n closeButtonProps: { 'aria-label': 'Close notification' },\n position: 'top-center',\n });\n const itemsToRemove = items?.map((f) => f.id);\n dispatch(removeItemsFromCart(itemsToRemove));\n};\n\nexport const showCartOverLimitNotification = (numItemsInCart: number): void => {\n showNotification({\n message: <OverLimitNotification numItemsInCart={numItemsInCart} />,\n classNames: {\n description: 'flex flex-col content-center text-center',\n },\n closeButtonProps: { 'aria-label': 'Close notification' },\n position: 'top-center',\n });\n};\n\nexport const addToCart = (\n items: CartItem[],\n currentCart: CartItem[],\n dispatch: CoreDispatch,\n): void => {\n const newCartSize = items.length + currentCart.length;\n cleanNotifications();\n\n if (newCartSize > CART_LIMIT) {\n showCartOverLimitNotification(currentCart.length);\n } else {\n showNotification({\n message: (\n <AddNotification\n items={items}\n currentCart={currentCart}\n dispatch={dispatch}\n />\n ),\n classNames: {\n description: 'flex flex-col content-center text-center',\n },\n closeButtonProps: { 'aria-label': 'Close notification' },\n position: 'top-center',\n });\n }\n};\n\ninterface CartButtonProps {\n readonly items: CartItem[];\n readonly iconOnly?: boolean;\n}\n\nexport const AddToCartButton: React.FC<CartButtonProps> = ({\n items,\n iconOnly = false,\n}: CartButtonProps) => {\n const currentCart = useCoreSelector((state) => selectCart(state));\n const dispatch = useCoreDispatch();\n\n return iconOnly ? (\n <ActionIcon\n title=\"Add to cart\"\n aria-label=\"Add to cart\"\n className=\"mx-auto text-primary-content-darkest border-primary-darkest\"\n onClick={() => addToCart(items, currentCart, dispatch)}\n >\n <CartIcon />\n </ActionIcon>\n ) : (\n <Button\n data-testid=\"button-add-to-cart\"\n className={`font-medium text-sm text-primary bg-base-max hover:bg-primary-darkest hover:text-primary-contrast-darker ${focusStyles}`}\n onClick={() => addToCart(items, currentCart, dispatch)}\n variant=\"outline\"\n >\n <CartIcon className=\"mr-2\" /> Add to Cart\n </Button>\n );\n};\n\nexport const RemoveFromCartButton: React.FC<CartButtonProps> = ({\n items,\n iconOnly = false,\n}: CartButtonProps) => {\n const currentCart = useCoreSelector((state) => selectCart(state));\n const dispatch = useCoreDispatch();\n\n return iconOnly ? (\n <ActionIcon\n size={24}\n title=\"Remove From Cart\"\n aria-label=\"Remove from cart\"\n variant=\"outline\"\n onClick={() => removeFromCart(items, currentCart, dispatch)}\n className=\"ml-4 text-primary border-primary\"\n >\n <TrashIcon />\n </ActionIcon>\n ) : (\n <Button\n data-testid=\"button-remove-from-cart\"\n onClick={() => removeFromCart(items, currentCart, dispatch)}\n className={`font-medium text-sm text-base-max primary-darker hover:bg-removeButtonHover ${focusStyles}`}\n variant=\"outline\"\n >\n <CartIcon className=\"mr-2\" />\n Remove From Cart\n </Button>\n );\n};\n\ninterface SingleItemCartButtonProps {\n readonly item: CartItem;\n}\n\nexport const SingleItemAddToCartButton: React.FC<SingleItemCartButtonProps> = ({\n item,\n}: SingleItemCartButtonProps) => {\n const currentCart = useCoreSelector((state) => selectCart(state));\n const dispatch = useCoreDispatch();\n const inCart = useCoreSelector((state) => selectCartItem(state, item.id));\n\n return (\n <ActionIcon\n key={item.id}\n title={inCart ? 'Remove From Cart' : 'Add to Cart'}\n aria-label={inCart ? 'Remove from cart' : 'Add to Cart'}\n onClick={() => {\n if (inCart) {\n removeFromCart([item], currentCart, dispatch);\n } else {\n addToCart([item], currentCart, dispatch);\n }\n }}\n className={`mx-auto ${\n inCart ? 'bg-primary text-white' : 'bg-white text-black border-primary'\n }`}\n >\n <CartIcon />\n </ActionIcon>\n );\n};\n","import React, {\n useCallback,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport {\n CoreState,\n isJSONValue,\n JSONObject,\n selectIndexFilters,\n useCoreSelector,\n useGetRawDataAndTotalCountsQuery,\n} from '@gen3/core';\nimport {\n MantineReactTable,\n type MRT_ColumnOrderState,\n type MRT_PaginationState,\n type MRT_Row,\n type MRT_RowSelectionState,\n type MRT_SortingState,\n useMantineReactTable,\n} from 'mantine-react-table';\nimport { TableIcons } from '../../../components/Tables/TableIcons';\nimport {\n ExplorerTableProps,\n RowSelectionConfiguration,\n SummaryTable,\n} from './types';\nimport { type TableDetailsPanelProps } from './ExploreTableDetails';\nimport { DetailsDrawer, DetailsModal } from '../../../components/Details';\nimport { createTableColumns } from './utils';\nimport SubtableStack from './SubTables/SubtableStack';\nimport { JSONPath } from 'jsonpath-plus';\nimport { StudyProvider } from '../../Study';\nimport QueryRowDetailsPanel from './ExploreTableDetails/QueryRowDetailsPanel';\nimport TableHeader from '../../../components/Tables/TableHeader';\nimport { TableSearchOrPaginationProps } from '../../../components/Tables/types';\nimport { TableXPositionContext } from './context';\nimport { SingleItemAddToCartButton } from '../../cart/updateCart';\n\nconst DEFAULT_PAGE_LIMIT_LABEL = 'Rows per Page (Limited to 10,0000):';\nconst DEFAULT_PAGE_LIMIT = 10000;\n\nconst processRowActions = (\n configuration: RowSelectionConfiguration | undefined,\n) => {\n if (!configuration || configuration.enabled === false)\n return {\n enableRowActions: false,\n };\n\n if (configuration.action === 'cart') {\n return {\n enableRowActions: true,\n renderRowActions: ({ row }: { row: MRT_Row<JSONObject> }) => {\n const itemData = configuration?.itemFields?.reduce(\n (acc: Record<string, any>, key) => {\n if (key in row.original) acc[key] = row.original[key];\n return acc;\n },\n {},\n );\n return (\n <SingleItemAddToCartButton\n item={{\n id: row.id,\n ...itemData,\n }}\n />\n );\n },\n };\n }\n\n return { enableRowActions: false };\n};\n\n/**\n * Main table component for the explorer page. Fetches data from guppy using\n * useGetRawDataAndTotalCountsQuery() hook that leverages guppy core API slices\n *\n * @param index - Offset to use for fetching/displaying pages of rows\n * @param tableConfig - Inherited from ExplorerPageGetServerSideProps\n * @param accessibility - set the access level for the cohort data\n */\nconst ExplorerTable = ({\n index,\n tableConfig,\n accessibility,\n classNames,\n size = 'sm',\n additionalControls,\n tableTotalDetail,\n tableTitle,\n indexPrefix = '',\n dataHook = useGetRawDataAndTotalCountsQuery,\n}: ExplorerTableProps) => {\n const [pagination, setPagination] = useState<MRT_PaginationState>({\n pageIndex: 0,\n pageSize: 20,\n });\n const ref = useRef<HTMLDivElement | null>(null);\n\n const DetailsComponent = useMemo(() => {\n if (\n !tableConfig?.detailsConfig ||\n !tableConfig?.detailsConfig?.panel ||\n tableConfig?.detailsConfig?.mode === 'none'\n )\n return null;\n return tableConfig?.detailsConfig?.panelContainer === 'drawer'\n ? DetailsDrawer<TableDetailsPanelProps>\n : DetailsModal<TableDetailsPanelProps>;\n }, []);\n\n const [sorting, setSorting] = useState<MRT_SortingState>([]);\n const [rowSelection, setRowSelection] = useState<MRT_RowSelectionState>({});\n const [selectedRow, setSelectedRow] = useState<\n MRT_Row<Record<string, any>> | undefined\n >(undefined);\n const { tableColumns, lockedVisibility } = useDeepCompareMemo(() => {\n return createTableColumns(tableConfig);\n }, [tableConfig]);\n const [columnVisibility, setColumnVisibility] = useState(lockedVisibility);\n\n // const DetailsPanel = useMemo(\n // () =>\n // ExplorerTableDetailsPanelFactory().getRenderer(\n // 'tableDetails',\n // tableConfig?.detailsConfig?.panel ?? 'default',\n // ),\n // [tableConfig?.detailsConfig?.panel],\n // );\n\n const DetailsPanel = useMemo(() => QueryRowDetailsPanel, []);\n\n const handleColumnVisibilityChange = (updater: any) => {\n const newState =\n typeof updater === 'function' ? updater(columnVisibility) : updater;\n\n setColumnVisibility({\n ...{\n ...newState,\n 'mrt-row-expand': false,\n 'mrt-row-actions': true,\n ...lockedVisibility,\n },\n });\n };\n\n const [columnOrder, setColumnOrder] = useState<MRT_ColumnOrderState>(\n tableColumns.map((column: any) => column.id as string), //must start out with populated columnOrder so we can splice\n );\n\n const handleSearchOrPageChange = useCallback(\n (params: TableSearchOrPaginationProps) => null,\n [],\n );\n\n // TODO: add support for nested fields\n const fields = useMemo(\n () => tableColumns.map((column) => column.field),\n [tableColumns],\n );\n\n const getRowId = useCallback((tableConfig: SummaryTable) => {\n const { detailsConfig } = tableConfig || {};\n const detailsIdField: string | undefined = detailsConfig?.idField; // Old Way\n const rowIdField: string | undefined = tableConfig?.rowIdField;\n if (!detailsIdField && !rowIdField) return undefined;\n const idField = rowIdField ?? detailsIdField;\n if (idField === undefined) return undefined;\n\n return (originalRow: JSONObject) => {\n const id = JSONPath({ json: originalRow, path: idField });\n if (id.length > 0) {\n return id[0];\n } else {\n return undefined;\n }\n };\n }, []);\n\n const cohortFilters = useCoreSelector((state: CoreState) =>\n selectIndexFilters(state, index),\n );\n const { xPosition, setXPosition } = useContext(TableXPositionContext);\n const { data, isLoading, isError, isFetching, isSuccess } = dataHook({\n type: index,\n fields: fields,\n filters: cohortFilters,\n offset: pagination.pageIndex * pagination.pageSize,\n size: pagination.pageSize,\n sort:\n sorting.length > 0\n ? (sorting.map((x) => {\n return { [x.id]: x.desc ? 'desc' : 'asc' };\n }) as Record<string, 'desc' | 'asc'>[])\n : undefined,\n accessibility: accessibility,\n indexPrefix: indexPrefix,\n });\n\n const { totalRowCount, limitLabel } = useDeepCompareMemo(() => {\n const pageLimit =\n (tableConfig?.pageLimit && tableConfig?.pageLimit?.limit) ??\n DEFAULT_PAGE_LIMIT;\n const totalRowCount = tableConfig?.pageLimit\n ? Math.min(\n pageLimit,\n data?.data?.[`${indexPrefix}_aggregation`]?.[index]._totalCount ??\n pagination.pageSize,\n )\n : (data?.data?.[`${indexPrefix}_aggregation`]?.[index]._totalCount ??\n pagination.pageSize);\n const limitLabel = tableConfig?.pageLimit\n ? (tableConfig?.pageLimit?.label ?? DEFAULT_PAGE_LIMIT_LABEL)\n : 'Rows per Page:';\n return { totalRowCount, limitLabel };\n }, [tableConfig, data, pagination.pageSize, index]);\n\n const rowActions = useDeepCompareMemo(\n () => processRowActions(tableConfig?.selectableRowsConfiguration),\n\n [tableConfig?.selectableRowsConfiguration],\n );\n\n /**\n * mantine-react-table setup\n * @see https://www.mantine-react-table.com/docs/api/table-options\n * @param columns - column options table config\n * @see https://www.mantine-react-table.com/docs/api/column-options\n * @param data - data array, from useGetRawDataAndTotalCountsQuery()\n * @param manualSorting - If this is true, you will be expected to sort your data before it is passed to the table.\n * @param manualPagination - If this is true, you will be expected to manually paginate the rows before passing them to the table\n * @param paginateExpandedRows - If true expanded rows will be paginated along with the rest of the table (which means expanded rows may span multiple pages) -\n * @param onPaginationChange - If this function is provided, it will be called when the pagination state changes and you will be expected to manage the state yourself\n * @param onSortingChange - If provided, this function will be called with an updaterFn when variable state. sorting changes. Overrides default internal state management\n * @param enableTopToolbar - enables additional ux features\n * @param rowCount - Number of rows in the table\n * @param tableConfig - Inherited from ExplorerPageGetServerSideProps\n * @param {Partial<MRT_TableState<TData>>} state - State management configs\n * @see https://www.mantine-react-table.com/docs/guides/state-management#manage-individual-states-as-needed\n */\n\n const table = useMantineReactTable<JSONObject>({\n columns: tableColumns as any[], //TODO: fix this\n data: data?.data?.[`${indexPrefix}${index}`] ?? [\n {\n id: 'no-data',\n name: 'No Data',\n description: 'No Data',\n },\n ],\n manualSorting: true,\n manualPagination: true,\n enableStickyHeader: true,\n enableColumnFilters: false,\n paginateExpandedRows: false,\n onPaginationChange: setPagination,\n onSortingChange: setSorting,\n enableTopToolbar: false,\n enableExpandAll: false,\n enableHiding: true,\n displayColumnDefOptions: {\n 'mrt-row-expand': {\n enableHiding: true, //now row numbers are hideable too\n },\n ...(tableConfig?.selectableRowsConfiguration?.enabled &&\n tableConfig?.selectableRowsConfiguration?.action === 'cart'\n ? { 'mrt-row-actions': { header: 'Cart', enableHiding: false } } // TODO: make this configurable but for now we will never hide this column\n : {}),\n },\n onColumnVisibilityChange: handleColumnVisibilityChange,\n enableExpanding: !!tableConfig?.detailsConfig,\n //enableColumnOrdering: tableConfig?.columnSorting,\n // enableHiding: tableConfig?.columnHiding,\n getRowId: getRowId(tableConfig),\n rowCount: totalRowCount,\n icons: TableIcons,\n paginationDisplayMode: 'pages',\n localization: { rowsPerPage: limitLabel },\n\n // mantineExpandAllButtonProps: {\n // style: {\n // visibility: 'hidden',\n // },\n // },\n // mantineExpandButtonProps: {\n // style: {\n // visibility: 'hidden',\n // },\n // },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-1)',\n '--mrt-striped-row-background-color': 'var(--mantine-color-base-3)',\n fontSize: `var(--mantine-font-size-${size})`,\n zIndex: 10,\n },\n },\n mantinePaginationProps: {\n rowsPerPageOptions: ['5', '10', '20', '40', '100'],\n withEdges: false, //note: changed from `showFirstLastButtons` in v1.0\n },\n\n mantineTableHeadCellProps: {\n style: {\n '--mrt-base-background-color': 'var(--mantine-color-table-1)',\n color: `var(--mantine-color-table-contrast-5')`,\n },\n // sx: (theme) => {\n // return {\n // backgroundColor: theme.colors.table[1],\n // color: theme.colors['table-contrast'][5],\n // textAlign: 'center',\n // padding: theme.spacing.md,\n // fontWeight: 'bold',\n // fontSize: theme.fontSizes.lg,\n // };\n // },\n },\n state: {\n isLoading,\n pagination,\n sorting,\n showProgressBars: isFetching,\n showAlertBanner: isError,\n density: 'xs',\n rowSelection: rowSelection,\n columnVisibility: columnVisibility, //{ 'mrt-row-expand': false, ...lockedVisibility },\n columnOrder: [\n 'mrt-row-expand',\n 'mrt-row-number',\n 'mrt-row-selection',\n 'mrt-row-actions',\n ...columnOrder,\n ],\n },\n mantineTableBodyRowProps:\n tableConfig.detailsConfig?.mode === 'click'\n ? ({ row }) => ({\n onClick: () => {\n if (Object.keys(rowSelection).includes(row.id)) {\n setRowSelection({});\n setSelectedRow(undefined);\n } else {\n setRowSelection({ [row.id as string]: true });\n setSelectedRow(row as any); // TODO: fix this typecast\n }\n },\n sx: {\n cursor: 'pointer', //you might want to change the cursor too when adding an onClick\n },\n })\n : {},\n ...rowActions,\n renderDetailPanel:\n tableConfig.detailsConfig?.mode === 'expand' || tableConfig?.subTables\n ? ({ row }) => {\n const val = tableConfig?.subTables?.some((subTable) => {\n if (\n subTable.root in row.original &&\n isJSONValue(row.original[subTable.root])\n ) {\n return (\n Object.values(row.original[subTable.root] as JSONObject)\n .length > 0\n );\n } else return false;\n });\n if (tableConfig?.subTables && val) {\n return (\n <SubtableStack\n subTables={tableConfig.subTables}\n data={row.original ?? []}\n />\n );\n } else return null;\n }\n : undefined,\n });\n\n const rowCount = table.getRowModel().rows.length;\n\n useLayoutEffect(() => {\n if (\n setXPosition &&\n xPosition === undefined &&\n isSuccess &&\n rowCount > 0 &&\n ref.current\n ) {\n setXPosition(ref?.current?.getBoundingClientRect()?.bottom);\n }\n }, [setXPosition, xPosition, rowCount]);\n\n return (\n <React.Fragment>\n <StudyProvider>\n {DetailsComponent && (\n <DetailsComponent\n title={tableConfig?.detailsConfig?.title}\n id={\n Object.keys(rowSelection).length > 0\n ? Object.keys(rowSelection).at(0)\n : undefined\n }\n row={selectedRow}\n onClose={() => setRowSelection({})}\n panel={DetailsPanel}\n classNames={tableConfig?.detailsConfig?.classNames}\n panelProps={{\n index,\n tableConfig,\n ...(tableConfig?.detailsConfig?.params ?? {}),\n accessibility,\n }}\n />\n )}\n <div className=\"inline-block overflow-x-scroll \" ref={ref}>\n {(tableConfig?.showTableHeaderControls ||\n tableConfig.columnSorting ||\n tableConfig?.columnHiding) && (\n <TableHeader\n table={table}\n columnOrder={columnOrder}\n setColumnOrder={setColumnOrder}\n handleChange={handleSearchOrPageChange}\n additionalControls={additionalControls}\n tableTitle={tableTitle}\n tableTotalDetail={tableTotalDetail}\n showControls={tableConfig?.showTableHeaderControls}\n noColumnOrdering={Object.keys(lockedVisibility)}\n />\n )}\n <MantineReactTable table={table} />\n </div>\n </StudyProvider>\n </React.Fragment>\n );\n};\n\nexport default ExplorerTable;\n","import React from 'react';\nimport { Badge, LoadingOverlay } from '@mantine/core';\nimport { toCountsString } from '../../utils';\nimport { NodeCountConfiguration } from '../../features/CohortBuilder/types';\n\ninterface CountsValueProps {\n label: string;\n counts?: number;\n isFetching: boolean;\n isError: boolean;\n configuration?: NodeCountConfiguration;\n}\n\nconst CountsValue = ({\n label,\n isFetching,\n isError,\n counts,\n configuration,\n}: Readonly<CountsValueProps>) => {\n return (\n <div className=\"relative mr-4\">\n <LoadingOverlay visible={isFetching} />\n <Badge\n autoContrast\n size=\"xl\"\n radius=\"xs\"\n color=\"secondary.4\"\n classNames={{ root: 'h-full' }}\n >\n {isError ? 'error' : toCountsString(counts, label, configuration)}\n </Badge>\n </div>\n );\n};\n\nexport default CountsValue;\n","import React from 'react';\nimport Cookies from 'universal-cookie';\nimport { CoreDispatch, Modals, showModal } from '@gen3/core';\nimport { cleanNotifications, showNotification } from '@mantine/notifications';\nimport { includes, isPlainObject, reduce, uniqueId } from 'lodash';\n\nconst hashString = (s: string) =>\n s.split('').reduce((acc, c) => (acc << 5) - acc + c.charCodeAt(0), 0);\n\nconst getBody = (iframe: HTMLIFrameElement) => {\n const document = iframe?.contentWindow || iframe?.contentDocument;\n return (document as Window)?.document?.body || (document as Document)?.body;\n};\n\nconst toHtml = (key: string, value: any) =>\n `<input\n type=\"hidden\"\n name=\"${key}\"\n value=\"${\n isPlainObject(value)\n ? JSON.stringify(value).replace(/\"/g, '&quot;')\n : value\n }\"\n />`;\n\nconst customKeys = ['expand', 'fields', 'facets'];\n\nconst processParamObj = (key: string, value: any) =>\n includes(customKeys, key) ? [].concat(value).join() : value;\n\n/**\n * A notification box that is used to alert the user that their\n * selected file downloads are in progress\n * @param onClick - Function to handle click on cancel button\n */\nexport const DownloadNotification = () => {\n return (\n <div className=\"flex flex-col justify-center items-center p-4\">\n <p>Preparing download.</p>\n </div>\n );\n};\n\n/*\nTODO - handle slow download notification PEAR-624\nconst SlowDownloadNotification = ({ onClick }: { onClick: () => void }) => (\n <>\n <div>\n <div>\n The download preparation can take time due to different factors (total\n file size, number of files, or number of concurrent users).\n </div>\n <div>\n We recommend that you use the{\" \"}\n <a\n href=\"https://gdc.cancer.gov/access-data/gdc-data-transfer-tool\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {\" \"}\n GDC Data Transfer Tool\n </a>{\" \"}\n or cancel the download and try again later.\n </div>\n <Button\n variant=\"white\"\n leftIcon={<CloseIcon />}\n style={{ color: \"#155276\", cursor: \"pointer\" }}\n onClick={onClick}\n >\n Cancel Download\n </Button>\n </div>\n </>\n);\n*/\n\nexport interface DownloadFunctionParams<\n T extends Record<string, any> = Record<string, any>,\n> {\n endpoint: string;\n params: T;\n method: string;\n dispatch: CoreDispatch;\n done?: () => void;\n Modal403?: Modals;\n Modal400?: Modals;\n customErrorMessage?: string;\n hideNotification?: boolean;\n}\n\nexport type DownloadFunction<\n T extends Record<string, any> = Record<string, any>,\n> = (params: DownloadFunctionParams<T>) => Promise<void>;\n\n/**\n * Trigger a download by attaching an iFrame to the document with the parameters of the request as fields in a form\n * @param endpoint - endpoint to be attached with\n * @param params - body to be attached with post request\n * @param method - Request Method: GET, PUT, POST\n * @param dispatch - dispatch send from the parent component to dispatch Modals\n * @param done - callback function to be called after the download has been initiated\n * @param Modal400 - Modal for 400 error\n * @param Modal403 - Modal for 403 error\n * @param customErrorMessage - custom message to be passed for 400 errors\n * @param hideNotification - hide the notification\n */\n\nconst download = async <T extends Record<string, any> = Record<string, any>>({\n endpoint,\n params,\n method,\n dispatch,\n done,\n Modal400 = Modals.GeneralErrorModal,\n Modal403 = Modals.NoAccessModal,\n customErrorMessage,\n hideNotification = false,\n}: DownloadFunctionParams<T>): Promise<void> => {\n const cookies = new Cookies();\n\n /* Create a cookie with a unique identifier to attach to request. Response from server will use the set-cookie header\n to remove the cookie when the response is received (aka the download starts). This will only work on when the FE and BE\n are on the same domain.\n */\n\n const downloadToken = uniqueId(`${+new Date()}-`);\n const cookieKey = navigator.cookieEnabled\n ? Math.abs(hashString(JSON.stringify(params) + downloadToken)).toString(16)\n : null;\n\n if (cookieKey) {\n cookies.set(cookieKey, downloadToken);\n }\n\n // place notification in timeout to avoid flicker on fast calls\n const showNotificationTimeout = setTimeout(\n () =>\n showNotification({\n title: 'Download in progress',\n message: <DownloadNotification />,\n closeButtonProps: { 'aria-label': 'Close notification' },\n }),\n 100,\n ); // set to 100 as that is perceived as instant\n\n const fields = reduce(\n {\n ...params,\n downloadCookieKey: cookieKey,\n downloadCookiePath: '/',\n attachment: true,\n ...(params.filename !== undefined ? { download: params.filename } : {}),\n },\n (result, value, key) => {\n const paramValue = processParamObj(key, value);\n return (\n result +\n [].concat(paramValue).reduce((acc, v) => acc + toHtml(key, v), '')\n );\n },\n '',\n );\n\n const iFrame = document.createElement('iframe');\n iFrame.style.display = 'none';\n iFrame.src = 'about:blank';\n\n // Appending to document body to allow navigation away from the current\n // page and downloads in the background\n document.body.appendChild(iFrame);\n\n const pollForDownloadResult = async () => {\n const executePoll = async (resolve: (value?: unknown) => void) => {\n // Request has been canceled\n const body = getBody(iFrame);\n if (body === undefined) {\n resolve();\n return;\n }\n\n const content = body?.textContent;\n // Download has started\n if (cookieKey !== null && !cookies.get(cookieKey)) {\n clearTimeout(showNotificationTimeout);\n cleanNotifications();\n if (done) {\n done();\n }\n resolve();\n } else {\n const iFrameHasContent = iFrame.contentWindow?.document.body;\n const requestError =\n iFrame.contentWindow?.document.getElementsByTagName('form').length ===\n 0 && content !== '';\n if (iFrameHasContent && requestError) {\n clearTimeout(showNotificationTimeout);\n cleanNotifications();\n\n const errorMessage = /{\"(?:message|error)\":\"([^\"]*)\"/g.exec(\n content ?? 'Undefined',\n )?.[1];\n if (\n errorMessage === 'internal server error' ||\n errorMessage === undefined\n ) {\n dispatch(showModal({ modal: Modal400, message: errorMessage }));\n } else if (\n errorMessage ===\n 'Your token is invalid or expired. Please get a new token.'\n ) {\n dispatch(showModal({ modal: Modal403, message: errorMessage }));\n } else {\n dispatch(\n showModal({\n modal: Modal400,\n message: customErrorMessage || errorMessage,\n }),\n );\n }\n\n if (done) {\n done();\n }\n resolve();\n } else {\n setTimeout(executePoll, 1000, resolve);\n }\n }\n };\n\n return new Promise(executePoll);\n };\n\n const addFormAndSubmit = () => {\n //do all of this together for FireFox support\n const form = document.createElement('form');\n form.method = method.toUpperCase();\n form.action = endpoint;\n form.innerHTML = fields;\n\n getBody(iFrame).appendChild(form);\n\n form.submit();\n };\n\n addFormAndSubmit();\n await pollForDownloadResult();\n iFrame.remove();\n};\n\nexport default download;\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Modals, showModal, useCoreDispatch } from '@gen3/core';\nimport { GuppyActionButtonProps } from '../types';\nimport { cleanNotifications, showNotification } from '@mantine/notifications';\nimport { DownloadNotification } from '../../../utils/download';\nimport { Loader } from '@mantine/core';\nimport { FiDownload } from 'react-icons/fi';\nimport { useDeepCompareCallback } from 'use-deep-compare';\n\nconst showErrorMessage = (error: Error) => {\n showNotification({\n message: error.message,\n });\n};\n\ninterface GuppyDownloadActionHookProps extends Pick<\n GuppyActionButtonProps,\n | 'Modal403'\n | 'Modal400'\n | 'done'\n | 'customErrorMessage'\n | 'hideNotification'\n | 'actionFunction'\n | 'actionArgs'\n> {\n setIsActive?: (active: boolean) => void;\n onCompleted?: (args?: unknown) => void;\n}\n\n/**\n * useGuppyActionButton is a custom hook that provides functionality for handling\n * asynchronous actions with error handling, notifications, and a loading state.\n *\n * @param {Object} config - Configuration options for the hook.\n * @param {React.Component} [config.Modal403=Modals.NoAccessModal] - The modal to display for 403 error scenarios.\n * @param {React.Component} [config.Modal400=Modals.GeneralErrorModal] - The modal to display for general 400 error scenarios.\n * @param {Function} [config.done] - Callback function to execute when an action is completed or canceled.\n * @param {string} [config.customErrorMessage] - Custom error message to override the default error message.\n * @param {boolean} [config.hideNotification=false] - Whether to hide notification during action execution.\n * @param {Function} config.actionFunction - The asynchronous function to execute.\n * @param {any} config.actionArgs - Arguments to be passed to the `actionFunction`.\n * @param {Function} [config.setIsActive] - Callback function to track active state changes.\n * @param {Function} [config.onCompleted] - Callback function to execute after the action completes successfully.\n *\n * @returns {Object} - Hook utilities.\n * @returns {Function} handleClick - Function that triggers the primary action when invoked.\n * @returns {Function} cancel - Function to cancel the in-progress action.\n * @returns {React.ReactNode} icon - The icon rendered based on the active state (loading or ready).\n * @returns {boolean} active - The current active/busy state of the hook.\n */\nconst useGuppyActionButton = ({\n Modal403 = Modals.NoAccessModal,\n Modal400 = Modals.GeneralErrorModal,\n done,\n customErrorMessage,\n hideNotification = false,\n actionFunction,\n actionArgs,\n setIsActive = (_: boolean) => null,\n onCompleted = () => null,\n}: GuppyDownloadActionHookProps) => {\n const [active, setActive] = useState(false);\n const dispatch = useCoreDispatch();\n\n const controllerRef = useRef<AbortController | null>(null);\n\n const setBusy = useCallback(\n (isBusy: boolean) => {\n setActive(isBusy);\n setIsActive?.(isBusy);\n if (!isBusy) cleanNotifications();\n },\n [setIsActive],\n );\n\n const handleError = useDeepCompareCallback(\n (error: Error) => {\n const errorMessage: string = error.message;\n if (\n errorMessage === 'internal server error' ||\n errorMessage === undefined\n ) {\n dispatch(showModal({ modal: Modal400, message: errorMessage }));\n console.error(error);\n } else if (\n errorMessage ===\n 'Your token is invalid or expired. Please get a new token.'\n ) {\n dispatch(showModal({ modal: Modal403, message: errorMessage }));\n console.error(error);\n } else {\n dispatch(\n showModal({\n modal: Modal400,\n message: customErrorMessage || errorMessage,\n }),\n );\n console.error(error);\n }\n },\n [Modal400, Modal403, customErrorMessage, dispatch],\n );\n\n const showDownloadNotification = useCallback(() => {\n if (hideNotification) return;\n showNotification({\n title: 'Downloading',\n message: <DownloadNotification />,\n closeButtonProps: { 'aria-label': 'Close notification' },\n autoClose: false,\n });\n }, [hideNotification]);\n\n const cancel = useCallback(() => {\n controllerRef.current?.abort();\n controllerRef.current = null;\n setBusy(false);\n done?.(); // optional: only keep this if \"cancel implies done\" is intended\n }, [done, setBusy]);\n\n useEffect(() => {\n // Abort if the component using this hook unmounts mid-request\n return () => controllerRef.current?.abort();\n }, []);\n\n const handleClick = useCallback(async () => {\n // Optional: prevent multiple concurrent requests\n if (active) return;\n\n const controller = new AbortController();\n controllerRef.current = controller;\n\n showDownloadNotification();\n setBusy(true);\n\n try {\n await actionFunction(\n actionArgs,\n () => {\n controllerRef.current = null;\n setBusy(false);\n },\n (error) => {\n controllerRef.current = null;\n handleError(error);\n setBusy(false);\n showErrorMessage(error);\n },\n () => {\n controllerRef.current = null;\n setBusy(false);\n },\n controller.signal,\n onCompleted,\n );\n } finally {\n // In case actionFunction throws before it calls your callbacks\n controllerRef.current = null;\n }\n }, [\n active,\n actionArgs,\n actionFunction,\n handleError,\n onCompleted,\n setBusy,\n showDownloadNotification,\n ]);\n\n const icon = active ? (\n <Loader size=\"sm\" className=\"p-1\" />\n ) : (\n <FiDownload title=\"download\" size={16} />\n );\n\n return {\n handleClick,\n cancel,\n icon,\n active,\n };\n};\n\nexport default useGuppyActionButton;\n","import React, { useRef } from 'react';\nimport { Button, Loader, Tooltip } from '@mantine/core';\nimport { FiDownload } from 'react-icons/fi';\n\ninterface ActionButtonProps {\n activeText: string;\n inactiveText: string;\n active: boolean;\n icon: JSX.Element;\n handleClick: () => void;\n customStyle?: string;\n showLoading?: boolean;\n showIcon?: boolean;\n disabled?: boolean;\n tooltipText?: string;\n}\n\nconst ActionButton = ({\n activeText,\n inactiveText,\n active,\n icon,\n customStyle,\n showLoading = true,\n showIcon = true,\n disabled = false,\n handleClick,\n tooltipText,\n}: ActionButtonProps) => {\n const ref = useRef(null);\n return (\n <Tooltip disabled={!tooltipText} label={tooltipText}>\n <Button\n ref={ref}\n leftSection={showIcon && inactiveText && <FiDownload />}\n rightSection={active && <Loader color=\"accent.4\" size=\"xs\" />}\n disabled={disabled}\n className={\n customStyle ||\n `${disabled ? 'text-base-lightest' : 'text-primary-contrast'} ${\n disabled ? 'bg-base' : 'bg-primary hover:bg-primary-darker'\n } `\n }\n loading={showLoading && active}\n onClick={handleClick}\n >\n {active ? activeText : inactiveText || icon}\n </Button>\n </Tooltip>\n );\n};\n\nexport default ActionButton;\n","import React, { useCallback } from 'react';\nimport useGuppyActionButton from './downloadActionHook';\nimport { GuppyActionButtonProps } from '../types';\nimport { Modals } from '@gen3/core';\nimport ActionButton from './ActionButton';\n\nconst CohortActionButton = ({\n activeText,\n inactiveText,\n customStyle,\n showLoading = true,\n showIcon = true,\n disabled = false,\n Modal403 = Modals.NoAccessModal,\n Modal400 = Modals.GeneralErrorModal,\n tooltipText,\n done,\n customErrorMessage,\n hideNotification = false,\n actionFunction,\n actionArgs,\n}: GuppyActionButtonProps) => {\n const { handleClick, cancel, icon, active } = useGuppyActionButton({\n Modal403,\n Modal400,\n done,\n customErrorMessage,\n hideNotification,\n actionFunction,\n actionArgs,\n });\n\n const clickHandler = useCallback(() => {\n if (disabled) return;\n if (!active) handleClick();\n else cancel();\n }, [active, disabled, handleClick, cancel]);\n\n return (\n <ActionButton\n activeText={activeText}\n inactiveText={inactiveText}\n active={active}\n icon={icon}\n handleClick={clickHandler}\n customStyle={customStyle}\n showLoading={showLoading}\n showIcon={showIcon}\n disabled={disabled}\n tooltipText={tooltipText}\n />\n );\n};\n\nexport default CohortActionButton;\n","/**\n * Handles downloading of a Blob object as a file.\n *\n * @param {Blob} data - The Blob object to be downloaded.\n * @param {string} filename - The name of the file to be saved.\n */\nexport const handleDownload = (data: Blob, filename: string) => {\n const aElement = document.createElement('a');\n const href = URL.createObjectURL(data);\n aElement.setAttribute('download', filename);\n aElement.href = href;\n aElement.setAttribute('target', '_blank');\n aElement.setAttribute('rel', 'noreferrer');\n aElement.click();\n URL.revokeObjectURL(href);\n};\n","import { downloadFromGuppyToBlob, GuppyDownloadDataParams } from '@gen3/core';\nimport { handleDownload } from './utils';\n\nexport const downloadToFileAction = async (\n params: Record<string, any>,\n done?: () => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n): Promise<void> => {\n // call the downloadFromGuppy function\n await downloadFromGuppyToBlob({\n parameters: params as GuppyDownloadDataParams,\n onDone: (data: Blob) => {\n handleDownload(data, params.filename);\n if (done) done();\n },\n onError: (error: Error) => {\n if (onError) onError(error);\n },\n onAbort: () => {\n if (onAbort) onAbort();\n },\n signal,\n });\n};\n","import {\n downloadJSONDataFromGuppy,\n Equals,\n FilterSet,\n GuppyDownloadDataParams,\n Includes,\n JSONObject,\n} from '@gen3/core';\nimport { handleDownload } from './utils';\n\nconst DEFAULT_FILE_FIELDS = ['file_name', 'file_size', 'md5sum', 'object_id'];\n\n/**\n * Process the manifest data given the data and the fields to include in the manifest.\n * Check if the item in the data contains the fields to include in the manifest.\n * if not, remove the item from the data.\n * @param data\n * @param resourceIdField\n * @param manifestFields\n */\nexport const processManifest = (\n data: JSONObject[],\n resourceIdField: string,\n manifestFields: string[],\n) => {\n return data.filter((item) => {\n const hasAllFields = manifestFields.every((field) => {\n return item[field] !== undefined;\n });\n return hasAllFields && item[resourceIdField] !== undefined;\n });\n};\n\nexport interface DownloadToManifestParams extends Record<string, any> {\n resourceIndexType: string;\n resourceIdField: string;\n referenceIdFieldInDataIndex?: string;\n referenceIdFieldInResourceIndex?: string;\n fileFields?: string[];\n}\n\nexport const downloadToManifestAction = async (\n params: Record<string, any>,\n done?: () => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n): Promise<void> => {\n const {\n referenceIdFieldInDataIndex,\n referenceIdFieldInResourceIndex,\n resourceIndexType,\n resourceIdField,\n fileFields,\n dataFormat,\n } = params;\n\n const manifestFields = fileFields ?? DEFAULT_FILE_FIELDS;\n const manifestFilename = params?.filename ?? `${params.type}_manifest.json`;\n\n const cohortFilterParams: GuppyDownloadDataParams = {\n filter: params.filter,\n type: params.type,\n fields: params.fields,\n accessibility: params.accessibility,\n sort: params.sort,\n format: 'json',\n };\n\n // getting data from the same index.\n if (params.type === resourceIndexType) {\n try {\n let resultManifest = await downloadJSONDataFromGuppy({\n parameters: {\n ...cohortFilterParams,\n fields: [referenceIdFieldInDataIndex, ...manifestFields],\n },\n onAbort: onAbort,\n signal: signal,\n });\n resultManifest = processManifest(\n resultManifest,\n resourceIdField,\n manifestFields,\n );\n if (resultManifest.length === 0) {\n throw new Error('No data found for the current filters');\n }\n const str = JSON.stringify(resultManifest, null, 2);\n const blob = new Blob([str], {\n type: 'application/json;charset=utf-8',\n });\n handleDownload(blob, manifestFilename);\n if (done) done();\n } catch (err) {\n let resultErr;\n if (typeof err === 'string') resultErr = new Error(err);\n if (err instanceof Error) resultErr = err;\n if (!resultErr)\n resultErr = new Error('unknown error in download manifest');\n\n if (onError) onError(resultErr);\n }\n return;\n }\n // join data from two different indices\n try {\n // get a list of reference IDs from the data index using the current cohort filters\n let refIDList = await downloadJSONDataFromGuppy({\n parameters: {\n ...cohortFilterParams,\n fields: [referenceIdFieldInDataIndex],\n },\n onAbort: onAbort,\n signal: signal,\n });\n // get the reference IDs from the list\n refIDList = refIDList.map(\n (item: JSONObject) => item[referenceIdFieldInDataIndex],\n );\n // create a filter of the ids to use in the resource index\n const refIdsFilter: FilterSet = {\n mode: 'and',\n root: {\n manifest_ids: {\n operator: 'in',\n operands: refIDList as string[],\n field: referenceIdFieldInResourceIndex,\n } as Includes,\n ...(dataFormat\n ? {\n data_format: {\n operator: '=',\n operand: dataFormat,\n field: 'data_format',\n } as Equals,\n }\n : {}),\n },\n };\n\n let resultManifest = await downloadJSONDataFromGuppy({\n parameters: {\n ...cohortFilterParams,\n type: resourceIndexType,\n filter: refIdsFilter,\n fields: [\n referenceIdFieldInResourceIndex,\n resourceIdField,\n ...manifestFields,\n ],\n },\n onAbort: onAbort,\n signal: signal,\n });\n\n resultManifest = resultManifest.filter(\n (x: JSONObject) => !!x[resourceIdField],\n );\n /* eslint-disable no-param-reassign */\n resultManifest.forEach((x: JSONObject) => {\n if (typeof x[resourceIdField] === 'string') {\n x[resourceIdField] = [x[resourceIdField]];\n }\n });\n const bytes = new TextEncoder().encode(JSON.stringify(resultManifest));\n const blob = new Blob([bytes], {\n type: 'application/json;charset=utf-8',\n });\n handleDownload(blob, manifestFilename);\n if (done) done();\n } catch (err: any) {\n if (onError) onError(err);\n }\n};\n","import {\n Accessibility,\n coreStore,\n DataLibraryDataset,\n downloadJSONDataFromGuppy,\n EmptyFilterSet,\n fetchJSONDataFromURL,\n FileItem,\n GEN3_MANIFEST_API,\n GuppyDownloadDataParams,\n HttpMethod,\n JSONObject,\n selectCurrentCohortFilters,\n} from '@gen3/core';\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const processFilesForManifest = (\n data: JSONObject[],\n path = '',\n fieldMapping: Record<string, string> = {\n file_name: 'file_name',\n file_size: 'file_size',\n md5sum: 'md5Sum',\n object_id: 'object_id',\n },\n) => mapDataToMappingDefinition(data, path, fieldMapping);\n\nexport const processFilesForDataLibrary = (\n data: JSONObject[],\n path = '$.*',\n fieldMapping: Record<string, string> = {\n name: 'name',\n size: 'size',\n md5sum: 'md5Sum',\n guid: 'guid',\n type: 'type',\n dataset_id: 'dataset_id',\n },\n): Record<string, JSONObject>[] =>\n mapDataToMappingDefinition(data, path, fieldMapping);\n\nexport const mapDataToMappingDefinition = (\n manifestData: JSONObject[],\n path: string,\n fieldMapping: Record<string, string> = {\n file_name: 'file_name',\n file_size: 'file_size',\n md5sum: 'md5Sum',\n id: 'id',\n dataset_id: 'dataset_id',\n },\n): Record<string, JSONObject>[] => {\n const missing: JSONObject[] = [];\n const results = manifestData.reduce(\n (acc: Record<string, JSONObject>[], data) => {\n const root = JSONPath({ path: path, json: data });\n if (root?.length > 0) {\n root[0].forEach((dataFileItem: any) => {\n const manifestEntry = Object.keys(fieldMapping).reduce(\n (entry: Record<string, any>, field) => {\n if (fieldMapping[field] in dataFileItem) {\n entry[field] = dataFileItem[fieldMapping[field]];\n }\n return entry;\n },\n { type: 'GA4GH_DRS' },\n );\n if (manifestEntry['id'] !== undefined) {\n // only add if we have an object_id\n acc.push(manifestEntry);\n } else {\n missing.push(manifestEntry);\n }\n });\n }\n return acc;\n },\n [],\n );\n if (missing.length > 0) {\n console.warn(\n `The following files were not added to the manifest because they do not have an object_id: ${JSON.stringify(\n missing,\n )}`,\n );\n }\n return results;\n};\n\n/**\n * Given a flattened list of data items where the with a dataset_id, create an array of datasets\n * @param data\n * @param field\n */\nexport const createDatasets = (data: Record<string, any>[], field: string) =>\n data.reduce<Record<string, DataLibraryDataset>>((acc, item, index) => {\n // for every item in the data\n // get it's dataset is and add it to the acc\n const datasetId = String(item[field]); // get the id of the dataset or cohort\n const entryExists = acc[datasetId];\n const fileItem = item as FileItem;\n if (entryExists && entryExists.itemType === 'Dataset') {\n entryExists.members[fileItem.id] = fileItem;\n } else {\n acc[datasetId] = {\n id: datasetId,\n name: item?.name ?? `${datasetId}-${index}`,\n members: {\n [fileItem.id]: fileItem,\n },\n itemType: 'Dataset',\n };\n }\n return acc;\n }, {});\n\nexport interface ExportCohortData extends Record<string, any> {\n datasetIdField: string;\n index: string;\n cohortIndex: string;\n fileIdField: string;\n fileFields: string[];\n accessibility: Accessibility;\n}\n\nexport interface ExportCohortDataToWorkspaceParams extends ExportCohortData {\n manifestFieldMapping?: Record<string, string>;\n metadataFields: string[];\n metadataIndex: string;\n dataPath?: string;\n}\n\nconst REQUIRED_FIELDS = [\n 'datasetIdField',\n 'fileIndex',\n 'cohortIndex',\n 'fileIdField',\n 'fileFields',\n];\n\nexport interface ExportCohortDataToDataLibraryParams extends ExportCohortData {\n libraryDataItemMapping?: Record<string, string>;\n}\n\n/* TODO: complete this function */\nexport const addCohortDataFilesToDataLibraryAsDataset = async (\n params: Record<string, any>,\n done?: (params?: unknown) => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n onComplete?: (arg?: any) => void,\n): Promise<void> => {\n // query the cohort data using the cohort as filters, and the fields needed for the data object\n\n const cohort = selectCurrentCohortFilters(coreStore.getState());\n const {\n index,\n cohortIndex,\n accessibility,\n datasetIdField = 'dataset_id',\n fileIdField,\n fileFields,\n libraryDataItemMapping,\n dataPath = '*',\n } = params as ExportCohortDataToDataLibraryParams;\n\n // test if all required fields are present\n if (REQUIRED_FIELDS.some((field) => !(field in params))) {\n if (onError)\n onError(\n new Error(`Missing required fields: ${REQUIRED_FIELDS.join(', ')}`),\n );\n return;\n }\n\n const cohortFilters = cohort[cohortIndex] ?? EmptyFilterSet;\n\n const fileInformationParameters: GuppyDownloadDataParams = {\n filter: cohortFilters,\n type: index,\n fields: fileFields,\n accessibility: accessibility,\n format: 'json',\n };\n\n try {\n let cohortDatafiles = await downloadJSONDataFromGuppy({\n parameters: fileInformationParameters,\n onAbort: onAbort,\n signal: signal,\n });\n cohortDatafiles = processFilesForDataLibrary(\n cohortDatafiles,\n `$.${dataPath}`,\n libraryDataItemMapping,\n );\n if (cohortDatafiles.length === 0) {\n throw new Error('No data found for the current filters');\n }\n\n // create a list using the cohort name and the data files\n const datasets = createDatasets(cohortDatafiles, datasetIdField);\n // add/update dataset to the data library\n if (done) done(); // clear the notification\n\n if (onComplete) onComplete(datasets);\n } catch (err) {\n let resultErr;\n if (typeof err === 'string') resultErr = new Error(err);\n if (err instanceof Error) resultErr = err;\n if (!resultErr) resultErr = new Error('unknown error in download manifest');\n if (onError) onError(resultErr);\n }\n};\n\nexport const exportCohortToWorkspace = async (\n params: Record<string, any>,\n done?: () => void,\n onError?: (error: Error) => void,\n onAbort?: () => void,\n signal?: AbortSignal,\n): Promise<void> => {\n // query the cohort data using the cohort as filters, and the fields needed for the data object\n\n const cohort = selectCurrentCohortFilters(coreStore.getState());\n\n const {\n index,\n cohortIndex,\n accessibility,\n metadataIndex,\n fileFields,\n manifestFieldMapping,\n metadataFields,\n dataPath = '',\n } = params as ExportCohortDataToWorkspaceParams;\n\n // add check for required fields\n // get the files information\n\n const cohortFilters = cohort[cohortIndex] ?? EmptyFilterSet;\n\n const fileQueryParameters: GuppyDownloadDataParams = {\n filter: cohortFilters,\n type: index,\n fields: fileFields,\n accessibility: accessibility,\n format: 'json',\n };\n\n const metadataQueryParameters: GuppyDownloadDataParams = {\n filter: cohortFilters,\n type: cohortIndex,\n fields: metadataFields,\n accessibility: accessibility,\n format: 'json',\n };\n\n try {\n let cohortDatafiles = await downloadJSONDataFromGuppy({\n parameters: fileQueryParameters,\n onAbort: onAbort,\n signal: signal,\n });\n cohortDatafiles = processFilesForManifest(\n cohortDatafiles,\n dataPath,\n manifestFieldMapping,\n );\n\n if (cohortDatafiles.length === 0) {\n throw new Error('No data found for the current filters');\n }\n\n const cohortMetaData = await downloadJSONDataFromGuppy({\n parameters: metadataQueryParameters,\n onAbort: onAbort,\n signal: signal,\n });\n\n // save files manifest\n await fetchJSONDataFromURL(\n `${GEN3_MANIFEST_API}/`,\n true,\n 'POST' as HttpMethod,\n JSON.stringify(cohortDatafiles),\n signal,\n );\n\n // save the metadata\n await fetchJSONDataFromURL(\n `${GEN3_MANIFEST_API}/metadata`,\n true,\n 'POST' as HttpMethod,\n JSON.stringify(cohortMetaData),\n signal,\n );\n\n if (done) done();\n } catch (err) {\n let resultErr;\n if (typeof err === 'string') resultErr = new Error(err);\n if (err instanceof Error) resultErr = err;\n if (!resultErr) resultErr = new Error('unknown error in download manifest');\n\n if (onError) onError(resultErr);\n }\n};\n","import { ActionButtonWithArgsFunction } from '../../types';\nimport { downloadToFileAction } from './downloadToFile';\nimport { downloadToManifestAction } from './downloadManifest';\nimport {\n addCohortDataFilesToDataLibraryAsDataset,\n exportCohortToWorkspace,\n} from './addCohortToDataLibrary';\n\n// create a factory for the action creators\n\ninterface ActionCreatorFactoryItem {\n readonly action: ActionButtonWithArgsFunction;\n readonly args: Record<string, any>;\n}\n\nconst registeredButtonActions: Record<string, ActionCreatorFactoryItem> = {};\n\nexport const NullButtonAction: ActionButtonWithArgsFunction = (\n _params,\n done,\n): Promise<void> => {\n return new Promise<void>((done) => {\n if (done) done();\n });\n};\n\nexport const registerButtonAction = (\n buttonName: string,\n actionItem: ActionCreatorFactoryItem,\n) => {\n registeredButtonActions[buttonName] = actionItem;\n};\n\nexport const findButtonAction = (\n buttonName?: string,\n): ActionCreatorFactoryItem | undefined => {\n if (buttonName === undefined) {\n console.error('getButtonAction: no name provided');\n return undefined;\n }\n\n if (!(buttonName in registeredButtonActions)) {\n console.error('getButtonAction: no action found for', buttonName);\n return undefined;\n }\n return registeredButtonActions[buttonName];\n};\n\nexport const registerDefaultButtonActions = () => {\n registerButtonAction('data-json', {\n action: downloadToFileAction,\n args: { format: 'json' },\n });\n registerButtonAction('data-csv', {\n action: downloadToFileAction,\n args: { format: 'csv' },\n });\n registerButtonAction('data-tsv', {\n action: downloadToFileAction,\n args: { format: 'tsv' },\n });\n registerButtonAction('manifest', {\n action: downloadToManifestAction,\n args: { format: 'manifest' },\n });\n registerButtonAction('cohortDataFilesToDataLibrary', {\n action: addCohortDataFilesToDataLibraryAsDataset,\n args: { format: 'json' },\n });\n registerButtonAction('exportCohortToWorkspace', {\n action: exportCohortToWorkspace,\n args: { format: 'json' },\n });\n};\n\nregisterDefaultButtonActions();\n","import React, { ReactElement, ReactNode, useCallback, useState } from 'react';\nimport { Button, FloatingPosition, Menu, MenuItemProps, Tooltip, } from '@mantine/core';\nimport { IoMdArrowDropdown as Dropdown } from 'react-icons/io';\nimport { focusStyles } from '../../../utils';\nimport useGuppyActionButton from './downloadActionHook';\nimport { Modals } from '@gen3/core';\nimport { ActionButtonWithArgsFunction, GuppyActionButtonProps } from '../types';\nimport { useDeepCompareMemo } from 'use-deep-compare';\n\ninterface GuppyDropdownMenuItemProps extends Pick<\n GuppyActionButtonProps,\n | 'disabled'\n | 'Modal400'\n | 'Modal403'\n | 'done'\n | 'customErrorMessage'\n | 'hideNotification'\n | 'actionFunction'\n | 'actionArgs'\n> {\n title: string;\n idx: number;\n setIsActive?: (active: boolean) => void;\n}\n\ninterface GuppyDropdownElementProps {\n title: string;\n icon?: ReactElement;\n disabled?: boolean;\n actionFunction: ActionButtonWithArgsFunction;\n actionArgs: Record<string, any>;\n}\n\nconst GuppyDropdownMenuItem = ({\n title,\n idx,\n disabled = false,\n Modal403 = Modals.NoAccessModal,\n Modal400 = Modals.GeneralErrorModal,\n done,\n setIsActive = () => null,\n customErrorMessage,\n hideNotification = false,\n actionFunction,\n actionArgs,\n children,\n}: GuppyDropdownMenuItemProps & MenuItemProps) => {\n const { handleClick, cancel, icon, active } = useGuppyActionButton({\n Modal403,\n Modal400,\n done,\n customErrorMessage,\n hideNotification,\n actionFunction,\n actionArgs,\n setIsActive,\n });\n const clickHandler = useCallback(() => {\n if (disabled) return;\n if (!active) handleClick();\n else cancel();\n }, [active, disabled, handleClick, cancel]);\n return (\n <Menu.Item\n onClick={clickHandler}\n key={`${title}-${idx}`}\n data-testid={`${title}-${idx}`}\n leftSection={icon}\n disabled={disabled}\n >\n {children}\n </Menu.Item>\n );\n};\n\ninterface DropdownWithIconProps {\n /**\n * if true, doesn't set width to be \"target\"\n */\n disableTargetWidth?: string;\n /**\n * Left Icon for the target button can be undefined too\n */\n leftIcon?: ReactElement;\n /**\n * Right Icon for the target button can be undefined too (default to dropdown icon)\n */\n rightIcon?: ReactElement;\n /**\n * Content for the target button\n */\n TargetButtonChildren: ReactNode;\n /**\n * array dropdown items. Need to pass the title onClick and icon event handler is optional\n */\n dropdownElements: Array<GuppyDropdownElementProps>;\n /**\n * only provide inactiveText if we want a label for dropdown elements\n */\n inactiveText?: string;\n /**\n * label to show when a menu item's action is executing\n */\n activeText?: string;\n /**\n * custom class / styling for menuLabelText\n */\n menuLabelCustomClass?: string;\n /**\n * custom position for Menu\n */\n customPosition?: FloatingPosition;\n /**\n * whether the dropdown should fill the height with its parent\n */\n fullHeight?: boolean;\n /**\n * custom z-index for Menu, defaults to undefined\n */\n zIndex?: number;\n /**\n * custom test id\n */\n customDataTestId?: string;\n\n /**\n tooltip\n */\n tooltip?: string;\n\n /**\n * aria-label for the button\n */\n buttonAriaLabel?: string;\n\n /**\n * disables the target button and menu\n */\n disabled?: boolean;\n}\n\nconst CohortDropdownActionButton = ({\n disableTargetWidth,\n leftIcon,\n rightIcon = (\n <Dropdown size=\"1.25em\" aria-hidden=\"true\" data-testid=\"dropdown-icon\" />\n ),\n disabled = false,\n dropdownElements,\n activeText,\n inactiveText,\n customPosition,\n fullHeight,\n zIndex = undefined,\n customDataTestId = undefined,\n tooltip = undefined,\n buttonAriaLabel = undefined,\n}: DropdownWithIconProps): ReactElement => {\n const [isActive, setIsActive] = useState(false);\n\n const menuLabelText = useDeepCompareMemo(() => {\n return isActive && activeText ? activeText : inactiveText;\n }, [isActive, activeText, inactiveText]);\n\n return (\n <Menu\n width={disableTargetWidth ?? 'target'}\n {...(customPosition && { position: customPosition })}\n data-testid={customDataTestId ?? 'menu-elem'}\n zIndex={zIndex}\n >\n <Menu.Target>\n <Button\n className={`text-base-lightest data-disabled:bg-base bg-primary hover:bg-primary-darker ${focusStyles}`}\n {...(leftIcon && { leftSection: leftIcon })}\n rightSection={rightIcon}\n disabled={disabled}\n classNames={{\n // rightIcon: 'border-l pl-1 -mr-2',\n root: fullHeight ? 'h-full' : undefined,\n }}\n aria-label={buttonAriaLabel}\n key={menuLabelText}\n loading={isActive}\n >\n <div>\n {tooltip?.length && !disabled ? (\n <div>\n <Tooltip label={tooltip}>\n <div>{menuLabelText}</div>\n </Tooltip>\n </div>\n ) : (\n <div>{menuLabelText}</div>\n )}\n </div>\n </Button>\n </Menu.Target>\n <Menu.Dropdown\n data-testid=\"dropdown-menu-options\"\n className=\"border-1 border-secondary\"\n >\n {dropdownElements?.map(\n ({ title, icon, disabled, actionFunction, actionArgs }, idx) => (\n <GuppyDropdownMenuItem\n key={`${title}-${idx}`}\n data-testid={`${title}-${idx}`}\n leftSection={icon && icon}\n disabled={disabled}\n title={title}\n idx={idx}\n actionFunction={actionFunction}\n actionArgs={actionArgs}\n setIsActive={setIsActive}\n >\n {title}\n </GuppyDropdownMenuItem>\n ),\n )}\n </Menu.Dropdown>\n </Menu>\n );\n};\n\nexport default CohortDropdownActionButton;\n","import {\n Accessibility,\n DatasetOrCohort,\n downloadJSONDataFromGuppy,\n FilterSet,\n GuppyDownloadDataParams,\n JSONObject,\n} from '@gen3/core';\nimport {\n createDatasets,\n processFilesForDataLibrary,\n} from './addCohortToDataLibrary';\n\ninterface ExtractDataSelectionFromCohortParams {\n index: string;\n accessibility?: Accessibility;\n fileFields: string[];\n datasetIdField: string;\n libraryDataItemMapping?: Record<string, string>;\n dataPath?: string;\n cohortFilters: FilterSet;\n}\n\nexport interface ExtractDataSelectionFromCohortResult {\n ok: boolean;\n datasets: DatasetOrCohort;\n error?: {\n kind: 'abort' | 'invalid-args' | 'network' | 'unknown';\n message: string;\n };\n}\n\nconst toErrorMessage = (err: unknown): string => {\n if (err instanceof Error) return err.message || 'Unknown error';\n if (typeof err === 'string') return err;\n try {\n return JSON.stringify(err);\n } catch {\n return 'Unknown error';\n }\n};\n\n/**\n * Accepts either:\n * - a JSONPath fragment like \"*\" or \"data.items\"\n * - a full JSONPath like \"$.*\" or \"$.data.items\"\n * and normalizes to a valid JSONPath string.\n */\nconst normalizeJsonPath = (dataPath: string): string => {\n const trimmed = (dataPath ?? '').trim();\n if (!trimmed) return '$.*';\n if (trimmed.startsWith('$')) return trimmed;\n if (trimmed.startsWith('.')) return `$${trimmed}`;\n return `$.${trimmed}`;\n};\n\nexport async function extractDataSelectionFromCohort({\n cohortFilters,\n index,\n accessibility = Accessibility.ALL,\n fileFields,\n libraryDataItemMapping,\n datasetIdField = 'dataset_id',\n dataPath = '*',\n}: ExtractDataSelectionFromCohortParams): Promise<ExtractDataSelectionFromCohortResult> {\n if (!index || !Array.isArray(fileFields) || fileFields.length === 0) {\n return {\n ok: false,\n datasets: {},\n error: {\n kind: 'invalid-args',\n message:\n 'Missing required parameters: fileIndex and non-empty fileFields.',\n },\n };\n }\n\n const fileInformationParameters: GuppyDownloadDataParams = {\n filter: cohortFilters,\n type: index,\n fields: fileFields,\n accessibility: accessibility,\n format: 'json',\n };\n\n try {\n const raw = (await downloadJSONDataFromGuppy({\n parameters: fileInformationParameters,\n })) as JSONObject[];\n\n return extractDataSelectionFromCohortQuery(\n raw,\n libraryDataItemMapping,\n datasetIdField,\n dataPath,\n );\n } catch (err: unknown) {\n const message = toErrorMessage(err);\n const kind = message.toLowerCase().includes('abort') ? 'abort' : 'unknown';\n\n return {\n ok: false,\n datasets: {},\n error: { kind, message },\n };\n }\n}\n\nexport function extractDataSelectionFromCohortQuery(\n data: JSONObject[],\n libraryDataItemMapping: Record<string, string> = {},\n datasetIdField = 'dataset_id',\n dataPath = '*',\n): ExtractDataSelectionFromCohortResult {\n try {\n const path = normalizeJsonPath(dataPath);\n const files = processFilesForDataLibrary(\n data,\n path,\n libraryDataItemMapping,\n );\n const datasets = createDatasets(files, datasetIdField);\n\n return { ok: true, datasets };\n } catch (err: unknown) {\n const message = toErrorMessage(err);\n const kind = message.toLowerCase().includes('abort') ? 'abort' : 'unknown';\n\n return {\n ok: false,\n datasets: {},\n error: { kind, message },\n };\n }\n}\n","import React, { useMemo, useState } from 'react';\nimport { GuppyActionButtonProps } from '../types';\nimport {\n Accessibility,\n DatasetOrCohort,\n EmptyFilterSet,\n FilterSet,\n JSONObject,\n selectCurrentCohortFilters,\n useCoreSelector,\n useGetRawDataAndTotalCountsQuery,\n} from '@gen3/core';\nimport { ExportCohortDataToDataLibraryParams } from './actions/addCohortToDataLibrary';\nimport AddToDataLibraryComboButton from '../../Discovery/ActionBar/AddToDataLibraryComboButton';\nimport {\n extractDataSelectionFromCohort,\n extractDataSelectionFromCohortQuery,\n} from './actions/extractDataSelectionFromCohort';\nimport { useDeepCompareEffect } from 'use-deep-compare';\n\nconst useGetDatasetFromCohort = (\n filters: FilterSet,\n index: string,\n cohortIndex: string,\n datasetIdField: string,\n fileIdField: string,\n fileFields: string[],\n accessibility: Accessibility = Accessibility.ALL,\n libraryDataItemMapping: Record<string, string> = {},\n dataPath: string = '*',\n) => {\n const { data, isFetching, isSuccess, isError } =\n useGetRawDataAndTotalCountsQuery({\n filters,\n type: cohortIndex,\n fields: fileFields,\n accessibility,\n size: 10000,\n });\n\n const files = useMemo(() => {\n if (!isSuccess) return {};\n const fileData = (Array.isArray(data) ? data : []) as JSONObject[];\n\n const result = extractDataSelectionFromCohortQuery(\n fileData,\n libraryDataItemMapping,\n datasetIdField,\n dataPath,\n );\n\n return result.ok ? result.datasets : {};\n }, [isSuccess, data, libraryDataItemMapping, datasetIdField, dataPath]);\n\n return { loading: isFetching, files, isError };\n};\n\nconst CohortDataLibraryListButton = ({\n activeText,\n disabled,\n tooltipText,\n actionArgs,\n}: GuppyActionButtonProps) => {\n const cohortFilters = useCoreSelector((state) =>\n selectCurrentCohortFilters(state),\n );\n const [loading, setLoading] = useState(false);\n\n const [selectedDatasets, setSelectedDatasets] =\n React.useState<DatasetOrCohort>({});\n\n const {\n cohortIndex,\n accessibility,\n fileFields,\n datasetIdField,\n libraryDataItemMapping,\n dataPath = '*',\n } = actionArgs as ExportCohortDataToDataLibraryParams;\n\n const filters = cohortFilters?.[cohortIndex] ?? EmptyFilterSet;\n\n useDeepCompareEffect(() => {\n setLoading(true);\n\n const extractDataFunction = async () => {\n const results = await extractDataSelectionFromCohort({\n cohortFilters: filters,\n index: cohortIndex,\n accessibility,\n fileFields,\n datasetIdField,\n libraryDataItemMapping,\n dataPath,\n });\n\n setSelectedDatasets(results.ok ? results.datasets : {});\n setLoading(false);\n };\n\n extractDataFunction();\n }, [\n filters,\n cohortIndex,\n accessibility,\n fileFields,\n datasetIdField,\n libraryDataItemMapping,\n dataPath,\n ]);\n\n // build library items\n return (\n <AddToDataLibraryComboButton\n buttonConfig={{\n label: activeText || 'Add',\n disabled,\n tooltip: tooltipText,\n }}\n items={selectedDatasets}\n isItemsLoading={loading}\n />\n );\n};\n\nexport default CohortDataLibraryListButton;\n","import React from 'react';\nimport {\n DownloadButtonPropsWithAction,\n DropdownsWithButtonsProps,\n} from './types';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport {\n DownloadButtonProps,\n type DropdownButtonProps,\n} from '../../components/Buttons/DropdownButtons';\nimport { Accessibility, FilterSet } from '@gen3/core';\nimport CohortActionButton from './downloads/CohortActionButton';\nimport {\n findButtonAction,\n NullButtonAction,\n} from './downloads/actions/registeredActions';\nimport { Icon } from '@iconify-icon/react';\nimport { MdDownload as DownloadIcon } from 'react-icons/md';\nimport CohortDropdownActionButton from './downloads/CohortDropdownActionButton';\nimport CohortDataLibraryListButton from './downloads/CohortDataLibraryListButton';\nimport { useSession } from '../../lib/session/session';\n\nconst makeActionArgs = (button: DownloadButtonProps) => {\n let actionFunction = NullButtonAction;\n let actionArgs = {} as Record<string, any>; // not required but just for clarity\n if (button.action) {\n const actionItem = findButtonAction(button.action);\n if (actionItem) {\n const funcArgs = actionItem.args ?? {};\n const func = actionItem.action;\n actionFunction = func;\n actionArgs = funcArgs;\n }\n }\n\n return { actionFunction, actionArgs };\n};\n\nconst createDownloadMenuButton = (\n props: DropdownButtonProps,\n args: Record<string, any>,\n): JSX.Element => {\n const elements = props.dropdownItems?.map((button) => {\n let actionFunction = NullButtonAction;\n let actionArgs = {};\n\n const buttonAction = button.action ?? button.type;\n\n if (buttonAction) {\n const actionItem = findButtonAction(buttonAction);\n if (actionItem) {\n actionFunction = actionItem.action;\n actionArgs = actionItem.args ?? ({} as Record<string, any>);\n }\n }\n\n return {\n title: button.title,\n activeText: 'Cancel',\n disabled: button.enabled !== undefined ? !button.enabled : true,\n icon: button?.leftIcon ? (\n <Icon icon={button.leftIcon} />\n ) : (\n <DownloadIcon aria-label={'Download'} />\n ),\n rightSection: button?.rightIcon ? <Icon icon={button.rightIcon} /> : null,\n actionFunction: actionFunction,\n actionArgs: {\n ...args,\n ...actionArgs,\n ...(button.actionArgs ?? ({} as Record<string, any>)),\n },\n } as DownloadButtonPropsWithAction;\n });\n\n return (\n <CohortDropdownActionButton\n inactiveText={props.title}\n activeText={props.actionTitle}\n leftIcon={props.leftIcon ? <Icon icon={props.leftIcon} /> : undefined}\n rightIcon={props.rightIcon ? <Icon icon={props.rightIcon} /> : undefined}\n TargetButtonChildren={'Downloading...'}\n dropdownElements={elements}\n key={props.title}\n />\n );\n};\n\ninterface DownloadsPanelProps {\n readonly dropdowns: Record<string, DropdownsWithButtonsProps>;\n readonly buttons: ReadonlyArray<DownloadButtonProps>;\n readonly loginForDownload?: boolean;\n readonly accessibility?: Accessibility;\n readonly rootPath?: string;\n readonly index: string;\n readonly totalCount: number;\n readonly fields: ReadonlyArray<string>;\n readonly filter: FilterSet;\n readonly sort?: string[];\n readonly indexPrefix?: string;\n}\n\nconst DownloadsPanel = ({\n dropdowns,\n buttons,\n loginForDownload,\n index,\n totalCount,\n fields,\n filter,\n accessibility,\n sort,\n indexPrefix = '',\n}: DownloadsPanelProps): JSX.Element => {\n const { status, pending } = useSession(false);\n const isUserLoggedIn = useDeepCompareMemo(() => {\n return status === 'issued';\n }, [status]);\n\n const loginRequired = loginForDownload ? loginForDownload : false;\n\n const dropdownsToRender = useDeepCompareMemo(() => {\n let dropdownsToRender = dropdowns;\n\n if (loginRequired && !isUserLoggedIn) {\n dropdownsToRender = Object.entries(dropdowns ?? {}).reduce(\n (acc, [key, dropdown]) => {\n return {\n ...acc,\n [key]: {\n ...dropdown,\n title: `${dropdown.title}`,\n buttons: dropdown.dropdownItems?.map((button) => ({\n ...button,\n title: `${button.title}`,\n enabled: false,\n })),\n },\n };\n },\n {},\n );\n }\n return dropdownsToRender;\n }, [dropdowns, loginRequired, isUserLoggedIn]);\n\n return dropdowns || buttons ? (\n <div className=\"flex space-x-2 items-center\">\n {Object.values(dropdownsToRender).map(\n (dropdown: DropdownsWithButtonsProps) => {\n return createDownloadMenuButton(dropdown, {\n type: index,\n totalCount,\n fields,\n filter,\n accessibility: accessibility ?? Accessibility.ALL,\n // sort: sort, // TODO add sort\n });\n },\n )}\n\n {buttons.map((button) => {\n let disabled = false;\n let actionFunction = NullButtonAction;\n let actionArgs = {};\n const buttonAction = button.action ?? button.type;\n if (buttonAction) {\n const actionItem = findButtonAction(buttonAction);\n if (actionItem) {\n const funcArgs = actionItem.args ?? {};\n const func = actionItem.action;\n actionFunction = func;\n actionArgs = funcArgs ?? ({} as Record<string, any>);\n }\n }\n if (loginRequired && !isUserLoggedIn) {\n disabled = true;\n }\n if (actionFunction && buttonAction === 'cohortDataFilesToDataLibrary') {\n // TODO: remove this special case\n return (\n <CohortDataLibraryListButton\n activeText=\"\"\n inactiveText={button.title}\n tooltipText={button.tooltipText}\n disabled={disabled || !button.enabled}\n actionFunction={actionFunction}\n actionArgs={{\n ...actionArgs,\n ...(button.actionArgs ?? ({} as Record<string, any>)),\n type: index,\n totalCount,\n fields,\n filter,\n indexPrefix: indexPrefix,\n accessibility: accessibility ?? Accessibility.ALL,\n // sort: sort, // TODO add sort\n }}\n key={button.title}\n />\n );\n } else {\n return (\n <CohortActionButton\n activeText={'Cancel'}\n inactiveText={button.title}\n tooltipText={button.tooltipText}\n disabled={disabled || !button.enabled}\n actionFunction={actionFunction}\n actionArgs={{\n ...actionArgs,\n ...(button.actionArgs ?? ({} as Record<string, any>)),\n type: index,\n totalCount,\n fields,\n filter,\n indexPrefix: indexPrefix,\n accessibility: accessibility ?? Accessibility.ALL,\n // sort: sort, // TODO add sort\n }}\n key={button.title}\n />\n );\n }\n })}\n </div>\n ) : (\n <React.Fragment></React.Fragment>\n );\n};\n\nexport default DownloadsPanel;\n","import {\n useCoreDispatch,\n CoreState,\n useCoreSelector,\n FilterSet,\n selectCohortFilters,\n toggleCohortBuilderCategoryFilter,\n selectAllCohortFiltersCollapsed,\n selectCohortFilterExpanded,\n selectCohortFilterCombineMode,\n CombineMode,\n setCohortFilterCombineMode,\n} from '@gen3/core';\n\nexport const useCohortFacetFilters = (index: string): FilterSet => {\n return useCoreSelector((state) => selectCohortFilters(state)[index]);\n};\n\nexport const useToggleExpandFilter = (index: string) => {\n const dispatch = useCoreDispatch();\n return (field: string, expanded: boolean) => {\n dispatch(toggleCohortBuilderCategoryFilter({ index, field, expanded }));\n };\n};\n\nexport const useFilterExpandedState = (index: string, field: string) => {\n return useCoreSelector((state: CoreState) =>\n selectCohortFilterExpanded(state, index, field),\n );\n};\n\nexport const useAllFiltersCollapsed = (index: string) => {\n return useCoreSelector((state: CoreState) =>\n selectAllCohortFiltersCollapsed(state, index),\n );\n};\n\nexport const useCohortFilterCombineState = (index: string, field: string) => {\n return useCoreSelector((state: CoreState) =>\n selectCohortFilterCombineMode(state, index, field),\n );\n};\n\nexport const useSetCohortFilterCombineState = (index: string) => {\n const dispatch = useCoreDispatch();\n return (field: string, mode: CombineMode) => {\n dispatch(setCohortFilterCombineMode({ index, field, mode }));\n };\n};\n","import React from \"react\";\nimport {\n clearCohortFilters,\n CoreState,\n FilterSet,\n Operation,\n removeCohortFilter,\n selectCurrentCohortId,\n selectCurrentCohortName,\n selectSharedFilters,\n selectShouldShareFilters,\n setCohortFilter,\n updateCohortFilter,\n useCoreDispatch,\n useCoreSelector,\n} from \"@gen3/core\";\nimport QueryExpressionSection from \"./QueryExpressionSection\";\nimport { QueryExpressionContext } from \"./QueryExpressionContext\";\nimport { useCohortFacetFilters } from \"../hooks\";\n\ninterface QueryExpressionProps {\n index: string;\n shouldShowSummary?: (field: string, count: number) => boolean;\n}\n\nconst QueryExpression = ({\n index,\n shouldShowSummary,\n}: QueryExpressionProps) => {\n const currentCohortId = useCoreSelector((state: CoreState) =>\n selectCurrentCohortId(state),\n );\n const currentCohortName = useCoreSelector((state: CoreState) =>\n selectCurrentCohortName(state),\n );\n\n return (\n <QueryExpressionContext.Provider\n value={{\n cohortName: currentCohortName,\n cohortId: currentCohortId,\n displayOnly: false,\n shouldShowSummary: shouldShowSummary,\n useClearCohortFilters: () => {\n const dispatch = useCoreDispatch();\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) =>\n selectSharedFilters(state),\n );\n\n const filters = useCohortFacetFilters(index);\n\n return (index: string) => {\n if (shouldShareFilters) {\n // get all filters on this index\n // remove them from all other indexes\n // clear this index\n const fields = Object.keys(filters.root);\n fields.forEach((field) => {\n sharedFilters[field].forEach((x) => {\n dispatch(\n removeCohortFilter({ index: x.index, field: x.field }),\n );\n });\n });\n } else dispatch(clearCohortFilters({ index }));\n };\n },\n useRemoveFilter: () => {\n const dispatch = useCoreDispatch();\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) =>\n selectSharedFilters(state),\n );\n\n return (index: string, field: string) => {\n if (shouldShareFilters && field in sharedFilters) {\n sharedFilters[field].forEach((x) => {\n dispatch(\n removeCohortFilter({\n index: x.index,\n field: field,\n }),\n );\n });\n } else\n dispatch(\n removeCohortFilter({\n index: index,\n field: field,\n }),\n );\n };\n },\n useUpdateFilters: () => {\n const dispatch = useCoreDispatch();\n const shouldShareFilters = useCoreSelector((state) =>\n selectShouldShareFilters(state),\n );\n const sharedFilters = useCoreSelector((state) =>\n selectSharedFilters(state),\n );\n\n return (index: string, field: string, filter: Operation) => {\n if (shouldShareFilters && field in sharedFilters) {\n sharedFilters[field].forEach((x) => {\n dispatch(\n updateCohortFilter({\n index: x.index,\n field: field,\n filter: filter,\n }),\n );\n });\n } else\n dispatch(\n updateCohortFilter({\n index,\n field: field,\n filter: filter,\n }),\n );\n };\n },\n useSetCohortFilters: () => {\n const dispatch = useCoreDispatch();\n return (index: string, filters: FilterSet) =>\n dispatch(\n setCohortFilter({\n index,\n filters: filters,\n }),\n );\n },\n useGetFilters: useCohortFacetFilters,\n }}\n >\n <QueryExpressionSection index={index} />\n </QueryExpressionContext.Provider>\n );\n};\n\nexport default QueryExpression;\n","import React, { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { Button, ComboboxItem, Group, Select, Text, TextInput, Tooltip, useMantineTheme, } from '@mantine/core';\n\nimport {\n Cohort,\n createNewCohort,\n duplicateCohort,\n removeCohort,\n selectAllCohorts,\n selectCurrentCohort,\n setCurrentCohortId,\n updateCohortName,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { AddIcon, CloseIcon, CopyIcon, } from '../../../types/icons';\n\nimport { Icon } from '@iconify-icon/react';\n\nimport { IconSize } from '../../../utils/sizes';\nimport { modals } from '@mantine/modals';\n\ninterface CohortManagerProps {\n size?: string;\n rightPanel?: ReactElement;\n customActions?: ReactElement | ReactElement[];\n showDefaultActions?: {\n rename?: boolean;\n create?: boolean;\n duplicate?: boolean;\n delete?: boolean;\n };\n}\n\nconst CohortManagerPanel = ({\n size = \"md\",\n rightPanel,\n customActions,\n showDefaultActions = {\n rename: true,\n create: true,\n duplicate: true,\n delete: true,\n },\n}: CohortManagerProps) => {\n const coreDispatch = useCoreDispatch();\n const [isEditing, setIsEditing] = useState(false);\n const [editingLabel, setEditingLabel] = useState(\"\");\n const allCohorts: Array<Cohort> = useCoreSelector(selectAllCohorts);\n const currentCohort = useCoreSelector(selectCurrentCohort);\n\n const theme = useMantineTheme();\n const iconSize = IconSize[size] || IconSize[\"sm\"];\n const startEditing = () => {\n setIsEditing(true);\n setEditingLabel(currentCohort.name);\n };\n\n const cancelEditing = () => {\n setIsEditing(false);\n setEditingLabel(\"\");\n };\n\n const saveEdit = () => {\n if (editingLabel.trim() === \"\" || !currentCohort.name) return;\n\n coreDispatch(\n updateCohortName({ id: currentCohort.id, name: editingLabel }),\n );\n setIsEditing(false);\n setEditingLabel(\"\");\n };\n\n const handleCreateNew = () => {\n coreDispatch(createNewCohort({ name: \"New Cohort\", setAsCurrent: true }));\n };\n\n const handleDuplicate = () => {\n coreDispatch(duplicateCohort());\n };\n\n const selectData = useMemo(() => {\n return allCohorts.map((cohort: Cohort) => ({\n label: cohort.name,\n value: cohort.id,\n }));\n }, [allCohorts]);\n\n useDeepCompareEffect(() => {\n if (!currentCohort) {\n coreDispatch(setCurrentCohortId(allCohorts[0].id));\n }\n }, [allCohorts, currentCohort, setCurrentCohortId]);\n\n const onSelectCohort = useCallback(\n (_value: unknown, option: ComboboxItem | null) => {\n if (option) {\n coreDispatch(setCurrentCohortId(option.value));\n }\n },\n [coreDispatch],\n );\n\n const onDelete = () => {\n modals.openConfirmModal({\n title: `Delete Cohort: ${currentCohort?.name}`,\n centered: true,\n children: (\n <Text size=\"sm\">\n Are you sure you want to delete your cohort? Deleted cohorts cannot be\n restored.{\" \"}\n </Text>\n ),\n labels: { confirm: \"Delete Cohort\", cancel: \"Cancel\" },\n confirmProps: { color: theme.colors.accent[4] },\n onConfirm: () => {\n coreDispatch(\n removeCohort({\n id: currentCohort.id,\n shouldShowMessage: true,\n }),\n );\n },\n });\n };\n\n return (\n <Group gap=\"xs\" className=\"bg-primary flex pt-4 pl-4 p-4 mb-4\">\n {!isEditing ? (\n <Group>\n <Select\n data={selectData}\n value={currentCohort?.id ?? null}\n onChange={onSelectCohort}\n />\n <Tooltip label=\"Rename selected cohort\" position=\"bottom\" withArrow>\n <Button\n variant=\"action\"\n color=\"secondary.4\"\n onClick={startEditing}\n title={`Rename ${currentCohort?.name}`}\n data-testid=\"renameCohort\"\n aria-label=\"Rename cohort\"\n size={`compact-${size}`}\n >\n <Icon icon=\"gen3:edit\" height={iconSize} width={iconSize} />\n </Button>\n </Tooltip>\n </Group>\n ) : (\n <Group gap=\"xs\">\n <TextInput\n value={editingLabel}\n onChange={(e) => setEditingLabel(e.target.value)}\n placeholder=\"Enter new name\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && editingLabel.trim()) saveEdit();\n if (e.key === \"Escape\") cancelEditing();\n }}\n autoFocus\n style={{ flex: 1 }}\n ></TextInput>\n <Tooltip label=\"Apply rename\" position=\"bottom\" withArrow>\n <Button\n variant=\"action\"\n color=\"secondary.4\"\n onClick={saveEdit}\n data-testid=\"completeCohortRenameButton\"\n aria-label=\"Complete rename cohort\"\n disabled={\n editingLabel.trim() === \"\" ||\n editingLabel.trim() === currentCohort?.name\n }\n size={`compact-${size}`}\n >\n <Icon icon=\"gen3:check\" height={iconSize} width={iconSize} />\n </Button>\n </Tooltip>\n <Tooltip label=\"Cancel rename\" position=\"bottom\" withArrow>\n <Button\n variant=\"action\"\n data-testid=\"cancelRenameButton\"\n aria-label=\"Cancel rename cohort\"\n color={theme.colors.accent[4]}\n onClick={cancelEditing}\n size={`compact-${size}`}\n >\n <CloseIcon size=\"1.5em\" aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n </Group>\n )}\n {showDefaultActions.create && (\n <Tooltip label=\"Create a new cohort\" position=\"bottom\" withArrow>\n <Button\n size={`compact-${size}`}\n data-testid=\"addButton\"\n aria-label=\"Add cohort\"\n variant=\"action\"\n color=\"secondary.4\"\n onClick={handleCreateNew}\n >\n <AddIcon size=\"1.5em\" aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n )}\n\n {showDefaultActions.duplicate && (\n <Tooltip label=\"Duplicate current\" position=\"bottom\" withArrow>\n <Button\n size={`compact-${size}`}\n data-testid=\"duplicateButton\"\n aria-label=\"Duplicate cohort\"\n variant=\"action\"\n color=\"secondary.4\"\n onClick={handleDuplicate}\n >\n <CopyIcon size=\"1.4em\" aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n )}\n\n {showDefaultActions.delete && (\n <Tooltip label=\"Delete selected cohort\" position=\"bottom\" withArrow>\n <Button\n size={`compact-${size}`}\n data-testid=\"deleteButton\"\n aria-label=\"Delete cohort\"\n variant=\"action\"\n onClick={onDelete}\n >\n <Icon icon=\"gen3:delete\" height={iconSize} width={iconSize} />\n </Button>\n </Tooltip>\n )}\n {customActions && (\n <>\n {Array.isArray(customActions)\n ? customActions.map((action, idx) => (\n <React.Fragment key={idx}>{action}</React.Fragment>\n ))\n : customActions}\n </>\n )}\n {rightPanel ? (\n <Group gap=\"xs\" className=\"flex-grow\" justify=\"flex-end\">\n {rightPanel}\n </Group>\n ) : null}\n </Group>\n );\n};\n\nconst CohortManager = ({\n size = \"md\",\n rightPanel,\n customActions,\n showDefaultActions,\n}: CohortManagerProps) => {\n // TODO: initialize and load cohorts from cohort storage\n // as right now the redux-persist is handling cohorts\n return (\n <CohortManagerPanel\n size={size}\n rightPanel={rightPanel}\n customActions={customActions}\n showDefaultActions={showDefaultActions}\n />\n );\n};\n\nexport default CohortManager;\n","import React, { useEffect, useState } from 'react';\nimport { useRouter } from 'next/router';\nimport { Stack } from '@mantine/core';\nimport {\n Accessibility,\n CombineMode,\n CoreState,\n extractEnumFilterValue,\n FacetDefinition,\n FacetType,\n isIntersection,\n NumericFromTo,\n selectCurrentCohortId,\n selectIndexFilters,\n useCoreSelector,\n useCustomRangeQuery,\n useGetAggsQuery,\n useGetCountsQuery,\n usePrevious,\n} from '@gen3/core';\nimport FacetTabs from '../../components/facets/FacetTabs';\nimport {\n classifyFacets,\n extractRangeValues,\n FacetHooks,\n processBucketData,\n processDefinedRangeData,\n processRangeData,\n removeIntersectionFromEnum,\n useGetFacetFilters,\n useUpdateFilters,\n useUpdateFiltersFlat,\n} from '../../components/facets';\nimport { QueryOptions } from '../../components/facets/types';\nimport { useDeepCompareCallback, useDeepCompareEffect, useDeepCompareMemo, } from 'use-deep-compare';\nimport { partial } from 'lodash';\nimport { useClearFilters, useFieldNameToTitle, } from '../../components/facets/hooks';\nimport {\n useCohortFilterCombineState,\n useFilterExpandedState,\n useSetCohortFilterCombineState,\n useToggleExpandFilter,\n} from './hooks';\nimport { StylingOverrideWithMergeControl } from '../../types';\n\nexport interface CohortBuilderTabCategoryConfig {\n readonly label: string;\n readonly queryOptions: {\n readonly indexType: string;\n };\n readonly facets: ReadonlyArray<string>;\n readonly fieldsConfig?: Record<string, FacetDefinition>;\n}\nexport type TabbedCohortBuilderFacetConfig = Record<\n string,\n CohortBuilderTabCategoryConfig\n>;\nconst useCustomFacets = () => ({\n data: [],\n isSuccess: true,\n});\n\nconst useAddCustomFilter = (x: string) => {};\nexport const calculateStickyHeaderHeight = (): number => {\n const globalHeader = document.querySelector('#global-header');\n const contextBar = document.querySelector('#context-bar');\n return (\n (globalHeader?.getBoundingClientRect()?.height || 0) +\n (contextBar?.getBoundingClientRect()?.height || 0)\n );\n};\n\nexport interface TabbedCohortBuilderConfiguration {\n tabsConfiguration: TabbedCohortBuilderFacetConfig;\n index: string;\n indexPrefix?: string;\n fieldsAreFlat?: boolean; // do not create nested field if true\n classNames?: StylingOverrideWithMergeControl;\n};\n\n// Builds a flat list of facet field names from the tabs configuration.\nconst buildCohortBuilderFilters = (\n tabsConfiguration: TabbedCohortBuilderFacetConfig,\n): string[] =>\n Object.values(tabsConfiguration).reduce(\n (filters: string[], category) => [...filters, ...category.facets],\n [],\n );\n\n// Builds facet configuration definitions from the tabs configuration.\nconst buildConfigFacetDefinitions = (\n tabsConfiguration: TabbedCohortBuilderFacetConfig,\n): Record<string, FacetDefinition> =>\n Object.values(tabsConfiguration).reduce(\n (acc: Record<string, FacetDefinition>, tab) => {\n if (!tab?.fieldsConfig) {\n return acc;\n }\n // merge fieldsConfig (explicit config overrides previously accumulated)\n return { ...tab.fieldsConfig, ...acc };\n },\n {},\n );\n\nconst TabbedCohortBuilder = ({\n index,\n tabsConfiguration,\n indexPrefix = '',\n fieldsAreFlat = false,\n classNames = {},\n }: TabbedCohortBuilderConfiguration) => {\n const tabsConfig = tabsConfiguration;\n const cohortBuilderFilters = buildCohortBuilderFilters(tabsConfiguration);\n\n const router = useRouter();\n const routerTab = router?.query?.tab;\n const prevRouterTab = usePrevious(routerTab);\n const [activeTab, setActiveTab] = useState<string | null>(\n routerTab ? (routerTab as string) : Object.keys(tabsConfig)[0],\n );\n const [accessLevel, setAccessLevel] = useState<Accessibility>(\n Accessibility.ALL,\n );\n const cohortId = useCoreSelector((state: CoreState) =>\n selectCurrentCohortId(state),\n );\n const cohortFilters = useCoreSelector((state: CoreState) =>\n selectIndexFilters(state, index),\n );\n const {\n data: aggsData,\n isSuccess,\n isFetching: isAggsQueryFetching,\n isError: isAggsQueryError,\n } = useGetAggsQuery({\n type: index,\n fields: cohortBuilderFilters,\n filters: cohortFilters,\n accessibility: accessLevel,\n queryId: cohortId,\n indexPrefix: indexPrefix,\n });\n const {\n data: counts,\n isSuccess: isCountSuccess,\n isError,\n } = useGetCountsQuery({\n type: index,\n filters: cohortFilters,\n accessibility: accessLevel,\n queryId: cohortId,\n indexPrefix: indexPrefix,\n });\n // for any facets that are continuous, we need to query each one\n const useContinuousFacet = (\n field: string,\n ranges: ReadonlyArray<NumericFromTo>,\n ) => {\n const { data, isSuccess, isFetching, isError } = useCustomRangeQuery({\n field,\n ranges: ranges as Array<NumericFromTo>,\n filters: cohortFilters,\n index,\n indexPrefix: indexPrefix,\n accessibility: accessLevel,\n isNested: !fieldsAreFlat,\n asTextHistogram: true,\n rangeBaseName: 'range',\n });\n // Transform data to match the format expected by NumericRangeFacet\n // This depends on what processRangeData expects\n return {\n data: data\n ? processDefinedRangeData(data, ranges, field, index, indexPrefix)\n : {},\n isSuccess,\n isFetching,\n isError,\n };\n };\n const [facetDefinitions, setFacetDefinitions] = useState<\n Record<string, FacetDefinition>\n >({});\n useEffect(() => {\n // Check if the router initiated the change\n if (routerTab !== prevRouterTab) {\n setActiveTab(routerTab as string);\n } else {\n // Change initiated by user interaction\n if (activeTab !== routerTab) {\n router.push({ query: { ...router.query, tab: activeTab } }, undefined, {\n scroll: false,\n });\n }\n }\n // https://github.com/vercel/next.js/discussions/29403#discussioncomment-1908563\n }, [activeTab, routerTab, prevRouterTab, router]);\n // Set the facet definitions based on the data only the first time the data is loaded\n useDeepCompareEffect(() => {\n if (isSuccess && Object.keys(facetDefinitions).length === 0) {\n const configFacetDefs = buildConfigFacetDefinitions(tabsConfiguration);\n const facetDefs = classifyFacets(\n aggsData,\n index,\n undefined,\n configFacetDefs,\n );\n setFacetDefinitions(facetDefs);\n // setup summary charts since nested fields can be listed by the split field name\n }\n }, [isSuccess, aggsData, facetDefinitions, index, tabsConfiguration]);\n const getEnumFacetData = useDeepCompareCallback(\n (field: string) => {\n let filters = undefined;\n let combineMode: CombineMode = 'or';\n if (field in cohortFilters.root) {\n if (isIntersection(cohortFilters.root[field])) {\n const intersectionFilters = removeIntersectionFromEnum(\n cohortFilters.root[field],\n );\n if (intersectionFilters) {\n filters = extractEnumFilterValue(intersectionFilters);\n combineMode = 'and';\n }\n } else {\n filters = extractEnumFilterValue(cohortFilters.root[field]);\n }\n }\n return {\n data: processBucketData(aggsData?.[field]),\n enumFilters: filters,\n combineMode: combineMode,\n isSuccess: isSuccess,\n isFetching: isAggsQueryFetching,\n isError: isAggsQueryError,\n };\n },\n [cohortFilters, aggsData, isSuccess, isAggsQueryFetching, isAggsQueryError],\n );\n const getRangeFacetData = useDeepCompareCallback(\n (field: string) => {\n return {\n data: processRangeData(aggsData?.[field]),\n filters: extractRangeValues(cohortFilters.root[field]),\n isSuccess: isSuccess,\n isFetching: isAggsQueryFetching,\n isError: isAggsQueryError,\n };\n },\n [aggsData, cohortFilters.root, isSuccess, isAggsQueryFetching, isAggsQueryError],\n );\n const EnumHookInstances = {\n useGetFacetData: getEnumFacetData,\n useUpdateFacetFilters: partial(\n fieldsAreFlat ? useUpdateFiltersFlat : useUpdateFilters,\n index,\n ),\n useGetFacetFilters: partial(useGetFacetFilters, index),\n useClearFilter: partial(useClearFilters, index),\n useFilterExpanded: partial(useFilterExpandedState, index),\n useToggleExpandFilter: partial(useToggleExpandFilter, index),\n useGetCombineMode: partial(useCohortFilterCombineState, index),\n useSetCombineMode: partial(useSetCohortFilterCombineState, index),\n useFieldNameToTitle: useFieldNameToTitle,\n useTotalCounts: undefined,\n };\n const RangeHookInstances = {\n useGetFacetData: getRangeFacetData,\n useUpdateFacetFilters: partial(\n fieldsAreFlat ? useUpdateFiltersFlat : useUpdateFilters,\n index,\n ),\n useGetFacetFilters: partial(useGetFacetFilters, index),\n useClearFilter: partial(useClearFilters, index),\n useFilterExpanded: partial(useFilterExpandedState, index),\n useToggleExpandFilter: partial(useToggleExpandFilter, index),\n useFieldNameToTitle: useFieldNameToTitle,\n useTotalCounts: undefined,\n };\n\n const ContinuousHookInstances = {\n useGetFacetData: useContinuousFacet,\n useUpdateFacetFilters: partial(\n fieldsAreFlat ? useUpdateFiltersFlat : useUpdateFilters,\n index,\n ),\n useGetFacetFilters: partial(useGetFacetFilters, index),\n useClearFilter: partial(useClearFilters, index),\n useFilterExpanded: partial(useFilterExpandedState, index),\n useToggleExpandFilter: partial(useToggleExpandFilter, index),\n useFieldNameToTitle: useFieldNameToTitle,\n useTotalCounts: undefined,\n };\n\n // Set up the hooks for the facet components to use based on the required index\n const facetDataHooks: Record<FacetType, FacetHooks> =\n useDeepCompareMemo(() => {\n return {\n // TODO: see if there a better way to do this\n enum: EnumHookInstances,\n exact: EnumHookInstances,\n multiselect: EnumHookInstances,\n range: RangeHookInstances,\n age: ContinuousHookInstances,\n age_in_years: ContinuousHookInstances,\n numeric_range: RangeHookInstances,\n year: ContinuousHookInstances,\n years: ContinuousHookInstances,\n days: ContinuousHookInstances,\n percent: ContinuousHookInstances,\n datetime: RangeHookInstances,\n toggle: RangeHookInstances,\n upload: EnumHookInstances,\n };\n }, [getEnumFacetData, getRangeFacetData, index]);\n\n return (\n <Stack gap=\"xs\" align=\"stretch\" classNames={{ root: 'w-full' }}>\n <FacetTabs\n activeTab={activeTab}\n setActiveTab={setActiveTab}\n facetDefinitions={facetDefinitions}\n tabsConfig={tabsConfig}\n usedFacets={cohortBuilderFilters}\n hooks={facetDataHooks}\n customFacetHooks={{\n useCustomFacets,\n useAvailableCustomFacets: (\n usedFacets: readonly string[],\n onlyFiltersWithValues: boolean,\n queryOptions?: QueryOptions,\n ) => ({ data: {}, isSuccess: true }),\n useAddCustomFilter: () => (filter: string) => {},\n useRemoveCustomFilter: () => (filter: string) => {},\n }}\n getFacetLabel={() => 'Cases'}\n cardScrollMargin={calculateStickyHeaderHeight()}\n useFieldNameToTitle={useFieldNameToTitle}\n classNames={classNames}\n />\n </Stack>\n );\n};\n\nexport default TabbedCohortBuilder;\n","import {\n FacetQueryParameters,\n FacetQueryResponse,\n FileCountsQueryParameters,\n FilesSizeData,\n} from './types';\nimport {\n Accessibility,\n convertFilterSetToGqlFilter,\n customQueryStrForField,\n useGeneralGQLQuery,\n useGetAggsQuery,\n} from '@gen3/core';\nimport { useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { getByPath } from '../../../components/facets/utils';\n\nexport const useGetFacetValuesQuery = (\n args: FacetQueryParameters,\n): FacetQueryResponse => {\n const { data, isSuccess, isFetching, isError } = useGetAggsQuery(args);\n\n return {\n data: data ?? {},\n isError,\n isFetching,\n isSuccess,\n };\n};\n\nconst buildFileStatsdQuery = (\n type: string,\n fileSizeField: string,\n cohortItemIdField: string,\n fileItemIdField: string,\n indexPrefix: string = '',\n) => {\n const fileStatsQuery = `query repositoryTotals ($filter: JSON, $accessibility:${indexPrefix}Accessibility) {\n ${indexPrefix}_aggregation {\n ${type} (accessibility: $accessibility, filter: $filter) {\n ${customQueryStrForField(fileItemIdField, '{_totalCount }')}\n ${customQueryStrForField(fileSizeField, ' { histogram {sum} }')}\n ${customQueryStrForField(cohortItemIdField, '{histogram { count }}')}\n }\n }\n}`;\n return fileStatsQuery;\n};\ninterface FileCountsQueryResponse {\n [aggregationKey: `${string}_aggregation`]: Record<\n string,\n Record<string, any>\n >;\n}\n\nexport const useTotalFileSizeQuery = ({\n repositoryFilters,\n repositoryIndex,\n cohortIndex,\n fileSizeField,\n cohortItemIdField,\n fileItemIdField,\n accessibility = Accessibility.ALL,\n cohortIndexPrefix = '',\n repositoryIndexPrefix = '',\n}: FileCountsQueryParameters) => {\n const [totals, setTotals] = useState<FilesSizeData>({\n totalFileSize: 0,\n totalCaseCount: 0,\n totalFileCount: 0,\n });\n const query = buildFileStatsdQuery(\n repositoryIndex,\n fileSizeField,\n cohortItemIdField,\n fileItemIdField,\n repositoryIndexPrefix,\n );\n\n const { data, isSuccess, isFetching, isError } = useGeneralGQLQuery({\n query,\n variables: {\n accessibility,\n filter: convertFilterSetToGqlFilter(repositoryFilters),\n },\n });\n\n useDeepCompareEffect(() => {\n if (isSuccess) {\n const response = data.data as unknown as FileCountsQueryResponse;\n const countsRoot = getByPath(\n response?.[`${repositoryIndexPrefix}_aggregation`]?.[repositoryIndex],\n cohortItemIdField,\n );\n const totalFileSize =\n response?.[`${repositoryIndexPrefix}_aggregation`]?.[repositoryIndex]?.[\n fileSizeField\n ]?.histogram?.[0]?.sum || 0;\n const totalCaseCount = countsRoot?.histogram?.length || 0;\n const totalFileCount =\n response?.[`${repositoryIndexPrefix}_aggregation`]?.[repositoryIndex]?.[\n fileItemIdField\n ]?._totalCount || 0;\n setTotals({\n totalFileSize,\n totalCaseCount,\n totalFileCount,\n });\n }\n }, [data, isSuccess]);\n\n return {\n data: totals,\n isError,\n isFetching,\n isSuccess,\n };\n};\n","import React from 'react';\nimport { PersonIcon, SaveIcon } from '../../../types/icons';\nimport { filesize } from 'filesize';\n\ninterface FileStatsProps {\n totalCaseCount: number;\n totalFileSize: number;\n totalFileCount: number;\n isFetching: boolean;\n}\n\nconst Stats = ({\n totalCaseCount,\n totalFileSize,\n totalFileCount,\n isFetching,\n}: FileStatsProps) => (\n <div className=\"flex gap-1 text-xl items-center uppercase flex-wrap\">\n <div>\n Total of{' '}\n <strong>{!isFetching ? totalFileCount.toLocaleString() : '--'}</strong>{' '}\n {totalFileCount !== 1 ? 'Files' : 'File'}\n </div>\n <div>\n <PersonIcon className=\"ml-2 mr-1 mb-1 inline-block\" aria-hidden=\"true\" />\n <strong className=\"mr-1\">{totalCaseCount}</strong>\n {totalCaseCount !== 1 ? 'Cases' : 'Case'}\n </div>\n <div>\n <SaveIcon className=\"ml-2 mr-1 mb-1 inline-block\" aria-hidden=\"true\" />\n {filesize(totalFileSize)}\n </div>\n </div>\n);\n\nexport default Stats;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport {\n useDeepCompareCallback,\n useDeepCompareEffect,\n useDeepCompareMemo,\n} from 'use-deep-compare';\nimport {\n Accessibility,\n clearCohortFilters,\n CombineMode,\n CoreState,\n extractEnumFilterValue,\n FacetDefinition,\n isIntersection,\n selectAllCohortFiltersCollapsed,\n selectIndexFilters,\n toggleCohortBuilderAllFilters,\n useCoreDispatch,\n useCoreSelector,\n} from '@gen3/core';\n\nimport DropdownPanel from '../../../components/facets/Panels/DropdownPanel';\nimport {\n classifyFacets,\n FacetHooks,\n FieldToName,\n getAllFieldsFromFilterConfigs,\n processBucketData,\n removeIntersectionFromEnum,\n useClearFilters,\n useFieldNameToTitle,\n useGetFacetFilters,\n useUpdateFilters,\n} from '../../../components/facets';\nimport { partial } from 'lodash';\nimport {\n useCohortFilterCombineState,\n useFilterExpandedState,\n useSetCohortFilterCombineState,\n useToggleExpandFilter,\n} from '../hooks';\nimport { useGetFacetValuesQuery } from './hooks';\nimport { TabsConfig } from '../types';\nimport { ErrorCard } from '../../../components/MessageCards';\n\ninterface FileFacetPanelProps {\n filters: TabsConfig;\n index: string;\n fieldMapping?: ReadonlyArray<FieldToName>;\n tabTitle: string;\n indexPrefix?: string;\n}\n\nexport const FileFacetPanel = ({\n filters,\n index,\n tabTitle,\n fieldMapping,\n indexPrefix = '',\n}: FileFacetPanelProps): JSX.Element => {\n const repositoryFilters = useCoreSelector((state: CoreState) =>\n selectIndexFilters(state, index),\n );\n\n const fields = useMemo(\n () => getAllFieldsFromFilterConfigs(filters?.tabs ?? []),\n [filters?.tabs],\n );\n\n const [accessLevel, setAccessLevel] = useState<Accessibility>(\n Accessibility.ALL,\n );\n\n const [facetDefinitions, setFacetDefinitions] = useState<\n Record<string, FacetDefinition>\n >({});\n\n const coreDispatch = useCoreDispatch();\n\n const allFiltersCollapsed = useCoreSelector((state) =>\n selectAllCohortFiltersCollapsed(state, index),\n );\n\n const toggleAllFiltersExpanded = (expand: boolean) => {\n coreDispatch(toggleCohortBuilderAllFilters({ expand, index }));\n };\n\n const clearAllFilters = useCallback(() => {\n coreDispatch(clearCohortFilters({ index }));\n }, [coreDispatch, index]);\n\n const {\n data: facetData,\n isSuccess: isFacetsQuerySuccess,\n isFetching: isFacetsQueryFetching,\n isError: isFacetsQueryError,\n } = useGetFacetValuesQuery({\n type: index,\n fields: fields,\n filters: repositoryFilters,\n indexPrefix: indexPrefix,\n });\n\n // Set the facet definitions based on the data only the first time the data is loaded\n useDeepCompareEffect(() => {\n if (isFacetsQuerySuccess && Object.keys(facetDefinitions).length === 0) {\n const configFacetDefs = filters?.tabs.reduce(\n (acc: Record<string, FacetDefinition>, tab) => {\n return { ...tab.fieldsConfig, ...acc };\n },\n {},\n );\n\n const facetDefs = classifyFacets(\n facetData,\n index,\n fieldMapping ?? [],\n configFacetDefs ?? {},\n );\n setFacetDefinitions(facetDefs);\n }\n }, [isFacetsQuerySuccess, facetData, facetDefinitions, index, fieldMapping]);\n\n const getEnumFacetData = useDeepCompareCallback(\n (field: string) => {\n let filters = undefined;\n let combineMode: CombineMode = 'or';\n if (field in repositoryFilters.root) {\n if (isIntersection(repositoryFilters.root[field])) {\n const intersectionFilters = removeIntersectionFromEnum(\n repositoryFilters.root[field],\n );\n if (intersectionFilters) {\n filters = extractEnumFilterValue(intersectionFilters);\n combineMode = 'and';\n }\n } else {\n filters = extractEnumFilterValue(repositoryFilters.root[field]);\n }\n }\n\n return {\n data: processBucketData(facetData?.[field]),\n enumFilters: filters,\n combineMode: combineMode,\n isSuccess: isFacetsQuerySuccess,\n isFetching: isFacetsQueryFetching,\n };\n },\n [repositoryFilters.root, facetData, isFacetsQuerySuccess],\n );\n\n const facetDataHooks: Record<'enum', FacetHooks> = useDeepCompareMemo(() => {\n return {\n enum: {\n useGetFacetData: getEnumFacetData,\n useUpdateFacetFilters: partial(useUpdateFilters, index),\n useGetFacetFilters: partial(useGetFacetFilters, index),\n useClearFilter: partial(useClearFilters, index),\n useFilterExpanded: partial(useFilterExpandedState, index),\n useToggleExpandFilter: partial(useToggleExpandFilter, index),\n useGetCombineMode: partial(useCohortFilterCombineState, index),\n useSetCombineMode: partial(useSetCohortFilterCombineState, index),\n useFieldNameToTitle: useFieldNameToTitle,\n useTotalCounts: undefined,\n useUpdateCombineMode: () => null,\n },\n };\n }, [getEnumFacetData, index]);\n\n if (isFacetsQueryError) {\n return <ErrorCard message=\"Unable to fetch data from server\" />; // TODO: replace with configurable message\n }\n\n return (\n <DropdownPanel<'enum'>\n filters={filters}\n facetDefinitions={facetDefinitions}\n facetDataHooks={facetDataHooks}\n showAccessLevel={false}\n tabTitle={tabTitle}\n onAccessChange={setAccessLevel}\n accessLevel={accessLevel}\n allFiltersCollapsed={allFiltersCollapsed}\n toggleAllFiltersExpanded={toggleAllFiltersExpanded}\n clearAllFilters={clearAllFilters}\n />\n );\n};\n\nexport default FileFacetPanel;\n","import React, { useMemo, useState } from 'react';\nimport { useMediaQuery } from '@mantine/hooks';\nimport { getAllFieldsFromFilterConfigs } from '../../../components/facets';\nimport {\n Accessibility,\n CoreState,\n EmptyFilterSet,\n selectIndexFilters,\n useCoreSelector,\n} from '@gen3/core';\nimport { useTotalFileSizeQuery } from './hooks';\nimport Stats from './Stats';\nimport ExplorerTable from '../ExplorerTable/ExplorerTable';\nimport DownloadsPanel from '../DownloadsPanel';\nimport { TableXPositionContext } from '../ExplorerTable/context';\nimport FileFacetPanel from './FileFacetPanel';\nimport { RepositoryProps } from './types';\n\nexport const RepositoryPanel = ({\n guppyConfig,\n filters,\n table,\n dropdowns,\n buttons,\n loginForDownload,\n fileStatsConfiguration,\n additionalControls = null,\n}: RepositoryProps) => {\n const isSm = useMediaQuery('(min-width: 639px)');\n const isMd = useMediaQuery('(min-width: 1373px)');\n const isXl = useMediaQuery('(min-width: 1600px)');\n const [tableXPosition, setTableXPosition] = useState<number | undefined>(\n undefined,\n );\n const defaultDropdowns = useMemo(() => dropdowns ?? {}, [dropdowns]);\n const defaultButtons = useMemo(() => buttons ?? [], [buttons]);\n\n const [accessLevel, setAccessLevel] = useState<Accessibility>(\n Accessibility.ALL,\n );\n\n const index = guppyConfig.dataType;\n const indexPrefix = guppyConfig?.indexPrefix ?? '';\n const fields = useMemo(\n () => getAllFieldsFromFilterConfigs(filters?.tabs ?? []),\n [filters?.tabs],\n );\n\n const repositoryFilters = useCoreSelector((state: CoreState) =>\n selectIndexFilters(state, index),\n );\n\n const { data: fileSizeSliceData, isFetching: isFileSizeFetching } =\n useTotalFileSizeQuery({\n repositoryFilters: repositoryFilters,\n cohortFilters: EmptyFilterSet,\n repositoryIndexPrefix: indexPrefix,\n ...fileStatsConfiguration,\n });\n\n if (fileStatsConfiguration)\n return (\n <TableXPositionContext.Provider\n value={{ xPosition: tableXPosition, setXPosition: setTableXPosition }}\n >\n <div className=\"flex flex-col mt-3 relative px-4 bg-base-lightest w-full\">\n {/* Flex container to ensure proper 25/75 split */}\n <div className=\"flex w-full pt-2\">\n {/* Left panel - 25% */}\n <div\n id=\"cohort-builder-filters\"\n className=\"flex-shrink-0 md:w-1/4 lg:w-1/5\"\n >\n {filters?.tabs && (\n <FileFacetPanel\n index={index}\n filters={filters}\n tabTitle=\"Files\"\n fieldMapping={guppyConfig?.fieldMapping ?? []}\n indexPrefix={indexPrefix}\n />\n )}\n </div>\n\n {/* Right content - 75% */}\n <div\n id=\"cohort-builder-content\"\n className=\"flex flex-col md:w-3/4 lg:w-4/5 pl-4\"\n >\n {additionalControls}\n {/* Table Section */}\n {table?.enabled && (\n <ExplorerTable\n index={index}\n tableConfig={table}\n accessibility={accessLevel}\n indexPrefix={indexPrefix}\n additionalControls={\n <DownloadsPanel\n dropdowns={defaultDropdowns}\n buttons={defaultButtons}\n loginForDownload={loginForDownload}\n index={index}\n totalCount={fileSizeSliceData.totalCaseCount ?? 0}\n fields={table?.fields ?? []}\n filter={repositoryFilters}\n />\n }\n tableTotalDetail={\n <div className=\"ml-auto\">\n <Stats\n totalFileCount={fileSizeSliceData.totalFileCount}\n totalCaseCount={fileSizeSliceData.totalCaseCount}\n totalFileSize={fileSizeSliceData.totalFileSize}\n isFetching={isFileSizeFetching}\n />\n </div>\n }\n />\n )}\n </div>\n </div>\n </div>\n </TableXPositionContext.Provider>\n );\n};\n\nexport default RepositoryPanel;\n","import React from 'react';\nimport RepositoryPanel from './RepositoryPanel';\nimport { validateObjectHasRequiredFields } from '../../../utils/validators';\nimport { ErrorCard, MessagePage } from '../../../components/MessageCards';\nimport { RepositoryProps } from './types';\n\nconst Repository = ({\n filters,\n guppyConfig,\n table,\n buttons,\n loginForDownload,\n dropdowns,\n fileStatsConfiguration,\n additionalControls = null,\n}: RepositoryProps) => {\n if (\n !fileStatsConfiguration ||\n !validateObjectHasRequiredFields(\n fileStatsConfiguration,\n Object.keys(fileStatsConfiguration),\n )\n ) {\n return (\n <MessagePage>\n <ErrorCard message=\"Invalid file stats configuration\" />\n </MessagePage>\n );\n }\n\n return (\n <RepositoryPanel\n guppyConfig={guppyConfig}\n key=\"Repository-Panel\"\n filters={filters}\n table={table}\n dropdowns={dropdowns}\n buttons={buttons}\n loginForDownload={loginForDownload}\n fileStatsConfiguration={fileStatsConfiguration}\n additionalControls={additionalControls}\n />\n );\n};\n\nexport default Repository;\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { RepositoryPageProps } from './types';\nimport { Center } from '@mantine/core';\nimport { Repository } from '../../features/CohortBuilder';\n\nconst RepositoryPage = ({\n headerProps,\n footerProps,\n configuration,\n headerMetadata,\n}: RepositoryPageProps): JSX.Element => {\n if (configuration === undefined) {\n return (\n <Center maw={400} h={100} mx=\"auto\">\n <div>Repository config is not defined. Page disabled</div>\n </Center>\n );\n }\n\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Repository Page',\n content: 'Repository Page',\n key: 'gen3-repository-page',\n ...(headerMetadata ? headerMetadata : {}),\n ...(configuration?.headerMetadata ? configuration.headerMetadata : {}),\n }}\n >\n <Repository {...configuration} />\n </NavPageLayout>\n );\n};\n\nexport default RepositoryPage;\n","import { ProjectTableColumn } from './types';\n\nexport const extractMappingFromProjectTableConfig = (columns: ProjectTableColumn[]) => {\n const mapping: Record<string, string> = {};\n columns.forEach((column) => {\n mapping[column.field] = column.field;\n });\n return mapping;\n};\n\nexport const buildQuery = (fields:string[]) => {\n return fields.map((field) => {\n return `${field}:${field}(project_id: $name)`;\n });\n};\n","import React, { useMemo, useState } from 'react';\nimport {\n MantineReactTable,\n type MRT_PaginationState,\n useMantineReactTable,\n} from 'mantine-react-table';\nimport { Loader, Text } from '@mantine/core';\nimport { useGetProjectsDetailsQuery } from '@gen3/core';\nimport { ProjectTableConfig } from '../types';\nimport { buildQuery } from '../utils';\n\nconst projectQuery = {\n query: 'query { project(first:0) {code, project_id, availability_type}}',\n};\n\nconst ProjectTable = ({ columns }: ProjectTableConfig) => {\n const [pagination, setPagination] = useState<MRT_PaginationState>({\n pageIndex: 0,\n pageSize: 10,\n });\n\n const mapping = useMemo(() => {\n const mapping: Record<string, string> = {};\n columns.forEach((column) => {\n mapping[column.field] = column.field;\n });\n return mapping;\n }, [columns]);\n\n const detailQuery = {\n query: `query projectDetailQuery(\n $name: [String]\n) {\n project(project_id: $name) {\n name: project_id\n code\n id\n }\n ${buildQuery(Object.keys(mapping)).join('\\n')}\n}`,\n };\n\n const { data, isLoading, isFetching, isError } = useGetProjectsDetailsQuery({\n size: 10,\n projectQuery: projectQuery,\n projectDetailsQuery: detailQuery,\n mapping: mapping,\n });\n const cols = useMemo(() => {\n return [\n {\n field: 'name',\n accessorKey: 'project.name',\n header: 'Project',\n },\n ...columns.map((columnDef) => {\n return {\n field: columnDef.field,\n accessorKey: columnDef.field,\n header: columnDef.name,\n };\n }),\n ];\n }, [columns]);\n\n const table = useMantineReactTable({\n columns: cols,\n data: data?.details ?? [],\n manualSorting: true,\n manualPagination: true,\n paginateExpandedRows: false,\n onPaginationChange: setPagination,\n rowCount: data?.hits ?? 0,\n enableTopToolbar: false,\n layoutMode: 'semantic',\n state: {\n isLoading,\n pagination,\n showProgressBars: isFetching,\n showAlertBanner: isError,\n columnVisibility: {\n 'mrt-row-expand': false,\n },\n },\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-table-8)',\n color: 'var(--mantine-color-table-0)',\n textAlign: 'center',\n padding: 'var(--mantine-spacing-md)',\n fontWeight: 'bold',\n fontSize: 'var(--mantine-font-size-lg)',\n textTransform: 'uppercase',\n },\n },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-9)',\n },\n },\n });\n\n if (isLoading) {\n return (\n <div className=\"flex w-full py-24 relative justify-center\">\n <Loader variant=\"dots\" />{' '}\n </div>\n );\n }\n\n if (isError) {\n return (\n <div className=\"flex w-full py-24 h-100 relative justify-center\">\n <Text size={'xl'}>Error loading project data</Text>\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full bg-base-max p-4 rounded-lg\">\n <div className=\"grow w-auto inline-block overflow-x-scroll\">\n <MantineReactTable table={table} />\n </div>\n </div>\n );\n};\n\nexport default ProjectTable;\n","import React, { useMemo } from 'react';\nimport { MantineReactTable, useMantineReactTable } from 'mantine-react-table';\nimport { filesize } from 'filesize';\nimport {\n useGetSubmissionsQuery,\n SubmissionInfo,\n SubmissionDocument,\n} from '@gen3/core';\nimport { Loader, Text } from '@mantine/core';\n\nconst cols = [\n {\n field: 'job_id',\n accessorKey: 'job_id',\n header: 'Id',\n },\n {\n field: 'submitter',\n accessorKey: 'submitter',\n header: 'Submitter',\n },\n {\n field: 'project_id',\n accessorKey: 'project_id',\n header: 'Project',\n },\n {\n field: 'created_datetime',\n accessorKey: 'created_datetime',\n header: 'Created Date',\n },\n {\n field: 'state',\n accessorKey: 'state',\n header: 'State',\n },\n];\n\nconst SubmissionsTable = () => {\n const { data, isLoading, isFetching, isError } = useGetSubmissionsQuery();\n\n const rows = useMemo(() => {\n if (data) {\n return data.transactionList.map((row: SubmissionInfo) => {\n const fileSizeTotal = filesize(\n row.documents.reduce(\n (acc: number, doc: SubmissionDocument) => acc + doc.doc_size,\n 0,\n ),\n );\n\n return {\n job_id: row.id,\n submitter: row.submitter,\n project_id: row.project_id,\n created_datetime: row.created_datetime,\n state: row.state,\n fileSize: fileSizeTotal,\n };\n });\n }\n return [];\n }, [data]);\n\n const table = useMantineReactTable({\n columns: cols,\n data: rows,\n manualSorting: true,\n manualPagination: false,\n paginateExpandedRows: false,\n rowCount: rows.length,\n enableTopToolbar: false,\n layoutMode: 'semantic',\n state: {\n isLoading,\n showProgressBars: isFetching,\n showAlertBanner: isError,\n columnVisibility: {\n 'mrt-row-expand': false,\n },\n },\n mantineTableHeadCellProps: {\n style: {\n backgroundColor: 'var(--mantine-color-secondary-8)',\n color: 'var(--mantine-color-table-0)',\n textAlign: 'center',\n padding: 'var(--mantine-spacing-md)',\n fontWeight: 'bold',\n fontSize: 'var(--mantine-font-size-lg)',\n textTransform: 'uppercase',\n },\n },\n mantineTableProps: {\n style: {\n backgroundColor: 'var(--mantine-color-base-9)',\n },\n },\n });\n\n if (isLoading) {\n return (\n <div className=\"flex w-full py-24 relative justify-center\">\n <Loader variant=\"dots\" />{' '}\n </div>\n );\n }\n\n if (isError) {\n return (\n <div className=\"flex w-full py-24 h-100 relative justify-center\">\n <Text size={'xl'}>Error loading project data</Text>\n </div>\n );\n }\n\n return (\n <div className=\"flex w-full bg-base-max p-4 rounded-lg\">\n <div className=\"grow w-auto inline-block overflow-x-scroll\">\n <MantineReactTable table={table} />\n </div>\n </div>\n );\n};\n\nexport default SubmissionsTable;\n","import React, { ReactElement } from 'react';\nimport { SubmissionConfig } from './types';\nimport ProjectTable from './Tables/ProjectTable';\nimport MessagePanel from '../../components/MessagePanel';\nimport SubmissionsTable from './Tables/SubmissionsTable';\n\n\nconst SubmissionPanel = ( { config }: { config?: SubmissionConfig}) : ReactElement => {\n return (\n <>\n {\n config ? (\n <div className=\"flex flex-col items-center p-4 w-full bg-base-lightest\">\n <ProjectTable columns={ config.projectTable.columns } />\n <SubmissionsTable />\n </div>\n ) : (\n <MessagePanel message=\"Submission config is not defined. Page disabled\" />\n )\n }\n </>\n );\n};\n\nexport default SubmissionPanel;\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport SubmissionPanel from '../../features/Submission/SubmissionPanel';\nimport { SubmissionsPageLayoutProps } from './types';\n\nconst SubmissionPage = ({\n submissionConfig,\n headerProps,\n footerProps,\n}: SubmissionsPageLayoutProps): JSX.Element => {\n return (\n <NavPageLayout\n footerProps={footerProps}\n headerProps={headerProps}\n headerMetadata={{\n title: 'Gen3 Submission Page',\n content: 'Submission page',\n key: 'gen3-submission-page',\n }}\n >\n <SubmissionPanel config={submissionConfig} />\n </NavPageLayout>\n );\n};\n\nexport default SubmissionPage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { SubmissionConfig } from '../../features/Submission/types';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { SubmissionsPageLayoutProps } from './types';\n\nexport const SubmissionPageGetServerSideProps: GetServerSideProps<\n SubmissionsPageLayoutProps\n> = async () => {\n try {\n const submissionConfig: SubmissionConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/submission.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n submissionConfig: submissionConfig,\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n submissionConfig: undefined,\n },\n };\n }\n};\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport TabbedCohortBuilder from '../../features/CohortBuilder/TabbedCohortBuilder';\nimport CohortManager from '../../features/CohortBuilder/CohortManager/CohortManager';\nimport QueryExpression from '../../features/CohortBuilder/QueryExpression';\nimport { Stack } from '@mantine/core';\nimport { TabbedCohortBuilderPageProps } from './types';\nimport CountsValue from '../../components/counts/CountsValue';\nimport {\n Accessibility,\n CoreState,\n selectCurrentCohortId,\n selectIndexFilters,\n useCoreSelector,\n useLazyGetCountsQuery,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\n\ninterface CountsPanelProps {\n index: string;\n accessibility?: Accessibility;\n indexPrefix?: string;\n}\n\nconst CountsPanel: React.FC<CountsPanelProps> = ({\n index,\n accessibility = Accessibility.ALL,\n indexPrefix = '',\n}: CountsPanelProps) => {\n const [getCounts, { data: counts, isFetching, isError, isSuccess }] =\n useLazyGetCountsQuery();\n const currentCohortId = useCoreSelector((state: CoreState) =>\n selectCurrentCohortId(state),\n );\n const cohortFilters = useCoreSelector((state: CoreState) =>\n selectIndexFilters(state, index),\n );\n\n useDeepCompareEffect(() => {\n getCounts({\n type: index,\n filters: cohortFilters,\n accessibility: accessibility,\n queryId: currentCohortId,\n indexPrefix: indexPrefix,\n });\n }, [cohortFilters, currentCohortId, accessibility]);\n\n return (\n <CountsValue\n label=\"Case\"\n counts={counts}\n isFetching={isFetching}\n isError={isError}\n />\n );\n};\n\nconst TabbedCohortBuilderPage = ({\n headerProps,\n footerProps,\n configuration,\n}: TabbedCohortBuilderPageProps): JSX.Element => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Tabbed Cohort Builder Page',\n content: 'Tabbed Cohort Builder Page',\n key: 'gen3-tabbed-cohort-builder-page',\n }}\n >\n <Stack align=\"stretch\" classNames={{ root: 'w-full' }}>\n <div className=\"w-full flex-col flex gap-4 fixed bg-white z-10\">\n <CohortManager\n rightPanel={\n <CountsPanel\n index={configuration.index}\n indexPrefix={configuration?.indexPrefix}\n />\n }\n />\n <QueryExpression index={configuration.index}></QueryExpression>\n </div>\n <div className=\"w-full mt-80 mr-4\">\n <TabbedCohortBuilder {...configuration} />\n </div>\n </Stack>\n </NavPageLayout>\n );\n};\n\nexport default TabbedCohortBuilderPage;\n","import { GetServerSideProps } from 'next';\nimport ContentSource from '../../lib/content';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { TabbedCohortBuilderConfiguration } from '../../features/CohortBuilder/TabbedCohortBuilder';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { TabbedCohortBuilderPageProps } from './types';\n\nexport const TabbedCohortBuilderPageGetServerSideProps: GetServerSideProps<\n TabbedCohortBuilderPageProps\n> = async () => {\n try {\n const cohortBuilderConfiguration: TabbedCohortBuilderConfiguration =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/tabbedCohortBuilder.json`,\n );\n\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: cohortBuilderConfiguration,\n },\n };\n } catch (err) {\n console.error(err);\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n configuration: {\n tabsConfiguration: {},\n index: 'unset',\n },\n },\n };\n }\n};\n","import React from 'react';\nimport { Text } from '@mantine/core';\n\nexport const divider_style = {\n label: 'font-medium text-primary-content-darkest text-lg my-2',\n};\n\nconst Gen3FrontendContrastColors: Record<string, ReadonlyArray<string>> = {\n 'base-contrast': [\n 'text-base-contrast-max',\n 'text-base-contrast-lightest',\n 'text-base-contrast-lighter',\n 'text-base-contrast-light',\n 'text-base-contrast',\n 'text-base-contrast-vivid',\n 'text-base-contrast-dark',\n 'text-base-contrast-darker',\n 'text-base-contrast-darkest',\n 'text-base-contrast-min',\n ],\n 'primary-contrast': [\n 'text-primary-contrast-max',\n 'text-primary-contrast-lightest',\n 'text-primary-contrast-lighter',\n 'text-primary-contrast-light',\n 'text-primary-contrast',\n 'text-primary-contrast-vivid',\n 'text-primary-contrast-dark',\n 'text-primary-contrast-darker',\n 'text-primary-contrast-darkest',\n 'text-primary-contrast-min',\n ],\n 'secondary-contrast': [\n 'text-secondary-contrast-max',\n 'text-secondary-contrast-lightest',\n 'text-secondary-contrast-lighter',\n 'text-secondary-contrast-light',\n 'text-secondary-contrast',\n 'text-secondary-contrast-vivid',\n 'text-secondary-contrast-dark',\n 'text-secondary-contrast-darker',\n 'text-secondary-contrast-darkest',\n 'text-secondary-contrast-min',\n ],\n 'accent-contrast': [\n 'text-accent-contrast-max',\n 'text-accent-contrast-lightest',\n 'text-accent-contrast-lighter',\n 'text-accent-contrast-light',\n 'text-accent-contrast',\n 'text-accent-contrast-vivid',\n 'text-accent-contrast-dark',\n 'text-accent-contrast-darker',\n 'text-accent-contrast-darkest',\n 'text-accent-contrast-min',\n ],\n 'accent-warm-contrast': [\n 'text-accent-warm-contrast-max',\n 'text-accent-warm-contrast-lightest',\n 'text-accent-warm-contrast-lighter',\n 'text-accent-warm-contrast-light',\n 'text-accent-warm-contrast',\n 'text-accent-warm-contrast-vivid',\n 'text-accent-warm-contrast-dark',\n 'text-accent-warm-contrast-darker',\n 'text-accent-warm-contrast-darkest',\n 'text-accent-warm-contrast-min',\n ],\n 'accent-cool-contrast': [\n 'text-accent-cool-contrast-max',\n 'text-accent-cool-contrast-lightest',\n 'text-accent-cool-contrast-lighter',\n 'text-accent-cool-contrast-light',\n 'text-accent-cool-contrast',\n 'text-accent-cool-contrast-vivid',\n 'text-accent-cool-contrast-dark',\n 'text-accent-cool-contrast-darker',\n 'text-accent-cool-contrast-darkest',\n 'text-accent-cool-contrast-min',\n ],\n 'chart-contrast': [\n 'text-chart-contrast-max',\n 'text-chart-contrast-lightest',\n 'text-chart-contrast-lighter',\n 'text-chart-contrast-light',\n 'text-chart-contrast',\n 'text-chart-contrast-vivid',\n 'text-chart-contrast-dark',\n 'text-chart-contrast-darker',\n 'text-chart-contrast-darkest',\n 'text-chart-contrast-min',\n ],\n 'utility-contrast': [\n 'text-utility-contrast-link',\n 'text-utility-contrast-success',\n 'text-utility-contrast-warning',\n 'text-utility-contrast-error',\n 'text-utility-contrast-emergency',\n 'text-utility-contrast-info',\n 'text-utility-contrast-category1',\n 'text-utility-contrast-category2',\n 'text-utility-contrast-category3',\n 'text-utility-contrast-category4',\n ],\n};\n\nconst Gen3FrontEndColors: Record<string, ReadonlyArray<string>> = {\n base: [\n 'bg-base-max',\n 'bg-base-lightest',\n 'bg-base-lighter',\n 'bg-base-light',\n 'bg-base',\n 'bg-base-vivid',\n 'bg-base-dark',\n 'bg-base-darker',\n 'bg-base-darkest',\n 'bg-base-min',\n ],\n primary: [\n 'bg-primary-max',\n 'bg-primary-lightest',\n 'bg-primary-lighter',\n 'bg-primary-light',\n 'bg-primary',\n 'bg-primary-vivid',\n 'bg-primary-dark',\n 'bg-primary-darker',\n 'bg-primary-darkest',\n 'bg-primary-min',\n ],\n\n secondary: [\n 'bg-secondary-max',\n 'bg-secondary-lightest',\n 'bg-secondary-lighter',\n 'bg-secondary-light',\n 'bg-secondary',\n 'bg-secondary-vivid',\n 'bg-secondary-dark',\n 'bg-secondary-darker',\n 'bg-secondary-darkest',\n 'bg-secondary-min',\n ],\n\n accent: [\n 'bg-accent-max',\n 'bg-accent-lightest',\n 'bg-accent-lighter',\n 'bg-accent-light',\n 'bg-accent',\n 'bg-accent-vivid',\n 'bg-accent-dark',\n 'bg-accent-darker',\n 'bg-accent-darkest',\n 'bg-accent-min',\n ],\n\n 'accent-warm': [\n 'bg-accent-warm-max',\n 'bg-accent-warm-lightest',\n 'bg-accent-warm-lighter',\n 'bg-accent-warm-light',\n 'bg-accent-warm',\n 'bg-accent-warm-vivid',\n 'bg-accent-warm-dark',\n 'bg-accent-warm-darker',\n 'bg-accent-warm-darkest',\n 'bg-accent-warm-min',\n ],\n 'accent-cool': [\n 'bg-accent-cool-max',\n 'bg-accent-cool-lightest',\n 'bg-accent-cool-lighter',\n 'bg-accent-cool-light',\n 'bg-accent-cool',\n 'bg-accent-cool-vivid',\n 'bg-accent-cool-dark',\n 'bg-accent-cool-darker',\n 'bg-accent-cool-darkest',\n 'bg-accent-cool-min',\n ],\n\n chart: [\n 'bg-chart-max',\n 'bg-chart-lightest',\n 'bg-chart-lighter',\n 'bg-chart-light',\n 'bg-chart',\n 'bg-chart-vivid',\n 'bg-chart-dark',\n 'bg-chart-darker',\n 'bg-chart-darkest',\n 'bg-chart-min',\n ],\n utility: [\n 'bg-utility-link',\n 'bg-utility-success',\n 'bg-utility-warning',\n 'bg-utility-error',\n 'bg-utility-emergency',\n 'bg-utility-info',\n 'bg-utility-category1',\n 'bg-utility-category2',\n 'bg-utility-category3',\n 'bg-utility-category4',\n ],\n};\n\ninterface ColorStylePalletProps {\n readonly name: string;\n readonly colors: ReadonlyArray<string>;\n}\n\ninterface ColorAndContrastStylePalletProps extends ColorStylePalletProps {\n readonly contrast?: ReadonlyArray<string>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst ColorPalletLine = ({ name, colors }: ColorStylePalletProps) => {\n return (\n <div className=\"flex flex-row items-center font-heading\">\n <div className=\"grid gap-12 grid-cols-11 grid-rows-1 my-1\">\n <p className=\"col-span-3 font-medium w-24\">{name}</p>\n {colors.map((x, i) => (\n <div key={`${x}-${i}`} className={`${x} p-4 px-8 mx-2 rounded`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst ColorAndContrastPalletLine = ({\n name,\n colors,\n contrast = undefined,\n}: ColorAndContrastStylePalletProps) => {\n return (\n <div className=\"grid gap-2 grid-cols-12 grid-rows-1 my-1 mr-6\">\n <p className=\"bg-base-max col-span-2 text-base-contrast-max\">{name}</p>\n {colors.map((x, i) => {\n const ext = x.split('-').slice(-1);\n return (\n <div\n key={`${x}-${i}`}\n className={`${x} ${\n contrast?.[i] ?? ''\n } flex justify-center p-4 px-8 mx-2 rounded border text-sm border-black`}\n >\n {ext}\n </div>\n );\n })}\n </div>\n );\n};\n\nconst ColorTheme = () => {\n return (\n <article className=\"prose font-heading bg-base-max text-base-contrast-max md:prose-md m-4 min-w-full\">\n <p className=\"prose font-semibold text-2xl\">Color Palettes</p>\n <div className=\"flex flex-col mx-4\">\n <div className=\"text-base-contrast-lighter mr-6\">\n The following theme colors are are currently available in this Gen3\n Data Commons.\n </div>\n {Object.keys(Gen3FrontEndColors).map((name: string) => {\n return (\n <ColorAndContrastPalletLine\n key={`${name}-pallet`}\n name={name}\n colors={Gen3FrontEndColors[name]}\n contrast={\n Object.keys(Gen3FrontendContrastColors).filter((element) =>\n element.includes(name),\n ).length > 0\n ? Gen3FrontendContrastColors[`${name}-contrast`]\n : Gen3FrontendContrastColors['primary-contrast']\n }\n />\n );\n })}\n {/* todo: make sure color is this custom one */}\n <div className=\"mr-6 text-[text-base-contrast.3]\">\n <Text>\n <p>\n <b>Gen3 Color Theme is based on USWDS theme color tokens</b> which\n are divided into several high-level role-based color families:{' '}\n <em>\n base, primary, secondary, accent, accent-warm, accent-cool, chart,\n and utility.\n </em>\n </p>\n <b>Base</b> is a project’s neutral color, typically some tint of gray,\n and usually used as the text color throughout.\n <p>\n <b>Primary, secondary, and accent colors</b> can be thought of as\n falling into a proportional 60/30/10 relationship: about 60% of your\n site’s color would be the primary color family, about 30% would be\n the secondary color family, and about 10% would be the accent color\n families (accent-warm and accent-cool). Note that these proportions\n are for non-base colors. In many cases, the neutral base text color\n will be the predominant tone on your site.\n </p>\n <p>\n Each color in the theme has 10 colors:\n <b>\n max, lightest, lighter, light, DEFAULT, vivid, dark, darker,\n darkest, min{' '}\n </b>\n These are padded to 10 color arrays for compatibility with\n Mantine&amp.s color theme. This allows you to pass\n color=&quot;primary|secondary|accent....&quot; to Mantine components\n as documented, this includes accessing lighter or darker version vis\n the primary.N (where N 0..9).\n </p>\n Each of these color also has a contrasting color for text, which is:\n <ul>\n <li>\n <b>\n contrast-max, contrast-lightest, contrast-lighter,\n contrast-light, contrast-DEFAULT, contrast-vivid, contrast-dark,\n contrast-darker, contrast-darkest, contrast-min{' '}\n </b>\n </li>\n </ul>\n <p>\n The contrast color is defined to be a 508 compliant contrast so\n while <b>primary-darker</b> is a darker version of the primary\n color, <b>primary-contrast-darker</b> is a 508 contrast compliant\n color, and it actually lighter, but is named to match the primary\n color shade. This means that consistent use of color-<em>shade</em>{' '}\n and color-contrast-<em>shade</em>, for example{' '}\n <b>bg-primary-lighter</b> and <b>text-primary-contrast-lighter</b>{' '}\n ensures that these two colors will be 508 compliant if the shades\n are defined correctly. The <em>content</em> variant allows finder\n control over the theme but at the risk of creating 508 contrast\n errors Any component using <em>content</em> should be checked for\n 508 contrast issues.\n </p>\n </Text>\n </div>\n </div>\n </article>\n );\n};\n\nexport default ColorTheme;\n","import React from 'react';\nimport { NavPageLayout, NavPageLayoutProps } from '../../features/Navigation';\n\nimport ColorTheme from '../../features/Theme/ColorTheme';\n\nconst ColorThemePage = ({ headerProps, footerProps }: NavPageLayoutProps) => {\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Theme Page',\n content: 'Theme page',\n key: 'gen3-theme-page',\n }}\n >\n <div className=\"flex justify-items-center w-full\">\n <ColorTheme />\n </div>\n </NavPageLayout>\n );\n};\n\nexport default ColorThemePage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport { type NavPageLayoutProps } from '../../features/Navigation';\n\nexport const ColorThemePageGetServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n },\n };\n};\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport { NavPageLayoutProps } from '../../features/Navigation';\nimport { CardContainer } from '../../components/MessageCards';\n\nconst WorkspaceNoAccessPage = ({\n headerProps,\n footerProps,\n}: NavPageLayoutProps): JSX.Element => {\n const supportEmail =\n headerProps?.siteProps?.contactEmail || 'support@gen3.org';\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Workspace No Access Page',\n content: 'Workspace no access page',\n key: 'gen3-workspace-no-access-page',\n }}\n >\n <CardContainer>\n <h1>Error opening workspace...</h1>\n <p>\n Workspace access requires authorization. Please contact{' '}\n <a href={`mailto:${supportEmail}`}>{supportEmail}</a> for more\n information.\n </p>\n </CardContainer>\n </NavPageLayout>\n );\n};\n\nexport default WorkspaceNoAccessPage;\n","import React, { createContext, ReactNode } from 'react';\nimport { WorkspaceConfig } from './types';\n\nconst WorkspaceConfigDefaults: WorkspaceConfig = {\n requirePayModel: true,\n launchStepIndicatorConfig: {\n steps: [\n { label: 'Requesting', description: 'requesting workspace resources' },\n { label: 'Initializing', description: 'starting workspace resources' },\n { label: 'Configuring', description: 'starting services' },\n {\n label: 'Starting',\n description: 'waiting for services',\n },\n {\n label: 'Connecting',\n description: 'waiting for connecting to workspace',\n },\n { label: 'Ready', description: 'workspace is ready' },\n ],\n },\n};\n\nconst WorkspaceContext = createContext<WorkspaceConfig>(\n WorkspaceConfigDefaults,\n);\n\nexport const useWorkspaceContext = () => {\n const context = React.useContext(WorkspaceContext);\n if (context === undefined) {\n throw Error('Workspace must be used inside of a useWorkspaceContext');\n }\n return context;\n};\n\nconst WorkspaceProvider = ({\n children,\n config,\n}: {\n children: ReactNode;\n config: WorkspaceConfig;\n}) => {\n const mergedConfig = { ...WorkspaceConfigDefaults, ...config };\n return (\n <WorkspaceContext.Provider value={mergedConfig}>\n {children}\n </WorkspaceContext.Provider>\n );\n};\n\nexport default WorkspaceProvider;\n","import { Gen3AppConfigData } from '../../lib/content/types';\n\nexport interface WorkspaceAdditionalInfo {\n title?: string;\n description?: string;\n icon?: string;\n image?: string;\n}\n\ninterface TitleAndDescription {\n title: string;\n description: string;\n}\n\nexport interface WorkspaceLaunchStatus {\n step: number;\n status: 'not ready' | 'processing' | 'error' | 'complete';\n message?: string;\n subSteps?: Array<TitleAndDescription>;\n}\n\nexport enum PayModelStatus {\n GETTING = 'GETTING',\n INVALID = 'INVALID',\n ERROR = 'ERROR',\n NOT_SELECTED = 'NOT_SELECTED',\n OVER_LIMIT = 'OVER_LIMIT',\n NOT_REQUIRED = 'NOT_REQUIRED',\n VALID = 'VALID',\n}\n\nexport interface LaunchStepIndicatorConfiguration {\n steps: Array<{\n label: string;\n description?: string;\n }>;\n}\n\nexport interface WorkspaceConfig extends Gen3AppConfigData {\n title?: string;\n workspaceInfo?: Record<string, WorkspaceAdditionalInfo>;\n launchStepIndicatorConfig: LaunchStepIndicatorConfiguration;\n requirePayModel?: boolean;\n externalLoginsNotUsed?: boolean;\n}\n","import React, {\n createContext,\n ReactNode,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport {\n getCurrentTimestamp,\n isFetchBaseQueryError,\n RequestedWorkspaceStatus,\n selectActiveWorkspaceStatus,\n setActiveWorkspace,\n setActiveWorkspaceStatus,\n setRequestedWorkspaceStatus,\n useCoreDispatch,\n useCoreSelector,\n useGetWorkspacePayModelsQuery,\n useLaunchWorkspaceMutation,\n useTerminateWorkspaceMutation,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { notifications } from '@mantine/notifications';\nimport { useFullscreen } from '@mantine/hooks';\nimport { PayModelStatus } from './types';\nimport { useWorkspaceContext } from './WorkspaceProvider';\n\nconst getWorkspaceErrorMessage = (\n error: unknown,\n defaultMessage: string,\n): string => {\n if (isFetchBaseQueryError(error)) {\n return error.data as string;\n }\n return defaultMessage;\n};\n\nconst showErrorNotification = (title: string, message: string) => {\n // Clear any existing notifications first\n notifications.clean(); // TODO debounce instead of clearing\n\n notifications.show({\n title,\n message,\n position: 'top-center',\n });\n};\n\ninterface WorkspaceStatusContextValue {\n isFullscreen: boolean; // fullscreen mode\n startWorkspace: (id: string) => void;\n stopWorkspace: () => void;\n toggleFullscreen: () => void;\n statusError?: boolean;\n workspaceLaunchIsLoading: boolean;\n terminateIsLoading: boolean;\n payModelStatus: PayModelStatus;\n}\nconst WorkspaceStatusContext = createContext<WorkspaceStatusContextValue>({\n isFullscreen: false,\n startWorkspace: () => null,\n stopWorkspace: () => null,\n toggleFullscreen: () => null,\n workspaceLaunchIsLoading: false,\n terminateIsLoading: false,\n payModelStatus: PayModelStatus.INVALID,\n});\n\nexport const useWorkspaceStatusContext = () => {\n const context = React.useContext(WorkspaceStatusContext);\n if (context === undefined) {\n throw Error(\n 'Any workspace status component must be used inside of a useWorkspaceStatusContext',\n );\n }\n return context;\n};\n\nconst WorkspaceStatusProvider = ({ children }: { children: ReactNode }) => {\n const { toggle: switchScreenMode, fullscreen: isFullscreen } =\n useFullscreen();\n const [payModelStatus, setPayModelStatus] = useState<PayModelStatus>(\n PayModelStatus.INVALID,\n );\n\n const { requirePayModel } = useWorkspaceContext();\n\n const [\n launchTrigger,\n { isError: isWorkspaceLaunchError, error: workspaceLaunchError },\n ] = useLaunchWorkspaceMutation();\n\n const [\n terminateWorkspace,\n {\n isLoading: terminateIsLoading,\n isError: isTerminateError,\n error: workspaceTerminateError,\n },\n ] = useTerminateWorkspaceMutation();\n\n const {\n data: payModels,\n isLoading: isPayModelLoading,\n isError: isPayModelError,\n } = useGetWorkspacePayModelsQuery();\n\n useEffect(() => {\n if (isPayModelLoading) {\n setPayModelStatus(PayModelStatus.GETTING);\n }\n if (isPayModelError && requirePayModel) {\n setPayModelStatus(PayModelStatus.ERROR);\n showErrorNotification('Payment Error', 'Unable to get payment model');\n } else if (!requirePayModel) setPayModelStatus(PayModelStatus.VALID);\n }, [isPayModelLoading, isPayModelError, payModelStatus, requirePayModel]);\n\n useEffect(() => {\n if (payModels) {\n const isPayModelAboveLimit =\n payModels.currentPayModel?.request_status === 'above limit';\n if (isPayModelAboveLimit) {\n setPayModelStatus(PayModelStatus.OVER_LIMIT);\n showErrorNotification(\n 'Payment Error',\n 'Selected pay model usage has exceeded its available funding. Please choose another pay model.',\n );\n return;\n }\n if (Object.keys(payModels).length === 0) {\n setPayModelStatus(PayModelStatus.NOT_REQUIRED);\n return;\n }\n if (Object.keys(payModels).length > 0) {\n if (payModels.currentPayModel != null)\n setPayModelStatus(PayModelStatus.VALID);\n else setPayModelStatus(PayModelStatus.NOT_SELECTED);\n }\n }\n }, [payModels]);\n\n const dispatch = useCoreDispatch();\n\n const currentWorkspaceStatus = useCoreSelector(selectActiveWorkspaceStatus);\n\n // handle errors in launching, getting status, or terminating\n useDeepCompareEffect(() => {\n if (isWorkspaceLaunchError || isTerminateError) {\n const errorMessage = getWorkspaceErrorMessage(\n isWorkspaceLaunchError ? workspaceLaunchError : workspaceTerminateError,\n isWorkspaceLaunchError\n ? 'Error launching workspace'\n : 'Error stopping workspace',\n );\n\n showErrorNotification('Workspace Error', errorMessage);\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Unset));\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.NotFound));\n }\n }, [isWorkspaceLaunchError, isTerminateError]);\n\n const status = useMemo(() => {\n const startWorkspace = (id: string) => {\n launchTrigger(id);\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Launch));\n dispatch(\n setActiveWorkspace({\n id: id,\n status: WorkspaceStatus.Launching,\n requestedStatus: RequestedWorkspaceStatus.Launch,\n requestedStatusTimestamp: getCurrentTimestamp(),\n }),\n );\n };\n\n const toggleFullscreen = () => switchScreenMode();\n\n const stopWorkspace = () => {\n terminateWorkspace();\n dispatch(setRequestedWorkspaceStatus(RequestedWorkspaceStatus.Terminate));\n dispatch(setActiveWorkspaceStatus(WorkspaceStatus.Terminating));\n };\n\n return {\n isFullscreen,\n startWorkspace,\n stopWorkspace,\n toggleFullscreen,\n workspaceLaunchIsLoading:\n currentWorkspaceStatus === WorkspaceStatus.Launching,\n terminateIsLoading,\n payModelStatus,\n };\n }, [\n currentWorkspaceStatus,\n dispatch,\n isFullscreen,\n launchTrigger,\n payModelStatus,\n switchScreenMode,\n terminateIsLoading,\n terminateWorkspace,\n ]);\n\n return (\n <WorkspaceStatusContext.Provider value={status}>\n {children}\n </WorkspaceStatusContext.Provider>\n );\n};\n\nexport default WorkspaceStatusProvider;\n","import React from 'react';\nimport {\n Button,\n Card,\n Group,\n Stack,\n Text,\n Tooltip,\n Transition,\n} from '@mantine/core';\nimport { Icon } from '@iconify-icon/react';\nimport {\n selectActiveWorkspaceId,\n selectRequestedWorkspaceStatus,\n selectWorkspaceStatusFromService,\n useCoreSelector,\n WorkspaceInfo,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { useWorkspaceStatusContext } from './WorkspaceStatusProvider';\nimport { PayModelStatus } from './types';\n\nconst LaunchDisabledMessage: Record<PayModelStatus, string> = {\n NOT_SELECTED: 'A pay model is not selected',\n NOT_REQUIRED: 'A pay model is not required',\n VALID: 'Launch Workspace',\n INVALID: 'A pay model is invalid',\n ERROR: 'An error occurred getting the pay model status',\n OVER_LIMIT: 'You have exceeded your pay model limit',\n GETTING: 'Getting pay model status',\n};\n\nconst COMPUTE_PROPS_LABEL_STYLE =\n 'text-base-lighter font-medium text-sm opacity-90';\n\ninterface NotebookCardParams {\n info: WorkspaceInfo;\n}\nconst NotebookCard = ({ info }: NotebookCardParams) => {\n const { startWorkspace, stopWorkspace, payModelStatus } =\n useWorkspaceStatusContext();\n\n const { status } = useCoreSelector(selectWorkspaceStatusFromService);\n const requestedStatus = useCoreSelector(selectRequestedWorkspaceStatus);\n const workspaceId = useCoreSelector(selectActiveWorkspaceId);\n\n const launchDisabled =\n status !== WorkspaceStatus.NotFound ||\n !(\n payModelStatus === PayModelStatus.NOT_REQUIRED ||\n payModelStatus === PayModelStatus.VALID\n ) ||\n (info.id !== workspaceId && requestedStatus === 'Launch');\n\n return (\n <Card withBorder radius=\"xs\" className=\"w-64\">\n <Card.Section inheritPadding py=\"xs\">\n <Stack align=\"center\">\n <Icon height={'48px'} icon={'workspace:jupyter'} />\n <Text\n ta=\"center\"\n classNames={{ root: 'h-20 font-header' }}\n size=\"md\"\n fw={500}\n lineClamp={3}\n >\n {info.name}\n </Text>\n </Stack>\n </Card.Section>\n <Card.Section inheritPadding py=\"xs\">\n <Group justify=\"center\">\n <Text c=\"base-contrast.4\" className={COMPUTE_PROPS_LABEL_STYLE}>\n CPU Limit: {info.cpuLimit}\n </Text>\n <Text\n c=\"base-contrast.4\"\n className={COMPUTE_PROPS_LABEL_STYLE}\n size=\"xs\"\n >\n Memory: {info.memoryLimit}\n </Text>\n </Group>\n </Card.Section>\n <div className=\"flex mx-8 justify-center border-1 border-base\"></div>\n <Group className=\"mt-2 p-2\" justify=\"center\">\n <Tooltip label={LaunchDisabledMessage[payModelStatus]}>\n <Button\n loading={info.id === workspaceId && requestedStatus === 'Launch'}\n data-disabled={launchDisabled}\n onClick={(event) => {\n event.preventDefault();\n startWorkspace(info.id);\n }}\n >\n Launch\n </Button>\n </Tooltip>\n <Transition\n mounted={\n (info.id === workspaceId && requestedStatus === 'Launch') ||\n status === 'Launching'\n }\n transition=\"fade\"\n duration={400}\n timingFunction=\"ease\"\n >\n {() => {\n if (info.id == workspaceId) {\n return (\n <Button\n onClick={() => {\n stopWorkspace();\n }}\n >\n Shutdown\n </Button>\n );\n } else {\n return <p />;\n }\n }}\n </Transition>\n </Group>\n </Card>\n );\n};\n\nexport default NotebookCard;\n","import React from 'react';\nimport { Center, Grid, LoadingOverlay, rem, Transition } from '@mantine/core';\nimport {\n useGetWorkspaceOptionsQuery,\n useGetWorkspaceStatusQuery,\n WorkspaceInfo,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { ErrorCard } from '../../components/MessageCards';\nimport NotebookCard from './NotebookCard';\n\nconst WorkspacePanel = () => {\n const { data, isLoading, isError } = useGetWorkspaceOptionsQuery();\n\n const { data: workspaceStatusData } = useGetWorkspaceStatusQuery(undefined);\n\n if (isError) {\n return (\n <Center>\n <ErrorCard message=\"Error loading workspace definitions\" />\n </Center>\n );\n }\n\n const workspaceStatus = workspaceStatusData?.status;\n return (\n <>\n <Transition\n mounted={\n workspaceStatus === WorkspaceStatus.NotFound ||\n workspaceStatus === WorkspaceStatus.Launching\n }\n transition=\"scale-y\"\n duration={600}\n exitDuration={600}\n timingFunction=\"ease\"\n >\n {(styles) => (\n <div className=\"px-2 mt-4\" style={styles}>\n <LoadingOverlay visible={isLoading} />\n <Grid\n justify=\"center\"\n align=\"stretch\"\n gutter=\"sm\"\n overflow=\"hidden\"\n >\n {data?.map((card: WorkspaceInfo) => {\n return (\n <Grid.Col\n key={card.id}\n span=\"content\"\n style={{ minHeight: rem(150) }}\n >\n <NotebookCard info={card} />\n </Grid.Col>\n );\n })}\n </Grid>\n </div>\n )}\n </Transition>\n </>\n );\n};\n\nexport default WorkspacePanel;\n","import React from 'react';\nimport { GEN3_WORKSPACE_API, selectActiveWorkspaceStatus, useCoreSelector, WorkspaceStatus, } from '@gen3/core';\n\nconst WorkspaceNotebook = () => {\n const currentWorkspaceStatus = useCoreSelector(selectActiveWorkspaceStatus);\n\n if (currentWorkspaceStatus !== WorkspaceStatus.Running) return null;\n\n return (\n <React.Fragment>\n <div className=\"flex flex-col w-full h-workspace flex-grow content-center items-center\">\n <iframe\n className=\"w-full h-full border-8\"\n title=\"Workspace\"\n src={`${GEN3_WORKSPACE_API}/proxy/`}\n />\n </div>\n </React.Fragment>\n );\n};\n\nexport default WorkspaceNotebook;\n","import React from 'react';\nimport { useGetExternalLoginsQuery } from '@gen3/core';\nimport { Badge, Group, Loader, Stack, Text } from '@mantine/core';\n\nconst ExternalLoginsStatus = () => {\n const {\n data: externalProviders,\n isLoading,\n isError,\n isSuccess,\n } = useGetExternalLoginsQuery();\n\n if (isLoading) {\n return (\n <div className=\"bg-primary h-24 flex justify-center\">\n <Loader />\n </div>\n );\n }\n\n if (isError) {\n return (\n <div className=\"flex justify-center w-full p-1\">\n <Text fw={500}>Error occurred while fetching external logins</Text>\n </div>\n );\n }\n\n if (isSuccess) {\n const providersNeedToken = externalProviders.providers.filter(\n (option) => !option.refresh_token_expiration,\n );\n if (providersNeedToken.length > 0) {\n return (\n <div className=\"p-2 border border-base-lighter pb-4\">\n <Stack>\n <Text>\n To analyze all data to which you have access, please authorize\n these external data resources in the Profile page:{' '}\n </Text>\n <Group gap=\"xs\">\n {providersNeedToken.map((provider) => (\n <Badge\n size=\"lg\"\n variant=\"outline\"\n radius=\"sm\"\n key={provider.name}\n >\n {provider.name}\n </Badge>\n ))}\n </Group>\n </Stack>\n </div>\n );\n }\n return null;\n }\n};\n\nexport default ExternalLoginsStatus;\n","export const PaymentNumberToString = (\n x: number | undefined,\n undefinedValue = 'N/A',\n precision = 2,\n): string => {\n if (!x || Number.isNaN(x)) return undefinedValue;\n\n return x.toFixed(precision);\n};\n","import React, { ReactElement, useState } from 'react';\nimport {\n Accordion,\n Center,\n Group,\n Loader,\n Select,\n SelectProps,\n Text,\n} from '@mantine/core';\nimport {\n type PayModel,\n useGetWorkspacePayModelsQuery,\n useSetCurrentPayModelMutation,\n} from '@gen3/core';\nimport { useDeepCompareMemo, useDeepCompareCallback } from 'use-deep-compare';\n\nconst LIMITS_LABEL_STYLE = 'text-base-lighter font-medium text-sm opacity-90';\n\ninterface PayModelMenuItem {\n value: string;\n label: string;\n icon: ReactElement;\n totalUsage: string;\n}\nimport {\n FaUser as ActiveIcon,\n FaExclamationCircle as InactiveIcon,\n} from 'react-icons/fa';\nimport { PaymentNumberToString } from '../utils';\nimport { ErrorCard } from '../../../components/MessageCards';\nimport { FetchBaseQueryError } from '@reduxjs/toolkit/query/react';\nimport { SerializedError } from '@reduxjs/toolkit';\n\nconst isNoPayModelError = (error: FetchBaseQueryError | SerializedError) => {\n return (\n 'status' in error &&\n error.status === 'PARSING_ERROR' &&\n error.originalStatus === 404\n );\n};\n\nconst NoPayModel = () => {\n return (\n <Group\n className=\"p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-16\"\n justify=\"space-between\"\n >\n <Text\n className=\"pl-4\"\n size=\"md\"\n classNames={{ root: 'font-heading text-utility-warning' }}\n >\n No pay model defined\n </Text>\n </Group>\n );\n};\n\nconst PaymentPanel = () => {\n const { data, isLoading, isFetching, isError, error } =\n useGetWorkspacePayModelsQuery();\n\n const [setWorkspacePayModel] = useSetCurrentPayModelMutation();\n\n const [selectedPayModel, setSelectedPayModel] = useState<string | null>(null);\n\n const setPayModel = useDeepCompareCallback(\n (id: string) => {\n setWorkspacePayModel(id); // triggers the call to the service to select the pay model\n setSelectedPayModel(id); // set the paymodel value for the select component\n },\n [setWorkspacePayModel, selectedPayModel],\n );\n\n const { usersPayModels, workspaceName, hardLimit, totalUsage } =\n useDeepCompareMemo(() => {\n if (!data)\n return {\n usersPayModels: [],\n selectedPayModel: [],\n workspaceName: 'Not Set',\n totalUsage: undefined,\n hardLimit: undefined,\n };\n const usersPayModels = data.allPayModels.map(\n (payModel: PayModel): PayModelMenuItem => {\n return {\n value: payModel.bmh_workspace_id ?? payModel.workspace_type,\n label: payModel.workspace_type,\n totalUsage: payModel['total-usage'].toFixed(2),\n icon:\n payModel.request_status === 'active' ? (\n <ActiveIcon />\n ) : (\n <InactiveIcon />\n ),\n };\n },\n );\n\n setSelectedPayModel(\n data.currentPayModel.bmh_workspace_id ??\n data.currentPayModel.workspace_type,\n );\n return {\n usersPayModels,\n workspaceName:\n data.currentPayModel.bmh_workspace_id.length > 0\n ? data.currentPayModel.bmh_workspace_id\n : data.currentPayModel.workspace_type,\n totalUsage: data.currentPayModel['total-usage'],\n hardLimit: data.currentPayModel['hard-limit'],\n };\n }, [data]);\n\n const PayModelSelectItem: SelectProps['renderOption'] = ({ option }) => {\n const menuItem = usersPayModels[Number(option.value)];\n if (!menuItem) return null;\n return (\n <div>\n <Group wrap=\"nowrap\">\n <Text size=\"sm\">{menuItem.label}</Text>\n <Text size=\"sm\">{menuItem.totalUsage}</Text>\n {menuItem.icon}\n </Group>\n </div>\n );\n };\n\n if (isLoading && isFetching)\n return (\n <div className=\"flex justify-center p-2 border-1 border-l-0 border-r-0 border-base-lighter w-full h-14\">\n <Loader />\n </div>\n );\n\n if (isError) {\n if (isNoPayModelError(error)) {\n return <NoPayModel />;\n } else\n return (\n <Center>\n <ErrorCard message=\"Unable to get Payment information\" />\n </Center>\n );\n }\n\n return (\n <div>\n <Accordion chevronPosition=\"left\">\n <Accordion.Item value=\"accountInformation\">\n <Accordion.Control>\n <Group justify=\"space-between\">\n Account Information\n <Group className=\"font-heading text-base-contrast\">\n <Text fw={600}>{workspaceName}</Text>\n <div className=\"flex items-center\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Total Usage:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(totalUsage)}\n </Text>\n </div>\n <div className=\"flex items-center pr-1\">\n <Text fw={500} size=\"sm\" className=\"mr-1\">\n Hard Limit:\n </Text>\n <Text fw={500} size=\"sm\">\n {PaymentNumberToString(hardLimit)}\n </Text>\n </div>\n </Group>\n </Group>\n </Accordion.Control>\n <Accordion.Panel>\n <div className=\"grid grid-cols-3 p-4\">\n <div className=\"flex flex-col border-1 border-gray p-2 mr-4\">\n <div className=\"flex justify-between border-b-1 border-gray mb-2 w-full py-2\">\n <div className=\"ml-2 text-xs\">Account</div>\n <div className=\"mr-2 text-xs\">Workspace Account Manager</div>\n </div>\n <div className=\"text-center\">\n <div>\n <Select\n placeholder=\"Select Workspace\"\n renderOption={PayModelSelectItem}\n data={usersPayModels}\n onChange={(id) => {\n if (id) setPayModel(id);\n }}\n value={selectedPayModel}\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2 mr-4\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Total Charges (USD)\n </div>\n <Text>{PaymentNumberToString(totalUsage)}</Text>\n </div>\n <div className=\"flex flex-col text-center border-1 border-gray p-2\">\n <div className=\"text-md border-b-1 border-gray mb-2 w-full py-2 text-xs\">\n Spending Limit (USD)\n </div>\n <Text>{PaymentNumberToString(hardLimit)}</Text>\n </div>\n </div>\n </Accordion.Panel>\n </Accordion.Item>\n </Accordion>\n </div>\n );\n};\n\nexport default PaymentPanel;\n","import {\n PodConditionType,\n WorkspaceContainerState,\n WorkspaceStatusResponse,\n PodStatus,\n WorkspacePodCondition,\n WorkspaceStatus,\n} from '@gen3/core';\nimport { WorkspaceLaunchStatus } from './types';\n\nconst isTerminated = (state?: WorkspaceContainerState): boolean => {\n return state !== undefined && 'terminated' in state.state;\n};\n\nconst PodConditionIndex: Record<keyof typeof PodConditionType, number> = {\n PodScheduled: 0,\n Initialized: 1,\n PodReadyToStartContainers: 2,\n ContainersReady: 3,\n ProxyConnected: 4,\n Ready: 5,\n};\n\nexport const retrievePodConditionStatus = (\n conditionType: PodConditionType,\n conditions: Array<WorkspacePodCondition>,\n): PodStatus => {\n const matchingCondition = conditions.find(\n (condition) => condition.type === conditionType,\n );\n if (!matchingCondition) return PodStatus.Unknown;\n return matchingCondition.status;\n};\n\nexport const calculateCurrentStep = (\n conditions: Array<WorkspacePodCondition>,\n): number => {\n let currentStep = 0;\n conditions.forEach((condition: WorkspacePodCondition) => {\n const idx =\n PodConditionIndex[condition.type as keyof typeof PodConditionType];\n if (condition.status === PodStatus.True)\n currentStep = Math.max(idx + 1, currentStep); // Add +1 since if True this\n });\n return currentStep;\n};\n\nexport const calculateLaunchSteps = ({\n status,\n conditions,\n containerStates,\n workspaceType,\n}: Omit<WorkspaceStatusResponse, 'idleTimeLimit' | 'lastActivityTime'>) => {\n // if status is not 'Launching', or 'Stopped',\n // or we don't have conditions array, don't display steps bar\n if (\n !conditions ||\n conditions.length === 0 ||\n (status !== 'Launching' && status !== 'Stopped')\n ) {\n return undefined;\n }\n\n // the return steps state\n const workspaceLaunchStatus: WorkspaceLaunchStatus = {\n step: 0,\n status: 'not ready',\n };\n\n const currentStep = calculateCurrentStep(conditions);\n\n workspaceLaunchStatus.step = currentStep;\n workspaceLaunchStatus.status = status === 'Stopped' ? 'error' : 'processing';\n\n if (currentStep == 2) {\n // PodReadyToStartContainers == False\n const cs: Array<WorkspaceContainerState> = containerStates ?? [];\n // handle container stats\n if (cs.some((element: WorkspaceContainerState) => isTerminated(element))) {\n workspaceLaunchStatus.status = 'error';\n workspaceLaunchStatus.message = 'Service is terminated';\n }\n workspaceLaunchStatus.message = 'Starting notebook services';\n }\n\n if (currentStep == 3) {\n // ContainersReady == False\n // get container status\n\n if (workspaceType === 'ECS') {\n if (status === 'Launching') {\n workspaceLaunchStatus.status = 'processing';\n } else if (status !== 'Stopped') {\n workspaceLaunchStatus.status = 'error';\n }\n } else {\n const cs: Array<WorkspaceContainerState> = containerStates ?? [];\n // handle container stats\n if (\n cs.some((element: WorkspaceContainerState) => isTerminated(element))\n ) {\n workspaceLaunchStatus.status = 'error';\n workspaceLaunchStatus.message = 'Service is terminated';\n } else {\n // If container states are available, display detailed pod statuses\n workspaceLaunchStatus.subSteps = cs.map((c) => ({\n title: c.name,\n description: `${c.ready ? 'ready' : 'pending'}`,\n }));\n }\n }\n const podStatus = retrievePodConditionStatus(\n PodConditionType.ProxyConnected,\n conditions,\n );\n\n if (podStatus === PodStatus.False)\n workspaceLaunchStatus.message =\n 'In progress. If you are stuck here for more than a few minutes, cancel launch and try again or contact user support.';\n }\n\n // wait for proxy\n\n if (currentStep == 4) {\n // ProxyConnect == False\n const podStatus = retrievePodConditionStatus(\n PodConditionType.ProxyConnected,\n conditions,\n );\n if (podStatus === PodStatus.True)\n workspaceLaunchStatus.message = 'Proxy is ready';\n else workspaceLaunchStatus.status = 'error';\n }\n\n if (currentStep == 5) {\n workspaceLaunchStatus.message = 'Proxy is ready';\n workspaceLaunchStatus.status = 'complete';\n }\n\n return workspaceLaunchStatus;\n};\n","import React from 'react';\nimport { Stepper, Center, Text, Transition } from '@mantine/core';\nimport {\n LaunchStepIndicatorConfiguration,\n WorkspaceLaunchStatus,\n} from './types';\nimport { calculateLaunchSteps } from './calculateLaunchSteps';\nimport { useWorkspaceContext } from './WorkspaceProvider';\nimport { selectWorkspaceStatusFromService, useCoreSelector } from '@gen3/core';\n\ninterface WorkspaceLaunchProgressProps {\n stepsConfig: LaunchStepIndicatorConfiguration;\n step?: WorkspaceLaunchStatus;\n}\n\nconst WorkspaceStepper = ({\n stepsConfig,\n step,\n}: WorkspaceLaunchProgressProps) => {\n return (\n <Transition\n mounted={step !== undefined}\n transition=\"fade\"\n duration={1200}\n exitDuration={1200}\n timingFunction=\"ease\"\n >\n {(styles) => (\n <div className=\"p-2 mt-2 w-3/4 mx-4\" style={styles}>\n {!step ? null : (\n <Stepper\n size=\"xs\"\n active={step?.step}\n allowNextStepsSelect={false}\n wrap={false}\n >\n {stepsConfig.steps.map((x) => {\n return (\n <Stepper.Step\n key={x.label}\n label={x.label}\n description={x.description}\n color={step.status === 'error' ? 'red' : 'accent.4'}\n >\n {step.message ? (\n <Center>\n <Text>{step.message}</Text>\n </Center>\n ) : null}\n </Stepper.Step>\n );\n })}\n </Stepper>\n )}\n </div>\n )}\n </Transition>\n );\n};\n\nconst WorkspaceLaunchProgress = () => {\n const config = useWorkspaceContext();\n\n const workspaceStatus = useCoreSelector(selectWorkspaceStatusFromService);\n const step = calculateLaunchSteps(workspaceStatus);\n\n return (\n <div className=\"px-2 py-1 mx-8\">\n <WorkspaceStepper\n stepsConfig={config.launchStepIndicatorConfig}\n step={step}\n />\n </div>\n );\n};\n\nexport default WorkspaceLaunchProgress;\n","import React from 'react';\nimport { Button, Group, Text, Tooltip, Transition } from '@mantine/core';\nimport { modals } from '@mantine/modals';\nimport { FaRegStopCircle as StopIcon } from 'react-icons/fa';\nimport { BsArrowsFullscreen as FullscreenIcon } from 'react-icons/bs';\nimport { Icon } from '@iconify-icon/react';\nimport { useWorkspaceStatusContext } from './WorkspaceStatusProvider';\nimport {\n isWorkspaceRunningOrStopping,\n RequestedWorkspaceStatus,\n selectActiveWorkspaceStatus,\n selectRequestedWorkspaceStatus,\n useCoreSelector,\n} from '@gen3/core';\n\nconst StatusAndControls = () => {\n const { stopWorkspace, toggleFullscreen, isFullscreen } =\n useWorkspaceStatusContext();\n\n const openModal = () =>\n modals.openConfirmModal({\n title: 'Workspace',\n children: <Text size=\"sm\">Please confirm workspace shutdown</Text>,\n labels: { confirm: 'Confirm', cancel: 'Cancel' },\n onConfirm: () => stopWorkspace(),\n });\n\n const workspaceStatus = useCoreSelector(selectActiveWorkspaceStatus);\n const requestedStatus = useCoreSelector(selectRequestedWorkspaceStatus);\n\n return (\n <Transition\n mounted={isWorkspaceRunningOrStopping(workspaceStatus)}\n transition=\"fade\"\n duration={1200}\n timingFunction=\"ease\"\n >\n {(styles) => (\n <div style={styles}>\n <Group>\n <Tooltip label=\"Stop Workspace\">\n <Button\n loading={requestedStatus === RequestedWorkspaceStatus.Terminate}\n size=\"md\"\n color=\"accent.5\"\n variant=\"default\"\n onClick={() => {\n openModal();\n }}\n aria-label=\"Stop Workspace\"\n leftSection={\n <StopIcon\n color=\"utility.2\"\n size=\"1rem\"\n className=\"text-accent-warm\"\n />\n }\n >\n Stop Workspace\n </Button>\n </Tooltip>\n <Tooltip label=\"Toggle fullscreen mode\">\n <Button\n color=\"utility.2\"\n size=\"md\"\n variant=\"default\"\n onClick={() => {\n toggleFullscreen();\n }}\n aria-label={\n isFullscreen ? 'Exit Fullscreen' : 'Make Fullscreen'\n }\n leftSection={<FullscreenIcon className=\"text-accent-warm\" />}\n >\n {isFullscreen ? 'Exit Fullscreen' : 'Make Fullscreen'}\n </Button>\n </Tooltip>\n </Group>\n </div>\n )}\n </Transition>\n );\n};\n\nexport default StatusAndControls;\n","import React, { useEffect } from 'react';\nimport WorkspacePanel from './WorkspacePanel';\nimport WorkspaceNotebook from './WorkspaceNotebook';\nimport { useWorkspaceStatusContext } from './WorkspaceStatusProvider';\nimport ExternalLoginsStatus from './ExternalLogins/ExternalLoginsStatus';\nimport PaymentPanel from './PaymentPanel/PaymentPanel';\nimport WorkspaceLaunchProgress from './WorkspaceLaunchProgress';\nimport { useWorkspaceContext } from './WorkspaceProvider';\nimport StatusAndControls from './StatusAndControls';\n\nconst FULLSCREEN_STYLE =\n 'fixed top-0 left-0 w-full h-full flex flex-col flex-grow content-center items-center bg-base-lightest';\n\nconst WorkspaceNotebookPanelWithControls = ({ id }: { id?: string }) => {\n const { isFullscreen, startWorkspace } = useWorkspaceStatusContext();\n const { requirePayModel, externalLoginsNotUsed } = useWorkspaceContext();\n\n useEffect(() => {\n if (id) {\n startWorkspace(id);\n }\n }, []);\n\n return (\n <div\n className={\n isFullscreen\n ? FULLSCREEN_STYLE\n : 'flex flex-col grow w-full h-full relative'\n }\n >\n {externalLoginsNotUsed === false && <ExternalLoginsStatus />}\n <div\n className={`flex w-full p-2 ${requirePayModel ? 'justify-between' : 'justify-end'}`}\n >\n {requirePayModel && <PaymentPanel />}\n <StatusAndControls />\n </div>\n <WorkspaceLaunchProgress />\n <WorkspacePanel />\n <WorkspaceNotebook />\n </div>\n );\n};\n\nexport default WorkspaceNotebookPanelWithControls;\n","import React from 'react';\nimport { WorkspaceConfig } from './types';\nimport WorkspaceProvider from './WorkspaceProvider';\nimport WorkspaceStatusProvider from './WorkspaceStatusProvider';\nimport WorkspaceNotebookPanelWithControls from './WorkspaceNotebookPanelWithControls';\n\ninterface WorkspaceProps {\n config: WorkspaceConfig;\n workspaceToRunId?: string;\n}\n\nconst Workspace = ({ config, workspaceToRunId }: WorkspaceProps) => {\n return (\n <WorkspaceProvider config={config}>\n <WorkspaceStatusProvider>\n <div className=\"flex flex-col grow w-full relative\">\n <WorkspaceNotebookPanelWithControls id={workspaceToRunId} />\n </div>\n </WorkspaceStatusProvider>\n </WorkspaceProvider>\n );\n};\n\nexport default Workspace;\n","import React from 'react';\nimport { NavPageLayout } from '../../features/Navigation';\nimport Workspace from '../../features/Workspace/Workspace';\nimport { WorkspacePageLayoutProps } from './types';\nimport { useRouter } from 'next/router';\nimport { NextRouter } from 'next/dist/client/router';\n\nconst getWorkspaceId = (router: NextRouter): string | undefined => {\n const { workspace } = router.query;\n if (typeof workspace === 'string') return workspace;\n else if (typeof workspace === 'object') return workspace[0];\n\n return undefined;\n};\n\nconst WorkspacePage = ({\n headerProps,\n footerProps,\n workspaceProps,\n}: WorkspacePageLayoutProps): JSX.Element => {\n const router = useRouter();\n\n const id = getWorkspaceId(router);\n\n return (\n <NavPageLayout\n {...{ headerProps, footerProps }}\n headerMetadata={{\n title: 'Gen3 Workspace Page',\n content: 'Workspace page',\n key: 'gen3-workspace-page',\n ...(workspaceProps?.headerMetadata\n ? workspaceProps.headerMetadata\n : {}),\n }}\n >\n <Workspace config={workspaceProps} workspaceToRunId={id} />\n </NavPageLayout>\n );\n};\n\nexport default WorkspacePage;\n","import { GetServerSideProps } from 'next';\nimport { getNavPageLayoutPropsFromConfig } from '../../lib/common/staticProps';\nimport ContentSource from '../../lib/content';\nimport { GEN3_COMMONS_NAME } from '@gen3/core';\nimport { WorkspaceConfig } from '../../features/Workspace';\nimport { WorkspacePageLayoutProps } from './types';\nimport { type NavPageLayoutProps } from '../../features/Navigation';\nimport { LaunchStepIndicatorConfiguration } from '../../features/Workspace/types';\n\nexport const WorkspacePageGetServerSideProps: GetServerSideProps<\n WorkspacePageLayoutProps\n> = async (_context) => {\n const workspaceProps: WorkspaceConfig =\n await ContentSource.getContentDatabase().get(\n `${GEN3_COMMONS_NAME}/workspace.json`,\n );\n try {\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n workspaceProps,\n },\n };\n } catch (err: unknown) {\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n workspaceProps: {\n launchStepIndicatorConfig: {} as LaunchStepIndicatorConfiguration,\n },\n },\n };\n }\n};\n\nexport const WorkspaceNoAccessPageServerSideProps: GetServerSideProps<\n NavPageLayoutProps\n> = async () => {\n return {\n props: {\n ...(await getNavPageLayoutPropsFromConfig()),\n },\n };\n};\n"],"names":["Custom403Page","_jsxs","React","Fragment","Head","_jsx","title","meta","property","content","div","className","h1","span","Link","href","Custom404Page","LinkAuthStatus","isHeaderMetadata","obj","Array","isArray","candidate","trim","length","key","extractClassName","classNames","checkRouteAccess","pathname","resources","routesConfig","loggedIn","pending","rule","routes","Authorized","loginRequired","hasAuthzResources","authz","LoginRequired","Pending","allowed","some","needed","includes","Unauthorized","mergeDefaultTailwindClassnames","defaultValues","mode","userValues","defaultKeys","Object","keys","mergedValues","forEach","twMerge","mergeTailwindClassnameWithDefault","isPropertyKey","value","hasOwnProperty","prop","undefined","call","getParamsValueAsString","params","toString","extractObjectKey","FooterRowComponent","item","rowClassname","itemType","text","p","link","a","target","rel","links","mergedClassname","map","i","logo","Image","src","width","height","alt","description","section","FooterSection","columns","FooterColumnTwDefaultStyles","root","heading","rowItem","FooterColumn","rows","mergedClassNames","index","col","memo","Footer","rightSection","leftSection","classNamesDefaults","layout","footer","Gen3Link","linkType","showExternalIcon","portalBasename","process","env","NEXT_PUBLIC_PORTAL_BASENAME","FaExternalLinkAlt","LoginButtonVisibility","isValidFileItemWithParentDatasetNameAndID","fileItem","datasetName","datasetId","IconSize","xs","sm","md","lg","xl","TooltipStyle","tooltip","arrow","IconButton","name","leftIcon","rightIcon","iconSize","clickHandler","ariaLabel","button","label","mergedClassnames","iconSz","Tooltip","position","withArrow","multiline","color","disabled","role","aria-label","onClick","event","Icon","icon","AccountButton","router","useRouter","handleSelected","push","userInfo","useCoreSelector","state","selectUserDetails","userStatus","selectUserAuthStatus","authenticated","setAuthenticated","useState","useEffect","tempIsAuth","isAuthenticated","displayName","email","preferred_username","username","unixTimeToString","unixTime","Date","toLocaleString","convertSecondsToMilliseconds","seconds","focusStyles","toDisplayName","field","parsed","split","fieldName","at","w","capitalize","join","toCountsString","counts","units","configuration","none","one","multiple","pluralize","unitDisplay","word","endsWith","slice","isArrayOfString","every","element","validTextTransforms","isTextTransform","accessibleFieldName","AccessLevel","validateObjectHasRequiredFields","requiredFields","WorkspaceStatus","NotFound","Launching","Terminating","Running","Stopped","Errored","StatusError","SessionContext","createContext","useSession","required","onUnauthenticated","session","useContext","Error","status","window","useIsAuthenticated","user","userContext","referrer","endSession","externalLoginUrl","LoginButton","visibility","usePathname","LogoutOnly","processTopBarItems","items","dividerClassname","reduce","acc","Custom","component","newWindow","Divider","size","orientation","TopBar","loginButtonVisibility","Hidden","itemClassnames","login","divider","itemClassnameDefaults","mergedItemClassnames","header","_Fragment","HoverLink","noBasePath","children","passHref","NavigationLogo","titleLink","fill","AuthTooltips","unauthorized","authorized","NavigationBarButton","iconHeight","authStatus","handleClick","tooltipText","arrowSize","zIndex","data-disabled","UnstyledButton","DefaultRouteConfig","ProtectedRoutesContext","useProtectedRoutesContext","NavigationBarItem","current","selectedStyle","LoadingOverlay","visible","NavigationBar","hideUnauthorizedLinks","navigationPanel","logoAndTitlePanel","buttons","useDeepCompareMemo","data","error","authzResourceError","isFetching","isAuthzResourcesFetching","isError","isAuthzResourcesError","refetch","useGetAuthzResourcesQuery","useDeepCompareEffect","setCurrent","asPath","itemsToRenderSetup","x","linkAuthStatus","itemsToRender","setItemsToRender","backgroundColor","INFO","WARNING","ERROR","MESSAGE","textColor","InfoIcon","WarningIcon","ErrorIcon","Banner","message","level","isExternalLink","linkTarget","Markdown","components","props","LoginIcon","hideText","ActionMenu","Menu","Target","DotsIcon","Dropdown","Item","Text","HorizontalNavigationBar","actions","loginIcon","Visible","Header","topBar","navigation","banners","type","banner","_createElement","id","LeftSidePanel","NavPageLayout","headerProps","footerProps","mainProps","headerMetadata","CustomHeaderComponent","CustomFooterComponent","mainContentStyle","fixed","main","AiSearch","placeholder","uidForStorage","searchTerm","setSearchTerm","searchTermOnSubmit","setSearchTermOnSubmit","aiSearchHistory","setAiSearchHistory","resultAreaDisplayed","setResultAreaDisplayed","showLoading","setShowLoading","historyTableRows","setHistoryTableRows","aiResponseDisplayed","setAiResponseDisplayed","activeTab","setActiveTab","askQuestion","isLoading","apiIsLoading","aiResponse","aiError","useAskQuestionMutation","askAi","result","query","loadingStarted","now","searchHistory","currentQuery","loadingEnded","JSON","parse","sessionStorage","getItem","setItem","stringify","errorStatus","topic","conversationId","documents","response","setCurrentSearch","useDeepCompareCallback","removeSearchHistory","rowInfo","tr","td","toLocaleDateString","PiTrash","Tabs","tab","onChange","List","Tab","MdInfo","Panel","pt","TextInput","onKeyUp","e","input","CloseIcon","aria-hidden","Button","PiSparkleFill","aria-live","Loader","Title","order","remarkPlugins","remarkGfm","node","rest","ol","ul","li","my","document","metadata","source","Table","highlightOnHover","thead","th","tbody","AISearchPage","myGlob","dir","filter","files","fs","readdirSync","file","search","console","log","FilesystemContent","rootPath","get","filepath","readFileSync","path","err","getAll","Promise","all","_err","ContentDatabase","config","store","GEN3_FRONTEND_CONFIGURATION_ROOT","ContentSource","instance","contentDatabase","getInstance","getContentDatabase","getNavPageLayoutPropsFromConfig","navigationConfigJSON","GEN3_COMMONS_NAME","bannerConfigJSON","loadedHeaderMetadata","warn","AISearchPageGetServerSideProps","TextDescription","Spoiler","control","maxHeight","showLabel","DownArrowIcon","hideLabel","UpArrowIcon","AnalysisCard","image","hasDemo","demoHref","btnText","Stack","align","justify","NextImage","radius","NavLink","AnalysisCenter","tools","showFilterAndSort","cards","setCards","access","handleCardsFilter","filterType","selected","c","handleCardsSearch","keyword","Select","comboboxProps","transitionProps","transition","duration","timingFunction","currentTarget","cardType","AnalysisPanel","CoreToolCard","appId","app","Grid","inner","Col","h","PlayIcon","AnalysisCardCollapsible","descriptionVisible","setDescriptionVisible","useCountHook","noDataTooltip","hideCounts","cohortCounts","caseCounts","inactive","ref","descRef","descHeight","useElementSize","Card","data-testid","aria-disabled","demoMode","variant","ArrowDropDownIcon","aria-expanded","style","isSuccess","AnalysisCenterWithSections","sections","rootClassNamesDefaults","mergedGlobalClassnames","activeAnalysisCard","setActiveAnalysisCard","sectionPanels","useMemo","section_idx","sectionClassnames","gap","tool","idx","core","AnaylsisCardCore","CardContainer","shadow","Group","wrap","MessageText","fw","MessageCard","ThemeIcon","ErrorCard","IconAlertTriangle","MessagePage","AnalysisPage","Center","AnalysisPageGetServerSideProps","analysisConfig","TableIcons","IconArrowsSort","Unsorted","IconSortAscending","SortAsc","IconSortDescending","SortDsc","IconDotsVertical","ColumnMenu","CrosswalkTable","mapping","tableMessage","showSubmittedIdInTable","cols","accessorKey","external","columnDef","table","useMantineReactTable","manualSorting","manualPagination","paginateExpandedRows","rowCount","enableTopToolbar","icons","enableStickyHeader","showProgressBars","showAlertBanner","columnVisibility","layoutMode","mantineTableHeadCellProps","textAlign","padding","fontWeight","fontSize","textTransform","mantineTableProps","renderEmptyRowsFallback","MantineReactTable","MIN_ROWS","buildCSVData","includeSourceId","results","to","from","downloadData","csvData","encodeURI","createElement","download","body","appendChild","click","removeChild","CrosswalkPanel","idEntryPlaceholderText","setQuery","sourceIds","setSourceIds","clipboard","useClipboard","timeout","setTableMessage","getMapping","useLazyGetCrosswalkDataQuery","clear","ids","toPaths","dataPath","onSubmit","updateIdQuery","values","Textarea","minRows","wrapper","styles","copied","copy","CrosswalkPage","CrosswalkPageGetServerSideProps","initialConfig","regex","processedConfig","entry","errorMessage","categoryFilter","dictionary","charAt","category","toLowerCase","categoryReduce","categories","d","getPropertyCount","n","properties","curr","snakeCaseToLabel","snakeCase","words","toUpperCase","snakeSplit","snake","SearchPathToPropertyIdString","PropertyIdStringToSearchPath","toNodeCategory","excludeSystemProperties","systemProperties","getDictionaryWithExcludeSystemProperties","ret","nodeID","removeUnusedFieldsFromDictionaryObject","SelectedStyle","ViewSelector","view","setView","ResultList","matches","term","expanded","selectItem","truncate","Highlight","highlight","MAX_UNEXPANDED_ITEMS","ResultCard","setExpanded","MAX_SEARCH_HISTORY","KEY_FOR_SEARCH_HISTORY","ACCORDION_TRANSITION_DURATION","DictionaryContext","showGraph","showDownloads","historyStorageId","maxHistoryItems","setPropertyDetails","propertyDetails","visibleCategories","useDictionaryContext","context","DictionaryProvider","processedDictionary","filtered","displayedCategories","flatMap","array","anyOf","rootCategory","Provider","getSearchResults","searchResults","r","sort","b","TableSearch","dictionarySearchResults","setDictionarySearchResults","dictionaryTableRows","setDictionaryTableRows","dictionarySearchHistory","setDictionarySearchHistory","removeDictionarySearchHistory","useLocalStorage","defaultValue","autoSuggest","suggestions","clearSearch","clearSuggestions","useMiniSearch","fields","idField","storeFields","searchOptions","processTerm","MiniSearch","getDefault","combineWith","searchHistoryArray","entries","datetime","newSearchHistory","fromEntries","suggestedData","suggestion","renderSuggestedItem","option","indexOf","Autocomplete","renderOption","SearchIcon","onOptionSubmit","getIcon","iconName","replace","CategoryHeader","h3","Avatar","CategoryAccordionLabel","PropertiesTable","subCategory","selectedProperty","appendRef","rowSelection","setRowSelection","Cell","cell","row","itemId","original","property_id","el","getValue","spacing","center","itemWrapper","DiscIcon","tableData","k","oneOf","enum","enablePagination","enableBottomToolbar","enableRowSelection","getRowId","originalRow","mantineTableBodyRowProps","borderLeftWidth","borderLeftColor","mantineTableHeadRowProps","CategoryPanel","selectedId","scrollToSelection","categoryInfo","setValue","selectedItems","itemRefs","useRef","scrollToItem","elm","timer","setTimeout","clearTimeout","Accordion","chevronPosition","transitionDuration","chevron","transform","Control","DownloadIcon","prevProps","nextProps","ReactECharts","settings","loading","theme","events","chartRoot","setChartRoot","chartRef","rect","useResizeObserver","chart","init","getInstanceByDom","setOption","hideLoading","eventName","off","on","resize","getSubgroupLinks","nameToNode","sourceId","subgroupLinks","subgroup","sgLink","concat","target_type","exists","createNodesAndEdges","createAll","nodesToHide","nodes","startsWith","count","counts_search","db","hideDb","edges","list","newLinks","sgLinks","res","links_search","findRoot","couldBeRoot","edge","sourceName","emptyDb","rootNode","find","getTreeHierarchyHelper","name2EdgesIn","hierarchy","descendants","Set","add","set","getTreeHierarchy","Map","nodesBreadthFirst","bfOrder","treeLevel2Names","name2Level","targetName","processedNodes","queue","name2ActualLvl","head","isAncestor","has","placeNodesOnGraph","nodesById","currentX","currentY","xSpacing","ySpacing","positions","longestName","longest","nameLength","y","linksForGraph","getNodesById","formatDataForGraph","nodeTree","graphData","graphLinks","GraphView","zoomLevel","setZoomLevel","dataAndLinks","chartDefinition","trigger","triggerOn","toolbox","show","left","top","orient","itemSize","iconStyle","borderWidth","opacity","emphasis","feature","restore","myZoomIn","onclick","series","zoom","myZoomOut","roam","nodeScaleRatio","verticalAlign","symbol","symbolSize","symbolOffset","focus","edgeSymbol","edgeSymbolSize","lineStyle","curveness","cap","graphroam","thisApi","_api","thisOptions","getOption","seriesGraph","seriesGraphZoom","Dictionary","setSelectedId","scrollIntoView","targetRef","scrollableRef","useScrollIntoView","offset","scrollTo","useCallback","itemRef","categoryPanelTable","keepMounted","DictionaryWithContext","isUninitialized","useGetDictionaryQuery","setDictionary","DictionaryPage","DictionaryPageGetServerSideProps","dictionaryConfig","getDataLibraryItem","dataLibrary","listId","dataId","fileId","datasetOrCohort","isCohortItem","members","isFileItem","getSelectionPaths","selections","paths","listMembers","memberId","member","objectIds","objectId","isSelected","getSelectedItemsFromDataLibrary","selectedPaths","uniqueItems","getUniqueItemKey","selectionToManifest","dataLibrarySelections","exportAllFields","object_id","file_name","file_size","Number","dataset_id","extractDatasetIds","metadataIds","DataLibrarySelectionContext","dataLibrarySelectionReducer","action","payload","selection","_unused","restState","_unused2","restList","DataLibrarySelectionProvider","dispatch","useReducer","gatheredItems","setGatheredItems","updateSelections","updateDataLibrarySelection","updateListMemberSelections","updateDataLibraryListMemberSelection","clearSelections","clearDataLibrarySelection","removeList","removeDataLibrarySelection","removeListMember","removeDataLibraryMemberSelection","gatherSelectedItems","useDataLibrarySelection","getNumberOfDataSetItemsSelected","getNumberOfSelectedItemsInList","isListInSelection","SearchAndActions","createList","gatherData","enableCreateNewList","enableDownloadManifest","retrieveDisabled","ActionIcon","hidden","PlusIcon","HTTPUserFriendlyErrorMessages","SelectedItemsTableHeader","numberOfItems","numberOfWarnings","SelectedItemsTable","validatedItems","handleRowSelectionChange","updater","prevSelection","Function","enableHiding","maxSize","valid","messages","lineClamp","tableRows","hasInvalidRows","errorMessages","enableRowActions","enableColumnResizing","enableGrouping","enableStickyFooter","onRowSelectionChange","initialState","density","grouping","columnPinning","right","mantineDetailPanelProps","boxShadow","isArrayField","isNumeric","isNaN","evaluateItemRule","operator","fieldValue","evaluateGroupRule","total","getActionById","doesItemFailRule","itemRules","doesGroupFailRule","groupRules","PRESIGNED_URL_TEMPLATE_VARIABLE","isSendExistingPFBToURLParameters","targetURLTemplate","sendExistingPFBToURL","validatedSelections","onDone","onError","onAbort","signal","notifications","withCloseButton","autoClose","guid","presignedURL","fetchFencePresignedURL","signedURL","encodeURIComponent","targetURL","open","HTTPError","MANIFEST_FILENAME","XL_BREAKPOINT","exportToManifest","manifest","blob","Blob","FileSaver","saveAs","ProvidersErrorPanel","providers","provider","base_url","removeKeys","keysToRemove","firstKey","nestedKeys","nestedObj","unset","assembleMetadata","selectedResources","metadataRoot","clonedObj","cloneDeep","exportMetadataToWorkspace","fileManifest","verifyExternalLogins","getFederatedLoginStatus","providersError","providersToAuthenticate","missingProviders","modals","queryMultipleMDSRecords","useAggMDS","metadataObjects","metadataObj","filteredMetadata","fetchJSONDataFromURL","GEN3_MANIFEST_API","omitKeys","toRemove","exportDataListToWorkspace","manifestItem","registeredDataLibraryActions","NullAction","done","registerAction","actionName","findAction","registerDefaultDataLibraryActions","ModalHeader","bindAction","actionFunction","SelectedItemsModal","setActionFunction","actionConfig","setActionConfig","isRunning","setIsRunning","destinations","arg","setSelectionAction","actionId","parameters","validatedLibrarySelections","selectedActionItems","_","hasOwn","groupFailsRule","validItems","itemFailsRule","itemAndGroupTestMessages","actionButtonDisabled","Modal","closeOnEscape","centered","withinPortal","overlayProps","buttonLabel","getObjectIds","dataset","queries","selectAllDatasetMembers","datasetIds","datasetContents","getDatasetMembers","dataSetOrCohort","selectAllListItems","EmptyList","InformIcon","formatDate","datestr","timestamp","date","parts","Intl","DateTimeFormat","month","day","year","hour","minute","second","hour12","timeZone","formatToParts","time","DatasetAccordionControl","listName","updatedTime","createdTime","updateHandler","deleteListHandler","selectListHandler","selectedState","handleUpdateName","useMantineTheme","Checkbox","checked","stopPropagation","indeterminate","onKeyDown","getHotkeyHandler","CloseButton","display","colors","accent","tt","primary","commonTableSettings","enableColumnFilters","enableColumnActions","enableColumnOrdering","enableFacetedValues","enableColumnPinning","enableSelectAll","enableExpandAll","displayColumnDefOptions","AdditionalDataTableTable","FilesTable","sel","OverflowTooltippedLabel","showTooltip","setShowTooltip","arrowOffset","clientWidth","scrollWidth","QueryRepresentationLabel","QueryExpressionsExpandedContext","QueryExpressionContext","displayOnly","cohortId","cohortName","shouldShowSummary","useClearCohortFilters","useCoreDispatch","clearCohortFilters","useRemoveFilter","removeCohortFilter","useUpdateFilters","updateCohortFilter","useSetCohortFilters","filters","setCohortFilter","useGetFilters","RemoveButton","pl","pr","ClearIcon","QueryRepresentationText","tw","QueryFieldLabel","QueryItemContainer","QueryContainer","isRangeOperation","isNestedFilter","IncludeExcludeQueryElement","operands","queryExpressionsExpanded","setQueryExpressionsExpanded","currentCohortId","fieldNameToTitle","operandsArray","showSummaryView","getSummaryLabel","entityName","fieldToUpdate","LeftArrow","RightArrow","Badge","newOperands","o","buildNestedFilterForOperation","ComparisonElement","handleKeepMember","keep","operand","ExistsElement","ClosedRangeQueryElement","lower","upper","op","QueryElement","handleRemoveFilter","CohortFilterToComponent","handleIncludes","f","handleExcludes","handleEquals","handleNotEquals","handleLessThan","handleLessThanOrEquals","handleGreaterThan","handleGreaterThanOrEquals","handleExists","handleMissing","handleExcludeIfAny","handleIntersection","handleUnion","_f","handleNestedFilter","newOp","convertFilterToComponent","handler","handleOperation","getCombinedClassesExpandCollapseQuery","allQueryExpressionsCollapsed","baseClasses","dynamicClasses","disabledClasses","enabledHoverClasses","getCombinedClassesForRowCollapse","filtersSectionCollapsed","JSONObjectDownloadButton","getData","filename","isDownloading","setIsDownloading","saveToJSONFile","url","URL","createObjectURL","revokeObjectURL","UploadJSONButton","handleFileChange","setFile","processingFile","setProcessingFile","FileButton","contents","accept","UnsavedIcon","CohortSelector","showSelectedCohorts","coreDispatch","cohorts","selectAvailableCohorts","selectCurrentCohortId","selectCohortFilters","currentCohortModified","selectCurrentCohortModified","currentCohortSaved","selectCurrentCohortSaved","cohortStatusMessage","isSavedUnchanged","setCohort","jsonForm","setCohortIndexFilters","handleCohortChange","setCurrentCohortId","cohortList","modifiedDatetime","saved","modified","searchable","clearable","rightSectionWidth","pointerEvents","QueryExpressionContainer","MAX_HEIGHT_QE_SECTION","MIN_HEIGHT_QE_SECTION","reducer","q","omit","QueryExpressionSection","showImportExport","showTitle","expandedState","setExpandedState","setFiltersSectionCollapsed","filtersRef","QESectionHeight","setQESectionHeight","scrollHeight","clearAllFilters","noFilters","overflowY","LabeledText","QueryDetails","schemaVersion","extractIndexFromDataLibraryCohort","isFilterSet","DataSetContentsTable","numFiles","numItems","isAddDataSource","additionalData","isCohort","filteredValues","defaultColumn","minSize","mantineSelectCheckboxProps","selectedCount","isIndeterminate","renderRowActions","RemoveIcon","margin","renderDetailPanel","rowData","AdditionalDataTable","DatalistAccordionItem","dataList","updateListInDataLibrary","deleteListFromDataLibrary","isUpdating","setSelectedState","numberOfItemsInList","getNumberOfItemsInDatalist","updateList","update","tableRowData","dataItem","isAdditionalDataItem","numberOfSelectedItemsInList","removeItemFromList","_removedKey","newObject","handleSelectList","selectAllDatasets","pos","updated_time","created_time","DataLibraryLists","storageMode","requiresLogin","dataLibraryError","addListToDataLibrary","useDataLibrary","selectedItemsOpen","close","useDisclosure","opened","onClose","datalist","DataLibrary","DataLibraryPage","DataLibraryPageGetServerSideProps","datalibraryConfig","DataLibraryStoreMode","ApiOnly","jsonPathAccessor","JSONPath","json","getManualSortingAndPagination","defaultFeature","sortingAndPagination","features","dataLoader","getAccessLevelFromNumber","ACCESSIBLE","UNACCESSIBLE","WAITING","NOT_AVAILABLE","OTHER","MIXED","defaultCellRenderer","valueIfNotAvailable","DiscoveryCellRendererFactory","cellRendererCatalog","getCellRenderer","functionName","registerCellRenderer","func","registerCellRendererCatalog","catalog","DiscoveryTableCellRenderer","cellProps","StringRowRenderer","studyPreviewConfig","Box","Gen3DiscoveryStandardRowPreviewRenderers","string","default","defaultRowRenderer","DiscoveryRowRendererFactory","RowRendererCatalog","getRowRenderer","registerRowRenderer","registerRowRendererCatalog","DiscoveryTableRowRenderer","contentType","renderer","registerDiscoveryDefaultStudyPreviewRenderers","DiscoveryContext","discoveryConfig","useDiscoveryContext","DiscoveryProvider","discoveryIndexConfig","StudyContext","setStudyDetails","studyDetails","useStudyContext","StudyProvider","getTagInfo","tagData","tagsConfig","showUnknownTags","categoryConfig","tagCategories","RenderTagsCell","tabIndex","borderColor","defaultStudyFieldRenderer","fieldLabel","StudyFieldRendererFactory","fieldRendererCatalog","getRenderer","registerFieldRenderer","registerFieldRendererCatalog","StudyDetailsRenderer","arg1","arg2","arg3","jsonValueToElement","v","strong","discoveryFieldStyle","blockTextField","labelText","textField","linkField","linkValue","labeledSingleLinkField","parans","labeledNumberField","labeledMultipleLinkField","linksText","linkText","unlabeledMultipleLinkField","fieldData","labeledSingleTextField","stringFieldValue","labeledYearOfBirthRestricted","displayContent","labeledParagraph","labeledMultipleTextField","fieldsText","accessDescriptor","resource","Alert","formatResourceValuesWhenNestedArray","resourceFieldValue","renderDetailTags","_label","fieldConfig","tags","tag","createFieldRendererElement","includeIfNotAvailable","includeLabel","studyFieldRenderer","val","DefaultGen3StudyDetailsFieldsRenderers","yearOfBirthRestricted","textList","linkList","linkWithTitle","block","number","paragraphs","StudyGroup","groupHasContent","StudyGroupPanel","groups","StudyDetailsPanel","studyConfig","headerText","tabs","tabName","DetailsAuthorizationIcon","studyData","dataAccess","accessStyle","enabled","extractFieldData","fieldsMap","DownloadLinksPanel","downloadLinks","downloadLinkFields","titleField","descriptionField","downloadEntries","studyDownloadLinks","GEN3_FENCE_API","StudyTitle","SinglePageStudyDetailsPanel","authorization","elements","fieldsToShow","fieldToShow","groupWidth","groupName","StudyDetails","detailView","simpleDetailsView","permalink","studyId","pagePath","Drawer","Root","Overlay","blur","Content","BackIcon","CopyButton","Body","CompareFn","cmpOp","isSelectable","comparer","extractCellValue","DiscoveryTable","hits","dataRequestStatus","setSorting","setPagination","setSelection","pagination","sorting","manualSortingAndPagination","studyColumns","accessorFn","cellRenderFunction","checkIfRowIsSelectable","tableConfig","selectableRows","selectableRowConfiguration","onPaginationChange","onSortingChange","minimalFieldMapping","uid","studyPreviewField","expandableRows","getAutoWidthDuration","constant","Math","round","getElementWidth","raf","requestAnimationFrame","useCollapsableSidebar","transitionTimingFunction","onTransitionEnd","collapsedWidth","collapsedStyles","overflow","setStylesRaw","setStyles","newStyles","flushSync","mergeStyles","oldStyles","getTransitionStyles","_duration","useDidUpdate","willChange","handleTransitionEnd","propertyName","getCollapseProps","refKey","theirRef","mergeRefs","boxSizing","defaultProps","animateOpacity","CollapsableSidebar","factory","in","others","useProps","shouldReduceMotion","useReducedMotion","reduceMotion","respectReducedMotion","getStyleObject","SearchFilters","filterState","setFilterState","Paper","valueDisplayName","valueDisplayNames","ev","newFilterState","SearchCombination","AdvancedSearch","advSearchFilters","setAdvancedSearchFilters","searchCombination","setSearchCombination","and","operation","SegmentedControl","or","UndoIcon","keyDisplayName","AdvancedSearchPanel","DataLibraryActionButton","forwardRef","active","showIcon","buttonProps","useIsUserLoggedIn","buttonIcon","getDisabledState","numSelected","LOGIN_REQUIRED_MSG","NO_SELECTION_MSG","disabledReason","handleDownloadManifestClick","exportDataFields","dataObjectField","study","studyDataObject","GEN3_DOMAIN","commons_url","DownloadManifestButton","buttonConfig","STATUS_TO_MESSAGE","getNumberOfDatasets","isListDifferent","newItems","newNumberOfDatasets","currentNumberOfDatasets","extractIdToLabel","buildErrorMessage","createTooltipLabel","isLoggedIn","currentListName","AddToDataLibraryComboButton","dataLibraryStoreMode","isItemsLoading","selectItems","setSelectItems","currentList","setCurrentList","setError","setCurrentListName","combobox","useCombobox","onDropdownClose","resetSelectedOption","onDropdownOpen","gotoDataLibrary","setIsLoggedIn","isDisabled","tooltipLabel","numLists","saveToList","listname","isDifferent","then","exactOptionMatch","filteredOptions","options","Combobox","Option","listItems","selectedValue","closeDropdown","openDropdown","updateSelectedOptionIndex","onFocus","onBlur","Chevron","Options","ScrollArea","Autosize","mah","Empty","loaderProps","fullWidth","AddToDataLibrary","buildListItemsGroupedByDataset","extractFileDatasetsInRecords","createActionButton","addToDataLibrary","ActionBar","DefaultItemRenderer","_props","RenderFactoryTypedInstance","defaultRenderer","setDefaultRenderer","rendererExists","registerRenderer","registerRendererCatalog","defaultStatisticRenderer","DefaultRendererCatalog","StatisticRendererFactory","BuildSummaryStatisticPanel","summaries","summary","SummaryStatisticPanel","truncateString","str","substring","processLabel","createLabelFromHistogramData","histogramData","start","end","computeRowSpan","numCols","numLastRow","spans","floor","filterMissing","facetData","chartColors","registerEchartsTheme","defaultTheme","textStyle","fontFamily","registerTheme","processChartData","maxBins","max","groupId","itemStyle","graphic","LinearGradient","decal","dashArrayX","dashArrayY","processAxis","yAxis","xAxis","BarChart","grid","bottom","containLabel","formatter","param","colorSquare","PieChart","showLegendInChart","legend","DonutChart","labelLine","ExtractDataCount","ExtractDataPercent","EPSILON","valueType","dataExtractor","stack","moveOverlap","HorizontalBarChart","chartData","confine","seriesName","axisLine","notMerge","lazyUpdate","BIN_COLORS","VerticalBarChart","hiddenItems","setHiddenItems","toggleLegendItem","prev","next","delete","visibleItems","page","setPage","pageSize","pageCount","ceil","pagedItems","mark","dataView","readOnly","saveAsImage","axisTick","alignWithLabel","dataZoom","xAxisIndex","filterMode","yAxisIndex","barMinWidth","barCategoryGap","striped","withRowBorders","Tbody","isHidden","Tr","Td","Pagination","DefaultChartCatalog","bar","horizontalStacked","fullPie","donut","verticalBarChart","ChartRendererFactory","createChart","chartProps","DEFAULT_COLS","MAX_LEGEND_ROWS","LegendRows","moreThanMaxRows","limitedRows","elIndex","ColorSwatch","LegendOverflow","chartTitle","openedMoreRows","openMoreRows","closeMoreRows","chartType","Charts","charts","showLegends","chartCard","indexNum","dataKeys","numberOfDataItems","withBorder","Section","inheritPadding","py","Thead","Th","dataLabels","CollapsableCharts","setShowLegends","unstyled","panel","showSwitch","Switch","labelPosition","px","ChartTitleBar","divId","jsonData","removeKey","maxValuesToDisplay","selectedEnums","reverse","EnumFacetChart","valueLabel","chart_data","setChartData","cd","chartDivId","random","EnumBarChart","unitLabel","tokens","capitalizedTokens","s","EnumBarChartTooltip","datum","g","foreignObject","base","EnumBarChartVictoryLabel","paddingTop","paddingLeft","paddingRight","textOverflow","whiteSpace","NumberFormat","notation","VictoryChart","domainPadding","VictoryTheme","material","containerComponent","VictoryContainer","VictoryAxis","tickLabelComponent","stroke","ticks","axis","strokeWidth","dependentAxis","axisLabel","tickLabels","tickCount","tickFormat","t","format","crossAxis","VictoryStack","VictoryBar","horizontal","labels","labelComponent","VictoryTooltip","flyoutComponent","alignment","dataComponent","Bar","isSearchKV","isSearchKVArray","filterByAdvSearch","studies","advancedSearchTerms","noFiltersActive","selectedValues","filterName","filterValues","studyFilters","studyFilterValues","getFilterValuesByKey","filtersField","uidField","invalidResults","filterValuesMap","filterValue","hasSearchTerms","searchTerms","keywords","userHasMethodForServiceOnResource","method","service","resourcePath","userAuthMapping","METADATA_ITEM_AUTHORIZATION_FIELD","parseNumericValue","DEFAULT_VALUE","parsedValue","parseInt","convertToNumbers","processSummary","sum","uniq","processAllSummaries","processAuthorizations","hostnameWithSubdomain","location","hostname","authzField","dataAvailabilityField","supportedValues","isMesh","studiesWithAccessibleField","accessible","unaccessible","notAvailable","waiting","authMapping","commonsURL","isAuthorized","mixed","pathsToProcess","flatten","processAdvancedSearchTerms","cur","buildMiniSearchKeywordQuery","terms","extractValue","useGetMDSData","guidType","maxStudies","studyField","mdsData","setMDSData","setIsError","queryIsError","useGetMDSQuery","selectAuthzMappingData","useGetAggMDSData","useGetAggMDSQuery","useSearchMetadata","searchOverFields","searchBar","searchableTextFields","searchedData","setSearchedData","setSuggestions","miniSearchSuggestions","addAll","removeAll","tokenize","_fieldName","extractField","isSearching","clearSearchTerms","dataWithIds","searchQuery","filterKeywordSearchResults","filterAdvancedSearchResults","usePagination","paginatedData","setPaginatedData","updatePaginatedData","useGetAdvancedSearchFilterValues","advancedSearchFilters","advancedSearchFilterValues","setAdvancedSearchFilterValues","useLoadAllData","dataHook","dataGuidType","dataStudyField","summaryStatistics","setSummaryStatistics","aggregations","chartsSection","useLoadAllMDSData","useLoadAllAggMDSData","SearchInputWithSuggestions","searchBarTerms","setSearchBarTerms","searchChanged","useGetData","setTotal","useAggMDSServer","extractIndexArrayFromConfig","dataFetchArgs","indexKeys","extractFilterEmptyFromConfig","hasEnoughData","useGetIndexedMDSData","useGetIndexAggMDSQuery","filterEmpty","useLoadAllIndexedAggMDSData","useAggMetaMDSProxy","setData","displayedData","setLoading","apiUrl","selectedFieldsForSearchIndexing","selectedTags","fetchData","fetch","headers","ok","discoveryDataLoaders","registerDiscoveryDataLoader","getDiscoveryDataLoader","registerDefaultDiscoveryDataLoaders","DiscoveryIndexPanel","indexSelector","dataFetchFunction","pageIndex","parentDivRef","setSelections","setAdvancedSearchTerms","searchParam","selectedRecords","filterSelectedMembers","showAdvancedSearch","toggle","toggleAdvancedSearch","pageTitle","inputSubtitle","aiSearch","exportFromDiscovery","MessagePanel","extractLabel","Discovery","metadataIndex","setMetadataIndex","menuItems","metadataConfig","tabType","buildTooltip","mainMessage","secondaryMessage","DataAccessCellRenderer","accessLevel","numFileObjects","NotAvailableIcon","PendingIcon","LockedIcon","UnlockedIcon","TruncatedStringWithTooltip","limit","maxLength","ttValue","contentString","truncated","TruncatedStringWithTooltipCellRenderer","RenderArrayCell","RenderArrayCellNegativePositive","RenderLinkCell","RenderYearOfBirthRestricted","RenderLinkWithURL","RenderStringCell","RenderNumberCell","isContentEmpty","paramsValueIfNotAvailable","stringValue","RenderParagraphsCell","paragraph","RenderIfArrayHasData","DiscoveryRenderTagsCell","Gen3DiscoveryStandardCellRenderers","NegativePositive","HasData","withURL","registerDiscoveryDefaultCellRenderers","DiscoveryPage","maw","mx","DiscoveryPageGetServerSideProps","CohortBuilder","dynamic","ssr","ExplorerPage","explorerConfig","tabsLayout","sharedFiltersMap","GuppyDataAccessMode","DefaultHeaderMetadata","GetSharedFieldMapping","cohortBuilderConfiguration","sharedFilters","autoCreate","indices","guppyConfig","dataType","GEN3_GUPPY_API","HttpMethod","POST","variables","groupSharedFields","defined","indexToAlias","tabTitle","updatedSharedFiltersMap","indexAlias","DefaultAccessControlConfiguration","dataMode","REGULAR","tierLimit","showAccessLevelControl","ExplorerPageGetServerSideProps","accessControl","ExplorerPageGetServerSidePropsForConfigId","configId","Gen3Button","Gen3ButtonReverse","hashString","hash","charCodeAt","hashCode","ContentType","TextContent","textString","dangerouslySetInnerHTML","__html","textArray","_node","DEFAULT_STYLE","Anchor","LandingPageContent","splitarea","splitareaJsx","area","Html","break","hr","cardsArea","allowedIcons","FaGraduationCap","FaRegQuestionCircle","FaVideo","MdOutlineSearch","MdOutlineBarChart","MdGroup","card","bodyText","quoteArea","author","MdFormatQuote","quote","LandingPage","landingPage","LandingPageGetServerSideProps","navPageLayoutProps","TexturedSidePanel","backgroundImage","LoginProviderMultipleItems","handleLoginSelected","urls","LoginProviderSingleItem","LoginProvidersPanel","useGetLoginProvidersQuery","default_provider","CREDENTIALS_LOGIN_ERROR","FORMAT_ERROR","INVALID_JSON_MESSAGE","readFileContent","callback","reader","FileReader","onload","readAsText","CredentialsLogin","handleLogin","sessionContext","credentials","setCredentials","selectedFile","setSelectedFile","setIsLoading","basePath","handleCredentialsLogin","updateSession","loginEndpoint","parsedCredentials","statusText","getUrlSeparator","appendParameterToUrl","paramName","paramValue","baseUrl","hashFragment","separator","encodedParamName","encodedParamValue","filterRedirect","redirect","redirectPath","GEN3_REDIRECT_URL","cleanPath","LoginPanel","loginConfig","topContent","bottomContent","referer","refererQuery","redirectQuery","handleFenceLoginSelected","loginURL","catch","showNotification","showCredentialsLogin","NODE_ENV","LoginPage","LoginPageGetServerSideProps","NotebookLitePage","iframe","allow","NotebookLitePageGetStaticProps","ProfilePageGetServerSideProps","profileConfig","isButtonOptions","renderButtons","hideModalOnClick","dataTestId","hideModal","BaseModal","openModal","leftButtons","closeOnClickOutside","saveToFile","savingStr","CreateCredentialsAPIKeyModal","copyToClipboard","api_key","key_id","SOON_IN_DAYS","getStatus","expiration","CredentialsTable","csrfToken","isCSRFFetching","useGetCSRFQuery","useGetCredentialsQuery","removeCredential","useRemoveCredentialMutation","apiKey","DeleteIcon","currentTimeInSeconds","exp","jti","paginationDisplayMode","positionToolbarAlertBanner","mantineSearchTextInputProps","Credentials","addNewCredential","isNewLoading","useAddNewCredentialMutation","modal","selectCurrentModal","newCredential","Modals","unwrap","showModal","ResourcesContext","authzMapping","userProfile","servicesAndMethods","services","methods","useResourcesContext","ResourcesProvider","isAuthZLoading","useGetAuthzMappingsQuery","userProfileState","setUserProfileState","authzMappingState","setAuthzMappingState","ProfileContext","useProfileContext","ProfileProvider","ResourcesFilters","selectedFilters","setFilters","checkboxes","serviceColors","resourceTable","mt","convertToRecordMethodToResource","ResourceBadge","serviceBadgeStyle","defaultColor","ResourcesTable","mantineTableBodyCellProps","accessor","ResourcesPanel","openAuthWindow","pollInterval","resolve","reject","navigator","cookieEnabled","innerWidth","innerHeight","dualScreenLeft","screenLeft","screenX","dualScreenTop","screenTop","screenY","win","loginAttempt","closed","clearInterval","interval","origin","setInterval","ExternalProviderCard","idp","refresh_token_expiration","providerUrl","queryChar","finally","ReloadIcon","ExternalProvidersPanel","externalProviders","useGetExternalLoginsQuery","providerCards","Profile","Caret","hasExternalLogins","ProfilePage","QueryPanel","QueryPage","queryProps","graphQLEndpoint","QueryPageGetServerSideProps","RepositoryPageGetServerSideProps","repositoryConfiguration","getAllFieldsFromFilterConfigs","filterTabConfigs","getByPath","segments","Boolean","processBucketData","processRangeData","processDefinedRangeData","ranges","indexPrefix","valueData","resultType","pointerData","buckets","pointer","updateFacetEnum","updateFacetFilters","clearFilters","combineMode","addIntersectionToIncludes","classifyFacets","fieldMapping","facetDefinitionsFromConfig","sharedFieldMapping","fieldKey","dataField","facetName","facetDef","sharedWithIndices","moveValuesToBottom","excludeValues","range","minimum","maximum","shouldShareFilters","selectShouldShareFilters","selectSharedFilters","useUpdateFiltersFlat","useGetFacetFilters","selectIndexedFilterByName","extractRangeValues","fromOp","toOp","isOperatorWithFieldAndArrayOfOperands","extractEnumFilterValue","removeIntersectionFromEnum","isOperationWithField","mapFacetSortToSortType","facetSort","defaultSort","direction","compareKeysAscending","localeCompare","compareKeysDescending","useClearFilters","useFieldNameToTitle","fieldToTitle","DEFAULT_VISIBLE_ITEMS","DEFAULT_MINIMUM","DEFAULT_MAXIMUM","BAD_DATA_MESSAGE","DAYS_IN_YEAR","MantineSegmentedControl","indicator","ExpanderLabel","FacetExpander","remainingValues","isGroupExpanded","onShowChanged","MoreIcon","LessIcon","RANGE_DECIMAL_PRECISION","symmetricalRound","abs","getLowerAgeYears","days","getLowerAgeFromYears","years","buildRangeOperator","rangeData","fromOperation","toOperation","buildDayYearRangeBucket","queryInYears","fromDays","toDays","fromLabel","toFixed","toLabel","queryKey","build10UnitRange","buildRanges","numBuckets","rangeFunction","_x","buildRangeBuckets","RangeBuilder","builder","startRange","percent","bucketEntries","adjustYearsToDaysIfUnitsAreYears","adjustDaysToYearsIfUnitsAreYears","classifyRangeType","precision","buildRangeLabelsAndValues","bucketRanges","showZero","WARNING_DAYS","applyButtonClasses","WarningOrError","hasErrors","isWarning","lowerUnitRange","upperUnitRange","WarningMessageIcon","WarningTriangleIcon","FromTo","useClearFilter","useUpdateFacetFilters","changedCallback","clearValues","rangeDatatype","radioSelected","onSelectRadio","setIsWarning","clearFilter","unitsLabel","form","useForm","initialValues","fromValue","toValue","validate","setValues","reset","fromValueInDays","toValueInDays","handleApply","rangeFilters","Radio","fieldset","setFieldValue","NumberInput","getInputProps","errors","hideControls","sortTypeToAriaDescription","sortTypeAndDirection","FacetSortPanel","sortType","setSort","liveRegionRef","sortingStatus","setSortingStatus","textContent","NameSortIcon","nameIconSize","SortAscIcon","SortDesIcon","Selector","ValueSortIcon","valueIconSize","sortObj","RangeValueSelector","setSelected","rangeLabelsAndValues","itemsToShow","updateFilters","setSortType","handleSelection","rangeKey","RangeInputWithPrefixedRanges","hooks","isFacetView","setHasData","queryOptions","Chart","setIsGroupExpanded","filterKey","isCustom","setIsCustom","selectedRange","setSelectedRange","useGetFacetData","resetToCustom","totalBuckets","bucketsToShow","numberOfBarsToDisplay","min","onShowModeChanged","DaysOrYears","setUnits","hasData","Year","adjMinimum","adjMaximum","Years","PercentRange","NumericRangePanel","FacetIconButton","controlsIconStyle","FacetText","FacetHeader","FacetControlsHeader","showSettings","showSearch","showFlip","showClearSelection","toggleSettings","toggleFlip","toggleSearch","dismissCallback","Label","isFilterExpanded","useFilterExpanded","toggleExpandFilter","useToggleExpandFilter","ExpandLessIcon","ExpandMoreIcon","aria-pressed","FlipIcon","cardScrollMargin","NumericRangeFacet","setIsFacetView","showFilters","cardSelected","setClearValues","scrollMarginTop","age","age_in_years","FacetEnumList","isSettings","showPercent","hideIfEmpty","showSorting","cardRef","searchInputRef","settingRef","enumFilters","setSelectedEnums","totalCount","useTotalCounts","sortedData","setSortedData","updateVisibleValues","handleChange","setFacetChartData","facetChartData","updated","handleCombineModeChange","filteredData","filteredDataObj","cardStyle","calcCardStyle","cardHeight","calcNumberOfBarsToDisplay","totalNumberOfBars","tempFilteredData","selectedEnumNotInData","allData","prevFacetChartData","LockOutlineIcon","EnumFacet","startShowingData","setIsSettings","setIsSearching","createBucket","RangeFacet","minMaxValue","setMinMaxValue","clearRangeFilterFromCohort","updateRangeFilter","RangeSlider","thumbSize","extractToggleValue","ToggleFacet","toggleValue","bValue","wrapperProps","instanceOfIncludesExcludes","isOperandsObject","isFacetEmpty","MultiSelectValueFacet","setSelectedValues","facetTitle","trimFirstFieldNameToTitle","facetValue","facetDataValues","dropdownOpened","dataValues","MultiSelect","marginTop","hidePickedOptions","withScrollArea","extractValues","ExactValueFacet","textValue","setTextValue","textValues","addValue","removeButton","FilterBadge","customTestid","useSelectCurrentCohort","currentCohort","updateFilter","useUpdateFilter","removeFilter","handleOnClick","UploadFacet","facetBtnToolTip","useOpenUploadModal","noData","useFilterItems","useClearUploadFilter","renderBadges","itemField","createFacetCard","facetDefinition","dataFunctions","facetNameFormatter","idPrefix","facetLabel","valueTypeLabel","numeric_range","exact","multiselect","upload","FiltersPanel","calcHeight","getBoundingClientRect","AccessData","Accessibility","ALL","AccessLevelControl","accessibilityValue","DropdownPanel","facetDefinitions","facetDataHooks","allFiltersCollapsed","toggleAllFiltersExpanded","onAccessChange","showAccessLevel","shareFilters","handleSharedFiltersChange","openConfirmModal","confirm","cancel","onConfirm","setShouldShareFilters","withCheckIcon","useScrollToHash","valid_hashes","removeHash","hashElement","getElementById","behavior","history","replaceState","createFacetCards","facets","FacetList","searchString","handleFilterSelected","SimpleGrid","FacetSelectionPanel","handleFilteredWithValuesChanged","setSearchString","setFilteredData","data-autofocus","evt","FacetSelectionModal","usedFacets","useAvailableCustomFacets","onlyFiltersWithValues","setOnlyFiltersWithValues","currentFacets","DefaultTableStyle","tabLabel","StyledFacetTabs","cursor","fontSizes","flexDirection","alignItems","borderTopLeftRadius","borderBottomLeftRadius","tabIcon","marginRight","FacetGroup","availableFields","CustomFacetGroup","customFacetHooks","getFacetLabel","setOpened","customFacetDefinitions","useCustomFacets","addCustomFilter","useAddCustomFilter","removeCustomFilter","useRemoveCustomFilter","FacetSelection","Flex","AddFacetIcon","AddIcon","FacetTabs","tabsConfig","searchParams","URLSearchParams","searchTermParam","tabStyling","firstEntry","firstFacetList","facet","MantineProvider","tabEntry","replaceAll","facetList","DEFAULT_PROPS","DetailsModal","panelProps","styling","yOffset","xOffset","DetailsDrawer","RenderArrayCellSimple","defaultIfEmpty","tempValue","ExplorerTableCellRendererFactory","ArrayCellRenderer","args","isRecordAny","createTableColumns","tableColumns","cellRendererFunc","cellRendererFuncParams","accessorPath","enableSorting","sortable","lockVisible","lockedVisibility","createArrayTableColumns","ExplorerTableSubTable","setHeaderHeight","enableTableFooter","mantinePaperProps","updateHeaderHeight","refs","tableHeadRef","resizeObserver","ResizeObserver","observe","unobserve","ExpandingSubtable","headerHeight","expandedTableColumns","compressedTableColumns","expand","prevState","rec","useId","minHeight","aria-controls","aria-labelledby","ExplorerTableSubtable","SubtableStack","subTables","isQueryResponse","ExtractData","tmp","QueryRowDetailsPanel","accessibility","detailsConfig","useGetRawDataAndTotalCountsQuery","skip","queryData","ColumnOrdering","handleColumnOrderingReset","columnOrder","setColumnOrder","noColumnOrdering","showColumnMenu","setShowColumnMenu","searchValue","setSearchValue","isBackToDefaults","isEqual","getState","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","handleDragEnd","over","oldIndex","newIndex","arrayMove","middlewares","shift","flip","ListIcon","XIcon","DndContext","collisionDetection","closestCenter","onDragEnd","modifiers","restrictToVerticalAxis","restrictToWindowEdges","restrictToParentElement","SortableContext","getAllLeafColumns","strategy","verticalListSortingStrategy","column","humanify","DraggableColumnItem","isNotLast","attributes","listeners","setNodeRef","useSortable","CSS","Transform","DragIcon","getIsVisible","toggleVisibility","code","preventDefault","TitleWrapper","TotalDetailWrapper","detail","TooltipWrapper","searchFocused","baseZIndex","SearchInput","onClear","TooltipContainer","TableHeader","additionalControls","tableTotalDetail","tableTitle","showControls","customBreakpoint","defaultSearchTerm","setSearchFocused","inputRef","timeoutRef","shouldShowControls","useViewportSize","handleInputChange","newSearchTerm","newSearch","handleClearClick","renderSearchAndControls","resetColumnVisibility","resetColumnOrder","breakpoint","detailClass","emptyFn","TableXPositionContext","xPosition","setXPosition","OverLimitNotification","numItemsInCart","CART_LIMIT","UndoButton","AddNotification","currentCart","itemsToAdd","newCart","alreadyInCart","addItemsToCart","removeFromCart","RemoveNotification","itemsToRemove","CartItem","addToCart","cleanNotifications","closeButtonProps","removeItemsFromCart","showCartOverLimitNotification","newCartSize","SingleItemAddToCartButton","selectCart","inCart","selectCartItem","CartIcon","DEFAULT_PAGE_LIMIT_LABEL","DEFAULT_PAGE_LIMIT","processRowActions","itemData","itemFields","ExplorerTable","DetailsComponent","panelContainer","selectedRow","setSelectedRow","setColumnVisibility","DetailsPanel","handleColumnVisibilityChange","newState","handleSearchOrPageChange","detailsIdField","rowIdField","cohortFilters","selectIndexFilters","desc","totalRowCount","limitLabel","pageLimit","_totalCount","rowActions","selectableRowsConfiguration","onColumnVisibilityChange","enableExpanding","localization","rowsPerPage","mantinePaginationProps","rowsPerPageOptions","withEdges","sx","subTable","isJSONValue","getRowModel","useLayoutEffect","showTableHeaderControls","columnSorting","columnHiding","CountsValue","autoContrast","DownloadNotification","showErrorMessage","useGuppyActionButton","Modal403","NoAccessModal","Modal400","GeneralErrorModal","customErrorMessage","hideNotification","actionArgs","setIsActive","onCompleted","setActive","controllerRef","setBusy","isBusy","handleError","showDownloadNotification","abort","controller","AbortController","FiDownload","ActionButton","activeText","inactiveText","customStyle","CohortActionButton","handleDownload","aElement","setAttribute","downloadToFileAction","downloadFromGuppyToBlob","DEFAULT_FILE_FIELDS","processManifest","resourceIdField","manifestFields","hasAllFields","downloadToManifestAction","referenceIdFieldInDataIndex","referenceIdFieldInResourceIndex","resourceIndexType","fileFields","dataFormat","manifestFilename","cohortFilterParams","resultManifest","downloadJSONDataFromGuppy","resultErr","refIDList","refIdsFilter","manifest_ids","data_format","bytes","TextEncoder","encode","processFilesForManifest","md5sum","mapDataToMappingDefinition","processFilesForDataLibrary","manifestData","missing","dataFileItem","manifestEntry","createDatasets","String","entryExists","REQUIRED_FIELDS","addCohortDataFilesToDataLibraryAsDataset","onComplete","cohort","selectCurrentCohortFilters","coreStore","cohortIndex","datasetIdField","fileIdField","libraryDataItemMapping","EmptyFilterSet","fileInformationParameters","cohortDatafiles","datasets","exportCohortToWorkspace","manifestFieldMapping","metadataFields","fileQueryParameters","metadataQueryParameters","cohortMetaData","registeredButtonActions","NullButtonAction","_params","registerButtonAction","buttonName","actionItem","findButtonAction","registerDefaultButtonActions","GuppyDropdownMenuItem","CohortDropdownActionButton","disableTargetWidth","dropdownElements","customPosition","fullHeight","customDataTestId","buttonAriaLabel","isActive","menuLabelText","toErrorMessage","normalizeJsonPath","trimmed","extractDataSelectionFromCohort","kind","raw","extractDataSelectionFromCohortQuery","CohortDataLibraryListButton","selectedDatasets","setSelectedDatasets","extractDataFunction","createDownloadMenuButton","dropdownItems","buttonAction","actionTitle","TargetButtonChildren","DownloadsPanel","dropdowns","loginForDownload","isUserLoggedIn","dropdownsToRender","dropdown","funcArgs","useCohortFacetFilters","toggleCohortBuilderCategoryFilter","useFilterExpandedState","selectCohortFilterExpanded","useCohortFilterCombineState","selectCohortFilterCombineMode","useSetCohortFilterCombineState","setCohortFilterCombineMode","QueryExpression","currentCohortName","selectCurrentCohortName","CohortManagerPanel","rightPanel","customActions","showDefaultActions","rename","create","duplicate","isEditing","setIsEditing","editingLabel","setEditingLabel","allCohorts","selectAllCohorts","selectCurrentCohort","startEditing","cancelEditing","saveEdit","updateCohortName","handleCreateNew","createNewCohort","setAsCurrent","handleDuplicate","duplicateCohort","selectData","onSelectCohort","_value","onDelete","confirmProps","removeCohort","shouldShowMessage","autoFocus","flex","CopyIcon","CohortManager","calculateStickyHeaderHeight","globalHeader","querySelector","contextBar","buildCohortBuilderFilters","tabsConfiguration","buildConfigFacetDefinitions","fieldsConfig","TabbedCohortBuilder","fieldsAreFlat","cohortBuilderFilters","routerTab","prevRouterTab","usePrevious","setAccessLevel","aggsData","isAggsQueryFetching","isAggsQueryError","useGetAggsQuery","queryId","isCountSuccess","useGetCountsQuery","useContinuousFacet","useCustomRangeQuery","isNested","asTextHistogram","rangeBaseName","setFacetDefinitions","scroll","configFacetDefs","facetDefs","getEnumFacetData","isIntersection","intersectionFilters","getRangeFacetData","EnumHookInstances","partial","useGetCombineMode","useSetCombineMode","RangeHookInstances","ContinuousHookInstances","useGetFacetValuesQuery","buildFileStatsdQuery","fileSizeField","cohortItemIdField","fileItemIdField","fileStatsQuery","customQueryStrForField","useTotalFileSizeQuery","repositoryFilters","repositoryIndex","cohortIndexPrefix","repositoryIndexPrefix","totals","setTotals","totalFileSize","totalCaseCount","totalFileCount","useGeneralGQLQuery","convertFilterSetToGqlFilter","countsRoot","histogram","Stats","PersonIcon","SaveIcon","filesize","FileFacetPanel","selectAllCohortFiltersCollapsed","toggleCohortBuilderAllFilters","isFacetsQuerySuccess","isFacetsQueryFetching","isFacetsQueryError","useUpdateCombineMode","RepositoryPanel","fileStatsConfiguration","useMediaQuery","tableXPosition","setTableXPosition","defaultDropdowns","defaultButtons","fileSizeSliceData","isFileSizeFetching","Repository","RepositoryPage","buildQuery","projectQuery","ProjectTable","detailQuery","useGetProjectsDetailsQuery","projectDetailsQuery","details","SubmissionsTable","useGetSubmissionsQuery","transactionList","fileSizeTotal","doc","doc_size","job_id","submitter","project_id","created_datetime","fileSize","SubmissionPanel","projectTable","SubmissionPage","submissionConfig","SubmissionPageGetServerSideProps","CountsPanel","getCounts","useLazyGetCountsQuery","TabbedCohortBuilderPage","TabbedCohortBuilderPageGetServerSideProps","Gen3FrontendContrastColors","Gen3FrontEndColors","secondary","utility","ColorAndContrastPalletLine","contrast","ext","ColorTheme","article","em","ColorThemePage","ColorThemePageGetServerSideProps","WorkspaceNoAccessPage","supportEmail","siteProps","contactEmail","WorkspaceConfigDefaults","requirePayModel","launchStepIndicatorConfig","steps","WorkspaceContext","useWorkspaceContext","WorkspaceProvider","mergedConfig","PayModelStatus","getWorkspaceErrorMessage","defaultMessage","isFetchBaseQueryError","showErrorNotification","clean","WorkspaceStatusContext","isFullscreen","startWorkspace","stopWorkspace","toggleFullscreen","workspaceLaunchIsLoading","terminateIsLoading","payModelStatus","INVALID","useWorkspaceStatusContext","WorkspaceStatusProvider","switchScreenMode","fullscreen","useFullscreen","setPayModelStatus","launchTrigger","isWorkspaceLaunchError","workspaceLaunchError","useLaunchWorkspaceMutation","terminateWorkspace","isTerminateError","workspaceTerminateError","useTerminateWorkspaceMutation","payModels","isPayModelLoading","isPayModelError","useGetWorkspacePayModelsQuery","GETTING","VALID","isPayModelAboveLimit","currentPayModel","request_status","OVER_LIMIT","NOT_REQUIRED","NOT_SELECTED","currentWorkspaceStatus","selectActiveWorkspaceStatus","setRequestedWorkspaceStatus","RequestedWorkspaceStatus","Unset","setActiveWorkspaceStatus","Launch","setActiveWorkspace","requestedStatus","requestedStatusTimestamp","getCurrentTimestamp","Terminate","LaunchDisabledMessage","COMPUTE_PROPS_LABEL_STYLE","NotebookCard","info","selectWorkspaceStatusFromService","selectRequestedWorkspaceStatus","workspaceId","selectActiveWorkspaceId","launchDisabled","ta","cpuLimit","memoryLimit","Transition","mounted","WorkspacePanel","useGetWorkspaceOptionsQuery","workspaceStatusData","useGetWorkspaceStatusQuery","workspaceStatus","exitDuration","gutter","rem","WorkspaceNotebook","GEN3_WORKSPACE_API","ExternalLoginsStatus","providersNeedToken","PaymentNumberToString","undefinedValue","isNoPayModelError","originalStatus","NoPayModel","PaymentPanel","setWorkspacePayModel","useSetCurrentPayModelMutation","selectedPayModel","setSelectedPayModel","setPayModel","usersPayModels","workspaceName","hardLimit","totalUsage","allPayModels","payModel","bmh_workspace_id","workspace_type","ActiveIcon","InactiveIcon","PayModelSelectItem","menuItem","isTerminated","PodConditionIndex","PodScheduled","Initialized","PodReadyToStartContainers","ContainersReady","ProxyConnected","Ready","retrievePodConditionStatus","conditionType","conditions","matchingCondition","condition","PodStatus","Unknown","calculateCurrentStep","currentStep","True","calculateLaunchSteps","containerStates","workspaceType","workspaceLaunchStatus","step","cs","subSteps","ready","podStatus","PodConditionType","False","WorkspaceStepper","stepsConfig","Stepper","allowNextStepsSelect","Step","WorkspaceLaunchProgress","StatusAndControls","isWorkspaceRunningOrStopping","StopIcon","FullscreenIcon","FULLSCREEN_STYLE","WorkspaceNotebookPanelWithControls","externalLoginsNotUsed","Workspace","workspaceToRunId","getWorkspaceId","workspace","WorkspacePage","workspaceProps","WorkspacePageGetServerSideProps","_context","WorkspaceNoAccessPageServerSideProps"],"mappings":"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"}