Skip to content

Commit d8c951f

Browse files
committed
move files, setup modal element
1 parent 9375dcf commit d8c951f

File tree

8 files changed

+157
-89
lines changed

8 files changed

+157
-89
lines changed

src/packages/documents/documents/entity-actions/notifications/document-notifications-modal.element.ts

Lines changed: 0 additions & 64 deletions
This file was deleted.

src/packages/documents/documents/entity-actions/notifications/document-notifications.action.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { UMB_DOCUMENT_NOTIFICATIONS_MODAL } from './document-notifications-modal.token.js';
1+
import { UMB_DOCUMENT_NOTIFICATIONS_MODAL } from './modal/document-notifications-modal.token.js';
22
import type { UmbEntityActionArgs } from '@umbraco-cms/backoffice/entity-action';
33
import { UmbEntityActionBase } from '@umbraco-cms/backoffice/entity-action';
44
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@@ -14,7 +14,7 @@ export class UmbDocumentNotificationsEntityAction extends UmbEntityActionBase<ne
1414
const modalContext = modalManager.open(this, UMB_DOCUMENT_NOTIFICATIONS_MODAL, {
1515
data: { unique: this.args.unique },
1616
});
17-
await modalContext.onSubmit();
17+
await modalContext.onSubmit().catch(() => undefined);
1818
}
1919
}
2020
export default UmbDocumentNotificationsEntityAction;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export * from './document-notifications-modal.token.js';
1+
export * from './modal/index.js';
22
export * from './repository/index.js';
Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
11
import { UMB_DOCUMENT_ENTITY_TYPE } from '../../entity.js';
22
import { manifests as repositoryManifests } from './repository/manifests.js';
3-
import type { ManifestEntityAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
3+
import { manifests as modalManifests } from './modal/manifests.js';
4+
import type { ManifestEntityAction } from '@umbraco-cms/backoffice/extension-registry';
45

5-
export const UMB_DOCUMENT_NOTIFICATIONS_MODAL_ALIAS = 'Umb.Modal.DocumentNotifications';
6-
7-
const actionManifest: ManifestEntityAction = {
8-
type: 'entityAction',
9-
kind: 'default',
10-
alias: 'Umb.EntityAction.Document.Notifications',
11-
name: 'Notifications',
12-
api: () => import('./document-notifications.action.js'),
13-
forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE],
14-
meta: {
15-
icon: 'icon-megaphone',
16-
label: '#notifications_notifications',
6+
const actionManifests: Array<ManifestEntityAction> = [
7+
{
8+
type: 'entityAction',
9+
kind: 'default',
10+
alias: 'Umb.EntityAction.Document.Notifications',
11+
name: 'Notifications',
12+
api: () => import('./document-notifications.action.js'),
13+
forEntityTypes: [UMB_DOCUMENT_ENTITY_TYPE],
14+
meta: {
15+
icon: 'icon-megaphone',
16+
label: '#notifications_notifications',
17+
},
1718
},
18-
};
19-
20-
const modalManifest: ManifestTypes = {
21-
type: 'modal',
22-
alias: UMB_DOCUMENT_NOTIFICATIONS_MODAL_ALIAS,
23-
name: 'Document Notifications Modal',
24-
js: () => import('./document-notifications-modal.element.js'),
25-
};
19+
];
2620

27-
export const manifests = [actionManifest, modalManifest, ...repositoryManifests];
21+
export const manifests = [...actionManifests, ...modalManifests, ...repositoryManifests];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import { UmbDocumentNotificationsRepository } from '../repository/document-notifications.repository.js';
2+
import type {
3+
UmbDocumentNotificationsModalData,
4+
UmbDocumentNotificationsModalValue,
5+
} from './document-notifications-modal.token.js';
6+
import type { UmbEntityUnique } from '@umbraco-cms/backoffice/entity';
7+
import type { GetDocumentByIdNotificationsResponse } from '@umbraco-cms/backoffice/external/backend-api';
8+
import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit';
9+
import { UmbModalBaseElement } from '@umbraco-cms/backoffice/modal';
10+
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
11+
12+
interface UmbDocumentNotificationSettings extends GetDocumentByIdNotificationsResponse {}
13+
14+
@customElement('umb-document-notifications-modal')
15+
export class UmbDocumentNotificationsModalElement extends UmbModalBaseElement<
16+
UmbDocumentNotificationsModalData,
17+
UmbDocumentNotificationsModalValue
18+
> {
19+
#unique?: UmbEntityUnique;
20+
#documentNotificationsRepository = new UmbDocumentNotificationsRepository(this);
21+
22+
#localizationKeys = [
23+
{ actionId: 'Umb.Document.Duplicate', key: 'actions_copy' },
24+
{ actionId: 'Umb.Document.Delete', key: 'actions_delete' },
25+
{ actionId: 'Umb.Document.Move', key: 'actions_move' },
26+
{ actionId: 'Umb.Document.Create', key: 'actions_create' },
27+
{ actionId: 'Umb.Document.PublicAccess', key: 'actions_protect' },
28+
{ actionId: 'Umb.Document.Publish', key: 'actions_publish' },
29+
{ actionId: 'Umb.DocumentRecycleBin.Restore', key: 'actions_restore' },
30+
{ actionId: 'Umb.Document.Permissions', key: 'actions_rights' },
31+
{ actionId: 'Umb.Document.Rollback', key: 'actions_rollback' },
32+
{ actionId: 'Umb.Document.Sort', key: 'actions_sort' },
33+
{ actionId: 'Umb.Document.SendForApproval', key: 'actions_sendtopublish' },
34+
{ actionId: 'Umb.Document.Update', key: 'actions_update' },
35+
];
36+
37+
@state()
38+
private _settings: UmbDocumentNotificationSettings = [];
39+
40+
override firstUpdated() {
41+
this.#unique = this.data?.unique;
42+
this.#readNotificationSettings();
43+
}
44+
45+
async #readNotificationSettings() {
46+
if (!this.#unique) return;
47+
const { data } = await this.#documentNotificationsRepository.readNotifications(this.#unique);
48+
49+
if (!data) return;
50+
this._settings = data;
51+
}
52+
53+
async #updateNotificationSettings() {
54+
if (!this.#unique) return;
55+
56+
const subscribedActionIds = this._settings.filter((x) => x.subscribed).map((x) => x.actionId);
57+
const { error } = await this.#documentNotificationsRepository.updateNotifications(this.#unique, {
58+
subscribedActionIds,
59+
});
60+
61+
if (error) return;
62+
this._submitModal();
63+
}
64+
65+
async #updateSubscription(actionId: string) {
66+
this._settings = this._settings.map((setting) => {
67+
if (setting.actionId === actionId) {
68+
const subscribed = !setting.subscribed;
69+
return { ...setting, subscribed };
70+
}
71+
return setting;
72+
});
73+
}
74+
75+
override render() {
76+
return html`
77+
<umb-body-layout headline=${this.localize.term('notifications_notifications')}>
78+
<uui-box>
79+
${repeat(
80+
this._settings,
81+
(setting) => setting.actionId,
82+
(setting) => {
83+
const localization = this.#localizationKeys.find((x) => x.actionId === setting.actionId);
84+
return html`<uui-toggle
85+
id=${setting.actionId}
86+
@change=${() => this.#updateSubscription(setting.actionId)}
87+
.label=${localization ? this.localize.term(localization.key) : setting.actionId}
88+
?checked=${setting.subscribed}></uui-toggle>`;
89+
},
90+
)}
91+
</uui-box>
92+
<umb-footer-layout slot="footer">
93+
<uui-button
94+
slot="actions"
95+
look="secondary"
96+
label=${this.localize.term('general_cancel')}
97+
@click=${this._rejectModal}></uui-button>
98+
<uui-button
99+
slot="actions"
100+
look="primary"
101+
color="positive"
102+
label=${this.localize.term('buttons_save')}
103+
@click=${this.#updateNotificationSettings}></uui-button>
104+
</umb-footer-layout>
105+
</umb-body-layout>
106+
`;
107+
}
108+
109+
static override styles = [
110+
UmbTextStyles,
111+
css`
112+
uui-toggle {
113+
display: block;
114+
}
115+
`,
116+
];
117+
}
118+
119+
export default UmbDocumentNotificationsModalElement;
120+
121+
declare global {
122+
interface HTMLElementTagNameMap {
123+
'umb-document-notifications-modal': UmbDocumentNotificationsModalElement;
124+
}
125+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './document-notifications-modal.token.js';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { ManifestModal } from '@umbraco-cms/backoffice/extension-registry';
2+
3+
export const UMB_DOCUMENT_NOTIFICATIONS_MODAL_ALIAS = 'Umb.Modal.DocumentNotifications';
4+
5+
const modalManifest: ManifestModal = {
6+
type: 'modal',
7+
alias: UMB_DOCUMENT_NOTIFICATIONS_MODAL_ALIAS,
8+
name: 'Document Notifications Modal',
9+
js: () => import('./document-notifications-modal.element.js'),
10+
};
11+
12+
export const manifests = [modalManifest];

0 commit comments

Comments
 (0)