🚀 Init preview and typebot cotext in editor
This commit is contained in:
38
packages/bot-engine/src/contexts/HostAvatarsContext.tsx
Normal file
38
packages/bot-engine/src/contexts/HostAvatarsContext.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import React, { createContext, ReactNode, useContext, useState } from 'react'
|
||||
|
||||
// This context just keeps track of the top offset of host avatar
|
||||
const hostAvatarsContext = createContext<{
|
||||
lastBubblesTopOffset: number[]
|
||||
addNewAvatarOffset: () => void
|
||||
updateLastAvatarOffset: (newOffset: number) => void
|
||||
//@ts-ignore
|
||||
}>({})
|
||||
|
||||
export const HostAvatarsContext = ({ children }: { children: ReactNode }) => {
|
||||
const [lastBubblesTopOffset, setLastBubblesTopOffset] = useState<number[]>([
|
||||
-1,
|
||||
])
|
||||
|
||||
const updateLastAvatarOffset = (newOffset: number) => {
|
||||
const offsets = [...lastBubblesTopOffset]
|
||||
offsets[offsets.length - 1] = newOffset
|
||||
setLastBubblesTopOffset(offsets)
|
||||
}
|
||||
|
||||
const addNewAvatarOffset = () =>
|
||||
setLastBubblesTopOffset([...lastBubblesTopOffset, -1])
|
||||
|
||||
return (
|
||||
<hostAvatarsContext.Provider
|
||||
value={{
|
||||
lastBubblesTopOffset,
|
||||
updateLastAvatarOffset,
|
||||
addNewAvatarOffset,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</hostAvatarsContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export const useHostAvatars = () => useContext(hostAvatarsContext)
|
50
packages/bot-engine/src/contexts/ResultsContext.tsx
Normal file
50
packages/bot-engine/src/contexts/ResultsContext.tsx
Normal file
@ -0,0 +1,50 @@
|
||||
import { Answer, Result } from '../models'
|
||||
import React, {
|
||||
createContext,
|
||||
Dispatch,
|
||||
ReactNode,
|
||||
SetStateAction,
|
||||
useContext,
|
||||
useState,
|
||||
} from 'react'
|
||||
|
||||
const resultContext = createContext<{
|
||||
result: Result
|
||||
setResult: Dispatch<SetStateAction<Result>>
|
||||
addAnswer: (answer: Answer) => void
|
||||
//@ts-ignore
|
||||
}>({})
|
||||
|
||||
export const ResultContext = ({
|
||||
children,
|
||||
typebotId,
|
||||
}: {
|
||||
children: ReactNode
|
||||
typebotId: string
|
||||
}) => {
|
||||
const [result, setResult] = useState<Result>({
|
||||
id: 'tmp',
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
answers: [],
|
||||
typebotId,
|
||||
isCompleted: false,
|
||||
})
|
||||
|
||||
const addAnswer = (answer: Answer) =>
|
||||
setResult({ ...result, answers: [...result.answers, answer] })
|
||||
|
||||
return (
|
||||
<resultContext.Provider
|
||||
value={{
|
||||
result,
|
||||
setResult,
|
||||
addAnswer,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</resultContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export const useResult = () => useContext(resultContext)
|
27
packages/bot-engine/src/contexts/TypebotContext.tsx
Normal file
27
packages/bot-engine/src/contexts/TypebotContext.tsx
Normal file
@ -0,0 +1,27 @@
|
||||
import React, { createContext, ReactNode, useContext } from 'react'
|
||||
import { PublicTypebot } from '../models/publicTypebot'
|
||||
|
||||
const typebotContext = createContext<{
|
||||
typebot: PublicTypebot
|
||||
//@ts-ignore
|
||||
}>({})
|
||||
|
||||
export const TypebotContext = ({
|
||||
children,
|
||||
typebot,
|
||||
}: {
|
||||
children: ReactNode
|
||||
typebot: PublicTypebot
|
||||
}) => {
|
||||
return (
|
||||
<typebotContext.Provider
|
||||
value={{
|
||||
typebot,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</typebotContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export const useTypebot = () => useContext(typebotContext)
|
Reference in New Issue
Block a user