import { ResearchList, ResearchDetail } from "./ResearchList"; import { ResearchSelect } from "./ResearchSelect"; import { useEffect, useState } from "react"; import { Banner, Button, Checkbox, Input, TextArea, } from "@douyinfe/semi-ui-19"; import { api, patch, post, formatTime } from "../api"; import "./workspace.css"; type Operator = { name: string; category: string; description: string; definition: string; example: string; parameters: unknown; scope: string[]; local: { note: string; favorite: boolean; version: number }; }; type Results = { items: Operator[]; total: number; categories: string[]; fetched_at: string | null; }; export function OperatorsPage({ active }: { active: boolean }) { const [query, setQuery] = useState(""); const [category, setCategory] = useState(""); const [favorite, setFavorite] = useState(false); const [offset, setOffset] = useState(0); const [result, setResult] = useState({ items: [], total: 0, categories: [], fetched_at: null, }); const [selected, setSelected] = useState(null); const [error, setError] = useState(""); const [busy, setBusy] = useState(false); async function load() { setResult( await api( `/catalog/operators?${new URLSearchParams({ q: query, category, favorite: String(favorite), limit: "25", offset: String(offset) })}`, ), ); } async function task(operation: () => Promise) { setBusy(true); setError(""); try { await operation(); } catch (error) { setError((error as Error).message); } finally { setBusy(false); } } useEffect(() => { if (active) void task(load); }, [active, query, category, favorite, offset]); return (
{error && !selected && } { setQuery(value); setOffset(0); }} /> ({ value, label: value })), ]} onChange={(value) => { setCategory(value as string); setOffset(0); }} /> { setFavorite(!!event.target.checked); setOffset(0); }} > 只看收藏
} actions={ <> 同步时间:{formatTime(result.fetched_at)} } pagination={
共 {result.total} 个
} > {result.items.map((item) => ( ))}
算子 分类 定义
{item.category} {item.definition}
{!result.items.length && (

暂无算子。连接平台并同步目录,或调整筛选条件。

)} setSelected(null)} > {error && } {selected && (

{selected.name}

{selected.description}

{selected.definition} {selected.example &&
{selected.example}
} {!!selected.parameters && (
{JSON.stringify(selected.parameters, null, 2)}
)}

适用:{selected.scope?.join("、") || "平台未提供"}