mirror of
https://github.com/kemko/nomad.git
synced 2026-01-06 10:25:42 +03:00
Use the new breadcrumbs pattern for allocations
This commit is contained in:
@@ -3,12 +3,38 @@ import { collect } from '@ember/object/computed';
|
||||
import { watchRecord } from 'nomad-ui/utils/properties/watch';
|
||||
import WithWatchers from 'nomad-ui/mixins/with-watchers';
|
||||
import notifyError from 'nomad-ui/utils/notify-error';
|
||||
import { qpBuilder } from 'nomad-ui/utils/classes/query-params';
|
||||
import { jobCrumbs } from 'nomad-ui/utils/breadcrumb-utils';
|
||||
|
||||
export default Route.extend(WithWatchers, {
|
||||
startWatchers(controller, model) {
|
||||
controller.set('watcher', this.get('watch').perform(model));
|
||||
},
|
||||
|
||||
// Allocation breadcrumbs extend from job / task group breadcrumbs
|
||||
// even though the route structure does not.
|
||||
breadcrumbs(model) {
|
||||
return [
|
||||
{ label: 'Jobs', args: ['jobs'] },
|
||||
...jobCrumbs(model.get('job')),
|
||||
{
|
||||
label: model.get('taskGroupName'),
|
||||
args: [
|
||||
'jobs.job.task-group',
|
||||
model.get('job'),
|
||||
model.get('taskGroupName'),
|
||||
qpBuilder({
|
||||
jobNamespace: model.get('namespace.name') || 'default',
|
||||
}),
|
||||
],
|
||||
},
|
||||
{
|
||||
label: model.get('shortId'),
|
||||
args: ['allocations.allocation', model],
|
||||
},
|
||||
];
|
||||
},
|
||||
|
||||
model() {
|
||||
// Preload the job for the allocation since it's required for the breadcrumb trail
|
||||
return this._super(...arguments)
|
||||
|
||||
@@ -2,38 +2,13 @@ import { inject as service } from '@ember/service';
|
||||
import Route from '@ember/routing/route';
|
||||
import RSVP from 'rsvp';
|
||||
import notifyError from 'nomad-ui/utils/notify-error';
|
||||
import PromiseObject from 'nomad-ui/utils/classes/promise-object';
|
||||
import { qpBuilder } from 'nomad-ui/utils/classes/query-params';
|
||||
|
||||
const jobCrumb = job => ({
|
||||
label: job.get('trimmedName'),
|
||||
args: [
|
||||
'jobs.job.index',
|
||||
job.get('plainId'),
|
||||
qpBuilder({
|
||||
jobNamespace: job.get('namespace.name') || 'default',
|
||||
}),
|
||||
],
|
||||
});
|
||||
import { jobCrumbs } from 'nomad-ui/utils/breadcrumb-utils';
|
||||
|
||||
export default Route.extend({
|
||||
store: service(),
|
||||
token: service(),
|
||||
|
||||
breadcrumbs(model) {
|
||||
if (!model) return [];
|
||||
|
||||
if (model.get('parent.content')) {
|
||||
return [
|
||||
PromiseObject.create({
|
||||
promise: model.get('parent').then(parent => jobCrumb(parent)),
|
||||
}),
|
||||
jobCrumb(model),
|
||||
];
|
||||
} else {
|
||||
return [jobCrumb(model)];
|
||||
}
|
||||
},
|
||||
breadcrumbs: jobCrumbs,
|
||||
|
||||
serialize(model) {
|
||||
return { job_name: model.get('plainId') };
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
{{#global-header class="page-header"}}
|
||||
{{#each breadcrumbs as |breadcrumb index|}}
|
||||
<li class="{{if (eq (inc index) breadcrumbs.length) "is-active"}}">
|
||||
{{#link-to
|
||||
data-test-breadcrumb=breadcrumb.label
|
||||
params=breadcrumb.args}}
|
||||
{{breadcrumb.label}}
|
||||
{{/link-to}}
|
||||
</li>
|
||||
{{/each}}
|
||||
{{app-breadcrumbs}}
|
||||
{{/global-header}}
|
||||
{{#gutter-menu class="page-body"}}
|
||||
<section class="section">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{{#each breadcrumbs as |breadcrumb index|}}
|
||||
<li class="{{if (eq (inc index) breadcrumbs.length) "is-active"}}">
|
||||
{{#if breadcrumb.isPending}}
|
||||
…
|
||||
<a href="#" aria-label="loading">…</a>
|
||||
{{else}}
|
||||
{{#link-to
|
||||
params=breadcrumb.args
|
||||
|
||||
28
ui/app/utils/breadcrumb-utils.js
Normal file
28
ui/app/utils/breadcrumb-utils.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import PromiseObject from 'nomad-ui/utils/classes/promise-object';
|
||||
import { qpBuilder } from 'nomad-ui/utils/classes/query-params';
|
||||
|
||||
export const jobCrumb = job => ({
|
||||
label: job.get('trimmedName'),
|
||||
args: [
|
||||
'jobs.job.index',
|
||||
job.get('plainId'),
|
||||
qpBuilder({
|
||||
jobNamespace: job.get('namespace.name') || 'default',
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
export const jobCrumbs = job => {
|
||||
if (!job) return [];
|
||||
|
||||
if (job.get('parent.content')) {
|
||||
return [
|
||||
PromiseObject.create({
|
||||
promise: job.get('parent').then(parent => jobCrumb(parent)),
|
||||
}),
|
||||
jobCrumb(job),
|
||||
];
|
||||
} else {
|
||||
return [jobCrumb(job)];
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user