@gen3/frontend 0.10.91 → 0.10.92
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 +383 -84
- 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 +82 -0
- package/dist/dts/features/CohortDiscovery/api/analysisApiCohortDiscovery.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 +32 -0
- package/dist/dts/features/CohortDiscovery/queryApi.d.ts.map +1 -0
- package/dist/dts/features/CohortDiscovery/queryApi.js +498 -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/DataLibrary.d.ts.map +1 -1
- package/dist/dts/features/DataLibrary/DataLibrary.js +1 -0
- package/dist/dts/features/DataLibrary/DataLibrary.js.map +1 -1
- 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 +70 -53
- 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/Discovery.d.ts.map +1 -1
- package/dist/dts/features/Discovery/Discovery.js +1 -0
- package/dist/dts/features/Discovery/Discovery.js.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.d.ts.map +1 -1
- package/dist/dts/features/Discovery/DiscoveryIndexPanel.js +3 -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/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/DataLibrary.d.ts.map +1 -1
- package/dist/dts/pages/DataLibrary/DataLibrary.js +1 -0
- package/dist/dts/pages/DataLibrary/DataLibrary.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 +22 -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 +385 -86
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +4 -3
- 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.
|
|
@@ -5624,7 +5684,7 @@ const createTooltipLabel = (error, isLoggedIn, requiresLogin, numSelected, curre
|
|
|
5624
5684
|
if (!currentListName) return 'Please select or create a list';
|
|
5625
5685
|
return 'Add selections to list';
|
|
5626
5686
|
};
|
|
5627
|
-
const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, classNames = {} })=>{
|
|
5687
|
+
const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly, classNames = {} })=>{
|
|
5628
5688
|
const [selectItems, setSelectItems] = useState({});
|
|
5629
5689
|
const [currentList, setCurrentList] = useState(null);
|
|
5630
5690
|
const [error, setError] = useState(null);
|
|
@@ -5640,23 +5700,26 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5640
5700
|
root: 'w-1/2'
|
|
5641
5701
|
};
|
|
5642
5702
|
const mergedClassnames = mergeDefaultTailwindClassnames(classNamesDefaults, classNames);
|
|
5643
|
-
const { dataLibrary, updateListInDataLibrary, addListToDataLibrary, isLoading, error: dataLibraryError } = useDataLibrary(
|
|
5703
|
+
const { dataLibrary, updateListInDataLibrary, addListToDataLibrary, isLoading, isUpdating, error: dataLibraryError } = useDataLibrary({
|
|
5704
|
+
storageMode: dataLibraryStoreMode
|
|
5705
|
+
});
|
|
5644
5706
|
const saveToList = (listname, listId = undefined)=>{
|
|
5645
5707
|
if (selectedResources.length === 0) return;
|
|
5646
5708
|
const items = buildListItemsGroupedByDataset(extractFileDatasetsInRecords(selectedResources, exportDataFields));
|
|
5709
|
+
if (Object.keys(items).length === 0) {
|
|
5710
|
+
notifications.show({
|
|
5711
|
+
id: 'update-datalibrary-no-items-to-update-notification',
|
|
5712
|
+
position: 'top-center',
|
|
5713
|
+
withCloseButton: true,
|
|
5714
|
+
autoClose: 5000,
|
|
5715
|
+
title: 'Save to list',
|
|
5716
|
+
message: `No data objects selected to save to list ${listname}.`,
|
|
5717
|
+
loading: false
|
|
5718
|
+
});
|
|
5719
|
+
return;
|
|
5720
|
+
}
|
|
5647
5721
|
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
|
-
}
|
|
5722
|
+
// updating list
|
|
5660
5723
|
updateListInDataLibrary({
|
|
5661
5724
|
id: listId,
|
|
5662
5725
|
name: listname,
|
|
@@ -5664,26 +5727,46 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5664
5727
|
...dataLibrary[listId].items,
|
|
5665
5728
|
...items
|
|
5666
5729
|
}
|
|
5667
|
-
})
|
|
5668
|
-
|
|
5669
|
-
|
|
5670
|
-
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
5730
|
+
}).then((results)=>{
|
|
5731
|
+
if (results.isError) notifications.show({
|
|
5732
|
+
id: 'update-datalibrary-list-error-notification',
|
|
5733
|
+
position: 'top-center',
|
|
5734
|
+
withCloseButton: true,
|
|
5735
|
+
autoClose: 5000,
|
|
5736
|
+
title: 'Save to list',
|
|
5737
|
+
message: `Error saving to list ${listname}.`,
|
|
5738
|
+
loading: isUpdating !== null
|
|
5739
|
+
});
|
|
5740
|
+
else notifications.show({
|
|
5741
|
+
id: 'update-datalibrary-list-notification',
|
|
5742
|
+
position: 'top-center',
|
|
5743
|
+
withCloseButton: true,
|
|
5744
|
+
autoClose: 5000,
|
|
5745
|
+
title: 'Save to list',
|
|
5746
|
+
message: `${Object.values(items).length} datasets saved to list ${listname}.`,
|
|
5747
|
+
loading: isUpdating !== null
|
|
5748
|
+
});
|
|
5676
5749
|
});
|
|
5677
5750
|
} else {
|
|
5678
|
-
addListToDataLibrary(items, listname)
|
|
5679
|
-
|
|
5680
|
-
|
|
5681
|
-
|
|
5682
|
-
|
|
5683
|
-
|
|
5684
|
-
|
|
5685
|
-
|
|
5686
|
-
|
|
5751
|
+
addListToDataLibrary(items, listname).then((results)=>{
|
|
5752
|
+
if (results.isError) notifications.show({
|
|
5753
|
+
id: 'update-datalibrary-list-error-notification',
|
|
5754
|
+
position: 'top-center',
|
|
5755
|
+
withCloseButton: true,
|
|
5756
|
+
autoClose: 5000,
|
|
5757
|
+
title: 'Save to list',
|
|
5758
|
+
message: `Error saving to list ${listname}.`,
|
|
5759
|
+
loading: isUpdating !== null
|
|
5760
|
+
});
|
|
5761
|
+
else notifications.show({
|
|
5762
|
+
id: 'update-datalibrary-list-notification',
|
|
5763
|
+
position: 'top-center',
|
|
5764
|
+
withCloseButton: true,
|
|
5765
|
+
autoClose: 5000,
|
|
5766
|
+
title: 'Save to list',
|
|
5767
|
+
message: `${Object.values(items).length} datasets saved to list ${listname}.`,
|
|
5768
|
+
loading: isLoading
|
|
5769
|
+
});
|
|
5687
5770
|
});
|
|
5688
5771
|
}
|
|
5689
5772
|
};
|
|
@@ -5706,21 +5789,11 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5706
5789
|
options
|
|
5707
5790
|
]);
|
|
5708
5791
|
useDeepCompareEffect(()=>{
|
|
5709
|
-
if (dataLibrary
|
|
5792
|
+
if (dataLibrary) if (!dataLibraryError) {
|
|
5710
5793
|
const listItems = extractIdToLabel(dataLibrary);
|
|
5711
5794
|
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
|
-
});
|
|
5795
|
+
} else {
|
|
5796
|
+
setError(dataLibraryError);
|
|
5724
5797
|
}
|
|
5725
5798
|
}, [
|
|
5726
5799
|
dataLibrary,
|
|
@@ -5792,7 +5865,7 @@ const AddToDataLibrary = ({ buttonConfig, selectedResources, exportDataFields, c
|
|
|
5792
5865
|
});
|
|
5793
5866
|
};
|
|
5794
5867
|
|
|
5795
|
-
const createActionButton = ({ buttonConfig, selectedResources, exportDataFields })=>{
|
|
5868
|
+
const createActionButton = ({ buttonConfig, selectedResources, exportDataFields, verifyExternalLogins, dataLibraryStoreMode })=>{
|
|
5796
5869
|
return ({
|
|
5797
5870
|
manifest: /*#__PURE__*/ jsx(DownloadManifestButton, {
|
|
5798
5871
|
buttonConfig: buttonConfig,
|
|
@@ -5802,18 +5875,22 @@ const createActionButton = ({ buttonConfig, selectedResources, exportDataFields
|
|
|
5802
5875
|
addToDataLibrary: /*#__PURE__*/ jsx(AddToDataLibrary, {
|
|
5803
5876
|
buttonConfig: buttonConfig,
|
|
5804
5877
|
selectedResources: selectedResources,
|
|
5805
|
-
exportDataFields: exportDataFields
|
|
5878
|
+
exportDataFields: exportDataFields,
|
|
5879
|
+
verifyExternalLogins: verifyExternalLogins,
|
|
5880
|
+
dataLibraryStoreMode: dataLibraryStoreMode
|
|
5806
5881
|
}, buttonConfig.type)
|
|
5807
5882
|
})[buttonConfig.type];
|
|
5808
5883
|
};
|
|
5809
|
-
const ActionBar = ({ buttons, selectedResources, exportDataFields, verifyExternalLogins })=>{
|
|
5884
|
+
const ActionBar = ({ buttons, selectedResources, exportDataFields, verifyExternalLogins, dataLibraryStoreMode = DataLibraryStoreMode.ApiOnly })=>{
|
|
5810
5885
|
return /*#__PURE__*/ jsx("div", {
|
|
5811
5886
|
className: "flex items-center justify-end py-1 px-2 mb-1 w-full gap-x-1.5 ",
|
|
5812
5887
|
children: buttons?.map((button)=>{
|
|
5813
5888
|
return createActionButton({
|
|
5814
5889
|
buttonConfig: button,
|
|
5815
5890
|
selectedResources,
|
|
5816
|
-
exportDataFields
|
|
5891
|
+
exportDataFields,
|
|
5892
|
+
verifyExternalLogins,
|
|
5893
|
+
dataLibraryStoreMode
|
|
5817
5894
|
});
|
|
5818
5895
|
})
|
|
5819
5896
|
});
|
|
@@ -7203,7 +7280,6 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
7203
7280
|
*
|
|
7204
7281
|
* @return {JSX.Element} A fully featured discovery interface including search functionality, a table, charts, filters, and more.
|
|
7205
7282
|
*/ const DiscoveryIndexPanel = ({ discoveryConfig, indexSelector })=>{
|
|
7206
|
-
console.log(discoveryConfig);
|
|
7207
7283
|
const dataHook = useMemo(()=>getDiscoveryDataLoader(discoveryConfig?.features?.dataLoader?.dataFetchFunction) ?? useLoadAllMDSData, [
|
|
7208
7284
|
discoveryConfig?.features?.dataLoader?.dataFetchFunction
|
|
7209
7285
|
]);
|
|
@@ -7248,6 +7324,7 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
7248
7324
|
discoveryConfig?.minimalFieldMapping?.uid,
|
|
7249
7325
|
selections
|
|
7250
7326
|
]);
|
|
7327
|
+
console.log('selectedRecords', selectedRecords);
|
|
7251
7328
|
const [sorting, setSorting] = useState([]);
|
|
7252
7329
|
const [showAdvancedSearch, { toggle: toggleAdvancedSearch }] = useDisclosure(false);
|
|
7253
7330
|
if (dataRequestStatus.isLoading) {
|
|
@@ -7325,7 +7402,8 @@ registerDefaultDiscoveryDataLoaders();
|
|
|
7325
7402
|
buttons: discoveryConfig.features.exportFromDiscovery.buttons,
|
|
7326
7403
|
exportDataFields: discoveryConfig.features.exportFromDiscovery.exportDataFields,
|
|
7327
7404
|
selectedResources: selectedRecords,
|
|
7328
|
-
verifyExternalLogins: discoveryConfig.features.exportFromDiscovery.verifyExternalLogins
|
|
7405
|
+
verifyExternalLogins: discoveryConfig.features.exportFromDiscovery.verifyExternalLogins,
|
|
7406
|
+
dataLibraryStoreMode: discoveryConfig.features.exportFromDiscovery.dataLibraryStoreMode
|
|
7329
7407
|
}) : null
|
|
7330
7408
|
]
|
|
7331
7409
|
}),
|
|
@@ -11992,7 +12070,7 @@ const PaymentPanel = ()=>{
|
|
|
11992
12070
|
setSelectedPayModel(data.currentPayModel.bmh_workspace_id ?? data.currentPayModel.workspace_type);
|
|
11993
12071
|
return {
|
|
11994
12072
|
usersPayModels,
|
|
11995
|
-
workspaceName: data.currentPayModel.bmh_workspace_id.length > 0 ? data.currentPayModel.bmh_workspace_id
|
|
12073
|
+
workspaceName: data.currentPayModel.bmh_workspace_id.length > 0 ? data.currentPayModel.bmh_workspace_id : data.currentPayModel.workspace_type,
|
|
11996
12074
|
totalUsage: data.currentPayModel['total-usage'],
|
|
11997
12075
|
hardLimit: data.currentPayModel['hard-limit']
|
|
11998
12076
|
};
|
|
@@ -12001,6 +12079,7 @@ const PaymentPanel = ()=>{
|
|
|
12001
12079
|
]);
|
|
12002
12080
|
const PayModelSelectItem = ({ option })=>{
|
|
12003
12081
|
const menuItem = usersPayModels[Number(option.value)];
|
|
12082
|
+
if (!menuItem) return null;
|
|
12004
12083
|
return /*#__PURE__*/ jsx("div", {
|
|
12005
12084
|
children: /*#__PURE__*/ jsxs(Group, {
|
|
12006
12085
|
wrap: "nowrap",
|
|
@@ -15689,6 +15768,7 @@ const MessagePanel = ({ message, isError = false })=>{
|
|
|
15689
15768
|
const extractLabel = (c, idx)=>c.label ?? c.features?.pageTitle?.text ?? `Index ${idx.toString()}`;
|
|
15690
15769
|
const Discovery = ({ discoveryConfig })=>{
|
|
15691
15770
|
const [metadataIndex, setMetadataIndex] = useState('0');
|
|
15771
|
+
console.log('Discovery Component', discoveryConfig);
|
|
15692
15772
|
const menuItems = useMemo(()=>{
|
|
15693
15773
|
return discoveryConfig.metadataConfig.map((n, idx)=>{
|
|
15694
15774
|
return {
|
|
@@ -15775,6 +15855,12 @@ const DiscoveryPage = ({ headerProps, footerProps, discoveryConfig })=>{
|
|
|
15775
15855
|
const DiscoveryPageGetServerSideProps = async ()=>{
|
|
15776
15856
|
try {
|
|
15777
15857
|
const discoveryConfig = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/discovery.json`);
|
|
15858
|
+
// need data library config for export from discovery using the DataLibrary
|
|
15859
|
+
const datalibraryConfig = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/dataLibrary.json`);
|
|
15860
|
+
discoveryConfig.metadataConfig?.forEach((index)=>{
|
|
15861
|
+
if (index.features.exportFromDiscovery) index.features.exportFromDiscovery.dataLibraryStoreMode = datalibraryConfig?.storageMode ?? DataLibraryStoreMode.ApiOnly;
|
|
15862
|
+
});
|
|
15863
|
+
console.log('Updated Config', discoveryConfig);
|
|
15778
15864
|
return {
|
|
15779
15865
|
props: {
|
|
15780
15866
|
...await getNavPageLayoutPropsFromConfig(),
|
|
@@ -19114,6 +19200,32 @@ const getUniqueItemKey = (item)=>{
|
|
|
19114
19200
|
return `file_${item.datasetId}_${item.id}`;
|
|
19115
19201
|
}
|
|
19116
19202
|
};
|
|
19203
|
+
const selectionToManifest = (dataLibrarySelections)=>{
|
|
19204
|
+
return dataLibrarySelections.reduce((acc, item)=>{
|
|
19205
|
+
if (isValidFileItemWithParentDatasetNameAndID(item)) {
|
|
19206
|
+
acc.push({
|
|
19207
|
+
object_id: item.id,
|
|
19208
|
+
...item.name ? {
|
|
19209
|
+
file_name: item.name
|
|
19210
|
+
} : {},
|
|
19211
|
+
...item.size ? {
|
|
19212
|
+
file_size: Number(item.size)
|
|
19213
|
+
} : {},
|
|
19214
|
+
dataset_id: item.datasetId
|
|
19215
|
+
});
|
|
19216
|
+
}
|
|
19217
|
+
return acc;
|
|
19218
|
+
}, []);
|
|
19219
|
+
};
|
|
19220
|
+
const extractDatasetIds = (dataLibrarySelections)=>{
|
|
19221
|
+
const metadataIds = dataLibrarySelections.reduce((acc, item)=>{
|
|
19222
|
+
if (isFileItem(item)) {
|
|
19223
|
+
acc.add(item.datasetId);
|
|
19224
|
+
}
|
|
19225
|
+
return acc;
|
|
19226
|
+
}, new Set());
|
|
19227
|
+
return Array.from(metadataIds);
|
|
19228
|
+
};
|
|
19117
19229
|
|
|
19118
19230
|
// Create the context
|
|
19119
19231
|
const DataLibrarySelectionContext = /*#__PURE__*/ createContext(undefined);
|
|
@@ -19667,6 +19779,11 @@ const evaluateGroupRule = (rule, items)=>{
|
|
|
19667
19779
|
const fieldValue = items.map((item)=>item[rule.field]);
|
|
19668
19780
|
return fieldValue.length === rule.total;
|
|
19669
19781
|
}
|
|
19782
|
+
case 'greater':
|
|
19783
|
+
{
|
|
19784
|
+
const fieldValue = items.map((item)=>item[rule.field]);
|
|
19785
|
+
return fieldValue.length > rule.total;
|
|
19786
|
+
}
|
|
19670
19787
|
}
|
|
19671
19788
|
};
|
|
19672
19789
|
/**
|
|
@@ -19704,7 +19821,7 @@ const isSendExistingPFBToURLParameters = (value)=>{
|
|
|
19704
19821
|
const candidate = value;
|
|
19705
19822
|
return 'targetURLTemplate' in candidate && typeof candidate.targetURLTemplate === 'string';
|
|
19706
19823
|
};
|
|
19707
|
-
const sendExistingPFBToURL = async (validatedSelections, params,
|
|
19824
|
+
const sendExistingPFBToURL = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19708
19825
|
if (!isSendExistingPFBToURLParameters(params)) {
|
|
19709
19826
|
console.error('Invalid parameters for sendPFBToURL action:', params);
|
|
19710
19827
|
return;
|
|
@@ -19738,7 +19855,7 @@ const sendExistingPFBToURL = async (validatedSelections, params, done = ()=>null
|
|
|
19738
19855
|
const targetURL = targetURLTemplate.replace(PRESIGNED_URL_TEMPLATE_VARIABLE, signedURL);
|
|
19739
19856
|
return new Promise(()=>{
|
|
19740
19857
|
if (window) window.open(targetURL, '_blank', 'noopener,noreferrer');
|
|
19741
|
-
if (
|
|
19858
|
+
if (onDone) onDone(targetURL);
|
|
19742
19859
|
});
|
|
19743
19860
|
} catch (error) {
|
|
19744
19861
|
if (error instanceof HTTPError) {
|
|
@@ -19753,10 +19870,175 @@ const sendExistingPFBToURL = async (validatedSelections, params, done = ()=>null
|
|
|
19753
19870
|
loading: false
|
|
19754
19871
|
});
|
|
19755
19872
|
}
|
|
19756
|
-
|
|
19757
|
-
|
|
19758
|
-
|
|
19873
|
+
if (error instanceof Error) {
|
|
19874
|
+
if (error.name == 'AbortError') {
|
|
19875
|
+
onAbort?.();
|
|
19876
|
+
}
|
|
19877
|
+
return new Promise(()=>{
|
|
19878
|
+
onError?.(error);
|
|
19879
|
+
});
|
|
19880
|
+
}
|
|
19881
|
+
}
|
|
19882
|
+
};
|
|
19883
|
+
|
|
19884
|
+
const exportToManifest = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19885
|
+
const manifest = selectionToManifest(validatedSelections); // TODO md5sum? commons_name?
|
|
19886
|
+
try {
|
|
19887
|
+
const blob = new Blob([
|
|
19888
|
+
JSON.stringify(manifest, null, 2)
|
|
19889
|
+
], {
|
|
19890
|
+
type: 'text/json'
|
|
19759
19891
|
});
|
|
19892
|
+
FileSaver.saveAs(blob, MANIFEST_FILENAME);
|
|
19893
|
+
onDone?.();
|
|
19894
|
+
} catch (error) {
|
|
19895
|
+
if (error instanceof Error) {
|
|
19896
|
+
onError?.(error);
|
|
19897
|
+
} else onError?.(new Error('unknown error saving file'));
|
|
19898
|
+
}
|
|
19899
|
+
};
|
|
19900
|
+
|
|
19901
|
+
const ProvidersErrorPanel = ({ message, providers })=>{
|
|
19902
|
+
return /*#__PURE__*/ jsxs(Stack, {
|
|
19903
|
+
children: [
|
|
19904
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19905
|
+
children: message
|
|
19906
|
+
}),
|
|
19907
|
+
/*#__PURE__*/ jsxs(Table, {
|
|
19908
|
+
children: [
|
|
19909
|
+
/*#__PURE__*/ jsx("thead", {
|
|
19910
|
+
children: /*#__PURE__*/ jsxs("tr", {
|
|
19911
|
+
children: [
|
|
19912
|
+
/*#__PURE__*/ jsx("th", {
|
|
19913
|
+
children: "Provider"
|
|
19914
|
+
}),
|
|
19915
|
+
/*#__PURE__*/ jsx("th", {
|
|
19916
|
+
children: "URL"
|
|
19917
|
+
})
|
|
19918
|
+
]
|
|
19919
|
+
})
|
|
19920
|
+
}),
|
|
19921
|
+
/*#__PURE__*/ jsx("tbody", {
|
|
19922
|
+
children: providers.map((provider)=>/*#__PURE__*/ jsxs("tr", {
|
|
19923
|
+
children: [
|
|
19924
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19925
|
+
children: provider.name
|
|
19926
|
+
}),
|
|
19927
|
+
/*#__PURE__*/ jsx(Text, {
|
|
19928
|
+
children: provider.base_url
|
|
19929
|
+
})
|
|
19930
|
+
]
|
|
19931
|
+
}, provider.name))
|
|
19932
|
+
})
|
|
19933
|
+
]
|
|
19934
|
+
})
|
|
19935
|
+
]
|
|
19936
|
+
});
|
|
19937
|
+
};
|
|
19938
|
+
|
|
19939
|
+
const removeKeys = (obj, keysToRemove)=>{
|
|
19940
|
+
keysToRemove.forEach((key)=>{
|
|
19941
|
+
if (key.includes('.')) {
|
|
19942
|
+
const [firstKey, ...nestedKeys] = key.split('.');
|
|
19943
|
+
const nestedObj = get(obj, firstKey);
|
|
19944
|
+
unset(nestedObj, nestedKeys.join('.'));
|
|
19945
|
+
} else {
|
|
19946
|
+
unset(obj, key);
|
|
19947
|
+
}
|
|
19948
|
+
});
|
|
19949
|
+
return obj;
|
|
19950
|
+
};
|
|
19951
|
+
/**
|
|
19952
|
+
* Processes and assembles metadata by cloning objects, removing specified keys, and optionally accessing a defined metadata root.
|
|
19953
|
+
*
|
|
19954
|
+
* @param {Array<string>} keysToRemove - A list of keys to remove from each object in the selected resources after cloning.
|
|
19955
|
+
* @param {Array<Record<string, unknown>>} selectedResources - An array of resource objects to process and format.
|
|
19956
|
+
* @param {string} metadataRoot - The root key that holds the metadata in the objects. If present, this root is used as a starting point.
|
|
19957
|
+
* @returns {Array<Record<string, unknown>>} A new array of processed objects with the specified keys removed and metadata root applied when applicable.
|
|
19958
|
+
*/ const assembleMetadata = (selectedResources, metadataRoot, keysToRemove)=>{
|
|
19959
|
+
return selectedResources.map((obj)=>{
|
|
19960
|
+
const clonedObj = cloneDeep(!obj[metadataRoot] ? obj : obj[metadataRoot]);
|
|
19961
|
+
// if there are keysToRemove, remove them
|
|
19962
|
+
if (keysToRemove) {
|
|
19963
|
+
return removeKeys(clonedObj, keysToRemove);
|
|
19964
|
+
}
|
|
19965
|
+
// Otherwise just return the cloned object
|
|
19966
|
+
return clonedObj;
|
|
19967
|
+
});
|
|
19968
|
+
};
|
|
19969
|
+
const exportMetadataToWorkspace = async (validatedSelections, params, onDone = ()=>null, onError = ()=>null, onAbort = ()=>null, signal = undefined)=>{
|
|
19970
|
+
// first need to get file manifest
|
|
19971
|
+
try {
|
|
19972
|
+
const fileManifest = selectionToManifest(validatedSelections);
|
|
19973
|
+
if (params?.verifyExternalLogins) {
|
|
19974
|
+
const results = await getFederatedLoginStatus(fileManifest);
|
|
19975
|
+
const { error: providersError, providersToAuthenticate, missingProviders } = results;
|
|
19976
|
+
if (providersError) {
|
|
19977
|
+
onError?.(providersError);
|
|
19978
|
+
return;
|
|
19979
|
+
}
|
|
19980
|
+
if (providersToAuthenticate && providersToAuthenticate?.length > 0 && missingProviders && missingProviders?.length > 0) {
|
|
19981
|
+
modals.open({
|
|
19982
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
19983
|
+
title: 'Error: Export to Workspace',
|
|
19984
|
+
withCloseButton: true,
|
|
19985
|
+
children: /*#__PURE__*/ jsxs(Stack, {
|
|
19986
|
+
children: [
|
|
19987
|
+
/*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
19988
|
+
message: "The following providers need to be authenticated",
|
|
19989
|
+
providers: providersToAuthenticate
|
|
19990
|
+
}),
|
|
19991
|
+
/*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
19992
|
+
message: "The following providers need to be authenticated",
|
|
19993
|
+
providers: providersToAuthenticate
|
|
19994
|
+
})
|
|
19995
|
+
]
|
|
19996
|
+
})
|
|
19997
|
+
});
|
|
19998
|
+
return;
|
|
19999
|
+
}
|
|
20000
|
+
if (providersToAuthenticate && providersToAuthenticate?.length > 0) {
|
|
20001
|
+
modals.open({
|
|
20002
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
20003
|
+
title: 'Error: Export to Workspace',
|
|
20004
|
+
withCloseButton: true,
|
|
20005
|
+
children: /*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
20006
|
+
message: "The following providers need to be authenticated",
|
|
20007
|
+
providers: providersToAuthenticate
|
|
20008
|
+
})
|
|
20009
|
+
});
|
|
20010
|
+
return;
|
|
20011
|
+
} else {
|
|
20012
|
+
if (missingProviders && missingProviders?.length > 0) {
|
|
20013
|
+
modals.open({
|
|
20014
|
+
id: 'export-dicovery-to-workspace-providers-to-authenticate-modal',
|
|
20015
|
+
title: 'Error: Export to Workspace',
|
|
20016
|
+
withCloseButton: true,
|
|
20017
|
+
children: /*#__PURE__*/ jsx(ProvidersErrorPanel, {
|
|
20018
|
+
message: "The following providers are missing",
|
|
20019
|
+
providers: missingProviders
|
|
20020
|
+
})
|
|
20021
|
+
});
|
|
20022
|
+
return;
|
|
20023
|
+
}
|
|
20024
|
+
}
|
|
20025
|
+
}
|
|
20026
|
+
// next get the metadata from the dataset id
|
|
20027
|
+
const metadataIds = extractDatasetIds(validatedSelections);
|
|
20028
|
+
const metadata = await queryMultipleMDSRecords(metadataIds, params?.useAggMDS, signal);
|
|
20029
|
+
const metadataObjects = Object.values(metadata).map((metadataObj)=>metadataObj);
|
|
20030
|
+
const filteredMetadata = assembleMetadata(metadataObjects, params?.metadataRoot ?? 'gen3_discovery', params?.keysToRemove);
|
|
20031
|
+
// save the metadata
|
|
20032
|
+
await fetchJSONDataFromURL(`${GEN3_MANIFEST_API}/metadata`, true, 'POST', JSON.stringify(filteredMetadata), signal);
|
|
20033
|
+
// save files manifest
|
|
20034
|
+
await fetchJSONDataFromURL(`${GEN3_MANIFEST_API}/`, true, 'POST', JSON.stringify(fileManifest), signal);
|
|
20035
|
+
onDone?.();
|
|
20036
|
+
} catch (error) {
|
|
20037
|
+
if (error instanceof Error) {
|
|
20038
|
+
if (error.name == 'AbortError') {
|
|
20039
|
+
onAbort?.();
|
|
20040
|
+
}
|
|
20041
|
+
} else onError?.(new Error('unknown error'));
|
|
19760
20042
|
}
|
|
19761
20043
|
};
|
|
19762
20044
|
|
|
@@ -19784,6 +20066,12 @@ const registerDefaultDataLibraryActions = ()=>{
|
|
|
19784
20066
|
registerAction('export-pfb-to-url', {
|
|
19785
20067
|
action: sendExistingPFBToURL
|
|
19786
20068
|
});
|
|
20069
|
+
registerAction('export-from-discovery-to-manifest', {
|
|
20070
|
+
action: exportToManifest
|
|
20071
|
+
});
|
|
20072
|
+
registerAction('export-from-discovery-to-workspace', {
|
|
20073
|
+
action: exportMetadataToWorkspace
|
|
20074
|
+
});
|
|
19787
20075
|
};
|
|
19788
20076
|
registerDefaultDataLibraryActions();
|
|
19789
20077
|
|
|
@@ -20693,7 +20981,7 @@ const DataSetContentsTable = ({ listId, data, removeList, size = 'sm' })=>{
|
|
|
20693
20981
|
]);
|
|
20694
20982
|
const { selections, updateSelections, removeListMember, removeList } = useDataLibrarySelection();
|
|
20695
20983
|
const updateList = async (update)=>{
|
|
20696
|
-
await updateListInDataLibrary({
|
|
20984
|
+
return await updateListInDataLibrary({
|
|
20697
20985
|
...{
|
|
20698
20986
|
name: listName,
|
|
20699
20987
|
items: dataList.items
|
|
@@ -20816,8 +21104,10 @@ const DataSetContentsTable = ({ listId, data, removeList, size = 'sm' })=>{
|
|
|
20816
21104
|
}, listName);
|
|
20817
21105
|
};
|
|
20818
21106
|
|
|
20819
|
-
const DataLibraryLists = ({ requiresLogin = true, actions, size })=>{
|
|
20820
|
-
const { dataLibrary, isLoading, isUpdating, error: dataLibraryError, addListToDataLibrary, updateListInDataLibrary, deleteListFromDataLibrary } = useDataLibrary(
|
|
21107
|
+
const DataLibraryLists = ({ storageMode, requiresLogin = true, actions, size })=>{
|
|
21108
|
+
const { dataLibrary, isLoading, isUpdating, error: dataLibraryError, addListToDataLibrary, updateListInDataLibrary, deleteListFromDataLibrary } = useDataLibrary({
|
|
21109
|
+
storageMode
|
|
21110
|
+
});
|
|
20821
21111
|
const { isAuthenticated } = useIsAuthenticated();
|
|
20822
21112
|
const [selectedItemsOpen, { open, close }] = useDisclosure(false);
|
|
20823
21113
|
const { gatherSelectedItems } = useDataLibrarySelection();
|
|
@@ -20825,27 +21115,34 @@ const DataLibraryLists = ({ requiresLogin = true, actions, size })=>{
|
|
|
20825
21115
|
gatherSelectedItems(dataLibrary);
|
|
20826
21116
|
open();
|
|
20827
21117
|
};
|
|
20828
|
-
|
|
20829
|
-
|
|
20830
|
-
|
|
20831
|
-
|
|
20832
|
-
|
|
20833
|
-
|
|
20834
|
-
|
|
20835
|
-
|
|
20836
|
-
|
|
20837
|
-
children: /*#__PURE__*/ jsx(Center, {
|
|
20838
|
-
children: /*#__PURE__*/ jsx(ErrorCard, {
|
|
20839
|
-
message: message
|
|
20840
|
-
})
|
|
20841
|
-
})
|
|
21118
|
+
// Use useEffect to show notifications only when error changes
|
|
21119
|
+
useDeepCompareEffect(()=>{
|
|
21120
|
+
if (dataLibraryError?.isError && dataLibraryError?.status !== 401) {
|
|
21121
|
+
notifications.show({
|
|
21122
|
+
position: 'top-center',
|
|
21123
|
+
color: 'red',
|
|
21124
|
+
title: 'Data Library Error',
|
|
21125
|
+
message: dataLibraryError?.message,
|
|
21126
|
+
autoClose: 2000
|
|
20842
21127
|
});
|
|
20843
|
-
}
|
|
20844
|
-
|
|
20845
|
-
|
|
20846
|
-
|
|
20847
|
-
|
|
20848
|
-
|
|
21128
|
+
}
|
|
21129
|
+
}, [
|
|
21130
|
+
dataLibraryError
|
|
21131
|
+
]);
|
|
21132
|
+
// Handle 401 error with UI rendering
|
|
21133
|
+
if (dataLibraryError?.isError && dataLibraryError?.status === 401) {
|
|
21134
|
+
let message = 'You are not authorized to access the library.';
|
|
21135
|
+
if (requiresLogin) {
|
|
21136
|
+
if (!isAuthenticated) message = 'Data Library requires login. Please log in to continue.';
|
|
21137
|
+
else message = 'You are not authorized to access the library. Please contact your site administrator.';
|
|
21138
|
+
}
|
|
21139
|
+
return /*#__PURE__*/ jsx("div", {
|
|
21140
|
+
className: "flex flex-col w-full ml-2",
|
|
21141
|
+
children: /*#__PURE__*/ jsx(Center, {
|
|
21142
|
+
children: /*#__PURE__*/ jsx(ErrorCard, {
|
|
21143
|
+
message: message
|
|
21144
|
+
})
|
|
21145
|
+
})
|
|
20849
21146
|
});
|
|
20850
21147
|
}
|
|
20851
21148
|
return /*#__PURE__*/ jsxs("div", {
|
|
@@ -20890,6 +21187,7 @@ const DataLibraryLists = ({ requiresLogin = true, actions, size })=>{
|
|
|
20890
21187
|
};
|
|
20891
21188
|
|
|
20892
21189
|
const DataLibrary = (config)=>{
|
|
21190
|
+
console.log(config);
|
|
20893
21191
|
return /*#__PURE__*/ jsx(DataLibrarySelectionProvider, {
|
|
20894
21192
|
children: /*#__PURE__*/ jsx(DataLibraryLists, {
|
|
20895
21193
|
...config
|
|
@@ -20898,6 +21196,7 @@ const DataLibrary = (config)=>{
|
|
|
20898
21196
|
};
|
|
20899
21197
|
|
|
20900
21198
|
const DataLibraryPage = ({ headerProps, footerProps, config })=>{
|
|
21199
|
+
console.log('DataLibraryPage', config);
|
|
20901
21200
|
return /*#__PURE__*/ jsx(NavPageLayout, {
|
|
20902
21201
|
headerProps,
|
|
20903
21202
|
footerProps,
|
|
@@ -20927,7 +21226,7 @@ const DataLibraryPageGetServerSideProps = async ()=>{
|
|
|
20927
21226
|
props: {
|
|
20928
21227
|
...await getNavPageLayoutPropsFromConfig(),
|
|
20929
21228
|
config: {
|
|
20930
|
-
|
|
21229
|
+
storageMode: DataLibraryStoreMode.ApiOnly,
|
|
20931
21230
|
actions: []
|
|
20932
21231
|
}
|
|
20933
21232
|
}
|