2016-07-16 02:06:10 +00:00
|
|
|
import {combineReducers} from 'redux';
|
2016-08-15 17:04:36 +00:00
|
|
|
|
2016-09-17 05:46:44 +00:00
|
|
|
import {trackEvent} from '../../../lib/analytics';
|
|
|
|
import * as network from '../../../lib/network';
|
2016-04-23 06:08:52 +00:00
|
|
|
|
|
|
|
export const REQUEST_CHANGE_FILTER = 'requests/filter';
|
2016-07-06 22:11:37 +00:00
|
|
|
export const REQUEST_SEND_START = 'requests/start';
|
|
|
|
export const REQUEST_SEND_STOP = 'requests/stop';
|
2016-04-23 06:08:52 +00:00
|
|
|
|
2016-04-26 07:29:24 +00:00
|
|
|
|
2016-04-23 06:08:52 +00:00
|
|
|
// ~~~~~~~~ //
|
|
|
|
// REDUCERS //
|
|
|
|
// ~~~~~~~~ //
|
|
|
|
|
2016-07-06 22:11:37 +00:00
|
|
|
function filterReducer(state = '', action) {
|
2016-04-23 06:08:52 +00:00
|
|
|
switch (action.type) {
|
2016-07-06 22:11:37 +00:00
|
|
|
|
2016-04-23 06:08:52 +00:00
|
|
|
case REQUEST_CHANGE_FILTER:
|
2016-04-26 07:29:24 +00:00
|
|
|
const filter = action.filter;
|
|
|
|
return Object.assign({}, state, {filter});
|
2016-07-06 22:11:37 +00:00
|
|
|
|
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadingRequestsReducer(state = {}, action) {
|
2016-07-07 20:10:55 +00:00
|
|
|
let newState;
|
2016-07-06 22:11:37 +00:00
|
|
|
switch (action.type) {
|
|
|
|
|
|
|
|
case REQUEST_SEND_START:
|
2016-07-07 20:10:55 +00:00
|
|
|
newState = Object.assign({}, state);
|
|
|
|
newState[action.requestId] = Date.now();
|
2016-08-15 17:04:36 +00:00
|
|
|
return newState;
|
2016-07-06 22:11:37 +00:00
|
|
|
|
|
|
|
case REQUEST_SEND_STOP:
|
2016-07-07 20:10:55 +00:00
|
|
|
newState = Object.assign({}, state);
|
|
|
|
delete newState[action.requestId];
|
|
|
|
return newState;
|
2016-07-06 22:11:37 +00:00
|
|
|
|
2016-04-23 06:08:52 +00:00
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-06 22:11:37 +00:00
|
|
|
export default combineReducers({
|
|
|
|
filter: filterReducer,
|
|
|
|
loadingRequests: loadingRequestsReducer
|
|
|
|
});
|
|
|
|
|
2016-04-23 06:08:52 +00:00
|
|
|
|
|
|
|
// ~~~~~~~ //
|
|
|
|
// ACTIONS //
|
|
|
|
// ~~~~~~~ //
|
|
|
|
|
2016-07-06 22:11:37 +00:00
|
|
|
export function changeFilter(filter) {
|
2016-04-23 06:08:52 +00:00
|
|
|
return {type: REQUEST_CHANGE_FILTER, filter};
|
|
|
|
}
|
|
|
|
|
2016-07-06 22:11:37 +00:00
|
|
|
export function send(request) {
|
2016-04-23 06:08:52 +00:00
|
|
|
return dispatch => {
|
2016-07-06 22:11:37 +00:00
|
|
|
dispatch({type: REQUEST_SEND_START, requestId: request._id});
|
2016-08-15 17:04:36 +00:00
|
|
|
|
2016-07-27 20:07:50 +00:00
|
|
|
trackEvent('Request Send');
|
2016-04-23 06:08:52 +00:00
|
|
|
|
2016-09-02 05:45:12 +00:00
|
|
|
network.send(request._id).then(response => {
|
2016-07-20 21:15:11 +00:00
|
|
|
dispatch({type: REQUEST_SEND_STOP, requestId: request._id});
|
|
|
|
}, err => {
|
2016-09-14 23:25:19 +00:00
|
|
|
console.info('Error sending request', err);
|
2016-07-06 22:11:37 +00:00
|
|
|
dispatch({type: REQUEST_SEND_STOP, requestId: request._id});
|
2016-04-23 06:08:52 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|