We want the ability to observe reactive Firefly Semantics Slice Object Store Events filtered by property name
and value
.
Approach
Use the onFilteredEvent<E>
function provided as part of the Firefly Semantics Slice utility library. It is defined like this.
export function onFilteredEvent<E>(
value: any,
propertyName: string,
obs: Observable<E>): Observable<E> {
return obs.pipe(
filter((e) => !!(e && e[propertyName] === value)));
);
}
The RxJS filter
expression checks that the event (e
) is defined and that the value
argument matches the value identified by the propertyName
argument. The obs
argument is the Observable argument provided by the Firefly Semantics Slice Object Store.
Demo
In this demo we created a NamedEvent type that has a name property that we will be targeting.
export type NamedEvent = { name: string }; const namedEvent: NamedEvent = { name: 'hilde' }; We also created the instance namedEvent setting name to hilde . We use it to initialize our object store.
const START: OStoreStart = {
event: { value: namedEvent },
};
interface ISTART extends KeyObsValueReset {
event: ObsValueReset;
}
let OS: OStore<ISTART> = new OStore(START);
We can now filter for events
where the property name is set to hilde
like this:
const hildeEvents$: Observable<NamedEvent> = onFilteredEvent<NamedEvent>(
'hilde',
'name',
OS.S.event.obs
);