@milaboratories/graph-maker 1.1.145 → 1.1.147
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/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.d.ts +1 -0
- package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js +155 -121
- package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js.map +1 -1
- package/dist/GraphMaker/dataBindAes.d.ts +1 -0
- package/dist/GraphMaker/dataBindAes.d.ts.map +1 -1
- package/dist/GraphMaker/dataBindAes.js +73 -66
- package/dist/GraphMaker/dataBindAes.js.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js +2 -0
- package/dist/GraphMaker/forms/AxesSettingsForm/DiscreteAxesSettingsForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js +37 -36
- package/dist/GraphMaker/forms/LayersForm/AesSelector.vue.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js +31 -29
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeDiscreteSettings.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.d.ts.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js +6 -6
- package/dist/GraphMaker/utils/createChartSettingsForRender/getAxesDataFromForms.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js +102 -101
- package/dist/node_modules/@milaboratories/miplots4/dist/discrete/index.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js +135 -135
- package/dist/node_modules/@milaboratories/miplots4/dist/scatterplot-umap/ChartRenderer.js.map +1 -1
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/arraysAreDifferent.js +10 -2
- package/dist/node_modules/@milaboratories/miplots4/dist/utils/arraysAreDifferent.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
import { l as
|
|
2
|
-
import { renderToString as
|
|
3
|
-
import { AbstractChart as
|
|
4
|
-
import { NO_GROUPED as
|
|
5
|
-
import
|
|
6
|
-
import { MAX_GROUPS_COUNT as
|
|
7
|
-
import { DiscreteSettingsImpl as
|
|
8
|
-
import { getBoxesData as
|
|
9
|
-
import { getViolinsData as
|
|
10
|
-
import { getSinaData as
|
|
11
|
-
import { getDotsData as
|
|
12
|
-
import { getLinesData as
|
|
13
|
-
import { getErrorBarsData as
|
|
14
|
-
import { getBarsData as
|
|
15
|
-
import { getStackedBarsData as
|
|
16
|
-
import { getStackedAreaData as
|
|
17
|
-
import { getBinnedDotsData as
|
|
18
|
-
import { getPairedPointsData as
|
|
19
|
-
import { getLogoData as
|
|
20
|
-
import { getStatsData as
|
|
21
|
-
import { getFacetStringKey as
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import { l as k } from "../node_modules/lodash/lodash.js";
|
|
2
|
+
import { renderToString as $ } from "../node_modules/react-dom/server.browser.js";
|
|
3
|
+
import { AbstractChart as R } from "../AbstractChart.js";
|
|
4
|
+
import { NO_GROUPED as v } from "../DataFrame.js";
|
|
5
|
+
import U from "./ChartRenderer.js";
|
|
6
|
+
import { MAX_GROUPS_COUNT as w, MAX_FACETS_COUNT as O } from "./constants.js";
|
|
7
|
+
import { DiscreteSettingsImpl as E, StatLayer as L, BoxLayer as P, ViolinLayer as T, DotLayer as x, LineLayer as K, ErrorBarLayer as I, BarLayer as F, StackedBarLayer as V, StackedAreaLayer as H, BinnedDotsLayer as j, PairedPointsLayer as q, SinaLayer as M, LogoPlotLayer as W } from "./DiscreteSettingsImpl.js";
|
|
8
|
+
import { getBoxesData as X } from "./layers/boxes.js";
|
|
9
|
+
import { getViolinsData as z } from "./layers/violins.js";
|
|
10
|
+
import { getSinaData as J } from "./layers/sina.js";
|
|
11
|
+
import { getDotsData as Q } from "./layers/dots.js";
|
|
12
|
+
import { getLinesData as Y } from "./layers/lines.js";
|
|
13
|
+
import { getErrorBarsData as Z } from "./layers/errorbars.js";
|
|
14
|
+
import { getBarsData as tt } from "./layers/bar.js";
|
|
15
|
+
import { getStackedBarsData as at } from "./layers/stackedBar.js";
|
|
16
|
+
import { getStackedAreaData as et } from "./layers/stackedArea.js";
|
|
17
|
+
import { getBinnedDotsData as rt } from "./layers/binnedDots.js";
|
|
18
|
+
import { getPairedPointsData as st } from "./layers/pairedPoints.js";
|
|
19
|
+
import { getLogoData as it } from "./layers/logo.js";
|
|
20
|
+
import { getStatsData as nt } from "./layers/stats/index.js";
|
|
21
|
+
import { getFacetStringKey as B } from "./utils/getFacetStringKey.js";
|
|
22
|
+
import { arraysAreDifferent as _ } from "../utils/arraysAreDifferent.js";
|
|
23
|
+
var ot = Object.defineProperty, lt = (l, a, t) => a in l ? ot(l, a, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[a] = t, S = (l, a, t) => lt(l, typeof a != "symbol" ? a + "" : a, t);
|
|
24
|
+
function A(l, a, t = null) {
|
|
25
|
+
const s = a.value, i = l.getColumnCategories(s);
|
|
26
|
+
return k.intersection(t ?? i, i).map(String);
|
|
26
27
|
}
|
|
27
|
-
function
|
|
28
|
-
if (!
|
|
28
|
+
function b(l) {
|
|
29
|
+
if (!l.length)
|
|
29
30
|
return [];
|
|
30
31
|
let a = [[]];
|
|
31
|
-
return
|
|
32
|
+
return l.forEach((t) => {
|
|
32
33
|
const s = [];
|
|
33
34
|
t.forEach((i) => {
|
|
34
|
-
s.push(...a.map((
|
|
35
|
+
s.push(...a.map((o) => [...o, i]));
|
|
35
36
|
}), a = s;
|
|
36
37
|
}), a;
|
|
37
38
|
}
|
|
38
|
-
function
|
|
39
|
+
function C(l, a) {
|
|
39
40
|
if (!a)
|
|
40
41
|
return {
|
|
41
42
|
keys: ["null"],
|
|
@@ -44,24 +45,24 @@ function v(o, a) {
|
|
|
44
45
|
valueLabels: { null: "" },
|
|
45
46
|
inheritedAes: null
|
|
46
47
|
};
|
|
47
|
-
const t = a.columnName.value, s = a.columnName.valueLabels, i =
|
|
48
|
-
|
|
48
|
+
const t = a.columnName.value, s = a.columnName.valueLabels, i = l.getColumnCategories(t, !1), o = (r) => s ? String(
|
|
49
|
+
l.getColumnValue(
|
|
49
50
|
s,
|
|
50
|
-
|
|
51
|
+
l.getColumnCategoryRowIndex(t, r)
|
|
51
52
|
)
|
|
52
|
-
) : r,
|
|
53
|
+
) : r, u = l.getColumnCategories(t, !a.allowNullGroup);
|
|
53
54
|
return {
|
|
54
|
-
keys: a.order === void 0 ?
|
|
55
|
+
keys: a.order === void 0 ? u : k.intersection(a.order.map(String), u),
|
|
55
56
|
value: t,
|
|
56
57
|
label: a.columnName.label ?? t,
|
|
57
|
-
valueLabels: i.reduce((r,
|
|
58
|
+
valueLabels: i.reduce((r, c) => (r[c] = o(c), r), {}),
|
|
58
59
|
inheritedAes: a.inheritedAes ?? null
|
|
59
60
|
};
|
|
60
61
|
}
|
|
61
|
-
class
|
|
62
|
+
class Nt extends R {
|
|
62
63
|
constructor(a, t, s) {
|
|
63
|
-
super(a, t),
|
|
64
|
-
}),
|
|
64
|
+
super(a, t), S(this, "settings"), S(this, "chartRenderer", new U()), S(this, "onTooltipHintSwitch", () => {
|
|
65
|
+
}), S(this, "calculatedData", null), this.settings = new E(t), s && (this.onTooltipHintSwitch = s[0]);
|
|
65
66
|
}
|
|
66
67
|
mount(a) {
|
|
67
68
|
try {
|
|
@@ -76,7 +77,7 @@ class bt extends $ {
|
|
|
76
77
|
updateSettingsAndData(a, t) {
|
|
77
78
|
try {
|
|
78
79
|
const s = this.settings, i = this.data;
|
|
79
|
-
this.settings = new
|
|
80
|
+
this.settings = new E(t), this.data = a, this._needUpdateCalculatedDataBySettings(s, this.settings) || this._needUpdateCalculatedDataByData(i, this.data) ? this._updateData() : this._updateAesInData(), this._updateChart(), this.hasError = !1;
|
|
80
81
|
} catch (s) {
|
|
81
82
|
this.hasError = !0, s instanceof Error && (this.chartRenderer.renderError(s.message), console.error(s));
|
|
82
83
|
}
|
|
@@ -85,103 +86,103 @@ class bt extends $ {
|
|
|
85
86
|
console.warn("no chart state for discrete");
|
|
86
87
|
}
|
|
87
88
|
export() {
|
|
88
|
-
return this._updateChart(),
|
|
89
|
+
return this._updateChart(), $(this.chartRenderer.component);
|
|
89
90
|
}
|
|
90
91
|
_needUpdateCalculatedDataBySettings(a, t) {
|
|
91
|
-
var s, i,
|
|
92
|
-
return a.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((s = a.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") !== (((i = t.primaryGrouping) == null ? void 0 : i.columnName.value) ?? "") || (((
|
|
93
|
-
var
|
|
94
|
-
return g.value !== ((
|
|
95
|
-
}) || a.layers.length !== t.layers.length || a.layers.some((g,
|
|
92
|
+
var s, i, o, u, r, c, d, h, D, m, p, n;
|
|
93
|
+
return a.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((s = a.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") !== (((i = t.primaryGrouping) == null ? void 0 : i.columnName.value) ?? "") || (((o = a.secondaryGrouping) == null ? void 0 : o.columnName.value) ?? "") !== (((u = t.secondaryGrouping) == null ? void 0 : u.columnName.value) ?? "") || (((r = a.primaryGrouping) == null ? void 0 : r.allowNullGroup) ?? "") !== (((c = t.primaryGrouping) == null ? void 0 : c.allowNullGroup) ?? "") || (((d = a.secondaryGrouping) == null ? void 0 : d.allowNullGroup) ?? "") !== (((h = t.secondaryGrouping) == null ? void 0 : h.allowNullGroup) ?? "") || _((D = a.primaryGrouping) == null ? void 0 : D.order, (m = t.primaryGrouping) == null ? void 0 : m.order, { ignoreOrder: !0 }) || _((p = a.secondaryGrouping) == null ? void 0 : p.order, (n = t.secondaryGrouping) == null ? void 0 : n.order, { ignoreOrder: !0 }) || a.facetBy.some((g, y) => {
|
|
94
|
+
var G;
|
|
95
|
+
return g.value !== ((G = t.facetBy[y]) == null ? void 0 : G.value);
|
|
96
|
+
}) || a.layers.length !== t.layers.length || a.layers.some((g, y) => !g.isEqualForCalculation(t.layers[y]));
|
|
96
97
|
}
|
|
97
98
|
_needUpdateCalculatedDataByData(a, t) {
|
|
98
99
|
const s = Object.keys(a.data), i = Object.keys(t.data);
|
|
99
|
-
return a.id !== t.id || s.length !== i.length || s.some((
|
|
100
|
-
var
|
|
101
|
-
return a.data[
|
|
100
|
+
return a.id !== t.id || s.length !== i.length || s.some((o) => {
|
|
101
|
+
var u;
|
|
102
|
+
return a.data[o].length !== ((u = t.data[o]) == null ? void 0 : u.length);
|
|
102
103
|
});
|
|
103
104
|
}
|
|
104
105
|
_updateData() {
|
|
105
|
-
const { chartSettings: a, y: t, keyColumn: s, facetBy: i, layers:
|
|
106
|
-
if (!m &&
|
|
107
|
-
throw Error(`Too many primary groups (${
|
|
108
|
-
if (!m &&
|
|
109
|
-
throw Error(`Too many secondary groups (${
|
|
110
|
-
const p = i.length ?
|
|
106
|
+
const { chartSettings: a, y: t, keyColumn: s, facetBy: i, layers: o, facetSettings: u } = this.settings, { yAxis: r } = a, c = this.data.getColumn(t.value).every((e) => e === null || !(Number(e) < 0)), d = C(this.data, this.settings.primaryGrouping), h = C(this.data, this.settings.secondaryGrouping), D = i.map((e) => e.value), m = o.some((e) => e.type === "logo" || e.type === "bar");
|
|
107
|
+
if (!m && d.keys.length > w)
|
|
108
|
+
throw Error(`Too many primary groups (${d.keys.length})`);
|
|
109
|
+
if (!m && h.keys.length > w)
|
|
110
|
+
throw Error(`Too many secondary groups (${h.keys.length})`);
|
|
111
|
+
const p = i.length ? b(
|
|
111
112
|
i.map((e) => {
|
|
112
|
-
var
|
|
113
|
-
return
|
|
113
|
+
var f;
|
|
114
|
+
return A(this.data, e, (f = u == null ? void 0 : u.order) == null ? void 0 : f[e.value]);
|
|
114
115
|
})
|
|
115
|
-
) : [[
|
|
116
|
-
if (p.length >
|
|
116
|
+
) : [[v]];
|
|
117
|
+
if (p.length > O)
|
|
117
118
|
throw Error(`Too many facets (${p.length})`);
|
|
118
|
-
this.data.setGrouping([...
|
|
119
|
-
const
|
|
119
|
+
this.data.setGrouping([...D, d.value, h.value]);
|
|
120
|
+
const n = {
|
|
120
121
|
facet: p,
|
|
121
|
-
primary:
|
|
122
|
-
secondary:
|
|
123
|
-
},
|
|
124
|
-
(
|
|
125
|
-
).map(String), e), {}),
|
|
122
|
+
primary: d.value !== null ? d.keys : [v],
|
|
123
|
+
secondary: h.value !== null ? h.keys : [v]
|
|
124
|
+
}, g = n.facet.reduce((e, f) => (e[B(f)] = n.primary.filter(
|
|
125
|
+
(N) => this.data.getRowsByGrouping([...f, N]).length > 0
|
|
126
|
+
).map(String), e), {}), y = o.filter((e) => !(e instanceof L)).map((e) => {
|
|
126
127
|
if (e instanceof P)
|
|
127
|
-
return
|
|
128
|
+
return X(e, n, this.data, t, s, r);
|
|
128
129
|
if (e instanceof T)
|
|
129
|
-
return
|
|
130
|
+
return z(e, n, this.data, t, r);
|
|
130
131
|
if (e instanceof x)
|
|
131
|
-
return
|
|
132
|
-
if (e instanceof O)
|
|
133
|
-
return Q(e, c, this.data, t, r);
|
|
134
|
-
if (e instanceof I)
|
|
135
|
-
return Y(e, c, this.data, t, r);
|
|
132
|
+
return Q(e, n, this.data, t, r, s);
|
|
136
133
|
if (e instanceof K)
|
|
137
|
-
return
|
|
134
|
+
return Y(e, n, this.data, t, r);
|
|
135
|
+
if (e instanceof I)
|
|
136
|
+
return Z(e, n, this.data, t, r);
|
|
138
137
|
if (e instanceof F)
|
|
139
|
-
return tt(e,
|
|
138
|
+
return tt(e, n, this.data, t, r);
|
|
140
139
|
if (e instanceof V)
|
|
141
|
-
return at(e,
|
|
140
|
+
return at(e, n, this.data, t);
|
|
142
141
|
if (e instanceof H)
|
|
143
|
-
return et(e,
|
|
142
|
+
return et(e, n, this.data, t);
|
|
144
143
|
if (e instanceof j)
|
|
145
|
-
return rt(e,
|
|
144
|
+
return rt(e, n, this.data, t, r);
|
|
146
145
|
if (e instanceof q)
|
|
147
|
-
return
|
|
146
|
+
return st(e, n, this.data, t, r);
|
|
148
147
|
if (e instanceof M)
|
|
149
|
-
return
|
|
148
|
+
return J(e, n, this.data, t, r);
|
|
149
|
+
if (e instanceof W)
|
|
150
|
+
return it(e, n, this.data, t);
|
|
150
151
|
throw new Error("Unknown layer type");
|
|
151
|
-
}),
|
|
152
|
-
if (
|
|
152
|
+
}), G = o.filter((e) => e instanceof L).map((e) => {
|
|
153
|
+
if (d.value === null)
|
|
153
154
|
throw new Error("Cannot calculate p-value without data grouping");
|
|
154
|
-
return
|
|
155
|
+
return nt(e, n.facet, n.primary, t, this.data);
|
|
155
156
|
});
|
|
156
157
|
this.calculatedData = {
|
|
157
|
-
layersData:
|
|
158
|
-
statsLayersData:
|
|
159
|
-
primaryGrouping:
|
|
160
|
-
secondaryGrouping:
|
|
158
|
+
layersData: y,
|
|
159
|
+
statsLayersData: G,
|
|
160
|
+
primaryGrouping: d,
|
|
161
|
+
secondaryGrouping: h,
|
|
161
162
|
facetKeyLists: p,
|
|
162
|
-
nonEmptyGroupsByFacets:
|
|
163
|
-
onlyPositive:
|
|
163
|
+
nonEmptyGroupsByFacets: g,
|
|
164
|
+
onlyPositive: c
|
|
164
165
|
};
|
|
165
166
|
}
|
|
166
167
|
_updateAesInData() {
|
|
167
168
|
if (this.calculatedData === null)
|
|
168
169
|
return;
|
|
169
|
-
const { layers: a, facetBy: t, primaryGrouping: s, secondaryGrouping: i, facetSettings:
|
|
170
|
-
for (let r = 0; r <
|
|
171
|
-
const
|
|
172
|
-
"aes" in
|
|
170
|
+
const { layers: a, facetBy: t, primaryGrouping: s, secondaryGrouping: i, facetSettings: o } = this.settings, u = a.filter((r) => !(r instanceof L));
|
|
171
|
+
for (let r = 0; r < u.length; r++) {
|
|
172
|
+
const c = u[r];
|
|
173
|
+
"aes" in c && (this.calculatedData.layersData[r].aes = c.aes);
|
|
173
174
|
}
|
|
174
|
-
this.calculatedData.primaryGrouping =
|
|
175
|
+
this.calculatedData.primaryGrouping = C(this.data, s), this.calculatedData.secondaryGrouping = C(this.data, i), this.calculatedData.facetKeyLists = t.length ? b(
|
|
175
176
|
t.map((r) => {
|
|
176
|
-
var
|
|
177
|
-
return
|
|
177
|
+
var c;
|
|
178
|
+
return A(this.data, r, (c = o == null ? void 0 : o.order) == null ? void 0 : c[r.value]);
|
|
178
179
|
})
|
|
179
|
-
) : [[
|
|
180
|
+
) : [[v]];
|
|
180
181
|
}
|
|
181
182
|
_updateChart() {
|
|
182
183
|
if (!this.calculatedData)
|
|
183
184
|
return;
|
|
184
|
-
const { id: a, chartSettings: t, keyColumn: s, facetSettings: i } = this.settings,
|
|
185
|
+
const { id: a, chartSettings: t, keyColumn: s, facetSettings: i } = this.settings, o = this.calculatedData.facetKeyLists.map(B), u = this.calculatedData.facetKeyLists.map((r) => r.map((c) => c === v ? "null" : c));
|
|
185
186
|
this.chartRenderer.render(
|
|
186
187
|
this.data,
|
|
187
188
|
a,
|
|
@@ -189,8 +190,8 @@ class bt extends $ {
|
|
|
189
190
|
this.calculatedData.primaryGrouping,
|
|
190
191
|
this.calculatedData.secondaryGrouping,
|
|
191
192
|
i,
|
|
192
|
-
|
|
193
|
-
|
|
193
|
+
o,
|
|
194
|
+
u,
|
|
194
195
|
this.calculatedData.layersData,
|
|
195
196
|
this.calculatedData.statsLayersData,
|
|
196
197
|
s,
|
|
@@ -201,6 +202,6 @@ class bt extends $ {
|
|
|
201
202
|
}
|
|
202
203
|
}
|
|
203
204
|
export {
|
|
204
|
-
|
|
205
|
+
Nt as ChartDiscrete
|
|
205
206
|
};
|
|
206
207
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport type { Category, ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData } from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from './constants';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer, StackedAreaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\nimport { getLogoData } from './layers/logo';\nimport {getStackedAreaData} from './layers/stackedArea';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getFacetStringKey } from './utils/getFacetStringKey';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n\n const groupingColumnId = grouping.columnName.value;\n const groupingColumnLabelId = grouping.columnName.valueLabels;\n const categories = data.getColumnCategories(groupingColumnId, false);\n const getValueLabel = (category: Category) => {\n return groupingColumnLabelId \n ? String(\n data.getColumnValue(\n groupingColumnLabelId,\n data.getColumnCategoryRowIndex(groupingColumnId, category)\n )\n )\n : category;\n };\n \n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n const orderedKeys = grouping.order === undefined ? keys : intersection(grouping.order.map(String), keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: categories.reduce((res: Record<string, string>, category: Category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(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: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(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 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 updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\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 {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof StackedAreaLayer) {\n return getStackedAreaData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","groupingColumnLabelId","categories","getValueLabel","category","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","el","idx","l","prevData","prevKeys","i","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","StackedAreaLayer","getStackedAreaData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","id","facetKeys","facetLabels"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../node_modules/@milaboratories/miplots4/src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport type { Category, ColumnName, DataValue, DiscreteEventHandlers, DiscreteSettings, GroupingData } from '../types';\nimport ChartRenderer from './ChartRenderer';\nimport { MAX_FACETS_COUNT, MAX_GROUPS_COUNT } from './constants';\nimport {\n BarLayer,\n BinnedDotsLayer,\n BoxLayer,\n DiscreteSettingsImpl,\n DotLayer,\n ErrorBarLayer,\n LineLayer,\n LogoPlotLayer,\n PairedPointsLayer,\n SinaLayer, StackedAreaLayer,\n StackedBarLayer,\n StatLayer,\n ViolinLayer,\n} from './DiscreteSettingsImpl';\nimport {\n getBarsData,\n getBinnedDotsData,\n getBoxesData,\n getDotsData,\n getErrorBarsData,\n getLinesData,\n getPairedPointsData,\n getSinaData,\n getStackedBarsData,\n getStatsData,\n getViolinsData,\n} from './layers';\nimport { getLogoData } from './layers/logo';\nimport {getStackedAreaData} from './layers/stackedArea';\nimport type { LayerData, StatsData } from './layers/types';\nimport { getFacetStringKey } from './utils/getFacetStringKey';\nimport { arraysAreDifferent } from '../utils/arraysAreDifferent';\n\nfunction getGroupingKeys(data: DataFrame, column: ColumnName, order: DataValue[] | null = null) {\n const groupingColumn = column.value;\n const availableKeys = data.getColumnCategories(groupingColumn);\n return intersection(order ?? availableKeys, availableKeys).map(String);\n}\n\n// all combinations with 1 key from each list\nfunction getKeysCombinations(keysLists: string[][]) {\n if (!keysLists.length) {\n return [];\n }\n let result: string[][] = [[]];\n keysLists.forEach(keys => {\n const nextResult: string[][] = [];\n keys.forEach(key => {\n nextResult.push(...result.map(resultItem => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\nfunction getGroupingData(\n data: DataFrame,\n grouping: DiscreteSettingsImpl['primaryGrouping' | 'secondaryGrouping']\n): GroupingData {\n if (!grouping) {\n return {\n keys: ['null'],\n value: null,\n label: '',\n valueLabels: {null: ''},\n inheritedAes: null,\n };\n }\n\n const groupingColumnId = grouping.columnName.value;\n const groupingColumnLabelId = grouping.columnName.valueLabels;\n const categories = data.getColumnCategories(groupingColumnId, false);\n const getValueLabel = (category: Category) => {\n return groupingColumnLabelId \n ? String(\n data.getColumnValue(\n groupingColumnLabelId,\n data.getColumnCategoryRowIndex(groupingColumnId, category)\n )\n )\n : category;\n };\n \n const keys = data.getColumnCategories(groupingColumnId, !grouping.allowNullGroup);\n const orderedKeys = grouping.order === undefined ? keys : intersection(grouping.order.map(String), keys);\n\n return {\n keys: orderedKeys,\n value: groupingColumnId,\n label: grouping.columnName.label ?? groupingColumnId,\n valueLabels: categories.reduce((res: Record<string, string>, category: Category) => {\n res[category] = getValueLabel(category);\n return res;\n }, {}),\n inheritedAes: grouping.inheritedAes ?? null,\n };\n}\n\nexport class ChartDiscrete extends AbstractChart {\n settings: DiscreteSettingsImpl;\n chartRenderer = new ChartRenderer();\n\n onTooltipHintSwitch: (v:boolean) => void = () => undefined;\n calculatedData: {\n layersData: LayerData[];\n statsLayersData: StatsData[];\n primaryGrouping: GroupingData;\n secondaryGrouping: GroupingData;\n facetKeyLists: GroupKey[][];\n nonEmptyGroupsByFacets: Record<string, string[]>;\n onlyPositive: boolean;\n } | null = null;\n\n constructor(data: DataFrame, settings: DiscreteSettings, eventHandlers?: DiscreteEventHandlers) {\n super(data, settings);\n\n this.settings = new DiscreteSettingsImpl(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: DiscreteSettings) {\n try {\n const previousSettings = this.settings;\n const previousData = this.data;\n this.settings = new DiscreteSettingsImpl(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 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 updateChartState(_field: string, _value: unknown) {\n console.warn('no chart state for discrete');\n }\n\n export(): string {\n this._updateChart();\n return renderToString(this.chartRenderer.component);\n }\n\n _needUpdateCalculatedDataBySettings(prevSettings: DiscreteSettingsImpl, settings: DiscreteSettingsImpl) {\n return (\n prevSettings.chartSettings.yAxis.scale !== settings.chartSettings.yAxis.scale ||\n (prevSettings.primaryGrouping?.columnName.value ?? '') !==\n (settings.primaryGrouping?.columnName.value ?? '') ||\n (prevSettings.secondaryGrouping?.columnName.value ?? '') !==\n (settings.secondaryGrouping?.columnName.value ?? '') ||\n (prevSettings.primaryGrouping?.allowNullGroup ?? '') !==\n (settings.primaryGrouping?.allowNullGroup ?? '') ||\n (prevSettings.secondaryGrouping?.allowNullGroup ?? '') !==\n (settings.secondaryGrouping?.allowNullGroup ?? '') ||\n arraysAreDifferent(prevSettings.primaryGrouping?.order, settings.primaryGrouping?.order, {ignoreOrder: true}) ||\n arraysAreDifferent(prevSettings.secondaryGrouping?.order, settings.secondaryGrouping?.order, {ignoreOrder: true}) ||\n prevSettings.facetBy.some((el, idx) => el.value !== settings.facetBy[idx]?.value) ||\n prevSettings.layers.length !== settings.layers.length ||\n prevSettings.layers.some((l, idx) => !l.isEqualForCalculation(settings.layers[idx] as typeof l))\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 {chartSettings, y, keyColumn, facetBy, layers, facetSettings} = this.settings;\n const {yAxis} = chartSettings;\n\n const onlyPositive = this.data.getColumn(y.value).every(v => {\n return v === null || !(Number(v) < 0);\n });\n // console.info('only positive Y:', onlyPositive);\n\n const primaryGrouping = getGroupingData(this.data, this.settings.primaryGrouping);\n const secondaryGrouping = getGroupingData(this.data, this.settings.secondaryGrouping);\n const facetGroupingValues = facetBy.map(column => column.value);\n const hasLogoOrBarLayer = layers.some(l => l.type === 'logo' || l.type === 'bar');\n\n if (!hasLogoOrBarLayer && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many primary groups (${primaryGrouping.keys.length})`);\n }\n if (!hasLogoOrBarLayer && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n throw Error(`Too many secondary groups (${secondaryGrouping.keys.length})`);\n }\n\n // if facet created by more than 1 data column facet key contains all of them, and all keys are used in data grouping;\n // after data preparing we need only complex keys from concatenated strings\n const facetKeyLists:(GroupKey)[][] = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n throw Error(`Too many facets (${facetKeyLists.length})`);\n }\n this.data.setGrouping([...facetGroupingValues, primaryGrouping.value, secondaryGrouping.value]);\n const groupingKeys = {\n facet: facetKeyLists,\n primary: (primaryGrouping.value !== null ? primaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n secondary: (secondaryGrouping.value !== null ? secondaryGrouping.keys : [NO_GROUPED]) as GroupKey[],\n };\n\n const nonEmptyGroupsByFacets = groupingKeys.facet.reduce((res: Record<string, string[]>, facetKey) => {\n res[getFacetStringKey(facetKey)] = groupingKeys.primary.filter(\n primaryKey => this.data.getRowsByGrouping([...facetKey, primaryKey]).length > 0\n ).map(String);\n return res;\n }, {});\n\n const layersData = layers\n .filter(layer => !(layer instanceof StatLayer))\n .map(layer => {\n if (layer instanceof BoxLayer) {\n return getBoxesData(layer, groupingKeys, this.data, y, keyColumn, yAxis);\n }\n if (layer instanceof ViolinLayer) {\n return getViolinsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof DotLayer) {\n return getDotsData(layer, groupingKeys, this.data, y, yAxis, keyColumn);\n }\n if (layer instanceof LineLayer) {\n return getLinesData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof ErrorBarLayer) {\n return getErrorBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof BarLayer) {\n return getBarsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof StackedBarLayer) {\n return getStackedBarsData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof StackedAreaLayer) {\n return getStackedAreaData(layer, groupingKeys, this.data, y);\n }\n if (layer instanceof BinnedDotsLayer) {\n return getBinnedDotsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof PairedPointsLayer) {\n return getPairedPointsData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof SinaLayer) {\n return getSinaData(layer, groupingKeys, this.data, y, yAxis);\n }\n if (layer instanceof LogoPlotLayer) {\n return getLogoData(layer, groupingKeys, this.data, y);\n }\n throw new Error('Unknown layer type');\n });\n const statsLayersData = layers\n .filter(layer => layer instanceof StatLayer)\n .map(layer => {\n if (primaryGrouping.value === null) {\n throw new Error('Cannot calculate p-value without data grouping');\n }\n return getStatsData(layer as StatLayer, groupingKeys.facet, groupingKeys.primary, y, this.data);\n });\n this.calculatedData = {\n layersData,\n statsLayersData,\n primaryGrouping,\n secondaryGrouping,\n facetKeyLists,\n nonEmptyGroupsByFacets,\n onlyPositive,\n };\n }\n\n _updateAesInData() {\n if (this.calculatedData === null) {\n return;\n }\n const {layers, facetBy, primaryGrouping, secondaryGrouping, facetSettings} = this.settings;\n\n // updating aes in layers (except for stat layers with p-value), layers data is not recalculating\n const noStatLayers = layers.filter(layer => !(layer instanceof StatLayer));\n for (let i = 0; i < noStatLayers.length; i++) {\n const layer = noStatLayers[i];\n if ('aes' in layer) {\n this.calculatedData.layersData[i].aes = layer.aes;\n }\n }\n\n // updating grouping to update linked aes\n this.calculatedData.primaryGrouping = getGroupingData(this.data, primaryGrouping);\n this.calculatedData.secondaryGrouping = getGroupingData(this.data, secondaryGrouping);\n\n // updating for possibly changed facetSettings.order\n this.calculatedData.facetKeyLists = facetBy.length\n ? getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n )\n : [[NO_GROUPED]];\n }\n\n _updateChart() {\n if (!this.calculatedData) {\n return;\n }\n const {id, chartSettings, keyColumn, facetSettings} = this.settings;\n\n const facetKeys = this.calculatedData.facetKeyLists.map(getFacetStringKey);\n const facetLabels = this.calculatedData.facetKeyLists.map(v => v.map(v => v === NO_GROUPED ? 'null' : v)) as string[][];\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n facetKeys,\n facetLabels,\n this.calculatedData.layersData,\n this.calculatedData.statsLayersData,\n keyColumn,\n this.calculatedData.nonEmptyGroupsByFacets,\n this.calculatedData.onlyPositive,\n this.onTooltipHintSwitch\n );\n }\n}\n"],"names":["getGroupingKeys","data","column","order","groupingColumn","availableKeys","intersection","getKeysCombinations","keysLists","result","keys","nextResult","key","resultItem","getGroupingData","grouping","groupingColumnId","groupingColumnLabelId","categories","getValueLabel","category","res","ChartDiscrete","AbstractChart","settings","eventHandlers","__publicField","ChartRenderer","DiscreteSettingsImpl","node","err","previousSettings","previousData","_field","_value","renderToString","prevSettings","_a","_b","_c","_d","_e","_f","_g","_h","arraysAreDifferent","_i","_j","_k","_l","el","idx","l","prevData","prevKeys","chartSettings","y","keyColumn","facetBy","layers","facetSettings","yAxis","onlyPositive","v","primaryGrouping","secondaryGrouping","facetGroupingValues","hasLogoOrBarLayer","MAX_GROUPS_COUNT","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","groupingKeys","nonEmptyGroupsByFacets","facetKey","getFacetStringKey","primaryKey","layersData","layer","StatLayer","BoxLayer","getBoxesData","ViolinLayer","getViolinsData","DotLayer","getDotsData","LineLayer","getLinesData","ErrorBarLayer","getErrorBarsData","BarLayer","getBarsData","StackedBarLayer","getStackedBarsData","StackedAreaLayer","getStackedAreaData","BinnedDotsLayer","getBinnedDotsData","PairedPointsLayer","getPairedPointsData","SinaLayer","getSinaData","LogoPlotLayer","getLogoData","statsLayersData","getStatsData","noStatLayers","i","id","facetKeys","facetLabels"],"mappings":"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","x_google_ignoreList":[0]}
|