diff --git a/client/src/actions/embedding.ts b/client/src/actions/embedding.ts index fa4835e6..aac2e311 100644 --- a/client/src/actions/embedding.ts +++ b/client/src/actions/embedding.ts @@ -2,7 +2,9 @@ action creators related to embeddings choice */ +import { Dispatch } from "redux"; import { AnnoMatrixObsCrossfilter } from "../annoMatrix"; +import type { RootState } from "../reducers"; import { _setEmbeddingSubset } from "../util/stateManager/viewStackHelpers"; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types --- FIXME: disabled temporarily on migrate to TS. @@ -29,30 +31,24 @@ export async function _switchEmbedding( return [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 layoutChoiceAction = (newLayoutChoice: any) => async ( - // 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 -) => { - /* +export const layoutChoiceAction = + (newLayoutChoice: string) => + async (dispatch: Dispatch, getState: () => RootState): Promise => { + /* On layout choice, make sure we have selected all on the previous layout, AND the new layout. */ - const { - annoMatrix: prevAnnoMatrix, - obsCrossfilter: prevCrossfilter, - } = getState(); - const [annoMatrix, obsCrossfilter] = await _switchEmbedding( - prevAnnoMatrix, - prevCrossfilter, - newLayoutChoice - ); - dispatch({ - type: "set layout choice", - layoutChoice: newLayoutChoice, - obsCrossfilter, - annoMatrix, - }); -}; + const { annoMatrix: prevAnnoMatrix, obsCrossfilter: prevCrossfilter } = + getState(); + const [annoMatrix, obsCrossfilter] = await _switchEmbedding( + prevAnnoMatrix, + prevCrossfilter, + newLayoutChoice + ); + dispatch({ + type: "set layout choice", + layoutChoice: newLayoutChoice, + obsCrossfilter, + annoMatrix, + }); + }; diff --git a/client/src/actions/index.ts b/client/src/actions/index.ts index 5f68f0d3..f4f29ce6 100644 --- a/client/src/actions/index.ts +++ b/client/src/actions/index.ts @@ -1,3 +1,5 @@ +import { Dispatch } from "redux"; + import * as globals from "../globals"; import { AnnoMatrixLoader, AnnoMatrixObsCrossfilter } from "../annoMatrix"; import { @@ -11,6 +13,8 @@ import * as annoActions from "./annotation"; import * as viewActions from "./viewStack"; import * as embActions from "./embedding"; import * as genesetActions from "./geneset"; +import { LayoutColumn, Schema } from "../common/types/entities"; +import { RootState } from "../reducers"; // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. function setGlobalConfig(config: any) { @@ -36,8 +40,8 @@ async function userColorsFetchAndLoad(dispatch: any) { ); } -async function schemaFetch() { - return fetchJson("schema"); +async function schemaFetch(): Promise<{ schema: Schema }> { + return (await fetchJson("schema")) as { schema: Schema }; } // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. @@ -104,17 +108,17 @@ function prefetchEmbeddings(annoMatrix: any) { /* Application bootstrap */ -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types --- FIXME: disabled temporarily on migrate to TS. -const doInitialDataLoad = () => - // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. - catchErrorsWrap(async (dispatch: any) => { +const doInitialDataLoad = (): (( + dispatch: Dispatch, + getState: () => RootState +) => void) => + catchErrorsWrap(async (dispatch: Dispatch) => { dispatch({ type: "initial data load start" }); try { const [config, schema] = await Promise.all([ configFetch(dispatch), - // @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1. - schemaFetch(dispatch), + schemaFetch(), userColorsFetchAndLoad(dispatch), userInfoFetch(dispatch), ]); @@ -137,10 +141,9 @@ const doInitialDataLoad = () => const layoutSchema = schema?.schema?.layout?.obs ?? []; if ( defaultEmbedding && - // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. - layoutSchema.some((s: any) => s.name === defaultEmbedding) + layoutSchema.some((s: LayoutColumn) => s.name === defaultEmbedding) ) { - dispatch(embActions.layoutChoiceAction(defaultEmbedding)); + embActions.layoutChoiceAction(defaultEmbedding); } } catch (error) { dispatch({ type: "initial data load error", error }); @@ -188,84 +191,85 @@ const dispatchDiffExpErrors = (dispatch: any, response: any) => { } }; -const requestDifferentialExpression = ( - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. - set1: any, - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. - set2: any, - num_genes = 50 - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. -) => async (dispatch: any, getState: any) => { - dispatch({ type: "request differential expression started" }); - try { - /* +const requestDifferentialExpression = + ( + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. + set1: any, + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. + set2: any, + num_genes = 50 + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. + ) => + async (dispatch: any, getState: any) => { + dispatch({ type: "request differential expression started" }); + try { + /* Steps: 1. get the most differentially expressed genes 2. get expression data for each */ - const { annoMatrix } = getState(); - const varIndexName = annoMatrix.schema.annotations.var.index; + const { annoMatrix } = getState(); + const varIndexName = annoMatrix.schema.annotations.var.index; - // Legal values are null, Array or TypedArray. Null is initial state. - if (!set1) set1 = []; - if (!set2) set2 = []; + // Legal values are null, Array or TypedArray. Null is initial state. + if (!set1) set1 = []; + if (!set2) set2 = []; - // These lines ensure that we convert any TypedArray to an Array. - // This is necessary because JSON.stringify() does some very strange - // things with TypedArrays (they are marshalled to JSON objects, rather - // than being marshalled as a JSON array). - set1 = Array.isArray(set1) ? set1 : Array.from(set1); - set2 = Array.isArray(set2) ? set2 : Array.from(set2); + // These lines ensure that we convert any TypedArray to an Array. + // This is necessary because JSON.stringify() does some very strange + // things with TypedArrays (they are marshalled to JSON objects, rather + // than being marshalled as a JSON array). + set1 = Array.isArray(set1) ? set1 : Array.from(set1); + set2 = Array.isArray(set2) ? set2 : Array.from(set2); - const res = await fetch( - `${globals.API.prefix}${globals.API.version}diffexp/obs`, - { - method: "POST", - headers: new Headers({ - Accept: "application/json", - "Content-Type": "application/json", - }), - body: JSON.stringify({ - mode: "topN", - count: num_genes, - set1: { filter: { obs: { index: set1 } } }, - set2: { filter: { obs: { index: set2 } } }, - }), - credentials: "include", + const res = await fetch( + `${globals.API.prefix}${globals.API.version}diffexp/obs`, + { + method: "POST", + headers: new Headers({ + Accept: "application/json", + "Content-Type": "application/json", + }), + body: JSON.stringify({ + mode: "topN", + count: num_genes, + set1: { filter: { obs: { index: set1 } } }, + set2: { filter: { obs: { index: set2 } } }, + }), + credentials: "include", + } + ); + + if (!res.ok || res.headers.get("Content-Type") !== "application/json") { + return dispatchDiffExpErrors(dispatch, res); } - ); - if (!res.ok || res.headers.get("Content-Type") !== "application/json") { - return dispatchDiffExpErrors(dispatch, res); + const response = await res.json(); + const varIndex = await annoMatrix.fetch("var", varIndexName); + const diffexpLists = { negative: [], positive: [] }; + for (const polarity of Object.keys(diffexpLists)) { + // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message + // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. + diffexpLists[polarity] = response[polarity].map((v: any) => [ + varIndex.at(v[0], varIndexName), + ...v.slice(1), + ]); + } + + /* then send the success case action through */ + return dispatch({ + type: "request differential expression success", + data: diffexpLists, + }); + } catch (error) { + return dispatch({ + type: "request differential expression error", + error, + }); } + }; - const response = await res.json(); - const varIndex = await annoMatrix.fetch("var", varIndexName); - const diffexpLists = { negative: [], positive: [] }; - for (const polarity of Object.keys(diffexpLists)) { - // @ts-expect-error ts-migrate(7053) FIXME: Element implicitly has an 'any' type because expre... Remove this comment to see the full error message - // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. - diffexpLists[polarity] = response[polarity].map((v: any) => [ - varIndex.at(v[0], varIndexName), - ...v.slice(1), - ]); - } - - /* then send the success case action through */ - return dispatch({ - type: "request differential expression success", - data: diffexpLists, - }); - } catch (error) { - return dispatch({ - type: "request differential expression error", - error, - }); - } -}; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. -function fetchJson(pathAndQuery: any) { +function fetchJson(pathAndQuery: string) { return doJsonRequest( `${globals.API.prefix}${globals.API.version}${pathAndQuery}` ); diff --git a/client/src/components/framework/toasters.ts b/client/src/components/framework/toasters.ts index bffbd885..ce41956e 100644 --- a/client/src/components/framework/toasters.ts +++ b/client/src/components/framework/toasters.ts @@ -26,8 +26,10 @@ export const keepAroundErrorToast = (message: any) => /* a hard network error */ -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any -- - FIXME: disabled temporarily on migrate to TS. -export const postNetworkErrorToast = (message: any, key = undefined) => +export const postNetworkErrorToast = ( + message: string, + key: string | undefined = undefined +): string => ToastTopCenter.show( { message,