Docs›Services›MadMessage
Services

MadMessage

Modal de erro/info (info/success/warning/error) e ponto de entrada de MadConfirm.

Mad\Ui\MadMessage é a factory para diálogos modais informativos (info/success/warning/error) e o ponto de entrada para diálogos de confirmação com botões customizados (MadConfirm). Por baixo dos panos, ambos usam o mesmo sistema de diálogo do client: MadDialog (JS puro, sem dependência externa).

API — mensagens informativas

Cada método monta um MadResponse já com a op script que dispara MadDialog.show(...) no client — sempre com um único botão "OK", já que o objetivo é uma mensagem que o usuário precisa reconhecer (diferente do toast, que some sozinho):

use Mad\Ui\MadMessage;

return MadMessage::success('Salvo!', 'Registro salvo com sucesso.');
return MadMessage::warning('Atenção', 'Verifique os campos antes de continuar.');
return MadMessage::error('Erro ao salvar', 'Não foi possível conectar ao banco.');
return MadMessage::info('Dica', 'Use Ctrl+S para salvar rapidamente.', 'lightbulb');
MétodoAssinaturaCor/ícone padrão
info($title, $content, $icon = '')static MadResponseAzul — info
success($title, $content, $icon = '')static MadResponseVerde — check-circle
warning($title, $content, $icon = '')static MadResponseLaranja — alert-triangle
error($title, $content, $icon = '')static MadResponseVermelho — x-circle

$content permite HTML — é injetado direto no corpo do diálogo (sem htmlspecialchars), então sanitize qualquer dado vindo do usuário antes de passar para cá. O terceiro argumento $icon sobrescreve o ícone Lucide padrão do tipo — quando vazio a chave icon nem entra no payload e o MadDialog aplica o ícone default do type.

Uso típico — dentro de um catch

use Mad\Ui\MadMessage;
use Mad\Http\MadResponse;

public function onSave(): MadResponse
{
    try {
        DB::connection('business')->transaction(function () {
            $pedido = Pedido::findOrNew($this->registroId);
            $this->form->save($pedido);
        });

        return MadToast::success('Salvo!')->closeDrawer();

    } catch (\Throwable $e) {
        return MadMessage::error('Erro ao salvar', $e->getMessage());
    }
}

Encadeamento

Como retorna MadResponse, o retorno encadeia normalmente com outras ops:

// MadMessage::*() retorna MadResponse — encadeável com qualquer outra op
return MadMessage::error('Sem permissão', 'Você não pode editar este registro.')
    ->script("setTimeout(() => window.location.href = '/login', 3000)");

Confirmação com ação — MadMessage::confirm()

Quando o diálogo precisa de mais de um botão (confirmar/cancelar, ou múltiplas ações), confirm($title, $content, $component, $icon = '') NÃO retorna MadResponse — retorna um builder fluente, MadConfirm, que você encadeia e finaliza com build():

use Mad\Ui\MadMessage;

// confirm() NÃO retorna MadResponse direto — retorna um builder MadConfirm.
// Encadeie onConfirm()/button()/onCancel() e finalize com build().
return MadMessage::confirm('Excluir', 'Confirmar exclusão do registro #42?', $this)
    ->onConfirm('deletar', [42])
    ->onCancel()
    ->build();

O terceiro parâmetro ($component) é o MadComponent (normalmente $this) ou o mad-id em string cujos métodos os botões vão chamar via MadWire.call() no client. Ver a API completa de botões em MadConfirm.

Toast vs MadMessage vs MadConfirm

SituaçãoUse
Confirmação rápida de sucesso (não bloqueante)MadToast::success()
Aviso importante mas não bloqueanteMadToast::warning()
Erro de validação por campoMadValidationException::asModal()
Erro fatal (banco, rede, exceção não tratada) que exige reconhecimentoMadMessage::error()
Confirmação com uma única ação destrutiva (excluir, cancelar)MadMessage::confirm(...)->onConfirm(...)->onCancel()->build()
Confirmação com múltiplas ações (aprovar / rejeitar / salvar rascunho)MadMessage::confirm(...)->button(...)->button(...)->build()
NUNCA fazer

Não use echo/print nem monte o script() de MadDialog.show(...) manualmente — MadMessage já cuida do JSON-encode seguro do título/mensagem. Construir a chamada à mão é fácil de quebrar com aspas/HTML não escapados.

Próximos passos