Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Commit f2a09c0

Browse files
committed
member composition
1 parent e115df4 commit f2a09c0

File tree

8 files changed

+159
-8
lines changed

8 files changed

+159
-8
lines changed
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import './components/index.js';
22

3-
export * from './workspace/index.js';
43
export * from './components/index.js';
5-
export * from './repository/index.js';
64
export * from './entity.js';
7-
export * from './tree/index.js';
85
export * from './modal/member-type-picker-modal.token.js';
9-
10-
export type { UmbMemberTypeDetailModel } from './types.js';
6+
export * from './repository/index.js';
7+
export * from './tree/index.js';
8+
export * from './types.js';
9+
export * from './workspace/index.js';
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS } from './manifests.js';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { ManifestRepository, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
2+
3+
export const UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS = 'Umb.Repository.MemberType.Composition';
4+
5+
const compositionRepository: ManifestRepository = {
6+
type: 'repository',
7+
alias: UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS,
8+
name: 'Member Type Composition Repository',
9+
api: () => import('./member-type-composition.repository.js'),
10+
};
11+
12+
export const manifests: Array<ManifestTypes> = [compositionRepository];
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { UmbMemberTypeCompositionServerDataSource } from './member-type-composition.server.data-source.js';
2+
import type { UmbContentTypeCompositionRepository } from '@umbraco-cms/backoffice/content-type';
3+
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
4+
import type {
5+
UmbMemberTypeAvailableCompositionRequestModel,
6+
UmbMemberTypeCompositionCompatibleModel,
7+
UmbMemberTypeCompositionReferenceModel,
8+
} from '@umbraco-cms/backoffice/member-type';
9+
import { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';
10+
11+
export class UmbMemberTypeCompositionRepository
12+
extends UmbRepositoryBase
13+
implements
14+
UmbContentTypeCompositionRepository<
15+
UmbMemberTypeCompositionReferenceModel,
16+
UmbMemberTypeCompositionCompatibleModel,
17+
UmbMemberTypeAvailableCompositionRequestModel
18+
>
19+
{
20+
#compositionSource: UmbMemberTypeCompositionServerDataSource;
21+
22+
constructor(host: UmbControllerHost) {
23+
super(host);
24+
this.#compositionSource = new UmbMemberTypeCompositionServerDataSource(this);
25+
}
26+
27+
async getReferences(unique: string) {
28+
return this.#compositionSource.getReferences(unique);
29+
}
30+
31+
async availableCompositions(args: UmbMemberTypeAvailableCompositionRequestModel) {
32+
return this.#compositionSource.availableCompositions(args);
33+
}
34+
}
35+
36+
export { UmbMemberTypeCompositionRepository as api };
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import type {
2+
UmbMemberTypeCompositionCompatibleModel,
3+
UmbMemberTypeCompositionReferenceModel,
4+
UmbMemberTypeAvailableCompositionRequestModel,
5+
} from '../../types.js';
6+
import {
7+
type MemberTypeCompositionRequestModel,
8+
MemberTypeService,
9+
} from '@umbraco-cms/backoffice/external/backend-api';
10+
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
11+
import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';
12+
import type { UmbContentTypeCompositionDataSource } from '@umbraco-cms/backoffice/content-type';
13+
14+
/**
15+
* A data source for the Member Type Composition that fetches data from the server
16+
* @export
17+
* @class UmbMemberTypeCompositionServerDataSource
18+
*/
19+
export class UmbMemberTypeCompositionServerDataSource
20+
implements
21+
UmbContentTypeCompositionDataSource<
22+
UmbMemberTypeCompositionReferenceModel,
23+
UmbMemberTypeCompositionCompatibleModel,
24+
UmbMemberTypeAvailableCompositionRequestModel
25+
>
26+
{
27+
#host: UmbControllerHost;
28+
29+
/**
30+
* Creates an instance of UmbMemberTypeCompositionServerDataSource.
31+
* @param {UmbControllerHost} host
32+
* @memberof UmbMemberTypeCompositionServerDataSource
33+
*/
34+
constructor(host: UmbControllerHost) {
35+
this.#host = host;
36+
}
37+
/**
38+
* Fetches the compatible compositions for a document type from the server
39+
* @param {string} unique
40+
* @return {*}
41+
* @memberof UmbMemberTypeCompositionServerDataSource
42+
*/
43+
async getReferences(unique: string) {
44+
const response = await tryExecuteAndNotify(
45+
this.#host,
46+
MemberTypeService.getMemberTypeByIdCompositionReferences({ id: unique }),
47+
);
48+
const error = response.error;
49+
const data: Array<UmbMemberTypeCompositionReferenceModel> | undefined = response.data?.map((reference) => {
50+
return {
51+
unique: reference.id,
52+
icon: reference.icon,
53+
name: reference.name,
54+
};
55+
});
56+
57+
return { data, error };
58+
}
59+
/**
60+
* Updates the compositions for a document type on the server
61+
* @param {MemberTypeCompositionRequestModel} requestBody
62+
* @return {*}
63+
* @memberof UmbMemberTypeCompositionServerDataSource
64+
*/
65+
async availableCompositions(args: UmbMemberTypeAvailableCompositionRequestModel) {
66+
const requestBody: MemberTypeCompositionRequestModel = {
67+
id: args.unique,
68+
currentCompositeIds: args.currentCompositeUniques,
69+
currentPropertyAliases: args.currentPropertyAliases,
70+
};
71+
72+
const response = await tryExecuteAndNotify(
73+
this.#host,
74+
MemberTypeService.postMemberTypeAvailableCompositions({ requestBody }),
75+
);
76+
const error = response.error;
77+
const data: Array<UmbMemberTypeCompositionCompatibleModel> | undefined = response.data?.map((composition) => {
78+
return {
79+
unique: composition.id,
80+
name: composition.name,
81+
icon: composition.icon,
82+
folderPath: composition.folderPath,
83+
isCompatible: composition.isCompatible,
84+
};
85+
});
86+
87+
return { data, error };
88+
}
89+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { UmbMemberTypeDetailRepository, UMB_MEMBER_TYPE_DETAIL_REPOSITORY_ALIAS } from './detail/index.js';
22
export { UmbMemberTypeItemRepository, UMB_MEMBER_TYPE_ITEM_REPOSITORY_ALIAS } from './item/index.js';
3+
export { UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS } from './composition/index.js';
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
import type { UmbMemberTypeEntityType } from './entity.js';
2-
import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
2+
import type {
3+
UmbContentTypeAvailableCompositionRequestModel,
4+
UmbContentTypeCompositionCompatibleModel,
5+
UmbContentTypeCompositionReferenceModel,
6+
UmbContentTypeModel,
7+
} from '@umbraco-cms/backoffice/content-type';
38

49
export interface UmbMemberTypeDetailModel extends UmbContentTypeModel {
510
entityType: UmbMemberTypeEntityType;
611
}
12+
13+
export interface UmbMemberTypeAvailableCompositionRequestModel extends UmbContentTypeAvailableCompositionRequestModel {}
14+
15+
export interface UmbMemberTypeCompositionCompatibleModel extends UmbContentTypeCompositionCompatibleModel {}
16+
17+
export interface UmbMemberTypeCompositionReferenceModel extends UmbContentTypeCompositionReferenceModel {}

src/packages/members/member-type/workspace/manifests.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import { UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS } from '../repository/index.js';
12
import type {
23
ManifestWorkspaces,
34
ManifestWorkspaceActions,
4-
ManifestWorkspaceView,
5+
ManifestWorkspaceViews,
56
ManifestTypes,
67
} from '@umbraco-cms/backoffice/extension-registry';
78
import { UmbSubmitWorkspaceAction } from '@umbraco-cms/backoffice/workspace';
@@ -19,7 +20,7 @@ const workspace: ManifestWorkspaces = {
1920
},
2021
};
2122

22-
const workspaceViews: Array<ManifestWorkspaceView> = [
23+
const workspaceViews: Array<ManifestWorkspaceViews> = [
2324
{
2425
type: 'workspaceView',
2526
kind: 'contentTypeDesignEditor',
@@ -29,6 +30,7 @@ const workspaceViews: Array<ManifestWorkspaceView> = [
2930
label: '#general_design',
3031
pathname: 'design',
3132
icon: 'icon-member-dashed-line',
33+
compositionRepositoryAlias: UMB_MEMBER_TYPE_COMPOSITION_REPOSITORY_ALIAS,
3234
},
3335
conditions: [
3436
{

0 commit comments

Comments
 (0)