UNPKG

3.05 kBJavaScriptView Raw
1function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
3import * as React from 'react';
4import { StyleSheet } from 'react-native';
5import { withTheme } from '../../core/theming';
6import color from 'color';
7import IconButton from '../IconButton';
8import { ToggleButtonGroupContext } from './ToggleButtonGroup';
9import { black, white } from '../../styles/colors';
10
11/**
12 * Toggle buttons can be used to group related options. To emphasize groups of related toggle buttons,
13 * a group should share a common container.
14 *
15 * <div class="screenshots">
16 * <img class="medium" src="screenshots/toggle-button.png" />
17 * </div>
18 *
19 * ## Usage
20 * ```js
21 * import * as React from 'react';
22 * import { ToggleButton } from 'react-native-paper';
23 *
24 * const ToggleButtonExample = () => {
25 * const [status, setStatus] = React.useState('checked');
26 *
27 * const onButtonToggle = value => {
28 * setStatus(status === 'checked' ? 'unchecked' : 'checked');
29 * };
30 *
31 * return (
32 * <ToggleButton
33 * icon="bluetooth"
34 * value="bluetooth"
35 * status={status}
36 * onPress={onButtonToggle}
37 * />
38 * );
39 * };
40 *
41 * export default ToggleButtonExample;
42 *
43 * ```
44 */
45const ToggleButton = _ref => {
46 let {
47 icon,
48 size,
49 theme,
50 accessibilityLabel,
51 disabled,
52 style,
53 value,
54 status,
55 onPress,
56 ...rest
57 } = _ref;
58 const borderRadius = theme.roundness;
59 return /*#__PURE__*/React.createElement(ToggleButtonGroupContext.Consumer, null, context => {
60 let backgroundColor;
61 const checked = context && context.value === value || status === 'checked';
62
63 if (checked) {
64 backgroundColor = theme.dark ? 'rgba(255, 255, 255, .12)' : 'rgba(0, 0, 0, .08)';
65 } else {
66 backgroundColor = 'transparent';
67 }
68
69 return /*#__PURE__*/React.createElement(IconButton, _extends({
70 borderless: false,
71 icon: icon,
72 onPress: e => {
73 if (onPress) {
74 onPress(e);
75 }
76
77 if (context) {
78 context.onValueChange(!checked ? value : null);
79 }
80 },
81 size: size,
82 accessibilityLabel: accessibilityLabel,
83 accessibilityState: {
84 disabled,
85 selected: checked
86 },
87 disabled: disabled,
88 style: [styles.content, {
89 backgroundColor,
90 borderRadius,
91 borderColor: color(theme.dark ? white : black).alpha(0.29).rgb().string()
92 }, style]
93 }, rest));
94 });
95};
96
97const styles = StyleSheet.create({
98 content: {
99 width: 42,
100 height: 42,
101 margin: 0
102 }
103});
104export default withTheme(ToggleButton); // @component-docs ignore-next-line
105
106const ToggleButtonWithTheme = withTheme(ToggleButton); // @component-docs ignore-next-line
107
108export { ToggleButtonWithTheme as ToggleButton };
109//# sourceMappingURL=ToggleButton.js.map
\No newline at end of file