-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Copy pathCardActions.tsx
74 lines (66 loc) · 1.73 KB
/
CardActions.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import * as React from 'react';
import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';
import type { ThemeProp } from 'src/types';
import { useInternalTheme } from '../../core/theming';
export type Props = React.ComponentPropsWithRef<typeof View> & {
/**
* Items inside the `CardActions`.
*/
children: React.ReactNode;
style?: StyleProp<ViewStyle>;
theme?: ThemeProp;
};
/**
* A component to show a list of actions inside a Card.
*
* ## Usage
* ```js
* import * as React from 'react';
* import { Card, Button } from 'react-native-paper';
*
* const MyComponent = () => (
* <Card>
* <Card.Actions>
* <Button>Cancel</Button>
* <Button>Ok</Button>
* </Card.Actions>
* </Card>
* );
*
* export default MyComponent;
* ```
*/
const CardActions = (props: Props) => {
const { isV3 } = useInternalTheme(props.theme);
const justifyContent = isV3 ? 'flex-end' : 'flex-start';
return (
<View
{...props}
style={[styles.container, props.style, { justifyContent }]}
>
{React.Children.map(props.children, (child, i) => {
return React.isValidElement(child)
? React.cloneElement(child as React.ReactElement<any>, {
compact: !isV3 && child.props.compact !== false,
mode:
child.props.mode ||
(isV3 && (i === 0 ? 'outlined' : 'contained')),
style: [isV3 && styles.button, child.props.style],
})
: child;
})}
</View>
);
};
CardActions.displayName = 'Card.Actions';
const styles = StyleSheet.create({
container: {
flexDirection: 'row',
alignItems: 'center',
padding: 8,
},
button: {
marginLeft: 8,
},
});
export default CardActions;