import { SessionState, VariableWithValue, ChoiceInputBlock, } from "indite-js/schemas"; import { isDefined } from "indite-js/lib"; import { filterChoiceItems } from "./filterChoiceItems"; import { deepParseVariables } from "indite-js/variables/deepParseVariables"; import { transformVariablesToList } from "indite-js/variables/transformVariablesToList"; import { updateVariablesInSession } from "indite-js/variables/updateVariablesInSession"; export const injectVariableValuesInButtonsInputBlock = (state: SessionState) => (block: ChoiceInputBlock): ChoiceInputBlock => { const { variables } = state.botsQueue[0].bot; 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 { ...deepParseVariables(variables)(block), items: value.filter(isDefined).map((item, idx) => ({ id: "choice" + 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.botsQueue[0].bot; const [transformedVariable] = transformVariablesToList(variables)([ variable.id, ]); return transformedVariable.value as string[]; } return variable.value; };