fix(panels): Allow for setting the initial and minimum expanded widths of each side panel. (#5207)

This commit is contained in:
Joe Boccanfuso 2025-07-14 11:50:27 -04:00 committed by GitHub
parent 1f33b291b9
commit 545411137c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 59 additions and 34 deletions

View File

@ -1,6 +1,6 @@
import { useState, useCallback, useLayoutEffect, useRef } from 'react'; import { useState, useCallback, useLayoutEffect, useRef } from 'react';
import { getPanelElement, getPanelGroupElement } from 'react-resizable-panels'; import { getPanelElement, getPanelGroupElement } from 'react-resizable-panels';
import { panelGroupDefinition } from './constants/panels'; import { getPanelGroupDefinition } from './constants/panels';
/** /**
* Set the minimum and maximum css style width attributes for the given element. * Set the minimum and maximum css style width attributes for the given element.
@ -30,8 +30,21 @@ const useResizablePanels = (
rightPanelClosed, rightPanelClosed,
setRightPanelClosed, setRightPanelClosed,
hasLeftPanels, hasLeftPanels,
hasRightPanels hasRightPanels,
leftPanelInitialExpandedWidth,
rightPanelInitialExpandedWidth,
leftPanelMinimumExpandedWidth,
rightPanelMinimumExpandedWidth
) => { ) => {
const [panelGroupDefinition] = useState(
getPanelGroupDefinition({
leftPanelInitialExpandedWidth,
rightPanelInitialExpandedWidth,
leftPanelMinimumExpandedWidth,
rightPanelMinimumExpandedWidth,
})
);
const [leftPanelExpandedWidth, setLeftPanelExpandedWidth] = useState( const [leftPanelExpandedWidth, setLeftPanelExpandedWidth] = useState(
panelGroupDefinition.left.initialExpandedWidth panelGroupDefinition.left.initialExpandedWidth
); );

View File

@ -3,10 +3,13 @@ const collapsedInsideBorderSize = 4;
const collapsedOutsideBorderSize = 4; const collapsedOutsideBorderSize = 4;
const collapsedWidth = 25; const collapsedWidth = 25;
const rightPanelInitialExpandedWidth = 280; const getPanelGroupDefinition = ({
const leftPanelInitialExpandedWidth = 282; leftPanelInitialExpandedWidth = 282,
rightPanelInitialExpandedWidth = 280,
const panelGroupDefinition = { leftPanelMinimumExpandedWidth = 145,
rightPanelMinimumExpandedWidth = 280,
}) => {
return {
groupId: 'viewerLayoutResizablePanelGroup', groupId: 'viewerLayoutResizablePanelGroup',
shared: { shared: {
expandedInsideBorderSize, expandedInsideBorderSize,
@ -20,7 +23,7 @@ const panelGroupDefinition = {
// expanded width // expanded width
initialExpandedWidth: leftPanelInitialExpandedWidth, initialExpandedWidth: leftPanelInitialExpandedWidth,
// expanded width + expanded inside border // expanded width + expanded inside border
minimumExpandedOffsetWidth: 145 + expandedInsideBorderSize, minimumExpandedOffsetWidth: leftPanelMinimumExpandedWidth + expandedInsideBorderSize,
// initial expanded width // initial expanded width
initialExpandedOffsetWidth: leftPanelInitialExpandedWidth + expandedInsideBorderSize, initialExpandedOffsetWidth: leftPanelInitialExpandedWidth + expandedInsideBorderSize,
// collapsed width + collapsed inside border + collapsed outside border // collapsed width + collapsed inside border + collapsed outside border
@ -29,10 +32,11 @@ const panelGroupDefinition = {
right: { right: {
panelId: 'viewerLayoutResizableRightPanel', panelId: 'viewerLayoutResizableRightPanel',
initialExpandedWidth: rightPanelInitialExpandedWidth, initialExpandedWidth: rightPanelInitialExpandedWidth,
minimumExpandedOffsetWidth: rightPanelInitialExpandedWidth + expandedInsideBorderSize, minimumExpandedOffsetWidth: rightPanelMinimumExpandedWidth + expandedInsideBorderSize,
initialExpandedOffsetWidth: rightPanelInitialExpandedWidth + expandedInsideBorderSize, initialExpandedOffsetWidth: rightPanelInitialExpandedWidth + expandedInsideBorderSize,
collapsedOffsetWidth: collapsedWidth + collapsedInsideBorderSize + collapsedOutsideBorderSize, collapsedOffsetWidth: collapsedWidth + collapsedInsideBorderSize + collapsedOutsideBorderSize,
}, },
}; };
};
export { panelGroupDefinition }; export { getPanelGroupDefinition };

View File

@ -24,6 +24,10 @@ function ViewerLayout({
rightPanelClosed = false, rightPanelClosed = false,
leftPanelResizable = false, leftPanelResizable = false,
rightPanelResizable = false, rightPanelResizable = false,
leftPanelInitialExpandedWidth,
rightPanelInitialExpandedWidth,
leftPanelMinimumExpandedWidth,
rightPanelMinimumExpandedWidth,
}: withAppTypes): React.FunctionComponent { }: withAppTypes): React.FunctionComponent {
const [appConfig] = useAppConfig(); const [appConfig] = useAppConfig();
@ -54,7 +58,11 @@ function ViewerLayout({
rightPanelClosed, rightPanelClosed,
setRightPanelClosed, setRightPanelClosed,
hasLeftPanels, hasLeftPanels,
hasRightPanels hasRightPanels,
leftPanelInitialExpandedWidth,
rightPanelInitialExpandedWidth,
leftPanelMinimumExpandedWidth,
rightPanelMinimumExpandedWidth
); );
const handleMouseEnter = () => { const handleMouseEnter = () => {