diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.element.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.element.ts
index b7bb8cd29a..6658fe66eb 100644
--- a/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.element.ts
@@ -11,21 +11,21 @@ export interface UmbModalConfirmData {
}
@customElement('umb-modal-layout-confirm')
-export class UmbModelLayoutConfirmElement extends LitElement {
+export class UmbModalLayoutConfirmElement extends LitElement {
static styles = [UUITextStyles];
@property({ attribute: false })
- modalHandler!: UmbModalHandler;
+ modalHandler?: UmbModalHandler;
@property({ type: Object })
- data!: UmbModalConfirmData;
+ data?: UmbModalConfirmData;
private _handleConfirm() {
- this.modalHandler.close({ confirmed: true });
+ this.modalHandler?.close({ confirmed: true });
}
private _handleCancel() {
- this.modalHandler.close({ confirmed: false });
+ this.modalHandler?.close({ confirmed: false });
}
render() {
@@ -48,6 +48,6 @@ export class UmbModelLayoutConfirmElement extends LitElement {
declare global {
interface HTMLElementTagNameMap {
- 'umb-modal-layout-confirm': UmbModelLayoutConfirmElement;
+ 'umb-modal-layout-confirm': UmbModalLayoutConfirmElement;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.stories.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.stories.ts
new file mode 100644
index 0000000000..b77d621c6c
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/confirm/modal-layout-confirm.stories.ts
@@ -0,0 +1,32 @@
+import { Meta, Story } from '@storybook/web-components';
+import { html } from 'lit';
+import { UmbModalLayoutConfirmElement, UmbModalConfirmData } from './modal-layout-confirm.element';
+import './modal-layout-confirm.element';
+
+export default {
+ title: 'API/Modals/Layouts/Confirm',
+ component: 'umb-modal-layout-confirm',
+ id: 'modal-layout-confirm',
+} as Meta;
+
+const positiveData: UmbModalConfirmData = {
+ headline: 'Publish with descendants',
+ content: html`Publish This example and all content items underneath and thereby making their content publicly
+ available.`,
+ confirmLabel: 'Publish',
+};
+
+export const Positive: Story = () => html`
+
+`;
+
+const dangerData: UmbModalConfirmData = {
+ color: 'danger',
+ headline: 'Delete',
+ content: html`Delete This example and all items underneath.`,
+ confirmLabel: 'Delete',
+};
+
+export const Danger: Story = () => html`
+
+`;
diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/content-picker/modal-layout-content-picker.element.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/content-picker/modal-layout-content-picker.element.ts
index 0a767b34f1..3f22eb5d8d 100644
--- a/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/content-picker/modal-layout-content-picker.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/layouts/content-picker/modal-layout-content-picker.element.ts
@@ -8,7 +8,7 @@ export interface UmbModalContentPickerData {
}
@customElement('umb-modal-layout-content-picker')
-export class UmbModalContentPickerElement extends LitElement {
+export class UmbModalLayoutContentPickerElement extends LitElement {
static styles = [
UUITextStyles,
css`
@@ -47,6 +47,9 @@ export class UmbModalContentPickerElement extends LitElement {
@property({ attribute: false })
modalHandler?: UmbModalHandler;
+ @property({ type: Object })
+ data?: UmbModalContentPickerData;
+
private _tempContent = [
{
id: 1,
@@ -119,6 +122,6 @@ export class UmbModalContentPickerElement extends LitElement {
declare global {
interface HTMLElementTagNameMap {
- 'umb-modal-layout-content-picker': UmbModalContentPickerElement;
+ 'umb-modal-layout-content-picker': UmbModalLayoutContentPickerElement;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal-handler.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal-handler.ts
index 7f5877a41d..d9a65c0b63 100644
--- a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal-handler.ts
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal-handler.ts
@@ -14,11 +14,11 @@ export class UmbModalHandler {
public type: string;
public size: UUIModalSidebarSize;
- constructor(elementName: string, options: UmbModalOptions) {
+ constructor(elementName: string, options?: UmbModalOptions) {
this.key = uuidv4();
- this.type = options.type || 'dialog';
- this.size = options.size || 'small';
+ this.type = options?.type || 'dialog';
+ this.size = options?.size || 'small';
this.element = this._createElement(elementName, options);
this._closePromise = new Promise((resolve) => {
@@ -26,9 +26,9 @@ export class UmbModalHandler {
});
}
- private _createElement(elementName: string, options: UmbModalOptions) {
- const layoutElement = this._createLayoutElement(elementName, options);
- return options.type === 'sidebar'
+ private _createElement(elementName: string, options?: UmbModalOptions) {
+ const layoutElement = this._createLayoutElement(elementName, options?.data);
+ return this.type === 'sidebar'
? this._createSidebarElement(layoutElement)
: this._createDialogElement(layoutElement);
}
@@ -48,9 +48,9 @@ export class UmbModalHandler {
return modalDialogElement;
}
- private _createLayoutElement(elementName: string, options: UmbModalOptions) {
+ private _createLayoutElement(elementName: string, data: unknown) {
const layoutElement: any = document.createElement(elementName);
- layoutElement.data = options.data;
+ layoutElement.data = data;
layoutElement.modalHandler = this;
return layoutElement;
}
diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.service.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.service.ts
index edc56327fa..d2495263a0 100644
--- a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.service.ts
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.service.ts
@@ -13,7 +13,7 @@ export type UmbModelType = 'dialog' | 'sidebar';
export interface UmbModalOptions {
type?: UmbModelType;
size?: UUIModalSidebarSize;
- data: UmbModalData;
+ data?: UmbModalData;
}
export class UmbModalService {
@@ -28,7 +28,7 @@ export class UmbModalService {
return this.open('umb-modal-layout-content-picker', { data, type: 'sidebar', size: 'small' });
}
- public open(elementName: string, options: UmbModalOptions): UmbModalHandler {
+ public open(elementName: string, options?: UmbModalOptions): UmbModalHandler {
const modalHandler = new UmbModalHandler(elementName, options);
modalHandler.element.addEventListener('close-end', () => this._handleCloseEnd(modalHandler));
diff --git a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.stories.ts b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.stories.ts
index dfaa5eaac0..38ebf60216 100644
--- a/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.stories.ts
+++ b/src/Umbraco.Web.UI.Client/src/core/services/modal/modal.stories.ts
@@ -11,7 +11,7 @@ import { html } from 'lit-html';
import { customElement, property, state } from 'lit/decorators.js';
import { UmbContextConsumerMixin } from '../../context';
import { LitElement } from 'lit';
-import { UmbModalHandler, UmbModalService } from './';
+import { UmbModalHandler, UmbModalOptions, UmbModalService } from './';
export default {
title: 'API/Modals',
@@ -105,7 +105,7 @@ class StoryModalServiceExampleElement extends UmbContextConsumerMixin(LitElement
modalType: 'dialog' | 'sidebar' = 'dialog';
@property()
- modalOptions = { size: 'small' };
+ modalOptions: UmbModalOptions = { type: 'sidebar', size: 'small' };
@state()
value = '';
@@ -120,10 +120,10 @@ class StoryModalServiceExampleElement extends UmbContextConsumerMixin(LitElement
private _open() {
let modalHandler = null;
if (this.modalType === 'dialog') {
- modalHandler = this._modalService?.openDialog('story-modal-service-dialog-example');
+ modalHandler = this._modalService?.open('story-modal-service-dialog-example');
}
if (this.modalType === 'sidebar') {
- modalHandler = this._modalService?.openSidebar('story-modal-service-sidebar-example', this.modalOptions);
+ modalHandler = this._modalService?.open('story-modal-service-sidebar-example', this.modalOptions);
}
modalHandler?.onClose.then((result) => {
this.value = result ?? this.value;