mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
* Initial pass at a global actions instance queue * Action card with a bunch of functionality that needs to be pared back a bit * Happy little actions button * runAction performs updated to use actions service * Stop All and Clear Finished buttons * Keyboard service now passes element, so we can pseudo-click the actions dropdown * resizable sidebar code blocks * Contextual actions within task and job levels * runAction greatly consolidated * Pluralize action text * Peer grouping of flyout action intances * ShortIDs instead of full alloc IDs * Testfixes that previously depended on notifications * Stop and stop all for peered action instances * Job name in action instance card linkable * Componentized actions global button * scss consolidation * Clear and Stop buttons become mutually exclusive in an action card * Clean up action card title styles a bit * todo-bashing * stopAll and stopPeers separated and fixed up * Socket handling functions moved to the Actions service * Error handling on socket message * Smarter import * Documentation note: need alloc-exec and alloc-raw-exec for raw_exec jobs * Tests for flyout and dropdown actions * Docs link when in empty flyout/queue state and percy snapshot test for it
69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
// @ts-check
|
|
import Component from '@glimmer/component';
|
|
import { inject as service } from '@ember/service';
|
|
import { alias } from '@ember/object/computed';
|
|
|
|
export default class ActionsFlyoutComponent extends Component {
|
|
@service nomadActions;
|
|
@service router;
|
|
|
|
get job() {
|
|
if (this.task) {
|
|
return this.task.taskGroup.job;
|
|
} else {
|
|
return (
|
|
this.router.currentRouteName.startsWith('jobs.job') &&
|
|
this.router.currentRoute.attributes
|
|
);
|
|
}
|
|
}
|
|
|
|
get task() {
|
|
return (
|
|
this.router.currentRouteName.startsWith('allocations.allocation.task') &&
|
|
this.router.currentRoute.attributes.task
|
|
);
|
|
}
|
|
|
|
get allocation() {
|
|
return (
|
|
this.args.allocation ||
|
|
(this.task && this.router.currentRoute.attributes.allocation)
|
|
);
|
|
}
|
|
|
|
get contextualParent() {
|
|
return this.task || this.job;
|
|
}
|
|
|
|
get contextualActions() {
|
|
return this.contextualParent?.actions || [];
|
|
}
|
|
|
|
@alias('nomadActions.flyoutActive') isOpen;
|
|
|
|
/**
|
|
* Group peers together by their peerID
|
|
*/
|
|
get actionInstances() {
|
|
let instances = this.nomadActions.actionsQueue;
|
|
|
|
// Only keep the first of any found peerID value from the list
|
|
let peerIDs = new Set();
|
|
let filteredInstances = [];
|
|
for (let instance of instances) {
|
|
if (!instance.peerID || !peerIDs.has(instance.peerID)) {
|
|
filteredInstances.push(instance);
|
|
peerIDs.add(instance.peerID);
|
|
}
|
|
}
|
|
|
|
return filteredInstances;
|
|
}
|
|
}
|