"use client" import type { User } from "better-auth" import type { Member } from "better-auth/plugins/organization" import { Loader2 } from "lucide-react" import { type ComponentProps, useContext, useMemo, useState } from "react" import { AuthUIContext } from "../../lib/auth-ui-provider" import { cn, getLocalizedError } from "../../lib/utils" import type { AuthLocalization } from "../../localization/auth-localization" import type { SettingsCardClassNames } from "../settings/shared/settings-card" import { Button } from "../ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog" import { MemberCell } from "./member-cell" export interface RemoveMemberDialogProps extends ComponentProps { classNames?: SettingsCardClassNames localization?: AuthLocalization member: Member & { user?: Partial | null } } export function RemoveMemberDialog({ member, classNames, localization: localizationProp, onOpenChange, ...props }: RemoveMemberDialogProps) { const { authClient, hooks: { useListMembers }, localization: contextLocalization, toast, localizeErrors } = useContext(AuthUIContext) const localization = useMemo( () => ({ ...contextLocalization, ...localizationProp }), [contextLocalization, localizationProp] ) const { refetch } = useListMembers({ query: { organizationId: member.organizationId } }) const [isRemoving, setIsRemoving] = useState(false) const removeMember = async () => { setIsRemoving(true) try { await authClient.organization.removeMember({ memberIdOrEmail: member.id, organizationId: member.organizationId, fetchOptions: { throw: true } }) toast({ variant: "success", message: localization.REMOVE_MEMBER_SUCCESS }) await refetch?.() onOpenChange?.(false) } catch (error) { toast({ variant: "error", message: getLocalizedError({ error, localization, localizeErrors }) }) } setIsRemoving(false) } return ( e.preventDefault()} > {localization.REMOVE_MEMBER} {localization.REMOVE_MEMBER_CONFIRM} ) }