mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-10-04 00:48:11 +08:00
157 lines
4.3 KiB
JavaScript
157 lines
4.3 KiB
JavaScript
import { ControlsHelpers as CH } from "../util/stateManager";
|
|
|
|
const CategoricalSelection = (
|
|
state,
|
|
action,
|
|
nextSharedState,
|
|
prevSharedState
|
|
) => {
|
|
switch (action.type) {
|
|
case "initial data load complete (universe exists)":
|
|
case "set World to current selection":
|
|
case "reset World to eq Universe":
|
|
case "set clip quantiles": {
|
|
const { world } = nextSharedState;
|
|
const newState = CH.createCategoricalSelection(
|
|
world,
|
|
CH.selectableCategoryNames(
|
|
world.schema,
|
|
CH.maxCategoryItems(prevSharedState.config)
|
|
)
|
|
);
|
|
return newState;
|
|
}
|
|
|
|
case "universe: column load success": {
|
|
const { dim } = action;
|
|
if (dim !== "obsAnnotations") return state;
|
|
|
|
const { dataframe } = action;
|
|
const { world } = nextSharedState;
|
|
const names = CH.selectableCategoryNames(
|
|
world.schema,
|
|
CH.maxCategoryItems(prevSharedState.config),
|
|
dataframe.colIndex.labels()
|
|
);
|
|
if (names.length === 0) return state;
|
|
return {
|
|
...state,
|
|
...CH.createCategoricalSelection(world, names),
|
|
};
|
|
}
|
|
|
|
case "categorical metadata filter select": {
|
|
/*
|
|
Set the specific category in this field to false
|
|
*/
|
|
const newCategoryValueSelected = Array.from(
|
|
state[action.metadataField].categoryValueSelected
|
|
);
|
|
newCategoryValueSelected[action.categoryIndex] = true;
|
|
const newCategoricalSelection = {
|
|
...state,
|
|
[action.metadataField]: {
|
|
...state[action.metadataField],
|
|
categoryValueSelected: newCategoryValueSelected,
|
|
},
|
|
};
|
|
return newCategoricalSelection;
|
|
}
|
|
|
|
case "categorical metadata filter deselect": {
|
|
/*
|
|
Set the specific category in this field to false
|
|
*/
|
|
const newCategoryValueSelected = Array.from(
|
|
state[action.metadataField].categoryValueSelected
|
|
);
|
|
newCategoryValueSelected[action.categoryIndex] = false;
|
|
const newCategoricalSelection = {
|
|
...state,
|
|
[action.metadataField]: {
|
|
...state[action.metadataField],
|
|
categoryValueSelected: newCategoryValueSelected,
|
|
},
|
|
};
|
|
return newCategoricalSelection;
|
|
}
|
|
|
|
case "categorical metadata filter none of these": {
|
|
/*
|
|
set all categories in this field to false.
|
|
*/
|
|
const newCategoricalSelection = {
|
|
...state,
|
|
[action.metadataField]: {
|
|
...state[action.metadataField],
|
|
categorySelected: false,
|
|
categoryValueSelected: Array.from(
|
|
state[action.metadataField].categoryValueSelected
|
|
).fill(false),
|
|
},
|
|
};
|
|
return newCategoricalSelection;
|
|
}
|
|
|
|
case "categorical metadata filter all of these": {
|
|
/*
|
|
set all categories in this field to true.
|
|
*/
|
|
const newCategoricalSelection = {
|
|
...state,
|
|
[action.metadataField]: {
|
|
...state[action.metadataField],
|
|
categorySelected: true,
|
|
categoryValueSelected: Array.from(
|
|
state[action.metadataField].categoryValueSelected
|
|
).fill(true),
|
|
},
|
|
};
|
|
return newCategoricalSelection;
|
|
}
|
|
|
|
case "annotation: create category": {
|
|
const { world } = nextSharedState;
|
|
const name = action.data;
|
|
return {
|
|
...state,
|
|
...CH.createCategoricalSelection(world, [name]),
|
|
};
|
|
}
|
|
|
|
case "annotation: category edited": {
|
|
const name = action.metadataField;
|
|
const newName = action.newCategoryText;
|
|
const { [name]: catSeln, ...newState } = state;
|
|
newState[newName] = catSeln;
|
|
return newState;
|
|
}
|
|
|
|
case "annotation: delete category": {
|
|
const name = action.metadataField;
|
|
const { [name]: _, ...newState } = state;
|
|
return newState;
|
|
}
|
|
|
|
case "annotation: label current cell selection":
|
|
case "annotation: add new label to category":
|
|
case "annotation: label edited":
|
|
case "annotation: delete label": {
|
|
/* need to rebuild the state for this annotation */
|
|
const { world } = nextSharedState;
|
|
const name = action.metadataField;
|
|
const { [name]: _, ...partialState } = state;
|
|
return {
|
|
...partialState,
|
|
...CH.createCategoricalSelection(world, [name]),
|
|
};
|
|
}
|
|
|
|
default: {
|
|
return state;
|
|
}
|
|
}
|
|
};
|
|
|
|
export default CategoricalSelection;
|