joyent-portal/legacy/spikes/graphs-matrix/epoch/client/actions.js

64 lines
1.2 KiB
JavaScript

const takeRight = require('lodash.takeright');
const actions = {
'UPDATE_STATS': (state, action) => {
const data = (state[action.subscription] || []).concat([action.payload]);
return {
...state,
[action.subscription]: takeRight(data, 50)
};
}
};
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
});
};