/** * External dependencies */ import { isEqual, keyBy, omit } from 'lodash'; import type { AnyAction } from '@nab/types'; /** * Internal dependencies */ import { INIT_STATE } from './config'; import type { Action } from './actions'; import type { State } from './types'; export function reducer( state = INIT_STATE, action: AnyAction ): State { return actualReducer( state, action as Action ) ?? state; } function actualReducer( state: State, action: Action ): State { switch ( action.type ) { case 'ADD_CONVERSION_ACTION_TYPES': { const newConversionActionTypes = { ...state.conversionActionTypes, ...keyBy( action.conversionActionTypes, 'name' ), }; if ( isEqual( state.conversionActionTypes, newConversionActionTypes ) ) { return state; } return { ...state, conversionActionTypes: newConversionActionTypes, }; } case 'REMOVE_CONVERSION_ACTION_TYPES': { const newConversionActionTypes = omit( state.conversionActionTypes, action.names ); if ( isEqual( state.conversionActionTypes, newConversionActionTypes ) ) { return state; } return { ...state, conversionActionTypes: newConversionActionTypes, }; } } }