✨ 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:
@ -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(),
|
||||
})
|
||||
)
|
||||
|
||||
|
@ -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(),
|
||||
})
|
||||
)
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user