import { fromJS, List } from 'immutable'; import { CONFIG_SUCCESS } from 'Actions/config'; const integrations = (state = null, action) => { switch (action.type) { case CONFIG_SUCCESS: { const integrations = action.payload.get('integrations', List()).toJS() || []; const newState = integrations.reduce( (acc, integration) => { const { hooks, collections, provider, ...providerData } = integration; acc.providers[provider] = { ...providerData }; if (!collections) { hooks.forEach(hook => { acc.hooks[hook] = provider; }); return acc; } const integrationCollections = collections === '*' ? action.payload.collections.map(collection => collection.name) : collections; integrationCollections.forEach(collection => { hooks.forEach(hook => { acc.hooks[collection] ? (acc.hooks[collection][hook] = provider) : (acc.hooks[collection] = { [hook]: provider }); }); }); return acc; }, { providers: {}, hooks: {} }, ); return fromJS(newState); } default: return state; } }; export const selectIntegration = (state, collection, hook) => collection ? state.getIn(['hooks', collection, hook], false) : state.getIn(['hooks', hook], false); export default integrations;