import { useParams } from 'common' import dayjs from 'dayjs' import { Archive, Cpu, Database, GitBranch, Github } from 'lucide-react' import { useMemo } from 'react' import { cn, Skeleton } from 'ui' import { TimestampInfo } from 'ui-patterns/TimestampInfo' import { HighAvailabilityBadge } from './HighAvailabilityBadge' import { ServiceStatus } from './ServiceStatus' import { ComputeBadgeWrapper } from '@/components/ui/ComputeBadgeWrapper' import { DisableInteraction } from '@/components/ui/DisableInteraction' import { SingleStat } from '@/components/ui/SingleStat' import { useBranchesQuery } from '@/data/branches/branches-query' import { useBackupsQuery } from '@/data/database/backups-query' import { DatabaseMigration, useMigrationsQuery } from '@/data/database/migrations-query' import { useGitHubConnectionsQuery } from '@/data/integrations/github-connections-query' import { useResourceWarningsQuery } from '@/data/usage/resource-warnings-query' import { useHighAvailability } from '@/hooks/misc/useHighAvailability' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { PROJECT_STATUS } from '@/lib/constants' import { EMPTY_ARR } from '@/lib/void' interface BranchStatValueProps { currentBranch?: { created_at?: string } isDefaultProject: boolean isError: boolean isHighAvailability: boolean isLoading: boolean latestNonDefaultBranch?: { name?: string } } export const BranchStatValue = ({ currentBranch, isDefaultProject, isError, isHighAvailability, isLoading, latestNonDefaultBranch, }: BranchStatValueProps) => { if (isHighAvailability) { return
Unavailable
} if (isLoading) { returnUnable to load
} if (isDefaultProject) { return ({latestNonDefaultBranch?.name ?? 'No branches'}
) } if (currentBranch?.created_at) { return (Unknown
} export const ActivityStats = () => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() const { isHighAvailability } = useHighAvailability() const { data: organization } = useSelectedOrganizationQuery() const { data: resourceWarnings } = useResourceWarningsQuery({ slug: organization?.slug }) const projectResourceWarnings = resourceWarnings?.find((warning) => warning.project === ref) const parentProjectRef = project?.parent_project_ref ?? project?.ref const { data: branchesData, isPending: isLoadingBranches, isError: isBranchesError, } = useBranchesQuery( { projectRef: parentProjectRef, }, { enabled: !isHighAvailability } ) const isDefaultProject = project?.parent_project_ref === undefined const currentBranch = useMemo( () => (branchesData ?? []).find((b) => b.project_ref === ref), [branchesData, ref] ) const latestNonDefaultBranch = useMemo(() => { const list = (branchesData ?? []).filter((b) => !b.is_default) if (list.length === 0) return undefined return list .slice() .sort( (a, b) => new Date(b.created_at ?? b.updated_at).valueOf() - new Date(a.created_at ?? a.updated_at).valueOf() )[0] }, [branchesData]) const { data: migrationsData = EMPTY_ARR, isPending: isLoadingMigrations } = useMigrationsQuery({ projectRef: project?.ref, projectStatus: project?.status, connectionString: project?.connectionString, }) const latestMigration = useMemoUnknown
)} {project?.high_availability &&{githubLabelText}
) } />{migrationLabelText}
) } />PITR enabled
) : latestBackup ? (No backups
) } />