Skip to main content
Glama

mcp-google-sheets

flows-utils.tsx2.38 kB
import cronstrue from 'cronstrue/i18n'; import { t } from 'i18next'; import JSZip from 'jszip'; import { TimerReset, TriangleAlert, Zap } from 'lucide-react'; import { downloadFile } from '@/lib/utils'; import { PopulatedFlow, FlowTriggerType } from '@activepieces/shared'; import { flowsApi } from './flows-api'; const downloadFlow = async (flowId: string) => { const template = await flowsApi.getTemplate(flowId, {}); downloadFile({ obj: JSON.stringify(template, null, 2), fileName: template.name, extension: 'json', }); }; const zipFlows = async (flows: PopulatedFlow[]) => { const zip = new JSZip(); for (const flow of flows) { const template = await flowsApi.getTemplate(flow.id, {}); zip.file( `${flow.version.displayName}_${flow.id}.json`, JSON.stringify(template, null, 2), ); } return zip; }; export const flowsUtils = { downloadFlow, zipFlows, flowStatusToolTipRenderer: (flow: PopulatedFlow) => { const trigger = flow.version.trigger; switch (trigger?.type) { case FlowTriggerType.PIECE: { const cronExpression = flow.triggerSource?.schedule?.cronExpression; return cronExpression ? `${t('Run')} ${cronstrue .toString(cronExpression, { locale: 'en' }) .toLocaleLowerCase()}` : t('Real time flow'); } case FlowTriggerType.EMPTY: console.error( t("Flow can't be published with empty trigger {name}", { name: flow.version.displayName, }), ); return t('Please contact support as your published flow has a problem'); } }, flowStatusIconRenderer: (flow: PopulatedFlow) => { const trigger = flow.version.trigger; switch (trigger?.type) { case FlowTriggerType.PIECE: { const cronExpression = flow.triggerSource?.schedule?.cronExpression; if (cronExpression) { return <TimerReset className="h-4 w-4 text-foreground" />; } else { return <Zap className="h-4 w-4 text-foreground fill-foreground" />; } } case FlowTriggerType.EMPTY: { console.error( t("Flow can't be published with empty trigger {name}", { name: flow.version.displayName, }), ); return <TriangleAlert className="h-4 w-4 text-destructive" />; } } }, };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server