-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
100 lines (95 loc) · 2.37 KB
/
index.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import React, { useMemo } from "react";
import { View, StyleSheet, Text } from "react-native";
import Svg from "react-native-svg";
// Components
import Rings from "./components/Rings";
export default function ActivityRings({
strokeWidth = 10,
radius = 60,
strokeColor = "#EDAD2B",
strokeSecondaryColor = null,
percentage = 10,
multiple = [],
style = {},
renderMiddle: RenderMiddle = null,
renderFooter: RenderFooter = null,
}) {
const viewBox = useMemo(() => {
return radius + strokeWidth;
}, [radius, strokeWidth]);
return (
<View
style={{
width: radius * 2,
position: "relative",
}}
>
<View
style={{
width: radius * 2,
height: radius * 2,
position: "relative",
}}
>
{RenderMiddle && (
<View style={styles.container}>
<RenderMiddle />
</View>
)}
<Svg
width={radius * 2}
height={radius * 2}
viewBox={`0 0 ${viewBox * 2} ${viewBox * 2}`}
style={{
transform: [{ rotateZ: "270deg" }],
position: "absolute",
}}
>
{multiple.length > 0 ? (
multiple.map((ring, index) => {
return (
<Rings
key={index}
unique={index}
percentage={ring?.percentage || 0}
strokeWidth={ring?.strokeWidth || strokeWidth}
radius={ring.radius}
strokeSecondaryColor={ring.strokeSecondaryColor}
strokeColor={ring.strokeColor}
/>
);
})
) : (
<Rings
percentage={percentage}
strokeWidth={strokeWidth}
radius={radius}
strokeSecondaryColor={strokeSecondaryColor}
strokeColor={strokeColor}
/>
)}
</Svg>
</View>
{RenderFooter && (
<View style={styles.renderFooter}>
<RenderFooter />
</View>
)}
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignContent: "center",
borderRadius: 10000,
alignSelf: "center",
zIndex: 2,
},
renderFooter: {
justifyContent: "center",
alignContent: "center",
alignSelf: "center",
},
});