import { useEffect, useMemo, useState } from 'react'; import { App as AntApp } from 'antd'; import type { Workflow } from '../../api'; import { WorkflowAPI } from '../../api'; import { SAMPLE_GRAPH } from './constants'; interface WorkflowsPageLogicOptions { enabled?: boolean; } export function useWorkflowsPageLogic(options: WorkflowsPageLogicOptions = {}) { const enabled = options.enabled ?? true; const { message } = AntApp.useApp(); const [list, setList] = useState([]); const [loading, setLoading] = useState(false); const [editorOpen, setEditorOpen] = useState(false); const [editing, setEditing] = useState(null); const [runsOpen, setRunsOpen] = useState(false); const [runsFor, setRunsFor] = useState(null); const load = async () => { if (!enabled) return; setLoading(true); try { const data = await WorkflowAPI.list(); setList(data); } catch (e: any) { message.error('加载失败:' + (e?.message ?? e)); } finally { setLoading(false); } }; useEffect(() => { if (enabled) load(); }, [enabled]); const onCreate = () => { setEditing({ id: '', name: '新工作流', description: '', graph: SAMPLE_GRAPH, scheduleCron: '', scheduleEnabled: false, enabled: true, lastRunAt: 0, runCount: 0, createdAt: 0, updatedAt: 0 }); setEditorOpen(true); }; const onEdit = (workflow: Workflow) => { setEditing(workflow); setEditorOpen(true); }; const onDelete = async (workflow: Workflow) => { await WorkflowAPI.remove(workflow.id); message.success('已删除'); load(); }; const openRuns = (workflow: Workflow) => { setRunsFor(workflow); setRunsOpen(true); }; const handleSaved = () => { setEditorOpen(false); load(); }; const stats = useMemo( () => ({ total: list.length, enabled: list.filter((item) => item.enabled).length, scheduled: list.filter((item) => item.scheduleEnabled && item.scheduleCron).length }), [list] ); return { list, loading, editorOpen, editing, runsOpen, runsFor, stats, setEditorOpen, setRunsOpen, onCreate, onEdit, onDelete, openRuns, handleSaved }; } export type WorkflowsPageLogic = ReturnType;