Studio Developer Manual / Version 2304
Table Of ContentsManaged actions are used to reuse the same action instance for different components, for example a button and a menu item, and even for a keyboard shortcut. This not only saves action instances, but can be crucial for keeping action state consistent.
Unlike previous examples, a managed action is not added to a button or menu item directly.
Instead, a managed action is registered by giving it an actionId and
adding it to the actionList property of a to a container. To add a managed action
to an existing container, use a Studio plugin rule and the
AddArrayItemsPlugin with arrayProperty="actionList".
Afterwards buttons that are located somewhere below this container may access the action using
an ActionRef or execute them via a keyboard shortcut. The following
example explains the implementation in detail.
import Config from "@jangaroo/runtime/Config";
import ConfigUtils from "@jangaroo/runtime/ConfigUtils";
import AddArrayItemsPlugin from "@coremedia/studio-client.ext.ui-components/plugins/AddArrayItemsPlugin";
import StudioPlugin from "@coremedia/studio-client.main.editor-components/configuration/StudioPlugin";
import EditorMainView from "@coremedia/studio-client.main.editor-components/sdk/desktop/EditorMainView";
import MyGlobalAction from "./MyGlobalAction";
class CustomStudioPlugin extends StudioPlugin {
static MY_GLOBAL_ACTION_ID:string = "myGlobalAction";
constructor(config:Config<CustomStudioPlugin> = null){
super(ConfigUtils.apply(Config(CustomStudioPlugin, {
rules: [
Config(EditorMainView, {
plugins: [
Config(AddArrayItemsPlugin, {
arrayProperty: "actionList",
items: [
new MyGlobalAction({
actionId: CustomStudioPlugin.MY_GLOBAL_ACTION_ID,
}),
],
}),
],
}),
],
}), config));
}
}
export default CustomStudioPlugin;
The example shows how MyGlobalAction is added to the action list of
the EditorMainView under a unique actionId.
The action is now available for all child components of this main view container.
In the following, it is shown how a reference to this action is used for a button
that is plugged into the RepositoryToolbar of the Studio's
CollectionView (library).
import Config from "@jangaroo/runtime/Config";
import ConfigUtils from "@jangaroo/runtime/ConfigUtils";
import StudioPlugin from "@coremedia/studio-client.main.editor-components/configuration/StudioPlugin";
import CollectionView from "@coremedia/studio-client.main.editor-components/sdk/collectionview/CollectionView";
class CustomStudioPlugin extends StudioPlugin {
static MY_GLOBAL_ACTION_ID:string = "myGlobalAction";
constructor(config:Config<CustomStudioPlugin> = null){
super(ConfigUtils.apply(Config(CustomStudioPlugin, {
rules: [
Config(CollectionView, {
plugins: [
Config(CollectionViewStudioPlugin),
],
}),
],
}), config));
}
}
export default CustomStudioPlugin;
//--------------------
import { as } from "@jangaroo/runtime";
import ActionRef from "@jangaroo/ext-ts/ActionRef";
import AddItemsPlugin from "@coremedia/studio-client.ext.ui-components/plugins/AddItemsPlugin";
import NestedRulesPlugin from "@coremedia/studio-client.ext.ui-components/plugins/NestedRulesPlugin";
import IconButton from "@coremedia/studio-client.ext.ui-components/components/IconButton";
import ICollectionView from "@coremedia/studio-client.main.editor-components/sdk/collectionview/ICollectionView";
import RepositoryToolbar from "@coremedia/studio-client.main.editor-components/sdk/collectionview/RepositoryToolbar";
interface CollectionViewStudioPluginConfig extends Config<NestedRulesPlugin> {
}
class CollectionViewStudioPlugin extends NestedRulesPlugin {
declare Config: CollectionViewStudioPluginConfig;
#myCollectionView:ICollectionView = null;
constructor(config:Config<CollectionViewStudioPlugin> = null){
super((()=>{
this.#myCollectionView = as(config.cmp, ICollectionView);
return ConfigUtils.apply(Config(CollectionViewStudioPlugin, {
rules: [
Config(RepositoryToolbar, {
plugins: [
Config(AddItemsPlugin, {
items: [
Config(IconButton, {
baseAction: Config(ActionRef, {actionId: CustomStudioPlugin.MY_GLOBAL_ACTION_ID}),
}),
],
}),
],
}),
],
}), config);
})());
}
}
export default CollectionViewStudioPlugin;
For any action with an actionId, a keyboard shortcut can be defined, which is
described in the next section.


