@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.
Files changed (98) hide show
  1. package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.d.ts.map +1 -1
  2. package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js +2 -1
  3. package/dist/GraphMaker/components/AesSettings/AesDataMappingDiscrete.vue.js.map +1 -1
  4. package/dist/GraphMaker/components/Chart.vue.js +3 -3
  5. package/dist/GraphMaker/components/Chart.vue.js.map +1 -1
  6. package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.d.ts +3 -12
  7. package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.d.ts.map +1 -1
  8. package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.js +42 -85
  9. package/dist/GraphMaker/components/DragAndDrop/DnDBasketChip.vue.js.map +1 -1
  10. package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.d.ts +1 -9
  11. package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.d.ts.map +1 -1
  12. package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.js +44 -89
  13. package/dist/GraphMaker/components/DragAndDrop/DnDRangeChip.vue.js.map +1 -1
  14. package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.d.ts +1 -3
  15. package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.d.ts.map +1 -1
  16. package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.js +68 -86
  17. package/dist/GraphMaker/components/DragAndDrop/DndBasket.vue.js.map +1 -1
  18. package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.d.ts +7 -11
  19. package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.d.ts.map +1 -1
  20. package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.js +48 -91
  21. package/dist/GraphMaker/components/DragAndDrop/DndDoubleChip.vue.js.map +1 -1
  22. package/dist/GraphMaker/components/DragAndDrop/types.d.ts +1 -21
  23. package/dist/GraphMaker/components/DragAndDrop/types.d.ts.map +1 -1
  24. package/dist/GraphMaker/components/PlColorSliderThumb.vue.js +18 -18
  25. package/dist/GraphMaker/components/PlColorSliderThumb.vue.js.map +1 -1
  26. package/dist/GraphMaker/constantsCommon.d.ts +0 -1
  27. package/dist/GraphMaker/constantsCommon.d.ts.map +1 -1
  28. package/dist/GraphMaker/constantsCommon.js +95 -95
  29. package/dist/GraphMaker/constantsCommon.js.map +1 -1
  30. package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.d.ts.map +1 -1
  31. package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.js +128 -166
  32. package/dist/GraphMaker/forms/DataMappingForm/DendroForm.vue.js.map +1 -1
  33. package/dist/GraphMaker/forms/DataMappingForm/useBaskets.d.ts.map +1 -1
  34. package/dist/GraphMaker/forms/DataMappingForm/useBaskets.js +93 -131
  35. package/dist/GraphMaker/forms/DataMappingForm/useBaskets.js.map +1 -1
  36. package/dist/GraphMaker/forms/DataMappingForm/utils.d.ts +1 -1
  37. package/dist/GraphMaker/forms/DataMappingForm/utils.d.ts.map +1 -1
  38. package/dist/GraphMaker/forms/DataMappingForm/utils.js +79 -155
  39. package/dist/GraphMaker/forms/DataMappingForm/utils.js.map +1 -1
  40. package/dist/GraphMaker/forms/index.js +2 -2
  41. package/dist/GraphMaker/forms/index.js.map +1 -1
  42. package/dist/GraphMaker/icons/StackedAreaIcon.vue.d.ts +3 -0
  43. package/dist/GraphMaker/icons/StackedAreaIcon.vue.d.ts.map +1 -0
  44. package/dist/GraphMaker/icons/StackedAreaIcon.vue.js +19 -0
  45. package/dist/GraphMaker/icons/StackedAreaIcon.vue.js.map +1 -0
  46. package/dist/GraphMaker/index.vue.js +1 -1
  47. package/dist/GraphMaker/store.d.ts.map +1 -1
  48. package/dist/GraphMaker/store.js +43 -45
  49. package/dist/GraphMaker/store.js.map +1 -1
  50. package/dist/GraphMaker/types.d.ts +1 -1
  51. package/dist/GraphMaker/types.d.ts.map +1 -1
  52. package/dist/GraphMaker/utils/addFixedOptionsToState.js +2 -2
  53. package/dist/GraphMaker/utils/addFixedOptionsToState.js.map +1 -1
  54. package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js +25 -25
  55. package/dist/GraphMaker/utils/createChartSettingsForRender/composeChartSettings.js.map +1 -1
  56. package/dist/GraphMaker/utils/loadDefaultSources.d.ts +2 -3
  57. package/dist/GraphMaker/utils/loadDefaultSources.d.ts.map +1 -1
  58. package/dist/GraphMaker/utils/loadDefaultSources.js +47 -51
  59. package/dist/GraphMaker/utils/loadDefaultSources.js.map +1 -1
  60. package/dist/GraphMaker/utils/loadUniqueValuesToSave.d.ts.map +1 -1
  61. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js +39 -41
  62. package/dist/GraphMaker/utils/loadUniqueValuesToSave.js.map +1 -1
  63. package/dist/lib.js +1 -1
  64. package/dist/node_modules/@milaboratories/helpers/dist/objects.js +33 -0
  65. package/dist/node_modules/@milaboratories/helpers/dist/objects.js.map +1 -0
  66. package/dist/node_modules/@milaboratories/helpers/dist/utils.js +12 -0
  67. package/dist/node_modules/@milaboratories/helpers/dist/utils.js.map +1 -0
  68. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js +6 -5
  69. package/dist/node_modules/@milaboratories/pf-plots/dist/constants.js.map +1 -1
  70. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js +146 -149
  71. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ComponentController.js.map +1 -1
  72. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js +168 -221
  73. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/ControllerBase.js.map +1 -1
  74. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js +95 -102
  75. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/bubble.js.map +1 -1
  76. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js +145 -156
  77. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/dendro.js.map +1 -1
  78. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js +68 -75
  79. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/discrete.js.map +1 -1
  80. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js +154 -159
  81. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/heatmap.js.map +1 -1
  82. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js +48 -55
  83. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/histogram.js.map +1 -1
  84. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js +114 -122
  85. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot-umap.js.map +1 -1
  86. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js +111 -119
  87. package/dist/node_modules/@milaboratories/pf-plots/dist/controllers/controllersByChartType/scatterplot.js.map +1 -1
  88. package/dist/node_modules/@milaboratories/pf-plots/dist/index.js +4 -4
  89. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js +70 -69
  90. package/dist/node_modules/@milaboratories/pf-plots/dist/pframe/ColumnsProvider.js.map +1 -1
  91. package/dist/node_modules/@milaboratories/pf-plots/dist/spec.js +2 -2
  92. package/dist/node_modules/@milaboratories/pf-plots/dist/spec.js.map +1 -1
  93. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js +184 -183
  94. package/dist/node_modules/@milaboratories/pf-plots/dist/utils.js.map +1 -1
  95. package/dist/node_modules/@vueuse/shared/index.js.map +1 -1
  96. package/package.json +4 -4
  97. package/dist/node_modules/@milaboratories/helpers/dist/index.js +0 -372
  98. 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 v } from "vue";
2
+ import { toRaw as V } from "vue";
3
3
  import { SUBSET_FILTER_KEY as h } from "../constantsCommon.js";
4
- import { AxisId as F } from "../../node_modules/@milaboratories/pf-plots/dist/spec.js";
5
- function w(n, r) {
6
- if (typeof n > "u")
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 d = Object.keys(n);
9
- return typeof r > "u" ? d.length === 0 : d.every((l) => r[l]);
8
+ const c = Object.keys(i);
9
+ return typeof s > "u" ? c.length === 0 : c.every((n) => s[n]);
10
10
  }
11
- function A(n, r, d, l) {
12
- return (r == null ? void 0 : r[h]) === "true" ? "subset" : l !== void 0 ? "range" : d !== void 0 || n === "Int" || n === "String" ? "equals" : "range";
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 B(n, r, d = !0) {
15
- const l = [], V = r.filter(({ selectedSource: e }) => "kind" in e && e.kind === "PColumn"), T = r.filter(({ selectedSource: e }) => !("kind" in e && e.kind === "PColumn")), C = [];
16
- for (const { inputName: e, filterType: f, selectedSource: S, selectedFilterValue: u, selectedFilterRange: y, fixedAxes: a } of V) {
17
- const { name: p, valueType: m, annotations: c, domain: s } = S, o = await n.pFrameProvider.findColumnBy(p, m, v(c), v(s)), x = e === "filters" || e === "tabBy" || e === "highlight";
18
- if (o) {
19
- const t = await n.pFrameProvider.getColumnSpecById(o), g = t && a ? a.map((i) => ({ axisIdx: i.axisIdx, axisValue: i.axisValue, axisSource: F.fromAxisSpec(t == null ? void 0 : t.axesSpec[i.axisIdx]).toCanonicalString() })) : [];
20
- if (!x)
21
- l.push({ inputName: e, selectedSource: o.toCanonicalString(), fixedAxes: g });
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 i = f ?? A(m, t == null ? void 0 : t.annotations, u, y), I = i === "equals" && typeof u > "u" ? (await n.pFrameProvider.getColumnUniqueValues(o, 1)).values[0] : u, R = { min: void 0, max: void 0, ...y };
24
- l.push({
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: i,
27
- selectedSource: o.toCanonicalString(),
28
- selectedFilterValue: I,
29
- selectedFilterRange: R,
30
- fixedAxes: g
26
+ filterType: r,
27
+ selectedSource: t.toCanonicalString(),
28
+ selectedFilterValues: v,
29
+ selectedFilterRange: u
31
30
  });
32
31
  }
33
- C.push(...(t == null ? void 0 : t.axesSpec.map((i) => ({ spec: i, parentColumn: o }))) ?? []);
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: S })}`);
34
+ console.warn(`Not found column for default option: ${JSON.stringify({ inputName: e, selectedSource: m })}`);
36
35
  }
37
- for (const { inputName: e, selectedSource: f, filterType: S, selectedFilterValue: u, selectedFilterRange: y } of T) {
38
- const a = F.fromAxisSpec(f), p = a.toCanonicalString(), m = e === "filters" || e === "tabBy" || e === "highlight", c = m ? S ?? A(a.type, f == null ? void 0 : f.annotations) : void 0, s = C.find((t) => F.fromAxisSpec(t.spec).toCanonicalString() === p), o = m && c === "equals" && typeof u > "u" && (s != null && s.parentColumn) ? (await n.pFrameProvider.getAxisUniqueValues(a, [s == null ? void 0 : s.parentColumn], 1)).values[0] : u, x = { min: void 0, max: void 0, ...y };
39
- if (d || l.push({
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: c,
42
- selectedSource: p,
43
- selectedFilterValue: o,
44
- selectedFilterRange: x,
45
- fixedAxes: []
46
- }), s)
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: c,
50
- selectedSource: p,
51
- selectedFilterValue: o,
52
- selectedFilterRange: x,
53
- fixedAxes: []
47
+ filterType: p,
48
+ selectedSource: f,
49
+ selectedFilterValues: g,
50
+ selectedFilterRange: l
54
51
  });
55
52
  else {
56
- const { spec: t, parentColumn: g } = C.find((i) => a.name === i.spec.name && a.type === i.spec.type && w(a.domain, i.spec.domain)) ?? {};
57
- if (t) {
58
- const i = (e === "filters" || e === "tabBy") && typeof u > "u" ? (await n.pFrameProvider.getAxisUniqueValues(F.fromAxisSpec(t), [g], 1)).values[0] : u;
59
- l.push({
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: c,
62
- selectedSource: F.fromAxisSpec(t).toCanonicalString(),
63
- selectedFilterValue: i,
64
- selectedFilterRange: x,
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 l;
66
+ return n;
71
67
  }
72
68
  export {
73
- B as loadDefaultSources
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":"AACA,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,CAoHlC;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,GAC7C,OAAO,CAAC,uBAAuB,CAAC,CAwDjC;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,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAuBpC"}
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
- import { AXIS_NATURE_KEY as v } from "../constantsCommon.js";
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
- ], d = (o) => o.sort((l, _) => l.label.localeCompare(_.label, "en", { numeric: !0 }));
9
- async function m(o, l, _, g, f) {
10
- const a = {};
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, S = /* @__PURE__ */ new Set(), p = [];
13
- for (let u = 0; u < t.length; u++) {
14
- const r = String(t[u]);
15
- if (S.has(r))
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 (S.size === A) {
18
- a[s] = null;
16
+ if (p.size === 100) {
17
+ u[s] = null;
19
18
  return;
20
19
  }
21
- S.add(r);
22
- const E = n ? String(n[u]) : r;
23
- p.push({ value: r, label: E });
20
+ p.add(r);
21
+ const A = n ? String(n[a]) : r;
22
+ _.push({ value: r, label: A });
24
23
  }
25
- d(p), a[s] = {
26
- list: p.map((u) => u.value),
27
- labels: p.reduce((u, r) => (u[r.value] = r.label, u), {}),
28
- options: p
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" && T.forEach((s) => {
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") && (I.forEach((s) => {
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
- }), y.forEach((s) => {
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" && R.forEach((s) => {
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" && b.forEach((s) => {
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.freeOptionsSet].forEach((s) => {
55
- var t, n, S;
53
+ [...l.fullOptionsSet].forEach((s) => {
56
54
  const e = l.getSourceInfo(s);
57
- e.kind === "axis" && ((t = e.annotations) != null && t[v]) && ((n = e.annotations) == null ? void 0 : n[v]) !== "homogeneous" && ((S = e.annotations) == null ? void 0 : S[v]) !== "homogenous" && c.push(s);
55
+ e.kind === "axis" && e.isNonHomogenous && c.push(s);
58
56
  });
59
57
  for (const s of c)
60
- if (!a[s]) {
61
- if (f[s] && !a[s])
62
- a[s] = f[s];
63
- else if (g) {
64
- const e = await _.getUniqueSourceValuesWithLabels(g, l, s, A);
65
- e.overflow ? a[s] = null : a[s] = {
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 a;
70
+ return u;
73
71
  }
74
- async function N(o, l, _, g) {
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, selectedFilterValue: t, type: n } of s.selectorStates)
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
- const e = await _.getUniqueSourceValuesWithLabels(g, l, c, 1, void 0, s);
85
- e.values.length === 1 && (i[c] = e.values[0]);
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
- m as getUniqueValuesFromReadyChartData,
91
- N as loadFilterLabelsForTitle
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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"}