2022-01-08 07:40:55 +01:00
|
|
|
import { Flex, Text } from '@chakra-ui/react'
|
2022-01-14 07:49:24 +01:00
|
|
|
import { useTypebot } from 'contexts/TypebotContext'
|
|
|
|
import {
|
|
|
|
Step,
|
|
|
|
StartStep,
|
|
|
|
BubbleStepType,
|
|
|
|
InputStepType,
|
|
|
|
LogicStepType,
|
|
|
|
SetVariableStep,
|
|
|
|
} from 'models'
|
2022-01-12 09:10:59 +01:00
|
|
|
import { ChoiceItemsList } from './ChoiceInputStepNode/ChoiceItemsList'
|
2022-01-08 07:40:55 +01:00
|
|
|
|
2022-01-12 09:10:59 +01:00
|
|
|
type Props = {
|
|
|
|
step: Step | StartStep
|
|
|
|
isConnectable?: boolean
|
|
|
|
}
|
|
|
|
export const StepNodeContent = ({ step }: Props) => {
|
|
|
|
switch (step.type) {
|
2022-01-08 07:40:55 +01:00
|
|
|
case BubbleStepType.TEXT: {
|
|
|
|
return (
|
|
|
|
<Flex
|
|
|
|
flexDir={'column'}
|
2022-01-12 09:10:59 +01:00
|
|
|
opacity={step.content.html === '' ? '0.5' : '1'}
|
2022-01-08 07:40:55 +01:00
|
|
|
className="slate-html-container"
|
|
|
|
dangerouslySetInnerHTML={{
|
|
|
|
__html:
|
2022-01-12 09:10:59 +01:00
|
|
|
step.content.html === ''
|
2022-01-08 07:40:55 +01:00
|
|
|
? `<p>Click to edit...</p>`
|
2022-01-12 09:10:59 +01:00
|
|
|
: step.content.html,
|
2022-01-08 07:40:55 +01:00
|
|
|
}}
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
case InputStepType.TEXT: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.placeholder ?? 'Type your answer...'}
|
2022-01-08 07:40:55 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
case InputStepType.NUMBER: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.placeholder ?? 'Type your answer...'}
|
2022-01-08 07:40:55 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
2022-01-08 08:20:54 +01:00
|
|
|
case InputStepType.EMAIL: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.placeholder ?? 'Type your email...'}
|
2022-01-08 08:20:54 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
2022-01-09 07:36:29 +01:00
|
|
|
case InputStepType.URL: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.placeholder ?? 'Type your URL...'}
|
2022-01-09 07:36:29 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
2022-01-10 08:05:03 +01:00
|
|
|
case InputStepType.DATE: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.from ?? 'Pick a date...'}
|
2022-01-10 08:05:03 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
2022-01-10 10:43:27 +01:00
|
|
|
case InputStepType.PHONE: {
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
2022-01-12 09:10:59 +01:00
|
|
|
{step.options?.labels?.placeholder ?? 'Your phone number...'}
|
2022-01-10 10:43:27 +01:00
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|
2022-01-12 09:10:59 +01:00
|
|
|
case InputStepType.CHOICE: {
|
|
|
|
return <ChoiceItemsList step={step} />
|
|
|
|
}
|
2022-01-14 07:49:24 +01:00
|
|
|
case LogicStepType.SET_VARIABLE: {
|
|
|
|
return <SetVariableNodeContent step={step} />
|
|
|
|
}
|
2022-01-08 07:40:55 +01:00
|
|
|
case 'start': {
|
2022-01-12 09:10:59 +01:00
|
|
|
return <Text>{step.label}</Text>
|
2022-01-08 07:40:55 +01:00
|
|
|
}
|
|
|
|
default: {
|
|
|
|
return <Text>No input</Text>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-01-14 07:49:24 +01:00
|
|
|
|
|
|
|
const SetVariableNodeContent = ({ step }: { step: SetVariableStep }) => {
|
|
|
|
const { typebot } = useTypebot()
|
|
|
|
const variableName =
|
|
|
|
typebot?.variables.byId[step.options?.variableId ?? '']?.name ?? ''
|
|
|
|
const expression = step.options?.expressionToEvaluate ?? ''
|
|
|
|
return (
|
|
|
|
<Text color={'gray.500'}>
|
|
|
|
{variableName === '' && expression === ''
|
|
|
|
? 'Click to edit...'
|
|
|
|
: `${variableName} = ${expression}`}
|
|
|
|
</Text>
|
|
|
|
)
|
|
|
|
}
|