2
0

♻️ Introduce typebot v6 with events (#1013)

Closes #885
This commit is contained in:
Baptiste Arnaud
2023-11-08 15:34:16 +01:00
committed by GitHub
parent 68e4fc71fb
commit 35300eaf34
634 changed files with 58971 additions and 31449 deletions

View File

@ -0,0 +1,25 @@
import { ConditionBlock } from './schema'
export enum LogicalOperator {
OR = 'OR',
AND = 'AND',
}
export enum ComparisonOperators {
EQUAL = 'Equal to',
NOT_EQUAL = 'Not equal',
CONTAINS = 'Contains',
NOT_CONTAINS = 'Does not contain',
GREATER = 'Greater than',
LESS = 'Less than',
IS_SET = 'Is set',
IS_EMPTY = 'Is empty',
STARTS_WITH = 'Starts with',
ENDS_WITH = 'Ends with',
MATCHES_REGEX = 'Matches regex',
NOT_MATCH_REGEX = 'Does not match regex',
}
export const defaultConditionItemContent = {
logicalOperator: LogicalOperator.AND,
} as const satisfies ConditionBlock['items'][number]['content']

View File

@ -0,0 +1 @@
export * from './schema'

View File

@ -0,0 +1,62 @@
import { z } from 'zod'
import { blockBaseSchema } from '../../shared'
import { LogicBlockType } from '../constants'
import { ComparisonOperators, LogicalOperator } from './constants'
import { itemBaseSchemas } from '../../../items/shared'
const comparisonSchema = z.object({
id: z.string(),
variableId: z.string().optional(),
comparisonOperator: z.nativeEnum(ComparisonOperators).optional(),
value: z.string().optional(),
})
export const conditionSchema = z.object({
logicalOperator: z.nativeEnum(LogicalOperator).optional(),
comparisons: z.array(comparisonSchema).optional(),
})
export const conditionItemSchemas = {
v5: itemBaseSchemas.v5.merge(
z.object({
content: conditionSchema.optional(),
})
),
v6: itemBaseSchemas.v6.merge(
z.object({
content: conditionSchema.optional(),
})
),
}
export const conditionItemSchema = z.union([
conditionItemSchemas.v5,
conditionItemSchemas.v6,
])
export const conditionBlockSchemas = {
v5: blockBaseSchema.merge(
z.object({
type: z.enum([LogicBlockType.CONDITION]),
items: z.array(conditionItemSchemas.v5),
options: z.undefined(),
})
),
v6: blockBaseSchema.merge(
z.object({
type: z.enum([LogicBlockType.CONDITION]),
items: z.array(conditionItemSchemas.v6),
options: z.undefined(),
})
),
}
export const conditionBlockSchema = z.union([
conditionBlockSchemas.v5,
conditionBlockSchemas.v6,
])
export type ConditionItem = z.infer<typeof conditionItemSchema>
export type Comparison = z.infer<typeof comparisonSchema>
export type ConditionBlock = z.infer<typeof conditionBlockSchema>
export type Condition = z.infer<typeof conditionSchema>