From 0ca804adb7ad3bee96fc3184bc8097ac1d477290 Mon Sep 17 00:00:00 2001 From: Stephen Zhou <38493346+hyoban@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:21:27 +0800 Subject: [PATCH] feat: add main view block --- .../context-bar/blocks/ContextBlock.tsx | 18 +++++++++++++++++- .../components/layouts/AIChatContextBar.tsx | 18 +++++++++++++++++- .../ai-chat/store/slices/block.slice.ts | 1 + .../src/modules/ai-chat/store/types.ts | 2 +- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/apps/desktop/layer/renderer/src/modules/ai-chat/components/context-bar/blocks/ContextBlock.tsx b/apps/desktop/layer/renderer/src/modules/ai-chat/components/context-bar/blocks/ContextBlock.tsx index 8f89522ed..2caf3e947 100644 --- a/apps/desktop/layer/renderer/src/modules/ai-chat/components/context-bar/blocks/ContextBlock.tsx +++ b/apps/desktop/layer/renderer/src/modules/ai-chat/components/context-bar/blocks/ContextBlock.tsx @@ -1,6 +1,8 @@ +import { views } from "@follow/constants" import { clsx, cn } from "@follow/utils/utils" import type { FC } from "react" import { memo } from "react" +import { useTranslation } from "react-i18next" import { ImageThumbnail } from "~/modules/ai-chat/components/layouts/ImageThumbnail" import { CircularProgress } from "~/modules/ai-chat/components/ui/UploadProgress" @@ -13,11 +15,18 @@ import { import { EntryTitle, FeedTitle } from "./TitleComponents" +const blockTypeCanNotBeRemoved = new Set(["mainEntry", "mainView"]) + export const ContextBlock: FC<{ block: AIChatContextBlock }> = memo(({ block }) => { + const { t } = useTranslation("common") const blockActions = useChatBlockActions() const getBlockIcon = () => { switch (block.type) { + case "mainView": { + const viewIcon = views.find((v) => v.view === Number(block.value))?.icon.props.className + return viewIcon + } case "mainEntry": { return "i-mgc-star-cute-fi" } @@ -50,6 +59,10 @@ export const ContextBlock: FC<{ block: AIChatContextBlock }> = memo(({ block }) const getDisplayContent = () => { switch (block.type) { + case "mainView": { + const viewName = views.find((v) => v.view === Number(block.value))?.name + return viewName ? t(viewName) : block.value + } case "mainEntry": case "referEntry": { return @@ -145,6 +158,9 @@ export const ContextBlock: FC<{ block: AIChatContextBlock }> = memo(({ block }) const getBlockLabel = () => { switch (block.type) { + case "mainView": { + return "" + } case "mainEntry": { return "Current" } @@ -167,7 +183,7 @@ export const ContextBlock: FC<{ block: AIChatContextBlock }> = memo(({ block }) } } - const canRemove = block.type !== "mainEntry" + const canRemove = !blockTypeCanNotBeRemoved.has(block.type) return (
fileInputRef.current?.click() }, []) + const view = useRouteParamsSelector((i) => i.view) + const { addOrUpdateBlock, removeBlock } = useBlockActions() + useEffect(() => { + addOrUpdateBlock({ + id: BlockSliceAction.SPECIAL_TYPES.mainView, + type: "mainView", + value: `${view}`, + }) + return () => { + removeBlock(BlockSliceAction.SPECIAL_TYPES.mainView) + } + }, [addOrUpdateBlock, view, removeBlock]) + return (
{/* Add Context Button */} diff --git a/apps/desktop/layer/renderer/src/modules/ai-chat/store/slices/block.slice.ts b/apps/desktop/layer/renderer/src/modules/ai-chat/store/slices/block.slice.ts index 8a60c6691..bbc8fc306 100644 --- a/apps/desktop/layer/renderer/src/modules/ai-chat/store/slices/block.slice.ts +++ b/apps/desktop/layer/renderer/src/modules/ai-chat/store/slices/block.slice.ts @@ -30,6 +30,7 @@ export class BlockSliceAction { } static SPECIAL_TYPES = { + mainView: "mainView", mainEntry: "mainEntry", selectedText: "selectedText", } diff --git a/apps/desktop/layer/renderer/src/modules/ai-chat/store/types.ts b/apps/desktop/layer/renderer/src/modules/ai-chat/store/types.ts index ee711b3c8..f6fae174b 100644 --- a/apps/desktop/layer/renderer/src/modules/ai-chat/store/types.ts +++ b/apps/desktop/layer/renderer/src/modules/ai-chat/store/types.ts @@ -19,7 +19,7 @@ interface BaseContextBlock { } export interface ValueContextBlock extends BaseContextBlock { - type: "mainEntry" | "referEntry" | "referFeed" | "selectedText" + type: "mainView" | "mainEntry" | "referEntry" | "referFeed" | "selectedText" value: string }