refactor(iod): 重构数联网相关组件和逻辑
-优化了 Data、Scene 和 Team组件的逻辑,使用 currentIodMessage 替代复杂的条件判断- 改进了 IodRelevant 组件的动画和数据处理方式 - 调整了 Message 组件以支持数联网搜索功能 - 重构了 PlaygroundIodProvider,简化了上下文类型和数据处理 - 更新了数据库相关操作,使用新的 HistoryMessage 类型 - 新增了 IodDb 类来管理数联网连接配置
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import React, { useEffect, useMemo, useState } from "react"
|
||||
import React, { useMemo } from "react"
|
||||
import { DataNavigation } from "@/components/Common/DataNavigation.tsx"
|
||||
import { Card, Drawer, Skeleton } from "antd"
|
||||
import { Card, Skeleton } from "antd"
|
||||
import { IodRegistryEntry } from "@/types/iod.ts"
|
||||
import { useIodPlaygroundContext } from "@/components/Option/Playground/PlaygroundIod.tsx"
|
||||
|
||||
@@ -33,7 +33,11 @@ type HeaderProps = {
|
||||
showButton?: boolean
|
||||
onClick?: () => void
|
||||
}
|
||||
const Header: React.FC<HeaderProps> = ({ title, showButton = true, onClick }) => (
|
||||
const Header: React.FC<HeaderProps> = ({
|
||||
title,
|
||||
showButton = true,
|
||||
onClick
|
||||
}) => (
|
||||
<DataNavigation
|
||||
Header={
|
||||
<div className="flex items-center text-[#4ab01a] gap-1">
|
||||
@@ -97,36 +101,28 @@ const Main: React.FC<MainProps> = ({ data, loading, truncate = true }) => (
|
||||
</div>
|
||||
)
|
||||
|
||||
|
||||
type Props = {
|
||||
className?: string
|
||||
}
|
||||
export const PlaygroundScene: React.FC<Props> = ({ className }) => {
|
||||
const { messages, iodLoading, currentMessageId, iodSearch } =
|
||||
useMessageOption()
|
||||
const { iodLoading } = useMessageOption()
|
||||
|
||||
const { setShowPlayground, setDetailHeader, setDetailMain } =
|
||||
useIodPlaygroundContext()
|
||||
const {
|
||||
setShowPlayground,
|
||||
setDetailHeader,
|
||||
setDetailMain,
|
||||
currentIodMessage
|
||||
} = useIodPlaygroundContext()
|
||||
|
||||
const data = useMemo<IodRegistryEntry[]>(() => {
|
||||
// 确保loading状态时数据大于3
|
||||
if (iodLoading) {
|
||||
return defaultData
|
||||
}
|
||||
|
||||
if (messages.length && iodSearch) {
|
||||
const currentMessage = messages?.find(
|
||||
(message) => message.id === currentMessageId
|
||||
)
|
||||
return currentMessage?.iodSources.scenario.data ?? []
|
||||
}
|
||||
|
||||
return defaultData
|
||||
}, [currentMessageId, messages, iodLoading])
|
||||
return currentIodMessage
|
||||
? currentIodMessage.scenario?.data ?? []
|
||||
: defaultData
|
||||
}, [currentIodMessage])
|
||||
|
||||
const title = useMemo(() => {
|
||||
return messages.length > 0 ? "推荐场景" : "热点场景"
|
||||
}, [messages])
|
||||
return currentIodMessage ? "推荐场景" : "热点场景"
|
||||
}, [currentIodMessage])
|
||||
|
||||
const showMore = () => {
|
||||
setShowPlayground(false)
|
||||
@@ -137,19 +133,17 @@ export const PlaygroundScene: React.FC<Props> = ({ className }) => {
|
||||
onClick={() => setShowPlayground(false)}
|
||||
/>
|
||||
)
|
||||
setDetailMain(<Main loading={iodLoading} data={data} truncate={false} />)
|
||||
setDetailMain(<Main loading={iodLoading && Boolean(currentIodMessage)} data={data} truncate={false} />)
|
||||
}
|
||||
|
||||
return (
|
||||
<Card
|
||||
className={`${className}`}
|
||||
hoverable>
|
||||
<Card className={`${className}`} hoverable>
|
||||
<div className="h-full flex flex-col gap-2 relative">
|
||||
{/* 数据导航 */}
|
||||
<Header title={title} onClick={showMore} />
|
||||
|
||||
{/* 数据列表 */}
|
||||
<Main loading={iodLoading} data={data.slice(0, 3)} />
|
||||
<Main loading={iodLoading && Boolean(currentIodMessage)} data={data.slice(0, 3)} />
|
||||
</div>
|
||||
</Card>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user