import { useQueryClient } from '@tanstack/react-query'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useState } from 'react'
import {
Alert,
Button,
Form,
IconAlertCircle,
IconExternalLink,
IconPackage,
Listbox,
Modal,
} from 'ui'
import { useParams } from 'common/hooks'
import InformationBox from 'components/ui/InformationBox'
import { useProjectUpgradeEligibilityQuery } from 'data/config/project-upgrade-eligibility-query'
import { useProjectUpgradeMutation } from 'data/projects/project-upgrade-mutation'
import { setProjectStatus } from 'data/projects/projects-query'
import { useStore } from 'hooks'
import { PROJECT_STATUS } from 'lib/constants'
import { BREAKING_CHANGES } from './ProjectUpgradeAlert.constants'
const ProjectUpgradeAlert = () => {
const router = useRouter()
const { ui } = useStore()
const { ref } = useParams()
const queryClient = useQueryClient()
const [showUpgradeModal, setShowUpgradeModal] = useState(false)
const formId = 'project-upgrade-form'
const { data } = useProjectUpgradeEligibilityQuery({ projectRef: ref })
const currentPgVersion = (data?.current_app_version ?? '').split('supabase-postgres-')[1]
const latestPgVersion = (data?.latest_app_version ?? '').split('supabase-postgres-')[1]
const initialValues = { version: data?.target_upgrade_versions?.[0]?.postgres_version ?? 0 }
const { mutate: upgradeProject, isLoading: isUpgrading } = useProjectUpgradeMutation({
onSuccess: (res, variables) => {
setProjectStatus(queryClient, variables.ref, PROJECT_STATUS.UPGRADING)
ui.setNotification({ category: 'success', message: 'Upgrading project' })
router.push(`/project/${variables.ref}?upgradeInitiated=true`)
},
})
const onConfirmUpgrade = async (values: any) => {
if (!ref) return ui.setNotification({ category: 'error', message: 'Project ref not found' })
upgradeProject({ ref, target_version: values.version })
}
return (
<>
The latest version of Postgres ({latestPgVersion}) is available for your project.