diff --git a/apps/roam/src/components/settings/utils/zodSchema.example.ts b/apps/roam/src/components/settings/utils/zodSchema.example.ts index 4ed069a73..fe6cbff69 100644 --- a/apps/roam/src/components/settings/utils/zodSchema.example.ts +++ b/apps/roam/src/components/settings/utils/zodSchema.example.ts @@ -178,6 +178,84 @@ const globalSettings: GlobalSettings = { }, ], }, + Relations: [ + { + id: "relation-uid-1", + label: "Informs", + source: "_EVD-node", + destination: "_QUE-node", + complement: "Informed By", + ifConditions: [ + { + triples: [ + ["Page", "is a", "source"], + ["Block", "references", "Page"], + ["Block", "is in page", "ParentPage"], + ["ParentPage", "is a", "destination"], + ], + nodePositions: { + source: "200 50", + destination: "200 350", + }, + }, + ], + }, + { + id: "relation-uid-2", + label: "Supports", + source: "_EVD-node", + destination: "_CLM-node", + complement: "Supported By", + ifConditions: [ + { + triples: [ + ["Page", "is a", "source"], + ["Block", "references", "Page"], + ["SBlock", "references", "SPage"], + ["SPage", "has title", "SupportedBy"], + ["SBlock", "has child", "Block"], + ["PBlock", "references", "ParentPage"], + ["PBlock", "has child", "SBlock"], + ["ParentPage", "is a", "destination"], + ], + nodePositions: { + "0": "250 325", + "1": "100 325", + "2": "100 200", + "3": "250 200", + "4": "400 200", + "5": "100 75", + "6": "250 75", + source: "400 325", + destination: "400 75", + }, + }, + { + triples: [ + ["Page", "is a", "destination"], + ["Block", "references", "Page"], + ["SBlock", "references", "SPage"], + ["SPage", "has title", "Supports"], + ["SBlock", "has child", "Block"], + ["PBlock", "references", "ParentPage"], + ["PBlock", "has child", "SBlock"], + ["ParentPage", "is a", "source"], + ], + nodePositions: { + "7": "250 325", + "8": "100 325", + "9": "100 200", + "10": "250 200", + "11": "400 200", + "12": "100 75", + "13": "250 75", + source: "400 75", + destination: "400 325", + }, + }, + ], + }, + ], }; const defaultGlobalSettings: GlobalSettings = { @@ -204,6 +282,7 @@ const defaultGlobalSettings: GlobalSettings = { "Include Parent And Child Blocks": false, "Page Groups": [], }, + Relations: [], }; const personalSection: PersonalSection = { diff --git a/apps/roam/src/components/settings/utils/zodSchema.ts b/apps/roam/src/components/settings/utils/zodSchema.ts index d2f594a11..fc7a2d06d 100644 --- a/apps/roam/src/components/settings/utils/zodSchema.ts +++ b/apps/roam/src/components/settings/utils/zodSchema.ts @@ -136,6 +136,22 @@ export const DiscourseNodeSchema = z.object({ .transform((val) => val ?? "user"), }); +export const TripleSchema = z.tuple([z.string(), z.string(), z.string()]); + +export const RelationConditionSchema = z.object({ + triples: z.array(TripleSchema).default([]), + nodePositions: z.record(z.string(), z.string()).default({}), +}); + +export const DiscourseRelationSchema = z.object({ + id: z.string(), + label: z.string(), + source: z.string(), + destination: z.string(), + complement: z.string().default(""), + ifConditions: z.array(RelationConditionSchema).default([]), +}); + export const FeatureFlagsSchema = z.object({ "Enable Left Sidebar": z.boolean().default(false), "Suggestive Mode Enabled": z.boolean().default(false), @@ -179,6 +195,7 @@ export const GlobalSettingsSchema = z.object({ "Left Sidebar": LeftSidebarGlobalSettingsSchema.default({}), Export: ExportSettingsSchema.default({}), "Suggestive Mode": SuggestiveModeGlobalSettingsSchema.default({}), + Relations: z.array(DiscourseRelationSchema).default([]), }); export const PersonalSectionSchema = z.object({ @@ -242,6 +259,9 @@ export const GithubSettingsSchema = z.object({ export type CanvasSettings = z.infer; export type SuggestiveRules = z.infer; export type DiscourseNodeSettings = z.infer; +export type Triple = z.infer; +export type RelationCondition = z.infer; +export type DiscourseRelationSettings = z.infer; export type FeatureFlags = z.infer; export type ExportSettings = z.infer; export type PageGroup = z.infer;