2023-03-15 12:21:52 +01:00
|
|
|
import { isDefined } from '@typebot.io/lib'
|
|
|
|
|
import {
|
|
|
|
|
SessionState,
|
|
|
|
|
VariableWithUnknowValue,
|
|
|
|
|
VariableWithValue,
|
|
|
|
|
Variable,
|
|
|
|
|
} from '@typebot.io/schemas'
|
2023-08-18 15:57:52 +02:00
|
|
|
import { safeStringify } from '@typebot.io/lib/safeStringify'
|
2023-03-15 12:21:52 +01:00
|
|
|
|
|
|
|
|
export const updateVariables =
|
|
|
|
|
(state: SessionState) =>
|
2023-07-18 14:31:20 +02:00
|
|
|
(newVariables: VariableWithUnknowValue[]): SessionState => ({
|
2023-03-15 12:21:52 +01:00
|
|
|
...state,
|
|
|
|
|
typebot: {
|
|
|
|
|
...state.typebot,
|
|
|
|
|
variables: updateTypebotVariables(state)(newVariables),
|
|
|
|
|
},
|
|
|
|
|
result: {
|
|
|
|
|
...state.result,
|
2023-07-18 14:31:20 +02:00
|
|
|
variables: updateResultVariables(state)(newVariables),
|
2023-03-15 12:21:52 +01:00
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const updateResultVariables =
|
|
|
|
|
({ result }: Pick<SessionState, 'result' | 'typebot'>) =>
|
2023-07-18 14:31:20 +02:00
|
|
|
(newVariables: VariableWithUnknowValue[]): VariableWithValue[] => {
|
2023-03-15 12:21:52 +01:00
|
|
|
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[]
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
]
|
|
|
|
|
}
|