import { DatabaseUpgradeStatus } from '@supabase/shared-types/out/events' import dayjs from 'dayjs' import { X } from 'lucide-react' import { useEffect, useState } from 'react' import { SupportCategories } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { SupportLink } from 'components/interfaces/Support/SupportLink' import { useProjectUpgradingStatusQuery } from 'data/config/project-upgrade-status-query' import { IS_PLATFORM } from 'lib/constants' import { Alert, Button } from 'ui' import { InlineLink } from './InlineLink' // [Joshen] Think twice about the category though - it doesn't correspond export const ProjectUpgradeFailedBanner = () => { const { ref } = useParams() const { data } = useProjectUpgradingStatusQuery({ projectRef: ref }, { enabled: IS_PLATFORM }) const { status, initiated_at, latest_status_at, error } = data?.databaseUpgradeStatus ?? {} const key = `supabase-upgrade-${ref}-${initiated_at}` const [hasDismissed, setHasDismissed] = useState(false) useEffect(() => { setHasDismissed(localStorage?.getItem(key) === 'true') }, [key]) const isFailed = status === DatabaseUpgradeStatus.Failed const initiatedAt = dayjs .utc(initiated_at ?? 0) .tz(dayjs.tz.guess()) .format('DD MMM YYYY HH:mm:ss') const subject = 'Upgrade%20failed%20for%20project' const message = `Upgrade information:%0A• Initiated at: ${initiated_at}%0A• Error: ${error}` const initiatedAtEncoded = encodeURIComponent( dayjs.utc(initiated_at ?? 0).format('YYYY-MM-DDTHH:mm:ss') ) const latestStatusAtEncoded = encodeURIComponent( dayjs .utc(latest_status_at ?? 0) .utcOffset(0) .format('YYYY-MM-DDTHH:mm:ss') ) const timestampFilter = `its=${initiatedAtEncoded}&ite=${latestStatusAtEncoded}` const acknowledgeMessage = () => { setHasDismissed(true) localStorage.setItem(key, 'true') } if (!isFailed || hasDismissed) return null return (
} >
Your project and its data are not affected. Please reach out to us via our support form for assistance with the upgrade.
You may also view logs related to the failed upgrade in your{' '} project's logs .
) }