user contexts

This commit is contained in:
Niels Lyngsø
2022-12-20 15:51:20 +01:00
parent 88f34fe4a8
commit 807578d34c
4 changed files with 74 additions and 17 deletions

View File

@@ -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<UmbUserGroupStoreItemType, UmbUserGroupStore> {
constructor(target:HTMLElement, entityKey: string) {
super(target, DefaultDataTypeData, 'umbUserStore', entityKey);
}
}

View File

@@ -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<UmbUserStoreItemType, UmbUserStore> {
constructor(target:HTMLElement, entityKey: string) {
super(target, DefaultDataTypeData, 'umbUserStore', entityKey);
}
}

View File

@@ -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<string> };
/**
* @export
* @class UmbUserGroupStore
* @extends {UmbDataStoreBase<UserGroupEntity>}
* @description - Data Store for Users
*/
export class UmbUserGroupStore extends UmbDataStoreBase<UserGroupDetails> {
getAll(): Observable<Array<UserGroupDetails>> {
export class UmbUserGroupStore extends UmbDataStoreBase<UmbUserGroupStoreItemType> {
getAll(): Observable<Array<UmbUserGroupStoreItemType>> {
// 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<UserGroupDetails> {
return this.items;
}
getByKey(key: string): Observable<UserGroupDetails | null> {
getByKey(key: string): Observable<UmbUserGroupStoreItemType | null> {
// 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<UserGroupDetails> {
return this.items.pipe(
map(
(userGroups: Array<UserGroupDetails>) =>
userGroups.find((userGroup: UserGroupDetails) => userGroup.key === key) || null
(userGroups: Array<UmbUserGroupStoreItemType>) =>
userGroups.find((userGroup: UmbUserGroupStoreItemType) => userGroup.key === key) || null
)
);
}
@@ -47,11 +50,11 @@ export class UmbUserGroupStore extends UmbDataStoreBase<UserGroupDetails> {
});
return this.items.pipe(
map((items: Array<UserGroupDetails>) => items.filter((node: UserGroupDetails) => keys.includes(node.key)))
map((items: Array<UmbUserGroupStoreItemType>) => items.filter((node: UmbUserGroupStoreItemType) => keys.includes(node.key)))
);
}
async save(userGroups: Array<UserGroupDetails>): Promise<void> {
async save(userGroups: Array<UmbUserGroupStoreItemType>): Promise<void> {
// TODO: use Fetcher API.
try {
const res = await fetch('/umbraco/backoffice/user-groups/save', {

View File

@@ -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<UserDetails>}
* @description - Data Store for Users
*/
export class UmbUserStore extends UmbDataStoreBase<UserDetails> {
export class UmbUserStore extends UmbDataStoreBase<UmbUserStoreItemType> {
private _totalUsers: BehaviorSubject<number> = new BehaviorSubject(0);
public readonly totalUsers: Observable<number> = this._totalUsers.asObservable();
getAll(): Observable<Array<UserDetails>> {
getAll(): Observable<Array<UmbUserStoreItemType>> {
// 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<UserDetails> {
* @return {*} {(Observable<DataTypeDetails | null>)}
* @memberof UmbDataTypeStore
*/
getByKey(key: string): Observable<UserDetails | null> {
getByKey(key: string): Observable<UmbUserStoreItemType | null> {
// 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<UserDetails> {
});
return this.items.pipe(
map((items: Array<UserDetails>) => items.find((node: UserDetails) => node.key === key) || null)
map((items: Array<UmbUserStoreItemType>) => items.find((node: UmbUserStoreItemType) => node.key === key) || null)
);
}
getByKeys(keys: Array<string>): Observable<Array<UserDetails>> {
getByKeys(keys: Array<string>): Observable<Array<UmbUserStoreItemType>> {
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<UserDetails> {
});
return this.items.pipe(
map((items: Array<UserDetails>) => items.filter((node: UserDetails) => keys.includes(node.key)))
map((items: Array<UmbUserStoreItemType>) => items.filter((node: UmbUserStoreItemType) => keys.includes(node.key)))
);
}
getByName(name: string): Observable<Array<UserDetails>> {
getByName(name: string): Observable<Array<UmbUserStoreItemType>> {
name = name.trim();
name = name.toLocaleLowerCase();
@@ -191,7 +192,7 @@ export class UmbUserStore extends UmbDataStoreBase<UserDetails> {
}
}
async save(users: Array<UserDetails>): Promise<void> {
async save(users: Array<UmbUserStoreItemType>): Promise<void> {
// TODO: use Fetcher API.
try {
const res = await fetch('/umbraco/backoffice/users/save', {
@@ -208,7 +209,7 @@ export class UmbUserStore extends UmbDataStoreBase<UserDetails> {
}
}
async invite(name: string, email: string, message: string, userGroups: Array<string>): Promise<UserDetails | null> {
async invite(name: string, email: string, message: string, userGroups: Array<string>): Promise<UmbUserStoreItemType | null> {
// TODO: use Fetcher API.
try {
const res = await fetch('/umbraco/backoffice/users/invite', {
@@ -218,7 +219,7 @@ export class UmbUserStore extends UmbDataStoreBase<UserDetails> {
'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) {