Skip to main content

Snapshot Manager

There are times when saving the local state in the server becomes useful. For example, you may want to give the user a PDF representing their local state. For such cases, Akita provides the snapshotManager API.

To get a snapshot of the whole application state, you can call the getStoresSnapshot() method:

todos.service.ts
import { snapshotManager } from '@datorama/akita';

export class TodosService {
saveState() {
this.http.post('/url', snapshotManager.getStoresSnapshot());
}
}

The getStoresSnapshot() returns an object containing the whole application state. For example:

{
"todos": {
"entities": { ... }
},
"cart": {
"entities": { ... }
},
"session": {
"firstName": "",
...
}
}

If you don't need the whole application state, you can pass the specific stores that you need:

todos.service.ts
import { snapshotManager } from '@datorama/akita';

export class TodosService {
saveState() {
const stores = ['todos', 'widgets'];
this.http.post('/url', snapshotManager.getStoresSnapshot(stores));
}
}

It also works the other way around, when you get the snapshot from the server you can save it by calling the setStoresSnapshot() method and passing the snapshot:

todos.service.ts
import { snapshotManager } from '@datorama/akita';

export class TodosService {
setSnapshotFromServer(snapshotFromServer) {
snapshotManager.setStoresSnapshot(snapshotFromServer);

// Support lazy stores
snapshotManager.setStoresSnapshot(snapshotFromServer, { lazy: true } );
}
}