@milaboratories/graph-maker 1.1.150 → 1.1.152
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.map +1 -1
- package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js +2 -1
- package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js.map +1 -1
- package/dist/GraphMaker/components/Chart.vue.js +3 -3
- package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.d.ts +3 -12
- package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.js +42 -85
- package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.js.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.d.ts +1 -9
- package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.js +44 -89
- package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.js.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.d.ts +1 -3
- package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.js +68 -86
- package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.js.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.d.ts +7 -11
- package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.d.ts.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.js +48 -91
- package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.js.map +1 -1
- package/dist/GraphMaker/components/DragAndDrop/types.d.ts +1 -21
- package/dist/GraphMaker/components/DragAndDrop/types.d.ts.map +1 -1
- package/dist/GraphMaker/components/PlColorSliderThumb.vue.js +18 -18
- package/dist/GraphMaker/components/PlColorSliderThumb.vue.js.map +1 -1
- package/dist/GraphMaker/constantsCommon.d.ts +0 -1
- package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
- package/dist/GraphMaker/constantsCommon.js +95 -95
- package/dist/GraphMaker/constantsCommon.js.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.d.ts.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.js +128 -166
- package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.js.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/useBaskets.d.ts.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/useBaskets.js +93 -131
- package/dist/GraphMaker/forms/DataMappingForm/useBaskets.js.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/utils.d.ts +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/utils.d.ts.map +1 -1
- package/dist/GraphMaker/forms/DataMappingForm/utils.js +79 -155
- package/dist/GraphMaker/forms/DataMappingForm/utils.js.map +1 -1
- package/dist/GraphMaker/forms/index.js +2 -2
- package/dist/GraphMaker/forms/index.js.map +1 -1
- package/dist/GraphMaker/icons/StackedAreaIcon.vue.d.ts +3 -0
- package/dist/GraphMaker/icons/StackedAreaIcon.vue.d.ts.map +1 -0
- package/dist/GraphMaker/icons/StackedAreaIcon.vue.js +19 -0
- package/dist/GraphMaker/icons/StackedAreaIcon.vue.js.map +1 -0
- package/dist/GraphMaker/index.vue.js +1 -1
- package/dist/GraphMaker/store.d.ts.map +1 -1
- package/dist/GraphMaker/store.js +43 -45
- package/dist/GraphMaker/store.js.map +1 -1
- package/dist/GraphMaker/types.d.ts +1 -1
- package/dist/GraphMaker/types.d.ts.map +1 -1
- package/dist/GraphMaker/utils/addFixedOptionsToState.js +2 -2
- package/dist/GraphMaker/utils/addFixedOptionsToState.js.map +1 -1
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js +25 -25
- package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
- package/dist/GraphMaker/utils/loadDefaultSources.d.ts +2 -3
- package/dist/GraphMaker/utils/loadDefaultSources.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadDefaultSources.js +47 -51
- package/dist/GraphMaker/utils/loadDefaultSources.js.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +39 -41
- package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
- package/dist/lib.js +1 -1
- package/dist/node_modules/@milaboratories/helpers/dist/objects.js +33 -0
- package/dist/node_modules/@milaboratories/helpers/dist/objects.js.map +1 -0
- package/dist/node_modules/@milaboratories/helpers/dist/utils.js +12 -0
- package/dist/node_modules/@milaboratories/helpers/dist/utils.js.map +1 -0
- package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +6 -5
- package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +146 -149
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +168 -221
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +95 -102
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +145 -156
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js +68 -75
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +154 -159
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +48 -55
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +114 -122
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +111 -119
- package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +4 -4
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +70 -69
- package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/spec.js +2 -2
- package/dist/node_modules/@milaboratories/pf-plots/dist/spec.js.map +1 -1
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +184 -183
- package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
- package/dist/node_modules/@vueuse/shared/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/node_modules/@milaboratories/helpers/dist/index.js +0 -372
- package/dist/node_modules/@milaboratories/helpers/dist/index.js.map +0 -1
|
@@ -1,75 +1,71 @@
|
|
|
1
1
|
import "../../node_modules/@milaboratories/pf-plots/dist/index.js";
|
|
2
|
-
import { toRaw as
|
|
2
|
+
import { toRaw as V } from "vue";
|
|
3
3
|
import { SUBSET_FILTER_KEY as h } from "../constantsCommon.js";
|
|
4
|
-
import { AxisId as
|
|
5
|
-
function w(
|
|
6
|
-
if (typeof
|
|
4
|
+
import { AxisId as S } from "../../node_modules/@milaboratories/pf-plots/dist/spec.js";
|
|
5
|
+
function w(i, s) {
|
|
6
|
+
if (typeof i > "u")
|
|
7
7
|
return !0;
|
|
8
|
-
const
|
|
9
|
-
return typeof
|
|
8
|
+
const c = Object.keys(i);
|
|
9
|
+
return typeof s > "u" ? c.length === 0 : c.every((n) => s[n]);
|
|
10
10
|
}
|
|
11
|
-
function
|
|
12
|
-
return (
|
|
11
|
+
function T(i, s, c, n) {
|
|
12
|
+
return (s == null ? void 0 : s[h]) === "true" ? "subset" : n !== void 0 ? "range" : c !== void 0 || i === "Int" || i === "String" ? "equals" : "range";
|
|
13
13
|
}
|
|
14
|
-
async function
|
|
15
|
-
const
|
|
16
|
-
for (const { inputName: e, filterType:
|
|
17
|
-
const { name:
|
|
18
|
-
if (
|
|
19
|
-
const
|
|
20
|
-
if (!
|
|
21
|
-
|
|
14
|
+
async function P(i, s, c = !0) {
|
|
15
|
+
const n = [], x = s.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), R = s.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), C = [];
|
|
16
|
+
for (const { inputName: e, filterType: d, selectedSource: m, selectedFilterValues: o, selectedFilterRange: F } of x) {
|
|
17
|
+
const { name: a, valueType: f, annotations: y, domain: p } = m, t = await i.pFrameProvider.findColumnBy(a, f, V(y), V(p)), g = e === "filters" || e === "tabBy" || e === "highlight";
|
|
18
|
+
if (t) {
|
|
19
|
+
const l = await i.pFrameProvider.getColumnSpecById(t);
|
|
20
|
+
if (!g)
|
|
21
|
+
n.push({ inputName: e, selectedSource: t.toCanonicalString() });
|
|
22
22
|
else {
|
|
23
|
-
const
|
|
24
|
-
|
|
23
|
+
const r = d ?? T(f, l == null ? void 0 : l.annotations, o, F), v = r === "equals" && typeof o > "u" ? [(await i.pFrameProvider.getColumnUniqueValues(t, 1)).values[0]] : o, u = { min: void 0, max: void 0, ...F };
|
|
24
|
+
n.push({
|
|
25
25
|
inputName: e,
|
|
26
|
-
filterType:
|
|
27
|
-
selectedSource:
|
|
28
|
-
|
|
29
|
-
selectedFilterRange:
|
|
30
|
-
fixedAxes: g
|
|
26
|
+
filterType: r,
|
|
27
|
+
selectedSource: t.toCanonicalString(),
|
|
28
|
+
selectedFilterValues: v,
|
|
29
|
+
selectedFilterRange: u
|
|
31
30
|
});
|
|
32
31
|
}
|
|
33
|
-
C.push(...(
|
|
32
|
+
C.push(...(l == null ? void 0 : l.axesSpec.map((r) => ({ spec: r, parentColumn: t }))) ?? []);
|
|
34
33
|
} else
|
|
35
|
-
console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource:
|
|
34
|
+
console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: m })}`);
|
|
36
35
|
}
|
|
37
|
-
for (const { inputName: e, selectedSource:
|
|
38
|
-
const a =
|
|
39
|
-
if (
|
|
36
|
+
for (const { inputName: e, selectedSource: d, filterType: m, selectedFilterValues: o, selectedFilterRange: F } of R) {
|
|
37
|
+
const a = S.fromAxisSpec(d), f = a.toCanonicalString(), y = e === "filters" || e === "tabBy" || e === "highlight", p = y ? m ?? T(a.type, d == null ? void 0 : d.annotations) : void 0, t = C.find((r) => S.fromAxisSpec(r.spec).toCanonicalString() === f), g = y && p === "equals" && typeof o > "u" && (t != null && t.parentColumn) ? [(await i.pFrameProvider.getAxisUniqueValues(a, [t == null ? void 0 : t.parentColumn], 1)).values[0]] : o, l = { min: void 0, max: void 0, ...F };
|
|
38
|
+
if (c || n.push({
|
|
40
39
|
inputName: e,
|
|
41
|
-
filterType:
|
|
42
|
-
selectedSource:
|
|
43
|
-
|
|
44
|
-
selectedFilterRange:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
l.push({
|
|
40
|
+
filterType: p,
|
|
41
|
+
selectedSource: f,
|
|
42
|
+
selectedFilterValues: g,
|
|
43
|
+
selectedFilterRange: l
|
|
44
|
+
}), t)
|
|
45
|
+
n.push({
|
|
48
46
|
inputName: e,
|
|
49
|
-
filterType:
|
|
50
|
-
selectedSource:
|
|
51
|
-
|
|
52
|
-
selectedFilterRange:
|
|
53
|
-
fixedAxes: []
|
|
47
|
+
filterType: p,
|
|
48
|
+
selectedSource: f,
|
|
49
|
+
selectedFilterValues: g,
|
|
50
|
+
selectedFilterRange: l
|
|
54
51
|
});
|
|
55
52
|
else {
|
|
56
|
-
const { spec:
|
|
57
|
-
if (
|
|
58
|
-
const
|
|
59
|
-
|
|
53
|
+
const { spec: r, parentColumn: v } = C.find((u) => a.name === u.spec.name && a.type === u.spec.type && w(a.domain, u.spec.domain)) ?? {};
|
|
54
|
+
if (r) {
|
|
55
|
+
const u = (e === "filters" || e === "tabBy") && typeof o > "u" ? [(await i.pFrameProvider.getAxisUniqueValues(S.fromAxisSpec(r), [v], 1)).values[0]] : o;
|
|
56
|
+
n.push({
|
|
60
57
|
inputName: e,
|
|
61
|
-
filterType:
|
|
62
|
-
selectedSource:
|
|
63
|
-
|
|
64
|
-
selectedFilterRange:
|
|
65
|
-
fixedAxes: []
|
|
58
|
+
filterType: p,
|
|
59
|
+
selectedSource: S.fromAxisSpec(r).toCanonicalString(),
|
|
60
|
+
selectedFilterValues: u,
|
|
61
|
+
selectedFilterRange: l
|
|
66
62
|
});
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
65
|
}
|
|
70
|
-
return
|
|
66
|
+
return n;
|
|
71
67
|
}
|
|
72
68
|
export {
|
|
73
|
-
|
|
69
|
+
P as loadDefaultSources
|
|
74
70
|
};
|
|
75
71
|
//# sourceMappingURL=loadDefaultSources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadDefaultSources.js","sources":["../../../src/GraphMaker/utils/loadDefaultSources.ts"],"sourcesContent":["import {\n AxisId,\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n SelectorStateFilter, SelectorStateSimple\n} from '@milaboratories/pf-plots';\nimport { PredefinedGraphOption } from '../types';\nimport { AxisSpec, PColumnSpec, ValueType } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { SUBSET_FILTER_KEY } from '../constantsCommon';\n\ntype LoadedDefaultOptions<T extends ChartType> = {\n inputName: InputNamesByChartType[T],\n selectedSource: string,\n fixedAxes: SelectorStateSimple['fixedAxes'],\n filterType?: SelectorStateFilter['type']\n selectedFilterRange?: SelectorStateFilter['selectedFilterRange']\n selectedFilterValue?: SelectorStateFilter['selectedFilterValue']\n}\n\nfunction domainIsCompatible(domain?:Record<string, string>, otherDomain?:Record<string, string>):boolean {\n if (typeof domain === 'undefined') {\n return true;\n }\n const keys = Object.keys(domain);\n if (typeof otherDomain === 'undefined') {\n return keys.length === 0;\n }\n return keys.every((key) => otherDomain[key]);\n}\n\nfunction getDefaultFilterType(\n valueType:ValueType,\n annotations?:Record<string, string>,\n selectedFilterValue?: SelectorStateFilter['selectedFilterValue'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>\n):SelectorStateFilter['type'] {\n if (annotations?.[SUBSET_FILTER_KEY] === 'true') {\n return 'subset';\n }\n if (selectedFilterRange !== undefined) {\n return 'range';\n }\n if (selectedFilterValue !== undefined) {\n return 'equals';\n }\n if (valueType === 'Int' || valueType === 'String') {\n return 'equals';\n }\n return 'range';\n}\nexport async function loadDefaultSources (\n dataStore:DemoDataStore,\n defaultOptions:PredefinedGraphOption<ChartType>[],\n considerAxisDomains = true,\n):Promise<LoadedDefaultOptions<ChartType>[]> {\n const result:LoadedDefaultOptions<ChartType>[] = []\n const defaultColumnStates = defaultOptions.filter(({ selectedSource }) => 'kind' in selectedSource && selectedSource.kind === 'PColumn');\n const defaultAxisStates = defaultOptions.filter(({ selectedSource }) => !('kind' in selectedSource && selectedSource.kind === 'PColumn'));\n\n const allowedAxisSpecs = [] as {spec: AxisSpec, parentColumn:ColumnId}[]; // if default options contain axes - they should be in other default columns\n\n for (const { inputName, filterType, selectedSource, selectedFilterValue, selectedFilterRange, fixedAxes } of defaultColumnStates) {\n const { name, valueType, annotations, domain } = selectedSource as PColumnSpec;\n const columnId = await dataStore.pFrameProvider.findColumnBy(name, valueType, toRaw(annotations), toRaw(domain));\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n if (columnId) {\n const spec = await dataStore.pFrameProvider.getColumnSpecById(columnId);\n const fixedAxesFilled:SelectorStateSimple['fixedAxes'] = spec && fixedAxes ? fixedAxes.map((el) => ({axisIdx: el.axisIdx, axisValue: el.axisValue, axisSource: AxisId.fromAxisSpec(spec?.axesSpec[el.axisIdx]).toCanonicalString()})) : [];\n if (!isFilter) {\n result.push({ inputName, selectedSource: columnId.toCanonicalString(), fixedAxes: fixedAxesFilled});\n } else {\n const defaultFilterType = filterType ?? getDefaultFilterType(valueType, spec?.annotations, selectedFilterValue, selectedFilterRange);\n const defaultSelectedFilterValue = defaultFilterType === 'equals' && typeof selectedFilterValue === 'undefined'\n ? (await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1)).values[0]\n : selectedFilterValue;\n const defaultFilterRange = {min: undefined, max: undefined, ...selectedFilterRange};\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: columnId.toCanonicalString(),\n selectedFilterValue: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n fixedAxes: fixedAxesFilled\n });\n }\n\n allowedAxisSpecs.push(...spec?.axesSpec.map((spec) => ({spec, parentColumn:columnId})) ?? []);\n } else {\n console.warn(`Not found column for default option: ${JSON.stringify({inputName, selectedSource})}`)\n }\n }\n for (const { inputName, selectedSource, filterType, selectedFilterValue, selectedFilterRange } of defaultAxisStates) {\n const axisId = AxisId.fromAxisSpec(selectedSource as AxisSpec);\n const axisSourceStr = axisId.toCanonicalString();\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n const defaultFilterType = isFilter ? filterType ?? getDefaultFilterType(axisId.type, selectedSource?.annotations) : undefined;\n\n const columnWithExistingAxis = allowedAxisSpecs.find((el) => AxisId.fromAxisSpec(el.spec).toCanonicalString() === axisSourceStr) ;\n const defaultSelectedFilterValue = isFilter && defaultFilterType === 'equals' && typeof selectedFilterValue === 'undefined' && columnWithExistingAxis?.parentColumn\n ? (await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [columnWithExistingAxis?.parentColumn], 1)).values[0]\n : selectedFilterValue\n const defaultFilterRange = {min: undefined, max: undefined, ...selectedFilterRange};\n\n if (!considerAxisDomains) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValue: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n fixedAxes: []\n });\n }\n if (columnWithExistingAxis) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValue: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n fixedAxes: []\n });\n } else {\n const { spec: allowedCompatibleAxisSpec, parentColumn } = allowedAxisSpecs.find((el) => {\n return axisId.name === el.spec.name && axisId.type === el.spec.type && domainIsCompatible(axisId.domain, el.spec.domain);\n }) ?? {};\n if (allowedCompatibleAxisSpec) {\n const defaultSelectedFilterValue = (inputName === 'filters' || inputName === 'tabBy') && typeof selectedFilterValue === 'undefined'\n ? (await dataStore.pFrameProvider.getAxisUniqueValues(AxisId.fromAxisSpec(allowedCompatibleAxisSpec), [parentColumn as ColumnId], 1)).values[0]\n : selectedFilterValue\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: AxisId.fromAxisSpec(allowedCompatibleAxisSpec).toCanonicalString(),\n selectedFilterValue: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n fixedAxes: []\n });\n }\n }\n }\n\n return result;\n}"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","annotations","selectedFilterValue","selectedFilterRange","SUBSET_FILTER_KEY","loadDefaultSources","dataStore","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","inputName","filterType","fixedAxes","name","columnId","toRaw","isFilter","spec","fixedAxesFilled","el","AxisId","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","axisId","axisSourceStr","columnWithExistingAxis","allowedCompatibleAxisSpec","parentColumn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadDefaultSources.js","sources":["../../../src/GraphMaker/utils/loadDefaultSources.ts"],"sourcesContent":["import {\n AxisId,\n ChartType,\n ColumnId,\n DemoDataStore,\n InputNamesByChartType,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport { PredefinedGraphOption } from '../types';\nimport { AxisSpec, PColumnSpec, ValueType } from '@platforma-sdk/model';\nimport { toRaw } from 'vue';\nimport { SUBSET_FILTER_KEY } from '../constantsCommon';\n\ntype LoadedDefaultOptions<T extends ChartType> = {\n inputName: InputNamesByChartType[T],\n selectedSource: string,\n filterType?: SelectorStateFilter['type']\n selectedFilterRange?: SelectorStateFilter['selectedFilterRange']\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues']\n}\n\nfunction domainIsCompatible(domain?:Record<string, string>, otherDomain?:Record<string, string>):boolean {\n if (typeof domain === 'undefined') {\n return true;\n }\n const keys = Object.keys(domain);\n if (typeof otherDomain === 'undefined') {\n return keys.length === 0;\n }\n return keys.every((key) => otherDomain[key]);\n}\n\nfunction getDefaultFilterType(\n valueType:ValueType,\n annotations?:Record<string, string>,\n selectedFilterValues?: SelectorStateFilter['selectedFilterValues'],\n selectedFilterRange?: Partial<SelectorStateFilter['selectedFilterRange']>\n):SelectorStateFilter['type'] {\n if (annotations?.[SUBSET_FILTER_KEY] === 'true') {\n return 'subset';\n }\n if (selectedFilterRange !== undefined) {\n return 'range';\n }\n if (selectedFilterValues !== undefined) {\n return 'equals';\n }\n if (valueType === 'Int' || valueType === 'String') {\n return 'equals';\n }\n return 'range';\n}\nexport async function loadDefaultSources (\n dataStore:DemoDataStore,\n defaultOptions:PredefinedGraphOption<ChartType>[],\n considerAxisDomains = true,\n):Promise<LoadedDefaultOptions<ChartType>[]> {\n const result:LoadedDefaultOptions<ChartType>[] = []\n const defaultColumnStates = defaultOptions.filter(({ selectedSource }) => 'kind' in selectedSource && selectedSource.kind === 'PColumn');\n const defaultAxisStates = defaultOptions.filter(({ selectedSource }) => !('kind' in selectedSource && selectedSource.kind === 'PColumn'));\n\n const allowedAxisSpecs = [] as {spec: AxisSpec, parentColumn:ColumnId}[]; // if default options contain axes - they should be in other default columns\n\n for (const { inputName, filterType, selectedSource, selectedFilterValues, selectedFilterRange } of defaultColumnStates) {\n const { name, valueType, annotations, domain } = selectedSource as PColumnSpec;\n const columnId = await dataStore.pFrameProvider.findColumnBy(name, valueType, toRaw(annotations), toRaw(domain));\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n if (columnId) {\n const spec = await dataStore.pFrameProvider.getColumnSpecById(columnId);\n if (!isFilter) {\n result.push({ inputName, selectedSource: columnId.toCanonicalString()});\n } else {\n const defaultFilterType = filterType ?? getDefaultFilterType(valueType, spec?.annotations, selectedFilterValues, selectedFilterRange);\n const defaultSelectedFilterValue = defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined'\n ? [(await dataStore.pFrameProvider.getColumnUniqueValues(columnId, 1)).values[0]]\n : selectedFilterValues;\n const defaultFilterRange = {min: undefined, max: undefined, ...selectedFilterRange};\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: columnId.toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n\n allowedAxisSpecs.push(...spec?.axesSpec.map((spec) => ({spec, parentColumn:columnId})) ?? []);\n } else {\n console.warn(`Not found column for default option: ${JSON.stringify({inputName, selectedSource})}`)\n }\n }\n for (const { inputName, selectedSource, filterType, selectedFilterValues, selectedFilterRange } of defaultAxisStates) {\n const axisId = AxisId.fromAxisSpec(selectedSource as AxisSpec);\n const axisSourceStr = axisId.toCanonicalString();\n const isFilter = inputName === 'filters' || inputName === 'tabBy' || inputName === 'highlight';\n const defaultFilterType = isFilter ? filterType ?? getDefaultFilterType(axisId.type, selectedSource?.annotations) : undefined;\n\n const columnWithExistingAxis = allowedAxisSpecs.find((el) => AxisId.fromAxisSpec(el.spec).toCanonicalString() === axisSourceStr) ;\n const defaultSelectedFilterValues = isFilter && defaultFilterType === 'equals' && typeof selectedFilterValues === 'undefined' && columnWithExistingAxis?.parentColumn\n ? [(await dataStore.pFrameProvider.getAxisUniqueValues(axisId, [columnWithExistingAxis?.parentColumn], 1)).values[0]]\n : selectedFilterValues\n const defaultFilterRange = {min: undefined, max: undefined, ...selectedFilterRange};\n\n if (!considerAxisDomains) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n if (columnWithExistingAxis) {\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: axisSourceStr,\n selectedFilterValues: defaultSelectedFilterValues,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n } else {\n const { spec: allowedCompatibleAxisSpec, parentColumn } = allowedAxisSpecs.find((el) => {\n return axisId.name === el.spec.name && axisId.type === el.spec.type && domainIsCompatible(axisId.domain, el.spec.domain);\n }) ?? {};\n if (allowedCompatibleAxisSpec) {\n const defaultSelectedFilterValue = (inputName === 'filters' || inputName === 'tabBy') && typeof selectedFilterValues === 'undefined'\n ? [(await dataStore.pFrameProvider.getAxisUniqueValues(AxisId.fromAxisSpec(allowedCompatibleAxisSpec), [parentColumn as ColumnId], 1)).values[0]]\n : selectedFilterValues\n result.push({\n inputName,\n filterType: defaultFilterType,\n selectedSource: AxisId.fromAxisSpec(allowedCompatibleAxisSpec).toCanonicalString(),\n selectedFilterValues: defaultSelectedFilterValue,\n selectedFilterRange: defaultFilterRange as SelectorStateFilter['selectedFilterRange'],\n });\n }\n }\n }\n\n return result;\n}"],"names":["domainIsCompatible","domain","otherDomain","keys","key","getDefaultFilterType","valueType","annotations","selectedFilterValues","selectedFilterRange","SUBSET_FILTER_KEY","loadDefaultSources","dataStore","defaultOptions","considerAxisDomains","result","defaultColumnStates","selectedSource","defaultAxisStates","allowedAxisSpecs","inputName","filterType","name","columnId","toRaw","isFilter","spec","defaultFilterType","defaultSelectedFilterValue","defaultFilterRange","axisId","AxisId","axisSourceStr","columnWithExistingAxis","el","defaultSelectedFilterValues","allowedCompatibleAxisSpec","parentColumn"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadUniqueValuesToSave.d.ts","sourceRoot":"","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loadUniqueValuesToSave.d.ts","sourceRoot":"","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAoB,MAAM,UAAU,CAAC;AACrE,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,mBAAmB,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAqBnD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CA+GlC;AACD,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,EACxB,oBAAoB,EAAE,uBAAuB,GAC5C,OAAO,CAAC,uBAAuB,CAAC,CAgDlC;AAED,wBAAsB,wBAAwB,CAC5C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAyBrC"}
|
|
@@ -1,93 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
const A = 100, T = ["primaryGrouping", "secondaryGrouping"], y = ["grouping"], I = ["x", "y"], R = ["grouping"], b = [
|
|
1
|
+
const v = ["primaryGrouping", "secondaryGrouping"], g = ["grouping"], T = ["x", "y"], I = ["grouping"], y = [
|
|
3
2
|
"nodeColor",
|
|
4
3
|
"nodeShape",
|
|
5
4
|
"lineColor",
|
|
6
5
|
"heatmapAnnotation"
|
|
7
6
|
// dendro
|
|
8
|
-
],
|
|
9
|
-
async function
|
|
10
|
-
const
|
|
7
|
+
], L = (o) => o.sort((l, S) => l.label.localeCompare(S.label, "en", { numeric: !0 }));
|
|
8
|
+
async function R(o, l, S, E, f) {
|
|
9
|
+
const u = {};
|
|
11
10
|
function i(s, e) {
|
|
12
|
-
const t = o.data.byColumns.values[s], n = e ? o.data.byColumns.values[e] : null,
|
|
13
|
-
for (let
|
|
14
|
-
const r = String(t[
|
|
15
|
-
if (
|
|
11
|
+
const t = o.data.byColumns.values[s], n = e ? o.data.byColumns.values[e] : null, p = /* @__PURE__ */ new Set(), _ = [];
|
|
12
|
+
for (let a = 0; a < t.length; a++) {
|
|
13
|
+
const r = String(t[a]);
|
|
14
|
+
if (p.has(r))
|
|
16
15
|
continue;
|
|
17
|
-
if (
|
|
18
|
-
|
|
16
|
+
if (p.size === 100) {
|
|
17
|
+
u[s] = null;
|
|
19
18
|
return;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
20
|
+
p.add(r);
|
|
21
|
+
const A = n ? String(n[a]) : r;
|
|
22
|
+
_.push({ value: r, label: A });
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
list:
|
|
27
|
-
labels:
|
|
28
|
-
options:
|
|
24
|
+
L(_), u[s] = {
|
|
25
|
+
list: _.map((a) => a.value),
|
|
26
|
+
labels: _.reduce((a, r) => (a[r.value] = r.label, a), {}),
|
|
27
|
+
options: _
|
|
29
28
|
};
|
|
30
29
|
}
|
|
31
|
-
o.settings.type === "discrete" &&
|
|
30
|
+
o.settings.type === "discrete" && v.forEach((s) => {
|
|
32
31
|
const e = o.settings[s];
|
|
33
32
|
if (e) {
|
|
34
33
|
const { columnName: t } = e;
|
|
35
34
|
i(t.value, t.valueLabels);
|
|
36
35
|
}
|
|
37
|
-
}), (o.settings.type === "scatterplot" || o.settings.type === "scatterplot-umap") && (
|
|
36
|
+
}), (o.settings.type === "scatterplot" || o.settings.type === "scatterplot-umap") && (T.forEach((s) => {
|
|
38
37
|
const e = o.settings[s];
|
|
39
38
|
e && l.getSourceInfo(e.value).type === "String" && i(e.value, e.valueLabels);
|
|
40
|
-
}),
|
|
39
|
+
}), g.forEach((s) => {
|
|
41
40
|
const e = o.settings[s];
|
|
42
41
|
e == null || e.forEach(({ columnName: t }) => {
|
|
43
42
|
const n = l.getSourceInfo(t.value).type;
|
|
44
43
|
(n === "String" || n === "Int" || n === "Long") && i(t.value, t.valueLabels);
|
|
45
44
|
});
|
|
46
|
-
})), o.settings.type === "histogram" &&
|
|
45
|
+
})), o.settings.type === "histogram" && I.forEach((s) => {
|
|
47
46
|
const e = o.settings[s];
|
|
48
47
|
e && i(e.value, e.valueLabels);
|
|
49
|
-
}), o.settings.type === "dendro" &&
|
|
48
|
+
}), o.settings.type === "dendro" && y.forEach((s) => {
|
|
50
49
|
const e = o.settings[s];
|
|
51
50
|
e && i(e.value, e.valueLabels);
|
|
52
51
|
});
|
|
53
52
|
const c = [];
|
|
54
|
-
[...l.
|
|
55
|
-
var t, n, S;
|
|
53
|
+
[...l.fullOptionsSet].forEach((s) => {
|
|
56
54
|
const e = l.getSourceInfo(s);
|
|
57
|
-
e.kind === "axis" &&
|
|
55
|
+
e.kind === "axis" && e.isNonHomogenous && c.push(s);
|
|
58
56
|
});
|
|
59
57
|
for (const s of c)
|
|
60
|
-
if (!
|
|
61
|
-
if (f[s] && !
|
|
62
|
-
|
|
63
|
-
else if (
|
|
64
|
-
const e = await
|
|
65
|
-
e.overflow ?
|
|
58
|
+
if (!u[s]) {
|
|
59
|
+
if (f[s] && !u[s])
|
|
60
|
+
u[s] = f[s];
|
|
61
|
+
else if (E) {
|
|
62
|
+
const e = await S.getUniqueSourceValuesWithLabels(E, l, s, 100);
|
|
63
|
+
e.overflow ? u[s] = null : u[s] = {
|
|
66
64
|
list: e.values.map((t) => t.value),
|
|
67
65
|
options: e.values,
|
|
68
66
|
labels: e.values.reduce((t, n) => (t[n.value] = n.label, t), {})
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
69
|
}
|
|
72
|
-
return
|
|
70
|
+
return u;
|
|
73
71
|
}
|
|
74
|
-
async function
|
|
72
|
+
async function U(o, l, S, E) {
|
|
75
73
|
const f = [];
|
|
76
74
|
["filters", "tabBy"].forEach((c) => {
|
|
77
75
|
const s = o[c];
|
|
78
76
|
if (s)
|
|
79
|
-
for (const { selectedSource: e,
|
|
77
|
+
for (const { selectedSource: e, selectedFilterValues: t, type: n } of s.selectorStates)
|
|
80
78
|
c === "filters" && n === "equals" && t ? f.push([e, t]) : t && f.push([e, t]);
|
|
81
79
|
});
|
|
82
80
|
const i = {};
|
|
83
|
-
for (const [c, s] of f)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
for (const [c, s] of f)
|
|
82
|
+
(await Promise.all(s.map((t) => S.getUniqueSourceValuesWithLabels(E, l, c, 1, void 0, t)))).forEach((t) => {
|
|
83
|
+
t.values.length === 1 && (i[c] = t.values[0]);
|
|
84
|
+
});
|
|
87
85
|
return i;
|
|
88
86
|
}
|
|
89
87
|
export {
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
R as getUniqueValuesFromReadyChartData,
|
|
89
|
+
U as loadFilterLabelsForTitle
|
|
92
90
|
};
|
|
93
91
|
//# sourceMappingURL=loadUniqueValuesToSave.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadUniqueValuesToSave.js","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"sourcesContent":["import { AXIS_NATURE_KEY } from '../constantsCommon';\nimport { UniqueValuesBySourceMap, UniqueValuesData } from '../types';\nimport {\n Controller,\n DemoDataStore,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport { ListOption } from '@platforma-sdk/ui-vue';\nimport { DendroSettings, DiscreteSettings, HistogramSettings, ScatterplotSettings } from '@milaboratories/miplots4';\n\nconst INPUTS_REQUESTING_UNIQUE_VALUES = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', 'x', 'y', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n 'filters', 'highlight', 'tabBy' // all\n] as ((keyof InputState['components'])[]);\nconst SAVED_UNIQUE_VALUES_LIMIT = 100;\n\nconst SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS = ['primaryGrouping', 'secondaryGrouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS = ['grouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_XY = ['x', 'y'];\nconst SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING = ['grouping'];\nconst SAVED_IN_CHART_DATA_DENDRO_GROUPING = [\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation' // dendro\n];\n\nconst sortValues = (values:{value:string, label:string}[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', {numeric: true}))\n\nexport async function getUniqueValuesFromReadyChartData(\n chartData: PlotDataAndSettings,\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap\n): Promise<UniqueValuesBySourceMap> {\n const resultMap:UniqueValuesBySourceMap = {};\n function addUniqueData(sourceId:string, labelId?:string) {\n const data = chartData!.data.byColumns.values[sourceId];\n const dataLabels = labelId ? chartData!.data.byColumns.values[labelId] : null;\n\n const resultSet = new Set();\n const result:{value:string, label:string}[] = [];\n for (let i = 0; i < data.length; i++) {\n const v = String(data[i]);\n if (resultSet.has(v)) {\n continue;\n }\n if (resultSet.size === SAVED_UNIQUE_VALUES_LIMIT) {\n resultMap[sourceId] = null;\n return;\n }\n resultSet.add(v);\n const label = dataLabels ? String(dataLabels[i]) : v;\n result.push({value: v, label});\n }\n sortValues(result);\n resultMap[sourceId] = {\n list: result.map((el) => el.value),\n labels: result.reduce((res, el) => {\n res[el.value] = el.label;\n return res;\n }, {} as Record<string, string>),\n options: result\n };\n }\n if (chartData.settings.type === 'discrete') {\n SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS.forEach((inputName:string) => {\n const savedData = chartData.settings[inputName] as unknown as DiscreteSettings['primaryGrouping'];\n if (savedData) {\n const {columnName} = savedData;\n addUniqueData(columnName.value, columnName.valueLabels)\n }\n });\n }\n if (chartData.settings.type === 'scatterplot' || chartData.settings.type === 'scatterplot-umap') {\n SAVED_IN_CHART_DATA_SCATTERPLOT_XY.forEach((inputName:string) => {\n const columnName = chartData.settings[inputName] as unknown as ScatterplotSettings['x'];\n if (columnName) {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n }\n });\n SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS.forEach((inputName:string) => {\n const savedInGrouping = chartData.settings[inputName] as unknown as ScatterplotSettings['grouping'];\n savedInGrouping?.forEach(({columnName}) => {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String' || valueType === 'Int' || valueType === 'Long') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n });\n });\n }\n\n if (chartData.settings.type === 'histogram') {\n SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as HistogramSettings['grouping'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n if (chartData.settings.type === 'dendro') {\n SAVED_IN_CHART_DATA_DENDRO_GROUPING.forEach((inputName:string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as DendroSettings['heatmapAnnotation'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n // sources for loading\n const selectedSources: string[] = [];\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n\n for (const source of selectedSources) {\n if (resultMap[source]) {\n continue;\n }\n if (previousUniqueValues[source] && !resultMap[source]) {\n resultMap[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n resultMap[source] = null;\n } else {\n resultMap[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return resultMap;\n}\nexport async function loadUniqueValuesToSave(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap // save null for too long lists of unique values\n):Promise<UniqueValuesBySourceMap> {\n const selectedSources: string[] = [];\n INPUTS_REQUESTING_UNIQUE_VALUES.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource } of componentState.selectorStates) {\n const info = inputGuide.getSourceInfo(selectedSource);\n if (inputName === 'filters' || inputName === 'highlight') {\n if (info.type === 'String' || info.type === 'Int' || info.type === 'Long') {\n selectedSources.push(selectedSource);\n }\n } else if (inputName === 'grouping' || inputName === 'x' || inputName === 'y') {\n if (info.type === 'String') {\n selectedSources.push(selectedSource);\n }\n } else {\n selectedSources.push(selectedSource);\n }\n }\n }\n });\n ([...inputGuide.freeOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (\n info.kind === 'axis' &&\n info.annotations?.[AXIS_NATURE_KEY] &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogeneous' &&\n info.annotations?.[AXIS_NATURE_KEY] !== 'homogenous'\n ) {\n selectedSources.push(id);\n }\n });\n ([...inputGuide.axesToBeFixedSet]).forEach(id => {\n selectedSources.push(id);\n });\n const nextUniqueValuesData: UniqueValuesBySourceMap = {};\n for (const source of selectedSources) {\n if (previousUniqueValues[source]) {\n nextUniqueValuesData[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n nextUniqueValuesData[source] = null;\n } else {\n nextUniqueValuesData[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return nextUniqueValuesData;\n}\n\nexport async function loadFilterLabelsForTitle(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n):Promise<Record<string, ListOption>> {\n const selected: [string, string][] = [];\n const INPUTS_REQUESTING_LABELS = ['filters', 'tabBy'] as ((keyof InputState['components'])[]);\n INPUTS_REQUESTING_LABELS.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource, selectedFilterValue, type } of componentState.selectorStates as SelectorStateFilter[]) {\n if (inputName === 'filters' && type === 'equals' && selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n } else if (selectedFilterValue) {\n selected.push([selectedSource, selectedFilterValue]);\n }\n }\n }\n });\n const result:Record<string, ListOption> = {};\n for (const [source, selectedValue] of selected) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, 1, undefined, selectedValue);\n if (uniqueValuesResponse.values.length === 1) {\n result[source] = uniqueValuesResponse.values[0];\n }\n }\n return result;\n}"],"names":["SAVED_UNIQUE_VALUES_LIMIT","SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_XY","SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING","SAVED_IN_CHART_DATA_DENDRO_GROUPING","sortValues","values","a","b","getUniqueValuesFromReadyChartData","chartData","inputGuide","controller","dataStore","previousUniqueValues","resultMap","addUniqueData","sourceId","labelId","data","dataLabels","resultSet","result","i","v","label","el","res","inputName","savedData","columnName","savedInGrouping","valueType","savedByInputName","selectedSources","id","info","_a","AXIS_NATURE_KEY","_b","_c","source","uniqueValuesResponse","loadFilterLabelsForTitle","optionsState","selected","componentState","selectedSource","selectedFilterValue","type","selectedValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loadUniqueValuesToSave.js","sources":["../../../src/GraphMaker/utils/loadUniqueValuesToSave.ts"],"sourcesContent":["import { UniqueValuesBySourceMap, UniqueValuesData } from '../types';\nimport {\n Controller,\n DemoDataStore,\n InputGuide,\n InputState,\n PlotDataAndSettings,\n SelectorStateFilter\n} from '@milaboratories/pf-plots';\nimport { ListOption } from '@platforma-sdk/ui-vue';\nimport { DendroSettings, DiscreteSettings, HistogramSettings, ScatterplotSettings } from '@milaboratories/miplots4';\n\nconst INPUTS_REQUESTING_UNIQUE_VALUES = [\n 'primaryGrouping', 'secondaryGrouping', // discrete charts\n 'grouping', 'shape', 'x', 'y', // scatterplot\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation', // dendro\n 'filters', 'highlight', 'tabBy' // all\n] as ((keyof InputState['components'])[]);\nconst SAVED_UNIQUE_VALUES_LIMIT = 100;\n\nconst SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS = ['primaryGrouping', 'secondaryGrouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS = ['grouping'];\nconst SAVED_IN_CHART_DATA_SCATTERPLOT_XY = ['x', 'y'];\nconst SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING = ['grouping'];\nconst SAVED_IN_CHART_DATA_DENDRO_GROUPING = [\n 'nodeColor', 'nodeShape', 'lineColor', 'heatmapAnnotation' // dendro\n];\n\nconst sortValues = (values: { value: string, label: string }[]) => values.sort((a, b) => a.label.localeCompare(b.label, 'en', { numeric: true }))\n\nexport async function getUniqueValuesFromReadyChartData(\n chartData: PlotDataAndSettings,\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap\n): Promise<UniqueValuesBySourceMap> {\n const resultMap: UniqueValuesBySourceMap = {};\n function addUniqueData(sourceId: string, labelId?: string) {\n const data = chartData!.data.byColumns.values[sourceId];\n const dataLabels = labelId ? chartData!.data.byColumns.values[labelId] : null;\n\n const resultSet = new Set();\n const result: { value: string, label: string }[] = [];\n for (let i = 0; i < data.length; i++) {\n const v = String(data[i]);\n if (resultSet.has(v)) {\n continue;\n }\n if (resultSet.size === SAVED_UNIQUE_VALUES_LIMIT) {\n resultMap[sourceId] = null;\n return;\n }\n resultSet.add(v);\n const label = dataLabels ? String(dataLabels[i]) : v;\n result.push({ value: v, label });\n }\n sortValues(result);\n resultMap[sourceId] = {\n list: result.map((el) => el.value),\n labels: result.reduce((res, el) => {\n res[el.value] = el.label;\n return res;\n }, {} as Record<string, string>),\n options: result\n };\n }\n if (chartData.settings.type === 'discrete') {\n SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS.forEach((inputName: string) => {\n const savedData = chartData.settings[inputName] as unknown as DiscreteSettings['primaryGrouping'];\n if (savedData) {\n const { columnName } = savedData;\n addUniqueData(columnName.value, columnName.valueLabels)\n }\n });\n }\n if (chartData.settings.type === 'scatterplot' || chartData.settings.type === 'scatterplot-umap') {\n SAVED_IN_CHART_DATA_SCATTERPLOT_XY.forEach((inputName: string) => {\n const columnName = chartData.settings[inputName] as unknown as ScatterplotSettings['x'];\n if (columnName) {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n }\n });\n SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS.forEach((inputName: string) => {\n const savedInGrouping = chartData.settings[inputName] as unknown as ScatterplotSettings['grouping'];\n savedInGrouping?.forEach(({ columnName }) => {\n const valueType = inputGuide.getSourceInfo(columnName.value).type;\n if (valueType === 'String' || valueType === 'Int' || valueType === 'Long') {\n addUniqueData(columnName.value, columnName.valueLabels);\n }\n });\n });\n }\n\n if (chartData.settings.type === 'histogram') {\n SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING.forEach((inputName: string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as HistogramSettings['grouping'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n if (chartData.settings.type === 'dendro') {\n SAVED_IN_CHART_DATA_DENDRO_GROUPING.forEach((inputName: string) => {\n const savedByInputName = chartData.settings[inputName] as unknown as DendroSettings['heatmapAnnotation'];\n if (savedByInputName) {\n addUniqueData(savedByInputName.value, savedByInputName.valueLabels);\n }\n });\n }\n\n // sources for loading\n const selectedSources: string[] = [];\n ([...inputGuide.fullOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (info.kind === 'axis' && info.isNonHomogenous) {\n selectedSources.push(id);\n }\n });\n\n for (const source of selectedSources) {\n if (resultMap[source]) {\n continue;\n }\n if (previousUniqueValues[source] && !resultMap[source]) {\n resultMap[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n resultMap[source] = null;\n } else {\n resultMap[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return resultMap;\n}\nexport async function loadUniqueValuesToSave(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n previousUniqueValues: UniqueValuesBySourceMap // save null for too long lists of unique values\n): Promise<UniqueValuesBySourceMap> {\n const selectedSources: string[] = [];\n INPUTS_REQUESTING_UNIQUE_VALUES.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource } of componentState.selectorStates) {\n const info = inputGuide.getSourceInfo(selectedSource);\n if (inputName === 'filters' || inputName === 'highlight') {\n if (info.type === 'String' || info.type === 'Int' || info.type === 'Long') {\n selectedSources.push(selectedSource);\n }\n } else if (inputName === 'grouping' || inputName === 'x' || inputName === 'y') {\n if (info.type === 'String') {\n selectedSources.push(selectedSource);\n }\n } else {\n selectedSources.push(selectedSource);\n }\n }\n }\n });\n ([...inputGuide.fullOptionsSet]).forEach(id => {\n const info = inputGuide.getSourceInfo(id);\n if (info.kind === 'axis' && info.isNonHomogenous) {\n selectedSources.push(id);\n }\n });\n const nextUniqueValuesData: UniqueValuesBySourceMap = {};\n for (const source of selectedSources) {\n if (previousUniqueValues[source]) {\n nextUniqueValuesData[source] = previousUniqueValues[source];\n } else if (dataStore) {\n const uniqueValuesResponse = await controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, SAVED_UNIQUE_VALUES_LIMIT);\n if (uniqueValuesResponse.overflow) {\n nextUniqueValuesData[source] = null;\n } else {\n nextUniqueValuesData[source] = {\n list: uniqueValuesResponse.values.map((el) => el.value),\n options: uniqueValuesResponse.values,\n labels: uniqueValuesResponse.values.reduce((res: Record<string, string>, el) => {\n res[el.value] = el.label;\n return res;\n }, {})\n } as UniqueValuesData;\n }\n }\n }\n return nextUniqueValuesData;\n}\n\nexport async function loadFilterLabelsForTitle(\n optionsState: InputState['components'],\n inputGuide: InputGuide<InputState>,\n controller: Controller<InputState>,\n dataStore: DemoDataStore,\n): Promise<Record<string, ListOption>> {\n const selected: [string, string[]][] = [];\n const INPUTS_REQUESTING_LABELS = ['filters', 'tabBy'] as ((keyof InputState['components'])[]);\n INPUTS_REQUESTING_LABELS.forEach(inputName => {\n const componentState = optionsState[inputName];\n if (componentState) {\n for (const { selectedSource, selectedFilterValues, type } of componentState.selectorStates as SelectorStateFilter[]) {\n if (inputName === 'filters' && type === 'equals' && selectedFilterValues) {\n selected.push([selectedSource, selectedFilterValues]);\n } else if (selectedFilterValues) {\n selected.push([selectedSource, selectedFilterValues]);\n }\n }\n }\n });\n const result: Record<string, ListOption> = {};\n for (const [source, selectedValues] of selected) {\n const uniqueValuesResponses = await Promise.all(selectedValues.map((v) => controller.getUniqueSourceValuesWithLabels(dataStore, inputGuide, source, 1, undefined, v)))\n uniqueValuesResponses.forEach(response => {\n if (response.values.length === 1) {\n result[source] = response.values[0];\n }\n });\n }\n return result;\n}"],"names":["SAVED_IN_CHART_DATA_DISCRETE_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_GROUPINGS","SAVED_IN_CHART_DATA_SCATTERPLOT_XY","SAVED_IN_CHART_DATA_HISTOGRAM_GROUPING","SAVED_IN_CHART_DATA_DENDRO_GROUPING","sortValues","values","a","b","getUniqueValuesFromReadyChartData","chartData","inputGuide","controller","dataStore","previousUniqueValues","resultMap","addUniqueData","sourceId","labelId","data","dataLabels","resultSet","result","i","v","label","el","res","inputName","savedData","columnName","savedInGrouping","valueType","savedByInputName","selectedSources","id","info","source","uniqueValuesResponse","loadFilterLabelsForTitle","optionsState","selected","componentState","selectedSource","selectedFilterValues","type","selectedValues","response"],"mappings":"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"}
|