"use client"; import { ContactType, getContactsApi, getSidebarActivitiesApi } from "@/api/config"; import { BannerRep, GroupType } from "@/api/home"; import Box from "@/components/Box"; import dialogManage from "@/dialog/manager"; import { Link, usePathname, useRouter } from "@/i18n/routing"; import { useProviderStore } from "@/stores/useProvider"; import { useSystemStore } from "@/stores/useSystemStore"; import { useWalletStore } from "@/stores/useWalletStore"; import { server } from "@/utils/client"; import clsx from "clsx"; import { useLocale } from "next-intl"; import Image from "next/image"; import React, { FC, PropsWithChildren, useEffect, useMemo, useRef, useState } from "react"; import styles from "./style.module.scss"; const getGames = async () => { return server .request({ url: "/v1/api/front/game_list", method: "POST", }) .then((res) => { if (res.code === 200) return res.data; return []; }); }; const registePromoClick = (activity_id: number) => { return server .request({ url: "/v1/api/front/activity_promotion_click", method: "post", data: { activity_id }, }) .then((res) => { if (res.code === 200) return res.data; return []; }); }; interface Props {} const tabs = [ { name: "casino", id: 1, icon: "pro-niuyouguo" }, { name: "promocoes", id: 2, icon: "pro-shengriliwu" }, ]; enum PageEnum { "home", "sports", "help", "promo", "deposit", "download", "none", "profile", "gameList2", "withdraw", "Vip", } const PageEnumMap = new Map([ [PageEnum.home, { url: "/" }], [PageEnum.sports, { url: "/promo" }], [PageEnum.help, { url: "/help" }], [PageEnum.Vip, { url: "/vip" }], [PageEnum.promo, { url: "/promo" }], [PageEnum.deposit, { url: "/deposit" }], [PageEnum.withdraw, { url: "/deposit?target=2" }], [PageEnum.download, { url: "/download" }], [PageEnum.profile, { url: "/profile" }], ]); const Sidebar: FC> = (props) => { // const t = useTranslations("Sidebar"); const { providers, setProviders } = useProviderStore(); // todo Wallet const { wallet } = useWalletStore(); const locale = useLocale(); // const swiper = useSwiper(); const router = useRouter(); const tab = useRef(null); const bgRef = useRef(null); const [isShowAll, setIsShowAll] = useState(false); const pathname = usePathname(); const { isCollapse, setCollapse, service, show_free_game, show_again_game } = useSystemStore( (state) => ({ isCollapse: state.isCollapse, setCollapse: state.setCollapse, service: state.service, show_free_game: state.show_free_game, show_again_game: state.show_again_game, }) ); React.useEffect(() => { console.log(pathname); setTimeout(() => { const dom: any = document.querySelector("#globalMask"); if (dom) dom.style.display = "none"; }, 500); // Router.events.on("routeChangeComplete", () => { // console.log(99990); // }); // setTimeout(() => { // Router.events.emit("routeChangeComplete"); // }, 10000); }, [pathname]); React.useEffect(() => { if (!providers || providers.length === 0) { getGames().then((res) => { const providersData = res[0].category.filter((item) => item.type === 2); if (providersData.length === 0) return [] as any; setProviders(providersData[0].game_list); }); } }, [providers, setProviders]); const tabHandler = (index: PageEnum, isAction = true) => { bgRef.current?.setAttribute( "style", `transform: translateX(${tab.current?.clientWidth! * index}px)` ); if (isAction) { const curToPage = PageEnumMap.get(index); if (curToPage) { router.push(curToPage.url); setCollapse(false); } } return index; }; const registePromo = (id?: number) => { if (!id) return; registePromoClick(id); }; useEffect(() => { if (pathname === "/") { tabHandler(PageEnum.home, false); } else { tabHandler(PageEnum.sports, false); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isCollapse]); const [contacts, setContacts] = useState(); const [cardData, setCardData] = useState([]); useEffect(() => { getContactsApi().then((res) => { setContacts(res.data.filter((item) => item.show_bar === 1)); }); getSidebarActivitiesApi().then((res) => { console.log(33, res.data); setCardData(res.data); }); }, []); const serviceUrl: string = useMemo(() => { if (!service) return ""; const result = service.filter((item) => item.status === 1); return result[0]?.url || ""; }, [service]); const listCfg = useMemo(() => { return [ { text: "Seleção de idioma", icon: `/sidebar/${locale}.webp`, handle: () => { setCollapse(false); dialogManage.showDialog("LanguageSelect"); }, }, { text: "Baixar APP", icon: "/sidebar/app.webp", handle: () => { setCollapse(false); router.push("/download"); }, }, { text: "atendimento ao Cliente", icon: "/sidebar/service.webp", renderWrap: (children: any) => serviceUrl ? {children} : "", }, { text: "VIP", icon: "/sidebar/vip.webp", handle: () => { setCollapse(false); tabHandler(PageEnum.Vip); }, }, { text: "FAQ", icon: "/sidebar/faq.webp", handle: () => { setCollapse(false); tabHandler(PageEnum.help); }, }, { text: "Envie-nos um e-mail", icon: "/sidebar/email.webp", noRender: !(contacts && contacts?.length > 0), handle: () => { if (contacts) { const a = document.createElement("a"); a.href = `mailto:${contacts[0].email}`; a.target = "email"; a.click(); } }, }, ]; // eslint-disable-next-line react-hooks/exhaustive-deps }, [serviceUrl, locale]); const walletCfg = useMemo(() => { const result: any = [ // { // text: "Saldo", // icon: "/sidebar/saldo.webp", // textStyle: { fontSize: ".12rem" }, // value: wallet.score || 0, // }, // { // text: "Bônus", // icon: "/sidebar/bonus.webp", // textStyle: { fontSize: ".12rem" }, // value: wallet.point || 0, // }, ]; if (show_free_game === 1) { result.push({ text: "Carteira grátis", icon: "/sidebar/free.webp", value: wallet.free_score || 0, url: "/freeGames", }); } if (show_again_game === 1) { result.push({ text: "Carteira duplicada", icon: "/sidebar/money.webp", textStyle: { fontSize: ".09rem" }, value: wallet.lose_score || 0, url: "/replayGames", }); } return result; }, [wallet, show_free_game, show_again_game]); const todoHandler = (item: any) => { setCollapse(false); router.push({ pathname: `/gameList2?provider_id=${item.id}`, }); }; const promotionHandle = (item: any) => { setCollapse(false); // router.push({ // pathname: `/gameList2?provider_id=${item.id}`, // }); }; return (
{ setCollapse(false); }} className="mr-[.06rem] rounded-[.06rem] bg-[#121617] px-[.08rem] py-[.06rem]" style={{ transform: isCollapse ? "rotate(180deg)" : "rotate(0deg)" }} >
{"logo"}
{providers?.map((item, idx) => { if (!isShowAll && idx > 6) return null; return (
todoHandler(item)} key={item.id} >
); })}
{ setCollapse(false); router.push("/gameList?pageType=1&name=History"); }} >
{ setCollapse(false); router.push("/gameList?pageType=2&name=Favorite"); }} >
{!isShowAll && providers.length > 6 && (
{ setIsShowAll(true); }} style={{ background: "url('/home/placehold.webp')", backgroundSize: "100%", }} >
)}
{walletCfg?.length && ( <>
Carteira
{walletCfg.map((item: any) => { return ( setCollapse(false)} className={styles.qianbaoItem} >
{item.value}R
{item.text}
); })}
)} {cardData.length > 0 && (
Promoções
)}
{cardData.map((item) => { return ( registePromo(item.id)} pb={false} pt={false} pl={false} pr={false} >
promotionHandle(item)} >
); })} {/*
*/}
{listCfg.map((item) => { if (item.noRender) return null; if (item.renderWrap) { const Wrapper = item.renderWrap; if (React.isValidElement(Wrapper)) { return (
{item.text}
); } return null; } return (
{item.text}
); })}
{/* card*/} {/*
{cardData.map((item, index) => { return ( { // 关闭侧边栏按钮 setCollapse(false); // 关闭swiper // swiper.slideNext(); }} action={item.action_type} actionData={item.action_params} >
); })}
*/} {/* gift */} {/* tabHandler(PageEnum.promo)}*/} {/* className={"my-[0.11rem] flex items-center text-[0.15rem]" + " text-[#fff]"}*/} {/*>*/} {/*
*/} {/* */} {/* {t("promocoes")} */} {/*
*/} {/* /!**!/*/} {/**/} {/*
tabHandler(PageEnum.deposit)} className={"my-[0.16rem] flex items-center text-[0.15rem]" + " text-[#fff]"} >
{t("deposit")}
tabHandler(PageEnum.help)} className={"my-[0.16rem] flex items-center text-[0.15rem]" + " text-[#fff]"} >
{t("ajude")}
tabHandler(PageEnum.download)} className={"my-[0.16rem] flex items-center text-[0.15rem]" + " text-[#fff]"} >
{t("download")}
{contacts?.map((item, index) => ( {t("email")} ))}
{t("coumnidade")}
*/}
); }; export default Sidebar;