From f49a3013d418d06ebda7d6901cc91a06e16efc55 Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Wed, 28 Dec 2022 16:07:07 +0100 Subject: [PATCH] :bug: (bot) Update result variables when overwritten by input --- .../ChatGroup/ChatBlock/InputChatBlock.tsx | 2 +- .../src/providers/AnswersProvider.tsx | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx b/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx index 292ba6ee1fe..d0d555d6998 100644 --- a/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx +++ b/packages/bot-engine/src/components/ChatGroup/ChatBlock/InputChatBlock.tsx @@ -52,7 +52,7 @@ export const InputChatBlock = ({ setAnswer(label ?? value) const isRetry = !isInputValid(value, block.type) if (!isRetry && addAnswer) - await addAnswer({ + await addAnswer(typebot.variables)({ blockId: block.id, groupId: block.groupId, content: value, diff --git a/packages/bot-engine/src/providers/AnswersProvider.tsx b/packages/bot-engine/src/providers/AnswersProvider.tsx index 57ff8415280..d318cbd6472 100644 --- a/packages/bot-engine/src/providers/AnswersProvider.tsx +++ b/packages/bot-engine/src/providers/AnswersProvider.tsx @@ -2,6 +2,7 @@ import { safeStringify } from '@/features/variables' import { AnswerInput, ResultValues, + Variable, VariableWithUnknowValue, VariableWithValue, } from 'models' @@ -12,6 +13,8 @@ const answersContext = createContext<{ resultId?: string resultValues: ResultValues addAnswer: ( + existingVariables: Variable[] + ) => ( answer: AnswerInput & { uploadedFiles: boolean } ) => Promise | undefined updateVariables: (variables: VariableWithUnknowValue[]) => void @@ -38,13 +41,26 @@ export const AnswersProvider = ({ createdAt: new Date(), }) - const addAnswer = (answer: AnswerInput & { uploadedFiles: boolean }) => { - setResultValues((resultValues) => ({ - ...resultValues, - answers: [...resultValues.answers, answer], - })) - return onNewAnswer && onNewAnswer(answer) - } + const addAnswer = + (existingVariables: Variable[]) => + (answer: AnswerInput & { uploadedFiles: boolean }) => { + if (answer.variableId) + updateVariables([ + { + id: answer.variableId, + value: answer.content, + name: + existingVariables.find( + (existingVariable) => existingVariable.id === answer.variableId + )?.name ?? '', + }, + ]) + setResultValues((resultValues) => ({ + ...resultValues, + answers: [...resultValues.answers, answer], + })) + return onNewAnswer && onNewAnswer(answer) + } const updateVariables = (newVariables: VariableWithUnknowValue[]) => { const serializedNewVariables = newVariables.map((variable) => ({