PITRSelection() — supabase Function Reference
Architecture documentation for the PITRSelection() function in PITRSelection.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD 7781789f_e923_1e81_d678_c9b2482bb620["PITRSelection()"] ea18b1f5_07ef_c14f_2472_6b5cabd71914["getClientTimezone()"] 7781789f_e923_1e81_d678_c9b2482bb620 -->|calls| ea18b1f5_07ef_c14f_2472_6b5cabd71914 style 7781789f_e923_1e81_d678_c9b2482bb620 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Database/Backups/PITR/PITRSelection.tsx lines 27–189
export const PITRSelection = () => {
const router = useRouter()
const { ref } = useParams()
const { data: backups } = useBackupsQuery({ projectRef: ref })
const { data: databases } = useReadReplicasQuery({ projectRef: ref })
const { setProjectStatus } = useSetProjectStatus()
const [showConfiguration, setShowConfiguration] = useState(false)
const [showConfirmation, setShowConfirmation] = useState(false)
const [selectedTimezone, setSelectedTimezone] = useState<Timezone>(getClientTimezone())
const [selectedRecoveryPoint, setSelectedRecoveryPoint] = useState<{
recoveryTimeTargetUnix: number
recoveryTimeString: string
recoveryTimeStringUtc: string
}>()
const hasReadReplicas = (databases ?? []).length > 1
const {
mutate: restoreFromPitr,
isPending: isRestoring,
isSuccess: isSuccessPITR,
} = usePitrRestoreMutation({
onSuccess: (_, variables) => {
setTimeout(() => {
setShowConfirmation(false)
setProjectStatus({ ref: variables.ref, status: PROJECT_STATUS.RESTORING })
router.push(`/project/${variables.ref}`)
}, 3000)
},
})
const { earliestPhysicalBackupDateUnix, latestPhysicalBackupDateUnix } =
backups?.physicalBackupData ?? {}
const hasNoBackupsAvailable = !earliestPhysicalBackupDateUnix || !latestPhysicalBackupDateUnix
const onConfirmRestore = async () => {
if (!ref) return console.error('Project ref is required')
if (!selectedRecoveryPoint?.recoveryTimeTargetUnix)
return console.error('Recovery time target unix is required')
restoreFromPitr({
ref,
recovery_time_target_unix: selectedRecoveryPoint.recoveryTimeTargetUnix,
})
}
return (
<>
<FormHeader
title="Restore your database from a backup"
description="Database changes are watched and recorded, so that you can restore your database to any point in time"
/>
<BackupsStorageAlert />
{hasNoBackupsAvailable ? (
<BackupsEmpty />
) : (
<>
{hasReadReplicas && (
<Alert_Shadcn_ variant="warning">
<WarningIcon />
<AlertTitle_Shadcn_>
Unable to restore from PITR as project has read replicas enabled
</AlertTitle_Shadcn_>
<AlertDescription_Shadcn_>
You will need to remove all read replicas first from your project's infrastructure
settings prior to starting a PITR restore.
</AlertDescription_Shadcn_>
<div className="flex items-center gap-x-2 mt-2">
{/* [Joshen] Ideally we have some links to a docs to explain why so */}
<Button type="default">
<Link href={`/project/${ref}/settings/infrastructure`}>
Infrastructure settings
</Link>
</Button>
</div>
</Alert_Shadcn_>
)}
{!showConfiguration ? (
<PITRStatus
selectedTimezone={selectedTimezone}
onUpdateTimezone={setSelectedTimezone}
onSetConfiguration={() => setShowConfiguration(true)}
/>
) : (
<PITRForm
earliestAvailableBackupUnix={earliestPhysicalBackupDateUnix}
latestAvailableBackupUnix={latestPhysicalBackupDateUnix}
onSubmit={(recoveryPoint) => {
setSelectedRecoveryPoint(recoveryPoint)
setShowConfirmation(true)
}}
/>
)}
</>
)}
<Modal
size="medium"
visible={showConfirmation}
onCancel={() => setShowConfirmation(false)}
header="Point in time recovery review"
customFooter={
<div className="flex items-center justify-end space-x-2">
<Button
type="default"
disabled={isRestoring || isSuccessPITR}
onClick={() => setShowConfirmation(false)}
>
Cancel
</Button>
<Button
type="warning"
disabled={isRestoring || isSuccessPITR}
loading={isRestoring || isSuccessPITR}
onClick={onConfirmRestore}
>
I understand, begin restore
</Button>
</div>
}
>
<Modal.Content>
<div className="py-2 space-y-1">
<p className="text-sm text-foreground-light">Your database will be restored to:</p>
</div>
<div className="py-2 flex flex-col gap-3">
<div>
<p className="text-sm font-mono text-foreground-lighter">Local Time</p>
<p className="text-2xl">{selectedRecoveryPoint?.recoveryTimeString}</p>
</div>
<div>
<p className="text-sm font-mono text-foreground-lighter">(UTC+00:00)</p>
<p className="text-2xl">{selectedRecoveryPoint?.recoveryTimeStringUtc}</p>
</div>
</div>
</Modal.Content>
<Modal.Separator />
<Modal.Content>
<Alert_Shadcn_ variant="warning">
<WarningIcon />
<AlertTitle_Shadcn_>
This action cannot be undone, not canceled once started
</AlertTitle_Shadcn_>
<AlertDescription_Shadcn_>
Any changes made to your database after this point in time will be lost. This includes
any changes to your project's storage and authentication.
</AlertDescription_Shadcn_>
</Alert_Shadcn_>
</Modal.Content>
<Modal.Separator />
<Modal.Content>
<p className="text-sm text-foreground-light">
Restores may take from a few minutes up to several hours depending on the size of your
database. During this period, your project will not be available, until the restoration
is completed.
</p>
</Modal.Content>
</Modal>
</>
)
}
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does PITRSelection() do?
PITRSelection() is a function in the supabase codebase.
What does PITRSelection() call?
PITRSelection() calls 1 function(s): getClientTimezone.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free