mirror of https://github.com/rancher/ui.git
167 lines
4.1 KiB
JavaScript
167 lines
4.1 KiB
JavaScript
import Mixin from '@ember/object/mixin';
|
|
import { get, computed } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
import { reads } from '@ember/object/computed';
|
|
|
|
export default Mixin.create({
|
|
router: service(),
|
|
globalStore: service(),
|
|
scope: service(),
|
|
intl: service(),
|
|
pageScope: reads('scope.currentPageScope'),
|
|
|
|
canClone: false,
|
|
|
|
relevantState: computed('combinedState', 'alertState', function() {
|
|
return this.get('combinedState') || this.get('alertState') || 'unknown';
|
|
}),
|
|
|
|
init() {
|
|
const stateMap = {
|
|
'muted': {
|
|
icon: 'icon icon-tag',
|
|
color: 'text-default'
|
|
},
|
|
'alerting': {
|
|
icon: 'icon icon-tag',
|
|
color: 'text-error'
|
|
},
|
|
'inactive': {
|
|
icon: 'icon icon-tag',
|
|
color: 'text-warning'
|
|
},
|
|
};
|
|
|
|
this.constructor.stateMap = stateMap
|
|
this._super(...arguments);
|
|
},
|
|
|
|
displayTargetType: computed('targetType', function() {
|
|
const t = get(this, 'targetType');
|
|
const intl = get(this, 'intl');
|
|
|
|
return intl.t(`alertPage.targetTypes.${ t }`);
|
|
}),
|
|
|
|
resourceKind: computed('targetEvent.resourceKind', function() {
|
|
const rk = get(this, 'targetEvent.resourceKind');
|
|
|
|
return get(this, 'intl').t(`alertPage.resourceKinds.${ rk }`);
|
|
}),
|
|
|
|
firstRecipient: computed('recipients.length', function() {
|
|
const recipient = (get(this, 'recipients') || []).get('firstObject');
|
|
|
|
if (recipient && get(recipient, 'notifierId')) {
|
|
const notifierId = get(recipient, 'notifierId');
|
|
|
|
if (!notifierId) {
|
|
return null;
|
|
}
|
|
|
|
const notifier = get(this, 'globalStore').all('notifier').filterBy('id', notifierId).get('firstObject');
|
|
|
|
if (!notifier) {
|
|
return null;
|
|
}
|
|
|
|
return notifier.get('displayName');
|
|
}
|
|
|
|
return null;
|
|
}),
|
|
|
|
displayRecipient: computed('firstRecipient', 'model.recipients.length', function() {
|
|
const len = get(this, 'recipients.length');
|
|
const firstRecipient = get(this, 'firstRecipient');
|
|
const intl = get(this, 'intl');
|
|
let out = intl.t('alertPage.na');
|
|
|
|
if (len === 0) {
|
|
// out = na;
|
|
} else if (len === 1) {
|
|
out = firstRecipient;
|
|
} else {
|
|
out = `${ len } ${ intl.t('alertPage.items') }`;
|
|
}
|
|
|
|
return out;
|
|
}),
|
|
|
|
nodeName: computed('targetNode.nodeId', function() {
|
|
const id = get(this, 'targetNode.nodeId');
|
|
|
|
if (!id) {
|
|
return null;
|
|
}
|
|
const node = get(this, 'globalStore').all('node').filterBy('id', id).get('firstObject');
|
|
|
|
if (!node) {
|
|
return null;
|
|
}
|
|
|
|
return node.get('displayName');
|
|
}),
|
|
|
|
actions: {
|
|
edit() {
|
|
const ps = get(this, 'pageScope');
|
|
const id = get(this, 'id');
|
|
|
|
if (ps === 'cluster') {
|
|
get(this, 'router').transitionTo('authenticated.cluster.alert.edit', id);
|
|
} else if (ps === 'project') {
|
|
get(this, 'router').transitionTo('authenticated.project.alert.edit', id);
|
|
}
|
|
},
|
|
mute() {
|
|
return this.doAction('mute');
|
|
},
|
|
unmute() {
|
|
return this.doAction('unmute');
|
|
},
|
|
activate() {
|
|
return this.doAction('activate');
|
|
},
|
|
deactivate() {
|
|
return this.doAction('deactivate');
|
|
},
|
|
},
|
|
|
|
availableActions: computed('actionLinks.{mute,unmute,activate,deactivate}', function() {
|
|
// let al = this.get('actionlinks');
|
|
const state = this.get('alertState');
|
|
|
|
return [
|
|
{
|
|
label: 'action.mute',
|
|
action: 'mute',
|
|
enabled: state === 'alerting',
|
|
icon: 'icon icon-mute',
|
|
bulkable: true,
|
|
},
|
|
{
|
|
label: 'action.unmute',
|
|
action: 'unmute',
|
|
icon: 'icon icon-unmute',
|
|
enabled: state === 'muted',
|
|
bulkable: true,
|
|
},
|
|
{
|
|
label: 'action.deactivate',
|
|
action: 'deactivate',
|
|
icon: 'icon icon-pause',
|
|
enabled: state === 'active',
|
|
bulkable: true,
|
|
},
|
|
{
|
|
label: 'action.activate',
|
|
icon: 'icon icon-play',
|
|
action: 'activate',
|
|
enabled: state === 'inactive',
|
|
bulkable: true,
|
|
},
|
|
];
|
|
}),
|
|
});
|