55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import * as z from "zod/v4";
|
||
|
||
const rangePattern = /^\d{1,3}–\d{1,3}$/;
|
||
|
||
const optionField = z.object({
|
||
optionId: z.string(),
|
||
price: z.number().optional(),
|
||
pricePercent: z.number().optional(),
|
||
priceRange: z
|
||
.string()
|
||
.regex(rangePattern, "Format must be like '10–80'")
|
||
.optional(),
|
||
});
|
||
|
||
const extraField = z.object({
|
||
extraId: z.string(),
|
||
price: z.number().optional(),
|
||
pricePercent: z.number().optional(),
|
||
priceRange: z
|
||
.string()
|
||
.regex(rangePattern, "Format must be like '10–80'")
|
||
.optional(),
|
||
});
|
||
|
||
const customInputsField = z.object({
|
||
customInputId: z.string(),
|
||
inputType: z.string(),
|
||
label: z.string(),
|
||
required: z.boolean(),
|
||
});
|
||
|
||
export const commissionTypeSchema = z.object({
|
||
name: z.string().min(1, "Name is required. Min 1 character."),
|
||
description: z.string().optional(),
|
||
options: z.array(optionField).optional(),
|
||
extras: z.array(extraField).optional(),
|
||
customInputs: z.array(customInputsField).optional(),
|
||
});
|
||
|
||
export type commissionTypeSchema = z.infer<typeof commissionTypeSchema>;
|
||
|
||
export const commissionOptionSchema = z.object({
|
||
name: z.string().min(1, "Name is required"),
|
||
description: z.string().optional(),
|
||
});
|
||
|
||
export type CommissionOptionValues = z.infer<typeof commissionOptionSchema>;
|
||
|
||
export const commissionExtraSchema = z.object({
|
||
name: z.string().min(1, "Name is required"),
|
||
description: z.string().optional(),
|
||
});
|
||
|
||
export type CommissionExtraValues = z.infer<typeof commissionExtraSchema>;
|