blob: 71782f3525ee3d5a4d44c4854288ae7cc14e4ef6 [file] [log] [blame]
import '@material/web/icon/icon.js';
import '@material/web/iconbutton/standard-icon-button.js';
import '@material/web/list/list-divider.js';
import '@material/web/menu/menu.js';
import '@material/web/menu/menu-button.js';
import '@material/web/menu/menu-item.js';
import consoleCommonStyles from '!!raw-loader!../../../../static/css/common/console.css';
import {css, html, LitElement, nothing, unsafeCSS} from 'lit';
import {map} from 'lit/directives/map.js';
import {createRef, ref} from 'lit/directives/ref.js';
import {SHARED_MD3_STYLES} from '../../../../common/styles/md3.js';
export default class TwptWorkflowsMenu extends LitElement {
static properties = {
workflows: {type: Object},
};
static styles = [
SHARED_MD3_STYLES,
css`${unsafeCSS(consoleCommonStyles)}`,
css`
.workflow-item {
padding-inline: 1em;
}
/* Custom styles to override the common button with badge styles */
.TWPT-btn--with-badge {
padding-bottom: 0!important;
}
.TWPT-btn--with-badge .TWPT-badge {
bottom: 8px!important;
}
`,
];
menuRef = createRef();
renderWorkflowItems() {
if (!this.workflows) return nothing;
if (this.workflows?.length == 0)
return html`
<md-menu-item disabled>
<span class="workflow-item" slot="start">
No workflows
</span>
</md-menu-item>
`;
return map(this.workflows, w => html`
<md-menu-item
@click="${() => this._dispatchSelectEvent(w.uuid)}">
<span class="workflow-item" slot="start">
${w.proto.getName()}
</span>
</md-menu-item>
`);
}
renderMenuItems() {
return [
this.renderWorkflowItems(),
html`
<md-list-divider></md-list-divider>
<md-menu-item
@click="${() => this._openWorkflowManager()}">
<span class="workflow-item" slot="start">
Manage workflows...
</span>
</md-menu-item>
`,
];
}
// Based on createExtBadge() in ../../utils/common.js.
renderBadge() {
return html`
<div class="TWPT-badge">
<md-icon>repeat</md-icon>
</div>
`;
}
render() {
return html`
<md-menu-button>
<div slot="button" class="TWPT-btn--with-badge">
<md-standard-icon-button icon="more_vert"></md-standard-icon-button>
${this.renderBadge()}
</div>
<md-menu ${ref(this.menuRef)} slot="menu">
${this.renderMenuItems()}
</md-menu>
</md-menu-button>
`;
}
_dispatchSelectEvent(uuid) {
const e = new CustomEvent('select', {
detail: {
selectedWorkflowUuid: uuid,
},
});
this.dispatchEvent(e);
this.menuRef.value.open = false;
}
_openWorkflowManager() {
const e = new Event('twpt-open-workflow-manager');
document.dispatchEvent(e);
}
}
window.customElements.define('twpt-workflows-menu', TwptWorkflowsMenu);