import color from 'color'; import * as React from 'react'; import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native'; import { withTheme } from '../../core/theming'; import Divider from '../Divider'; import Text from '../Typography/Text'; type Props = React.ComponentPropsWithRef & { /** * Title to show as the header for the section. */ title?: string | JSX.Element; /** * Number of lines to display for text, defaults to 1. */ numberOfLines?: number; /** * Content of the `Drawer.Section`. */ children: React.ReactNode; style?: StyleProp; /** * @optional */ theme: ReactNativePaper.Theme; }; /** * A component to group content inside a navigation drawer. * *
*
* *
*
* * ## Usage * ```js * import * as React from 'react'; * import { Drawer } from 'react-native-paper'; * * const MyComponent = () => { * const [active, setActive] = React.useState(''); * * * return ( * * setActive('first')} * /> * setActive('second')} * /> * * ); * }; * * export default MyComponent; * ``` */ const DrawerSection = ({ children, title, theme, style, numberOfLines, ...rest }: Props) => { let titleElement; if (title) { if (typeof title === 'string') { titleElement = DrawerSection.titleElement(title, theme, numberOfLines); } else { titleElement = title; } } return ( {titleElement} {children} ); }; DrawerSection.titleElement = ( title: Props['title'], theme: Props['theme'], numberOfLines: Props['numberOfLines'] ) => { const { colors, fonts } = theme; const titleColor = color(colors.text).alpha(0.54).rgb().string(); const font = fonts.medium; const numLines = typeof numberOfLines === 'undefined' ? 1 : numberOfLines; return ( {title} ); }; DrawerSection.displayName = 'Drawer.Section'; const styles = StyleSheet.create({ container: { marginBottom: 4, }, titleContainer: { minHeight: 40, justifyContent: 'center', }, title: { marginLeft: 16, }, divider: { marginTop: 4, }, }); export default withTheme(DrawerSection);