related-ui-components 3.2.5 → 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 +96 -107
- 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 +149 -122
|
@@ -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,
|
|
@@ -84,11 +35,12 @@ const SpinWheel = ({
|
|
|
84
35
|
const [spinning, setSpinning] = useState(false);
|
|
85
36
|
const [_, setWinner] = useState(null);
|
|
86
37
|
const rotateValue = useRef(new Animated.Value(0)).current;
|
|
87
|
-
|
|
88
|
-
// Track rotation manually for calculations
|
|
89
38
|
const rotationRef = useRef(0);
|
|
90
39
|
|
|
91
|
-
//
|
|
40
|
+
// Track the async winner state
|
|
41
|
+
const asyncWinnerRef = useRef(null);
|
|
42
|
+
const spinStartTimeRef = useRef(0);
|
|
43
|
+
const continuousSpinRef = useRef(null);
|
|
92
44
|
useEffect(() => {
|
|
93
45
|
const listener = rotateValue.addListener(({
|
|
94
46
|
value
|
|
@@ -99,11 +51,7 @@ const SpinWheel = ({
|
|
|
99
51
|
rotateValue.removeListener(listener);
|
|
100
52
|
};
|
|
101
53
|
}, [rotateValue]);
|
|
102
|
-
|
|
103
|
-
// Calculate angle for each segment
|
|
104
54
|
const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
105
|
-
|
|
106
|
-
// Create wheel segments
|
|
107
55
|
const generateWheelPaths = () => {
|
|
108
56
|
if (wheelItems.length === 0) return [];
|
|
109
57
|
return wheelItems.map((item, index) => {
|
|
@@ -120,57 +68,45 @@ const SpinWheel = ({
|
|
|
120
68
|
const midRad = (startAngle + endAngle) / 2 * (Math.PI / 180);
|
|
121
69
|
const textX = size / 2 + size * 0.32 * Math.cos(midRad);
|
|
122
70
|
const textY = size / 2 + size * 0.32 * Math.sin(midRad);
|
|
123
|
-
|
|
124
|
-
// decorationX and decorationY are calculated but not used in the provided JSX
|
|
125
|
-
// const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
|
|
126
|
-
// const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
|
|
127
|
-
|
|
128
71
|
return {
|
|
129
72
|
path: pathData,
|
|
130
73
|
item,
|
|
131
74
|
textX,
|
|
132
75
|
textY,
|
|
133
|
-
// decorationX,
|
|
134
|
-
// decorationY,
|
|
135
76
|
angle: (startAngle + endAngle) / 2
|
|
136
77
|
};
|
|
137
78
|
});
|
|
138
79
|
};
|
|
139
80
|
const wheelPaths = generateWheelPaths();
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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;
|
|
151
96
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
// Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
|
|
159
|
-
const angleOffset = (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
160
|
-
|
|
161
|
-
// Number of full spins (e.g., 3 to 5)
|
|
162
|
-
const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
|
|
163
|
-
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
164
|
-
|
|
165
|
-
// Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
|
|
166
|
-
if (targetRotation < 360) {
|
|
167
|
-
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
168
|
-
}
|
|
169
|
-
} else {
|
|
170
|
-
const randomSpins = 3 + Math.random() * 2;
|
|
171
|
-
const randomAngle = Math.random() * 360;
|
|
172
|
-
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;
|
|
173
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;
|
|
174
110
|
Animated.timing(rotateValue, {
|
|
175
111
|
toValue: rotationRef.current + targetRotation / 360,
|
|
176
112
|
duration: spinDuration,
|
|
@@ -178,8 +114,66 @@ const SpinWheel = ({
|
|
|
178
114
|
useNativeDriver: true
|
|
179
115
|
}).start(() => handleSpinEnd());
|
|
180
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?.();
|
|
181
123
|
|
|
182
|
-
|
|
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
|
+
};
|
|
183
177
|
const handleSpinEnd = () => {
|
|
184
178
|
setSpinning(false);
|
|
185
179
|
const normalizedAngle = rotationRef.current * 360 % 360;
|
|
@@ -194,8 +188,6 @@ const SpinWheel = ({
|
|
|
194
188
|
onSpinEnd?.(wheelItems[0]);
|
|
195
189
|
}
|
|
196
190
|
};
|
|
197
|
-
|
|
198
|
-
// Animation interpolation for rotation
|
|
199
191
|
const rotate = rotateValue.interpolate({
|
|
200
192
|
inputRange: [0, 1],
|
|
201
193
|
outputRange: ["0deg", "360deg"]
|
|
@@ -228,13 +220,11 @@ const SpinWheel = ({
|
|
|
228
220
|
textX,
|
|
229
221
|
textY,
|
|
230
222
|
angle
|
|
231
|
-
}
|
|
223
|
+
}) => {
|
|
232
224
|
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
233
225
|
children: [/*#__PURE__*/_jsx(Path, {
|
|
234
226
|
d: path,
|
|
235
227
|
fill: item.color == "" || item.color == null ? colors[Math.floor(Math.random() * colors.length)] : item.color
|
|
236
|
-
// stroke="#FA8072"
|
|
237
|
-
// strokeWidth={1}
|
|
238
228
|
}), /*#__PURE__*/_jsx(SvgText, {
|
|
239
229
|
x: textX,
|
|
240
230
|
y: textY,
|
|
@@ -243,7 +233,7 @@ const SpinWheel = ({
|
|
|
243
233
|
fontWeight: wheelTextStyle?.fontWeight || "bold",
|
|
244
234
|
textAnchor: "middle",
|
|
245
235
|
alignmentBaseline: "central",
|
|
246
|
-
transform: `rotate(${angle + 180}, ${textX}, ${textY}
|
|
236
|
+
transform: `rotate(${angle + 180}, ${textX}, ${textY})`,
|
|
247
237
|
children: item.label
|
|
248
238
|
})]
|
|
249
239
|
}, item.id);
|
|
@@ -262,7 +252,6 @@ const SpinWheel = ({
|
|
|
262
252
|
position: "absolute",
|
|
263
253
|
top: "50%",
|
|
264
254
|
left: "50%",
|
|
265
|
-
// Center the component perfectly
|
|
266
255
|
transform: [{
|
|
267
256
|
translateX: -(actualCenterSize / 2)
|
|
268
257
|
}, {
|
|
@@ -317,7 +306,7 @@ const styles = StyleSheet.create({
|
|
|
317
306
|
alignItems: "center",
|
|
318
307
|
justifyContent: "center",
|
|
319
308
|
marginTop: 20,
|
|
320
|
-
marginBottom: 70
|
|
309
|
+
marginBottom: 70
|
|
321
310
|
},
|
|
322
311
|
wheelContainer: {
|
|
323
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","centerComponent","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","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":[]}
|
|
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,
|
|
@@ -109,18 +81,20 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
109
81
|
wheelTextColor = "#FFFFFF",
|
|
110
82
|
actionButtonProps,
|
|
111
83
|
centerSize,
|
|
112
|
-
centerComponent
|
|
84
|
+
centerComponent,
|
|
113
85
|
}) => {
|
|
114
86
|
const wheelItems = items.length > 0 ? items : [];
|
|
115
87
|
|
|
116
88
|
const [spinning, setSpinning] = useState(false);
|
|
117
89
|
const [_, setWinner] = useState<SpinWheelItem | null>(null);
|
|
118
90
|
const rotateValue = useRef(new Animated.Value(0)).current;
|
|
119
|
-
|
|
120
|
-
// Track rotation manually for calculations
|
|
121
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);
|
|
122
97
|
|
|
123
|
-
// Update tracked rotation when animation completes
|
|
124
98
|
useEffect(() => {
|
|
125
99
|
const listener = rotateValue.addListener(({ value }) => {
|
|
126
100
|
rotationRef.current = value;
|
|
@@ -131,11 +105,8 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
131
105
|
};
|
|
132
106
|
}, [rotateValue]);
|
|
133
107
|
|
|
134
|
-
|
|
135
|
-
const anglePerItem =
|
|
136
|
-
wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
108
|
+
const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
137
109
|
|
|
138
|
-
// Create wheel segments
|
|
139
110
|
const generateWheelPaths = () => {
|
|
140
111
|
if (wheelItems.length === 0) return [];
|
|
141
112
|
return wheelItems.map((item, index) => {
|
|
@@ -163,17 +134,11 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
163
134
|
const textX = size / 2 + size * 0.32 * Math.cos(midRad);
|
|
164
135
|
const textY = size / 2 + size * 0.32 * Math.sin(midRad);
|
|
165
136
|
|
|
166
|
-
// decorationX and decorationY are calculated but not used in the provided JSX
|
|
167
|
-
// const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
|
|
168
|
-
// const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
|
|
169
|
-
|
|
170
137
|
return {
|
|
171
138
|
path: pathData,
|
|
172
139
|
item,
|
|
173
140
|
textX,
|
|
174
141
|
textY,
|
|
175
|
-
// decorationX,
|
|
176
|
-
// decorationY,
|
|
177
142
|
angle: (startAngle + endAngle) / 2,
|
|
178
143
|
};
|
|
179
144
|
});
|
|
@@ -181,52 +146,49 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
181
146
|
|
|
182
147
|
const wheelPaths = generateWheelPaths();
|
|
183
148
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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
|
+
);
|
|
190
161
|
|
|
191
|
-
|
|
192
|
-
|
|
162
|
+
continuousSpinRef.current.start();
|
|
163
|
+
};
|
|
193
164
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
: predeterminedWinner;
|
|
199
|
-
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;
|
|
200
169
|
}
|
|
201
170
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const targetNormalizedAngle =
|
|
207
|
-
(270 - targetSegmentCenterAngle + 360) % 360;
|
|
171
|
+
const winnerId = typeof winner === "object" ? winner.id : winner;
|
|
172
|
+
const winnerTargetIndex = wheelItems.findIndex(
|
|
173
|
+
(item) => item.id === winnerId
|
|
174
|
+
);
|
|
208
175
|
|
|
209
|
-
|
|
210
|
-
|
|
176
|
+
if (winnerTargetIndex === -1) {
|
|
177
|
+
handleSpinEnd();
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
211
180
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
181
|
+
const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
|
|
182
|
+
const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
|
|
215
183
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
184
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
185
|
+
const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
|
|
219
186
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
223
|
-
}
|
|
187
|
+
const angleOffset =
|
|
188
|
+
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
224
189
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const randomAngle = Math.random() * 360;
|
|
228
|
-
targetRotation = 360 * randomSpins + randomAngle;
|
|
229
|
-
}
|
|
190
|
+
const additionalSpins = 2;
|
|
191
|
+
const targetRotation = additionalSpins * 360 + angleOffset;
|
|
230
192
|
|
|
231
193
|
Animated.timing(rotateValue, {
|
|
232
194
|
toValue: rotationRef.current + targetRotation / 360,
|
|
@@ -236,7 +198,87 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
236
198
|
}).start(() => handleSpinEnd());
|
|
237
199
|
};
|
|
238
200
|
|
|
239
|
-
|
|
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
|
+
|
|
240
282
|
const handleSpinEnd = () => {
|
|
241
283
|
setSpinning(false);
|
|
242
284
|
|
|
@@ -255,11 +297,10 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
255
297
|
setWinner(winningItem);
|
|
256
298
|
onSpinEnd?.(winningItem);
|
|
257
299
|
} else if (wheelItems.length > 0) {
|
|
258
|
-
onSpinEnd?.(wheelItems[0]);
|
|
300
|
+
onSpinEnd?.(wheelItems[0]);
|
|
259
301
|
}
|
|
260
302
|
};
|
|
261
303
|
|
|
262
|
-
// Animation interpolation for rotation
|
|
263
304
|
const rotate = rotateValue.interpolate({
|
|
264
305
|
inputRange: [0, 1],
|
|
265
306
|
outputRange: ["0deg", "360deg"],
|
|
@@ -270,7 +311,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
270
311
|
return (
|
|
271
312
|
<View style={[styles.container, containerStyle]}>
|
|
272
313
|
<View style={{ width: size, height: size }}>
|
|
273
|
-
{/* The wheel */}
|
|
274
314
|
<Animated.View
|
|
275
315
|
style={[
|
|
276
316
|
styles.wheelContainer,
|
|
@@ -284,7 +324,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
284
324
|
>
|
|
285
325
|
<Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
|
|
286
326
|
<G>
|
|
287
|
-
{wheelPaths.map(({ path, item, textX, textY, angle }
|
|
327
|
+
{wheelPaths.map(({ path, item, textX, textY, angle }) => {
|
|
288
328
|
return (
|
|
289
329
|
<React.Fragment key={item.id}>
|
|
290
330
|
<Path
|
|
@@ -294,18 +334,18 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
294
334
|
? colors[Math.floor(Math.random() * colors.length)]
|
|
295
335
|
: item.color
|
|
296
336
|
}
|
|
297
|
-
// stroke="#FA8072"
|
|
298
|
-
// strokeWidth={1}
|
|
299
337
|
/>
|
|
300
338
|
<SvgText
|
|
301
339
|
x={textX}
|
|
302
340
|
y={textY}
|
|
303
341
|
fill={item.textColor || wheelTextColor}
|
|
304
342
|
fontSize={wheelTextStyle?.fontSize || 14}
|
|
305
|
-
fontWeight={
|
|
343
|
+
fontWeight={
|
|
344
|
+
(wheelTextStyle?.fontWeight as any) || "bold"
|
|
345
|
+
}
|
|
306
346
|
textAnchor="middle"
|
|
307
347
|
alignmentBaseline="central"
|
|
308
|
-
transform={`rotate(${angle + 180}, ${textX}, ${textY}
|
|
348
|
+
transform={`rotate(${angle + 180}, ${textX}, ${textY})`}
|
|
309
349
|
>
|
|
310
350
|
{item.label}
|
|
311
351
|
</SvgText>
|
|
@@ -327,14 +367,12 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
327
367
|
</Svg>
|
|
328
368
|
</Animated.View>
|
|
329
369
|
|
|
330
|
-
{/* The center circle */}
|
|
331
370
|
{centerComponent ? (
|
|
332
371
|
<View
|
|
333
372
|
style={{
|
|
334
373
|
position: "absolute",
|
|
335
374
|
top: "50%",
|
|
336
375
|
left: "50%",
|
|
337
|
-
// Center the component perfectly
|
|
338
376
|
transform: [
|
|
339
377
|
{ translateX: -(actualCenterSize / 2) },
|
|
340
378
|
{ translateY: -(actualCenterSize / 2) },
|
|
@@ -362,7 +400,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
362
400
|
/>
|
|
363
401
|
)}
|
|
364
402
|
|
|
365
|
-
{/* The pointer is a triangle on top */}
|
|
366
403
|
<View
|
|
367
404
|
style={[
|
|
368
405
|
styles.pointerPosition,
|
|
@@ -378,7 +415,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
378
415
|
/>
|
|
379
416
|
</View>
|
|
380
417
|
|
|
381
|
-
{/* Action Button */}
|
|
382
418
|
<View
|
|
383
419
|
style={{
|
|
384
420
|
position: "absolute",
|
|
@@ -397,15 +433,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
397
433
|
textStyle={[styles.actionButtonText, actionButtonTextStyle]}
|
|
398
434
|
{...actionButtonProps}
|
|
399
435
|
/>
|
|
400
|
-
{/* <TouchableOpacity
|
|
401
|
-
onPress={handleSpin}
|
|
402
|
-
disabled={spinning || !enabled || wheelItems.length === 0}
|
|
403
|
-
style={[styles.actionButton, actionButtonStyle]}
|
|
404
|
-
>
|
|
405
|
-
<Text style={[styles.actionButtonText, actionButtonTextStyle]}>
|
|
406
|
-
{spinButtonText}
|
|
407
|
-
</Text>
|
|
408
|
-
</TouchableOpacity> */}
|
|
409
436
|
</View>
|
|
410
437
|
</View>
|
|
411
438
|
</View>
|
|
@@ -417,7 +444,7 @@ const styles = StyleSheet.create({
|
|
|
417
444
|
alignItems: "center",
|
|
418
445
|
justifyContent: "center",
|
|
419
446
|
marginTop: 20,
|
|
420
|
-
marginBottom: 70,
|
|
447
|
+
marginBottom: 70,
|
|
421
448
|
},
|
|
422
449
|
wheelContainer: {
|
|
423
450
|
overflow: "hidden",
|
|
@@ -445,7 +472,7 @@ const styles = StyleSheet.create({
|
|
|
445
472
|
borderStyle: "solid",
|
|
446
473
|
borderLeftWidth: 10,
|
|
447
474
|
borderRightWidth: 10,
|
|
448
|
-
borderBottomWidth: 15,
|
|
475
|
+
borderBottomWidth: 15,
|
|
449
476
|
borderLeftColor: "transparent",
|
|
450
477
|
borderRightColor: "transparent",
|
|
451
478
|
},
|
|
@@ -463,4 +490,4 @@ const styles = StyleSheet.create({
|
|
|
463
490
|
},
|
|
464
491
|
});
|
|
465
492
|
|
|
466
|
-
export default SpinWheel;
|
|
493
|
+
export default SpinWheel;
|