register new extension type "workspaceActionMenuItem"

This commit is contained in:
Jacob Overgaard
2024-02-28 11:56:17 +01:00
parent 4d87319354
commit 06e8382a68
3 changed files with 41 additions and 11 deletions

View File

@@ -29,6 +29,7 @@ import type { ManifestTreeItem } from './tree-item.model.js';
import type { ManifestUserProfileApp } from './user-profile-app.model.js';
import type { ManifestWorkspace } from './workspace.model.js';
import type { ManifestWorkspaceAction } from './workspace-action.model.js';
import type { ManifestWorkspaceActionMenuItem } from './workspace-action-menu-item.model.js';
import type { ManifestWorkspaceContext } from './workspace-context.model.js';
import type { ManifestWorkspaceFooterApp } from './workspace-footer-app.model.js';
import type { ManifestWorkspaceView } from './workspace-view.model.js';
@@ -75,6 +76,7 @@ export type * from './user-granular-permission.model.js';
export type * from './user-permission.model.js';
export type * from './user-profile-app.model.js';
export type * from './workspace-action.model.js';
export type * from './workspace-action-menu-item.model.js';
export type * from './workspace-context.model.js';
export type * from './workspace-footer-app.model.js';
export type * from './workspace-view.model.js';
@@ -123,6 +125,7 @@ export type ManifestTypes =
| ManifestUserProfileApp
| ManifestWorkspace
| ManifestWorkspaceAction
| ManifestWorkspaceActionMenuItem
| ManifestWorkspaceContext
| ManifestWorkspaceFooterApp
| ManifestWorkspaceView

View File

@@ -0,0 +1,27 @@
import type { ConditionTypes } from '../conditions/types.js';
import type { UUIInterfaceColor, UUIInterfaceLook } from '@umbraco-cms/backoffice/external/uui';
import type { ManifestElement, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
export interface ManifestWorkspaceActionMenuItem
extends ManifestElement<HTMLElement>,
ManifestWithDynamicConditions<ConditionTypes> {
type: 'workspaceActionMenuItem';
meta: MetaWorkspaceActionMenuItem;
}
export interface MetaWorkspaceActionMenuItem {
/**
* Define which workspace actions this menu item should be shown for.
*/
workspaceActionAliases: string[];
/**
* The color of the button. Defaults to the workspace action button color.
*/
buttonColor?: UUIInterfaceColor;
/**
* The look of the button. Defaults to the workspace action button look.
*/
buttonLook?: UUIInterfaceLook;
}

View File

@@ -1,7 +1,7 @@
import type { CSSResultGroup } from '@umbraco-cms/backoffice/external/lit';
import { css, html, customElement, property, state, repeat, nothing } from '@umbraco-cms/backoffice/external/lit';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
import type { ManifestWorkspaceAction, ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
import type { ManifestTypes, ManifestWorkspaceActionMenuItem } from '@umbraco-cms/backoffice/extension-registry';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbExtensionElementInitializer } from '@umbraco-cms/backoffice/extension-api';
import { UmbExtensionsElementInitializer } from '@umbraco-cms/backoffice/extension-api';
@@ -9,34 +9,34 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
@customElement('umb-workspace-action-menu')
export class UmbWorkspaceActionMenuElement extends UmbLitElement {
#actionsInitializer?: UmbExtensionsElementInitializer<ManifestTypes, 'workspaceAction'>;
#workspacActionAlias: Array<string> = [];
#actionsInitializer?: UmbExtensionsElementInitializer<ManifestTypes, 'workspaceActionMenuItem'>;
#workspaceActionAlias: Array<string> = [];
@property({ type: Array })
set workspaceActionAlias(alias: Array<string>) {
// If there is an existing initializer, we need to dispose it.
this.#actionsInitializer?.destroy();
this.#workspacActionAlias = alias;
this.#workspaceActionAlias = alias;
this.#actionsInitializer = new UmbExtensionsElementInitializer(
this,
umbExtensionsRegistry,
'workspaceAction', // TODO: Stop using string for 'workspaceAction', we need to start using Const.
undefined, //(action) => !!action, //action.meta.propertyEditors.includes(alias),
'workspaceActionMenuItem', // TODO: Stop using string for 'workspaceActionMenuItem', we need to start using Const.
(action) => action.meta.workspaceActionAliases.some((alias) => this.#workspaceActionAlias.includes(alias)),
(ctrls) => {
debugger;
this._actions = ctrls;
},
'extensionsInitializer',
'uui-menu-item',
);
}
get workspaceActionAlias() {
return this.#workspacActionAlias;
return this.#workspaceActionAlias;
}
@state()
private _actions: Array<UmbExtensionElementInitializer<ManifestWorkspaceAction, never>> = [];
private _actions: Array<UmbExtensionElementInitializer<ManifestWorkspaceActionMenuItem, never>> = [];
render() {
return this._actions.length > 0
@@ -45,9 +45,9 @@ export class UmbWorkspaceActionMenuElement extends UmbLitElement {
id="popover-trigger"
popovertarget="workspace-action-popover"
look="secondary"
label="More"
label="Expand"
compact>
<uui-symbol-more id="more-symbol"></uui-symbol-more>
<uui-symbol-expand id="expand-symbol"></uui-symbol-expand>
</uui-button>
<uui-popover-container id="workspace-action-popover" placement="bottom-start">
<umb-popover-layout>