Skip to content

Commit

Permalink
[ui] Keyboard nav: "u" key to go up a level (#13754)
Browse files Browse the repository at this point in the history
* U to go up a level

* Mislabelled my conditional

* Custom lint ignore rule

* Custom lint ignore rule, this time with commas

* Since we're getting rid of ember math helpers elsewhere, do the math ourselves here
  • Loading branch information
philrenaud authored Jul 15, 2022
1 parent 39ba1c7 commit 153354e
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 8 deletions.
3 changes: 3 additions & 0 deletions ui/.template-lintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,7 @@ module.exports = {
},
'no-implicit-this': { allow: ['keyboard-commands'] },
},
ignore: [
'app/components/breadcrumbs/*', // using {{(modifier)}} syntax
],
};
7 changes: 7 additions & 0 deletions ui/app/components/app-breadcrumbs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Component from '@glimmer/component';

export default class AppBreadcrumbsComponent extends Component {
isOneCrumbUp(iter = 0, totalNum = 0) {
return iter === totalNum - 2;
}
}
13 changes: 10 additions & 3 deletions ui/app/components/breadcrumbs/default.hbs
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
{{! template-lint-disable no-unknown-arguments-for-builtin-components }}
<li data-test-breadcrumb-default>
<li data-test-breadcrumb-default
{{(modifier
this.keyboardShortcut
label="Go up a level"
pattern=(array "u")
menuLevel=true
action=(action this.traverseUpALevel @crumb.args)
)}}
>
<LinkTo
@params={{@crumb.args}}
data-test-breadcrumb={{@crumb.args.firstObject}}
>
data-test-breadcrumb={{@crumb.args.firstObject}}>
{{#if @crumb.title}}
<dl>
<dt>
Expand Down
18 changes: 18 additions & 0 deletions ui/app/components/breadcrumbs/default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { action } from '@ember/object';
import Component from '@glimmer/component';
import KeyboardShortcutModifier from 'nomad-ui/modifiers/keyboard-shortcut';
import { inject as service } from '@ember/service';

export default class BreadcrumbsTemplate extends Component {
@service router;

@action
traverseUpALevel(args) {
const [path, ...rest] = args;
this.router.transitionTo(path, ...rest);
}

get keyboardShortcut() {
return this.args.isOneCrumbUp() ? KeyboardShortcutModifier : null;
}
}
10 changes: 9 additions & 1 deletion ui/app/components/breadcrumbs/job.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,15 @@
</LinkTo>
</li>
{{/if}}
<li>
<li
{{(modifier
this.keyboardShortcut
label="Go up a level"
pattern=(array "u")
menuLevel=true
action=(action this.traverseUpALevel (array "jobs.job" this.job.idWithNamespace))
)}}
>
<LinkTo
@route="jobs.job.index"
@model={{this.job}}
Expand Down
4 changes: 2 additions & 2 deletions ui/app/components/breadcrumbs/job.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { assert } from '@ember/debug';
import { action } from '@ember/object';
import Component from '@glimmer/component';
import BreadcrumbsTemplate from './default';

export default class BreadcrumbsJob extends Component {
export default class BreadcrumbsJob extends BreadcrumbsTemplate {
get job() {
return this.args.crumb.job;
}
Expand Down
4 changes: 2 additions & 2 deletions ui/app/templates/components/app-breadcrumbs.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Breadcrumbs as |breadcrumbs|>
{{#each breadcrumbs as |crumb|}}
{{#each breadcrumbs as |crumb iter|}}
{{#let crumb.args.crumb as |c|}}
{{component (concat "breadcrumbs/" (or c.type "default")) crumb=c}}
{{component (concat "breadcrumbs/" (or c.type "default")) crumb=c isOneCrumbUp=(action this.isOneCrumbUp iter breadcrumbs.length)}}
{{/let}}
{{/each}}
</Breadcrumbs>

0 comments on commit 153354e

Please sign in to comment.