Fontes de dados
Infraestrutura compartilhada de dados
Data Source Engine é uma infraestrutura compartilhada. Não pertence exclusivamente ao DyonaForm: qualquer código da aplicação pode usar executeDyonaDataSource com um DyonaDataSourceExecutor para executar e validar uma troca tipada de request/result.
DYONA valida e transporta requests e results. A aplicação consumidora é responsável por HTTP, fetch ou Axios, URLs, autenticação, tokens e transformação de respostas. DYONA não faz fetch automaticamente.
Contrato público
sourceId identifica uma fonte na aplicação consumidora. DyonaDataSourceExecutor recebe um request tipado e retorna um result tipado correspondente, de forma síncrona ou como promise. executeDyonaDataSource valida os dois lados dessa troca antes de retornar o result.
As únicas operations atuais são:
options.searchoptions.resolve
options.search recebe input.searchText e retorna um array de opções {label, value, secondaryLabel?}. options.resolve recebe input.value e retorna uma opção ou null.
O value de uma opção pode ser string, number ou boolean. Seu tipo é preservado estritamente: um result de resolve deve retornar exatamente o value solicitado, e 102 é diferente de '102'. result.operation deve corresponder à operation solicitada.
Quando presente, secondaryLabel é uma string usada apenas para apresentação secundária no dropdown de RemoteAutocomplete. O input selecionado continua mostrando label e value não muda.
request.context é um objeto opcional fornecido por quem chama para o contexto da aplicação, como um nome de field ou values atuais. request.signal é um AbortSignal; passe-o ao trabalho cancelável, como fetch, para cancelar um request substituído.
Exemplo completo
import {
executeDyonaDataSource,
type DyonaDataSourceExecutor,
} from '@typhonsoftware/dyona-form';
const customers = [
{value: 102, label: 'Taylor Reed'},
{value: 103, label: 'Jordan Lee'},
];
const dataSourceExecutor: DyonaDataSourceExecutor = async (request) => {
if (request.operation === 'options.search') {
const searchText = request.input.searchText.toLowerCase();
return {
operation: 'options.search',
data: customers.filter((customer) =>
customer.label.toLowerCase().includes(searchText),
),
};
}
return {
operation: 'options.resolve',
data: customers.find((customer) =>
customer.value === request.input.value,
) ?? null,
};
};
const controller = new AbortController();
const result = await executeDyonaDataSource({
sourceId: 'customers',
operation: 'options.search',
input: {searchText: 'tay'},
context: {fieldName: 'customerId', values: {}},
signal: controller.signal,
}, dataSourceExecutor);
Em uma aplicação real, substitua a busca local dentro do executor pelo seu próprio transporte e mapeamento de respostas, preservando o contrato de request e result.
Ver dentro do DyonaForm
- Autocomplete remoto
- Abrir Autocomplete remoto no Lab — um caso real em que Data Source Engine é usado dentro do
DyonaForm.
Testar fora do DyonaForm
- Abrir Fontes de dados no Lab — execute o Data Source Engine diretamente a partir do código da aplicação.