49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
import {
|
|
SessionState,
|
|
VariableWithValue,
|
|
ChoiceInputBlock,
|
|
} from '@typebot.io/schemas'
|
|
import { isDefined } from '@typebot.io/lib'
|
|
import { filterChoiceItems } from './filterChoiceItems'
|
|
import { deepParseVariables } from '@typebot.io/variables/deepParseVariables'
|
|
import { transformVariablesToList } from '@typebot.io/variables/transformVariablesToList'
|
|
import { updateVariablesInSession } from '@typebot.io/variables/updateVariablesInSession'
|
|
|
|
export const injectVariableValuesInButtonsInputBlock =
|
|
(state: SessionState) =>
|
|
(block: ChoiceInputBlock): ChoiceInputBlock => {
|
|
const { variables } = state.typebotsQueue[0].typebot
|
|
if (block.options?.dynamicVariableId) {
|
|
const variable = variables.find(
|
|
(variable) =>
|
|
variable.id === block.options?.dynamicVariableId &&
|
|
isDefined(variable.value)
|
|
) as VariableWithValue | undefined
|
|
if (!variable) return block
|
|
const value = getVariableValue(state)(variable)
|
|
return {
|
|
...block,
|
|
items: value.filter(isDefined).map((item, idx) => ({
|
|
id: idx.toString(),
|
|
blockId: block.id,
|
|
content: item,
|
|
})),
|
|
}
|
|
}
|
|
return deepParseVariables(variables)(filterChoiceItems(variables)(block))
|
|
}
|
|
|
|
const getVariableValue =
|
|
(state: SessionState) =>
|
|
(variable: VariableWithValue): (string | null)[] => {
|
|
if (!Array.isArray(variable.value)) {
|
|
const { variables } = state.typebotsQueue[0].typebot
|
|
const [transformedVariable] = transformVariablesToList(variables)([
|
|
variable.id,
|
|
])
|
|
updateVariablesInSession(state)([transformedVariable])
|
|
return transformedVariable.value as string[]
|
|
}
|
|
return variable.value
|
|
}
|