1+ import { useState , useEffect } from "react"
12import { SxProps } from "@mui/system"
23import { Box , Stack } from "@mui/material"
34import { styled } from "@mui/material/styles"
@@ -18,15 +19,22 @@ const SecondaryContainer = ({
1819 children ?: React . ReactNode ,
1920 isSM : boolean ,
2021} ) => {
22+ // Disable transitions on initial render to prevent layout shift
23+ const [ enableTransitions , setEnableTransitions ] = useState ( false )
24+ useEffect ( ( ) => {
25+ // Enable transitions after first paint
26+ requestAnimationFrame ( ( ) => setEnableTransitions ( true ) )
27+ } , [ ] )
28+
2129 const sx = { overflow : "hidden" }
2230 return (
2331 < >
2432 < InnerSecondaryContainer
25-
2633 sidebarWidth = { isSM ? sidebarWidth : 0 }
2734 isSidebarOpen = { isSM ? offsetContent : false }
2835 diffWidth = { isSM ? ( diffWidth || 0 ) : 0 }
2936 isDiffOpen = { isSM ? ( offsetDiffContent || false ) : false }
37+ enableTransitions = { enableTransitions }
3038 sx = { { ...sx } }
3139 >
3240 { children }
@@ -43,19 +51,20 @@ interface WrapperStackProps {
4351 readonly isSidebarOpen : boolean
4452 readonly diffWidth : number
4553 readonly isDiffOpen : boolean
54+ readonly enableTransitions : boolean
4655}
4756
4857const WrapperStack = styled ( Stack , {
49- shouldForwardProp : ( prop ) => prop !== "isSidebarOpen" && prop !== "sidebarWidth" && prop !== "diffWidth" && prop !== "isDiffOpen"
50- } ) < WrapperStackProps > ( ( { theme, sidebarWidth, isSidebarOpen, diffWidth, isDiffOpen } ) => {
58+ shouldForwardProp : ( prop ) => prop !== "isSidebarOpen" && prop !== "sidebarWidth" && prop !== "diffWidth" && prop !== "isDiffOpen" && prop !== "enableTransitions"
59+ } ) < WrapperStackProps > ( ( { theme, sidebarWidth, isSidebarOpen, diffWidth, isDiffOpen, enableTransitions } ) => {
5160 return {
52- transition : theme . transitions . create ( [ "margin" , "width" ] , {
61+ transition : enableTransitions ? theme . transitions . create ( [ "margin" , "width" ] , {
5362 easing : theme . transitions . easing . sharp ,
5463 duration : theme . transitions . duration . leavingScreen
55- } ) ,
64+ } ) : "none" ,
5665 marginLeft : isSidebarOpen ? 0 : `-${ sidebarWidth } px` ,
5766 marginRight : isDiffOpen ? 0 : `-${ diffWidth } px` ,
58- ...( ( isSidebarOpen || isDiffOpen ) && {
67+ ...( ( isSidebarOpen || isDiffOpen ) && enableTransitions && {
5968 transition : theme . transitions . create ( [ "margin" , "width" ] , {
6069 easing : theme . transitions . easing . easeOut ,
6170 duration : theme . transitions . duration . enteringScreen ,
@@ -69,13 +78,15 @@ const InnerSecondaryContainer = ({
6978 isSidebarOpen,
7079 diffWidth,
7180 isDiffOpen,
81+ enableTransitions,
7282 children,
7383 sx
7484} : {
7585 sidebarWidth : number
7686 isSidebarOpen : boolean
7787 diffWidth : number
7888 isDiffOpen : boolean
89+ enableTransitions : boolean
7990 children : React . ReactNode
8091 sx ?: SxProps
8192} ) => {
@@ -87,8 +98,9 @@ const InnerSecondaryContainer = ({
8798 isSidebarOpen = { isSidebarOpen }
8899 diffWidth = { diffWidth }
89100 isDiffOpen = { isDiffOpen }
101+ enableTransitions = { enableTransitions }
90102 sx = { { ...sx , width : "100%" , overflowY : "auto" } }
91-
103+
92104 >
93105 < RaisedMainContent >
94106 { children }
0 commit comments