2019-12-18 18:13:24 +01:00
|
|
|
import { fromJS } from 'immutable';
|
2020-01-03 10:53:58 +01:00
|
|
|
import { cloneDeep, set, get } from 'lodash';
|
|
|
|
|
|
|
|
const initialWebhook = {
|
|
|
|
name: null,
|
|
|
|
url: null,
|
|
|
|
headers: [{ key: '', value: '' }],
|
2020-01-06 01:52:26 +01:00
|
|
|
events: [],
|
2020-01-03 10:53:58 +01:00
|
|
|
};
|
2019-12-18 18:13:24 +01:00
|
|
|
|
|
|
|
const initialState = fromJS({
|
2020-01-07 16:00:11 +01:00
|
|
|
formErrors: {},
|
2020-01-03 10:53:58 +01:00
|
|
|
initialWebhook: initialWebhook,
|
|
|
|
modifiedWebhook: initialWebhook,
|
2020-01-06 01:52:26 +01:00
|
|
|
triggerResponse: {},
|
|
|
|
isTriggering: false,
|
2019-12-18 18:13:24 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
const reducer = (state, action) => {
|
|
|
|
switch (action.type) {
|
2020-01-03 10:53:58 +01:00
|
|
|
case 'GET_DATA_SUCCEEDED': {
|
|
|
|
const data = cloneDeep(action.data);
|
|
|
|
const headers = get(data, 'headers');
|
|
|
|
|
|
|
|
if (Object.keys(headers).length > 0) {
|
|
|
|
const newHeaders = fromJS(
|
|
|
|
Object.keys(headers).map(key => {
|
|
|
|
return { key: key, value: headers[key] };
|
|
|
|
})
|
|
|
|
);
|
|
|
|
set(data, ['headers'], newHeaders);
|
2020-01-06 01:52:26 +01:00
|
|
|
} else {
|
|
|
|
set(data, ['headers'], get(initialWebhook, 'headers'));
|
2020-01-03 10:53:58 +01:00
|
|
|
}
|
|
|
|
|
2019-12-18 18:13:24 +01:00
|
|
|
return state
|
2020-01-03 10:53:58 +01:00
|
|
|
.update('initialWebhook', () => fromJS(data))
|
2020-01-13 10:17:10 +01:00
|
|
|
.update('modifiedWebhook', () => fromJS(data));
|
2020-01-03 10:53:58 +01:00
|
|
|
}
|
2020-01-10 15:17:36 +01:00
|
|
|
case 'TRIGGER_SUCCEEDED':
|
2020-01-06 01:52:26 +01:00
|
|
|
return state
|
|
|
|
.update('triggerResponse', () => fromJS(action.response))
|
|
|
|
.update('isTriggering', () => false);
|
2020-01-10 15:17:36 +01:00
|
|
|
case 'ON_TRIGGER':
|
2020-01-06 01:52:26 +01:00
|
|
|
return state.update('isTriggering', () => true);
|
2020-01-10 15:17:36 +01:00
|
|
|
case 'ON_TRIGGER_CANCELED':
|
2020-01-06 16:01:42 +01:00
|
|
|
return state
|
|
|
|
.update('isTriggering', () => false)
|
|
|
|
.update('triggerResponse', () => {});
|
2020-01-06 01:52:26 +01:00
|
|
|
case 'ON_CHANGE':
|
2020-01-02 09:55:26 +01:00
|
|
|
return state.updateIn(
|
|
|
|
['modifiedWebhook', ...action.keys],
|
|
|
|
() => action.value
|
|
|
|
);
|
2020-01-03 10:53:58 +01:00
|
|
|
case 'ADD_NEW_HEADER':
|
|
|
|
return state.updateIn(['modifiedWebhook', ...action.keys], arr =>
|
|
|
|
arr.push(fromJS({ key: '', value: '' }))
|
|
|
|
);
|
2020-01-06 16:46:30 +01:00
|
|
|
case 'ON_HEADER_REMOVE': {
|
|
|
|
if (action.event === 'remove') {
|
|
|
|
return state.updateIn(['modifiedWebhook', 'headers'], headers =>
|
|
|
|
headers.splice(action.index, 1)
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
return state.updateIn(
|
|
|
|
['modifiedWebhook', 'headers', action.index],
|
|
|
|
() => fromJS({ key: '', value: '' })
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2020-01-10 15:17:36 +01:00
|
|
|
case 'RESET':
|
2020-01-06 16:01:42 +01:00
|
|
|
return state.update('modifiedWebhook', () =>
|
|
|
|
fromJS(state.get('initialWebhook'))
|
|
|
|
);
|
2020-01-10 15:17:36 +01:00
|
|
|
case 'SET_ERRORS':
|
2020-01-02 09:55:26 +01:00
|
|
|
return state.update('formErrors', () => fromJS(action.errors));
|
2019-12-18 18:13:24 +01:00
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default reducer;
|
|
|
|
export { initialState };
|