From a3e24e7a3db4e0cc4a0958632918adacb487ad5d Mon Sep 17 00:00:00 2001 From: DIYgod Date: Fri, 26 Jul 2024 00:00:24 +0800 Subject: [PATCH] feat: reuse feed actions in entry column --- src/renderer/src/hooks/biz/useFeedActions.tsx | 14 +++++++-- .../src/modules/entry-column/item.tsx | 31 +++++++++++++------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/renderer/src/hooks/biz/useFeedActions.tsx b/src/renderer/src/hooks/biz/useFeedActions.tsx index d38a48625..c877b1d13 100644 --- a/src/renderer/src/hooks/biz/useFeedActions.tsx +++ b/src/renderer/src/hooks/biz/useFeedActions.tsx @@ -12,9 +12,11 @@ import { useDeleteSubscription } from "./useSubscriptionActions" export const useFeedActions = ({ feedId, view, + type, }: { feedId: string view?: number + type?: "feedList" | "entryList" }) => { const feed = useFeedById(feedId) const subscription = useSubscriptionByFeedId(feedId) @@ -25,12 +27,14 @@ export const useFeedActions = ({ feedId, }) + const isEntryList = type === "entryList" + const items = useMemo(() => { if (!feed) return [] const items = [ { type: "text" as const, - label: "Edit", + label: isEntryList ? "Edit Feed" : "Edit", click: () => { present({ @@ -43,16 +47,17 @@ export const useFeedActions = ({ }, { type: "text" as const, - label: "Unfollow", + label: isEntryList ? "Unfollow Feed" : "Unfollow", click: () => deleteSubscription.mutate(subscription), }, { type: "separator" as const, + disabled: isEntryList, }, ...(!feed.ownerUserId && !!feed.id ? [{ type: "text" as const, - label: "Claim", + label: isEntryList ? "Claim Feed" : "Claim", click: () => { claimFeed() }, @@ -68,16 +73,19 @@ export const useFeedActions = ({ []), { type: "separator" as const, + disabled: isEntryList, }, { type: "text" as const, label: "Open Feed in Browser", + disabled: isEntryList, click: () => window.open(`${WEB_URL}/feed/${feedId}?view=${view}`, "_blank"), }, { type: "text" as const, label: "Open Site in Browser", + disabled: isEntryList, click: () => { const feed = getFeedById(feedId) if (feed) { diff --git a/src/renderer/src/modules/entry-column/item.tsx b/src/renderer/src/modules/entry-column/item.tsx index 242a01777..b22300a4b 100644 --- a/src/renderer/src/modules/entry-column/item.tsx +++ b/src/renderer/src/modules/entry-column/item.tsx @@ -2,6 +2,7 @@ import { useGeneralSettingKey } from "@renderer/atoms/settings/general" import { views } from "@renderer/constants" import { useAsRead } from "@renderer/hooks/biz/useAsRead" import { useEntryActions } from "@renderer/hooks/biz/useEntryActions" +import { useFeedActions } from "@renderer/hooks/biz/useFeedActions" import { useNavigateEntry } from "@renderer/hooks/biz/useNavigateEntry" import { useRouteParamsSelector } from "@renderer/hooks/biz/useRouteParams" import { useAuthQuery } from "@renderer/hooks/common" @@ -41,6 +42,12 @@ function EntryItemImpl({ entry, }) + const { items: feedItems } = useFeedActions({ + feedId: entry.feedId, + view, + type: "entryList", + }) + const translation = useAuthQuery( Queries.ai.translation({ entry, @@ -130,18 +137,24 @@ function EntryItemImpl({ (e) => { e.preventDefault() showNativeMenu( - items - .filter((item) => !item.disabled) - .map((item) => ({ - type: "text", - label: item.name, - click: item.onClick, - shortcut: item.shortcut, - })), + [ + ...(items + .filter((item) => !item.disabled) + .map((item) => ({ + type: "text" as const, + label: item.name, + click: item.onClick, + shortcut: item.shortcut, + }))), + { + type: "separator" as const, + }, + ...(feedItems.filter((item) => !item.disabled)), + ], e, ) }, - [items], + [items, feedItems], ) return (