Ver Fonte

feat: 修改

year há 22 horas atrás
pai
commit
e1deeb3c70

+ 34 - 1
src/api/activity.ts

@@ -328,9 +328,42 @@ export const getVipReliefInfo = async () => {
     });
 };
 
-export const clainVipRelief = async (data: { mode: 1 | 2 }) => {
+export const claimVipRelief = async (data: { mode: 1 | 2 }) => {
     return server.post<RelieInfo>({
         url: "//v1/api/user/activity/claimVipReliefReward",
         data,
     });
 };
+
+export interface CommissionItem {
+    user_id: string;
+    user_name: string;
+    pay_amount: number;
+    commission_amount: number;
+}
+
+export interface AgentPayInfo {
+    reward_amount: number;
+    direct_user_num: number;
+    direct_pay_amount: number;
+    total_user_num: number;
+    total_pay_amount: number;
+    direct_commission_rate: number;
+    secondary_commission_rate: number;
+    agent_text: string;
+    agent_images: string[];
+    commissions: CommissionItem[];
+}
+
+// 代理充值 /v1/api/user/activity/getAgentPayInfo
+export const getAgentPayInfo = async () => {
+    return server.post<AgentPayInfo>({
+        url: "/v1/api/user/activity/getAgentPayInfo",
+    });
+};
+
+export const claimAgentPayReward = async () => {
+    return server.post({
+        url: "/v1/api/user/activity/claimAgentPayReward",
+    });
+};

+ 64 - 7
src/app/[locale]/(TabBar)/profile/loginedHeader.tsx

@@ -1,20 +1,73 @@
 "use client";
 import { userInfoApi } from "@/api/login";
+import { getNewVip } from "@/api/user";
 import { HeaderImageMap } from "@/enums";
 import { useVipStore } from "@/stores/useVipStore";
+import { formatAmount } from "@/utils";
 import { copyText } from "@/utils/methods";
 import { useRequest } from "ahooks";
 import { ProgressBar, Toast } from "antd-mobile";
 import clsx from "clsx";
 import { useTranslations } from "next-intl";
 import Image from "next/image";
+import React from "react";
 import styles from "./page.module.scss";
 
 const LoginedHeader = () => {
+    const [nextVip, setNextVip] = React.useState<any>();
+    const [showInfo, setShowInfo] = React.useState<any>({
+        pay: 0,
+        bet: 0,
+    });
     const tc = useTranslations();
     const { data: userInfo, run: refreshUserInfo } = useRequest<any, any>(userInfoApi, {
         pollingErrorRetryCount: 1,
     });
+    const { data: userVipData, run: getUserVip } = useRequest<any, any>(getNewVip, {
+        pollingErrorRetryCount: 1,
+    });
+
+    const userVip = React.useMemo(() => {
+        if (userVipData?.code === 200) {
+            return userVipData.data;
+        }
+        return {};
+    }, [userVipData]);
+
+    React.useEffect(() => {
+        if (!userVip?.level_info) return;
+        const vipInfo: any = {};
+        let maxLevel = 0;
+        let pay = 0,
+            bet = 0;
+        userVip.level_info.forEach((item: any, idx: number) => {
+            if (item.id > maxLevel) {
+                maxLevel = item.id;
+            }
+            vipInfo[item.id] = item;
+            if (item.bet > bet) {
+                bet = item.bet;
+            }
+            if (item.pay > pay) {
+                pay = item.pay;
+            }
+        });
+
+        let nextLevel = userVip?.vip_level + 1;
+        if (nextLevel >= maxLevel) {
+            nextLevel = maxLevel;
+        }
+        setShowInfo({
+            pay,
+            bet,
+        });
+        setNextVip({
+            ...vipInfo[nextLevel],
+            toNextPay: vipInfo[nextLevel].pay - (userVip?.vip_pay_exp || 0),
+            toNextBet: vipInfo[nextLevel].bet - (userVip?.vip_exp || 0),
+        });
+    }, [userVip]);
+
     const doCopyUsreId = (evt: any) => {
         (evt as any).stopPropagation();
         copyText(`${userInfo.data.user_phone}`);
@@ -70,16 +123,18 @@ const LoginedHeader = () => {
             <div className="mt-[.15rem] flex items-center rounded-[.1rem] bg-[var(--el-fill-color)] p-[.1rem]">
                 <i className="iconfont icon-vip text-[.5rem] text-[var(--primary3)]"></i>
                 <div className="text-[18px] font-black text-[var(--primary3)]">
-                    VIP {vipInfo?.vip_level}
+                    VIP {userVip?.vip_level}
                 </div>
                 <div className="ml-[.1rem] flex-1">
                     <div className={clsx(styles.vipProgress, "mb-[.1rem] leading-[1]")}>
                         <div className="flex items-center justify-between text-[.1rem]">
                             <span className="font-black uppercase">Depósito</span>
                             <div className="flex items-center text-[11px] font-black tracking-[1px] text-[#fff]">
-                                <span className="mr-[1px] text-[var(--primary3)]">0.00</span>
+                                <span className="mr-[1px] text-[var(--primary3)]">
+                                    {formatAmount(userVip?.vip_pay_exp || 0)}
+                                </span>
                                 <span className="mr-[1px]">/</span>
-                                <span>10.00</span>
+                                <span>{formatAmount(userVip?.pay || 0)}</span>
                             </div>
                         </div>
                         <ProgressBar
@@ -89,16 +144,18 @@ const LoginedHeader = () => {
                                 "--track-color": "#fff",
                                 "--track-width": "0.06rem",
                             }}
-                            percent={20}
+                            percent={((userVip?.vip_pay_exp || 0) / (nextVip?.pay || 1)) * 100}
                         ></ProgressBar>
                     </div>
                     <div className={clsx(styles.vipProgress, "leading-[1]")}>
                         <div className="flex items-center justify-between text-[.1rem]">
                             <span className="font-black uppercase">APOSTAS</span>
                             <div className="flex items-center text-[11px] font-black tracking-[1px] text-[#fff]">
-                                <span className="mr-[1px] text-[var(--primary3)]">0.00</span>
+                                <span className="mr-[1px] text-[var(--primary3)]">
+                                    {formatAmount(userVip?.vip_exp || 0)}
+                                </span>
                                 <span className="mr-[1px]">/</span>
-                                <span>10.00</span>
+                                <span>{formatAmount(nextVip?.bet || 0)}</span>
                             </div>
                         </div>
                         <ProgressBar
@@ -108,7 +165,7 @@ const LoginedHeader = () => {
                                 "--track-color": "#fff",
                                 "--track-width": "0.06rem",
                             }}
-                            percent={20}
+                            percent={((userVip?.vip_exp || 0) / (nextVip?.bet || 1)) * 100}
                         ></ProgressBar>
                     </div>
                 </div>

+ 13 - 5
src/app/[locale]/(doings)/rank/page.tsx

@@ -15,6 +15,7 @@ import { HeaderImageMap } from "@/enums";
 import { useRouter } from "@/i18n/routing";
 import { cryptoStr } from "@/utils";
 import { useRequest } from "ahooks";
+import { InfiniteScroll } from "antd-mobile";
 import clsx from "clsx";
 import Image from "next/image";
 import React from "react";
@@ -34,7 +35,7 @@ const Page = () => {
     const [rankData, setRankData] = React.useState<RankItem[]>([]);
 
     const pageInfo = React.useRef({
-        page: 1,
+        page: 0,
     });
 
     const Tab1Cfg = [
@@ -101,10 +102,10 @@ const Page = () => {
     ];
 
     React.useEffect(() => {
-        pageInfo.current.page = 1;
+        pageInfo.current.page = 0;
         setRankList([]);
         setData({} as any);
-        getData(areaId);
+        // getData(areaId);
     }, [areaId]);
 
     const getData = async (id: number) => {
@@ -122,7 +123,7 @@ const Page = () => {
             const res = await getRankDetail(params);
             if (res?.code === 200) {
                 setData(res.data);
-                if (res?.data?.list && res?.data?.list?.length < 10) {
+                if (!res?.data?.list || (res?.data?.list && res?.data?.list?.length < 10)) {
                     setNoMore(true);
                 }
                 setRankList((value) => {
@@ -137,7 +138,7 @@ const Page = () => {
 
     const getNumber = (num: number) => {
         if (num > 3) return num;
-        return <img className="inline-block w-[.3rem]" src={`/rank/f${num}.webp`} alt=""></img>;
+        return <img className="inline-block w-[.18rem]" src={`/rank/f${num}.webp`} alt=""></img>;
     };
 
     return (
@@ -306,6 +307,13 @@ const Page = () => {
                                             </div>
                                         );
                                     })}
+                                <InfiniteScroll
+                                    hasMore={!noMore}
+                                    loadMore={async () => {
+                                        pageInfo.current.page++;
+                                        await getData(areaId);
+                                    }}
+                                ></InfiniteScroll>
                             </div>
                         </div>
                     </div>

+ 82 - 17
src/app/[locale]/(doings)/rechargeRefund/page.tsx

@@ -1,14 +1,46 @@
 "use client";
+import { AgentPayInfo, claimAgentPayReward, getAgentPayInfo } from "@/api/activity";
 import AdSwiperBox from "@/components/AdSwiperBox";
 import CustomButton from "@/components/CustomButton";
 import InviteBox from "@/components/InviteBox";
 import ShareText from "@/components/ShareText";
 import { useRouter } from "@/i18n/routing";
+import { formatAmount } from "@/utils";
+import { Toast } from "antd-mobile";
 import clsx from "clsx";
+import { useTranslations } from "next-intl";
+import React from "react";
 import styles from "./page.module.scss";
 
 const Page = () => {
     const router = useRouter();
+    const [data, setData] = React.useState<AgentPayInfo>();
+    const t = useTranslations();
+
+    React.useEffect(() => {
+        getInfo();
+    }, []);
+
+    const getInfo = async () => {
+        const res = await getAgentPayInfo();
+        if (res.code === 200) {
+            setData(res.data);
+        }
+    };
+
+    const doClaim = async () => {
+        Toast.show({ icon: "loading" });
+        try {
+            const res = await claimAgentPayReward();
+            if (res.code === 200) {
+                Toast.show({ content: t("code.200") });
+                return;
+            }
+            throw new Error(res.code.toString());
+        } catch (err: any) {
+            Toast.show({ icon: "fail", content: t(`code.${err.message || 400}`) });
+        }
+    };
 
     return (
         <div className="p-[.1rem]">
@@ -19,14 +51,16 @@ const Page = () => {
                         <div className="text-[14px] font-normal">Convidados</div>
                         <div className="mt-[.06rem] flex items-center">
                             <i className="iconfont icon-fangke2 mr-[.1rem] text-[22px] text-[var(--textColor4)]"></i>
-                            <span className="text-[18px] font-black">0</span>
+                            <span className="text-[18px] font-black">
+                                {data?.total_user_num || 0}
+                            </span>
                         </div>
                     </div>
                     <div className="flex flex-1 flex-col items-center py-[.04rem]">
                         <div className="text-[14px] font-normal">Total promocional</div>
                         <div className="mt-[.06rem] flex items-center">
                             <span className="text-[18px] font-black text-[var(--textColor4)]">
-                                R$ 0.00
+                                R$ {formatAmount(data?.total_pay_amount || 0)}
                             </span>
                         </div>
                     </div>
@@ -35,23 +69,30 @@ const Page = () => {
                     <div>Usuários que recarregaram</div>
                     <div className="mt-[.06rem] flex items-center">
                         <i className="iconfont icon-fangke2 mr-[.1rem] text-[22px] text-[var(--textColor4)]"></i>
-                        <span className="text-[18px] font-black">0</span>
+                        <span className="text-[18px] font-black">{data?.direct_user_num || 0}</span>
                     </div>
                     <div className="mt-[.25rem]">Pode ser resgatado</div>
                     <span className="mt-[.15rem] text-[24px] font-black text-[var(--textColor4)]">
-                        R$ 0.00
+                        R$ {formatAmount(data?.reward_amount || 0)}
                     </span>
-                    <CustomButton className="mt-[.1rem] !w-[1.5rem] !py-[.08rem]">
+                    <CustomButton
+                        className="mt-[.1rem] !w-[1.5rem] !py-[.08rem]"
+                        disabled={!data?.reward_amount || data?.reward_amount <= 0}
+                        onClick={doClaim}
+                    >
                         Receba
                     </CustomButton>
                 </div>
             </div>
             <div className="mt-[.1rem] flex items-center justify-between">
-                <CustomButton className={styles.agentBtn}>
+                <CustomButton className={styles.agentBtn} onClick={() => router.push("/fission")}>
                     <i className="iconfont icon-hongbao mr-[.1rem] text-[var(--primary-button)]"></i>
                     <span>Agente</span>
                 </CustomButton>
-                <CustomButton className={styles.agentBtn}>
+                <CustomButton
+                    className={styles.agentBtn}
+                    onClick={() => router.push("/raffleWheel")}
+                >
                     <i className="iconfont icon-spin mr-[.1rem] text-[var(--primary-button)]"></i>
                     <span>Ganhe R$100</span>
                 </CustomButton>
@@ -75,13 +116,18 @@ const Page = () => {
             <div className="mt-[15px] flex flex-col gap-[10px] break-all rounded-[var(--borderRadius)] bg-[#fff] p-[15px] py-[20px] text-[12px]">
                 <span>
                     Quando o amino que você convidou fizer uma recarga, você receberá{" "}
-                    <span className="text-[var(--textColor4)]">10%</span> do valor recarregado
-                    porele
+                    <span className="text-[var(--textColor4)]">
+                        {(data?.direct_commission_rate || 0) * 100}%
+                    </span>{" "}
+                    do valor recarregado porele
                 </span>
                 <span>
                     Quando o amigo que o seu amigo convidou fizer uma recarga, você receberá{" "}
-                    <span className="text-[var(--textColor4)]">1%</span> do valor recarregado por
-                    ele.
+                    <span className="text-[var(--textColor4)]">
+                        {" "}
+                        {(data?.secondary_commission_rate || 0) * 100}%
+                    </span>{" "}
+                    do valor recarregado por ele.
                 </span>
                 <span>
                     Você receberá uma comissão sobre cada recarga, então quanto mais recargas forem
@@ -98,13 +144,32 @@ const Page = () => {
                     <div className="flex-1 py-[.08rem] text-center">Valor</div>
                     <div className="flex-1 py-[.08rem] text-center">Recompensa</div>
                 </div>
-
-                <div className="flex items-center justify-center py-[1.5rem] text-[12px]">
-                    Sem dados disponíveis
-                </div>
+                {!!data?.commissions?.length &&
+                    data.commissions.map((item) => {
+                        return (
+                            <div key={item.user_id} className="flex items-center justify-between">
+                                <div className="flex-1 py-[.08rem] text-center">{item.user_id}</div>
+                                <div className="flex-1 py-[.08rem] text-center">
+                                    {item.pay_amount}
+                                </div>
+                                <div className="flex-1 py-[.08rem] text-center">
+                                    {item.commission_amount}
+                                </div>
+                            </div>
+                        );
+                    })}
+                {!data?.commissions?.length && (
+                    <div className="flex items-center justify-center py-[1.5rem] text-[12px]">
+                        Sem dados disponíveis
+                    </div>
+                )}
             </div>
-            <ShareText></ShareText>
-            <AdSwiperBox className="mt-[.1rem]"></AdSwiperBox>
+            <ShareText text={data?.agent_text}></ShareText>
+            <AdSwiperBox
+                className="mt-[.1rem]"
+                text={data?.agent_text}
+                images={data?.agent_images}
+            ></AdSwiperBox>
         </div>
     );
 };

+ 15 - 11
src/app/[locale]/(navbar)/gameList2/Left.tsx

@@ -1,8 +1,6 @@
 "use client";
-import { GameListRep, GroupType } from "@/api/home";
 import { GameListTypeEnum } from "@/enums";
 import { useRouter } from "@/i18n/routing";
-import { useProviderStore } from "@/stores/useProvider";
 import { server } from "@/utils/client";
 import clsx from "clsx";
 import React from "react";
@@ -14,10 +12,16 @@ interface Props {
     onInit?: () => void;
 }
 
+interface GameBrandListRep {
+    id: number;
+    name: string;
+    brand_icon: string;
+}
+
 const getGames = async () => {
     return server
-        .request<GroupType[]>({
-            url: "/v1/api/front/game_list",
+        .request<GameBrandListRep[]>({
+            url: "/v1/api/front/game_brand_list",
             method: "POST",
         })
         .then((res) => {
@@ -29,15 +33,15 @@ const getGames = async () => {
 const Left: React.FC<Props> = ({ actInfo, onChage, onInit }) => {
     // { id: 1, text: "Popular", img: "https://bcwin.s3.sa-east-1.amazonaws.com/quente.png" },
     const [tags, setTags] = React.useState<any>([]);
-    const { providers, setProviders } = useProviderStore();
+    const [providers, setProviders] = React.useState<GameBrandListRep[]>([]);
     const router = useRouter();
 
     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);
+                if (res?.length) {
+                    setProviders(res);
+                }
             });
         }
     }, [providers, setProviders]);
@@ -67,7 +71,7 @@ const Left: React.FC<Props> = ({ actInfo, onChage, onInit }) => {
         // eslint-disable-next-line react-hooks/exhaustive-deps
     }, [providers, onChage, actInfo, onInit, tags]);
 
-    const changeProvider = (item: GameListRep) => {
+    const changeProvider = (item: GameBrandListRep) => {
         if (item.id === actInfo.id && actInfo.type === GameListTypeEnum.PROVIDER) return;
         if (providers?.length && typeof onChage === "function") {
             router.replace({
@@ -118,8 +122,8 @@ const Left: React.FC<Props> = ({ actInfo, onChage, onInit }) => {
                         })}
                         onClick={() => changeProvider(item)}
                     >
-                        <img src={item.game_icon} alt="" />
-                        <div className="px-[.05rem] text-[12px]">{item.provider}</div>
+                        <img src={item.brand_icon} alt="" />
+                        {/* <div className="px-[.05rem] text-[12px]">{item.name}</div> */}
                     </div>
                 );
             })}

+ 20 - 3
src/app/[locale]/(navbar)/vip/page.tsx

@@ -32,12 +32,27 @@ const TimeDown = ({
     endTime,
     type,
     interval = 1000,
+    timeEnd,
 }: {
     endTime: number;
     type?: string;
     interval?: number;
+    timeEnd?: () => void;
 }) => {
-    const [_, time] = useCountdown({ leftTime: endTime, interval });
+    const [timeDone, time] = useCountdown({
+        leftTime: endTime * 1000,
+        interval,
+        onEnd: () => {
+            if (typeof timeEnd === "function") {
+                timeEnd();
+            }
+        },
+    });
+
+    React.useEffect(() => {
+        console.log(time);
+    }, [timeDone]);
+
     return (
         <div className="flex items-center">
             {type !== "day" && <span>{time.days > 9 ? time.days : `0${time.days}`}d</span>}
@@ -48,7 +63,6 @@ const TimeDown = ({
                     :<span>{time.seconds > 9 ? time.seconds : `0${time.seconds}`}</span>
                 </>
             )}
-            {type}
         </div>
     );
 };
@@ -313,7 +327,7 @@ const Page = () => {
         if (data.status === 2) {
             return <img src="/vip/vip_claimed_icon.webp" alt="" className="w-[80px]" />;
         }
-        let text: any = data.status === 1 ? "Unopened" : "Receber";
+        let text: any = data.status === 1 ? "Receber" : "Unopened";
         let status: any = data.status !== 1 ? "disable2" : "primary";
         if (data.renderType === 1) {
             if (data?.endTime && data.endTime > 0) {
@@ -322,6 +336,9 @@ const Page = () => {
                         endTime={data.endTime}
                         type={data.typeStr}
                         interval={data.interval || 1000}
+                        timeEnd={() => {
+                            runVip();
+                        }}
                     />
                 );
             }

+ 32 - 19
src/components/AdSwiperBox/index.tsx

@@ -13,32 +13,42 @@ import styles from "./index.module.scss";
 
 interface Props {
     className?: string;
+    text?: string;
+    images?: string[];
 }
 
-const AdSwiperBox: React.FC<Props> = ({ className }) => {
+const AdSwiperBox: React.FC<Props> = ({ className, images = [], text }) => {
     const locale = useLocale();
     const url = useReffer({ locale });
     const [qrDataUrl, setQrDataUrl] = React.useState("");
     const swipreRef = React.useRef<SwiperClass | null>(null);
     const config = React.useMemo(() => {
-        return [
-            {
-                img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
-                text: "8g.game está distribuindo beneficios! Vamos! Junte-se a mim na divisão do prêmio em dinheiro de 150.00",
-            },
-            {
-                img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
-                text: "Ajude seus amigos e obtenha grandes recompensas em dinheiro.",
-            },
-            {
-                img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
-                text: "Compartilhe com amigos para obter um R$50 extras bônus Jogue diariamente e ganhe jackpots em dinheiro",
-            },
-            {
-                img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
-            },
-        ];
-    }, []);
+        const result = images.map((img: string) => {
+            return {
+                img_url: img,
+                text,
+            };
+        });
+
+        // return [
+        //     {
+        //         img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
+        //         text: "8g.game está distribuindo beneficios! Vamos! Junte-se a mim na divisão do prêmio em dinheiro de 150.00",
+        //     },
+        //     {
+        //         img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
+        //         text: "Ajude seus amigos e obtenha grandes recompensas em dinheiro.",
+        //     },
+        //     {
+        //         img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
+        //         text: "Compartilhe com amigos para obter um R$50 extras bônus Jogue diariamente e ganhe jackpots em dinheiro",
+        //     },
+        //     {
+        //         img_url: "/fission/c5ed5c8d-f0be-4496-9b60-3583fcaa9e84.jfif",
+        //     },
+        // ];
+        return result;
+    }, [images, text]);
 
     React.useEffect(() => {
         QRcode.toDataURL(url, { margin: 1 }).then((res) => {
@@ -58,6 +68,9 @@ const AdSwiperBox: React.FC<Props> = ({ className }) => {
             }
         );
     };
+    if (images.length === 0) {
+        return null;
+    }
 
     return (
         <div className={clsx("flex flex-col items-center", styles.box, className)}>

+ 8 - 9
src/components/ShareText/index.tsx

@@ -4,6 +4,7 @@ import { copyText } from "@/utils/methods";
 import { Toast } from "antd-mobile";
 import clsx from "clsx";
 import { useLocale } from "next-intl";
+import React from "react";
 
 interface Props {
     text?: string;
@@ -13,13 +14,11 @@ interface Props {
 const ShareText: React.FC<Props> = ({ text, className }) => {
     const locale = useLocale();
     const url = useReffer({ locale });
-    const localText = `🎉 GANHE DINHEIRO AGORA MESMO! 🎉
-💸 REGISTRE-SE E GANHE BÔNUS DE R$3 A R$7!Cadastre-se agora e receba um bônus gratuito entre R$3 e R$7 diretamente na sua conta. Simples e rápido!
-💰 BONUS NA PRIMEIRA RECARGA: R$7 ATÉ R$777!
-Faça sua primeira recarga e ganhe um bônus incrível de até R$777. Quanto maior o valor da sua recarga, maior será o bônus!
-👉 Clique aqui para começar agora mesmo: ${decodeURIComponent(url)}
-⏰ Oferta por tempo limitado! Não deixe essa oportunidade passar. Comece a ganhar agora mesmo!
-📲 Dúvidas? Entre em contato comigo! Estou aqui para ajudar.`;
+    // ${decodeURIComponent(url)}
+
+    const localText = React.useMemo(() => {
+        return `${text?.replace(/{%}/g, decodeURIComponent(url))}`;
+    }, [text, url]);
 
     return (
         <div
@@ -29,12 +28,12 @@ Faça sua primeira recarga e ganhe um bônus incrível de até R$777. Quanto mai
             )}
         >
             <div className="h-[80px] overflow-x-hidden whitespace-pre-wrap break-all py-[10px] pl-[8px] text-center text-[12px] leading-[20px]">
-                {localText || text}
+                {localText}
             </div>
             <CustomButton
                 className="!h-[37px] !w-[100%] !text-[.12rem]"
                 onClick={() => {
-                    copyText(`${localText || text}${decodeURIComponent(url)}`);
+                    copyText(`${localText}${decodeURIComponent(url)}`);
                     Toast.show({ icon: "success", content: "Copiado com sucesso" });
                 }}
             >

+ 0 - 2
src/hooks/useCountdown.tsx

@@ -34,7 +34,6 @@ const parseMs = (milliseconds: number): FormattedRes => {
 const useCountdown = (options: Options = {}) => {
     const { leftTime = 0, interval = 1000, onEnd } = options;
     const [timeLeft, setTimeLeft] = useState(leftTime);
-
     const onEndRef = useLatest(onEnd);
 
     useEffect(() => {
@@ -60,7 +59,6 @@ const useCountdown = (options: Options = {}) => {
     }, [leftTime, interval]);
 
     const formattedRes = parseMs(timeLeft);
-
     return [timeLeft, formattedRes] as const;
 };