import { useEffect, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { userService } from "../services"; import toImage from "../labs/html2image"; import { ANIMATION_DURATION } from "../helpers/consts"; import * as utils from "../helpers/utils"; import Icon from "./Icon"; import { generateDialog } from "./Dialog"; import MemoContent from "./MemoContent"; import "../less/share-memo-image-dialog.less"; interface Props extends DialogProps { memo: Memo; } const ShareMemoImageDialog: React.FC = (props: Props) => { const { memo: propsMemo, destroy } = props; const { t } = useTranslation(); const { user: userinfo } = userService.getState(); const [shortcutImgUrl, setShortcutImgUrl] = useState(""); const memo = { ...propsMemo, createdAtStr: utils.getDateTimeString(propsMemo.displayTs), }; const memoElRef = useRef(null); useEffect(() => { setTimeout(() => { if (!memoElRef.current) { return; } toImage(memoElRef.current, { backgroundColor: "#eaeaea", pixelRatio: window.devicePixelRatio * 2, }) .then((url) => { setShortcutImgUrl(url); }) .catch((err) => { console.error(err); }); }, ANIMATION_DURATION); }, []); const handleCloseBtnClick = () => { destroy(); }; const handleDownloadBtnClick = () => { const a = document.createElement("a"); a.href = shortcutImgUrl; a.download = `memos-${utils.getDateTimeString(Date.now())}.png`; a.click(); }; return ( <>

🌄 {t("common.share")} Memo

{shortcutImgUrl ? "Click to save the image 👇" : "Generating the screenshot..."}

{shortcutImgUrl !== "" && } {memo.createdAtStr}
✍️ by {userinfo?.name}
); }; export default function showShareMemoImageDialog(memo: Memo): void { generateDialog( { className: "share-memo-image-dialog", }, ShareMemoImageDialog, { memo } ); }