Introduction
When we are managing entity state (Customer
s, Friend
s, Message
s, User
s, Task
s, etc.) quite often we wish to mark some of them as active
.
For example Facebook shows which friends are currently active
.
In this guide we will review how active Todo
entities are managed with the Firefly Semantics Slice Active Entity API.
We will be using a pure Typescript Stackblitz playground for the guide examples.
We recommend opening the Stackblitz in a separate tab and trying out the examples while going through this guide.
Adding Active Entities
The Todo entity model we will be using is as follows.
export class Todo {
constructor(
public complete: boolean,
public title: string,
public gid?: string
) {}
}
Let’s add a few Todo
entity instances to our entity todoStore
.
const todoStore: EStore<Todo> = new EStore<Todo>();
const todo1 = new Todo(false, 'Finish it!');
const todo2 = new Todo(false, 'Just do it!');
const todos = [todo1, todo2];
And also track both entities as being active.
todoStore.addActive(todo1);
todoStore.addActive(todo2);
We are now tracking both entities as being active
.
Since the active
entities are indexed by their global id (gid
), we can can retrieve an active entity is from our entity store active:Map
instance like this.
const active1 = todoStore.active.get(todo1.gid);
console.log(active1);
We can also retrieve a snapshot of all active entities like this.
const activeTodos: Todo[] = todoStore.activeSnapshot();
console.log(activeTodos);
Deleting Active Entities
We can remove an active entity like this.
todoStore.deleteActive(todo1);
Note that even though it has been removed from the Map
of active
Todo
instances, it is still in the todoStore
.
If we wanted to remove it from the store we would need to call todoStore.delete(todo1)
and this would also remove it from our Map
of active
entities.
Observing Active Entities
We can observe our active entities.
let active$: Observable<Map<string, Todo>> = todoStore.observeActive();
active$.subscribe((m: Map<string, Todo>) => {
const activeTodos: Todo[] = Array.from(m.values());
//console.log(`OBSERVED ENTITIES`);
//console.log(JSON.stringify(activeTodos));
});
After adding the above subscription
the activeTodos
array will be logged immediately.
If we add another Todo
instance to the store and also mark it as active the subscription will fire again.
todoStore.post(todo3);
todoStore.addActive(todo3);
If we remove an active
entity the subscription
will fire with the entity removed.
todoStore.deleteActive(todo3);
And if we remove a active
Todo
entity from the store, the subscription will fire letting us know that the entity has been removed from the observed active
entities as well.
todoStore.delete(todo1);