mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-24 08:28:11 +08:00
* Disabled @blueprintjs/classes-constants. #2288. * thuang-eslint-bp-off (#2344) * Disabled @blueprintjs/classes-constants on webpack dev and shared. #2288. * Added TS recommended, suppress lint errors codemod. * Added per-error/warning ignore for tests. * Added per-error/warning ignore for configuration. * Added per-error/warning ignore for src. Removed suppress package. * Minor linting. Co-authored-by: Timmy Huang <tihuan@users.noreply.github.com>
85 lines
3.1 KiB
TypeScript
85 lines
3.1 KiB
TypeScript
/*
|
|
The following actions manage the view stack for annoMatrix.
|
|
|
|
Conventions used and assumed elsewhere in the code base:
|
|
* there will be zero or one clip view, and it will be the TOP view always.
|
|
* there will be zero or more subset views
|
|
|
|
In other words, in our current use, we do not stack multiple clip views but we do
|
|
stack multiple subsets.
|
|
|
|
If these conventions change, code elsewhere (eg. menubar/clip.js) will need to
|
|
change as well.
|
|
*/
|
|
import { AnnoMatrixObsCrossfilter } from "../annoMatrix";
|
|
import {
|
|
_clipAnnoMatrix,
|
|
_userSubsetAnnoMatrix,
|
|
_userResetSubsetAnnoMatrix,
|
|
} from "../util/stateManager/viewStackHelpers";
|
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS.
|
|
export const clipAction = (min: any, max: any) => (
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS.
|
|
dispatch: any,
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS.
|
|
getState: any
|
|
) => {
|
|
/*
|
|
apply a clip to the current annoMatrix. By convention, the clip
|
|
view is ALWAYS the top view.
|
|
*/
|
|
const { annoMatrix: prevAnnoMatrix } = getState();
|
|
const annoMatrix = _clipAnnoMatrix(prevAnnoMatrix, min, max);
|
|
const obsCrossfilter = new AnnoMatrixObsCrossfilter(annoMatrix);
|
|
dispatch({
|
|
type: "set clip quantiles",
|
|
clipQuantiles: { min, max },
|
|
annoMatrix,
|
|
obsCrossfilter,
|
|
});
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS.
|
|
export const subsetAction = () => (dispatch: any, getState: any) => {
|
|
/*
|
|
Subset the annoMatrix to the current crossfilter selection by pushing a
|
|
subset view.
|
|
|
|
By convention, a clip view is ALWAYS the top view, so if present, pop
|
|
off and re-apply
|
|
*/
|
|
const {
|
|
annoMatrix: prevAnnoMatrix,
|
|
obsCrossfilter: prevObsCrossfilter,
|
|
} = getState();
|
|
const annoMatrix = _userSubsetAnnoMatrix(
|
|
prevAnnoMatrix,
|
|
prevObsCrossfilter.allSelectedMask()
|
|
);
|
|
const obsCrossfilter = new AnnoMatrixObsCrossfilter(annoMatrix);
|
|
dispatch({
|
|
type: "subset to selection",
|
|
annoMatrix,
|
|
obsCrossfilter,
|
|
});
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS.
|
|
export const resetSubsetAction = () => (dispatch: any, getState: any) => {
|
|
/*
|
|
Reset the annoMatrix to all data. Because we may have multiple views
|
|
stacked, we pop them all. By convention, any clip transformation will
|
|
be the top of the stack, and must be preserved.
|
|
*/
|
|
|
|
const { annoMatrix: prevAnnoMatrix } = getState();
|
|
const annoMatrix = _userResetSubsetAnnoMatrix(prevAnnoMatrix);
|
|
const obsCrossfilter = new AnnoMatrixObsCrossfilter(annoMatrix);
|
|
dispatch({
|
|
type: "reset subset",
|
|
annoMatrix,
|
|
obsCrossfilter,
|
|
});
|
|
};
|