import { useQueryClient } from '@tanstack/react-query' import { useState } from 'react' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { useIsAPIDocsSidePanelEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import APIDocsButton from 'components/ui/APIDocsButton' import NoPermission from 'components/ui/NoPermission' import { authKeys } from 'data/auth/keys' import { useUsersQuery } from 'data/auth/users-query' import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions' import { Button, IconRefreshCw, IconSearch, IconX, Input, Listbox } from 'ui' import AddUserDropdown from './AddUserDropdown' import UsersList from './UsersList' const Users = () => { const queryClient = useQueryClient() const { project } = useProjectContext() const { ref: projectRef } = useParams() const isNewAPIDocsEnabled = useIsAPIDocsSidePanelEnabled() const [page, setPage] = useState(1) const [search, setSearch] = useState('') const [filterKeywords, setFilterKeywords] = useState('') type Filter = 'verified' | 'unverified' | 'anonymous' const [filter, setFilter] = useState() const canReadUsers = useCheckPermissions(PermissionAction.TENANT_SQL_SELECT, 'auth.users') const isPermissionsLoaded = usePermissionsLoaded() const { data, isLoading, isSuccess, refetch, isRefetching, error, isPreviousData: isFetchingNextPage, } = useUsersQuery( { projectRef, page, keywords: filterKeywords, filter, connectionString: project?.connectionString!, }, { keepPreviousData: true, onSuccess(data) { if (data.users.length <= 0 && data.total > 0) { queryClient.removeQueries( authKeys.users(projectRef, { page, keywords: filterKeywords, filter }) ) setPage((prev) => prev - 1) } }, } ) function onVerifiedFilterChange(val: Filter) { setFilter(val) } function clearSearch() { setSearch('') setFilterKeywords('') setFilter(undefined) } return (
setSearch(e.target.value)} onKeyDown={(e) => { if (e.keyCode == 13) setFilterKeywords(search) }} className="min-w-[275px]" name="email" id="email" placeholder="Search by email or phone number" icon={} actions={[ search && (
{isNewAPIDocsEnabled && }
{isPermissionsLoaded && !canReadUsers ? (
) : ( )}
) } export default Users