import { useCallback } from 'react' import { useFlowStore } from '../../store/flowStore' import { exportFlowToYaml, importFlowFromYaml, type FlowMetadata } from '../../utils/yamlParser' import { message } from 'antd' export const useFileHandler = () => { const { nodes, edges, setNodes, setEdges } = useFlowStore() const handleExport = useCallback((metadata: Omit) => { try { const yamlStr = exportFlowToYaml(nodes, edges, { ...metadata, version: '1.0' }) const blob = new Blob([yamlStr], { type: 'text/yaml' }) const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `${metadata.flowName.replace(/\s+/g, '_')}.yaml` a.click() URL.revokeObjectURL(url) message.success('导出成功') } catch (error) { console.error('Export failed:', error) message.error('导出失败') } }, [nodes, edges]) const handleImport = useCallback((file: File) => { const reader = new FileReader() reader.onload = (e) => { try { const content = e.target?.result as string const { nodes: newNodes, edges: newEdges, metadata } = importFlowFromYaml(content) setNodes(newNodes) setEdges(newEdges) message.success(`流程 "${metadata.flowName}" 加载成功`) } catch (error) { console.error('Import failed:', error) message.error('解析YAML文件失败: 格式不正确') } } reader.readAsText(file) return false // Prevent default upload behavior }, [setNodes, setEdges]) return { handleExport, handleImport } }