Saltar al contenido principal

Actions

Pasá actions y un único actionExecutor:

  • scope: 'global' se muestra en la barra de herramientas y recibe {sourceId}.
  • Una acción normal con scope: 'record' se muestra en el menú de acciones de la fila y recibe {sourceId, record}. Con presentation: 'checkbox', se muestra directamente en la fila.
  • scope: 'selection' se muestra en la barra de herramientas solo si selectable está activo y hay filas seleccionadas.
const actions: DyonaAction[] = [
{id: 'refresh', label: 'Actualizar saldos', scope: 'global'},
{id: 'view-entry', label: 'Ver asiento', scope: 'record'},
{id: 'change-status', label: 'Cambiar estado seleccionado', scope: 'selection'},
];

Una acción de selección recibe context.selection:

{sourceId: 'current-account-invoices', selection: {
ids: ['FAC-00481', 'FAC-00482'], records: [{id: 'FAC-00481', status: 'pending'}],
}}

ids incluye todos los IDs seleccionados, incluso los de páginas remotas no cargadas. records incluye solo registros seleccionados disponibles en la caché del Grid, por lo que no tiene que coincidir uno a uno con ids.

Mientras una acción se ejecuta, las acciones del Grid se bloquean y la acción directa activa muestra un indicador de carga. onActionResult(result, action, record?) recibe resultados completos; onActionError(error, action, record?) recibe errores del executor o de ejecución.

Acciones directas record con checkbox​

Usá presentation: 'checkbox' cuando una acción record representa un estado que debe permanecer visible en cada fila:

const actions: DyonaAction[] = [
{
id: 'toggle-reviewed',
label: 'Revisado',
scope: 'record',
presentation: 'checkbox',
checkedField: 'reviewed',
checkedValue: 'S',
uncheckedValue: 'N',
},
];

El checkbox queda marcado cuando Object.is(record[checkedField], checkedValue). checkedValue y uncheckedValue son opcionales y sus defaults son true y false, respectivamente. Se admiten valores personalizados como S / N.

El executor recibe el registro original y el próximo estado solicitado mediante context.parameters:

const actionExecutor: DyonaActionExecutor = async ({context}) => {
const field = context.parameters?.field;
const value = context.parameters?.value;
const checked = context.parameters?.checked;

if (!context.record || field !== 'reviewed' || typeof checked !== 'boolean') {
return {success: false};
}

return {
success: true,
data: {rowPatch: {reviewed: value}},
};
};

Esta presentación es independiente de la selección de filas: no requiere selectable ni crea un checkbox de cabecera. Mientras se ejecuta utiliza el feedback existente de acción en curso. Las acciones record sin presentation: 'checkbox' permanecen en MoreVert; las acciones checkbox no se duplican allí.

Probar acciones checkbox directas en el Lab

Probar en el Lab