import { Dropdown, Menu, MenuButton, MenuItem } from "@mui/joy"; import classNames from "classnames"; import toast from "react-hot-toast"; import Icon from "@/components/Icon"; import { useMemoStore } from "@/store/v1"; import { RowStatus } from "@/types/proto/api/v2/common"; import { Memo } from "@/types/proto/api/v2/memo_service"; import { useTranslate } from "@/utils/i18n"; import { showCommonDialog } from "./Dialog/CommonDialog"; import showMemoEditorDialog from "./MemoEditor/MemoEditorDialog"; import showShareMemoDialog from "./ShareMemoDialog"; interface Props { memo: Memo; className?: string; hiddenActions?: ("edit" | "archive" | "delete" | "share" | "pin")[]; onArchived?: () => void; onDeleted?: () => void; } const MemoActionMenu = (props: Props) => { const { memo, hiddenActions } = props; const t = useTranslate(); const memoStore = useMemoStore(); const handleTogglePinMemoBtnClick = async () => { try { if (memo.pinned) { await memoStore.updateMemo( { id: memo.id, pinned: false, }, ["pinned"], ); } else { await memoStore.updateMemo( { id: memo.id, pinned: true, }, ["pinned"], ); } } catch (error) { // do nth } }; const handleEditMemoClick = () => { showMemoEditorDialog({ memoId: memo.id, cacheKey: `${memo.id}-${memo.updateTime}`, }); }; const handleArchiveMemoClick = async () => { try { await memoStore.updateMemo( { id: memo.id, rowStatus: RowStatus.ARCHIVED, }, ["row_status"], ); } catch (error: any) { console.error(error); toast.error(error.response.data.message); } if (props.onArchived) { props.onArchived(); } }; const handleDeleteMemoClick = async () => { showCommonDialog({ title: t("memo.delete-memo"), content: t("memo.delete-confirm"), style: "danger", dialogName: "delete-memo-dialog", onConfirm: async () => { await memoStore.deleteMemo(memo.id); if (props.onDeleted) { props.onDeleted(); } }, }); }; return ( {!hiddenActions?.includes("pin") && ( {memo.pinned ? : } {memo.pinned ? t("common.unpin") : t("common.pin")} )} {!hiddenActions?.includes("edit") && ( {t("common.edit")} )} {!hiddenActions?.includes("share") && ( showShareMemoDialog(memo.id)}> {t("common.share")} )} {t("common.archive")} {t("common.delete")} ); }; export default MemoActionMenu;