import { useMutation } from '@tanstack/react-query'; import { t } from 'i18next'; import { Info } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { flowsApi } from '@/features/flows/lib/flows-api'; import { foldersApi } from '@/features/folders/lib/folders-api'; import { PieceIconList } from '@/features/pieces/components/piece-icon-list'; import { authenticationSession } from '@/lib/authentication-session'; import { FlowOperationType, PopulatedFlow, Template, UncategorizedFolderId, isNil, } from '@activepieces/shared'; import { templatesApi } from '../lib/templates-api'; type TemplateCardProps = { template: Template; onSelectTemplate: (template: Template) => void; folderId?: string; }; export const TemplateCard = ({ template, onSelectTemplate, folderId, }: TemplateCardProps) => { const navigate = useNavigate(); const { mutate: createFlow, isPending } = useMutation< PopulatedFlow[], Error, Template >({ mutationFn: async (template: Template) => { const folder = !isNil(folderId) && folderId !== UncategorizedFolderId ? await foldersApi.get(folderId) : undefined; const flowImportPromises = (template.flows || []).map( async (templateFlow) => { const newFlow = await flowsApi.create({ displayName: templateFlow.displayName, projectId: authenticationSession.getProjectId()!, folderName: folder?.displayName, }); return await flowsApi.update(newFlow.id, { type: FlowOperationType.IMPORT_FLOW, request: { displayName: templateFlow.displayName, trigger: templateFlow.trigger, schemaVersion: templateFlow.schemaVersion, }, }); }, ); return Promise.all(flowImportPromises); }, onSuccess: (flows) => { templatesApi.incrementUsageCount(template.id); navigate(`/flows/${flows[0].id}`); }, }); return (
{template.flows && template.flows.length > 0 && template.flows[0].trigger ? ( ) : (
)}
{template.name}
{t('Learn more')}
); };