feat: add main view block
This commit is contained in:
parent
d234f64d89
commit
0ca804adb7
|
|
@ -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 <EntryTitle entryId={block.value} fallback={block.value} />
|
||||
|
|
@ -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 (
|
||||
<div
|
||||
|
|
|
|||
|
|
@ -1,12 +1,15 @@
|
|||
import { cn } from "@follow/utils/utils"
|
||||
import { memo, useCallback, useMemo, useRef } from "react"
|
||||
import { memo, useCallback, useEffect, useMemo, useRef } from "react"
|
||||
|
||||
import { useAISettingValue } from "~/atoms/settings/ai"
|
||||
import { DropdownMenu, DropdownMenuTrigger } from "~/components/ui/dropdown-menu/dropdown-menu"
|
||||
import { useRouteParamsSelector } from "~/hooks/biz/useRouteParams"
|
||||
import { useFileUploadWithDefaults } from "~/modules/ai-chat/hooks/useFileUpload"
|
||||
import { useAIChatStore } from "~/modules/ai-chat/store/AIChatContext"
|
||||
import { SUPPORTED_MIME_ACCEPT } from "~/modules/ai-chat/utils/file-validation"
|
||||
|
||||
import { useBlockActions } from "../../store/hooks"
|
||||
import { BlockSliceAction } from "../../store/slices/block.slice"
|
||||
import { ContextBlock } from "../context-bar/blocks"
|
||||
import { ContextMenuContent, ShortcutsMenuContent } from "../context-bar/menus"
|
||||
|
||||
|
|
@ -27,6 +30,19 @@ export const AIChatContextBar: Component<{ onSendShortcut?: (prompt: string) =>
|
|||
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 (
|
||||
<div className={cn("flex flex-wrap items-center gap-2 px-4 py-3", className)}>
|
||||
{/* Add Context Button */}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ export class BlockSliceAction {
|
|||
}
|
||||
|
||||
static SPECIAL_TYPES = {
|
||||
mainView: "mainView",
|
||||
mainEntry: "mainEntry",
|
||||
selectedText: "selectedText",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ interface BaseContextBlock {
|
|||
}
|
||||
|
||||
export interface ValueContextBlock extends BaseContextBlock {
|
||||
type: "mainEntry" | "referEntry" | "referFeed" | "selectedText"
|
||||
type: "mainView" | "mainEntry" | "referEntry" | "referFeed" | "selectedText"
|
||||
value: string
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue