@milaboratories/miplots4 1.0.154 → 1.0.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/getClusters-BScJvejf.js.map +1 -0
- package/dist/heatmap/ChartRenderer.d.ts.map +1 -1
- package/dist/heatmap/ChartRenderer.js +178 -178
- package/dist/heatmap/ChartRenderer.js.map +1 -1
- package/dist/heatmap/getClusters.d.ts.map +1 -1
- package/dist/heatmap/getClusters.js +20 -163
- package/dist/heatmap/getClusters.js.map +1 -1
- package/dist/heatmap/getDendrograms.d.ts +1 -1
- package/dist/heatmap/getDendrograms.d.ts.map +1 -1
- package/dist/heatmap/getDendrograms.js +47 -35
- package/dist/heatmap/getDendrograms.js.map +1 -1
- package/dist/heatmap/index.d.ts +3 -1
- package/dist/heatmap/index.d.ts.map +1 -1
- package/dist/heatmap/index.js +69 -64
- package/dist/heatmap/index.js.map +1 -1
- package/dist/node_modules/comlink/dist/esm/comlink.js +259 -0
- package/dist/node_modules/comlink/dist/esm/comlink.js.map +1 -0
- package/dist/scatterplot-umap/ChartRenderer.d.ts.map +1 -1
- package/dist/scatterplot-umap/ChartRenderer.js +39 -37
- package/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/types/common.d.ts +4 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js.map +1 -1
- package/dist/utils/WorkerFactory.d.ts +9 -0
- package/dist/utils/WorkerFactory.d.ts.map +1 -0
- package/dist/utils/WorkerFactory.js +19 -0
- package/dist/utils/WorkerFactory.js.map +1 -0
- package/dist/utils/getPointShape.d.ts.map +1 -1
- package/dist/utils/getPointShape.js +55 -46
- package/dist/utils/getPointShape.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,46 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { WorkerFactory as k } from "../utils/WorkerFactory.js";
|
|
2
|
+
import b from "./getClusters.js";
|
|
3
|
+
import B from "../node_modules/d3-hierarchy/src/hierarchy/index.js";
|
|
4
|
+
const m = new k(() => new b());
|
|
5
|
+
async function P(i, c, y, x) {
|
|
6
|
+
const { facetKeys: G, xGroupKeys: w, yGroupKeys: K } = i.meta, l = {};
|
|
7
|
+
if (!c && !y)
|
|
8
|
+
return l;
|
|
9
|
+
if (c && x.sharedX)
|
|
6
10
|
throw Error("Dendrogram on X axis is not available with shared by facets X axis");
|
|
7
|
-
|
|
8
|
-
|
|
11
|
+
if (y && x.sharedY)
|
|
12
|
+
throw Error("Dendrogram on Y axis is not available with shared by facets Y axis");
|
|
13
|
+
return m.reset(), await Promise.all(G.map(async (n) => {
|
|
14
|
+
const h = {
|
|
9
15
|
hierarchyByGroupX: {},
|
|
10
16
|
hierarchyByGroupY: {}
|
|
11
|
-
},
|
|
12
|
-
if (
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
return ((
|
|
17
|
+
}, t = i.facets[n];
|
|
18
|
+
if (c) {
|
|
19
|
+
const p = [], f = await Promise.all(w.map(async (s) => {
|
|
20
|
+
const o = t.xKeysByGroups[s], r = t.yKeys;
|
|
21
|
+
return m.wrapper.getClustersApproximate(
|
|
22
|
+
o.map((e) => r.map((a) => {
|
|
23
|
+
var u;
|
|
24
|
+
return ((u = t.cells[e][a]) == null ? void 0 : u.normalizedValue.dataSource) ?? c.fillNA;
|
|
19
25
|
})),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
c.distance,
|
|
27
|
+
c.linkage
|
|
28
|
+
);
|
|
29
|
+
}));
|
|
30
|
+
w.forEach((s, o) => {
|
|
31
|
+
const r = f[o], e = r.indexes.map((a) => t.xKeysByGroups[s][a]);
|
|
32
|
+
i.facets[n].xKeysByGroups[s] = e, p.push(...e), h.hierarchyByGroupX[s] = B(r);
|
|
33
|
+
}), i.facets[n].xKeys = p;
|
|
25
34
|
}
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var
|
|
32
|
-
return ((
|
|
35
|
+
if (y) {
|
|
36
|
+
const p = [], f = await Promise.all(K.map(async (s) => {
|
|
37
|
+
const o = t.yKeysByGroups[s], r = t.xKeys;
|
|
38
|
+
return m.wrapper.getClustersApproximate(
|
|
39
|
+
o.map((e) => r.map((a) => {
|
|
40
|
+
var u;
|
|
41
|
+
return ((u = t.cells[a][e]) == null ? void 0 : u.normalizedValue.dataSource) ?? y.fillNA;
|
|
33
42
|
})),
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
y.distance,
|
|
44
|
+
y.linkage
|
|
45
|
+
);
|
|
46
|
+
}));
|
|
47
|
+
K.forEach((s, o) => {
|
|
48
|
+
const r = f[o], e = r.indexes.map((a) => t.yKeysByGroups[s][a]);
|
|
49
|
+
i.facets[n].yKeysByGroups[s] = e, p.push(...e), h.hierarchyByGroupY[s] = B(r);
|
|
50
|
+
}), i.facets[n].yKeys = p;
|
|
39
51
|
}
|
|
40
|
-
|
|
41
|
-
}),
|
|
52
|
+
l[n] = h;
|
|
53
|
+
})), l;
|
|
42
54
|
}
|
|
43
55
|
export {
|
|
44
|
-
|
|
56
|
+
P as getDendrograms
|
|
45
57
|
};
|
|
46
58
|
//# sourceMappingURL=getDendrograms.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDendrograms.js","sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport {
|
|
1
|
+
{"version":3,"file":"getDendrograms.js","sources":["../../src/heatmap/getDendrograms.ts"],"sourcesContent":["import type { Cluster } from './components/types';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport type { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport type { HierarchyNode } from 'd3-hierarchy';\nimport { hierarchy } from 'd3-hierarchy';\nimport type { getClustersApproximate } from './getClusters';\nimport { WorkerFactory } from '../utils/WorkerFactory';\nimport GetClustersWorker from './getClusters?worker&inline';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nconst workerWrapper = new WorkerFactory<{ getClustersApproximate: typeof getClustersApproximate }>(() => new GetClustersWorker());\n\nexport async function getDendrograms(\n groupedCellsData: GroupedCellsHeatmap,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n): Promise<DendrogramsData> {\n const { facetKeys, xGroupKeys, yGroupKeys } = groupedCellsData.meta;\n const result: DendrogramsData = {};\n\n if (!dendrogramX && !dendrogramY) {\n return result;\n }\n if (dendrogramX && facetSettings.sharedX) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n if (dendrogramY && facetSettings.sharedY) {\n throw Error('Dendrogram on Y axis is not available with shared by facets Y axis');\n }\n workerWrapper.reset();\n await Promise.all(facetKeys.map(async facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyByGroupX: {},\n hierarchyByGroupY: {},\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (dendrogramX) {\n const updatedXKeys: string[] = [];\n const rootClusters = await Promise.all(xGroupKeys.map(async xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n xKeys.map(x => yKeys.map(y => (cellsGroup.cells[x][y]?.normalizedValue.dataSource ?? dendrogramX.fillNA) as number)),\n dendrogramX.distance,\n dendrogramX.linkage\n ); \n }));\n xGroupKeys.forEach((xGroupKey, idx) => {\n //set sorted group keys\n const rootCluster = rootClusters[idx];\n const newXKeys = rootCluster.indexes.map(i => cellsGroup.xKeysByGroups[xGroupKey][i]);\n groupedCellsData.facets[facetKey].xKeysByGroups[xGroupKey] = newXKeys;\n updatedXKeys.push(...newXKeys);\n facetResult.hierarchyByGroupX[xGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].xKeys = updatedXKeys;\n }\n if (dendrogramY) {\n const updatedYKeys: string[] = [];\n const rootClusters = await Promise.all(yGroupKeys.map(async yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n return workerWrapper.wrapper.getClustersApproximate(\n yKeys.map(y => xKeys.map(x => (cellsGroup.cells[x][y]?.normalizedValue.dataSource ?? dendrogramY.fillNA) as number)),\n dendrogramY.distance,\n dendrogramY.linkage\n );\n }));\n yGroupKeys.forEach((yGroupKey, idx) => {\n const rootCluster = rootClusters[idx];\n const newYKeys = rootCluster.indexes.map(i => cellsGroup.yKeysByGroups[yGroupKey][i]);\n groupedCellsData.facets[facetKey].yKeysByGroups[yGroupKey] = newYKeys;\n updatedYKeys.push(...newYKeys);\n facetResult.hierarchyByGroupY[yGroupKey] = hierarchy(rootCluster);\n });\n // set sorted group keys of all groups\n groupedCellsData.facets[facetKey].yKeys = updatedYKeys;\n }\n result[facetKey] = facetResult;\n }));\n\n return result;\n}\n"],"names":["workerWrapper","WorkerFactory","GetClustersWorker","getDendrograms","groupedCellsData","dendrogramX","dendrogramY","facetSettings","facetKeys","xGroupKeys","yGroupKeys","result","facetKey","facetResult","cellsGroup","updatedXKeys","rootClusters","xGroupKey","xKeys","yKeys","x","_a","y","idx","rootCluster","newXKeys","i","hierarchy","updatedYKeys","yGroupKey","newYKeys"],"mappings":";;;AAcA,MAAMA,IAAgB,IAAIC,EAAyE,MAAM,IAAIC,GAAmB;AAEhI,eAAsBC,EAClBC,GACAC,GACAC,GACAC,GACwB;AACxB,QAAM,EAAE,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAeN,EAAiB,MACzDO,IAA0B,CAAA;AAEhC,MAAI,CAACN,KAAe,CAACC;AACjB,WAAOK;AAEX,MAAIN,KAAeE,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAEpF,MAAID,KAAeC,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAEpF,SAAAP,EAAc,MAAA,GACd,MAAM,QAAQ,IAAIQ,EAAU,IAAI,OAAMI,MAAY;AAC9C,UAAMC,IAAuC;AAAA,MACzC,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,IAAC,GAElBC,IAAaV,EAAiB,OAAOQ,CAAQ;AACnD,QAAIP,GAAa;AACb,YAAMU,IAAyB,CAAA,GACzBC,IAAe,MAAM,QAAQ,IAAIP,EAAW,IAAI,OAAMQ,MAAa;AACrE,cAAMC,IAAQJ,EAAW,cAAcG,CAAS,GAC1CE,IAAQL,EAAW;AACzB,eAAOd,EAAc,QAAQ;AAAA,UACzBkB,EAAM,IAAI,CAAAE,MAAKD,EAAM,IAAI;;AAAM,qBAAAE,IAAAP,EAAW,MAAMM,CAAC,EAAEE,CAAC,MAArB,gBAAAD,EAAwB,gBAAgB,eAAchB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAAA,MAEpB,CAAC,CAAC;AACF,MAAAI,EAAW,QAAQ,CAACQ,GAAWM,MAAQ;AAEnC,cAAMC,IAAcR,EAAaO,CAAG,GAC9BE,IAAWD,EAAY,QAAQ,IAAI,CAAAE,MAAKZ,EAAW,cAAcG,CAAS,EAAES,CAAC,CAAC;AACpF,QAAAtB,EAAiB,OAAOQ,CAAQ,EAAE,cAAcK,CAAS,IAAIQ,GAC7DV,EAAa,KAAK,GAAGU,CAAQ,GAC7BZ,EAAY,kBAAkBI,CAAS,IAAIU,EAAUH,CAAW;AAAA,MACpE,CAAC,GAEDpB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQG;AAAA,IAC9C;AACA,QAAIT,GAAa;AACb,YAAMsB,IAAyB,CAAA,GACzBZ,IAAe,MAAM,QAAQ,IAAIN,EAAW,IAAI,OAAMmB,MAAa;AACrE,cAAMV,IAAQL,EAAW,cAAce,CAAS,GAC1CX,IAAQJ,EAAW;AACzB,eAAOd,EAAc,QAAQ;AAAA,UACzBmB,EAAM,IAAI,CAAAG,MAAKJ,EAAM,IAAI;;AAAM,qBAAAG,IAAAP,EAAW,MAAMM,CAAC,EAAEE,CAAC,MAArB,gBAAAD,EAAwB,gBAAgB,eAAcf,EAAY;AAAA,WAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA;AAAA,MAEpB,CAAC,CAAC;AACF,MAAAI,EAAW,QAAQ,CAACmB,GAAWN,MAAQ;AACnC,cAAMC,IAAcR,EAAaO,CAAG,GAC9BO,IAAWN,EAAY,QAAQ,IAAI,CAAAE,MAAKZ,EAAW,cAAce,CAAS,EAAEH,CAAC,CAAC;AACpF,QAAAtB,EAAiB,OAAOQ,CAAQ,EAAE,cAAciB,CAAS,IAAIC,GAC7DF,EAAa,KAAK,GAAGE,CAAQ,GAC7BjB,EAAY,kBAAkBgB,CAAS,IAAIF,EAAUH,CAAW;AAAA,MACpE,CAAC,GAEDpB,EAAiB,OAAOQ,CAAQ,EAAE,QAAQgB;AAAA,IAC9C;AACA,IAAAjB,EAAOC,CAAQ,IAAIC;AAAA,EACvB,CAAC,CAAC,GAEKF;AACX;"}
|
package/dist/heatmap/index.d.ts
CHANGED
|
@@ -9,11 +9,13 @@ export declare class ChartHeatmap extends AbstractChart {
|
|
|
9
9
|
settings: HeatmapSettingsImpl;
|
|
10
10
|
chartRenderer: ChartRenderer;
|
|
11
11
|
onTooltipHintSwitch: (v: boolean) => void;
|
|
12
|
+
onLoadingChange: (v: boolean) => void;
|
|
12
13
|
calculatedData: {
|
|
13
14
|
groupedCellsData: GroupedCellsHeatmap;
|
|
14
15
|
dendrogramsData: DendrogramsData;
|
|
15
16
|
cellUniqValues: DataValue[];
|
|
16
17
|
} | null;
|
|
18
|
+
clusteringCalculationsInProgress: boolean;
|
|
17
19
|
constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?: HeatmapEventHandlers);
|
|
18
20
|
mount(node: HTMLElement): void;
|
|
19
21
|
unmount(): void;
|
|
@@ -22,7 +24,7 @@ export declare class ChartHeatmap extends AbstractChart {
|
|
|
22
24
|
export(): string;
|
|
23
25
|
_needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl): boolean;
|
|
24
26
|
_needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame): boolean;
|
|
25
|
-
_updateData(): void
|
|
27
|
+
_updateData(): Promise<void>;
|
|
26
28
|
_updateAesInData(): void;
|
|
27
29
|
_updateChart(): void;
|
|
28
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAc,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/heatmap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAc,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAChD,eAAe,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAQ;IAE5C,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;IAEhB,gCAAgC,UAAS;gBAE7B,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAU3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAcvB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IAsBhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAIhD,MAAM,IAAI,MAAM;IAKhB,mCAAmC,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,mBAAmB;IAiEpG,+BAA+B,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;IAU9D,WAAW;IAsDjB,gBAAgB;IAIhB,YAAY;CAkDf"}
|
package/dist/heatmap/index.js
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
var K = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { renderToString as
|
|
5
|
-
import { AbstractChart as
|
|
2
|
+
var S = (p, d, a) => d in p ? K(p, d, { enumerable: !0, configurable: !0, writable: !0, value: a }) : p[d] = a;
|
|
3
|
+
var C = (p, d, a) => S(p, typeof d != "symbol" ? d + "" : d, a);
|
|
4
|
+
import { renderToString as F } from "../node_modules/react-dom/server.browser.js";
|
|
5
|
+
import { AbstractChart as J } from "../AbstractChart.js";
|
|
6
6
|
import { isColumnName as R } from "../utils/index.js";
|
|
7
7
|
import Q from "./ChartRenderer.js";
|
|
8
|
-
import { getCells as
|
|
9
|
-
import { getDendrograms as
|
|
10
|
-
import { HeatmapSettingsImpl as
|
|
11
|
-
import { MAX_SVG_RENDERED_CELLS_COUNT as
|
|
12
|
-
|
|
8
|
+
import { getCells as W } from "./getCells.js";
|
|
9
|
+
import { getDendrograms as Z } from "./getDendrograms.js";
|
|
10
|
+
import { HeatmapSettingsImpl as M } from "./HeatmapSettingsImpl.js";
|
|
11
|
+
import { MAX_SVG_RENDERED_CELLS_COUNT as $ } from "./constants.js";
|
|
12
|
+
import { l as Y } from "../node_modules/lodash/lodash.js";
|
|
13
|
+
class ua extends J {
|
|
13
14
|
constructor(a, e, t) {
|
|
14
15
|
super(a, e);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this
|
|
16
|
+
C(this, "settings");
|
|
17
|
+
C(this, "chartRenderer", new Q());
|
|
18
|
+
C(this, "onTooltipHintSwitch", Y.noop);
|
|
19
|
+
C(this, "onLoadingChange", Y.noop);
|
|
20
|
+
C(this, "calculatedData", null);
|
|
21
|
+
C(this, "clusteringCalculationsInProgress", !1);
|
|
22
|
+
this.settings = new M(e), t && (this.onTooltipHintSwitch = t.onTooltipHintSwitch ?? Y.noop, this.onLoadingChange = t.onLoadingChange ?? Y.noop);
|
|
21
23
|
}
|
|
22
24
|
mount(a) {
|
|
23
25
|
try {
|
|
24
|
-
this.chartRenderer.init(a), this._updateData(), this.
|
|
26
|
+
this.chartRenderer.init(a), this._updateData(), this.hasError = !1;
|
|
25
27
|
} catch (e) {
|
|
26
28
|
this.hasError = !0, e instanceof Error && (this.chartRenderer.renderError(e.message), console.error(e));
|
|
27
29
|
}
|
|
@@ -31,8 +33,8 @@ class la extends P {
|
|
|
31
33
|
}
|
|
32
34
|
updateSettingsAndData(a, e) {
|
|
33
35
|
try {
|
|
34
|
-
const t = this.settings,
|
|
35
|
-
this.settings = new
|
|
36
|
+
const t = this.settings, l = this.data;
|
|
37
|
+
this.settings = new M(e), this.data = a, this._needUpdateCalculatedDataBySettings(t, this.settings) || this._needUpdateCalculatedDataByData(l, this.data) ? this._updateData() : this._updateAesInData();
|
|
36
38
|
} catch (t) {
|
|
37
39
|
t instanceof Error && (this.chartRenderer.renderError(t.message), console.error(t));
|
|
38
40
|
}
|
|
@@ -41,17 +43,17 @@ class la extends P {
|
|
|
41
43
|
console.warn("no chart state for heatmap");
|
|
42
44
|
}
|
|
43
45
|
export() {
|
|
44
|
-
return this._updateChart(),
|
|
46
|
+
return this._updateChart(), F(this.chartRenderer.component);
|
|
45
47
|
}
|
|
46
48
|
_needUpdateCalculatedDataBySettings(a, e) {
|
|
47
|
-
var c,
|
|
49
|
+
var c, E, O, w, T, k, N, b, v, I, L, U, j, V, H;
|
|
48
50
|
const {
|
|
49
51
|
xColumn: t,
|
|
50
|
-
yColumn:
|
|
51
|
-
valueColumn:
|
|
52
|
-
xGroupBy:
|
|
52
|
+
yColumn: l,
|
|
53
|
+
valueColumn: i,
|
|
54
|
+
xGroupBy: u,
|
|
53
55
|
yGroupBy: h,
|
|
54
|
-
facetBy:
|
|
56
|
+
facetBy: x,
|
|
55
57
|
annotations: _,
|
|
56
58
|
chartSettings: y,
|
|
57
59
|
facetSettings: o,
|
|
@@ -59,37 +61,37 @@ class la extends P {
|
|
|
59
61
|
dendrogramY: g,
|
|
60
62
|
normalization: n,
|
|
61
63
|
aggregation: r,
|
|
62
|
-
NAValueAs:
|
|
63
|
-
} = e,
|
|
64
|
+
NAValueAs: f
|
|
65
|
+
} = e, B = Object.values(((c = a.dendrogramX) == null ? void 0 : c.aes) || {}).filter(
|
|
64
66
|
R
|
|
65
|
-
),
|
|
67
|
+
), A = Object.values((m == null ? void 0 : m.aes) || {}).filter(R), X = Object.values(((E = a.dendrogramY) == null ? void 0 : E.aes) || {}).filter(
|
|
66
68
|
R
|
|
67
69
|
), G = Object.values((g == null ? void 0 : g.aes) || {}).filter(R);
|
|
68
|
-
function s(
|
|
69
|
-
return
|
|
70
|
+
function s(D, P) {
|
|
71
|
+
return D.length !== P.length || D.some((q, z) => q.value !== P[z].value);
|
|
70
72
|
}
|
|
71
|
-
return a.xColumn.value !== t.value || a.yColumn.value !==
|
|
72
|
-
a.annotations.map((
|
|
73
|
-
_.map((
|
|
74
|
-
) || s(
|
|
73
|
+
return a.xColumn.value !== t.value || a.yColumn.value !== l.value || a.valueColumn.value !== i.value || s(a.xGroupBy, u) || s(a.yGroupBy, h) || s(a.facetBy, x) || s(
|
|
74
|
+
a.annotations.map((D) => D.valueColumn),
|
|
75
|
+
_.map((D) => D.valueColumn)
|
|
76
|
+
) || s(B, A) || s(X, G) || (e.dendrogramX || a.dendrogramX) && (((O = a.dendrogramX) == null ? void 0 : O.distance) !== ((w = e.dendrogramX) == null ? void 0 : w.distance) || ((T = a.dendrogramX) == null ? void 0 : T.linkage) !== ((k = e.dendrogramX) == null ? void 0 : k.linkage)) || (e.dendrogramY || a.dendrogramY) && (((N = a.dendrogramY) == null ? void 0 : N.distance) !== ((b = e.dendrogramY) == null ? void 0 : b.distance) || ((v = a.dendrogramY) == null ? void 0 : v.linkage) !== ((I = e.dendrogramY) == null ? void 0 : I.linkage)) || a.chartSettings.valueType !== y.valueType || a.facetSettings.sharedX !== o.sharedX || a.facetSettings.sharedY !== o.sharedY || ((L = a.normalization) == null ? void 0 : L.method) !== (n == null ? void 0 : n.method) || ((U = a.normalization) == null ? void 0 : U.direction) !== (n == null ? void 0 : n.direction) || a.NAValueAs !== f || ((j = a.aggregation) == null ? void 0 : j.method) !== (r == null ? void 0 : r.method) || ((V = a.aggregation) == null ? void 0 : V.x) !== (r == null ? void 0 : r.x) || ((H = a.aggregation) == null ? void 0 : H.y) !== (r == null ? void 0 : r.y);
|
|
75
77
|
}
|
|
76
78
|
_needUpdateCalculatedDataByData(a, e) {
|
|
77
|
-
const t = Object.keys(a.data),
|
|
78
|
-
return a.id !== e.id || t.length !==
|
|
79
|
-
var
|
|
80
|
-
return a.data[
|
|
79
|
+
const t = Object.keys(a.data), l = Object.keys(e.data);
|
|
80
|
+
return a.id !== e.id || t.length !== l.length || t.some((i) => {
|
|
81
|
+
var u;
|
|
82
|
+
return a.data[i].length !== ((u = e.data[i]) == null ? void 0 : u.length);
|
|
81
83
|
});
|
|
82
84
|
}
|
|
83
|
-
_updateData() {
|
|
85
|
+
async _updateData() {
|
|
84
86
|
const {
|
|
85
87
|
xColumn: a,
|
|
86
88
|
yColumn: e,
|
|
87
89
|
valueColumn: t,
|
|
88
|
-
xGroupBy:
|
|
89
|
-
yGroupBy:
|
|
90
|
-
facetBy:
|
|
90
|
+
xGroupBy: l,
|
|
91
|
+
yGroupBy: i,
|
|
92
|
+
facetBy: u,
|
|
91
93
|
chartSettings: h,
|
|
92
|
-
facetSettings:
|
|
94
|
+
facetSettings: x,
|
|
93
95
|
annotations: _,
|
|
94
96
|
dendrogramX: y,
|
|
95
97
|
dendrogramY: o,
|
|
@@ -97,14 +99,14 @@ class la extends P {
|
|
|
97
99
|
NAValueAs: g,
|
|
98
100
|
keysOrder: n,
|
|
99
101
|
aggregation: r
|
|
100
|
-
} = this.settings,
|
|
102
|
+
} = this.settings, f = W(
|
|
101
103
|
this.data,
|
|
102
104
|
a,
|
|
103
105
|
e,
|
|
104
106
|
{ dataSource: t },
|
|
105
|
-
i,
|
|
106
|
-
d,
|
|
107
107
|
u,
|
|
108
|
+
l,
|
|
109
|
+
i,
|
|
108
110
|
_,
|
|
109
111
|
y,
|
|
110
112
|
o,
|
|
@@ -114,28 +116,31 @@ class la extends P {
|
|
|
114
116
|
h.xAxis,
|
|
115
117
|
h.yAxis,
|
|
116
118
|
r
|
|
117
|
-
),
|
|
118
|
-
this.
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
), B = h.valueType === "discrete" ? this.data.getColumnCategories(t.value) : [];
|
|
120
|
+
this.clusteringCalculationsInProgress = !0, this.onLoadingChange(!0);
|
|
121
|
+
const A = await Z(f, y, o, x);
|
|
122
|
+
this.clusteringCalculationsInProgress = !1, this.onLoadingChange(!1), this.calculatedData = {
|
|
123
|
+
groupedCellsData: f,
|
|
124
|
+
dendrogramsData: A,
|
|
121
125
|
cellUniqValues: B
|
|
122
|
-
};
|
|
126
|
+
}, this._updateChart();
|
|
123
127
|
}
|
|
124
128
|
_updateAesInData() {
|
|
129
|
+
this._updateChart();
|
|
125
130
|
}
|
|
126
131
|
_updateChart() {
|
|
127
132
|
var X, G;
|
|
128
|
-
if (!this.calculatedData)
|
|
133
|
+
if (!this.calculatedData || this.clusteringCalculationsInProgress)
|
|
129
134
|
return;
|
|
130
135
|
const {
|
|
131
136
|
id: a,
|
|
132
137
|
valueColumn: e,
|
|
133
138
|
chartSettings: t,
|
|
134
|
-
facetSettings:
|
|
135
|
-
aes:
|
|
136
|
-
annotations:
|
|
139
|
+
facetSettings: l,
|
|
140
|
+
aes: i,
|
|
141
|
+
annotations: u,
|
|
137
142
|
dendrogramX: h,
|
|
138
|
-
dendrogramY:
|
|
143
|
+
dendrogramY: x,
|
|
139
144
|
inheritedDendrogramAes: _,
|
|
140
145
|
normalization: y,
|
|
141
146
|
keysOrder: o,
|
|
@@ -143,7 +148,7 @@ class la extends P {
|
|
|
143
148
|
yColumn: g,
|
|
144
149
|
xGroupBy: n,
|
|
145
150
|
yGroupBy: r
|
|
146
|
-
} = this.settings,
|
|
151
|
+
} = this.settings, f = {
|
|
147
152
|
x: ((X = o[m.value]) == null ? void 0 : X.length) > 0,
|
|
148
153
|
y: ((G = o[g.value]) == null ? void 0 : G.length) > 0,
|
|
149
154
|
xGroup: n.some((s) => {
|
|
@@ -154,29 +159,29 @@ class la extends P {
|
|
|
154
159
|
var c;
|
|
155
160
|
return ((c = o[s.value]) == null ? void 0 : c.length) > 0;
|
|
156
161
|
})
|
|
157
|
-
},
|
|
162
|
+
}, B = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0, A = this.settings.cellsRenderingMode ?? (B > $ ? "canvas" : "svg");
|
|
158
163
|
this.chartRenderer.render(
|
|
159
164
|
this.data,
|
|
160
165
|
a,
|
|
161
166
|
t,
|
|
162
|
-
|
|
163
|
-
u,
|
|
164
|
-
this.calculatedData.groupedCellsData,
|
|
167
|
+
l,
|
|
165
168
|
i,
|
|
169
|
+
this.calculatedData.groupedCellsData,
|
|
170
|
+
u,
|
|
166
171
|
e,
|
|
167
172
|
h,
|
|
168
|
-
|
|
173
|
+
x,
|
|
169
174
|
this.calculatedData.dendrogramsData,
|
|
170
175
|
_,
|
|
171
176
|
this.calculatedData.cellUniqValues,
|
|
172
177
|
y,
|
|
173
178
|
this.onTooltipHintSwitch,
|
|
174
|
-
|
|
175
|
-
|
|
179
|
+
f,
|
|
180
|
+
A
|
|
176
181
|
);
|
|
177
182
|
}
|
|
178
183
|
}
|
|
179
184
|
export {
|
|
180
|
-
|
|
185
|
+
ua as ChartHeatmap
|
|
181
186
|
};
|
|
182
187
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers[0];\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this._updateChart();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n this._updateChart();\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation\n } = this.settings;\n\n const groupedCellsData = getCells(\n this.data,\n xColumn,\n yColumn,\n {dataSource: valueColumn},\n facetBy,\n xGroupBy,\n yGroupBy,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n const dendrogramsData = getDendrograms(groupedCellsData, dendrogramX, dendrogramY, facetSettings);\n const cellUniqValues =\n chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n }\n\n _updateAesInData() {\n return;\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"names":["ChartHeatmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","HeatmapSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","xColumn","yColumn","valueColumn","xGroupBy","yGroupBy","facetBy","annotations","chartSettings","facetSettings","dendrogramX","dendrogramY","normalization","aggregation","NAValueAs","prevDendrogramXColumns","_a","isColumnName","currentDendrogramXColumns","prevDendrogramYColumns","_b","currentDendrogramYColumns","compareColumnGroups","columns1","columns2","column","idx","a","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","prevData","prevKeys","keys","key","keysOrder","groupedCellsData","getCells","dendrogramsData","getDendrograms","cellUniqValues","id","aes","inheritedDendrogramAes","customOrder","v","dataSize","cellsRenderingMode","MAX_SVG_RENDERED_CELLS_COUNT"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/heatmap/index.ts"],"sourcesContent":["import { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame } from '../DataFrame';\nimport type { ColumnName, DataValue, HeatmapEventHandlers, HeatmapSettings } from '../types';\nimport { isColumnName } from '../utils';\nimport ChartRenderer from './ChartRenderer';\nimport type { GroupedCellsHeatmap } from './getCells';\nimport { getCells } from './getCells';\nimport type { DendrogramsData } from './getDendrograms';\nimport { getDendrograms } from './getDendrograms';\nimport { HeatmapSettingsImpl } from './HeatmapSettingsImpl';\nimport { MAX_SVG_RENDERED_CELLS_COUNT } from './constants';\nimport { noop } from 'lodash';\n\nexport class ChartHeatmap extends AbstractChart {\n settings: HeatmapSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = noop;\n onLoadingChange: (v:boolean) => void = noop;\n\n calculatedData: {\n groupedCellsData: GroupedCellsHeatmap;\n dendrogramsData: DendrogramsData;\n cellUniqValues: DataValue[];\n } | null = null;\n\n clusteringCalculationsInProgress = false;\n\n constructor(data: DataFrame, settings: HeatmapSettings, eventHandlers?:HeatmapEventHandlers) {\n super(data, settings);\n\n this.settings = new HeatmapSettingsImpl(settings);\n if (eventHandlers) {\n this.onTooltipHintSwitch = eventHandlers.onTooltipHintSwitch ?? noop;\n this.onLoadingChange = eventHandlers.onLoadingChange ?? noop;\n }\n }\n\n mount(node: HTMLElement) {\n try {\n this.chartRenderer.init(node);\n this._updateData();\n this.hasError = false;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n unmount() {\n this.chartRenderer.clear();\n }\n\n updateSettingsAndData(data: DataFrame, settings: HeatmapSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new HeatmapSettingsImpl(settings);\n this.data = data;\n if (\n this._needUpdateCalculatedDataBySettings(previousSettings, this.settings) ||\n this._needUpdateCalculatedDataByData(previousData, this.data)\n ) {\n this._updateData();\n } else {\n this._updateAesInData();\n }\n } catch (err) {\n if (err instanceof Error) {\n this.chartRenderer.renderError(err.message as string);\n console.error(err);\n }\n }\n }\n\n updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for heatmap');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: HeatmapSettingsImpl, settings: HeatmapSettingsImpl) {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n annotations,\n chartSettings,\n facetSettings,\n dendrogramX,\n dendrogramY,\n normalization,\n aggregation,\n NAValueAs,\n } = settings;\n\n const prevDendrogramXColumns: ColumnName[] = Object.values(prevSettings.dendrogramX?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramXColumns: ColumnName[] = Object.values(dendrogramX?.aes || {}).filter(isColumnName);\n const prevDendrogramYColumns: ColumnName[] = Object.values(prevSettings.dendrogramY?.aes || {}).filter(\n isColumnName\n );\n const currentDendrogramYColumns: ColumnName[] = Object.values(dendrogramY?.aes || {}).filter(isColumnName);\n\n function compareColumnGroups(columns1: ColumnName[], columns2: ColumnName[]) {\n return (\n columns1.length !== columns2.length ||\n columns1.some((column, idx) => column.value !== columns2[idx].value)\n );\n }\n\n return (\n prevSettings.xColumn.value !== xColumn.value ||\n prevSettings.yColumn.value !== yColumn.value ||\n prevSettings.valueColumn.value !== valueColumn.value ||\n compareColumnGroups(prevSettings.xGroupBy, xGroupBy) ||\n compareColumnGroups(prevSettings.yGroupBy, yGroupBy) ||\n compareColumnGroups(prevSettings.facetBy, facetBy) ||\n compareColumnGroups(\n prevSettings.annotations.map(a => a.valueColumn),\n annotations.map(a => a.valueColumn)\n ) ||\n compareColumnGroups(prevDendrogramXColumns, currentDendrogramXColumns) ||\n compareColumnGroups(prevDendrogramYColumns, currentDendrogramYColumns) ||\n ((settings.dendrogramX || prevSettings.dendrogramX) &&\n (prevSettings.dendrogramX?.distance !== settings.dendrogramX?.distance ||\n prevSettings.dendrogramX?.linkage !== settings.dendrogramX?.linkage)) ||\n ((settings.dendrogramY || prevSettings.dendrogramY) &&\n (prevSettings.dendrogramY?.distance !== settings.dendrogramY?.distance ||\n prevSettings.dendrogramY?.linkage !== settings.dendrogramY?.linkage)) ||\n prevSettings.chartSettings.valueType !== chartSettings.valueType ||\n prevSettings.facetSettings.sharedX !== facetSettings.sharedX ||\n prevSettings.facetSettings.sharedY !== facetSettings.sharedY ||\n prevSettings.normalization?.method !== normalization?.method ||\n prevSettings.normalization?.direction !== normalization?.direction ||\n prevSettings.NAValueAs !== NAValueAs ||\n prevSettings.aggregation?.method !== aggregation?.method ||\n prevSettings.aggregation?.x !== aggregation?.x ||\n prevSettings.aggregation?.y !== aggregation?.y\n );\n }\n\n _needUpdateCalculatedDataByData(prevData: DataFrame, data: DataFrame) {\n const prevKeys = Object.keys(prevData.data);\n const keys = Object.keys(data.data);\n return (\n prevData.id !== data.id ||\n prevKeys.length !== keys.length ||\n prevKeys.some(key => prevData.data[key].length !== data.data[key]?.length)\n );\n }\n\n async _updateData() {\n const {\n xColumn,\n yColumn,\n valueColumn,\n xGroupBy,\n yGroupBy,\n facetBy,\n chartSettings,\n facetSettings,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n aggregation\n } = this.settings;\n\n const groupedCellsData = getCells(\n this.data,\n xColumn,\n yColumn,\n {dataSource: valueColumn},\n facetBy,\n xGroupBy,\n yGroupBy,\n annotations,\n dendrogramX,\n dendrogramY,\n normalization,\n NAValueAs,\n keysOrder,\n chartSettings.xAxis,\n chartSettings.yAxis,\n aggregation\n );\n const cellUniqValues = chartSettings.valueType === 'discrete' ? this.data.getColumnCategories(valueColumn.value) : [];\n \n this.clusteringCalculationsInProgress = true;\n this.onLoadingChange(true);\n const dendrogramsData = await getDendrograms(groupedCellsData, dendrogramX, dendrogramY, facetSettings);\n this.clusteringCalculationsInProgress = false;\n this.onLoadingChange(false);\n\n this.calculatedData = {\n groupedCellsData,\n dendrogramsData,\n cellUniqValues,\n };\n \n this._updateChart();\n }\n\n _updateAesInData() {\n this._updateChart();\n }\n\n _updateChart() {\n if (!this.calculatedData || this.clusteringCalculationsInProgress) {\n return;\n }\n const {\n id,\n valueColumn,\n chartSettings,\n facetSettings,\n aes,\n annotations,\n dendrogramX,\n dendrogramY,\n inheritedDendrogramAes,\n normalization,\n keysOrder,\n xColumn,\n yColumn,\n xGroupBy,\n yGroupBy,\n } = this.settings;\n const customOrder = {\n x: keysOrder[xColumn.value]?.length > 0,\n y: keysOrder[yColumn.value]?.length > 0,\n xGroup: xGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n yGroup: yGroupBy.some((v) => keysOrder[v.value]?.length > 0),\n };\n const dataSize = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0;\n const cellsRenderingMode = this.settings.cellsRenderingMode ?? (dataSize > MAX_SVG_RENDERED_CELLS_COUNT ? 'canvas' : 'svg');\n \n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n facetSettings,\n aes,\n this.calculatedData.groupedCellsData,\n annotations,\n valueColumn,\n dendrogramX,\n dendrogramY,\n this.calculatedData.dendrogramsData,\n inheritedDendrogramAes,\n this.calculatedData.cellUniqValues,\n normalization,\n this.onTooltipHintSwitch,\n customOrder,\n cellsRenderingMode\n );\n }\n}\n"],"names":["ChartHeatmap","AbstractChart","data","settings","eventHandlers","__publicField","ChartRenderer","noop","HeatmapSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","xColumn","yColumn","valueColumn","xGroupBy","yGroupBy","facetBy","annotations","chartSettings","facetSettings","dendrogramX","dendrogramY","normalization","aggregation","NAValueAs","prevDendrogramXColumns","_a","isColumnName","currentDendrogramXColumns","prevDendrogramYColumns","_b","currentDendrogramYColumns","compareColumnGroups","columns1","columns2","column","idx","a","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","prevData","prevKeys","keys","key","keysOrder","groupedCellsData","getCells","cellUniqValues","dendrogramsData","getDendrograms","id","aes","inheritedDendrogramAes","customOrder","v","dataSize","cellsRenderingMode","MAX_SVG_RENDERED_CELLS_COUNT"],"mappings":"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"}
|