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

77 lines
1.9 KiB
JavaScript

import Component from '@ember/component';
import { next } from '@ember/runloop';
import { alias } from '@ember/object/computed';
import ModalBase from 'shared/mixins/modal-base';
import layout from './template';
import { set, get, observer } from '@ember/object';
export default Component.extend(ModalBase, {
layout,
classNames: ['large-modal', 'alert'],
branch: null,
branchesChoices: null,
loading: false,
errors: null,
config: null,
model: alias('modalService.modalOpts.originalModel'),
init() {
this._super(...arguments);
set(this, 'loading', true);
get(this, 'model').followLink('branches').then((res) => {
if ( this.isDestroyed || this.isDestroying ) {
return;
}
const branchesChoices = JSON.parse(res).map((branch) => {
return { branch }
}).sortBy('branch');
set(this, 'branchesChoices', branchesChoices);
if ( get(this, 'branchesChoices.length') ) {
next(() => {
set(this, 'branch', get(this, 'branchesChoices.firstObject.branch'));
});
}
})
},
actions: {
save(success) {
get(this, 'store').request({
data: get(this, 'config'),
url: `${ get(this, 'model.links.yaml') }?branch=${ get(this, 'branch') }`,
method: 'PUT'
})
.then(() => {
this.send('cancel');
})
.catch((err) => {
set(this, 'errors', [err.message]);
success(false);
});
}
},
branchDidChange: observer('branch', function() {
const branch = get(this, 'branch');
if ( branch ) {
set(this, 'loading', true);
get(this, 'model').followLink('yaml', { filter: { branch } }).then((res) => {
if ( this.isDestroyed || this.isDestroying ) {
return;
}
set(this, 'config', res);
}).finally(() => set(this, 'loading', false));
}
}),
});