return produce(state, draft => { const idx = draft.planets.findIndex(p => p.id === draft.currentPlanetContext.id); let moons = draft.planets[idx].moons || []; action.newMoon.id = Date.now(); moons.push(action.newMoon); let planet = draft.currentPlanetContext; const idx = draft.planets.findIndex(p => p.id === planet.id); const moons = planet.moons.filter(m => m.id !== action.moon.id); planet.moons = draft.planets[idx].moons = moons; }); case actionTypes.EDIT_MOON: return produce(state, draft => { const moonIdx = draft.currentPlanetContext.moons.findIndex(m => m.id === action.moon.id); const planetIdx = draft.planets.findIndex(p => p.id === draft.currentPlanetContext.id); draft.currentPlanetContext.moons[moonIdx] = draft.planets[planetIdx].moons[moonIdx] = action.moon; }); default: