import React, { memo } from 'react'; import { View, TouchableOpacity, StyleSheet, Text, SafeAreaView } from 'react-native'; import type { ViewStyle, TextStyle } from 'react-native'; import Icon from '@pingtou/rn-vant-icons'; import type { NavBarProps } from './interface'; import { useThemeFactory } from '../Theme'; import { isDef } from '../utils/typeof'; import { createStyle } from './style'; const NavBar: React.FC = props => { const { style, leftArrowStyle, titleTextStyle, title, leftText, rightText, leftArrow = true, border = true, onPressLeft, onPressRight, safeAreaInsetTop, } = props; const { styles, theme } = useThemeFactory(createStyle); const wrapperStyleSummary = StyleSheet.flatten([ styles.wrapper, border ? { borderBottomColor: theme.border_color, borderBottomWidth: StyleSheet.hairlineWidth, } : null, style, ]); const leftArrowStyleSummary = StyleSheet.flatten([styles.leftArrow, leftArrowStyle]); /** 标题部分 纯文字或自定义 JSX */ const titleJSX = isDef(title) ? ( React.isValidElement(title) ? ( title ) : ( {title} ) ) : null; /** 左侧文字 纯文字或自定义 JSX */ const leftTextJSX = isDef(leftText) ? ( React.isValidElement(leftText) ? ( leftText ) : ( {leftText} ) ) : null; const Wrapper = safeAreaInsetTop ? SafeAreaView : View; return ( {/* 左侧 */} {leftArrow && ( {leftTextJSX} )} {/* 右侧 */} {rightText && ( {React.isValidElement(rightText) ? ( rightText ) : ( {rightText} )} )} {titleJSX} ); }; export default memo(NavBar);