import * as React from 'react'; import { Animated, StyleProp, StyleSheet, TouchableWithoutFeedback, View, ViewStyle, I18nManager, } from 'react-native'; import color from 'color'; import MaterialCommunityIcon from '../MaterialCommunityIcon'; import Text from '../Typography/Text'; import { withTheme } from '../../core/theming'; type Props = React.ComponentPropsWithRef & { /** * Text content of the `DataTableTitle`. */ children: React.ReactNode; /** * Align the text to the right. Generally monetary or number fields are aligned to right. */ numeric?: boolean; /** * Direction of sorting. An arrow indicating the direction is displayed when this is given. */ sortDirection?: 'ascending' | 'descending'; /** * The number of lines to show. */ numberOfLines?: number; /** * Function to execute on press. */ onPress?: () => void; style?: StyleProp; /** * @optional */ theme: ReactNativePaper.Theme; }; /** * A component to display title in table header. * *
*
* *
*
* * * ## Usage * ```js * import * as React from 'react'; * import { DataTable } from 'react-native-paper'; * * const MyComponent = () => ( * * * * Dessert * * Calories * Fat (g) * * * ); * * export default MyComponent; * ``` */ const DataTableTitle = ({ numeric, children, onPress, sortDirection, theme, style, numberOfLines = 1, ...rest }: Props) => { const { current: spinAnim } = React.useRef( new Animated.Value(sortDirection === 'ascending' ? 0 : 1) ); React.useEffect(() => { Animated.timing(spinAnim, { toValue: sortDirection === 'ascending' ? 0 : 1, duration: 150, useNativeDriver: true, }).start(); }, [sortDirection, spinAnim]); const textColor = color(theme.colors.text).alpha(0.6).rgb().string(); const spin = spinAnim.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '180deg'], }); const icon = sortDirection ? ( ) : null; return ( {icon} {children} ); }; DataTableTitle.displayName = 'DataTable.Title'; const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'row', alignContent: 'center', paddingVertical: 12, }, right: { justifyContent: 'flex-end', }, cell: { height: 24, lineHeight: 24, fontSize: 12, fontWeight: '500', alignItems: 'center', }, sorted: { marginLeft: 8, }, icon: { height: 24, justifyContent: 'center', }, }); export default withTheme(DataTableTitle); // @component-docs ignore-next-line export { DataTableTitle };