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.
@@ -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
- //default random colors
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
- // Update tracked rotation when animation completes
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
- // Handle spin button press
141
- const handleSpin = () => {
142
- if (spinning || !enabled || wheelItems.length === 0) return;
143
- setSpinning(true);
144
- onSpinStart?.();
145
- let targetRotation = 0;
146
- let winnerTargetIndex = -1;
147
- if (predeterminedWinner) {
148
- const winnerId = typeof predeterminedWinner === "object" ? predeterminedWinner.id : predeterminedWinner;
149
- winnerTargetIndex = wheelItems.findIndex(item => item.id === winnerId);
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
- if (winnerTargetIndex !== -1) {
152
- const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
153
- const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
154
- const currentAbsoluteAngle = rotationRef.current * 360;
155
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
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
- // Handle spin completion
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
- }, index) => {
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 // Space for the button
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;AA+BD,UAAU,cAAc;IAEtB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IAGtD,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAG1C,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,CAAA;IACjC,iBAAiB,CAAC,EAAE,OAAO,CACvB,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,CAAC,CAC5C,CAAC;IAEF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA+SvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "related-ui-components",
3
- "version": "3.2.4",
3
+ "version": "3.2.6",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -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", // Red
26
- "#FFA500", // Orange
27
- "#FFFF00", // Yellow
28
- "#008000", // Green
29
- "#0000FF", // Blue
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
- // Events
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
- Omit<AppButtonProps, "title" | "onPress">
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, // Destructure new prop
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
- // Calculate angle for each segment
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
- // Handle spin button press
184
- const handleSpin = () => {
185
- if (spinning || !enabled || wheelItems.length === 0) return;
186
-
187
- setSpinning(true);
188
- onSpinStart?.();
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
- let targetRotation = 0;
191
- let winnerTargetIndex = -1;
162
+ continuousSpinRef.current.start();
163
+ };
192
164
 
193
- if (predeterminedWinner) {
194
- const winnerId =
195
- typeof predeterminedWinner === "object"
196
- ? predeterminedWinner.id
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
- if (winnerTargetIndex !== -1) {
202
- const targetSegmentCenterAngle =
203
- (winnerTargetIndex + 0.5) * anglePerItem;
171
+ const winnerId = typeof winner === "object" ? winner.id : winner;
172
+ const winnerTargetIndex = wheelItems.findIndex(
173
+ (item) => item.id === winnerId
174
+ );
204
175
 
205
- const targetNormalizedAngle =
206
- (270 - targetSegmentCenterAngle + 360) % 360;
176
+ if (winnerTargetIndex === -1) {
177
+ handleSpinEnd();
178
+ return;
179
+ }
207
180
 
208
- const currentAbsoluteAngle = rotationRef.current * 360;
209
- const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
181
+ const targetSegmentCenterAngle = (winnerTargetIndex + 0.5) * anglePerItem;
182
+ const targetNormalizedAngle = (270 - targetSegmentCenterAngle + 360) % 360;
210
183
 
211
- // Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
212
- const angleOffset =
213
- (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
184
+ const currentAbsoluteAngle = rotationRef.current * 360;
185
+ const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
214
186
 
215
- // Number of full spins (e.g., 3 to 5)
216
- const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
217
- targetRotation = numberOfFullSpins * 360 + angleOffset;
187
+ const angleOffset =
188
+ (targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
218
189
 
219
- // Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
220
- if (targetRotation < 360) {
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
- // Handle spin completion
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 }, index) => {
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={(wheelTextStyle?.fontWeight as any) || "bold"}
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
- {/* The center circle */}
330
- <View
331
- style={[
332
- styles.wheelCenter,
333
- {
334
- width: actualCenterSize,
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
- centerStyle,
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, // Space for the button
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;