I am new to Angular with Akita state management. I am trying to set the array of values to the entitystate. but for some reason only the last item in the array is getting set. But the number of values is correct. ie. i have 14 different items in the array. but in akita, the last value is set for 14 times. Not sure what am i doing wrong here. Can anyone please help with this?
export interface UserTagState extends EntityState<string, string> {
areTagsLoaded: boolean;
}
const initialState = {
areTagsLoaded: false
};
@Injectable({
providedIn: 'root'
})
@StoreConfig({ name: 'usertags' })
export class UserTagStore extends EntityStore<UserTagState> {
constructor() {
super(initialState);
}
}
facade:
@Injectable({
providedIn: 'root'
})
export class UserTagFacade {
tags$ = this.query.tagsAreLoaded$
.pipe(
filter(areTagsLoaded => !areTagsLoaded),
exhaustMap(areTagsLoaded => {
if (!areTagsLoaded) {
this.loadTags();
}
return this.query.tags$;
}),
shareReplay(1)
);
constructor(
private readonly store: UserTagStore,
private readonly query: UserTagQuery,
private readonly api: UserTagDataService
) { }
loadTags() {
this.store.setLoading(true);
this.api
.getTags()
.pipe(take(1))
.subscribe((tags) => {
this.store.setLoading(false);
this.store.set(tags); // up until here the tags array shows the correct value
this.store.update(state => ({
...state,
areTagsLoaded: true
}));
});
}
}
Query:
@Injectable({
providedIn: 'root'
})
export class UserTagQuery extends QueryEntity<UserTagState> {
tags$ = this.selectAll();
tagsAreLoaded$ = this.select(state => {
return state.areTagsLoaded;
});
constructor(protected store: UserTagStore) {
super(store);
}
}
Output:
Tags: [ "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics", "trader analytics" ]
Thanks