TinyBase logoTinyBase

addWillSetTableCallback

The addWillSetTableCallback method registers a WillSetTableCallback that will be called before any Table is set in the Store.

addWillSetTableCallback(callback: WillSetTableCallback): Middleware
TypeDescription
callbackWillSetTableCallback

The WillSetTableCallback to register.

returnsMiddleware

A reference to the Middleware object, for chaining.

The callback can transform the Table or return undefined to prevent the write. Multiple callbacks can be registered and they are called sequentially, each receiving the (possibly transformed) table from the previous callback.

Examples

This example registers a callback that upper-cases string Cell values in rows set to the 'pets' table.

import {createMiddleware, createStore} from 'tinybase';

const store = createStore();
const middleware = createMiddleware(store);

middleware.addWillSetTableCallback((tableId, table) =>
  tableId === 'pets'
    ? Object.fromEntries(
        Object.entries(table).map(([rowId, row]) => [
          rowId,
          Object.fromEntries(
            Object.entries(row).map(([k, v]) => [
              k,
              typeof v === 'string' ? v.toUpperCase() : v,
            ]),
          ),
        ]),
      )
    : table,
);

store.setTable('pets', {fido: {species: 'dog'}, felix: {species: 'cat'}});
console.log(store.getTable('pets'));
// -> {fido: {species: 'DOG'}, felix: {species: 'CAT'}}

middleware.destroy();

This example registers a callback that prevents writes to the 'species' table.

import {createMiddleware, createStore} from 'tinybase';

const store = createStore();
const middleware = createMiddleware(store);

middleware.addWillSetTableCallback((tableId, table) =>
  tableId === 'species' ? undefined : table,
);

store.setTable('species', {dog: {legs: 4, sound: 'woof'}});
console.log(store.getTables());
// -> {}

middleware.destroy();

Since

v8.0.0