X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/c952afae1af2fb31b68be04f70bd7ae6f9d52aba..c4a5e3c6af1aa8af29403c3b65296dd6ec64def8:/src/components/multi-panel-view/multi-panel-view.tsx diff --git a/src/components/multi-panel-view/multi-panel-view.tsx b/src/components/multi-panel-view/multi-panel-view.tsx index 185c3b90..f4c3f3ba 100644 --- a/src/components/multi-panel-view/multi-panel-view.tsx +++ b/src/components/multi-panel-view/multi-panel-view.tsx @@ -15,7 +15,7 @@ import { import { GridProps } from '@material-ui/core/Grid'; import { isArray } from 'lodash'; import { DefaultView } from 'components/default-view/default-view'; -import { InfoIcon, InvisibleIcon, VisibleIcon } from 'components/icon/icon'; +import { InfoIcon } from 'components/icon/icon'; import { ReactNodeArray } from 'prop-types'; import classNames from 'classnames'; @@ -65,6 +65,7 @@ interface MPVPanelDataProps { panelIlluminated?: boolean; panelRef?: MutableRefObject; forwardProps?: boolean; + maxHeight?: string; } interface MPVPanelActionProps { @@ -78,14 +79,20 @@ export type MPVPanelProps = MPVPanelDataProps & MPVPanelActionProps; type MPVPanelContentProps = {children: ReactElement} & MPVPanelProps & GridProps; // Grid item compatible component for layout and MPV props passing -export const MPVPanelContent = ({doHidePanel, doMaximizePanel, panelName, panelMaximized, panelIlluminated, panelRef, forwardProps, ...props}: MPVPanelContentProps) => { +export const MPVPanelContent = ({doHidePanel, doMaximizePanel, panelName, + panelMaximized, panelIlluminated, panelRef, forwardProps, maxHeight, + ...props}: MPVPanelContentProps) => { useEffect(() => { if (panelRef && panelRef.current) { panelRef.current.scrollIntoView({behavior: 'smooth'}); } }, [panelRef]); - return + const mh = panelMaximized + ? '100%' + : maxHeight; + + return {/* Element to scroll to when the panel is selected */} { forwardProps @@ -112,15 +119,16 @@ const MPVContainerComponent = ({children, panelStates, classes, ...props}: MPVCo children = [children]; } const visibility = (children as ReactNodeArray).map((_, idx) => - !!!panelStates || // if panelStates wasn't passed, default to all visible panels + !panelStates || // if panelStates wasn't passed, default to all visible panels (panelStates[idx] && (panelStates[idx].visible || panelStates[idx].visible === undefined))); const [panelVisibility, setPanelVisibility] = useState(visibility); - const [brightenedPanel, setBrightenedPanel] = useState(-1); + const [highlightedPanel, setHighlightedPanel] = useState(-1); + const [selectedPanel, setSelectedPanel] = useState(-1); const panelRef = useRef(null); let panels: JSX.Element[] = []; - let toggles: JSX.Element[] = []; + let buttons: JSX.Element[] = []; if (isArray(children)) { for (let idx = 0; idx < children.length; idx++) { @@ -130,6 +138,7 @@ const MPVContainerComponent = ({children, panelStates, classes, ...props}: MPVCo true, ...panelVisibility.slice(idx+1) ]); + setSelectedPanel(idx); }; const hideFn = (idx: number) => () => { setPanelVisibility([ @@ -146,37 +155,39 @@ const MPVContainerComponent = ({children, panelStates, classes, ...props}: MPVCo ...panelVisibility.slice(idx+1).map(() => false), ]) }; - const toggleIcon = panelVisibility[idx] - ? - : const panelName = panelStates === undefined ? `Panel ${idx+1}` : (panelStates[idx] && panelStates[idx].name) || `Panel ${idx+1}`; - const toggleVariant = "outlined"; - const toggleTooltip = panelVisibility[idx] - ? '' - :`Show ${panelName} panel`; + const btnVariant = panelVisibility[idx] + ? "contained" + : "outlined"; + const btnTooltip = panelVisibility[idx] + ? `` + :`Open ${panelName} panel`; const panelIsMaximized = panelVisibility[idx] && panelVisibility.filter(e => e).length === 1; - toggles = [ - ...toggles, - - ]; const aPanel = {children[idx]} ; @@ -186,9 +197,10 @@ const MPVContainerComponent = ({children, panelStates, classes, ...props}: MPVCo return - { toggles.map((tgl, idx) => {tgl}) } + { buttons.map((tgl, idx) => {tgl}) } - + setSelectedPanel(-1)}> { panelVisibility.includes(true) ? panels :