Files
threshold-ui/ui/admin/app/routes/scopes/scope/targets/target/host-sources.js
T

68 lines
2.0 KiB
JavaScript

import Route from '@ember/routing/route';
import { all, hash } from 'rsvp';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import { loading } from 'ember-loading';
import { confirm } from 'core/decorators/confirm';
import { notifySuccess, notifyError } from 'core/decorators/notify';
export default class ScopesScopeTargetsTargetHostSourcesRoute extends Route {
// =services
@service intl;
@service notify;
// =methods
/**
* Loads all host-sets and associated host-catalogs under the current target
* and it's parent scope.
* @return {Promise{[HostSetModel, HostCatalogModel]}}
*/
beforeModel() {
const { scopeID, host_sources } = this.modelFor(
'scopes.scope.targets.target'
);
const promises = host_sources.map(
({ host_source_id, host_catalog_id: hostCatalogID }) =>
hash({
// TODO: multiple host sets may belong to the same catalog,
// resulting in the catalog being loaded multiple times.
// An improvement would be to find the unique set of catalogs first.
hostCatalog: this.store.findRecord('host-catalog', hostCatalogID, {
adapterOptions: { scopeID },
}),
hostSet: this.store.findRecord('host-set', host_source_id, {
adapterOptions: { scopeID, hostCatalogID },
}),
})
);
return all(promises);
}
/**
* Returns the previously loaded target instance.
* @return {TargetModel}
*/
model() {
return this.modelFor('scopes.scope.targets.target');
}
// =actions
/**
* Removes a host set from the current target and redirects to index.
* @param {TargetModel} target
* @param {HostSetModel} hostSet
*/
@action
@loading
@confirm('questions.remove-confirm')
@notifyError(({ message }) => message, { catch: true })
@notifySuccess('notifications.remove-success')
async removeHostSource(target, hostSet) {
await target.removeHostSource(hostSet.id);
this.refresh();
}
}