OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/frontend/app/components/wp-relations/wp-relations-hierarchy-row/wp-relations-hierarchy-row....

113 lines
3.6 KiB

import {wpDirectivesModule} from '../../../angular-modules';
import {WorkPackageRelationsHierarchyService} from '../wp-relations-hierarchy/wp-relations-hierarchy.service';
import {WorkPackageCacheService} from '../../work-packages/work-package-cache.service';
import {WorkPackageNotificationService} from '../../wp-edit/wp-notification.service';
class WpRelationsHierarchyRowDirectiveController {
public workPackage;
public relatedWorkPackage;
public relationType;
public showEditForm: boolean = false;
public workPackagePath = this.PathHelper.workPackagePath;
public canModifyHierarchy: boolean = false;
constructor(protected $scope: ng.IScope,
protected $timeout,
protected wpRelationsHierarchyService: WorkPackageRelationsHierarchyService,
protected wpCacheService: WorkPackageCacheService,
protected wpNotificationsService: WorkPackageNotificationService,
protected PathHelper: op.PathHelper,
protected I18n: op.I18n) {
if (!this.relatedWorkPackage && this.relationType !== 'parent') {
this.relatedWorkPackage = angular.copy(this.workPackage);
}
this.canModifyHierarchy = !!this.workPackage.changeParent;
};
public text = {
change_parent:this.I18n.t('js.relation_buttons.change_parent'),
remove_parent:this.I18n.t('js.relation_buttons.remove_parent'),
remove_child:this.I18n.t('js.relation_buttons.remove_child'),
remove:this.I18n.t('js.relation_buttons.remove'),
parent:this.I18n.t('js.relation_labels.parent'),
children:this.I18n.t('js.relation_labels.children')
};
public get relationReady() {
return this.relatedWorkPackage && this.relatedWorkPackage.$loaded;
}
public get relationClassName() {
if (this.isCurrentElement()) {
return 'self';
}
return this.relationType;
}
public removeRelation() {
if (this.relationType === 'child') {
this.removeChild();
} else if (this.relationType === 'parent') {
this.removeParent();
}
}
public isCurrentElement() {
if (this.relationType !== 'child' && this.relationType !== 'parent') {
return true;
}
}
public isParent() {
8 years ago
return this.relationType === 'parent';
}
protected removeChild() {
this.wpRelationsHierarchyService
.removeChild(this.relatedWorkPackage)
.then(() => {
this.wpCacheService.loadWorkPackage(<number> this.workPackage.id, true);
this.wpNotificationsService.showSave(this.workPackage);
this.$timeout(() => {
angular.element('#hierarchy--add-exisiting-child').focus();
});
})
.catch(err => this.wpNotificationsService.handleErrorResponse(err, this.relatedWorkPackage));
}
protected removeParent() {
this.wpRelationsHierarchyService
.removeParent(this.workPackage)
.then(() => {
this.wpNotificationsService.showSave(this.workPackage);
this.$timeout(() => {
angular.element('#hierarchy--add-parent').focus();
});
})
.catch(err => this.wpNotificationsService.handleErrorResponse(err, this.relatedWorkPackage));
}
}
function WpRelationsHierarchyRowDirective() {
return {
restrict:'E',
templateUrl:'/components/wp-relations/wp-relations-hierarchy-row/wp-relations-hierarchy-row.template.html',
scope:{
indentBy:'@?',
workPackage:'=',
relatedWorkPackage:'=?',
relationType:'@'
},
controller:WpRelationsHierarchyRowDirectiveController,
controllerAs:'$ctrl',
bindToController:true
};
}
wpDirectivesModule.directive('wpRelationsHierarchyRow', WpRelationsHierarchyRowDirective);