@@ -15,33 +15,27 @@ const ApplicationLayoutContainer = styled.div<{
1515 isSidenavVisible : boolean ;
1616 hasSidenav : boolean ;
1717} > `
18- position: absolute;
19- top: 64px;
20- bottom: 0;
18+ top: 0;
2119 left: 0;
22- right: 0;
23- display: flex;
24- flex-direction: column;
20+ display: grid;
21+ grid-template-rows: auto 1fr;
22+ height: 100vh;
23+ width: 100vw;
24+ position: absolute;
25+ overflow: hidden;
2526
2627 @media (max-width: ${ responsiveSizes . large } rem) {
27- ${ ( props ) => props . hasSidenav && "top: 116px" } ;
2828 ${ ( props ) => props . isSidenavVisible && "overflow: hidden;" }
2929 }
3030` ;
3131
3232const HeaderContainer = styled . div `
33- position: fixed;
34- top: 0;
35- left: 0;
36- right: 0;
33+ width: 100%;
34+ height: fit-content;
3735 z-index: 3;
3836` ;
3937
4038const VisibilityToggle = styled . div `
41- position: fixed;
42- top: 64px;
43- left: 0;
44- right: 0;
4539 box-sizing: border-box;
4640 display: flex;
4741 align-items: center;
@@ -81,16 +75,18 @@ const HamburgerTrigger = styled.button`
8175
8276const BodyContainer = styled . div `
8377 display: flex;
84- flex-direction: row;
85- flex: 1;
78+ width: 100%;
79+ height: 100%;
80+ overflow: hidden;
8681` ;
8782
8883const SidenavContainer = styled . div `
89- position: sticky;
90- top: 64px;
91- display: flex;
92- height: calc(100vh - 64px);
84+ width: fit-content;
85+ min-width: 280px;
86+ height: 100%;
9387 z-index: 1;
88+ position: sticky;
89+ overflow: auto;
9490
9591 @media (max-width: ${ responsiveSizes . large } rem) {
9692 position: absolute;
@@ -101,16 +97,26 @@ const SidenavContainer = styled.div`
10197
10298const MainContainer = styled . div `
10399 display: flex;
100+ flex-grow: 1;
104101 flex-direction: column;
105102 width: 100%;
103+ height: 100%;
104+ position: relative;
105+ overflow: auto;
106+ ` ;
107+
108+ const FooterContainer = styled . div `
109+ height: fit-content;
110+ width: 100%;
106111` ;
107112
108113const MainContentContainer = styled . main `
109- flex: 1;
110- background-color: var(--color-bg-neutral-lightest);
114+ height: 100%;
115+ display: grid;
116+ grid-template-rows: 1fr auto;
111117` ;
112118
113- const Main = ( { children } : AppLayoutMainPropsType ) : JSX . Element => < > { children } </ > ;
119+ const Main = ( { children } : AppLayoutMainPropsType ) : JSX . Element => < div > { children } </ div > ;
114120
115121const DxcApplicationLayout = ( {
116122 visibilityToggleLabel = "" ,
@@ -136,35 +142,44 @@ const DxcApplicationLayout = ({
136142
137143 return (
138144 < ApplicationLayoutContainer hasSidenav = { ! ! sidenav } isSidenavVisible = { isSidenavVisibleResponsive } ref = { ref } >
139- < HeaderContainer > { header ?? < DxcHeader underlined /> } </ HeaderContainer >
140- { sidenav && isResponsive && (
141- < VisibilityToggle >
142- < Tooltip label = { translatedLabels . applicationLayout . visibilityToggleTitle } >
143- < HamburgerTrigger
144- onClick = { handleSidenavVisibility }
145- aria-label = { visibilityToggleLabel ? undefined : translatedLabels . applicationLayout . visibilityToggleTitle }
146- >
147- < DxcIcon icon = "Menu" />
148- { visibilityToggleLabel }
149- </ HamburgerTrigger >
150- </ Tooltip >
151- </ VisibilityToggle >
152- ) }
145+ < HeaderContainer >
146+ { header ?? < DxcHeader underlined /> }
147+ { sidenav && isResponsive && (
148+ < VisibilityToggle >
149+ < Tooltip label = { translatedLabels . applicationLayout . visibilityToggleTitle } >
150+ < HamburgerTrigger
151+ onClick = { handleSidenavVisibility }
152+ aria-label = {
153+ visibilityToggleLabel ? undefined : translatedLabels . applicationLayout . visibilityToggleTitle
154+ }
155+ >
156+ < DxcIcon icon = "Menu" />
157+ { visibilityToggleLabel }
158+ </ HamburgerTrigger >
159+ </ Tooltip >
160+ </ VisibilityToggle >
161+ ) }
162+ </ HeaderContainer >
163+
153164 < BodyContainer >
154165 < SidenavContextProvider value = { setIsSidenavVisibleResponsive } >
155166 { sidenav && ( isResponsive ? isSidenavVisibleResponsive : true ) && (
156167 < SidenavContainer > { sidenav } </ SidenavContainer >
157168 ) }
158169 </ SidenavContextProvider >
159170 < MainContainer >
160- < MainContentContainer > { findChildType ( children , Main ) } </ MainContentContainer >
161- { footer ?? (
162- < DxcFooter
163- copyright = { `© DXC Technology ${ year } . All rights reserved.` }
164- bottomLinks = { bottomLinks }
165- socialLinks = { socialLinks }
166- />
167- ) }
171+ < MainContentContainer >
172+ { findChildType ( children , Main ) }
173+ < FooterContainer >
174+ { footer ?? (
175+ < DxcFooter
176+ copyright = { `© DXC Technology ${ year } . All rights reserved.` }
177+ bottomLinks = { bottomLinks }
178+ socialLinks = { socialLinks }
179+ />
180+ ) }
181+ </ FooterContainer >
182+ </ MainContentContainer >
168183 </ MainContainer >
169184 </ BodyContainer >
170185 </ ApplicationLayoutContainer >
0 commit comments