|
@@ -1,121 +1,158 @@
|
|
|
"use client";
|
|
|
+import { FC, useEffect, useRef, useState } from "react";
|
|
|
+import { useRouter } from "@/i18n/routing"; // Assuming router logic
|
|
|
import { GameInfo } from "@/api/home";
|
|
|
-import { useRouter } from "@/i18n/routing";
|
|
|
import { server } from "@/utils/client";
|
|
|
import { useTranslations } from "next-intl";
|
|
|
import Script from "next/script";
|
|
|
-import { FC, useEffect, useRef,useState } from "react";
|
|
|
|
|
|
-// 之前版本备份
|
|
|
interface Props {
|
|
|
- brand_id: string;
|
|
|
- token: string;
|
|
|
+ brand_id: string;
|
|
|
+ token: string;
|
|
|
}
|
|
|
-// dedprz | deepwin365 | damslots | chips | deloro-casino
|
|
|
-const SportsClient: FC<Props> = (props) => {
|
|
|
- const t = useTranslations("ProfilePage");
|
|
|
- const { brand_id, token } = props;
|
|
|
- const [currentToken, setCurrentToken] = useState(token);
|
|
|
-
|
|
|
|
|
|
- const btRef = useRef(null);
|
|
|
- const router = useRouter();
|
|
|
+const SportsClient: FC<Props> = (props) => {
|
|
|
+ const { brand_id, token } = props;
|
|
|
+ const [currentToken, setCurrentToken] = useState(token);
|
|
|
|
|
|
+ const btRef = useRef(null);
|
|
|
+ const router:any = useRouter();
|
|
|
+ const isFreshRef = useRef(false);
|
|
|
|
|
|
- useEffect(() => {
|
|
|
- // @ts-ignore
|
|
|
- if (window.BTRenderer) {
|
|
|
+ useEffect(() => {
|
|
|
+ console.log("onLoad=====>0000");
|
|
|
+ if (typeof window !== "undefined") {
|
|
|
+ console.log("onLoad=====>1111");
|
|
|
+ const script = document.createElement("script");
|
|
|
+ script.src = "https://ui.invisiblesport.com/bt-renderer.min.js";
|
|
|
+ script.async = true;
|
|
|
+ script.onload = () => {
|
|
|
+ console.log("onLoad=====> Script Loaded and Initialized");
|
|
|
onLoad();
|
|
|
- }
|
|
|
-
|
|
|
- // 离开体育页的时候需要kill掉
|
|
|
+ };
|
|
|
+ document.body.appendChild(script);
|
|
|
+
|
|
|
return () => {
|
|
|
+ console.log("onLoad=====> Clean up");
|
|
|
+ if (btRef.current) {
|
|
|
// @ts-ignore
|
|
|
btRef.current?.kill();
|
|
|
+ btRef.current = null;
|
|
|
+ }
|
|
|
+ document.body.removeChild(script); // Remove script when component unmounts
|
|
|
};
|
|
|
- }, []);
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- // 如果token更新了才调用update
|
|
|
- if( currentToken !== token){
|
|
|
- updateToken(token);
|
|
|
- }
|
|
|
- }, [token]);
|
|
|
+ }
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ console.log("onLoad=====>22222");
|
|
|
+ // 如果token更新了才调用update
|
|
|
+ if( currentToken !== token){
|
|
|
+ console.log("onLoad=====>333333");
|
|
|
+ updateToken(token);
|
|
|
+ }
|
|
|
+ }, [token]);
|
|
|
|
|
|
- const getGameDetailApi = async () => {
|
|
|
- const data = await server
|
|
|
- .request<GameInfo>({
|
|
|
- url: "/v1/api/front/game_info_by_id",
|
|
|
- method: "post",
|
|
|
- data: { id: "sportsBet", mode: 1 },
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- if (res.code === 200) {
|
|
|
- setCurrentToken(res.data.game_url)
|
|
|
- return res.data.game_url;
|
|
|
- } else {
|
|
|
- return "";
|
|
|
- }
|
|
|
- });
|
|
|
- return data;
|
|
|
- };
|
|
|
|
|
|
- const updateToken = (newToken: string) => {
|
|
|
- // @ts-ignore
|
|
|
- if(currentToken!== newToken){
|
|
|
- setCurrentToken(newToken);
|
|
|
- }
|
|
|
+ const updateToken = (newToken: string) => {
|
|
|
+ // @ts-ignore
|
|
|
+ if(currentToken!== newToken){
|
|
|
+ console.log("onLoad=====>44444");
|
|
|
+ setCurrentToken(newToken);
|
|
|
+ // session失效需要重新load
|
|
|
// @ts-ignore
|
|
|
- if (window.BTRenderer) {
|
|
|
- onLoad();
|
|
|
+ if (window.BTRenderer && !!isFreshRef.current) {
|
|
|
+ console.log("onLoad=====>isFreshRef111",newToken);
|
|
|
+ isFreshRef.current = false;
|
|
|
+ setTimeout(() => {
|
|
|
+ onLoad();
|
|
|
+ },100)
|
|
|
+ }else{
|
|
|
+ // 多次点击当前页面只需要跳转到首页即可
|
|
|
+ // 使用 updateOptions 更新当前的 BTRenderer 参数,而不是重新初始化
|
|
|
+ if (btRef.current) {
|
|
|
+ console.log("onLoad=====>55555");
|
|
|
+ // 更新 token 和其他配置
|
|
|
+ // @ts-ignore
|
|
|
+ btRef.current.updateOptions({
|
|
|
+ token: newToken, // 更新 token
|
|
|
+ url: '/', // 更新 URL 或其他参数
|
|
|
+ betSlipOffsetBottom: 80,
|
|
|
+ betSlipZIndex: 1000,
|
|
|
+ stickyTop: 0,
|
|
|
+ betSlipOffsetTop: 50,
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- const onLoad = () => {
|
|
|
- // @ts-ignore
|
|
|
- const bt = new BTRenderer();
|
|
|
- btRef.current = bt;
|
|
|
- // bt.updateOptions({url:'/'})
|
|
|
- bt.initialize({
|
|
|
- brand_id: brand_id,
|
|
|
- token: token,//使用最新的token
|
|
|
- onTokenExpired: getGameDetailApi, //过期自动更新token
|
|
|
- onSessionRefresh: () => {
|
|
|
- // 销毁之前的实例并等待刷新完成
|
|
|
- if(btRef.current){
|
|
|
- // @ts-ignore
|
|
|
- btRef.current?.kill();
|
|
|
- }
|
|
|
-
|
|
|
- router.refresh()
|
|
|
- },
|
|
|
- themeName: "default",
|
|
|
- lang: "pt-br",
|
|
|
- target: document.getElementById("betby"),
|
|
|
- betSlipOffsetBottom: 80,
|
|
|
- // betSlipOffsetRight: 750,
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- betSlipZIndex: 1000,
|
|
|
- stickyTop: 0,
|
|
|
- betSlipOffsetTop: 50,
|
|
|
- onRecharge: function () {
|
|
|
- router.push("/deposit");
|
|
|
- },
|
|
|
- onRouteChange: function () {
|
|
|
- },
|
|
|
- onLogin: function () {},
|
|
|
- onRegister: function () {},
|
|
|
- onBetSlipStateChange: function () {},
|
|
|
+ const getGameDetailApi = async () => {
|
|
|
+ const data = await server
|
|
|
+ .request<GameInfo>({
|
|
|
+ url: "/v1/api/front/game_info_by_id",
|
|
|
+ method: "post",
|
|
|
+ data: { id: "sportsBet", mode: 1 },
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ setCurrentToken(res.data.game_url)
|
|
|
+ return res.data.game_url;
|
|
|
+ } else {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
});
|
|
|
- };
|
|
|
+ return data;
|
|
|
+ };
|
|
|
+ // Handle initialization when script is loaded
|
|
|
+ const onLoad = () => {
|
|
|
+ // @ts-ignore
|
|
|
+ const bt = new BTRenderer();
|
|
|
+ btRef.current = bt;
|
|
|
+ // @ts-ignore
|
|
|
+ console.log("onLoad=====>666666",token,'window===>',document.getElementById("betby"));
|
|
|
+ bt.initialize({
|
|
|
+ brand_id: brand_id,
|
|
|
+ token: token,//使用最新的token
|
|
|
+ // onTokenExpired: getGameDetailApi, //过期自动更新token
|
|
|
+ onSessionRefresh: () => {
|
|
|
+ console.log('onLoad=====>onSessionRefresh')
|
|
|
+ // 销毁之前的实例并等待刷新完成
|
|
|
+ // if(btRef.current){
|
|
|
+ // console.log('onLoad=====>onSessionRefresh1111')
|
|
|
+ // // @ts-ignore
|
|
|
+ // btRef.current?.kill();
|
|
|
+ // }
|
|
|
+ // isFreshRef.current = true;
|
|
|
+
|
|
|
+ console.log('onLoad=====>onSessionRefresh11112222')
|
|
|
+ // router.refresh()
|
|
|
+ window.location.reload();
|
|
|
+ // router.push(router.asPath, undefined, { scroll: false });
|
|
|
+ // Force a re-render
|
|
|
+ },
|
|
|
+ themeName: "default",
|
|
|
+ lang: "pt-br",
|
|
|
+ target: document.getElementById("betby"),
|
|
|
+ betSlipOffsetBottom: 80,
|
|
|
+ // betSlipOffsetRight: 750,
|
|
|
|
|
|
- return (
|
|
|
- <>
|
|
|
- <div id="betby" className={"h-[100%]"}></div>
|
|
|
+ betSlipZIndex: 1000,
|
|
|
+ stickyTop: 0,
|
|
|
+ betSlipOffsetTop: 50,
|
|
|
+ onRecharge: function () {
|
|
|
+ router.push("/deposit");
|
|
|
+ },
|
|
|
+ onRouteChange: function () {
|
|
|
+ },
|
|
|
+ onLogin: function () {},
|
|
|
+ onRegister: function () {},
|
|
|
+ onBetSlipStateChange: function () {},
|
|
|
+ });
|
|
|
+ };
|
|
|
|
|
|
- <Script src={"https://ui.invisiblesport.com/bt-renderer.min.js"} onLoad={onLoad} />
|
|
|
- </>
|
|
|
- );
|
|
|
+ return <div id="betby" className="h-[100%]"></div>;
|
|
|
};
|
|
|
|
|
|
export default SportsClient;
|