ucsc-xena-datapages
Version:
Data summary views for UCSC xena servers
90 lines (68 loc) • 2.57 kB
JavaScript
/*global require: false, module: false */
;
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
var _ = require('./underscore_ext');
var _require = require('./defaults');
var defaultState = _require.defaultState;
var _require2 = require('./session');
var updateHostStatus = _require2.updateHostStatus;
// After settings change, update the list of hosts that
// are in use for the session.
var setUserServers = function setUserServers(state) {
var _state$servers = state.servers;
var activeHosts = _state$servers.activeHosts;
var userHosts = _state$servers.userHosts;
return _.assocIn(state, ['servers', 'pending'], _.intersection(activeHosts, userHosts));
};
function updateAllHosts(state) {
state.allHosts.forEach(function (host) {
updateHostStatus(host); // only currently update sessinostorage, not state ( :( )
});
}
function setHubs(state, _ref) {
var hubs = _ref.hubs;
return hubs ? hubs.reduce(function (state, hub) {
return _.assocIn(state, ['servers', hub, 'user'], true);
}, state) : state;
}
var controls = {
init: function init(state, params) {
return setHubs(_.updateIn(state, ['servers'], function (s) {
return _.merge(defaultState, s);
}), params);
},
'init-post!': function initPost(serverBus, state, newState) {
return updateAllHosts(newState);
},
'add-host': function addHost(state, list, host) {
return setUserServers(_.updateIn(state, ['servers', list], function (l) {
return _.union(l, [host]);
}));
},
'remove-host': function removeHost(state, list, host) {
return setUserServers(_.updateIn(state, ['servers', list], function (l) {
return _.difference(l, [host]);
}));
},
cohort: function cohort(state, _cohort) {
return _.assoc(state, 'cohortPending', [{ name: _cohort }]);
}
};
var identity = function identity(x) {
return x;
};
module.exports = {
action: function action(state, _ref2) {
var _ref3 = _toArray(_ref2);
var tag = _ref3[0];
var args = _ref3.slice(1);
return (controls[tag] || identity).apply(undefined, [state].concat(_toConsumableArray(args)));
},
postAction: function postAction(serverBus, state, _ref4) {
var _ref5 = _toArray(_ref4);
var tag = _ref5[0];
var args = _ref5.slice(1);
return (controls[tag + '-post!'] || identity).apply(undefined, [serverBus, state].concat(_toConsumableArray(args)));
}
};