import { useParams } from 'common' import { Badge, Card, CardContent, Input, InputGroup, InputGroupAddon, InputGroupInput, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { Admonition } from 'ui-patterns/Admonition' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { PageSection, PageSectionContent, PageSectionDescription, PageSectionMeta, PageSectionSummary, PageSectionTitle, } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { ReadReplicasWarning, ValidationErrorsWarning, ValidationWarningsAdmonition, } from '../../Infrastructure/UpgradeWarnings' import { ProjectUpgradeAlert } from '../Infrastructure/ProjectUpgradeAlert' import { AlertError } from '@/components/ui/AlertError' import { useProjectUpgradeEligibilityQuery } from '@/data/config/project-upgrade-eligibility-query' import { useProjectServiceVersionsQuery } from '@/data/projects/project-service-versions' import { useReadReplicasQuery } from '@/data/read-replicas/replicas-query' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { useIsAwsK8sCloudProvider, useIsOrioleDb, useSelectedProjectQuery, } from '@/hooks/misc/useSelectedProject' export const ServiceVersionsSection = () => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const isAwsK8s = useIsAwsK8sCloudProvider() const { projectAuthAll: authEnabled, projectSettingsDatabaseUpgrades: showDatabaseUpgrades } = useIsFeatureEnabled([ 'project_auth:all', 'project_settings:database_upgrades', 'database:replication', ]) const { data, error, isPending: isLoadingUpgradeEligibility, isError: isErrorUpgradeEligibility, isSuccess: isSuccessUpgradeEligibility, } = useProjectUpgradeEligibilityQuery({ projectRef: ref, }) const { data: serviceVersions, error: serviceVersionsError, isPending: isLoadingServiceVersions, isError: isErrorServiceVersions, isSuccess: isSuccessServiceVersions, } = useProjectServiceVersionsQuery({ projectRef: ref }) const { data: databases } = useReadReplicasQuery({ projectRef: ref }) const { current_app_version, current_app_version_release_channel, latest_app_version } = data || {} const isOnLatestVersion = current_app_version === latest_app_version const currentPgVersion = (current_app_version ?? '') .split('supabase-postgres-')[1] ?.replace('-orioledb', '') const isVisibleReleaseChannel = current_app_version_release_channel && !['ga', 'withdrawn'].includes(current_app_version_release_channel) ? current_app_version_release_channel : undefined const isOrioleDb = useIsOrioleDb() const latestPgVersion = (latest_app_version ?? '').split('supabase-postgres-')[1] const isInactive = project?.status === 'INACTIVE' const hasReadReplicas = (databases ?? []).length > 1 return ( Service versions Service versions and upgrade eligibility for your provisioned instance. {isInactive ? ( ) : ( <> {isLoadingUpgradeEligibility && } {isErrorUpgradeEligibility && ( )} {isSuccessUpgradeEligibility && ( <> {isLoadingServiceVersions && } {isErrorServiceVersions && ( )} {isSuccessServiceVersions && ( <> {authEnabled && ( )} {[ isVisibleReleaseChannel && ( {isVisibleReleaseChannel} This project uses a {isVisibleReleaseChannel} database version release ), isOrioleDb && ( OrioleDB This project uses OrioleDB ), isOnLatestVersion && ( Latest Project is on the latest version of Postgres that Supabase supports ), ]} )} {showDatabaseUpgrades && data && data.eligible && !isAwsK8s ? ( hasReadReplicas ? ( ) : ( ) ) : null} {showDatabaseUpgrades && data && !data.eligible && ( )} {showDatabaseUpgrades && data && data.warnings && ( )} )} )} ) }