ui/lib/pipeline/addon/components/modal-pipeline-run/component.js

69 lines
1.8 KiB
JavaScript

import Component from '@ember/component';
import { alias } from '@ember/object/computed';
import ModalBase from 'shared/mixins/modal-base';
import { inject as service } from '@ember/service';
import layout from './template';
import { get, set } from '@ember/object';
import { next } from '@ember/runloop';
export default Component.extend(ModalBase, {
router: service(),
layout,
classNames: ['medium-modal', 'alert'],
branch: null,
branchesChoices: null,
errors: [],
loading: false,
model: alias('modalService.modalOpts.originalModel'),
init() {
this._super(...arguments);
set(this, 'loading', true);
get(this, 'model').followLink('branches')
.then((branches) => {
if ( this.isDestroyed || this.isDestroying ) {
return;
}
set(this, 'branchesChoices', JSON.parse(branches).map((b) => {
return {
label: b,
value: b
};
})
.sortBy('label'));
if ( get(this, 'branchesChoices.length') ) {
next(() => {
set(this, 'branch', get(this, 'branchesChoices.firstObject.value'));
});
} else {
set(this, 'loading', false);
}
})
.finally(() => {
set(this, 'loading', false);
});
},
actions: {
save(cb) {
const branch = get(this, 'branch');
get(this, 'model').doAction('run', { branch, })
.then(() => {
const pipelineId = get(this, 'model.id');
const nextRun = get(this, 'model.nextRun');
this.send('cancel');
get(this, 'router').transitionTo('authenticated.project.pipeline.pipelines.run', pipelineId, nextRun);
})
.finally(() => {
cb();
});
},
}
});