all files / src/redux/actions/ fs.js

63% Statements 63/100
56.67% Branches 17/30
44.83% Functions 13/29
67.42% Lines 60/89
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153                                                                                                                                                                                         
'use strict';
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.CLEAR_FILE_SELECTION = exports.TOGGLE_FILE_SELECTION = exports.TOGGLE_OPEN_FOLDER = exports.CHILDREN_ITEMS = exports.CHILDREN_FOLDERS = exports.UPDATE_ITEMS = exports.UPDATE_FOLDER = undefined;
exports.updateFolder = updateFolder;
exports.updateItems = updateItems;
exports.fetchFolder = fetchFolder;
exports.toggleOpenFolder = toggleOpenFolder;
exports.toggleFileSelection = toggleFileSelection;
exports.clearFileSelection = clearFileSelection;
exports.moveFilesOffline = moveFilesOffline;
 
var _network = require('../../network');
 
var _network2 = _interopRequireDefault(_network);
 
var _network3 = require('./network');
 
var netActions = _interopRequireWildcard(_network3);
 
var _progress = require('./progress');
 
var progressActions = _interopRequireWildcard(_progress);
 
var _ = require('..');
 
function _interopRequireWildcard(obj) { Eif (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
var UPDATE_FOLDER = exports.UPDATE_FOLDER = 'UPDATE_FOLDER';
var UPDATE_ITEMS = exports.UPDATE_ITEMS = 'UPDATE_ITEMS';
var CHILDREN_FOLDERS = exports.CHILDREN_FOLDERS = 'CHILDREN_FOLDERS';
var CHILDREN_ITEMS = exports.CHILDREN_ITEMS = 'CHILDREN_ITEMS';
var TOGGLE_OPEN_FOLDER = exports.TOGGLE_OPEN_FOLDER = 'TOGGLE_OPEN_FOLDER';
var TOGGLE_FILE_SELECTION = exports.TOGGLE_FILE_SELECTION = 'TOGGLE_FILE_SELECTION';
var CLEAR_FILE_SELECTION = exports.CLEAR_FILE_SELECTION = 'CLEAR_FILE_SELECTION';
 
function updateFolder(folder) {
  return { type: UPDATE_FOLDER, folder: folder, id: folder._id };
}
 
function updateItems(items) {
  return { type: UPDATE_ITEMS, items: items };
}
 
function fetchFolder(id) {
  var fetchFolderMeta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  var openedFolders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
 
  return function (dispatch) {
    var action = netActions.addNetworkCall('fetch_folder_' + id, 'Fetch folder');
 
    // Update folder
    if (fetchFolderMeta) {
      _network2.default.getFolder(id).then(function (resp) {
        var folder = resp.data;
        dispatch(netActions.successNetworkCall(action.id, resp));
        dispatch(updateFolder(folder));
      }, function (error) {
        dispatch(netActions.errorNetworkCall(action.id, error));
      });
    }
 
    // Update children folders
    var folderChildrenAction = netActions.addNetworkCall('fetch_folder_children_' + id, 'Fetch folder children (folders)');
    dispatch(folderChildrenAction);
    _network2.default.listFolders({ parentId: id, parentType: 'folder' }).then(function (resp) {
      var children = resp.data;
      dispatch(netActions.successNetworkCall(folderChildrenAction.id, resp));
      dispatch({ type: CHILDREN_FOLDERS, children: children, id: id });
      children.forEach(function (folder) {
        dispatch(updateFolder(folder));
      });
    }, function (error) {
      dispatch(netActions.errorNetworkCall(folderChildrenAction.id, error));
    });
 
    // Update children items
    var itemChildrenAction = netActions.addNetworkCall('fetch_item_children_' + id, 'Fetch folder children (items)');
    dispatch(itemChildrenAction);
    _network2.default.listItems({ folderId: id }).then(function (resp) {
      var children = resp.data;
      dispatch(netActions.successNetworkCall(itemChildrenAction.id, resp));
      dispatch({ type: CHILDREN_ITEMS, children: children, id: id });
    }, function (error) {
      dispatch(netActions.errorNetworkCall(itemChildrenAction.id, error));
    });
 
    return fetchFolderMeta ? action : { type: 'NO_OP' };
  };
}
 
function toggleOpenFolder(folderId, opening) {
  return function (dispatch) {
    Iif (opening) {
      dispatch(fetchFolder(folderId));
    }
    return { type: TOGGLE_OPEN_FOLDER, folderId: folderId };
  };
}
 
function toggleFileSelection(fileId) {
  if (_.store.getState().network.pending.move_offline) {
    return { type: 'NO_OP' };
  }
  return { type: TOGGLE_FILE_SELECTION, fileId: fileId };
}
 
function clearFileSelection() {
  return { type: CLEAR_FILE_SELECTION };
}
 
function moveFilesOffline(items) {
  var promises = items.map(function (id) {
    return _network2.default.listFiles(id);
  });
  return function (dispatch) {
    var action = netActions.addNetworkCall('move_offline', 'Moving ' + items.length + ' offline');
    Promise.all(promises) // get files for each item
    .then(function (files) {
      // get the size from the list of list of files
      dispatch(progressActions.setupProgress(files.reduce(function (prev, cur) {
        var curSize = cur.data.reduce(function (p, c) {
          return p + c.size;
        }, 0);
        return prev + curSize;
      }, 0)));
      return _network2.default.moveFilesOffline(files.reduce(function (prev, cur) {
        return prev.concat(cur.data);
      }, []));
    }).then(function (resp) {
      if (process.env.NODE_ENV !== 'production') console.log('transfer complete');
      // update item meta
      dispatch(netActions.successNetworkCall(action.id, resp));
      return Promise.all(items.map(function (id) {
        return _network2.default.updateItemMetadata(id, { offline: true });
      }));
    }).then(function (newItems) {
      // update local items
      dispatch(updateItems(newItems.map(function (el) {
        return el.data;
      })));
      dispatch(clearFileSelection());
    }).catch(function (err) {
      dispatch(netActions.errorNetworkCall(action.id, err));
    });
    return action;
  };
}