diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/user.store.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/user.store.ts index 7399a86e63..34722f93f1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/user.store.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/user.store.ts @@ -1,8 +1,8 @@ -import { map, Observable } from 'rxjs'; -import { UmbDataStoreBase } from '../../../core/stores/store'; +import { BehaviorSubject, map, Observable } from 'rxjs'; import type { UserDetails } from '@umbraco-cms/models'; -import { UniqueBehaviorSubject } from '@umbraco-cms/observable-api'; +import { createObservablePart, UniqueArrayBehaviorSubject, UniqueBehaviorSubject } from '@umbraco-cms/observable-api'; import { UmbContextToken } from '@umbraco-cms/context-api'; +import { UmbStoreBase } from '@umbraco-cms/stores/store-base'; export type UmbUserStoreItemType = UserDetails; @@ -14,10 +14,13 @@ export const STORE_ALIAS = 'UmbUserStore'; * @extends {UmbDataStoreBase} * @description - Data Store for Users */ -export class UmbUserStore extends UmbDataStoreBase { - public readonly storeAlias = STORE_ALIAS; - #totalUsers = new UniqueBehaviorSubject(0); +export class UmbUserStore extends UmbStoreBase { + + #users = new UniqueArrayBehaviorSubject([]); + public users = this.#users.asObservable(); + + #totalUsers = new BehaviorSubject(0); public readonly totalUsers = this.#totalUsers.asObservable(); getAll(): Observable> { @@ -27,14 +30,14 @@ export class UmbUserStore extends UmbDataStoreBase { .then((res) => res.json()) .then((data) => { this.#totalUsers.next(data.total); - this.updateItems(data.items); + this.#users.next(data.items); }); - return this.items; + return this.users; } /** - * @description - Request a Data Type by key. The Data Type is added to the store and is returned as an Observable. + * @description - Request a User by key. The User is added to the store and is returned as an Observable. * @param {string} key * @return {*} {(Observable)} * @memberof UmbDataTypeStore @@ -45,12 +48,10 @@ export class UmbUserStore extends UmbDataStoreBase { fetch(`/umbraco/backoffice/users/details/${key}`) .then((res) => res.json()) .then((data) => { - this.updateItems([data]); + this.#users.appendOne(data); }); - return this.items.pipe( - map((items: Array) => items.find((node: UmbUserStoreItemType) => node.key === key) || null) - ); + return createObservablePart(this.#users, (users: Array) => users.find((user: UmbUserStoreItemType) => user.key === key) || null); } getByKeys(keys: Array): Observable> { @@ -58,12 +59,10 @@ export class UmbUserStore extends UmbDataStoreBase { fetch(`/umbraco/backoffice/users/getByKeys?${params}`) .then((res) => res.json()) .then((data) => { - this.updateItems(data); + this.#users.append(data); }); - return this.items.pipe( - map((items: Array) => items.filter((node: UmbUserStoreItemType) => keys.includes(node.key))) - ); + return createObservablePart(this.#users, (users: Array) => users.filter((user: UmbUserStoreItemType) => keys.includes(user.key))); } getByName(name: string): Observable> { @@ -74,16 +73,14 @@ export class UmbUserStore extends UmbDataStoreBase { fetch(`/umbraco/backoffice/users/getByName?${params}`) .then((res) => res.json()) .then((data) => { - this.updateItems(data); + this.#users.append(data); }); - return this.items.pipe( - map((items: Array) => - items.filter((node: UserDetails) => node.name.toLocaleLowerCase().includes(name)) - ) - ); + return createObservablePart(this.#users, (users: Array) => users.filter((user: UmbUserStoreItemType) => user.name.toLocaleLowerCase().includes(name))); } + // TODO: Continue here: + async enableUsers(userKeys: Array): Promise { // TODO: use Fetcher API. try {