-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
index.native.js
67 lines (59 loc) · 1.25 KB
/
index.native.js
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
/**
* External dependencies
*/
import { Svg } from 'react-native-svg';
import { Animated } from 'react-native';
/**
* WordPress dependencies
*/
import { forwardRef } from '@wordpress/element';
/**
* Internal dependencies
*/
import styles from './style.scss';
export {
Circle,
G,
Path,
Polygon,
Rect,
Defs,
RadialGradient,
LinearGradient,
Stop,
} from 'react-native-svg';
const AnimatedSvg = Animated.createAnimatedComponent(
forwardRef( ( props, ref ) => <Svg ref={ ref } { ...props } /> )
);
export const SVG = ( {
className = '',
isPressed,
animated = false,
...props
} ) => {
const colorScheme = props.colorScheme || 'light';
const stylesFromClasses = className
.split( ' ' )
.map( ( element ) => styles[ element ] )
.filter( Boolean );
const defaultStyle = isPressed
? styles[ 'is-pressed' ]
: styles[ 'components-toolbar__control-' + colorScheme ];
const styleValues = Object.assign(
{},
defaultStyle,
props.style,
...stylesFromClasses
);
const appliedProps = { ...props, style: styleValues };
const SvgWrapper = animated ? AnimatedSvg : Svg;
return (
<SvgWrapper
//We want to re-render when style color is changed
key={ appliedProps.style.color }
height="100%"
width="100%"
{ ...appliedProps }
/>
);
};