"use client" import type { Organization } 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 { Card } from "../ui/card" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "../ui/dialog" import { OrganizationCellView } from "./organization-cell-view" export interface LeaveOrganizationDialogProps extends ComponentProps { className?: string classNames?: SettingsCardClassNames localization?: AuthLocalization organization: Organization } export function LeaveOrganizationDialog({ organization, className, classNames, localization: localizationProp, onOpenChange, ...props }: LeaveOrganizationDialogProps) { const { authClient, hooks: { useListOrganizations }, localization: contextLocalization, toast, localizeErrors } = useContext(AuthUIContext) const localization = useMemo( () => ({ ...contextLocalization, ...localizationProp }), [contextLocalization, localizationProp] ) const { refetch: refetchOrganizations } = useListOrganizations() const [isLeaving, setIsLeaving] = useState(false) const handleLeaveOrganization = async () => { setIsLeaving(true) try { await authClient.organization.leave({ organizationId: organization.id, fetchOptions: { throw: true } }) await refetchOrganizations?.() toast({ variant: "success", message: localization.LEAVE_ORGANIZATION_SUCCESS }) onOpenChange?.(false) } catch (error) { toast({ variant: "error", message: getLocalizedError({ error, localization, localizeErrors }) }) } setIsLeaving(false) } return ( e.preventDefault()} > {localization.LEAVE_ORGANIZATION} {localization.LEAVE_ORGANIZATION_CONFIRM} ) }