"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) => (
))}
)}
>
)
}