"use client" import type { Organization } from "better-auth/plugins/organization" import { EllipsisIcon, Loader2, LogOutIcon, SettingsIcon } from "lucide-react" import { useCallback, 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 { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../ui/dropdown-menu" import { LeaveOrganizationDialog } from "./leave-organization-dialog" import { OrganizationCellView } from "./organization-cell-view" export interface OrganizationCellProps { className?: string classNames?: SettingsCardClassNames organization: Organization localization?: AuthLocalization } export function OrganizationCell({ className, classNames, organization, localization: localizationProp }: OrganizationCellProps) { const { authClient, localization: contextLocalization, organization: organizationOptions, navigate, toast, localizeErrors } = useContext(AuthUIContext) const localization = useMemo( () => ({ ...contextLocalization, ...localizationProp }), [contextLocalization, localizationProp] ) const { pathMode } = organizationOptions || {} const [isLeaveDialogOpen, setIsLeaveDialogOpen] = useState(false) const [isManagingOrganization, setIsManagingOrganization] = useState(false) const handleManageOrganization = useCallback(async () => { setIsManagingOrganization(true) if (pathMode === "slug") { navigate( `${organizationOptions?.basePath}/${organization.slug}/${organizationOptions?.viewPaths.SETTINGS}` ) return } try { await authClient.organization.setActive({ organizationId: organization.id, fetchOptions: { throw: true } }) navigate( `${organizationOptions?.basePath}/${organizationOptions?.viewPaths?.SETTINGS}` ) } catch (error) { toast({ variant: "error", message: getLocalizedError({ error, localization, localizeErrors }) }) setIsManagingOrganization(false) } }, [ authClient, organization.id, organizationOptions?.basePath, organizationOptions?.viewPaths?.SETTINGS, organization.slug, pathMode, navigate, toast, localization, localizeErrors ]) return ( <> {localization.MANAGE_ORGANIZATION} setIsLeaveDialogOpen(true)} variant="destructive" > {localization.LEAVE_ORGANIZATION} ) }