Реализацию выбрал объектную вместо массивной, так как проще искать элементы.
Такое ощущение, что я навертел тут, так ли это и корректно ли я использую возможности нового подхода?
Укажите, пожалуйста, на недочеты. Сам код работает.
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
positions: {},
total: 0,
};
export const cartSlice = createSlice({
name: 'cart',
initialState,
reducers: {
addPosition: (state, action) => {
const positions = { ...state.positions };
const position = action.payload;
state.positions = positions[position.id]
? {
...positions,
[position.id]: { ...positions[position.id], quantity: positions[position.id].quantity + 1 },
}
: { ...positions, [position.id]: { ...position, quantity: 1 } };
},
removePosition: (state, action) => {
const positions = { ...state.positions };
const position = action.payload;
if (positions[position.id]) {
if (positions[position.id].quantity > 1) {
state.positions = {
...positions,
[position.id]: { ...positions[position.id], quantity: positions[position.id].quantity - 1 },
};
return;
}
delete positions[position.id];
state.positions = positions;
}
},
setTotal: (state, action) => {
state.total = action.payload;
},
},
});