Docs›Componentes (Admin)›mad-transporter
Componentes (Admin)

mad-transporter

Carrega outro MadComponent via AJAX (energize).

Componente que carrega outro MadComponent/pagina dentro de um slot via AJAX (Mad.get). Usado para embedar listagens, calendarios, timelines e visualizadores em paginas/abas/cards sem full reload. Suporta recarga remota via Mad.energize(nome) / MadResponse->energize().

Props

Prop Tipo Default Descricao
class string '' Classe do MadComponent destino (obrigatorio)
method string 'show' Metodo PHP a chamar. Aceita metodo(arg1,arg2) inline
params string/json '{}' Params iniciais (JSON string ou array via :params)
name string '' Identificador para Mad.energize(nome) recarregar
height string '200px' Altura minima do placeholder de loading (numero puro = px, via CssUnits)
forwardParams string '' Lista CSV de chaves a propagar como _forward_param_* (aceita tambem forward-params)

method aceita a forma metodo() com parenteses vazios — o compilador extrai o nome e chama Classe@metodo (sem os parenteses colados).

Uso basico

<mad-transporter class="DocListagemPessoas" method="show" height="400px" />

Dentro de card

<mad-card title="Pessoas">
    <mad-transporter name="pessoas" class="DocListagemPessoas" method="show" height="400px" />
</mad-card>

Com params (JSON encode)

<mad-transporter name="timeline" class="NegociacaoTimelineMad"
    :params="json_encode(['negociacao_id' => $negociacaoId])" height="600px" />

Dentro de tabs (lazy via energize)

<mad-tabs default="atividades">
    <mad-tabs-list>
        <mad-tab name="atividades" icon="calendar">Atividades</mad-tab>
        <mad-tab name="arquivos" icon="paperclip">Arquivos</mad-tab>
    </mad-tabs-list>

    <mad-tab-panel name="atividades">
        <mad-transporter name="atividades" class="NegociacaoAtividadeCalendarMad"
            :params="json_encode(['negociacao_id' => $negociacaoId])"
            forwardParams="negociacao_id" height="500px" />
    </mad-tab-panel>

    <mad-tab-panel name="arquivos">
        <mad-transporter name="arquivos" class="NegociacaoArquivoListMad"
            :params="json_encode(['negociacao_id' => $negociacaoId])"
            forwardParams="negociacao_id" height="400px" />
    </mad-tab-panel>
</mad-tabs>

Method com argumentos inline

method="onViewThread(42)" extrai os args, mapeia por nome via reflection do metodo PHP destino e injeta nos params.

<mad-transporter name="message-viewer"
    class="SystemMessageFormView"
    method="onViewThread({{ $selectedThread }})"
    height="100%" />
public function onViewThread(int $thread_id): void { ... }

forwardParams — propagar params do pai

Quando o componente carregado abre forms/drawers que precisam saber o ID do mestre, use forwardParams para que essas chaves sejam reenviadas como _forward_param_* em todas as chamadas internas do filho.

<mad-transporter name="produtos" class="NegociacaoItemListMad"
    :params="json_encode(['negociacao_id' => $negociacaoId])"
    forwardParams="negociacao_id" height="400px" />

Recarregar remotamente — Mad.energize(name) / MadResponse->energize()

Para recarregar o transporter apos uma acao server-side (ex: salvar form em drawer), use energize no nome do transporter:

public function onSave(): MadResponse
{
    // ... salvar ...
    return (new MadResponse())
        ->toast('Salvo!', 'success')
        ->closeDrawer()
        ->energize('produtos'); // recarrega <mad-transporter name="produtos">
}

Com params extras mesclados aos iniciais:

->energize('timeline', ['filtro' => 'recente'])

No JS:

Mad.energize('produtos');
Mad.energize('produtos', { filtro: 'recente' });

Quando usar transporter vs include direto vs navigate

Cenario Usar
Embedar listagem/calendario/timeline numa pagina/card <mad-transporter>
Conteudo lazy em aba que precisa recarregar via energize <mad-transporter name="...">
Abrir outra pagina/drawer/modal por clique <mad-btn navigate="...">
Renderizar partial Blade estatico inline @include direto

NUNCA fazer

{{-- ERRADO: iframe para embedar outra tela --}}
<iframe src="engine.php?class=NegociacaoItemListMad&negociacao_id=42"></iframe>

{{-- CERTO --}}
<mad-transporter class="NegociacaoItemListMad"
    :params="json_encode(['negociacao_id' => 42])" />

{{-- ERRADO: chamar Mad.get manual num div --}}
<div id="meu-slot"></div>
<script>Mad.get('Classe@show', {id: 1}, '#meu-slot');</script>

{{-- CERTO --}}
<mad-transporter class="Classe" :params="json_encode(['id' => 1])" />

{{-- ERRADO: full reload da pagina pai apos salvar --}}
return (new MadResponse())->script('location.reload()');

{{-- CERTO: energize so o transporter afetado --}}
return (new MadResponse())->energize('produtos');

{{-- ERRADO: passar params como string PHP concatenada --}}
<mad-transporter class="X" params="{id:{{ $id }}}" />

{{-- CERTO: usar :params com json_encode --}}
<mad-transporter class="X" :params="json_encode(['id' => $id])" />

{{-- ERRADO: esquecer forwardParams quando o filho abre forms que precisam do ID do pai --}}
<mad-transporter class="ItemList" :params="json_encode(['pedido_id' => $id])" />

{{-- CERTO --}}
<mad-transporter class="ItemList" :params="json_encode(['pedido_id' => $id])"
    forwardParams="pedido_id" />