"use client";
import { PromotionRep } from "@/api/home";
import Agent, { AgentSuffix } from "@/components/Agent";
import { ModalEnum } from "@/components/Box/types";
import feedback from "@/feedback";
import { usePathname } from "@/i18n/routing";
import { useUserInfoStore } from "@/stores/useUserInfoStore";
import useWheelStore from "@/stores/useWheelStore";
import { commonMask, sleep } from "@/utils";
import { server } from "@/utils/client";
import { getToken } from "@/utils/Cookies";
import { Local } from "@/utils/storage";
import { useDebounceEffect } from "ahooks";
import dayjs from "dayjs";
import React from "react";
import dialogManage from "./manager";
const keyMap: any = {
0: "ban_pop_type_0",
1: "ban_pop_type_1",
2: "pop_type_2",
3: "pop_type_3",
};
const doFun = async (data: PromotionRep) => {
switch (data.action_type) {
case 2:
window.open(data.action_params, "_blank");
break;
case 3:
let path = data.action_params;
if (data.activity_id) {
path = `${data.action_params}?activity_id=${data.activity_id}`;
}
if (path) {
window.nextRouter.push(path);
}
break;
case 4:
if (data.action_params === ModalEnum.red_packet) {
dialogManage.showDialog("RedPacket");
}
if (data.action_params === ModalEnum.pwa_install) {
dialogManage.showDialog("PwaInstall");
}
break;
case 5:
data?.action_params ? await eval(data?.action_params || "") : "";
break;
default:
break;
}
};
export const showProxy1 = async () => {
await feedback.showModal({
content: () => ,
width: "90%",
useDefaultFooter: false,
suffix: () => ,
});
};
export const showProxy2 = async () => {
await feedback.showModal({
content: ,
width: "90%",
useDefaultFooter: false,
suffix: ,
});
};
const getPromotions = async () => {
return server
.request({
url: "/v1/api/front/pop_list",
method: "POST",
})
.then((res) => {
if (res.code === 200) return res;
});
};
const AutoShowDialog = () => {
const pathName = usePathname();
const [data, setData] = React.useState([]);
const { userInfo } = useUserInfoStore();
const wheelState = useWheelStore((state) => state);
const [cacheUserInfo, setCacheUserInfo] = React.useState({});
useDebounceEffect(() => {
if (cacheUserInfo?.id !== userInfo?.id || !userInfo?.id) {
getData();
if (userInfo?.id) {
setCacheUserInfo(userInfo);
}
}
}, [userInfo, cacheUserInfo]);
React.useEffect(() => {
if (!data?.length) {
return;
}
setTimeout(() => {
doShow();
}, 300);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [data]);
const getData = async () => {
commonMask.show();
try {
const res = await getPromotions();
if (res?.code === 200 && res?.data?.length) {
setData(res.data);
if (!res.data?.length) {
commonMask.hide();
}
} else {
throw new Error(res?.code?.toString());
}
} catch {
commonMask.hide();
}
};
React.useEffect(() => {
data.forEach((item) => {
if (item.content_type === 1) {
const img = new Image();
if (item?.content?.image) img.src = item?.content?.image;
}
});
}, [data]);
const checkIsCanShow = (data: PromotionRep) => {
const toId = userInfo?.id || "-1";
// debugger;
if (!data?.id) return false;
if (data.pop_type === 2 && !getToken()) return false;
if (data.pop_type === 3) {
const popSession = sessionStorage.getItem(`pupupNotShow_${data.id}`);
// 今天不再展示
if (popSession && dayjs(Number(popSession)).add(1, "day").isAfter(dayjs(), "day")) {
return false;
}
}
if (data.pop_type === 1) {
let popData = Local.getKey(keyMap[data.pop_type]);
if (!popData) return true;
try {
const isCurDay = dayjs(popData.date).add(1, "day").isAfter(dayjs(), "day");
if (isCurDay && popData[toId][data.id]) {
return false;
}
} catch {}
}
return true;
};
const saveCache = (type: 1 | 2 | 3 | 0, popid: number) => {
const toId = userInfo?.id || -1;
const cachedData = Local.getKey(keyMap[type]);
let popData: any = {
date: Date.now(),
};
if (cachedData) {
try {
if (dayjs(cachedData.date).isSame(Date.now(), "day")) {
popData = cachedData;
} else {
Local.removeKey(keyMap[type]);
}
} catch {}
}
if (!popData[toId]) {
popData[toId] = {};
}
popData[toId][popid] = true;
Local.setKey(keyMap[type], JSON.stringify(popData));
};
const saveShowIndex = (idx: number) => {
sessionStorage.setItem("dialogShow", `${idx + 1}`);
};
const doShow = async () => {
setTimeout(() => {
commonMask.hide();
}, 500);
//记录点击的索引
let showIndex = sessionStorage.getItem("dialogShow");
let startShow = showIndex ? Number(showIndex) : 0;
if (startShow > data.length - 1) {
startShow = 0;
}
for (let i = startShow; i < data.length; i++) {
if (window.location.pathname.length > 3) break;
const curData = data[i];
if (!checkIsCanShow(curData)) {
// saveShowIndex(i);
continue;
}
// await dialogManage.showDialog("ReceiveGift", curData); //周返现
// await dialogManage.showDialog('WheelSection', curData); //轮盘
// await dialogManage.showDialog('SignInSection', curData); //签到
// await dialogManage.showDialog("SignInSection", curData);
try {
let res: any = "";
switch (curData.content_type) {
// 图片展示
case 1:
// res = await dialogManage.showDialog("ImgDialog", {
// ...curData,
// isShowNotShow: curData.pop_type === 3,
// });
const imgUrl = curData?.content?.image;
if (imgUrl) {
res = await feedback.showImage({
imgUrl,
showAgain: true,
});
}
break;
// 富文本展示
case 2:
// res = await dialogManage.showDialog("TextDialog", curData);
const text = curData?.content?.text;
if (text) {
res = await feedback.showText({
text,
showAgain: true,
});
}
break;
case 3:
// 轮盘特殊处理 dialogManage.showDialog('WheelSection')
if (curData?.action_params?.includes("WheelSection")) {
await wheelState.setWheel();
console.log(useWheelStore.getState());
if (useWheelStore.getState().status != 1) {
break;
}
}
if (curData.action_type === 5) {
res = curData?.action_params
? await eval(curData?.action_params || "")
: "";
}
break;
}
if (res.isCheck) {
sessionStorage.setItem(`pupupNotShow_${curData.id}`, `${Date.now()}`);
}
if (res.bodyClick) {
doFun(curData);
return;
}
// if (Array.isArray(res)) {
// const [_, closeType] = res[0].split("_");
// if (closeType == 1) {
// sessionStorage.setItem(`pupupNotShow_${curData.id}`, `${Date.now()}`);
// }
// }
if (res === "target") {
return;
}
} catch (err) {
// saveShowIndex(i);
continue;
}
// 记录当前展示到几个了
// saveShowIndex(i);
if (curData.id) saveCache(curData.pop_type, curData.id);
await sleep(300);
}
};
return null;
};
export default AutoShowDialog;