From d22b7722328afc202e835bb3856e38e2707a73b9 Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 15 Feb 2024 11:16:51 +0800 Subject: [PATCH] chore: add memo actions to memo detail page --- web/src/components/MemoActionMenu.tsx | 34 ++++++++++++++++++--------- web/src/components/MemoView.tsx | 2 +- web/src/pages/MemoDetail.tsx | 19 +++++++++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/web/src/components/MemoActionMenu.tsx b/web/src/components/MemoActionMenu.tsx index ca51cc4d..2178a403 100644 --- a/web/src/components/MemoActionMenu.tsx +++ b/web/src/components/MemoActionMenu.tsx @@ -12,11 +12,13 @@ import showShareMemoDialog from "./ShareMemoDialog"; interface Props { memo: Memo; - showPinned?: boolean; + hiddenActions?: ("edit" | "archive" | "delete" | "share" | "pin")[]; + onArchived?: () => void; + onDeleted?: () => void; } const MemoActionMenu = (props: Props) => { - const { memo, showPinned } = props; + const { memo, hiddenActions } = props; const t = useTranslate(); const memoStore = useMemoStore(); @@ -64,6 +66,9 @@ const MemoActionMenu = (props: Props) => { console.error(error); toast.error(error.response.data.message); } + if (props.onArchived) { + props.onArchived(); + } }; const handleDeleteMemoClick = async () => { @@ -74,6 +79,9 @@ const MemoActionMenu = (props: Props) => { dialogName: "delete-memo-dialog", onConfirm: async () => { await memoStore.deleteMemo(memo.id); + if (props.onDeleted) { + props.onDeleted(); + } }, }); }; @@ -91,20 +99,24 @@ const MemoActionMenu = (props: Props) => { - {showPinned && ( + {!hiddenActions?.includes("pin") && ( {memo.pinned ? : } {memo.pinned ? t("common.unpin") : t("common.pin")} )} - - - {t("common.edit")} - - showShareMemoDialog(memo.id)}> - - {t("common.share")} - + {!hiddenActions?.includes("edit") && ( + + + {t("common.edit")} + + )} + {!hiddenActions?.includes("share") && ( + showShareMemoDialog(memo.id)}> + + {t("common.share")} + + )} diff --git a/web/src/components/MemoView.tsx b/web/src/components/MemoView.tsx index e5bd52a8..62658ac1 100644 --- a/web/src/components/MemoView.tsx +++ b/web/src/components/MemoView.tsx @@ -135,7 +135,7 @@ const MemoView: React.FC = (props: Props) => { )} {currentUser && } - {!readonly && } + {!readonly && } { await memoStore.getOrFetchMemoById(memo.id, { skipCache: true }); }; + const handleMemoArchived = () => { + navigateTo("/archived"); + toast.success("Memo archived"); + }; + + const handleMemoDeleted = () => { + navigateTo("/"); + toast.success("Memo deleted"); + }; + return (
@@ -184,6 +195,14 @@ const MemoDetail = () => { + {!readonly && ( + + )}