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" />