@milaboratories/miplots4 1.0.172 → 1.0.173
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/discrete/index.js +20 -20
- package/dist/discrete/index.js.map +1 -1
- package/package.json +1 -1
package/dist/discrete/index.js
CHANGED
|
@@ -104,8 +104,8 @@ class zt extends V {
|
|
|
104
104
|
return this._updateChart(), M.renderToString(this.chartRenderer.component);
|
|
105
105
|
}
|
|
106
106
|
_needUpdateCalculatedDataBySettings(e, t) {
|
|
107
|
-
var r, s, u, c, o, h,
|
|
108
|
-
return e.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((r = e.primaryGrouping) == null ? void 0 : r.columnName.value) ?? "") !== (((s = t.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") || (((u = e.secondaryGrouping) == null ? void 0 : u.columnName.value) ?? "") !== (((c = t.secondaryGrouping) == null ? void 0 : c.columnName.value) ?? "") || (((o = e.primaryGrouping) == null ? void 0 : o.allowNullGroup) ?? "") !== (((h = t.primaryGrouping) == null ? void 0 : h.allowNullGroup) ?? "") || (((
|
|
107
|
+
var r, s, u, c, o, h, m, p, G, d, f, C;
|
|
108
|
+
return e.chartSettings.yAxis.scale !== t.chartSettings.yAxis.scale || (((r = e.primaryGrouping) == null ? void 0 : r.columnName.value) ?? "") !== (((s = t.primaryGrouping) == null ? void 0 : s.columnName.value) ?? "") || (((u = e.secondaryGrouping) == null ? void 0 : u.columnName.value) ?? "") !== (((c = t.secondaryGrouping) == null ? void 0 : c.columnName.value) ?? "") || (((o = e.primaryGrouping) == null ? void 0 : o.allowNullGroup) ?? "") !== (((h = t.primaryGrouping) == null ? void 0 : h.allowNullGroup) ?? "") || (((m = e.secondaryGrouping) == null ? void 0 : m.allowNullGroup) ?? "") !== (((p = t.secondaryGrouping) == null ? void 0 : p.allowNullGroup) ?? "") || I((G = e.primaryGrouping) == null ? void 0 : G.order, (d = t.primaryGrouping) == null ? void 0 : d.order, { ignoreOrder: !0 }) || I((f = e.secondaryGrouping) == null ? void 0 : f.order, (C = t.secondaryGrouping) == null ? void 0 : C.order, { ignoreOrder: !0 }) || e.facetBy.some((i, y) => {
|
|
109
109
|
var L;
|
|
110
110
|
return i.value !== ((L = t.facetBy[y]) == null ? void 0 : L.value);
|
|
111
111
|
}) || e.layers.length !== t.layers.length || e.layers.some((i, y) => !i.isEqualForCalculation(t.layers[y]));
|
|
@@ -119,40 +119,40 @@ class zt extends V {
|
|
|
119
119
|
}
|
|
120
120
|
_updateData() {
|
|
121
121
|
var S, _;
|
|
122
|
-
const { chartSettings: e, y: t, keyColumn: r, facetBy: s, layers: u, facetSettings: c } = this.settings, { yAxis: o } = e, h = this.data.getColumn(t.value).every((a) => a === null || !(Number(a) < 0)),
|
|
123
|
-
if (!((S = this.settings.primaryGrouping) != null && S.unlimitedGroupsCount) &&
|
|
122
|
+
const { chartSettings: e, y: t, keyColumn: r, facetBy: s, layers: u, facetSettings: c } = this.settings, { yAxis: o } = e, h = this.data.getColumn(t.value).every((a) => a === null || !(Number(a) < 0)), m = v(this.data, this.settings.primaryGrouping), p = v(this.data, this.settings.secondaryGrouping), G = s.map((a) => a.value);
|
|
123
|
+
if (!((S = this.settings.primaryGrouping) != null && S.unlimitedGroupsCount) && m.keys.length > w) {
|
|
124
124
|
const a = {
|
|
125
125
|
type: "tooManyPrimaryGroups",
|
|
126
|
-
info: { count:
|
|
126
|
+
info: { count: m.keys.length, maxCount: w }
|
|
127
127
|
};
|
|
128
128
|
throw Error(a.type, { cause: a });
|
|
129
129
|
}
|
|
130
|
-
if (!((_ = this.settings.secondaryGrouping) != null && _.unlimitedGroupsCount) &&
|
|
130
|
+
if (!((_ = this.settings.secondaryGrouping) != null && _.unlimitedGroupsCount) && p.keys.length > w) {
|
|
131
131
|
const a = {
|
|
132
132
|
type: "tooManySecondaryGroups",
|
|
133
|
-
info: { count:
|
|
133
|
+
info: { count: p.keys.length, maxCount: w }
|
|
134
134
|
};
|
|
135
135
|
throw Error(a.type, { cause: a });
|
|
136
136
|
}
|
|
137
|
-
|
|
137
|
+
let d = K(
|
|
138
138
|
s.map((a) => {
|
|
139
139
|
var g;
|
|
140
140
|
return R(this.data, a, (g = c == null ? void 0 : c.order) == null ? void 0 : g[a.value]);
|
|
141
141
|
})
|
|
142
|
-
)
|
|
143
|
-
if (
|
|
142
|
+
);
|
|
143
|
+
if (d.length === 0 && (d = [[E]]), d.length > A) {
|
|
144
144
|
const a = {
|
|
145
145
|
type: "tooManyFacets",
|
|
146
|
-
info: { count:
|
|
146
|
+
info: { count: d.length, maxCount: A }
|
|
147
147
|
};
|
|
148
148
|
throw Error(a.type, { cause: a });
|
|
149
149
|
}
|
|
150
|
-
const f =
|
|
151
|
-
this.data.setGrouping([...G,
|
|
150
|
+
const f = d.map(x), C = ft(this.data, s, f, d);
|
|
151
|
+
this.data.setGrouping([...G, m.value, p.value]);
|
|
152
152
|
const i = {
|
|
153
|
-
facet:
|
|
154
|
-
primary:
|
|
155
|
-
secondary:
|
|
153
|
+
facet: d,
|
|
154
|
+
primary: m.value !== null ? m.keys : [E],
|
|
155
|
+
secondary: p.value !== null ? p.keys : [E]
|
|
156
156
|
}, y = i.facet.reduce((a, g) => (a[x(g)] = i.primary.filter(
|
|
157
157
|
(O) => this.data.getRowsByGrouping([...g, O]).length > 0
|
|
158
158
|
).map(String), a), {}), L = u.filter((a) => !(a instanceof B)).map((a) => {
|
|
@@ -182,16 +182,16 @@ class zt extends V {
|
|
|
182
182
|
return mt(a, i, this.data, t);
|
|
183
183
|
throw new Error("Unknown layer type");
|
|
184
184
|
}), U = u.filter((a) => a instanceof B).map((a) => {
|
|
185
|
-
if (
|
|
185
|
+
if (m.value === null)
|
|
186
186
|
throw new Error("Cannot calculate p-value without data grouping");
|
|
187
187
|
return pt(a, i.facet, i.primary, t, this.data);
|
|
188
188
|
});
|
|
189
189
|
this.calculatedData = {
|
|
190
190
|
layersData: L,
|
|
191
191
|
statsLayersData: U,
|
|
192
|
-
primaryGrouping:
|
|
193
|
-
secondaryGrouping:
|
|
194
|
-
facetKeyLists:
|
|
192
|
+
primaryGrouping: m,
|
|
193
|
+
secondaryGrouping: p,
|
|
194
|
+
facetKeyLists: d,
|
|
195
195
|
nonEmptyGroupsByFacets: y,
|
|
196
196
|
onlyPositive: h,
|
|
197
197
|
facetKeys: f,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport {\n type Category, type ColumnName, type DataValue, type DiscreteEventHandlers,\n type DiscreteSettings, type ErrorInfoFacets, type ErrorInfoPrimaryGroups,\n type ErrorInfoSecondaryGroups, getUnknownErrorInfo, type GroupingData, isErrorInfo\n} 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';\nimport { getFacetLabels } from './utils/getFacetLabels';\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 facetKeys: string[];\n facetLabels: Record<string, string[]>;\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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\n if (!this.settings.primaryGrouping?.unlimitedGroupsCount && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoPrimaryGroups = {\n type: 'tooManyPrimaryGroups',\n info: { count: primaryGrouping.keys.length, maxCount: MAX_GROUPS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\n }\n if (!this.settings.secondaryGrouping?.unlimitedGroupsCount && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoSecondaryGroups = {\n type: 'tooManySecondaryGroups',\n info: { count: secondaryGrouping.keys.length, maxCount: MAX_GROUPS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\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 const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: { count: facetKeyLists.length, maxCount: MAX_FACETS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\n }\n const facetKeys = facetKeyLists.map(getFacetStringKey);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeyLists);\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 facetKeys,\n facetLabels\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 const { facetLabels } = this.calculatedData;\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\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","isErrorInfo","getUnknownErrorInfo","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","MAX_GROUPS_COUNT","errorInfo","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","facetKeys","getFacetStringKey","facetLabels","getFacetLabels","groupingKeys","nonEmptyGroupsByFacets","facetKey","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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/discrete/index.ts"],"sourcesContent":["import { intersection } from 'lodash';\nimport { renderToString } from 'react-dom/server.browser';\nimport { AbstractChart } from '../AbstractChart';\nimport type { DataFrame, GroupKey } from '../DataFrame';\nimport { NO_GROUPED } from '../DataFrame';\nimport {\n type Category, type ColumnName, type DataValue, type DiscreteEventHandlers,\n type DiscreteSettings, type ErrorInfoFacets, type ErrorInfoPrimaryGroups,\n type ErrorInfoSecondaryGroups, getUnknownErrorInfo, type GroupingData, isErrorInfo\n} 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';\nimport { getFacetLabels } from './utils/getFacetLabels';\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 facetKeys: string[];\n facetLabels: Record<string, string[]>;\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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 this.errorInfo = null;\n } catch (err) {\n this.hasError = true;\n if (err instanceof Error) {\n this.errorInfo = isErrorInfo(err.cause) ? err.cause : getUnknownErrorInfo(err);\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\n if (!this.settings.primaryGrouping?.unlimitedGroupsCount && primaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoPrimaryGroups = {\n type: 'tooManyPrimaryGroups',\n info: { count: primaryGrouping.keys.length, maxCount: MAX_GROUPS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\n }\n if (!this.settings.secondaryGrouping?.unlimitedGroupsCount && secondaryGrouping.keys.length > MAX_GROUPS_COUNT) {\n const errorInfo: ErrorInfoSecondaryGroups = {\n type: 'tooManySecondaryGroups',\n info: { count: secondaryGrouping.keys.length, maxCount: MAX_GROUPS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\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 let facetKeyLists: (GroupKey)[][] = getKeysCombinations(\n facetBy.map(column => getGroupingKeys(this.data, column, facetSettings?.order?.[column.value]))\n );\n if (facetKeyLists.length === 0) {\n facetKeyLists = [[NO_GROUPED]];\n }\n if (facetKeyLists.length > MAX_FACETS_COUNT) {\n const errorInfo: ErrorInfoFacets = {\n type: 'tooManyFacets',\n info: { count: facetKeyLists.length, maxCount: MAX_FACETS_COUNT }\n };\n throw Error(errorInfo.type, { cause: errorInfo });\n }\n const facetKeys = facetKeyLists.map(getFacetStringKey);\n const facetLabels = getFacetLabels(this.data, facetBy, facetKeys, facetKeyLists);\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 facetKeys,\n facetLabels\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 const { facetLabels } = this.calculatedData;\n\n this.chartRenderer.render(\n this.data,\n id,\n chartSettings,\n this.calculatedData.primaryGrouping,\n this.calculatedData.secondaryGrouping,\n facetSettings,\n this.calculatedData.facetKeys,\n this.calculatedData.facetKeys.map(key => facetLabels[key]),\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","isErrorInfo","getUnknownErrorInfo","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","MAX_GROUPS_COUNT","errorInfo","facetKeyLists","NO_GROUPED","MAX_FACETS_COUNT","facetKeys","getFacetStringKey","facetLabels","getFacetLabels","groupingKeys","nonEmptyGroupsByFacets","facetKey","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"],"mappings":"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"}
|