woocommerce/plugins/woocommerce-admin/client/marketing/data-multichannel/reducer.ts

108 lines
1.8 KiB
TypeScript

/**
* External dependencies
*/
import type { Reducer } from 'redux';
/**
* Internal dependencies
*/
import { State } from './types';
import { Action } from './actions';
import { TYPES } from './action-types';
const initialState = {
registeredChannels: {
data: undefined,
error: undefined,
},
recommendedChannels: {
data: undefined,
error: undefined,
},
campaigns: {
pages: {},
meta: {
total: undefined,
},
},
campaignTypes: {
data: undefined,
error: undefined,
},
};
export const reducer: Reducer< State, Action > = (
state = initialState,
action
) => {
switch ( action.type ) {
case TYPES.RECEIVE_REGISTERED_CHANNELS_SUCCESS:
return {
...state,
registeredChannels: {
data: action.payload,
},
};
case TYPES.RECEIVE_REGISTERED_CHANNELS_ERROR:
return {
...state,
registeredChannels: {
error: action.payload,
},
};
case TYPES.RECEIVE_RECOMMENDED_CHANNELS_SUCCESS:
return {
...state,
recommendedChannels: {
data: action.payload,
},
};
case TYPES.RECEIVE_RECOMMENDED_CHANNELS_ERROR:
return {
...state,
recommendedChannels: {
error: action.payload,
},
};
case TYPES.RECEIVE_CAMPAIGNS:
const { meta } = action;
const key = `${ meta.page }-${ meta.perPage }`;
return {
...state,
campaigns: {
pages: {
...state.campaigns.pages,
[ key ]: action.error
? {
error: action.payload,
}
: {
data: action.payload,
},
},
meta: {
total: meta.total,
},
},
};
case TYPES.RECEIVE_CAMPAIGN_TYPES:
return {
...state,
campaignTypes: action.error
? {
error: action.payload,
}
: {
data: action.payload,
},
};
default:
return state;
}
};