#@flowgram.ai/export-plugin
npm
npm install @flowgram.ai/export-plugin导出插件提供了将工作流导出为图片(PNG、JPEG、SVG)或数据文件(JSON、YAML)的功能。
#快速开始
- 安装
npm
yarn
pnpm
bun
deno
npm install @flowgram.ai/export-pluginyarn add @flowgram.ai/export-pluginpnpm add @flowgram.ai/export-pluginbun add @flowgram.ai/export-plugindeno add npm:@flowgram.ai/export-plugin- 注册插件
import { createDownloadPlugin } from '@flowgram.ai/export-plugin';
const editorProps = useMemo(() => ({
plugins: () => [createDownloadPlugin({})]
}), []);
return (
<FreeLayoutEditorProvider {...editorProps}>
<EditorRenderer />
</FreeLayoutEditorProvider>
)#配置项
createDownloadPlugin({
// 自定义导出文件名
// 默认: `flowgram-${nanoid(5)}.${format}`
getFilename: (format) => `my-workflow.${format}`,
// 导出图片时添加的水印 SVG
// 水印会显示在图片右下角
watermarkSVG: '<svg>...</svg>',
})#支持的导出格式
import { FlowDownloadFormat } from '@flowgram.ai/export-plugin'
// 图片格式
FlowDownloadFormat.PNG // PNG 图片
FlowDownloadFormat.JPEG // JPEG 图片
FlowDownloadFormat.SVG // SVG 矢量图
// 数据格式
FlowDownloadFormat.JSON // JSON 数据
FlowDownloadFormat.YAML // YAML 数据#使用 FlowDownloadService
在组件中使用 FlowDownloadService 来触发导出:
import { useService } from '@flowgram.ai/free-layout-editor';
import { FlowDownloadService, FlowDownloadFormat } from '@flowgram.ai/export-plugin';
export const ExportButton = () => {
const downloadService = useService(FlowDownloadService);
const handleExportPNG = async () => {
await downloadService.download({ format: FlowDownloadFormat.PNG });
};
const handleExportJSON = async () => {
await downloadService.download({ format: FlowDownloadFormat.JSON });
};
return (
<div>
<button onClick={handleExportPNG} disabled={downloadService.downloading}>
导出 PNG
</button>
<button onClick={handleExportJSON} disabled={downloadService.downloading}>
导出 JSON
</button>
</div>
);
};#监听下载状态
import { useEffect, useState } from 'react';
import { useService } from '@flowgram.ai/free-layout-editor';
import { FlowDownloadService } from '@flowgram.ai/export-plugin';
export const DownloadStatus = () => {
const downloadService = useService(FlowDownloadService);
const [downloading, setDownloading] = useState(false);
useEffect(() => {
const disposer = downloadService.onDownloadingChange((value) => {
setDownloading(value);
});
return () => disposer.dispose();
}, [downloadService]);
return downloading ? <span>正在导出...</span> : null;
};#类型定义
import { FlowDownloadFormat } from '@flowgram.ai/export-plugin';
interface DownloadServiceOptions {
// 自定义导出文件名的 函数
getFilename?: (format: FlowDownloadFormat) => string;
// 导出图片时的水印 SVG 字符串
watermarkSVG?: string;
}
interface WorkflowDownloadParams {
// 导出格式
format: FlowDownloadFormat;
}
enum FlowDownloadFormat {
JSON = 'json',
YAML = 'yaml',
PNG = 'png',
JPEG = 'jpeg',
SVG = 'svg',
}