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(); } });