TinyBase logoTinyBase

addSliceIdsListener

The addSliceIdsListener method registers a listener function with the Indexes object that will be called whenever the Slice Ids in an Index change.

addSliceIdsListener(
  indexId: IdOrNull,
  listener: SliceIdsListener,
): Id
TypeDescription
indexIdIdOrNull

The Id of the Index to listen to, or null as a wildcard.

listenerSliceIdsListener

The function that will be called whenever the Slice Ids in the Index change.

returnsId

A unique Id for the listener that can later be used to remove it.

You can either listen to a single Index (by specifying the Index Id as the method's first parameter), or changes to any Index (by providing a null wildcard).

The provided listener is a SliceIdsListener function, and will be called with a reference to the Indexes object, and the Id of the Index that changed.

Examples

This example creates a Store, an Indexes object, and then registers a listener that responds to any changes to a specific Index.

const store = createStore().setTable('pets', {
  fido: {species: 'dog'},
  felix: {species: 'cat'},
  cujo: {species: 'dog'},
});

const indexes = createIndexes(store);
indexes.setIndexDefinition('bySpecies', 'pets', 'species');

const listenerId = indexes.addSliceIdsListener(
  'bySpecies',
  (indexes, indexId) => {
    console.log('Slice Ids for bySpecies index changed');
    console.log(indexes.getSliceIds('bySpecies'));
  },
);

store.setRow('pets', 'lowly', {species: 'worm'});
// -> 'Slice Ids for bySpecies index changed'
// -> ['dog', 'cat', 'worm']

indexes.delListener(listenerId);

This example creates a Store, an Indexes object, and then registers a listener that responds to any changes to any Index.

const store = createStore().setTable('pets', {
  fido: {species: 'dog', color: 'brown'},
  felix: {species: 'cat', color: 'black'},
  cujo: {species: 'dog', color: 'brown'},
});

const indexes = createIndexes(store)
  .setIndexDefinition('bySpecies', 'pets', 'species')
  .setIndexDefinition('byColor', 'pets', 'color');

const listenerId = indexes.addSliceIdsListener(
  null,
  (indexes, indexId) => {
    console.log(`Slice Ids for ${indexId} index changed`);
    console.log(indexes.getSliceIds(indexId));
  },
);

store.setRow('pets', 'lowly', {species: 'worm', color: 'pink'});
// -> 'Slice Ids for bySpecies index changed'
// -> ['dog', 'cat', 'worm']
// -> 'Slice Ids for byColor index changed'
// -> ['brown', 'black', 'pink']

indexes.delListener(listenerId);