joyent-portal/spikes/graphs-matrix/nvd3/client/actions.js

65 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

2016-11-10 12:43:22 +02:00
const take = require('lodash.take');
const actions = {
'UPDATE_STATS': (state, action) => {
const data = [action.payload].concat(state[action.subscription] || []);
return {
...state,
[action.subscription]: take(data, state.windowSize)
};
}
};
module.exports = (state, action) => {
return !actions[action.type] ? state : actions[action.type](state, action);
};
module.exports.subscribe = (id) => (dispatch, getState) => {
const {
ws
} = getState();
const p = new Promise((resolve, reject) => {
ws.subscribe(`/stats/${id}`, (update, flag) => {
dispatch({
type: 'UPDATE_STATS',
payload: update,
subscription: id
});
}, (err) => {
if (err) {
return reject(err);
}
resolve();
});
});
return dispatch({
action: 'SUBSCRIBE',
payload: p
});
};
module.exports.unsubscribe = (id) => (dispatch, getState) => {
const {
ws
} = getState();
const p = new Promise((resolve, reject) => {
ws.unsubscribe(`/stats/${id}`, null, (err) => {
if (err) {
return reject(err);
}
resolve();
});
});
return dispatch({
action: 'UNSUBSCRIBE',
payload: p
});
};