2022-07-14 12:40:53 +00:00
import { z } from "zod" ;
2023-01-04 13:30:46 +00:00
export const zodNonRouterField = z . object ( {
id : z.string ( ) ,
label : z.string ( ) ,
identifier : z.string ( ) . optional ( ) ,
type : z . string ( ) ,
selectText : z.string ( ) . optional ( ) ,
required : z.boolean ( ) . optional ( ) ,
deleted : z.boolean ( ) . optional ( ) ,
} ) ;
export const zodRouterField = zodNonRouterField . extend ( {
routerId : z.string ( ) ,
} ) ;
// This ordering is important - If routerId is present then it should be in the parsed object. Moving zodNonRouterField to first position doesn't do that
export const zodField = z . union ( [ zodRouterField , zodNonRouterField ] ) ;
export const zodFields = z . array ( zodField ) . optional ( ) ;
export const zodNonRouterFieldView = zodNonRouterField ;
export const zodRouterFieldView = zodRouterField . extend ( {
routerField : zodNonRouterFieldView ,
router : z.object ( {
name : z.string ( ) ,
description : z.string ( ) ,
id : z.string ( ) ,
} ) ,
} ) ;
/ * *
* Has some additional fields that are not supposed to be saved to DB but are required for the UI
* /
export const zodFieldView = z . union ( [ zodNonRouterFieldView , zodRouterFieldView ] ) ;
export const zodFieldsView = z . array ( zodFieldView ) . optional ( ) ;
export const zodNonRouterRoute = z . object ( {
id : z.string ( ) ,
queryValue : z.object ( {
id : z.string ( ) . optional ( ) ,
type : z . union ( [ z . literal ( "group" ) , z . literal ( "switch_group" ) ] ) ,
children1 : z.any ( ) ,
properties : z.any ( ) ,
} ) ,
isFallback : z.boolean ( ) . optional ( ) ,
action : z.object ( {
// TODO: Make it a union type of "customPageMessage" and ..
type : z . union ( [
z . literal ( "customPageMessage" ) ,
z . literal ( "externalRedirectUrl" ) ,
z . literal ( "eventTypeRedirectUrl" ) ,
] ) ,
value : z.string ( ) ,
} ) ,
} ) ;
export const zodNonRouterRouteView = zodNonRouterRoute ;
export const zodRouterRoute = z . object ( {
// This is the id of the Form being used as router
id : z.string ( ) ,
isRouter : z.literal ( true ) ,
} ) ;
export const zodRoute = z . union ( [ zodNonRouterRoute , zodRouterRoute ] ) ;
export const zodRouterRouteView = zodRouterRoute . extend ( {
//TODO: Extend it from form
name : z.string ( ) ,
description : z.string ( ) . nullable ( ) ,
routes : z.array ( z . union ( [ zodRoute , z . null ( ) ] ) ) ,
} ) ;
export const zodRoutes = z . union ( [ z . array ( zodRoute ) , z . null ( ) ] ) . optional ( ) ;
export const zodRouteView = z . union ( [ zodNonRouterRouteView , zodRouterRouteView ] ) ;
export const zodRoutesView = z . union ( [ z . array ( zodRouteView ) , z . null ( ) ] ) . optional ( ) ;
2022-10-14 16:24:43 +00:00
// TODO: This is a requirement right now that zod.ts file (if it exists) must have appDataSchema export(which is only required by apps having EventTypeAppCard interface)
// This is a temporary solution and will be removed in future
export const appDataSchema = z . any ( ) ;
2022-12-07 21:47:02 +00:00
export const appKeysSchema = z . object ( { } ) ;