diff --git a/frontend/app/components/wp-relations/child-relations-handler/child-relations-handler.service.ts b/frontend/app/components/wp-relations/child-relations-handler/child-relations-handler.service.ts new file mode 100644 index 0000000000..59e5a86f98 --- /dev/null +++ b/frontend/app/components/wp-relations/child-relations-handler/child-relations-handler.service.ts @@ -0,0 +1,98 @@ +//-- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See doc/COPYRIGHT.rdoc for more details. +//++ + +import {RelationsHandler} from "../relations-handler/relations-handler.service"; +import {opViewModelsModule} from "../../../angular-modules"; +import {HalResource} from "../../api/api-v3/hal-resources/hal-resource.service"; + +var $state:ng.ui.IStateService; +var WorkPackageService:any; +var ApiNotificationsService:any; + +export class ChildRelationsHandler extends RelationsHandler { + public type:string = 'child'; + + public canAddRelation():boolean { + return !!this.workPackage.addChild; + } + + public canDeleteRelation() { + return !!this.workPackage.update; + } + + public addRelation() { + var params = {parent_id: this.workPackage.id, projectPath: this.workPackage.project.identifier}; + + if ($state.includes('work-packages.show')) { + $state.go('work-packages.new', params); + } + else { + $state.go('work-packages.list.new', params); + } + } + + public getRelatedWorkPackage(relation:HalResource) { + return relation.$load(); + } + + public removeRelation(scope) { + var index = this.relations.indexOf(scope.relation); + var params = { + lockVersion: scope.relation.lockVersion, + parentId: null + }; + + WorkPackageService.updateWithPayload(scope.relation, params) + .then(response => { + scope.workPackage.lockVersion = response.lockVersion; + + this.relations.splice(index, 1); + scope.updateFocus(index); + scope.$emit('workPackageRefreshRequired'); + }) + .catch(error => { + ApiNotificationsService.addError(error); + }); + } +} + +function childRelationsHandlerService(_$state_, _WorkPackageService_, _ApiNotificationsService_) { + $state = _$state_; + WorkPackageService = _WorkPackageService_; + ApiNotificationsService = _ApiNotificationsService_; + + return ChildRelationsHandler; +} + +childRelationsHandlerService.$inject = [ + '$state', + 'WorkPackageService', + 'ApiNotificationsService' +]; + +opViewModelsModule.factory('ChildRelationsHandler', childRelationsHandlerService); diff --git a/frontend/app/components/wp-relations/relations-handler/relations-handler.service.ts b/frontend/app/components/wp-relations/relations-handler/relations-handler.service.ts index 46bbdf4d60..468e3910ce 100644 --- a/frontend/app/components/wp-relations/relations-handler/relations-handler.service.ts +++ b/frontend/app/components/wp-relations/relations-handler/relations-handler.service.ts @@ -26,7 +26,7 @@ // See doc/COPYRIGHT.rdoc for more details. //++ -import {WorkPackageResource} from "../../api/api-v3/hal-resources/work-package-resource.service"; +import {WorkPackageResourceInterface} from "../../api/api-v3/hal-resources/work-package-resource.service"; import {opViewModelsModule} from "../../../angular-modules"; var $timeout:ng.ITimeoutService; @@ -37,7 +37,7 @@ export class RelationsHandler { public type:string = 'relation'; public isSingletonRelation:boolean = false; - constructor(public workPackage:WorkPackageResource, public relations, public relationsId) { + constructor(public workPackage:WorkPackageResourceInterface, public relations, public relationsId) { } public isEmpty() { diff --git a/frontend/app/work_packages/view_models/children-relations-handler.js b/frontend/app/work_packages/view_models/children-relations-handler.js deleted file mode 100644 index 2a975bbe7c..0000000000 --- a/frontend/app/work_packages/view_models/children-relations-handler.js +++ /dev/null @@ -1,78 +0,0 @@ -//-- copyright -// OpenProject is a project management system. -// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License version 3. -// -// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -// Copyright (C) 2006-2013 Jean-Philippe Lang -// Copyright (C) 2010-2013 the ChiliProject Team -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -// -// See doc/COPYRIGHT.rdoc for more details. -//++ - -module.exports = function( - CommonRelationsHandler, - WorkPackageService, - ApiNotificationsService, - $state - ) { - function ChildrenRelationsHandler(workPackage, children) { - var handler = new CommonRelationsHandler(workPackage, children, undefined); - - handler.type = 'child'; - handler.applyCustomExtensions = undefined; - - handler.canAddRelation = function() { return !!this.workPackage.links.addChild; }; - handler.canDeleteRelation = function() { - return !!this.workPackage.links.update; - }; - handler.addRelation = function() { - var params = { parent_id: this.workPackage.props.id, - projectPath: this.workPackage.embedded.project.props.identifier }; - if ($state.includes('work-packages.show')) { - $state.go('work-packages.new', params); - } - else { - $state.go('work-packages.list.new', params); - } - }; - handler.getRelatedWorkPackage = function(workPackage, relation) { return relation.fetch(); }; - handler.removeRelation = function(scope) { - var index = this.relations.indexOf(scope.relation); - var handler = this; - var params = { - lockVersion: scope.relation.props.lockVersion, - parentId: null - }; - - WorkPackageService.updateWithPayload(scope.relation, params).then(function(response){ - handler.relations.splice(index, 1); - scope.workPackage.props.lockVersion = response.props.lockVersion; - scope.updateFocus(index); - scope.$emit('workPackageRefreshRequired'); - }, function(error) { - ApiNotificationsService.addError(error); - }); - }; - - return handler; - } - - return ChildrenRelationsHandler; -}; diff --git a/frontend/app/work_packages/view_models/index.js b/frontend/app/work_packages/view_models/index.js index 5e36f63eb8..acd821b0ac 100644 --- a/frontend/app/work_packages/view_models/index.js +++ b/frontend/app/work_packages/view_models/index.js @@ -27,13 +27,6 @@ //++ angular.module('openproject.viewModels') - .factory('ChildrenRelationsHandler', [ - 'CommonRelationsHandler', - 'WorkPackageService', - 'ApiNotificationsService', - '$state', - require('./children-relations-handler') - ]) .factory('ParentRelationsHandler', [ 'CommonRelationsHandler', 'WorkPackageService',