ui/lib/pipeline/addon/components/pipeline-trigger/component.js

90 lines
2.7 KiB
JavaScript

import Component from '@ember/component';
import { timezones } from 'pipeline/utils/timezones';
import { alias } from '@ember/object/computed';
import { observer } from '@ember/object';
import layout from './template'
import { set, get } from '@ember/object';
export default Component.extend({
layout,
timezones: timezones,
selected: '',
selectedText:'',
edit: true,
cronA: '04',
cronB: '00',
cron: {
hour: '04',
min: '00'
},
state:{
setCustomCron: false
},
customCron: '0 4 * * *',
cronType: 'everyday',
pipeline: alias('modalOpts.pipeline'),
webhookDisabled: function(){
let admin = get(this, 'selectedRepo.permissions.admin');
return !admin;
}.property('selectedRepo.permissions.{admin}'),
init(){
this._super(...arguments);
},
initTimeZone: function(){
var triggerCronExpression = get(this, 'pipeline.triggerCronExpression');
if (triggerCronExpression) {
set(this, 'state.setCustomCron', true);
set(this, 'customCron', triggerCronExpression);
set(this, 'cronType', 'custom');
}else{
set(this, 'state.setCustomCron', false);
set(this, 'cronType', 'everyday');
}
},
customCronOberve: function(){
let customCron = get(this, 'customCron');
let state = get(this, 'state');
if(state.setCustomCron){
set(this, 'pipeline.triggerCronExpression', customCron);
}
}.observes('customCron'),
cronObserve: observer('cron.{hour,min}','cronType',function(){
let cron = get(this, 'cron');
let cronType = get(this, 'cronType');
if(cronType === 'everyday'){
let cronSyntax = `${cron.min} ${cron.hour} * * *`;
set(this, 'customCron', cronSyntax);
}
}),
setCustomCronObeseve: function(){
let state = get(this, 'state');
var triggerCronExpression = get(this, 'pipeline.triggerCronExpression');
if(state.setCustomCron){
if(!triggerCronExpression){
var t = new Date();
var timeZone = -t.getTimezoneOffset() / 60;
let selected = timezones.find(ele => (ele.offset === timeZone)&&ele.utcStr&&!ele.isdst);
set(this, 'pipeline.triggerCronTimezone', selected.utcStr);
set(this, 'cronType','everyday');
set(this, 'cron',{
hour: '04',
min: '00'
});
}
}else{
set(this, 'pipeline.triggerCronExpression', '');
}
}.observes('state.setCustomCron'),
observeOptionsChange: function(){
let trigger={
webhook: get(this, 'pipeline.triggerWebhookPush'),
cron: !!get(this, 'state.setCustomCron')
}
this.sendAction('triggerOptionsChange', trigger);
}.observes('pipeline.triggerWebhookPush', 'state.setCustomCron'),
didInsertElement(){
this.initTimeZone();
this.cronObserve();
}
});