"use client"; import { useSystemStore } from "@/stores/useSystemStore"; import { Button, Popup } from "antd-mobile"; import { useTranslations } from "next-intl"; import Image from "next/image"; import { forwardRef, useEffect, useImperativeHandle, useRef } from "react"; /** * @description 检测pwa是否下载 * if 下载 不弹窗 , else 弹窗 * */ export interface DesktopRefProps { onOpen: () => void; onClose: () => void; } interface Props {} const Desktop = forwardRef(function Desktop(props, ref) { const prompt = useRef(null); const t = useTranslations("HomePage"); const { isHasDesktop, setHasDesktop } = useSystemStore((state) => { return { isHasDesktop: state.isHasDesktop, setHasDesktop: state.setHasDesktop, }; }); const downloadHandler = () => { // @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 (useSystemStore.getState().isHasDesktop === undefined) { setHasDesktop(true); } }; useEffect(() => { 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); }, }; }); return (
{"logo"} {t("saveTips")}
); }); export default Desktop;