mirror of https://github.com/rancher/ui.git
223 lines
6.4 KiB
JavaScript
223 lines
6.4 KiB
JavaScript
import Component from '@ember/component';
|
|
import { inject as service } from '@ember/service';
|
|
import { set, get, observer, setProperties } from '@ember/object';
|
|
import { alias } from '@ember/object/computed';
|
|
import { next } from '@ember/runloop';
|
|
|
|
export default Component.extend({
|
|
growl: service(),
|
|
intl: service(),
|
|
router: service(),
|
|
modalService: service('modal'),
|
|
|
|
errors: null,
|
|
selectedConfig: null,
|
|
showAdvanced: false,
|
|
pushConfig: true,
|
|
when: null,
|
|
selectedNotification: null,
|
|
notificationEnabled: false,
|
|
|
|
pipeline: alias('model.pipelineConfig'),
|
|
selectedBranch: alias('pipeline.selectedBranch'),
|
|
actions: {
|
|
save(success){
|
|
let pipeline = get(this, 'model.pipeline').clone();
|
|
const unSyncConfigs = {};
|
|
const updatedBranch = [];
|
|
|
|
const key = get(this, 'selectedBranch');
|
|
const branch = (get(this, 'pipeline.branches') || []).findBy('branch', key);
|
|
let current;
|
|
|
|
if (!this.validateNotification()) {
|
|
success()
|
|
|
|
return
|
|
}
|
|
|
|
const selectedNotification = get(this, 'selectedNotification')
|
|
|
|
set(branch, 'config.notification', selectedNotification)
|
|
|
|
if ( !get(branch, 'config') || !get(branch, 'config.stages') || get(branch, 'config.stages.length') < 2 ) {
|
|
current = 'null';
|
|
} else {
|
|
const config = Object.assign({}, get(branch, 'config'));
|
|
|
|
set(config, 'stages', get(config, 'stages').slice(1));
|
|
current = JSON.stringify(config);
|
|
}
|
|
const originConfigs = JSON.parse(get(branch, 'rawBranches'));
|
|
const origin = JSON.stringify(originConfigs[key]);
|
|
|
|
if ( current !== origin ) {
|
|
const config = Object.assign({}, get(branch, 'config'));
|
|
const stages = get(config, 'stages').filter((stage) => get(stage, 'steps') && get(stage, 'steps.length') && !get(stage, 'steps.firstObject.sourceCodeConfig') );
|
|
const branches = get(config, 'branch');
|
|
|
|
set(config, 'stages', stages);
|
|
set(config, 'branch', branches);
|
|
if ( get(config, 'timeout') ) {
|
|
set(config, 'timeout', parseInt(get(config, 'timeout'), 10));
|
|
}
|
|
unSyncConfigs[key] = config;
|
|
updatedBranch.push(key);
|
|
}
|
|
|
|
set(pipeline, 'unSyncConfigs', unSyncConfigs);
|
|
|
|
if ( get(updatedBranch, 'length') ) {
|
|
get(this, 'modalService').toggleModal('confirm-update-config', {
|
|
updatedBranch,
|
|
pushToRepo: () => {
|
|
this.submit(pipeline, success, true)
|
|
},
|
|
|
|
download: () => {
|
|
this.download(pipeline, success);
|
|
},
|
|
|
|
cancel: () => {
|
|
success(false)
|
|
},
|
|
});
|
|
} else {
|
|
this.submit(pipeline, success);
|
|
}
|
|
},
|
|
|
|
cancel(){
|
|
get(this, 'router').transitionTo('authenticated.project.pipeline.pipelines');
|
|
},
|
|
|
|
select(branch){
|
|
set(this, 'selectedBranch', get(branch, 'branch'));
|
|
},
|
|
|
|
enableBranch() {
|
|
const branch = (get(this, 'pipeline.branches') || []).findBy('branch', get(this, 'selectedBranch'));
|
|
|
|
set(branch, 'config', {
|
|
stages: [{
|
|
name: 'clone',
|
|
steps: [{ sourceCodeConfig: {}, }]
|
|
}],
|
|
timeout: 60
|
|
});
|
|
this.branchDidChange();
|
|
},
|
|
},
|
|
|
|
whenDidChange: observer('when', function(){
|
|
const branches = get(this, 'when.branch');
|
|
|
|
if ( get(this, 'selectedConfig') ) {
|
|
if ( !get(this, 'selectedConfig.branch') && Object.keys(branches).length === 0 ) {
|
|
return;
|
|
}
|
|
set(this, 'selectedConfig.branch', branches);
|
|
}
|
|
}),
|
|
|
|
selectedConfigDidChange: observer('selectedConfig', function(){
|
|
set(this, 'showAdvanced', false);
|
|
const branches = get(this, 'selectedConfig.branch') || {};
|
|
const defaultNotification = { recipients: [] }
|
|
let notification = get(this, 'selectedConfig.notification')
|
|
|
|
if (!notification) {
|
|
notification = defaultNotification
|
|
set(this, 'selectedConfig.notification', notification)
|
|
}
|
|
|
|
if ( get(this, 'selectedConfig') ) {
|
|
setProperties(this, {
|
|
when: { branch: branches },
|
|
selectedNotification: notification,
|
|
})
|
|
next(() => {
|
|
set(this, 'showAdvanced', true);
|
|
});
|
|
}
|
|
}),
|
|
|
|
branchDidChange: observer('pipeline.branches.@each.config', 'selectedBranch', function(){
|
|
const branch = (get(this, 'pipeline.branches') || []).findBy('branch', get(this, 'selectedBranch'));
|
|
|
|
if ( !branch ) {
|
|
return;
|
|
}
|
|
if ( !get(branch, 'config') ) {
|
|
set(branch, 'config', {});
|
|
}
|
|
if ( !get(branch, 'config.stages') ) {
|
|
set(branch, 'config.stages', []);
|
|
}
|
|
set(this, 'selectedConfig', get(branch, 'config'));
|
|
}),
|
|
|
|
validateNotification() {
|
|
const notificationEnabled = get(this, 'notificationEnabled')
|
|
|
|
if (!notificationEnabled) {
|
|
return true
|
|
}
|
|
|
|
let errors = []
|
|
const intl = get(this, 'intl')
|
|
|
|
set(this, 'errors', [])
|
|
|
|
const selectedNotification = get(this, 'selectedNotification')
|
|
const { condition = [], recipients = [] } = selectedNotification
|
|
const recipientsError = intl.t('pipelineNotification.recipients.required')
|
|
const conditionError = intl.t('pipelineNotification.condition.required')
|
|
|
|
if (condition.length > 0) {
|
|
const { notifier, recipient } = recipients[0]
|
|
|
|
if (!notifier || !recipient) {
|
|
errors.pushObject(recipientsError)
|
|
}
|
|
}
|
|
|
|
if (condition.length === 0) {
|
|
const { notifier, recipient } = recipients[0]
|
|
|
|
if (notifier || recipient) {
|
|
errors.pushObject(conditionError)
|
|
} else {
|
|
errors.pushObjects([recipientsError, conditionError])
|
|
}
|
|
}
|
|
|
|
set(this, 'errors', errors)
|
|
|
|
return errors.length === 0 ? true : false
|
|
},
|
|
|
|
download(pipeline, success) {
|
|
console.error('Pipeline download no longer supported');
|
|
|
|
success(false);
|
|
},
|
|
|
|
submit(pipeline, success, pushToRepo = false) {
|
|
const unSyncConfigs = get(pipeline, 'unSyncConfigs');
|
|
|
|
if ( pushToRepo ) {
|
|
pipeline.doAction('pushconfig', { configs: unSyncConfigs }).then(() => {
|
|
success(true);
|
|
get(this, 'router').transitionTo('authenticated.project.pipeline.pipelines');
|
|
}).catch(() => {
|
|
success(false);
|
|
});
|
|
} else {
|
|
success(true);
|
|
get(this, 'router').transitionTo('authenticated.project.pipeline.pipelines');
|
|
}
|
|
},
|
|
|
|
});
|