Pular para o conteúdo principal

Action Result + Refresh

Toda ação do DYONA retorna o mesmo contrato público de resultado:

type DyonaActionRefreshTarget = {
sourceId: string;
};

type DyonaActionResult<TData = unknown> = {
success: boolean;
message?: string;
fieldErrors?: Record<string, string>;
data?: TData;
refresh?: DyonaActionRefreshTarget[];
};

Propriedades do resultado​

  • success é obrigatório. É um boolean que indica o resultado lógico da ação.

  • message é opcional. É uma string que a UI consumidora pode utilizar.

  • data é opcional e genérico. O DYONA não impõe sua estrutura. Por exemplo:

    data: {
    id: 1024,
    status: 'rejected',
    }
  • refresh é opcional e declarativo. Por exemplo:

    refresh: [
    {sourceId: 'orders'},
    {sourceId: 'dashboard'},
    ]

    Significa: “Estas fontes lógicas podem ter ficado desatualizadas.” Não significa que o Action Engine irá recarregá-las automaticamente.

Action Feedback no DyonaForm​

Quando onSubmit ou uma ação custom onAction retorna um DyonaActionResult, DyonaForm apresenta o resultado sem exigir um Alert manual.

Success​

{success: true, message: 'Registro salvo com sucesso.'}

Mostra feedback de sucesso com fechamento automático. Sem message, DYONA usa sua mensagem genérica localizada.

Erro geral​

{success: false, message: 'Não foi possível concluir a operação.'}

Mostra feedback de erro persistente que o usuário pode fechar manualmente.

Erro associado a campos​

{success: false, message: 'Não foi possível salvar.', fieldErrors: {name: 'O nome já existe.'}}

fieldErrors é integrado à validação e ao resumo de erros existentes. Permanece ao editar e é limpo ao iniciar um novo submit ou action válido. Um handler que retorna void mantém o comportamento anterior; um erro técnico lançado não é convertido em success: false.

Testar Action Feedback no Lab →

Arquitetura​

Executor da ação
↓
DyonaActionResult
↓
refresh: [{sourceId: 'orders'}]
↓
Consumidor / futuro orquestrador
decide como reagir

O Action Engine valida refresh, o transporta e retorna o mesmo resultado produzido pelo executor.

O Action Engine não:

  • executa refresh;
  • chama executeDyonaDataSource;
  • conhece DyonaGrid ou DyonaScreen;
  • procura componentes montados;
  • usa Redux, Event Bus ou Context para atualizar;
  • deduplica targets.

Regras de runtime​

  • refresh é opcional.
  • Quando existe, deve ser um array não vazio.
  • Cada item deve ser um objeto.
  • sourceId deve ser uma string não vazia.
  • A validação usa o conteúdo após trim.
  • O engine não modifica nem normaliza sourceId.
  • Targets repetidos são permitidos.
  • refresh também pode existir com success: false.
  • context.sourceId não se torna automaticamente um refresh target.

Resultado bem-sucedido​

const executor: DyonaActionExecutor = async () => ({
success: true,
message: 'Pedido rejeitado',
data: {
id: 1024,
status: 'rejected',
},
refresh: [
{sourceId: 'orders'},
],
});

Um resultado com falha também pode atualizar​

Isto também é válido:

{
success: false,
message: 'A operação foi concluída apenas parcialmente',
refresh: [
{sourceId: 'orders'},
],
}

Uma operação pode falhar parcialmente e ainda assim alterar dados, portanto um consumidor pode precisar reagir aos seus targets de refresh.

Relação com Action Dialog​

DyonaActionDialog não processa refresh. Ele entrega o DyonaActionResult completo por meio de onResult(result), sem remover message, fieldErrors, data nem refresh.

O exemplo atual do Lab de Action Dialog já demonstra isso com refresh: [{sourceId: 'orders'}].

Continue com Action Engine ou Action Dialog.

Ver Result + Refresh no Lab de Action Dialog