related-ui-components 4.1.2 → 4.1.3

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.
@@ -1,90 +1,85 @@
1
1
  "use strict";
2
2
 
3
- import React, { useState, useRef, useEffect } from "react";
4
- import { View, StyleSheet, Animated, Easing } from "react-native";
5
- import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
6
- import { Button } from "../Button/index.js";
3
+ import React, { useEffect, useRef, useState } from "react";
4
+ import { Animated, Easing, StyleSheet, View } from "react-native";
5
+ import { Circle, G, Path, Svg, Text as SvgText } from "react-native-svg";
7
6
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
- //default random colors
9
7
  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"];
10
- // Constants for consistent animation
11
- const ROTATION_DURATION = 2500; // Duration for one full rotation
12
- const DECEL_DURATION = 3000; // Duration for deceleration phase
13
- const EXTRA_SPINS = 3; // Number of extra full rotations before stopping
8
+ // Config for the single animation
9
+ const TOTAL_SPINS = 5; // How many full rotations before stopping
10
+ const SPIN_DURATION = 4000; // Total time for the one animation
14
11
 
15
12
  const SpinWheel = ({
16
13
  items,
17
14
  size = 300,
18
15
  winner,
19
- minSpinDuration = 2000,
20
- onSpinStart,
21
16
  onSpinEnd,
22
17
  containerStyle,
23
18
  centerStyle,
24
- spinButtonText = "Spin",
25
19
  wheelTextStyle,
26
20
  knobStyle,
27
21
  knobColor = "#D81E5B",
28
- actionButtonStyle,
29
- actionButtonTextStyle,
30
22
  wheelBorderColor,
31
23
  wheelBorderWidth,
32
24
  wheelTextColor = "#FFFFFF",
33
- actionButtonProps,
34
25
  centerSize,
35
26
  centerComponent
36
27
  }) => {
37
28
  const wheelItems = items.length > 0 ? items : [];
38
- const spinLoop = useRef(null);
39
- const spinStartTime = useRef(0);
40
29
  const [spinning, setSpinning] = useState(false);
30
+
31
+ // 0-1 represents 0-360 degrees. We keep increasing this value.
41
32
  const rotateValue = useRef(new Animated.Value(0)).current;
42
33
  const rotationRef = useRef(0);
43
- const startInfiniteSpin = () => {
44
- rotateValue.setValue(rotationRef.current);
45
- spinStartTime.current = Date.now();
46
- spinLoop.current = Animated.loop(Animated.timing(rotateValue, {
47
- toValue: rotationRef.current + 1,
48
- duration: ROTATION_DURATION,
49
- easing: Easing.linear,
50
- useNativeDriver: true
51
- }));
52
- spinLoop.current.start();
53
- setSpinning(true);
54
- onSpinStart?.();
55
- };
56
- const stopOnWinner = winnerValue => {
57
- if (!spinLoop.current) return;
58
- spinLoop.current.stop();
59
- spinLoop.current = null;
34
+
35
+ // Sync the ref with the animated value to ensure we start next spin from where we left off
36
+ useEffect(() => {
37
+ const listener = rotateValue.addListener(({
38
+ value
39
+ }) => {
40
+ rotationRef.current = value;
41
+ });
42
+ return () => {
43
+ rotateValue.removeListener(listener);
44
+ };
45
+ }, [rotateValue]);
46
+
47
+ // Main Logic: Trigger spin when 'winner' is provided
48
+ useEffect(() => {
49
+ if (winner != null && !spinning) {
50
+ spinToWinner(winner);
51
+ }
52
+ }, [winner]);
53
+ const spinToWinner = winnerValue => {
60
54
  const winnerId = typeof winnerValue === "object" ? winnerValue.id : winnerValue;
61
55
  const index = items.findIndex(i => i.id === winnerId);
62
- if (index === -1) return;
56
+ if (index === -1) {
57
+ console.warn("Winner not found in items array");
58
+ return;
59
+ }
60
+ setSpinning(true);
63
61
 
64
- // Calculate target angle (pointer at top = 270 degrees)
62
+ // 1. Calculate the angle where the item is centered
65
63
  const anglePerItem = 360 / items.length;
64
+ // We want the item centered at 270 degrees (top of the wheel in standard SVG)
66
65
  const segmentCenter = (index + 0.5) * anglePerItem;
67
66
  const targetAngle = (270 - segmentCenter + 360) % 360;
68
67
 
69
- // Get current rotation position
70
- const currentRotation = rotationRef.current;
71
- const currentAngle = currentRotation * 360 % 360;
68
+ // 2. Calculate offset from current position
69
+ const currentRotationDegrees = rotationRef.current * 360 % 360;
70
+ const offset = (targetAngle - currentRotationDegrees + 360) % 360;
72
71
 
73
- // Calculate shortest path to target
74
- let offset = (targetAngle - currentAngle + 360) % 360;
72
+ // 3. Calculate total rotation:
73
+ // Current Rotation + (Distance to target) + (Extra Full Spins)
74
+ // We divide by 360 because our Animated.Value goes from 0 to 1 for a full circle
75
+ const finalRotation = rotationRef.current + (offset + 360 * TOTAL_SPINS) / 360;
75
76
 
76
- // Add extra full rotations for dramatic effect
77
- const extraRotations = EXTRA_SPINS * 360;
78
- const totalRotation = offset + extraRotations;
79
-
80
- // Final rotation value
81
- const finalRotation = currentRotation + totalRotation / 360;
82
-
83
- // Use ease-out cubic for smooth deceleration
77
+ // 4. One smooth animation
84
78
  Animated.timing(rotateValue, {
85
79
  toValue: finalRotation,
86
- duration: DECEL_DURATION,
80
+ duration: SPIN_DURATION,
87
81
  easing: Easing.out(Easing.cubic),
82
+ // Starts fast, slows down smoothly
88
83
  useNativeDriver: true
89
84
  }).start(() => {
90
85
  rotationRef.current = finalRotation;
@@ -92,16 +87,6 @@ const SpinWheel = ({
92
87
  onSpinEnd?.(items[index]);
93
88
  });
94
89
  };
95
- useEffect(() => {
96
- const listener = rotateValue.addListener(({
97
- value
98
- }) => {
99
- rotationRef.current = value;
100
- });
101
- return () => {
102
- rotateValue.removeListener(listener);
103
- };
104
- }, [rotateValue]);
105
90
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
106
91
  const generateWheelPaths = () => {
107
92
  if (wheelItems.length === 0) return [];
@@ -129,15 +114,6 @@ const SpinWheel = ({
129
114
  });
130
115
  };
131
116
  const wheelPaths = generateWheelPaths();
132
- useEffect(() => {
133
- if (!winner || !spinning) return;
134
- const elapsed = Date.now() - spinStartTime.current;
135
- const delay = Math.max(0, minSpinDuration - elapsed);
136
- const timeout = setTimeout(() => {
137
- stopOnWinner(winner);
138
- }, delay);
139
- return () => clearTimeout(timeout);
140
- }, [winner, spinning]);
141
117
  const rotate = rotateValue.interpolate({
142
118
  inputRange: [0, 1],
143
119
  outputRange: ["0deg", "360deg"]
@@ -230,23 +206,6 @@ const SpinWheel = ({
230
206
  borderBottomColor: knobColor
231
207
  }, knobStyle]
232
208
  })
233
- }), /*#__PURE__*/_jsx(View, {
234
- style: {
235
- position: "absolute",
236
- width: "100%",
237
- alignItems: "center",
238
- justifyContent: "center",
239
- bottom: -70,
240
- zIndex: 2
241
- },
242
- children: /*#__PURE__*/_jsx(Button, {
243
- style: [styles.actionButton, actionButtonStyle],
244
- onPress: startInfiniteSpin,
245
- title: spinButtonText,
246
- disabled: spinning,
247
- textStyle: [styles.actionButtonText, actionButtonTextStyle],
248
- ...actionButtonProps
249
- })
250
209
  })]
251
210
  })
252
211
  });
@@ -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","ROTATION_DURATION","DECEL_DURATION","EXTRA_SPINS","SpinWheel","items","size","winner","minSpinDuration","onSpinStart","onSpinEnd","containerStyle","centerStyle","spinButtonText","wheelTextStyle","knobStyle","knobColor","actionButtonStyle","actionButtonTextStyle","wheelBorderColor","wheelBorderWidth","wheelTextColor","actionButtonProps","centerSize","centerComponent","wheelItems","length","spinLoop","spinStartTime","spinning","setSpinning","rotateValue","Value","current","rotationRef","startInfiniteSpin","setValue","Date","now","loop","timing","toValue","duration","easing","linear","useNativeDriver","start","stopOnWinner","winnerValue","stop","winnerId","id","index","findIndex","i","anglePerItem","segmentCenter","targetAngle","currentRotation","currentAngle","offset","extraRotations","totalRotation","finalRotation","out","cubic","listener","addListener","value","removeListener","generateWheelPaths","map","item","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","elapsed","delay","max","timeout","setTimeout","clearTimeout","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","floor","random","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","useEffect","useRef","useState","Animated","Easing","StyleSheet","View","Circle","G","Path","Svg","Text","SvgText","jsx","_jsx","jsxs","_jsxs","colors","TOTAL_SPINS","SPIN_DURATION","SpinWheel","items","size","winner","onSpinEnd","containerStyle","centerStyle","wheelTextStyle","knobStyle","knobColor","wheelBorderColor","wheelBorderWidth","wheelTextColor","centerSize","centerComponent","wheelItems","length","spinning","setSpinning","rotateValue","Value","current","rotationRef","listener","addListener","value","removeListener","spinToWinner","winnerValue","winnerId","id","index","findIndex","i","console","warn","anglePerItem","segmentCenter","targetAngle","currentRotationDegrees","offset","finalRotation","timing","toValue","duration","easing","out","cubic","useNativeDriver","start","generateWheelPaths","map","item","startAngle","endAngle","startRad","Math","PI","endRad","x1","cos","y1","sin","x2","y2","largeArcFlag","pathData","join","midRad","textX","textY","path","angle","wheelPaths","rotate","interpolate","inputRange","outputRange","actualCenterSize","undefined","style","styles","container","children","width","height","wheelContainer","borderRadius","transform","viewBox","Fragment","d","fill","color","floor","random","x","y","textColor","fontSize","fontWeight","textAnchor","alignmentBaseline","label","cx","cy","r","stroke","strokeWidth","position","top","left","translateX","translateY","zIndex","wheelCenter","pointerPosition","pointer","borderBottomColor","create","alignItems","justifyContent","marginTop","marginBottom","overflow","backgroundColor","borderWidth","borderColor","borderStyle","borderLeftWidth","borderRightWidth","borderBottomWidth","borderLeftColor","borderRightColor","actionButton","paddingHorizontal","paddingVertical","shadowColor","shadowRadius","actionButtonText"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Wheel/Wheel.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
- import { ViewStyle, TextStyle } from "react-native";
3
- import { AppButtonProps } from "../Button";
2
+ import { TextStyle, ViewStyle } from "react-native";
4
3
  export interface SpinWheelItem {
5
4
  id: string | number;
6
5
  label: string;
@@ -10,24 +9,15 @@ export interface SpinWheelItem {
10
9
  }
11
10
  interface SpinWheelProps {
12
11
  items: SpinWheelItem[];
13
- predeterminedWinner?: SpinWheelItem | string | number;
14
12
  size?: number;
15
- startSpin?: boolean;
16
13
  winner?: SpinWheelItem | string | number;
17
- minSpinDuration?: number;
18
14
  spinDuration?: number;
19
- friction?: number;
20
- enabled?: boolean;
21
15
  onSpinStart?: () => void;
22
16
  onSpinEnd?: (item: SpinWheelItem) => void;
23
17
  containerStyle?: ViewStyle;
24
18
  centerStyle?: ViewStyle;
25
- spinButtonText?: string;
26
19
  wheelTextStyle?: TextStyle;
27
20
  knobStyle?: ViewStyle;
28
- actionButtonStyle?: ViewStyle;
29
- actionButtonTextStyle?: TextStyle;
30
- actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
31
21
  wheelBorderColor?: string;
32
22
  wheelBorderWidth?: number;
33
23
  wheelTextColor?: string;
@@ -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;AAWD,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,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,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;AAOD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmSvC,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,EAIL,SAAS,EAET,SAAS,EACV,MAAM,cAAc,CAAC;AAGtB,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,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,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,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,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;AAMD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4OvC,CAAC;AAqDF,eAAe,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "related-ui-components",
3
- "version": "4.1.2",
3
+ "version": "4.1.3",
4
4
  "main": "./src/index.ts",
5
5
  "scripts": {
6
6
  "start": "expo start",
@@ -1,16 +1,13 @@
1
- import React, { useState, useRef, useEffect } from "react";
1
+ import React, { useEffect, useRef, useState } from "react";
2
2
  import {
3
- View,
4
- StyleSheet,
5
3
  Animated,
6
- Text,
7
- TouchableOpacity,
8
4
  Easing,
9
- ViewStyle,
5
+ StyleSheet,
10
6
  TextStyle,
7
+ View,
8
+ ViewStyle,
11
9
  } from "react-native";
12
- import { Svg, Path, G, Text as SvgText, Circle } from "react-native-svg";
13
- import { AppButtonProps, Button } from "../Button";
10
+ import { Circle, G, Path, Svg, Text as SvgText } from "react-native-svg";
14
11
 
15
12
  export interface SpinWheelItem {
16
13
  id: string | number;
@@ -20,7 +17,6 @@ export interface SpinWheelItem {
20
17
  textColor?: string;
21
18
  }
22
19
 
23
- //default random colors
24
20
  const colors = [
25
21
  "#FF0000", "#FFA500", "#FFFF00", "#008000", "#0000FF", "#800080",
26
22
  "#FFC0CB", "#00FFFF", "#FF00FF", "#00FF00", "#4B0082", "#EE82EE",
@@ -31,24 +27,15 @@ const colors = [
31
27
 
32
28
  interface SpinWheelProps {
33
29
  items: SpinWheelItem[];
34
- predeterminedWinner?: SpinWheelItem | string | number;
35
30
  size?: number;
36
- startSpin?: boolean;
37
31
  winner?: SpinWheelItem | string | number;
38
- minSpinDuration?: number;
39
32
  spinDuration?: number;
40
- friction?: number;
41
- enabled?: boolean;
42
33
  onSpinStart?: () => void;
43
34
  onSpinEnd?: (item: SpinWheelItem) => void;
44
35
  containerStyle?: ViewStyle;
45
36
  centerStyle?: ViewStyle;
46
- spinButtonText?: string;
47
37
  wheelTextStyle?: TextStyle;
48
38
  knobStyle?: ViewStyle;
49
- actionButtonStyle?: ViewStyle;
50
- actionButtonTextStyle?: TextStyle;
51
- actionButtonProps?: Partial<Omit<AppButtonProps, "title" | "onPress">>;
52
39
  wheelBorderColor?: string;
53
40
  wheelBorderWidth?: number;
54
41
  wheelTextColor?: string;
@@ -57,96 +44,83 @@ interface SpinWheelProps {
57
44
  centerComponent?: React.ReactNode;
58
45
  }
59
46
 
60
- // Constants for consistent animation
61
- const ROTATION_DURATION = 2500; // Duration for one full rotation
62
- const DECEL_DURATION = 3000; // Duration for deceleration phase
63
- const EXTRA_SPINS = 3; // Number of extra full rotations before stopping
47
+ // Config for the single animation
48
+ const TOTAL_SPINS = 5; // How many full rotations before stopping
49
+ const SPIN_DURATION = 4000; // Total time for the one animation
64
50
 
65
51
  const SpinWheel: React.FC<SpinWheelProps> = ({
66
52
  items,
67
53
  size = 300,
68
54
  winner,
69
- minSpinDuration = 2000,
70
- onSpinStart,
71
55
  onSpinEnd,
72
56
  containerStyle,
73
57
  centerStyle,
74
- spinButtonText = "Spin",
75
58
  wheelTextStyle,
76
59
  knobStyle,
77
60
  knobColor = "#D81E5B",
78
- actionButtonStyle,
79
- actionButtonTextStyle,
80
61
  wheelBorderColor,
81
62
  wheelBorderWidth,
82
63
  wheelTextColor = "#FFFFFF",
83
- actionButtonProps,
84
64
  centerSize,
85
65
  centerComponent,
86
66
  }) => {
87
67
  const wheelItems = items.length > 0 ? items : [];
88
-
89
- const spinLoop = useRef<Animated.CompositeAnimation | null>(null);
90
- const spinStartTime = useRef<number>(0);
91
-
92
68
  const [spinning, setSpinning] = useState(false);
69
+
70
+ // 0-1 represents 0-360 degrees. We keep increasing this value.
93
71
  const rotateValue = useRef(new Animated.Value(0)).current;
94
72
  const rotationRef = useRef(0);
95
73
 
96
- const startInfiniteSpin = () => {
97
- rotateValue.setValue(rotationRef.current);
98
- spinStartTime.current = Date.now();
99
-
100
- spinLoop.current = Animated.loop(
101
- Animated.timing(rotateValue, {
102
- toValue: rotationRef.current + 1,
103
- duration: ROTATION_DURATION,
104
- easing: Easing.linear,
105
- useNativeDriver: true,
106
- })
107
- );
108
-
109
- spinLoop.current.start();
110
- setSpinning(true);
111
- onSpinStart?.();
112
- };
113
-
114
- const stopOnWinner = (winnerValue: SpinWheelItem | string | number) => {
115
- if (!spinLoop.current) return;
74
+ // Sync the ref with the animated value to ensure we start next spin from where we left off
75
+ useEffect(() => {
76
+ const listener = rotateValue.addListener(({ value }) => {
77
+ rotationRef.current = value;
78
+ });
79
+ return () => {
80
+ rotateValue.removeListener(listener);
81
+ };
82
+ }, [rotateValue]);
116
83
 
117
- spinLoop.current.stop();
118
- spinLoop.current = null;
84
+ // Main Logic: Trigger spin when 'winner' is provided
85
+ useEffect(() => {
86
+ if (winner != null && !spinning) {
87
+ spinToWinner(winner);
88
+ }
89
+ }, [winner]);
119
90
 
91
+ const spinToWinner = (winnerValue: SpinWheelItem | string | number) => {
120
92
  const winnerId =
121
93
  typeof winnerValue === "object" ? winnerValue.id : winnerValue;
122
94
 
123
95
  const index = items.findIndex((i) => i.id === winnerId);
124
- if (index === -1) return;
96
+ if (index === -1) {
97
+ console.warn("Winner not found in items array");
98
+ return;
99
+ }
125
100
 
126
- // Calculate target angle (pointer at top = 270 degrees)
101
+ setSpinning(true);
102
+
103
+ // 1. Calculate the angle where the item is centered
127
104
  const anglePerItem = 360 / items.length;
105
+ // We want the item centered at 270 degrees (top of the wheel in standard SVG)
128
106
  const segmentCenter = (index + 0.5) * anglePerItem;
129
107
  const targetAngle = (270 - segmentCenter + 360) % 360;
130
108
 
131
- // Get current rotation position
132
- const currentRotation = rotationRef.current;
133
- const currentAngle = (currentRotation * 360) % 360;
134
-
135
- // Calculate shortest path to target
136
- let offset = (targetAngle - currentAngle + 360) % 360;
137
-
138
- // Add extra full rotations for dramatic effect
139
- const extraRotations = EXTRA_SPINS * 360;
140
- const totalRotation = offset + extraRotations;
141
-
142
- // Final rotation value
143
- const finalRotation = currentRotation + totalRotation / 360;
109
+ // 2. Calculate offset from current position
110
+ const currentRotationDegrees = (rotationRef.current * 360) % 360;
111
+ const offset = (targetAngle - currentRotationDegrees + 360) % 360;
112
+
113
+ // 3. Calculate total rotation:
114
+ // Current Rotation + (Distance to target) + (Extra Full Spins)
115
+ // We divide by 360 because our Animated.Value goes from 0 to 1 for a full circle
116
+ const finalRotation =
117
+ rotationRef.current + (offset + 360 * TOTAL_SPINS) / 360;
144
118
 
145
- // Use ease-out cubic for smooth deceleration
119
+ // 4. One smooth animation
146
120
  Animated.timing(rotateValue, {
147
121
  toValue: finalRotation,
148
- duration: DECEL_DURATION,
149
- easing: Easing.out(Easing.cubic),
122
+ duration: SPIN_DURATION,
123
+ easing: Easing.out(Easing.cubic), // Starts fast, slows down smoothly
150
124
  useNativeDriver: true,
151
125
  }).start(() => {
152
126
  rotationRef.current = finalRotation;
@@ -155,16 +129,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
155
129
  });
156
130
  };
157
131
 
158
- useEffect(() => {
159
- const listener = rotateValue.addListener(({ value }) => {
160
- rotationRef.current = value;
161
- });
162
-
163
- return () => {
164
- rotateValue.removeListener(listener);
165
- };
166
- }, [rotateValue]);
167
-
168
132
  const anglePerItem = wheelItems.length > 0 ? 360 / wheelItems.length : 0;
169
133
 
170
134
  const generateWheelPaths = () => {
@@ -206,19 +170,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
206
170
 
207
171
  const wheelPaths = generateWheelPaths();
208
172
 
209
- useEffect(() => {
210
- if (!winner || !spinning) return;
211
-
212
- const elapsed = Date.now() - spinStartTime.current;
213
- const delay = Math.max(0, minSpinDuration - elapsed);
214
-
215
- const timeout = setTimeout(() => {
216
- stopOnWinner(winner);
217
- }, delay);
218
-
219
- return () => clearTimeout(timeout);
220
- }, [winner, spinning]);
221
-
222
173
  const rotate = rotateValue.interpolate({
223
174
  inputRange: [0, 1],
224
175
  outputRange: ["0deg", "360deg"],
@@ -330,26 +281,6 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
330
281
  ]}
331
282
  />
332
283
  </View>
333
-
334
- <View
335
- style={{
336
- position: "absolute",
337
- width: "100%",
338
- alignItems: "center",
339
- justifyContent: "center",
340
- bottom: -70,
341
- zIndex: 2,
342
- }}
343
- >
344
- <Button
345
- style={[styles.actionButton, actionButtonStyle]}
346
- onPress={startInfiniteSpin}
347
- title={spinButtonText}
348
- disabled={spinning}
349
- textStyle={[styles.actionButtonText, actionButtonTextStyle]}
350
- {...actionButtonProps}
351
- />
352
- </View>
353
284
  </View>
354
285
  </View>
355
286
  );