import { AlertCircle, HelpCircle } from 'lucide-react' import { useParams } from 'common' import Table from 'components/to-be-cleaned/Table' import AlertError from 'components/ui/AlertError' import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader' import { useOrganizationRolesV2Query } from 'data/organization-members/organization-roles-query' import { useOrganizationMembersQuery } from 'data/organizations/organization-members-query' import { useProfile } from 'lib/profile' import { Button, Loading, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { Admonition } from 'ui-patterns' import { MemberRow } from './MemberRow' export interface MembersViewProps { searchString: string } const MembersView = ({ searchString }: MembersViewProps) => { const { slug } = useParams() const { profile } = useProfile() const { data: members, error: membersError, isLoading: isLoadingMembers, isError: isErrorMembers, isSuccess: isSuccessMembers, } = useOrganizationMembersQuery({ slug }) const { data: roles, error: rolesError, isSuccess: isSuccessRoles, isError: isErrorRoles, } = useOrganizationRolesV2Query({ slug, }) const allMembers = members ?? [] const filteredMembers = ( !searchString ? allMembers : allMembers.filter((member) => { if (member.invited_at) { return member.primary_email?.includes(searchString) } if (member.gotrue_id) { return ( member.username.includes(searchString) || member.primary_email?.includes(searchString) ) } }) ) .slice() .sort((a, b) => { // [Joshen] Have own account show up top if (a.primary_email === profile?.primary_email) return -1 return a.username.localeCompare(b.username) }) const userMember = allMembers.find((m) => m.primary_email === profile?.primary_email) const orgScopedRoleIds = (roles?.org_scoped_roles ?? []).map((r) => r.id) const isOrgScopedRole = orgScopedRoleIds.includes(userMember?.role_ids?.[0] ?? -1) return ( <> {isLoadingMembers && } {isErrorMembers && ( )} {isErrorRoles && ( )} {isSuccessMembers && (
User, , Enabled MFA , Role How to configure access control? , , ]} body={[ ...(isSuccessRoles && isSuccessMembers && !isOrgScopedRole ? [ , ] : []), ...filteredMembers.map((member) => ( )), ...(searchString.length > 0 && filteredMembers.length === 0 ? [

No users matched the search query "{searchString}"

, ] : []),

{searchString ? `${filteredMembers.length} of ` : ''} {allMembers.length || '0'} {allMembers.length == 1 ? 'user' : 'users'}

, ]} /> )} ) } export default MembersView