import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import dayjs from 'dayjs' import { AlertCircle } from 'lucide-react' import type { Timezone } from './PITR.types' import { TimezoneSelection } from './TimezoneSelection' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { FormPanel } from '@/components/ui/Forms/FormPanel' import { useBackupsQuery } from '@/data/database/backups-query' import { useReadReplicasQuery } from '@/data/read-replicas/replicas-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' interface PITRStatusProps { selectedTimezone: Timezone onUpdateTimezone: (timezone: Timezone) => void onSetConfiguration: () => void } const PITRStatus = ({ selectedTimezone, onUpdateTimezone, onSetConfiguration, }: PITRStatusProps) => { const { ref } = useParams() const { data: backups } = useBackupsQuery({ projectRef: ref }) const { data: databases } = useReadReplicasQuery({ projectRef: ref }) const hasReadReplicas = (databases ?? []).length > 1 const { earliestPhysicalBackupDateUnix, latestPhysicalBackupDateUnix } = backups?.physicalBackupData ?? {} const earliestAvailableBackup = dayjs .unix(earliestPhysicalBackupDateUnix ?? 0) .tz(selectedTimezone?.utc[0]) .format('DD MMM YYYY, HH:mm:ss') const latestAvailableBackup = dayjs .unix(latestPhysicalBackupDateUnix ?? 0) .tz(selectedTimezone?.utc[0]) .format('DD MMM YYYY, HH:mm:ss') const { can: canTriggerPhysicalBackup } = useAsyncCheckPermissions( PermissionAction.INFRA_EXECUTE, 'queue_job.walg.prepare_restore' ) return ( <>
You'll be able to pick the right date and time when you begin
onSetConfiguration()} tooltip={{ content: { side: 'left', text: hasReadReplicas ? 'You will need to remove all read replicas first to trigger a PITR recovery' : !canTriggerPhysicalBackup ? 'You need additional permissions to trigger a PITR recovery' : undefined, }, }} > Start a restore } >

Database restore available from

{earliestAvailableBackup}

Latest restore available at

{latestAvailableBackup}

) } export default PITRStatus