"use client" import type { Organization } from "better-auth/plugins/organization" import { useContext, useMemo, useState } from "react" import { useCurrentOrganization } from "../../hooks/use-current-organization" import { AuthUIContext } from "../../lib/auth-ui-provider" import { cn } from "../../lib/utils" import type { SettingsCardProps } from "../settings/shared/settings-card" import { SettingsCard } from "../settings/shared/settings-card" import { CardContent } from "../ui/card" import { InviteMemberDialog } from "./invite-member-dialog" import { MemberCell } from "./member-cell" export function OrganizationMembersCard({ className, classNames, localization: localizationProp, slug: slugProp, ...props }: SettingsCardProps & { slug?: string }) { const { localization: contextLocalization, organization: organizationOptions } = useContext(AuthUIContext) const localization = useMemo( () => ({ ...contextLocalization, ...localizationProp }), [contextLocalization, localizationProp] ) const slug = slugProp || organizationOptions?.slug const { data: organization } = useCurrentOrganization({ slug }) if (!organization) { return ( ) } return ( ) } function OrganizationMembersContent({ className, classNames, localization: localizationProp, organization, ...props }: SettingsCardProps & { organization: Organization }) { const { hooks: { useHasPermission, useListMembers }, localization: contextLocalization } = useContext(AuthUIContext) const localization = useMemo( () => ({ ...contextLocalization, ...localizationProp }), [contextLocalization, localizationProp] ) const { data: hasPermissionInvite, isPending: isPendingInvite } = useHasPermission({ organizationId: organization.id, permissions: { invitation: ["create"] } }) const { data: hasPermissionUpdateMember, isPending: isPendingUpdateMember } = useHasPermission({ organizationId: organization.id, permissions: { member: ["update"] } }) const isPending = isPendingInvite || isPendingUpdateMember const { data } = useListMembers({ query: { organizationId: organization.id } }) const members = data?.members const [inviteDialogOpen, setInviteDialogOpen] = useState(false) return ( <> setInviteDialogOpen(true)} isPending={isPending} disabled={!hasPermissionInvite?.success} {...props} > {!isPending && members && members.length > 0 && ( {members .sort( (a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime() ) .map((member) => ( ))} )} ) }