application-amicale/components/CustomHeader.js

84 lines
2.8 KiB
JavaScript
Raw Normal View History

// @flow
import * as React from "react";
import {Body, Header, Left, Right, Title} from "native-base";
import {Platform, StyleSheet, View} from "react-native";
2019-06-25 22:20:24 +02:00
import {getStatusBarHeight} from "react-native-status-bar-height";
2019-06-27 10:17:51 +02:00
import Touchable from 'react-native-platform-touchable';
import ThemeManager from "../utils/ThemeManager";
import CustomMaterialIcon from "./CustomMaterialIcon";
2019-06-27 10:17:51 +02:00
type Props = {
hasBackButton: boolean,
leftButton: React.Node,
rightButton: React.Node,
title: string,
navigation: Object,
hasTabs: boolean,
};
2019-06-29 15:43:57 +02:00
/**
* Custom component defining a header using native base
*
* @prop hasBackButton {boolean} Whether to show a back button or a burger menu. Use burger if unspecified
2019-06-29 15:43:57 +02:00
* @prop rightMenu {React.Node} Element to place at the right of the header. Use nothing if unspecified
* @prop title {string} This header title
* @prop navigation {Object} The navigation object from react navigation
*/
export default class CustomHeader extends React.Component<Props> {
static defaultProps = {
hasBackButton: false,
leftButton: <View/>,
rightButton: <View/>,
hasTabs: false,
};
2019-06-25 22:20:24 +02:00
render() {
2019-06-27 10:17:51 +02:00
let button;
// Does the app have a back button or a burger menu ?
if (this.props.hasBackButton)
2019-06-27 10:17:51 +02:00
button =
<Touchable
style={{padding: 6}}
onPress={() => this.props.navigation.goBack()}>
<CustomMaterialIcon
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
icon="arrow-left"/>
2019-06-27 10:17:51 +02:00
</Touchable>;
else
button = this.props.leftButton;
2019-06-27 10:17:51 +02:00
2019-06-25 22:20:24 +02:00
return (
<Header style={styles.header}
hasTabs={this.props.hasTabs}>
2019-06-25 22:20:24 +02:00
<Left>
2019-06-27 10:17:51 +02:00
{button}
2019-06-25 22:20:24 +02:00
</Left>
<Body>
<Title>{this.props.title}</Title>
</Body>
<Right>
{this.props.rightButton}
{this.props.hasBackButton ? <View/> :
<Touchable
style={{padding: 6}}
onPress={() => this.props.navigation.navigate('SettingsScreen')}>
<CustomMaterialIcon
color={Platform.OS === 'ios' ? ThemeManager.getCurrentThemeVariables().brandPrimary : "#fff"}
icon="settings"/>
</Touchable>}
</Right>
2019-06-25 22:20:24 +02:00
</Header>);
}
};
// Fix header in status bar on Android
const styles = StyleSheet.create({
header: {
paddingTop: getStatusBarHeight(),
height: 54 + getStatusBarHeight(),
},
2019-06-27 10:17:51 +02:00
});