WU / DOCSMICROFRONTENDS UNIVERSAIS
PT

Drag and drop entre apps

Ofereça e aceite dados tipados com permissões, validação e uma alternativa programática ao arraste.

Esta página descreve o WU Framework 4.0.0. Consulte o guia de migração para Framework 4.0 e CLI 1.2 antes de atualizar um projeto existente.

O shell importa wu-framework/dnd ao usar core. A app emissora solicita drag.offer:catalog.product e a receptora drag.accept:catalog.product; o host concede cada permissão à respectiva app. Use context.wu no lifecycle para manter a autoridade de cada app.

// Inside the sending app's async mount(container, props, context):
const card = document.createElement('button');
card.textContent = 'Product 42';
container.append(card);
const stopOffer = await context.wu.drag.offer(card, {
  type: 'catalog.product', payload: { id: '42', quantity: 1 },
});
// Save stopOffer and call it from this app's unmount.
// Inside the receiving app's async mount(container, props, context):
const stopAccept = await context.wu.drop.accept(container, {
  type: 'catalog.product',
  validate(value) {
    if (typeof value?.id !== 'string') throw new TypeError('Product id is required');
    return value;
  },
  onDrop: product => { container.textContent = 'Added: ' + product.id; },
});
// Save stopAccept and call it from this app's unmount.

offer() e accept() retornam promessas de funções de limpeza. Guarde-as na instância e execute-as ao desmontar. Se um efeito puder ser cancelado antes da resolução, execute imediatamente o disposer quando ele chegar a um efeito já cancelado.

wu.drag.deliver(type, payload, { to, element }) realiza a mesma entrega sem arraste físico: use em ações de teclado ou botão. current() retorna a sessão ativa ou null. A transferência nativa contém um ID de sessão, não o objeto inteiro; o destino recebe uma cópia após permissões e validação. Isso coordena dados; não move DOM entre apps.

Ofertas aceitam effect, image e onEnd. Destinos aceitam vários tipos, onEnter, onLeave, onReject e dropEffect. Trate WU_CAPABILITY_DENIED, WU_DRAG_INVALID, WU_DRAG_NO_TARGET e WU_DRAG_ACCEPT_DENIED; atualize o estado de negócio apenas quando onDrop confirmar a entrega.

Experimente também Apps em movimento: editor React, caixa de entrada Vue, janelas e PiP, entrega tipada, transições e keep-alive. O guia do cenário explica como aplicá-lo à sua aplicação.

CONSTRUA O WU CONOSCO

Encontrou um bug? Tem uma ideia?

Sua experiência melhora o WU. Conte o que falhou ou ajude a manter seu desenvolvimento.