diff --git a/web/public/icons/download.svg b/web/public/icons/download.svg new file mode 100644 index 00000000..4726effd --- /dev/null +++ b/web/public/icons/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/components/PreviewImageDialog.tsx b/web/src/components/PreviewImageDialog.tsx index fa254f4a..734bd4ca 100644 --- a/web/src/components/PreviewImageDialog.tsx +++ b/web/src/components/PreviewImageDialog.tsx @@ -1,4 +1,5 @@ import { showDialog } from "./Dialog"; +import * as utils from "../helpers/utils"; import "../less/preview-image-dialog.less"; interface Props extends DialogProps { @@ -10,12 +11,23 @@ const PreviewImageDialog: React.FC = ({ destroy, imgUrl }: Props) => { destroy(); }; + const handleDownloadBtnClick = () => { + const a = document.createElement("a"); + a.href = imgUrl; + a.download = `memos-${utils.getDateTimeString(Date.now())}.png`; + a.click(); + }; + return ( <> - - +
+ + +
diff --git a/web/src/components/ShareMemoImageDialog.tsx b/web/src/components/ShareMemoImageDialog.tsx index 44459a52..8856d181 100644 --- a/web/src/components/ShareMemoImageDialog.tsx +++ b/web/src/components/ShareMemoImageDialog.tsx @@ -61,6 +61,13 @@ const ShareMemoImageDialog: React.FC = (props: Props) => { setImgAmount(imgAmount - 1); }; + const handleDownloadBtnClick = () => { + const a = document.createElement("a"); + a.href = shortcutImgUrl; + a.download = `memos-${utils.getDateTimeString(Date.now())}.png`; + a.click(); + }; + return ( <>
@@ -73,11 +80,11 @@ const ShareMemoImageDialog: React.FC = (props: Props) => {
-

{shortcutImgUrl ? "Right click or long press to save image 👇" : "Generating the screenshot..."}

+

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

- + {memo.createdAtStr}
diff --git a/web/src/less/preview-image-dialog.less b/web/src/less/preview-image-dialog.less index d041a2ff..51c78688 100644 --- a/web/src/less/preview-image-dialog.less +++ b/web/src/less/preview-image-dialog.less @@ -7,11 +7,15 @@ @apply flex flex-col justify-center items-center relative w-full h-full p-0; background-color: unset; - > .close-btn { - @apply fixed top-8 right-8 w-8 h-8 p-1 cursor-pointer rounded opacity-90 bg-gray-300 z-10 shadow-md hover:opacity-70; + > .btns-container { + @apply fixed top-8 right-8 flex flex-col justify-start items-center; - > .icon-img { - @apply w-6 h-auto; + > .btn { + @apply mb-3 last:mb-0 w-8 h-8 p-1 cursor-pointer rounded opacity-90 bg-gray-300 z-10 shadow-md hover:opacity-70; + + > .icon-img { + @apply w-6 h-auto; + } } }