@botonic/plugin-flow-builder
Version:
Use Flow Builder to show your contents
41 lines (33 loc) • 1.3 kB
text/typescript
import { ActionRequest } from '@botonic/react'
import { FlowBuilderApi } from '../api'
import { FlowContent } from '../content-fields'
import { EventAction, trackEvent } from '../tracking'
import { FlowBuilderContext } from './index'
export async function getContentsByFallback({
cmsApi,
flowBuilderPlugin,
request,
}: FlowBuilderContext): Promise<FlowContent[]> {
const fallbackNode = await getFallbackNode(cmsApi, request)
const fallbackContents =
await flowBuilderPlugin.getContentsByNode(fallbackNode)
return fallbackContents
}
async function getFallbackNode(cmsApi: FlowBuilderApi, request: ActionRequest) {
if (request.session.user.extra_data?.isFirstFallbackOption === undefined) {
request.session.user.extra_data = {
...request.session.user.extra_data,
isFirstFallbackOption: true,
}
}
const isFirstFallbackOption =
!!request.session.user.extra_data.isFirstFallbackOption
const fallbackNode = cmsApi.getFallbackNode(isFirstFallbackOption)
request.session.user.extra_data.isFirstFallbackOption = !isFirstFallbackOption
await trackEvent(request, EventAction.Fallback, {
userInput: request.input.data,
fallbackOut: isFirstFallbackOption ? 1 : 2,
fallbackMessageId: request.input.message_id,
})
return fallbackNode
}