CreateRuleSheet() — supabase Function Reference
Architecture documentation for the CreateRuleSheet() function in CreateRuleSheet.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD a95f4fda_e214_9533_9792_7f0f33d3e87e["CreateRuleSheet()"] be2db34b_0bba_4dab_9cfe_912722c9fdfe["generateRuleDescription()"] a95f4fda_e214_9533_9792_7f0f33d3e87e -->|calls| be2db34b_0bba_4dab_9cfe_912722c9fdfe style a95f4fda_e214_9533_9792_7f0f33d3e87e fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Advisors/CreateRuleSheet.tsx lines 68–247
export const CreateRuleSheet = ({ lint, open, onOpenChange }: CreateRuleSheetProps) => {
const router = useRouter()
const { ref: projectRef } = useParams()
const routeCategory = router.pathname.split('/').pop()
const { data: organization } = useSelectedOrganizationQuery()
const { data: members = [] } = useOrganizationMembersQuery({ slug: organization?.slug })
const { mutate: createRule, isPending: isCreating } = useLintRuleCreateMutation({
onSuccess: (_, vars) => {
const ruleLint = vars.exception.lint_name
const ruleLintMeta = lintInfoMap.find((x) => x.name === ruleLint)
toast.success(`Successfully created new rule for ${ruleLintMeta?.title}`)
if (ruleLintMeta) {
if (!!routeCategory && routeCategory !== ruleLintMeta.category) {
router.push(
`/project/${projectRef}/advisors/rules/${ruleLintMeta.category}?lint=${ruleLintMeta.name}`
)
} else {
// setExpandedLint(ruleLintMeta?.name)
}
}
onOpenChange(false)
},
})
const formId = 'create-lint-rule-form'
const form = useForm<z.infer<typeof FormSchema>>({
mode: 'onBlur',
reValidateMode: 'onChange',
resolver: zodResolver(FormSchema),
defaultValues,
})
const { lint_name, assigned_to, is_disabled } = form.watch()
const onSubmit: SubmitHandler<z.infer<typeof FormSchema>> = async (values) => {
if (!projectRef) return console.error('Project ref is required')
createRule({
projectRef,
exception: {
...values,
lint_category: undefined,
lint_name: values.lint_name,
assigned_to: values.assigned_to === 'all' ? undefined : values.assigned_to,
},
})
}
useEffect(() => {
if (open) form.reset({ ...defaultValues, lint_name: lint?.name })
}, [open])
return (
<Sheet open={open} onOpenChange={onOpenChange}>
<SheetContent className="flex flex-col gap-0">
<SheetHeader className="shrink-0 flex items-center gap-4">
<SheetTitle>Create a rule for "{lint?.title}"</SheetTitle>
</SheetHeader>
<SheetSection className="overflow-auto flex-grow px-0">
<Form_Shadcn_ {...form}>
<form
id={formId}
className="flex flex-col gap-y-4"
onSubmit={form.handleSubmit(onSubmit)}
>
<FormField_Shadcn_
name="is_disabled"
control={form.control}
render={({ field }) => (
<FormItemLayout
layout="flex-row-reverse"
className="px-5"
label={`Disable this lint for ${assigned_to === 'all' ? 'project' : 'the assigned member'}`}
description="Toggles the visiblity of this lint in the Advisor reports"
>
<Tooltip>
<TooltipTrigger type="button">
<FormControl_Shadcn_>
<Switch
checked={field.value}
onCheckedChange={field.onChange}
disabled={field.disabled || assigned_to === 'all'}
/>
</FormControl_Shadcn_>
</TooltipTrigger>
{assigned_to === 'all' && (
<TooltipContent side="bottom" className="w-72">
Assign this rule to a specific project member before toggling this option
off. This will then configure the rule to{' '}
<span className="text-brand">only be visible</span> to that member in the
advisor reports.
</TooltipContent>
)}
</Tooltip>
</FormItemLayout>
)}
/>
<Separator />
<FormField_Shadcn_
name="assigned_to"
control={form.control}
render={({ field }) => (
<FormItemLayout label="Assign rule to" layout="vertical" className="px-5">
<Select_Shadcn_
onValueChange={(val) => {
field.onChange(val)
if (val === 'all') form.setValue('is_disabled', true)
}}
defaultValue={field.value}
>
<SelectTrigger_Shadcn_ className="col-span-8">
<SelectValue_Shadcn_ />
</SelectTrigger_Shadcn_>
<SelectContent_Shadcn_>
<SelectItem_Shadcn_ value="all">All project members</SelectItem_Shadcn_>
{members.map((m) => (
<SelectItem_Shadcn_ key={m.gotrue_id} value={m.gotrue_id}>
{m.username || m.primary_email}
</SelectItem_Shadcn_>
))}
</SelectContent_Shadcn_>
</Select_Shadcn_>
</FormItemLayout>
)}
/>
{!!lint_name && (
<div className="px-5">
<Admonition showIcon={false} type="default">
{generateRuleDescription({
name: lint_name,
disabled: is_disabled,
member: members.find((x) => x.gotrue_id === assigned_to),
})}
</Admonition>
</div>
)}
<Separator />
<FormField_Shadcn_
name="note"
control={form.control}
render={({ field }) => (
<FormItemLayout
layout="vertical"
className="px-5"
label="Description"
labelOptional="Optional"
>
<FormControl_Shadcn_>
<Input.TextArea
{...field}
className="[&>div>div>div>textarea]:text-sm"
placeholder="e.g Describe why this rule is being set"
/>
</FormControl_Shadcn_>
</FormItemLayout>
)}
/>
</form>
</Form_Shadcn_>
</SheetSection>
<SheetFooter>
<Button disabled={isCreating} type="default" onClick={() => onOpenChange(false)}>
Cancel
</Button>
<Button form={formId} htmlType="submit" loading={isCreating}>
Create rule
</Button>
</SheetFooter>
</SheetContent>
</Sheet>
)
}
Domain
Subdomains
Source
Frequently Asked Questions
What does CreateRuleSheet() do?
CreateRuleSheet() is a function in the supabase codebase.
What does CreateRuleSheet() call?
CreateRuleSheet() calls 1 function(s): generateRuleDescription.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free