ui/lib/pipeline/addon/components/input-image/component.js

93 lines
2.7 KiB
JavaScript

import Component from '@ember/component';
import { on } from '@ember/object/evented';
import { observer } from '@ember/object';
import {analyzeImageRepo} from 'pipeline/utils/pipelineStep';
import layout from './template';
import { inject as service } from '@ember/service';
export default Component.extend({
layout,
registryField: false,
value: '',
registries: '',
store: service(),
width: function(){
let registryFiled = this.get('registryField');
if(registryFiled){
return '30%';
}
return '48%';
}.property('registryFiled'),
state: {
registries: [],
imageRegistry: '',
imageRepo: '',
imageTag: '',
registryExist: true,
savingRegistry: false,
},
init(){
this._super(...arguments);
let value = this.get('value');
if(value){
let output = analyzeImageRepo(value);
this.set('state.imageRegistry', output.registry);
this.set('state.imageRepo',output.repository);
this.set('state.imageTag', output.tag);
}else{
this.set('state.imageRegistry', 'index.docker.io');
this.set('state.imageRepo', '');
this.set('state.imageTag', '');
}
},
observerDockerRegistry: on('init', observer('registries.[]',function(){
this.set('state.registries', this.get('registries').map(ele=>{
let registry = Object.keys(ele.registries)[0];
return {
label: registry,
value: registry
}
}));
})),
observer: observer('state.imageRepo','state.imageTag','state.imageRegistry',function(){
let state = this.get('state');
let registryField = this.get('registryField');
if(!state.imageRepo||!state.imageTag||!state.imageRegistry){
this.set('value','');
return
}
let repoName = `${state.imageRepo}:${state.imageTag}`;
if(registryField&&state.imageRegistry!=='index.docker.io'){
repoName = `${state.imageRegistry}/${repoName}`
}
this.set('value',repoName);
}),
observerRegistry: on('init', observer('state.imageRegistry','state.registries.[]',function(){
let state = this.get('state');
if(state.registries.find(ele=>state.imageRegistry===ele.value)){
this.set('state.registryExist',true);
this.set('modalState.saveDisabled', false);
}else{
this.set('state.registryExist',false);
this.set('modalState.saveDisabled', true);
}
})),
actions: {
saveRegistry(){
let state = this.get('state');
this.set('state.savingRegistry', true);
this.get('store').createRecord({
type: 'dockerCredential',
registries: {
[`${state.imageRegistry}`]: {
username: state.username,
password: state.password,
}
}
}).save().finally(()=>{
this.set('state.savingRegistry', false);
});
}
}
});