2
0

Add conditional choice items

Allows you to conditonnally display an item from the Buttons or the Picture choice input

Closes #546
This commit is contained in:
Baptiste Arnaud
2023-06-05 17:33:43 +02:00
parent acaa1c6223
commit ef0a2d9dc6
18 changed files with 404 additions and 157 deletions

View File

@ -4,6 +4,7 @@ import { itemBaseSchema } from '../../items/baseSchemas'
import { optionBaseSchema, blockBaseSchema } from '../baseSchemas'
import { defaultButtonLabel } from './constants'
import { InputBlockType } from './enums'
import { conditionSchema } from '../logic/condition'
export const choiceInputOptionsSchema = optionBaseSchema.merge(
z.object({
@ -26,6 +27,12 @@ export const buttonItemSchema = itemBaseSchema.merge(
z.object({
type: z.literal(ItemType.BUTTON),
content: z.string().optional(),
displayCondition: z
.object({
isEnabled: z.boolean().optional(),
condition: conditionSchema.optional(),
})
.optional(),
})
)

View File

@ -4,6 +4,7 @@ import { itemBaseSchema } from '../../items/baseSchemas'
import { optionBaseSchema, blockBaseSchema } from '../baseSchemas'
import { defaultButtonLabel } from './constants'
import { InputBlockType } from './enums'
import { conditionSchema } from '../logic/condition'
export const pictureChoiceOptionsSchema = optionBaseSchema.merge(
z.object({
@ -28,6 +29,12 @@ export const pictureChoiceItemSchema = itemBaseSchema.merge(
pictureSrc: z.string().optional(),
title: z.string().optional(),
description: z.string().optional(),
displayCondition: z
.object({
isEnabled: z.boolean().optional(),
condition: conditionSchema.optional(),
})
.optional(),
})
)

View File

@ -29,7 +29,7 @@ const comparisonSchema = z.object({
value: z.string().optional(),
})
const conditionContentSchema = z.object({
export const conditionSchema = z.object({
logicalOperator: z.nativeEnum(LogicalOperator),
comparisons: z.array(comparisonSchema),
})
@ -37,7 +37,7 @@ const conditionContentSchema = z.object({
export const conditionItemSchema = itemBaseSchema.merge(
z.object({
type: z.literal(ItemType.CONDITION),
content: conditionContentSchema,
content: conditionSchema,
})
)
@ -48,7 +48,7 @@ export const conditionBlockSchema = blockBaseSchema.merge(
})
)
export const defaultConditionContent: ConditionContent = {
export const defaultConditionContent: Condition = {
comparisons: [],
logicalOperator: LogicalOperator.AND,
}
@ -56,4 +56,4 @@ export const defaultConditionContent: ConditionContent = {
export type ConditionItem = z.infer<typeof conditionItemSchema>
export type Comparison = z.infer<typeof comparisonSchema>
export type ConditionBlock = z.infer<typeof conditionBlockSchema>
export type ConditionContent = z.infer<typeof conditionContentSchema>
export type Condition = z.infer<typeof conditionSchema>