"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(); 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(() => { 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}.png`, handle: () => { setCollapse(false); dialogManage.showDialog("LanguageSelect"); }, }, { text: "Baixar APP", icon: "/sidebar/app.png", handle: () => { router.push("/download"); }, }, { text: "atendimento ao Cliente", icon: "/sidebar/service.png", renderWrap: (children: any) => serviceUrl ? {children} : "", }, { text: "VIP", icon: "/sidebar/vip.png", handle: () => tabHandler(PageEnum.Vip), }, { text: "FAQ", icon: "/sidebar/faq.png", handle: () => tabHandler(PageEnum.help), }, { text: "Envie-nos um e-mail", icon: "/sidebar/email.png", 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.png", textStyle: { fontSize: ".12rem" }, value: wallet.score || 0, }, { text: "Bônus", icon: "/sidebar/bonus.png", textStyle: { fontSize: ".12rem" }, value: wallet.point || 0, }, ]; if (show_free_game === 1) { result.push({ text: "Carteira grátis", icon: "/sidebar/free.png", value: wallet.free_score || 0, }); } if (show_again_game === 1) { result.push({ text: "Carteira duplicada", icon: "/sidebar/money.png", textStyle: { fontSize: ".09rem" }, value: wallet.lose_score || 0, }); } 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 (
tabHandler(PageEnum.none)} className="mr-[.06rem] rounded-[.06rem] bg-[#121617] px-[.08rem] py-[.06rem]" >
{"logo"}
{providers?.map((item, idx) => { if (idx === 8 && !isShowAll) { return (
setIsShowAll(true)} key={item.id} >
); } if (idx > 8 && !isShowAll) return null; return (
todoHandler(item)} key={item.id} >
); })}
Carteira
{walletCfg.map((item: any) => { return (
{item.value}R
{item.text}
); })}
{cardData.length > 0 && (
Promoções
)}
{cardData.map((item) => { return ( registePromo(item.id)} >
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;