Skip to content

Commit 5509098

Browse files
TobiasKoehlerMarcusNotheis
authored andcommitted
feat(ObjectPage): Added Hide Header Button (#28)
Added prop to show a button for hiding header content
1 parent f123007 commit 5509098

File tree

6 files changed

+224
-157
lines changed

6 files changed

+224
-157
lines changed

packages/fiori3/__karma_snapshots__/ObjectPage.md

Lines changed: 169 additions & 139 deletions
Large diffs are not rendered by default.

packages/fiori3/src/components/ObjectPage/ObjectPage.jss.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const styles = ({ theme, contentDensity, parameters }: JSSTheme) => ({
3333
width: '70%',
3434
boxSizing: 'border-box',
3535
paddingTop: '1.5rem',
36-
paddingBottom: '1.5rem',
3736
'& $title': {
3837
fontSize: '1.375rem',
3938
paddingRight: '1rem',
@@ -76,6 +75,12 @@ const styles = ({ theme, contentDensity, parameters }: JSSTheme) => ({
7675
}
7776
},
7877
'& $headerContent': {
78+
paddingTop: '1.5rem',
79+
paddingBottom: '0.25rem',
80+
transition: 'max-height 0.5s',
81+
maxHeight: '500px',
82+
overflow: 'hidden',
83+
7984
paddingLeft: '2rem',
8085
position: 'relative',
8186
'& $headerImage': {
@@ -96,10 +101,18 @@ const styles = ({ theme, contentDensity, parameters }: JSSTheme) => ({
96101
}
97102
}
98103
},
104+
hideHeaderContent: {
105+
paddingTop: '0.5rem',
106+
marginBottom: '0.5rem',
107+
boxShadow: `inset 0 -1px 0 0 ${parameters.sapUiShellBorderColor}`,
108+
display: 'flex',
109+
justifyContent: 'center',
110+
alignItems: 'center'
111+
},
99112
anchorBar: {
100113
paddingLeft: '2rem',
101114
backgroundColor: parameters.sapUiObjectHeaderBackground,
102-
boxShadow: `inset 0 -0.125rem ${parameters.sapUiObjectHeaderBackground}`,
115+
boxShadow: `inset 0 0.125rem ${parameters.sapUiObjectHeaderBackground}`,
103116
'& $anchorButtonContainer': {
104117
display: 'inline-flex',
105118
'& $anchorButton': {
@@ -156,7 +169,8 @@ const styles = ({ theme, contentDensity, parameters }: JSSTheme) => ({
156169
headerCustomContent: {},
157170
anchorButtonContainer: {},
158171
anchorButton: {},
159-
active: {}
172+
active: {},
173+
hiddenHeader: {}
160174
});
161175

162176
export default styles;

packages/fiori3/src/components/ObjectPage/ObjectPage.karma.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const renderComponent = (mode = ObjectPageMode.Default) => (
2929
subTitle="Sub Title"
3030
headerActions={[<Button key="Actions">Action</Button>]}
3131
renderHeaderContent={renderHeaderContent}
32+
showHideHeaderButton
3233
mode={mode}
3334
>
3435
<ObjectPageSection title="Test 1" id="1">

packages/fiori3/src/components/ObjectPage/demo.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const renderDemo = () => {
4040
renderHeaderContent={renderHeaderContent}
4141
mode={select('mode', ObjectPageMode, ObjectPageMode.Default)}
4242
imageShapeCircle={boolean('imageShapeCircle', false)}
43+
showHideHeaderButton={boolean('showHideHeaderButton', true)}
4344
selectedSectionId={text('selectedSectionId', '1')}
4445
onSelectedSectionChanged={action('onSelectedSectionChanged')}
4546
style={{ height: '700px' }}

packages/fiori3/src/components/ObjectPage/index.tsx

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { scroller } from 'react-scroll';
88
import { Fiori3CommonProps } from '../../interfaces/Fiori3CommonProps';
99
import styles from './ObjectPage.jss';
1010
import { ObjectPageAnchor } from './ObjectPageAnchor';
11+
import { Button } from '../../lib/Button';
1112

1213
const objectPageContentStyles = ({ parameters }: JSSTheme) => ({
1314
sectionsContainer: {
@@ -53,6 +54,7 @@ export interface ObjectPagePropTypes extends Fiori3CommonProps {
5354
mode?: ObjectPageMode;
5455
selectedSectionId?: string;
5556
onSelectedSectionChanged?: (event: Event) => void;
57+
showHideHeaderButton?: boolean;
5658
}
5759

5860
interface ObjectPageInternalProps extends ObjectPagePropTypes, ClassProps {}
@@ -62,6 +64,7 @@ interface ObjectPageState {
6264
prevProps: {
6365
selectedSectionId: string;
6466
};
67+
showHeader: boolean;
6568
}
6669

6770
@withStyles(styles)
@@ -74,7 +77,8 @@ export class ObjectPage extends PureComponent<ObjectPagePropTypes, ObjectPageSta
7477
headerActions: [],
7578
renderHeaderContent: null,
7679
mode: ObjectPageMode.Default,
77-
onSelectedSectionChanged: () => {}
80+
onSelectedSectionChanged: () => {},
81+
showHideHeaderButton: false
7882
};
7983

8084
private objectPage: HTMLElement;
@@ -100,7 +104,8 @@ export class ObjectPage extends PureComponent<ObjectPagePropTypes, ObjectPageSta
100104
selectedSectionIndex: 0,
101105
prevProps: {
102106
selectedSectionId: ''
103-
}
107+
},
108+
showHeader: true
104109
};
105110

106111
private getFillerDivDomRef = (ref) => {
@@ -240,18 +245,31 @@ export class ObjectPage extends PureComponent<ObjectPagePropTypes, ObjectPageSta
240245
</span>
241246
</header>
242247
{/* Header Content */}
243-
<div className={classes.headerContent}>
244-
{image && (
245-
<span
246-
className={classes.headerImage}
247-
style={{ borderRadius: imageShapeCircle ? '50%' : 0, overflow: 'hidden' }}
248-
>
249-
<img src={image} style={{ width: '100%', height: '100%' }} />
250-
</span>
248+
<div className={classes.headerContentWrapper}>
249+
{this.state.showHeader && (
250+
<div className={classes.headerContent}>
251+
{image && (
252+
<span
253+
className={classes.headerImage}
254+
style={{ borderRadius: imageShapeCircle ? '50%' : 0, overflow: 'hidden' }}
255+
>
256+
<img src={image} style={{ width: '100%', height: '100%' }} />
257+
</span>
258+
)}
259+
{renderHeaderContent && <span className={classes.headerCustomContent}>{renderHeaderContent()}</span>}
260+
</div>
251261
)}
252-
{renderHeaderContent && <span className={classes.headerCustomContent}>{renderHeaderContent()}</span>}
253-
</div>
254262

263+
<div className={classes.hideHeaderContent}>
264+
{this.props.showHideHeaderButton && (
265+
<Button
266+
style={{ position: 'absolute', '--_ui5_button_compact_height': '1rem', lineHeight: '1.25rem' }}
267+
icon={this.state.showHeader ? 'sap-icon://navigation-up-arrow' : 'sap-icon://navigation-down-arrow'}
268+
onPress={this.changeHeader}
269+
/>
270+
)}
271+
</div>
272+
</div>
255273
<section className={classes.anchorBar} role="navigation">
256274
{Children.map(children, (section, index) => (
257275
<ObjectPageAnchor
@@ -267,12 +285,15 @@ export class ObjectPage extends PureComponent<ObjectPagePropTypes, ObjectPageSta
267285
))}
268286
</section>
269287
</header>
270-
271288
<ObjectPageContent getFillerDivDomRef={this.getFillerDivDomRef}>{content}</ObjectPageContent>
272289
</div>
273290
);
274291
}
275292

293+
private changeHeader = () => {
294+
this.setState({ showHeader: !this.state.showHeader });
295+
};
296+
276297
private handleOnSubSectionSelected = (index) => (e) => {
277298
if (this.props.mode === ObjectPageMode.IconTabBar) {
278299
const scrollId = e.getParameter('props').id;

packages/styles/src/sap_fiori3_light.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const sapColorSemanticNeutral = 'hsl(210, 3%, 42.7%)';
2929
/** The color which builds your brand */
3030
export const sapUiBrand = '#0a6ed1';
3131
/** The color which is used to highlight screen elements */
32-
export const sapUiHighlight = '#0a6ed1';
32+
export const sapUiHighlight = HSLColor.darken(sapUiBrand, 10).hsl;
3333
/** The color which is used to derive the most dominant background colors */
3434
export const sapUiBaseColor = '#ffffff';
3535
/** The color of the shell header bar */
@@ -133,7 +133,7 @@ export const sapUiButtonDisabledBorderColor = '#666666';
133133
/** The color of texts on buttons. */
134134
export const sapUiButtonDisabledTextColor = '#666666';
135135
/** The background color of buttons on hover. */
136-
export const sapUiButtonHoverBackground = '#fafafa';
136+
export const sapUiButtonHoverBackground = HSLColor.lighten(sapUiHighlight, 63).hsl;
137137
/** The color of a button's borders on hover. */
138138
export const sapUiButtonHoverBorderColor = '#0a6ed1';
139139
/** The color of texts on buttons on hover. */

0 commit comments

Comments
 (0)