@milaboratories/miplots4 1.0.155 → 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.
@@ -1,46 +1,58 @@
1
- import { getClustersApproximate as K } from "./getClusters.js";
2
- import m from "../node_modules/d3-hierarchy/src/hierarchy/index.js";
3
- function b(t, r, p, B) {
4
- const { facetKeys: G, xGroupKeys: w, yGroupKeys: E } = t.meta, x = {};
5
- if (r && B.sharedX)
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
- return G.forEach((c) => {
8
- const u = {
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
- }, o = t.facets[c];
12
- if (r) {
13
- const y = [];
14
- w.forEach((s) => {
15
- const i = o.xKeysByGroups[s], f = o.yKeys, a = K(
16
- i.map((e) => f.map((l) => {
17
- var h;
18
- return ((h = o.cells[e][l]) == null ? void 0 : h.normalizedValue.dataSource) ?? r.fillNA;
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
- r.distance,
21
- r.linkage
22
- ), n = a.indexes.map((e) => i[e]);
23
- t.facets[c].xKeysByGroups[s] = n, y.push(...n), u.hierarchyByGroupX[s] = m(a);
24
- }), t.facets[c].xKeys = y;
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 (p) {
27
- const y = [];
28
- E.forEach((s) => {
29
- const i = o.yKeysByGroups[s], f = o.xKeys, a = K(
30
- i.map((e) => f.map((l) => {
31
- var h;
32
- return ((h = o.cells[l][e]) == null ? void 0 : h.normalizedValue.dataSource) ?? p.fillNA;
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
- p.distance,
35
- p.linkage
36
- ), n = a.indexes.map((e) => i[e]);
37
- t.facets[c].yKeysByGroups[s] = n, y.push(...n), u.hierarchyByGroupY[s] = m(a);
38
- }), t.facets[c].yKeys = y;
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
- x[c] = u;
41
- }), x;
52
+ l[n] = h;
53
+ })), l;
42
54
  }
43
55
  export {
44
- b as getDendrograms
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 { getClustersApproximate } from './getClusters';\nimport type { HierarchyNode } from 'd3-hierarchy';\nimport { hierarchy } from 'd3-hierarchy';\n\nexport type DendrogramsData = Record<string, {\n hierarchyByGroupX: Record<string, HierarchyNode<Cluster>>;\n hierarchyByGroupY: Record<string, HierarchyNode<Cluster>>;\n}>\n\nconst DEBUG = false;\n\nexport function getDendrograms(\n groupedCellsData: GroupedCellsHeatmap,\n dendrogramX: HeatmapSettingsImpl['dendrogramX'],\n dendrogramY: HeatmapSettingsImpl['dendrogramY'],\n facetSettings: HeatmapSettingsImpl['facetSettings']\n): DendrogramsData {\n const { facetKeys, xGroupKeys, yGroupKeys } = groupedCellsData.meta;\n const result: DendrogramsData = {};\n\n if (dendrogramX && facetSettings.sharedX) {\n throw Error('Dendrogram on X axis is not available with shared by facets X axis');\n }\n\n facetKeys.forEach(facetKey => {\n const facetResult: DendrogramsData[string] = {\n hierarchyByGroupX: {},\n hierarchyByGroupY: {},\n };\n const cellsGroup = groupedCellsData.facets[facetKey];\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.time('start x');\n }\n if (dendrogramX) {\n const updatedXKeys: string[] = [];\n xGroupKeys.forEach(xGroupKey => {\n const xKeys = cellsGroup.xKeysByGroups[xGroupKey];\n const yKeys = cellsGroup.yKeys;\n if(DEBUG) {\n // eslint-disable-next-line no-console\n console.log('xKeys source', xKeys.length);\n }\n const rootCluster = 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 if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('rootCluster', rootCluster);\n }\n //set sorted group keys\n const newXKeys = rootCluster.indexes.map(i => xKeys[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 (DEBUG) {\n // eslint-disable-next-line no-console\n console.timeEnd('start x');\n }\n if (dendrogramY) {\n const updatedYKeys: string[] = [];\n yGroupKeys.forEach(yGroupKey => {\n const yKeys = cellsGroup.yKeysByGroups[yGroupKey];\n const xKeys = cellsGroup.xKeys;\n const rootCluster = 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 const newYKeys = rootCluster.indexes.map(i => yKeys[i]);\n //set sorted group keys\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":["getDendrograms","groupedCellsData","dendrogramX","dendrogramY","facetSettings","facetKeys","xGroupKeys","yGroupKeys","result","facetKey","facetResult","cellsGroup","updatedXKeys","xGroupKey","xKeys","yKeys","rootCluster","getClustersApproximate","x","_a","y","newXKeys","i","hierarchy","updatedYKeys","yGroupKey","newYKeys"],"mappings":";;AAcO,SAASA,EACZC,GACAC,GACAC,GACAC,GACe;AACf,QAAM,EAAE,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAeN,EAAiB,MACzDO,IAA0B,CAAA;AAEhC,MAAIN,KAAeE,EAAc;AAC7B,UAAM,MAAM,oEAAoE;AAGpF,SAAAC,EAAU,QAAQ,CAAAI,MAAY;AAC1B,UAAMC,IAAuC;AAAA,MACzC,mBAAmB,CAAA;AAAA,MACnB,mBAAmB,CAAA;AAAA,IAAC,GAElBC,IAAaV,EAAiB,OAAOQ,CAAQ;AAKnD,QAAIP,GAAa;AACb,YAAMU,IAAyB,CAAA;AAC/B,MAAAN,EAAW,QAAQ,CAAAO,MAAa;AAC5B,cAAMC,IAAQH,EAAW,cAAcE,CAAS,GAC1CE,IAAQJ,EAAW,OAKnBK,IAAcC;AAAA,UAChBH,EAAM,IAAI,CAAAI,MAAKH,EAAM,IAAI;;AAAM,qBAAAI,IAAAR,EAAW,MAAMO,CAAC,EAAEE,CAAC,MAArB,gBAAAD,EAAwB,gBAAgB,eAAcjB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA,GAOVmB,IAAWL,EAAY,QAAQ,IAAI,CAAAM,MAAKR,EAAMQ,CAAC,CAAC;AACtD,QAAArB,EAAiB,OAAOQ,CAAQ,EAAE,cAAcI,CAAS,IAAIQ,GAC7DT,EAAa,KAAK,GAAGS,CAAQ,GAC7BX,EAAY,kBAAkBG,CAAS,IAAIU,EAAUP,CAAW;AAAA,MACpE,CAAC,GAEDf,EAAiB,OAAOQ,CAAQ,EAAE,QAAQG;AAAA,IAC9C;AAKA,QAAIT,GAAa;AACb,YAAMqB,IAAyB,CAAA;AAC/B,MAAAjB,EAAW,QAAQ,CAAAkB,MAAa;AAC5B,cAAMV,IAAQJ,EAAW,cAAcc,CAAS,GAC1CX,IAAQH,EAAW,OACnBK,IAAcC;AAAA,UAChBF,EAAM,IAAI,CAAAK,MAAKN,EAAM,IAAI;;AAAM,qBAAAK,IAAAR,EAAW,MAAMO,CAAC,EAAEE,CAAC,MAArB,gBAAAD,EAAwB,gBAAgB,eAAchB,EAAY;AAAA,WAAiB,CAAC;AAAA,UACnHA,EAAY;AAAA,UACZA,EAAY;AAAA,QAAA,GAEVuB,IAAWV,EAAY,QAAQ,IAAI,CAAAM,MAAKP,EAAMO,CAAC,CAAC;AAEtD,QAAArB,EAAiB,OAAOQ,CAAQ,EAAE,cAAcgB,CAAS,IAAIC,GAC7DF,EAAa,KAAK,GAAGE,CAAQ,GAC7BhB,EAAY,kBAAkBe,CAAS,IAAIF,EAAUP,CAAW;AAAA,MACpE,CAAC,GAEDf,EAAiB,OAAOQ,CAAQ,EAAE,QAAQe;AAAA,IAC9C;AACA,IAAAhB,EAAOC,CAAQ,IAAIC;AAAA,EACvB,CAAC,GAEMF;AACX;"}
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;"}
@@ -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;AAG5D,qBAAa,YAAa,SAAQ,aAAa;IAC3C,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,aAAa,gBAAuB;IAEpC,mBAAmB,EAAE,CAAC,CAAC,EAAC,OAAO,KAAK,IAAI,CAAmB;IAC3D,cAAc,EAAE;QACZ,gBAAgB,EAAE,mBAAmB,CAAC;QACtC,eAAe,EAAE,eAAe,CAAC;QACjC,cAAc,EAAE,SAAS,EAAE,CAAC;KAC/B,GAAG,IAAI,CAAQ;gBAEJ,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,CAAC,EAAC,oBAAoB;IAS3F,KAAK,CAAC,IAAI,EAAE,WAAW;IAevB,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe;IAuBhE,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;IAUpE,WAAW;IAgDX,gBAAgB;IAIhB,YAAY;CAkDf"}
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"}
@@ -1,27 +1,29 @@
1
1
  var K = Object.defineProperty;
2
- var F = (C, l, a) => l in C ? K(C, l, { enumerable: !0, configurable: !0, writable: !0, value: a }) : C[l] = a;
3
- var A = (C, l, a) => F(C, typeof l != "symbol" ? l + "" : l, a);
4
- import { renderToString as J } from "../node_modules/react-dom/server.browser.js";
5
- import { AbstractChart as P } from "../AbstractChart.js";
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 S } from "./getCells.js";
9
- import { getDendrograms as W } from "./getDendrograms.js";
10
- import { HeatmapSettingsImpl as q } from "./HeatmapSettingsImpl.js";
11
- import { MAX_SVG_RENDERED_CELLS_COUNT as Z } from "./constants.js";
12
- class la extends P {
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
- A(this, "settings");
16
- A(this, "chartRenderer", new Q());
17
- A(this, "onTooltipHintSwitch", () => {
18
- });
19
- A(this, "calculatedData", null);
20
- this.settings = new q(e), t && (this.onTooltipHintSwitch = t[0]);
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._updateChart(), this.hasError = !1;
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, d = this.data;
35
- this.settings = new q(e), this.data = a, this._needUpdateCalculatedDataBySettings(t, this.settings) || this._needUpdateCalculatedDataByData(d, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart();
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(), J(this.chartRenderer.component);
46
+ return this._updateChart(), F(this.chartRenderer.component);
45
47
  }
46
48
  _needUpdateCalculatedDataBySettings(a, e) {
47
- var c, Y, E, O, v, k, N, T, b, w, U, j, V, H, I;
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: d,
51
- valueColumn: u,
52
- xGroupBy: i,
52
+ yColumn: l,
53
+ valueColumn: i,
54
+ xGroupBy: u,
53
55
  yGroupBy: h,
54
- facetBy: D,
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: p
63
- } = e, x = Object.values(((c = a.dendrogramX) == null ? void 0 : c.aes) || {}).filter(
64
+ NAValueAs: f
65
+ } = e, B = Object.values(((c = a.dendrogramX) == null ? void 0 : c.aes) || {}).filter(
64
66
  R
65
- ), B = Object.values((m == null ? void 0 : m.aes) || {}).filter(R), X = Object.values(((Y = a.dendrogramY) == null ? void 0 : Y.aes) || {}).filter(
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(f, M) {
69
- return f.length !== M.length || f.some((z, L) => z.value !== M[L].value);
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 !== d.value || a.valueColumn.value !== u.value || s(a.xGroupBy, i) || s(a.yGroupBy, h) || s(a.facetBy, D) || s(
72
- a.annotations.map((f) => f.valueColumn),
73
- _.map((f) => f.valueColumn)
74
- ) || s(x, B) || s(X, G) || (e.dendrogramX || a.dendrogramX) && (((E = a.dendrogramX) == null ? void 0 : E.distance) !== ((O = e.dendrogramX) == null ? void 0 : O.distance) || ((v = a.dendrogramX) == null ? void 0 : v.linkage) !== ((k = e.dendrogramX) == null ? void 0 : k.linkage)) || (e.dendrogramY || a.dendrogramY) && (((N = a.dendrogramY) == null ? void 0 : N.distance) !== ((T = e.dendrogramY) == null ? void 0 : T.distance) || ((b = a.dendrogramY) == null ? void 0 : b.linkage) !== ((w = e.dendrogramY) == null ? void 0 : w.linkage)) || a.chartSettings.valueType !== y.valueType || a.facetSettings.sharedX !== o.sharedX || a.facetSettings.sharedY !== o.sharedY || ((U = a.normalization) == null ? void 0 : U.method) !== (n == null ? void 0 : n.method) || ((j = a.normalization) == null ? void 0 : j.direction) !== (n == null ? void 0 : n.direction) || a.NAValueAs !== p || ((V = a.aggregation) == null ? void 0 : V.method) !== (r == null ? void 0 : r.method) || ((H = a.aggregation) == null ? void 0 : H.x) !== (r == null ? void 0 : r.x) || ((I = a.aggregation) == null ? void 0 : I.y) !== (r == null ? void 0 : r.y);
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), d = Object.keys(e.data);
78
- return a.id !== e.id || t.length !== d.length || t.some((u) => {
79
- var i;
80
- return a.data[u].length !== ((i = e.data[u]) == null ? void 0 : i.length);
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: d,
89
- yGroupBy: u,
90
- facetBy: i,
90
+ xGroupBy: l,
91
+ yGroupBy: i,
92
+ facetBy: u,
91
93
  chartSettings: h,
92
- facetSettings: D,
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, p = S(
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
- ), x = W(p, y, o, D), B = h.valueType === "discrete" ? this.data.getColumnCategories(t.value) : [];
118
- this.calculatedData = {
119
- groupedCellsData: p,
120
- dendrogramsData: x,
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: d,
135
- aes: u,
136
- annotations: i,
139
+ facetSettings: l,
140
+ aes: i,
141
+ annotations: u,
137
142
  dendrogramX: h,
138
- dendrogramY: D,
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, p = {
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
- }, x = this.data.columnNames.length ? this.data.getColumn(this.data.columnNames[0]).length : 0, B = this.settings.cellsRenderingMode ?? (x > Z ? "canvas" : "svg");
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
- d,
163
- u,
164
- this.calculatedData.groupedCellsData,
167
+ l,
165
168
  i,
169
+ this.calculatedData.groupedCellsData,
170
+ u,
166
171
  e,
167
172
  h,
168
- D,
173
+ x,
169
174
  this.calculatedData.dendrogramsData,
170
175
  _,
171
176
  this.calculatedData.cellUniqValues,
172
177
  y,
173
178
  this.onTooltipHintSwitch,
174
- p,
175
- B
179
+ f,
180
+ A
176
181
  );
177
182
  }
178
183
  }
179
184
  export {
180
- la as ChartHeatmap
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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"}