2023-12-22 09:13:53 +01:00
|
|
|
import { z } from '../../../../zod'
|
2023-11-08 15:34:16 +01:00
|
|
|
import { optionBaseSchema, blockBaseSchema } from '../../shared'
|
|
|
|
import { InputBlockType } from '../constants'
|
2024-01-30 08:02:10 +01:00
|
|
|
import { fileVisibilityOptions } from './constants'
|
2023-11-08 15:34:16 +01:00
|
|
|
|
|
|
|
const fileInputOptionsV5Schema = optionBaseSchema.merge(
|
|
|
|
z.object({
|
|
|
|
isRequired: z.boolean().optional(),
|
|
|
|
isMultipleAllowed: z.boolean().optional(),
|
|
|
|
labels: z
|
|
|
|
.object({
|
|
|
|
placeholder: z.string().optional(),
|
|
|
|
button: z.string().optional(),
|
|
|
|
clear: z.string().optional(),
|
|
|
|
skip: z.string().optional(),
|
|
|
|
})
|
|
|
|
.optional(),
|
|
|
|
sizeLimit: z.number().optional(),
|
2024-01-30 08:02:10 +01:00
|
|
|
visibility: z.enum(fileVisibilityOptions).optional(),
|
2023-11-08 15:34:16 +01:00
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
const fileInputOptionsSchemas = {
|
|
|
|
v5: fileInputOptionsV5Schema,
|
|
|
|
v6: fileInputOptionsV5Schema.omit({
|
|
|
|
sizeLimit: true,
|
|
|
|
}),
|
|
|
|
} as const
|
|
|
|
|
|
|
|
const fileInputBlockV5Schema = blockBaseSchema.merge(
|
|
|
|
z.object({
|
|
|
|
type: z.literal(InputBlockType.FILE),
|
|
|
|
options: fileInputOptionsSchemas.v5.optional(),
|
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
export const fileInputBlockSchemas = {
|
2023-12-22 09:13:53 +01:00
|
|
|
v5: fileInputBlockV5Schema.openapi({
|
|
|
|
title: 'File input v5',
|
|
|
|
ref: 'fileInputV5',
|
|
|
|
}),
|
|
|
|
v6: fileInputBlockV5Schema
|
|
|
|
.merge(
|
|
|
|
z.object({
|
|
|
|
options: fileInputOptionsSchemas.v6.optional(),
|
|
|
|
})
|
|
|
|
)
|
|
|
|
.openapi({
|
|
|
|
title: 'File',
|
|
|
|
ref: 'fileInput',
|
|
|
|
}),
|
2023-11-08 15:34:16 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
const fileInputBlockSchema = z.union([
|
|
|
|
fileInputBlockSchemas.v5,
|
|
|
|
fileInputBlockSchemas.v6,
|
|
|
|
])
|
|
|
|
|
|
|
|
export type FileInputBlock = z.infer<typeof fileInputBlockSchema>
|
|
|
|
export type FileInputBlockV6 = z.infer<typeof fileInputBlockSchemas.v6>
|