{
+ updatePanelOpen(prev => !prev);
+ }}
+ data-cy={`side-panel-header-${side}`}
+ >
+
+
+ );
+ };
+
+ const getTabGridComponent = () => {
+ const numCols = getNumGridColumns(tabs.length);
+
+ return (
+
+ {getCloseIcon()}
+ {tabs.length === 1 ? getOneTabComponent() : getTabGridComponent()}
+
+ );
+ };
+
return (
{panelOpen ? (
-
- {/** Panel Header with Arrow and Close Actions */}
- {
- updatePanelOpen(prev => !prev);
- // slideToActivePanel();
- }}
- data-cy={`side-panel-header-${side}`}
- >
- {/* TODO This should be redesigned to not be a button. */}
-
-
- {/* Todo: ass secondary label here */}
-
- {tabs.length === 1 && (t(tabs[activeTabIndex].label) as string)}
-
-
-
- {tabs.length > 1 &&
- _getMoreThanOneTabLayout(
- swiperRef,
- setSwiper,
- prevRef,
- nextRef,
- tabs,
- activeTabIndex,
- updateActiveTabIndex
- )}
- {/** carousel navigation with the arrows */}
- {/** only show carousel nav if tabs are more than 3 tabs */}
- {tabs.length > 3 && (
-
-
-
-
-
-
-
-
- )}
+ <>
+ {getOpenStateComponent()}
-
+ >
) : (
{getCloseStateComponent()}
)}
@@ -282,10 +338,10 @@ const SidePanel = ({
SidePanel.defaultProps = {
defaultComponentOpen: null,
+ activeTabIndex: null, // the default is to close the side panel
};
SidePanel.propTypes = {
- servicesManager: PropTypes.instanceOf(ServicesManager),
side: PropTypes.oneOf(['left', 'right']).isRequired,
className: PropTypes.string,
activeTabIndex: PropTypes.number,
@@ -300,74 +356,7 @@ SidePanel.propTypes = {
})
),
]),
+ onOpen: PropTypes.func,
};
-function _getMoreThanOneTabLayout(
- swiperRef: any,
- setSwiper: React.Dispatch
,
- prevRef: React.MutableRefObject,
- nextRef: React.MutableRefObject,
- tabs: any,
- activeTabIndex: any,
- updateActiveTabIndex
-) {
- return (
-
-
-
{
- swiperRef.current = core.el;
- }}
- simulateTouch={false}
- modules={[Navigation, Pagination, Scrollbar, A11y, Controller]}
- slidesPerView={3}
- spaceBetween={5}
- onSwiper={swiper => setSwiper(swiper)}
- navigation={{
- prevEl: prevRef?.current,
- nextEl: nextRef?.current,
- }}
- >
- {tabs.map((obj, index) => (
-
- {
- updateActiveTabIndex(index);
- }}
- data-cy={`${obj.name}-btn`}
- >
-
-
-
-
- {obj.label}
-
-
-
- ))}
-
-
-
- );
-}
-
export default SidePanel;
diff --git a/platform/ui/src/components/SidePanel/__stories__/sidePanel.stories.mdx b/platform/ui/src/components/SidePanel/__stories__/sidePanel.stories.mdx
index de76417c0..b73737d78 100644
--- a/platform/ui/src/components/SidePanel/__stories__/sidePanel.stories.mdx
+++ b/platform/ui/src/components/SidePanel/__stories__/sidePanel.stories.mdx
@@ -38,6 +38,7 @@ SidePanel is a component that renders the SidePanels.
args={{
side: 'left',
defaultComponentOpen: 'Example',
+ activeTabIndex: 0,
tabs: [
{
id: 'tab1',
diff --git a/platform/ui/src/components/index.js b/platform/ui/src/components/index.js
index a3ac5110e..b51bc92cf 100644
--- a/platform/ui/src/components/index.js
+++ b/platform/ui/src/components/index.js
@@ -74,6 +74,7 @@ import LoadingIndicatorProgress from './LoadingIndicatorProgress';
import LoadingIndicatorTotalPercent from './LoadingIndicatorTotalPercent';
import ViewportActionBar from './ViewportActionBar';
import ProgressLoadingBar from './ProgressLoadingBar';
+import LegacySidePanel from './LegacySidePanel';
import PanelSection from './PanelSection';
import AdvancedToolbox from './AdvancedToolbox';
import InputDoubleRange from './InputDoubleRange';
@@ -117,6 +118,7 @@ export {
LegacyButton,
LegacyButtonGroup,
LegacyCinePlayer,
+ LegacySidePanel,
LegacyViewportActionBar,
LoadingIndicatorProgress,
LoadingIndicatorTotalPercent,
diff --git a/platform/ui/src/index.js b/platform/ui/src/index.js
index 59a5615b9..1acacefd1 100644
--- a/platform/ui/src/index.js
+++ b/platform/ui/src/index.js
@@ -71,6 +71,7 @@ export {
LegacyButton,
LegacyButtonGroup,
LegacyCinePlayer,
+ LegacySidePanel,
LegacyViewportActionBar,
LoadingIndicatorProgress,
LoadingIndicatorTotalPercent,
diff --git a/platform/ui/src/views/Viewer/Viewer.js b/platform/ui/src/views/Viewer/Viewer.js
index ccc29b85d..3d050e852 100644
--- a/platform/ui/src/views/Viewer/Viewer.js
+++ b/platform/ui/src/views/Viewer/Viewer.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { SidePanel, StudyBrowser } from '../../components';
+import { LegacySidePanel, StudyBrowser } from '../../components';
import { DragAndDropProvider } from '../../contextProviders';
import Header from './components/Header';
@@ -13,7 +13,7 @@ const Viewer = () => {
className="flex w-full flex-1 flex-row flex-nowrap items-stretch overflow-hidden"
style={{ height: 'calc(100vh - 52px' }}
>
- {
defaultIsOpen={true}
>
-
+
- {
defaultIsOpen={false}
>
panel placeholder
-
+
diff --git a/yarn.lock b/yarn.lock
index c9044b25a..15b093d12 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1523,6 +1523,16 @@
gl-matrix "^3.4.3"
lodash.clonedeep "4.5.0"
+"@cornerstonejs/core@^1.16.6":
+ version "1.16.6"
+ resolved "https://registry.yarnpkg.com/@cornerstonejs/core/-/core-1.16.6.tgz#a216fc655f3c4b110196e63dcf129e02839d0890"
+ integrity sha512-ysd+t2N2KVk88TLYg0Nx174uYd47wQRBdFQZ4ApHhI/IHq5lY/qrP8prrtLR/DEtyLyUERIxDyGFRr+lEBZpxg==
+ dependencies:
+ "@kitware/vtk.js" "27.3.1"
+ detect-gpu "^5.0.22"
+ gl-matrix "^3.4.3"
+ lodash.clonedeep "4.5.0"
+
"@cornerstonejs/dicom-image-loader@^1.16.5":
version "1.16.5"
resolved "https://registry.yarnpkg.com/@cornerstonejs/dicom-image-loader/-/dicom-image-loader-1.16.5.tgz#23ca3e27e29b88cd05840c777578b37de60e5b87"
@@ -1544,6 +1554,15 @@
dependencies:
"@cornerstonejs/core" "^1.16.5"
+"@cornerstonejs/tools@^1.16.4":
+ version "1.16.6"
+ resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-1.16.6.tgz#0debc17fb9830288bff263bbf3a34cb940b726c2"
+ integrity sha512-qLjtEC0OGW+bpvvKXQPQs8TEE/ze+NIiBbg1qBSXo2vm7O3YO1DRWbWthJMVL7tIWYuVxZx5OsAI2WOkydQUOA==
+ dependencies:
+ "@cornerstonejs/core" "^1.16.6"
+ lodash.clonedeep "4.5.0"
+ lodash.get "^4.4.2"
+
"@cornerstonejs/tools@^1.16.5":
version "1.16.5"
resolved "https://registry.yarnpkg.com/@cornerstonejs/tools/-/tools-1.16.5.tgz#79948216521c591a02f395e2130d72e0b9347eca"