Skip to content

Commit 2d60801

Browse files
committed
implement UmbEntityDetailWorkspaceContextBase for webhook workspace
1 parent b68f1f9 commit 2d60801

File tree

1 file changed

+18
-77
lines changed

1 file changed

+18
-77
lines changed

src/packages/webhook/workspace/webhook/webhook-workspace.context.ts

Lines changed: 18 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
11
import type { UmbWebhookDetailModel, UmbWebhookEventModel } from '../../types.js';
2-
import { UmbWebhookDetailRepository } from '../../repository/index.js';
2+
import type { UmbWebhookDetailRepository } from '../../repository/index.js';
3+
import { UMB_WEBHOOK_DETAIL_REPOSITORY_ALIAS } from '../../repository/index.js';
4+
import { UMB_WEBHOOK_ENTITY_TYPE, UMB_WEBHOOK_ROOT_ENTITY_TYPE, UMB_WEBHOOK_WORKSPACE_ALIAS } from '../../entity.js';
35
import { UmbWebhookWorkspaceEditorElement } from './webhook-workspace-editor.element.js';
46
import {
57
type UmbSubmittableWorkspaceContext,
6-
UmbSubmittableWorkspaceContextBase,
78
UmbWorkspaceIsNewRedirectController,
89
type UmbRoutableWorkspaceContext,
10+
UmbEntityDetailWorkspaceContextBase,
911
} from '@umbraco-cms/backoffice/workspace';
10-
import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api';
1112
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
1213

1314
export class UmbWebhookWorkspaceContext
14-
extends UmbSubmittableWorkspaceContextBase<UmbWebhookDetailModel>
15+
extends UmbEntityDetailWorkspaceContextBase<UmbWebhookDetailModel, UmbWebhookDetailRepository>
1516
implements UmbSubmittableWorkspaceContext, UmbRoutableWorkspaceContext
1617
{
17-
public readonly repository: UmbWebhookDetailRepository = new UmbWebhookDetailRepository(this);
18-
19-
#data = new UmbObjectState<UmbWebhookDetailModel | undefined>(undefined);
20-
readonly data = this.#data.asObservable();
21-
22-
readonly unique = this.#data.asObservablePart((data) => data?.unique);
18+
readonly data = this._data.current;
19+
readonly unique = this._data.createObservablePartOfCurrent((data) => data?.unique);
2320

2421
constructor(host: UmbControllerHost) {
25-
super(host, 'Umb.Workspace.Webhook');
22+
super(host, {
23+
workspaceAlias: UMB_WEBHOOK_WORKSPACE_ALIAS,
24+
entityType: UMB_WEBHOOK_ENTITY_TYPE,
25+
detailRepositoryAlias: UMB_WEBHOOK_DETAIL_REPOSITORY_ALIAS,
26+
});
2627

2728
this.routes.setRoutes([
2829
{
2930
path: 'create',
3031
component: UmbWebhookWorkspaceEditorElement,
3132
setup: async () => {
32-
this.create();
33+
this.createScaffold({ parent: { entityType: UMB_WEBHOOK_ROOT_ENTITY_TYPE, unique: null } });
3334

3435
new UmbWorkspaceIsNewRedirectController(
3536
this,
@@ -49,84 +50,24 @@ export class UmbWebhookWorkspaceContext
4950
]);
5051
}
5152

52-
protected override resetState(): void {
53-
super.resetState();
54-
this.#data.setValue(undefined);
55-
}
56-
57-
async load(unique: string) {
58-
this.resetState();
59-
const { data } = await this.repository.requestByUnique(unique);
60-
if (data) {
61-
this.setIsNew(false);
62-
this.#data.update(data);
63-
}
64-
}
65-
66-
async create() {
67-
this.resetState();
68-
const { data } = await this.repository.createScaffold();
69-
if (!data) return;
70-
this.setIsNew(true);
71-
this.#data.update(data);
72-
return { data };
73-
}
74-
75-
getData() {
76-
return this.#data.getValue();
77-
}
78-
79-
getEntityType() {
80-
return 'webhook';
81-
}
82-
83-
getUnique() {
84-
return this.#data.getValue()?.unique;
85-
}
86-
8753
setEvents(events: Array<UmbWebhookEventModel>) {
88-
this.#data.update({ events });
54+
this._data.updateCurrent({ events });
8955
}
9056

9157
setHeaders(headers: { [key: string]: string }) {
92-
this.#data.update({ headers });
58+
this._data.updateCurrent({ headers });
9359
}
9460

9561
setTypes(types: string[]) {
96-
this.#data.update({ contentTypes: types });
62+
this._data.updateCurrent({ contentTypes: types });
9763
}
9864

9965
setUrl(url: string) {
100-
this.#data.update({ url });
66+
this._data.updateCurrent({ url });
10167
}
10268

10369
setEnabled(enabled: boolean) {
104-
this.#data.update({ enabled });
105-
}
106-
107-
async submit() {
108-
const newData = this.getData();
109-
if (!newData) {
110-
throw new Error('No data to submit');
111-
}
112-
113-
if (this.getIsNew()) {
114-
const { error } = await this.repository.create(newData);
115-
if (error) {
116-
throw new Error(error.message);
117-
}
118-
this.setIsNew(false);
119-
} else {
120-
const { error } = await this.repository.save(newData);
121-
if (error) {
122-
throw new Error(error.message);
123-
}
124-
}
125-
}
126-
127-
override destroy(): void {
128-
this.#data.destroy();
129-
super.destroy();
70+
this._data.updateCurrent({ enabled });
13071
}
13172
}
13273

0 commit comments

Comments
 (0)