Integrating context with a Property Editor
Integrate one of the built-in Umbraco Contexts.
Overview
This is the third step in the Property Editor tutorial. In this part, we will integrate built-in Umbraco Contexts. For this sample, we will use the UmbNotificationContext
for some pop-ups and the UmbModalManagerContext
. UmbNotificationContext
is used to show a dialog when you click the Trim button and the textbox's input length is longer than the maxLength configuration.
The steps we will go through in this part are:
Setting up the contexts
Add the following imports in the
suggestions-property-editor-ui.element.ts
file. This includes the notification context.
import { UMB_NOTIFICATION_CONTEXT, UmbNotificationContext, UmbNotificationDefaultData} from '@umbraco-cms/backoffice/notification';
import { UmbElementMixin } from '@umbraco-cms/backoffice/element-api';
Update the class to extend from UmbElementMixin. This allows us to consume the contexts that we need:
export default class MySuggestionsPropertyEditorUIElement extends UmbElementMixin((LitElement)) implements UmbPropertyEditorUiElement {
Create the constructor where we can consume the notification context above the
render()
method:
#notificationContext?: UmbNotificationContext;
constructor() {
super();
this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {
this.#notificationContext = instance;
});
}
Using the notification context
Now we can use the notification context, let's change our #onTrimText
method.
First, check if the length of our input is smaller or equal to our maxLength configuration. If it is, we have nothing to trim and will send a notification saying there is nothing to trim.
Here we can use the NotificationContext's peek method. It has two parameters UmbNotificationColor
and an UmbNotificationDefaultData
object.
Add the
#onTextTrim()
method above therender()
method:
#onTextTrim() {
if (!this._maxChars) return;
if (!this.value || (this.value as string).length <= this._maxChars) {
const data: UmbNotificationDefaultData = {
message: `Nothing to trim!`,
};
this.#notificationContext?.peek("danger", { data });
return;
}
}
Add a
click
event to the trim text button in therender()
method:
<uui-button
id="suggestion-trimmer"
class="element"
look="outline"
label="Trim text"
@click=${this.#onTextTrim}></uui-button>
If our input length is less or equal to our maxLength configuration, we will now get a notification when pressing the Trim button.

Adding more logic to the context
Let's continue to add more logic. If the length is more than the maxChars
configuration, we want to show a dialog for the user to confirm the trim.
Here, we use the ModalManagerContext
which has an open method to show a dialog.
Like the notification context, we need to import it and consume it in the constructor.
Add the following import in the
suggestions-property-editor-ui.element.ts
file:
import { UMB_MODAL_MANAGER_CONTEXT, UMB_CONFIRM_MODAL,} from '@umbraco-cms/backoffice/modal';
Remove the
UmbNotificationContext
from the'@umbraco-cms/backoffice/notification'
import:
import { UMB_NOTIFICATION_CONTEXT, UmbNotificationDefaultData } from '@umbraco-cms/backoffice/notification';
Update the constructor to consume the
UMB_MODAL_MANAGER_CONTEXT
and theUMB_CONFIRM_MODAL.
#modalManagerContext?: typeof UMB_MODAL_MANAGER_CONTEXT.TYPE;
#notificationContext?: typeof UMB_NOTIFICATION_CONTEXT.TYPE;
constructor() {
super();
this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => {
this.#modalManagerContext = instance;
});
this.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {
this.#notificationContext = instance;
});
}
Add more logic to the
onTextTrim
method:
#onTextTrim() {
...
const trimmed = (this.value as string).substring(0, this._maxChars);
const modalHandler = this.#modalManagerContext?.open(this, UMB_CONFIRM_MODAL,
{
data: {
headline: `Trim text`,
content: `Do you want to trim the text to "${trimmed}"?`,
color: "danger",
confirmLabel: "Trim",
}
}
);
modalHandler?.onSubmit().then(() => {
this.value = trimmed;
this.#dispatchChangeEvent();
const data: UmbNotificationDefaultData = {
headline: `Text trimmed`,
message: `You trimmed the text!`,
};
this.#notificationContext?.peek("positive", { data });
}, null);
}
Run the command
npm run build
in thesuggestions
folder.Run the project.
Go to the Content section of the Backoffice.
Ask for suggestions and click on the Trim text button. If the suggested text is long enough to be trimmed, you will be asked for confirmation:

Wrap up
Over the previous steps, we have:
Created a plugin.
Defined an editor.
Registered the Data Type in Umbraco.
Added configuration to the Property Editor.
Connected the editor with
UmbNotificationContext
andUmbModalManagerContext
.Looked at some of the methods from notification & modal manager contexts in action.
Integrated one of the built-in Umbraco Contexts with the Property Editor.
Last updated
Was this helpful?