import { Observable } from 'rxjs/Rx'; import { Logger } from '@nsalaun/ng-logger'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { ToastrService } from 'ngx-toastr'; import { ScheduleService } from './schedule.service'; import { Schedule } from './schedule'; var scheduleFormTmpl = require('./schedule.form.tmpl.html'), scheduleDeleteTmpl = require('./schedule.delete.tmpl.html'); export class ScheduleController{ operations = []; constructor( private $stateParams, private toastrService: ToastrService, private scheduleService: ScheduleService, private logger: Logger, private $modal ) { // Load operations on controller initialization. this.load(); } /* * Add a new operation at the beginning of th array. */ add = function() { var schedule = new Schedule(); schedule.account_id = this.$stateParams.accountId; return this.modify(schedule); }; /* * Load operations. */ load = function() { return this.scheduleService.query(this.$stateParams.accountId) .subscribe((schedules: Schedule[]) => { this.operations = schedules; } ); }; /* * Save operation. */ save = function(operation: Schedule) { let subscription: Observable; if(operation.id) { this.logger.log("updating schedule", operation); subscription = this.scheduleService.update(operation); } else { this.logger.log("creating schedule", operation); subscription = this.scheduleService.create(operation); } return subscription.subscribe((operation: Schedule) => { this.toastrService.success('Scheduled operation #' + operation.id + ' saved.'); this.load(); return operation; }, (result) => { this.toastrService.error( 'Error while saving scheduled operation: ' + result.message ); }); }; /* * Delete an operation and return a promise. */ confirmDelete = function(operation: Schedule) { var title = "Delete operation #" + operation.id; this.$modal({ templateUrl: scheduleDeleteTmpl, controller: function($scope, title, operation, $delete) { $scope.title = title; $scope.operation = operation; $scope.$delete = () => { $scope.$hide(); $delete($scope.operation); }; }, locals: { title: title, operation: operation, $delete: (operation) => { this.delete(operation); } } }); }; /* * Delete operation. */ delete = function(operation: Schedule) { var id = operation.id; return this.scheduleService.delete(operation).subscribe(() => { this.toastrService.success('Scheduled operation #' + id + ' deleted.'); this.load(); return operation; }, (result) => { this.toastrService.error( 'An error occurred while trying to delete scheduled operation #' + id + ':
' + result ); }); }; /* * Open the popup to modify the operation, save it on confirm. * @returns a promise. */ modify = function(operation: Schedule) { // FIXME Alexis Lahouze 2017-06-15 i18n var title = "Operation"; if (operation.id) { title = title + " #" + operation.id; } this.$modal({ templateUrl: scheduleFormTmpl, controller: function($scope, title, operation, $save) { $scope.title = title; $scope.operation = operation; $scope.$save = () => { $scope.$hide(); $save($scope.operation); }; }, locals: { title: title, operation: operation, $save: (operation) => { this.save(operation); } } }); }; };