ui/lib/shared/addon/components/tooltip-action-menu/component.js

53 lines
1.7 KiB
JavaScript

import { alias } from '@ember/object/computed';
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import Tooltip from 'shared/mixins/tooltip';
import StrippedName from 'shared/mixins/stripped-name';
import layout from './template';
import { observer } from '@ember/object';
export default Component.extend(Tooltip, StrippedName, {
resourceActions: service('resource-actions'),
layout,
needs: ['application'],
inTooltip: false,
layoutName: 'tooltip-action-menu',
model: alias('tooltipService.tooltipOpts.model'),
actionsOpen: alias('resourceActions.open'),
init() {
if (this.get('tooltipTemplate')) {
this.set('layoutName', this.get('tooltipTemplate'));
}
this._super(...arguments);
// Just so openChanged is ready to go, otherwise you have to chain on('init') on openChanged
// which because of the context menu click on container dot can cause some issues with checking
// flags and such. This was the least compliated way to ensure that openChanged would recognize changes
this.set('actionsOpen', false);
},
openChanged: observer('actionsOpen', function() {
this.set('tooltipService.requireClick', this.get('actionsOpen'));
if ( !this.get('actionsOpen') && !this.get('inTooltip') ) {
this.get('tooltipService').leave();
}
}),
mouseEnter() {
this._super();
this.set('inTooltip', true);
// Must get the property before it will be observed for openChanged
// https://github.com/emberjs/ember.js/issues/10821
this.get('actionsOpen');
},
mouseLeave() {
this.set('inTooltip', false);
if ( !this.get('actionsOpen') ) {
this.get('tooltipService').leave();
}
},
});