related-ui-components 3.2.4 → 3.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/components/Wheel/Wheel.js +112 -108
- package/lib/module/components/Wheel/Wheel.js.map +1 -1
- package/lib/typescript/src/components/Wheel/Wheel.d.ts +2 -0
- package/lib/typescript/src/components/Wheel/Wheel.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Wheel/Wheel.tsx +180 -134
|
@@ -5,64 +5,15 @@ import { View, StyleSheet, Animated, Easing } from "react-native";
|
|
|
5
5
|
import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
|
|
6
6
|
import { Button } from "../Button/index.js";
|
|
7
7
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
-
|
|
9
|
-
const colors = ["#FF0000",
|
|
10
|
-
// Red
|
|
11
|
-
"#FFA500",
|
|
12
|
-
// Orange
|
|
13
|
-
"#FFFF00",
|
|
14
|
-
// Yellow
|
|
15
|
-
"#008000",
|
|
16
|
-
// Green
|
|
17
|
-
"#0000FF",
|
|
18
|
-
// Blue
|
|
19
|
-
"#800080",
|
|
20
|
-
// Purple
|
|
21
|
-
"#FFC0CB",
|
|
22
|
-
// Pink
|
|
23
|
-
"#00FFFF",
|
|
24
|
-
// Cyan
|
|
25
|
-
"#FF00FF",
|
|
26
|
-
// Magenta
|
|
27
|
-
"#00FF00",
|
|
28
|
-
// Lime
|
|
29
|
-
"#4B0082",
|
|
30
|
-
// Indigo
|
|
31
|
-
"#EE82EE",
|
|
32
|
-
// Violet
|
|
33
|
-
"#40E0D0",
|
|
34
|
-
// Turquoise
|
|
35
|
-
"#FFD700",
|
|
36
|
-
// Gold
|
|
37
|
-
"#C0C0C0",
|
|
38
|
-
// Silver
|
|
39
|
-
"#FFDAB9",
|
|
40
|
-
// Peach
|
|
41
|
-
"#E6E6FA",
|
|
42
|
-
// Lavender
|
|
43
|
-
"#008080",
|
|
44
|
-
// Teal
|
|
45
|
-
"#FF7F50",
|
|
46
|
-
// Coral
|
|
47
|
-
"#DC143C",
|
|
48
|
-
// Crimson
|
|
49
|
-
"#87CEEB",
|
|
50
|
-
// Sky Blue
|
|
51
|
-
"#7FFF00",
|
|
52
|
-
// Chartreuse
|
|
53
|
-
"#CCCCFF",
|
|
54
|
-
// Periwinkle
|
|
55
|
-
"#FF6347",
|
|
56
|
-
// Tomato
|
|
57
|
-
"#FA8072" // Salmon
|
|
58
|
-
];
|
|
8
|
+
const colors = ["#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080", "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE", "#40E0D0", "#FFD700", "#C0C0C0", "#FFDAB9", "#E6E6FA", "#008080", "#FF7F50", "#DC143C", "#87CEEB", "#7FFF00", "#CCCCFF", "#FF6347", "#FA8072"];
|
|
59
9
|
const SpinWheel = ({
|
|
60
10
|
items,
|
|
61
11
|
predeterminedWinner,
|
|
62
|
-
// Destructure new prop
|
|
63
12
|
size = 300,
|
|
64
13
|
spinDuration = 5000,
|
|
65
14
|
enabled = true,
|
|
15
|
+
onSpinPress,
|
|
16
|
+
minSpinTime = 2000,
|
|
66
17
|
onSpinStart,
|
|
67
18
|
onSpinEnd,
|
|
68
19
|
containerStyle,
|
|
@@ -77,17 +28,19 @@ const SpinWheel = ({
|
|
|
77
28
|
wheelBorderWidth,
|
|
78
29
|
wheelTextColor = "#FFFFFF",
|
|
79
30
|
actionButtonProps,
|
|
80
|
-
centerSize
|
|
31
|
+
centerSize,
|
|
32
|
+
centerComponent
|
|
81
33
|
}) => {
|
|
82
34
|
const wheelItems = items.length > 0 ? items : [];
|
|
83
35
|
const [spinning, setSpinning] = useState(false);
|
|
84
36
|
const [_, setWinner] = useState(null);
|
|
85
37
|
const rotateValue = useRef(new Animated.Value(0)).current;
|
|
86
|
-
|
|
87
|
-
// Track rotation manually for calculations
|
|
88
38
|
const rotationRef = useRef(0);
|
|
89
39
|
|
|
90
|
-
//
|
|
40
|
+
// Track the async winner state
|
|
41
|
+
const asyncWinnerRef = useRef(null);
|
|
42
|
+
const spinStartTimeRef = useRef(0);
|
|
43
|
+
const continuousSpinRef = useRef(null);
|
|
91
44
|
useEffect(() => {
|
|
92
45
|
const listener = rotateValue.addListener(({
|
|
93
46
|
value
|
|
@@ -98,11 +51,7 @@ const SpinWheel = ({
|
|
|
98
51
|
rotateValue.removeListener(listener);
|
|
99
52
|
};
|
|
100
53
|
}, [rotateValue]);
|
|
101
|
-
|
|
102
|
-
// Calculate angle for each segment
|
|
103
54
|
const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
104
|
-
|
|
105
|
-
// Create wheel segments
|
|
106
55
|
const generateWheelPaths = () => {
|
|
107
56
|
if (wheelItems.length === 0) return [];
|
|
108
57
|
return wheelItems.map((item, index) => {
|
|
@@ -119,57 +68,45 @@ const SpinWheel = ({
|
|
|
119
68
|
const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
|
|
120
69
|
const textX = size / 2 + size * 0.32 * Math.cos(midRad);
|
|
121
70
|
const textY = size / 2 + size * 0.32 * Math.sin(midRad);
|
|
122
|
-
|
|
123
|
-
// decorationX and decorationY are calculated but not used in the provided JSX
|
|
124
|
-
// const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
|
|
125
|
-
// const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
|
|
126
|
-
|
|
127
71
|
return {
|
|
128
72
|
path: pathData,
|
|
129
73
|
item,
|
|
130
74
|
textX,
|
|
131
75
|
textY,
|
|
132
|
-
// decorationX,
|
|
133
|
-
// decorationY,
|
|
134
76
|
angle: (startAngle + endAngle) / 2
|
|
135
77
|
};
|
|
136
78
|
});
|
|
137
79
|
};
|
|
138
80
|
const wheelPaths = generateWheelPaths();
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
81
|
+
const startContinuousSpin = () => {
|
|
82
|
+
const numberOfSpins = 2;
|
|
83
|
+
const targetRotation = numberOfSpins * 360;
|
|
84
|
+
continuousSpinRef.current = Animated.loop(Animated.timing(rotateValue, {
|
|
85
|
+
toValue: rotationRef.current + targetRotation / 360,
|
|
86
|
+
duration: 2000,
|
|
87
|
+
easing: Easing.linear,
|
|
88
|
+
useNativeDriver: true
|
|
89
|
+
}));
|
|
90
|
+
continuousSpinRef.current.start();
|
|
91
|
+
};
|
|
92
|
+
const stopAndLandOnWinner = winner => {
|
|
93
|
+
if (continuousSpinRef.current) {
|
|
94
|
+
continuousSpinRef.current.stop();
|
|
95
|
+
continuousSpinRef.current = null;
|
|
150
96
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
|
|
158
|
-
const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
159
|
-
|
|
160
|
-
// Number of full spins (e.g., 3 to 5)
|
|
161
|
-
const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
|
|
162
|
-
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
163
|
-
|
|
164
|
-
// Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
|
|
165
|
-
if (targetRotation < 360) {
|
|
166
|
-
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
167
|
-
}
|
|
168
|
-
} else {
|
|
169
|
-
const randomSpins = 3 + Math.random() * 2;
|
|
170
|
-
const randomAngle = Math.random() * 360;
|
|
171
|
-
targetRotation = 360 * randomSpins + randomAngle;
|
|
97
|
+
const winnerId = typeof winner === "object" ? winner.id : winner;
|
|
98
|
+
const winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
|
|
99
|
+
if (winnerTargetIndex === -1) {
|
|
100
|
+
handleSpinEnd();
|
|
101
|
+
return;
|
|
172
102
|
}
|
|
103
|
+
const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
|
|
104
|
+
const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
|
|
105
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
106
|
+
const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
|
|
107
|
+
const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
108
|
+
const additionalSpins = 2;
|
|
109
|
+
const targetRotation = additionalSpins * 360 + angleOffset;
|
|
173
110
|
Animated.timing(rotateValue, {
|
|
174
111
|
toValue: rotationRef.current + targetRotation / 360,
|
|
175
112
|
duration: spinDuration,
|
|
@@ -177,8 +114,66 @@ const SpinWheel = ({
|
|
|
177
114
|
useNativeDriver: true
|
|
178
115
|
}).start(() => handleSpinEnd());
|
|
179
116
|
};
|
|
117
|
+
const handleSpin = async () => {
|
|
118
|
+
if (spinning || !enabled || wheelItems.length === 0) return;
|
|
119
|
+
setSpinning(true);
|
|
120
|
+
asyncWinnerRef.current = null;
|
|
121
|
+
spinStartTimeRef.current = Date.now();
|
|
122
|
+
onSpinStart?.();
|
|
180
123
|
|
|
181
|
-
|
|
124
|
+
// If using async API call
|
|
125
|
+
if (onSpinPress) {
|
|
126
|
+
startContinuousSpin();
|
|
127
|
+
try {
|
|
128
|
+
const winner = await onSpinPress();
|
|
129
|
+
const elapsedTime = Date.now() - spinStartTimeRef.current;
|
|
130
|
+
const remainingBufferTime = Math.max(0, minSpinTime - elapsedTime);
|
|
131
|
+
if (remainingBufferTime > 0) {
|
|
132
|
+
setTimeout(() => {
|
|
133
|
+
stopAndLandOnWinner(winner);
|
|
134
|
+
}, remainingBufferTime);
|
|
135
|
+
} else {
|
|
136
|
+
stopAndLandOnWinner(winner);
|
|
137
|
+
}
|
|
138
|
+
} catch (error) {
|
|
139
|
+
console.error("Error fetching winner:", error);
|
|
140
|
+
if (continuousSpinRef.current) {
|
|
141
|
+
continuousSpinRef.current.stop();
|
|
142
|
+
}
|
|
143
|
+
setSpinning(false);
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
// Original behavior with predeterminedWinner
|
|
147
|
+
let targetRotation = 0;
|
|
148
|
+
let winnerTargetIndex = -1;
|
|
149
|
+
if (predeterminedWinner) {
|
|
150
|
+
const winnerId = typeof predeterminedWinner === "object" ? predeterminedWinner.id : predeterminedWinner;
|
|
151
|
+
winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
|
|
152
|
+
}
|
|
153
|
+
if (winnerTargetIndex !== -1) {
|
|
154
|
+
const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
|
|
155
|
+
const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
|
|
156
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
157
|
+
const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
|
|
158
|
+
const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
159
|
+
const numberOfFullSpins = 3 + Math.floor(Math.random() * 3);
|
|
160
|
+
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
161
|
+
if (targetRotation < 360) {
|
|
162
|
+
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
163
|
+
}
|
|
164
|
+
} else {
|
|
165
|
+
const randomSpins = 3 + Math.random() * 2;
|
|
166
|
+
const randomAngle = Math.random() * 360;
|
|
167
|
+
targetRotation = 360 * randomSpins + randomAngle;
|
|
168
|
+
}
|
|
169
|
+
Animated.timing(rotateValue, {
|
|
170
|
+
toValue: rotationRef.current + targetRotation / 360,
|
|
171
|
+
duration: spinDuration,
|
|
172
|
+
easing: Easing.out(Easing.cubic),
|
|
173
|
+
useNativeDriver: true
|
|
174
|
+
}).start(() => handleSpinEnd());
|
|
175
|
+
}
|
|
176
|
+
};
|
|
182
177
|
const handleSpinEnd = () => {
|
|
183
178
|
setSpinning(false);
|
|
184
179
|
const normalizedAngle = rotationRef.current * 360 % 360;
|
|
@@ -193,8 +188,6 @@ const SpinWheel = ({
|
|
|
193
188
|
onSpinEnd?.(wheelItems[0]);
|
|
194
189
|
}
|
|
195
190
|
};
|
|
196
|
-
|
|
197
|
-
// Animation interpolation for rotation
|
|
198
191
|
const rotate = rotateValue.interpolate({
|
|
199
192
|
inputRange: [0, 1],
|
|
200
193
|
outputRange: ["0deg", "360deg"]
|
|
@@ -227,13 +220,11 @@ const SpinWheel = ({
|
|
|
227
220
|
textX,
|
|
228
221
|
textY,
|
|
229
222
|
angle
|
|
230
|
-
}
|
|
223
|
+
}) => {
|
|
231
224
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
232
225
|
children: [/*#__PURE__*/_jsx(Path, {
|
|
233
226
|
d: path,
|
|
234
227
|
fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
|
|
235
|
-
// stroke="#FA8072"
|
|
236
|
-
// strokeWidth={1}
|
|
237
228
|
}), /*#__PURE__*/_jsx(SvgText, {
|
|
238
229
|
x: textX,
|
|
239
230
|
y: textY,
|
|
@@ -242,7 +233,7 @@ const SpinWheel = ({
|
|
|
242
233
|
fontWeight: wheelTextStyle?.fontWeight || "bold",
|
|
243
234
|
textAnchor: "middle",
|
|
244
235
|
alignmentBaseline: "central",
|
|
245
|
-
transform: `rotate(${angle + 180}, ${textX}, ${textY}
|
|
236
|
+
transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
|
|
246
237
|
children: item.label
|
|
247
238
|
})]
|
|
248
239
|
}, item.id);
|
|
@@ -256,7 +247,20 @@ const SpinWheel = ({
|
|
|
256
247
|
fill: "none"
|
|
257
248
|
})]
|
|
258
249
|
})
|
|
259
|
-
}), /*#__PURE__*/_jsx(View, {
|
|
250
|
+
}), centerComponent ? /*#__PURE__*/_jsx(View, {
|
|
251
|
+
style: {
|
|
252
|
+
position: "absolute",
|
|
253
|
+
top: "50%",
|
|
254
|
+
left: "50%",
|
|
255
|
+
transform: [{
|
|
256
|
+
translateX: -(actualCenterSize / 2)
|
|
257
|
+
}, {
|
|
258
|
+
translateY: -(actualCenterSize / 2)
|
|
259
|
+
}],
|
|
260
|
+
zIndex: 1
|
|
261
|
+
},
|
|
262
|
+
children: centerComponent
|
|
263
|
+
}) : /*#__PURE__*/_jsx(View, {
|
|
260
264
|
style: [styles.wheelCenter, {
|
|
261
265
|
width: actualCenterSize,
|
|
262
266
|
height: actualCenterSize,
|
|
@@ -302,7 +306,7 @@ const styles = StyleSheet.create({
|
|
|
302
306
|
alignItems: "center",
|
|
303
307
|
justifyContent: "center",
|
|
304
308
|
marginTop: 20,
|
|
305
|
-
marginBottom: 70
|
|
309
|
+
marginBottom: 70
|
|
306
310
|
},
|
|
307
311
|
wheelContainer: {
|
|
308
312
|
overflow: "hidden",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useRef","useEffect","View","StyleSheet","Animated","Easing","Svg","Path","G","Text","SvgText","Circle","Button","jsx","_jsx","jsxs","_jsxs","colors","SpinWheel","items","predeterminedWinner","size","spinDuration","enabled","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","wheelItems","length","spinning","setSpinning","_","setWinner","rotateValue","Value","current","rotationRef","listener","addListener","value","removeListener","anglePerItem","generateWheelPaths","map","item","index","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","handleSpin","targetRotation","winnerTargetIndex","winnerId","id","findIndex","targetSegmentCenterAngle","targetNormalizedAngle","currentAbsoluteAngle","currentNormalizedAngle","angleOffset","numberOfFullSpins","floor","random","randomSpins","randomAngle","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","handleSpinEnd","normalizedAngle","winningIndex","adjustedIndex","finalWinnerIndex","winningItem","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","x","y","textColor","fontSize","fontWeight","textAnchor","alignmentBaseline","label","cx","cy","r","stroke","strokeWidth","wheelCenter","translateX","translateY","pointerPosition","top","pointer","borderBottomColor","position","alignItems","justifyContent","bottom","zIndex","actionButton","onPress","title","disabled","textStyle","actionButtonText","create","marginTop","marginBottom","overflow","backgroundColor","left","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","paddingHorizontal","paddingVertical","shadowColor","shadowRadius"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useState","useRef","useEffect","View","StyleSheet","Animated","Easing","Svg","Path","G","Text","SvgText","Circle","Button","jsx","_jsx","jsxs","_jsxs","colors","SpinWheel","items","predeterminedWinner","size","spinDuration","enabled","onSpinPress","minSpinTime","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","centerComponent","wheelItems","length","spinning","setSpinning","_","setWinner","rotateValue","Value","current","rotationRef","asyncWinnerRef","spinStartTimeRef","continuousSpinRef","listener","addListener","value","removeListener","anglePerItem","generateWheelPaths","map","item","index","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","startContinuousSpin","numberOfSpins","targetRotation","loop","timing","toValue","duration","easing","linear","useNativeDriver","start","stopAndLandOnWinner","winner","stop","winnerId","id","winnerTargetIndex","findIndex","handleSpinEnd","targetSegmentCenterAngle","targetNormalizedAngle","currentAbsoluteAngle","currentNormalizedAngle","angleOffset","additionalSpins","out","cubic","handleSpin","Date","now","elapsedTime","remainingBufferTime","max","setTimeout","error","console","numberOfFullSpins","floor","random","randomSpins","randomAngle","normalizedAngle","winningIndex","adjustedIndex","finalWinnerIndex","winningItem","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","x","y","textColor","fontSize","fontWeight","textAnchor","alignmentBaseline","label","cx","cy","r","stroke","strokeWidth","position","top","left","translateX","translateY","zIndex","wheelCenter","pointerPosition","pointer","borderBottomColor","alignItems","justifyContent","bottom","actionButton","onPress","title","disabled","textStyle","actionButtonText","create","marginTop","marginBottom","overflow","backgroundColor","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","paddingHorizontal","paddingVertical","shadowColor","shadowRadius"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,6 +15,8 @@ interface SpinWheelProps {
|
|
|
15
15
|
spinDuration?: number;
|
|
16
16
|
friction?: number;
|
|
17
17
|
enabled?: boolean;
|
|
18
|
+
onSpinPress?: () => Promise<SpinWheelItem | string | number>;
|
|
19
|
+
minSpinTime?: number;
|
|
18
20
|
onSpinStart?: () => void;
|
|
19
21
|
onSpinEnd?: (item: SpinWheelItem) => void;
|
|
20
22
|
containerStyle?: ViewStyle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../../../src/components/Wheel/Wheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAOL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"Wheel.d.ts","sourceRoot":"","sources":["../../../../../src/components/Wheel/Wheel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAOL,SAAS,EACT,SAAS,EACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA2XvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -20,80 +20,52 @@ export interface SpinWheelItem {
|
|
|
20
20
|
textColor?: string;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
//default random colors
|
|
24
23
|
const colors = [
|
|
25
|
-
"#FF0000",
|
|
26
|
-
"#
|
|
27
|
-
"#
|
|
28
|
-
"#
|
|
29
|
-
"#
|
|
30
|
-
"#800080", // Purple
|
|
31
|
-
"#FFC0CB", // Pink
|
|
32
|
-
"#00FFFF", // Cyan
|
|
33
|
-
"#FF00FF", // Magenta
|
|
34
|
-
"#00FF00", // Lime
|
|
35
|
-
"#4B0082", // Indigo
|
|
36
|
-
"#EE82EE", // Violet
|
|
37
|
-
"#40E0D0", // Turquoise
|
|
38
|
-
"#FFD700", // Gold
|
|
39
|
-
"#C0C0C0", // Silver
|
|
40
|
-
"#FFDAB9", // Peach
|
|
41
|
-
"#E6E6FA", // Lavender
|
|
42
|
-
"#008080", // Teal
|
|
43
|
-
"#FF7F50", // Coral
|
|
44
|
-
"#DC143C", // Crimson
|
|
45
|
-
"#87CEEB", // Sky Blue
|
|
46
|
-
"#7FFF00", // Chartreuse
|
|
47
|
-
"#CCCCFF", // Periwinkle
|
|
48
|
-
"#FF6347", // Tomato
|
|
49
|
-
"#FA8072", // Salmon
|
|
24
|
+
"#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080",
|
|
25
|
+
"#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE",
|
|
26
|
+
"#40E0D0", "#FFD700", "#C0C0C0", "#FFDAB9", "#E6E6FA", "#008080",
|
|
27
|
+
"#FF7F50", "#DC143C", "#87CEEB", "#7FFF00", "#CCCCFF", "#FF6347",
|
|
28
|
+
"#FA8072",
|
|
50
29
|
];
|
|
51
30
|
|
|
52
31
|
interface SpinWheelProps {
|
|
53
|
-
// Data
|
|
54
32
|
items: SpinWheelItem[];
|
|
55
33
|
predeterminedWinner?: SpinWheelItem | string | number;
|
|
56
|
-
|
|
57
|
-
// Dimensions
|
|
58
34
|
size?: number;
|
|
59
|
-
|
|
60
|
-
// Behavior
|
|
61
35
|
spinDuration?: number;
|
|
62
|
-
friction?: number;
|
|
36
|
+
friction?: number;
|
|
63
37
|
enabled?: boolean;
|
|
64
|
-
|
|
65
|
-
//
|
|
38
|
+
|
|
39
|
+
// New props for async winner
|
|
40
|
+
onSpinPress?: () => Promise<SpinWheelItem | string | number>;
|
|
41
|
+
minSpinTime?: number; // Minimum time to spin before winner can be set
|
|
42
|
+
|
|
66
43
|
onSpinStart?: () => void;
|
|
67
44
|
onSpinEnd?: (item: SpinWheelItem) => void;
|
|
68
|
-
|
|
69
|
-
// Styling
|
|
70
45
|
containerStyle?: ViewStyle;
|
|
71
46
|
centerStyle?: ViewStyle;
|
|
72
47
|
spinButtonText?: string;
|
|
73
48
|
wheelTextStyle?: TextStyle;
|
|
74
49
|
knobStyle?: ViewStyle;
|
|
75
50
|
actionButtonStyle?: ViewStyle;
|
|
76
|
-
actionButtonTextStyle?: TextStyle
|
|
77
|
-
actionButtonProps?: Partial<
|
|
78
|
-
|
|
79
|
-
>;
|
|
80
|
-
|
|
81
|
-
wheelBorderColor?: string;
|
|
51
|
+
actionButtonTextStyle?: TextStyle;
|
|
52
|
+
actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
|
|
53
|
+
wheelBorderColor?: string;
|
|
82
54
|
wheelBorderWidth?: number;
|
|
83
55
|
wheelTextColor?: string;
|
|
84
56
|
knobColor?: string;
|
|
85
|
-
|
|
86
57
|
centerSize?: number;
|
|
87
|
-
|
|
88
|
-
centerComponent?: React.ReactNode; // Note: centerComponent prop is declared but not used
|
|
58
|
+
centerComponent?: React.ReactNode;
|
|
89
59
|
}
|
|
90
60
|
|
|
91
61
|
const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
92
62
|
items,
|
|
93
|
-
predeterminedWinner,
|
|
63
|
+
predeterminedWinner,
|
|
94
64
|
size = 300,
|
|
95
65
|
spinDuration = 5000,
|
|
96
66
|
enabled = true,
|
|
67
|
+
onSpinPress,
|
|
68
|
+
minSpinTime = 2000,
|
|
97
69
|
onSpinStart,
|
|
98
70
|
onSpinEnd,
|
|
99
71
|
containerStyle,
|
|
@@ -108,18 +80,21 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
108
80
|
wheelBorderWidth,
|
|
109
81
|
wheelTextColor = "#FFFFFF",
|
|
110
82
|
actionButtonProps,
|
|
111
|
-
centerSize
|
|
83
|
+
centerSize,
|
|
84
|
+
centerComponent,
|
|
112
85
|
}) => {
|
|
113
86
|
const wheelItems = items.length > 0 ? items : [];
|
|
114
87
|
|
|
115
88
|
const [spinning, setSpinning] = useState(false);
|
|
116
89
|
const [_, setWinner] = useState<SpinWheelItem | null>(null);
|
|
117
90
|
const rotateValue = useRef(new Animated.Value(0)).current;
|
|
118
|
-
|
|
119
|
-
// Track rotation manually for calculations
|
|
120
91
|
const rotationRef = useRef(0);
|
|
92
|
+
|
|
93
|
+
// Track the async winner state
|
|
94
|
+
const asyncWinnerRef = useRef<SpinWheelItem | string | number | null>(null);
|
|
95
|
+
const spinStartTimeRef = useRef<number>(0);
|
|
96
|
+
const continuousSpinRef = useRef<Animated.CompositeAnimation | null>(null);
|
|
121
97
|
|
|
122
|
-
// Update tracked rotation when animation completes
|
|
123
98
|
useEffect(() => {
|
|
124
99
|
const listener = rotateValue.addListener(({ value }) => {
|
|
125
100
|
rotationRef.current = value;
|
|
@@ -130,11 +105,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
130
105
|
};
|
|
131
106
|
}, [rotateValue]);
|
|
132
107
|
|
|
133
|
-
|
|
134
|
-
const anglePerItem =
|
|
135
|
-
wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
108
|
+
const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
136
109
|
|
|
137
|
-
// Create wheel segments
|
|
138
110
|
const generateWheelPaths = () => {
|
|
139
111
|
if (wheelItems.length === 0) return [];
|
|
140
112
|
return wheelItems.map((item, index) => {
|
|
@@ -162,17 +134,11 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
162
134
|
const textX = size / 2 + size * 0.32 * Math.cos(midRad);
|
|
163
135
|
const textY = size / 2 + size * 0.32 * Math.sin(midRad);
|
|
164
136
|
|
|
165
|
-
// decorationX and decorationY are calculated but not used in the provided JSX
|
|
166
|
-
// const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
|
|
167
|
-
// const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
|
|
168
|
-
|
|
169
137
|
return {
|
|
170
138
|
path: pathData,
|
|
171
139
|
item,
|
|
172
140
|
textX,
|
|
173
141
|
textY,
|
|
174
|
-
// decorationX,
|
|
175
|
-
// decorationY,
|
|
176
142
|
angle: (startAngle + endAngle) / 2,
|
|
177
143
|
};
|
|
178
144
|
});
|
|
@@ -180,52 +146,49 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
180
146
|
|
|
181
147
|
const wheelPaths = generateWheelPaths();
|
|
182
148
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
149
|
+
const startContinuousSpin = () => {
|
|
150
|
+
const numberOfSpins = 2;
|
|
151
|
+
const targetRotation = numberOfSpins * 360;
|
|
152
|
+
|
|
153
|
+
continuousSpinRef.current = Animated.loop(
|
|
154
|
+
Animated.timing(rotateValue, {
|
|
155
|
+
toValue: rotationRef.current + targetRotation / 360,
|
|
156
|
+
duration: 2000,
|
|
157
|
+
easing: Easing.linear,
|
|
158
|
+
useNativeDriver: true,
|
|
159
|
+
})
|
|
160
|
+
);
|
|
189
161
|
|
|
190
|
-
|
|
191
|
-
|
|
162
|
+
continuousSpinRef.current.start();
|
|
163
|
+
};
|
|
192
164
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
: predeterminedWinner;
|
|
198
|
-
winnerTargetIndex = wheelItems.findIndex((item) => item.id === winnerId);
|
|
165
|
+
const stopAndLandOnWinner = (winner: SpinWheelItem | string | number) => {
|
|
166
|
+
if (continuousSpinRef.current) {
|
|
167
|
+
continuousSpinRef.current.stop();
|
|
168
|
+
continuousSpinRef.current = null;
|
|
199
169
|
}
|
|
200
170
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
171
|
+
const winnerId = typeof winner === "object" ? winner.id : winner;
|
|
172
|
+
const winnerTargetIndex = wheelItems.findIndex(
|
|
173
|
+
(item) => item.id === winnerId
|
|
174
|
+
);
|
|
204
175
|
|
|
205
|
-
|
|
206
|
-
|
|
176
|
+
if (winnerTargetIndex === -1) {
|
|
177
|
+
handleSpinEnd();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
207
180
|
|
|
208
|
-
|
|
209
|
-
|
|
181
|
+
const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
|
|
182
|
+
const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
|
|
210
183
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
184
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
185
|
+
const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
|
|
214
186
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
187
|
+
const angleOffset =
|
|
188
|
+
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
218
189
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
} else {
|
|
225
|
-
const randomSpins = 3 + Math.random() * 2;
|
|
226
|
-
const randomAngle = Math.random() * 360;
|
|
227
|
-
targetRotation = 360 * randomSpins + randomAngle;
|
|
228
|
-
}
|
|
190
|
+
const additionalSpins = 2;
|
|
191
|
+
const targetRotation = additionalSpins * 360 + angleOffset;
|
|
229
192
|
|
|
230
193
|
Animated.timing(rotateValue, {
|
|
231
194
|
toValue: rotationRef.current + targetRotation / 360,
|
|
@@ -235,7 +198,87 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
235
198
|
}).start(() => handleSpinEnd());
|
|
236
199
|
};
|
|
237
200
|
|
|
238
|
-
|
|
201
|
+
const handleSpin = async () => {
|
|
202
|
+
if (spinning || !enabled || wheelItems.length === 0) return;
|
|
203
|
+
|
|
204
|
+
setSpinning(true);
|
|
205
|
+
asyncWinnerRef.current = null;
|
|
206
|
+
spinStartTimeRef.current = Date.now();
|
|
207
|
+
onSpinStart?.();
|
|
208
|
+
|
|
209
|
+
// If using async API call
|
|
210
|
+
if (onSpinPress) {
|
|
211
|
+
startContinuousSpin();
|
|
212
|
+
|
|
213
|
+
try {
|
|
214
|
+
const winner = await onSpinPress();
|
|
215
|
+
const elapsedTime = Date.now() - spinStartTimeRef.current;
|
|
216
|
+
const remainingBufferTime = Math.max(0, minSpinTime - elapsedTime);
|
|
217
|
+
|
|
218
|
+
if (remainingBufferTime > 0) {
|
|
219
|
+
setTimeout(() => {
|
|
220
|
+
stopAndLandOnWinner(winner);
|
|
221
|
+
}, remainingBufferTime);
|
|
222
|
+
} else {
|
|
223
|
+
stopAndLandOnWinner(winner);
|
|
224
|
+
}
|
|
225
|
+
} catch (error) {
|
|
226
|
+
console.error("Error fetching winner:", error);
|
|
227
|
+
if (continuousSpinRef.current) {
|
|
228
|
+
continuousSpinRef.current.stop();
|
|
229
|
+
}
|
|
230
|
+
setSpinning(false);
|
|
231
|
+
}
|
|
232
|
+
} else {
|
|
233
|
+
// Original behavior with predeterminedWinner
|
|
234
|
+
let targetRotation = 0;
|
|
235
|
+
let winnerTargetIndex = -1;
|
|
236
|
+
|
|
237
|
+
if (predeterminedWinner) {
|
|
238
|
+
const winnerId =
|
|
239
|
+
typeof predeterminedWinner === "object"
|
|
240
|
+
? predeterminedWinner.id
|
|
241
|
+
: predeterminedWinner;
|
|
242
|
+
winnerTargetIndex = wheelItems.findIndex(
|
|
243
|
+
(item) => item.id === winnerId
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (winnerTargetIndex !== -1) {
|
|
248
|
+
const targetSegmentCenterAngle =
|
|
249
|
+
(winnerTargetIndex + 0.5) * anglePerItem;
|
|
250
|
+
|
|
251
|
+
const targetNormalizedAngle =
|
|
252
|
+
(270 - targetSegmentCenterAngle + 360) % 360;
|
|
253
|
+
|
|
254
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
255
|
+
const currentNormalizedAngle =
|
|
256
|
+
(currentAbsoluteAngle % 360 + 360) % 360;
|
|
257
|
+
|
|
258
|
+
const angleOffset =
|
|
259
|
+
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
260
|
+
|
|
261
|
+
const numberOfFullSpins = 3 + Math.floor(Math.random() * 3);
|
|
262
|
+
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
263
|
+
|
|
264
|
+
if (targetRotation < 360) {
|
|
265
|
+
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
266
|
+
}
|
|
267
|
+
} else {
|
|
268
|
+
const randomSpins = 3 + Math.random() * 2;
|
|
269
|
+
const randomAngle = Math.random() * 360;
|
|
270
|
+
targetRotation = 360 * randomSpins + randomAngle;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
Animated.timing(rotateValue, {
|
|
274
|
+
toValue: rotationRef.current + targetRotation / 360,
|
|
275
|
+
duration: spinDuration,
|
|
276
|
+
easing: Easing.out(Easing.cubic),
|
|
277
|
+
useNativeDriver: true,
|
|
278
|
+
}).start(() => handleSpinEnd());
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
|
|
239
282
|
const handleSpinEnd = () => {
|
|
240
283
|
setSpinning(false);
|
|
241
284
|
|
|
@@ -254,11 +297,10 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
254
297
|
setWinner(winningItem);
|
|
255
298
|
onSpinEnd?.(winningItem);
|
|
256
299
|
} else if (wheelItems.length > 0) {
|
|
257
|
-
onSpinEnd?.(wheelItems[0]);
|
|
300
|
+
onSpinEnd?.(wheelItems[0]);
|
|
258
301
|
}
|
|
259
302
|
};
|
|
260
303
|
|
|
261
|
-
// Animation interpolation for rotation
|
|
262
304
|
const rotate = rotateValue.interpolate({
|
|
263
305
|
inputRange: [0, 1],
|
|
264
306
|
outputRange: ["0deg", "360deg"],
|
|
@@ -269,7 +311,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
269
311
|
return (
|
|
270
312
|
<View style={[styles.container, containerStyle]}>
|
|
271
313
|
<View style={{ width: size, height: size }}>
|
|
272
|
-
{/* The wheel */}
|
|
273
314
|
<Animated.View
|
|
274
315
|
style={[
|
|
275
316
|
styles.wheelContainer,
|
|
@@ -283,7 +324,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
283
324
|
>
|
|
284
325
|
<Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
|
|
285
326
|
<G>
|
|
286
|
-
{wheelPaths.map(({ path, item, textX, textY, angle }
|
|
327
|
+
{wheelPaths.map(({ path, item, textX, textY, angle }) => {
|
|
287
328
|
return (
|
|
288
329
|
<React.Fragment key={item.id}>
|
|
289
330
|
<Path
|
|
@@ -293,18 +334,18 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
293
334
|
? colors[Math.floor(Math.random() * colors.length)]
|
|
294
335
|
: item.color
|
|
295
336
|
}
|
|
296
|
-
// stroke="#FA8072"
|
|
297
|
-
// strokeWidth={1}
|
|
298
337
|
/>
|
|
299
338
|
<SvgText
|
|
300
339
|
x={textX}
|
|
301
340
|
y={textY}
|
|
302
341
|
fill={item.textColor || wheelTextColor}
|
|
303
342
|
fontSize={wheelTextStyle?.fontSize || 14}
|
|
304
|
-
fontWeight={
|
|
343
|
+
fontWeight={
|
|
344
|
+
(wheelTextStyle?.fontWeight as any) || "bold"
|
|
345
|
+
}
|
|
305
346
|
textAnchor="middle"
|
|
306
347
|
alignmentBaseline="central"
|
|
307
|
-
transform={`rotate(${angle + 180}, ${textX}, ${textY}
|
|
348
|
+
transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
|
|
308
349
|
>
|
|
309
350
|
{item.label}
|
|
310
351
|
</SvgText>
|
|
@@ -326,24 +367,39 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
326
367
|
</Svg>
|
|
327
368
|
</Animated.View>
|
|
328
369
|
|
|
329
|
-
{
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
height: actualCenterSize,
|
|
336
|
-
borderRadius: actualCenterSize / 2,
|
|
370
|
+
{centerComponent ? (
|
|
371
|
+
<View
|
|
372
|
+
style={{
|
|
373
|
+
position: "absolute",
|
|
374
|
+
top: "50%",
|
|
375
|
+
left: "50%",
|
|
337
376
|
transform: [
|
|
338
|
-
{ translateX: -actualCenterSize / 2 },
|
|
339
|
-
{ translateY: -actualCenterSize / 2 },
|
|
377
|
+
{ translateX: -(actualCenterSize / 2) },
|
|
378
|
+
{ translateY: -(actualCenterSize / 2) },
|
|
340
379
|
],
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
380
|
+
zIndex: 1,
|
|
381
|
+
}}
|
|
382
|
+
>
|
|
383
|
+
{centerComponent}
|
|
384
|
+
</View>
|
|
385
|
+
) : (
|
|
386
|
+
<View
|
|
387
|
+
style={[
|
|
388
|
+
styles.wheelCenter,
|
|
389
|
+
{
|
|
390
|
+
width: actualCenterSize,
|
|
391
|
+
height: actualCenterSize,
|
|
392
|
+
borderRadius: actualCenterSize / 2,
|
|
393
|
+
transform: [
|
|
394
|
+
{ translateX: -actualCenterSize / 2 },
|
|
395
|
+
{ translateY: -actualCenterSize / 2 },
|
|
396
|
+
],
|
|
397
|
+
},
|
|
398
|
+
centerStyle,
|
|
399
|
+
]}
|
|
400
|
+
/>
|
|
401
|
+
)}
|
|
345
402
|
|
|
346
|
-
{/* The pointer is a triangle on top */}
|
|
347
403
|
<View
|
|
348
404
|
style={[
|
|
349
405
|
styles.pointerPosition,
|
|
@@ -359,7 +415,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
359
415
|
/>
|
|
360
416
|
</View>
|
|
361
417
|
|
|
362
|
-
{/* Action Button */}
|
|
363
418
|
<View
|
|
364
419
|
style={{
|
|
365
420
|
position: "absolute",
|
|
@@ -378,15 +433,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
378
433
|
textStyle={[styles.actionButtonText, actionButtonTextStyle]}
|
|
379
434
|
{...actionButtonProps}
|
|
380
435
|
/>
|
|
381
|
-
{/* <TouchableOpacity
|
|
382
|
-
onPress={handleSpin}
|
|
383
|
-
disabled={spinning || !enabled || wheelItems.length === 0}
|
|
384
|
-
style={[styles.actionButton, actionButtonStyle]}
|
|
385
|
-
>
|
|
386
|
-
<Text style={[styles.actionButtonText, actionButtonTextStyle]}>
|
|
387
|
-
{spinButtonText}
|
|
388
|
-
</Text>
|
|
389
|
-
</TouchableOpacity> */}
|
|
390
436
|
</View>
|
|
391
437
|
</View>
|
|
392
438
|
</View>
|
|
@@ -398,7 +444,7 @@ const styles = StyleSheet.create({
|
|
|
398
444
|
alignItems: "center",
|
|
399
445
|
justifyContent: "center",
|
|
400
446
|
marginTop: 20,
|
|
401
|
-
marginBottom: 70,
|
|
447
|
+
marginBottom: 70,
|
|
402
448
|
},
|
|
403
449
|
wheelContainer: {
|
|
404
450
|
overflow: "hidden",
|
|
@@ -426,7 +472,7 @@ const styles = StyleSheet.create({
|
|
|
426
472
|
borderStyle: "solid",
|
|
427
473
|
borderLeftWidth: 10,
|
|
428
474
|
borderRightWidth: 10,
|
|
429
|
-
borderBottomWidth: 15,
|
|
475
|
+
borderBottomWidth: 15,
|
|
430
476
|
borderLeftColor: "transparent",
|
|
431
477
|
borderRightColor: "transparent",
|
|
432
478
|
},
|
|
@@ -444,4 +490,4 @@ const styles = StyleSheet.create({
|
|
|
444
490
|
},
|
|
445
491
|
});
|
|
446
492
|
|
|
447
|
-
export default SpinWheel;
|
|
493
|
+
export default SpinWheel;
|