2
0
Files
bot/packages/bot-engine/blocks/inputs/pictureChoice/injectVariableValuesInPictureChoiceBlock.ts
Baptiste Arnaud 5e019bbb22 Introducing The Forge (#1072)
The Forge allows anyone to easily create their own Typebot Block.

Closes #380
2023-12-13 10:22:02 +01:00

68 lines
2.4 KiB
TypeScript

import {
VariableWithValue,
PictureChoiceBlock,
Variable,
} from '@typebot.io/schemas'
import { isDefined } from '@typebot.io/lib'
import { filterPictureChoiceItems } from './filterPictureChoiceItems'
import { deepParseVariables } from '@typebot.io/variables/deepParseVariables'
export const injectVariableValuesInPictureChoiceBlock =
(variables: Variable[]) =>
(block: PictureChoiceBlock): PictureChoiceBlock => {
if (
block.options?.dynamicItems?.isEnabled &&
block.options.dynamicItems.pictureSrcsVariableId
) {
const pictureSrcsVariable = variables.find(
(variable) =>
variable.id === block.options?.dynamicItems?.pictureSrcsVariableId &&
isDefined(variable.value)
) as VariableWithValue | undefined
if (!pictureSrcsVariable) return block
const titlesVariable = block.options.dynamicItems.titlesVariableId
? (variables.find(
(variable) =>
variable.id === block.options?.dynamicItems?.titlesVariableId &&
isDefined(variable.value)
) as VariableWithValue | undefined)
: undefined
const titlesVariableValues =
typeof titlesVariable?.value === 'string'
? [titlesVariable.value]
: titlesVariable?.value
const descriptionsVariable = block.options.dynamicItems
.descriptionsVariableId
? (variables.find(
(variable) =>
variable.id ===
block.options?.dynamicItems?.descriptionsVariableId &&
isDefined(variable.value)
) as VariableWithValue | undefined)
: undefined
const descriptionsVariableValues =
typeof descriptionsVariable?.value === 'string'
? [descriptionsVariable.value]
: descriptionsVariable?.value
const variableValues =
typeof pictureSrcsVariable.value === 'string'
? [pictureSrcsVariable.value]
: pictureSrcsVariable.value
return {
...block,
items: variableValues.filter(isDefined).map((pictureSrc, idx) => ({
id: idx.toString(),
blockId: block.id,
pictureSrc,
title: titlesVariableValues?.[idx] ?? '',
description: descriptionsVariableValues?.[idx] ?? '',
})),
}
}
return deepParseVariables(variables)(
filterPictureChoiceItems(variables)(block)
)
}