Add custom intervention modals
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import { z } from "zod";
|
||||
|
||||
/** Serializable custom field blocks for a user-authored method card (wizard step 3). */
|
||||
export type CustomMethodCardFieldBlock =
|
||||
| {
|
||||
kind: "text";
|
||||
id: string;
|
||||
blockTitle: string;
|
||||
placeholderText: string;
|
||||
}
|
||||
| {
|
||||
kind: "badges";
|
||||
id: string;
|
||||
blockTitle: string;
|
||||
options: string[];
|
||||
}
|
||||
| {
|
||||
kind: "upload";
|
||||
id: string;
|
||||
blockTitle: string;
|
||||
fileName?: string;
|
||||
}
|
||||
| {
|
||||
kind: "proportion";
|
||||
id: string;
|
||||
blockTitle: string;
|
||||
defaultPercent: number;
|
||||
};
|
||||
|
||||
const customMethodTextBlockSchema = z
|
||||
.object({
|
||||
kind: z.literal("text"),
|
||||
id: z.string().max(80),
|
||||
blockTitle: z.string().max(200),
|
||||
placeholderText: z.string().max(8000),
|
||||
})
|
||||
.strict();
|
||||
|
||||
const customMethodBadgesBlockSchema = z
|
||||
.object({
|
||||
kind: z.literal("badges"),
|
||||
id: z.string().max(80),
|
||||
blockTitle: z.string().max(200),
|
||||
options: z.array(z.string().max(200)).max(50),
|
||||
})
|
||||
.strict();
|
||||
|
||||
const customMethodUploadBlockSchema = z
|
||||
.object({
|
||||
kind: z.literal("upload"),
|
||||
id: z.string().max(80),
|
||||
blockTitle: z.string().max(200),
|
||||
fileName: z.string().max(500).optional(),
|
||||
})
|
||||
.strict();
|
||||
|
||||
const customMethodProportionBlockSchema = z
|
||||
.object({
|
||||
kind: z.literal("proportion"),
|
||||
id: z.string().max(80),
|
||||
blockTitle: z.string().max(200),
|
||||
defaultPercent: z.number().int().min(1).max(100),
|
||||
})
|
||||
.strict();
|
||||
|
||||
export const customMethodCardFieldBlockSchema = z.discriminatedUnion("kind", [
|
||||
customMethodTextBlockSchema,
|
||||
customMethodBadgesBlockSchema,
|
||||
customMethodUploadBlockSchema,
|
||||
customMethodProportionBlockSchema,
|
||||
]);
|
||||
|
||||
export const customMethodCardFieldBlocksByIdSchema = z
|
||||
.record(z.string().max(80), z.array(customMethodCardFieldBlockSchema).max(30))
|
||||
.optional();
|
||||
Reference in New Issue
Block a user