Skip to content

Commit

Permalink
feat: create trigger component
Browse files Browse the repository at this point in the history
Create Trigger Component and deprecate Breadcrumb-Utils pattern.
  • Loading branch information
ChaiWithJai committed Dec 8, 2021
1 parent 5f9fc61 commit 5a1df04
Show file tree
Hide file tree
Showing 16 changed files with 171 additions and 48 deletions.
5 changes: 5 additions & 0 deletions ui/app/components/breadcrumbs/default.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<li>
<LinkTo @params={{@crumb.args}} data-test-breadcrumb={{@crumb.args.firstObject}}>
{{@crumb.label}}
</LinkTo>
</li>
19 changes: 19 additions & 0 deletions ui/app/components/breadcrumbs/job.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Trigger @do={{this.fetchParent}} as |trigger|>
{{did-insert trigger.fns.do}}
{{#if trigger.data.result}}
<li>
<LinkTo @params={{trigger.data.result.args}} data-test-breadcrumb={{@crumb.args.firstObject}}>
{{trigger.data.result.label}}
</LinkTo>
</li>
{{/if}}
<li>
<LinkTo
@route={{@crumbs.args}}
data-test-breadcrumb={{@crumb.args.firstObject}}
{{!-- @model={{trigger.data.result}} FIX THIS PARAMETER --}}
>
{{this.crumb.label}}
</LinkTo>
</li>
</Trigger>
36 changes: 36 additions & 0 deletions ui/app/components/breadcrumbs/job.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { action } from '@ember/object';
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { qpBuilder } from 'nomad-ui/utils/classes/query-params';

export default class BreadcrumbsJob extends Component {
get job() {
return this.args.crumb.job;
}

@tracked parent = null;

generateCrumb(job) {
return {
label: job.get('trimmedName') || job.trimmedName,
args: [
'jobs.job.index',
job.get('plainId') || job.plainId,
qpBuilder({
jobNamespace: job.get('namespace.name') || 'default',
}),
],
};
}

get crumb() {
if (!this.job) return null;
return this.generateCrumb(this.job);
}

@action
fetchParent() {
this.parent = this.job.parent || this.job.get('parent');
return this.generateCrumb(this.parent);
}
}
1 change: 1 addition & 0 deletions ui/app/components/trigger.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{yield (hash data=this.data fns=this.fns)}}
62 changes: 62 additions & 0 deletions ui/app/components/trigger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { action } from '@ember/object';
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { task } from 'ember-concurrency';

const noOp = () => undefined;

export default class Trigger extends Component {
@tracked error = null;
@tracked result = null;

get isBusy() {
return this.triggerTask.isRunning;
}

get isIdle() {
return this.triggerTask.isIdle;
}

get isSuccess() {
return this.triggerTask.last.isSuccessful;
}

get isError() {
return this.triggerTask.lastErrored;
}

get fns() {
return {
do: this.onTrigger,
};
}

get onError() {
return this.args.onError ?? noOp;
}

get onSuccess() {
return this.args.onSuccess ?? noOp;
}

get data() {
const { isBusy, isIdle, isSuccess, isError, result } = this;
return { isBusy, isIdle, isSuccess, isError, result };
}

@task(function*() {
try {
this.result = yield this.args.do();
this.onSuccess(this.result);
} catch (e) {
this.error = e;
this.onError(this.error);
}
})
triggerTask;

@action
onTrigger() {
this.triggerTask.perform();
}
}
3 changes: 1 addition & 2 deletions ui/app/controllers/allocations/allocation.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import Controller from '@ember/controller';
import { qpBuilder } from 'nomad-ui/utils/classes/query-params';
import { jobCrumbs } from 'nomad-ui/utils/breadcrumb-utils';

export default class AllocationsAllocationController extends Controller {
// Allocation breadcrumbs extend from job / task group breadcrumbs
Expand All @@ -13,7 +12,7 @@ export default class AllocationsAllocationController extends Controller {

return [
{ label: 'Jobs', args: ['jobs.index', jobQueryParams] },
...jobCrumbs(model.get('job')),
{ type: 'job', job: model.get('job') },
{
label: model.get('taskGroupName'),
args: [
Expand Down
2 changes: 1 addition & 1 deletion ui/app/controllers/clients/client.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Controller from '@ember/controller';

export default class ClientsClientController extends Controller {
breadcrumbs() {
get breadcrumbs() {
const model = this.model;
if (!model) return [];
return [
Expand Down
5 changes: 3 additions & 2 deletions ui/app/controllers/jobs/job.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Controller from '@ember/controller';
import { jobCrumbs } from 'nomad-ui/utils/breadcrumb-utils';

export default class JobController extends Controller {
queryParams = [
Expand All @@ -9,5 +8,7 @@ export default class JobController extends Controller {
];
jobNamespace = 'default';

breadcrumbs = jobCrumbs(this.model);
get breadcrumbs() {
return [{ type: 'job', job: this.model }];
}
}
14 changes: 6 additions & 8 deletions ui/app/templates/components/app-breadcrumbs.hbs
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
<Breadcrumbs as |bb|>
{{#each bb as |breadcrumb index|}}
{{#each breadcrumb.args.crumb as |b|}}
<li class="{{if (eq (inc index) this.b.length) "is-active"}}">
{{#if b.isPending}}
{{#if b.isPending}}
<li class="{{if (eq (inc index) this.b.length) "is-active"}}">
<a href="#" aria-label="loading" data-test-breadcrumb="loading">
</a>
{{else}}
<LinkTo @params={{b.args}} data-test-breadcrumb={{b.args.firstObject}}>
{{b.label}}
</LinkTo>
{{/if}}
</li>
</li>
{{else}}
{{component (concat "breadcrumbs/" (or b.type "default")) crumb=b}}
{{/if}}
{{/each}}
{{/each}}
</Breadcrumbs>
3 changes: 1 addition & 2 deletions ui/app/templates/components/job-page/parts/summary.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,4 @@
</ol>
{{/component}}
</a.body>
</ListAccordion>
<Breadcrumb @bucket="navigation" @crumb={{this.breadcrumbs}} />
</ListAccordion>
4 changes: 2 additions & 2 deletions ui/app/templates/jobs.hbs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Breadcrumb @bucket="navigation" @crumb={{this.breadcrumbs}} />
<PageLayout>
{{outlet}}
</PageLayout>
<Breadcrumb @bucket="navigation" @crumb={{this.breadcrumbs}} />
</PageLayout>
2 changes: 1 addition & 1 deletion ui/app/templates/servers/server.hbs
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{{outlet}}
{{outlet}}<Breadcrumb bucket="navigation" crumb={{this.metadata.breadcrumb}} />
29 changes: 0 additions & 29 deletions ui/app/utils/breadcrumb-utils.js

This file was deleted.

2 changes: 1 addition & 1 deletion ui/config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ module.exports = function(environment) {
APP: {
blockingQueries: true,
// TODO: revert before merging to main.
mirageScenario: 'smallCluster', // convert to 'sysbatchSmall' when working on feature
mirageScenario: 'allJobTypes', // convert to 'sysbatchSmall' when working on feature
mirageWithNamespaces: false,
mirageWithTokens: true,
mirageWithRegions: true,
Expand Down
1 change: 1 addition & 0 deletions ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
"ember-power-select": "^4.1.3",
"ember-qunit": "^4.6.0",
"ember-qunit-nice-errors": "^1.2.0",
"ember-render-helpers": "^0.2.0",
"ember-resolver": "^8.0.0",
"ember-responsive": "^3.0.4",
"ember-sinon": "^4.0.0",
Expand Down
31 changes: 31 additions & 0 deletions ui/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4345,6 +4345,13 @@ ansi-to-html@^0.6.11, ansi-to-html@^0.6.6:
dependencies:
entities "^1.1.2"

ansi-to-html@^0.6.15:
version "0.6.15"
resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7"
integrity sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==
dependencies:
entities "^2.0.0"

ansicolors@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef"
Expand Down Expand Up @@ -8925,6 +8932,22 @@ ember-cli-typescript@^3.0.0, ember-cli-typescript@^3.1.3, ember-cli-typescript@^
stagehand "^1.0.0"
walk-sync "^2.0.0"

ember-cli-typescript@^4.0.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-4.2.1.tgz#54d08fc90318cc986f3ea562f93ce58a6cc4c24d"
integrity sha512-0iKTZ+/wH6UB/VTWKvGuXlmwiE8HSIGcxHamwNhEC5x1mN3z8RfvsFZdQWYUzIWFN2Tek0gmepGRPTwWdBYl/A==
dependencies:
ansi-to-html "^0.6.15"
broccoli-stew "^3.0.0"
debug "^4.0.0"
execa "^4.0.0"
fs-extra "^9.0.1"
resolve "^1.5.0"
rsvp "^4.8.1"
semver "^7.3.2"
stagehand "^1.0.0"
walk-sync "^2.2.0"

ember-cli-typescript@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-4.1.0.tgz#2ff17be2e6d26b58c88b1764cb73887e7176618b"
Expand Down Expand Up @@ -9426,6 +9449,14 @@ ember-qunit@^4.6.0:
ember-cli-test-loader "^2.2.0"
qunit "^2.9.3"

ember-render-helpers@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ember-render-helpers/-/ember-render-helpers-0.2.0.tgz#5f7af8ee74ae29f85e0d156b2775edff23f6de21"
integrity sha512-MnqGS8BnY3GJ+n5RZVVRqCwKjfXXMr5quKyqNu1vxft8oslOJuZ1f1dOesQouD+6LwD4Y9tWRVKNw+LOqM9ocw==
dependencies:
ember-cli-babel "^7.23.0"
ember-cli-typescript "^4.0.0"

ember-resolver@^8.0.0:
version "8.0.2"
resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-8.0.2.tgz#8a45a744aaf5391eb52b4cb393b3b06d2db1975c"
Expand Down

0 comments on commit 5a1df04

Please sign in to comment.