Files
nomad/ui/app/components/actions-dropdown.hbs
Phil Renaud fb14c2b556 [ui] Actions service and flyout (#19084)
* 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
2023-11-26 23:46:44 -05:00

58 lines
2.3 KiB
Handlebars

{{!
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
~}}
<Hds::Dropdown class="actions-dropdown"
{{keyboard-shortcut
label="Open Actions Dropdown"
pattern=(array "a" "c")
action=(action this.openActionsDropdown)
}}
as |dd|>
<dd.ToggleButton class="action-toggle-button" @color="secondary" @text="Actions{{if @context (concat " for " @context.name)}}" @size="medium" />
{{#each @actions as |action|}}
{{#if @allocation}}
{{!-- If an allocation was passed in, we run the action on that alloc --}}
<dd.Interactive
{{keyboard-shortcut
enumerated=true
action=(fn this.nomadActions.runAction (hash action=action allocID=@allocation.id))
}}
{{on "click" (fn this.nomadActions.runAction (hash action=action allocID=@allocation.id))}} @text={{action.name}}
/>
{{else if (eq action.allocations.length 1)}}
{{!-- If there is only one allocation on the action, we can just run it on the 0th alloc --}}
<dd.Interactive
{{keyboard-shortcut
enumerated=true
action=(fn this.nomadActions.runAction (hash action=action allocID=(get (object-at 0 action.allocations) "id")))
}}
{{on "click" (fn this.nomadActions.runAction (hash action=action allocID=(get (object-at 0 action.allocations) "id")))}} @text="{{action.name}}"
/>
{{else}}
{{!-- Either no allocation was passed in, or there are multiple allocatios on the action to choose from --}}
<dd.Generic>
<Hds::Reveal @text={{action.name}}>
<dd.Interactive
{{keyboard-shortcut
enumerated=true
action=(fn this.nomadActions.runActionOnRandomAlloc action)
}}
{{on "click" (fn this.nomadActions.runActionOnRandomAlloc action)}}
@text="Run on a random alloc"
/>
<dd.Interactive
{{keyboard-shortcut
enumerated=true
action=(fn this.nomadActions.runActionOnAllAllocs action)
}}
{{on "click" (fn this.nomadActions.runActionOnAllAllocs action)}}
@text="Run on all {{action.allocations.length}} allocs"
/>
</Hds::Reveal>
</dd.Generic>
{{/if}}
{{/each}}
</Hds::Dropdown>