From 807578d34cce7b4f22701d2d815b4bd7422914a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 20 Dec 2022 15:51:20 +0100 Subject: [PATCH] user contexts --- .../workspace-user-group.context.ts | 23 ++++++++++++++ .../workspaces/user/workspace-user.context.ts | 30 +++++++++++++++++++ .../src/core/stores/user/user-group.store.ts | 17 ++++++----- .../src/core/stores/user/user.store.ts | 21 ++++++------- 4 files changed, 74 insertions(+), 17 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user-group/workspace-user-group.context.ts create mode 100644 src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user/workspace-user.context.ts diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user-group/workspace-user-group.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user-group/workspace-user-group.context.ts new file mode 100644 index 0000000000..306c2b7c50 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user-group/workspace-user-group.context.ts @@ -0,0 +1,23 @@ +import { UmbWorkspaceNodeContext } from "../shared/workspace-context/workspace-node.context"; +import type { UmbUserGroupStore, UmbUserGroupStoreItemType } from "@umbraco-cms/stores/user/user-group.store"; + +const DefaultDataTypeData = ({ + key: '', + name: '', + icon: '', + type: 'user-group', + hasChildren: false, + parentKey: '', + sections: [], + permissions: [], + users: [], +}) as UmbUserGroupStoreItemType; + +export class UmbWorkspaceDataTypeContext extends UmbWorkspaceNodeContext { + + constructor(target:HTMLElement, entityKey: string) { + super(target, DefaultDataTypeData, 'umbUserStore', entityKey); + } +} + + diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user/workspace-user.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user/workspace-user.context.ts new file mode 100644 index 0000000000..c50b0131ef --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/workspaces/user/workspace-user.context.ts @@ -0,0 +1,30 @@ +import { UmbWorkspaceNodeContext } from "../shared/workspace-context/workspace-node.context"; +import type { UmbUserStore, UmbUserStoreItemType } from "@umbraco-cms/stores/user/user.store"; + + +const DefaultDataTypeData = ({ + key: '', + name: '', + icon: '', + type: 'user', + hasChildren: false, + parentKey: '', + email: '', + language: '', + status: 'enabled', + updateDate: '8/27/2022', + createDate: '9/19/2022', + failedLoginAttempts: 0, + userGroups: [], + contentStartNodes: [], + mediaStartNodes: [], +}) as UmbUserStoreItemType; + +export class UmbWorkspaceDataTypeContext extends UmbWorkspaceNodeContext { + + constructor(target:HTMLElement, entityKey: string) { + super(target, DefaultDataTypeData, 'umbUserStore', entityKey); + } +} + + diff --git a/src/Umbraco.Web.UI.Client/src/core/stores/user/user-group.store.ts b/src/Umbraco.Web.UI.Client/src/core/stores/user/user-group.store.ts index ca16033b76..12b3542b50 100644 --- a/src/Umbraco.Web.UI.Client/src/core/stores/user/user-group.store.ts +++ b/src/Umbraco.Web.UI.Client/src/core/stores/user/user-group.store.ts @@ -2,14 +2,17 @@ import { map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../store'; import type { UserGroupDetails, UserGroupEntity } from '@umbraco-cms/models'; +// TODO: get rid of this type addition & { ... }: +export type UmbUserGroupStoreItemType = UserGroupDetails & { users?: Array }; + /** * @export * @class UmbUserGroupStore * @extends {UmbDataStoreBase} * @description - Data Store for Users */ -export class UmbUserGroupStore extends UmbDataStoreBase { - getAll(): Observable> { +export class UmbUserGroupStore extends UmbDataStoreBase { + getAll(): Observable> { // TODO: use Fetcher API. // TODO: only fetch if the data type is not in the store? fetch(`/umbraco/backoffice/user-groups/list/items`) @@ -21,7 +24,7 @@ export class UmbUserGroupStore extends UmbDataStoreBase { return this.items; } - getByKey(key: string): Observable { + getByKey(key: string): Observable { // TODO: use Fetcher API. // TODO: only fetch if the data type is not in the store? fetch(`/umbraco/backoffice/user-groups/details/${key}`) @@ -32,8 +35,8 @@ export class UmbUserGroupStore extends UmbDataStoreBase { return this.items.pipe( map( - (userGroups: Array) => - userGroups.find((userGroup: UserGroupDetails) => userGroup.key === key) || null + (userGroups: Array) => + userGroups.find((userGroup: UmbUserGroupStoreItemType) => userGroup.key === key) || null ) ); } @@ -47,11 +50,11 @@ export class UmbUserGroupStore extends UmbDataStoreBase { }); return this.items.pipe( - map((items: Array) => items.filter((node: UserGroupDetails) => keys.includes(node.key))) + map((items: Array) => items.filter((node: UmbUserGroupStoreItemType) => keys.includes(node.key))) ); } - async save(userGroups: Array): Promise { + async save(userGroups: Array): Promise { // TODO: use Fetcher API. try { const res = await fetch('/umbraco/backoffice/user-groups/save', { diff --git a/src/Umbraco.Web.UI.Client/src/core/stores/user/user.store.ts b/src/Umbraco.Web.UI.Client/src/core/stores/user/user.store.ts index da141ab85c..154b740d33 100644 --- a/src/Umbraco.Web.UI.Client/src/core/stores/user/user.store.ts +++ b/src/Umbraco.Web.UI.Client/src/core/stores/user/user.store.ts @@ -2,6 +2,7 @@ import { BehaviorSubject, map, Observable } from 'rxjs'; import { UmbDataStoreBase } from '../store'; import type { UserDetails } from '@umbraco-cms/models'; +export type UmbUserStoreItemType = UserDetails; /** * @export @@ -9,11 +10,11 @@ import type { UserDetails } from '@umbraco-cms/models'; * @extends {UmbDataStoreBase} * @description - Data Store for Users */ -export class UmbUserStore extends UmbDataStoreBase { +export class UmbUserStore extends UmbDataStoreBase { private _totalUsers: BehaviorSubject = new BehaviorSubject(0); public readonly totalUsers: Observable = this._totalUsers.asObservable(); - getAll(): Observable> { + getAll(): Observable> { // TODO: use Fetcher API. // TODO: only fetch if the data type is not in the store? fetch(`/umbraco/backoffice/users/list/items`) @@ -32,7 +33,7 @@ export class UmbUserStore extends UmbDataStoreBase { * @return {*} {(Observable)} * @memberof UmbDataTypeStore */ - getByKey(key: string): Observable { + getByKey(key: string): Observable { // TODO: use Fetcher API. // TODO: only fetch if the data type is not in the store? fetch(`/umbraco/backoffice/users/details/${key}`) @@ -42,11 +43,11 @@ export class UmbUserStore extends UmbDataStoreBase { }); return this.items.pipe( - map((items: Array) => items.find((node: UserDetails) => node.key === key) || null) + map((items: Array) => items.find((node: UmbUserStoreItemType) => node.key === key) || null) ); } - getByKeys(keys: Array): Observable> { + getByKeys(keys: Array): Observable> { const params = keys.map((key) => `key=${key}`).join('&'); fetch(`/umbraco/backoffice/users/getByKeys?${params}`) .then((res) => res.json()) @@ -55,11 +56,11 @@ export class UmbUserStore extends UmbDataStoreBase { }); return this.items.pipe( - map((items: Array) => items.filter((node: UserDetails) => keys.includes(node.key))) + map((items: Array) => items.filter((node: UmbUserStoreItemType) => keys.includes(node.key))) ); } - getByName(name: string): Observable> { + getByName(name: string): Observable> { name = name.trim(); name = name.toLocaleLowerCase(); @@ -191,7 +192,7 @@ export class UmbUserStore extends UmbDataStoreBase { } } - async save(users: Array): Promise { + async save(users: Array): Promise { // TODO: use Fetcher API. try { const res = await fetch('/umbraco/backoffice/users/save', { @@ -208,7 +209,7 @@ export class UmbUserStore extends UmbDataStoreBase { } } - async invite(name: string, email: string, message: string, userGroups: Array): Promise { + async invite(name: string, email: string, message: string, userGroups: Array): Promise { // TODO: use Fetcher API. try { const res = await fetch('/umbraco/backoffice/users/invite', { @@ -218,7 +219,7 @@ export class UmbUserStore extends UmbDataStoreBase { 'Content-Type': 'application/json', }, }); - const json = (await res.json()) as UserDetails[]; + const json = (await res.json()) as UmbUserStoreItemType[]; this.updateItems(json); return json[0]; } catch (error) {