Is there a way to Reduce the number of non-empty switch cases as SonarQube tells? In the reducer file a have 37 cases in a switch, but SonarQube allow just 30.
Maybe it is possible to write my code differently, because it works perfectly, the problem is just that SonarQube returns it like a CodeSmell. I post my reducer code below.
export function equipmentReducer(
lastState: IEquipmentState = new EquipmentState(),
action: GenericAction<EquipmentActionTypes, any>
): IEquipmentState {
switch (action.type) {
case EquipmentActionTypes.REQUEST_EQUIPMENT:
return reducerUtils.requestListData<IEquipmentState, IEquipment[]>(lastState, ['equipmentList']);
case EquipmentActionTypes.RECEIVE_EQUIPMENT:
return reducerUtils.receiveListData<IEquipmentState, IEquipment[]>(lastState, ['equipmentList'], action.payload);
case EquipmentActionTypes.ERROR_RECEIVE_EQUIPMENT:
return reducerUtils.errorListData<IEquipmentState, IEquipment[]>(lastState, ['equipmentList'], action.payload);
case EquipmentActionTypes.REQUEST_EQUIPMENT_BY_ID:
return reducerUtils.requestItemData<IEquipmentState, IEquipment>(lastState, ['selectedEquipment']);
case EquipmentActionTypes.RECEIVE_EQUIPMENT_BY_ID:
return reducerUtils.receiveItemData<IEquipmentState, IEquipment>(
lastState,
['selectedEquipment'],
action.payload as IEquipment
);
case EquipmentActionTypes.ERROR_RECEIVE_EQUIPMENT_BY_ID:
return reducerUtils.errorItemData<IEquipmentState, IEquipment>(lastState, ['selectedEquipment'], action.payload);
case EquipmentActionTypes.REQUEST_ADD_EQUIPMENT:
case EquipmentActionTypes.REQUEST_UPDATE_EQUIPMENT:
return reducerUtils.requestPostPutItemData<IEquipmentState, IEquipment>(
lastState,
['selectedEquipment'],
action.payload
);
case EquipmentActionTypes.RECEIVE_ADD_EQUIPMENT:
case EquipmentActionTypes.RECEIVE_UPDATE_EQUIPMENT:
return reducerUtils.receivePostPutItemData<IEquipmentState, IEquipment>(
lastState,
['selectedEquipment'],
action.payload
);
case EquipmentActionTypes.ERROR_ADD_EQUIPMENT:
case EquipmentActionTypes.ERROR_UPDATE_EQUIPMENT:
return reducerUtils.errorPostPutItemData<IEquipmentState, IEquipment>(
lastState,
['selectedEquipment'],
action.payload
);
case EquipmentActionTypes.REQUEST_INITIAL_SPECIFICATION:
return reducerUtils.requestListData<IEquipmentState, IEquipmentInitialSpecification[]>(lastState, [
'equipmentInitialSpecification',
]);
case EquipmentActionTypes.RECEIVE_INITIAL_SPECIFICATION:
return reducerUtils.receiveListData<IEquipmentState, IEquipmentInitialSpecification[]>(
lastState,
['equipmentInitialSpecification'],
action.payload
);
case EquipmentActionTypes.ERROR_INITIAL_SPECIFICATION:
return reducerUtils.errorListData<IEquipmentState, IEquipmentInitialSpecification[]>(
lastState,
['equipmentInitialSpecification'],
action.payload
);
case EquipmentActionTypes.REQUEST_MANUFACTURERS:
return reducerUtils.requestListData<IEquipmentState, IManufacturersListItem[]>(lastState, [
'manufacturers',
'manufacturerList',
]);
case EquipmentActionTypes.RECEIVE_MANUFACTURERS:
return reducerUtils.receiveListData<IEquipmentState, IManufacturersListItem[]>(
lastState,
['manufacturers', 'manufacturerList'],
action.payload
);
case EquipmentActionTypes.ERROR_RECEIVE_MANUFACTURERS:
return reducerUtils.errorListData<IEquipmentState, IManufacturersListItem[]>(
lastState,
['manufacturers', 'manufacturerList'],
action.payload
);
case EquipmentActionTypes.REQUEST_SUPPLIERS:
return reducerUtils.requestListData<IEquipmentState, ISuppliersListItem[]>(lastState, [
'suppliers',
'supplierList',
]);
case EquipmentActionTypes.RECEIVE_SUPPLIERS:
return reducerUtils.receiveListData<IEquipmentState, ISuppliersListItem[]>(
lastState,
['suppliers', 'supplierList'],
action.payload
);
case EquipmentActionTypes.ERROR_RECEIVE_SUPPLIERS:
return reducerUtils.errorListData<IEquipmentState, ISuppliersListItem[]>(
lastState,
['suppliers', 'supplierList'],
action.payload
);
case EquipmentActionTypes.REQUEST_ADD_MANUFACTURER:
return reducerUtils.requestPostPutItemData<IEquipmentState, IManufacturer>(
lastState,
['manufacturers', 'selectedManufacturer', 'manufacturerInfo'],
action.payload
);
case EquipmentActionTypes.RECEIVE_ADD_MANUFACTURER:
return reducerUtils.receivePostPutItemData<IEquipmentState, IManufacturer>(
lastState,
['manufacturers', 'selectedManufacturer', 'manufacturerInfo'],
action.payload
);
case EquipmentActionTypes.ERROR_ADD_MANUFACTURER:
return reducerUtils.errorPostPutItemData<IEquipmentState, IManufacturer>(
lastState,
['manufacturers', 'selectedManufacturer', 'manufacturerInfo'],
action.payload
);
case EquipmentActionTypes.REQUEST_ADD_SUPPLIER:
return reducerUtils.requestPostPutItemData<IEquipmentState, ISupplier>(
lastState,
['suppliers', 'selectedSupplier', 'supplierInfo'],
action.payload
);
case EquipmentActionTypes.RECEIVE_ADD_SUPPLIER:
return reducerUtils.receivePostPutItemData<IEquipmentState, ISupplier>(
lastState,
['suppliers', 'selectedSupplier', 'supplierInfo'],
action.payload
);
case EquipmentActionTypes.ERROR_ADD_SUPPLIER:
return reducerUtils.errorPostPutItemData<IEquipmentState, ISupplier>(
lastState,
['suppliers', 'selectedSupplier', 'supplierInfo'],
action.payload
);
case EquipmentActionTypes.REQUEST_ADD_MANUFACTURER_CONTACT:
return reducerUtils.requestPostPutItemData<IEquipmentState, IContact>(
lastState,
['manufacturers', 'selectedManufacturer', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.RECEIVE_ADD_MANUFACTURER_CONTACT:
return reducerUtils.receivePostPutItemData<IEquipmentState, IContact>(
lastState,
['manufacturers', 'selectedManufacturer', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.ERROR_ADD_MANUFACTURER_CONTACT:
return reducerUtils.errorPostPutItemData<IEquipmentState, IContact>(
lastState,
['manufacturers', 'selectedManufacturer', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.REQUEST_ADD_SUPPLIER_CONTACT:
return reducerUtils.requestPostPutItemData<IEquipmentState, IContact>(
lastState,
['suppliers', 'selectedSupplier', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.RECEIVE_ADD_SUPPLIER_CONTACT:
return reducerUtils.receivePostPutItemData<IEquipmentState, IContact>(
lastState,
['suppliers', 'selectedSupplier', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.ERROR_ADD_SUPPLIER_CONTACT:
return reducerUtils.errorPostPutItemData<IEquipmentState, IContact>(
lastState,
['suppliers', 'selectedSupplier', 'selectedContact'],
action.payload
);
case EquipmentActionTypes.REQUEST_EQUIPMENT_DELETE:
return reducerUtils.requestPostPutItemData<IEquipmentState, IEquipment>(lastState, ['deletedEquipment'], action.payload);
case EquipmentActionTypes.RECEIVE_EQUIPMENT_DELETE:
return reducerUtils.receivePostPutItemData<IEquipmentState, IEquipment>(lastState, ['deletedEquipment'], action.payload);
case EquipmentActionTypes.ERROR_RECEIVE_EQUIPMENT_DELETE:
return reducerUtils.errorPostPutItemData<IEquipmentState, IEquipment>(lastState, ['deletedEquipment'], action.payload);
case EquipmentActionTypes.REQUEST_EQUIPMENT_IS_DELETED:
return requestItemData<IEquipmentState, boolean>(lastState, ['equipmentIsDeleted']);
case EquipmentActionTypes.RECEIVE_EQUIPMENT_IS_DELETED:
return receiveItemData<IEquipmentState, boolean>(lastState, ['equipmentIsDeleted'], action.payload);
case EquipmentActionTypes.ERROR_RECEIVE_EQUIPMENT_IS_DELETED:
return errorItemData<IEquipmentState, boolean>(lastState, ['equipmentIsDeleted'], action.payload);
case EquipmentActionTypes.RESET_STATE:
return resetSelectedEquipmentState(lastState);
default:
return lastState;
}
}
I believe you can reduce it by finding common returns and creating a map. For example
reducerUtils.requestListDatais called 5 times, by creating a map for the differences you should be able to get rid of 4 switch cases.Initial thought is to turn
action.typesthat share return functions, into a new map (myMap) keys and list the specific different parameters here (I useoption1andoption2as I don't know the rest of your code). An alternative to usingoption1is to change it tounknownor a list of possibilities with|(IEquipment[] | IEq....) inside<>Continuing the above thought it should be possible to move the function into
option1and remove switch case entirely. Related article or this one