import {v4 as uniqueId}  from 'node-uuid';
import fetch from 'isomorphic-fetch';
import config from '../../config/config.json';
import {
  TEMPLATE_ADD,
  TEMPLATE_UPDATE,
  TEMPLATE_FETCH_STARTED, TEMPLATE_FETCH_COMPLETED, TEMPLATE_FETCH_ERROR,
  TEMPLATE_STORE_STARTED, TEMPLATE_STORE_COMPLETED, TEMPLATE_STORE_ERROR
} from '../constants/ActionTypes';


export function addTemplate(name, items) {
  return {
    type: TEMPLATE_ADD,
    id: uniqueId(),
    name,
    items
  };
}

export function updateTemplate(id, name, items) {
  return {
    type: TEMPLATE_UPDATE,
    id,
    name,
    items
  }
}

export function fetchTemplates() {
  return dispatch => {
    dispatch(requestTemplates());

    return fetch(`${config.base_path}/api/templates`)
      .then(response => response.json())
      .then(json =>
        dispatch(receiveTemplates(json.templates))
      )
      .catch(error => dispatch(errorTemplates(error)));
  }
}

export function storeTemplate(name, items) {
  return dispatch => {
    dispatch(storeStarted());

    return fetch(`${config.base_path}/api/templates`, {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({name, items})
    }).then(response => response.json())
      .then(json =>
        dispatch(storeCompleted(json))
      )
      .catch(error => dispatch(storeError(error)));
  }
}

function requestTemplates() {
  return {
    type: TEMPLATE_FETCH_STARTED
  }
}

function receiveTemplates(json) {
  return {
    type: TEMPLATE_FETCH_COMPLETED,
    templates: json
  }
}


function errorTemplates(error) {
  return {
    type: TEMPLATE_FETCH_ERROR,
    error: error
  }
}

function storeStarted() {
  return {
    type: TEMPLATE_STORE_STARTED
  }
}

function storeCompleted(json) {
  return {
    type: TEMPLATE_STORE_COMPLETED,
    ...json
  };
}

function storeError(error) {
  return {
    type: TEMPLATE_STORE_ERROR,
    error: error
  }
}
@@ -356,24 +356,21 @@
 %0Aexport 
-function
+const
  addTemp
@@ -365,32 +365,35 @@
 onst addTemplate
+ = 
 (name, items) %7B%0A
@@ -390,33 +390,24 @@
  items) 
-%7B%0A  return 
+=%3E (
 %7B%0A  
- 
- 
 type: TE
@@ -418,18 +418,16 @@
 TE_ADD,%0A
-  
   id: un
@@ -438,34 +438,30 @@
 Id(),%0A  
- 
- 
 name,%0A
-  
   items%0A
   %7D;%0A%7D%0A%0A
@@ -452,22 +452,19 @@
   items%0A
-  %7D;%0A%7D
+%7D);
 %0A%0Aexport
@@ -464,24 +464,21 @@
 %0Aexport 
-function
+const
  updateT
@@ -484,16 +484,19 @@
 Template
+ = 
 (id, nam
@@ -505,31 +505,22 @@
  items) 
-%7B%0A  return %7B%0A  
+=%3E (%7B%0A
   type: 
@@ -540,18 +540,16 @@
 TE,%0A
-  
   id,%0A  
   na
@@ -548,26 +548,22 @@
 ,%0A  
- 
- 
 name,%0A
-  
   items%0A
   %7D%0A
@@ -558,21 +558,19 @@
   items%0A
-  %7D%0A%7D
+%7D);
 %0A%0Aexport
@@ -766,32 +766,24 @@
 then(json =%3E
-%0A       
  dispatch(re
@@ -813,23 +813,16 @@
 plates))
-%0A      
 )%0A      
@@ -1264,24 +1264,16 @@
 (json =%3E
-%0A       
  dispatc
@@ -1295,23 +1295,16 @@
 d(json))
-%0A      
 )%0A      
@@ -1356,24 +1356,21 @@
 %0A  %7D%0A%7D%0A%0A
-function
+const
  request
@@ -1378,34 +1378,28 @@
 emplates
-() %7B%0A  return %7B%0A  
+ = () =%3E (%7B%0A
   type: 
@@ -1421,31 +1421,26 @@
 STARTED%0A
-  %7D%0A%7D%0A%0Afunction
+%7D);%0A%0Aconst
  receive
@@ -1448,38 +1448,30 @@
 emplates
-(
+ = 
 json
-) %7B%0A  return %7B%0A  
+ =%3E (%7B%0A
   type: 
@@ -1498,18 +1498,16 @@
 ETED,%0A  
- 
- 
 template
@@ -1518,24 +1518,19 @@
 son%0A
-  %7D%0A%7D%0A%0A%0Afunction
+%7D);%0A%0A%0Aconst
  err
@@ -1540,39 +1540,31 @@
 emplates
-(
+ = 
 error
-) %7B%0A  return %7B%0A  
+ =%3E (%7B%0A
   type: 
@@ -1577,34 +1577,32 @@
 TE_FETCH_ERROR,%0A
-  
   error: error%0A 
@@ -1604,137 +1604,117 @@
 ror%0A
-  %7D%0A%7D%0A%0Afunction storeStarted() %7B%0A  return %7B%0A    type: TEMPLATE_STORE_STARTED%0A  %7D%0A%7D%0A%0Afunction storeCompleted(json) %7B%0A  return %7B%0A  
+%7D);%0A%0Aconst storeStarted = () =%3E (%7B%0A  type: TEMPLATE_STORE_STARTED%0A%7D);%0A%0Aconst storeCompleted = template =%3E (%7B%0A
   ty
@@ -1747,36 +1747,32 @@
 ED,%0A
-  
   ...
-json%0A  %7D;%0A%7D%0A%0Afunction
+template%0A%7D);%0A%0Aconst
  sto
@@ -1782,31 +1782,23 @@
 rror
-(
+ = 
 error
-) %7B%0A  return %7B%0A  
+ =%3E (%7B%0A
   ty
@@ -1823,18 +1823,16 @@
 _ERROR,%0A
-  
   error:
@@ -1838,13 +1838,11 @@
 : error%0A
-  %7D%0A%7D
+%7D);

simplify functions