Skip to content

Commit 2e98c65

Browse files
authored
feat(AsideHeader): add headerDecoration prop (#49)
1 parent 092b6c4 commit 2e98c65

File tree

3 files changed

+37
-13
lines changed

3 files changed

+37
-13
lines changed

src/components/AsideHeader/AsideHeader.scss

+15-10
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,6 @@ $block: '.#{variables.$ns}aside-header';
7474
position: relative;
7575
z-index: 2;
7676
user-select: none;
77-
background: linear-gradient(
78-
180deg,
79-
var(--aside-header-background-color) calc(var(--gradient-height) * 0.33),
80-
transparent calc(var(--gradient-height) * 0.88)
81-
);
8277

8378
&::after {
8479
position: absolute;
@@ -94,6 +89,14 @@ $block: '.#{variables.$ns}aside-header';
9489
margin: 8px 0;
9590
}
9691
}
92+
93+
&-content_with-decoration {
94+
background: linear-gradient(
95+
180deg,
96+
var(--aside-header-background-color) calc(var(--gradient-height) * 0.33),
97+
transparent calc(var(--gradient-height) * 0.88)
98+
);
99+
}
97100
}
98101

99102
&_compact &__aside {
@@ -122,7 +125,7 @@ $block: '.#{variables.$ns}aside-header';
122125
color: var(--aside-header-background-color);
123126
}
124127

125-
&::before {
128+
&_with-decoration::before {
126129
position: absolute;
127130
top: 0;
128131
left: 0;
@@ -150,14 +153,16 @@ $block: '.#{variables.$ns}aside-header';
150153
&::before {
151154
display: block;
152155
}
156+
}
153157

154-
&::after {
155-
display: none;
156-
}
157-
158+
&_compact &__header_with-decoration {
158159
#{$class}__header-divider {
159160
display: block;
160161
}
162+
163+
&::after {
164+
display: none;
165+
}
161166
}
162167

163168
&__menu-items {

src/components/AsideHeader/AsideHeader.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ interface AsideHeaderDefaultProps {
3838
panelItems: DrawerItemProps[];
3939
subheaderItems: MenuItem[];
4040
menuItems: MenuItem[];
41+
headerDecoration: boolean;
4142
}
4243

4344
export interface AsideHeaderProps
@@ -51,6 +52,7 @@ export class AsideHeader extends React.Component<AsideHeaderInnerProps> {
5152
panelItems: [],
5253
subheaderItems: [],
5354
menuItems: [],
55+
headerDecoration: true,
5456
};
5557

5658
asideRef = React.createRef<HTMLDivElement>();
@@ -71,13 +73,13 @@ export class AsideHeader extends React.Component<AsideHeaderInnerProps> {
7173
}
7274

7375
private renderFirstPane = (size: number) => {
74-
const {dict, menuItems, panelItems, compact} = this.props;
76+
const {dict, menuItems, panelItems, compact, headerDecoration} = this.props;
7577

7678
return (
7779
<React.Fragment>
7880
<div className={b('aside')} style={{width: size}}>
7981
<div className={b('aside-popup-anchor')} ref={this.asideRef} />
80-
<div className={b('aside-content')}>
82+
<div className={b('aside-content', {['with-decoration']: headerDecoration})}>
8183
{this.renderHeader()}
8284
{menuItems?.length ? (
8385
<CompositeBar
@@ -115,7 +117,7 @@ export class AsideHeader extends React.Component<AsideHeaderInnerProps> {
115117
);
116118

117119
private renderHeader = () => (
118-
<div className={b('header')}>
120+
<div className={b('header', {['with-decoration']: this.props.headerDecoration})}>
119121
{this.renderLogo()}
120122

121123
<CompositeBar

src/components/AsideHeader/__stories__/AsideHeaderShowcase.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import block from 'bem-cn-lite';
44
import {AsideHeader, FooterItem} from '../..';
55
import {text as placeholderText} from './moc';
66
import {menuItemsShowcase} from './../../CompositeBar/__stories__/moc';
7+
import {RadioButton, Radio} from '@gravity-ui/uikit';
78

89
import logoIcon from '../../../../.storybook/assets/logo.svg';
910
import menuItemIcon from '../../../../.storybook/assets/settings.svg';
@@ -12,6 +13,11 @@ import './AsideHeaderShowcase.scss';
1213

1314
const b = block('aside-header-showcase');
1415

16+
const BOOLEAN_OPTIONS = {
17+
Yes: 'yes',
18+
No: 'no',
19+
};
20+
1521
enum Panel {
1622
ProjectSettings = 'projectSettings',
1723
Search = 'search',
@@ -23,6 +29,7 @@ export function AsideHeaderShowcase() {
2329
const [popupVisible, setPopupVisible] = React.useState(false);
2430
const [visiblePanel, setVisiblePanel] = React.useState<Panel>();
2531
const [compact, setCompact] = React.useState(false);
32+
const [headerDecoration, setHeaderDecoration] = React.useState<string>(BOOLEAN_OPTIONS.Yes);
2633

2734
const navRef = React.useRef<AsideHeader>(null);
2835

@@ -36,6 +43,7 @@ export function AsideHeaderShowcase() {
3643
href: '#',
3744
onClick: () => alert('click on logo'),
3845
}}
46+
headerDecoration={headerDecoration === BOOLEAN_OPTIONS.Yes}
3947
menuItems={[
4048
...menuItemsShowcase,
4149
{
@@ -150,6 +158,15 @@ export function AsideHeaderShowcase() {
150158
return (
151159
<div className={b('content')}>
152160
<pre>{placeholderText}</pre>
161+
<RadioButton
162+
value={headerDecoration}
163+
onChange={(event) => {
164+
setHeaderDecoration(event.target.value);
165+
}}
166+
>
167+
<Radio value={BOOLEAN_OPTIONS.No}>No</Radio>
168+
<Radio value={BOOLEAN_OPTIONS.Yes}>Yes</Radio>
169+
</RadioButton>
153170
</div>
154171
);
155172
}}

0 commit comments

Comments
 (0)