59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
import {
|
|
VariableWithValue,
|
|
ItemType,
|
|
PictureChoiceBlock,
|
|
Variable,
|
|
} from '@typebot.io/schemas'
|
|
import { isDefined } from '@typebot.io/lib'
|
|
import { filterPictureChoiceItems } from './filterPictureChoiceItems'
|
|
import { deepParseVariables } from '../../../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 || typeof pictureSrcsVariable.value === 'string')
|
|
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 descriptionsVariable = block.options.dynamicItems
|
|
.descriptionsVariableId
|
|
? (variables.find(
|
|
(variable) =>
|
|
variable.id ===
|
|
block.options.dynamicItems?.descriptionsVariableId &&
|
|
isDefined(variable.value)
|
|
) as VariableWithValue | undefined)
|
|
: undefined
|
|
return {
|
|
...block,
|
|
items: pictureSrcsVariable.value
|
|
.filter(isDefined)
|
|
.map((pictureSrc, idx) => ({
|
|
id: idx.toString(),
|
|
type: ItemType.PICTURE_CHOICE,
|
|
blockId: block.id,
|
|
pictureSrc,
|
|
title: titlesVariable?.value?.[idx] ?? '',
|
|
description: descriptionsVariable?.value?.[idx] ?? '',
|
|
})),
|
|
}
|
|
}
|
|
return deepParseVariables(variables)(
|
|
filterPictureChoiceItems(variables)(block)
|
|
)
|
|
}
|