diff --git a/web/src/components/MemoActionMenu.tsx b/web/src/components/MemoActionMenu.tsx
index 14d3f7f8..830cb029 100644
--- a/web/src/components/MemoActionMenu.tsx
+++ b/web/src/components/MemoActionMenu.tsx
@@ -24,17 +24,32 @@ import { useTranslate } from "@/utils/i18n";
interface Props {
memo: Memo;
+ readonly?: boolean;
className?: string;
- hiddenActions?: ("edit" | "archive" | "delete" | "share" | "pin" | "remove_completed_task_list")[];
onEdit?: () => void;
}
+const checkHasCompletedTaskList = (memo: Memo) => {
+ for (const node of memo.nodes) {
+ if (node.type === NodeType.LIST && node.listNode?.children && node.listNode?.children?.length > 0) {
+ for (let j = 0; j < node.listNode.children.length; j++) {
+ if (node.listNode.children[j].type === NodeType.TASK_LIST_ITEM && node.listNode.children[j].taskListItemNode?.complete) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+};
+
const MemoActionMenu = (props: Props) => {
- const { memo, hiddenActions } = props;
+ const { memo, readonly } = props;
const t = useTranslate();
const location = useLocation();
const navigateTo = useNavigateTo();
const memoStore = useMemoStore();
+ const isArchived = memo.rowStatus === RowStatus.ARCHIVED;
+ const hasCompletedTaskList = checkHasCompletedTaskList(memo);
const isInMemoDetailPage = location.pathname.startsWith(`/m/${memo.uid}`);
const handleTogglePinMemoBtnClick = async () => {
@@ -69,26 +84,17 @@ const MemoActionMenu = (props: Props) => {
};
const handleToggleMemoStatusClick = async () => {
+ const status = memo.rowStatus === RowStatus.ARCHIVED ? RowStatus.ACTIVE : RowStatus.ARCHIVED;
+ const message = memo.rowStatus === RowStatus.ARCHIVED ? t("message.restored-successfully") : t("message.archived-successfully");
try {
- if (memo.rowStatus === RowStatus.ARCHIVED) {
- await memoStore.updateMemo(
- {
- name: memo.name,
- rowStatus: RowStatus.ACTIVE,
- },
- ["row_status"],
- );
- toast(t("message.restored-successfully"));
- } else {
- await memoStore.updateMemo(
- {
- name: memo.name,
- rowStatus: RowStatus.ARCHIVED,
- },
- ["row_status"],
- );
- toast.success(t("message.archived-successfully"));
- }
+ await memoStore.updateMemo(
+ {
+ name: memo.name,
+ rowStatus: status,
+ },
+ ["row_status"],
+ );
+ toast(message);
} catch (error: any) {
toast.error(error.details);
console.error(error);
@@ -155,38 +161,44 @@ const MemoActionMenu = (props: Props) => {
);
diff --git a/web/src/components/MemoReactionListView.tsx b/web/src/components/MemoReactionListView.tsx
index 36693700..5553cab6 100644
--- a/web/src/components/MemoReactionListView.tsx
+++ b/web/src/components/MemoReactionListView.tsx
@@ -2,6 +2,7 @@ import { uniq } from "lodash-es";
import { memo, useEffect, useState } from "react";
import useCurrentUser from "@/hooks/useCurrentUser";
import { useUserStore } from "@/store/v1";
+import { RowStatus } from "@/types/proto/api/v1/common";
import { Memo } from "@/types/proto/api/v1/memo_service";
import { Reaction } from "@/types/proto/api/v1/reaction_service";
import { User } from "@/types/proto/api/v1/user_service";
@@ -18,6 +19,7 @@ const MemoReactionListView = (props: Props) => {
const currentUser = useCurrentUser();
const userStore = useUserStore();
const [reactionGroup, setReactionGroup] = useState