2023-03-15 12:21:52 +01:00
|
|
|
import prisma from '@/lib/prisma'
|
|
|
|
|
import { isDefined } from '@typebot.io/lib'
|
|
|
|
|
import {
|
|
|
|
|
SessionState,
|
|
|
|
|
VariableWithUnknowValue,
|
|
|
|
|
VariableWithValue,
|
|
|
|
|
Variable,
|
|
|
|
|
} from '@typebot.io/schemas'
|
|
|
|
|
import { safeStringify } from './safeStringify'
|
|
|
|
|
|
|
|
|
|
export const updateVariables =
|
|
|
|
|
(state: SessionState) =>
|
|
|
|
|
async (newVariables: VariableWithUnknowValue[]): Promise<SessionState> => ({
|
|
|
|
|
...state,
|
|
|
|
|
typebot: {
|
|
|
|
|
...state.typebot,
|
|
|
|
|
variables: updateTypebotVariables(state)(newVariables),
|
|
|
|
|
},
|
|
|
|
|
result: {
|
|
|
|
|
...state.result,
|
|
|
|
|
variables: await updateResultVariables(state)(newVariables),
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const updateResultVariables =
|
|
|
|
|
({ result }: Pick<SessionState, 'result' | 'typebot'>) =>
|
|
|
|
|
async (
|
|
|
|
|
newVariables: VariableWithUnknowValue[]
|
|
|
|
|
): Promise<VariableWithValue[]> => {
|
|
|
|
|
const serializedNewVariables = newVariables.map((variable) => ({
|
|
|
|
|
...variable,
|
|
|
|
|
value: Array.isArray(variable.value)
|
2023-03-21 15:42:03 +01:00
|
|
|
? variable.value.map(safeStringify)
|
2023-03-15 12:21:52 +01:00
|
|
|
: safeStringify(variable.value),
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
const updatedVariables = [
|
|
|
|
|
...result.variables.filter((existingVariable) =>
|
|
|
|
|
serializedNewVariables.every(
|
|
|
|
|
(newVariable) => existingVariable.id !== newVariable.id
|
|
|
|
|
)
|
|
|
|
|
),
|
|
|
|
|
...serializedNewVariables,
|
|
|
|
|
].filter((variable) => isDefined(variable.value)) as VariableWithValue[]
|
|
|
|
|
|
|
|
|
|
if (result.id)
|
2023-07-16 18:52:30 +02:00
|
|
|
await prisma.result.updateMany({
|
2023-03-15 12:21:52 +01:00
|
|
|
where: {
|
|
|
|
|
id: result.id,
|
|
|
|
|
},
|
|
|
|
|
data: {
|
|
|
|
|
variables: updatedVariables,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return updatedVariables
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const updateTypebotVariables =
|
|
|
|
|
({ typebot }: Pick<SessionState, 'result' | 'typebot'>) =>
|
|
|
|
|
(newVariables: VariableWithUnknowValue[]): Variable[] => {
|
|
|
|
|
const serializedNewVariables = newVariables.map((variable) => ({
|
|
|
|
|
...variable,
|
|
|
|
|
value: Array.isArray(variable.value)
|
2023-03-21 15:42:03 +01:00
|
|
|
? variable.value.map(safeStringify)
|
2023-03-15 12:21:52 +01:00
|
|
|
: safeStringify(variable.value),
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
...typebot.variables.filter((existingVariable) =>
|
|
|
|
|
serializedNewVariables.every(
|
|
|
|
|
(newVariable) => existingVariable.id !== newVariable.id
|
|
|
|
|
)
|
|
|
|
|
),
|
|
|
|
|
...serializedNewVariables,
|
|
|
|
|
]
|
|
|
|
|
}
|