Skip to content

Commit bd1c8db

Browse files
authored
Merge pull request #827 from dxc-technology/jialecl-responsiveness
[Major] New breakpoint values
2 parents d3a28b6 + 365e4ab commit bd1c8db

File tree

6 files changed

+96
-99
lines changed

6 files changed

+96
-99
lines changed

projects/dxc-ngx-cdk/src/lib/dxc-application-layout/dxc-application-layout-sidenav/dxc-application-layout-sidenav.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
</div>
55
<div
66
tabindex="0"
7-
*ngIf="displayArrow || isResponsive"
7+
*ngIf="showArrow"
88
class="sidenavArrow"
99
(keydown)="arrowKey($event)"
1010
(click)="arrowClicked()"

projects/dxc-ngx-cdk/src/lib/dxc-application-layout/dxc-application-layout-sidenav/dxc-application-layout-sidenav.component.ts

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
5252
}
5353
_displayArrow = true;
5454

55+
showArrow: boolean;
56+
5557
firstClick: boolean = false; //remove animation on first load
56-
innerWidth;
5758
isResponsive = true;
5859
isShown: boolean;
5960

@@ -72,7 +73,7 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
7273
) {}
7374

7475
@HostListener("window:resize", ["$event"])
75-
onResize(event) {
76+
onResize() {
7677
this.updateCss();
7778
}
7879

@@ -81,7 +82,6 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
8182
this.sidenavStyles = `${this.getDynamicStyle({
8283
...this.defaultInputs.getValue(),
8384
mode: this.mode,
84-
innerWidth: this.innerWidth,
8585
isResponsive: this.isResponsive,
8686
isShown: this.isShown,
8787
})}`;
@@ -114,23 +114,16 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
114114
}
115115

116116
updateState() {
117-
this.innerWidth = window.innerWidth;
118117
this.sidenavService.setPushMode(this.mode === "push");
119-
if (this.innerWidth <= responsiveSizes.tablet) {
120-
this.isResponsive = true;
121-
if (!this.displayArrow) {
122-
this.displayArrow = true;
123-
}
124-
} else {
125-
this.isResponsive = false;
126-
if (!this.displayArrow && !this.isShown) {
127-
this.isShown = true;
128-
}
118+
this.isResponsive = window.matchMedia(`(max-width: ${responsiveSizes.medium}rem)`).matches;
119+
this.isResponsive ? this.showArrow = true : this.showArrow = this.displayArrow;
120+
if (!this.isResponsive && !this.displayArrow && !this.isShown) {
121+
this.isShown = true;
129122
}
130123
this.isShown =
131124
this.isShown !== undefined
132125
? this.isShown
133-
: this.innerWidth <= responsiveSizes.tablet
126+
: this.isResponsive
134127
? false
135128
: true;
136129
this.sidenavService.showMenu(this.isShown);
@@ -141,7 +134,6 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
141134
this.sidenavStyles = `${this.getDynamicStyle({
142135
...this.defaultInputs.getValue(),
143136
mode: this.mode,
144-
innerWidth: this.innerWidth,
145137
isResponsive: this.isResponsive,
146138
isShown: this.isShown,
147139
})}`;
@@ -151,10 +143,10 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
151143
return css`
152144
z-index: 400;
153145
position: ${(inputs.mode === "overlay" && this.displayArrow) ||
154-
inputs.isResponsive
146+
this.isResponsive
155147
? "absolute"
156148
: "relative"};
157-
height: ${inputs.mode === "overlay" || inputs.isResponsive ? "100%" : ""};
149+
height: ${inputs.mode === "overlay" || this.isResponsive ? "100%" : ""};
158150
.sidenavContainerClass {
159151
background-color: var(--sidenav-backgroundColor);
160152
display: flex;
@@ -192,7 +184,7 @@ export class DxcApplicationLayoutSidenavComponent implements OnInit, OnChanges {
192184
}
193185
}
194186
.sidenavArrow {
195-
visibility: ${!this.displayArrow ? "hidden" : "visible"};
187+
visibility: ${!this.showArrow ? "hidden" : "visible"};
196188
width: 42px;
197189
height: 42px;
198190
background-color: var(--sidenav-arrowContainerColor);

projects/dxc-ngx-cdk/src/lib/dxc-footer/dxc-footer.component.ts

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ export class DxcFooterComponent implements OnChanges {
7676

7777
defaultImglogo: string;
7878
innerWidth: number;
79-
isResponsive: boolean;
8079
bottomLinksLength: number;
8180
currentBackgroundColor: string;
8281

@@ -90,16 +89,6 @@ export class DxcFooterComponent implements OnChanges {
9089
tabIndexValue: 0,
9190
});
9291

93-
@HostListener("window:resize", ["$event"])
94-
onResize(event) {
95-
this.innerWidth = event.target.innerWidth;
96-
if (this.innerWidth <= responsiveSizes.tablet) {
97-
this.isResponsive = true;
98-
} else {
99-
this.isResponsive = false;
100-
}
101-
this.footerFooterStyle = `${this.setFooterFooterStyle(this.isResponsive)}`;
102-
}
10392

10493
// Styling
10594
footerContainerStyle: string;
@@ -152,16 +141,8 @@ export class DxcFooterComponent implements OnChanges {
152141
this.childComponentsStyle = `${this.setChildComponentsStyle(
153142
this.defaultInputs.getValue()
154143
)}`;
155-
if (this.innerWidth <= responsiveSizes.tablet) {
156-
this.isResponsive = true;
157-
} else {
158-
this.isResponsive = false;
159-
}
160-
this.footerContainerStyle = `${this.setFooterContainerStyle(
161-
this.defaultInputs.getValue(),
162-
this.isResponsive
163-
)}`;
164-
this.footerFooterStyle = `${this.setFooterFooterStyle(this.isResponsive)}`;
144+
145+
this.footerFooterStyle = `${this.setFooterFooterStyle()}`;
165146
if (this.bottomLinks) {
166147
this.bottomLinksLength = this.bottomLinks.length - 1;
167148
}
@@ -174,13 +155,12 @@ export class DxcFooterComponent implements OnChanges {
174155
}, {});
175156
this.defaultInputs.next({ ...this.defaultInputs.getValue(), ...inputs });
176157
this.footerContainerStyle = `${this.setFooterContainerStyle(
177-
this.defaultInputs.getValue(),
178-
this.isResponsive
158+
this.defaultInputs.getValue()
179159
)}`;
180160
this.childComponentsStyle = `${this.setChildComponentsStyle(
181161
this.defaultInputs.getValue()
182162
)}`;
183-
this.footerFooterStyle = `${this.setFooterFooterStyle(this.isResponsive)}`;
163+
this.footerFooterStyle = `${this.setFooterFooterStyle()}`;
184164
if (this.bottomLinks) {
185165
this.bottomLinksLength = this.bottomLinks.length - 1;
186166
}
@@ -190,9 +170,15 @@ export class DxcFooterComponent implements OnChanges {
190170
return document.body.getAttribute("footer-logo");
191171
}
192172

193-
setFooterContainerStyle(input: any, responsive: boolean) {
173+
setFooterContainerStyle(input: any) {
194174
return css`
195-
padding: ${responsive ? "20px" : "24px 36px"};
175+
@media (min-width: ${responsiveSizes.small}rem) {
176+
padding: 24px 36px 24px 36px;
177+
}
178+
179+
@media (max-width: ${responsiveSizes.small}rem) {
180+
padding: 20px;
181+
}
196182
background-color: var(--footer-backgroundColor);
197183
${this.utils.getTopMargin(input.margin)}
198184
width: 100%;
@@ -212,12 +198,19 @@ export class DxcFooterComponent implements OnChanges {
212198
`;
213199
}
214200

215-
setFooterFooterStyle(responsive: boolean) {
201+
setFooterFooterStyle() {
216202
return css`
217203
display: flex;
218204
justify-content: space-between;
219-
flex-direction: ${responsive ? "column" : "row"};
220-
align-items: ${responsive ? "center" : "flex-end"};
205+
@media (min-width: ${responsiveSizes.small}rem) {
206+
flex-direction: row;
207+
align-items: flex-end;
208+
}
209+
210+
@media (max-width: ${responsiveSizes.small}rem) {
211+
flex-direction: column;
212+
align-items: center;
213+
}
221214
border-top: var(--footer-bottomLinksDividerThickness)
222215
var(--footer-bottomLinksDividerStyle)
223216
var(--footer-bottomLinksDividerColor);
@@ -228,19 +221,33 @@ export class DxcFooterComponent implements OnChanges {
228221
font-style: var(--footer-copyrightFontStyle);
229222
font-size: var(--footer-copyrightFontSize);
230223
font-weight: var(--footer-copyrightFontWeight);
231-
max-width: ${responsive ? "100%" : "40%"};
232-
width: ${responsive ? "100%" : "40%"};
233-
text-align: ${responsive ? "center" : "right"};
224+
@media (min-width: ${responsiveSizes.small}rem) {
225+
max-width: 40%;
226+
text-align: right;
227+
}
228+
229+
@media (max-width: ${responsiveSizes.small}rem) {
230+
max-width: 100%;
231+
width: 100%;
232+
text-align: left;
233+
}
234234
}
235235
236236
.bottomLinksStyle {
237237
padding-top: var(--footer-bottomLinksDividerSpacing);
238238
display: inline-flex;
239239
flex-wrap: wrap;
240-
max-width: ${responsive ? "100%" : "60%"};
241-
width: ${responsive ? "100%" : "auto"};
242-
text-align: ${responsive ? "center" : ""};
243-
margin: ${responsive ? "40px 0 40px 0" : ""};
240+
@media (min-width: ${responsiveSizes.small}rem) {
241+
max-width: 60%;
242+
}
243+
244+
@media (max-width: ${responsiveSizes.small}rem) {
245+
max-width: 100%;
246+
width: 100%;
247+
text-align: center;
248+
margin: 40px 0 40px 0;
249+
}
250+
244251
color: var(--footer-bottomLinksFontColor);
245252
.point {
246253
margin: 0px 10px;

projects/dxc-ngx-cdk/src/lib/dxc-header/dxc-header.component.spec.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ TestBed.initTestEnvironment(
1717
);
1818

1919
describe("DxcHeader tests", () => {
20+
beforeAll(() => {
21+
Object.defineProperty(window, "matchMedia", {
22+
writable: true,
23+
value: jest.fn().mockImplementation(() => ({
24+
matches: false,
25+
})),
26+
});
27+
});
28+
2029
test("should render dxc-header", async () => {
2130
await render(`<dxc-header></dxc-header>`, {
2231
imports: [PipesModule, BackgroundProviderInnerModule],
@@ -42,6 +51,12 @@ describe("DxcHeader tests", () => {
4251
configurable: true,
4352
value: 375,
4453
});
54+
Object.defineProperty(window, "matchMedia", {
55+
writable: true,
56+
value: jest.fn().mockImplementation(() => ({
57+
matches: true,
58+
})),
59+
});
4560
TestBed.overrideComponent(DxcHeaderComponent, {
4661
set: { selector: "header" },
4762
});

projects/dxc-ngx-cdk/src/lib/dxc-header/dxc-header.component.ts

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,6 @@ export class DxcHeaderComponent implements OnChanges {
8383

8484
isResponsive = false;
8585
isMenuVisible = false;
86-
innerWidth;
87-
innerHeight;
8886
responsiveMenu: string;
8987
isClickDefined = false;
9088

@@ -99,14 +97,10 @@ export class DxcHeaderComponent implements OnChanges {
9997
padding: null,
10098
});
10199

102-
@HostListener("window:resize", ["$event"])
103-
onResize(event) {
104-
this.innerWidth = event.target.innerWidth;
105-
this.innerHeight = event.target.innerHeight;
106-
if (this.innerWidth <= responsiveSizes.tablet) {
107-
this.isResponsive = true;
108-
} else {
109-
this.isResponsive = false;
100+
@HostListener('window:resize', ['$event'])
101+
onResize() {
102+
this.isResponsive = window.matchMedia(`(max-width: ${responsiveSizes.medium}rem)`).matches;
103+
if(!this.isResponsive) {
110104
this.isMenuVisible = false;
111105
}
112106
this.updateCss();
@@ -115,40 +109,26 @@ export class DxcHeaderComponent implements OnChanges {
115109
constructor(private utils: CssUtils, private elRef: ElementRef) {}
116110

117111
updateCss() {
118-
if (this.isMenuVisible) {
119-
this.elRef.nativeElement.ownerDocument.body.style.overflow = "hidden";
120-
} else {
121-
this.elRef.nativeElement.ownerDocument.body.style.overflow = null;
122-
}
112+
123113
this.currentBackgroundColor = this.utils.readProperty(
124114
"--header-backgroundColor"
125115
);
126116
this.className = `${this.getDynamicStyle({
127117
...this.defaultInputs.getValue(),
128118
isMenuVisible: this.isMenuVisible,
129-
isResponsive: this.isResponsive,
130-
innerWidth: this.innerWidth,
131-
innerHeight: this.innerHeight,
119+
isResponsive: this.isResponsive
132120
})}`;
133121

134122
this.responsiveMenu = `${this.getResponsiveMenuStyle({
135123
...this.defaultInputs.getValue(),
136124
isMenuVisible: this.isMenuVisible,
137-
isResponsive: this.isResponsive,
138-
innerWidth: this.innerWidth,
139-
innerHeight: this.innerHeight,
125+
isResponsive: this.isResponsive
140126
})}`;
141127
}
142128

143129
public ngOnInit() {
144130
this.isClickDefined = this.onClick.observers?.length > 0;
145-
this.innerWidth = window.innerWidth;
146-
this.innerHeight = window.innerHeight;
147-
if (this.innerWidth <= responsiveSizes.tablet && !this.isResponsive) {
148-
this.isResponsive = true;
149-
} else {
150-
this.isResponsive = false;
151-
}
131+
this.isResponsive = window.matchMedia(`(max-width: ${responsiveSizes.medium}rem)`).matches;
152132
this.updateCss();
153133
}
154134

@@ -298,12 +278,12 @@ export class DxcHeaderComponent implements OnChanges {
298278
top: 0;
299279
left: 0;
300280
width: 100vw;
301-
height: ${inputs.innerHeight}px;
281+
height: 100vh;
302282
background-color: var(--header-overlayColor);
303283
opacity: var(--header-overlayOpacity) !important;
304-
display: ${inputs.innerWidth <= responsiveSizes.mobileLarge
305-
? "none"
306-
: ""};
284+
@media (max-width: ${responsiveSizes.small}rem) {
285+
display: none;
286+
}
307287
transition: opacity 0.2s 0.2s ease-in-out;
308288
z-index: var(--header-overlayZindex);
309289
}
@@ -322,11 +302,15 @@ export class DxcHeaderComponent implements OnChanges {
322302
right: 0;
323303
z-index: var(--header-menuZindex);
324304
325-
width: ${inputs.innerWidth <= responsiveSizes.laptop &&
326-
inputs.innerWidth > responsiveSizes.mobileLarge
327-
? "var(--header-menuTabletWidth)"
328-
: "var(--header-menuMobileWidth)"};
329-
height: ${inputs.innerHeight}px;
305+
306+
@media (max-width: ${responsiveSizes.large}rem) and (min-width: ${responsiveSizes.small}rem) {
307+
width: "var(--header-menuTabletWidth)";
308+
}
309+
@media not((max-width: ${responsiveSizes.large}rem) and (min-width: ${responsiveSizes.small}rem)) {
310+
width: "var(--header-menuMobileWidth)"};
311+
}
312+
313+
height: 100vh;
330314
padding: 20px;
331315
332316
${this.checkMenuVisible(inputs.isMenuVisible)}

projects/dxc-ngx-cdk/src/lib/variables.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ export const colors = {
2626
};
2727

2828
export const responsiveSizes = {
29-
mobileSmall: 320,
30-
mobileMedium: 375,
31-
mobileLarge: 425,
32-
tablet: 768,
33-
laptop: 1024,
34-
desktop: 1440
29+
xsmall: "20",
30+
small: "30",
31+
medium: "45",
32+
large: "66",
33+
xlarge: "90",
3534
}

0 commit comments

Comments
 (0)