Skip to content

Commit c7c411b

Browse files
committed
Refactor WaifuAlerts and WaifuRoulette components for improved state management and functionality
- Updated WaifuAlerts to use shallow comparison for currentMessage from the store. - Added shuffle prop to WaifuRoulette and integrated it with useEffect for better prize handling. - Enhanced RoulettePro options for improved user experience during prize selection.
1 parent 24c7eb8 commit c7c411b

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/components/OBS_Components/WaifuAlerts/WaifuAlerts.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ import WaifuRoulette from "./WaifuRoulette";
1919
// Очередь сообщений теперь живёт в SignalR-сторе
2020

2121
export default function WaifuAlerts() {
22-
const currentMessage = useTelegramusHubStore(state => state.currentMessage);
22+
const currentMessage = useTelegramusHubStore(
23+
useShallow(state => state.currentMessage)
24+
);
2325
const dequeueCurrent = useTelegramusHubStore(state => state.dequeueCurrent);
2426
const startHub = useTelegramusHubStore(state => state.start);
2527
const [announced, setAnnounced] = useState(false);
@@ -53,6 +55,7 @@ export default function WaifuAlerts() {
5355
console.log("Prizes available:", prizes.length);
5456

5557
if (prizes && prizes.length > 0) {
58+
debugger;
5659
const index = prizes.findIndex(
5760
prize => prize.id === currentMessage.waifu.shikiId
5861
);
@@ -191,6 +194,7 @@ export default function WaifuAlerts() {
191194
currentMessage.waifuHusband?.twitchUser && (
192195
<WaifuRoulette
193196
key={currentMessage.waifu.shikiId}
197+
shuffle={shufflePrizes}
194198
callback={() => {
195199
setIsRouletted(true);
196200
setRouletteIndex(-1);

src/components/OBS_Components/WaifuAlerts/WaifuRoulette.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import "react-roulette-pro/dist/index.css";
22

3-
import { CSSProperties, useRef, useState } from "react";
3+
import { CSSProperties, useEffect, useRef, useState } from "react";
44
import RoulettePro from "react-roulette-pro";
55

66
import { PrizeType, TwitchUser } from "@/shared/api";
@@ -15,6 +15,7 @@ interface Props {
1515
rouletteIndex: number;
1616
prizes: PrizeType[];
1717
callback: () => void;
18+
shuffle: () => void;
1819
twitchUser: TwitchUser;
1920
}
2021

@@ -23,6 +24,7 @@ export default function WaifuRoulette({
2324
prizes,
2425
callback,
2526
twitchUser,
27+
shuffle,
2628
}: Props) {
2729
if (prizes.length === 0) {
2830
throw new Error("Prizes is empty");
@@ -46,6 +48,10 @@ export default function WaifuRoulette({
4648
animationDuration: "2.2s",
4749
});
4850

51+
useEffect(() => {
52+
shuffle();
53+
}, [shuffle]);
54+
4955
return (
5056
<div
5157
ref={rouletteDiv}
@@ -83,20 +89,20 @@ export default function WaifuRoulette({
8389
></div>
8490
)}
8591
<RoulettePro
92+
key={rouletteIndex}
8693
start={rouletteStart}
8794
prizes={prizes}
8895
prizeIndex={rouletteIndex}
8996
spinningTime={20}
9097
type="horizontal"
91-
classes={{}}
92-
options={{ withoutAnimation: true }}
98+
options={{ withoutAnimation: true, stopInCenter: true }}
9399
defaultDesignOptions={{
94100
prizesWithText: true,
95101
hideCenterDelimiter: true,
96102
}}
97-
prizeItemRenderFunction={prize => (
98-
<WaifuRoulettePrizeItem image={prize.image} text={prize.text} />
99-
)}
103+
// prizeItemRenderFunction={prize => (
104+
// <WaifuRoulettePrizeItem image={prize.image} text={prize.text} />
105+
// )}
100106
onPrizeDefined={() => {
101107
setVisible(false);
102108
const div = rouletteDiv.current!;

0 commit comments

Comments
 (0)