@c8y/ngx-components 1009.0.25 → 1009.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,5 +12,5 @@
12
12
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
13
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */function p(e,t,n,o){var a,i=arguments.length,s=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,o);else for(var r=e.length-1;r>=0;r--)(a=e[r])&&(s=(i<3?a(s):i>3?a(t,n,s):a(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}function m(e,t,n,o){return new(n||(n=Promise))((function(a,i){function s(e){try{l(o.next(e))}catch(e){i(e)}}function r(e){try{l(o.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}l((o=o.apply(e,t||[])).next())}))}function v(e,t){var n,o,a,i,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function r(i){return function(r){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,o&&(a=2&i[0]?o.return:i[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,i[1])).done)return a;switch(o=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(a=s.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){s.label=i[1];break}if(6===i[0]&&s.label<a[1]){s.label=a[1],a=i;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(i);break}a[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],o=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,r])}}}var g,f,y=function(){function e(e,t,o){this.alertService=e,this.inventoryService=t,this.client=o,this.ERROR_MESSAGES={pattern_multiEmail:n.gettext("Invalid email addresses."),pattern_singleEmail:n.gettext("Invalid email address.")},this.microserviceUrl="/service/reporting/schedule",this.headers={"Content-Type":"application/json"}}return e.prototype.getExport=function(e){return m(this,void 0,void 0,(function(){var t,n,o,a;return v(this,(function(i){switch(i.label){case 0:return[4,this.inventoryService.detail(e)];case 1:return n=i.sent(),o=n.data,200!==(a=n.res).status?this.alertService.addServerFailure({data:o,res:a}):t=o||{},[2,t]}}))}))},e.prototype.getScheduleList=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return[4,this.getExport(e)];case 1:return t=n.sent(),[2,this.extractScheduleListFromExport(t)]}}))}))},e.prototype.extractScheduleListFromExport=function(e){var t;return e&&(t=e.c8y_ScheduleConfiguration?e.c8y_ScheduleConfiguration:[]),o.orderBy(t,["timestamp"],["desc"])},e.prototype.addSchedule=function(e,t){return m(this,void 0,void 0,(function(){return v(this,(function(n){switch(n.label){case 0:return[4,this.updateSchedules(t,[],[e])];case 1:return[2,n.sent()]}}))}))},e.prototype.updateSchedule=function(e,t,n){return m(this,void 0,void 0,(function(){return v(this,(function(o){switch(o.label){case 0:return[4,this.updateSchedules(n,[e],[t])];case 1:return[2,o.sent()]}}))}))},e.prototype.updateSchedules=function(e,t,n){return void 0===t&&(t=[]),void 0===n&&(n=[]),m(this,void 0,void 0,(function(){var a,i,s,r,l,c;return v(this,(function(u){switch(u.label){case 0:return a=!1,[4,this.getExport(e)];case 1:return i=u.sent(),s=this.extractScheduleListFromExport(i),o.remove(s,(function(e){return o.some(t,(function(t){return o.isEqual(e,t)}))})),s.push.apply(s,n),i.c8y_ScheduleConfiguration=s,[4,this.inventoryService.update(i)];case 2:return r=u.sent(),l=r.data,200!==(c=r.res).status?[3,4]:[4,this.reschedule(e)];case 3:return a=u.sent(),[3,5];case 4:this.alertService.addServerFailure({data:l,res:c}),u.label=5;case 5:return[2,a]}}))}))},e.prototype.reschedule=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return t={method:"PUT",headers:this.headers},[4,this.client.fetch(this.microserviceUrl+"/"+e,t)];case 1:return[2,200===n.sent().status]}}))}))},e.prototype.deleteSchedule=function(e,t){return m(this,void 0,void 0,(function(){return v(this,(function(n){switch(n.label){case 0:return[4,this.updateSchedules(t,[e],[])];case 1:return[2,n.sent()]}}))}))},e.ctorParameters=function(){return[{type:n.AlertService},{type:a.InventoryService},{type:a.FetchClient}]},e=p([t.Injectable()],e)}();(g=e.ActionType||(e.ActionType={})).CREATE="create",g.EDIT="edit",g.DUPLICATE="duplicate",(f=e.Base||(e.Base={}))[f.Initial=1]="Initial",f[f.Hour=2]="Hour",f[f.Day=3]="Day",f[f.Week=4]="Week",f[f.Month=5]="Month",f[f.Year=6]="Year";var b=function(){function o(e){this.translateService=e,this.daysOfWeekPosix=[],this.daysOfMonth=[{value:"1",label:"1."},{value:"2",label:"2."},{value:"3",label:"3."},{value:"4",label:"4."},{value:"5",label:"5."},{value:"6",label:"6."},{value:"7",label:"7."},{value:"8",label:"8."},{value:"9",label:"9."},{value:"10",label:"10."},{value:"11",label:"11."},{value:"12",label:"12."},{value:"13",label:"13."},{value:"14",label:"14."},{value:"15",label:"15."},{value:"16",label:"16."},{value:"17",label:"17."},{value:"18",label:"18."},{value:"19",label:"19."},{value:"20",label:"20."},{value:"21",label:"21."},{value:"22",label:"22."},{value:"23",label:"23."},{value:"24",label:"24."},{value:"25",label:"25."},{value:"26",label:"26."},{value:"27",label:"27."},{value:"28",label:"28."},{value:"29",label:"29."},{value:"30",label:"30."},{value:"31",label:"31."}],this.months=[],this.hours=[],this.minutes=[],this.intervals=[{value:2,label:n.gettext("Hour")},{value:3,label:n.gettext("Day")},{value:4,label:n.gettext("Week")},{value:5,label:n.gettext("Month")},{value:6,label:n.gettext("Year")}];for(var t=0;t<24;t++)this.hours.push({value:t.toString(),label:""+t});for(t=0;t<60;t+=5)this.minutes.push({value:t.toString(),label:""+t});for(t=0;t<7;t++)this.daysOfWeekPosix.push({value:t.toString(),label:this.getWeekDayName({weekday:t})});for(t=1;t<13;t++)this.months.push({value:t.toString(),label:this.getMonthName({month:t})})}return o.prototype.generateCron=function(e){var t="";return t=e.minute?""+e.minute:"*",t+=e.hour?" "+e.hour:" *",t+=e.day?" "+e.day:" *",t+=e.month?" "+e.month:" *",t+=e.weekday?" "+e.weekday:" *"},o.prototype.generateCronConfig=function(e){var t=e.split(/\s+/);return{minute:t[0],hour:t[1],day:t[2],month:t[3],weekday:t[4]}},o.prototype.getBase=function(t){var n=e.Base.Initial;return"*"!==t.minute&&"*"===t.hour&&"*"===t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Hour:"*"!==t.minute&&"*"!==t.hour&&"*"===t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Day:"*"!==t.minute&&"*"!==t.hour&&"*"===t.day&&"*"===t.month&&"*"!==t.weekday?n=e.Base.Week:"*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Month:"*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"!==t.month&&"*"===t.weekday&&(n=e.Base.Year),n},o.prototype.validateModels=function(t,n){var o;switch(t){case e.Base.Initial:o=!1;break;case e.Base.Hour:o="*"!==n.minute;break;case e.Base.Day:o="*"!==n.minute&&"*"!==n.hour;break;case e.Base.Week:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.weekday;break;case e.Base.Month:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.day;break;case e.Base.Year:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"!==n.month;break;default:o=!1}return o},o.prototype.clearNextModels=function(t,n){t===e.Base.Initial?(n.minute="*",n.hour="*",n.day="*",n.month="*",n.weekday="*"):t===e.Base.Hour?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*",n.day="*",n.month="*",n.weekday="*"):t===e.Base.Day?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*",n.month="*",n.weekday="*"):t===e.Base.Week?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*",n.month="*",n.weekday="*"===n.weekday||"?"===n.weekday?this.daysOfWeekPosix[0].value:n.weekday):t===e.Base.Month?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*"===n.day?this.daysOfMonth[0].value:n.day,n.month="*",n.weekday="*"):t===e.Base.Year&&(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*"===n.day?this.daysOfMonth[0].value:n.day,n.month="*"===n.month?this.months[0].value:n.month,n.weekday="*")},o.prototype.getWeekDayName=function(e){var t=new Date(0),n=t.getDate()+3;return t.setDate(n+parseInt(e.weekday,10)),s.formatDate(t,"EEEE",this.translateService.currentLang)},o.prototype.getMonthDayName=function(e){var t="";return this.daysOfMonth.forEach((function(n){n.value===e.day&&(t=n.label)})),t},o.prototype.getMonthName=function(e){var t=new Date(0);return t.setMonth(parseInt(e.month,10)-1),s.formatDate(t,"LLLL",this.translateService.currentLang)},o.ctorParameters=function(){return[{type:i.TranslateService}]},o=p([t.Injectable()],o)}(),S=function(){function a(o,a,i){this.reportsService=o,this.modalRef=a,this.cronService=i,this.emitter=new t.EventEmitter,this.ActionType=e.ActionType,this.multiEmailPattern=/^([a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*,?)*$/i,this.singleEmailPattern=/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/,this.cronExpression="* * * * *",this.validCron=!1,this.emitterPayload={success:!1,message:"",schedule:{timestamp:void 0,emailConfig:void 0,cronConfig:void 0}},this.placeholdersInfo=n.gettext("Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.")}return a.prototype.ngOnInit=function(){this.oldSchedule=o.cloneDeep(this.schedule),this.populateEmailFieldsFromSchedule(this.schedule),this.cronExpression=this.cronService.generateCron(this.schedule.cronConfig),this.validCron=this.cronService.validateModels(this.cronService.getBase(this.schedule.cronConfig),this.schedule.cronConfig)},a.prototype.populateEmailFieldsFromSchedule=function(e){e.emailConfig.to&&e.emailConfig.to.length&&(this.emailTo=e.emailConfig.to.toString()),e.emailConfig.cc&&e.emailConfig.cc.length&&(this.emailCc=e.emailConfig.cc.toString()),e.emailConfig.bcc&&e.emailConfig.bcc.length&&(this.emailBcc=e.emailConfig.bcc.toString()),e.emailConfig.replyTo&&(this.emailReplyTo=e.emailConfig.replyTo),e.emailConfig.subject&&(this.emailSubject=e.emailConfig.subject),e.emailConfig.text&&(this.emailText=e.emailConfig.text)},a.prototype.save=function(){if(this.populateScheduleFromCronExpression(),this.populateScheduleFromEmailFields(),this.actionType===e.ActionType.CREATE||this.actionType===e.ActionType.DUPLICATE){var t=(new Date).getTime();this.schedule.timestamp=t}this.emitterPayload.success=!0,this.emitterPayload.schedule=this.schedule,this.modalRef.hide(),this.emitter.emit(this.emitterPayload)},a.prototype.cancel=function(){this.modalRef.hide()},a.prototype.getCron=function(e){this.validCron=e.valid,e.valid&&(this.cronExpression=e.cron)},a.prototype.populateScheduleFromCronExpression=function(){this.schedule.cronConfig=this.cronService.generateCronConfig(this.cronExpression)},a.prototype.convertStringOfEmailsToArray=function(e){var t=[];e&&e.split(",").forEach((function(e){e&&t.push(e)}));return t},a.prototype.populateScheduleFromEmailFields=function(){this.schedule.emailConfig.to=this.emailTo?this.convertStringOfEmailsToArray(this.emailTo):null,this.schedule.emailConfig.cc=this.emailCc?this.convertStringOfEmailsToArray(this.emailCc):null,this.schedule.emailConfig.bcc=this.emailBcc?this.convertStringOfEmailsToArray(this.emailBcc):null,this.schedule.emailConfig.replyTo=this.emailReplyTo,this.schedule.emailConfig.subject=this.emailSubject,this.schedule.emailConfig.text=this.emailText},a.ctorParameters=function(){return[{type:y},{type:r.BsModalRef},{type:b}]},p([t.Output()],a.prototype,"emitter",void 0),a=p([t.Component({selector:"schedule-modal",template:'<div class="modal-header text-center bg-primary">\n <header class="text-white">\n <div style="font-size: 62px;">\n <span c8yIcon="c8y-report"></span>\n </div>\n <h4 class="text-uppercase">\n <span *ngIf="actionType === ActionType.CREATE" translate>New export schedule</span>\n <span *ngIf="actionType === ActionType.EDIT" translate>Edit export schedule</span>\n <span *ngIf="actionType === ActionType.DUPLICATE" translate>Duplicate export schedule</span>\n </h4>\n </header>\n</div>\n\n<div class="modal-body">\n <p class="lead text-center p-t-24 m-b-0" translate>On schedule send export via email</p>\n</div>\n<div class="modal-inner-scroll smart-rule-control">\n <form #scheduleForm="ngForm" class="edit-smart-rule-details">\n <div class="list-group">\n <div class="list-group-item bg-gray-white">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class="p-t-16">\n <div class="form-group">\n <cron [cronIn]="cronExpression" (emitter)="getCron($event)" name="cron"></cron>\n </div>\n </div>\n </div>\n <div class="list-group-item">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">2</span>\n <div class="d-inline-block">\n <strong translate>Send email</strong>\n <p class="help-block text-muted small p-absolute">\n <i class="text-info m-r-4 text-14" c8yIcon="info-circle"></i>\n <span translate>Enter one or more valid email addresses, separated with a comma.</span>\n </p>\n </div>\n </div>\n <div class="p-t-24">\n <div class="form-group">\n <label class="control-label" translate>Send to</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control"\n name="to"\n [(ngModel)]="emailTo"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n required\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>CC</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="cc"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailCc"\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>BCC</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="bcc"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailBcc"\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="replyTo"\n placeholder="{{ \'e.g. joe.doe@example.com (single email address)`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailReplyTo"\n [pattern]="singleEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_singleEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Subject</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="subject"\n [(ngModel)]="emailSubject"\n placeholder="{{ \'e.g. Daily report\' | translate }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Message</label>\n <c8y-form-group>\n <textarea\n class="form-control"\n name="text"\n [(ngModel)]="emailText"\n placeholder="{{ \'Message\' | translate }}"\n rows="4"\n required\n ></textarea>\n <p class="help-block text-muted">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-default" (click)="cancel()" title="{{ \'Cancel\' | translate }}">\n {{ \'Cancel\' | translate }}\n </button>\n <button\n class="btn btn-primary"\n (click)="save()"\n [disabled]="!validCron || !scheduleForm.form.valid"\n >\n <span>\n <span *ngIf="actionType === ActionType.CREATE" title="{{ \'Create\' | translate }}">\n {{ \'Create\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.EDIT" title="{{ \'Save\' | translate }}">\n {{ \'Save\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.DUPLICATE" title="{{ \'Duplicate\' | translate }}">\n {{ \'Duplicate\' | translate }}\n </span>\n </span>\n </button>\n</div>\n'})],a)}(),x=function(){function s(e,o,a,i,s,r){this.reportsService=e,this.bsModalService=o,this.cronService=a,this.translateService=i,this.userService=s,this.optionsService=r,this.onSchedulesUpdate=new t.EventEmitter,this.scheduleList=[],this.initialSchedule={timestamp:null,emailConfig:{to:[],cc:[],bcc:[],replyTo:"",text:"",subject:""},cronConfig:{minute:"0",hour:"0",day:"1",month:"1",weekday:"?"}},this.listClass="interact-list",this.sortReverse=!1,this.isOpen={},this.isEditMenuOpen=!1,this.currentUserEmail="",this.hasRequiredRole=!1,this.defaultExportEmailTemplate=this.translateService.instant(n.gettext("File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.")),this.loadingStatus={inProgress:!1,done:!1,error:!1}}return Object.defineProperty(s.prototype,"exportId",{set:function(e){this._exportId=e},enumerable:!0,configurable:!0}),s.prototype.ngOnInit=function(){return m(this,void 0,void 0,(function(){var e,t,o,a;return v(this,(function(i){switch(i.label){case 0:return e=this,[4,this.checkRole()];case 1:return e.hasRequiredRole=i.sent(),this.getScheduleList(!0),[4,this.getCurrentUserEmail()];case 2:return t=i.sent(),o=this.initialSchedule.emailConfig,[4,this.optionsService.getTenantOption("configuration","export.data.mail.text",this.defaultExportEmailTemplate)];case 3:return o.text=i.sent(),this.initialSchedule.emailConfig.to=t,a=this,[4,this.reportsService.getExport(this._exportId)];case 4:return a.exp=i.sent(),this.initialSchedule.emailConfig.subject=this.translateService.instant(n.gettext('Export of "{{expName}}"'),{expName:this.exp.name}),[2]}}))}))},s.prototype.ngOnChanges=function(){this.translateButtonTitles()},s.prototype.translateButtonTitles=function(){this.buttonLabels={edit:this.translateService.instant(n.gettext("Edit schedule")),editNoPermission:this.translateService.instant(n.gettext("Edit schedule - no permissions")),duplicate:this.translateService.instant(n.gettext("Duplicate schedule")),duplicateNoPermission:this.translateService.instant(n.gettext("Duplicate schedule - no permissions")),delete:this.translateService.instant(n.gettext("Delete schedule")),deleteNoPermission:this.translateService.instant(n.gettext("Delete schedule - no permissions"))}},s.prototype.getCurrentUserEmail=function(){return m(this,void 0,void 0,(function(){var e;return v(this,(function(t){switch(t.label){case 0:return[4,this.userService.current()];case 1:return[2,(e=t.sent().data)&&e.email?[e.email]:[]]}}))}))},s.prototype.checkRole=function(){return m(this,void 0,void 0,(function(){var e;return v(this,(function(t){switch(t.label){case 0:return[4,this.userService.current()];case 1:return e=t.sent().data,"ROLE_SCHEDULE_REPORT_ADMIN",[2,this.userService.hasRole(e,"ROLE_SCHEDULE_REPORT_ADMIN")]}}))}))},s.prototype.getScheduleList=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return e&&(this.loadingStatus.inProgress=!0),t=this,[4,this.reportsService.getScheduleList(this._exportId)];case 1:return t.scheduleList=n.sent(),e&&(this.loadingStatus.inProgress=!1),[2]}}))}))},s.prototype.addSchedule=function(){this.openAddEditModal(this._exportId,this.initialSchedule,e.ActionType.CREATE)},s.prototype.editSchedule=function(t,n,o){this.hasRequiredRole&&(o.preventDefault(),this.openAddEditModal(this._exportId,t,e.ActionType.EDIT,n))},s.prototype.duplicateSchedule=function(t,n){n.preventDefault(),this.openAddEditModal(this._exportId,t,e.ActionType.DUPLICATE)},s.prototype.openAddEditModal=function(e,t,n,a){var i=this,s={class:"modal-sm",initialState:{actionType:n,exportId:e,schedule:o.cloneDeep(t)}};this.modalRef=this.bsModalService.show(S,s),this.modalRef.content.emitter.subscribe((function(e){return i.getMessageFromModal(e,a)}))},s.prototype.getMessageFromModal=function(e,t){e.success&&(void 0!==t?this.scheduleList[t]=e.schedule:this.scheduleList.push(e.schedule),this.onSchedulesUpdate.emit(this.scheduleList))},s.prototype.removeSchedule=function(e,t,n){n.preventDefault(),this.scheduleList.splice(t,1),this.onSchedulesUpdate.emit(this.scheduleList)},s.ctorParameters=function(){return[{type:y},{type:r.BsModalService},{type:b},{type:i.TranslateService},{type:a.UserService},{type:n.OptionsService}]},p([t.Input()],s.prototype,"exportId",null),p([t.Output()],s.prototype,"onSchedulesUpdate",void 0),s=p([t.Component({selector:"export-schedules",template:'<div>\n <div *ngIf="loadingStatus.inProgress" class="flex-row">\n <c8y-loading></c8y-loading>\n <span translate>Retrieving schedules…</span>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error">\n <div class="alert alert-warning max-width-100" translate>\n Could not load schedules list.\n </div>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error">\n <div class="c8y-empty-state text-center max-width-100" *ngIf="!scheduleList.length">\n <h1 c8yIcon="c8y-report" class="c8y-icon-duocolor"></h1>\n <h3 translate>No export schedules defined.</h3>\n </div>\n\n <div class="c8y-list__group" *ngIf="scheduleList.length">\n <div class="c8y-list__item hidden-xs">\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i class="fa"></i>\n </div>\n <div class="c8y-list__item__body">\n <div class="flex-row">\n <div class="col-sm-6">\n <label class="m-0">\n {{ \'Description\' | translate }}\n </label>\n </div>\n <div class="col-sm-6 m-r-40">\n <label class="m-0">\n {{ \'Frequency\' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class="c8y-list__item flex-row pointer"\n *ngFor="let schedule of scheduleList; index as i"\n (click)="editSchedule(schedule, i, $event)"\n >\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i c8yIcon="c8y-report" class="c8y-icon-duocolor"></i>\n </div>\n <div class="c8y-list__item__body flex-row">\n <div class="col-sm-6 col-xs-6">\n <div class="text-truncate" title="{{ schedule.emailConfig.subject }}">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class="col-sm-6 col-xs-6">\n <div class="flex-row" style="align-items: baseline;">\n <i c8yIcon="calendar" class="text-muted m-r-4"></i>\n <span class="smart-rule-information">\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 2" translate>\n Hourly: {{ schedule.cronConfig.minute | number: \'2.0-0\' }} minute(s) past the\n hour.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 3" translate>\n Daily: at {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 4" translate>\n Weekly: {{ cronService.getWeekDayName(schedule.cronConfig) }}, at\n {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 5" translate>\n Monthly: {{ cronService.getMonthDayName(schedule.cronConfig) }} day of the\n month, at {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 6" translate>\n Yearly: {{ cronService.getMonthName(schedule.cronConfig) }},\n {{ cronService.getMonthDayName(schedule.cronConfig) }} day of the month, at\n {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class="c8y-list__item__actions" (click)="$event.stopPropagation()">\n <div class="settings dropdown" dropdown>\n <button\n class="dropdown-toggle c8y-dropdown"\n dropdownToggle\n aria-haspopup="true"\n aria-expanded="false"\n title="{{ \'Actions\' | translate }}"\n >\n <i [c8yIcon]="\'ellipsis-v\'"></i>\n </button>\n <ul class="dropdown-menu dropdown-menu-right" *dropdownMenu>\n <li role="menuitem">\n <button\n [title]="hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission"\n (click)="editSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'pencil\'"></i> {{ \'Edit\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n "\n (click)="duplicateSchedule(schedule, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'copy\'"></i> {{ \'Duplicate\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n "\n (click)="removeSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'trash\'"></i> {{ \'Delete\' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="alert alert-warning max-width-100" *ngIf="!hasRequiredRole" role="alert" translate>\n You don\'t have the permission required to schedule exports.\n </div> \n <button\n type="button"\n class="btn-add-block m-t-16"\n title="{{ \'Add schedule\' | translate }}"\n (click)="addSchedule()"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'plus-circle\'"></i>\n {{ \'Add schedule\' | translate }}\n </button>\n</div>\n'})],s)}(),C=function(){function n(n){this.cronService=n,this.emitter=new t.EventEmitter,this.emittedCron={valid:!1,cron:""},this.base=e.Base.Initial}return n.prototype.ngOnInit=function(){this.daysOfWeekPosix=this.cronService.daysOfWeekPosix,this.daysOfMonth=this.cronService.daysOfMonth,this.months=this.cronService.months,this.hours=this.cronService.hours,this.minutes=this.cronService.minutes,this.intervals=this.cronService.intervals,this.cronConfig=this.cronService.generateCronConfig(this.cronIn),this.base=this.cronService.getBase(this.cronConfig)},n.prototype.onChangeSelect=function(){this.cronService.clearNextModels(this.base,this.cronConfig),this.emittedCron.valid=this.cronService.validateModels(this.base,this.cronConfig),this.emittedCron.cron=this.cronService.generateCron(this.cronConfig),this.emitter.emit(this.emittedCron)},n.ctorParameters=function(){return[{type:b}]},p([t.Input()],n.prototype,"cronIn",void 0),p([t.Output()],n.prototype,"emitter",void 0),n=p([t.Component({selector:"cron",template:'<div class="cron-wrap">\n <div class="form-group smart-cron-job-every">\n <label for="smart-cron-job-every" class="control-label" translate>\n Interval\n </label>\n <div class="">\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control"\n id="smart-cron-job-every"\n [(ngModel)]="base"\n required="true"\n (change)="onChangeSelect()"\n >\n <option *ngIf="base === 1" value="1" translate>\n Select…\n </option>\n <option *ngFor="let baseInterval of intervals" [ngValue]="baseInterval.value">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="form-group smart-cron-job-on col-md-6" *ngIf="base == 4">\n <label class="control-label" for="smart-cron-job-on" translate>\n Day\n </label>\n\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control day-value"\n id="smart-cron-job-on"\n [(ngModel)]="cronConfig.weekday"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfWeek of daysOfWeekPosix" [ngValue]="dayOfWeek.value">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-of col-md-6" *ngIf="base == 6">\n <label for="smart-cron-job-of" class="control-label" translate>\n Month\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-of"\n class="cron-select form-control month-value"\n [(ngModel)]="cronConfig.month"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let month of months" [ngValue]="month.value">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-on-the col-md-6" *ngIf="base >= 5">\n <label for="smart-cron-job-on-the" class="control-label" translate>\n Day\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-on-the"\n class="cron-select form-control day-of-month-value"\n [(ngModel)]="cronConfig.day"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfMonth of daysOfMonth" [ngValue]="dayOfMonth.value">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-at" *ngIf="base >= 2">\n <label for="smart-cron-job-at-hour" class="control-label">\n <span *ngIf="base >= 3" translate>Time</span>\n <span *ngIf="base < 3" translate>Minutes</span>\n </label>\n <div>\n <div class="form-inline">\n <div class="c8y-select-wrapper" *ngIf="base >= 3">\n <select\n id="smart-cron-job-at-hour"\n class="cron-select form-control hour-value"\n [(ngModel)]="cronConfig.hour"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let hour of hours" [ngValue]="hour.value">\n {{ hour.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf="base >= 3"> : </span>\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control minute-value"\n id="smart-cron-job-at-minute"\n [(ngModel)]="cronConfig.minute"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let minute of minutes" [ngValue]="minute.value">\n {{ minute.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n'})],n)}(),E=function(){function e(){}return e=p([t.NgModule({declarations:[x,S,C],imports:[n.CoreModule,n.FormsModule,l.BsDropdownModule,c.TooltipModule],entryComponents:[x,S,C],providers:[y,b],exports:[x,S,C]})],e)}(),w=h.downgradeComponent({component:x}),I=h.downgradeInjectable(y),M="c8y.upgrade.reports",T=(u.module(M,[]).directive("c8yExportSchedules",w).service("c8yReportsService",I),[M]);d.registerNgModule(T),e.CronComponent=C,e.CronService=b,e.ExportSchedulesComponent=x,e.ReportsModule=E,e.ReportsService=y,e.ScheduleModalComponent=S,e.ng1Modules=T,Object.defineProperty(e,"__esModule",{value:!0})}));
15
+ ***************************************************************************** */function p(e,t,n,o){var a,i=arguments.length,s=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,n):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,n,o);else for(var r=e.length-1;r>=0;r--)(a=e[r])&&(s=(i<3?a(s):i>3?a(t,n,s):a(t,n))||s);return i>3&&s&&Object.defineProperty(t,n,s),s}function m(e,t,n,o){return new(n||(n=Promise))((function(a,i){function s(e){try{l(o.next(e))}catch(e){i(e)}}function r(e){try{l(o.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}l((o=o.apply(e,t||[])).next())}))}function v(e,t){var n,o,a,i,s={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return i={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function r(i){return function(r){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,o&&(a=2&i[0]?o.return:i[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,i[1])).done)return a;switch(o=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(a=s.trys,(a=a.length>0&&a[a.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){s.label=i[1];break}if(6===i[0]&&s.label<a[1]){s.label=a[1],a=i;break}if(a&&s.label<a[2]){s.label=a[2],s.ops.push(i);break}a[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],o=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,r])}}}var g,f,y=function(){function e(e,t,o){this.alertService=e,this.inventoryService=t,this.client=o,this.ERROR_MESSAGES={pattern_multiEmail:n.gettext("Invalid email addresses."),pattern_singleEmail:n.gettext("Invalid email address.")},this.microserviceUrl="/service/reporting",this.headers={"Content-Type":"application/json"}}return e.prototype.getExport=function(e){return m(this,void 0,void 0,(function(){var t,n,o,a;return v(this,(function(i){switch(i.label){case 0:return[4,this.inventoryService.detail(e)];case 1:return n=i.sent(),o=n.data,200!==(a=n.res).status?this.alertService.addServerFailure({data:o,res:a}):t=o||{},[2,t]}}))}))},e.prototype.getScheduleList=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return[4,this.getExport(e)];case 1:return t=n.sent(),[2,this.extractScheduleListFromExport(t)]}}))}))},e.prototype.extractScheduleListFromExport=function(e){var t;return e&&(t=e.c8y_ScheduleConfiguration?e.c8y_ScheduleConfiguration:[]),o.orderBy(t,["timestamp"],["desc"])},e.prototype.addSchedule=function(e,t){return m(this,void 0,void 0,(function(){return v(this,(function(n){switch(n.label){case 0:return[4,this.updateSchedules(t,[],[e])];case 1:return[2,n.sent()]}}))}))},e.prototype.updateSchedule=function(e,t,n){return m(this,void 0,void 0,(function(){return v(this,(function(o){switch(o.label){case 0:return[4,this.updateSchedules(n,[e],[t])];case 1:return[2,o.sent()]}}))}))},e.prototype.updateSchedules=function(e,t,n){return void 0===t&&(t=[]),void 0===n&&(n=[]),m(this,void 0,void 0,(function(){var a,i,s,r,l,c;return v(this,(function(u){switch(u.label){case 0:return a=!1,[4,this.getExport(e)];case 1:return i=u.sent(),s=this.extractScheduleListFromExport(i),o.remove(s,(function(e){return o.some(t,(function(t){return o.isEqual(e,t)}))})),s.push.apply(s,n),i.c8y_ScheduleConfiguration=s,[4,this.inventoryService.update(i)];case 2:return r=u.sent(),l=r.data,200!==(c=r.res).status?[3,4]:[4,this.reschedule(e)];case 3:return a=u.sent(),[3,5];case 4:this.alertService.addServerFailure({data:l,res:c}),u.label=5;case 5:return[2,a]}}))}))},e.prototype.reschedule=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return t={method:"PUT",headers:this.headers},[4,this.client.fetch(this.microserviceUrl+"/schedule/"+e,t)];case 1:return[2,200===n.sent().status]}}))}))},e.prototype.deleteSchedule=function(e,t){return m(this,void 0,void 0,(function(){return v(this,(function(n){switch(n.label){case 0:return[4,this.updateSchedules(t,[e],[])];case 1:return[2,n.sent()]}}))}))},e.prototype.removeConfiguration=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return t=this.microserviceUrl+"/config/"+e.id,[4,this.client.fetch(t,{method:"DELETE"})];case 1:return[2,n.sent()]}}))}))},e.ctorParameters=function(){return[{type:n.AlertService},{type:a.InventoryService},{type:a.FetchClient}]},e=p([t.Injectable()],e)}();(g=e.ActionType||(e.ActionType={})).CREATE="create",g.EDIT="edit",g.DUPLICATE="duplicate",(f=e.Base||(e.Base={}))[f.Initial=1]="Initial",f[f.Hour=2]="Hour",f[f.Day=3]="Day",f[f.Week=4]="Week",f[f.Month=5]="Month",f[f.Year=6]="Year";var b=function(){function o(e){this.translateService=e,this.daysOfWeekPosix=[],this.daysOfMonth=[{value:"1",label:"1."},{value:"2",label:"2."},{value:"3",label:"3."},{value:"4",label:"4."},{value:"5",label:"5."},{value:"6",label:"6."},{value:"7",label:"7."},{value:"8",label:"8."},{value:"9",label:"9."},{value:"10",label:"10."},{value:"11",label:"11."},{value:"12",label:"12."},{value:"13",label:"13."},{value:"14",label:"14."},{value:"15",label:"15."},{value:"16",label:"16."},{value:"17",label:"17."},{value:"18",label:"18."},{value:"19",label:"19."},{value:"20",label:"20."},{value:"21",label:"21."},{value:"22",label:"22."},{value:"23",label:"23."},{value:"24",label:"24."},{value:"25",label:"25."},{value:"26",label:"26."},{value:"27",label:"27."},{value:"28",label:"28."},{value:"29",label:"29."},{value:"30",label:"30."},{value:"31",label:"31."}],this.months=[],this.hours=[],this.minutes=[],this.intervals=[{value:2,label:n.gettext("Hour")},{value:3,label:n.gettext("Day")},{value:4,label:n.gettext("Week")},{value:5,label:n.gettext("Month")},{value:6,label:n.gettext("Year")}];for(var t=0;t<24;t++)this.hours.push({value:t.toString(),label:""+t});for(t=0;t<60;t+=5)this.minutes.push({value:t.toString(),label:""+t});for(t=0;t<7;t++)this.daysOfWeekPosix.push({value:t.toString(),label:this.getWeekDayName({weekday:t})});for(t=1;t<13;t++)this.months.push({value:t.toString(),label:this.getMonthName({month:t})})}return o.prototype.generateCron=function(e){var t="";return t=e.minute?""+e.minute:"*",t+=e.hour?" "+e.hour:" *",t+=e.day?" "+e.day:" *",t+=e.month?" "+e.month:" *",t+=e.weekday?" "+e.weekday:" *"},o.prototype.generateCronConfig=function(e){var t=e.split(/\s+/);return{minute:t[0],hour:t[1],day:t[2],month:t[3],weekday:t[4]}},o.prototype.getBase=function(t){var n=e.Base.Initial;return"*"!==t.minute&&"*"===t.hour&&"*"===t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Hour:"*"!==t.minute&&"*"!==t.hour&&"*"===t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Day:"*"!==t.minute&&"*"!==t.hour&&"*"===t.day&&"*"===t.month&&"*"!==t.weekday?n=e.Base.Week:"*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"===t.month&&"*"===t.weekday?n=e.Base.Month:"*"!==t.minute&&"*"!==t.hour&&"*"!==t.day&&"*"!==t.month&&"*"===t.weekday&&(n=e.Base.Year),n},o.prototype.validateModels=function(t,n){var o;switch(t){case e.Base.Initial:o=!1;break;case e.Base.Hour:o="*"!==n.minute;break;case e.Base.Day:o="*"!==n.minute&&"*"!==n.hour;break;case e.Base.Week:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.weekday;break;case e.Base.Month:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.day;break;case e.Base.Year:o="*"!==n.minute&&"*"!==n.hour&&"*"!==n.day&&"*"!==n.month;break;default:o=!1}return o},o.prototype.clearNextModels=function(t,n){t===e.Base.Initial?(n.minute="*",n.hour="*",n.day="*",n.month="*",n.weekday="*"):t===e.Base.Hour?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*",n.day="*",n.month="*",n.weekday="*"):t===e.Base.Day?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*",n.month="*",n.weekday="*"):t===e.Base.Week?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*",n.month="*",n.weekday="*"===n.weekday||"?"===n.weekday?this.daysOfWeekPosix[0].value:n.weekday):t===e.Base.Month?(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*"===n.day?this.daysOfMonth[0].value:n.day,n.month="*",n.weekday="*"):t===e.Base.Year&&(n.minute="*"===n.minute?this.minutes[0].value:n.minute,n.hour="*"===n.hour?this.hours[0].value:n.hour,n.day="*"===n.day?this.daysOfMonth[0].value:n.day,n.month="*"===n.month?this.months[0].value:n.month,n.weekday="*")},o.prototype.getWeekDayName=function(e){var t=new Date(0),n=t.getDate()+3;return t.setDate(n+parseInt(e.weekday,10)),s.formatDate(t,"EEEE",this.translateService.currentLang)},o.prototype.getMonthDayName=function(e){var t="";return this.daysOfMonth.forEach((function(n){n.value===e.day&&(t=n.label)})),t},o.prototype.getMonthName=function(e){var t=new Date(0);return t.setMonth(parseInt(e.month,10)-1),s.formatDate(t,"LLLL",this.translateService.currentLang)},o.ctorParameters=function(){return[{type:i.TranslateService}]},o=p([t.Injectable()],o)}(),S=function(){function a(o,a,i){this.reportsService=o,this.modalRef=a,this.cronService=i,this.emitter=new t.EventEmitter,this.ActionType=e.ActionType,this.multiEmailPattern=/^([a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*,?)*$/i,this.singleEmailPattern=/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/,this.cronExpression="* * * * *",this.validCron=!1,this.emitterPayload={success:!1,message:"",schedule:{timestamp:void 0,emailConfig:void 0,cronConfig:void 0}},this.placeholdersInfo=n.gettext("Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.")}return a.prototype.ngOnInit=function(){this.oldSchedule=o.cloneDeep(this.schedule),this.populateEmailFieldsFromSchedule(this.schedule),this.cronExpression=this.cronService.generateCron(this.schedule.cronConfig),this.validCron=this.cronService.validateModels(this.cronService.getBase(this.schedule.cronConfig),this.schedule.cronConfig)},a.prototype.populateEmailFieldsFromSchedule=function(e){e.emailConfig.to&&e.emailConfig.to.length&&(this.emailTo=e.emailConfig.to.toString()),e.emailConfig.cc&&e.emailConfig.cc.length&&(this.emailCc=e.emailConfig.cc.toString()),e.emailConfig.bcc&&e.emailConfig.bcc.length&&(this.emailBcc=e.emailConfig.bcc.toString()),e.emailConfig.replyTo&&(this.emailReplyTo=e.emailConfig.replyTo),e.emailConfig.subject&&(this.emailSubject=e.emailConfig.subject),e.emailConfig.text&&(this.emailText=e.emailConfig.text)},a.prototype.save=function(){if(this.populateScheduleFromCronExpression(),this.populateScheduleFromEmailFields(),this.actionType===e.ActionType.CREATE||this.actionType===e.ActionType.DUPLICATE){var t=(new Date).getTime();this.schedule.timestamp=t}this.emitterPayload.success=!0,this.emitterPayload.schedule=this.schedule,this.modalRef.hide(),this.emitter.emit(this.emitterPayload)},a.prototype.cancel=function(){this.modalRef.hide()},a.prototype.getCron=function(e){this.validCron=e.valid,e.valid&&(this.cronExpression=e.cron)},a.prototype.populateScheduleFromCronExpression=function(){this.schedule.cronConfig=this.cronService.generateCronConfig(this.cronExpression)},a.prototype.convertStringOfEmailsToArray=function(e){var t=[];e&&e.split(",").forEach((function(e){e&&t.push(e)}));return t},a.prototype.populateScheduleFromEmailFields=function(){this.schedule.emailConfig.to=this.emailTo?this.convertStringOfEmailsToArray(this.emailTo):null,this.schedule.emailConfig.cc=this.emailCc?this.convertStringOfEmailsToArray(this.emailCc):null,this.schedule.emailConfig.bcc=this.emailBcc?this.convertStringOfEmailsToArray(this.emailBcc):null,this.schedule.emailConfig.replyTo=this.emailReplyTo,this.schedule.emailConfig.subject=this.emailSubject,this.schedule.emailConfig.text=this.emailText},a.ctorParameters=function(){return[{type:y},{type:r.BsModalRef},{type:b}]},p([t.Output()],a.prototype,"emitter",void 0),a=p([t.Component({selector:"schedule-modal",template:'<div class="modal-header text-center bg-primary">\n <header class="text-white">\n <div style="font-size: 62px;">\n <span c8yIcon="c8y-report"></span>\n </div>\n <h4 class="text-uppercase">\n <span *ngIf="actionType === ActionType.CREATE" translate>New export schedule</span>\n <span *ngIf="actionType === ActionType.EDIT" translate>Edit export schedule</span>\n <span *ngIf="actionType === ActionType.DUPLICATE" translate>Duplicate export schedule</span>\n </h4>\n </header>\n</div>\n\n<div class="modal-body">\n <p class="lead text-center p-t-24 m-b-0" translate>On schedule send export via email</p>\n</div>\n<div class="modal-inner-scroll smart-rule-control">\n <form #scheduleForm="ngForm" class="edit-smart-rule-details">\n <div class="list-group">\n <div class="list-group-item bg-gray-white">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class="p-t-16">\n <div class="form-group">\n <cron [cronIn]="cronExpression" (emitter)="getCron($event)" name="cron"></cron>\n </div>\n </div>\n </div>\n <div class="list-group-item">\n <div class="smart-list-icon-label">\n <span class="dot bg-primary-light m-r-8">2</span>\n <div class="d-inline-block">\n <strong translate>Send email</strong>\n <p class="help-block text-muted small p-absolute">\n <i class="text-info m-r-4 text-14" c8yIcon="info-circle"></i>\n <span translate>Enter one or more valid email addresses, separated with a comma.</span>\n </p>\n </div>\n </div>\n <div class="p-t-24">\n <div class="form-group">\n <label class="control-label" translate>Send to</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control"\n name="to"\n [(ngModel)]="emailTo"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n required\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>CC</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="cc"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailCc"\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>BCC</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="bcc"\n placeholder="{{ \'e.g. joe.doe@example.com`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailBcc"\n [pattern]="multiEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_multiEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="replyTo"\n placeholder="{{ \'e.g. joe.doe@example.com (single email address)`LOCALIZE`\' | translate }}"\n [(ngModel)]="emailReplyTo"\n [pattern]="singleEmailPattern"\n />\n <c8y-messages>\n <c8y-message\n name="pattern"\n [text]="reportsService.ERROR_MESSAGES.pattern_singleEmail"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Subject</label>\n <c8y-form-group>\n <input\n type="text"\n class="form-control span"\n name="subject"\n [(ngModel)]="emailSubject"\n placeholder="{{ \'e.g. Daily report\' | translate }}"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class="form-group">\n <label class="control-label" translate>Message</label>\n <c8y-form-group>\n <textarea\n class="form-control"\n name="text"\n [(ngModel)]="emailText"\n placeholder="{{ \'Message\' | translate }}"\n rows="4"\n required\n ></textarea>\n <p class="help-block text-muted">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class="modal-footer">\n <button class="btn btn-default" (click)="cancel()" title="{{ \'Cancel\' | translate }}">\n {{ \'Cancel\' | translate }}\n </button>\n <button\n class="btn btn-primary"\n (click)="save()"\n [disabled]="!validCron || !scheduleForm.form.valid"\n >\n <span>\n <span *ngIf="actionType === ActionType.CREATE" title="{{ \'Create\' | translate }}">\n {{ \'Create\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.EDIT" title="{{ \'Save\' | translate }}">\n {{ \'Save\' | translate }}\n </span>\n <span *ngIf="actionType === ActionType.DUPLICATE" title="{{ \'Duplicate\' | translate }}">\n {{ \'Duplicate\' | translate }}\n </span>\n </span>\n </button>\n</div>\n'})],a)}(),x=function(){function s(e,o,a,i,s,r){this.reportsService=e,this.bsModalService=o,this.cronService=a,this.translateService=i,this.userService=s,this.optionsService=r,this.onSchedulesUpdate=new t.EventEmitter,this.scheduleList=[],this.initialSchedule={timestamp:null,emailConfig:{to:[],cc:[],bcc:[],replyTo:"",text:"",subject:""},cronConfig:{minute:"0",hour:"0",day:"1",month:"1",weekday:"?"}},this.listClass="interact-list",this.sortReverse=!1,this.isOpen={},this.isEditMenuOpen=!1,this.currentUserEmail="",this.hasRequiredRole=!1,this.defaultExportEmailTemplate=this.translateService.instant(n.gettext("File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.")),this.loadingStatus={inProgress:!1,done:!1,error:!1}}return Object.defineProperty(s.prototype,"exportId",{set:function(e){this._exportId=e},enumerable:!0,configurable:!0}),s.prototype.ngOnInit=function(){return m(this,void 0,void 0,(function(){var e,t,o,a;return v(this,(function(i){switch(i.label){case 0:return e=this,[4,this.checkRole()];case 1:return e.hasRequiredRole=i.sent(),this.getScheduleList(!0),[4,this.getCurrentUserEmail()];case 2:return t=i.sent(),o=this.initialSchedule.emailConfig,[4,this.optionsService.getTenantOption("configuration","export.data.mail.text",this.defaultExportEmailTemplate)];case 3:return o.text=i.sent(),this.initialSchedule.emailConfig.to=t,a=this,[4,this.reportsService.getExport(this._exportId)];case 4:return a.exp=i.sent(),this.initialSchedule.emailConfig.subject=this.translateService.instant(n.gettext('Export of "{{expName}}"'),{expName:this.exp.name}),[2]}}))}))},s.prototype.ngOnChanges=function(){this.translateButtonTitles()},s.prototype.translateButtonTitles=function(){this.buttonLabels={edit:this.translateService.instant(n.gettext("Edit schedule")),editNoPermission:this.translateService.instant(n.gettext("Edit schedule - no permissions")),duplicate:this.translateService.instant(n.gettext("Duplicate schedule")),duplicateNoPermission:this.translateService.instant(n.gettext("Duplicate schedule - no permissions")),delete:this.translateService.instant(n.gettext("Delete schedule")),deleteNoPermission:this.translateService.instant(n.gettext("Delete schedule - no permissions"))}},s.prototype.getCurrentUserEmail=function(){return m(this,void 0,void 0,(function(){var e;return v(this,(function(t){switch(t.label){case 0:return[4,this.userService.current()];case 1:return[2,(e=t.sent().data)&&e.email?[e.email]:[]]}}))}))},s.prototype.checkRole=function(){return m(this,void 0,void 0,(function(){var e;return v(this,(function(t){switch(t.label){case 0:return[4,this.userService.current()];case 1:return e=t.sent().data,"ROLE_SCHEDULE_REPORT_ADMIN",[2,this.userService.hasRole(e,"ROLE_SCHEDULE_REPORT_ADMIN")]}}))}))},s.prototype.getScheduleList=function(e){return m(this,void 0,void 0,(function(){var t;return v(this,(function(n){switch(n.label){case 0:return e&&(this.loadingStatus.inProgress=!0),t=this,[4,this.reportsService.getScheduleList(this._exportId)];case 1:return t.scheduleList=n.sent(),e&&(this.loadingStatus.inProgress=!1),[2]}}))}))},s.prototype.addSchedule=function(){this.openAddEditModal(this._exportId,this.initialSchedule,e.ActionType.CREATE)},s.prototype.editSchedule=function(t,n,o){this.hasRequiredRole&&(o.preventDefault(),this.openAddEditModal(this._exportId,t,e.ActionType.EDIT,n))},s.prototype.duplicateSchedule=function(t,n){n.preventDefault(),this.openAddEditModal(this._exportId,t,e.ActionType.DUPLICATE)},s.prototype.openAddEditModal=function(e,t,n,a){var i=this,s={class:"modal-sm",initialState:{actionType:n,exportId:e,schedule:o.cloneDeep(t)}};this.modalRef=this.bsModalService.show(S,s),this.modalRef.content.emitter.subscribe((function(e){return i.getMessageFromModal(e,a)}))},s.prototype.getMessageFromModal=function(e,t){e.success&&(void 0!==t?this.scheduleList[t]=e.schedule:this.scheduleList.push(e.schedule),this.onSchedulesUpdate.emit(this.scheduleList))},s.prototype.removeSchedule=function(e,t,n){n.preventDefault(),this.scheduleList.splice(t,1),this.onSchedulesUpdate.emit(this.scheduleList)},s.ctorParameters=function(){return[{type:y},{type:r.BsModalService},{type:b},{type:i.TranslateService},{type:a.UserService},{type:n.OptionsService}]},p([t.Input()],s.prototype,"exportId",null),p([t.Output()],s.prototype,"onSchedulesUpdate",void 0),s=p([t.Component({selector:"export-schedules",template:'<div>\n <div *ngIf="loadingStatus.inProgress" class="flex-row">\n <c8y-loading></c8y-loading>\n <span translate>Retrieving schedules…</span>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error">\n <div class="alert alert-warning max-width-100" translate>\n Could not load schedules list.\n </div>\n </div>\n\n <div *ngIf="!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error">\n <div class="c8y-empty-state text-center max-width-100" *ngIf="!scheduleList.length">\n <h1 c8yIcon="c8y-report" class="c8y-icon-duocolor"></h1>\n <h3 translate>No export schedules defined.</h3>\n </div>\n\n <div class="c8y-list__group" *ngIf="scheduleList.length">\n <div class="c8y-list__item hidden-xs">\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i class="fa"></i>\n </div>\n <div class="c8y-list__item__body">\n <div class="flex-row">\n <div class="col-sm-6">\n <label class="m-0">\n {{ \'Description\' | translate }}\n </label>\n </div>\n <div class="col-sm-6 m-r-40">\n <label class="m-0">\n {{ \'Frequency\' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class="c8y-list__item flex-row pointer"\n *ngFor="let schedule of scheduleList; index as i"\n (click)="editSchedule(schedule, i, $event)"\n >\n <div class="c8y-list__item__block">\n <div class="c8y-list__item__icon">\n <i c8yIcon="c8y-report" class="c8y-icon-duocolor"></i>\n </div>\n <div class="c8y-list__item__body flex-row">\n <div class="col-sm-6 col-xs-6">\n <div class="text-truncate" title="{{ schedule.emailConfig.subject }}">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class="col-sm-6 col-xs-6">\n <div class="flex-row" style="align-items: baseline;">\n <i c8yIcon="calendar" class="text-muted m-r-4"></i>\n <span class="smart-rule-information">\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 2" translate>\n Hourly: {{ schedule.cronConfig.minute | number: \'2.0-0\' }} minute(s) past the\n hour.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 3" translate>\n Daily: at {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 4" translate>\n Weekly: {{ cronService.getWeekDayName(schedule.cronConfig) }}, at\n {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 5" translate>\n Monthly: {{ cronService.getMonthDayName(schedule.cronConfig) }} day of the\n month, at {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n <span *ngIf="cronService.getBase(schedule.cronConfig) === 6" translate>\n Yearly: {{ cronService.getMonthName(schedule.cronConfig) }},\n {{ cronService.getMonthDayName(schedule.cronConfig) }} day of the month, at\n {{ schedule.cronConfig.hour | number: \'2.0-0\' }}:{{\n schedule.cronConfig.minute | number: \'2.0-0\'\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class="c8y-list__item__actions" (click)="$event.stopPropagation()">\n <div class="settings dropdown" dropdown>\n <button\n class="dropdown-toggle c8y-dropdown"\n dropdownToggle\n aria-haspopup="true"\n aria-expanded="false"\n title="{{ \'Actions\' | translate }}"\n >\n <i [c8yIcon]="\'ellipsis-v\'"></i>\n </button>\n <ul class="dropdown-menu dropdown-menu-right" *dropdownMenu>\n <li role="menuitem">\n <button\n [title]="hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission"\n (click)="editSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'pencil\'"></i> {{ \'Edit\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n "\n (click)="duplicateSchedule(schedule, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'copy\'"></i> {{ \'Duplicate\' | translate }}\n </button>\n </li>\n <li role="menuitem">\n <button\n [title]="\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n "\n (click)="removeSchedule(schedule, i, $event)"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'trash\'"></i> {{ \'Delete\' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class="alert alert-warning max-width-100" *ngIf="!hasRequiredRole" role="alert" translate>\n You don\'t have the permission required to schedule exports.\n </div> \n <button\n type="button"\n class="btn-add-block m-t-16"\n title="{{ \'Add schedule\' | translate }}"\n (click)="addSchedule()"\n [disabled]="!hasRequiredRole"\n >\n <i [c8yIcon]="\'plus-circle\'"></i>\n {{ \'Add schedule\' | translate }}\n </button>\n</div>\n'})],s)}(),C=function(){function n(n){this.cronService=n,this.emitter=new t.EventEmitter,this.emittedCron={valid:!1,cron:""},this.base=e.Base.Initial}return n.prototype.ngOnInit=function(){this.daysOfWeekPosix=this.cronService.daysOfWeekPosix,this.daysOfMonth=this.cronService.daysOfMonth,this.months=this.cronService.months,this.hours=this.cronService.hours,this.minutes=this.cronService.minutes,this.intervals=this.cronService.intervals,this.cronConfig=this.cronService.generateCronConfig(this.cronIn),this.base=this.cronService.getBase(this.cronConfig)},n.prototype.onChangeSelect=function(){this.cronService.clearNextModels(this.base,this.cronConfig),this.emittedCron.valid=this.cronService.validateModels(this.base,this.cronConfig),this.emittedCron.cron=this.cronService.generateCron(this.cronConfig),this.emitter.emit(this.emittedCron)},n.ctorParameters=function(){return[{type:b}]},p([t.Input()],n.prototype,"cronIn",void 0),p([t.Output()],n.prototype,"emitter",void 0),n=p([t.Component({selector:"cron",template:'<div class="cron-wrap">\n <div class="form-group smart-cron-job-every">\n <label for="smart-cron-job-every" class="control-label" translate>\n Interval\n </label>\n <div class="">\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control"\n id="smart-cron-job-every"\n [(ngModel)]="base"\n required="true"\n (change)="onChangeSelect()"\n >\n <option *ngIf="base === 1" value="1" translate>\n Select…\n </option>\n <option *ngFor="let baseInterval of intervals" [ngValue]="baseInterval.value">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class="row">\n <div class="form-group smart-cron-job-on col-md-6" *ngIf="base == 4">\n <label class="control-label" for="smart-cron-job-on" translate>\n Day\n </label>\n\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control day-value"\n id="smart-cron-job-on"\n [(ngModel)]="cronConfig.weekday"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfWeek of daysOfWeekPosix" [ngValue]="dayOfWeek.value">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-of col-md-6" *ngIf="base == 6">\n <label for="smart-cron-job-of" class="control-label" translate>\n Month\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-of"\n class="cron-select form-control month-value"\n [(ngModel)]="cronConfig.month"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let month of months" [ngValue]="month.value">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-on-the col-md-6" *ngIf="base >= 5">\n <label for="smart-cron-job-on-the" class="control-label" translate>\n Day\n </label>\n <div>\n <div class="c8y-select-wrapper">\n <select\n id="smart-cron-job-on-the"\n class="cron-select form-control day-of-month-value"\n [(ngModel)]="cronConfig.day"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let dayOfMonth of daysOfMonth" [ngValue]="dayOfMonth.value">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class="form-group smart-cron-job-at" *ngIf="base >= 2">\n <label for="smart-cron-job-at-hour" class="control-label">\n <span *ngIf="base >= 3" translate>Time</span>\n <span *ngIf="base < 3" translate>Minutes</span>\n </label>\n <div>\n <div class="form-inline">\n <div class="c8y-select-wrapper" *ngIf="base >= 3">\n <select\n id="smart-cron-job-at-hour"\n class="cron-select form-control hour-value"\n [(ngModel)]="cronConfig.hour"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let hour of hours" [ngValue]="hour.value">\n {{ hour.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf="base >= 3"> : </span>\n <div class="c8y-select-wrapper">\n <select\n class="cron-select form-control minute-value"\n id="smart-cron-job-at-minute"\n [(ngModel)]="cronConfig.minute"\n (change)="onChangeSelect()"\n >\n <option *ngFor="let minute of minutes" [ngValue]="minute.value">\n {{ minute.value | number: \'2.0-0\' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n'})],n)}(),E=function(){function e(){}return e=p([t.NgModule({declarations:[x,S,C],imports:[n.CoreModule,n.FormsModule,l.BsDropdownModule,c.TooltipModule],entryComponents:[x,S,C],providers:[y,b],exports:[x,S,C]})],e)}(),w=h.downgradeComponent({component:x}),I=h.downgradeInjectable(y),M="c8y.upgrade.reports",T=(u.module(M,[]).directive("c8yExportSchedules",w).service("c8yReportsService",I),[M]);d.registerNgModule(T),e.CronComponent=C,e.CronService=b,e.ExportSchedulesComponent=x,e.ReportsModule=E,e.ReportsService=y,e.ScheduleModalComponent=S,e.ng1Modules=T,Object.defineProperty(e,"__esModule",{value:!0})}));
16
16
  //# sourceMappingURL=c8y-ngx-components-reports.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@c8y/ngx-components/reports/export-schedules.interface.ts","ng://@c8y/ngx-components/reports/reports.service.ts","ng://@c8y/ngx-components/reports/cron.service.ts","ng://@c8y/ngx-components/reports/schedule-modal.component.ts","ng://@c8y/ngx-components/reports/export-schedules.component.ts","ng://@c8y/ngx-components/reports/cron.component.ts","ng://@c8y/ngx-components/reports/reports.module.ts","ng://@c8y/ngx-components/reports/ng1/downgraded.components.ts","ng://@c8y/ngx-components/reports/ng1/downgraded.services.ts","ng://@c8y/ngx-components/reports/ng1/index.ts"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","push","ActionType","Base","ReportsService","alertService","inventoryService","client","ERROR_MESSAGES","pattern_multiEmail","gettext","pattern_singleEmail","microserviceUrl","headers","Content-Type","prototype","getExport","exportId","detail","exportDetail","_a","data","res","status","addServerFailure","exp","getScheduleList","extractScheduleListFromExport","scheduleList","c8y_ScheduleConfiguration","orderBy","addSchedule","schedule","updateSchedules","updateSchedule","oldSchedule","schedulesToRemove","schedulesToAdd","success","_b","schedules","remove","some","scheduleToRemove","isEqual","update","reschedule","options","method","fetch","deleteSchedule","AlertService","InventoryService","FetchClient","Injectable","CronService","translateService","daysOfWeekPosix","daysOfMonth","months","hours","minutes","intervals","x","toString","getWeekDayName","weekday","getMonthName","month","generateCron","cronConfig","cron","minute","hour","day","generateCronConfig","parts","split","getBase","base","Initial","Hour","Day","Week","Month","Year","validateModels","valid","clearNextModels","date","Date","firstSundayDate","getDate","setDate","parseInt","formatDate","currentLang","getMonthDayName","name","forEach","item","setMonth","TranslateService","ScheduleModalComponent","reportsService","modalRef","cronService","emitter","EventEmitter","multiEmailPattern","singleEmailPattern","cronExpression","validCron","emitterPayload","message","timestamp","undefined","emailConfig","placeholdersInfo","ngOnInit","cloneDeep","populateEmailFieldsFromSchedule","to","emailTo","cc","emailCc","bcc","emailBcc","replyTo","emailReplyTo","subject","emailSubject","text","emailText","save","populateScheduleFromCronExpression","populateScheduleFromEmailFields","actionType","CREATE","DUPLICATE","getTime","hide","emit","cancel","getCron","convertStringOfEmailsToArray","stringOfEmails","arr","BsModalRef","tslib_1.__decorate","Output","Component","selector","template","ExportSchedulesComponent","bsModalService","userService","optionsService","onSchedulesUpdate","initialSchedule","listClass","sortReverse","isOpen","isEditMenuOpen","currentUserEmail","hasRequiredRole","defaultExportEmailTemplate","instant","loadingStatus","inProgress","error","_exportId","checkRole","_d","getCurrentUserEmail","getTenantOption","_c","expName","ngOnChanges","translateButtonTitles","buttonLabels","edit","editNoPermission","duplicate","duplicateNoPermission","delete","deleteNoPermission","current","email","hasRole","withProgress","openAddEditModal","editSchedule","index","event","preventDefault","EDIT","duplicateSchedule","_this","modalOptions","class","initialState","show","content","subscribe","load","getMessageFromModal","payload","removeSchedule","splice","BsModalService","UserService","OptionsService","Input","CronComponent","emittedCron","cronIn","onChangeSelect","ReportsModule","NgModule","declarations","imports","CoreModule","FormsModule","BsDropdownModule","TooltipModule","entryComponents","providers","exports","exportSchedulesComponent","downgradeComponent","component","downgradeInjectable","NAME","ng1Modules","angular\n .module","directive","service","registerNgModule"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport { InventoryService, IdReference } from '@c8y/client';\nimport { FetchClient, IFetchOptions } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class ReportsService {\n ERROR_MESSAGES = {\n pattern_multiEmail: gettext('Invalid email addresses.'),\n pattern_singleEmail: gettext('Invalid email address.')\n };\n microserviceUrl: string;\n headers: any;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient\n ) {\n this.microserviceUrl = '/service/reporting/schedule';\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? ((data as unknown) as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success: boolean = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push.apply(schedules, schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(`${this.microserviceUrl}/${exportId}`, options);\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName(({ weekday: x } as unknown) as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName(({ month: x } as unknown) as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron: string = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = cronConfig.weekday === '*' || cronConfig.weekday === '?' ? this.daysOfWeekPosix[0].value : cronConfig.weekday ;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n multiEmailPattern: RegExp = /^([a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*,?)*$/i;\n singleEmailPattern: RegExp = /[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$/;\n cronExpression: string = '* * * * *';\n validCron: boolean = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { ConfirmModalComponent, Status, gettext, OptionsService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass: string = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse: boolean = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen: boolean = false;\n modalRef: BsModalRef;\n currentUserEmail: string = '';\n hasRequiredRole: boolean = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate);\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(gettext('Duplicate schedule - no permissions')),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = 'ROLE_SCHEDULE_REPORT_ADMIN';\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(exportId: IdReference, schedule: Schedule, actionType: ActionType, index?: number) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = { class: 'modal-sm', initialState: payload } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '..';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules/core/bootstrap';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nconst angularJsModule = angular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@c8y/ngx-components/reports/export-schedules.interface.ts","ng://@c8y/ngx-components/reports/reports.service.ts","ng://@c8y/ngx-components/reports/cron.service.ts","ng://@c8y/ngx-components/reports/schedule-modal.component.ts","ng://@c8y/ngx-components/reports/export-schedules.component.ts","ng://@c8y/ngx-components/reports/cron.component.ts","ng://@c8y/ngx-components/reports/reports.module.ts","ng://@c8y/ngx-components/reports/ng1/downgraded.components.ts","ng://@c8y/ngx-components/reports/ng1/downgraded.services.ts","ng://@c8y/ngx-components/reports/ng1/index.ts"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","push","ActionType","Base","ReportsService","alertService","inventoryService","client","ERROR_MESSAGES","pattern_multiEmail","gettext","pattern_singleEmail","microserviceUrl","headers","Content-Type","prototype","getExport","exportId","detail","exportDetail","_a","data","res","status","addServerFailure","exp","getScheduleList","extractScheduleListFromExport","scheduleList","c8y_ScheduleConfiguration","orderBy","addSchedule","schedule","updateSchedules","updateSchedule","oldSchedule","schedulesToRemove","schedulesToAdd","success","_b","schedules","remove","some","scheduleToRemove","isEqual","update","reschedule","options","method","fetch","deleteSchedule","removeConfiguration","config","url","id","AlertService","InventoryService","FetchClient","Injectable","CronService","translateService","daysOfWeekPosix","daysOfMonth","months","hours","minutes","intervals","x","toString","getWeekDayName","weekday","getMonthName","month","generateCron","cronConfig","cron","minute","hour","day","generateCronConfig","parts","split","getBase","base","Initial","Hour","Day","Week","Month","Year","validateModels","valid","clearNextModels","date","Date","firstSundayDate","getDate","setDate","parseInt","formatDate","currentLang","getMonthDayName","name","forEach","item","setMonth","TranslateService","ScheduleModalComponent","reportsService","modalRef","cronService","emitter","EventEmitter","multiEmailPattern","singleEmailPattern","cronExpression","validCron","emitterPayload","message","timestamp","undefined","emailConfig","placeholdersInfo","ngOnInit","cloneDeep","populateEmailFieldsFromSchedule","to","emailTo","cc","emailCc","bcc","emailBcc","replyTo","emailReplyTo","subject","emailSubject","text","emailText","save","populateScheduleFromCronExpression","populateScheduleFromEmailFields","actionType","CREATE","DUPLICATE","getTime","hide","emit","cancel","getCron","convertStringOfEmailsToArray","stringOfEmails","arr","BsModalRef","tslib_1.__decorate","Output","Component","selector","template","ExportSchedulesComponent","bsModalService","userService","optionsService","onSchedulesUpdate","initialSchedule","listClass","sortReverse","isOpen","isEditMenuOpen","currentUserEmail","hasRequiredRole","defaultExportEmailTemplate","instant","loadingStatus","inProgress","error","_exportId","checkRole","_d","getCurrentUserEmail","getTenantOption","_c","expName","ngOnChanges","translateButtonTitles","buttonLabels","edit","editNoPermission","duplicate","duplicateNoPermission","delete","deleteNoPermission","current","email","hasRole","withProgress","openAddEditModal","editSchedule","index","event","preventDefault","EDIT","duplicateSchedule","_this","modalOptions","class","initialState","show","content","subscribe","load","getMessageFromModal","payload","removeSchedule","splice","BsModalService","UserService","OptionsService","Input","CronComponent","emittedCron","cronIn","onChangeSelect","ReportsModule","NgModule","declarations","imports","CoreModule","FormsModule","BsDropdownModule","TooltipModule","entryComponents","providers","exports","exportSchedulesComponent","downgradeComponent","component","downgradeInjectable","NAME","ng1Modules","angular\n .module","directive","service","registerNgModule"],"mappings":";;;;;;;;;;;;;;oFAoDO,SAASA,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,iBAAZQ,SAAoD,mBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,EAWzD,SAASO,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,WAI/D,SAASO,EAAYjB,EAASkB,GACjC,IAAsGC,EAAGC,EAAGC,EAAGC,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPJ,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOK,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEZ,KAAMkB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAOC,OAAUX,EACvJ,SAASM,EAAKM,GAAK,OAAO,SAAUC,GAAK,OACzC,SAAcC,GACV,GAAIjB,EAAG,MAAM,IAAIkB,UAAU,mCAC3B,KAAOd,GAAG,IACN,GAAIJ,EAAI,EAAGC,IAAMC,EAAY,EAARe,EAAG,GAAShB,EAAU,OAAIgB,EAAG,GAAKhB,EAAS,SAAOC,EAAID,EAAU,SAAMC,EAAEiB,KAAKlB,GAAI,GAAKA,EAAEV,SAAWW,EAAIA,EAAEiB,KAAKlB,EAAGgB,EAAG,KAAKtB,KAAM,OAAOO,EAE3J,OADID,EAAI,EAAGC,IAAGe,EAAK,CAAS,EAARA,EAAG,GAAQf,EAAEb,QACzB4B,EAAG,IACP,KAAK,EAAG,KAAK,EAAGf,EAAIe,EAAI,MACxB,KAAK,EAAc,OAAXb,EAAEC,QAAgB,CAAEhB,MAAO4B,EAAG,GAAItB,MAAM,GAChD,KAAK,EAAGS,EAAEC,QAASJ,EAAIgB,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKb,EAAEI,IAAIY,MAAOhB,EAAEG,KAAKa,MAAO,SACxC,QACI,KAAMlB,EAAIE,EAAEG,MAAML,EAAIA,EAAE9B,OAAS,GAAK8B,EAAEA,EAAE9B,OAAS,KAAkB,IAAV6C,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEb,EAAI,EAAG,SACjG,GAAc,IAAVa,EAAG,MAAcf,GAAMe,EAAG,GAAKf,EAAE,IAAMe,EAAG,GAAKf,EAAE,IAAM,CAAEE,EAAEC,MAAQY,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYb,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIA,EAAIe,EAAI,MAC7D,GAAIf,GAAKE,EAAEC,MAAQH,EAAE,GAAI,CAAEE,EAAEC,MAAQH,EAAE,GAAIE,EAAEI,IAAIa,KAAKJ,GAAK,MACvDf,EAAE,IAAIE,EAAEI,IAAIY,MAChBhB,EAAEG,KAAKa,MAAO,SAEtBH,EAAKlB,EAAKoB,KAAKtC,EAASuB,GAC1B,MAAOZ,GAAKyB,EAAK,CAAC,EAAGzB,GAAIS,EAAI,EAAI,QAAWD,EAAIE,EAAI,EACtD,GAAY,EAARe,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAE5B,MAAO4B,EAAG,GAAKA,EAAG,QAAK,EAAQtB,MAAM,GArB9BL,CAAK,CAACyB,EAAGC,UCxCjDM,EAMAC,eC9BV,SAAAC,EACUC,EACAC,EACAC,GAFAb,KAAAW,aAAAA,EACAX,KAAAY,iBAAAA,EACAZ,KAAAa,OAAAA,EAVVb,KAAAc,eAAiB,CACfC,mBAAoBC,EAAAA,QAAQ,4BAC5BC,oBAAqBD,EAAAA,QAAQ,2BAU7BhB,KAAKkB,gBAAkB,qBACvBlB,KAAKmB,QAAU,CAAEC,eAAgB,oBA+ErC,OA5EQV,EAAAW,UAAAC,UAAN,SAAgBC,yGAEO,MAAA,CAAA,EAAMvB,KAAKY,iBAAiBY,OAAOD,WAQxD,OARME,EAAeC,EAAAlC,OACbmC,EAAcF,EAAYE,KACf,OADLC,EAAQH,EAAYG,KAC1BC,OACN7B,KAAKW,aAAamB,iBAAiB,CAAEH,KAAIA,EAAEC,IAAGA,IAE9CG,EAAMJ,GAAwC,GAGhD,CAAA,EAAOI,WAGHrB,EAAAW,UAAAW,gBAAN,SAAsBT,mGACR,MAAA,CAAA,EAAMvB,KAAKsB,UAAUC,WAEjC,OAFMQ,EAAML,EAAAlC,OAEZ,CAAA,EAAOQ,KAAKiC,8BAA8BF,YAG5CrB,EAAAW,UAAAY,8BAAA,SAA8BF,GAC5B,IAAIG,EAIJ,OAHIH,IACFG,EAAeH,EAAII,0BAA4BJ,EAAII,0BAA4B,IAE1EC,EAAAA,QAAQF,EAAc,CAAC,aAAc,CAAC,UAGzCxB,EAAAW,UAAAgB,YAAN,SAAkBC,EAAoBf,6FAC7B,MAAA,CAAA,EAAMvB,KAAKuC,gBAAgBhB,EAAU,GAAI,CAACe,YAAjD,MAAA,CAAA,EAAOZ,EAAAlC,gBAGHkB,EAAAW,UAAAmB,eAAN,SAAqBC,EAAuBH,EAAoBf,6FACvD,MAAA,CAAA,EAAMvB,KAAKuC,gBAAgBhB,EAAU,CAACkB,GAAc,CAACH,YAA5D,MAAA,CAAA,EAAOZ,EAAAlC,gBAGHkB,EAAAW,UAAAkB,gBAAN,SACEhB,EACAmB,EACAC,eADA,IAAAD,IAAAA,EAAA,SACA,IAAAC,IAAAA,EAAA,uGAGY,OADRC,GAAmB,EACX,CAAA,EAAM5C,KAAKsB,UAAUC,WAQX,OARhBQ,EAAMc,EAAArD,OACNsD,EAAY9C,KAAKiC,8BAA8BF,GAErDgB,EAAAA,OAAOD,GAAW,SAACR,GACjB,OAAAU,EAAAA,KAAKN,GAAmB,SAACO,GAA+B,OAAAC,EAAAA,QAAQZ,EAAUW,SAE5EH,EAAUvC,KAAKxB,MAAM+D,EAAWH,GAChCZ,EAAII,0BAA4BW,EACV,CAAA,EAAM9C,KAAKY,iBAAiBuC,OAAOpB,kBAAnDL,EAAgBmB,EAAArD,OAAdmC,EAAID,EAAAC,KACO,OADLC,EAAGF,EAAAE,KACTC,OAAJ,CAAA,EAAA,GACQ,CAAA,EAAM7B,KAAKoD,WAAW7B,kBAAhCqB,EAAUC,EAAArD,oBAEVQ,KAAKW,aAAamB,iBAAiB,CAAEH,KAAIA,EAAEC,IAAGA,qBAGhD,MAAA,CAAA,EAAOgB,WAGHlC,EAAAW,UAAA+B,WAAN,SAAiB7B,mGAKM,OAJf8B,EAAyB,CAC7BC,OAAQ,MACRnC,QAASnB,KAAKmB,SAEK,CAAA,EAAMnB,KAAKa,OAAO0C,MAASvD,KAAKkB,gBAAe,aAAaK,EAAY8B,WAC7F,MAAA,CAAA,EAA+B,MADV3B,EAAAlC,OACDqC,gBAGhBnB,EAAAW,UAAAmC,eAAN,SAAqBlB,EAAoBf,6FAChC,MAAA,CAAA,EAAMvB,KAAKuC,gBAAgBhB,EAAU,CAACe,GAAW,YAAxD,MAAA,CAAA,EAAOZ,EAAAlC,gBAGHkB,EAAAW,UAAAoC,oBAAN,SAA0BC,mGAEjB,OADDC,EAAS3D,KAAKkB,gBAAe,WAAWwC,EAAOE,GAC9C,CAAA,EAAM5D,KAAKa,OAAO0C,MAAMI,EAAK,CAAEL,OAAQ,mBAA9C,MAAA,CAAA,EAAO5B,EAAAlC,yDAlFeqE,EAAAA,oBACIC,EAAAA,wBACVC,EAAAA,eAXPrD,EAAc5D,EAAA,CAD1BkH,EAAAA,cACYtD,ODgCDF,EAAAA,EAAAA,aAAAA,EAAAA,WAAU,KACpB,OAAA,SACAA,EAAA,KAAA,OACAA,EAAA,UAAA,aAGUC,EAAAA,EAAAA,OAAAA,EAAAA,KAAI,KACdA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,IAAA,GAAA,MACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,KAAA,GAAA,wBEAA,SAAAwD,EAAoBC,GAAAlE,KAAAkE,iBAAAA,EA5CpBlE,KAAAmE,gBAAyB,GACzBnE,KAAAoE,YAAc,CACZ,CAAE7F,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,IAAKgB,MAAO,MACrB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,OACtB,CAAEhB,MAAO,KAAMgB,MAAO,QAExBS,KAAAqE,OAAgB,GAChBrE,KAAAsE,MAAe,GACftE,KAAAuE,QAAiB,GACjBvE,KAAAwE,UAAY,CACV,CAAEjG,MAAO,EAAGgB,MAAOyB,EAAAA,QAAQ,SAC3B,CAAEzC,MAAO,EAAGgB,MAAOyB,EAAAA,QAAQ,QAC3B,CAAEzC,MAAO,EAAGgB,MAAOyB,EAAAA,QAAQ,SAC3B,CAAEzC,MAAO,EAAGgB,MAAOyB,EAAAA,QAAQ,UAC3B,CAAEzC,MAAO,EAAGgB,MAAOyB,EAAAA,QAAQ,UAG3B,IAAK,IAAIyD,EAAI,EAAGA,EAAI,GAAIA,IACtBzE,KAAKsE,MAAM/D,KAAK,CAAEhC,MAAOkG,EAAEC,WAAYnF,MAAO,GAAGkF,IAEnD,IAASA,EAAI,EAAGA,EAAI,GAAIA,GAAQ,EAC9BzE,KAAKuE,QAAQhE,KAAK,CAAEhC,MAAOkG,EAAEC,WAAYnF,MAAO,GAAGkF,IAGrD,IAASA,EAAI,EAAGA,EAAI,EAAGA,IACrBzE,KAAKmE,gBAAgB5D,KAAK,CACxBhC,MAAOkG,EAAEC,WACTnF,MAAOS,KAAK2E,eAAgB,CAAEC,QAASH,MAI3C,IAASA,EAAI,EAAGA,EAAI,GAAIA,IACtBzE,KAAKqE,OAAO9D,KAAK,CACfhC,MAAOkG,EAAEC,WACTnF,MAAOS,KAAK6E,aAAc,CAAEC,MAAOL,MA+M3C,OA1MER,EAAA5C,UAAA0D,aAAA,SAAaC,GACX,IAAIC,EAAe,GAOnB,OANAA,EAAOD,EAAWE,OAAS,GAAGF,EAAWE,OAAW,IACpDD,GAAQD,EAAWG,KAAO,IAAIH,EAAWG,KAAS,KAClDF,GAAQD,EAAWI,IAAM,IAAIJ,EAAWI,IAAQ,KAChDH,GAAQD,EAAWF,MAAQ,IAAIE,EAAWF,MAAU,KACpDG,GAAQD,EAAWJ,QAAU,IAAII,EAAWJ,QAAY,MAK1DX,EAAA5C,UAAAgE,mBAAA,SAAmBJ,GACjB,IAAMK,EAAQL,EAAKM,MAAM,OASzB,MAR+B,CAC7BL,OAAQI,EAAM,GACdH,KAAMG,EAAM,GACZF,IAAKE,EAAM,GACXR,MAAOQ,EAAM,GACbV,QAASU,EAAM,KAMnBrB,EAAA5C,UAAAmE,QAAA,SAAQR,GACN,IAAIS,EAAahF,EAAAA,KAAKiF,QA8CtB,MA3CwB,MAAtBV,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,OACY,MAAvBE,EAAWJ,QAEXa,EAAOhF,EAAAA,KAAKkF,KAEU,MAAtBX,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,OACY,MAAvBE,EAAWJ,QAEXa,EAAOhF,EAAAA,KAAKmF,IAEU,MAAtBZ,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,OACY,MAAvBE,EAAWJ,QAEXa,EAAOhF,EAAAA,KAAKoF,KAEU,MAAtBb,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,OACY,MAAvBE,EAAWJ,QAEXa,EAAOhF,EAAAA,KAAKqF,MAEU,MAAtBd,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,OACY,MAAvBE,EAAWJ,UAEXa,EAAOhF,EAAAA,KAAKsF,MAKPN,GAGTxB,EAAA5C,UAAA2E,eAAA,SAAeP,EAAYT,GACzB,IAAIiB,EACJ,OAAQR,GACN,KAAKhF,EAAAA,KAAKiF,QACRO,GAAQ,EACR,MACF,KAAKxF,EAAAA,KAAKkF,KAENM,EADwB,MAAtBjB,EAAWE,OAKf,MACF,KAAKzE,EAAAA,KAAKmF,IAENK,EADwB,MAAtBjB,EAAWE,QAAsC,MAApBF,EAAWG,KAK5C,MACF,KAAK1E,EAAAA,KAAKoF,KAENI,EADwB,MAAtBjB,EAAWE,QAAsC,MAApBF,EAAWG,MAAuC,MAAvBH,EAAWJ,QAKvE,MACF,KAAKnE,EAAAA,KAAKqF,MAENG,EADwB,MAAtBjB,EAAWE,QAAsC,MAApBF,EAAWG,MAAmC,MAAnBH,EAAWI,IAKvE,MACF,KAAK3E,EAAAA,KAAKsF,KAONE,EALsB,MAAtBjB,EAAWE,QACS,MAApBF,EAAWG,MACQ,MAAnBH,EAAWI,KACU,MAArBJ,EAAWF,MAMb,MACF,QACEmB,GAAQ,EAGZ,OAAOA,GAGThC,EAAA5C,UAAA6E,gBAAA,SAAgBT,EAAYT,GACtBS,IAAShF,EAAAA,KAAKiF,SAGhBV,EAAWE,OAAS,IACpBF,EAAWG,KAAO,IAClBH,EAAWI,IAAM,IACjBJ,EAAWF,MAAQ,IACnBE,EAAWJ,QAAU,KACZa,IAAShF,EAAAA,KAAKkF,MAGvBX,EAAWE,OAA+B,MAAtBF,EAAWE,OAAiBlF,KAAKuE,QAAQ,GAAGhG,MAAQyG,EAAWE,OACnFF,EAAWG,KAAO,IAClBH,EAAWI,IAAM,IACjBJ,EAAWF,MAAQ,IACnBE,EAAWJ,QAAU,KACZa,IAAShF,EAAAA,KAAKmF,KAGvBZ,EAAWE,OAA+B,MAAtBF,EAAWE,OAAiBlF,KAAKuE,QAAQ,GAAGhG,MAAQyG,EAAWE,OACnFF,EAAWG,KAA2B,MAApBH,EAAWG,KAAenF,KAAKsE,MAAM,GAAG/F,MAAQyG,EAAWG,KAC7EH,EAAWI,IAAM,IACjBJ,EAAWF,MAAQ,IACnBE,EAAWJ,QAAU,KACZa,IAAShF,EAAAA,KAAKoF,MAGvBb,EAAWE,OAA+B,MAAtBF,EAAWE,OAAiBlF,KAAKuE,QAAQ,GAAGhG,MAAQyG,EAAWE,OACnFF,EAAWG,KAA2B,MAApBH,EAAWG,KAAenF,KAAKsE,MAAM,GAAG/F,MAAQyG,EAAWG,KAC7EH,EAAWI,IAAM,IACjBJ,EAAWF,MAAQ,IACnBE,EAAWJ,QAAiC,MAAvBI,EAAWJ,SAA0C,MAAvBI,EAAWJ,QAAkB5E,KAAKmE,gBAAgB,GAAG5F,MAAQyG,EAAWJ,SAClHa,IAAShF,EAAAA,KAAKqF,OAGvBd,EAAWE,OAA+B,MAAtBF,EAAWE,OAAiBlF,KAAKuE,QAAQ,GAAGhG,MAAQyG,EAAWE,OACnFF,EAAWG,KAA2B,MAApBH,EAAWG,KAAenF,KAAKsE,MAAM,GAAG/F,MAAQyG,EAAWG,KAC7EH,EAAWI,IAAyB,MAAnBJ,EAAWI,IAAcpF,KAAKoE,YAAY,GAAG7F,MAAQyG,EAAWI,IACjFJ,EAAWF,MAAQ,IACnBE,EAAWJ,QAAU,KACZa,IAAShF,EAAAA,KAAKsF,OAGvBf,EAAWE,OAA+B,MAAtBF,EAAWE,OAAiBlF,KAAKuE,QAAQ,GAAGhG,MAAQyG,EAAWE,OACnFF,EAAWG,KAA2B,MAApBH,EAAWG,KAAenF,KAAKsE,MAAM,GAAG/F,MAAQyG,EAAWG,KAC7EH,EAAWI,IAAyB,MAAnBJ,EAAWI,IAAcpF,KAAKoE,YAAY,GAAG7F,MAAQyG,EAAWI,IACjFJ,EAAWF,MAA6B,MAArBE,EAAWF,MAAgB9E,KAAKqE,OAAO,GAAG9F,MAAQyG,EAAWF,MAChFE,EAAWJ,QAAU,MAIzBX,EAAA5C,UAAAsD,eAAA,SAAeK,GACb,IAAMmB,EAAO,IAAIC,KAAK,GAChBC,EAAkBF,EAAKG,UAAY,EAEzC,OADAH,EAAKI,QAAQF,EAAkBG,SAASxB,EAAWJ,QAAS,KACrD6B,EAAAA,WAAWN,EAAM,OAAQnG,KAAKkE,iBAAiBwC,cAGxDzC,EAAA5C,UAAAsF,gBAAA,SAAgB3B,GACd,IAAI4B,EAAO,GAOX,OANA5G,KAAKoE,YAAYyC,SAAQ,SAAAC,GACnBA,EAAKvI,QAAUyG,EAAWI,MAC5BwB,EAAOE,EAAKvH,UAITqH,GAGT3C,EAAA5C,UAAAwD,aAAA,SAAaG,GACX,IAAMmB,EAAO,IAAIC,KAAK,GAEtB,OADAD,EAAKY,SAASP,SAASxB,EAAWF,MAAO,IAAM,GACxC2B,EAAAA,WAAWN,EAAM,OAAQnG,KAAKkE,iBAAiBwC,uDA/NlBM,EAAAA,oBA7C3B/C,EAAWnH,EAAA,CADvBkH,EAAAA,cACYC,mBCkCX,SAAAgD,EACSC,EACAC,EACCC,GAFDpH,KAAAkH,eAAAA,EACAlH,KAAAmH,SAAAA,EACCnH,KAAAoH,YAAAA,EA5BApH,KAAAqH,QAAwC,IAAIC,EAAAA,aAGtDtH,KAAAQ,WAAaA,EAAAA,WACbR,KAAAuH,kBAA4B,kEAC5BvH,KAAAwH,mBAA6B,0CAC7BxH,KAAAyH,eAAyB,YACzBzH,KAAA0H,WAAqB,EACrB1H,KAAA2H,eAAiC,CAC/B/E,SAAS,EACTgF,QAAS,GACTtF,SAAU,CAAEuF,eAAWC,EAAWC,iBAAaD,EAAW9C,gBAAY8C,IAUxE9H,KAAAgI,iBAAmBhH,EAAAA,QACjB,mJAiGJ,OAxFEiG,EAAA5F,UAAA4G,SAAA,WACEjI,KAAKyC,YAAcyF,EAAAA,UAAUlI,KAAKsC,UAClCtC,KAAKmI,gCAAgCnI,KAAKsC,UAC1CtC,KAAKyH,eAAiBzH,KAAKoH,YAAYrC,aAAa/E,KAAKsC,SAAS0C,YAClEhF,KAAK0H,UAAY1H,KAAKoH,YAAYpB,eAChChG,KAAKoH,YAAY5B,QAAQxF,KAAKsC,SAAS0C,YACvChF,KAAKsC,SAAS0C,aAIlBiC,EAAA5F,UAAA8G,gCAAA,SAAgC7F,GAC1BA,EAASyF,YAAYK,IAAM9F,EAASyF,YAAYK,GAAG9K,SACrD0C,KAAKqI,QAAU/F,EAASyF,YAAYK,GAAG1D,YAErCpC,EAASyF,YAAYO,IAAMhG,EAASyF,YAAYO,GAAGhL,SACrD0C,KAAKuI,QAAUjG,EAASyF,YAAYO,GAAG5D,YAErCpC,EAASyF,YAAYS,KAAOlG,EAASyF,YAAYS,IAAIlL,SACvD0C,KAAKyI,SAAWnG,EAASyF,YAAYS,IAAI9D,YAEvCpC,EAASyF,YAAYW,UACvB1I,KAAK2I,aAAerG,EAASyF,YAAYW,SAEvCpG,EAASyF,YAAYa,UACvB5I,KAAK6I,aAAevG,EAASyF,YAAYa,SAEvCtG,EAASyF,YAAYe,OACvB9I,KAAK+I,UAAYzG,EAASyF,YAAYe,OAI1C7B,EAAA5F,UAAA2H,KAAA,WAGE,GAFAhJ,KAAKiJ,qCACLjJ,KAAKkJ,kCACDlJ,KAAKmJ,aAAe3I,EAAAA,WAAW4I,QAAUpJ,KAAKmJ,aAAe3I,EAAAA,WAAW6I,UAAW,CACrF,IACMxB,GADO,IAAIzB,MACMkD,UACvBtJ,KAAKsC,SAASuF,UAAYA,EAE5B7H,KAAK2H,eAAe/E,SAAU,EAC9B5C,KAAK2H,eAAerF,SAAWtC,KAAKsC,SACpCtC,KAAKmH,SAASoC,OAEdvJ,KAAKqH,QAAQmC,KAAKxJ,KAAK2H,iBAGzBV,EAAA5F,UAAAoI,OAAA,WACEzJ,KAAKmH,SAASoC,QAGhBtC,EAAA5F,UAAAqI,QAAA,SAAQzE,GACNjF,KAAK0H,UAAYzC,EAAKgB,MAClBhB,EAAKgB,QACPjG,KAAKyH,eAAiBxC,EAAKA,OAI/BgC,EAAA5F,UAAA4H,mCAAA,WACEjJ,KAAKsC,SAAS0C,WAAahF,KAAKoH,YAAY/B,mBAAmBrF,KAAKyH,iBAGtER,EAAA5F,UAAAsI,6BAAA,SAA6BC,GAC3B,IAAMC,EAAM,GACRD,GACYA,EAAerE,MAAM,KAC7BsB,SAAQ,SAAAC,GACRA,GACF+C,EAAItJ,KAAKuG,MAIf,OAAO+C,GAGT5C,EAAA5F,UAAA6H,gCAAA,WACElJ,KAAKsC,SAASyF,YAAYK,GAAKpI,KAAKqI,QAChCrI,KAAK2J,6BAA6B3J,KAAKqI,SACvC,KACJrI,KAAKsC,SAASyF,YAAYO,GAAKtI,KAAKuI,QAChCvI,KAAK2J,6BAA6B3J,KAAKuI,SACvC,KACJvI,KAAKsC,SAASyF,YAAYS,IAAMxI,KAAKyI,SACjCzI,KAAK2J,6BAA6B3J,KAAKyI,UACvC,KACJzI,KAAKsC,SAASyF,YAAYW,QAAU1I,KAAK2I,aACzC3I,KAAKsC,SAASyF,YAAYa,QAAU5I,KAAK6I,aACzC7I,KAAKsC,SAASyF,YAAYe,KAAO9I,KAAK+I,oDA3FfrI,SACNoJ,EAAAA,kBACI7F,KA5Bb8F,EAAAA,CAATC,EAAAA,wCAHU/C,EAAsBnK,EAAA,CAJlCmN,EAAAA,UAAU,CACTC,SAAU,iBACVC,SAAA,uhNAEWlD,mBC+CX,SAAAmD,EACUlD,EACAmD,EACDjD,EACClD,EACAoG,EACAC,GALAvK,KAAAkH,eAAAA,EACAlH,KAAAqK,eAAAA,EACDrK,KAAAoH,YAAAA,EACCpH,KAAAkE,iBAAAA,EACAlE,KAAAsK,YAAAA,EACAtK,KAAAuK,eAAAA,EA9CAvK,KAAAwK,kBAAoB,IAAIlD,EAAAA,aAGlCtH,KAAAkC,aAA2B,GAC3BlC,KAAAyK,gBAA4B,CAC1B5C,UAAW,KACXE,YAAa,CACXK,GAAI,GACJE,GAAI,GACJE,IAAK,GACLE,QAAS,GACTI,KAAM,GACNF,QAAS,IAEX5D,WAAY,CACVE,OAAQ,IACRC,KAAM,IACNC,IAAK,IACLN,MAAO,IACPF,QAAS,MAIb5E,KAAA0K,UAAoB,gBAGpB1K,KAAA2K,aAAuB,EACvB3K,KAAA4K,OAAc,GAEd5K,KAAA6K,gBAA0B,EAE1B7K,KAAA8K,iBAA2B,GAC3B9K,KAAA+K,iBAA2B,EAEnB/K,KAAAgL,2BAA6BhL,KAAKkE,iBAAiB+G,QACzDjK,EAAAA,QACE,kGAYFhB,KAAKkL,cAAgB,CACnBC,YAAY,EACZtM,MAAM,EACNuM,OAAO,GAiGb,OAxJW5N,OAAAK,eAAIuM,EAAA/I,UAAA,WAAQ,KAAZ,SAAaE,GACpBvB,KAAKqL,UAAY9J,mCA0Db6I,EAAA/I,UAAA4G,SAAN,iHACyB,OAAvBvG,EAAA1B,KAAuB,CAAA,EAAMA,KAAKsL,oBAET,OAFzB5J,EAAKqJ,gBAAkBQ,EAAA/L,OACvBQ,KAAKgC,iBAAgB,GACI,CAAA,EAAMhC,KAAKwL,8BACI,OADlCV,EAAmBS,EAAA/L,OACzBqD,EAAA7C,KAAKyK,gBAAgB1C,YAAmB,CAAA,EAAM/H,KAAKuK,eAAekB,gBAChE,gBACA,wBACAzL,KAAKgL,oCAEI,OALXnI,EAAiCiG,KAAOyC,EAAA/L,OAIxCQ,KAAKyK,gBAAgB1C,YAAYK,GAAK0C,EACtCY,EAAA1L,KAAW,CAAA,EAAMA,KAAKkH,eAAe5F,UAAUtB,KAAKqL,0BAApDK,EAAK3J,IAAMwJ,EAAA/L,OACXQ,KAAKyK,gBAAgB1C,YAAYa,QAAU5I,KAAKkE,iBAAiB+G,QAC/DjK,EAAAA,QAAQ,2BACR,CAAE2K,QAAS3L,KAAK+B,IAAI6E,mBAIxBwD,EAAA/I,UAAAuK,YAAA,WACE5L,KAAK6L,yBAGPzB,EAAA/I,UAAAwK,sBAAA,WACE7L,KAAK8L,aAAe,CAClBC,KAAM/L,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,kBAC5CgL,iBAAkBhM,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,mCACxDiL,UAAWjM,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,uBACjDkL,sBAAuBlM,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,wCAC7DmL,OAAQnM,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,oBAC9CoL,mBAAoBpM,KAAKkE,iBAAiB+G,QAAQjK,EAAAA,QAAQ,uCAIxDoJ,EAAA/I,UAAAmK,oBAAN,2GACmB,MAAA,CAAA,EAAMxL,KAAKsK,YAAY+B,kBACxC,MAAA,CAAA,GADQ1K,EAASD,EAAAlC,OAAgCmC,OAClCA,EAAK2K,MAAQ,CAAC3K,EAAK2K,OAAS,YAEvClC,EAAA/I,UAAAiK,UAAN,2GACmB,MAAA,CAAA,EAAMtL,KAAKsK,YAAY+B,kBAGxC,OAHQ1K,EAASD,EAAAlC,OAAgCmC,KACpC,6BAEb,CAAA,EADgB3B,KAAKsK,YAAYiC,QAAQ5K,EAD5B,uCAKTyI,EAAA/I,UAAAW,gBAAN,SAAsBwK,mGAIA,OAHhBA,IACFxM,KAAKkL,cAAcC,YAAa,GAElCzJ,EAAA1B,KAAoB,CAAA,EAAMA,KAAKkH,eAAelF,gBAAgBhC,KAAKqL,0BAAnE3J,EAAKQ,aAAeW,EAAArD,OAChBgN,IACFxM,KAAKkL,cAAcC,YAAa,eAIpCf,EAAA/I,UAAAgB,YAAA,WACErC,KAAKyM,iBAAiBzM,KAAKqL,UAAWrL,KAAKyK,gBAAiBjK,EAAAA,WAAW4I,SAGzEgB,EAAA/I,UAAAqL,aAAA,SAAapK,EAAoBqK,EAAeC,GAC1C5M,KAAK+K,kBACP6B,EAAMC,iBACN7M,KAAKyM,iBAAiBzM,KAAKqL,UAAW/I,EAAU9B,EAAAA,WAAWsM,KAAMH,KAIrEvC,EAAA/I,UAAA0L,kBAAA,SAAkBzK,EAAoBsK,GACpCA,EAAMC,iBACN7M,KAAKyM,iBAAiBzM,KAAKqL,UAAW/I,EAAU9B,EAAAA,WAAW6I,YAG7De,EAAA/I,UAAAoL,iBAAA,SAAiBlL,EAAuBe,EAAoB6G,EAAwBwD,GAApF,IAAAK,EAAAhN,KAEQiN,EAAe,CAAEC,MAAO,WAAYC,aAD1B,CAAEhE,WAAUA,EAAE5H,SAAQA,EAAEe,SAAU4F,EAAAA,UAAU5F,KAE5DtC,KAAKmH,SAAWnH,KAAKqK,eAAe+C,KAAKnG,EAAwBgG,GACjEjN,KAAKmH,SAASkG,QAAQhG,QAAQiG,WAAU,SAACC,GACvC,OAAAP,EAAKQ,oBAAoBD,EAAMZ,OAInCvC,EAAA/I,UAAAmM,oBAAA,SAAoBC,EAAyBd,GACvCc,EAAQ7K,eACIkF,IAAV6E,EACF3M,KAAKkC,aAAayK,GAASc,EAAQnL,SAEnCtC,KAAKkC,aAAa3B,KAAKkN,EAAQnL,UAEjCtC,KAAKwK,kBAAkBhB,KAAKxJ,KAAKkC,gBAIrCkI,EAAA/I,UAAAqM,eAAA,SAAepL,EAAoBqK,EAAeC,GAChDA,EAAMC,iBACN7M,KAAKkC,aAAayL,OAAOhB,EAAO,GAChC3M,KAAKwK,kBAAkBhB,KAAKxJ,KAAKkC,wDAzGTxB,SACAkN,EAAAA,sBACJ3J,SACM+C,EAAAA,wBACL6G,EAAAA,mBACGC,EAAAA,kBAlDjB/D,EAAAA,CAARgE,EAAAA,sCAIShE,EAAAA,CAATC,EAAAA,kDALUI,EAAwBtN,EAAA,CAJpCmN,EAAAA,UAAU,CACTC,SAAU,mBACVC,SAAA,6lNAEWC,mBCWX,SAAA4D,EAAoB5G,GAAApH,KAAAoH,YAAAA,EAhBVpH,KAAAqH,QAAqC,IAAIC,EAAAA,aACnDtH,KAAAiO,YAA2B,CACzBhI,OAAO,EACPhB,KAAM,IAGRjF,KAAAyF,KAAahF,EAAAA,KAAKiF,QAgCpB,OAlBEsI,EAAA3M,UAAA4G,SAAA,WACEjI,KAAKmE,gBAAkBnE,KAAKoH,YAAYjD,gBACxCnE,KAAKoE,YAAcpE,KAAKoH,YAAYhD,YACpCpE,KAAKqE,OAASrE,KAAKoH,YAAY/C,OAC/BrE,KAAKsE,MAAQtE,KAAKoH,YAAY9C,MAC9BtE,KAAKuE,QAAUvE,KAAKoH,YAAY7C,QAChCvE,KAAKwE,UAAYxE,KAAKoH,YAAY5C,UAElCxE,KAAKgF,WAAahF,KAAKoH,YAAY/B,mBAAmBrF,KAAKkO,QAC3DlO,KAAKyF,KAAOzF,KAAKoH,YAAY5B,QAAQxF,KAAKgF,aAG5CgJ,EAAA3M,UAAA8M,eAAA,WACEnO,KAAKoH,YAAYlB,gBAAgBlG,KAAKyF,KAAMzF,KAAKgF,YACjDhF,KAAKiO,YAAYhI,MAAQjG,KAAKoH,YAAYpB,eAAehG,KAAKyF,KAAMzF,KAAKgF,YACzEhF,KAAKiO,YAAYhJ,KAAOjF,KAAKoH,YAAYrC,aAAa/E,KAAKgF,YAC3DhF,KAAKqH,QAAQmC,KAAKxJ,KAAKiO,uDApBQhK,KAjBxB8F,EAAAA,CAARgE,EAAAA,sCACShE,EAAAA,CAATC,EAAAA,wCAFUgE,EAAalR,EAAA,CAJzBmN,EAAAA,UAAU,CACTC,SAAU,OACVC,SAAA,imIAEW6D,MCebI,EAAA,WAAA,SAAAA,KAA4B,OAAfA,EAAatR,EAAA,CAPzBuR,EAAAA,SAAS,CACRC,aAAc,CAAClE,EAA0BnD,EAAwB+G,GACjEO,QAAS,CAACC,EAAAA,WAAYC,EAAAA,YAAaC,EAAAA,iBAAkBC,EAAAA,eACrDC,gBAAiB,CAACxE,EAA0BnD,EAAwB+G,GACpEa,UAAW,CAACnO,EAAgBuD,GAC5B6K,QAAS,CAAC1E,EAA0BnD,EAAwB+G,MAEjDI,GAAb,GCrBaW,EAA2BC,EAAAA,mBAAmB,CACzDC,UAAW7E,ICDAlD,EAAiBgI,EAAAA,oBAAoBxO,GCG5CyO,EAAO,sBAOAC,GALWC,EAAAA,OACdF,EAAM,IACbG,UAAU,qBAAsBP,GAChCQ,QAAQ,oBAAqBrI,GAEN,CAACiI,IAE3BK,EAAAA,iBAAiBJ","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport {AlertService, gettext} from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport {InventoryService, IdReference, IFetchResponse, IIdentified} from '@c8y/client';\nimport { FetchClient, IFetchOptions } from '@c8y/client';\n\n@Injectable()\nexport class ReportsService {\n ERROR_MESSAGES = {\n pattern_multiEmail: gettext('Invalid email addresses.'),\n pattern_singleEmail: gettext('Invalid email address.')\n };\n microserviceUrl: string;\n headers: any;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient\n ) {\n this.microserviceUrl = '/service/reporting';\n this.headers = { 'Content-Type': 'application/json' };\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? ((data as unknown) as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success: boolean = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push.apply(schedules, schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(`${this.microserviceUrl}/schedule/${exportId}`, options);\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n\n async removeConfiguration(config: IIdentified): Promise<IFetchResponse> {\n const url = `${this.microserviceUrl}/config/${config.id}`;\n return await this.client.fetch(url, { method: 'DELETE' });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName(({ weekday: x } as unknown) as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName(({ month: x } as unknown) as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron: string = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = cronConfig.weekday === '*' || cronConfig.weekday === '?' ? this.daysOfWeekPosix[0].value : cronConfig.weekday ;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n multiEmailPattern: RegExp = /^([a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\\.[a-z0-9-]+)*,?)*$/i;\n singleEmailPattern: RegExp = /[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$/;\n cronExpression: string = '* * * * *';\n validCron: boolean = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { ConfirmModalComponent, Status, gettext, OptionsService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass: string = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse: boolean = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen: boolean = false;\n modalRef: BsModalRef;\n currentUserEmail: string = '';\n hasRequiredRole: boolean = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/inventory/binaries/{binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate);\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(gettext('Duplicate schedule - no permissions')),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = 'ROLE_SCHEDULE_REPORT_ADMIN';\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(exportId: IdReference, schedule: Schedule, actionType: ActionType, index?: number) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = { class: 'modal-sm', initialState: payload } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '..';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules/core/bootstrap';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nconst angularJsModule = angular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n"]}