@fleetbase/ember-ui
Version:
Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.
84 lines (71 loc) • 2.84 kB
JavaScript
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';
export default class DropdownButtonComponent extends Component {
abilities;
type = 'default';
buttonSize = 'md';
buttonComponentArgs = {};
_onInsertFired = false;
_onTriggerInsertFired = false;
_onButtonInsertFired = false;
disabled = false;
visible = true;
permissionRequired = false;
doesntHavePermissions = false;
/**
* Creates an instance of DropdownButtonComponent.
* @param {ApplicationInstance} owner
* @param {Object} { type = 'default', size = 'md', buttonComponentArgs = {}}
* @memberof DropdownButtonComponent
*/
constructor(owner, { type = 'default', size = 'md', buttonComponentArgs = {}, permission = null, disabled = false, visible = true }) {
super(...arguments);
this.type = type;
this.buttonSize = size;
this.buttonComponentArgs = buttonComponentArgs;
this.permissionRequired = permission;
this.disabled = disabled;
this.visible = visible;
// If no permissions disable
if (!disabled && permission) {
this.disabled = this.doesntHavePermissions = permission && this.abilities.cannot(permission);
}
}
onRegisterAPI() {
if (typeof this.args.registerAPI === 'function') {
this.args.registerAPI(...arguments);
}
}
onTriggerInsert() {
if (typeof this.args.onTriggerInsert === 'function') {
this.args.onTriggerInsert(...arguments);
}
this._onTriggerInsertFired = true;
// Fallback for insert, when `renderInPlace=false` Trigger becomes whole node
if (this.args.renderInPlace === true || this._onInsertFired === false) {
this.onInsert(...arguments);
}
}
onButtonInsert() {
if (typeof this.args.onButtonInsert === 'function') {
this.args.onButtonInsert(...arguments);
}
this._onButtonInsertFired = true;
}
onInsert() {
if (typeof this.args.onInsert === 'function') {
this.args.onInsert(...arguments);
}
this._onInsertFired = true;
}
onArgsChanged(el, [disabled = false, visible = true, permission = null, buttonComponentArgs = {}]) {
this.buttonComponentArgs = buttonComponentArgs;
this.visible = visible;
this.disabled = disabled;
if (!disabled && permission) {
this.disabled = this.doesntHavePermissions = permission && this.abilities.cannot(permission);
}
}
}