@ecreeth/rn-ui
Version:
Highly customizable and theming components for React Native
81 lines (71 loc) • 1.7 kB
JavaScript
import React, { PureComponent } from 'react';
import {
StyleSheet,
View as RNView,
Text as RNText,
} from 'react-native';
import PropTypes from 'prop-types';
import DividerLabel from './DividerLabel';
import DividerLine from './DividerLine';
const { propTypes: RNViewProps } = RNText;
const { propTypes: RNTextProps } = RNText;
const propTypes = {
children: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.element,
]),
orientation: PropTypes.oneOf(['vertical', 'horizontal']),
lineStyle: RNViewProps.style,
label: PropTypes.string,
labelStyle: RNTextProps.style,
};
const defaultProps = {
children: null,
orientation: 'horizontal',
lineStyle: null,
label: null,
labelStyle: null,
};
class Divider extends PureComponent {
render() {
let {
children,
lineStyle,
label,
labelStyle,
...restProps
} = this.props;
if (typeof children === 'string') {
label = children;
children = null;
}
if (!children && label) {
if (labelStyle && typeof labelStyle === 'number') {
labelStyle = StyleSheet.flatten(labelStyle);
}
children = (
<DividerLabel
style={labelStyle}
>
{label}
</DividerLabel>
);
}
if (lineStyle && typeof lineStyle === 'number') {
lineStyle = StyleSheet.flatten(lineStyle);
}
return (
<RNView
{...restProps}
>
<DividerLine style={lineStyle} />
{children}
{children && <DividerLine style={lineStyle} />}
</RNView>
);
}
}
Divider.propTypes = propTypes;
Divider.defaultProps = defaultProps;
export default Divider;