2
0

🚀 Init preview and typebot cotext in editor

This commit is contained in:
Baptiste Arnaud
2021-12-22 14:59:07 +01:00
parent a54e42f255
commit b7cdc0d14a
87 changed files with 4431 additions and 735 deletions

View 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)

View 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)

View 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)