@gen3/frontend 0.10.91 → 0.10.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +390 -86
- package/dist/cjs/index.js.map +1 -1
- package/dist/dts/components/CountButton/CountButton.d.ts +19 -0
- package/dist/dts/components/CountButton/CountButton.d.ts.map +1 -0
- package/dist/dts/components/CountButton/CountButton.js +18 -0
- package/dist/dts/components/CountButton/CountButton.js.map +1 -0
- package/dist/dts/components/Login/LoginPanel.d.ts.map +1 -1
- package/dist/dts/components/Login/LoginPanel.js +2 -1
- package/dist/dts/components/Login/LoginPanel.js.map +1 -1
- package/dist/dts/components/Login/test/utils.test.d.ts +2 -0
- package/dist/dts/components/Login/test/utils.test.d.ts.map +1 -0
- package/dist/dts/components/Login/test/utils.test.js +39 -0
- package/dist/dts/components/Login/test/utils.test.js.map +1 -0
- package/dist/dts/components/Login/utils.d.ts +15 -0
- package/dist/dts/components/Login/utils.d.ts.map +1 -0
- package/dist/dts/components/Login/utils.js +31 -0
- package/dist/dts/components/Login/utils.js.map +1 -0
- package/dist/dts/features/CohortBuilder/cohortUtils.d.ts +4 -0
- package/dist/dts/features/CohortBuilder/cohortUtils.d.ts.map +1 -0
- package/dist/dts/features/CohortBuilder/cohortUtils.js +23 -0
- package/dist/dts/features/CohortBuilder/cohortUtils.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/ActionButtonGroup.d.ts +5 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/ActionButtonGroup.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/ActionButtonGroup.js +13 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/ActionButtonGroup.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/SaveActionButton.d.ts +5 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/SaveActionButton.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/SaveActionButton.js +28 -0
- package/dist/dts/features/CohortDiscovery/ActionButtons/SaveActionButton.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManager.d.ts +6 -0
- package/dist/dts/features/CohortDiscovery/CohortManager.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManager.js +55 -0
- package/dist/dts/features/CohortDiscovery/CohortManager.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManagerSlice.d.ts +135 -0
- package/dist/dts/features/CohortDiscovery/CohortManagerSlice.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortManagerSlice.js +40 -0
- package/dist/dts/features/CohortDiscovery/CohortManagerSlice.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortSelectors.d.ts +23 -0
- package/dist/dts/features/CohortDiscovery/CohortSelectors.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortSelectors.js +35 -0
- package/dist/dts/features/CohortDiscovery/CohortSelectors.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortSlice.d.ts +91 -0
- package/dist/dts/features/CohortDiscovery/CohortSlice.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/CohortSlice.js +93 -0
- package/dist/dts/features/CohortDiscovery/CohortSlice.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/FacetDefinitionsSlice.d.ts +15 -0
- package/dist/dts/features/CohortDiscovery/FacetDefinitionsSlice.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/FacetDefinitionsSlice.js +38 -0
- package/dist/dts/features/CohortDiscovery/FacetDefinitionsSlice.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/RequestManagerSlice.d.ts +162 -0
- package/dist/dts/features/CohortDiscovery/RequestManagerSlice.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/RequestManagerSlice.js +53 -0
- package/dist/dts/features/CohortDiscovery/RequestManagerSlice.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/DataAccessRequestForm.d.ts +10 -0
- package/dist/dts/features/CohortDiscovery/Requests/DataAccessRequestForm.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/DataAccessRequestForm.js +85 -0
- package/dist/dts/features/CohortDiscovery/Requests/DataAccessRequestForm.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.d.ts +3 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.js +8 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsPanel.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsTable.d.ts +3 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsTable.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsTable.js +67 -0
- package/dist/dts/features/CohortDiscovery/Requests/RequestsTable.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsPanel.d.ts +3 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsPanel.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsPanel.js +9 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsPanel.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsTable.d.ts +7 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsTable.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsTable.js +101 -0
- package/dist/dts/features/CohortDiscovery/SaveCohorts/SavedCohortsTable.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.d.ts +3 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.js +86 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/api/utils.d.ts +1 -0
- package/dist/dts/features/CohortDiscovery/api/utils.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/api/utils.js +2 -0
- package/dist/dts/features/CohortDiscovery/api/utils.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/appApi.d.ts +10 -1
- package/dist/dts/features/CohortDiscovery/appApi.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/appApi.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/appApiRTKQ.d.ts +1 -0
- package/dist/dts/features/CohortDiscovery/appApiRTKQ.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/appApiRTKQ.js +101 -0
- package/dist/dts/features/CohortDiscovery/appApiRTKQ.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/queryApi.d.ts +35 -0
- package/dist/dts/features/CohortDiscovery/queryApi.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/queryApi.js +497 -0
- package/dist/dts/features/CohortDiscovery/queryApi.js.map +1 -0
- package/dist/dts/features/CohortDiscovery/tableSettings.d.ts +3 -0
- package/dist/dts/features/CohortDiscovery/tableSettings.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/tableSettings.js +68 -0
- package/dist/dts/features/CohortDiscovery/tableSettings.js.map +1 -0
- package/dist/dts/features/DataLibrary/DataLibraryLists.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/DataLibraryLists.js +19 -15
- package/dist/dts/features/DataLibrary/DataLibraryLists.js.map +1 -1
- package/dist/dts/features/DataLibrary/DatalistAccordionItem.d.ts +3 -3
- package/dist/dts/features/DataLibrary/DatalistAccordionItem.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/DatalistAccordionItem.js +1 -3
- package/dist/dts/features/DataLibrary/DatalistAccordionItem.js.map +1 -1
- package/dist/dts/features/DataLibrary/DatasetAccordionControl.d.ts +3 -2
- package/dist/dts/features/DataLibrary/DatasetAccordionControl.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/DatasetAccordionControl.js.map +1 -1
- package/dist/dts/features/DataLibrary/SearchAndActions.d.ts +2 -2
- package/dist/dts/features/DataLibrary/SearchAndActions.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/SearchAndActions.js.map +1 -1
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportMetadataToWorkspace.d.ts +3 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportMetadataToWorkspace.d.ts.map +1 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportMetadataToWorkspace.js +178 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/exportMetadataToWorkspace.js.map +1 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/providerErrorNotification.d.ts +9 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/providerErrorNotification.d.ts.map +1 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/providerErrorNotification.js +7 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportDatasetsToWorkspace/providerErrorNotification.js.map +1 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportToManifest.d.ts +3 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportToManifest.d.ts.map +1 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportToManifest.js +80 -0
- package/dist/dts/features/DataLibrary/selection/actions/exportToManifest.js.map +1 -0
- package/dist/dts/features/DataLibrary/selection/exportActions.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/selection/exportActions.js +14 -9
- package/dist/dts/features/DataLibrary/selection/exportActions.js.map +1 -1
- package/dist/dts/features/DataLibrary/selection/registeredActions.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/selection/registeredActions.js +8 -0
- package/dist/dts/features/DataLibrary/selection/registeredActions.js.map +1 -1
- package/dist/dts/features/DataLibrary/selection/selectedItemActions.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/selection/selectedItemActions.js +4 -0
- package/dist/dts/features/DataLibrary/selection/selectedItemActions.js.map +1 -1
- package/dist/dts/features/DataLibrary/selection/tests/utils.unit.test.js +71 -1
- package/dist/dts/features/DataLibrary/selection/tests/utils.unit.test.js.map +1 -1
- package/dist/dts/features/DataLibrary/selection/types.d.ts +2 -2
- package/dist/dts/features/DataLibrary/selection/types.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/selection/utils.d.ts +4 -2
- package/dist/dts/features/DataLibrary/selection/utils.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/selection/utils.js +18 -0
- package/dist/dts/features/DataLibrary/selection/utils.js.map +1 -1
- package/dist/dts/features/DataLibrary/types.d.ts +7 -2
- package/dist/dts/features/DataLibrary/types.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/types.js +18 -0
- package/dist/dts/features/DataLibrary/types.js.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/ActionBar.d.ts.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/ActionBar.js +6 -3
- package/dist/dts/features/Discovery/ActionBar/ActionBar.js.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/AddToDataLibrary.d.ts +1 -1
- package/dist/dts/features/Discovery/ActionBar/AddToDataLibrary.d.ts.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/AddToDataLibrary.js +81 -55
- package/dist/dts/features/Discovery/ActionBar/AddToDataLibrary.js.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/AddToDataLibrary.stories.d.ts +1 -1
- package/dist/dts/features/Discovery/ActionBar/DownloadManifestButton.js +1 -1
- package/dist/dts/features/Discovery/ActionBar/DownloadManifestButton.js.map +1 -1
- package/dist/dts/features/Discovery/ActionBar/types.d.ts +3 -1
- package/dist/dts/features/Discovery/ActionBar/types.d.ts.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.d.ts.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.js +2 -2
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.js.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryTable.d.ts.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryTable.js.map +1 -1
- package/dist/dts/features/Discovery/TableRenderers/DataAccessCellRenderers.d.ts.map +1 -1
- package/dist/dts/features/Discovery/TableRenderers/DataAccessCellRenderers.js +13 -3
- package/dist/dts/features/Discovery/TableRenderers/DataAccessCellRenderers.js.map +1 -1
- package/dist/dts/features/Discovery/types.d.ts +2 -1
- package/dist/dts/features/Discovery/types.d.ts.map +1 -1
- package/dist/dts/features/Discovery/types.js.map +1 -1
- package/dist/dts/features/Navigation/index.d.ts +2 -2
- package/dist/dts/features/Navigation/index.d.ts.map +1 -1
- package/dist/dts/features/Navigation/index.js +2 -2
- package/dist/dts/features/Navigation/index.js.map +1 -1
- package/dist/dts/features/Workspace/PaymentPanel/PaymentPanel.d.ts.map +1 -1
- package/dist/dts/features/Workspace/PaymentPanel/PaymentPanel.js +3 -1
- package/dist/dts/features/Workspace/PaymentPanel/PaymentPanel.js.map +1 -1
- package/dist/dts/lib/session/session.d.ts.map +1 -1
- package/dist/dts/lib/session/session.js +3 -1
- package/dist/dts/lib/session/session.js.map +1 -1
- package/dist/dts/pages/DataLibrary/data.js +2 -2
- package/dist/dts/pages/DataLibrary/data.js.map +1 -1
- package/dist/dts/pages/Discovery/data.d.ts.map +1 -1
- package/dist/dts/pages/Discovery/data.js +21 -11
- package/dist/dts/pages/Discovery/data.js.map +1 -1
- package/dist/dts/types/constants.d.ts +2 -0
- package/dist/dts/types/constants.d.ts.map +1 -0
- package/dist/dts/types/constants.js +2 -0
- package/dist/dts/types/constants.js.map +1 -0
- package/dist/dts/utils/sizes.d.ts +4 -0
- package/dist/dts/utils/sizes.d.ts.map +1 -0
- package/dist/dts/utils/sizes.js +25 -0
- package/dist/dts/utils/sizes.js.map +1 -0
- package/dist/esm/index.js +392 -89
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default, { createContext, useState, useMemo, useEffect, useCallback, useContext, useRef, createElement, forwardRef, useReducer } from 'react';
|
|
4
|
-
import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, isOperationWithField, extractEnumFilterValue, selectIndexedFilterByName, selectShouldShareFilters, selectSharedFilters, updateCohortFilter, isOperatorWithFieldAndArrayOfOperands, removeCohortFilter, setCohortFilter, clearCohortFilters, handleOperation, selectCohortFilters, setCohortIndexFilters, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortId, selectCurrentCohortName, useGeneralGQLQuery, selectIndexFilters, useGetRawDataAndTotalCountsQuery, Accessibility, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, trimFirstFieldNameToTitle, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, setShouldShareFilters, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_COMMONS_NAME, createAppStore, createGen3AppWithOwnStore, createAppApiForRTKQ, getGen3AppId, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery } from '@gen3/core';
|
|
4
|
+
import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, DataLibraryStoreMode, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, isOperationWithField, extractEnumFilterValue, selectIndexedFilterByName, selectShouldShareFilters, selectSharedFilters, updateCohortFilter, isOperatorWithFieldAndArrayOfOperands, removeCohortFilter, setCohortFilter, clearCohortFilters, handleOperation, selectCohortFilters, setCohortIndexFilters, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortId, selectCurrentCohortName, useGeneralGQLQuery, selectIndexFilters, useGetRawDataAndTotalCountsQuery, Accessibility, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, trimFirstFieldNameToTitle, selectAllCohortFiltersCollapsed, toggleCohortBuilderAllFilters, setShouldShareFilters, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_COMMONS_NAME, createAppStore, createGen3AppWithOwnStore, createAppApiForRTKQ, getGen3AppId, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, getFederatedLoginStatus, queryMultipleMDSRecords, GEN3_MANIFEST_API, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery } from '@gen3/core';
|
|
5
5
|
import { LoadingOverlay, Card, Group, Avatar, Text, Checkbox, Stack, Tooltip, UnstyledButton, ThemeIcon, Center, Box, Select, Button, Divider, Textarea, FileButton, Anchor, Modal, Grid, Table, ColorSwatch, useMantineTheme, Loader, Paper, Menu, Badge, Alert, Tabs, Accordion, Drawer, CopyButton, factory, useProps, getStyleObject, SegmentedControl, useCombobox, Combobox, TextInput, ScrollArea, Switch, Autocomplete, Title, ActionIcon, NumberInput, RangeSlider, MultiSelect, Transition, rem, Stepper, Image as Image$1, NavLink, Flex, Highlight, List, createTheme, Pagination, FileInput, CloseButton } from '@mantine/core';
|
|
6
6
|
import { useDeepCompareEffect, useDeepCompareMemo, useDeepCompareCallback } from 'use-deep-compare';
|
|
7
7
|
import { useRouter } from 'next/router';
|
|
@@ -12,7 +12,7 @@ import 'swr';
|
|
|
12
12
|
import { errors, importSPKI, jwtVerify, decodeJwt } from 'jose';
|
|
13
13
|
import { notifications, showNotification, cleanNotifications, Notifications } from '@mantine/notifications';
|
|
14
14
|
import tinycolor from 'tinycolor2';
|
|
15
|
-
import { capitalize as capitalize$1, toString, isArray, get, omit, partial } from 'lodash';
|
|
15
|
+
import { capitalize as capitalize$1, toString, isArray, get, omit, partial, cloneDeep, unset } from 'lodash';
|
|
16
16
|
import { twMerge } from 'tailwind-merge';
|
|
17
17
|
import { BsExclamationTriangle, BsArrowsFullscreen } from 'react-icons/bs';
|
|
18
18
|
import Markdown from 'react-markdown';
|
|
@@ -878,7 +878,7 @@ const UPDATE_SESSION_LIMIT = MinutesToMilliseconds(5);
|
|
|
878
878
|
await getUserDetails();
|
|
879
879
|
};
|
|
880
880
|
const sessionInfo = useManageSession(userStatus);
|
|
881
|
-
// for now we are using the user status to determine if the user is logged in
|
|
881
|
+
// for now, we are using the user status to determine if the user is logged in
|
|
882
882
|
const updateSession = useCallback(()=>updateSessionWithUserStatus(), [
|
|
883
883
|
updateSessionWithUserStatus
|
|
884
884
|
]);
|
|
@@ -904,9 +904,11 @@ const UPDATE_SESSION_LIMIT = MinutesToMilliseconds(5);
|
|
|
904
904
|
};
|
|
905
905
|
window.addEventListener('mousedown', updateUserActivity);
|
|
906
906
|
window.addEventListener('keypress', updateUserActivity);
|
|
907
|
+
window.addEventListener('updateUserActivity', updateUserActivity);
|
|
907
908
|
return ()=>{
|
|
908
909
|
window.removeEventListener('mousedown', updateUserActivity);
|
|
909
910
|
window.removeEventListener('keypress', updateUserActivity);
|
|
911
|
+
window.removeEventListener('updateUserActivity', updateUserActivity);
|
|
910
912
|
};
|
|
911
913
|
}, []); // only call on mount/dismount
|
|
912
914
|
useInterval(()=>{
|
|
@@ -1467,6 +1469,35 @@ function hashCode(str) {
|
|
|
1467
1469
|
}
|
|
1468
1470
|
};
|
|
1469
1471
|
|
|
1472
|
+
/**
|
|
1473
|
+
* Determines the correct separator to append additional parameters to a URL
|
|
1474
|
+
* @param {string} url - The URL to examine
|
|
1475
|
+
* @returns {string} - Either '?' or '&' depending on whether the URL already has parameters
|
|
1476
|
+
*/ const getUrlSeparator = (url)=>{
|
|
1477
|
+
// Check if the URL already contains a question mark
|
|
1478
|
+
return url.includes('?') ? '&' : '?';
|
|
1479
|
+
};
|
|
1480
|
+
/**
|
|
1481
|
+
* Adds a parameter to a URL using the correct separator
|
|
1482
|
+
* @param {string} url - The URL to add the parameter to
|
|
1483
|
+
* @param {string} paramName - The parameter name
|
|
1484
|
+
* @param {string} paramValue - The parameter value
|
|
1485
|
+
* @returns {string} - The URL with the added parameter
|
|
1486
|
+
*/ const appendParameterToUrl = (url, paramName, paramValue)=>{
|
|
1487
|
+
if (!url || false) {
|
|
1488
|
+
return url;
|
|
1489
|
+
}
|
|
1490
|
+
// Extract hash fragment if present
|
|
1491
|
+
const [baseUrl, hash] = url.split('#');
|
|
1492
|
+
const hashFragment = hash ? `#${hash}` : '';
|
|
1493
|
+
// Determine separator and append parameter
|
|
1494
|
+
const separator = getUrlSeparator(baseUrl);
|
|
1495
|
+
const encodedParamName = encodeURIComponent(paramName);
|
|
1496
|
+
const encodedParamValue = encodeURIComponent(paramValue);
|
|
1497
|
+
// Construct the final URL with parameter and hash fragment
|
|
1498
|
+
return `${baseUrl}${separator}${encodedParamName}=${encodedParamValue}${hashFragment}`;
|
|
1499
|
+
};
|
|
1500
|
+
|
|
1470
1501
|
const filterRedirect = (redirect)=>{
|
|
1471
1502
|
let redirectPath = '';
|
|
1472
1503
|
if (Array.isArray(redirect)) {
|
|
@@ -1481,7 +1512,7 @@ const LoginPanel = (loginConfig)=>{
|
|
|
1481
1512
|
const router = useRouter();
|
|
1482
1513
|
const { query: { referer } } = router;
|
|
1483
1514
|
const handleFenceLoginSelected = useCallback(async (loginURL)=>{
|
|
1484
|
-
router.push(`${loginURL
|
|
1515
|
+
router.push(`${appendParameterToUrl(loginURL, 'redirect', filterRedirect(referer))}`).catch((e)=>{
|
|
1485
1516
|
showNotification({
|
|
1486
1517
|
title: 'Login Error',
|
|
1487
1518
|
message: `error logging in ${e.message}`
|
|
@@ -3037,6 +3068,22 @@ const Gen3Link = ({ className, href, linkType, text, showExternalIcon = false })
|
|
|
3037
3068
|
});
|
|
3038
3069
|
};
|
|
3039
3070
|
|
|
3071
|
+
/**
|
|
3072
|
+
* Type guard for ValidFileItemWithParentDatasetNameAndID
|
|
3073
|
+
* Checks if the object has the properties that define this interface
|
|
3074
|
+
*/ const isValidFileItemWithParentDatasetNameAndID = (item)=>{
|
|
3075
|
+
if (!item || typeof item !== 'object') {
|
|
3076
|
+
return false;
|
|
3077
|
+
}
|
|
3078
|
+
const fileItem = item;
|
|
3079
|
+
// Check required properties from FileItemWithParentDatasetNameAndID
|
|
3080
|
+
if (typeof fileItem.datasetName !== 'string' || typeof fileItem.datasetId !== 'string') {
|
|
3081
|
+
return false;
|
|
3082
|
+
}
|
|
3083
|
+
// We can assume it's a FileItem if it has the required properties from parent interfaces
|
|
3084
|
+
// Additional checks could be added if FileItem has required properties
|
|
3085
|
+
return true;
|
|
3086
|
+
};
|
|
3040
3087
|
const IconSize = {
|
|
3041
3088
|
xs: 14,
|
|
3042
3089
|
sm: 16,
|
|
@@ -3981,11 +4028,23 @@ const buildTooltip = (mainMessage, secondaryMessage)=>{
|
|
|
3981
4028
|
});
|
|
3982
4029
|
};
|
|
3983
4030
|
const DataAccessCellRenderer = ({ cell, row }, params)=>{
|
|
3984
|
-
const
|
|
4031
|
+
const { discoveryConfig: config } = useDiscoveryContext();
|
|
4032
|
+
const authzField = config.minimalFieldMapping?.authzField || 'authz';
|
|
3985
4033
|
let value = cell?.getValue();
|
|
3986
4034
|
const authorization = row?.original?.[authzField] || undefined;
|
|
4035
|
+
const dataObjectField = config.features.exportFromDiscovery?.exportDataFields.dataObjectField;
|
|
4036
|
+
row?.original?.num_fileobject || 0;
|
|
3987
4037
|
if (isArray(value)) value = value[0];
|
|
3988
4038
|
const accessLevel = getAccessLevelFromNumber(value);
|
|
4039
|
+
const numFileObjects = dataObjectField && row?.original?.[dataObjectField] ? row?.original?.[dataObjectField] : 0;
|
|
4040
|
+
if (numFileObjects === 0) {
|
|
4041
|
+
return /*#__PURE__*/ jsx(Tooltip, {
|
|
4042
|
+
label: buildTooltip('No data attached to this study'),
|
|
4043
|
+
children: /*#__PURE__*/ jsx(LuCircleSlash, {
|
|
4044
|
+
className: "text-utility-error"
|
|
4045
|
+
})
|
|
4046
|
+
});
|
|
4047
|
+
}
|
|
3989
4048
|
if (!accessLevel) {
|
|
3990
4049
|
return /*#__PURE__*/ jsx(Tooltip, {
|
|
3991
4050
|
label: buildTooltip('Unable to determine access level'),
|
|
@@ -5525,6 +5584,7 @@ const DataLibraryActionButton = /*#__PURE__*/ forwardRef(({ label = undefined, i
|
|
|
5525
5584
|
DataLibraryActionButton.displayName = 'DataLibraryActionButton';
|
|
5526
5585
|
|
|
5527
5586
|
const MANIFEST_FILENAME = 'manifest.json';
|
|
5587
|
+
|
|
5528
5588
|
/**
|
|
5529
5589
|
* Determines the disabled state and the reason for disabling based on authentication status,
|
|
5530
5590
|
* selection count, and requirement for login.
|
|
@@ -5617,14 +5677,23 @@ const extractIdToLabel = (data)=>!data ? {} : Object.keys(data).reduce((acc, id)
|
|
|
5617
5677
|
acc[id] = data[id].name;
|
|
5618
5678
|
return acc;
|
|
5619
5679
|
}, {});
|
|
5680
|
+
const buildErrorMessage = (error)=>{
|
|
5681
|
+
if (error.status === 401) {
|
|
5682
|
+
return 'Please log in to save to data library';
|
|
5683
|
+
}
|
|
5684
|
+
if (error.status === 404) {
|
|
5685
|
+
return 'Cannot query data library. Please try again later.';
|
|
5686
|
+
}
|
|
5687
|
+
return 'Error saving to data library. Please try again later.';
|
|
5688
|
+
};
|
|
5620
5689
|
const createTooltipLabel = (error, isLoggedIn, requiresLogin, numSelected, currentListName)=>{
|
|
5621
|
-
if (error) return 'Error saving to data library. Please try again later';
|
|
5622
5690
|
if (!isLoggedIn && requiresLogin) return 'Please log in to save to data library';
|
|
5623
5691
|
if (numSelected === 0) return 'Please select at least one study to save to data library';
|
|
5624
5692
|
if (!currentListName) return 'Please select or create a list';
|
|
5693
|
+
if (error) return buildErrorMessage(error);
|
|
5625
5694
|
return 'Add selections to list';
|
|
5626
5695
|
};
|
|
5627
|
-
const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, classNames = {} })=>{
|
|
5696
|
+
const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly, classNames = {} })=>{
|
|
5628
5697
|
const [selectItems, setSelectItems] = useState({});
|
|
5629
5698
|
const [currentList, setCurrentList] = useState(null);
|
|
5630
5699
|
const [error, setError] = useState(null);
|
|
@@ -5640,23 +5709,26 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5640
5709
|
root: 'w-1/2'
|
|
5641
5710
|
};
|
|
5642
5711
|
const mergedClassnames = mergeDefaultTailwindClassnames(classNamesDefaults, classNames);
|
|
5643
|
-
const { dataLibrary, updateListInDataLibrary, addListToDataLibrary, isLoading, error: dataLibraryError } = useDataLibrary(
|
|
5712
|
+
const { dataLibrary, updateListInDataLibrary, addListToDataLibrary, isLoading, isUpdating, error: dataLibraryError } = useDataLibrary({
|
|
5713
|
+
storageMode: dataLibraryStoreMode
|
|
5714
|
+
});
|
|
5644
5715
|
const saveToList = (listname, listId = undefined)=>{
|
|
5645
5716
|
if (selectedResources.length === 0) return;
|
|
5646
5717
|
const items = buildListItemsGroupedByDataset(extractFileDatasetsInRecords(selectedResources, exportDataFields));
|
|
5718
|
+
if (Object.keys(items).length === 0) {
|
|
5719
|
+
notifications.show({
|
|
5720
|
+
id: 'update-datalibrary-no-items-to-update-notification',
|
|
5721
|
+
position: 'top-center',
|
|
5722
|
+
withCloseButton: true,
|
|
5723
|
+
autoClose: 5000,
|
|
5724
|
+
title: 'Save to list',
|
|
5725
|
+
message: `No data objects selected to save to list ${listname}.`,
|
|
5726
|
+
loading: false
|
|
5727
|
+
});
|
|
5728
|
+
return;
|
|
5729
|
+
}
|
|
5647
5730
|
if (listId) {
|
|
5648
|
-
|
|
5649
|
-
notifications.show({
|
|
5650
|
-
id: 'update-datalibrary-no-items-to-update-notification',
|
|
5651
|
-
position: 'top-center',
|
|
5652
|
-
withCloseButton: true,
|
|
5653
|
-
autoClose: 5000,
|
|
5654
|
-
title: 'Save to list',
|
|
5655
|
-
message: `No data objects selected to save to list ${listname}.`,
|
|
5656
|
-
loading: false
|
|
5657
|
-
});
|
|
5658
|
-
return;
|
|
5659
|
-
}
|
|
5731
|
+
// updating list
|
|
5660
5732
|
updateListInDataLibrary({
|
|
5661
5733
|
id: listId,
|
|
5662
5734
|
name: listname,
|
|
@@ -5664,26 +5736,46 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5664
5736
|
...dataLibrary[listId].items,
|
|
5665
5737
|
...items
|
|
5666
5738
|
}
|
|
5667
|
-
})
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5739
|
+
}).then((results)=>{
|
|
5740
|
+
if (results.isError) notifications.show({
|
|
5741
|
+
id: 'update-datalibrary-list-error-notification',
|
|
5742
|
+
position: 'top-center',
|
|
5743
|
+
withCloseButton: true,
|
|
5744
|
+
autoClose: 5000,
|
|
5745
|
+
title: 'Save to list',
|
|
5746
|
+
message: `Error saving to list ${listname}.`,
|
|
5747
|
+
loading: isUpdating !== null
|
|
5748
|
+
});
|
|
5749
|
+
else notifications.show({
|
|
5750
|
+
id: 'update-datalibrary-list-notification',
|
|
5751
|
+
position: 'top-center',
|
|
5752
|
+
withCloseButton: true,
|
|
5753
|
+
autoClose: 5000,
|
|
5754
|
+
title: 'Save to list',
|
|
5755
|
+
message: `${Object.values(items).length} datasets saved to list ${listname}.`,
|
|
5756
|
+
loading: isUpdating !== null
|
|
5757
|
+
});
|
|
5676
5758
|
});
|
|
5677
5759
|
} else {
|
|
5678
|
-
addListToDataLibrary(items, listname)
|
|
5679
|
-
|
|
5680
|
-
|
|
5681
|
-
|
|
5682
|
-
|
|
5683
|
-
|
|
5684
|
-
|
|
5685
|
-
|
|
5686
|
-
|
|
5760
|
+
addListToDataLibrary(items, listname).then((results)=>{
|
|
5761
|
+
if (results.isError) notifications.show({
|
|
5762
|
+
id: 'update-datalibrary-list-error-notification',
|
|
5763
|
+
position: 'top-center',
|
|
5764
|
+
withCloseButton: true,
|
|
5765
|
+
autoClose: 5000,
|
|
5766
|
+
title: 'Save to list',
|
|
5767
|
+
message: `Error saving to list ${listname}.`,
|
|
5768
|
+
loading: isUpdating !== null
|
|
5769
|
+
});
|
|
5770
|
+
else notifications.show({
|
|
5771
|
+
id: 'update-datalibrary-list-notification',
|
|
5772
|
+
position: 'top-center',
|
|
5773
|
+
withCloseButton: true,
|
|
5774
|
+
autoClose: 5000,
|
|
5775
|
+
title: 'Save to list',
|
|
5776
|
+
message: `${Object.values(items).length} datasets saved to list ${listname}.`,
|
|
5777
|
+
loading: isLoading
|
|
5778
|
+
});
|
|
5687
5779
|
});
|
|
5688
5780
|
}
|
|
5689
5781
|
};
|
|
@@ -5706,21 +5798,11 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5706
5798
|
options
|
|
5707
5799
|
]);
|
|
5708
5800
|
useDeepCompareEffect(()=>{
|
|
5709
|
-
if (dataLibrary
|
|
5801
|
+
if (dataLibrary) if (!dataLibraryError) {
|
|
5710
5802
|
const listItems = extractIdToLabel(dataLibrary);
|
|
5711
5803
|
setSelectItems(listItems);
|
|
5712
|
-
}
|
|
5713
|
-
|
|
5714
|
-
if (dataLibraryError) {
|
|
5715
|
-
notifications.show({
|
|
5716
|
-
id: 'update-datalibrary-error-notification',
|
|
5717
|
-
position: 'top-center',
|
|
5718
|
-
withCloseButton: true,
|
|
5719
|
-
autoClose: 5000,
|
|
5720
|
-
title: 'Error',
|
|
5721
|
-
message: `Error saving to data library. Please try again later.`,
|
|
5722
|
-
loading: false
|
|
5723
|
-
});
|
|
5804
|
+
} else {
|
|
5805
|
+
setError(dataLibraryError);
|
|
5724
5806
|
}
|
|
5725
5807
|
}, [
|
|
5726
5808
|
dataLibrary,
|
|
@@ -5792,7 +5874,7 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5792
5874
|
});
|
|
5793
5875
|
};
|
|
5794
5876
|
|
|
5795
|
-
const createActionButton = ({ buttonConfig, selectedResources, exportDataFields })=>{
|
|
5877
|
+
const createActionButton = ({ buttonConfig, selectedResources, exportDataFields, verifyExternalLogins, dataLibraryStoreMode })=>{
|
|
5796
5878
|
return ({
|
|
5797
5879
|
manifest: /*#__PURE__*/ jsx(DownloadManifestButton, {
|
|
5798
5880
|
buttonConfig: buttonConfig,
|
|
@@ -5802,18 +5884,22 @@ const createActionButton = ({ buttonConfig, selectedResources, exportDataFields
|
|
|
5802
5884
|
addToDataLibrary: /*#__PURE__*/ jsx(AddToDataLibrary, {
|
|
5803
5885
|
buttonConfig: buttonConfig,
|
|
5804
5886
|
selectedResources: selectedResources,
|
|
5805
|
-
exportDataFields: exportDataFields
|
|
5887
|
+
exportDataFields: exportDataFields,
|
|
5888
|
+
verifyExternalLogins: verifyExternalLogins,
|
|
5889
|
+
dataLibraryStoreMode: dataLibraryStoreMode
|
|
5806
5890
|
}, buttonConfig.type)
|
|
5807
5891
|
})[buttonConfig.type];
|
|
5808
5892
|
};
|
|
5809
|
-
const ActionBar = ({ buttons, selectedResources, exportDataFields, verifyExternalLogins })=>{
|
|
5893
|
+
const ActionBar = ({ buttons, selectedResources, exportDataFields, verifyExternalLogins, dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly })=>{
|
|
5810
5894
|
return /*#__PURE__*/ jsx("div", {
|
|
5811
5895
|
className: "flex items-center justify-end py-1 px-2 mb-1 w-full gap-x-1.5 ",
|
|
5812
5896
|
children: buttons?.map((button)=>{
|
|
5813
5897
|
return createActionButton({
|
|
5814
5898
|
buttonConfig: button,
|
|
5815
5899
|
selectedResources,
|
|
5816
|
-
exportDataFields
|
|
5900
|
+
exportDataFields,
|
|
5901
|
+
verifyExternalLogins,
|
|
5902
|
+
dataLibraryStoreMode
|
|
5817
5903
|
});
|
|
5818
5904
|
})
|
|
5819
5905
|
});
|
|
@@ -7203,7 +7289,6 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
7203
7289
|
*
|
|
7204
7290
|
* @return {JSX.Element} A fully featured discovery interface including search functionality, a table, charts, filters, and more.
|
|
7205
7291
|
*/ const DiscoveryIndexPanel = ({ discoveryConfig, indexSelector })=>{
|
|
7206
|
-
console.log(discoveryConfig);
|
|
7207
7292
|
const dataHook = useMemo(()=>getDiscoveryDataLoader(discoveryConfig?.features?.dataLoader?.dataFetchFunction) ?? useLoadAllMDSData, [
|
|
7208
7293
|
discoveryConfig?.features?.dataLoader?.dataFetchFunction
|
|
7209
7294
|
]);
|
|
@@ -7325,7 +7410,8 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
7325
7410
|
buttons: discoveryConfig.features.exportFromDiscovery.buttons,
|
|
7326
7411
|
exportDataFields: discoveryConfig.features.exportFromDiscovery.exportDataFields,
|
|
7327
7412
|
selectedResources: selectedRecords,
|
|
7328
|
-
verifyExternalLogins: discoveryConfig.features.exportFromDiscovery.verifyExternalLogins
|
|
7413
|
+
verifyExternalLogins: discoveryConfig.features.exportFromDiscovery.verifyExternalLogins,
|
|
7414
|
+
dataLibraryStoreMode: discoveryConfig.features.exportFromDiscovery.dataLibraryStoreMode
|
|
7329
7415
|
}) : null
|
|
7330
7416
|
]
|
|
7331
7417
|
}),
|
|
@@ -11992,7 +12078,7 @@ const PaymentPanel = ()=>{
|
|
|
11992
12078
|
setSelectedPayModel(data.currentPayModel.bmh_workspace_id ?? data.currentPayModel.workspace_type);
|
|
11993
12079
|
return {
|
|
11994
12080
|
usersPayModels,
|
|
11995
|
-
workspaceName: data.currentPayModel.bmh_workspace_id.length > 0 ? data.currentPayModel.bmh_workspace_id
|
|
12081
|
+
workspaceName: data.currentPayModel.bmh_workspace_id.length > 0 ? data.currentPayModel.bmh_workspace_id : data.currentPayModel.workspace_type,
|
|
11996
12082
|
totalUsage: data.currentPayModel['total-usage'],
|
|
11997
12083
|
hardLimit: data.currentPayModel['hard-limit']
|
|
11998
12084
|
};
|
|
@@ -12001,6 +12087,7 @@ const PaymentPanel = ()=>{
|
|
|
12001
12087
|
]);
|
|
12002
12088
|
const PayModelSelectItem = ({ option })=>{
|
|
12003
12089
|
const menuItem = usersPayModels[Number(option.value)];
|
|
12090
|
+
if (!menuItem) return null;
|
|
12004
12091
|
return /*#__PURE__*/ jsx("div", {
|
|
12005
12092
|
children: /*#__PURE__*/ jsxs(Group, {
|
|
12006
12093
|
wrap: "nowrap",
|
|
@@ -15775,6 +15862,11 @@ const DiscoveryPage = ({ headerProps, footerProps, discoveryConfig })=>{
|
|
|
15775
15862
|
const DiscoveryPageGetServerSideProps = async ()=>{
|
|
15776
15863
|
try {
|
|
15777
15864
|
const discoveryConfig = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/discovery.json`);
|
|
15865
|
+
// need data library config for export from discovery using the DataLibrary
|
|
15866
|
+
const datalibraryConfig = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/dataLibrary.json`);
|
|
15867
|
+
discoveryConfig.metadataConfig?.forEach((index)=>{
|
|
15868
|
+
if (index.features.exportFromDiscovery) index.features.exportFromDiscovery.dataLibraryStoreMode = datalibraryConfig?.storageMode ?? DataLibraryStoreMode.ApiOnly;
|
|
15869
|
+
});
|
|
15778
15870
|
return {
|
|
15779
15871
|
props: {
|
|
15780
15872
|
...await getNavPageLayoutPropsFromConfig(),
|
|
@@ -15786,7 +15878,7 @@ const DiscoveryPageGetServerSideProps = async ()=>{
|
|
|
15786
15878
|
return {
|
|
15787
15879
|
props: {
|
|
15788
15880
|
...await getNavPageLayoutPropsFromConfig(),
|
|
15789
|
-
discoveryConfig:
|
|
15881
|
+
discoveryConfig: []
|
|
15790
15882
|
}
|
|
15791
15883
|
};
|
|
15792
15884
|
}
|
|
@@ -19114,6 +19206,32 @@ const getUniqueItemKey = (item)=>{
|
|
|
19114
19206
|
return `file_${item.datasetId}_${item.id}`;
|
|
19115
19207
|
}
|
|
19116
19208
|
};
|
|
19209
|
+
const selectionToManifest = (dataLibrarySelections)=>{
|
|
19210
|
+
return dataLibrarySelections.reduce((acc, item)=>{
|
|
19211
|
+
if (isValidFileItemWithParentDatasetNameAndID(item)) {
|
|
19212
|
+
acc.push({
|
|
19213
|
+
object_id: item.id,
|
|
19214
|
+
...item.name ? {
|
|
19215
|
+
file_name: item.name
|
|
19216
|
+
} : {},
|
|
19217
|
+
...item.size ? {
|
|
19218
|
+
file_size: Number(item.size)
|
|
19219
|
+
} : {},
|
|
19220
|
+
dataset_id: item.datasetId
|
|
19221
|
+
});
|
|
19222
|
+
}
|
|
19223
|
+
return acc;
|
|
19224
|
+
}, []);
|
|
19225
|
+
};
|
|
19226
|
+
const extractDatasetIds = (dataLibrarySelections)=>{
|
|
19227
|
+
const metadataIds = dataLibrarySelections.reduce((acc, item)=>{
|
|
19228
|
+
if (isFileItem(item)) {
|
|
19229
|
+
acc.add(item.datasetId);
|
|
19230
|
+
}
|
|
19231
|
+
return acc;
|
|
19232
|
+
}, new Set());
|
|
19233
|
+
return Array.from(metadataIds);
|
|
19234
|
+
};
|
|
19117
19235
|
|
|
19118
19236
|
// Create the context
|
|
19119
19237
|
const DataLibrarySelectionContext = /*#__PURE__*/ createContext(undefined);
|
|
@@ -19667,6 +19785,11 @@ const evaluateGroupRule = (rule, items)=>{
|
|
|
19667
19785
|
const fieldValue = items.map((item)=>item[rule.field]);
|
|
19668
19786
|
return fieldValue.length === rule.total;
|
|
19669
19787
|
}
|
|
19788
|
+
case 'greater':
|
|
19789
|
+
{
|
|
19790
|
+
const fieldValue = items.map((item)=>item[rule.field]);
|
|
19791
|
+
return fieldValue.length > rule.total;
|
|
19792
|
+
}
|
|
19670
19793
|
}
|
|
19671
19794
|
};
|
|
19672
19795
|
/**
|
|
@@ -19704,7 +19827,7 @@ const isSendExistingPFBToURLParameters = (value)=>{
|
|
|
19704
19827
|
const candidate = value;
|
|
19705
19828
|
return 'targetURLTemplate' in candidate && typeof candidate.targetURLTemplate === 'string';
|
|
19706
19829
|
};
|
|
19707
|
-
const sendExistingPFBToURL = async (validatedSelections, params,
|
|
19830
|
+
const sendExistingPFBToURL = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19708
19831
|
if (!isSendExistingPFBToURLParameters(params)) {
|
|
19709
19832
|
console.error('Invalid parameters for sendPFBToURL action:', params);
|
|
19710
19833
|
return;
|
|
@@ -19738,7 +19861,7 @@ const sendExistingPFBToURL = async (validatedSelections, params, done = ()=>null
|
|
|
19738
19861
|
const targetURL = targetURLTemplate.replace(PRESIGNED_URL_TEMPLATE_VARIABLE, signedURL);
|
|
19739
19862
|
return new Promise(()=>{
|
|
19740
19863
|
if (window) window.open(targetURL, '_blank', 'noopener,noreferrer');
|
|
19741
|
-
if (
|
|
19864
|
+
if (onDone) onDone(targetURL);
|
|
19742
19865
|
});
|
|
19743
19866
|
} catch (error) {
|
|
19744
19867
|
if (error instanceof HTTPError) {
|
|
@@ -19753,10 +19876,175 @@ const sendExistingPFBToURL = async (validatedSelections, params, done = ()=>null
|
|
|
19753
19876
|
loading: false
|
|
19754
19877
|
});
|
|
19755
19878
|
}
|
|
19756
|
-
|
|
19757
|
-
|
|
19758
|
-
|
|
19879
|
+
if (error instanceof Error) {
|
|
19880
|
+
if (error.name == 'AbortError') {
|
|
19881
|
+
onAbort?.();
|
|
19882
|
+
}
|
|
19883
|
+
return new Promise(()=>{
|
|
19884
|
+
onError?.(error);
|
|
19885
|
+
});
|
|
19886
|
+
}
|
|
19887
|
+
}
|
|
19888
|
+
};
|
|
19889
|
+
|
|
19890
|
+
const exportToManifest = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19891
|
+
const manifest = selectionToManifest(validatedSelections); // TODO md5sum? commons_name?
|
|
19892
|
+
try {
|
|
19893
|
+
const blob = new Blob([
|
|
19894
|
+
JSON.stringify(manifest, null, 2)
|
|
19895
|
+
], {
|
|
19896
|
+
type: 'text/json'
|
|
19759
19897
|
});
|
|
19898
|
+
FileSaver.saveAs(blob, MANIFEST_FILENAME);
|
|
19899
|
+
onDone?.();
|
|
19900
|
+
} catch (error) {
|
|
19901
|
+
if (error instanceof Error) {
|
|
19902
|
+
onError?.(error);
|
|
19903
|
+
} else onError?.(new Error('unknown error saving file'));
|
|
19904
|
+
}
|
|
19905
|
+
};
|
|
19906
|
+
|
|
19907
|
+
const ProvidersErrorPanel = ({ message, providers })=>{
|
|
19908
|
+
return /*#__PURE__*/ jsxs(Stack, {
|
|
19909
|
+
children: [
|
|
19910
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19911
|
+
children: message
|
|
19912
|
+
}),
|
|
19913
|
+
/*#__PURE__*/ jsxs(Table, {
|
|
19914
|
+
children: [
|
|
19915
|
+
/*#__PURE__*/ jsx("thead", {
|
|
19916
|
+
children: /*#__PURE__*/ jsxs("tr", {
|
|
19917
|
+
children: [
|
|
19918
|
+
/*#__PURE__*/ jsx("th", {
|
|
19919
|
+
children: "Provider"
|
|
19920
|
+
}),
|
|
19921
|
+
/*#__PURE__*/ jsx("th", {
|
|
19922
|
+
children: "URL"
|
|
19923
|
+
})
|
|
19924
|
+
]
|
|
19925
|
+
})
|
|
19926
|
+
}),
|
|
19927
|
+
/*#__PURE__*/ jsx("tbody", {
|
|
19928
|
+
children: providers.map((provider)=>/*#__PURE__*/ jsxs("tr", {
|
|
19929
|
+
children: [
|
|
19930
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19931
|
+
children: provider.name
|
|
19932
|
+
}),
|
|
19933
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19934
|
+
children: provider.base_url
|
|
19935
|
+
})
|
|
19936
|
+
]
|
|
19937
|
+
}, provider.name))
|
|
19938
|
+
})
|
|
19939
|
+
]
|
|
19940
|
+
})
|
|
19941
|
+
]
|
|
19942
|
+
});
|
|
19943
|
+
};
|
|
19944
|
+
|
|
19945
|
+
const removeKeys = (obj, keysToRemove)=>{
|
|
19946
|
+
keysToRemove.forEach((key)=>{
|
|
19947
|
+
if (key.includes('.')) {
|
|
19948
|
+
const [firstKey, ...nestedKeys] = key.split('.');
|
|
19949
|
+
const nestedObj = get(obj, firstKey);
|
|
19950
|
+
unset(nestedObj, nestedKeys.join('.'));
|
|
19951
|
+
} else {
|
|
19952
|
+
unset(obj, key);
|
|
19953
|
+
}
|
|
19954
|
+
});
|
|
19955
|
+
return obj;
|
|
19956
|
+
};
|
|
19957
|
+
/**
|
|
19958
|
+
* Processes and assembles metadata by cloning objects, removing specified keys, and optionally accessing a defined metadata root.
|
|
19959
|
+
*
|
|
19960
|
+
* @param {Array<string>} keysToRemove - A list of keys to remove from each object in the selected resources after cloning.
|
|
19961
|
+
* @param {Array<Record<string, unknown>>} selectedResources - An array of resource objects to process and format.
|
|
19962
|
+
* @param {string} metadataRoot - The root key that holds the metadata in the objects. If present, this root is used as a starting point.
|
|
19963
|
+
* @returns {Array<Record<string, unknown>>} A new array of processed objects with the specified keys removed and metadata root applied when applicable.
|
|
19964
|
+
*/ const assembleMetadata = (selectedResources, metadataRoot, keysToRemove)=>{
|
|
19965
|
+
return selectedResources.map((obj)=>{
|
|
19966
|
+
const clonedObj = cloneDeep(!obj[metadataRoot] ? obj : obj[metadataRoot]);
|
|
19967
|
+
// if there are keysToRemove, remove them
|
|
19968
|
+
if (keysToRemove) {
|
|
19969
|
+
return removeKeys(clonedObj, keysToRemove);
|
|
19970
|
+
}
|
|
19971
|
+
// Otherwise just return the cloned object
|
|
19972
|
+
return clonedObj;
|
|
19973
|
+
});
|
|
19974
|
+
};
|
|
19975
|
+
const exportMetadataToWorkspace = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19976
|
+
// first need to get file manifest
|
|
19977
|
+
try {
|
|
19978
|
+
const fileManifest = selectionToManifest(validatedSelections);
|
|
19979
|
+
if (params?.verifyExternalLogins) {
|
|
19980
|
+
const results = await getFederatedLoginStatus(fileManifest);
|
|
19981
|
+
const { error: providersError, providersToAuthenticate, missingProviders } = results;
|
|
19982
|
+
if (providersError) {
|
|
19983
|
+
onError?.(providersError);
|
|
19984
|
+
return;
|
|
19985
|
+
}
|
|
19986
|
+
if (providersToAuthenticate && providersToAuthenticate?.length > 0 && missingProviders && missingProviders?.length > 0) {
|
|
19987
|
+
modals.open({
|
|
19988
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
19989
|
+
title: 'Error: Export to Workspace',
|
|
19990
|
+
withCloseButton: true,
|
|
19991
|
+
children: /*#__PURE__*/ jsxs(Stack, {
|
|
19992
|
+
children: [
|
|
19993
|
+
/*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
19994
|
+
message: "The following providers need to be authenticated",
|
|
19995
|
+
providers: providersToAuthenticate
|
|
19996
|
+
}),
|
|
19997
|
+
/*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
19998
|
+
message: "The following providers need to be authenticated",
|
|
19999
|
+
providers: providersToAuthenticate
|
|
20000
|
+
})
|
|
20001
|
+
]
|
|
20002
|
+
})
|
|
20003
|
+
});
|
|
20004
|
+
return;
|
|
20005
|
+
}
|
|
20006
|
+
if (providersToAuthenticate && providersToAuthenticate?.length > 0) {
|
|
20007
|
+
modals.open({
|
|
20008
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
20009
|
+
title: 'Error: Export to Workspace',
|
|
20010
|
+
withCloseButton: true,
|
|
20011
|
+
children: /*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
20012
|
+
message: "The following providers need to be authenticated",
|
|
20013
|
+
providers: providersToAuthenticate
|
|
20014
|
+
})
|
|
20015
|
+
});
|
|
20016
|
+
return;
|
|
20017
|
+
} else {
|
|
20018
|
+
if (missingProviders && missingProviders?.length > 0) {
|
|
20019
|
+
modals.open({
|
|
20020
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
20021
|
+
title: 'Error: Export to Workspace',
|
|
20022
|
+
withCloseButton: true,
|
|
20023
|
+
children: /*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
20024
|
+
message: "The following providers are missing",
|
|
20025
|
+
providers: missingProviders
|
|
20026
|
+
})
|
|
20027
|
+
});
|
|
20028
|
+
return;
|
|
20029
|
+
}
|
|
20030
|
+
}
|
|
20031
|
+
}
|
|
20032
|
+
// next get the metadata from the dataset id
|
|
20033
|
+
const metadataIds = extractDatasetIds(validatedSelections);
|
|
20034
|
+
const metadata = await queryMultipleMDSRecords(metadataIds, params?.useAggMDS, signal);
|
|
20035
|
+
const metadataObjects = Object.values(metadata).map((metadataObj)=>metadataObj);
|
|
20036
|
+
const filteredMetadata = assembleMetadata(metadataObjects, params?.metadataRoot ?? 'gen3_discovery', params?.keysToRemove);
|
|
20037
|
+
// save the metadata
|
|
20038
|
+
await fetchJSONDataFromURL(`${GEN3_MANIFEST_API}/metadata`, true, 'POST', JSON.stringify(filteredMetadata), signal);
|
|
20039
|
+
// save files manifest
|
|
20040
|
+
await fetchJSONDataFromURL(`${GEN3_MANIFEST_API}/`, true, 'POST', JSON.stringify(fileManifest), signal);
|
|
20041
|
+
onDone?.();
|
|
20042
|
+
} catch (error) {
|
|
20043
|
+
if (error instanceof Error) {
|
|
20044
|
+
if (error.name == 'AbortError') {
|
|
20045
|
+
onAbort?.();
|
|
20046
|
+
}
|
|
20047
|
+
} else onError?.(new Error('unknown error'));
|
|
19760
20048
|
}
|
|
19761
20049
|
};
|
|
19762
20050
|
|
|
@@ -19784,6 +20072,12 @@ const registerDefaultDataLibraryActions = ()=>{
|
|
|
19784
20072
|
registerAction('export-pfb-to-url', {
|
|
19785
20073
|
action: sendExistingPFBToURL
|
|
19786
20074
|
});
|
|
20075
|
+
registerAction('export-from-discovery-to-manifest', {
|
|
20076
|
+
action: exportToManifest
|
|
20077
|
+
});
|
|
20078
|
+
registerAction('export-from-discovery-to-workspace', {
|
|
20079
|
+
action: exportMetadataToWorkspace
|
|
20080
|
+
});
|
|
19787
20081
|
};
|
|
19788
20082
|
registerDefaultDataLibraryActions();
|
|
19789
20083
|
|
|
@@ -20693,7 +20987,7 @@ const DataSetContentsTable = ({ listId, data, removeList, size = 'sm' })=>{
|
|
|
20693
20987
|
]);
|
|
20694
20988
|
const { selections, updateSelections, removeListMember, removeList } = useDataLibrarySelection();
|
|
20695
20989
|
const updateList = async (update)=>{
|
|
20696
|
-
await updateListInDataLibrary({
|
|
20990
|
+
return await updateListInDataLibrary({
|
|
20697
20991
|
...{
|
|
20698
20992
|
name: listName,
|
|
20699
20993
|
items: dataList.items
|
|
@@ -20816,8 +21110,10 @@ const DataSetContentsTable = ({ listId, data, removeList, size = 'sm' })=>{
|
|
|
20816
21110
|
}, listName);
|
|
20817
21111
|
};
|
|
20818
21112
|
|
|
20819
|
-
const DataLibraryLists = ({ requiresLogin = true, actions, size })=>{
|
|
20820
|
-
const { dataLibrary, isLoading, isUpdating, error: dataLibraryError, addListToDataLibrary, updateListInDataLibrary, deleteListFromDataLibrary } = useDataLibrary(
|
|
21113
|
+
const DataLibraryLists = ({ storageMode, requiresLogin = true, actions, size })=>{
|
|
21114
|
+
const { dataLibrary, isLoading, isUpdating, error: dataLibraryError, addListToDataLibrary, updateListInDataLibrary, deleteListFromDataLibrary } = useDataLibrary({
|
|
21115
|
+
storageMode
|
|
21116
|
+
});
|
|
20821
21117
|
const { isAuthenticated } = useIsAuthenticated();
|
|
20822
21118
|
const [selectedItemsOpen, { open, close }] = useDisclosure(false);
|
|
20823
21119
|
const { gatherSelectedItems } = useDataLibrarySelection();
|
|
@@ -20825,27 +21121,34 @@ const DataLibraryLists = ({ requiresLogin = true, actions, size })=>{
|
|
|
20825
21121
|
gatherSelectedItems(dataLibrary);
|
|
20826
21122
|
open();
|
|
20827
21123
|
};
|
|
20828
|
-
|
|
20829
|
-
|
|
20830
|
-
|
|
20831
|
-
|
|
20832
|
-
|
|
20833
|
-
|
|
20834
|
-
|
|
20835
|
-
|
|
20836
|
-
|
|
20837
|
-
children: /*#__PURE__*/ jsx(Center, {
|
|
20838
|
-
children: /*#__PURE__*/ jsx(ErrorCard, {
|
|
20839
|
-
message: message
|
|
20840
|
-
})
|
|
20841
|
-
})
|
|
21124
|
+
// Use useEffect to show notifications only when error changes
|
|
21125
|
+
useDeepCompareEffect(()=>{
|
|
21126
|
+
if (dataLibraryError?.isError && dataLibraryError?.status !== 401) {
|
|
21127
|
+
notifications.show({
|
|
21128
|
+
position: 'top-center',
|
|
21129
|
+
color: 'red',
|
|
21130
|
+
title: 'Data Library Error',
|
|
21131
|
+
message: dataLibraryError?.message,
|
|
21132
|
+
autoClose: 2000
|
|
20842
21133
|
});
|
|
20843
|
-
}
|
|
20844
|
-
|
|
20845
|
-
|
|
20846
|
-
|
|
20847
|
-
|
|
20848
|
-
|
|
21134
|
+
}
|
|
21135
|
+
}, [
|
|
21136
|
+
dataLibraryError
|
|
21137
|
+
]);
|
|
21138
|
+
// Handle 401 error with UI rendering
|
|
21139
|
+
if (dataLibraryError?.isError && dataLibraryError?.status === 401) {
|
|
21140
|
+
let message = 'You are not authorized to access the library.';
|
|
21141
|
+
if (requiresLogin) {
|
|
21142
|
+
if (!isAuthenticated) message = 'Data Library requires login. Please log in to continue.';
|
|
21143
|
+
else message = 'You are not authorized to access the library. Please contact your site administrator.';
|
|
21144
|
+
}
|
|
21145
|
+
return /*#__PURE__*/ jsx("div", {
|
|
21146
|
+
className: "flex flex-col w-full ml-2",
|
|
21147
|
+
children: /*#__PURE__*/ jsx(Center, {
|
|
21148
|
+
children: /*#__PURE__*/ jsx(ErrorCard, {
|
|
21149
|
+
message: message
|
|
21150
|
+
})
|
|
21151
|
+
})
|
|
20849
21152
|
});
|
|
20850
21153
|
}
|
|
20851
21154
|
return /*#__PURE__*/ jsxs("div", {
|
|
@@ -20927,7 +21230,7 @@ const DataLibraryPageGetServerSideProps = async ()=>{
|
|
|
20927
21230
|
props: {
|
|
20928
21231
|
...await getNavPageLayoutPropsFromConfig(),
|
|
20929
21232
|
config: {
|
|
20930
|
-
|
|
21233
|
+
storageMode: DataLibraryStoreMode.ApiOnly,
|
|
20931
21234
|
actions: []
|
|
20932
21235
|
}
|
|
20933
21236
|
}
|
|
@@ -21544,5 +21847,5 @@ async function credentialsLogout(req, res) {
|
|
|
21544
21847
|
res.redirect(307, '/');
|
|
21545
21848
|
}
|
|
21546
21849
|
|
|
21547
|
-
export { AISearchPageGetServerSideProps, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, BaseModal, Charts, CohortBuilder, CohortManager, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, EnumFacetChart, ErrorCard, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryPage, QueryPageGetServerSideProps, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SessionExpiredModal, StudyGroup, SubmissionPage, SubmissionPageGetServerSideProps, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, capitalize, computeRowSpan, convertMinutesToMilliseconds, convertSecondsToMilliseconds, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, focusStyles, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isPropertyKey, isTextTransform$1 as isTextTransform, processLabel$1 as processLabel, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeKey$1 as removeKey, resourcePathFromProjectID, sessionLogout, sessionToken, stripTrailingSlash, toDisplayName, truncateString, unixTimeToString, useDiscoveryContext, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
|
|
21850
|
+
export { AISearchPageGetServerSideProps, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, Banner, BaseModal, Charts, CohortBuilder, CohortManager, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, EnumFacetChart, ErrorCard, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryPage, QueryPageGetServerSideProps, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SessionExpiredModal, StudyGroup, SubmissionPage, SubmissionPageGetServerSideProps, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, capitalize, computeRowSpan, convertMinutesToMilliseconds, convertSecondsToMilliseconds, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, focusStyles, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isPropertyKey, isTextTransform$1 as isTextTransform, processLabel$1 as processLabel, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeKey$1 as removeKey, resourcePathFromProjectID, sessionLogout, sessionToken, stripTrailingSlash, toDisplayName, truncateString, unixTimeToString, useDiscoveryContext, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
|
|
21548
21851
|
//# sourceMappingURL=index.js.map
|