From 790ef432786bc1249b425c80571a831935e84904 Mon Sep 17 00:00:00 2001 From: Austen Money Date: Tue, 15 Oct 2024 12:27:50 -0400 Subject: [PATCH] rely on processed dataset access level --- .../ProcessedData/HelperPanel/HelperPanel.tsx | 15 ++++---------- .../ProcessedDataWorkspaceMenu.tsx | 14 ++++--------- .../ProcessedData/ProcessedDataset/hooks.ts | 2 ++ .../EntityHeaderActionButtons.tsx | 2 +- .../EntityHeaderContent.tsx | 2 +- .../static/js/components/detailPage/utils.ts | 5 +++++ .../Visualization/Visualization.tsx | 2 +- .../VisualizationWorkspaceButton.tsx | 20 ++++++------------- 8 files changed, 24 insertions(+), 38 deletions(-) diff --git a/context/app/static/js/components/detailPage/ProcessedData/HelperPanel/HelperPanel.tsx b/context/app/static/js/components/detailPage/ProcessedData/HelperPanel/HelperPanel.tsx index a1aa41864c..a611ee0777 100644 --- a/context/app/static/js/components/detailPage/ProcessedData/HelperPanel/HelperPanel.tsx +++ b/context/app/static/js/components/detailPage/ProcessedData/HelperPanel/HelperPanel.tsx @@ -14,19 +14,13 @@ import { LineClamp } from 'js/shared-styles/text'; import { SecondaryBackgroundTooltip } from 'js/shared-styles/tooltips'; import { formatDate } from 'date-fns/format'; -import { useDetailContext } from 'js/components/detailPage/DetailContext'; import { HelperPanelPortal } from '../../DetailLayout/DetailLayout'; -import useProcessedDataStore from '../store'; import StatusIcon from '../../StatusIcon'; -import { getDateLabelAndValue } from '../../utils'; +import { getDateLabelAndValue, useCurrentDataset } from '../../utils'; import { HelperPanelButton } from './styles'; import { useTrackEntityPageEvent } from '../../useTrackEntityPageEvent'; import ProcessedDataWorkspaceMenu from '../ProcessedDataWorkspaceMenu'; -function useCurrentDataset() { - return useProcessedDataStore((state) => state.currentDataset); -} - function HelperPanelHeader() { const currentDataset = useCurrentDataset(); if (!currentDataset) { @@ -42,7 +36,6 @@ function HelperPanelHeader() { function HelperPanelStatus() { const currentDataset = useCurrentDataset(); - const { mapped_data_access_level } = useDetailContext(); if (!currentDataset) { return null; @@ -50,7 +43,7 @@ function HelperPanelStatus() { return ( - {`${currentDataset.status} (${mapped_data_access_level})`} + {`${currentDataset.status} (${currentDataset.mapped_data_access_level})`} ); } @@ -102,7 +95,7 @@ function HelperPanelActions() { return null; } - const { hubmap_id, uuid, status } = currentDataset; + const { hubmap_id, uuid, status, mapped_data_access_level } = currentDataset; return ( <> @@ -112,7 +105,7 @@ function HelperPanelActions() { }>Workspace } - datasetDetails={{ hubmap_id, uuid, status }} + datasetDetails={{ hubmap_id, uuid, status, mapped_data_access_level }} dialogType="ADD_DATASETS_FROM_HELPER_PANEL" /> diff --git a/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataWorkspaceMenu.tsx b/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataWorkspaceMenu.tsx index d58b73bfd5..e8a7a8b6f5 100644 --- a/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataWorkspaceMenu.tsx +++ b/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataWorkspaceMenu.tsx @@ -8,7 +8,7 @@ import AddRounded from '@mui/icons-material/AddRounded'; import { WorkspacesIcon } from 'js/shared-styles/icons'; import { useOpenDialog } from 'js/components/workspaces/WorkspacesDropdownMenu/WorkspacesDropdownMenu'; import { useCreateWorkspaceForm } from 'js/components/workspaces/NewWorkspaceDialog/useCreateWorkspaceForm'; -import { useAppContext, useFlaskDataContext } from 'js/components/Contexts'; +import { useAppContext } from 'js/components/Contexts'; import { useTrackEntityPageEvent } from 'js/components/detailPage/useTrackEntityPageEvent'; import NewWorkspaceDialog from 'js/components/workspaces/NewWorkspaceDialog/NewWorkspaceDialog'; import { DialogType } from 'js/stores/useWorkspaceModalStore'; @@ -16,19 +16,15 @@ import AddDatasetsFromDetailDialog from 'js/components/workspaces/AddDatasetsFro interface ProcessedDataWorkspaceMenuProps { button: React.ReactNode; - datasetDetails: { hubmap_id: string; uuid: string; status: string }; + datasetDetails: { hubmap_id: string; uuid: string; status: string; mapped_data_access_level: string }; dialogType: DialogType; } function ProcessedDataWorkspaceMenu({ button, - datasetDetails: { hubmap_id, uuid, status }, + datasetDetails: { hubmap_id, uuid, status, mapped_data_access_level }, dialogType, }: ProcessedDataWorkspaceMenuProps) { - const { - entity: { mapped_data_access_level }, - } = useFlaskDataContext(); - const { isWorkspacesUser } = useAppContext(); const [anchorEl, setAnchorEl] = React.useState(null); const open = Boolean(anchorEl); @@ -86,9 +82,7 @@ function ProcessedDataWorkspaceMenu({ 'aria-expanded': open ? 'true' : undefined, }); - const showWorkspaceButton = mapped_data_access_level && hubmap_id && isWorkspacesUser && status === 'Published'; - - if (!showWorkspaceButton) { + if (!isWorkspacesUser || !hubmap_id || mapped_data_access_level !== 'Public' || status !== 'Published') { return null; } diff --git a/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataset/hooks.ts b/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataset/hooks.ts index 611742108e..b080723003 100644 --- a/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataset/hooks.ts +++ b/context/app/static/js/components/detailPage/ProcessedData/ProcessedDataset/hooks.ts @@ -22,6 +22,7 @@ export type ProcessedDatasetDetails = ProcessedDatasetInfo & | 'protocol_url' // TODO: This is present for non-dataset entities, but not for datasets. | 'dataset_type' | 'mapped_consortium' + | 'mapped_data_access_level' >; export function useProcessedDatasetDetails(uuid: string) { @@ -54,6 +55,7 @@ export function useProcessedDatasetDetails(uuid: string) { 'mapped_consortium', 'contributors', 'contacts', + 'mapped_data_access_level', ], size: 10000, }; diff --git a/context/app/static/js/components/detailPage/entityHeader/EntityHeaderActionButtons/EntityHeaderActionButtons.tsx b/context/app/static/js/components/detailPage/entityHeader/EntityHeaderActionButtons/EntityHeaderActionButtons.tsx index 9bd3b7963f..fca715088f 100644 --- a/context/app/static/js/components/detailPage/entityHeader/EntityHeaderActionButtons/EntityHeaderActionButtons.tsx +++ b/context/app/static/js/components/detailPage/entityHeader/EntityHeaderActionButtons/EntityHeaderActionButtons.tsx @@ -210,7 +210,7 @@ function EntityHeaderActionButtons({ disabled={disabled} /> } - datasetDetails={{ hubmap_id, uuid, status }} + datasetDetails={{ hubmap_id, uuid, status, mapped_data_access_level }} dialogType="ADD_DATASETS_FROM_HEADER" /> diff --git a/context/app/static/js/components/detailPage/entityHeader/EntityHeaderContent/EntityHeaderContent.tsx b/context/app/static/js/components/detailPage/entityHeader/EntityHeaderContent/EntityHeaderContent.tsx index 26911cd1b2..2fe28527e6 100644 --- a/context/app/static/js/components/detailPage/entityHeader/EntityHeaderContent/EntityHeaderContent.tsx +++ b/context/app/static/js/components/detailPage/entityHeader/EntityHeaderContent/EntityHeaderContent.tsx @@ -237,7 +237,7 @@ function EntityHeaderContent({ view, setView }: { view: SummaryViewsType; setVie {vizIsFullscreen ? ( <> - {vizNotebookId && } + {vizNotebookId && } diff --git a/context/app/static/js/components/detailPage/utils.ts b/context/app/static/js/components/detailPage/utils.ts index 1e2e853836..62d15034fd 100644 --- a/context/app/static/js/components/detailPage/utils.ts +++ b/context/app/static/js/components/detailPage/utils.ts @@ -1,4 +1,5 @@ import { Dataset, Donor, isDataset, isDonor, isSample, Sample } from 'js/components/types'; +import useProcessedDataStore from 'js/components/detailPage/ProcessedData/store'; import { ProcessedDatasetDetails } from './ProcessedData/ProcessedDataset/hooks'; export function getSectionOrder( @@ -48,3 +49,7 @@ export function getOriginSampleAndMappedOrgan(entity: Sample | Dataset) { const origin_sample = entity.origin_samples[0]; return { origin_sample, mapped_organ: origin_sample.mapped_organ }; } + +export function useCurrentDataset() { + return useProcessedDataStore((state) => state.currentDataset); +} diff --git a/context/app/static/js/components/detailPage/visualization/Visualization/Visualization.tsx b/context/app/static/js/components/detailPage/visualization/Visualization/Visualization.tsx index bd8ff0c846..1678f11bad 100644 --- a/context/app/static/js/components/detailPage/visualization/Visualization/Visualization.tsx +++ b/context/app/static/js/components/detailPage/visualization/Visualization/Visualization.tsx @@ -118,7 +118,7 @@ function Visualization({ leftText={shouldDisplayHeader ? Visualization : undefined} buttons={ - {hasNotebook && } + {hasNotebook && } diff --git a/context/app/static/js/components/detailPage/visualization/VisualizationWorkspaceButton/VisualizationWorkspaceButton.tsx b/context/app/static/js/components/detailPage/visualization/VisualizationWorkspaceButton/VisualizationWorkspaceButton.tsx index 303f41de6f..7985004d01 100644 --- a/context/app/static/js/components/detailPage/visualization/VisualizationWorkspaceButton/VisualizationWorkspaceButton.tsx +++ b/context/app/static/js/components/detailPage/visualization/VisualizationWorkspaceButton/VisualizationWorkspaceButton.tsx @@ -7,29 +7,21 @@ import NewWorkspaceDialog from 'js/components/workspaces/NewWorkspaceDialog'; import { useCreateWorkspaceForm } from 'js/components/workspaces/NewWorkspaceDialog/useCreateWorkspaceForm'; import { WhiteBackgroundIconTooltipButton } from 'js/shared-styles/buttons'; import { useAppContext } from 'js/components/Contexts'; -import { useDetailContext } from 'js/components/detailPage/DetailContext'; -import { useProcessedDatasetDetails } from 'js/components/detailPage/ProcessedData/ProcessedDataset/hooks'; +import { useCurrentDataset } from 'js/components/detailPage/utils'; const tooltip = 'Launch New Workspace'; -interface VisualizationWorkspaceButtonProps { - uuid?: string; -} - -function VisualizationWorkspaceButton({ uuid = '' }: VisualizationWorkspaceButtonProps) { - const { mapped_data_access_level } = useDetailContext(); - const { - datasetDetails: { hubmap_id }, - } = useProcessedDatasetDetails(uuid); +function VisualizationWorkspaceButton() { + const currentDataset = useCurrentDataset(); const { isWorkspacesUser } = useAppContext(); const { setDialogIsOpen, removeDatasets, ...rest } = useCreateWorkspaceForm({ - defaultName: hubmap_id, + defaultName: currentDataset?.hubmap_id, defaultTemplate: 'visualization', - initialSelectedDatasets: [uuid], + initialSelectedDatasets: currentDataset ? [currentDataset.uuid] : [], }); - if (!isWorkspacesUser || !hubmap_id || mapped_data_access_level !== 'Public') { + if (!isWorkspacesUser || !currentDataset?.hubmap_id || currentDataset?.mapped_data_access_level !== 'Public') { return null; }