ui/app/models/globaldns.js

81 lines
2.0 KiB
JavaScript

import Resource from '@rancher/ember-api-store/models/resource';
import { get, set, computed, setProperties } from '@ember/object';
import { inject as service } from '@ember/service';
import { reference } from '@rancher/ember-api-store/utils/denormalize';
import { next } from '@ember/runloop';
export default Resource.extend({
router: service(),
scope: service(),
multiClusterApp: reference('multiClusterAppId', 'multiClusterApp'),
target: computed('multiClusterAppId', 'projectIds.[]', function() {
// returns either a single multiClusterAppId or an array of project target ids
const out = {
type: null,
data: null,
};
const multiClusterAppId = this.multiClusterAppId;
const projectIds = this.projectIds;
if (multiClusterAppId && !projectIds) {
setProperties(out, {
type: 'single',
data: multiClusterAppId
});
} else if (projectIds && projectIds.length && !multiClusterAppId) {
setProperties(out, {
type: 'multi',
data: projectIds
});
}
return out;
}),
linkedProjects: computed('projectIds.[]', 'scope.allProjects.@each.id', function() {
const allProjects = get(this, 'scope.allProjects') || [];
const projectIds = this.projectIds || [];
const myProjects = [];
projectIds.forEach( (projectId) => {
let match = allProjects.findBy('id', projectId);
if (match) {
next(() => {
set(match, 'accessible', true);
myProjects.pushObject(match);
});
} else {
next(() => {
myProjects.pushObject({
id: projectId,
accessible: false,
});
});
}
});
return myProjects;
}),
canEdit: computed('links.update', function() {
return !!get(this, 'links.update');
}),
canRemove: computed('links.remove', function() {
return !!get(this, 'links.remove');
}),
actions: {
edit() {
this.router.transitionTo('global-admin.global-dns.entries.new', { queryParams: { id: this.id } } );
}
},
});