12
packages/schemas/features/blocks/inputs/rating/constants.ts
Normal file
12
packages/schemas/features/blocks/inputs/rating/constants.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { defaultButtonLabel } from '../constants'
|
||||
import { RatingInputBlock } from '../rating'
|
||||
|
||||
export const defaultRatingInputOptions = {
|
||||
buttonType: 'Numbers',
|
||||
length: 10,
|
||||
labels: {
|
||||
button: defaultButtonLabel,
|
||||
},
|
||||
customIcon: { isEnabled: false },
|
||||
isOneClickSubmitEnabled: false,
|
||||
} as const satisfies RatingInputBlock['options']
|
1
packages/schemas/features/blocks/inputs/rating/index.ts
Normal file
1
packages/schemas/features/blocks/inputs/rating/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './schema'
|
33
packages/schemas/features/blocks/inputs/rating/schema.ts
Normal file
33
packages/schemas/features/blocks/inputs/rating/schema.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { z } from 'zod'
|
||||
import { optionBaseSchema, blockBaseSchema } from '../../shared'
|
||||
import { InputBlockType } from '../constants'
|
||||
|
||||
export const ratingInputOptionsSchema = optionBaseSchema.merge(
|
||||
z.object({
|
||||
buttonType: z.literal('Icons').or(z.literal('Numbers')).optional(),
|
||||
length: z.number().optional(),
|
||||
labels: z
|
||||
.object({
|
||||
left: z.string().optional(),
|
||||
right: z.string().optional(),
|
||||
button: z.string().optional(),
|
||||
})
|
||||
.optional(),
|
||||
customIcon: z
|
||||
.object({
|
||||
isEnabled: z.boolean().optional(),
|
||||
svg: z.string().optional(),
|
||||
})
|
||||
.optional(),
|
||||
isOneClickSubmitEnabled: z.boolean().optional(),
|
||||
})
|
||||
)
|
||||
|
||||
export const ratingInputBlockSchema = blockBaseSchema.merge(
|
||||
z.object({
|
||||
type: z.literal(InputBlockType.RATING),
|
||||
options: ratingInputOptionsSchema.optional(),
|
||||
})
|
||||
)
|
||||
|
||||
export type RatingInputBlock = z.infer<typeof ratingInputBlockSchema>
|
Reference in New Issue
Block a user