79 lines
2.1 KiB
JavaScript
Raw Normal View History

2019-12-18 18:13:24 +01:00
import { fromJS } from 'immutable';
2020-01-15 12:17:44 +01:00
import { get } from 'lodash';
const header = { key: '', value: '' };
2020-01-03 10:53:58 +01:00
const initialWebhook = {
2020-01-15 12:17:44 +01:00
events: [],
headers: [header],
2020-01-03 10:53:58 +01:00
name: null,
url: null,
};
2019-12-18 18:13:24 +01:00
const initialState = fromJS({
2020-01-07 16:00:11 +01:00
formErrors: {},
2020-01-15 12:17:44 +01:00
initialData: initialWebhook,
2020-01-06 01:52:26 +01:00
isTriggering: false,
2020-01-15 12:17:44 +01:00
modifiedData: initialWebhook,
triggerResponse: {},
2019-12-18 18:13:24 +01:00
});
const reducer = (state, action) => {
switch (action.type) {
2020-01-15 12:17:44 +01:00
case 'ADD_NEW_HEADER':
return state.updateIn(['modifiedData', ...action.keys], arr =>
arr.push(fromJS(header))
);
2020-01-03 10:53:58 +01:00
case 'GET_DATA_SUCCEEDED': {
2020-01-15 12:17:44 +01:00
const headers = get(action, ['data', 'headers'], {});
let formattedHeaders = [header];
2020-01-03 10:53:58 +01:00
if (Object.keys(headers).length > 0) {
2020-01-15 12:17:44 +01:00
formattedHeaders = Object.keys(headers).map(key => {
return { key: key, value: headers[key] };
});
2020-01-03 10:53:58 +01:00
}
2020-01-15 12:17:44 +01:00
const data = fromJS(action.data).update('headers', () =>
fromJS(formattedHeaders)
);
2019-12-18 18:13:24 +01:00
return state
2020-01-15 12:17:44 +01:00
.update('initialData', () => data)
.update('modifiedData', () => data);
2020-01-03 10:53:58 +01:00
}
2020-01-15 12:17:44 +01:00
case 'IS_TRIGGERING':
return state.update('isTriggering', isTriggering => !isTriggering);
2020-01-06 01:52:26 +01:00
case 'ON_CHANGE':
2020-01-02 09:55:26 +01:00
return state.updateIn(
2020-01-15 12:17:44 +01:00
['modifiedData', ...action.keys],
2020-01-02 09:55:26 +01:00
() => action.value
);
2020-01-06 16:46:30 +01:00
case 'ON_HEADER_REMOVE': {
2020-01-15 12:17:44 +01:00
return state.updateIn(['modifiedData', 'headers'], headers => {
if (headers.size === 1) {
return fromJS([header]);
}
return headers.remove(action.index);
});
2020-01-06 16:46:30 +01:00
}
2020-01-15 12:17:44 +01:00
case 'ON_TRIGGER_CANCELED':
return state
.update('isTriggering', () => false)
.set('triggerResponse', fromJS({}));
case 'RESET_FORM':
return state.update('modifiedData', () => state.get('initialData'));
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));
2020-01-15 12:17:44 +01:00
case 'TRIGGER_SUCCEEDED':
return state
.update('triggerResponse', () => fromJS(action.response))
.update('isTriggering', () => false);
2019-12-18 18:13:24 +01:00
default:
return state;
}
};
export default reducer;
export { initialState };