import { THRESHOLD_COUNT, type OptimizedSearchColumns } from '@supabase/pg-meta' import { keepPreviousData } from '@tanstack/react-query' import { useParams } from 'common' import { HelpCircle, Loader2 } from 'lucide-react' import { useEffect, useState } from 'react' import { Button, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import type { Filter, SpecificFilterColumn } from './Users.constants' import { formatEstimatedCount } from '@/components/grid/components/footer/pagination/Pagination.utils' import { useUsersCountQuery } from '@/data/auth/users-count-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' interface UsersFooterProps { filter: Filter filterKeywords: string selectedProviders: string[] specificFilterColumn: SpecificFilterColumn } export const UsersFooter = ({ filter, filterKeywords, selectedProviders, specificFilterColumn, }: UsersFooterProps) => { const { ref: projectRef } = useParams() const { data: project } = useSelectedProjectQuery() const [forceExactCount, setForceExactCount] = useState(false) const [showFetchExactCountModal, setShowFetchExactCountModal] = useState(false) const { data: countData, isPending: isLoadingCount, isFetching: isFetchingCount, isSuccess: isSuccessCount, } = useUsersCountQuery( { projectRef, connectionString: project?.connectionString, keywords: filterKeywords, filter: filter === 'all' ? undefined : filter, providers: selectedProviders, forceExactCount, // Use optimized search when filtering by specific column ...(specificFilterColumn !== 'freeform' ? { column: specificFilterColumn as OptimizedSearchColumns } : { column: undefined }), }, { placeholderData: keepPreviousData } ) const totalUsers = countData?.count ?? 0 useEffect(() => { if (isSuccessCount && specificFilterColumn === 'freeform') { setForceExactCount(countData.is_estimate && countData.count <= THRESHOLD_COUNT) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [isSuccessCount, specificFilterColumn]) return ( <>
{isLoadingCount || isFetchingCount || countData === undefined ? ( Loading... ) : ( <> Total:{' '} {countData?.is_estimate ? formatEstimatedCount(totalUsers) : totalUsers.toLocaleString()}{' '} user{totalUsers !== 1 ? 's' : ''} {countData?.is_estimate && ' (estimated)'} {countData?.is_estimate && (
setShowFetchExactCountModal(false)} onConfirm={() => { setForceExactCount(true) setShowFetchExactCountModal(false) }} >

Your project has more than {THRESHOLD_COUNT.toLocaleString()} users, and fetching the exact count may cause performance issues on your database.

) }