Skip to content

Commit 754a5ed

Browse files
committed
fix: AWSUI-61442
1 parent 4e4cdd5 commit 754a5ed

File tree

3 files changed

+104
-48
lines changed

3 files changed

+104
-48
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
import { getContentStyles, getFooterStyles, getHeaderStyles, getMediaStyles, getRootStyles } from '../style';
4+
5+
jest.mock('../../internal/environment', () => ({
6+
SYSTEM: 'core',
7+
}));
8+
9+
describe('Container style utilities', () => {
10+
afterEach(() => {
11+
jest.resetModules();
12+
});
13+
14+
test('getRootStyles returns empty object when style is undefined', () => {
15+
expect(getRootStyles(undefined)).toEqual({});
16+
});
17+
18+
test('getContentStyles returns empty object when style is undefined', () => {
19+
expect(getContentStyles(undefined)).toEqual({});
20+
});
21+
22+
test('getHeaderStyles returns empty object when style is undefined', () => {
23+
expect(getHeaderStyles(undefined)).toEqual({});
24+
});
25+
26+
test('getFooterStyles returns empty object when style is undefined', () => {
27+
expect(getFooterStyles(undefined)).toEqual({});
28+
});
29+
30+
test('getMediaStyles returns border radius properties when style is undefined', () => {
31+
expect(getMediaStyles('top', undefined)).toEqual({
32+
borderEndEndRadius: '0px',
33+
borderEndStartRadius: '0px',
34+
});
35+
});
36+
37+
test('returns empty object when SYSTEM is not core', async () => {
38+
jest.resetModules();
39+
jest.doMock('../../internal/environment', () => ({
40+
SYSTEM: 'visual-refresh',
41+
}));
42+
43+
const styleModule = await import('../style');
44+
const style = { root: { background: 'red' } };
45+
46+
expect(styleModule.getRootStyles(style)).toEqual({});
47+
expect(styleModule.getContentStyles(style)).toEqual({});
48+
expect(styleModule.getHeaderStyles(style)).toEqual({});
49+
expect(styleModule.getFooterStyles(style)).toEqual({});
50+
expect(styleModule.getMediaStyles('top', style)).toEqual({});
51+
});
52+
});

src/container/style.tsx

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,74 +4,74 @@ import { SYSTEM } from '../internal/environment';
44
import { ContainerProps } from './interfaces';
55

66
export function getRootStyles(style: ContainerProps.Style | undefined) {
7-
let properties = {};
8-
9-
if (SYSTEM === 'core' && style?.root) {
10-
properties = {
11-
background: style.root?.background,
12-
borderColor: style.root?.borderColor,
13-
borderRadius: style.root?.borderRadius,
14-
borderWidth: style.root?.borderWidth,
15-
boxShadow: style.root?.boxShadow,
16-
};
7+
if (SYSTEM !== 'core') {
8+
return {};
179
}
1810

19-
return properties;
11+
const properties = {
12+
background: style?.root?.background,
13+
borderColor: style?.root?.borderColor,
14+
borderRadius: style?.root?.borderRadius,
15+
borderWidth: style?.root?.borderWidth,
16+
boxShadow: style?.root?.boxShadow,
17+
};
18+
19+
return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
2020
}
2121

2222
export function getContentStyles(style: ContainerProps.Style | undefined) {
23-
let properties = {};
24-
25-
if (SYSTEM === 'core' && style?.content) {
26-
properties = {
27-
paddingBlock: style.content?.paddingBlock,
28-
paddingInline: style.content?.paddingInline,
29-
};
23+
if (SYSTEM !== 'core') {
24+
return {};
3025
}
3126

32-
return properties;
27+
const properties = {
28+
paddingBlock: style?.content?.paddingBlock,
29+
paddingInline: style?.content?.paddingInline,
30+
};
31+
32+
return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
3333
}
3434

3535
export function getHeaderStyles(style: ContainerProps.Style | undefined) {
36-
let properties = {};
37-
38-
if (SYSTEM === 'core' && style?.header) {
39-
properties = {
40-
...(style?.root?.background && { background: style?.root?.background }),
41-
...(style?.root?.borderRadius && { background: style?.root?.borderRadius }),
42-
paddingBlock: style.header?.paddingBlock,
43-
paddingInline: style.header?.paddingInline,
44-
};
36+
if (SYSTEM !== 'core') {
37+
return {};
4538
}
4639

47-
return properties;
40+
const properties = {
41+
background: style?.root?.background,
42+
borderRadius: style?.root?.borderRadius,
43+
paddingBlock: style?.header?.paddingBlock,
44+
paddingInline: style?.header?.paddingInline,
45+
};
46+
47+
return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
4848
}
4949

5050
export function getFooterStyles(style: ContainerProps.Style | undefined) {
51-
let properties = {};
52-
53-
if (SYSTEM === 'core' && style?.footer) {
54-
properties = {
55-
borderColor: style.footer?.divider?.borderColor,
56-
borderWidth: style.footer?.divider?.borderWidth,
57-
paddingBlock: style.footer?.root?.paddingBlock,
58-
paddingInline: style.footer?.root?.paddingInline,
59-
};
51+
if (SYSTEM !== 'core') {
52+
return {};
6053
}
6154

62-
return properties;
55+
const properties = {
56+
borderColor: style?.footer?.divider?.borderColor,
57+
borderWidth: style?.footer?.divider?.borderWidth,
58+
paddingBlock: style?.footer?.root?.paddingBlock,
59+
paddingInline: style?.footer?.root?.paddingInline,
60+
};
61+
62+
return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
6363
}
6464

6565
export function getMediaStyles(mediaPosition: string, style: ContainerProps.Style | undefined) {
66-
let properties = {};
67-
68-
if (SYSTEM === 'core' && style?.root?.borderRadius) {
69-
properties = {
70-
borderRadius: style?.root?.borderRadius,
71-
...(mediaPosition === 'top' && { borderEndStartRadius: '0px', borderEndEndRadius: '0px' }),
72-
...(mediaPosition === 'side' && { borderStartEndRadius: '0px', borderEndEndRadius: '0px' }),
73-
};
66+
if (SYSTEM !== 'core') {
67+
return {};
7468
}
7569

76-
return properties;
70+
const properties = {
71+
borderRadius: style?.root?.borderRadius,
72+
...(mediaPosition === 'top' && { borderEndStartRadius: '0px', borderEndEndRadius: '0px' }),
73+
...(mediaPosition === 'side' && { borderStartEndRadius: '0px', borderEndEndRadius: '0px' }),
74+
};
75+
76+
return Object.fromEntries(Object.entries(properties).filter(([, value]) => value !== undefined));
7777
}

src/container/styles.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
word-wrap: break-word;
1313
position: relative;
1414

15+
// Necessary, because rounded borders cause the header to overflow. Since the
16+
// header has a background color, the edges of the header stick out.
17+
overflow: hidden;
18+
1519
&.fit-height {
1620
display: flex;
1721
flex-direction: column;

0 commit comments

Comments
 (0)