2 * Created by rcohen on 9/22/2016.
5 import {IWorkspaceViewModelScope} from "app/view-models/workspace/workspace-view-model";
6 import {ModalsHandler} from "app/utils";
7 import {Capability, PropertyModel, Requirement} from "app/models";
8 import {ComponentGenericResponse} from "../../../../ng2/services/responses/component-generic-response";
9 import {ComponentServiceNg2} from "../../../../ng2/services/component-services/component.service";
11 export class SortTableDefined {
16 interface IReqAndCapabilitiesViewModelScope extends IWorkspaceViewModelScope {
17 requirementsTableHeadersList:Array<any>;
18 capabilitiesTableHeadersList:Array<any>;
19 capabilityPropertiesTableHeadersList:Array<any>;
20 requirementsSortTableDefined:SortTableDefined;
21 capabilitiesSortTableDefined:SortTableDefined;
22 propertiesSortTableDefined:SortTableDefined;
23 requirements:Array<Requirement>;
24 capabilities:Array<Capability>;
26 filteredProperties:Array<Array<PropertyModel>>;
29 sort(sortBy:string, sortByTableDefined:SortTableDefined):void;
30 updateProperty(property:PropertyModel, indexInFilteredProperties:number):void;
31 allCapabilitiesSelected(selected:boolean):void;
34 export class ReqAndCapabilitiesViewModel {
44 constructor(private $scope:IReqAndCapabilitiesViewModelScope,
45 private $filter:ng.IFilterService,
46 private ModalsHandler:ModalsHandler,
47 private ComponentServiceNg2: ComponentServiceNg2) {
49 this.initCapabilitiesAndRequirements();
50 this.$scope.updateSelectedMenuItem();
53 private initCapabilitiesAndRequirements = (): void => {
55 if(!this.$scope.component.capabilities || !this.$scope.component.requirements) {
56 this.$scope.isLoading = true;
57 this.ComponentServiceNg2.getCapabilitiesAndRequirements(this.$scope.component.componentType, this.$scope.component.uniqueId).subscribe((response:ComponentGenericResponse) => {
58 this.$scope.component.capabilities = response.capabilities;
59 this.$scope.component.requirements = response.requirements;
61 this.$scope.isLoading = false;
63 this.$scope.isLoading = false;
71 private openEditPropertyModal = (property:PropertyModel, indexInFilteredProperties:number):void => {
72 //...because there is not be api
73 _.forEach(this.$scope.filteredProperties[indexInFilteredProperties], (prop:PropertyModel)=> {
76 this.ModalsHandler.openEditPropertyModal(property, this.$scope.component, this.$scope.filteredProperties[indexInFilteredProperties], false).then(() => {
81 private initScope = ():void => {
83 this.$scope.requirementsSortTableDefined = {
87 this.$scope.capabilitiesSortTableDefined = {
91 this.$scope.propertiesSortTableDefined = {
96 this.$scope.setValidState(true);
97 this.$scope.requirementsTableHeadersList = [
98 {title: 'Name', property: 'name'},
99 {title: 'Capability', property: 'capability'},
100 {title: 'Node', property: 'node'},
101 {title: 'Relationship', property: 'relationship'},
102 {title: 'Connected To', property: ''},
103 {title: 'Occurrences', property: ''}
105 this.$scope.capabilitiesTableHeadersList = [
106 {title: 'Name', property: 'name'},
107 {title: 'Type', property: 'type'},
108 {title: 'Description', property: ''},
109 {title: 'Valid Source', property: ''},
110 {title: 'Occurrences', property: ''}
112 this.$scope.capabilityPropertiesTableHeadersList = [
113 {title: 'Name', property: 'name'},
114 {title: 'Type', property: 'type'},
115 {title: 'Schema', property: 'schema.property.type'},
116 {title: 'Description', property: 'description'},
118 this.$scope.filteredProperties = [];
120 this.$scope.mode = 'requirements';
121 this.$scope.requirements = [];
122 _.forEach(this.$scope.component.requirements, (req:Array<Requirement>, capName)=> {
123 this.$scope.requirements = this.$scope.requirements.concat(req);
126 this.$scope.capabilities = [];
127 _.forEach(this.$scope.component.capabilities, (cap:Array<Capability>, capName)=> {
128 this.$scope.capabilities = this.$scope.capabilities.concat(cap);
131 this.$scope.sort = (sortBy:string, sortByTableDefined:SortTableDefined):void => {
132 sortByTableDefined.reverse = (sortByTableDefined.sortByField === sortBy) ? !sortByTableDefined.reverse : false;
133 sortByTableDefined.sortByField = sortBy;
136 this.$scope.updateProperty = (property:PropertyModel, indexInFilteredProperties:number):void => {
137 this.openEditPropertyModal(property, indexInFilteredProperties);
140 this.$scope.allCapabilitiesSelected = (selected:boolean):void => {
141 _.forEach(this.$scope.capabilities, (cap:Capability)=> {
142 cap.selected = selected;