'use client'; import * as React from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { updateTenantStatus, type TenantStatusTransition } from '@/lib/api/tenants'; import { ApiError } from '@/lib/api/client'; import { toast } from '@/lib/toast'; import { STATUS_PILL_MAP } from '@/components/ui/status-pill'; import { Button } from '@/components/ui/button'; import { ResponsiveDialog } from '@/components/ui/responsive-dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; const TRANSITIONS: TenantStatusTransition[] = ['ativo', 'inadimplente', 'suspenso', 'cancelado']; interface TenantStatusDialogProps { tenant: { id: string; razao_social: string; status: string } | null; onOpenChange: (open: boolean) => void; onSuccess?: () => void; } /** * Mudança de status de tenant com confirmação explícita (critério de * aceite da Etapa 15) — reaproveitado pela listagem e pelo detalhe de * tenant, já que a mesma ação aparece nos dois lugares. */ export function TenantStatusDialog({ tenant, onOpenChange, onSuccess }: TenantStatusDialogProps) { const queryClient = useQueryClient(); const [target, setTarget] = React.useState(''); React.useEffect(() => { setTarget(''); }, [tenant?.id]); const mutation = useMutation({ mutationFn: (status: TenantStatusTransition) => updateTenantStatus(tenant!.id, status), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['master', 'tenants'] }); toast.success('Status do tenant atualizado.'); onOpenChange(false); onSuccess?.(); }, onError: (err) => { toast.error(err instanceof ApiError ? err.message : 'Não foi possível atualizar o status.'); }, }); return ( } >

Status atual: {STATUS_PILL_MAP[tenant?.status as keyof typeof STATUS_PILL_MAP]?.label ?? tenant?.status}

); }