From 656d1e3cade64c7aaca448c9801dff6c400fd174 Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Mon, 12 Dec 2022 10:29:52 +0100 Subject: [PATCH] :bug: (typebotLink) Make sure to update all linked bot variable values --- .../src/features/dashboard/dashboard.spec.ts | 7 +++++-- .../src/providers/AnswersProvider.tsx | 4 +++- .../src/providers/TypebotProvider.tsx | 21 +++++++++++++++---- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/apps/builder/src/features/dashboard/dashboard.spec.ts b/apps/builder/src/features/dashboard/dashboard.spec.ts index eef2d7f0f..8b38d90da 100644 --- a/apps/builder/src/features/dashboard/dashboard.spec.ts +++ b/apps/builder/src/features/dashboard/dashboard.spec.ts @@ -11,8 +11,11 @@ test('folders navigation should work', async ({ page }) => { await createFolderButton.click() await page.click('text="New folder"') await page.fill('input[value="New folder"]', 'My folder #1') - await page.press('input[value="My folder #1"]', 'Enter'), - await page.click('li:has-text("My folder #1")') + await Promise.all([ + page.waitForResponse((resp) => resp.request().method() === 'PATCH'), + page.press('input[value="My folder #1"]', 'Enter'), + ]) + await page.click('li:has-text("My folder #1")') await expect(page.locator('h1:has-text("My folder #1")')).toBeVisible() await createFolderButton.click() await page.click('text="New folder"') diff --git a/packages/bot-engine/src/providers/AnswersProvider.tsx b/packages/bot-engine/src/providers/AnswersProvider.tsx index 6043922d5..57dd56a8e 100644 --- a/packages/bot-engine/src/providers/AnswersProvider.tsx +++ b/packages/bot-engine/src/providers/AnswersProvider.tsx @@ -54,7 +54,9 @@ export const AnswersProvider = ({ setResultValues((resultValues) => { const updatedVariables = [ ...resultValues.variables.filter((v) => - serializedNewVariables.every((variable) => variable.id !== v.id) + serializedNewVariables.every( + (variable) => variable.id !== v.id || variable.name !== v.name + ) ), ...serializedNewVariables, ].filter((variable) => isDefined(variable.value)) as VariableWithValue[] diff --git a/packages/bot-engine/src/providers/TypebotProvider.tsx b/packages/bot-engine/src/providers/TypebotProvider.tsx index 676b21dc8..36721ea50 100644 --- a/packages/bot-engine/src/providers/TypebotProvider.tsx +++ b/packages/bot-engine/src/providers/TypebotProvider.tsx @@ -3,13 +3,14 @@ import { safeStringify } from '@/features/variables' import { sendEventToParent } from '@/utils/chat' import { Log } from 'db' import { Edge, PublicTypebot, Typebot } from 'models' -import React, { +import { createContext, ReactNode, useContext, useEffect, useState, } from 'react' +import { isDefined } from 'utils' export type LinkedTypebot = Pick< PublicTypebot | Typebot, @@ -78,16 +79,28 @@ export const TypebotProvider = ({ sendEventToParent({ newVariableValue: { name: - typebot.variables.find((variable) => variable.id === variableId) + localTypebot.variables.find((variable) => variable.id === variableId) ?.name ?? '', value: formattedValue ?? '', }, }) + const variable = localTypebot.variables.find((v) => v.id === variableId) + const otherVariablesWithSameName = localTypebot.variables.filter( + (v) => v.name === variable?.name && v.id !== variableId + ) + const variablesToUpdate = [variable, ...otherVariablesWithSameName].filter( + isDefined + ) + setLocalTypebot((typebot) => ({ ...typebot, - variables: typebot.variables.map((v) => - v.id === variableId ? { ...v, value: formattedValue } : v + variables: typebot.variables.map((variable) => + variablesToUpdate.some( + (variableToUpdate) => variableToUpdate.id === variable.id + ) + ? { ...variable, value: formattedValue } + : variable ), })) }