Add collaboration feature
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / softwareProduct / dependencies / SoftwareProductDependenciesActionHelper.js
index e47b33a..f04f8fa 100644 (file)
  */
 import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
 import Configuration from 'sdc-app/config/Configuration.js';
-import {actionTypes} from './SoftwareProductDependenciesConstants.js';
-import uuid from 'uuid-js';
+import {actionTypes, NEW_RULE_TEMP_ID} from './SoftwareProductDependenciesConstants.js';
 
 function baseUrl(softwareProductId, version) {
        const versionId = version.id;
        const restPrefix = Configuration.get('restPrefix');
-       return `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/component-dependency-model`;
+       return `${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/component-dependencies`;
 }
 
-function fetchDependency(softwareProductId, version) {
+function fetchDependencies(softwareProductId, version) {
        return RestAPIUtil.fetch(`${baseUrl(softwareProductId, version)}`);
 }
 
-function postDependency(softwareProductId, version, dependenciesList) {
-       let modifedDependencyList = dependenciesList ? dependenciesList.filter(item => item.sourceId && item.targetId)
-       .map(item => ({sourceId: item.sourceId, targetId: item.targetId, relationType: item.relationType})) : [];
-       return RestAPIUtil.post(`${baseUrl(softwareProductId, version)}`, {componentDependencyModels:modifedDependencyList});
+function addDepencency(softwareProductId, version, item) {
+       return RestAPIUtil.post(`${baseUrl(softwareProductId, version)}`, {
+               sourceId: item.sourceId,
+               targetId: item.targetId,
+               relationType: item.relationType
+       });
 }
 
+
+function updateDepencency(softwareProductId, version, item) {
+       return RestAPIUtil.put(`${baseUrl(softwareProductId, version)}/${item.id}`,
+               {
+                       sourceId: item.sourceId,
+                       targetId: item.targetId,
+                       relationType: item.relationType
+               });
+}
+
+function removeDependency(softwareProductId, version, item) {
+       return RestAPIUtil.destroy(`${baseUrl(softwareProductId, version)}/${item.id}`);
+}
+
+
 const SoftwareProductDependenciesActionHelper = {
-       updateDependencyList(dispatch, {dependenciesList}) {            
-               dispatch({type: actionTypes.SOFTWARE_PRODUCT_DEPENDENCIES_LIST_UPDATE, dependenciesList});
+       updateDependency(dispatch, {softwareProductId, version, item}) {
+               // if change was made on existing item - we will update the server and refresh the list
+               // if change was made on the 'new' row - we will only fire the event
+               if (item.id !== NEW_RULE_TEMP_ID) {
+                       return updateDepencency(softwareProductId, version, item).then(() => {
+                               return this.fetchDependencies(dispatch, {softwareProductId, version});
+                       });
+               } else {
+                       dispatch({
+                               type: actionTypes.UPDATE_NEW_SOFTWARE_PRODUCT_DEPENDENCY,
+                               item: item
+                       });
+               }
        },
-       addDependency(dispatch) {
-               dispatch({type: actionTypes.ADD_SOFTWARE_PRODUCT_DEPENDENCY});
+
+       createDependency(dispatch, {softwareProductId, version, item}) {
+               // removing the temp id
+               delete item.id;
+               // creating the new dependency
+               return addDepencency(softwareProductId, version, item).then(() => {
+                       dispatch({
+                               type: actionTypes.ADD_SOFTWARE_PRODUCT_DEPENDENCY
+                       });
+                       return this.fetchDependencies(dispatch, {softwareProductId, version});
+               });
        },
+
+       removeDependency(dispatch, {softwareProductId, version, item}) {
+               return removeDependency(softwareProductId, version, item).then( () => {
+                       return this.fetchDependencies(dispatch, {softwareProductId, version});
+               });
+       },
+
        fetchDependencies(dispatch, {softwareProductId, version}) {
-               return fetchDependency(softwareProductId, version).then( response => {  
-                       const dependenciesList = response.results ? response.results.map(item => {return {...item, id: uuid.create().toString()};}) : [];                                                                       
+               return fetchDependencies(softwareProductId, version).then( response => {
                        dispatch({
                                type: actionTypes.SOFTWARE_PRODUCT_DEPENDENCIES_LIST_UPDATE,
-                               dependenciesList
+                               dependenciesList : response.results
                        });
                });
-       },
-       saveDependencies(dispatch, {softwareProductId, version, dependenciesList}) {
-               return postDependency(softwareProductId, version, dependenciesList);
-       }       
+       }
 };
 
 export default SoftwareProductDependenciesActionHelper;