CronJobPage() — supabase Function Reference
Architecture documentation for the CronJobPage() function in CronJobPage.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD 8dde7bbb_0e27_25f1_1c72_8d1e3d453a10["CronJobPage()"] 49b5023e_9a59_f11c_2309_9e2668b658c3["parseCronJobCommand()"] 8dde7bbb_0e27_25f1_1c72_8d1e3d453a10 -->|calls| 49b5023e_9a59_f11c_2309_9e2668b658c3 023d17bf_201a_36d7_2b25_8b96637020e3["isSecondsFormat()"] 8dde7bbb_0e27_25f1_1c72_8d1e3d453a10 -->|calls| 023d17bf_201a_36d7_2b25_8b96637020e3 style 8dde7bbb_0e27_25f1_1c72_8d1e3d453a10 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Integrations/CronJobs/CronJobPage.tsx lines 42–216
export const CronJobPage = () => {
const router = useRouter()
const { ref, id, pageId, childId } = useParams()
const childLabel = router?.query?.['child-label'] as string
const { data: project } = useSelectedProjectQuery()
const [isEditSheetOpen, setIsEditSheetOpen] = useState(false)
const jobId = Number(childId)
const { data: job, isPending: isLoading } = useCronJobQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
id: jobId,
})
const { data: edgeFunctions = [] } = useEdgeFunctionsQuery({ projectRef: project?.ref })
// Parse the cron job command to check if it's an edge function
const cronJobValues = parseCronJobCommand(job?.command || '', project?.ref!)
const edgeFunction =
cronJobValues.type === 'edge_function' ? cronJobValues.edgeFunctionName : undefined
const edgeFunctionSlug = edgeFunction?.split('/functions/v1/').pop()
const isValidEdgeFunction = edgeFunctions.some((x) => x.slug === edgeFunctionSlug)
const [isDirty, setIsDirty] = useState(false)
const { confirmOnClose, modalProps: closeConfirmationModalProps } = useConfirmOnClose({
checkIsDirty: () => isDirty,
onClose: () => {
setIsDirty(false)
setIsEditSheetOpen(false)
},
})
const pageTitle = childLabel || childId || 'Cron Job'
const pageSubtitle = job ? (
<div className="text-sm text-foreground-light">
Running{' '}
<Tooltip>
<TooltipTrigger asChild>
<span className="cursor-pointer underline decoration-dotted lowercase">
{isSecondsFormat(job.schedule)
? job.schedule.toLowerCase()
: CronToString(job.schedule.toLowerCase())}
</span>
</TooltipTrigger>
<TooltipContent side="bottom" align="center">
<div className="text-xs">
<p className="font-mono mb-1">{job.schedule.toLowerCase()}</p>
{!isSecondsFormat(job.schedule) && (
<p className="text-foreground-light">{CronToString(job.schedule.toLowerCase())}</p>
)}
</div>
</TooltipContent>
</Tooltip>{' '}
with command{' '}
<Tooltip>
<TooltipTrigger asChild>
<code className="text-code-inline max-w-[200px] inline-block truncate align-bottom cursor-pointer">
{job.command}
</code>
</TooltipTrigger>
<TooltipContent
side="bottom"
align="center"
className="min-w-[200px] max-w-[400px] text-wrap p-0"
>
<p className="text-xs font-mono px-2 py-1 border-b bg-surface-100">Command</p>
<CodeBlock
hideLineNumbers
language="sql"
value={job.command.trim()}
className={cn(
'py-0 px-3.5 max-w-full prose dark:prose-dark border-0 rounded-t-none',
'[&>code]:m-0 [&>code>span]:flex [&>code>span]:flex-wrap min-h-11',
'[&>code]:text-xs'
)}
/>
</TooltipContent>
</Tooltip>
</div>
) : null
// Secondary actions
const secondaryActions = [
<Button
key="edit"
type="outline"
icon={<Edit3 strokeWidth={1.5} size="14" />}
onClick={() => setIsEditSheetOpen(true)}
>
Edit
</Button>,
<Button key="view-logs" asChild type="outline" icon={<List strokeWidth={1.5} size="14" />}>
<Link
target="_blank"
rel="noopener noreferrer"
href={`/project/${project?.ref}/logs/pgcron-logs/`}
>
View Cron logs
</Link>
</Button>,
...(isValidEdgeFunction
? [
<Button key="view-edge-logs" asChild type="outline">
<Link
target="_blank"
rel="noopener noreferrer"
href={`/project/${project?.ref}/functions/${edgeFunctionSlug}/logs`}
>
View Edge Function logs
</Link>
</Button>,
]
: []),
]
return (
<>
<PageHeader size="full" className="pb-6">
<PageHeaderBreadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink asChild>
<Link href={`/project/${ref}/integrations`}>Integrations</Link>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink asChild>
<Link href={`/project/${ref}/integrations/${id}/${pageId}`}>Cron</Link>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>{childLabel ?? job?.jobname ?? 'Cron Job'}</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</PageHeaderBreadcrumb>
<PageHeaderMeta>
<PageHeaderSummary>
<PageHeaderTitle>{pageTitle}</PageHeaderTitle>
<PageHeaderDescription>
{isLoading ? <ShimmeringLoader className="py-0 h-[20px] w-96" /> : pageSubtitle}
</PageHeaderDescription>
</PageHeaderSummary>
{secondaryActions.length > 0 && <PageHeaderAside>{secondaryActions}</PageHeaderAside>}
</PageHeaderMeta>
</PageHeader>
<PreviousRunsTab />
<Sheet open={isEditSheetOpen} onOpenChange={setIsEditSheetOpen}>
<SheetContent size="lg">
{job && (
<CreateCronJobSheet
selectedCronJob={{
jobname: job.jobname,
schedule: job.schedule,
active: job.active,
command: job.command,
}}
supportsSeconds={true}
onDirty={setIsDirty}
onClose={() => setIsEditSheetOpen(false)}
onCloseWithConfirmation={confirmOnClose}
/>
)}
</SheetContent>
</Sheet>
<CloseConfirmationModal {...closeConfirmationModalProps} />
</>
)
}
Domain
Subdomains
Source
Frequently Asked Questions
What does CronJobPage() do?
CronJobPage() is a function in the supabase codebase.
What does CronJobPage() call?
CronJobPage() calls 2 function(s): isSecondsFormat, parseCronJobCommand.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free