Skip to content

Commit

Permalink
use item repository for users + register item repository
Browse files Browse the repository at this point in the history
  • Loading branch information
madsrasmussen committed Nov 15, 2023
1 parent 64565ea commit 1969833
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 62 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { UmbDataTypeItemServerDataSource } from './data-type-item.server.data.js';
import { UMB_DATA_TYPE_ITEM_STORE_CONTEXT } from './data-type-item.store.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbItemRepository, UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository';
import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository';
import { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/backend-api';

export class UmbDataTypeItemRepository
extends UmbItemRepositoryBase
implements UmbItemRepository<DataTypeItemResponseModel>
{
export class UmbDataTypeItemRepository extends UmbItemRepositoryBase<DataTypeItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, UmbDataTypeItemServerDataSource, UMB_DATA_TYPE_ITEM_STORE_CONTEXT);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { UMB_USER_ITEM_REPOSITORY_ALIAS } from '../../repository/index.js';
import { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input';
import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api';
import { UMB_USER_PICKER_MODAL } from '@umbraco-cms/backoffice/modal';
import { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api';

export class UmbUserPickerContext extends UmbPickerInputContext<UserItemResponseModel> {
constructor(host: UmbControllerHostElement) {
super(host, 'Umb.Repository.User', UMB_USER_PICKER_MODAL);
super(host, UMB_USER_ITEM_REPOSITORY_ALIAS, UMB_USER_PICKER_MODAL);
}
}
1 change: 1 addition & 0 deletions src/packages/user/user/repository/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export * from './enable/enable-user.repository.js';
export * from './unlock/unlock-user.repository.js';
export * from './invite/invite-user.repository.js';
export * from './user.repository.js';
export * from './item/index.js';
3 changes: 3 additions & 0 deletions src/packages/user/user/repository/item/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export { UmbUserItemRepository } from './user-item.repository.js';
export { UMB_USER_ITEM_STORE_CONTEXT } from './user-item.store.js';
export { UMB_USER_ITEM_REPOSITORY_ALIAS, UMB_USER_ITEM_STORE_ALIAS } from './manifests.js';
22 changes: 22 additions & 0 deletions src/packages/user/user/repository/item/manifests.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { UmbUserItemStore } from './user-item.store.js';
import { UmbUserItemRepository } from './user-item.repository.js';
import { ManifestItemStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry';

export const UMB_USER_ITEM_REPOSITORY_ALIAS = 'Umb.Repository.User.Item';
export const UMB_USER_ITEM_STORE_ALIAS = 'Umb.ItemStore.User';

const itemRepository: ManifestRepository = {
type: 'repository',
alias: UMB_USER_ITEM_REPOSITORY_ALIAS,
name: 'User Item Repository',
api: UmbUserItemRepository,
};

const itemStore: ManifestItemStore = {
type: 'itemStore',
alias: UMB_USER_ITEM_STORE_ALIAS,
name: 'User Item Store',
api: UmbUserItemStore,
};

export const manifests = [itemRepository, itemStore];
41 changes: 4 additions & 37 deletions src/packages/user/user/repository/item/user-item.repository.ts
Original file line number Diff line number Diff line change
@@ -1,44 +1,11 @@
import { UmbUserRepositoryBase } from '../user-repository-base.js';
import { UmbUserItemServerDataSource } from './user-item.server.data.js';
import { UMB_USER_ITEM_STORE_CONTEXT } from './user-item.store.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbItemDataSource, UmbItemRepository } from '@umbraco-cms/backoffice/repository';
import { UmbItemRepositoryBase } from '@umbraco-cms/backoffice/repository';
import { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api';

export class UmbUserItemRepository extends UmbUserRepositoryBase implements UmbItemRepository<UserItemResponseModel> {
#itemSource: UmbItemDataSource<UserItemResponseModel>;

export class UmbUserItemRepository extends UmbItemRepositoryBase<UserItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host);
this.#itemSource = new UmbUserItemServerDataSource(host);
}

/**
* Requests the user items for the given ids
* @param {Array<string>} ids
* @return {*}
* @memberof UmbUserItemRepository
*/
async requestItems(ids: Array<string>) {
if (!ids) throw new Error('Ids are missing');
await this.init;

const { data, error } = await this.#itemSource.getItems(ids);

if (data) {
this.itemStore?.appendItems(data);
}

return { data, error, asObservable: () => this.itemStore!.items(ids) };
}

/**
* Returns a promise with an observable of the user items for the given ids
* @param {Array<string>} ids
* @return {Promise<Observable<ItemResponseModelBaseModel[]>>}
* @memberof UmbUserItemRepository
*/
async items(ids: Array<string>) {
await this.init;
return this.itemStore!.items(ids);
super(host, UmbUserItemServerDataSource, UMB_USER_ITEM_STORE_CONTEXT);
}
}
8 changes: 2 additions & 6 deletions src/packages/user/user/repository/item/user-item.store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,12 @@ export class UmbUserItemStore
* @memberof UmbUserItemStore
*/
constructor(host: UmbControllerHostElement) {
super(
host,
UMB_USER_ITEM_STORE_CONTEXT_TOKEN.toString(),
new UmbArrayState<UserItemResponseModel>([], (x) => x.id)
);
super(host, UMB_USER_ITEM_STORE_CONTEXT.toString(), new UmbArrayState<UserItemResponseModel>([], (x) => x.id));
}

items(ids: Array<string>) {
return this._data.asObservablePart((items) => items.filter((item) => ids.includes(item.id ?? '')));
}
}

export const UMB_USER_ITEM_STORE_CONTEXT_TOKEN = new UmbContextToken<UmbUserItemStore>('UmbUserItemStore');
export const UMB_USER_ITEM_STORE_CONTEXT = new UmbContextToken<UmbUserItemStore>('UmbUserItemStore');
13 changes: 3 additions & 10 deletions src/packages/user/user/repository/manifests.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { UmbUserRepository } from './user.repository.js';
import { UmbUserItemStore } from './item/user-item.store.js';
import { UmbUserStore } from './user.store.js';
import { UmbDisableUserRepository } from './disable/disable-user.repository.js';
import { UmbEnableUserRepository } from './enable/enable-user.repository.js';
import { UmbChangeUserPasswordRepository } from './change-password/change-user-password.repository.js';
import { UmbUnlockUserRepository } from './unlock/unlock-user.repository.js';
import { UmbInviteUserRepository } from './invite/invite-user.repository.js';
import type { ManifestStore, ManifestRepository, ManifestItemStore } from '@umbraco-cms/backoffice/extension-registry';
import { manifests as itemManifests } from './item/manifests.js';
import type { ManifestStore, ManifestRepository } from '@umbraco-cms/backoffice/extension-registry';

export const USER_REPOSITORY_ALIAS = 'Umb.Repository.User';
const repository: ManifestRepository = {
Expand Down Expand Up @@ -63,13 +63,6 @@ const store: ManifestStore = {
api: UmbUserStore,
};

const itemStore: ManifestItemStore = {
type: 'itemStore',
alias: 'Umb.ItemStore.User',
name: 'User Store',
api: UmbUserItemStore,
};

export const manifests = [
repository,
disableRepository,
Expand All @@ -78,5 +71,5 @@ export const manifests = [
unlockRepository,
inviteRepository,
store,
itemStore,
...itemManifests,
];
6 changes: 3 additions & 3 deletions src/packages/user/user/repository/user-repository-base.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { UMB_USER_STORE_CONTEXT_TOKEN, UmbUserStore } from './user.store.js';
import { UMB_USER_ITEM_STORE_CONTEXT_TOKEN, UmbUserItemStore } from './item/user-item.store.js';
import { UMB_USER_ITEM_STORE_CONTEXT, UmbUserItemStore } from './item/user-item.store.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UMB_NOTIFICATION_CONTEXT_TOKEN, UmbNotificationContext } from '@umbraco-cms/backoffice/notification';
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
Expand All @@ -19,13 +19,13 @@ export class UmbUserRepositoryBase extends UmbRepositoryBase {
this.detailStore = instance;
}).asPromise(),

this.consumeContext(UMB_USER_ITEM_STORE_CONTEXT_TOKEN, (instance) => {
this.consumeContext(UMB_USER_ITEM_STORE_CONTEXT, (instance) => {
this.itemStore = instance;
}).asPromise(),

this.consumeContext(UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => {
this.notificationContext = instance;
}).asPromise()
}).asPromise(),
]);
}
}

0 comments on commit 1969833

Please sign in to comment.