"use client"; import { Button, Popup } from "antd-mobile"; import { useTranslations } from "next-intl"; import Image from "next/image"; import { forwardRef, memo, useEffect, useImperativeHandle, useRef, useState } from "react"; /** * @description 检测pwa是否下载 * if 下载 不弹窗 , else 弹窗 * */ export interface DesktopRefProps { onOpen: () => void; onClose: () => void; } interface Props { source?: "page" | "components"; } const Desktop = forwardRef(function Desktop(props, ref) { const prompt = useRef(null); const { source = "page" } = props; const elementRef = useRef(null); const t = useTranslations("HomePage"); // const { isHasDesktop, setHasDesktop } = useSystemStore((state) => { // return { // isHasDesktop: state.isHasDesktop, // setHasDesktop: state.setHasDesktop, // }; // }); const [isHasDesktop, setHasDesktop] = useState(false); const downloadHandler = () => { sessionStorage.setItem("pwa_install", "cancel"); // @ts-ignore prompt.current?.prompt(); // 不判断是否真的包含 setHasDesktop(false); }; const initDesktop = (e: Event) => { if (window.matchMedia("(display-mode: standalone)").matches) { setHasDesktop(false); return; } // 有pwa 则不会触发 prompt.current = e; if (source === "page" && sessionStorage.getItem("pwa_install") === null) { setHasDesktop(true); } }; useEffect(() => { elementRef.current = document.getElementById("app"); window.addEventListener("beforeinstallprompt", initDesktop); // @ts-ignore window.onappinstalled = function (ev) { // 安装完成 console.log("The application was installed."); }; return () => window.removeEventListener("beforeinstallprompt", initDesktop); }, []); useImperativeHandle(ref, () => { return { onClose: () => setHasDesktop(false), onOpen: () => { setHasDesktop(true); }, }; }); const cancel = () => { sessionStorage.setItem("pwa_install", "cancel"); setHasDesktop(false); }; return (
{"logo"} {t("saveTips")}
); }); export default memo(Desktop);