ui/lib/shared/addon/components/cru-private-registry/component.js

102 lines
2.6 KiB
JavaScript

import Component from '@ember/component';
import layout from './template';
import {
get,
set,
setProperties,
observer
} from '@ember/object';
import { alias, gt } from '@ember/object/computed';
import { inject as service } from '@ember/service';
export default Component.extend({
globalStore: service(),
layout,
configName: 'rancherKubernetesEngineConfig',
cluster: null,
config: null,
editing: true,
urlInvalid: null,
urlWarning: null,
urlError: null,
clusterTemplateCreate: false,
enablePrivateRegistry: false,
privateRegistry: null,
clusterTemplateRevision: null,
applyClusterTemplate: null,
privateRegistries: alias('config.privateRegistries'),
multipleRegistries: gt('privateRegistries.length', 1),
init() {
this._super(...arguments);
set(this, 'config', get(this, `cluster.${ get(this, 'configName') }`));
if (this.config.privateRegistries) {
if ( this.config.privateRegistries.length >= 1 ) {
setProperties(this, {
privateRegistry: get(this, 'config.privateRegistries.firstObject'),
enablePrivateRegistry: true,
});
}
}
},
actions: {
addRegistry(isDefault = true) {
this.addRegistry(set(this, 'privateRegistry', this.newPrivateRegistry('privateRegistry', isDefault)));
},
removeRegistry(registry) {
let match = null;
if (this.multipleRegistries) {
let prWithout = this.privateRegistries.without(registry);
match = prWithout.length >= 1 ? prWithout.firstObject : null;
}
set(this, 'privateRegistry', match)
this.removeRegistry(registry);
},
},
defaultSet: observer('privateRegistries.@each.{isDefault}', function() {
const { privateRegistries } = this;
if (privateRegistries && privateRegistries.findBy('isDefault', true)) {
set(this, 'hasDefault', true);
} else {
set(this, 'hasDefault', false);
}
}),
enablePrivateRegistryChanged: observer('enablePrivateRegistry', function() {
if (this.enablePrivateRegistry) {
this.send('addRegistry');
} else {
this.send('removeRegistry', this.privateRegistry);
}
}),
newPrivateRegistry(registryType = 'privateRegistry', isDefault = false) {
return get(this, 'globalStore').createRecord({
isDefault,
type: registryType,
});
},
addRegistry() {
throw new Error('addRegistry action is required!');
},
removeRegistry() {
throw new Error('removeRegistry action is required!');
},
});