close

Filter

loading table of contents...

Studio Developer Manual / Version 2301

Table Of Contents

9.23.4 Displaying Notifications (Client Side)

For displaying notifications in CoreMedia Studio, three levels are distinguished:

  1. Simply displaying the notification in terms of a text message and an icon. For example, the notification might inform the user that a new publication workflow has arrived in its inbox.
  2. The same as in 1. but with an additional click action handler. For example, clicking the publication workflow notification might open the publication workflow inbox in the Studio Control Room.
  3. Completely customizing the display and controls of the notification.

Levels 1 and 2 are considered as the typical cases for displaying notifications. For these, CoreMedia offers default components. However, in certain cases it might be necessary or desired to develop a more refined notification UI.

Level 1: Simple Notification Display

For just displaying a notification in terms of an icon and a text message, you simply have to provide an icon class property and a text key property. These properties must match the patterns Notification_{notificationType}_iconCls and Notification_{notificationType}_{notificationKey}_msg respectively. For the example of a publication workflow notification from above, the properties look as follows:

Notification_publicationWorkflow_iconCls : CollaborationIcons_properties.start_publication_workflow,
Notification_publicationWorkflow_offered_msg : "The publication workflow \"{0}\" is new in your inbox."

In this example, the message property has a placeholder. By default, the parameters of the notification (see notification creation above) are inserted in the placeholders one after the other. Consequently, the parameters have to be of type string. However, it is also possible to compute the placeholder insertions from the notification's parameters (for example, if you have a complex bean as a parameter that should be the basis for all placeholder insertions). In this case your notification's Studio component (see below) has to implement the interface TextParametersPreProcessor.

You define your properties in your own resource bundle (WorkflowNotifications_properties.ts, for instance) and have to make sure to copy it onto the resource bundle Notifications_properties.ts which is provided by CoreMedia:

import Config from "@jangaroo/runtime/Config";
import ConfigUtils from "@jangaroo/runtime/ConfigUtils";
import resourceManager from "@jangaroo/runtime/l10n/resourceManager";
import CopyResourceBundleProperties from "@coremedia/studio-client.main.editor-components/configuration/CopyResourceBundleProperties";
import StudioPlugin from "@coremedia/studio-client.main.editor-components/configuration/StudioPlugin";
import Notifications_properties from "@coremedia/studio-client.main.notification-studio-client/Notifications_properties";
import WorkflowNotifications_properties from "./WorkflowNotifications_properties";

class MyStudioPlugin extends StudioPlugin {

  constructor(config:Config<StudioPlugin>){
    super(ConfigUtils.apply(Config(MyStudioPlugin, {
      rules: [
      ],

      configuration: [
        new CopyResourceBundleProperties({
          destination: resourceManager.getResourceBundle(null, Notifications_properties),
          source: resourceManager.getResourceBundle(null, WorkflowNotifications_properties),
        }),
      ],
    }), config));
  }
}

export default MyStudioPlugin;
Level 2: Simple Notification Display with Click Action

In many cases it is not enough to just display a notification. Normally, a notification is a request to the user to do something. So it should be possible to click the notification and be directed to the part of Studio where the user can do something about it.

In order to add an action click handler to your notification, you have to register your own notification component. You always register a notification component for a specific notification type:

import Config from "@jangaroo/runtime/Config";
import ConfigUtils from "@jangaroo/runtime/ConfigUtils";

import StudioPlugin from "@coremedia/studio-client.main.editor-components/configuration/StudioPlugin";
import PublicationWorkflowNotificationDetails from "@coremedia/studio-client.main.control-room-editor-components/notification/components/PublicationWorkflowNotificationDetails";
import RegisterNotificationDetailsPlugin from "@coremedia/studio-client.main.notification-studio-client/RegisterNotificationDetailsPlugin";

class MyStudioPlugin extends StudioPlugin {

  constructor(config: Config<StudioPlugin>) {
    super(ConfigUtils.apply(Config(MyStudioPlugin, {

      rules: [],

      configuration: [
        new RegisterNotificationDetailsPlugin({
          notificationType: "publicationWorkflow",
          notificationDetailsComponentConfig: Config(PublicationWorkflowNotificationDetails),
        }),
      ],
    }), config));
  }
}

export default MyStudioPlugin;

You do not have to do any component developing for level 2. You can simply let your notification component extend DefaultNotificationDetails and add your notification action as its baseAction. You need to let your action extend NotificationAction. This yields numerous benefits like accessing the notification via the method NotificationAction.getNotification(). Consequently, you have also access to all the notification's parameters.

import { mixin } from "@jangaroo/runtime";
import Config from "@jangaroo/runtime/Config";
import ConfigUtils from "@jangaroo/runtime/ConfigUtils";
import DefaultNotificationDetails from "@coremedia/studio-client.main.notification-studio-client/components/DefaultNotificationDetails";
import TextParametersPreProcessor from "@coremedia/studio-client.main.notification-studio-client/components/TextParametersPreProcessor";
import MyNotificationAction from "./MyNotificationAction";

class CustomNotificationDetails extends DefaultNotificationDetails implements TextParametersPreProcessor {

  constructor(config: Config<DefaultNotificationDetails>){
    super((()=> ConfigUtils.apply(Config(CustomNotificationDetails, {
      baseAction: new MyNotificationAction({}),
    }), config))());
  }

  preProcessTextParameters(params: Array<any>): Array<any> {
    return params;
  }
}

mixin(CustomNotificationDetails, TextParametersPreProcessor);

export default CustomNotificationDetails;
Level 3: Custom Notification Display

You are free to develop your own notification component that does not inherit from DefaultNotificationDetails. CoreMedia gives no further guidelines here but point out that your component at least has to inherit from NotificationDetails. You register your custom component just as it was described above.

Search Results

Table Of Contents
warning

Your Internet Explorer is no longer supported.

Please use Mozilla Firefox, Google Chrome, or Microsoft Edge.