forked from shwetsolanki/art
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathShape.js
71 lines (66 loc) · 1.67 KB
/
Shape.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
68
69
70
71
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
*/
import * as React from 'react';
import {NativeShape} from './nativeComponents';
import Path from './ARTSerializablePath';
import {
extractTransform,
extractOpacity,
childrenAsString,
extractColor,
extractStrokeJoin,
extractStrokeCap,
extractBrush,
} from './helpers';
import type {
TransformProps,
OpacityProps,
StrokeJoin,
StrokeCap,
Brush,
} from './types';
export type ShapeProps = TransformProps &
OpacityProps & {
fill?: string | Brush,
stroke?: string,
strokeCap?: StrokeCap,
strokeDash?: Array<number>,
strokeJoin?: StrokeJoin,
strokeWidth: number,
children?: React.Node,
d?: string | Path,
children?: string | Array<string>,
width: number,
height: number,
};
export default class Shape extends React.Component<ShapeProps> {
static defaultProps = {
strokeWidth: 1,
width: 0,
height: 0,
};
render() {
const props = this.props;
const path = props.d || childrenAsString(props.children);
const d = (path instanceof Path ? path : new Path(path)).toJSON();
return (
<NativeShape
fill={extractBrush(props.fill, props)}
opacity={extractOpacity(props)}
stroke={extractColor(props.stroke)}
strokeCap={extractStrokeCap(props.strokeCap)}
strokeDash={props.strokeDash || null}
strokeJoin={extractStrokeJoin(props.strokeJoin)}
strokeWidth={props.strokeWidth}
transform={extractTransform(props)}
d={d}
/>
);
}
}