66ab14144a
This builds on API changes in #6017 and #6021 to conditionally turn off the “Run Job” button based on the current token’s capabilities, or the capabilities of the anonymous policy if no token is present. If you try to visit the job-run route directly, it redirects to the job list.
92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
import { inject as service } from '@ember/service';
|
|
import { next } from '@ember/runloop';
|
|
import Route from '@ember/routing/route';
|
|
import { AbortError } from '@ember-data/adapter/error';
|
|
import RSVP from 'rsvp';
|
|
|
|
export default Route.extend({
|
|
config: service(),
|
|
system: service(),
|
|
store: service(),
|
|
token: service(),
|
|
|
|
queryParams: {
|
|
region: {
|
|
refreshModel: true,
|
|
},
|
|
},
|
|
|
|
resetController(controller, isExiting) {
|
|
if (isExiting) {
|
|
controller.set('error', null);
|
|
}
|
|
},
|
|
|
|
beforeModel(transition) {
|
|
const fetchSelfTokenAndPolicies = this.get('token.fetchSelfTokenAndPolicies')
|
|
.perform()
|
|
.catch();
|
|
|
|
return RSVP.all([
|
|
this.get('system.regions'),
|
|
this.get('system.defaultRegion'),
|
|
fetchSelfTokenAndPolicies,
|
|
]).then(promises => {
|
|
if (!this.get('system.shouldShowRegions')) return promises;
|
|
|
|
const queryParam = transition.to.queryParams.region;
|
|
const defaultRegion = this.get('system.defaultRegion.region');
|
|
const currentRegion = this.get('system.activeRegion') || defaultRegion;
|
|
|
|
// Only reset the store if the region actually changed
|
|
if (
|
|
(queryParam && queryParam !== currentRegion) ||
|
|
(!queryParam && currentRegion !== defaultRegion)
|
|
) {
|
|
this.system.reset();
|
|
this.store.unloadAll();
|
|
}
|
|
|
|
this.set('system.activeRegion', queryParam || defaultRegion);
|
|
|
|
return promises;
|
|
});
|
|
},
|
|
|
|
// Model is being used as a way to transfer the provided region
|
|
// query param to update the controller state.
|
|
model(params) {
|
|
return params.region;
|
|
},
|
|
|
|
setupController(controller, model) {
|
|
const queryParam = model;
|
|
|
|
if (queryParam === this.get('system.defaultRegion.region')) {
|
|
next(() => {
|
|
controller.set('region', null);
|
|
});
|
|
}
|
|
|
|
return this._super(...arguments);
|
|
},
|
|
|
|
actions: {
|
|
didTransition() {
|
|
if (!this.get('config.isTest')) {
|
|
window.scrollTo(0, 0);
|
|
}
|
|
},
|
|
|
|
willTransition() {
|
|
this.controllerFor('application').set('error', null);
|
|
},
|
|
|
|
error(error) {
|
|
if (!(error instanceof AbortError)) {
|
|
this.controllerFor('application').set('error', error);
|
|
}
|
|
},
|
|
},
|
|
});
|