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
DyonaGridouDyonaScreen; - 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.
sourceIddeve 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.
refreshtambém pode existir comsuccess: false.context.sourceIdnã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.