diff --git a/apps/builder/components/shared/Graph/Nodes/BlockNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx b/apps/builder/components/shared/Graph/Nodes/BlockNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx index b5e62f52cbc..48574792cf1 100644 --- a/apps/builder/components/shared/Graph/Nodes/BlockNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx +++ b/apps/builder/components/shared/Graph/Nodes/BlockNode/SettingsPopoverContent/bodies/SendEmailSettings/SendEmailSettings.tsx @@ -5,12 +5,14 @@ import { Flex, HStack, Switch, + FormLabel, } from '@chakra-ui/react' import { CodeEditor } from 'components/shared/CodeEditor' import { CredentialsDropdown } from 'components/shared/CredentialsDropdown' import { SwitchWithLabel } from 'components/shared/SwitchWithLabel' import { Input, Textarea } from 'components/shared/Textbox' -import { CredentialsType, SendEmailOptions } from 'models' +import { VariableSearchInput } from 'components/shared/VariableSearchInput' +import { CredentialsType, SendEmailOptions, Variable } from 'models' import React, { useState } from 'react' import { env } from 'utils' import { SmtpConfigModal } from './SmtpConfigModal' @@ -88,6 +90,14 @@ export const SendEmailSettings = ({ options, onOptionsChange }: Props) => { isBodyCode: options.isBodyCode ? !options.isBodyCode : true, }) + const handleChangeAttachmentVariable = ( + variable: Pick | undefined + ) => + onOptionsChange({ + ...options, + attachmentsVariableId: variable?.id, + }) + return ( @@ -179,6 +189,15 @@ export const SendEmailSettings = ({ options, onOptionsChange }: Props) => { )} )} + + + Attachments: + + + { isBodyCode, isCustomBody, resultValues, + fileUrls, } = ( typeof req.body === 'string' ? JSON.parse(req.body) : req.body - ) as SendEmailOptions & { resultValues: ResultValues } + ) as SendEmailOptions & { + resultValues: ResultValues + fileUrls?: string + } const { host, port, isTlsEnabled, username, password, from } = (await getEmailInfo(credentialsId)) ?? {} @@ -106,6 +110,7 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => { to: recipients, replyTo, subject, + attachments: fileUrls?.split(', ').map((url) => ({ path: url })), ...emailBody, } try { @@ -163,9 +168,9 @@ const getEmailBody = async ({ html: isBodyCode ? body : undefined, text: !isBodyCode ? body : undefined, } - const typebot = (await prisma.typebot.findUnique({ - where: { id: typebotId }, - })) as unknown as Typebot + const typebot = (await prisma.publicTypebot.findUnique({ + where: { typebotId }, + })) as unknown as PublicTypebot if (!typebot) return const linkedTypebots = await getLinkedTypebots(typebot) const answers = parseAnswers({ diff --git a/packages/bot-engine/src/components/ChatGroup/ChatBlock/inputs/FileUploadForm.tsx b/packages/bot-engine/src/components/ChatGroup/ChatBlock/inputs/FileUploadForm.tsx index 95c1690afbc..0fcd461e25d 100644 --- a/packages/bot-engine/src/components/ChatGroup/ChatBlock/inputs/FileUploadForm.tsx +++ b/packages/bot-engine/src/components/ChatGroup/ChatBlock/inputs/FileUploadForm.tsx @@ -61,7 +61,7 @@ export const FileUploadForm = ({ files: [ { file, - path: `public/results/${resultId}/${id}`, + path: `public/results/${resultId}/${id}/${file.name}`, }, ], }) diff --git a/packages/bot-engine/src/services/integration.ts b/packages/bot-engine/src/services/integration.ts index 7290c8e010b..d4db6495157 100644 --- a/packages/bot-engine/src/services/integration.ts +++ b/packages/bot-engine/src/services/integration.ts @@ -306,6 +306,7 @@ const sendEmail = async ( cc: (options.cc ?? []).map(parseVariables(variables)), bcc: (options.bcc ?? []).map(parseVariables(variables)), replyTo: replyTo !== '' ? replyTo : undefined, + fileUrls: variables.find(byId(options.attachmentsVariableId))?.value, isCustomBody: options.isCustomBody, isBodyCode: options.isBodyCode, resultValues, diff --git a/packages/models/src/typebot/blocks/integration/sendEmail.ts b/packages/models/src/typebot/blocks/integration/sendEmail.ts index d102a81ad83..6d5a5947ea8 100644 --- a/packages/models/src/typebot/blocks/integration/sendEmail.ts +++ b/packages/models/src/typebot/blocks/integration/sendEmail.ts @@ -11,6 +11,7 @@ export const sendEmailOptionsSchema = z.object({ replyTo: z.string().optional(), cc: z.array(z.string()).optional(), bcc: z.array(z.string()).optional(), + attachmentsVariableId: z.string().optional(), }) export const sendEmailBlockSchema = blockBaseSchema.and(