@fto-consult/expo-ui
Version:
Bibliothèque de composants UI Expo,react-native
70 lines (65 loc) • 2.7 kB
JavaScript
import React from "$react";
import Divider from "$ecomponents/Divider";
import { StyleSheet } from "react-native";
import View from "$ecomponents/View";
import {flattenStyle} from "$theme";
import {defaultStr} from "$cutils";
const DrawerHeader = React.forwardRef(({minimized,testID,withMinimizedIcon,drawerWidth,containerProps,isLeftPosition,divider,dividerProps,toggleButton,children,...rest},ref)=>{
rest = Object.assign({},rest);
dividerProps = defaultObj(dividerProps);
containerProps = defaultObj(containerProps);
toggleButton = React.isValidElement(toggleButton)? toggleButton : null;
children = React.isValidElement(children)? children : null;
if(!children && !toggleButton) return null;
if(minimized && !withMinimizedIcon) return null;
testID = defaultStr(testID,"RN_DrawerHeaderComponent");
return <View testID={testID} {...containerProps} ref = {ref} style = {[styles.drawerHeaderContainer,containerProps.style]}>
<View testID={testID+"_Content"} {...rest}
style={flattenStyle([
styles.drawerHeaderContent,
rest.style,
minimized ? styles.drawerHeaderContentMinimized : null,
!minimized ? (isLeftPosition?styles.drawerHeaderContainerLeft:styles.drawerHeaderContainerRight) : null,
!minimized && !children ? {justifyContent:'flex-end',flexDirection:'row'} : null,
])}
>
{minimized ? toggleButton : <>
{children}
{toggleButton}
</> }
</View>
{divider !== false? <Divider testID={testID+"_Divider"} {...dividerProps} style={flattenStyle([{width:'100%'},minimized?{marginTop:4}:null,dividerProps.style])}/> : null}
</View>
});
DrawerHeader.displayName = "DrawerHeaderComponent";
export default DrawerHeader;
const styles = StyleSheet.create({
drawerHeaderContainer : {
flexDirection : 'column',
alignItems : 'center',
justifyContent : 'flex-start',
},
drawerHeaderContent : {
margin : 0,
justifyContent : 'space-between',
flexDirection : 'row',
alignItems : 'center',
paddingHorizontal : 10,
width : '100%',
},
drawerHeaderContentMinimized : {
textAlign : 'center',
alignSelf : 'center',
justifyContent : 'center',
alignContent : 'center',
paddingTop : 10,
},
drawerHeaderContainerLeft : {
flexDirection : 'row',
//paddingRight : 20,
},
drawerHeaderContainerRight : {
flexDirection : 'row-reverse',
//paddingLeft : 20,
},
});