Skip to content

Commit

Permalink
Disable checkmarks and add tooltips for open or external datasets
Browse files Browse the repository at this point in the history
  • Loading branch information
s-rubenstein committed Oct 28, 2024
1 parent fa4d476 commit b6cbecd
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 13 deletions.
8 changes: 5 additions & 3 deletions src/components/Tooltips.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ import {useEffect, useRef, useState} from 'react';
// Copied from ReactTooltip Types
type Place = 'top' | 'right' | 'bottom' | 'left';

interface TooltipProps {
export const tooltipStyle: React.CSSProperties = {maxWidth: '30vw', textWrap: 'wrap'};

interface OverflowTooltipProps {
tooltipText: string;
children: React.ReactNode | React.ReactNode[];
id: string;
place: Place
}
export const OverflowTooltip = (props: TooltipProps) => {
export const OverflowTooltip = (props: OverflowTooltipProps) => {
const ref = useRef<HTMLDivElement>(null);
const [isOverflown, setIsOverflown] = useState(false);
useEffect(() => {
Expand All @@ -31,6 +33,6 @@ export const OverflowTooltip = (props: TooltipProps) => {
effect={'solid'}
disable={!isOverflown}
scrollHide={true}
id={props.id}><div style={{maxWidth: '30vw', textWrap: 'wrap'}}>{props.tooltipText}</div></ReactTooltip>
id={props.id}><div style={tooltipStyle}>{props.tooltipText}</div></ReactTooltip>
</>;
};
66 changes: 56 additions & 10 deletions src/components/data_search/DatasetSearchTableConstants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ import {DatasetTerm} from 'src/types/model';
import _, {groupBy} from 'lodash';
import {Checkbox, Link} from '@mui/material';
import * as React from 'react';
import {OverflowTooltip} from '../Tooltips';
import {OverflowTooltip, tooltipStyle} from '../Tooltips';
import {SnapshotSummaryModel} from 'src/types/tdrModel';
import DatasetExportButton from './DatasetExportButton';
import ReactTooltip from 'react-tooltip';

export interface DatasetSearchTableTab<T> {
key: string;
Expand Down Expand Up @@ -72,22 +73,53 @@ export const makeStudyTableHeaders = (datasets: DatasetTerm[], selected: number[
piName: '10%',
dataCustodians: '20%'
};
const datasetIds = datasets.map(dataset => dataset.datasetId);
const isSelectable = (dataset: DatasetTerm) => dataset.accessManagement != 'open' && dataset.accessManagement != 'external';
const selectableDatasetIds = datasets.filter(isSelectable).map(dataset => dataset.datasetId);
//const isSelected = selected.includes(dataset.datasetId);
// const checkboxId = `${dataset.datasetId}-is-selected-checkbox`;
// const tooltipText = `${dataset.accessManagement == 'open' ? 'Applying for access to open access datasets is not necessary' : 'To apply for access to external access datasets, please follow the link to the external site'}`;
// return {
// data: <>
// <ReactTooltip
// place={'top'}
// disable={isSelectable(dataset)}
// effect={'solid'}
// scrollHide={true}
// id={checkboxId}><div style={tooltipStyle}>{tooltipText}</div></ReactTooltip>
// <div data-for={checkboxId} data-tip={true}>
// <Checkbox checked={isSelected}
// disabled={!isSelectable(dataset)}
// onClick={() => onSelect(_.xor([dataset.datasetId], selected))}/>
// </div>
// </>,
return [
{
label: <Checkbox checked={datasets.length === selected.length}
indeterminate={selected.length > 0 && selected.length < datasetIds.length}
onClick={() => onSelect(datasetIds.length === selected.length ? [] : datasetIds)}/>,
indeterminate={selected.length > 0 && selected.length < selectableDatasetIds.length}
onClick={() => onSelect(selectableDatasetIds.length === selected.length ? [] : selectableDatasetIds)}/>,
sortable: false,
cellStyle: makeHeaderStyle(studyCellWidths.selected),
cellDataFn: datasets => {
const studyDatasetIds = datasets.map(dataset => dataset.datasetId);
const numberSelected = _.intersection(studyDatasetIds, selected).length;
const fullySelected = numberSelected === studyDatasetIds.length;
const indeterminate = numberSelected > 0 && numberSelected < studyDatasetIds.length;
const checkboxId = `${datasets[0].study.studyId}-is-selected-checkbox`;
const isSelectableStudy = datasets.filter(isSelectable).length === datasets.length;
const tooltipText = 'This study contains some open or external datasets. Please select to apply for access on the individual dataset level.';
return {
data: <Checkbox checked={fullySelected} indeterminate={indeterminate}
onClick={() => onSelect(fullySelected ? _.without(selected, ...studyDatasetIds) : indeterminate ? _.xor(_.without(selected, ...studyDatasetIds), studyDatasetIds) : [...selected, ...studyDatasetIds])}/>,
data: <>
<ReactTooltip
place={'top'}
disable={isSelectableStudy}
effect={'solid'}
scrollHide={true}
id={checkboxId}><div style={tooltipStyle}>{tooltipText}</div></ReactTooltip>
<div data-for={checkboxId} data-tip={true}>
<Checkbox checked={fullySelected} indeterminate={indeterminate} disabled={!isSelectableStudy}
onClick={() => onSelect(fullySelected ? _.without(selected, ...studyDatasetIds) : indeterminate ? _.xor(_.without(selected, ...studyDatasetIds), studyDatasetIds) : [...selected, ...studyDatasetIds])}/>
</div>
</>,
value: fullySelected ? 'Selected' : indeterminate ? 'Partially Selected' : 'Not Selected',
id: `${datasets[0].study.studyId}-is-selected`,
style: makeRowStyle(studyCellWidths.selected),
Expand Down Expand Up @@ -231,19 +263,33 @@ export const makeDatasetTableHeader = (datasets: DatasetTerm[], selected: number
dac: '10%',
exportToTerra: 100,
};
const datasetIds = datasets.map(dataset => dataset.datasetId);
const isSelectable = (dataset: DatasetTerm) => dataset.accessManagement != 'open' && dataset.accessManagement != 'external';
const selectableDatasetIds = datasets.filter(isSelectable).map(dataset => dataset.datasetId);
return [
{
label: <Checkbox checked={datasets.length === selected.length}
indeterminate={selected.length > 0 && selected.length < datasets.length}
onClick={() => onSelect(datasetIds.length === selected.length ? [] : datasetIds)}/>,
onClick={() => onSelect(selectableDatasetIds.length === selected.length ? [] : selectableDatasetIds)}/>,
sortable: false,
cellStyle: makeHeaderStyle(cellWidths.selected),
cellDataFn: (dataset: DatasetTerm) => {
const isSelected = selected.includes(dataset.datasetId);
const checkboxId = `${dataset.datasetId}-is-selected-checkbox`;
const tooltipText = `${dataset.accessManagement == 'open' ? 'Applying for access to open access datasets is not necessary' : 'To apply for access to external access datasets, please follow the link to the external site'}`;
return {
data: <Checkbox checked={isSelected}
onClick={() => onSelect(_.xor([dataset.datasetId], selected))}/>,
data: <>
<ReactTooltip
place={'top'}
disable={isSelectable(dataset)}
effect={'solid'}
scrollHide={true}
id={checkboxId}><div style={tooltipStyle}>{tooltipText}</div></ReactTooltip>
<div data-for={checkboxId} data-tip={true}>
<Checkbox checked={isSelected}
disabled={!isSelectable(dataset)}
onClick={() => onSelect(_.xor([dataset.datasetId], selected))}/>
</div>
</>,
value: isSelected ? 'Selected' : 'Not Selected',
id: `${dataset.datasetId}-is-selected`,
style: makeRowStyle(cellWidths.selected),
Expand Down

0 comments on commit b6cbecd

Please sign in to comment.