From ca20add577d38e40f13422db9a9218eef625045a Mon Sep 17 00:00:00 2001 From: Severiano Badajoz Date: Thu, 11 Jul 2019 14:12:38 -0700 Subject: [PATCH] reset colorAccessor and colorMode if colored diffexp gene is removed (#843) * add action to clear colorMode and colorAccessor if diffexp is removed * create new colorHelper function * creater colorHelper for conditionally setting state * add abbr * revert abbr --- client/src/reducers/colors.js | 52 +++++++++++++++----- client/src/util/stateManager/colorHelpers.js | 26 +++++++++- client/src/util/stateManager/index.js | 2 +- 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/client/src/reducers/colors.js b/client/src/reducers/colors.js index 95daa2db..bf2e0972 100644 --- a/client/src/reducers/colors.js +++ b/client/src/reducers/colors.js @@ -1,4 +1,4 @@ -import { createColors } from "../util/stateManager"; +import { ColorHelpers } from "../util/stateManager"; const ColorsReducer = ( state = { @@ -17,7 +17,7 @@ const ColorsReducer = ( const { world } = nextSharedState; const colorMode = null; const colorAccessor = null; - const { rgb, scale } = createColors(world, colorMode); + const { rgb, scale } = ColorHelpers.createColors(world, colorMode); return { ...state, colorAccessor, @@ -29,9 +29,23 @@ const ColorsReducer = ( case "set clip quantiles": case "set World to current selection": { + const { world: prevWorld, controls: prevControls } = prevSharedState; + const resetColorState = ColorHelpers.checkIfColorByDiffexpAndResetColors( + prevControls, + state, + prevWorld + ); + if (resetColorState) { + return resetColorState; + } + const { colorMode, colorAccessor } = state; const { world } = nextSharedState; - const { rgb, scale } = createColors(world, colorMode, colorAccessor); + const { rgb, scale } = ColorHelpers.createColors( + world, + colorMode, + colorAccessor + ); return { ...state, rgb, @@ -40,14 +54,9 @@ const ColorsReducer = ( } case "reset colorscale": { - const { world } = prevSharedState; - const { rgb, scale } = createColors(world); return { ...state, - colorMode: null, - colorAccessor: null, - rgb, - scale + ...ColorHelpers.resetColors(prevSharedState.world) }; } @@ -62,7 +71,11 @@ const ColorsReducer = ( const colorMode = !resetCurrent ? action.type : null; const colorAccessor = !resetCurrent ? action.colorAccessor : null; - const { rgb, scale } = createColors(world, colorMode, colorAccessor); + const { rgb, scale } = ColorHelpers.createColors( + world, + colorMode, + colorAccessor + ); return { ...state, colorMode, @@ -81,7 +94,11 @@ const ColorsReducer = ( const colorMode = !resetCurrent ? action.type : null; const colorAccessor = !resetCurrent ? action.gene : null; - const { rgb, scale } = createColors(world, colorMode, colorAccessor); + const { rgb, scale } = ColorHelpers.createColors( + world, + colorMode, + colorAccessor + ); return { ...state, colorMode, @@ -91,6 +108,19 @@ const ColorsReducer = ( }; } + case "clear differential expression": { + const { world: prevWorld, controls: prevControls } = prevSharedState; + const resetColorState = ColorHelpers.checkIfColorByDiffexpAndResetColors( + prevControls, + state, + prevWorld + ); + if (resetColorState) { + return resetColorState; + } + return state; + } + default: { return state; } diff --git a/client/src/util/stateManager/colorHelpers.js b/client/src/util/stateManager/colorHelpers.js index f41bae7b..13783558 100644 --- a/client/src/util/stateManager/colorHelpers.js +++ b/client/src/util/stateManager/colorHelpers.js @@ -15,7 +15,7 @@ create new colors state object. Paramters: "color by continuous metadata", "color by categorical metadata" - */ -function createColors(world, colorMode = null, colorAccessor = null) { +export function createColors(world, colorMode = null, colorAccessor = null) { switch (colorMode) { case "color by categorical metadata": { return createColorsByCategoricalMetadata(world, colorAccessor); @@ -117,4 +117,26 @@ function createColorsByExpression(world, accessor) { return { rgb, scale }; } -export default createColors; +export const resetColors = world => { + const { rgb, scale } = createColors(world); + return { + colorMode: null, + colorAccessor: null, + rgb, + scale + }; +}; + +export const checkIfColorByDiffexpAndResetColors = ( + prevControls, + state, + prevWorld +) => { + if (prevControls.diffexpGenes.includes(state.colorAccessor)) { + return { + ...state, + ...resetColors(prevWorld) + }; + } + return null; +}; diff --git a/client/src/util/stateManager/index.js b/client/src/util/stateManager/index.js index 151d48de..f6da6e13 100644 --- a/client/src/util/stateManager/index.js +++ b/client/src/util/stateManager/index.js @@ -14,7 +14,7 @@ This is all VERY tightly integrated with reducers and actions, and exists to support those concepts. */ -export { default as createColors } from "./colorHelpers"; +export * as ColorHelpers from "./colorHelpers"; export * as Universe from "./universe"; export * as World from "./world"; export * as WorldUtil from "./worldUtil";