import React, { useState, useRef, useEffect, type ReactNode } from 'react'; import { Flex, Space, Tooltip, Row, Col, } from 'antd'; import { useTranslation } from 'react-i18next'; import dayjs, { type Dayjs } from 'dayjs' import type { ToolItem, TimeToolModalRef, JsonToolModalRef, InnerToolModalRef } from './types'; import BodyWrapper from '@/components/Empty/BodyWrapper' import RbCard from '@/components/RbCard' import TimeToolModal from './components/TimeToolModal' import JsonToolModal from './components/JsonToolModal' import InnerToolModal from './components/InnerToolModal' import { getTools } from '@/api/tools' import { InnerConfigData } from './constant' import OverflowTags from '@/components/OverflowTags' import Tag from '@/components/Tag' const Inner: React.FC<{ getStatusTag: (status: string) => ReactNode; keyword?: string | undefined }> = ({ getStatusTag, keyword }) => { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [curTime, setCurTime] = useState(dayjs()) const timeToolModalRef = useRef(null) const jsonToolModalRef = useRef(null) const innerToolModalRef = useRef(null) useEffect(() => { getData() const timer = setInterval(() => { setCurTime(dayjs()) }, 1000) return () => { clearInterval(timer) } }, [keyword]) const getData = () => { setLoading(true) getTools({ tool_type: 'builtin', name: keyword }) .then((res) => { setData(res as ToolItem[]) }) .finally(() => { setLoading(false) }) } // 打开添加服务弹窗 const handleEdit = (data: ToolItem) => { switch (data.config_data.tool_class) { case 'DateTimeTool': timeToolModalRef.current?.handleOpen(data); break case 'JsonTool': jsonToolModalRef.current?.handleOpen(data); break default: innerToolModalRef.current?.handleOpen(data); break; } } return ( <> {data.map((item) => (
{item.name}
{getStatusTag(item.status)}
handleEdit(item)} /> } isNeedTooltip={false} >
{t(`tool.${item.config_data.tool_class}_features`)}
{t(`tool.${type}`)})} numTag={(num?: number) => {`+${num}`}} />
{item.config_data.tool_class === 'DateTimeTool' ? <>
{t('tool.currentTime')}
{curTime.format('YYYY-MM-DD HH:mm:ss')}
{t('tool.timestamp')}
{curTime.unix()} : item.config_data.tool_class === 'JsonTool' ?
{t('tool.jsonEg')}
{InnerConfigData[item.config_data.tool_class].eg} :
{t('tool.configStatus')}
{t(`tool.${item.status}_desc`)} }
))} ); }; export default Inner;